diff --git a/EXE version/Plants vs Zombies.lnk b/EXE version/Plants vs Zombies.lnk new file mode 100644 index 00000000..fb05412d Binary files /dev/null and b/EXE version/Plants vs Zombies.lnk differ diff --git a/EXE version/main/SDL2.dll b/EXE version/main/SDL2.dll new file mode 100644 index 00000000..4553fa95 Binary files /dev/null and b/EXE version/main/SDL2.dll differ diff --git a/EXE version/main/SDL2_image.dll b/EXE version/main/SDL2_image.dll new file mode 100644 index 00000000..d7016555 Binary files /dev/null and b/EXE version/main/SDL2_image.dll differ diff --git a/EXE version/main/SDL2_mixer.dll b/EXE version/main/SDL2_mixer.dll new file mode 100644 index 00000000..40bb1c14 Binary files /dev/null and b/EXE version/main/SDL2_mixer.dll differ diff --git a/EXE version/main/SDL2_ttf.dll b/EXE version/main/SDL2_ttf.dll new file mode 100644 index 00000000..575636a9 Binary files /dev/null and b/EXE version/main/SDL2_ttf.dll differ diff --git a/EXE version/main/VCRUNTIME140.dll b/EXE version/main/VCRUNTIME140.dll new file mode 100644 index 00000000..5de800bb Binary files /dev/null and b/EXE version/main/VCRUNTIME140.dll differ diff --git a/EXE version/main/_asyncio.pyd b/EXE version/main/_asyncio.pyd new file mode 100644 index 00000000..b0167176 Binary files /dev/null and b/EXE version/main/_asyncio.pyd differ diff --git a/EXE version/main/_bz2.pyd b/EXE version/main/_bz2.pyd new file mode 100644 index 00000000..0c6d8c01 Binary files /dev/null and b/EXE version/main/_bz2.pyd differ diff --git a/EXE version/main/_camera.h b/EXE version/main/_camera.h new file mode 100644 index 00000000..68ae9894 --- /dev/null +++ b/EXE version/main/_camera.h @@ -0,0 +1,27 @@ +/* + pygame - Python Game Library + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this library; if not, write to the Free + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*/ + +#ifndef _CAMERA_H +#define _CAMERA_H + +#include "_pygame.h" +#include "camera.h" + +#endif + diff --git a/EXE version/main/_ctypes.pyd b/EXE version/main/_ctypes.pyd new file mode 100644 index 00000000..984eabf9 Binary files /dev/null and b/EXE version/main/_ctypes.pyd differ diff --git a/EXE version/main/_decimal.pyd b/EXE version/main/_decimal.pyd new file mode 100644 index 00000000..060f288b Binary files /dev/null and b/EXE version/main/_decimal.pyd differ diff --git a/EXE version/main/_hashlib.pyd b/EXE version/main/_hashlib.pyd new file mode 100644 index 00000000..1cabad58 Binary files /dev/null and b/EXE version/main/_hashlib.pyd differ diff --git a/EXE version/main/_lzma.pyd b/EXE version/main/_lzma.pyd new file mode 100644 index 00000000..4d3cc6ad Binary files /dev/null and b/EXE version/main/_lzma.pyd differ diff --git a/EXE version/main/_multiprocessing.pyd b/EXE version/main/_multiprocessing.pyd new file mode 100644 index 00000000..12bf70e1 Binary files /dev/null and b/EXE version/main/_multiprocessing.pyd differ diff --git a/EXE version/main/_overlapped.pyd b/EXE version/main/_overlapped.pyd new file mode 100644 index 00000000..f5a6cfaa Binary files /dev/null and b/EXE version/main/_overlapped.pyd differ diff --git a/EXE version/main/_pygame.h b/EXE version/main/_pygame.h new file mode 100644 index 00000000..aad4f760 --- /dev/null +++ b/EXE version/main/_pygame.h @@ -0,0 +1,361 @@ +/* + pygame - Python Game Library + Copyright (C) 2000-2001 Pete Shinners + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this library; if not, write to the Free + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Pete Shinners + pete@shinners.org +*/ + +/* This will use PYGAMEAPI_EXTERN_SLOTS instead + * of PYGAMEAPI_DEFINE_SLOTS for base modules. + */ +#ifndef _PYGAME_INTERNAL_H +#define _PYGAME_INTERNAL_H + +#include "pgplatform.h" +/* + If PY_SSIZE_T_CLEAN is defined before including Python.h, length is a + Py_ssize_t rather than an int for all # variants of formats (s#, y#, etc.) +*/ +#define PY_SSIZE_T_CLEAN +#include + +/* Ensure PyPy-specific code is not in use when running on GraalPython (PR #2580) */ +#if defined(GRAALVM_PYTHON) && defined(PYPY_VERSION) +#undef PYPY_VERSION +#endif + +#include + +/* IS_SDLv1 is 1 if SDL 1.x.x, 0 otherwise */ +/* IS_SDLv2 is 1 if at least SDL 2.0.0, 0 otherwise */ +#if !(SDL_VERSION_ATLEAST(2, 0, 0)) +#define IS_SDLv2 0 +#define IS_SDLv1 1 +#else +#define IS_SDLv2 1 +#define IS_SDLv1 0 +#endif + +/*#if IS_SDLv1 && PG_MAJOR_VERSION >= 2 +#error pygame 2 requires SDL 2 +#endif*/ + +#if IS_SDLv2 +/* SDL 1.2 constants removed from SDL 2 */ +typedef enum { + SDL_HWSURFACE = 0, + SDL_RESIZABLE = SDL_WINDOW_RESIZABLE, + SDL_ASYNCBLIT = 0, + SDL_OPENGL = SDL_WINDOW_OPENGL, + SDL_OPENGLBLIT = 0, + SDL_ANYFORMAT = 0, + SDL_HWPALETTE = 0, + SDL_DOUBLEBUF = 0, + SDL_FULLSCREEN = SDL_WINDOW_FULLSCREEN, + SDL_HWACCEL = 0, + SDL_SRCCOLORKEY = 0, + SDL_RLEACCELOK = 0, + SDL_SRCALPHA = 0, + SDL_NOFRAME = SDL_WINDOW_BORDERLESS, + SDL_GL_SWAP_CONTROL = 0, + TIMER_RESOLUTION = 0 +} PygameVideoFlags; + +/* the wheel button constants were removed from SDL 2 */ +typedef enum { + PGM_BUTTON_LEFT = SDL_BUTTON_LEFT, + PGM_BUTTON_RIGHT = SDL_BUTTON_RIGHT, + PGM_BUTTON_MIDDLE = SDL_BUTTON_MIDDLE, + PGM_BUTTON_WHEELUP = 4, + PGM_BUTTON_WHEELDOWN = 5, + PGM_BUTTON_X1 = SDL_BUTTON_X1 + 2, + PGM_BUTTON_X2 = SDL_BUTTON_X2 + 2, + PGM_BUTTON_KEEP = 0x80 +} PygameMouseFlags; + +typedef enum { + /* Any SDL_* events here are for backward compatibility. */ + SDL_NOEVENT = 0, + + SDL_ACTIVEEVENT = SDL_USEREVENT, + SDL_VIDEORESIZE, + SDL_VIDEOEXPOSE, + + PGE_MIDIIN, + PGE_MIDIOUT, + PGE_KEYREPEAT, /* Special internal pygame event, for managing key-presses */ + + /* DO NOT CHANGE THE ORDER OF EVENTS HERE */ + PGE_WINDOWSHOWN, + PGE_WINDOWHIDDEN, + PGE_WINDOWEXPOSED, + PGE_WINDOWMOVED, + PGE_WINDOWRESIZED, + PGE_WINDOWSIZECHANGED, + PGE_WINDOWMINIMIZED, + PGE_WINDOWMAXIMIZED, + PGE_WINDOWRESTORED, + PGE_WINDOWENTER, + PGE_WINDOWLEAVE, + PGE_WINDOWFOCUSGAINED, + PGE_WINDOWFOCUSLOST, + PGE_WINDOWCLOSE, + PGE_WINDOWTAKEFOCUS, + PGE_WINDOWHITTEST, + + /* Here we define PGPOST_* events, events that act as a one-to-one + * proxy for SDL events (and some extra events too!), the proxy is used + * internally when pygame users use event.post() + * + * At a first glance, these may look redundant, but they are really + * important, especially with event blocking. If proxy events are + * not there, blocked events dont make it to our event filter, and + * that can break a lot of stuff. + * + * IMPORTANT NOTE: Do not post events directly with these proxy types, + * use the appropriate functions from event.c, that handle these proxy + * events for you. + * Proxy events are for internal use only */ + PGPOST_EVENTBEGIN, /* mark start of proxy-events */ + PGPOST_ACTIVEEVENT = PGPOST_EVENTBEGIN, + PGPOST_AUDIODEVICEADDED, + PGPOST_AUDIODEVICEREMOVED, + PGPOST_CONTROLLERAXISMOTION, + PGPOST_CONTROLLERBUTTONDOWN, + PGPOST_CONTROLLERBUTTONUP, + PGPOST_CONTROLLERDEVICEADDED, + PGPOST_CONTROLLERDEVICEREMOVED, + PGPOST_CONTROLLERDEVICEREMAPPED, + PGPOST_CONTROLLERTOUCHPADDOWN, + PGPOST_CONTROLLERTOUCHPADMOTION, + PGPOST_CONTROLLERTOUCHPADUP, + PGPOST_DOLLARGESTURE, + PGPOST_DOLLARRECORD, + PGPOST_DROPFILE, + PGPOST_DROPTEXT, + PGPOST_DROPBEGIN, + PGPOST_DROPCOMPLETE, + PGPOST_FINGERMOTION, + PGPOST_FINGERDOWN, + PGPOST_FINGERUP, + PGPOST_KEYDOWN, + PGPOST_KEYUP, + PGPOST_JOYAXISMOTION, + PGPOST_JOYBALLMOTION, + PGPOST_JOYHATMOTION, + PGPOST_JOYBUTTONDOWN, + PGPOST_JOYBUTTONUP, + PGPOST_JOYDEVICEADDED, + PGPOST_JOYDEVICEREMOVED, + PGPOST_MIDIIN, + PGPOST_MIDIOUT, + PGPOST_MOUSEMOTION, + PGPOST_MOUSEBUTTONDOWN, + PGPOST_MOUSEBUTTONUP, + PGPOST_MOUSEWHEEL, + PGPOST_MULTIGESTURE, + PGPOST_NOEVENT, + PGPOST_QUIT, + PGPOST_SYSWMEVENT, + PGPOST_TEXTEDITING, + PGPOST_TEXTINPUT, + PGPOST_VIDEORESIZE, + PGPOST_VIDEOEXPOSE, + PGPOST_WINDOWSHOWN, + PGPOST_WINDOWHIDDEN, + PGPOST_WINDOWEXPOSED, + PGPOST_WINDOWMOVED, + PGPOST_WINDOWRESIZED, + PGPOST_WINDOWSIZECHANGED, + PGPOST_WINDOWMINIMIZED, + PGPOST_WINDOWMAXIMIZED, + PGPOST_WINDOWRESTORED, + PGPOST_WINDOWENTER, + PGPOST_WINDOWLEAVE, + PGPOST_WINDOWFOCUSGAINED, + PGPOST_WINDOWFOCUSLOST, + PGPOST_WINDOWCLOSE, + PGPOST_WINDOWTAKEFOCUS, + PGPOST_WINDOWHITTEST, + + PGE_USEREVENT, /* this event must stay in this position only */ + + PG_NUMEVENTS = SDL_LASTEVENT /* Not an event. Indicates end of user events. */ +} PygameEventCode; + +typedef enum { + SDL_APPFOCUSMOUSE, + SDL_APPINPUTFOCUS, + SDL_APPACTIVE +} PygameAppCode; + +/* Surface flags: based on SDL 1.2 flags */ +typedef enum { + PGS_SWSURFACE = 0x00000000, + PGS_HWSURFACE = 0x00000001, + PGS_ASYNCBLIT = 0x00000004, + + PGS_ANYFORMAT = 0x10000000, + PGS_HWPALETTE = 0x20000000, + PGS_DOUBLEBUF = 0x40000000, + PGS_FULLSCREEN = 0x80000000, + PGS_SCALED = 0x00000200, + + PGS_OPENGL = 0x00000002, + PGS_OPENGLBLIT = 0x0000000A, + PGS_RESIZABLE = 0x00000010, + PGS_NOFRAME = 0x00000020, + PGS_SHOWN = 0x00000040, /* Added from SDL 2 */ + PGS_HIDDEN = 0x00000080, /* Added from SDL 2 */ + + PGS_HWACCEL = 0x00000100, + PGS_SRCCOLORKEY = 0x00001000, + PGS_RLEACCELOK = 0x00002000, + PGS_RLEACCEL = 0x00004000, + PGS_SRCALPHA = 0x00010000, + PGS_PREALLOC = 0x01000000 +} PygameSurfaceFlags; + +#else /* IS_SDLv2 */ + +/* To maintain SDL 1.2 build support. */ +#define PGE_USEREVENT SDL_USEREVENT +#define PG_NUMEVENTS SDL_NUMEVENTS +#define PGPOST_EVENTBEGIN 0 +/* These midi events were originally defined in midi.py. + * Note: They are outside the SDL_USEREVENT/SDL_NUMEVENTS event range for + * SDL 1.2. */ +#define PGE_MIDIIN PGE_USEREVENT + 10 +#define PGE_MIDIOUT PGE_USEREVENT + 11 +#endif /* IS_SDLv1 */ + +//TODO Implement check below in a way that does not break CI +/* New buffer protocol (PEP 3118) implemented on all supported Py versions. +#if !defined(Py_TPFLAGS_HAVE_NEWBUFFER) +#error No support for PEP 3118/Py_TPFLAGS_HAVE_NEWBUFFER. Please use a supported Python version. +#endif */ + +#define RAISE(x, y) (PyErr_SetString((x), (y)), (PyObject *)NULL) +#define DEL_ATTR_NOT_SUPPORTED_CHECK(name, value) \ + do { \ + if (!value) { \ + if (name) { \ + PyErr_Format(PyExc_AttributeError, \ + "Cannot delete attribute %s", \ + name); \ + } else { \ + PyErr_SetString(PyExc_AttributeError, \ + "Cannot delete attribute"); \ + } \ + return -1; \ + } \ + } while (0) + +/* + * Initialization checks + */ + +#define VIDEO_INIT_CHECK() \ + if (!SDL_WasInit(SDL_INIT_VIDEO)) \ + return RAISE(pgExc_SDLError, "video system not initialized") + +#define CDROM_INIT_CHECK() \ + if (!SDL_WasInit(SDL_INIT_CDROM)) \ + return RAISE(pgExc_SDLError, "cdrom system not initialized") + +#define JOYSTICK_INIT_CHECK() \ + if (!SDL_WasInit(SDL_INIT_JOYSTICK)) \ + return RAISE(pgExc_SDLError, "joystick system not initialized") + +/* thread check */ +#ifdef WITH_THREAD +#define PG_CHECK_THREADS() (1) +#else /* ~WITH_THREAD */ +#define PG_CHECK_THREADS() \ + (RAISE(PyExc_NotImplementedError, \ + "Python built without thread support")) +#endif /* ~WITH_THREAD */ + +#define PyType_Init(x) (((x).ob_type) = &PyType_Type) + +/* + * event module internals + */ +struct pgEventObject { + PyObject_HEAD int type; + PyObject *dict; +}; + +/* + * surflock module internals + */ +typedef struct { + PyObject_HEAD PyObject *surface; + PyObject *lockobj; + PyObject *weakrefs; +} pgLifetimeLockObject; + +/* + * surface module internals + */ +struct pgSubSurface_Data { + PyObject *owner; + int pixeloffset; + int offsetx, offsety; +}; + +/* + * color module internals + */ +struct pgColorObject { + PyObject_HEAD + Uint8 data[4]; + Uint8 len; +}; + +/* + * include public API + */ +#include "include/_pygame.h" + +#include "pgimport.h" + +/* Slot counts. + * Remember to keep these constants up to date. + */ + +#define PYGAMEAPI_RECT_NUMSLOTS 5 +#define PYGAMEAPI_JOYSTICK_NUMSLOTS 2 +#define PYGAMEAPI_DISPLAY_NUMSLOTS 2 +#define PYGAMEAPI_SURFACE_NUMSLOTS 4 +#define PYGAMEAPI_SURFLOCK_NUMSLOTS 8 +#define PYGAMEAPI_RWOBJECT_NUMSLOTS 6 +#define PYGAMEAPI_PIXELARRAY_NUMSLOTS 2 +#define PYGAMEAPI_COLOR_NUMSLOTS 5 +#define PYGAMEAPI_MATH_NUMSLOTS 2 +#define PYGAMEAPI_CDROM_NUMSLOTS 2 + +#if PG_API_VERSION == 1 +#define PYGAMEAPI_BASE_NUMSLOTS 19 +#define PYGAMEAPI_EVENT_NUMSLOTS 4 +#else /* PG_API_VERSION == 2 */ +#define PYGAMEAPI_BASE_NUMSLOTS 24 +#define PYGAMEAPI_EVENT_NUMSLOTS 6 +#endif /* PG_API_VERSION == 2 */ + +#endif /* _PYGAME_INTERNAL_H */ diff --git a/EXE version/main/_queue.pyd b/EXE version/main/_queue.pyd new file mode 100644 index 00000000..e2d2b2c3 Binary files /dev/null and b/EXE version/main/_queue.pyd differ diff --git a/EXE version/main/_socket.pyd b/EXE version/main/_socket.pyd new file mode 100644 index 00000000..61f8f902 Binary files /dev/null and b/EXE version/main/_socket.pyd differ diff --git a/EXE version/main/_ssl.pyd b/EXE version/main/_ssl.pyd new file mode 100644 index 00000000..b1d02908 Binary files /dev/null and b/EXE version/main/_ssl.pyd differ diff --git a/EXE version/main/_surface.h b/EXE version/main/_surface.h new file mode 100644 index 00000000..016aac01 --- /dev/null +++ b/EXE version/main/_surface.h @@ -0,0 +1,31 @@ +/* + pygame - Python Game Library + Copyright (C) 2000-2001 Pete Shinners + Copyright (C) 2007 Marcus von Appen + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this library; if not, write to the Free + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Pete Shinners + pete@shinners.org +*/ + +#ifndef _SURFACE_H +#define _SURFACE_H + +#include "_pygame.h" +#include "surface.h" + +#endif + diff --git a/EXE version/main/_uuid.pyd b/EXE version/main/_uuid.pyd new file mode 100644 index 00000000..27ccd3dd Binary files /dev/null and b/EXE version/main/_uuid.pyd differ diff --git a/EXE version/main/altgraph-0.17.2.dist-info/INSTALLER b/EXE version/main/altgraph-0.17.2.dist-info/INSTALLER new file mode 100644 index 00000000..a1b589e3 --- /dev/null +++ b/EXE version/main/altgraph-0.17.2.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/EXE version/main/altgraph-0.17.2.dist-info/LICENSE b/EXE version/main/altgraph-0.17.2.dist-info/LICENSE new file mode 100644 index 00000000..6013a212 --- /dev/null +++ b/EXE version/main/altgraph-0.17.2.dist-info/LICENSE @@ -0,0 +1,18 @@ +Copyright (c) 2004 Istvan Albert unless otherwise noted. +Copyright (c) 2006-2010 Bob Ippolito +Copyright (2) 2010-2020 Ronald Oussoren, et. al. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to +deal in the Software without restriction, including without limitation the +rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +IN THE SOFTWARE. diff --git a/EXE version/main/altgraph-0.17.2.dist-info/METADATA b/EXE version/main/altgraph-0.17.2.dist-info/METADATA new file mode 100644 index 00000000..02551a62 --- /dev/null +++ b/EXE version/main/altgraph-0.17.2.dist-info/METADATA @@ -0,0 +1,289 @@ +Metadata-Version: 2.1 +Name: altgraph +Version: 0.17.2 +Summary: Python graph (network) package +Home-page: https://altgraph.readthedocs.io +Author: Ronald Oussoren +Author-email: ronaldoussoren@mac.com +Maintainer: Ronald Oussoren +Maintainer-email: ronaldoussoren@mac.com +License: MIT +Download-URL: http://pypi.python.org/pypi/altgraph +Keywords: graph +Platform: any +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: MIT License +Classifier: Programming Language :: Python +Classifier: Programming Language :: Python :: 2 +Classifier: Programming Language :: Python :: 2.7 +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3.4 +Classifier: Programming Language :: Python :: 3.5 +Classifier: Programming Language :: Python :: 3.6 +Classifier: Programming Language :: Python :: 3.7 +Classifier: Programming Language :: Python :: 3.8 +Classifier: Programming Language :: Python :: 3.9 +Classifier: Programming Language :: Python :: 3.10 +Classifier: Topic :: Software Development :: Libraries :: Python Modules +Classifier: Topic :: Scientific/Engineering :: Mathematics +Classifier: Topic :: Scientific/Engineering :: Visualization +Description-Content-Type: text/x-rst; charset=UTF-8 +License-File: LICENSE +Project-URL: Documentation, https://altgraph.readthedocs.io/en/latest/ +Project-URL: Issue tracker, https://github.com/ronaldoussoren/altgraph/issues +Project-URL: Repository, https://github.com/ronaldoussoren/altgraph + +altgraph is a fork of graphlib: a graph (network) package for constructing +graphs, BFS and DFS traversals, topological sort, shortest paths, etc. with +graphviz output. + +altgraph includes some additional usage of Python 2.6+ features and +enhancements related to modulegraph and macholib. + +CI status +--------- + +.. image:: https://github.com/ronaldoussoren/altgraph/workflows/Lint/badge.svg +.. image:: https://github.com/ronaldoussoren/altgraph/workflows/Test/badge.svg + +Project links +------------- + +* `Documentation `_ + +* `Issue Tracker `_ + +* `Repository `_ + + +Release history +=============== + +0.17.1 +------ + +* Explicitly mark Python 3.10 as supported in wheel metadata. + +0.17 +---- + +* Explicitly mark Python 3.8 as supported in wheel metadata. + +* Migrate from Bitbucket to GitHub + +* Run black on the entire repository + +0.16.1 +------ + +* Explicitly mark Python 3.7 as supported in wheel metadata. + +0.16 +---- + +* Add LICENSE file + +0.15 +---- + +* ``ObjectGraph.get_edges``, ``ObjectGraph.getEdgeData`` and ``ObjectGraph.updateEdgeData`` + accept *None* as the node to get and treat this as an alias for *self* (as other + methods already did). + +0.14 +---- + +- Issue #7: Remove use of ``iteritems`` in altgraph.GraphAlgo code + +0.13 +---- + +- Issue #4: Graph._bfs_subgraph and back_bfs_subgraph return subgraphs with reversed edges + + Fix by "pombredanne" on bitbucket. + + +0.12 +---- + +- Added ``ObjectGraph.edgeData`` to retrieve the edge data + from a specific edge. + +- Added ``AltGraph.update_edge_data`` and ``ObjectGraph.updateEdgeData`` + to update the data associated with a graph edge. + +0.11 +---- + +- Stabilize the order of elements in dot file exports, + patch from bitbucket user 'pombredanne'. + +- Tweak setup.py file to remove dependency on distribute (but + keep the dependency on setuptools) + + +0.10.2 +------ + +- There where no classifiers in the package metadata due to a bug + in setup.py + +0.10.1 +------ + +This is a bugfix release + +Bug fixes: + +- Issue #3: The source archive contains a README.txt + while the setup file refers to ReadMe.txt. + + This is caused by a misfeature in distutils, as a + workaround I've renamed ReadMe.txt to README.txt + in the source tree and setup file. + + +0.10 +----- + +This is a minor feature release + +Features: + +- Do not use "2to3" to support Python 3. + + As a side effect of this altgraph now supports + Python 2.6 and later, and no longer supports + earlier releases of Python. + +- The order of attributes in the Dot output + is now always alphabetical. + + With this change the output will be consistent + between runs and Python versions. + +0.9 +--- + +This is a minor bugfix release + +Features: + +- Added ``altgraph.ObjectGraph.ObjectGraph.nodes``, a method + yielding all nodes in an object graph. + +Bugfixes: + +- The 0.8 release didn't work with py2app when using + python 3.x. + + +0.8 +----- + +This is a minor feature release. The major new feature +is a extensive set of unittests, which explains almost +all other changes in this release. + +Bugfixes: + +- Installing failed with Python 2.5 due to using a distutils + class that isn't available in that version of Python + (issue #1 on the issue tracker) + +- ``altgraph.GraphStat.degree_dist`` now actually works + +- ``altgraph.Graph.add_edge(a, b, create_nodes=False)`` will + no longer create the edge when one of the nodes doesn't + exist. + +- ``altgraph.Graph.forw_topo_sort`` failed for some sparse graphs. + +- ``altgraph.Graph.back_topo_sort`` was completely broken in + previous releases. + +- ``altgraph.Graph.forw_bfs_subgraph`` now actually works. + +- ``altgraph.Graph.back_bfs_subgraph`` now actually works. + +- ``altgraph.Graph.iterdfs`` now returns the correct result + when the ``forward`` argument is ``False``. + +- ``altgraph.Graph.iterdata`` now returns the correct result + when the ``forward`` argument is ``False``. + + +Features: + +- The ``altgraph.Graph`` constructor now accepts an argument + that contains 2- and 3-tuples instead of requireing that + all items have the same size. The (optional) argument can now + also be any iterator. + +- ``altgraph.Graph.Graph.add_node`` has no effect when you + add a hidden node. + +- The private method ``altgraph.Graph._bfs`` is no longer + present. + +- The private method ``altgraph.Graph._dfs`` is no longer + present. + +- ``altgraph.ObjectGraph`` now has a ``__contains__`` methods, + which means you can use the ``in`` operator to check if a + node is part of a graph. + +- ``altgraph.GraphUtil.generate_random_graph`` will raise + ``GraphError`` instead of looping forever when it is + impossible to create the requested graph. + +- ``altgraph.Dot.edge_style`` raises ``GraphError`` when + one of the nodes is not present in the graph. The method + silently added the tail in the past, but without ensuring + a consistent graph state. + +- ``altgraph.Dot.save_img`` now works when the mode is + ``"neato"``. + +0.7.2 +----- + +This is a minor bugfix release + +Bugfixes: + +- distutils didn't include the documentation subtree + +0.7.1 +----- + +This is a minor feature release + +Features: + +- Documentation is now generated using `sphinx `_ + and can be viewed at . + +- The repository has moved to bitbucket + +- ``altgraph.GraphStat.avg_hops`` is no longer present, the function had no + implementation and no specified behaviour. + +- the module ``altgraph.compat`` is gone, which means altgraph will no + longer work with Python 2.3. + + +0.7.0 +----- + +This is a minor feature release. + +Features: + +- Support for Python 3 + +- It is now possible to run tests using 'python setup.py test' + + (The actual testsuite is still very minimal though) + + diff --git a/EXE version/main/altgraph-0.17.2.dist-info/RECORD b/EXE version/main/altgraph-0.17.2.dist-info/RECORD new file mode 100644 index 00000000..d93b5ad6 --- /dev/null +++ b/EXE version/main/altgraph-0.17.2.dist-info/RECORD @@ -0,0 +1,21 @@ +altgraph-0.17.2.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +altgraph-0.17.2.dist-info/LICENSE,sha256=bBlNbbDGTUVTXRDJUUK5sM2nt9zH8d3uMCs9U289vkY,1002 +altgraph-0.17.2.dist-info/METADATA,sha256=F3Nk9zBKSMii3kNr_Ju4si34--Zoud_UMHFHsZT6yt8,7221 +altgraph-0.17.2.dist-info/RECORD,, +altgraph-0.17.2.dist-info/WHEEL,sha256=Z-nyYpwrcSqxfdux5Mbn_DQ525iP7J2DG3JgGvOYyTQ,110 +altgraph-0.17.2.dist-info/top_level.txt,sha256=HEBeRWf5ItVPc7Y9hW7hGlrLXZjPoL4by6CAhBV_BwA,9 +altgraph-0.17.2.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1 +altgraph/Dot.py,sha256=fHS-GozpcEKyWxW2v110JaFMS68iIc0oYFlFDuNQgOQ,9901 +altgraph/Graph.py,sha256=6b6fSHLA5QSqMDnSHIO7_WJnBYIdq3K5Bt8VipRODwg,20788 +altgraph/GraphAlgo.py,sha256=Uu9aTjSKWi38iQ_e9ZrwCnzQaI1WWFDhJ6kfmu0jxAA,5645 +altgraph/GraphStat.py,sha256=vj3VqCOkzpAKggxVFLE_AlMIfPm1WN17DX4rbZjXAx4,1890 +altgraph/GraphUtil.py,sha256=1T4DJc2bJn6EIU_Ct4m0oiKlXWkXvqcXE8CGL2K9en8,3990 +altgraph/ObjectGraph.py,sha256=o7fPJtyBEgJSXAkUjzvj35B-FOY4uKzfLGqSvTitx8c,6490 +altgraph/__init__.py,sha256=YtY-rHf6X_lYk8820da2uVZT-C-B9KGpGXvBg1oZ0Fc,5015 +altgraph/__pycache__/Dot.cpython-39.pyc,, +altgraph/__pycache__/Graph.cpython-39.pyc,, +altgraph/__pycache__/GraphAlgo.cpython-39.pyc,, +altgraph/__pycache__/GraphStat.cpython-39.pyc,, +altgraph/__pycache__/GraphUtil.cpython-39.pyc,, +altgraph/__pycache__/ObjectGraph.cpython-39.pyc,, +altgraph/__pycache__/__init__.cpython-39.pyc,, diff --git a/EXE version/main/altgraph-0.17.2.dist-info/WHEEL b/EXE version/main/altgraph-0.17.2.dist-info/WHEEL new file mode 100644 index 00000000..01b8fc7d --- /dev/null +++ b/EXE version/main/altgraph-0.17.2.dist-info/WHEEL @@ -0,0 +1,6 @@ +Wheel-Version: 1.0 +Generator: bdist_wheel (0.36.2) +Root-Is-Purelib: true +Tag: py2-none-any +Tag: py3-none-any + diff --git a/EXE version/main/altgraph-0.17.2.dist-info/top_level.txt b/EXE version/main/altgraph-0.17.2.dist-info/top_level.txt new file mode 100644 index 00000000..5ad6b8ad --- /dev/null +++ b/EXE version/main/altgraph-0.17.2.dist-info/top_level.txt @@ -0,0 +1 @@ +altgraph diff --git a/EXE version/main/altgraph-0.17.2.dist-info/zip-safe b/EXE version/main/altgraph-0.17.2.dist-info/zip-safe new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/EXE version/main/altgraph-0.17.2.dist-info/zip-safe @@ -0,0 +1 @@ + diff --git a/EXE version/main/base_library.zip b/EXE version/main/base_library.zip new file mode 100644 index 00000000..f2fe6146 Binary files /dev/null and b/EXE version/main/base_library.zip differ diff --git a/EXE version/main/camera.h b/EXE version/main/camera.h new file mode 100644 index 00000000..50010617 --- /dev/null +++ b/EXE version/main/camera.h @@ -0,0 +1,205 @@ +#ifndef CAMERA_H +#define CAMERA_H +/* + pygame - Python Game Library + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this library; if not, write to the Free + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*/ + +#include "pygame.h" +#include "doc/camera_doc.h" + +#if defined(__unix__) + #include + #include + #include + #include + #include + + #include /* low-level i/o */ + #include + #include + #include + #include + #include + #include + #include + + /* on freebsd there is no asm/types */ + #ifdef linux + #include /* for videodev2.h */ + #endif + + #include +#elif defined(__APPLE__) + #include + /* We support OSX 10.6 and below. */ + #if __MAC_OS_X_VERSION_MAX_ALLOWED <= 1060 + #define PYGAME_MAC_CAMERA_OLD 1 + #endif +#endif + +#if defined(PYGAME_MAC_CAMERA_OLD) + #include + #include + #include +#endif + +/* some constants used which are not defined on non-v4l machines. */ +#ifndef V4L2_PIX_FMT_RGB24 + #define V4L2_PIX_FMT_RGB24 'RGB3' +#endif +#ifndef V4L2_PIX_FMT_RGB444 + #define V4L2_PIX_FMT_RGB444 'R444' +#endif +#ifndef V4L2_PIX_FMT_YUYV + #define V4L2_PIX_FMT_YUYV 'YUYV' +#endif + +#define CLEAR(x) memset (&(x), 0, sizeof (x)) +#define SAT(c) if (c & (~255)) { if (c < 0) c = 0; else c = 255; } +#define SAT2(c) ((c) & (~255) ? ((c) < 0 ? 0 : 255) : (c)) +#define DEFAULT_WIDTH 640 +#define DEFAULT_HEIGHT 480 +#define RGB_OUT 1 +#define YUV_OUT 2 +#define HSV_OUT 4 +#define CAM_V4L 1 /* deprecated. the incomplete support in pygame was removed */ +#define CAM_V4L2 2 + +struct buffer { + void * start; + size_t length; +}; + +#if defined(__unix__) +typedef struct pgCameraObject { + PyObject_HEAD + char* device_name; + int camera_type; + unsigned long pixelformat; + unsigned int color_out; + struct buffer* buffers; + unsigned int n_buffers; + int width; + int height; + int size; + int hflip; + int vflip; + int brightness; + int fd; +} pgCameraObject; +#elif defined(PYGAME_MAC_CAMERA_OLD) +typedef struct pgCameraObject { + PyObject_HEAD + char* device_name; /* unique name of the device */ + OSType pixelformat; + unsigned int color_out; + SeqGrabComponent component; /* A type used by the Sequence Grabber API */ + SGChannel channel; /* Channel of the Sequence Grabber */ + GWorldPtr gworld; /* Pointer to the struct that holds the data of the captured image */ + Rect boundsRect; /* bounds of the image frame */ + long size; /* size of the image in our buffer to draw */ + int hflip; + int vflip; + short depth; + struct buffer pixels; + //struct buffer tmp_pixels /* place where the flipped image in temporarily stored if hflip or vflip is true.*/ +} pgCameraObject; + +#else +/* generic definition. +*/ + +typedef struct pgCameraObject { + PyObject_HEAD + char* device_name; + int camera_type; + unsigned long pixelformat; + unsigned int color_out; + struct buffer* buffers; + unsigned int n_buffers; + int width; + int height; + int size; + int hflip; + int vflip; + int brightness; + int fd; +} pgCameraObject; +#endif + +/* internal functions for colorspace conversion */ +void colorspace (SDL_Surface *src, SDL_Surface *dst, int cspace); +void rgb24_to_rgb (const void* src, void* dst, int length, SDL_PixelFormat* format); +void rgb444_to_rgb (const void* src, void* dst, int length, SDL_PixelFormat* format); +void rgb_to_yuv (const void* src, void* dst, int length, + unsigned long source, SDL_PixelFormat* format); +void rgb_to_hsv (const void* src, void* dst, int length, + unsigned long source, SDL_PixelFormat* format); +void yuyv_to_rgb (const void* src, void* dst, int length, SDL_PixelFormat* format); +void yuyv_to_yuv (const void* src, void* dst, int length, SDL_PixelFormat* format); +void uyvy_to_rgb (const void* src, void* dst, int length, SDL_PixelFormat* format); +void uyvy_to_yuv (const void* src, void* dst, int length, SDL_PixelFormat* format); +void sbggr8_to_rgb (const void* src, void* dst, int width, int height, + SDL_PixelFormat* format); +void yuv420_to_rgb (const void* src, void* dst, int width, int height, + SDL_PixelFormat* format); +void yuv420_to_yuv (const void* src, void* dst, int width, int height, + SDL_PixelFormat* format); + +#if defined(__unix__) +/* internal functions specific to v4l2 */ +char** v4l2_list_cameras (int* num_devices); +int v4l2_get_control (int fd, int id, int *value); +int v4l2_set_control (int fd, int id, int value); +PyObject* v4l2_read_raw (pgCameraObject* self); +int v4l2_xioctl (int fd, int request, void *arg); +int v4l2_process_image (pgCameraObject* self, const void *image, + unsigned int buffer_size, SDL_Surface* surf); +int v4l2_query_buffer (pgCameraObject* self); +int v4l2_read_frame (pgCameraObject* self, SDL_Surface* surf); +int v4l2_stop_capturing (pgCameraObject* self); +int v4l2_start_capturing (pgCameraObject* self); +int v4l2_uninit_device (pgCameraObject* self); +int v4l2_init_mmap (pgCameraObject* self); +int v4l2_init_device (pgCameraObject* self); +int v4l2_close_device (pgCameraObject* self); +int v4l2_open_device (pgCameraObject* self); + +#elif defined(PYGAME_MAC_CAMERA_OLD) +/* internal functions specific to mac */ +char** mac_list_cameras(int* num_devices); +int mac_open_device (pgCameraObject* self); +int mac_init_device(pgCameraObject* self); +int mac_close_device (pgCameraObject* self); +int mac_start_capturing(pgCameraObject* self); +int mac_stop_capturing (pgCameraObject* self); + +int mac_get_control(pgCameraObject* self, int id, int* value); +int mac_set_control(pgCameraObject* self, int id, int value); + +PyObject* mac_read_raw(pgCameraObject *self); +int mac_read_frame(pgCameraObject* self, SDL_Surface* surf); +int mac_camera_idle(pgCameraObject* self); +int mac_copy_gworld_to_surface(pgCameraObject* self, SDL_Surface* surf); + +void flip_image(const void* image, void* flipped_image, int width, int height, + short depth, int hflip, int vflip); + +#endif + +#endif /* !CAMERA_H */ diff --git a/EXE version/main/fastevents.h b/EXE version/main/fastevents.h new file mode 100644 index 00000000..04098c3a --- /dev/null +++ b/EXE version/main/fastevents.h @@ -0,0 +1,48 @@ +#ifndef _FASTEVENTS_H_ +#define _FASTEVENTS_H_ +/* + NET2 is a threaded, event based, network IO library for SDL. + Copyright (C) 2002 Bob Pendleton + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public License + as published by the Free Software Foundation; either version 2.1 + of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA + + If you do not wish to comply with the terms of the LGPL please + contact the author as other terms are available for a fee. + + Bob Pendleton + Bob@Pendleton.com +*/ + +#include "SDL.h" + +#ifdef __cplusplus +extern "C" { +#endif + + int FE_Init(void); // Initialize FE + void FE_Quit(void); // shutdown FE + + void FE_PumpEvents(void); // replacement for SDL_PumpEvents + int FE_PollEvent(SDL_Event *event); // replacement for SDL_PollEvent + int FE_WaitEvent(SDL_Event *event); // replacement for SDL_WaitEvent + int FE_PushEvent(SDL_Event *event); // replacement for SDL_PushEvent + + char *FE_GetError(void); // get the last error +#ifdef __cplusplus +} +#endif + +#endif diff --git a/EXE version/main/font.h b/EXE version/main/font.h new file mode 100644 index 00000000..98784354 --- /dev/null +++ b/EXE version/main/font.h @@ -0,0 +1,15 @@ +#ifndef PGFONT_INTERNAL_H +#define PGFONT_INTERNAL_H + +#include + +/* test font initialization */ +#define FONT_INIT_CHECK() \ + if(!(*(int*)PyFONT_C_API[2])) \ + return RAISE(pgExc_SDLError, "font system not initialized") + +#include "include/pygame_font.h" + +#define PYGAMEAPI_FONT_NUMSLOTS 3 + +#endif /* ~PGFONT_INTERNAL_H */ diff --git a/EXE version/main/freetype.h b/EXE version/main/freetype.h new file mode 100644 index 00000000..2f75319f --- /dev/null +++ b/EXE version/main/freetype.h @@ -0,0 +1,123 @@ +/* + pygame - Python Game Library + Copyright (C) 2009 Vicent Marti + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this library; if not, write to the Free + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*/ +#ifndef _PYGAME_FREETYPE_INTERNAL_H_ +#define _PYGAME_FREETYPE_INTERNAL_H_ + +#define PGFT_PYGAME1_COMPAT +#define HAVE_PYGAME_SDL_VIDEO +#define HAVE_PYGAME_SDL_RWOPS + +#include "pgcompat.h" +#include "pgplatform.h" +#include + +#include +#include FT_FREETYPE_H +#include FT_CACHE_H +#include FT_XFREE86_H +#include FT_TRIGONOMETRY_H + +/********************************************************** + * Global module constants + **********************************************************/ + +/* Render styles */ +#define FT_STYLE_NORMAL 0x00 +#define FT_STYLE_STRONG 0x01 +#define FT_STYLE_OBLIQUE 0x02 +#define FT_STYLE_UNDERLINE 0x04 +#define FT_STYLE_WIDE 0x08 +#define FT_STYLE_DEFAULT 0xFF + +/* Bounding box modes */ +#define FT_BBOX_EXACT FT_GLYPH_BBOX_SUBPIXELS +#define FT_BBOX_EXACT_GRIDFIT FT_GLYPH_BBOX_GRIDFIT +#define FT_BBOX_PIXEL FT_GLYPH_BBOX_TRUNCATE +#define FT_BBOX_PIXEL_GRIDFIT FT_GLYPH_BBOX_PIXELS + +/* Rendering flags */ +#define FT_RFLAG_NONE (0) +#define FT_RFLAG_ANTIALIAS (1 << 0) +#define FT_RFLAG_AUTOHINT (1 << 1) +#define FT_RFLAG_VERTICAL (1 << 2) +#define FT_RFLAG_HINTED (1 << 3) +#define FT_RFLAG_KERNING (1 << 4) +#define FT_RFLAG_TRANSFORM (1 << 5) +#define FT_RFLAG_PAD (1 << 6) +#define FT_RFLAG_ORIGIN (1 << 7) +#define FT_RFLAG_UCS4 (1 << 8) +#define FT_RFLAG_USE_BITMAP_STRIKES (1 << 9) +#define FT_RFLAG_DEFAULTS (FT_RFLAG_HINTED | \ + FT_RFLAG_USE_BITMAP_STRIKES | \ + FT_RFLAG_ANTIALIAS) + + +#define FT_RENDER_NEWBYTEARRAY 0x0 +#define FT_RENDER_NEWSURFACE 0x1 +#define FT_RENDER_EXISTINGSURFACE 0x2 + +/********************************************************** + * Global module types + **********************************************************/ + +typedef struct _scale_s { + FT_UInt x, y; +} Scale_t; +typedef FT_Angle Angle_t; + +struct fontinternals_; +struct freetypeinstance_; + +typedef struct { + FT_Long font_index; + FT_Open_Args open_args; +} pgFontId; + +typedef struct { + PyObject_HEAD + pgFontId id; + PyObject *path; + int is_scalable; + int is_bg_col_set; + + Scale_t face_size; + FT_Int16 style; + FT_Int16 render_flags; + double strength; + double underline_adjustment; + FT_UInt resolution; + Angle_t rotation; + FT_Matrix transform; + FT_Byte fgcolor[4]; + FT_Byte bgcolor[4]; + + struct freetypeinstance_ *freetype; /* Personal reference */ + struct fontinternals_ *_internals; +} pgFontObject; + +#define pgFont_IS_ALIVE(o) \ + (((pgFontObject *)(o))->_internals != 0) + +/* import public API */ +#include "include/pygame_freetype.h" + +#define PYGAMEAPI_FREETYPE_NUMSLOTS 2 + +#endif /* ~_PYGAME_FREETYPE_INTERNAL_H_ */ diff --git a/EXE version/main/include/_pygame.h b/EXE version/main/include/_pygame.h new file mode 100644 index 00000000..ef7be916 --- /dev/null +++ b/EXE version/main/include/_pygame.h @@ -0,0 +1,649 @@ +/* + pygame - Python Game Library + Copyright (C) 2000-2001 Pete Shinners + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this library; if not, write to the Free + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Pete Shinners + pete@shinners.org +*/ + +#ifndef _PYGAME_H +#define _PYGAME_H + +/** This header file includes all the definitions for the + ** base pygame extensions. This header only requires + ** Python includes (and SDL.h for functions that use SDL types). + ** The reason for functions prototyped with #define's is + ** to allow for maximum Python portability. It also uses + ** Python as the runtime linker, which allows for late binding. + '' For more information on this style of development, read + ** the Python docs on this subject. + ** http://www.python.org/doc/current/ext/using-cobjects.html + ** + ** If using this to build your own derived extensions, + ** you'll see that the functions available here are mainly + ** used to help convert between python objects and SDL objects. + ** Since this library doesn't add a lot of functionality to + ** the SDL library, it doesn't need to offer a lot either. + ** + ** When initializing your extension module, you must manually + ** import the modules you want to use. (this is the part about + ** using python as the runtime linker). Each module has its + ** own import_xxx() routine. You need to perform this import + ** after you have initialized your own module, and before + ** you call any routines from that module. Since every module + ** in pygame does this, there are plenty of examples. + ** + ** The base module does include some useful conversion routines + ** that you are free to use in your own extension. + **/ + +#include "pgplatform.h" +#include + + +/* version macros (defined since version 1.9.5) */ +#define PG_MAJOR_VERSION 2 +#define PG_MINOR_VERSION 0 +#define PG_PATCH_VERSION 2 +#define PG_VERSIONNUM(MAJOR, MINOR, PATCH) (1000*(MAJOR) + 100*(MINOR) + (PATCH)) +#define PG_VERSION_ATLEAST(MAJOR, MINOR, PATCH) \ + (PG_VERSIONNUM(PG_MAJOR_VERSION, PG_MINOR_VERSION, PG_PATCH_VERSION) >= \ + PG_VERSIONNUM(MAJOR, MINOR, PATCH)) + +/* SDL 1.x/2.x and pygame 1.x/2.x + */ +#if defined(SDL_VERSION_ATLEAST) +#if (SDL_VERSION_ATLEAST(2, 0, 0)) +#define PG_API_VERSION 2 +#else /* SDL 1 */ +/* for now: allow pygame 2 to be compiled with SDL 1. */ +#define PG_API_VERSION 1 +#endif /* SDL 1 */ +#else /* NO SDL */ +#define PG_API_VERSION ((PG_MAJOR_VERSION == 1) ? 1 : 2) +#endif /* NO SDL */ + +#include "pgcompat.h" + + +/* Flag indicating a pg_buffer; used for assertions within callbacks */ +#ifndef NDEBUG +#define PyBUF_PYGAME 0x4000 +#endif +#define PyBUF_HAS_FLAG(f, F) (((f) & (F)) == (F)) + +/* Array information exchange struct C type; inherits from Py_buffer + * + * Pygame uses its own Py_buffer derived C struct as an internal representation + * of an imported array buffer. The extended Py_buffer allows for a + * per-instance release callback, + */ +typedef void (*pybuffer_releaseproc)(Py_buffer *); + +typedef struct pg_bufferinfo_s { + Py_buffer view; + PyObject *consumer; /* Input: Borrowed reference */ + pybuffer_releaseproc release_buffer; +} pg_buffer; + +#include "pgimport.h" + +/* + * BASE module + */ +#ifndef PYGAMEAPI_BASE_INTERNAL +#define pgExc_SDLError \ + ((PyObject *) \ + PYGAMEAPI_GET_SLOT(base, 0)) + +#define pg_RegisterQuit \ + (*(void (*)(void (*)(void))) \ + PYGAMEAPI_GET_SLOT(base, 1)) + +#define pg_IntFromObj \ + (*(int (*)(PyObject *, int *)) \ + PYGAMEAPI_GET_SLOT(base, 2)) + +#define pg_IntFromObjIndex \ + (*(int (*)(PyObject *, int, int *)) \ + PYGAMEAPI_GET_SLOT(base, 3)) + +#define pg_TwoIntsFromObj \ + (*(int (*)(PyObject *, int *, int *)) \ + PYGAMEAPI_GET_SLOT(base, 4)) + +#define pg_FloatFromObj \ + (*(int (*)(PyObject *, float *)) \ + PYGAMEAPI_GET_SLOT(base, 5)) + +#define pg_FloatFromObjIndex \ + (*(int (*)(PyObject *, int, float *)) \ + PYGAMEAPI_GET_SLOT(base, 6)) + +#define pg_TwoFloatsFromObj \ + (*(int (*)(PyObject *, float *, float *)) \ + PYGAMEAPI_GET_SLOT(base, 7)) + +#define pg_UintFromObj \ + (*(int (*)(PyObject *, Uint32 *)) \ + PYGAMEAPI_GET_SLOT(base, 8)) + +#define pg_UintFromObjIndex \ + (*(int (*)(PyObject *, int, Uint32 *)) \ + PYGAMEAPI_GET_SLOT(base, 9)) + +#define pg_mod_autoinit \ + (*(int (*)(const char *)) \ + PYGAMEAPI_GET_SLOT(base, 10)) + +#define pg_mod_autoquit \ + (*(void (*)(const char *)) \ + PYGAMEAPI_GET_SLOT(base, 11)) + +#define pg_RGBAFromObj \ + (*(int (*)(PyObject *, Uint8 *)) \ + PYGAMEAPI_GET_SLOT(base, 12)) + +#define pgBuffer_AsArrayInterface \ + (*(PyObject * (*)(Py_buffer *)) \ + PYGAMEAPI_GET_SLOT(base, 13)) + +#define pgBuffer_AsArrayStruct \ + (*(PyObject * (*)(Py_buffer *)) \ + PYGAMEAPI_GET_SLOT(base, 14)) + +#define pgObject_GetBuffer \ + (*(int (*)(PyObject *, pg_buffer *, int)) \ + PYGAMEAPI_GET_SLOT(base, 15)) + +#define pgBuffer_Release \ + (*(void (*)(pg_buffer *)) \ + PYGAMEAPI_GET_SLOT(base, 16)) + +#define pgDict_AsBuffer \ + (*(int (*)(pg_buffer *, PyObject *, int)) \ + PYGAMEAPI_GET_SLOT(base, 17)) + +#define pgExc_BufferError \ + ((PyObject *) \ + PYGAMEAPI_GET_SLOT(base, 18)) + +#if PG_API_VERSION == 2 +#define pg_GetDefaultWindow \ + (*(SDL_Window * (*)(void)) \ + PYGAMEAPI_GET_SLOT(base, 19)) + +#define pg_SetDefaultWindow \ + (*(void (*)(SDL_Window *)) \ + PYGAMEAPI_GET_SLOT(base, 20)) + +#define pg_GetDefaultWindowSurface \ + (*(pgSurfaceObject * (*)(void)) \ + PYGAMEAPI_GET_SLOT(base, 21)) + +#define pg_SetDefaultWindowSurface \ + (*(void (*)(pgSurfaceObject *)) \ + PYGAMEAPI_GET_SLOT(base, 22)) + +#define pg_EnvShouldBlendAlphaSDL2 \ + (*(char * (*)(void)) \ + PYGAMEAPI_GET_SLOT(base, 23)) + +#endif /* PG_API_VERSION == 2 */ + +#define import_pygame_base() IMPORT_PYGAME_MODULE(base) +#endif /* ~PYGAMEAPI_BASE_INTERNAL */ + +/* + * RECT module + */ +#if !defined(SDL_VERSION_ATLEAST) || PG_API_VERSION == 1 +typedef struct { + int x, y; + int w, h; +} GAME_Rect; +#else /* SDL 2+ */ +typedef SDL_Rect GAME_Rect; +#endif /* SDL 2+ */ + +typedef struct { + PyObject_HEAD GAME_Rect r; + PyObject *weakreflist; +} pgRectObject; + +#define pgRect_AsRect(x) (((pgRectObject *)x)->r) +#ifndef PYGAMEAPI_RECT_INTERNAL +#define pgRect_Type \ + (*(PyTypeObject *) \ + PYGAMEAPI_GET_SLOT(rect, 0)) + +#define pgRect_Check(x) \ + ((x)->ob_type == &pgRect_Type) +#define pgRect_New \ + (*(PyObject * (*)(SDL_Rect *)) \ + PYGAMEAPI_GET_SLOT(rect, 1)) + +#define pgRect_New4 \ + (*(PyObject * (*)(int, int, int, int)) \ + PYGAMEAPI_GET_SLOT(rect, 2)) + +#define pgRect_FromObject \ + (*(GAME_Rect * (*)(PyObject *, GAME_Rect *)) \ + PYGAMEAPI_GET_SLOT(rect, 3)) + +#define pgRect_Normalize (*(void (*)(GAME_Rect *)) PYGAMEAPI_GET_SLOT(rect, 4)) + +#define import_pygame_rect() IMPORT_PYGAME_MODULE(rect) +#endif /* ~PYGAMEAPI_RECT_INTERNAL */ + +/* + * CDROM module + */ + +typedef struct { + PyObject_HEAD int id; +} pgCDObject; + +#define pgCD_AsID(x) (((pgCDObject *)x)->id) +#ifndef PYGAMEAPI_CDROM_INTERNAL +#define pgCD_Type \ + (*(PyTypeObject *) \ + PYGAMEAPI_GET_SLOT(cdrom, 0)) + +#define pgCD_Check(x) \ + ((x)->ob_type == &pgCD_Type) +#define pgCD_New \ + (*(PyObject * (*)(int)) \ + PYGAMEAPI_GET_SLOT(cdrom, 1)) + +#define import_pygame_cd() IMPORT_PYGAME_MODULE(cdrom) +#endif + +/* + * JOYSTICK module + */ +typedef struct pgJoystickObject { + PyObject_HEAD + int id; + SDL_Joystick *joy; + + /* Joysticks form an intrusive linked list. + * + * Note that we don't maintain refcounts for these so they are weakrefs from + * the Python side. + */ + struct pgJoystickObject *next; + struct pgJoystickObject *prev; +} pgJoystickObject; + +#define pgJoystick_AsID(x) (((pgJoystickObject *)x)->id) +#define pgJoystick_AsSDL(x) (((pgJoystickObject *)x)->joy) + +#ifndef PYGAMEAPI_JOYSTICK_INTERNAL +#define pgJoystick_Type \ + (*(PyTypeObject *) \ + PYGAMEAPI_GET_SLOT(joystick, 0)) + +#define pgJoystick_Check(x) \ + ((x)->ob_type == &pgJoystick_Type) +#define pgJoystick_New \ + (*(PyObject * (*)(int)) \ + PYGAMEAPI_GET_SLOT(joystick, 1)) + +#define import_pygame_joystick() IMPORT_PYGAME_MODULE(joystick) +#endif + +/* + * DISPLAY module + */ + +#if defined(SDL_VERSION_ATLEAST) + +#if PG_API_VERSION == 2 +typedef struct { + Uint32 hw_available:1; + Uint32 wm_available:1; + Uint32 blit_hw:1; + Uint32 blit_hw_CC:1; + Uint32 blit_hw_A:1; + Uint32 blit_sw:1; + Uint32 blit_sw_CC:1; + Uint32 blit_sw_A:1; + Uint32 blit_fill:1; + Uint32 video_mem; + SDL_PixelFormat *vfmt; + SDL_PixelFormat vfmt_data; + int current_w; + int current_h; +} pg_VideoInfo; +#endif /* PG_API_VERSION == 2 */ + +typedef struct { +#if PG_API_VERSION == 1 + PyObject_HEAD SDL_VideoInfo info; +#else + PyObject_HEAD pg_VideoInfo info; +#endif +} pgVidInfoObject; + +#define pgVidInfo_AsVidInfo(x) (((pgVidInfoObject *)x)->info) +#endif /* defined(SDL_VERSION_ATLEAST) */ + +#ifndef PYGAMEAPI_DISPLAY_INTERNAL +#define pgVidInfo_Type \ + (*(PyTypeObject *) \ + PYGAMEAPI_GET_SLOT(display, 0)) + +#define pgVidInfo_Check(x) \ + ((x)->ob_type == &pgVidInfo_Type) + +#if PG_API_VERSION == 1 +#define pgVidInfo_New \ + (*(PyObject * (*)(SDL_VideoInfo *)) \ + PYGAMEAPI_GET_SLOT(display, 1)) +#else +#define pgVidInfo_New \ + (*(PyObject * (*)(pg_VideoInfo *)) \ + PYGAMEAPI_GET_SLOT(display, 1)) +#endif + +#define import_pygame_display() IMPORT_PYGAME_MODULE(display) +#endif /* ~PYGAMEAPI_DISPLAY_INTERNAL */ + +/* + * SURFACE module + */ +struct pgSubSurface_Data; +struct SDL_Surface; + +typedef struct { + PyObject_HEAD struct SDL_Surface *surf; +#if PG_API_VERSION == 2 + int owner; +#endif /* PG_API_VERSION == 2 */ + struct pgSubSurface_Data *subsurface; /* ptr to subsurface data (if a + * subsurface)*/ + PyObject *weakreflist; + PyObject *locklist; + PyObject *dependency; +} pgSurfaceObject; +#define pgSurface_AsSurface(x) (((pgSurfaceObject *)x)->surf) + +#ifndef PYGAMEAPI_SURFACE_INTERNAL +#define pgSurface_Type \ + (*(PyTypeObject *) \ + PYGAMEAPI_GET_SLOT(surface, 0)) + +#define pgSurface_Check(x) \ + (PyObject_IsInstance((x), (PyObject *) &pgSurface_Type)) +#if PG_API_VERSION == 1 +#define pgSurface_New \ + (*(pgSurfaceObject * (*)(SDL_Surface *)) \ + PYGAMEAPI_GET_SLOT(surface, 1)) + +#define pgSurface_SetSurface \ + (*(int (*)(pgSurfaceObject *, SDL_Surface *)) \ + PYGAMEAPI_GET_SLOT(surface, 3)) + +#else /* PG_API_VERSION == 2 */ +#define pgSurface_New2 \ + (*(pgSurfaceObject * (*)(SDL_Surface *, int)) \ + PYGAMEAPI_GET_SLOT(surface, 1)) + +#define pgSurface_SetSurface \ + (*(int (*)(pgSurfaceObject *, SDL_Surface *, int)) \ + PYGAMEAPI_GET_SLOT(surface, 3)) + +#endif /* PG_API_VERSION == 2 */ +#define pgSurface_Blit \ + (*(int (*)(pgSurfaceObject *, pgSurfaceObject *, GAME_Rect *, GAME_Rect *, int)) \ + PYGAMEAPI_GET_SLOT(surface, 2)) + +#define import_pygame_surface() \ + do { \ + IMPORT_PYGAME_MODULE(surface); \ + if (PyErr_Occurred() != NULL) \ + break; \ + IMPORT_PYGAME_MODULE(surflock); \ + } while (0) + +#if PG_API_VERSION == 2 +#define pgSurface_New(surface) pgSurface_New2((surface), 1) +#define pgSurface_NewNoOwn(surface) pgSurface_New2((surface), 0) +#endif /* PG_API_VERSION == 2 */ + +#endif /* ~PYGAMEAPI_SURFACE_INTERNAL */ + +/* + * SURFLOCK module + * auto imported/initialized by surface + */ +#ifndef PYGAMEAPI_SURFLOCK_INTERNAL +#define pgLifetimeLock_Type \ + (*(PyTypeObject *) \ + PYGAMEAPI_GET_SLOT(surflock, 0)) + +#define pgLifetimeLock_Check(x) \ + ((x)->ob_type == &pgLifetimeLock_Type) + +#define pgSurface_Prep(x) \ + if ((x)->subsurface) \ + (*(*(void (*)(pgSurfaceObject *)) \ + PYGAMEAPI_GET_SLOT(surflock, 1)))(x) + +#define pgSurface_Unprep(x) \ + if ((x)->subsurface) \ + (*(*(void (*)(pgSurfaceObject *)) \ + PYGAMEAPI_GET_SLOT(surflock, 2)))(x) + +#define pgSurface_Lock \ + (*(int (*)(pgSurfaceObject *)) \ + PYGAMEAPI_GET_SLOT(surflock, 3)) + +#define pgSurface_Unlock \ + (*(int (*)(pgSurfaceObject *)) \ + PYGAMEAPI_GET_SLOT(surflock, 4)) + +#define pgSurface_LockBy \ + (*(int (*)(pgSurfaceObject *, PyObject *)) \ + PYGAMEAPI_GET_SLOT(surflock, 5)) + +#define pgSurface_UnlockBy \ + (*(int (*)(pgSurfaceObject *, PyObject *)) \ + PYGAMEAPI_GET_SLOT(surflock, 6)) + +#define pgSurface_LockLifetime \ + (*(PyObject * (*)(PyObject *, PyObject *)) \ + PYGAMEAPI_GET_SLOT(surflock, 7)) +#endif + +/* + * EVENT module + */ +typedef struct pgEventObject pgEventObject; + +#ifndef PYGAMEAPI_EVENT_INTERNAL +#define pgEvent_Type \ + (*(PyTypeObject *) \ + PYGAMEAPI_GET_SLOT(event, 0)) + +#define pgEvent_Check(x) \ + ((x)->ob_type == &pgEvent_Type) + +#define pgEvent_New \ + (*(PyObject * (*)(SDL_Event *)) \ + PYGAMEAPI_GET_SLOT(event, 1)) + +#define pgEvent_New2 \ + (*(PyObject * (*)(int, PyObject *)) \ + PYGAMEAPI_GET_SLOT(event, 2)) + +#define pgEvent_FillUserEvent \ + (*(int (*)(pgEventObject *, SDL_Event *)) \ + PYGAMEAPI_GET_SLOT(event, 3)) + +#if PG_API_VERSION == 2 +#define pg_EnableKeyRepeat \ + (*(int (*)(int, int)) \ + PYGAMEAPI_GET_SLOT(event, 4)) + +#define pg_GetKeyRepeat \ + (*(void (*)(int *, int *)) \ + PYGAMEAPI_GET_SLOT(event, 5)) +#endif /* PG_API_VERSION == 2 */ + +#define import_pygame_event() IMPORT_PYGAME_MODULE(event) +#endif + +/* + * RWOBJECT module + * the rwobject are only needed for C side work, not accessable from python. + */ +#ifndef PYGAMEAPI_RWOBJECT_INTERNAL +#define pgRWops_FromObject \ + (*(SDL_RWops * (*)(PyObject *)) \ + PYGAMEAPI_GET_SLOT(rwobject, 0)) + +#define pgRWops_IsFileObject \ + (*(int (*)(SDL_RWops *)) \ + PYGAMEAPI_GET_SLOT(rwobject, 1)) + +#define pg_EncodeFilePath \ + (*(PyObject * (*)(PyObject *, PyObject *)) \ + PYGAMEAPI_GET_SLOT(rwobject, 2)) + +#define pg_EncodeString \ + (*(PyObject * (*)(PyObject *, const char *, const char *, PyObject *)) \ + PYGAMEAPI_GET_SLOT(rwobject, 3)) + +#define pgRWops_FromFileObject \ + (*(SDL_RWops * (*)(PyObject *)) \ + PYGAMEAPI_GET_SLOT(rwobject, 4)) + +#define pgRWops_ReleaseObject \ + (*(int (*)(SDL_RWops *)) \ + PYGAMEAPI_GET_SLOT(rwobject, 5)) + +#define import_pygame_rwobject() IMPORT_PYGAME_MODULE(rwobject) + +#endif + +/* + * PixelArray module + */ +#ifndef PYGAMEAPI_PIXELARRAY_INTERNAL +#define PyPixelArray_Type \ + ((PyTypeObject *) \ + PYGAMEAPI_GET_SLOT(pixelarray, 0)) + +#define PyPixelArray_Check(x) \ + ((x)->ob_type == &PyPixelArray_Type) +#define PyPixelArray_New \ + (*(PyObject * (*)) \ + PYGAMEAPI_GET_SLOT(pixelarray, 1)) + +#define import_pygame_pixelarray() IMPORT_PYGAME_MODULE(pixelarray) +#endif /* PYGAMEAPI_PIXELARRAY_INTERNAL */ + +/* + * Color module + */ +typedef struct pgColorObject pgColorObject; + +#ifndef PYGAMEAPI_COLOR_INTERNAL +#define pgColor_Type (*(PyObject *) \ + PYGAMEAPI_GET_SLOT(color, 0)) + +#define pgColor_Check(x) \ + ((x)->ob_type == &pgColor_Type) +#define pgColor_New \ + (*(PyObject * (*)(Uint8 *)) \ + PYGAMEAPI_GET_SLOT(color, 1)) + +#define pgColor_NewLength \ + (*(PyObject * (*)(Uint8 *, Uint8)) \ + PYGAMEAPI_GET_SLOT(color, 3)) + +#define pg_RGBAFromColorObj \ + (*(int (*)(PyObject *, Uint8 *)) \ + PYGAMEAPI_GET_SLOT(color, 2)) + +#define pg_RGBAFromFuzzyColorObj \ + (*(int (*)(PyObject *, Uint8 *)) \ + PYGAMEAPI_GET_SLOT(color, 4)) + +#define pgColor_AsArray(x) (((pgColorObject *)x)->data) +#define pgColor_NumComponents(x) (((pgColorObject *)x)->len) + + +#define import_pygame_color() IMPORT_PYGAME_MODULE(color) +#endif /* PYGAMEAPI_COLOR_INTERNAL */ + +/* + * Math module + */ +#ifndef PYGAMEAPI_MATH_INTERNAL +#define pgVector2_Check(x) \ + ((x)->ob_type == (PyTypeObject *) \ + PYGAMEAPI_GET_SLOT(math, 0)) + +#define pgVector3_Check(x) \ + ((x)->ob_type == (PyTypeObject *) \ + PYGAMEAPI_GET_SLOT(math, 1)) +/* +#define pgVector2_New \ + (*(PyObject*(*)) \ + PYGAMEAPI_GET_SLOT(PyGAME_C_API, 1)) +*/ +#define import_pygame_math() IMPORT_PYGAME_MODULE(math) +#endif /* PYGAMEAPI_MATH_INTERNAL */ + +#define IMPORT_PYGAME_MODULE _IMPORT_PYGAME_MODULE + +/* + * base pygame API slots + * disable slots with NO_PYGAME_C_API + */ +#ifdef PYGAME_H +PYGAMEAPI_DEFINE_SLOTS(base); +PYGAMEAPI_DEFINE_SLOTS(rect); +PYGAMEAPI_DEFINE_SLOTS(cdrom); +PYGAMEAPI_DEFINE_SLOTS(joystick); +PYGAMEAPI_DEFINE_SLOTS(display); +PYGAMEAPI_DEFINE_SLOTS(surface); +PYGAMEAPI_DEFINE_SLOTS(surflock); +PYGAMEAPI_DEFINE_SLOTS(event); +PYGAMEAPI_DEFINE_SLOTS(rwobject); +PYGAMEAPI_DEFINE_SLOTS(pixelarray); +PYGAMEAPI_DEFINE_SLOTS(color); +PYGAMEAPI_DEFINE_SLOTS(math); +#else /* ~PYGAME_H */ +PYGAMEAPI_EXTERN_SLOTS(base); +PYGAMEAPI_EXTERN_SLOTS(rect); +PYGAMEAPI_EXTERN_SLOTS(cdrom); +PYGAMEAPI_EXTERN_SLOTS(joystick); +PYGAMEAPI_EXTERN_SLOTS(display); +PYGAMEAPI_EXTERN_SLOTS(surface); +PYGAMEAPI_EXTERN_SLOTS(surflock); +PYGAMEAPI_EXTERN_SLOTS(event); +PYGAMEAPI_EXTERN_SLOTS(rwobject); +PYGAMEAPI_EXTERN_SLOTS(pixelarray); +PYGAMEAPI_EXTERN_SLOTS(color); +PYGAMEAPI_EXTERN_SLOTS(math); +#endif /* ~PYGAME_H */ + +#endif /* PYGAME_H */ diff --git a/EXE version/main/include/bitmask.h b/EXE version/main/include/bitmask.h new file mode 100644 index 00000000..d95297e8 --- /dev/null +++ b/EXE version/main/include/bitmask.h @@ -0,0 +1,149 @@ +/* + Bitmask 1.7 - A pixel-perfect collision detection library. + + Copyright (C) 2002-2005 Ulf Ekstrom except for the bitcount + function which is copyright (C) Donald W. Gillies, 1992. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this library; if not, write to the Free + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ +#ifndef BITMASK_H +#define BITMASK_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include +/* Define INLINE for different compilers. If your compiler does not + support inlining then there might be a performance hit in + bitmask_overlap_area(). +*/ +#ifndef INLINE +# ifdef __GNUC__ +# define INLINE inline +# else +# ifdef _MSC_VER +# define INLINE __inline +# else +# define INLINE +# endif +# endif +#endif + +#define BITMASK_W unsigned long int +#define BITMASK_W_LEN (sizeof(BITMASK_W)*CHAR_BIT) +#define BITMASK_W_MASK (BITMASK_W_LEN - 1) +#define BITMASK_N(n) ((BITMASK_W)1 << (n)) + +typedef struct bitmask +{ + int w,h; + BITMASK_W bits[1]; +} bitmask_t; + +/* Creates a bitmask of width w and height h, where + w and h must both be greater than or equal to 0. + The mask is automatically cleared when created. + */ +bitmask_t *bitmask_create(int w, int h); + +/* Frees all the memory allocated by bitmask_create for m. */ +void bitmask_free(bitmask_t *m); + +/* Create a copy of the given bitmask. */ +bitmask_t *bitmask_copy(bitmask_t *m); + +/* Clears all bits in the mask */ +void bitmask_clear(bitmask_t *m); + +/* Sets all bits in the mask */ +void bitmask_fill(bitmask_t *m); + +/* Flips all bits in the mask */ +void bitmask_invert(bitmask_t *m); + +/* Counts the bits in the mask */ +unsigned int bitmask_count(bitmask_t *m); + +/* Returns nonzero if the bit at (x,y) is set. Coordinates start at + (0,0) */ +static INLINE int bitmask_getbit(const bitmask_t *m, int x, int y) +{ + return (m->bits[x/BITMASK_W_LEN*m->h + y] & BITMASK_N(x & BITMASK_W_MASK)) != 0; +} + +/* Sets the bit at (x,y) */ +static INLINE void bitmask_setbit(bitmask_t *m, int x, int y) +{ + m->bits[x/BITMASK_W_LEN*m->h + y] |= BITMASK_N(x & BITMASK_W_MASK); +} + +/* Clears the bit at (x,y) */ +static INLINE void bitmask_clearbit(bitmask_t *m, int x, int y) +{ + m->bits[x/BITMASK_W_LEN*m->h + y] &= ~BITMASK_N(x & BITMASK_W_MASK); +} + +/* Returns nonzero if the masks overlap with the given offset. + The overlap tests uses the following offsets (which may be negative): + + +----+----------.. + |A | yoffset + | +-+----------.. + +--|B + |xoffset + | | + : : +*/ +int bitmask_overlap(const bitmask_t *a, const bitmask_t *b, int xoffset, int yoffset); + +/* Like bitmask_overlap(), but will also give a point of intersection. + x and y are given in the coordinates of mask a, and are untouched + if there is no overlap. */ +int bitmask_overlap_pos(const bitmask_t *a, const bitmask_t *b, + int xoffset, int yoffset, int *x, int *y); + +/* Returns the number of overlapping 'pixels' */ +int bitmask_overlap_area(const bitmask_t *a, const bitmask_t *b, int xoffset, int yoffset); + +/* Fills a mask with the overlap of two other masks. A bitwise AND. */ +void bitmask_overlap_mask (const bitmask_t *a, const bitmask_t *b, bitmask_t *c, int xoffset, int yoffset); + +/* Draws mask b onto mask a (bitwise OR). Can be used to compose large + (game background?) mask from several submasks, which may speed up + the testing. */ + +void bitmask_draw(bitmask_t *a, const bitmask_t *b, int xoffset, int yoffset); + +void bitmask_erase(bitmask_t *a, const bitmask_t *b, int xoffset, int yoffset); + +/* Return a new scaled bitmask, with dimensions w*h. The quality of the + scaling may not be perfect for all circumstances, but it should + be reasonable. If either w or h is 0 a clear 1x1 mask is returned. */ +bitmask_t *bitmask_scale(const bitmask_t *m, int w, int h); + +/* Convolve b into a, drawing the output into o, shifted by offset. If offset + * is 0, then the (x,y) bit will be set if and only if + * bitmask_overlap(a, b, x - b->w - 1, y - b->h - 1) returns true. + * + * Modifies bits o[xoffset ... xoffset + a->w + b->w - 1) + * [yoffset ... yoffset + a->h + b->h - 1). */ +void bitmask_convolve(const bitmask_t *a, const bitmask_t *b, bitmask_t *o, int xoffset, int yoffset); + +#ifdef __cplusplus +} /* End of extern "C" { */ +#endif + +#endif diff --git a/EXE version/main/include/pgcompat.h b/EXE version/main/include/pgcompat.h new file mode 100644 index 00000000..2ba1b6b5 --- /dev/null +++ b/EXE version/main/include/pgcompat.h @@ -0,0 +1,180 @@ +/* Python 2.x/3.x and SDL compatibility tools + */ + +#if !defined(PGCOMPAT_H) +#define PGCOMPAT_H + +#include + +/* Cobjects vanish in Python 3.2; so we will code as though we use capsules */ +#if defined(Py_CAPSULE_H) +#define PG_HAVE_CAPSULE 1 +#else +#define PG_HAVE_CAPSULE 0 +#endif +#if defined(Py_COBJECT_H) +#define PG_HAVE_COBJECT 1 +#else +#define PG_HAVE_COBJECT 0 +#endif +#if !PG_HAVE_CAPSULE +#define PyCapsule_New(ptr, n, dfn) PyCObject_FromVoidPtr(ptr, dfn) +#define PyCapsule_GetPointer(obj, n) PyCObject_AsVoidPtr(obj) +#define PyCapsule_CheckExact(obj) PyCObject_Check(obj) +#endif + +/* Pygame uses Py_buffer (PEP 3118) to exchange array information internally; + * define here as needed. + */ +#if !defined(PyBUF_SIMPLE) +typedef struct bufferinfo { + void *buf; + PyObject *obj; + Py_ssize_t len; + Py_ssize_t itemsize; + int readonly; + int ndim; + char *format; + Py_ssize_t *shape; + Py_ssize_t *strides; + Py_ssize_t *suboffsets; + void *internal; +} Py_buffer; + +/* Flags for getting buffers */ +#define PyBUF_SIMPLE 0 +#define PyBUF_WRITABLE 0x0001 +/* we used to include an E, backwards compatible alias */ +#define PyBUF_WRITEABLE PyBUF_WRITABLE +#define PyBUF_FORMAT 0x0004 +#define PyBUF_ND 0x0008 +#define PyBUF_STRIDES (0x0010 | PyBUF_ND) +#define PyBUF_C_CONTIGUOUS (0x0020 | PyBUF_STRIDES) +#define PyBUF_F_CONTIGUOUS (0x0040 | PyBUF_STRIDES) +#define PyBUF_ANY_CONTIGUOUS (0x0080 | PyBUF_STRIDES) +#define PyBUF_INDIRECT (0x0100 | PyBUF_STRIDES) + +#define PyBUF_CONTIG (PyBUF_ND | PyBUF_WRITABLE) +#define PyBUF_CONTIG_RO (PyBUF_ND) + +#define PyBUF_STRIDED (PyBUF_STRIDES | PyBUF_WRITABLE) +#define PyBUF_STRIDED_RO (PyBUF_STRIDES) + +#define PyBUF_RECORDS (PyBUF_STRIDES | PyBUF_WRITABLE | PyBUF_FORMAT) +#define PyBUF_RECORDS_RO (PyBUF_STRIDES | PyBUF_FORMAT) + +#define PyBUF_FULL (PyBUF_INDIRECT | PyBUF_WRITABLE | PyBUF_FORMAT) +#define PyBUF_FULL_RO (PyBUF_INDIRECT | PyBUF_FORMAT) + +#define PyBUF_READ 0x100 +#define PyBUF_WRITE 0x200 +#define PyBUF_SHADOW 0x400 + +typedef int(*getbufferproc)(PyObject *, Py_buffer *, int); +typedef void(*releasebufferproc)(Py_buffer *); +#endif /* ~defined(PyBUF_SIMPLE) */ + +/* define common types where SDL is not included */ +#ifndef SDL_VERSION_ATLEAST +#ifdef _MSC_VER +typedef unsigned __int8 uint8_t; +typedef unsigned __int32 uint32_t; +#else +#include +#endif +typedef uint32_t Uint32; +typedef uint8_t Uint8; +#endif /* no SDL */ + + +#if defined(SDL_VERSION_ATLEAST) + +#ifndef SDL_WINDOW_VULKAN +#define SDL_WINDOW_VULKAN 0 +#endif + +#ifndef SDL_WINDOW_ALWAYS_ON_TOP +#define SDL_WINDOW_ALWAYS_ON_TOP 0 +#endif + +#ifndef SDL_WINDOW_SKIP_TASKBAR +#define SDL_WINDOW_SKIP_TASKBAR 0 +#endif + +#ifndef SDL_WINDOW_UTILITY +#define SDL_WINDOW_UTILITY 0 +#endif + +#ifndef SDL_WINDOW_TOOLTIP +#define SDL_WINDOW_TOOLTIP 0 +#endif + +#ifndef SDL_WINDOW_POPUP_MENU +#define SDL_WINDOW_POPUP_MENU 0 +#endif + + +#ifndef SDL_WINDOW_INPUT_GRABBED +#define SDL_WINDOW_INPUT_GRABBED 0 +#endif + +#ifndef SDL_WINDOW_INPUT_FOCUS +#define SDL_WINDOW_INPUT_FOCUS 0 +#endif + +#ifndef SDL_WINDOW_MOUSE_FOCUS +#define SDL_WINDOW_MOUSE_FOCUS 0 +#endif + +#ifndef SDL_WINDOW_FOREIGN +#define SDL_WINDOW_FOREIGN 0 +#endif + +#ifndef SDL_WINDOW_ALLOW_HIGHDPI +#define SDL_WINDOW_ALLOW_HIGHDPI 0 +#endif + +#ifndef SDL_WINDOW_MOUSE_CAPTURE +#define SDL_WINDOW_MOUSE_CAPTURE 0 +#endif + +#ifndef SDL_WINDOW_ALWAYS_ON_TOP +#define SDL_WINDOW_ALWAYS_ON_TOP 0 +#endif + +#ifndef SDL_WINDOW_SKIP_TASKBAR +#define SDL_WINDOW_SKIP_TASKBAR 0 +#endif + +#ifndef SDL_WINDOW_UTILITY +#define SDL_WINDOW_UTILITY 0 +#endif + +#ifndef SDL_WINDOW_TOOLTIP +#define SDL_WINDOW_TOOLTIP 0 +#endif + +#ifndef SDL_WINDOW_POPUP_MENU +#define SDL_WINDOW_POPUP_MENU 0 +#endif + +#if SDL_VERSION_ATLEAST(2, 0, 4) +/* To control the use of: + * SDL_AUDIODEVICEADDED + * SDL_AUDIODEVICEREMOVED + * + * Ref: https://wiki.libsdl.org/SDL_EventType + * Ref: https://wiki.libsdl.org/SDL_AudioDeviceEvent + */ +#define SDL2_AUDIODEVICE_SUPPORTED +#endif + +#ifndef SDL_MOUSEWHEEL_FLIPPED +#define NO_SDL_MOUSEWHEEL_FLIPPED +#endif + + +#endif /* defined(SDL_VERSION_ATLEAST) */ + + +#endif /* ~defined(PGCOMPAT_H) */ diff --git a/EXE version/main/include/pgimport.h b/EXE version/main/include/pgimport.h new file mode 100644 index 00000000..6649865b --- /dev/null +++ b/EXE version/main/include/pgimport.h @@ -0,0 +1,80 @@ +#ifndef PGIMPORT_H +#define PGIMPORT_H + +/* Prefix when initializing module */ +#define MODPREFIX "" +/* Prefix when importing module */ +#define IMPPREFIX "pygame." + +#ifdef __SYMBIAN32__ + +/* On Symbian there is no pygame package. The extensions are built-in or in + * sys\bin. */ +#undef MODPREFIX +#undef IMPPREFIX +#define MODPREFIX "pygame_" +#define IMPPREFIX "pygame_" + +#endif /* __SYMBIAN32__ */ + +#include "pgcompat.h" + +#define PYGAMEAPI_LOCAL_ENTRY "_PYGAME_C_API" +#define PG_CAPSULE_NAME(m) (IMPPREFIX m "." PYGAMEAPI_LOCAL_ENTRY) + +/* + * fill API slots defined by PYGAMEAPI_DEFINE_SLOTS/PYGAMEAPI_EXTERN_SLOTS + */ +#define _IMPORT_PYGAME_MODULE(module) \ + { \ + PyObject *_mod_##module = PyImport_ImportModule(IMPPREFIX #module); \ + \ + if (_mod_##module != NULL) { \ + PyObject *_c_api = \ + PyObject_GetAttrString(_mod_##module, PYGAMEAPI_LOCAL_ENTRY);\ + \ + Py_DECREF(_mod_##module); \ + if (_c_api != NULL && PyCapsule_CheckExact(_c_api)) { \ + void **localptr = (void **)PyCapsule_GetPointer( \ + _c_api, PG_CAPSULE_NAME(#module)); \ + _PGSLOTS_ ## module = localptr; \ + } \ + Py_XDECREF(_c_api); \ + } \ + } + +#define PYGAMEAPI_IS_IMPORTED(module) (_PGSLOTS_ ## module != NULL) + +/* + * source file must include one of these in order to use _IMPORT_PYGAME_MODULE. + * this is set by import_pygame_*() functions. + * disable with NO_PYGAME_C_API + */ +#define PYGAMEAPI_DEFINE_SLOTS(module) \ + void ** _PGSLOTS_ ## module = NULL +#define PYGAMEAPI_EXTERN_SLOTS(module) \ + extern void **_PGSLOTS_ ## module +#define PYGAMEAPI_GET_SLOT(module, index) \ + _PGSLOTS_ ## module [(index)] + +/* + * disabled API with NO_PYGAME_C_API; do nothing instead + */ +#ifdef NO_PYGAME_C_API + +#undef PYGAMEAPI_DEFINE_SLOTS +#undef PYGAMEAPI_EXTERN_SLOTS + +#define PYGAMEAPI_DEFINE_SLOTS(module) +#define PYGAMEAPI_EXTERN_SLOTS(module) + +/* intentionally leave this defined to cause a compiler error * +#define PYGAMEAPI_GET_SLOT(api_root, index) +#undef PYGAMEAPI_GET_SLOT*/ + +#undef _IMPORT_PYGAME_MODULE +#define _IMPORT_PYGAME_MODULE(module) + +#endif /* NO_PYGAME_C_API */ + +#endif /* ~PGIMPORT_H */ diff --git a/EXE version/main/include/pgplatform.h b/EXE version/main/include/pgplatform.h new file mode 100644 index 00000000..659ea625 --- /dev/null +++ b/EXE version/main/include/pgplatform.h @@ -0,0 +1,91 @@ +/* platform/compiler adjustments */ +#ifndef PG_PLATFORM_H +#define PG_PLATFORM_H + +#if defined(HAVE_SNPRINTF) /* defined in python.h (pyerrors.h) and SDL.h \ + (SDL_config.h) */ +#undef HAVE_SNPRINTF /* remove GCC redefine warning */ +#endif /* HAVE_SNPRINTF */ + +#ifndef PG_INLINE +#if defined(__clang__) +#define PG_INLINE __inline__ __attribute__((__unused__)) +#elif defined(__GNUC__) +#define PG_INLINE __inline__ +#elif defined(_MSC_VER) +#define PG_INLINE __inline +#elif defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L +#define PG_INLINE inline +#else +#define PG_INLINE +#endif +#endif /* ~PG_INLINE */ + +// Worth trying this on MSVC/win32 builds to see if provides any speed up +#ifndef PG_FORCEINLINE +#if defined(__clang__) +#define PG_FORCEINLINE __inline__ __attribute__((__unused__)) +#elif defined(__GNUC__) +#define PG_FORCEINLINE __inline__ +#elif defined(_MSC_VER) +#define PG_FORCEINLINE __forceinline +#elif defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L +#define PG_FORCEINLINE inline +#else +#define PG_FORCEINLINE +#endif +#endif /* ~PG_FORCEINLINE */ + +/* This is unconditionally defined in Python.h */ +#if defined(_POSIX_C_SOURCE) +#undef _POSIX_C_SOURCE +#endif + +/* No signal() */ +#if defined(__SYMBIAN32__) && defined(HAVE_SIGNAL_H) +#undef HAVE_SIGNAL_H +#endif + +#if defined(HAVE_SNPRINTF) +#undef HAVE_SNPRINTF +#endif + +/* SDL needs WIN32 */ +#if !defined(WIN32) && \ + (defined(MS_WIN32) || defined(_WIN32) || \ + defined(__WIN32) || defined(__WIN32__) || defined(_WINDOWS)) +#define WIN32 +#endif + +/* Commenting out SSE4_2 stuff because it does not do runtime detection. +#ifndef PG_TARGET_SSE4_2 +#if defined(__clang__) || (defined(__GNUC__) && ((__GNUC__ == 4 && __GNUC_MINOR__ >= 9) || __GNUC__ >= 5 )) +//The old gcc 4.8 on centos used by manylinux1 does not seem to get sse4.2 intrinsics +#define PG_FUNCTION_TARGET_SSE4_2 __attribute__((target("sse4.2"))) +// No else; we define the fallback later +#endif +#endif +*/ +/* ~PG_TARGET_SSE4_2 */ + +/* +#ifdef PG_FUNCTION_TARGET_SSE4_2 +#if !defined(__SSE4_2__) && !defined(PG_COMPILE_SSE4_2) +#if defined(__x86_64__) || defined(__i386__) +#define PG_COMPILE_SSE4_2 1 +#endif +#endif +#endif +*/ +/* ~PG_TARGET_SSE4_2 */ + +/* Fallback definition of target attribute */ +#ifndef PG_FUNCTION_TARGET_SSE4_2 +#define PG_FUNCTION_TARGET_SSE4_2 +#endif + +#ifndef PG_COMPILE_SSE4_2 +#define PG_COMPILE_SSE4_2 0 +#endif + +#endif /* ~PG_PLATFORM_H */ diff --git a/EXE version/main/include/pygame.h b/EXE version/main/include/pygame.h new file mode 100644 index 00000000..bcbf1d99 --- /dev/null +++ b/EXE version/main/include/pygame.h @@ -0,0 +1,34 @@ +/* + pygame - Python Game Library + Copyright (C) 2000-2001 Pete Shinners + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this library; if not, write to the Free + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Pete Shinners + pete@shinners.org +*/ + +/* To allow the Pygame C api to be globally shared by all code within an + * extension module built from multiple C files, only include the pygame.h + * header within the top level C file, the one which calls the + * 'import_pygame_*' macros. All other C source files of the module should + * include _pygame.h instead. + */ +#ifndef PYGAME_H +#define PYGAME_H + +#include "_pygame.h" + +#endif diff --git a/EXE version/main/include/pygame_bufferproxy.h b/EXE version/main/include/pygame_bufferproxy.h new file mode 100644 index 00000000..d7c4ac67 --- /dev/null +++ b/EXE version/main/include/pygame_bufferproxy.h @@ -0,0 +1,59 @@ +/* + pygame - Python Game Library + Copyright (C) 2000-2001 Pete Shinners + Copyright (C) 2007 Rene Dudfield, Richard Goedeken + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this library; if not, write to the Free + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Pete Shinners + pete@shinners.org +*/ + +/* Bufferproxy module C api. */ +#if !defined(PG_BUFPROXY_HEADER) +#define PG_BUFPROXY_HEADER + +#include + +typedef PyObject *(*_pgbufproxy_new_t)(PyObject *, getbufferproc); +typedef PyObject *(*_pgbufproxy_get_obj_t)(PyObject *); +typedef int (*_pgbufproxy_trip_t)(PyObject *); + +#ifndef PYGAMEAPI_BUFPROXY_INTERNAL + +#include "pgimport.h" + +PYGAMEAPI_DEFINE_SLOTS(bufferproxy); + +#define pgBufproxy_Type (*(PyTypeObject*) \ + PYGAMEAPI_GET_SLOT(bufferproxy, 0) ) + +#define pgBufproxy_Check(x) ((x)->ob_type == &pgBufproxy_Type) + +#define pgBufproxy_New (*(_pgbufproxy_new_t) \ + PYGAMEAPI_GET_SLOT(bufferproxy, 1)) + +#define pgBufproxy_GetParent \ + (*(_pgbufproxy_get_obj_t) \ + PYGAMEAPI_GET_SLOT(bufferproxy, 2)) + +#define pgBufproxy_Trip (*(_pgbufproxy_trip_t) \ + PYGAMEAPI_GET_SLOT(bufferproxy, 3)) + +#define import_pygame_bufferproxy() _IMPORT_PYGAME_MODULE(bufferproxy) + +#endif /* ~PYGAMEAPI_BUFPROXY_INTERNAL */ + +#endif /* ~defined(PG_BUFPROXY_HEADER) */ diff --git a/EXE version/main/include/pygame_font.h b/EXE version/main/include/pygame_font.h new file mode 100644 index 00000000..3fe4500a --- /dev/null +++ b/EXE version/main/include/pygame_font.h @@ -0,0 +1,53 @@ +/* + pygame - Python Game Library + Copyright (C) 2000-2001 Pete Shinners + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this library; if not, write to the Free + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Pete Shinners + pete@shinners.org +*/ + +#include +#include "pgplatform.h" + +struct TTF_Font; + +typedef struct { + PyObject_HEAD + TTF_Font* font; + PyObject* weakreflist; +} PyFontObject; +#define PyFont_AsFont(x) (((PyFontObject*)x)->font) + +#ifndef PYGAMEAPI_FONT_INTERNAL + +#include "pgimport.h" + +PYGAMEAPI_DEFINE_SLOTS(font); + +#define PyFont_Type (*(PyTypeObject*) \ + PYGAMEAPI_GET_SLOT(font, 0)) +#define PyFont_Check(x) ((x)->ob_type == &PyFont_Type) + +#define PyFont_New (*(PyObject*(*)(TTF_Font*))\ + PYGAMEAPI_GET_SLOT(font, 1)) + +/*slot 2 taken by FONT_INIT_CHECK*/ + +#define import_pygame_font() _IMPORT_PYGAME_MODULE(font) + +#endif + diff --git a/EXE version/main/include/pygame_freetype.h b/EXE version/main/include/pygame_freetype.h new file mode 100644 index 00000000..f727ee25 --- /dev/null +++ b/EXE version/main/include/pygame_freetype.h @@ -0,0 +1,43 @@ +/* + pygame - Python Game Library + Copyright (C) 2009 Vicent Marti + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this library; if not, write to the Free + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*/ +#ifndef PYGAME_FREETYPE_H_ +#define PYGAME_FREETYPE_H_ + +#include "pgplatform.h" +#include "pgimport.h" +#include "pgcompat.h" + +#ifndef PYGAME_FREETYPE_INTERNAL + +PYGAMEAPI_DEFINE_SLOTS(_freetype); + +#define pgFont_Type (*(PyTypeObject*) \ + PYGAMEAPI_GET_SLOT(_freetype, 0)) + +#define pgFont_Check(x) ((x)->ob_type == &pgFont_Type) + +#define pgFont_New (*(PyObject*(*)(const char*, long)) \ + PYGAMEAPI_GET_SLOT(_freetype, 1)) + +#define import_pygame_freetype() _IMPORT_PYGAME_MODULE(_freetype) + +#endif /* PYGAME_FREETYPE_INTERNAL */ + +#endif /* PYGAME_FREETYPE_H_ */ diff --git a/EXE version/main/include/pygame_mask.h b/EXE version/main/include/pygame_mask.h new file mode 100644 index 00000000..1b255534 --- /dev/null +++ b/EXE version/main/include/pygame_mask.h @@ -0,0 +1,47 @@ +/* + pygame - Python Game Library + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this library; if not, write to the Free + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#ifndef PGMASK_H +#define PGMASK_H + +#include +#include "bitmask.h" + +typedef struct { + PyObject_HEAD + bitmask_t *mask; + void *bufdata; +} pgMaskObject; + +#define pgMask_AsBitmap(x) (((pgMaskObject*)x)->mask) + +#ifndef PYGAMEAPI_MASK_INTERNAL + +#include "pgimport.h" + +PYGAMEAPI_DEFINE_SLOTS(mask); + +#define pgMask_Type (*(PyTypeObject*) \ + PYGAMEAPI_GET_SLOT(mask, 0)) +#define pgMask_Check(x) ((x)->ob_type == &pgMask_Type) + +#define import_pygame_mask() _IMPORT_PYGAME_MODULE(mask) + +#endif /* ~PYGAMEAPI_MASK_INTERNAL */ + +#endif /* ~PGMASK_H */ diff --git a/EXE version/main/include/pygame_mixer.h b/EXE version/main/include/pygame_mixer.h new file mode 100644 index 00000000..4f3f70f7 --- /dev/null +++ b/EXE version/main/include/pygame_mixer.h @@ -0,0 +1,76 @@ +/* + pygame - Python Game Library + Copyright (C) 2000-2001 Pete Shinners + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this library; if not, write to the Free + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Pete Shinners + pete@shinners.org +*/ + +#ifndef PGMIXER_H +#define PGMIXER_H + +#include +#include + +#include "pgcompat.h" + +struct Mix_Chunk; + +typedef struct { + PyObject_HEAD + Mix_Chunk *chunk; + Uint8 *mem; + PyObject *weakreflist; +} pgSoundObject; + +typedef struct { + PyObject_HEAD + int chan; +} pgChannelObject; + +#define pgSound_AsChunk(x) (((pgSoundObject*)x)->chunk) +#define pgChannel_AsInt(x) (((pgChannelObject*)x)->chan) + +#include "pgimport.h" + +#ifndef PYGAMEAPI_MIXER_INTERNAL + +PYGAMEAPI_DEFINE_SLOTS(mixer); + +#define pgSound_Type (*(PyTypeObject*) \ + PYGAMEAPI_GET_SLOT(mixer, 0)) + +#define pgSound_Check(x) ((x)->ob_type == &pgSound_Type) + +#define pgSound_New (*(PyObject*(*)(Mix_Chunk*)) \ + PYGAMEAPI_GET_SLOT(mixer, 1)) + +#define pgSound_Play (*(PyObject*(*)(PyObject*, PyObject*)) \ + PYGAMEAPI_GET_SLOT(mixer, 2)) + +#define pgChannel_Type (*(PyTypeObject*) \ + PYGAMEAPI_GET_SLOT(mixer, 3)) +#define pgChannel_Check(x) ((x)->ob_type == &pgChannel_Type) + +#define pgChannel_New (*(PyObject*(*)(int)) \ + PYGAMEAPI_GET_SLOT(mixer, 4)) + +#define import_pygame_mixer() _IMPORT_PYGAME_MODULE(mixer) + +#endif /* PYGAMEAPI_MIXER_INTERNAL */ + +#endif /* ~PGMIXER_H */ diff --git a/EXE version/main/include/sse2neon.h b/EXE version/main/include/sse2neon.h new file mode 100644 index 00000000..a3e3ac0d --- /dev/null +++ b/EXE version/main/include/sse2neon.h @@ -0,0 +1,6203 @@ +#ifndef SSE2NEON_H +#define SSE2NEON_H + +// This header file provides a simple API translation layer +// between SSE intrinsics to their corresponding Arm/Aarch64 NEON versions +// +// This header file does not yet translate all of the SSE intrinsics. +// +// Contributors to this work are: +// John W. Ratcliff +// Brandon Rowlett +// Ken Fast +// Eric van Beurden +// Alexander Potylitsin +// Hasindu Gamaarachchi +// Jim Huang +// Mark Cheng +// Malcolm James MacLeod +// Devin Hussey (easyaspi314) +// Sebastian Pop +// Developer Ecosystem Engineering +// Danila Kutenin +// François Turban (JishinMaster) +// Pei-Hsuan Hung +// Yang-Hao Yuan + +/* + * sse2neon is freely redistributable under the MIT License. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +/* Tunable configurations */ + +/* Enable precise implementation of _mm_min_ps and _mm_max_ps + * This would slow down the computation a bit, but gives consistent result with + * x86 SSE2. (e.g. would solve a hole or NaN pixel in the rendering result) + */ +#ifndef SSE2NEON_PRECISE_MINMAX +#define SSE2NEON_PRECISE_MINMAX (0) +#endif + +#if defined(__GNUC__) || defined(__clang__) +#pragma push_macro("FORCE_INLINE") +#pragma push_macro("ALIGN_STRUCT") +#define FORCE_INLINE static inline __attribute__((always_inline)) +#define ALIGN_STRUCT(x) __attribute__((aligned(x))) +#else +#error "Macro name collisions may happen with unsupported compiler." +#ifdef FORCE_INLINE +#undef FORCE_INLINE +#endif +#define FORCE_INLINE static inline +#ifndef ALIGN_STRUCT +#define ALIGN_STRUCT(x) __declspec(align(x)) +#endif +#endif + +#include +#include + +// These cause the build to fail on raspberry pi with 'unsupported target' +// and don't seem to do anything particularly useful +///* Architecture-specific build options */ +///* FIXME: #pragma GCC push_options is only available on GCC */ +//#if defined(__GNUC__) +//#if defined(__arm__) && __ARM_ARCH == 7 +///* According to ARM C Language Extensions Architecture specification, +// * __ARM_NEON is defined to a value indicating the Advanced SIMD (NEON) +// * architecture supported. +// */ +//#if !defined(__ARM_NEON) || !defined(__ARM_NEON__) +//#error "You must enable NEON instructions (e.g. -mfpu=neon) to use SSE2NEON." +//#endif +//#pragma GCC push_options +//#pragma GCC target("fpu=neon") +//#elif defined(__aarch64__) +//#pragma GCC push_options +//#pragma GCC target("+simd") +//#else +//#error "Unsupported target. Must be either ARMv7-A+NEON or ARMv8-A." +//#endif +//#endif + +#include + +/* Rounding functions require either Aarch64 instructions or libm failback */ +#if !defined(__aarch64__) +#include +#endif + +/* "__has_builtin" can be used to query support for built-in functions + * provided by gcc/clang and other compilers that support it. + */ +#ifndef __has_builtin /* GCC prior to 10 or non-clang compilers */ +/* Compatibility with gcc <= 9 */ +#if __GNUC__ <= 9 +#define __has_builtin(x) HAS##x +#define HAS__builtin_popcount 1 +#define HAS__builtin_popcountll 1 +#else +#define __has_builtin(x) 0 +#endif +#endif + +/** + * MACRO for shuffle parameter for _mm_shuffle_ps(). + * Argument fp3 is a digit[0123] that represents the fp from argument "b" + * of mm_shuffle_ps that will be placed in fp3 of result. fp2 is the same + * for fp2 in result. fp1 is a digit[0123] that represents the fp from + * argument "a" of mm_shuffle_ps that will be places in fp1 of result. + * fp0 is the same for fp0 of result. + */ +#define _MM_SHUFFLE(fp3, fp2, fp1, fp0) \ + (((fp3) << 6) | ((fp2) << 4) | ((fp1) << 2) | ((fp0))) + +/* Rounding mode macros. */ +#define _MM_FROUND_TO_NEAREST_INT 0x00 +#define _MM_FROUND_TO_NEG_INF 0x01 +#define _MM_FROUND_TO_POS_INF 0x02 +#define _MM_FROUND_TO_ZERO 0x03 +#define _MM_FROUND_CUR_DIRECTION 0x04 +#define _MM_FROUND_NO_EXC 0x08 + +/* indicate immediate constant argument in a given range */ +#define __constrange(a, b) const + +/* A few intrinsics accept traditional data types like ints or floats, but + * most operate on data types that are specific to SSE. + * If a vector type ends in d, it contains doubles, and if it does not have + * a suffix, it contains floats. An integer vector type can contain any type + * of integer, from chars to shorts to unsigned long longs. + */ +typedef int64x1_t __m64; +typedef float32x4_t __m128; /* 128-bit vector containing 4 floats */ +// On ARM 32-bit architecture, the float64x2_t is not supported. +// The data type __m128d should be represented in a different way for related +// intrinsic conversion. +#if defined(__aarch64__) +typedef float64x2_t __m128d; /* 128-bit vector containing 2 doubles */ +#else +typedef float32x4_t __m128d; +#endif +typedef int64x2_t __m128i; /* 128-bit vector containing integers */ + +/* type-safe casting between types */ + +#define vreinterpretq_m128_f16(x) vreinterpretq_f32_f16(x) +#define vreinterpretq_m128_f32(x) (x) +#define vreinterpretq_m128_f64(x) vreinterpretq_f32_f64(x) + +#define vreinterpretq_m128_u8(x) vreinterpretq_f32_u8(x) +#define vreinterpretq_m128_u16(x) vreinterpretq_f32_u16(x) +#define vreinterpretq_m128_u32(x) vreinterpretq_f32_u32(x) +#define vreinterpretq_m128_u64(x) vreinterpretq_f32_u64(x) + +#define vreinterpretq_m128_s8(x) vreinterpretq_f32_s8(x) +#define vreinterpretq_m128_s16(x) vreinterpretq_f32_s16(x) +#define vreinterpretq_m128_s32(x) vreinterpretq_f32_s32(x) +#define vreinterpretq_m128_s64(x) vreinterpretq_f32_s64(x) + +#define vreinterpretq_f16_m128(x) vreinterpretq_f16_f32(x) +#define vreinterpretq_f32_m128(x) (x) +#define vreinterpretq_f64_m128(x) vreinterpretq_f64_f32(x) + +#define vreinterpretq_u8_m128(x) vreinterpretq_u8_f32(x) +#define vreinterpretq_u16_m128(x) vreinterpretq_u16_f32(x) +#define vreinterpretq_u32_m128(x) vreinterpretq_u32_f32(x) +#define vreinterpretq_u64_m128(x) vreinterpretq_u64_f32(x) + +#define vreinterpretq_s8_m128(x) vreinterpretq_s8_f32(x) +#define vreinterpretq_s16_m128(x) vreinterpretq_s16_f32(x) +#define vreinterpretq_s32_m128(x) vreinterpretq_s32_f32(x) +#define vreinterpretq_s64_m128(x) vreinterpretq_s64_f32(x) + +#define vreinterpretq_m128i_s8(x) vreinterpretq_s64_s8(x) +#define vreinterpretq_m128i_s16(x) vreinterpretq_s64_s16(x) +#define vreinterpretq_m128i_s32(x) vreinterpretq_s64_s32(x) +#define vreinterpretq_m128i_s64(x) (x) + +#define vreinterpretq_m128i_u8(x) vreinterpretq_s64_u8(x) +#define vreinterpretq_m128i_u16(x) vreinterpretq_s64_u16(x) +#define vreinterpretq_m128i_u32(x) vreinterpretq_s64_u32(x) +#define vreinterpretq_m128i_u64(x) vreinterpretq_s64_u64(x) + +#define vreinterpretq_s8_m128i(x) vreinterpretq_s8_s64(x) +#define vreinterpretq_s16_m128i(x) vreinterpretq_s16_s64(x) +#define vreinterpretq_s32_m128i(x) vreinterpretq_s32_s64(x) +#define vreinterpretq_s64_m128i(x) (x) + +#define vreinterpretq_u8_m128i(x) vreinterpretq_u8_s64(x) +#define vreinterpretq_u16_m128i(x) vreinterpretq_u16_s64(x) +#define vreinterpretq_u32_m128i(x) vreinterpretq_u32_s64(x) +#define vreinterpretq_u64_m128i(x) vreinterpretq_u64_s64(x) + +#define vreinterpret_m64_s8(x) vreinterpret_s64_s8(x) +#define vreinterpret_m64_s16(x) vreinterpret_s64_s16(x) +#define vreinterpret_m64_s32(x) vreinterpret_s64_s32(x) +#define vreinterpret_m64_s64(x) (x) + +#define vreinterpret_m64_u8(x) vreinterpret_s64_u8(x) +#define vreinterpret_m64_u16(x) vreinterpret_s64_u16(x) +#define vreinterpret_m64_u32(x) vreinterpret_s64_u32(x) +#define vreinterpret_m64_u64(x) vreinterpret_s64_u64(x) + +#define vreinterpret_m64_f16(x) vreinterpret_s64_f16(x) +#define vreinterpret_m64_f32(x) vreinterpret_s64_f32(x) +#define vreinterpret_m64_f64(x) vreinterpret_s64_f64(x) + +#define vreinterpret_u8_m64(x) vreinterpret_u8_s64(x) +#define vreinterpret_u16_m64(x) vreinterpret_u16_s64(x) +#define vreinterpret_u32_m64(x) vreinterpret_u32_s64(x) +#define vreinterpret_u64_m64(x) vreinterpret_u64_s64(x) + +#define vreinterpret_s8_m64(x) vreinterpret_s8_s64(x) +#define vreinterpret_s16_m64(x) vreinterpret_s16_s64(x) +#define vreinterpret_s32_m64(x) vreinterpret_s32_s64(x) +#define vreinterpret_s64_m64(x) (x) + +#define vreinterpret_f32_m64(x) vreinterpret_f32_s64(x) + +#if defined(__aarch64__) +#define vreinterpretq_m128d_s32(x) vreinterpretq_f64_s32(x) +#define vreinterpretq_m128d_s64(x) vreinterpretq_f64_s64(x) + +#define vreinterpretq_m128d_f64(x) (x) + +#define vreinterpretq_s64_m128d(x) vreinterpretq_s64_f64(x) + +#define vreinterpretq_f64_m128d(x) (x) +#else +#define vreinterpretq_m128d_s32(x) vreinterpretq_f32_s32(x) +#define vreinterpretq_m128d_s64(x) vreinterpretq_f32_s64(x) + +#define vreinterpretq_m128d_f32(x) (x) + +#define vreinterpretq_s64_m128d(x) vreinterpretq_s64_f32(x) + +#define vreinterpretq_f32_m128d(x) (x) +#endif + +// A struct is defined in this header file called 'SIMDVec' which can be used +// by applications which attempt to access the contents of an _m128 struct +// directly. It is important to note that accessing the __m128 struct directly +// is bad coding practice by Microsoft: @see: +// https://msdn.microsoft.com/en-us/library/ayeb3ayc.aspx +// +// However, some legacy source code may try to access the contents of an __m128 +// struct directly so the developer can use the SIMDVec as an alias for it. Any +// casting must be done manually by the developer, as you cannot cast or +// otherwise alias the base NEON data type for intrinsic operations. +// +// union intended to allow direct access to an __m128 variable using the names +// that the MSVC compiler provides. This union should really only be used when +// trying to access the members of the vector as integer values. GCC/clang +// allow native access to the float members through a simple array access +// operator (in C since 4.6, in C++ since 4.8). +// +// Ideally direct accesses to SIMD vectors should not be used since it can cause +// a performance hit. If it really is needed however, the original __m128 +// variable can be aliased with a pointer to this union and used to access +// individual components. The use of this union should be hidden behind a macro +// that is used throughout the codebase to access the members instead of always +// declaring this type of variable. +typedef union ALIGN_STRUCT(16) SIMDVec { + float m128_f32[4]; // as floats - DON'T USE. Added for convenience. + int8_t m128_i8[16]; // as signed 8-bit integers. + int16_t m128_i16[8]; // as signed 16-bit integers. + int32_t m128_i32[4]; // as signed 32-bit integers. + int64_t m128_i64[2]; // as signed 64-bit integers. + uint8_t m128_u8[16]; // as unsigned 8-bit integers. + uint16_t m128_u16[8]; // as unsigned 16-bit integers. + uint32_t m128_u32[4]; // as unsigned 32-bit integers. + uint64_t m128_u64[2]; // as unsigned 64-bit integers. +} SIMDVec; + +// casting using SIMDVec +#define vreinterpretq_nth_u64_m128i(x, n) (((SIMDVec *) &x)->m128_u64[n]) +#define vreinterpretq_nth_u32_m128i(x, n) (((SIMDVec *) &x)->m128_u32[n]) +#define vreinterpretq_nth_u8_m128i(x, n) (((SIMDVec *) &x)->m128_u8[n]) + +/* Backwards compatibility for compilers with lack of specific type support */ + +// Older gcc does not define vld1q_u8_x4 type +#if defined(__GNUC__) && !defined(__clang__) +#if __GNUC__ <= 9 +FORCE_INLINE uint8x16x4_t vld1q_u8_x4(const uint8_t *p) +{ + uint8x16x4_t ret; + ret.val[0] = vld1q_u8(p + 0); + ret.val[1] = vld1q_u8(p + 16); + ret.val[2] = vld1q_u8(p + 32); + ret.val[3] = vld1q_u8(p + 48); + return ret; +} +#endif +#endif + +/* Function Naming Conventions + * The naming convention of SSE intrinsics is straightforward. A generic SSE + * intrinsic function is given as follows: + * _mm__ + * + * The parts of this format are given as follows: + * 1. describes the operation performed by the intrinsic + * 2. identifies the data type of the function's primary arguments + * + * This last part, , is a little complicated. It identifies the + * content of the input values, and can be set to any of the following values: + * + ps - vectors contain floats (ps stands for packed single-precision) + * + pd - vectors cantain doubles (pd stands for packed double-precision) + * + epi8/epi16/epi32/epi64 - vectors contain 8-bit/16-bit/32-bit/64-bit + * signed integers + * + epu8/epu16/epu32/epu64 - vectors contain 8-bit/16-bit/32-bit/64-bit + * unsigned integers + * + si128 - unspecified 128-bit vector or 256-bit vector + * + m128/m128i/m128d - identifies input vector types when they are different + * than the type of the returned vector + * + * For example, _mm_setzero_ps. The _mm implies that the function returns + * a 128-bit vector. The _ps at the end implies that the argument vectors + * contain floats. + * + * A complete example: Byte Shuffle - pshufb (_mm_shuffle_epi8) + * // Set packed 16-bit integers. 128 bits, 8 short, per 16 bits + * __m128i v_in = _mm_setr_epi16(1, 2, 3, 4, 5, 6, 7, 8); + * // Set packed 8-bit integers + * // 128 bits, 16 chars, per 8 bits + * __m128i v_perm = _mm_setr_epi8(1, 0, 2, 3, 8, 9, 10, 11, + * 4, 5, 12, 13, 6, 7, 14, 15); + * // Shuffle packed 8-bit integers + * __m128i v_out = _mm_shuffle_epi8(v_in, v_perm); // pshufb + * + * Data (Number, Binary, Byte Index): + +------+------+-------------+------+------+-------------+ + | 1 | 2 | 3 | 4 | Number + +------+------+------+------+------+------+------+------+ + | 0000 | 0001 | 0000 | 0010 | 0000 | 0011 | 0000 | 0100 | Binary + +------+------+------+------+------+------+------+------+ + | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | Index + +------+------+------+------+------+------+------+------+ + + +------+------+------+------+------+------+------+------+ + | 5 | 6 | 7 | 8 | Number + +------+------+------+------+------+------+------+------+ + | 0000 | 0101 | 0000 | 0110 | 0000 | 0111 | 0000 | 1000 | Binary + +------+------+------+------+------+------+------+------+ + | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | Index + +------+------+------+------+------+------+------+------+ + * Index (Byte Index): + +------+------+------+------+------+------+------+------+ + | 1 | 0 | 2 | 3 | 8 | 9 | 10 | 11 | + +------+------+------+------+------+------+------+------+ + + +------+------+------+------+------+------+------+------+ + | 4 | 5 | 12 | 13 | 6 | 7 | 14 | 15 | + +------+------+------+------+------+------+------+------+ + * Result: + +------+------+------+------+------+------+------+------+ + | 1 | 0 | 2 | 3 | 8 | 9 | 10 | 11 | Index + +------+------+------+------+------+------+------+------+ + | 0001 | 0000 | 0000 | 0010 | 0000 | 0101 | 0000 | 0110 | Binary + +------+------+------+------+------+------+------+------+ + | 256 | 2 | 5 | 6 | Number + +------+------+------+------+------+------+------+------+ + + +------+------+------+------+------+------+------+------+ + | 4 | 5 | 12 | 13 | 6 | 7 | 14 | 15 | Index + +------+------+------+------+------+------+------+------+ + | 0000 | 0011 | 0000 | 0111 | 0000 | 0100 | 0000 | 1000 | Binary + +------+------+------+------+------+------+------+------+ + | 3 | 7 | 4 | 8 | Number + +------+------+------+------+------+------+-------------+ + */ + +/* Set/get methods */ + +/* Constants for use with _mm_prefetch. */ +enum _mm_hint { + _MM_HINT_NTA = 0, /* load data to L1 and L2 cache, mark it as NTA */ + _MM_HINT_T0 = 1, /* load data to L1 and L2 cache */ + _MM_HINT_T1 = 2, /* load data to L2 cache only */ + _MM_HINT_T2 = 3, /* load data to L2 cache only, mark it as NTA */ + _MM_HINT_ENTA = 4, /* exclusive version of _MM_HINT_NTA */ + _MM_HINT_ET0 = 5, /* exclusive version of _MM_HINT_T0 */ + _MM_HINT_ET1 = 6, /* exclusive version of _MM_HINT_T1 */ + _MM_HINT_ET2 = 7 /* exclusive version of _MM_HINT_T2 */ +}; + +// Loads one cache line of data from address p to a location closer to the +// processor. https://msdn.microsoft.com/en-us/library/84szxsww(v=vs.100).aspx +FORCE_INLINE void _mm_prefetch(const void *p, int i) +{ + (void) i; + __builtin_prefetch(p); +} + +// Copy the lower single-precision (32-bit) floating-point element of a to dst. +// +// dst[31:0] := a[31:0] +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvtss_f32 +FORCE_INLINE float _mm_cvtss_f32(__m128 a) +{ + return vgetq_lane_f32(vreinterpretq_f32_m128(a), 0); +} + +// Convert the lower single-precision (32-bit) floating-point element in a to a +// 32-bit integer, and store the result in dst. +// +// dst[31:0] := Convert_FP32_To_Int32(a[31:0]) +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvtss_si32 +#define _mm_cvtss_si32(a) _mm_cvt_ss2si(a) + +// Convert the lower single-precision (32-bit) floating-point element in a to a +// 64-bit integer, and store the result in dst. +// +// dst[63:0] := Convert_FP32_To_Int64(a[31:0]) +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvtss_si64 +FORCE_INLINE int _mm_cvtss_si64(__m128 a) +{ +#if defined(__aarch64__) + return vgetq_lane_s64( + vreinterpretq_s64_s32(vcvtnq_s32_f32(vreinterpretq_f32_m128(a))), 0); +#else + float32_t data = vgetq_lane_f32(vreinterpretq_f32_m128(a), 0); + float32_t diff = data - floor(data); + if (diff > 0.5) + return (int64_t) ceil(data); + if (diff == 0.5) { + int64_t f = (int64_t) floor(data); + int64_t c = (int64_t) ceil(data); + return c & 1 ? f : c; + } + return (int64_t) floor(data); +#endif +} + +// Convert packed single-precision (32-bit) floating-point elements in a to +// packed 32-bit integers with truncation, and store the results in dst. +// +// FOR j := 0 to 1 +// i := 32*j +// dst[i+31:i] := Convert_FP32_To_Int32_Truncate(a[i+31:i]) +// ENDFOR +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvtt_ps2pi +FORCE_INLINE __m64 _mm_cvtt_ps2pi(__m128 a) +{ + return vreinterpret_m64_s32( + vget_low_s32(vcvtq_s32_f32(vreinterpretq_f32_m128(a)))); +} + +// Convert the lower single-precision (32-bit) floating-point element in a to a +// 32-bit integer with truncation, and store the result in dst. +// +// dst[31:0] := Convert_FP32_To_Int32_Truncate(a[31:0]) +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvtt_ss2si +FORCE_INLINE int _mm_cvtt_ss2si(__m128 a) +{ + return vgetq_lane_s32(vcvtq_s32_f32(vreinterpretq_f32_m128(a)), 0); +} + +// Convert packed single-precision (32-bit) floating-point elements in a to +// packed 32-bit integers with truncation, and store the results in dst. +// +// FOR j := 0 to 1 +// i := 32*j +// dst[i+31:i] := Convert_FP32_To_Int32_Truncate(a[i+31:i]) +// ENDFOR +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvttps_pi32 +#define _mm_cvttps_pi32(a) _mm_cvtt_ps2pi(a) + +// Convert the lower single-precision (32-bit) floating-point element in a to a +// 32-bit integer with truncation, and store the result in dst. +// +// dst[31:0] := Convert_FP32_To_Int32_Truncate(a[31:0]) +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvttss_si32 +#define _mm_cvttss_si32(a) _mm_cvtt_ss2si(a) + +// Convert the lower single-precision (32-bit) floating-point element in a to a +// 64-bit integer with truncation, and store the result in dst. +// +// dst[63:0] := Convert_FP32_To_Int64_Truncate(a[31:0]) +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvttss_si64 +FORCE_INLINE int64_t _mm_cvttss_si64(__m128 a) +{ + return vgetq_lane_s64( + vmovl_s32(vget_low_s32(vcvtq_s32_f32(vreinterpretq_f32_m128(a)))), 0); +} + +// Sets the 128-bit value to zero +// https://msdn.microsoft.com/en-us/library/vstudio/ys7dw0kh(v=vs.100).aspx +FORCE_INLINE __m128i _mm_setzero_si128(void) +{ + return vreinterpretq_m128i_s32(vdupq_n_s32(0)); +} + +// Clears the four single-precision, floating-point values. +// https://msdn.microsoft.com/en-us/library/vstudio/tk1t2tbz(v=vs.100).aspx +FORCE_INLINE __m128 _mm_setzero_ps(void) +{ + return vreinterpretq_m128_f32(vdupq_n_f32(0)); +} + +// Return vector of type __m128d with all elements set to zero. +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_setzero_pd +FORCE_INLINE __m128d _mm_setzero_pd(void) +{ +#if defined(__aarch64__) + return vreinterpretq_m128d_f64(vdupq_n_f64(0)); +#else + return vreinterpretq_m128d_f32(vdupq_n_f32(0)); +#endif +} + +// Sets the four single-precision, floating-point values to w. +// +// r0 := r1 := r2 := r3 := w +// +// https://msdn.microsoft.com/en-us/library/vstudio/2x1se8ha(v=vs.100).aspx +FORCE_INLINE __m128 _mm_set1_ps(float _w) +{ + return vreinterpretq_m128_f32(vdupq_n_f32(_w)); +} + +// Sets the four single-precision, floating-point values to w. +// https://msdn.microsoft.com/en-us/library/vstudio/2x1se8ha(v=vs.100).aspx +FORCE_INLINE __m128 _mm_set_ps1(float _w) +{ + return vreinterpretq_m128_f32(vdupq_n_f32(_w)); +} + +// Sets the four single-precision, floating-point values to the four inputs. +// https://msdn.microsoft.com/en-us/library/vstudio/afh0zf75(v=vs.100).aspx +FORCE_INLINE __m128 _mm_set_ps(float w, float z, float y, float x) +{ + float ALIGN_STRUCT(16) data[4] = {x, y, z, w}; + return vreinterpretq_m128_f32(vld1q_f32(data)); +} + +// Copy single-precision (32-bit) floating-point element a to the lower element +// of dst, and zero the upper 3 elements. +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_set_ss +FORCE_INLINE __m128 _mm_set_ss(float a) +{ + float ALIGN_STRUCT(16) data[4] = {a, 0, 0, 0}; + return vreinterpretq_m128_f32(vld1q_f32(data)); +} + +// Sets the four single-precision, floating-point values to the four inputs in +// reverse order. +// https://msdn.microsoft.com/en-us/library/vstudio/d2172ct3(v=vs.100).aspx +FORCE_INLINE __m128 _mm_setr_ps(float w, float z, float y, float x) +{ + float ALIGN_STRUCT(16) data[4] = {w, z, y, x}; + return vreinterpretq_m128_f32(vld1q_f32(data)); +} + +// Sets the 8 signed 16-bit integer values in reverse order. +// +// Return Value +// r0 := w0 +// r1 := w1 +// ... +// r7 := w7 +FORCE_INLINE __m128i _mm_setr_epi16(short w0, + short w1, + short w2, + short w3, + short w4, + short w5, + short w6, + short w7) +{ + int16_t ALIGN_STRUCT(16) data[8] = {w0, w1, w2, w3, w4, w5, w6, w7}; + return vreinterpretq_m128i_s16(vld1q_s16((int16_t *) data)); +} + +// Sets the 4 signed 32-bit integer values in reverse order +// https://technet.microsoft.com/en-us/library/security/27yb3ee5(v=vs.90).aspx +FORCE_INLINE __m128i _mm_setr_epi32(int i3, int i2, int i1, int i0) +{ + int32_t ALIGN_STRUCT(16) data[4] = {i3, i2, i1, i0}; + return vreinterpretq_m128i_s32(vld1q_s32(data)); +} + +// Set packed 64-bit integers in dst with the supplied values in reverse order. +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_setr_epi64 +FORCE_INLINE __m128i _mm_setr_epi64(__m64 e1, __m64 e0) +{ + return vreinterpretq_m128i_s64(vcombine_s64(e1, e0)); +} + +// Sets the 16 signed 8-bit integer values to b. +// +// r0 := b +// r1 := b +// ... +// r15 := b +// +// https://msdn.microsoft.com/en-us/library/6e14xhyf(v=vs.100).aspx +FORCE_INLINE __m128i _mm_set1_epi8(signed char w) +{ + return vreinterpretq_m128i_s8(vdupq_n_s8(w)); +} + +// Sets the 8 signed 16-bit integer values to w. +// +// r0 := w +// r1 := w +// ... +// r7 := w +// +// https://msdn.microsoft.com/en-us/library/k0ya3x0e(v=vs.90).aspx +FORCE_INLINE __m128i _mm_set1_epi16(short w) +{ + return vreinterpretq_m128i_s16(vdupq_n_s16(w)); +} + +// Sets the 16 signed 8-bit integer values. +// https://msdn.microsoft.com/en-us/library/x0cx8zd3(v=vs.90).aspx +FORCE_INLINE __m128i _mm_set_epi8(signed char b15, + signed char b14, + signed char b13, + signed char b12, + signed char b11, + signed char b10, + signed char b9, + signed char b8, + signed char b7, + signed char b6, + signed char b5, + signed char b4, + signed char b3, + signed char b2, + signed char b1, + signed char b0) +{ + int8_t ALIGN_STRUCT(16) + data[16] = {(int8_t) b0, (int8_t) b1, (int8_t) b2, (int8_t) b3, + (int8_t) b4, (int8_t) b5, (int8_t) b6, (int8_t) b7, + (int8_t) b8, (int8_t) b9, (int8_t) b10, (int8_t) b11, + (int8_t) b12, (int8_t) b13, (int8_t) b14, (int8_t) b15}; + return (__m128i) vld1q_s8(data); +} + +// Sets the 8 signed 16-bit integer values. +// https://msdn.microsoft.com/en-au/library/3e0fek84(v=vs.90).aspx +FORCE_INLINE __m128i _mm_set_epi16(short i7, + short i6, + short i5, + short i4, + short i3, + short i2, + short i1, + short i0) +{ + int16_t ALIGN_STRUCT(16) data[8] = {i0, i1, i2, i3, i4, i5, i6, i7}; + return vreinterpretq_m128i_s16(vld1q_s16(data)); +} + +// Sets the 16 signed 8-bit integer values in reverse order. +// https://msdn.microsoft.com/en-us/library/2khb9c7k(v=vs.90).aspx +FORCE_INLINE __m128i _mm_setr_epi8(signed char b0, + signed char b1, + signed char b2, + signed char b3, + signed char b4, + signed char b5, + signed char b6, + signed char b7, + signed char b8, + signed char b9, + signed char b10, + signed char b11, + signed char b12, + signed char b13, + signed char b14, + signed char b15) +{ + int8_t ALIGN_STRUCT(16) + data[16] = {(int8_t) b0, (int8_t) b1, (int8_t) b2, (int8_t) b3, + (int8_t) b4, (int8_t) b5, (int8_t) b6, (int8_t) b7, + (int8_t) b8, (int8_t) b9, (int8_t) b10, (int8_t) b11, + (int8_t) b12, (int8_t) b13, (int8_t) b14, (int8_t) b15}; + return (__m128i) vld1q_s8(data); +} + +// Sets the 4 signed 32-bit integer values to i. +// +// r0 := i +// r1 := i +// r2 := i +// r3 := I +// +// https://msdn.microsoft.com/en-us/library/vstudio/h4xscxat(v=vs.100).aspx +FORCE_INLINE __m128i _mm_set1_epi32(int _i) +{ + return vreinterpretq_m128i_s32(vdupq_n_s32(_i)); +} + +// Sets the 2 signed 64-bit integer values to i. +// https://docs.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-2010/whtfzhzk(v=vs.100) +FORCE_INLINE __m128i _mm_set1_epi64(__m64 _i) +{ + return vreinterpretq_m128i_s64(vdupq_n_s64((int64_t) _i)); +} + +// Sets the 2 signed 64-bit integer values to i. +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_set1_epi64x +FORCE_INLINE __m128i _mm_set1_epi64x(int64_t _i) +{ + return vreinterpretq_m128i_s64(vdupq_n_s64(_i)); +} + +// Sets the 4 signed 32-bit integer values. +// https://msdn.microsoft.com/en-us/library/vstudio/019beekt(v=vs.100).aspx +FORCE_INLINE __m128i _mm_set_epi32(int i3, int i2, int i1, int i0) +{ + int32_t ALIGN_STRUCT(16) data[4] = {i0, i1, i2, i3}; + return vreinterpretq_m128i_s32(vld1q_s32(data)); +} + +// Returns the __m128i structure with its two 64-bit integer values +// initialized to the values of the two 64-bit integers passed in. +// https://msdn.microsoft.com/en-us/library/dk2sdw0h(v=vs.120).aspx +FORCE_INLINE __m128i _mm_set_epi64x(int64_t i1, int64_t i2) +{ + int64_t ALIGN_STRUCT(16) data[2] = {i2, i1}; + return vreinterpretq_m128i_s64(vld1q_s64(data)); +} + +// Returns the __m128i structure with its two 64-bit integer values +// initialized to the values of the two 64-bit integers passed in. +// https://msdn.microsoft.com/en-us/library/dk2sdw0h(v=vs.120).aspx +FORCE_INLINE __m128i _mm_set_epi64(__m64 i1, __m64 i2) +{ + return _mm_set_epi64x((int64_t) i1, (int64_t) i2); +} + +// Set packed double-precision (64-bit) floating-point elements in dst with the +// supplied values. +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_set_pd +FORCE_INLINE __m128d _mm_set_pd(double e1, double e0) +{ + double ALIGN_STRUCT(16) data[2] = {e0, e1}; +#if defined(__aarch64__) + return vreinterpretq_m128d_f64(vld1q_f64((float64_t *) data)); +#else + return vreinterpretq_m128d_f32(vld1q_f32((float32_t *) data)); +#endif +} + +// Stores four single-precision, floating-point values. +// https://msdn.microsoft.com/en-us/library/vstudio/s3h4ay6y(v=vs.100).aspx +FORCE_INLINE void _mm_store_ps(float *p, __m128 a) +{ + vst1q_f32(p, vreinterpretq_f32_m128(a)); +} + +// Stores four single-precision, floating-point values. +// https://msdn.microsoft.com/en-us/library/44e30x22(v=vs.100).aspx +FORCE_INLINE void _mm_storeu_ps(float *p, __m128 a) +{ + vst1q_f32(p, vreinterpretq_f32_m128(a)); +} + +// Stores four 32-bit integer values as (as a __m128i value) at the address p. +// https://msdn.microsoft.com/en-us/library/vstudio/edk11s13(v=vs.100).aspx +FORCE_INLINE void _mm_store_si128(__m128i *p, __m128i a) +{ + vst1q_s32((int32_t *) p, vreinterpretq_s32_m128i(a)); +} + +// Stores four 32-bit integer values as (as a __m128i value) at the address p. +// https://msdn.microsoft.com/en-us/library/vstudio/edk11s13(v=vs.100).aspx +FORCE_INLINE void _mm_storeu_si128(__m128i *p, __m128i a) +{ + vst1q_s32((int32_t *) p, vreinterpretq_s32_m128i(a)); +} + +// Stores the lower single - precision, floating - point value. +// https://msdn.microsoft.com/en-us/library/tzz10fbx(v=vs.100).aspx +FORCE_INLINE void _mm_store_ss(float *p, __m128 a) +{ + vst1q_lane_f32(p, vreinterpretq_f32_m128(a), 0); +} + +// Store 128-bits (composed of 2 packed double-precision (64-bit) floating-point +// elements) from a into memory. mem_addr must be aligned on a 16-byte boundary +// or a general-protection exception may be generated. +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_store_pd +FORCE_INLINE void _mm_store_pd(double *mem_addr, __m128d a) +{ +#if defined(__aarch64__) + vst1q_f64((float64_t *) mem_addr, vreinterpretq_f64_m128d(a)); +#else + vst1q_f32((float32_t *) mem_addr, vreinterpretq_f32_m128d(a)); +#endif +} + +// Store 128-bits (composed of 2 packed double-precision (64-bit) floating-point +// elements) from a into memory. mem_addr does not need to be aligned on any +// particular boundary. +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_storeu_pd +FORCE_INLINE void _mm_storeu_pd(double *mem_addr, __m128d a) +{ + _mm_store_pd(mem_addr, a); +} + +// Reads the lower 64 bits of b and stores them into the lower 64 bits of a. +// https://msdn.microsoft.com/en-us/library/hhwf428f%28v=vs.90%29.aspx +FORCE_INLINE void _mm_storel_epi64(__m128i *a, __m128i b) +{ + uint64x1_t hi = vget_high_u64(vreinterpretq_u64_m128i(*a)); + uint64x1_t lo = vget_low_u64(vreinterpretq_u64_m128i(b)); + *a = vreinterpretq_m128i_u64(vcombine_u64(lo, hi)); +} + +// Stores the lower two single-precision floating point values of a to the +// address p. +// +// *p0 := a0 +// *p1 := a1 +// +// https://msdn.microsoft.com/en-us/library/h54t98ks(v=vs.90).aspx +FORCE_INLINE void _mm_storel_pi(__m64 *p, __m128 a) +{ + *p = vreinterpret_m64_f32(vget_low_f32(a)); +} + +// Stores the upper two single-precision, floating-point values of a to the +// address p. +// +// *p0 := a2 +// *p1 := a3 +// +// https://msdn.microsoft.com/en-us/library/a7525fs8(v%3dvs.90).aspx +FORCE_INLINE void _mm_storeh_pi(__m64 *p, __m128 a) +{ + *p = vreinterpret_m64_f32(vget_high_f32(a)); +} + +// Loads a single single-precision, floating-point value, copying it into all +// four words +// https://msdn.microsoft.com/en-us/library/vstudio/5cdkf716(v=vs.100).aspx +FORCE_INLINE __m128 _mm_load1_ps(const float *p) +{ + return vreinterpretq_m128_f32(vld1q_dup_f32(p)); +} + +// Load a single-precision (32-bit) floating-point element from memory into all +// elements of dst. +// +// dst[31:0] := MEM[mem_addr+31:mem_addr] +// dst[63:32] := MEM[mem_addr+31:mem_addr] +// dst[95:64] := MEM[mem_addr+31:mem_addr] +// dst[127:96] := MEM[mem_addr+31:mem_addr] +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_load_ps1 +#define _mm_load_ps1 _mm_load1_ps + +// Sets the lower two single-precision, floating-point values with 64 +// bits of data loaded from the address p; the upper two values are passed +// through from a. +// +// Return Value +// r0 := *p0 +// r1 := *p1 +// r2 := a2 +// r3 := a3 +// +// https://msdn.microsoft.com/en-us/library/s57cyak2(v=vs.100).aspx +FORCE_INLINE __m128 _mm_loadl_pi(__m128 a, __m64 const *p) +{ + return vreinterpretq_m128_f32( + vcombine_f32(vld1_f32((const float32_t *) p), vget_high_f32(a))); +} + +// Load 4 single-precision (32-bit) floating-point elements from memory into dst +// in reverse order. mem_addr must be aligned on a 16-byte boundary or a +// general-protection exception may be generated. +// +// dst[31:0] := MEM[mem_addr+127:mem_addr+96] +// dst[63:32] := MEM[mem_addr+95:mem_addr+64] +// dst[95:64] := MEM[mem_addr+63:mem_addr+32] +// dst[127:96] := MEM[mem_addr+31:mem_addr] +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_loadr_ps +FORCE_INLINE __m128 _mm_loadr_ps(const float *p) +{ + float32x4_t v = vrev64q_f32(vld1q_f32(p)); + return vreinterpretq_m128_f32(vextq_f32(v, v, 2)); +} + +// Sets the upper two single-precision, floating-point values with 64 +// bits of data loaded from the address p; the lower two values are passed +// through from a. +// +// r0 := a0 +// r1 := a1 +// r2 := *p0 +// r3 := *p1 +// +// https://msdn.microsoft.com/en-us/library/w92wta0x(v%3dvs.100).aspx +FORCE_INLINE __m128 _mm_loadh_pi(__m128 a, __m64 const *p) +{ + return vreinterpretq_m128_f32( + vcombine_f32(vget_low_f32(a), vld1_f32((const float32_t *) p))); +} + +// Loads four single-precision, floating-point values. +// https://msdn.microsoft.com/en-us/library/vstudio/zzd50xxt(v=vs.100).aspx +FORCE_INLINE __m128 _mm_load_ps(const float *p) +{ + return vreinterpretq_m128_f32(vld1q_f32(p)); +} + +// Loads four single-precision, floating-point values. +// https://msdn.microsoft.com/en-us/library/x1b16s7z%28v=vs.90%29.aspx +FORCE_INLINE __m128 _mm_loadu_ps(const float *p) +{ + // for neon, alignment doesn't matter, so _mm_load_ps and _mm_loadu_ps are + // equivalent for neon + return vreinterpretq_m128_f32(vld1q_f32(p)); +} + +// Load unaligned 16-bit integer from memory into the first element of dst. +// +// dst[15:0] := MEM[mem_addr+15:mem_addr] +// dst[MAX:16] := 0 +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_loadu_si16 +FORCE_INLINE __m128i _mm_loadu_si16(const void *p) +{ + return vreinterpretq_m128i_s16( + vsetq_lane_s16(*(const int16_t *) p, vdupq_n_s16(0), 0)); +} + +// Load unaligned 64-bit integer from memory into the first element of dst. +// +// dst[63:0] := MEM[mem_addr+63:mem_addr] +// dst[MAX:64] := 0 +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_loadu_si64 +FORCE_INLINE __m128i _mm_loadu_si64(const void *p) +{ + return vreinterpretq_m128i_s64( + vcombine_s64(vld1_s64((const int64_t *) p), vdup_n_s64(0))); +} + +// Load a double-precision (64-bit) floating-point element from memory into the +// lower of dst, and zero the upper element. mem_addr does not need to be +// aligned on any particular boundary. +// +// dst[63:0] := MEM[mem_addr+63:mem_addr] +// dst[127:64] := 0 +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_load_sd +FORCE_INLINE __m128d _mm_load_sd(const double *p) +{ +#if defined(__aarch64__) + return vreinterpretq_m128d_f64(vsetq_lane_f64(*p, vdupq_n_f64(0), 0)); +#else + const float *fp = (const float *) p; + float ALIGN_STRUCT(16) data[4] = {fp[0], fp[1], 0, 0}; + return vreinterpretq_m128d_f32(vld1q_f32(data)); +#endif +} + +// Loads two double-precision from 16-byte aligned memory, floating-point +// values. +// +// dst[127:0] := MEM[mem_addr+127:mem_addr] +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_load_pd +FORCE_INLINE __m128d _mm_load_pd(const double *p) +{ +#if defined(__aarch64__) + return vreinterpretq_m128d_f64(vld1q_f64(p)); +#else + const float *fp = (const float *) p; + float ALIGN_STRUCT(16) data[4] = {fp[0], fp[1], fp[2], fp[3]}; + return vreinterpretq_m128d_f32(vld1q_f32(data)); +#endif +} + +// Loads two double-precision from unaligned memory, floating-point values. +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_loadu_pd +FORCE_INLINE __m128d _mm_loadu_pd(const double *p) +{ + return _mm_load_pd(p); +} + +// Loads an single - precision, floating - point value into the low word and +// clears the upper three words. +// https://msdn.microsoft.com/en-us/library/548bb9h4%28v=vs.90%29.aspx +FORCE_INLINE __m128 _mm_load_ss(const float *p) +{ + return vreinterpretq_m128_f32(vsetq_lane_f32(*p, vdupq_n_f32(0), 0)); +} + +FORCE_INLINE __m128i _mm_loadl_epi64(__m128i const *p) +{ + /* Load the lower 64 bits of the value pointed to by p into the + * lower 64 bits of the result, zeroing the upper 64 bits of the result. + */ + return vreinterpretq_m128i_s32( + vcombine_s32(vld1_s32((int32_t const *) p), vcreate_s32(0))); +} + +// Load a double-precision (64-bit) floating-point element from memory into the +// lower element of dst, and copy the upper element from a to dst. mem_addr does +// not need to be aligned on any particular boundary. +// +// dst[63:0] := MEM[mem_addr+63:mem_addr] +// dst[127:64] := a[127:64] +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_loadl_pd +FORCE_INLINE __m128d _mm_loadl_pd(__m128d a, const double *p) +{ +#if defined(__aarch64__) + return vreinterpretq_m128d_f64( + vcombine_f64(vld1_f64(p), vget_high_f64(vreinterpretq_f64_m128d(a)))); +#else + return vreinterpretq_m128d_f32( + vcombine_f32(vld1_f32((const float *) p), + vget_high_f32(vreinterpretq_f32_m128d(a)))); +#endif +} + +// Load 2 double-precision (64-bit) floating-point elements from memory into dst +// in reverse order. mem_addr must be aligned on a 16-byte boundary or a +// general-protection exception may be generated. +// +// dst[63:0] := MEM[mem_addr+127:mem_addr+64] +// dst[127:64] := MEM[mem_addr+63:mem_addr] +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_loadr_pd +FORCE_INLINE __m128d _mm_loadr_pd(const double *p) +{ +#if defined(__aarch64__) + float64x2_t v = vld1q_f64(p); + return vreinterpretq_m128d_f64(vextq_f64(v, v, 1)); +#else + int64x2_t v = vld1q_s64((const int64_t *) p); + return vreinterpretq_m128d_s64(vextq_s64(v, v, 1)); +#endif +} + +// Sets the low word to the single-precision, floating-point value of b +// https://docs.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-2010/35hdzazd(v=vs.100) +FORCE_INLINE __m128 _mm_move_ss(__m128 a, __m128 b) +{ + return vreinterpretq_m128_f32( + vsetq_lane_f32(vgetq_lane_f32(vreinterpretq_f32_m128(b), 0), + vreinterpretq_f32_m128(a), 0)); +} + +// Copy the lower 64-bit integer in a to the lower element of dst, and zero the +// upper element. +// +// dst[63:0] := a[63:0] +// dst[127:64] := 0 +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_move_epi64 +FORCE_INLINE __m128i _mm_move_epi64(__m128i a) +{ + return vreinterpretq_m128i_s64( + vsetq_lane_s64(0, vreinterpretq_s64_m128i(a), 1)); +} + +// Return vector of type __m128 with undefined elements. +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_undefined_ps +FORCE_INLINE __m128 _mm_undefined_ps(void) +{ + __m128 a; + return a; +} + +/* Logic/Binary operations */ + +// Computes the bitwise AND-NOT of the four single-precision, floating-point +// values of a and b. +// +// r0 := ~a0 & b0 +// r1 := ~a1 & b1 +// r2 := ~a2 & b2 +// r3 := ~a3 & b3 +// +// https://msdn.microsoft.com/en-us/library/vstudio/68h7wd02(v=vs.100).aspx +FORCE_INLINE __m128 _mm_andnot_ps(__m128 a, __m128 b) +{ + return vreinterpretq_m128_s32( + vbicq_s32(vreinterpretq_s32_m128(b), + vreinterpretq_s32_m128(a))); // *NOTE* argument swap +} + +// Compute the bitwise NOT of packed double-precision (64-bit) floating-point +// elements in a and then AND with b, and store the results in dst. +// +// FOR j := 0 to 1 +// i := j*64 +// dst[i+63:i] := ((NOT a[i+63:i]) AND b[i+63:i]) +// ENDFOR +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_andnot_pd +FORCE_INLINE __m128d _mm_andnot_pd(__m128d a, __m128d b) +{ + // *NOTE* argument swap + return vreinterpretq_m128d_s64( + vbicq_s64(vreinterpretq_s64_m128d(b), vreinterpretq_s64_m128d(a))); +} + +// Computes the bitwise AND of the 128-bit value in b and the bitwise NOT of the +// 128-bit value in a. +// +// r := (~a) & b +// +// https://msdn.microsoft.com/en-us/library/vstudio/1beaceh8(v=vs.100).aspx +FORCE_INLINE __m128i _mm_andnot_si128(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s32( + vbicq_s32(vreinterpretq_s32_m128i(b), + vreinterpretq_s32_m128i(a))); // *NOTE* argument swap +} + +// Computes the bitwise AND of the 128-bit value in a and the 128-bit value in +// b. +// +// r := a & b +// +// https://msdn.microsoft.com/en-us/library/vstudio/6d1txsa8(v=vs.100).aspx +FORCE_INLINE __m128i _mm_and_si128(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s32( + vandq_s32(vreinterpretq_s32_m128i(a), vreinterpretq_s32_m128i(b))); +} + +// Computes the bitwise AND of the four single-precision, floating-point values +// of a and b. +// +// r0 := a0 & b0 +// r1 := a1 & b1 +// r2 := a2 & b2 +// r3 := a3 & b3 +// +// https://msdn.microsoft.com/en-us/library/vstudio/73ck1xc5(v=vs.100).aspx +FORCE_INLINE __m128 _mm_and_ps(__m128 a, __m128 b) +{ + return vreinterpretq_m128_s32( + vandq_s32(vreinterpretq_s32_m128(a), vreinterpretq_s32_m128(b))); +} + +// Compute the bitwise AND of packed double-precision (64-bit) floating-point +// elements in a and b, and store the results in dst. +// +// FOR j := 0 to 1 +// i := j*64 +// dst[i+63:i] := a[i+63:i] AND b[i+63:i] +// ENDFOR +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_and_pd +FORCE_INLINE __m128d _mm_and_pd(__m128d a, __m128d b) +{ + return vreinterpretq_m128d_s64( + vandq_s64(vreinterpretq_s64_m128d(a), vreinterpretq_s64_m128d(b))); +} + +// Computes the bitwise OR of the four single-precision, floating-point values +// of a and b. +// https://msdn.microsoft.com/en-us/library/vstudio/7ctdsyy0(v=vs.100).aspx +FORCE_INLINE __m128 _mm_or_ps(__m128 a, __m128 b) +{ + return vreinterpretq_m128_s32( + vorrq_s32(vreinterpretq_s32_m128(a), vreinterpretq_s32_m128(b))); +} + +// Computes bitwise EXOR (exclusive-or) of the four single-precision, +// floating-point values of a and b. +// https://msdn.microsoft.com/en-us/library/ss6k3wk8(v=vs.100).aspx +FORCE_INLINE __m128 _mm_xor_ps(__m128 a, __m128 b) +{ + return vreinterpretq_m128_s32( + veorq_s32(vreinterpretq_s32_m128(a), vreinterpretq_s32_m128(b))); +} + +// Compute the bitwise XOR of packed double-precision (64-bit) floating-point +// elements in a and b, and store the results in dst. +// +// FOR j := 0 to 1 +// i := j*64 +// dst[i+63:i] := a[i+63:i] XOR b[i+63:i] +// ENDFOR +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_xor_pd +FORCE_INLINE __m128d _mm_xor_pd(__m128d a, __m128d b) +{ + return vreinterpretq_m128d_s64( + veorq_s64(vreinterpretq_s64_m128d(a), vreinterpretq_s64_m128d(b))); +} + +// Computes the bitwise OR of the 128-bit value in a and the 128-bit value in b. +// +// r := a | b +// +// https://msdn.microsoft.com/en-us/library/vstudio/ew8ty0db(v=vs.100).aspx +FORCE_INLINE __m128i _mm_or_si128(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s32( + vorrq_s32(vreinterpretq_s32_m128i(a), vreinterpretq_s32_m128i(b))); +} + +// Computes the bitwise XOR of the 128-bit value in a and the 128-bit value in +// b. https://msdn.microsoft.com/en-us/library/fzt08www(v=vs.100).aspx +FORCE_INLINE __m128i _mm_xor_si128(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s32( + veorq_s32(vreinterpretq_s32_m128i(a), vreinterpretq_s32_m128i(b))); +} + +// Duplicate odd-indexed single-precision (32-bit) floating-point elements +// from a, and store the results in dst. +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_movehdup_ps +FORCE_INLINE __m128 _mm_movehdup_ps(__m128 a) +{ +#if __has_builtin(__builtin_shufflevector) + return vreinterpretq_m128_f32(__builtin_shufflevector( + vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(a), 1, 1, 3, 3)); +#else + float32_t a1 = vgetq_lane_f32(vreinterpretq_f32_m128(a), 1); + float32_t a3 = vgetq_lane_f32(vreinterpretq_f32_m128(a), 3); + float ALIGN_STRUCT(16) data[4] = {a1, a1, a3, a3}; + return vreinterpretq_m128_f32(vld1q_f32(data)); +#endif +} + +// Duplicate even-indexed single-precision (32-bit) floating-point elements +// from a, and store the results in dst. +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_moveldup_ps +FORCE_INLINE __m128 _mm_moveldup_ps(__m128 a) +{ +#if __has_builtin(__builtin_shufflevector) + return vreinterpretq_m128_f32(__builtin_shufflevector( + vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(a), 0, 0, 2, 2)); +#else + float32_t a0 = vgetq_lane_f32(vreinterpretq_f32_m128(a), 0); + float32_t a2 = vgetq_lane_f32(vreinterpretq_f32_m128(a), 2); + float ALIGN_STRUCT(16) data[4] = {a0, a0, a2, a2}; + return vreinterpretq_m128_f32(vld1q_f32(data)); +#endif +} + +// Moves the upper two values of B into the lower two values of A. +// +// r3 := a3 +// r2 := a2 +// r1 := b3 +// r0 := b2 +FORCE_INLINE __m128 _mm_movehl_ps(__m128 __A, __m128 __B) +{ + float32x2_t a32 = vget_high_f32(vreinterpretq_f32_m128(__A)); + float32x2_t b32 = vget_high_f32(vreinterpretq_f32_m128(__B)); + return vreinterpretq_m128_f32(vcombine_f32(b32, a32)); +} + +// Moves the lower two values of B into the upper two values of A. +// +// r3 := b1 +// r2 := b0 +// r1 := a1 +// r0 := a0 +FORCE_INLINE __m128 _mm_movelh_ps(__m128 __A, __m128 __B) +{ + float32x2_t a10 = vget_low_f32(vreinterpretq_f32_m128(__A)); + float32x2_t b10 = vget_low_f32(vreinterpretq_f32_m128(__B)); + return vreinterpretq_m128_f32(vcombine_f32(a10, b10)); +} + +// Compute the absolute value of packed signed 32-bit integers in a, and store +// the unsigned results in dst. +// +// FOR j := 0 to 3 +// i := j*32 +// dst[i+31:i] := ABS(a[i+31:i]) +// ENDFOR +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_abs_epi32 +FORCE_INLINE __m128i _mm_abs_epi32(__m128i a) +{ + return vreinterpretq_m128i_s32(vabsq_s32(vreinterpretq_s32_m128i(a))); +} + +// Compute the absolute value of packed signed 16-bit integers in a, and store +// the unsigned results in dst. +// +// FOR j := 0 to 7 +// i := j*16 +// dst[i+15:i] := ABS(a[i+15:i]) +// ENDFOR +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_abs_epi16 +FORCE_INLINE __m128i _mm_abs_epi16(__m128i a) +{ + return vreinterpretq_m128i_s16(vabsq_s16(vreinterpretq_s16_m128i(a))); +} + +// Compute the absolute value of packed signed 8-bit integers in a, and store +// the unsigned results in dst. +// +// FOR j := 0 to 15 +// i := j*8 +// dst[i+7:i] := ABS(a[i+7:i]) +// ENDFOR +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_abs_epi8 +FORCE_INLINE __m128i _mm_abs_epi8(__m128i a) +{ + return vreinterpretq_m128i_s8(vabsq_s8(vreinterpretq_s8_m128i(a))); +} + +// Compute the absolute value of packed signed 32-bit integers in a, and store +// the unsigned results in dst. +// +// FOR j := 0 to 1 +// i := j*32 +// dst[i+31:i] := ABS(a[i+31:i]) +// ENDFOR +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_abs_pi32 +FORCE_INLINE __m64 _mm_abs_pi32(__m64 a) +{ + return vreinterpret_m64_s32(vabs_s32(vreinterpret_s32_m64(a))); +} + +// Compute the absolute value of packed signed 16-bit integers in a, and store +// the unsigned results in dst. +// +// FOR j := 0 to 3 +// i := j*16 +// dst[i+15:i] := ABS(a[i+15:i]) +// ENDFOR +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_abs_pi16 +FORCE_INLINE __m64 _mm_abs_pi16(__m64 a) +{ + return vreinterpret_m64_s16(vabs_s16(vreinterpret_s16_m64(a))); +} + +// Compute the absolute value of packed signed 8-bit integers in a, and store +// the unsigned results in dst. +// +// FOR j := 0 to 7 +// i := j*8 +// dst[i+7:i] := ABS(a[i+7:i]) +// ENDFOR +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_abs_pi8 +FORCE_INLINE __m64 _mm_abs_pi8(__m64 a) +{ + return vreinterpret_m64_s8(vabs_s8(vreinterpret_s8_m64(a))); +} + +// Takes the upper 64 bits of a and places it in the low end of the result +// Takes the lower 64 bits of b and places it into the high end of the result. +FORCE_INLINE __m128 _mm_shuffle_ps_1032(__m128 a, __m128 b) +{ + float32x2_t a32 = vget_high_f32(vreinterpretq_f32_m128(a)); + float32x2_t b10 = vget_low_f32(vreinterpretq_f32_m128(b)); + return vreinterpretq_m128_f32(vcombine_f32(a32, b10)); +} + +// takes the lower two 32-bit values from a and swaps them and places in high +// end of result takes the higher two 32 bit values from b and swaps them and +// places in low end of result. +FORCE_INLINE __m128 _mm_shuffle_ps_2301(__m128 a, __m128 b) +{ + float32x2_t a01 = vrev64_f32(vget_low_f32(vreinterpretq_f32_m128(a))); + float32x2_t b23 = vrev64_f32(vget_high_f32(vreinterpretq_f32_m128(b))); + return vreinterpretq_m128_f32(vcombine_f32(a01, b23)); +} + +FORCE_INLINE __m128 _mm_shuffle_ps_0321(__m128 a, __m128 b) +{ + float32x2_t a21 = vget_high_f32( + vextq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(a), 3)); + float32x2_t b03 = vget_low_f32( + vextq_f32(vreinterpretq_f32_m128(b), vreinterpretq_f32_m128(b), 3)); + return vreinterpretq_m128_f32(vcombine_f32(a21, b03)); +} + +FORCE_INLINE __m128 _mm_shuffle_ps_2103(__m128 a, __m128 b) +{ + float32x2_t a03 = vget_low_f32( + vextq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(a), 3)); + float32x2_t b21 = vget_high_f32( + vextq_f32(vreinterpretq_f32_m128(b), vreinterpretq_f32_m128(b), 3)); + return vreinterpretq_m128_f32(vcombine_f32(a03, b21)); +} + +FORCE_INLINE __m128 _mm_shuffle_ps_1010(__m128 a, __m128 b) +{ + float32x2_t a10 = vget_low_f32(vreinterpretq_f32_m128(a)); + float32x2_t b10 = vget_low_f32(vreinterpretq_f32_m128(b)); + return vreinterpretq_m128_f32(vcombine_f32(a10, b10)); +} + +FORCE_INLINE __m128 _mm_shuffle_ps_1001(__m128 a, __m128 b) +{ + float32x2_t a01 = vrev64_f32(vget_low_f32(vreinterpretq_f32_m128(a))); + float32x2_t b10 = vget_low_f32(vreinterpretq_f32_m128(b)); + return vreinterpretq_m128_f32(vcombine_f32(a01, b10)); +} + +FORCE_INLINE __m128 _mm_shuffle_ps_0101(__m128 a, __m128 b) +{ + float32x2_t a01 = vrev64_f32(vget_low_f32(vreinterpretq_f32_m128(a))); + float32x2_t b01 = vrev64_f32(vget_low_f32(vreinterpretq_f32_m128(b))); + return vreinterpretq_m128_f32(vcombine_f32(a01, b01)); +} + +// keeps the low 64 bits of b in the low and puts the high 64 bits of a in the +// high +FORCE_INLINE __m128 _mm_shuffle_ps_3210(__m128 a, __m128 b) +{ + float32x2_t a10 = vget_low_f32(vreinterpretq_f32_m128(a)); + float32x2_t b32 = vget_high_f32(vreinterpretq_f32_m128(b)); + return vreinterpretq_m128_f32(vcombine_f32(a10, b32)); +} + +FORCE_INLINE __m128 _mm_shuffle_ps_0011(__m128 a, __m128 b) +{ + float32x2_t a11 = vdup_lane_f32(vget_low_f32(vreinterpretq_f32_m128(a)), 1); + float32x2_t b00 = vdup_lane_f32(vget_low_f32(vreinterpretq_f32_m128(b)), 0); + return vreinterpretq_m128_f32(vcombine_f32(a11, b00)); +} + +FORCE_INLINE __m128 _mm_shuffle_ps_0022(__m128 a, __m128 b) +{ + float32x2_t a22 = + vdup_lane_f32(vget_high_f32(vreinterpretq_f32_m128(a)), 0); + float32x2_t b00 = vdup_lane_f32(vget_low_f32(vreinterpretq_f32_m128(b)), 0); + return vreinterpretq_m128_f32(vcombine_f32(a22, b00)); +} + +FORCE_INLINE __m128 _mm_shuffle_ps_2200(__m128 a, __m128 b) +{ + float32x2_t a00 = vdup_lane_f32(vget_low_f32(vreinterpretq_f32_m128(a)), 0); + float32x2_t b22 = + vdup_lane_f32(vget_high_f32(vreinterpretq_f32_m128(b)), 0); + return vreinterpretq_m128_f32(vcombine_f32(a00, b22)); +} + +FORCE_INLINE __m128 _mm_shuffle_ps_3202(__m128 a, __m128 b) +{ + float32_t a0 = vgetq_lane_f32(vreinterpretq_f32_m128(a), 0); + float32x2_t a22 = + vdup_lane_f32(vget_high_f32(vreinterpretq_f32_m128(a)), 0); + float32x2_t a02 = vset_lane_f32(a0, a22, 1); /* TODO: use vzip ?*/ + float32x2_t b32 = vget_high_f32(vreinterpretq_f32_m128(b)); + return vreinterpretq_m128_f32(vcombine_f32(a02, b32)); +} + +FORCE_INLINE __m128 _mm_shuffle_ps_1133(__m128 a, __m128 b) +{ + float32x2_t a33 = + vdup_lane_f32(vget_high_f32(vreinterpretq_f32_m128(a)), 1); + float32x2_t b11 = vdup_lane_f32(vget_low_f32(vreinterpretq_f32_m128(b)), 1); + return vreinterpretq_m128_f32(vcombine_f32(a33, b11)); +} + +FORCE_INLINE __m128 _mm_shuffle_ps_2010(__m128 a, __m128 b) +{ + float32x2_t a10 = vget_low_f32(vreinterpretq_f32_m128(a)); + float32_t b2 = vgetq_lane_f32(vreinterpretq_f32_m128(b), 2); + float32x2_t b00 = vdup_lane_f32(vget_low_f32(vreinterpretq_f32_m128(b)), 0); + float32x2_t b20 = vset_lane_f32(b2, b00, 1); + return vreinterpretq_m128_f32(vcombine_f32(a10, b20)); +} + +FORCE_INLINE __m128 _mm_shuffle_ps_2001(__m128 a, __m128 b) +{ + float32x2_t a01 = vrev64_f32(vget_low_f32(vreinterpretq_f32_m128(a))); + float32_t b2 = vgetq_lane_f32(b, 2); + float32x2_t b00 = vdup_lane_f32(vget_low_f32(vreinterpretq_f32_m128(b)), 0); + float32x2_t b20 = vset_lane_f32(b2, b00, 1); + return vreinterpretq_m128_f32(vcombine_f32(a01, b20)); +} + +FORCE_INLINE __m128 _mm_shuffle_ps_2032(__m128 a, __m128 b) +{ + float32x2_t a32 = vget_high_f32(vreinterpretq_f32_m128(a)); + float32_t b2 = vgetq_lane_f32(b, 2); + float32x2_t b00 = vdup_lane_f32(vget_low_f32(vreinterpretq_f32_m128(b)), 0); + float32x2_t b20 = vset_lane_f32(b2, b00, 1); + return vreinterpretq_m128_f32(vcombine_f32(a32, b20)); +} + +// NEON does not support a general purpose permute intrinsic +// Selects four specific single-precision, floating-point values from a and b, +// based on the mask i. +// +// C equivalent: +// __m128 _mm_shuffle_ps_default(__m128 a, __m128 b, +// __constrange(0, 255) int imm) { +// __m128 ret; +// ret[0] = a[imm & 0x3]; ret[1] = a[(imm >> 2) & 0x3]; +// ret[2] = b[(imm >> 4) & 0x03]; ret[3] = b[(imm >> 6) & 0x03]; +// return ret; +// } +// +// https://msdn.microsoft.com/en-us/library/vstudio/5f0858x0(v=vs.100).aspx +#define _mm_shuffle_ps_default(a, b, imm) \ + __extension__({ \ + float32x4_t ret; \ + ret = vmovq_n_f32( \ + vgetq_lane_f32(vreinterpretq_f32_m128(a), (imm) & (0x3))); \ + ret = vsetq_lane_f32( \ + vgetq_lane_f32(vreinterpretq_f32_m128(a), ((imm) >> 2) & 0x3), \ + ret, 1); \ + ret = vsetq_lane_f32( \ + vgetq_lane_f32(vreinterpretq_f32_m128(b), ((imm) >> 4) & 0x3), \ + ret, 2); \ + ret = vsetq_lane_f32( \ + vgetq_lane_f32(vreinterpretq_f32_m128(b), ((imm) >> 6) & 0x3), \ + ret, 3); \ + vreinterpretq_m128_f32(ret); \ + }) + +// FORCE_INLINE __m128 _mm_shuffle_ps(__m128 a, __m128 b, __constrange(0,255) +// int imm) +#if __has_builtin(__builtin_shufflevector) +#define _mm_shuffle_ps(a, b, imm) \ + __extension__({ \ + float32x4_t _input1 = vreinterpretq_f32_m128(a); \ + float32x4_t _input2 = vreinterpretq_f32_m128(b); \ + float32x4_t _shuf = __builtin_shufflevector( \ + _input1, _input2, (imm) & (0x3), ((imm) >> 2) & 0x3, \ + (((imm) >> 4) & 0x3) + 4, (((imm) >> 6) & 0x3) + 4); \ + vreinterpretq_m128_f32(_shuf); \ + }) +#else // generic +#define _mm_shuffle_ps(a, b, imm) \ + __extension__({ \ + __m128 ret; \ + switch (imm) { \ + case _MM_SHUFFLE(1, 0, 3, 2): \ + ret = _mm_shuffle_ps_1032((a), (b)); \ + break; \ + case _MM_SHUFFLE(2, 3, 0, 1): \ + ret = _mm_shuffle_ps_2301((a), (b)); \ + break; \ + case _MM_SHUFFLE(0, 3, 2, 1): \ + ret = _mm_shuffle_ps_0321((a), (b)); \ + break; \ + case _MM_SHUFFLE(2, 1, 0, 3): \ + ret = _mm_shuffle_ps_2103((a), (b)); \ + break; \ + case _MM_SHUFFLE(1, 0, 1, 0): \ + ret = _mm_movelh_ps((a), (b)); \ + break; \ + case _MM_SHUFFLE(1, 0, 0, 1): \ + ret = _mm_shuffle_ps_1001((a), (b)); \ + break; \ + case _MM_SHUFFLE(0, 1, 0, 1): \ + ret = _mm_shuffle_ps_0101((a), (b)); \ + break; \ + case _MM_SHUFFLE(3, 2, 1, 0): \ + ret = _mm_shuffle_ps_3210((a), (b)); \ + break; \ + case _MM_SHUFFLE(0, 0, 1, 1): \ + ret = _mm_shuffle_ps_0011((a), (b)); \ + break; \ + case _MM_SHUFFLE(0, 0, 2, 2): \ + ret = _mm_shuffle_ps_0022((a), (b)); \ + break; \ + case _MM_SHUFFLE(2, 2, 0, 0): \ + ret = _mm_shuffle_ps_2200((a), (b)); \ + break; \ + case _MM_SHUFFLE(3, 2, 0, 2): \ + ret = _mm_shuffle_ps_3202((a), (b)); \ + break; \ + case _MM_SHUFFLE(3, 2, 3, 2): \ + ret = _mm_movehl_ps((b), (a)); \ + break; \ + case _MM_SHUFFLE(1, 1, 3, 3): \ + ret = _mm_shuffle_ps_1133((a), (b)); \ + break; \ + case _MM_SHUFFLE(2, 0, 1, 0): \ + ret = _mm_shuffle_ps_2010((a), (b)); \ + break; \ + case _MM_SHUFFLE(2, 0, 0, 1): \ + ret = _mm_shuffle_ps_2001((a), (b)); \ + break; \ + case _MM_SHUFFLE(2, 0, 3, 2): \ + ret = _mm_shuffle_ps_2032((a), (b)); \ + break; \ + default: \ + ret = _mm_shuffle_ps_default((a), (b), (imm)); \ + break; \ + } \ + ret; \ + }) +#endif + +// Takes the upper 64 bits of a and places it in the low end of the result +// Takes the lower 64 bits of a and places it into the high end of the result. +FORCE_INLINE __m128i _mm_shuffle_epi_1032(__m128i a) +{ + int32x2_t a32 = vget_high_s32(vreinterpretq_s32_m128i(a)); + int32x2_t a10 = vget_low_s32(vreinterpretq_s32_m128i(a)); + return vreinterpretq_m128i_s32(vcombine_s32(a32, a10)); +} + +// takes the lower two 32-bit values from a and swaps them and places in low end +// of result takes the higher two 32 bit values from a and swaps them and places +// in high end of result. +FORCE_INLINE __m128i _mm_shuffle_epi_2301(__m128i a) +{ + int32x2_t a01 = vrev64_s32(vget_low_s32(vreinterpretq_s32_m128i(a))); + int32x2_t a23 = vrev64_s32(vget_high_s32(vreinterpretq_s32_m128i(a))); + return vreinterpretq_m128i_s32(vcombine_s32(a01, a23)); +} + +// rotates the least significant 32 bits into the most signficant 32 bits, and +// shifts the rest down +FORCE_INLINE __m128i _mm_shuffle_epi_0321(__m128i a) +{ + return vreinterpretq_m128i_s32( + vextq_s32(vreinterpretq_s32_m128i(a), vreinterpretq_s32_m128i(a), 1)); +} + +// rotates the most significant 32 bits into the least signficant 32 bits, and +// shifts the rest up +FORCE_INLINE __m128i _mm_shuffle_epi_2103(__m128i a) +{ + return vreinterpretq_m128i_s32( + vextq_s32(vreinterpretq_s32_m128i(a), vreinterpretq_s32_m128i(a), 3)); +} + +// gets the lower 64 bits of a, and places it in the upper 64 bits +// gets the lower 64 bits of a and places it in the lower 64 bits +FORCE_INLINE __m128i _mm_shuffle_epi_1010(__m128i a) +{ + int32x2_t a10 = vget_low_s32(vreinterpretq_s32_m128i(a)); + return vreinterpretq_m128i_s32(vcombine_s32(a10, a10)); +} + +// gets the lower 64 bits of a, swaps the 0 and 1 elements, and places it in the +// lower 64 bits gets the lower 64 bits of a, and places it in the upper 64 bits +FORCE_INLINE __m128i _mm_shuffle_epi_1001(__m128i a) +{ + int32x2_t a01 = vrev64_s32(vget_low_s32(vreinterpretq_s32_m128i(a))); + int32x2_t a10 = vget_low_s32(vreinterpretq_s32_m128i(a)); + return vreinterpretq_m128i_s32(vcombine_s32(a01, a10)); +} + +// gets the lower 64 bits of a, swaps the 0 and 1 elements and places it in the +// upper 64 bits gets the lower 64 bits of a, swaps the 0 and 1 elements, and +// places it in the lower 64 bits +FORCE_INLINE __m128i _mm_shuffle_epi_0101(__m128i a) +{ + int32x2_t a01 = vrev64_s32(vget_low_s32(vreinterpretq_s32_m128i(a))); + return vreinterpretq_m128i_s32(vcombine_s32(a01, a01)); +} + +FORCE_INLINE __m128i _mm_shuffle_epi_2211(__m128i a) +{ + int32x2_t a11 = vdup_lane_s32(vget_low_s32(vreinterpretq_s32_m128i(a)), 1); + int32x2_t a22 = vdup_lane_s32(vget_high_s32(vreinterpretq_s32_m128i(a)), 0); + return vreinterpretq_m128i_s32(vcombine_s32(a11, a22)); +} + +FORCE_INLINE __m128i _mm_shuffle_epi_0122(__m128i a) +{ + int32x2_t a22 = vdup_lane_s32(vget_high_s32(vreinterpretq_s32_m128i(a)), 0); + int32x2_t a01 = vrev64_s32(vget_low_s32(vreinterpretq_s32_m128i(a))); + return vreinterpretq_m128i_s32(vcombine_s32(a22, a01)); +} + +FORCE_INLINE __m128i _mm_shuffle_epi_3332(__m128i a) +{ + int32x2_t a32 = vget_high_s32(vreinterpretq_s32_m128i(a)); + int32x2_t a33 = vdup_lane_s32(vget_high_s32(vreinterpretq_s32_m128i(a)), 1); + return vreinterpretq_m128i_s32(vcombine_s32(a32, a33)); +} + +// Shuffle packed 8-bit integers in a according to shuffle control mask in the +// corresponding 8-bit element of b, and store the results in dst. +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_shuffle_epi8 +FORCE_INLINE __m128i _mm_shuffle_epi8(__m128i a, __m128i b) +{ + int8x16_t tbl = vreinterpretq_s8_m128i(a); // input a + uint8x16_t idx = vreinterpretq_u8_m128i(b); // input b + uint8x16_t idx_masked = + vandq_u8(idx, vdupq_n_u8(0x8F)); // avoid using meaningless bits +#if defined(__aarch64__) + return vreinterpretq_m128i_s8(vqtbl1q_s8(tbl, idx_masked)); +#elif defined(__GNUC__) + int8x16_t ret; + // %e and %f represent the even and odd D registers + // respectively. + __asm__ __volatile__( + "vtbl.8 %e[ret], {%e[tbl], %f[tbl]}, %e[idx]\n" + "vtbl.8 %f[ret], {%e[tbl], %f[tbl]}, %f[idx]\n" + : [ret] "=&w"(ret) + : [tbl] "w"(tbl), [idx] "w"(idx_masked)); + return vreinterpretq_m128i_s8(ret); +#else + // use this line if testing on aarch64 + int8x8x2_t a_split = {vget_low_s8(tbl), vget_high_s8(tbl)}; + return vreinterpretq_m128i_s8( + vcombine_s8(vtbl2_s8(a_split, vget_low_u8(idx_masked)), + vtbl2_s8(a_split, vget_high_u8(idx_masked)))); +#endif +} + +// C equivalent: +// __m128i _mm_shuffle_epi32_default(__m128i a, +// __constrange(0, 255) int imm) { +// __m128i ret; +// ret[0] = a[imm & 0x3]; ret[1] = a[(imm >> 2) & 0x3]; +// ret[2] = a[(imm >> 4) & 0x03]; ret[3] = a[(imm >> 6) & 0x03]; +// return ret; +// } +#define _mm_shuffle_epi32_default(a, imm) \ + __extension__({ \ + int32x4_t ret; \ + ret = vmovq_n_s32( \ + vgetq_lane_s32(vreinterpretq_s32_m128i(a), (imm) & (0x3))); \ + ret = vsetq_lane_s32( \ + vgetq_lane_s32(vreinterpretq_s32_m128i(a), ((imm) >> 2) & 0x3), \ + ret, 1); \ + ret = vsetq_lane_s32( \ + vgetq_lane_s32(vreinterpretq_s32_m128i(a), ((imm) >> 4) & 0x3), \ + ret, 2); \ + ret = vsetq_lane_s32( \ + vgetq_lane_s32(vreinterpretq_s32_m128i(a), ((imm) >> 6) & 0x3), \ + ret, 3); \ + vreinterpretq_m128i_s32(ret); \ + }) + +// FORCE_INLINE __m128i _mm_shuffle_epi32_splat(__m128i a, __constrange(0,255) +// int imm) +#if defined(__aarch64__) +#define _mm_shuffle_epi32_splat(a, imm) \ + __extension__({ \ + vreinterpretq_m128i_s32( \ + vdupq_laneq_s32(vreinterpretq_s32_m128i(a), (imm))); \ + }) +#else +#define _mm_shuffle_epi32_splat(a, imm) \ + __extension__({ \ + vreinterpretq_m128i_s32( \ + vdupq_n_s32(vgetq_lane_s32(vreinterpretq_s32_m128i(a), (imm)))); \ + }) +#endif + +// Shuffles the 4 signed or unsigned 32-bit integers in a as specified by imm. +// https://msdn.microsoft.com/en-us/library/56f67xbk%28v=vs.90%29.aspx +// FORCE_INLINE __m128i _mm_shuffle_epi32(__m128i a, +// __constrange(0,255) int imm) +#if __has_builtin(__builtin_shufflevector) +#define _mm_shuffle_epi32(a, imm) \ + __extension__({ \ + int32x4_t _input = vreinterpretq_s32_m128i(a); \ + int32x4_t _shuf = __builtin_shufflevector( \ + _input, _input, (imm) & (0x3), ((imm) >> 2) & 0x3, \ + ((imm) >> 4) & 0x3, ((imm) >> 6) & 0x3); \ + vreinterpretq_m128i_s32(_shuf); \ + }) +#else // generic +#define _mm_shuffle_epi32(a, imm) \ + __extension__({ \ + __m128i ret; \ + switch (imm) { \ + case _MM_SHUFFLE(1, 0, 3, 2): \ + ret = _mm_shuffle_epi_1032((a)); \ + break; \ + case _MM_SHUFFLE(2, 3, 0, 1): \ + ret = _mm_shuffle_epi_2301((a)); \ + break; \ + case _MM_SHUFFLE(0, 3, 2, 1): \ + ret = _mm_shuffle_epi_0321((a)); \ + break; \ + case _MM_SHUFFLE(2, 1, 0, 3): \ + ret = _mm_shuffle_epi_2103((a)); \ + break; \ + case _MM_SHUFFLE(1, 0, 1, 0): \ + ret = _mm_shuffle_epi_1010((a)); \ + break; \ + case _MM_SHUFFLE(1, 0, 0, 1): \ + ret = _mm_shuffle_epi_1001((a)); \ + break; \ + case _MM_SHUFFLE(0, 1, 0, 1): \ + ret = _mm_shuffle_epi_0101((a)); \ + break; \ + case _MM_SHUFFLE(2, 2, 1, 1): \ + ret = _mm_shuffle_epi_2211((a)); \ + break; \ + case _MM_SHUFFLE(0, 1, 2, 2): \ + ret = _mm_shuffle_epi_0122((a)); \ + break; \ + case _MM_SHUFFLE(3, 3, 3, 2): \ + ret = _mm_shuffle_epi_3332((a)); \ + break; \ + case _MM_SHUFFLE(0, 0, 0, 0): \ + ret = _mm_shuffle_epi32_splat((a), 0); \ + break; \ + case _MM_SHUFFLE(1, 1, 1, 1): \ + ret = _mm_shuffle_epi32_splat((a), 1); \ + break; \ + case _MM_SHUFFLE(2, 2, 2, 2): \ + ret = _mm_shuffle_epi32_splat((a), 2); \ + break; \ + case _MM_SHUFFLE(3, 3, 3, 3): \ + ret = _mm_shuffle_epi32_splat((a), 3); \ + break; \ + default: \ + ret = _mm_shuffle_epi32_default((a), (imm)); \ + break; \ + } \ + ret; \ + }) +#endif + +// Shuffles the lower 4 signed or unsigned 16-bit integers in a as specified +// by imm. +// https://docs.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-2010/y41dkk37(v=vs.100) +// FORCE_INLINE __m128i _mm_shufflelo_epi16_function(__m128i a, +// __constrange(0,255) int +// imm) +#define _mm_shufflelo_epi16_function(a, imm) \ + __extension__({ \ + int16x8_t ret = vreinterpretq_s16_m128i(a); \ + int16x4_t lowBits = vget_low_s16(ret); \ + ret = vsetq_lane_s16(vget_lane_s16(lowBits, (imm) & (0x3)), ret, 0); \ + ret = vsetq_lane_s16(vget_lane_s16(lowBits, ((imm) >> 2) & 0x3), ret, \ + 1); \ + ret = vsetq_lane_s16(vget_lane_s16(lowBits, ((imm) >> 4) & 0x3), ret, \ + 2); \ + ret = vsetq_lane_s16(vget_lane_s16(lowBits, ((imm) >> 6) & 0x3), ret, \ + 3); \ + vreinterpretq_m128i_s16(ret); \ + }) + +// FORCE_INLINE __m128i _mm_shufflelo_epi16(__m128i a, +// __constrange(0,255) int imm) +#if __has_builtin(__builtin_shufflevector) +#define _mm_shufflelo_epi16(a, imm) \ + __extension__({ \ + int16x8_t _input = vreinterpretq_s16_m128i(a); \ + int16x8_t _shuf = __builtin_shufflevector( \ + _input, _input, ((imm) & (0x3)), (((imm) >> 2) & 0x3), \ + (((imm) >> 4) & 0x3), (((imm) >> 6) & 0x3), 4, 5, 6, 7); \ + vreinterpretq_m128i_s16(_shuf); \ + }) +#else // generic +#define _mm_shufflelo_epi16(a, imm) _mm_shufflelo_epi16_function((a), (imm)) +#endif + +// Shuffles the upper 4 signed or unsigned 16-bit integers in a as specified +// by imm. +// https://msdn.microsoft.com/en-us/library/13ywktbs(v=vs.100).aspx +// FORCE_INLINE __m128i _mm_shufflehi_epi16_function(__m128i a, +// __constrange(0,255) int +// imm) +#define _mm_shufflehi_epi16_function(a, imm) \ + __extension__({ \ + int16x8_t ret = vreinterpretq_s16_m128i(a); \ + int16x4_t highBits = vget_high_s16(ret); \ + ret = vsetq_lane_s16(vget_lane_s16(highBits, (imm) & (0x3)), ret, 4); \ + ret = vsetq_lane_s16(vget_lane_s16(highBits, ((imm) >> 2) & 0x3), ret, \ + 5); \ + ret = vsetq_lane_s16(vget_lane_s16(highBits, ((imm) >> 4) & 0x3), ret, \ + 6); \ + ret = vsetq_lane_s16(vget_lane_s16(highBits, ((imm) >> 6) & 0x3), ret, \ + 7); \ + vreinterpretq_m128i_s16(ret); \ + }) + +// FORCE_INLINE __m128i _mm_shufflehi_epi16(__m128i a, +// __constrange(0,255) int imm) +#if __has_builtin(__builtin_shufflevector) +#define _mm_shufflehi_epi16(a, imm) \ + __extension__({ \ + int16x8_t _input = vreinterpretq_s16_m128i(a); \ + int16x8_t _shuf = __builtin_shufflevector( \ + _input, _input, 0, 1, 2, 3, ((imm) & (0x3)) + 4, \ + (((imm) >> 2) & 0x3) + 4, (((imm) >> 4) & 0x3) + 4, \ + (((imm) >> 6) & 0x3) + 4); \ + vreinterpretq_m128i_s16(_shuf); \ + }) +#else // generic +#define _mm_shufflehi_epi16(a, imm) _mm_shufflehi_epi16_function((a), (imm)) +#endif + +// Blend packed 16-bit integers from a and b using control mask imm8, and store +// the results in dst. +// +// FOR j := 0 to 7 +// i := j*16 +// IF imm8[j] +// dst[i+15:i] := b[i+15:i] +// ELSE +// dst[i+15:i] := a[i+15:i] +// FI +// ENDFOR +// FORCE_INLINE __m128i _mm_blend_epi16(__m128i a, __m128i b, +// __constrange(0,255) int imm) +#define _mm_blend_epi16(a, b, imm) \ + __extension__({ \ + const uint16_t _mask[8] = {((imm) & (1 << 0)) ? 0xFFFF : 0x0000, \ + ((imm) & (1 << 1)) ? 0xFFFF : 0x0000, \ + ((imm) & (1 << 2)) ? 0xFFFF : 0x0000, \ + ((imm) & (1 << 3)) ? 0xFFFF : 0x0000, \ + ((imm) & (1 << 4)) ? 0xFFFF : 0x0000, \ + ((imm) & (1 << 5)) ? 0xFFFF : 0x0000, \ + ((imm) & (1 << 6)) ? 0xFFFF : 0x0000, \ + ((imm) & (1 << 7)) ? 0xFFFF : 0x0000}; \ + uint16x8_t _mask_vec = vld1q_u16(_mask); \ + uint16x8_t _a = vreinterpretq_u16_m128i(a); \ + uint16x8_t _b = vreinterpretq_u16_m128i(b); \ + vreinterpretq_m128i_u16(vbslq_u16(_mask_vec, _b, _a)); \ + }) + +// Blend packed 8-bit integers from a and b using mask, and store the results in +// dst. +// +// FOR j := 0 to 15 +// i := j*8 +// IF mask[i+7] +// dst[i+7:i] := b[i+7:i] +// ELSE +// dst[i+7:i] := a[i+7:i] +// FI +// ENDFOR +FORCE_INLINE __m128i _mm_blendv_epi8(__m128i _a, __m128i _b, __m128i _mask) +{ + // Use a signed shift right to create a mask with the sign bit + uint8x16_t mask = + vreinterpretq_u8_s8(vshrq_n_s8(vreinterpretq_s8_m128i(_mask), 7)); + uint8x16_t a = vreinterpretq_u8_m128i(_a); + uint8x16_t b = vreinterpretq_u8_m128i(_b); + return vreinterpretq_m128i_u8(vbslq_u8(mask, b, a)); +} + +/* Shifts */ + + +// Shift packed 16-bit integers in a right by imm while shifting in sign +// bits, and store the results in dst. +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_srai_epi16 +FORCE_INLINE __m128i _mm_srai_epi16(__m128i a, int imm) +{ + const int count = (imm & ~15) ? 15 : imm; + return (__m128i) vshlq_s16((int16x8_t) a, vdupq_n_s16(-count)); +} + +// Shifts the 8 signed or unsigned 16-bit integers in a left by count bits while +// shifting in zeros. +// +// r0 := a0 << count +// r1 := a1 << count +// ... +// r7 := a7 << count +// +// https://msdn.microsoft.com/en-us/library/es73bcsy(v=vs.90).aspx +#define _mm_slli_epi16(a, imm) \ + __extension__({ \ + __m128i ret; \ + if ((imm) <= 0) { \ + ret = a; \ + } else if ((imm) > 15) { \ + ret = _mm_setzero_si128(); \ + } else { \ + ret = vreinterpretq_m128i_s16( \ + vshlq_n_s16(vreinterpretq_s16_m128i(a), (imm))); \ + } \ + ret; \ + }) + +// Shifts the 4 signed or unsigned 32-bit integers in a left by count bits while +// shifting in zeros. : +// https://msdn.microsoft.com/en-us/library/z2k3bbtb%28v=vs.90%29.aspx +// FORCE_INLINE __m128i _mm_slli_epi32(__m128i a, __constrange(0,255) int imm) +FORCE_INLINE __m128i _mm_slli_epi32(__m128i a, int imm) +{ + if (imm <= 0) /* TODO: add constant range macro: [0, 255] */ + return a; + if (imm > 31) /* TODO: add unlikely macro */ + return _mm_setzero_si128(); + return vreinterpretq_m128i_s32( + vshlq_s32(vreinterpretq_s32_m128i(a), vdupq_n_s32(imm))); +} + +// Shift packed 64-bit integers in a left by imm8 while shifting in zeros, and +// store the results in dst. +FORCE_INLINE __m128i _mm_slli_epi64(__m128i a, int imm) +{ + if (imm <= 0) /* TODO: add constant range macro: [0, 255] */ + return a; + if (imm > 63) /* TODO: add unlikely macro */ + return _mm_setzero_si128(); + return vreinterpretq_m128i_s64( + vshlq_s64(vreinterpretq_s64_m128i(a), vdupq_n_s64(imm))); +} + +// Shift packed 16-bit integers in a right by imm8 while shifting in zeros, and +// store the results in dst. +// +// FOR j := 0 to 7 +// i := j*16 +// IF imm8[7:0] > 15 +// dst[i+15:i] := 0 +// ELSE +// dst[i+15:i] := ZeroExtend16(a[i+15:i] >> imm8[7:0]) +// FI +// ENDFOR +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_srli_epi16 +#define _mm_srli_epi16(a, imm) \ + __extension__({ \ + __m128i ret; \ + if ((imm) == 0) { \ + ret = a; \ + } else if (0 < (imm) && (imm) < 16) { \ + ret = vreinterpretq_m128i_u16( \ + vshlq_u16(vreinterpretq_u16_m128i(a), vdupq_n_s16(-imm))); \ + } else { \ + ret = _mm_setzero_si128(); \ + } \ + ret; \ + }) + +// Shift packed 32-bit integers in a right by imm8 while shifting in zeros, and +// store the results in dst. +// +// FOR j := 0 to 3 +// i := j*32 +// IF imm8[7:0] > 31 +// dst[i+31:i] := 0 +// ELSE +// dst[i+31:i] := ZeroExtend32(a[i+31:i] >> imm8[7:0]) +// FI +// ENDFOR +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_srli_epi32 +// FORCE_INLINE __m128i _mm_srli_epi32(__m128i a, __constrange(0,255) int imm) +#define _mm_srli_epi32(a, imm) \ + __extension__({ \ + __m128i ret; \ + if ((imm) == 0) { \ + ret = a; \ + } else if (0 < (imm) && (imm) < 32) { \ + ret = vreinterpretq_m128i_u32( \ + vshlq_u32(vreinterpretq_u32_m128i(a), vdupq_n_s32(-imm))); \ + } else { \ + ret = _mm_setzero_si128(); \ + } \ + ret; \ + }) + +// Shift packed 64-bit integers in a right by imm8 while shifting in zeros, and +// store the results in dst. +// +// FOR j := 0 to 1 +// i := j*64 +// IF imm8[7:0] > 63 +// dst[i+63:i] := 0 +// ELSE +// dst[i+63:i] := ZeroExtend64(a[i+63:i] >> imm8[7:0]) +// FI +// ENDFOR +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_srli_epi64 +#define _mm_srli_epi64(a, imm) \ + __extension__({ \ + __m128i ret; \ + if ((imm) == 0) { \ + ret = a; \ + } else if (0 < (imm) && (imm) < 64) { \ + ret = vreinterpretq_m128i_u64( \ + vshlq_u64(vreinterpretq_u64_m128i(a), vdupq_n_s64(-imm))); \ + } else { \ + ret = _mm_setzero_si128(); \ + } \ + ret; \ + }) + +// Shift packed 32-bit integers in a right by imm8 while shifting in sign bits, +// and store the results in dst. +// +// FOR j := 0 to 3 +// i := j*32 +// IF imm8[7:0] > 31 +// dst[i+31:i] := (a[i+31] ? 0xFFFFFFFF : 0x0) +// ELSE +// dst[i+31:i] := SignExtend32(a[i+31:i] >> imm8[7:0]) +// FI +// ENDFOR +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_srai_epi32 +// FORCE_INLINE __m128i _mm_srai_epi32(__m128i a, __constrange(0,255) int imm) +#define _mm_srai_epi32(a, imm) \ + __extension__({ \ + __m128i ret; \ + if ((imm) == 0) { \ + ret = a; \ + } else if (0 < (imm) && (imm) < 32) { \ + ret = vreinterpretq_m128i_s32( \ + vshlq_s32(vreinterpretq_s32_m128i(a), vdupq_n_s32(-imm))); \ + } else { \ + ret = vreinterpretq_m128i_s32( \ + vshrq_n_s32(vreinterpretq_s32_m128i(a), 31)); \ + } \ + ret; \ + }) + +// Shifts the 128 - bit value in a right by imm bytes while shifting in +// zeros.imm must be an immediate. +// +// r := srl(a, imm*8) +// +// https://msdn.microsoft.com/en-us/library/305w28yz(v=vs.100).aspx +// FORCE_INLINE _mm_srli_si128(__m128i a, __constrange(0,255) int imm) +#define _mm_srli_si128(a, imm) \ + __extension__({ \ + __m128i ret; \ + if ((imm) <= 0) { \ + ret = a; \ + } else if ((imm) > 15) { \ + ret = _mm_setzero_si128(); \ + } else { \ + ret = vreinterpretq_m128i_s8( \ + vextq_s8(vreinterpretq_s8_m128i(a), vdupq_n_s8(0), (imm))); \ + } \ + ret; \ + }) + +// Shifts the 128-bit value in a left by imm bytes while shifting in zeros. imm +// must be an immediate. +// +// r := a << (imm * 8) +// +// https://msdn.microsoft.com/en-us/library/34d3k2kt(v=vs.100).aspx +// FORCE_INLINE __m128i _mm_slli_si128(__m128i a, __constrange(0,255) int imm) +#define _mm_slli_si128(a, imm) \ + __extension__({ \ + __m128i ret; \ + if ((imm) <= 0) { \ + ret = a; \ + } else if ((imm) > 15) { \ + ret = _mm_setzero_si128(); \ + } else { \ + ret = vreinterpretq_m128i_s8(vextq_s8( \ + vdupq_n_s8(0), vreinterpretq_s8_m128i(a), 16 - (imm))); \ + } \ + ret; \ + }) + +// Shifts the 8 signed or unsigned 16-bit integers in a left by count bits while +// shifting in zeros. +// +// r0 := a0 << count +// r1 := a1 << count +// ... +// r7 := a7 << count +// +// https://msdn.microsoft.com/en-us/library/c79w388h(v%3dvs.90).aspx +FORCE_INLINE __m128i _mm_sll_epi16(__m128i a, __m128i count) +{ + uint64_t c = vreinterpretq_nth_u64_m128i(count, 0); + if (c > 15) + return _mm_setzero_si128(); + + int16x8_t vc = vdupq_n_s16((int16_t) c); + return vreinterpretq_m128i_s16(vshlq_s16(vreinterpretq_s16_m128i(a), vc)); +} + +// Shifts the 4 signed or unsigned 32-bit integers in a left by count bits while +// shifting in zeros. +// +// r0 := a0 << count +// r1 := a1 << count +// r2 := a2 << count +// r3 := a3 << count +// +// https://msdn.microsoft.com/en-us/library/6fe5a6s9(v%3dvs.90).aspx +FORCE_INLINE __m128i _mm_sll_epi32(__m128i a, __m128i count) +{ + uint64_t c = vreinterpretq_nth_u64_m128i(count, 0); + if (c > 31) + return _mm_setzero_si128(); + + int32x4_t vc = vdupq_n_s32((int32_t) c); + return vreinterpretq_m128i_s32(vshlq_s32(vreinterpretq_s32_m128i(a), vc)); +} + +// Shifts the 2 signed or unsigned 64-bit integers in a left by count bits while +// shifting in zeros. +// +// r0 := a0 << count +// r1 := a1 << count +// +// https://msdn.microsoft.com/en-us/library/6ta9dffd(v%3dvs.90).aspx +FORCE_INLINE __m128i _mm_sll_epi64(__m128i a, __m128i count) +{ + uint64_t c = vreinterpretq_nth_u64_m128i(count, 0); + if (c > 63) + return _mm_setzero_si128(); + + int64x2_t vc = vdupq_n_s64((int64_t) c); + return vreinterpretq_m128i_s64(vshlq_s64(vreinterpretq_s64_m128i(a), vc)); +} + +// Shifts the 8 signed or unsigned 16-bit integers in a right by count bits +// while shifting in zeros. +// +// r0 := srl(a0, count) +// r1 := srl(a1, count) +// ... +// r7 := srl(a7, count) +// +// https://msdn.microsoft.com/en-us/library/wd5ax830(v%3dvs.90).aspx +FORCE_INLINE __m128i _mm_srl_epi16(__m128i a, __m128i count) +{ + uint64_t c = vreinterpretq_nth_u64_m128i(count, 0); + if (c > 15) + return _mm_setzero_si128(); + + int16x8_t vc = vdupq_n_s16(-(int16_t) c); + return vreinterpretq_m128i_u16(vshlq_u16(vreinterpretq_u16_m128i(a), vc)); +} + +// Shifts the 4 signed or unsigned 32-bit integers in a right by count bits +// while shifting in zeros. +// +// r0 := srl(a0, count) +// r1 := srl(a1, count) +// r2 := srl(a2, count) +// r3 := srl(a3, count) +// +// https://msdn.microsoft.com/en-us/library/a9cbttf4(v%3dvs.90).aspx +FORCE_INLINE __m128i _mm_srl_epi32(__m128i a, __m128i count) +{ + uint64_t c = vreinterpretq_nth_u64_m128i(count, 0); + if (c > 31) + return _mm_setzero_si128(); + + int32x4_t vc = vdupq_n_s32(-(int32_t) c); + return vreinterpretq_m128i_u32(vshlq_u32(vreinterpretq_u32_m128i(a), vc)); +} + +// Shifts the 2 signed or unsigned 64-bit integers in a right by count bits +// while shifting in zeros. +// +// r0 := srl(a0, count) +// r1 := srl(a1, count) +// +// https://msdn.microsoft.com/en-us/library/yf6cf9k8(v%3dvs.90).aspx +FORCE_INLINE __m128i _mm_srl_epi64(__m128i a, __m128i count) +{ + uint64_t c = vreinterpretq_nth_u64_m128i(count, 0); + if (c > 63) + return _mm_setzero_si128(); + + int64x2_t vc = vdupq_n_s64(-(int64_t) c); + return vreinterpretq_m128i_u64(vshlq_u64(vreinterpretq_u64_m128i(a), vc)); +} + +// NEON does not provide a version of this function. +// Creates a 16-bit mask from the most significant bits of the 16 signed or +// unsigned 8-bit integers in a and zero extends the upper bits. +// https://msdn.microsoft.com/en-us/library/vstudio/s090c8fk(v=vs.100).aspx +FORCE_INLINE int _mm_movemask_epi8(__m128i a) +{ +#if defined(__aarch64__) + uint8x16_t input = vreinterpretq_u8_m128i(a); + const int8_t ALIGN_STRUCT(16) + xr[16] = {-7, -6, -5, -4, -3, -2, -1, 0, -7, -6, -5, -4, -3, -2, -1, 0}; + const uint8x16_t mask_and = vdupq_n_u8(0x80); + const int8x16_t mask_shift = vld1q_s8(xr); + const uint8x16_t mask_result = + vshlq_u8(vandq_u8(input, mask_and), mask_shift); + uint8x8_t lo = vget_low_u8(mask_result); + uint8x8_t hi = vget_high_u8(mask_result); + + return vaddv_u8(lo) + (vaddv_u8(hi) << 8); +#else + // Use increasingly wide shifts+adds to collect the sign bits + // together. + // Since the widening shifts would be rather confusing to follow in little + // endian, everything will be illustrated in big endian order instead. This + // has a different result - the bits would actually be reversed on a big + // endian machine. + + // Starting input (only half the elements are shown): + // 89 ff 1d c0 00 10 99 33 + uint8x16_t input = vreinterpretq_u8_m128i(a); + + // Shift out everything but the sign bits with an unsigned shift right. + // + // Bytes of the vector:: + // 89 ff 1d c0 00 10 99 33 + // \ \ \ \ \ \ \ \ high_bits = (uint16x4_t)(input >> 7) + // | | | | | | | | + // 01 01 00 01 00 00 01 00 + // + // Bits of first important lane(s): + // 10001001 (89) + // \______ + // | + // 00000001 (01) + uint16x8_t high_bits = vreinterpretq_u16_u8(vshrq_n_u8(input, 7)); + + // Merge the even lanes together with a 16-bit unsigned shift right + add. + // 'xx' represents garbage data which will be ignored in the final result. + // In the important bytes, the add functions like a binary OR. + // + // 01 01 00 01 00 00 01 00 + // \_ | \_ | \_ | \_ | paired16 = (uint32x4_t)(input + (input >> 7)) + // \| \| \| \| + // xx 03 xx 01 xx 00 xx 02 + // + // 00000001 00000001 (01 01) + // \_______ | + // \| + // xxxxxxxx xxxxxx11 (xx 03) + uint32x4_t paired16 = + vreinterpretq_u32_u16(vsraq_n_u16(high_bits, high_bits, 7)); + + // Repeat with a wider 32-bit shift + add. + // xx 03 xx 01 xx 00 xx 02 + // \____ | \____ | paired32 = (uint64x1_t)(paired16 + (paired16 >> + // 14)) + // \| \| + // xx xx xx 0d xx xx xx 02 + // + // 00000011 00000001 (03 01) + // \\_____ || + // '----.\|| + // xxxxxxxx xxxx1101 (xx 0d) + uint64x2_t paired32 = + vreinterpretq_u64_u32(vsraq_n_u32(paired16, paired16, 14)); + + // Last, an even wider 64-bit shift + add to get our result in the low 8 bit + // lanes. xx xx xx 0d xx xx xx 02 + // \_________ | paired64 = (uint8x8_t)(paired32 + (paired32 >> + // 28)) + // \| + // xx xx xx xx xx xx xx d2 + // + // 00001101 00000010 (0d 02) + // \ \___ | | + // '---. \| | + // xxxxxxxx 11010010 (xx d2) + uint8x16_t paired64 = + vreinterpretq_u8_u64(vsraq_n_u64(paired32, paired32, 28)); + + // Extract the low 8 bits from each 64-bit lane with 2 8-bit extracts. + // xx xx xx xx xx xx xx d2 + // || return paired64[0] + // d2 + // Note: Little endian would return the correct value 4b (01001011) instead. + return vgetq_lane_u8(paired64, 0) | ((int) vgetq_lane_u8(paired64, 8) << 8); +#endif +} + +// Copy the lower 64-bit integer in a to dst. +// +// dst[63:0] := a[63:0] +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_movepi64_pi64 +FORCE_INLINE __m64 _mm_movepi64_pi64(__m128i a) +{ + return vreinterpret_m64_s64(vget_low_s64(vreinterpretq_s64_m128i(a))); +} + +// Copy the 64-bit integer a to the lower element of dst, and zero the upper +// element. +// +// dst[63:0] := a[63:0] +// dst[127:64] := 0 +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_movpi64_epi64 +FORCE_INLINE __m128i _mm_movpi64_epi64(__m64 a) +{ + return vreinterpretq_m128i_s64( + vcombine_s64(vreinterpret_s64_m64(a), vdup_n_s64(0))); +} + +// NEON does not provide this method +// Creates a 4-bit mask from the most significant bits of the four +// single-precision, floating-point values. +// https://msdn.microsoft.com/en-us/library/vstudio/4490ys29(v=vs.100).aspx +FORCE_INLINE int _mm_movemask_ps(__m128 a) +{ + uint32x4_t input = vreinterpretq_u32_m128(a); +#if defined(__aarch64__) + static const int32x4_t shift = {0, 1, 2, 3}; + uint32x4_t tmp = vshrq_n_u32(input, 31); + return vaddvq_u32(vshlq_u32(tmp, shift)); +#else + // Uses the exact same method as _mm_movemask_epi8, see that for details. + // Shift out everything but the sign bits with a 32-bit unsigned shift + // right. + uint64x2_t high_bits = vreinterpretq_u64_u32(vshrq_n_u32(input, 31)); + // Merge the two pairs together with a 64-bit unsigned shift right + add. + uint8x16_t paired = + vreinterpretq_u8_u64(vsraq_n_u64(high_bits, high_bits, 31)); + // Extract the result. + return vgetq_lane_u8(paired, 0) | (vgetq_lane_u8(paired, 8) << 2); +#endif +} + +// Compute the bitwise NOT of a and then AND with a 128-bit vector containing +// all 1's, and return 1 if the result is zero, otherwise return 0. +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_test_all_ones +FORCE_INLINE int _mm_test_all_ones(__m128i a) +{ + return (uint64_t)(vgetq_lane_s64(a, 0) & vgetq_lane_s64(a, 1)) == + ~(uint64_t) 0; +} + +// Compute the bitwise AND of 128 bits (representing integer data) in a and +// mask, and return 1 if the result is zero, otherwise return 0. +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_test_all_zeros +FORCE_INLINE int _mm_test_all_zeros(__m128i a, __m128i mask) +{ + int64x2_t a_and_mask = + vandq_s64(vreinterpretq_s64_m128i(a), vreinterpretq_s64_m128i(mask)); + return (vgetq_lane_s64(a_and_mask, 0) | vgetq_lane_s64(a_and_mask, 1)) ? 0 + : 1; +} + +/* Math operations */ + +// Subtracts the four single-precision, floating-point values of a and b. +// +// r0 := a0 - b0 +// r1 := a1 - b1 +// r2 := a2 - b2 +// r3 := a3 - b3 +// +// https://msdn.microsoft.com/en-us/library/vstudio/1zad2k61(v=vs.100).aspx +FORCE_INLINE __m128 _mm_sub_ps(__m128 a, __m128 b) +{ + return vreinterpretq_m128_f32( + vsubq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b))); +} + +// Subtract the lower single-precision (32-bit) floating-point element in b from +// the lower single-precision (32-bit) floating-point element in a, store the +// result in the lower element of dst, and copy the upper 3 packed elements from +// a to the upper elements of dst. +// +// dst[31:0] := a[31:0] - b[31:0] +// dst[127:32] := a[127:32] +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_sub_ss +FORCE_INLINE __m128 _mm_sub_ss(__m128 a, __m128 b) +{ + return _mm_move_ss(a, _mm_sub_ps(a, b)); +} + +// Subtract 2 packed 64-bit integers in b from 2 packed 64-bit integers in a, +// and store the results in dst. +// r0 := a0 - b0 +// r1 := a1 - b1 +FORCE_INLINE __m128i _mm_sub_epi64(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s64( + vsubq_s64(vreinterpretq_s64_m128i(a), vreinterpretq_s64_m128i(b))); +} + +// Subtracts the 4 signed or unsigned 32-bit integers of b from the 4 signed or +// unsigned 32-bit integers of a. +// +// r0 := a0 - b0 +// r1 := a1 - b1 +// r2 := a2 - b2 +// r3 := a3 - b3 +// +// https://msdn.microsoft.com/en-us/library/vstudio/fhh866h0(v=vs.100).aspx +FORCE_INLINE __m128i _mm_sub_epi32(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s32( + vsubq_s32(vreinterpretq_s32_m128i(a), vreinterpretq_s32_m128i(b))); +} + +FORCE_INLINE __m128i _mm_sub_epi16(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s16( + vsubq_s16(vreinterpretq_s16_m128i(a), vreinterpretq_s16_m128i(b))); +} + +FORCE_INLINE __m128i _mm_sub_epi8(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s8( + vsubq_s8(vreinterpretq_s8_m128i(a), vreinterpretq_s8_m128i(b))); +} + +// Subtract 64-bit integer b from 64-bit integer a, and store the result in dst. +// +// dst[63:0] := a[63:0] - b[63:0] +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_sub_si64 +FORCE_INLINE __m64 _mm_sub_si64(__m64 a, __m64 b) +{ + return vreinterpret_m64_s64( + vsub_s64(vreinterpret_s64_m64(a), vreinterpret_s64_m64(b))); +} + +// Subtracts the 8 unsigned 16-bit integers of bfrom the 8 unsigned 16-bit +// integers of a and saturates.. +// https://technet.microsoft.com/en-us/subscriptions/index/f44y0s19(v=vs.90).aspx +FORCE_INLINE __m128i _mm_subs_epu16(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_u16( + vqsubq_u16(vreinterpretq_u16_m128i(a), vreinterpretq_u16_m128i(b))); +} + +// Subtracts the 16 unsigned 8-bit integers of b from the 16 unsigned 8-bit +// integers of a and saturates. +// +// r0 := UnsignedSaturate(a0 - b0) +// r1 := UnsignedSaturate(a1 - b1) +// ... +// r15 := UnsignedSaturate(a15 - b15) +// +// https://technet.microsoft.com/en-us/subscriptions/yadkxc18(v=vs.90) +FORCE_INLINE __m128i _mm_subs_epu8(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_u8( + vqsubq_u8(vreinterpretq_u8_m128i(a), vreinterpretq_u8_m128i(b))); +} + +// Subtracts the 16 signed 8-bit integers of b from the 16 signed 8-bit integers +// of a and saturates. +// +// r0 := SignedSaturate(a0 - b0) +// r1 := SignedSaturate(a1 - b1) +// ... +// r15 := SignedSaturate(a15 - b15) +// +// https://technet.microsoft.com/en-us/subscriptions/by7kzks1(v=vs.90) +FORCE_INLINE __m128i _mm_subs_epi8(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s8( + vqsubq_s8(vreinterpretq_s8_m128i(a), vreinterpretq_s8_m128i(b))); +} + +// Subtracts the 8 signed 16-bit integers of b from the 8 signed 16-bit integers +// of a and saturates. +// +// r0 := SignedSaturate(a0 - b0) +// r1 := SignedSaturate(a1 - b1) +// ... +// r7 := SignedSaturate(a7 - b7) +// +// https://technet.microsoft.com/en-us/subscriptions/3247z5b8(v=vs.90) +FORCE_INLINE __m128i _mm_subs_epi16(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s16( + vqsubq_s16(vreinterpretq_s16_m128i(a), vreinterpretq_s16_m128i(b))); +} + +FORCE_INLINE __m128i _mm_adds_epu16(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_u16( + vqaddq_u16(vreinterpretq_u16_m128i(a), vreinterpretq_u16_m128i(b))); +} + +// Negate packed 8-bit integers in a when the corresponding signed +// 8-bit integer in b is negative, and store the results in dst. +// Element in dst are zeroed out when the corresponding element +// in b is zero. +// +// for i in 0..15 +// if b[i] < 0 +// r[i] := -a[i] +// else if b[i] == 0 +// r[i] := 0 +// else +// r[i] := a[i] +// fi +// done +FORCE_INLINE __m128i _mm_sign_epi8(__m128i _a, __m128i _b) +{ + int8x16_t a = vreinterpretq_s8_m128i(_a); + int8x16_t b = vreinterpretq_s8_m128i(_b); + + // signed shift right: faster than vclt + // (b < 0) ? 0xFF : 0 + uint8x16_t ltMask = vreinterpretq_u8_s8(vshrq_n_s8(b, 7)); + + // (b == 0) ? 0xFF : 0 +#if defined(__aarch64__) + int8x16_t zeroMask = vreinterpretq_s8_u8(vceqzq_s8(b)); +#else + int8x16_t zeroMask = vreinterpretq_s8_u8(vceqq_s8(b, vdupq_n_s8(0))); +#endif + + // bitwise select either a or nagative 'a' (vnegq_s8(a) return nagative 'a') + // based on ltMask + int8x16_t masked = vbslq_s8(ltMask, vnegq_s8(a), a); + // res = masked & (~zeroMask) + int8x16_t res = vbicq_s8(masked, zeroMask); + + return vreinterpretq_m128i_s8(res); +} + +// Negate packed 16-bit integers in a when the corresponding signed +// 16-bit integer in b is negative, and store the results in dst. +// Element in dst are zeroed out when the corresponding element +// in b is zero. +// +// for i in 0..7 +// if b[i] < 0 +// r[i] := -a[i] +// else if b[i] == 0 +// r[i] := 0 +// else +// r[i] := a[i] +// fi +// done +FORCE_INLINE __m128i _mm_sign_epi16(__m128i _a, __m128i _b) +{ + int16x8_t a = vreinterpretq_s16_m128i(_a); + int16x8_t b = vreinterpretq_s16_m128i(_b); + + // signed shift right: faster than vclt + // (b < 0) ? 0xFFFF : 0 + uint16x8_t ltMask = vreinterpretq_u16_s16(vshrq_n_s16(b, 15)); + // (b == 0) ? 0xFFFF : 0 +#if defined(__aarch64__) + int16x8_t zeroMask = vreinterpretq_s16_u16(vceqzq_s16(b)); +#else + int16x8_t zeroMask = vreinterpretq_s16_u16(vceqq_s16(b, vdupq_n_s16(0))); +#endif + + // bitwise select either a or negative 'a' (vnegq_s16(a) equals to negative + // 'a') based on ltMask + int16x8_t masked = vbslq_s16(ltMask, vnegq_s16(a), a); + // res = masked & (~zeroMask) + int16x8_t res = vbicq_s16(masked, zeroMask); + return vreinterpretq_m128i_s16(res); +} + +// Negate packed 32-bit integers in a when the corresponding signed +// 32-bit integer in b is negative, and store the results in dst. +// Element in dst are zeroed out when the corresponding element +// in b is zero. +// +// for i in 0..3 +// if b[i] < 0 +// r[i] := -a[i] +// else if b[i] == 0 +// r[i] := 0 +// else +// r[i] := a[i] +// fi +// done +FORCE_INLINE __m128i _mm_sign_epi32(__m128i _a, __m128i _b) +{ + int32x4_t a = vreinterpretq_s32_m128i(_a); + int32x4_t b = vreinterpretq_s32_m128i(_b); + + // signed shift right: faster than vclt + // (b < 0) ? 0xFFFFFFFF : 0 + uint32x4_t ltMask = vreinterpretq_u32_s32(vshrq_n_s32(b, 31)); + + // (b == 0) ? 0xFFFFFFFF : 0 +#if defined(__aarch64__) + int32x4_t zeroMask = vreinterpretq_s32_u32(vceqzq_s32(b)); +#else + int32x4_t zeroMask = vreinterpretq_s32_u32(vceqq_s32(b, vdupq_n_s32(0))); +#endif + + // bitwise select either a or negative 'a' (vnegq_s32(a) equals to negative + // 'a') based on ltMask + int32x4_t masked = vbslq_s32(ltMask, vnegq_s32(a), a); + // res = masked & (~zeroMask) + int32x4_t res = vbicq_s32(masked, zeroMask); + return vreinterpretq_m128i_s32(res); +} + +// Negate packed 16-bit integers in a when the corresponding signed 16-bit +// integer in b is negative, and store the results in dst. Element in dst are +// zeroed out when the corresponding element in b is zero. +// +// FOR j := 0 to 3 +// i := j*16 +// IF b[i+15:i] < 0 +// dst[i+15:i] := -(a[i+15:i]) +// ELSE IF b[i+15:i] == 0 +// dst[i+15:i] := 0 +// ELSE +// dst[i+15:i] := a[i+15:i] +// FI +// ENDFOR +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_sign_pi16 +FORCE_INLINE __m64 _mm_sign_pi16(__m64 _a, __m64 _b) +{ + int16x4_t a = vreinterpret_s16_m64(_a); + int16x4_t b = vreinterpret_s16_m64(_b); + + // signed shift right: faster than vclt + // (b < 0) ? 0xFFFF : 0 + uint16x4_t ltMask = vreinterpret_u16_s16(vshr_n_s16(b, 15)); + + // (b == 0) ? 0xFFFF : 0 +#if defined(__aarch64__) + int16x4_t zeroMask = vreinterpret_s16_u16(vceqz_s16(b)); +#else + int16x4_t zeroMask = vreinterpret_s16_u16(vceq_s16(b, vdup_n_s16(0))); +#endif + + // bitwise select either a or nagative 'a' (vneg_s16(a) return nagative 'a') + // based on ltMask + int16x4_t masked = vbsl_s16(ltMask, vneg_s16(a), a); + // res = masked & (~zeroMask) + int16x4_t res = vbic_s16(masked, zeroMask); + + return vreinterpret_m64_s16(res); +} + +// Negate packed 32-bit integers in a when the corresponding signed 32-bit +// integer in b is negative, and store the results in dst. Element in dst are +// zeroed out when the corresponding element in b is zero. +// +// FOR j := 0 to 1 +// i := j*32 +// IF b[i+31:i] < 0 +// dst[i+31:i] := -(a[i+31:i]) +// ELSE IF b[i+31:i] == 0 +// dst[i+31:i] := 0 +// ELSE +// dst[i+31:i] := a[i+31:i] +// FI +// ENDFOR +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_sign_pi32 +FORCE_INLINE __m64 _mm_sign_pi32(__m64 _a, __m64 _b) +{ + int32x2_t a = vreinterpret_s32_m64(_a); + int32x2_t b = vreinterpret_s32_m64(_b); + + // signed shift right: faster than vclt + // (b < 0) ? 0xFFFFFFFF : 0 + uint32x2_t ltMask = vreinterpret_u32_s32(vshr_n_s32(b, 31)); + + // (b == 0) ? 0xFFFFFFFF : 0 +#if defined(__aarch64__) + int32x2_t zeroMask = vreinterpret_s32_u32(vceqz_s32(b)); +#else + int32x2_t zeroMask = vreinterpret_s32_u32(vceq_s32(b, vdup_n_s32(0))); +#endif + + // bitwise select either a or nagative 'a' (vneg_s32(a) return nagative 'a') + // based on ltMask + int32x2_t masked = vbsl_s32(ltMask, vneg_s32(a), a); + // res = masked & (~zeroMask) + int32x2_t res = vbic_s32(masked, zeroMask); + + return vreinterpret_m64_s32(res); +} + +// Negate packed 8-bit integers in a when the corresponding signed 8-bit integer +// in b is negative, and store the results in dst. Element in dst are zeroed out +// when the corresponding element in b is zero. +// +// FOR j := 0 to 7 +// i := j*8 +// IF b[i+7:i] < 0 +// dst[i+7:i] := -(a[i+7:i]) +// ELSE IF b[i+7:i] == 0 +// dst[i+7:i] := 0 +// ELSE +// dst[i+7:i] := a[i+7:i] +// FI +// ENDFOR +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_sign_pi8 +FORCE_INLINE __m64 _mm_sign_pi8(__m64 _a, __m64 _b) +{ + int8x8_t a = vreinterpret_s8_m64(_a); + int8x8_t b = vreinterpret_s8_m64(_b); + + // signed shift right: faster than vclt + // (b < 0) ? 0xFF : 0 + uint8x8_t ltMask = vreinterpret_u8_s8(vshr_n_s8(b, 7)); + + // (b == 0) ? 0xFF : 0 +#if defined(__aarch64__) + int8x8_t zeroMask = vreinterpret_s8_u8(vceqz_s8(b)); +#else + int8x8_t zeroMask = vreinterpret_s8_u8(vceq_s8(b, vdup_n_s8(0))); +#endif + + // bitwise select either a or nagative 'a' (vneg_s8(a) return nagative 'a') + // based on ltMask + int8x8_t masked = vbsl_s8(ltMask, vneg_s8(a), a); + // res = masked & (~zeroMask) + int8x8_t res = vbic_s8(masked, zeroMask); + + return vreinterpret_m64_s8(res); +} + +// Average packed unsigned 16-bit integers in a and b, and store the results in +// dst. +// +// FOR j := 0 to 3 +// i := j*16 +// dst[i+15:i] := (a[i+15:i] + b[i+15:i] + 1) >> 1 +// ENDFOR +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_avg_pu16 +FORCE_INLINE __m64 _mm_avg_pu16(__m64 a, __m64 b) +{ + return vreinterpret_m64_u16( + vrhadd_u16(vreinterpret_u16_m64(a), vreinterpret_u16_m64(b))); +} + +// Average packed unsigned 8-bit integers in a and b, and store the results in +// dst. +// +// FOR j := 0 to 7 +// i := j*8 +// dst[i+7:i] := (a[i+7:i] + b[i+7:i] + 1) >> 1 +// ENDFOR +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_avg_pu8 +FORCE_INLINE __m64 _mm_avg_pu8(__m64 a, __m64 b) +{ + return vreinterpret_m64_u8( + vrhadd_u8(vreinterpret_u8_m64(a), vreinterpret_u8_m64(b))); +} + +// Average packed unsigned 8-bit integers in a and b, and store the results in +// dst. +// +// FOR j := 0 to 7 +// i := j*8 +// dst[i+7:i] := (a[i+7:i] + b[i+7:i] + 1) >> 1 +// ENDFOR +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_m_pavgb +#define _m_pavgb(a, b) _mm_avg_pu8(a, b) + +// Average packed unsigned 16-bit integers in a and b, and store the results in +// dst. +// +// FOR j := 0 to 3 +// i := j*16 +// dst[i+15:i] := (a[i+15:i] + b[i+15:i] + 1) >> 1 +// ENDFOR +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_m_pavgw +#define _m_pavgw(a, b) _mm_avg_pu16(a, b) + +// Computes the average of the 16 unsigned 8-bit integers in a and the 16 +// unsigned 8-bit integers in b and rounds. +// +// r0 := (a0 + b0) / 2 +// r1 := (a1 + b1) / 2 +// ... +// r15 := (a15 + b15) / 2 +// +// https://msdn.microsoft.com/en-us/library/vstudio/8zwh554a(v%3dvs.90).aspx +FORCE_INLINE __m128i _mm_avg_epu8(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_u8( + vrhaddq_u8(vreinterpretq_u8_m128i(a), vreinterpretq_u8_m128i(b))); +} + +// Computes the average of the 8 unsigned 16-bit integers in a and the 8 +// unsigned 16-bit integers in b and rounds. +// +// r0 := (a0 + b0) / 2 +// r1 := (a1 + b1) / 2 +// ... +// r7 := (a7 + b7) / 2 +// +// https://msdn.microsoft.com/en-us/library/vstudio/y13ca3c8(v=vs.90).aspx +FORCE_INLINE __m128i _mm_avg_epu16(__m128i a, __m128i b) +{ + return (__m128i) vrhaddq_u16(vreinterpretq_u16_m128i(a), + vreinterpretq_u16_m128i(b)); +} + +// Adds the four single-precision, floating-point values of a and b. +// +// r0 := a0 + b0 +// r1 := a1 + b1 +// r2 := a2 + b2 +// r3 := a3 + b3 +// +// https://msdn.microsoft.com/en-us/library/vstudio/c9848chc(v=vs.100).aspx +FORCE_INLINE __m128 _mm_add_ps(__m128 a, __m128 b) +{ + return vreinterpretq_m128_f32( + vaddq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b))); +} + +// Add packed double-precision (64-bit) floating-point elements in a and b, and +// store the results in dst. +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_add_pd +FORCE_INLINE __m128d _mm_add_pd(__m128d a, __m128d b) +{ +#if defined(__aarch64__) + return vreinterpretq_m128d_f64( + vaddq_f64(vreinterpretq_f64_m128d(a), vreinterpretq_f64_m128d(b))); +#else + double *da = (double *) &a; + double *db = (double *) &b; + double c[2]; + c[0] = da[0] + db[0]; + c[1] = da[1] + db[1]; + return vld1q_f32((float32_t *) c); +#endif +} + +// Add 64-bit integers a and b, and store the result in dst. +// +// dst[63:0] := a[63:0] + b[63:0] +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_add_si64 +FORCE_INLINE __m64 _mm_add_si64(__m64 a, __m64 b) +{ + return vreinterpret_m64_s64( + vadd_s64(vreinterpret_s64_m64(a), vreinterpret_s64_m64(b))); +} + +// adds the scalar single-precision floating point values of a and b. +// https://msdn.microsoft.com/en-us/library/be94x2y6(v=vs.100).aspx +FORCE_INLINE __m128 _mm_add_ss(__m128 a, __m128 b) +{ + float32_t b0 = vgetq_lane_f32(vreinterpretq_f32_m128(b), 0); + float32x4_t value = vsetq_lane_f32(b0, vdupq_n_f32(0), 0); + // the upper values in the result must be the remnants of . + return vreinterpretq_m128_f32(vaddq_f32(a, value)); +} + +// Adds the 4 signed or unsigned 64-bit integers in a to the 4 signed or +// unsigned 32-bit integers in b. +// https://msdn.microsoft.com/en-us/library/vstudio/09xs4fkk(v=vs.100).aspx +FORCE_INLINE __m128i _mm_add_epi64(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s64( + vaddq_s64(vreinterpretq_s64_m128i(a), vreinterpretq_s64_m128i(b))); +} + +// Adds the 4 signed or unsigned 32-bit integers in a to the 4 signed or +// unsigned 32-bit integers in b. +// +// r0 := a0 + b0 +// r1 := a1 + b1 +// r2 := a2 + b2 +// r3 := a3 + b3 +// +// https://msdn.microsoft.com/en-us/library/vstudio/09xs4fkk(v=vs.100).aspx +FORCE_INLINE __m128i _mm_add_epi32(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s32( + vaddq_s32(vreinterpretq_s32_m128i(a), vreinterpretq_s32_m128i(b))); +} + +// Adds the 8 signed or unsigned 16-bit integers in a to the 8 signed or +// unsigned 16-bit integers in b. +// https://msdn.microsoft.com/en-us/library/fceha5k4(v=vs.100).aspx +FORCE_INLINE __m128i _mm_add_epi16(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s16( + vaddq_s16(vreinterpretq_s16_m128i(a), vreinterpretq_s16_m128i(b))); +} + +// Adds the 16 signed or unsigned 8-bit integers in a to the 16 signed or +// unsigned 8-bit integers in b. +// https://technet.microsoft.com/en-us/subscriptions/yc7tcyzs(v=vs.90) +FORCE_INLINE __m128i _mm_add_epi8(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s8( + vaddq_s8(vreinterpretq_s8_m128i(a), vreinterpretq_s8_m128i(b))); +} + +// Adds the 8 signed 16-bit integers in a to the 8 signed 16-bit integers in b +// and saturates. +// +// r0 := SignedSaturate(a0 + b0) +// r1 := SignedSaturate(a1 + b1) +// ... +// r7 := SignedSaturate(a7 + b7) +// +// https://msdn.microsoft.com/en-us/library/1a306ef8(v=vs.100).aspx +FORCE_INLINE __m128i _mm_adds_epi16(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s16( + vqaddq_s16(vreinterpretq_s16_m128i(a), vreinterpretq_s16_m128i(b))); +} + +// Add packed signed 8-bit integers in a and b using saturation, and store the +// results in dst. +// +// FOR j := 0 to 15 +// i := j*8 +// dst[i+7:i] := Saturate8( a[i+7:i] + b[i+7:i] ) +// ENDFOR +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_adds_epi8 +FORCE_INLINE __m128i _mm_adds_epi8(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s8( + vqaddq_s8(vreinterpretq_s8_m128i(a), vreinterpretq_s8_m128i(b))); +} + +// Adds the 16 unsigned 8-bit integers in a to the 16 unsigned 8-bit integers in +// b and saturates.. +// https://msdn.microsoft.com/en-us/library/9hahyddy(v=vs.100).aspx +FORCE_INLINE __m128i _mm_adds_epu8(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_u8( + vqaddq_u8(vreinterpretq_u8_m128i(a), vreinterpretq_u8_m128i(b))); +} + +// Multiplies the 8 signed or unsigned 16-bit integers from a by the 8 signed or +// unsigned 16-bit integers from b. +// +// r0 := (a0 * b0)[15:0] +// r1 := (a1 * b1)[15:0] +// ... +// r7 := (a7 * b7)[15:0] +// +// https://msdn.microsoft.com/en-us/library/vstudio/9ks1472s(v=vs.100).aspx +FORCE_INLINE __m128i _mm_mullo_epi16(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s16( + vmulq_s16(vreinterpretq_s16_m128i(a), vreinterpretq_s16_m128i(b))); +} + +// Multiplies the 4 signed or unsigned 32-bit integers from a by the 4 signed or +// unsigned 32-bit integers from b. +// https://msdn.microsoft.com/en-us/library/vstudio/bb531409(v=vs.100).aspx +FORCE_INLINE __m128i _mm_mullo_epi32(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s32( + vmulq_s32(vreinterpretq_s32_m128i(a), vreinterpretq_s32_m128i(b))); +} + +// Multiply the packed unsigned 16-bit integers in a and b, producing +// intermediate 32-bit integers, and store the high 16 bits of the intermediate +// integers in dst. +// +// FOR j := 0 to 3 +// i := j*16 +// tmp[31:0] := a[i+15:i] * b[i+15:i] +// dst[i+15:i] := tmp[31:16] +// ENDFOR +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_m_pmulhuw +#define _m_pmulhuw(a, b) _mm_mulhi_pu16(a, b) + +// Multiplies the four single-precision, floating-point values of a and b. +// +// r0 := a0 * b0 +// r1 := a1 * b1 +// r2 := a2 * b2 +// r3 := a3 * b3 +// +// https://msdn.microsoft.com/en-us/library/vstudio/22kbk6t9(v=vs.100).aspx +FORCE_INLINE __m128 _mm_mul_ps(__m128 a, __m128 b) +{ + return vreinterpretq_m128_f32( + vmulq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b))); +} + +// Multiply packed double-precision (64-bit) floating-point elements in a and b, +// and store the results in dst. +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mul_pd +FORCE_INLINE __m128d _mm_mul_pd(__m128d a, __m128d b) +{ +#if defined(__aarch64__) + return vreinterpretq_m128d_f64( + vmulq_f64(vreinterpretq_f64_m128d(a), vreinterpretq_f64_m128d(b))); +#else + double *da = (double *) &a; + double *db = (double *) &b; + double c[2]; + c[0] = da[0] * db[0]; + c[1] = da[1] * db[1]; + return vld1q_f32((float32_t *) c); +#endif +} + +// Multiply the lower single-precision (32-bit) floating-point element in a and +// b, store the result in the lower element of dst, and copy the upper 3 packed +// elements from a to the upper elements of dst. +// +// dst[31:0] := a[31:0] * b[31:0] +// dst[127:32] := a[127:32] +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mul_ss +FORCE_INLINE __m128 _mm_mul_ss(__m128 a, __m128 b) +{ + return _mm_move_ss(a, _mm_mul_ps(a, b)); +} + +// Multiply the low unsigned 32-bit integers from each packed 64-bit element in +// a and b, and store the unsigned 64-bit results in dst. +// +// r0 := (a0 & 0xFFFFFFFF) * (b0 & 0xFFFFFFFF) +// r1 := (a2 & 0xFFFFFFFF) * (b2 & 0xFFFFFFFF) +FORCE_INLINE __m128i _mm_mul_epu32(__m128i a, __m128i b) +{ + // vmull_u32 upcasts instead of masking, so we downcast. + uint32x2_t a_lo = vmovn_u64(vreinterpretq_u64_m128i(a)); + uint32x2_t b_lo = vmovn_u64(vreinterpretq_u64_m128i(b)); + return vreinterpretq_m128i_u64(vmull_u32(a_lo, b_lo)); +} + +// Multiply the low unsigned 32-bit integers from a and b, and store the +// unsigned 64-bit result in dst. +// +// dst[63:0] := a[31:0] * b[31:0] +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mul_su32 +FORCE_INLINE __m64 _mm_mul_su32(__m64 a, __m64 b) +{ + return vreinterpret_m64_u64(vget_low_u64( + vmull_u32(vreinterpret_u32_m64(a), vreinterpret_u32_m64(b)))); +} + +// Multiply the low signed 32-bit integers from each packed 64-bit element in +// a and b, and store the signed 64-bit results in dst. +// +// r0 := (int64_t)(int32_t)a0 * (int64_t)(int32_t)b0 +// r1 := (int64_t)(int32_t)a2 * (int64_t)(int32_t)b2 +FORCE_INLINE __m128i _mm_mul_epi32(__m128i a, __m128i b) +{ + // vmull_s32 upcasts instead of masking, so we downcast. + int32x2_t a_lo = vmovn_s64(vreinterpretq_s64_m128i(a)); + int32x2_t b_lo = vmovn_s64(vreinterpretq_s64_m128i(b)); + return vreinterpretq_m128i_s64(vmull_s32(a_lo, b_lo)); +} + +// Multiplies the 8 signed 16-bit integers from a by the 8 signed 16-bit +// integers from b. +// +// r0 := (a0 * b0) + (a1 * b1) +// r1 := (a2 * b2) + (a3 * b3) +// r2 := (a4 * b4) + (a5 * b5) +// r3 := (a6 * b6) + (a7 * b7) +// https://msdn.microsoft.com/en-us/library/yht36sa6(v=vs.90).aspx +FORCE_INLINE __m128i _mm_madd_epi16(__m128i a, __m128i b) +{ + int32x4_t low = vmull_s16(vget_low_s16(vreinterpretq_s16_m128i(a)), + vget_low_s16(vreinterpretq_s16_m128i(b))); + int32x4_t high = vmull_s16(vget_high_s16(vreinterpretq_s16_m128i(a)), + vget_high_s16(vreinterpretq_s16_m128i(b))); + + int32x2_t low_sum = vpadd_s32(vget_low_s32(low), vget_high_s32(low)); + int32x2_t high_sum = vpadd_s32(vget_low_s32(high), vget_high_s32(high)); + + return vreinterpretq_m128i_s32(vcombine_s32(low_sum, high_sum)); +} + +// Multiply packed signed 16-bit integers in a and b, producing intermediate +// signed 32-bit integers. Shift right by 15 bits while rounding up, and store +// the packed 16-bit integers in dst. +// +// r0 := Round(((int32_t)a0 * (int32_t)b0) >> 15) +// r1 := Round(((int32_t)a1 * (int32_t)b1) >> 15) +// r2 := Round(((int32_t)a2 * (int32_t)b2) >> 15) +// ... +// r7 := Round(((int32_t)a7 * (int32_t)b7) >> 15) +FORCE_INLINE __m128i _mm_mulhrs_epi16(__m128i a, __m128i b) +{ + // Has issues due to saturation + // return vreinterpretq_m128i_s16(vqrdmulhq_s16(a, b)); + + // Multiply + int32x4_t mul_lo = vmull_s16(vget_low_s16(vreinterpretq_s16_m128i(a)), + vget_low_s16(vreinterpretq_s16_m128i(b))); + int32x4_t mul_hi = vmull_s16(vget_high_s16(vreinterpretq_s16_m128i(a)), + vget_high_s16(vreinterpretq_s16_m128i(b))); + + // Rounding narrowing shift right + // narrow = (int16_t)((mul + 16384) >> 15); + int16x4_t narrow_lo = vrshrn_n_s32(mul_lo, 15); + int16x4_t narrow_hi = vrshrn_n_s32(mul_hi, 15); + + // Join together + return vreinterpretq_m128i_s16(vcombine_s16(narrow_lo, narrow_hi)); +} + +// Vertically multiply each unsigned 8-bit integer from a with the corresponding +// signed 8-bit integer from b, producing intermediate signed 16-bit integers. +// Horizontally add adjacent pairs of intermediate signed 16-bit integers, +// and pack the saturated results in dst. +// +// FOR j := 0 to 7 +// i := j*16 +// dst[i+15:i] := Saturate_To_Int16( a[i+15:i+8]*b[i+15:i+8] + +// a[i+7:i]*b[i+7:i] ) +// ENDFOR +FORCE_INLINE __m128i _mm_maddubs_epi16(__m128i _a, __m128i _b) +{ +#if defined(__aarch64__) + uint8x16_t a = vreinterpretq_u8_m128i(_a); + int8x16_t b = vreinterpretq_s8_m128i(_b); + int16x8_t tl = vmulq_s16(vreinterpretq_s16_u16(vmovl_u8(vget_low_u8(a))), + vmovl_s8(vget_low_s8(b))); + int16x8_t th = vmulq_s16(vreinterpretq_s16_u16(vmovl_u8(vget_high_u8(a))), + vmovl_s8(vget_high_s8(b))); + return vreinterpretq_m128i_s16( + vqaddq_s16(vuzp1q_s16(tl, th), vuzp2q_s16(tl, th))); +#else + // This would be much simpler if x86 would choose to zero extend OR sign + // extend, not both. This could probably be optimized better. + uint16x8_t a = vreinterpretq_u16_m128i(_a); + int16x8_t b = vreinterpretq_s16_m128i(_b); + + // Zero extend a + int16x8_t a_odd = vreinterpretq_s16_u16(vshrq_n_u16(a, 8)); + int16x8_t a_even = vreinterpretq_s16_u16(vbicq_u16(a, vdupq_n_u16(0xff00))); + + // Sign extend by shifting left then shifting right. + int16x8_t b_even = vshrq_n_s16(vshlq_n_s16(b, 8), 8); + int16x8_t b_odd = vshrq_n_s16(b, 8); + + // multiply + int16x8_t prod1 = vmulq_s16(a_even, b_even); + int16x8_t prod2 = vmulq_s16(a_odd, b_odd); + + // saturated add + return vreinterpretq_m128i_s16(vqaddq_s16(prod1, prod2)); +#endif +} + +// Computes the fused multiple add product of 32-bit floating point numbers. +// +// Return Value +// Multiplies A and B, and adds C to the temporary result before returning it. +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_fmadd +FORCE_INLINE __m128 _mm_fmadd_ps(__m128 a, __m128 b, __m128 c) +{ +#if defined(__aarch64__) + return vreinterpretq_m128_f32(vfmaq_f32(vreinterpretq_f32_m128(c), + vreinterpretq_f32_m128(b), + vreinterpretq_f32_m128(a))); +#else + return _mm_add_ps(_mm_mul_ps(a, b), c); +#endif +} + +// Alternatively add and subtract packed single-precision (32-bit) +// floating-point elements in a to/from packed elements in b, and store the +// results in dst. +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=addsub_ps +FORCE_INLINE __m128 _mm_addsub_ps(__m128 a, __m128 b) +{ + __m128 mask = {-1.0f, 1.0f, -1.0f, 1.0f}; + return _mm_fmadd_ps(b, mask, a); +} + +// Compute the absolute differences of packed unsigned 8-bit integers in a and +// b, then horizontally sum each consecutive 8 differences to produce two +// unsigned 16-bit integers, and pack these unsigned 16-bit integers in the low +// 16 bits of 64-bit elements in dst. +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_sad_epu8 +FORCE_INLINE __m128i _mm_sad_epu8(__m128i a, __m128i b) +{ + uint16x8_t t = vpaddlq_u8(vabdq_u8((uint8x16_t) a, (uint8x16_t) b)); + uint16_t r0 = t[0] + t[1] + t[2] + t[3]; + uint16_t r4 = t[4] + t[5] + t[6] + t[7]; + uint16x8_t r = vsetq_lane_u16(r0, vdupq_n_u16(0), 0); + return (__m128i) vsetq_lane_u16(r4, r, 4); +} + +// Compute the absolute differences of packed unsigned 8-bit integers in a and +// b, then horizontally sum each consecutive 8 differences to produce four +// unsigned 16-bit integers, and pack these unsigned 16-bit integers in the low +// 16 bits of dst. +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_sad_pu8 +FORCE_INLINE __m64 _mm_sad_pu8(__m64 a, __m64 b) +{ + uint16x4_t t = + vpaddl_u8(vabd_u8(vreinterpret_u8_m64(a), vreinterpret_u8_m64(b))); + uint16_t r0 = t[0] + t[1] + t[2] + t[3]; + return vreinterpret_m64_u16(vset_lane_u16(r0, vdup_n_u16(0), 0)); +} + +// Compute the absolute differences of packed unsigned 8-bit integers in a and +// b, then horizontally sum each consecutive 8 differences to produce four +// unsigned 16-bit integers, and pack these unsigned 16-bit integers in the low +// 16 bits of dst. +// +// FOR j := 0 to 7 +// i := j*8 +// tmp[i+7:i] := ABS(a[i+7:i] - b[i+7:i]) +// ENDFOR +// dst[15:0] := tmp[7:0] + tmp[15:8] + tmp[23:16] + tmp[31:24] + tmp[39:32] + +// tmp[47:40] + tmp[55:48] + tmp[63:56] dst[63:16] := 0 +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_m_psadbw +#define _m_psadbw(a, b) _mm_sad_pu8(a, b) + +// Divides the four single-precision, floating-point values of a and b. +// +// r0 := a0 / b0 +// r1 := a1 / b1 +// r2 := a2 / b2 +// r3 := a3 / b3 +// +// https://msdn.microsoft.com/en-us/library/edaw8147(v=vs.100).aspx +FORCE_INLINE __m128 _mm_div_ps(__m128 a, __m128 b) +{ +#if defined(__aarch64__) + return vreinterpretq_m128_f32( + vdivq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b))); +#else + float32x4_t recip0 = vrecpeq_f32(vreinterpretq_f32_m128(b)); + float32x4_t recip1 = + vmulq_f32(recip0, vrecpsq_f32(recip0, vreinterpretq_f32_m128(b))); + return vreinterpretq_m128_f32(vmulq_f32(vreinterpretq_f32_m128(a), recip1)); +#endif +} + +// Divides the scalar single-precision floating point value of a by b. +// https://msdn.microsoft.com/en-us/library/4y73xa49(v=vs.100).aspx +FORCE_INLINE __m128 _mm_div_ss(__m128 a, __m128 b) +{ + float32_t value = + vgetq_lane_f32(vreinterpretq_f32_m128(_mm_div_ps(a, b)), 0); + return vreinterpretq_m128_f32( + vsetq_lane_f32(value, vreinterpretq_f32_m128(a), 0)); +} + +// Compute the approximate reciprocal of packed single-precision (32-bit) +// floating-point elements in a, and store the results in dst. The maximum +// relative error for this approximation is less than 1.5*2^-12. +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_rcp_ps +FORCE_INLINE __m128 _mm_rcp_ps(__m128 in) +{ +#if defined(__aarch64__) + return vreinterpretq_m128_f32( + vdivq_f32(vdupq_n_f32(1.0f), vreinterpretq_f32_m128(in))); +#else + float32x4_t recip = vrecpeq_f32(vreinterpretq_f32_m128(in)); + recip = vmulq_f32(recip, vrecpsq_f32(recip, vreinterpretq_f32_m128(in))); + return vreinterpretq_m128_f32(recip); +#endif +} + +// Compute the approximate reciprocal of the lower single-precision (32-bit) +// floating-point element in a, store the result in the lower element of dst, +// and copy the upper 3 packed elements from a to the upper elements of dst. The +// maximum relative error for this approximation is less than 1.5*2^-12. +// +// dst[31:0] := (1.0 / a[31:0]) +// dst[127:32] := a[127:32] +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_rcp_ss +FORCE_INLINE __m128 _mm_rcp_ss(__m128 a) +{ + return _mm_move_ss(a, _mm_rcp_ps(a)); +} + +// Computes the approximations of square roots of the four single-precision, +// floating-point values of a. First computes reciprocal square roots and then +// reciprocals of the four values. +// +// r0 := sqrt(a0) +// r1 := sqrt(a1) +// r2 := sqrt(a2) +// r3 := sqrt(a3) +// +// https://msdn.microsoft.com/en-us/library/vstudio/8z67bwwk(v=vs.100).aspx +FORCE_INLINE __m128 _mm_sqrt_ps(__m128 in) +{ +#if defined(__aarch64__) + return vreinterpretq_m128_f32(vsqrtq_f32(vreinterpretq_f32_m128(in))); +#else + float32x4_t recipsq = vrsqrteq_f32(vreinterpretq_f32_m128(in)); + float32x4_t sq = vrecpeq_f32(recipsq); + // ??? use step versions of both sqrt and recip for better accuracy? + return vreinterpretq_m128_f32(sq); +#endif +} + +// Computes the approximation of the square root of the scalar single-precision +// floating point value of in. +// https://msdn.microsoft.com/en-us/library/ahfsc22d(v=vs.100).aspx +FORCE_INLINE __m128 _mm_sqrt_ss(__m128 in) +{ + float32_t value = + vgetq_lane_f32(vreinterpretq_f32_m128(_mm_sqrt_ps(in)), 0); + return vreinterpretq_m128_f32( + vsetq_lane_f32(value, vreinterpretq_f32_m128(in), 0)); +} + +// Computes the approximations of the reciprocal square roots of the four +// single-precision floating point values of in. +// https://msdn.microsoft.com/en-us/library/22hfsh53(v=vs.100).aspx +FORCE_INLINE __m128 _mm_rsqrt_ps(__m128 in) +{ + return vreinterpretq_m128_f32(vrsqrteq_f32(vreinterpretq_f32_m128(in))); +} + +// Compute the approximate reciprocal square root of the lower single-precision +// (32-bit) floating-point element in a, store the result in the lower element +// of dst, and copy the upper 3 packed elements from a to the upper elements of +// dst. +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_rsqrt_ss +FORCE_INLINE __m128 _mm_rsqrt_ss(__m128 in) +{ + return vsetq_lane_f32(vgetq_lane_f32(_mm_rsqrt_ps(in), 0), in, 0); +} + +// Compare packed signed 16-bit integers in a and b, and store packed maximum +// values in dst. +// +// FOR j := 0 to 3 +// i := j*16 +// dst[i+15:i] := MAX(a[i+15:i], b[i+15:i]) +// ENDFOR +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_max_pi16 +FORCE_INLINE __m64 _mm_max_pi16(__m64 a, __m64 b) +{ + return vreinterpret_m64_s16( + vmax_s16(vreinterpret_s16_m64(a), vreinterpret_s16_m64(b))); +} + +// Compare packed signed 16-bit integers in a and b, and store packed maximum +// values in dst. +// +// FOR j := 0 to 3 +// i := j*16 +// dst[i+15:i] := MAX(a[i+15:i], b[i+15:i]) +// ENDFOR +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_max_pi16 +#define _m_pmaxsw(a, b) _mm_max_pi16(a, b) + +// Computes the maximums of the four single-precision, floating-point values of +// a and b. +// https://msdn.microsoft.com/en-us/library/vstudio/ff5d607a(v=vs.100).aspx +FORCE_INLINE __m128 _mm_max_ps(__m128 a, __m128 b) +{ +#if SSE2NEON_PRECISE_MINMAX + float32x4_t _a = vreinterpretq_f32_m128(a); + float32x4_t _b = vreinterpretq_f32_m128(b); + return vbslq_f32(vcltq_f32(_b, _a), _a, _b); +#else + return vreinterpretq_m128_f32( + vmaxq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b))); +#endif +} + +// Compare packed unsigned 8-bit integers in a and b, and store packed maximum +// values in dst. +// +// FOR j := 0 to 7 +// i := j*8 +// dst[i+7:i] := MAX(a[i+7:i], b[i+7:i]) +// ENDFOR +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_max_pu8 +FORCE_INLINE __m64 _mm_max_pu8(__m64 a, __m64 b) +{ + return vreinterpret_m64_u8( + vmax_u8(vreinterpret_u8_m64(a), vreinterpret_u8_m64(b))); +} + +// Compare packed unsigned 8-bit integers in a and b, and store packed maximum +// values in dst. +// +// FOR j := 0 to 7 +// i := j*8 +// dst[i+7:i] := MAX(a[i+7:i], b[i+7:i]) +// ENDFOR +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_max_pu8 +#define _m_pmaxub(a, b) _mm_max_pu8(a, b) + +// Compare packed signed 16-bit integers in a and b, and store packed minimum +// values in dst. +// +// FOR j := 0 to 3 +// i := j*16 +// dst[i+15:i] := MIN(a[i+15:i], b[i+15:i]) +// ENDFOR +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_min_pi16 +FORCE_INLINE __m64 _mm_min_pi16(__m64 a, __m64 b) +{ + return vreinterpret_m64_s16( + vmin_s16(vreinterpret_s16_m64(a), vreinterpret_s16_m64(b))); +} + +// Compare packed signed 16-bit integers in a and b, and store packed minimum +// values in dst. +// +// FOR j := 0 to 3 +// i := j*16 +// dst[i+15:i] := MIN(a[i+15:i], b[i+15:i]) +// ENDFOR +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_min_pi16 +#define _m_pminsw(a, b) _mm_min_pi16(a, b) + +// Computes the minima of the four single-precision, floating-point values of a +// and b. +// https://msdn.microsoft.com/en-us/library/vstudio/wh13kadz(v=vs.100).aspx +FORCE_INLINE __m128 _mm_min_ps(__m128 a, __m128 b) +{ +#if SSE2NEON_PRECISE_MINMAX + float32x4_t _a = vreinterpretq_f32_m128(a); + float32x4_t _b = vreinterpretq_f32_m128(b); + return vbslq_f32(vcltq_f32(_a, _b), _a, _b); +#else + return vreinterpretq_m128_f32( + vminq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b))); +#endif +} + +// Compare packed unsigned 8-bit integers in a and b, and store packed minimum +// values in dst. +// +// FOR j := 0 to 7 +// i := j*8 +// dst[i+7:i] := MIN(a[i+7:i], b[i+7:i]) +// ENDFOR +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_min_pu8 +FORCE_INLINE __m64 _mm_min_pu8(__m64 a, __m64 b) +{ + return vreinterpret_m64_u8( + vmin_u8(vreinterpret_u8_m64(a), vreinterpret_u8_m64(b))); +} + +// Compare packed unsigned 8-bit integers in a and b, and store packed minimum +// values in dst. +// +// FOR j := 0 to 7 +// i := j*8 +// dst[i+7:i] := MIN(a[i+7:i], b[i+7:i]) +// ENDFOR +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_min_pu8 +#define _m_pminub(a, b) _mm_min_pu8(a, b) + +// Computes the maximum of the two lower scalar single-precision floating point +// values of a and b. +// https://msdn.microsoft.com/en-us/library/s6db5esz(v=vs.100).aspx +FORCE_INLINE __m128 _mm_max_ss(__m128 a, __m128 b) +{ + float32_t value = vgetq_lane_f32(_mm_max_ps(a, b), 0); + return vreinterpretq_m128_f32( + vsetq_lane_f32(value, vreinterpretq_f32_m128(a), 0)); +} + +// Computes the minimum of the two lower scalar single-precision floating point +// values of a and b. +// https://msdn.microsoft.com/en-us/library/0a9y7xaa(v=vs.100).aspx +FORCE_INLINE __m128 _mm_min_ss(__m128 a, __m128 b) +{ + float32_t value = vgetq_lane_f32(_mm_min_ps(a, b), 0); + return vreinterpretq_m128_f32( + vsetq_lane_f32(value, vreinterpretq_f32_m128(a), 0)); +} + +// Computes the pairwise maxima of the 16 unsigned 8-bit integers from a and the +// 16 unsigned 8-bit integers from b. +// https://msdn.microsoft.com/en-us/library/st6634za(v=vs.100).aspx +FORCE_INLINE __m128i _mm_max_epu8(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_u8( + vmaxq_u8(vreinterpretq_u8_m128i(a), vreinterpretq_u8_m128i(b))); +} + +// Computes the pairwise minima of the 16 unsigned 8-bit integers from a and the +// 16 unsigned 8-bit integers from b. +// https://msdn.microsoft.com/ko-kr/library/17k8cf58(v=vs.100).aspxx +FORCE_INLINE __m128i _mm_min_epu8(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_u8( + vminq_u8(vreinterpretq_u8_m128i(a), vreinterpretq_u8_m128i(b))); +} + +// Computes the pairwise minima of the 8 signed 16-bit integers from a and the 8 +// signed 16-bit integers from b. +// https://msdn.microsoft.com/en-us/library/vstudio/6te997ew(v=vs.100).aspx +FORCE_INLINE __m128i _mm_min_epi16(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s16( + vminq_s16(vreinterpretq_s16_m128i(a), vreinterpretq_s16_m128i(b))); +} + +// Compare packed signed 8-bit integers in a and b, and store packed maximum +// values in dst. +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_max_epi8 +FORCE_INLINE __m128i _mm_max_epi8(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s8( + vmaxq_s8(vreinterpretq_s8_m128i(a), vreinterpretq_s8_m128i(b))); +} + +// Compare packed unsigned 16-bit integers in a and b, and store packed maximum +// values in dst. +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_max_epu16 +FORCE_INLINE __m128i _mm_max_epu16(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_u16( + vmaxq_u16(vreinterpretq_u16_m128i(a), vreinterpretq_u16_m128i(b))); +} + +// Compare packed signed 8-bit integers in a and b, and store packed minimum +// values in dst. +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_min_epi8 +FORCE_INLINE __m128i _mm_min_epi8(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s8( + vminq_s8(vreinterpretq_s8_m128i(a), vreinterpretq_s8_m128i(b))); +} + +// Compare packed unsigned 16-bit integers in a and b, and store packed minimum +// values in dst. +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_min_epu16 +FORCE_INLINE __m128i _mm_min_epu16(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_u16( + vminq_u16(vreinterpretq_u16_m128i(a), vreinterpretq_u16_m128i(b))); +} + +// Computes the pairwise maxima of the 8 signed 16-bit integers from a and the 8 +// signed 16-bit integers from b. +// https://msdn.microsoft.com/en-us/LIBRary/3x060h7c(v=vs.100).aspx +FORCE_INLINE __m128i _mm_max_epi16(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s16( + vmaxq_s16(vreinterpretq_s16_m128i(a), vreinterpretq_s16_m128i(b))); +} + +// epi versions of min/max +// Computes the pariwise maximums of the four signed 32-bit integer values of a +// and b. +// +// A 128-bit parameter that can be defined with the following equations: +// r0 := (a0 > b0) ? a0 : b0 +// r1 := (a1 > b1) ? a1 : b1 +// r2 := (a2 > b2) ? a2 : b2 +// r3 := (a3 > b3) ? a3 : b3 +// +// https://msdn.microsoft.com/en-us/library/vstudio/bb514055(v=vs.100).aspx +FORCE_INLINE __m128i _mm_max_epi32(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s32( + vmaxq_s32(vreinterpretq_s32_m128i(a), vreinterpretq_s32_m128i(b))); +} + +// Computes the pariwise minima of the four signed 32-bit integer values of a +// and b. +// +// A 128-bit parameter that can be defined with the following equations: +// r0 := (a0 < b0) ? a0 : b0 +// r1 := (a1 < b1) ? a1 : b1 +// r2 := (a2 < b2) ? a2 : b2 +// r3 := (a3 < b3) ? a3 : b3 +// +// https://msdn.microsoft.com/en-us/library/vstudio/bb531476(v=vs.100).aspx +FORCE_INLINE __m128i _mm_min_epi32(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s32( + vminq_s32(vreinterpretq_s32_m128i(a), vreinterpretq_s32_m128i(b))); +} + +// Compare packed unsigned 32-bit integers in a and b, and store packed maximum +// values in dst. +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_max_epu32 +FORCE_INLINE __m128i _mm_max_epu32(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_u32( + vmaxq_u32(vreinterpretq_u32_m128i(a), vreinterpretq_u32_m128i(b))); +} + +// Compare packed unsigned 32-bit integers in a and b, and store packed minimum +// values in dst. +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_max_epu32 +FORCE_INLINE __m128i _mm_min_epu32(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_u32( + vminq_u32(vreinterpretq_u32_m128i(a), vreinterpretq_u32_m128i(b))); +} + +// Multiply the packed unsigned 16-bit integers in a and b, producing +// intermediate 32-bit integers, and store the high 16 bits of the intermediate +// integers in dst. +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mulhi_pu16 +FORCE_INLINE __m64 _mm_mulhi_pu16(__m64 a, __m64 b) +{ + return vreinterpret_m64_u16(vshrn_n_u32( + vmull_u16(vreinterpret_u16_m64(a), vreinterpret_u16_m64(b)), 16)); +} + +// Multiplies the 8 signed 16-bit integers from a by the 8 signed 16-bit +// integers from b. +// +// r0 := (a0 * b0)[31:16] +// r1 := (a1 * b1)[31:16] +// ... +// r7 := (a7 * b7)[31:16] +// +// https://msdn.microsoft.com/en-us/library/vstudio/59hddw1d(v=vs.100).aspx +FORCE_INLINE __m128i _mm_mulhi_epi16(__m128i a, __m128i b) +{ + /* FIXME: issue with large values because of result saturation */ + // int16x8_t ret = vqdmulhq_s16(vreinterpretq_s16_m128i(a), + // vreinterpretq_s16_m128i(b)); /* =2*a*b */ return + // vreinterpretq_m128i_s16(vshrq_n_s16(ret, 1)); + int16x4_t a3210 = vget_low_s16(vreinterpretq_s16_m128i(a)); + int16x4_t b3210 = vget_low_s16(vreinterpretq_s16_m128i(b)); + int32x4_t ab3210 = vmull_s16(a3210, b3210); /* 3333222211110000 */ + int16x4_t a7654 = vget_high_s16(vreinterpretq_s16_m128i(a)); + int16x4_t b7654 = vget_high_s16(vreinterpretq_s16_m128i(b)); + int32x4_t ab7654 = vmull_s16(a7654, b7654); /* 7777666655554444 */ + uint16x8x2_t r = + vuzpq_u16(vreinterpretq_u16_s32(ab3210), vreinterpretq_u16_s32(ab7654)); + return vreinterpretq_m128i_u16(r.val[1]); +} + +// Multiply the packed unsigned 16-bit integers in a and b, producing +// intermediate 32-bit integers, and store the high 16 bits of the intermediate +// integers in dst. +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mulhi_epu16 +FORCE_INLINE __m128i _mm_mulhi_epu16(__m128i a, __m128i b) +{ + uint16x4_t a3210 = vget_low_u16(vreinterpretq_u16_m128i(a)); + uint16x4_t b3210 = vget_low_u16(vreinterpretq_u16_m128i(b)); + uint32x4_t ab3210 = vmull_u16(a3210, b3210); +#if defined(__aarch64__) + uint32x4_t ab7654 = + vmull_high_u16(vreinterpretq_u16_m128i(a), vreinterpretq_u16_m128i(b)); + uint16x8_t r = vuzp2q_u16(vreinterpretq_u16_u32(ab3210), + vreinterpretq_u16_u32(ab7654)); + return vreinterpretq_m128i_u16(r); +#else + uint16x4_t a7654 = vget_high_u16(vreinterpretq_u16_m128i(a)); + uint16x4_t b7654 = vget_high_u16(vreinterpretq_u16_m128i(b)); + uint32x4_t ab7654 = vmull_u16(a7654, b7654); + uint16x8x2_t r = + vuzpq_u16(vreinterpretq_u16_u32(ab3210), vreinterpretq_u16_u32(ab7654)); + return vreinterpretq_m128i_u16(r.val[1]); +#endif +} + +// Computes pairwise add of each argument as single-precision, floating-point +// values a and b. +// https://msdn.microsoft.com/en-us/library/yd9wecaa.aspx +FORCE_INLINE __m128 _mm_hadd_ps(__m128 a, __m128 b) +{ +#if defined(__aarch64__) + return vreinterpretq_m128_f32( + vpaddq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b))); +#else + float32x2_t a10 = vget_low_f32(vreinterpretq_f32_m128(a)); + float32x2_t a32 = vget_high_f32(vreinterpretq_f32_m128(a)); + float32x2_t b10 = vget_low_f32(vreinterpretq_f32_m128(b)); + float32x2_t b32 = vget_high_f32(vreinterpretq_f32_m128(b)); + return vreinterpretq_m128_f32( + vcombine_f32(vpadd_f32(a10, a32), vpadd_f32(b10, b32))); +#endif +} + +// Computes pairwise add of each argument as a 16-bit signed or unsigned integer +// values a and b. +FORCE_INLINE __m128i _mm_hadd_epi16(__m128i _a, __m128i _b) +{ + int16x8_t a = vreinterpretq_s16_m128i(_a); + int16x8_t b = vreinterpretq_s16_m128i(_b); +#if defined(__aarch64__) + return vreinterpretq_m128i_s16(vpaddq_s16(a, b)); +#else + return vreinterpretq_m128i_s16( + vcombine_s16(vpadd_s16(vget_low_s16(a), vget_high_s16(a)), + vpadd_s16(vget_low_s16(b), vget_high_s16(b)))); +#endif +} + +// Horizontally substract adjacent pairs of single-precision (32-bit) +// floating-point elements in a and b, and pack the results in dst. +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_hsub_ps +FORCE_INLINE __m128 _mm_hsub_ps(__m128 _a, __m128 _b) +{ +#if defined(__aarch64__) + return vreinterpretq_m128_f32(vsubq_f32( + vuzp1q_f32(vreinterpretq_f32_m128(_a), vreinterpretq_f32_m128(_b)), + vuzp2q_f32(vreinterpretq_f32_m128(_a), vreinterpretq_f32_m128(_b)))); +#else + float32x4x2_t c = + vuzpq_f32(vreinterpretq_f32_m128(_a), vreinterpretq_f32_m128(_b)); + return vreinterpretq_m128_f32(vsubq_f32(c.val[0], c.val[1])); +#endif +} + +// Horizontally add adjacent pairs of 16-bit integers in a and b, and pack the +// signed 16-bit results in dst. +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_hadd_pi16 +FORCE_INLINE __m64 _mm_hadd_pi16(__m64 a, __m64 b) +{ + return vreinterpret_m64_s16( + vpadd_s16(vreinterpret_s16_m64(a), vreinterpret_s16_m64(b))); +} + +// Horizontally add adjacent pairs of 32-bit integers in a and b, and pack the +// signed 32-bit results in dst. +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_hadd_pi32 +FORCE_INLINE __m64 _mm_hadd_pi32(__m64 a, __m64 b) +{ + return vreinterpret_m64_s32( + vpadd_s32(vreinterpret_s32_m64(a), vreinterpret_s32_m64(b))); +} + +// Computes pairwise difference of each argument as a 16-bit signed or unsigned +// integer values a and b. +FORCE_INLINE __m128i _mm_hsub_epi16(__m128i _a, __m128i _b) +{ + int32x4_t a = vreinterpretq_s32_m128i(_a); + int32x4_t b = vreinterpretq_s32_m128i(_b); + // Interleave using vshrn/vmovn + // [a0|a2|a4|a6|b0|b2|b4|b6] + // [a1|a3|a5|a7|b1|b3|b5|b7] + int16x8_t ab0246 = vcombine_s16(vmovn_s32(a), vmovn_s32(b)); + int16x8_t ab1357 = vcombine_s16(vshrn_n_s32(a, 16), vshrn_n_s32(b, 16)); + // Subtract + return vreinterpretq_m128i_s16(vsubq_s16(ab0246, ab1357)); +} + +// Computes saturated pairwise sub of each argument as a 16-bit signed +// integer values a and b. +FORCE_INLINE __m128i _mm_hadds_epi16(__m128i _a, __m128i _b) +{ +#if defined(__aarch64__) + int16x8_t a = vreinterpretq_s16_m128i(_a); + int16x8_t b = vreinterpretq_s16_m128i(_b); + return vreinterpretq_s64_s16( + vqaddq_s16(vuzp1q_s16(a, b), vuzp2q_s16(a, b))); +#else + int32x4_t a = vreinterpretq_s32_m128i(_a); + int32x4_t b = vreinterpretq_s32_m128i(_b); + // Interleave using vshrn/vmovn + // [a0|a2|a4|a6|b0|b2|b4|b6] + // [a1|a3|a5|a7|b1|b3|b5|b7] + int16x8_t ab0246 = vcombine_s16(vmovn_s32(a), vmovn_s32(b)); + int16x8_t ab1357 = vcombine_s16(vshrn_n_s32(a, 16), vshrn_n_s32(b, 16)); + // Saturated add + return vreinterpretq_m128i_s16(vqaddq_s16(ab0246, ab1357)); +#endif +} + +// Computes saturated pairwise difference of each argument as a 16-bit signed +// integer values a and b. +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_hsubs_epi16 +FORCE_INLINE __m128i _mm_hsubs_epi16(__m128i _a, __m128i _b) +{ +#if defined(__aarch64__) + int16x8_t a = vreinterpretq_s16_m128i(_a); + int16x8_t b = vreinterpretq_s16_m128i(_b); + return vreinterpretq_s64_s16( + vqsubq_s16(vuzp1q_s16(a, b), vuzp2q_s16(a, b))); +#else + int32x4_t a = vreinterpretq_s32_m128i(_a); + int32x4_t b = vreinterpretq_s32_m128i(_b); + // Interleave using vshrn/vmovn + // [a0|a2|a4|a6|b0|b2|b4|b6] + // [a1|a3|a5|a7|b1|b3|b5|b7] + int16x8_t ab0246 = vcombine_s16(vmovn_s32(a), vmovn_s32(b)); + int16x8_t ab1357 = vcombine_s16(vshrn_n_s32(a, 16), vshrn_n_s32(b, 16)); + // Saturated subtract + return vreinterpretq_m128i_s16(vqsubq_s16(ab0246, ab1357)); +#endif +} + +// Computes pairwise add of each argument as a 32-bit signed or unsigned integer +// values a and b. +FORCE_INLINE __m128i _mm_hadd_epi32(__m128i _a, __m128i _b) +{ + int32x4_t a = vreinterpretq_s32_m128i(_a); + int32x4_t b = vreinterpretq_s32_m128i(_b); + return vreinterpretq_m128i_s32( + vcombine_s32(vpadd_s32(vget_low_s32(a), vget_high_s32(a)), + vpadd_s32(vget_low_s32(b), vget_high_s32(b)))); +} + +// Computes pairwise difference of each argument as a 32-bit signed or unsigned +// integer values a and b. +FORCE_INLINE __m128i _mm_hsub_epi32(__m128i _a, __m128i _b) +{ + int64x2_t a = vreinterpretq_s64_m128i(_a); + int64x2_t b = vreinterpretq_s64_m128i(_b); + // Interleave using vshrn/vmovn + // [a0|a2|b0|b2] + // [a1|a2|b1|b3] + int32x4_t ab02 = vcombine_s32(vmovn_s64(a), vmovn_s64(b)); + int32x4_t ab13 = vcombine_s32(vshrn_n_s64(a, 32), vshrn_n_s64(b, 32)); + // Subtract + return vreinterpretq_m128i_s32(vsubq_s32(ab02, ab13)); +} + +// Kahan summation for accurate summation of floating-point numbers. +// http://blog.zachbjornson.com/2019/08/11/fast-float-summation.html +FORCE_INLINE void sse2neon_kadd_f32(float *sum, float *c, float y) +{ + y -= *c; + float t = *sum + y; + *c = (t - *sum) - y; + *sum = t; +} + +// Conditionally multiply the packed single-precision (32-bit) floating-point +// elements in a and b using the high 4 bits in imm8, sum the four products, +// and conditionally store the sum in dst using the low 4 bits of imm. +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_dp_ps +FORCE_INLINE __m128 _mm_dp_ps(__m128 a, __m128 b, const int imm) +{ +#if defined(__aarch64__) + /* shortcuts */ + if (imm == 0xFF) { + return _mm_set1_ps(vaddvq_f32(_mm_mul_ps(a, b))); + } + if (imm == 0x7F) { + float32x4_t m = _mm_mul_ps(a, b); + m[3] = 0; + return _mm_set1_ps(vaddvq_f32(m)); + } +#endif + + float s = 0, c = 0; + float32x4_t f32a = vreinterpretq_f32_m128(a); + float32x4_t f32b = vreinterpretq_f32_m128(b); + + /* To improve the accuracy of floating-point summation, Kahan algorithm + * is used for each operation. + */ + if (imm & (1 << 4)) + sse2neon_kadd_f32(&s, &c, f32a[0] * f32b[0]); + if (imm & (1 << 5)) + sse2neon_kadd_f32(&s, &c, f32a[1] * f32b[1]); + if (imm & (1 << 6)) + sse2neon_kadd_f32(&s, &c, f32a[2] * f32b[2]); + if (imm & (1 << 7)) + sse2neon_kadd_f32(&s, &c, f32a[3] * f32b[3]); + s += c; + + float32x4_t res = { + (imm & 0x1) ? s : 0, + (imm & 0x2) ? s : 0, + (imm & 0x4) ? s : 0, + (imm & 0x8) ? s : 0, + }; + return vreinterpretq_m128_f32(res); +} + +/* Compare operations */ + +// Compares for less than +// https://msdn.microsoft.com/en-us/library/vstudio/f330yhc8(v=vs.100).aspx +FORCE_INLINE __m128 _mm_cmplt_ps(__m128 a, __m128 b) +{ + return vreinterpretq_m128_u32( + vcltq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b))); +} + +// Compares for less than +// https://docs.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-2010/fy94wye7(v=vs.100) +FORCE_INLINE __m128 _mm_cmplt_ss(__m128 a, __m128 b) +{ + return _mm_move_ss(a, _mm_cmplt_ps(a, b)); +} + +// Compares for greater than. +// +// r0 := (a0 > b0) ? 0xffffffff : 0x0 +// r1 := (a1 > b1) ? 0xffffffff : 0x0 +// r2 := (a2 > b2) ? 0xffffffff : 0x0 +// r3 := (a3 > b3) ? 0xffffffff : 0x0 +// +// https://msdn.microsoft.com/en-us/library/vstudio/11dy102s(v=vs.100).aspx +FORCE_INLINE __m128 _mm_cmpgt_ps(__m128 a, __m128 b) +{ + return vreinterpretq_m128_u32( + vcgtq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b))); +} + +// Compares for greater than. +// https://docs.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-2010/1xyyyy9e(v=vs.100) +FORCE_INLINE __m128 _mm_cmpgt_ss(__m128 a, __m128 b) +{ + return _mm_move_ss(a, _mm_cmpgt_ps(a, b)); +} + +// Compares for greater than or equal. +// https://msdn.microsoft.com/en-us/library/vstudio/fs813y2t(v=vs.100).aspx +FORCE_INLINE __m128 _mm_cmpge_ps(__m128 a, __m128 b) +{ + return vreinterpretq_m128_u32( + vcgeq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b))); +} + +// Compares for greater than or equal. +// https://docs.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-2010/kesh3ddc(v=vs.100) +FORCE_INLINE __m128 _mm_cmpge_ss(__m128 a, __m128 b) +{ + return _mm_move_ss(a, _mm_cmpge_ps(a, b)); +} + +// Compares for less than or equal. +// +// r0 := (a0 <= b0) ? 0xffffffff : 0x0 +// r1 := (a1 <= b1) ? 0xffffffff : 0x0 +// r2 := (a2 <= b2) ? 0xffffffff : 0x0 +// r3 := (a3 <= b3) ? 0xffffffff : 0x0 +// +// https://msdn.microsoft.com/en-us/library/vstudio/1s75w83z(v=vs.100).aspx +FORCE_INLINE __m128 _mm_cmple_ps(__m128 a, __m128 b) +{ + return vreinterpretq_m128_u32( + vcleq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b))); +} + +// Compares for less than or equal. +// https://docs.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-2010/a7x0hbhw(v=vs.100) +FORCE_INLINE __m128 _mm_cmple_ss(__m128 a, __m128 b) +{ + return _mm_move_ss(a, _mm_cmple_ps(a, b)); +} + +// Compares for equality. +// https://msdn.microsoft.com/en-us/library/vstudio/36aectz5(v=vs.100).aspx +FORCE_INLINE __m128 _mm_cmpeq_ps(__m128 a, __m128 b) +{ + return vreinterpretq_m128_u32( + vceqq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b))); +} + +// Compares for equality. +// https://docs.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-2010/k423z28e(v=vs.100) +FORCE_INLINE __m128 _mm_cmpeq_ss(__m128 a, __m128 b) +{ + return _mm_move_ss(a, _mm_cmpeq_ps(a, b)); +} + +// Compares for inequality. +// https://msdn.microsoft.com/en-us/library/sf44thbx(v=vs.100).aspx +FORCE_INLINE __m128 _mm_cmpneq_ps(__m128 a, __m128 b) +{ + return vreinterpretq_m128_u32(vmvnq_u32( + vceqq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b)))); +} + +// Compares for inequality. +// https://docs.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-2010/ekya8fh4(v=vs.100) +FORCE_INLINE __m128 _mm_cmpneq_ss(__m128 a, __m128 b) +{ + return _mm_move_ss(a, _mm_cmpneq_ps(a, b)); +} + +// Compares for not greater than or equal. +// https://docs.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-2010/wsexys62(v=vs.100) +FORCE_INLINE __m128 _mm_cmpnge_ps(__m128 a, __m128 b) +{ + return _mm_cmplt_ps(a, b); +} + +// Compares for not greater than or equal. +// https://docs.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-2010/fk2y80s8(v=vs.100) +FORCE_INLINE __m128 _mm_cmpnge_ss(__m128 a, __m128 b) +{ + return _mm_cmplt_ss(a, b); +} + +// Compares for not greater than. +// https://docs.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-2010/d0xh7w0s(v=vs.100) +FORCE_INLINE __m128 _mm_cmpngt_ps(__m128 a, __m128 b) +{ + return _mm_cmple_ps(a, b); +} + +// Compares for not greater than. +// https://docs.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-2010/z7x9ydwh(v=vs.100) +FORCE_INLINE __m128 _mm_cmpngt_ss(__m128 a, __m128 b) +{ + return _mm_cmple_ss(a, b); +} + +// Compares for not less than or equal. +// https://docs.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-2010/6a330kxw(v=vs.100) +FORCE_INLINE __m128 _mm_cmpnle_ps(__m128 a, __m128 b) +{ + return _mm_cmpgt_ps(a, b); +} + +// Compares for not less than or equal. +// https://docs.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-2010/z7x9ydwh(v=vs.100) +FORCE_INLINE __m128 _mm_cmpnle_ss(__m128 a, __m128 b) +{ + return _mm_cmpgt_ss(a, b); +} + +// Compares for not less than. +// https://docs.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-2010/4686bbdw(v=vs.100) +FORCE_INLINE __m128 _mm_cmpnlt_ps(__m128 a, __m128 b) +{ + return _mm_cmpge_ps(a, b); +} + +// Compares for not less than. +// https://docs.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-2010/56b9z2wf(v=vs.100) +FORCE_INLINE __m128 _mm_cmpnlt_ss(__m128 a, __m128 b) +{ + return _mm_cmpge_ss(a, b); +} + +// Compares the 16 signed or unsigned 8-bit integers in a and the 16 signed or +// unsigned 8-bit integers in b for equality. +// https://msdn.microsoft.com/en-us/library/windows/desktop/bz5xk21a(v=vs.90).aspx +FORCE_INLINE __m128i _mm_cmpeq_epi8(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_u8( + vceqq_s8(vreinterpretq_s8_m128i(a), vreinterpretq_s8_m128i(b))); +} + +// Compares the 8 signed or unsigned 16-bit integers in a and the 8 signed or +// unsigned 16-bit integers in b for equality. +// https://msdn.microsoft.com/en-us/library/2ay060te(v=vs.100).aspx +FORCE_INLINE __m128i _mm_cmpeq_epi16(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_u16( + vceqq_s16(vreinterpretq_s16_m128i(a), vreinterpretq_s16_m128i(b))); +} + +// Compare packed 32-bit integers in a and b for equality, and store the results +// in dst +FORCE_INLINE __m128i _mm_cmpeq_epi32(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_u32( + vceqq_s32(vreinterpretq_s32_m128i(a), vreinterpretq_s32_m128i(b))); +} + +// Compare packed 64-bit integers in a and b for equality, and store the results +// in dst +FORCE_INLINE __m128i _mm_cmpeq_epi64(__m128i a, __m128i b) +{ +#if defined(__aarch64__) + return vreinterpretq_m128i_u64( + vceqq_u64(vreinterpretq_u64_m128i(a), vreinterpretq_u64_m128i(b))); +#else + // ARMv7 lacks vceqq_u64 + // (a == b) -> (a_lo == b_lo) && (a_hi == b_hi) + uint32x4_t cmp = + vceqq_u32(vreinterpretq_u32_m128i(a), vreinterpretq_u32_m128i(b)); + uint32x4_t swapped = vrev64q_u32(cmp); + return vreinterpretq_m128i_u32(vandq_u32(cmp, swapped)); +#endif +} + +// Compares the 16 signed 8-bit integers in a and the 16 signed 8-bit integers +// in b for lesser than. +// https://msdn.microsoft.com/en-us/library/windows/desktop/9s46csht(v=vs.90).aspx +FORCE_INLINE __m128i _mm_cmplt_epi8(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_u8( + vcltq_s8(vreinterpretq_s8_m128i(a), vreinterpretq_s8_m128i(b))); +} + +// Compares the 16 signed 8-bit integers in a and the 16 signed 8-bit integers +// in b for greater than. +// +// r0 := (a0 > b0) ? 0xff : 0x0 +// r1 := (a1 > b1) ? 0xff : 0x0 +// ... +// r15 := (a15 > b15) ? 0xff : 0x0 +// +// https://msdn.microsoft.com/zh-tw/library/wf45zt2b(v=vs.100).aspx +FORCE_INLINE __m128i _mm_cmpgt_epi8(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_u8( + vcgtq_s8(vreinterpretq_s8_m128i(a), vreinterpretq_s8_m128i(b))); +} + +// Compares the 8 signed 16-bit integers in a and the 8 signed 16-bit integers +// in b for less than. +// +// r0 := (a0 < b0) ? 0xffff : 0x0 +// r1 := (a1 < b1) ? 0xffff : 0x0 +// ... +// r7 := (a7 < b7) ? 0xffff : 0x0 +// +// https://technet.microsoft.com/en-us/library/t863edb2(v=vs.100).aspx +FORCE_INLINE __m128i _mm_cmplt_epi16(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_u16( + vcltq_s16(vreinterpretq_s16_m128i(a), vreinterpretq_s16_m128i(b))); +} + +// Compares the 8 signed 16-bit integers in a and the 8 signed 16-bit integers +// in b for greater than. +// +// r0 := (a0 > b0) ? 0xffff : 0x0 +// r1 := (a1 > b1) ? 0xffff : 0x0 +// ... +// r7 := (a7 > b7) ? 0xffff : 0x0 +// +// https://technet.microsoft.com/en-us/library/xd43yfsa(v=vs.100).aspx +FORCE_INLINE __m128i _mm_cmpgt_epi16(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_u16( + vcgtq_s16(vreinterpretq_s16_m128i(a), vreinterpretq_s16_m128i(b))); +} + + +// Compares the 4 signed 32-bit integers in a and the 4 signed 32-bit integers +// in b for less than. +// https://msdn.microsoft.com/en-us/library/vstudio/4ak0bf5d(v=vs.100).aspx +FORCE_INLINE __m128i _mm_cmplt_epi32(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_u32( + vcltq_s32(vreinterpretq_s32_m128i(a), vreinterpretq_s32_m128i(b))); +} + +// Compares the 4 signed 32-bit integers in a and the 4 signed 32-bit integers +// in b for greater than. +// https://msdn.microsoft.com/en-us/library/vstudio/1s9f2z0y(v=vs.100).aspx +FORCE_INLINE __m128i _mm_cmpgt_epi32(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_u32( + vcgtq_s32(vreinterpretq_s32_m128i(a), vreinterpretq_s32_m128i(b))); +} + +// Compares the 2 signed 64-bit integers in a and the 2 signed 64-bit integers +// in b for greater than. +FORCE_INLINE __m128i _mm_cmpgt_epi64(__m128i a, __m128i b) +{ +#if defined(__aarch64__) + return vreinterpretq_m128i_u64( + vcgtq_s64(vreinterpretq_s64_m128i(a), vreinterpretq_s64_m128i(b))); +#else + // ARMv7 lacks vcgtq_s64. + // This is based off of Clang's SSE2 polyfill: + // (a > b) -> ((a_hi > b_hi) || (a_lo > b_lo && a_hi == b_hi)) + + // Mask the sign bit out since we need a signed AND an unsigned comparison + // and it is ugly to try and split them. + int32x4_t mask = vreinterpretq_s32_s64(vdupq_n_s64(0x80000000ull)); + int32x4_t a_mask = veorq_s32(vreinterpretq_s32_m128i(a), mask); + int32x4_t b_mask = veorq_s32(vreinterpretq_s32_m128i(b), mask); + // Check if a > b + int64x2_t greater = vreinterpretq_s64_u32(vcgtq_s32(a_mask, b_mask)); + // Copy upper mask to lower mask + // a_hi > b_hi + int64x2_t gt_hi = vshrq_n_s64(greater, 63); + // Copy lower mask to upper mask + // a_lo > b_lo + int64x2_t gt_lo = vsliq_n_s64(greater, greater, 32); + // Compare for equality + int64x2_t equal = vreinterpretq_s64_u32(vceqq_s32(a_mask, b_mask)); + // Copy upper mask to lower mask + // a_hi == b_hi + int64x2_t eq_hi = vshrq_n_s64(equal, 63); + // a_hi > b_hi || (a_lo > b_lo && a_hi == b_hi) + int64x2_t ret = vorrq_s64(gt_hi, vandq_s64(gt_lo, eq_hi)); + return vreinterpretq_m128i_s64(ret); +#endif +} + +// Compares the four 32-bit floats in a and b to check if any values are NaN. +// Ordered compare between each value returns true for "orderable" and false for +// "not orderable" (NaN). +// https://msdn.microsoft.com/en-us/library/vstudio/0h9w00fx(v=vs.100).aspx see +// also: +// http://stackoverflow.com/questions/8627331/what-does-ordered-unordered-comparison-mean +// http://stackoverflow.com/questions/29349621/neon-isnanval-intrinsics +FORCE_INLINE __m128 _mm_cmpord_ps(__m128 a, __m128 b) +{ + // Note: NEON does not have ordered compare builtin + // Need to compare a eq a and b eq b to check for NaN + // Do AND of results to get final + uint32x4_t ceqaa = + vceqq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(a)); + uint32x4_t ceqbb = + vceqq_f32(vreinterpretq_f32_m128(b), vreinterpretq_f32_m128(b)); + return vreinterpretq_m128_u32(vandq_u32(ceqaa, ceqbb)); +} + +// Compares for ordered. +// https://docs.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-2010/343t62da(v=vs.100) +FORCE_INLINE __m128 _mm_cmpord_ss(__m128 a, __m128 b) +{ + return _mm_move_ss(a, _mm_cmpord_ps(a, b)); +} + +// Compares for unordered. +// https://docs.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-2010/khy6fk1t(v=vs.100) +FORCE_INLINE __m128 _mm_cmpunord_ps(__m128 a, __m128 b) +{ + uint32x4_t f32a = + vceqq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(a)); + uint32x4_t f32b = + vceqq_f32(vreinterpretq_f32_m128(b), vreinterpretq_f32_m128(b)); + return vreinterpretq_m128_u32(vmvnq_u32(vandq_u32(f32a, f32b))); +} + +// Compares for unordered. +// https://docs.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-2010/2as2387b(v=vs.100) +FORCE_INLINE __m128 _mm_cmpunord_ss(__m128 a, __m128 b) +{ + return _mm_move_ss(a, _mm_cmpunord_ps(a, b)); +} + +// Compares the lower single-precision floating point scalar values of a and b +// using a less than operation. : +// https://msdn.microsoft.com/en-us/library/2kwe606b(v=vs.90).aspx Important +// note!! The documentation on MSDN is incorrect! If either of the values is a +// NAN the docs say you will get a one, but in fact, it will return a zero!! +FORCE_INLINE int _mm_comilt_ss(__m128 a, __m128 b) +{ + uint32x4_t a_not_nan = + vceqq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(a)); + uint32x4_t b_not_nan = + vceqq_f32(vreinterpretq_f32_m128(b), vreinterpretq_f32_m128(b)); + uint32x4_t a_and_b_not_nan = vandq_u32(a_not_nan, b_not_nan); + uint32x4_t a_lt_b = + vcltq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b)); + return (vgetq_lane_u32(vandq_u32(a_and_b_not_nan, a_lt_b), 0) != 0) ? 1 : 0; +} + +// Compares the lower single-precision floating point scalar values of a and b +// using a greater than operation. : +// https://msdn.microsoft.com/en-us/library/b0738e0t(v=vs.100).aspx +FORCE_INLINE int _mm_comigt_ss(__m128 a, __m128 b) +{ + // return vgetq_lane_u32(vcgtq_f32(vreinterpretq_f32_m128(a), + // vreinterpretq_f32_m128(b)), 0); + uint32x4_t a_not_nan = + vceqq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(a)); + uint32x4_t b_not_nan = + vceqq_f32(vreinterpretq_f32_m128(b), vreinterpretq_f32_m128(b)); + uint32x4_t a_and_b_not_nan = vandq_u32(a_not_nan, b_not_nan); + uint32x4_t a_gt_b = + vcgtq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b)); + return (vgetq_lane_u32(vandq_u32(a_and_b_not_nan, a_gt_b), 0) != 0) ? 1 : 0; +} + +// Compares the lower single-precision floating point scalar values of a and b +// using a less than or equal operation. : +// https://msdn.microsoft.com/en-us/library/1w4t7c57(v=vs.90).aspx +FORCE_INLINE int _mm_comile_ss(__m128 a, __m128 b) +{ + // return vgetq_lane_u32(vcleq_f32(vreinterpretq_f32_m128(a), + // vreinterpretq_f32_m128(b)), 0); + uint32x4_t a_not_nan = + vceqq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(a)); + uint32x4_t b_not_nan = + vceqq_f32(vreinterpretq_f32_m128(b), vreinterpretq_f32_m128(b)); + uint32x4_t a_and_b_not_nan = vandq_u32(a_not_nan, b_not_nan); + uint32x4_t a_le_b = + vcleq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b)); + return (vgetq_lane_u32(vandq_u32(a_and_b_not_nan, a_le_b), 0) != 0) ? 1 : 0; +} + +// Compares the lower single-precision floating point scalar values of a and b +// using a greater than or equal operation. : +// https://msdn.microsoft.com/en-us/library/8t80des6(v=vs.100).aspx +FORCE_INLINE int _mm_comige_ss(__m128 a, __m128 b) +{ + // return vgetq_lane_u32(vcgeq_f32(vreinterpretq_f32_m128(a), + // vreinterpretq_f32_m128(b)), 0); + uint32x4_t a_not_nan = + vceqq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(a)); + uint32x4_t b_not_nan = + vceqq_f32(vreinterpretq_f32_m128(b), vreinterpretq_f32_m128(b)); + uint32x4_t a_and_b_not_nan = vandq_u32(a_not_nan, b_not_nan); + uint32x4_t a_ge_b = + vcgeq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b)); + return (vgetq_lane_u32(vandq_u32(a_and_b_not_nan, a_ge_b), 0) != 0) ? 1 : 0; +} + +// Compares the lower single-precision floating point scalar values of a and b +// using an equality operation. : +// https://msdn.microsoft.com/en-us/library/93yx2h2b(v=vs.100).aspx +FORCE_INLINE int _mm_comieq_ss(__m128 a, __m128 b) +{ + // return vgetq_lane_u32(vceqq_f32(vreinterpretq_f32_m128(a), + // vreinterpretq_f32_m128(b)), 0); + uint32x4_t a_not_nan = + vceqq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(a)); + uint32x4_t b_not_nan = + vceqq_f32(vreinterpretq_f32_m128(b), vreinterpretq_f32_m128(b)); + uint32x4_t a_and_b_not_nan = vandq_u32(a_not_nan, b_not_nan); + uint32x4_t a_eq_b = + vceqq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b)); + return (vgetq_lane_u32(vandq_u32(a_and_b_not_nan, a_eq_b), 0) != 0) ? 1 : 0; +} + +// Compares the lower single-precision floating point scalar values of a and b +// using an inequality operation. : +// https://msdn.microsoft.com/en-us/library/bafh5e0a(v=vs.90).aspx +FORCE_INLINE int _mm_comineq_ss(__m128 a, __m128 b) +{ + // return !vgetq_lane_u32(vceqq_f32(vreinterpretq_f32_m128(a), + // vreinterpretq_f32_m128(b)), 0); + uint32x4_t a_not_nan = + vceqq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(a)); + uint32x4_t b_not_nan = + vceqq_f32(vreinterpretq_f32_m128(b), vreinterpretq_f32_m128(b)); + uint32x4_t a_or_b_nan = vmvnq_u32(vandq_u32(a_not_nan, b_not_nan)); + uint32x4_t a_neq_b = vmvnq_u32( + vceqq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b))); + return (vgetq_lane_u32(vorrq_u32(a_or_b_nan, a_neq_b), 0) != 0) ? 1 : 0; +} + +// according to the documentation, these intrinsics behave the same as the +// non-'u' versions. We'll just alias them here. +#define _mm_ucomilt_ss _mm_comilt_ss +#define _mm_ucomile_ss _mm_comile_ss +#define _mm_ucomigt_ss _mm_comigt_ss +#define _mm_ucomige_ss _mm_comige_ss +#define _mm_ucomieq_ss _mm_comieq_ss +#define _mm_ucomineq_ss _mm_comineq_ss + +/* Conversions */ + +// Convert packed signed 32-bit integers in b to packed single-precision +// (32-bit) floating-point elements, store the results in the lower 2 elements +// of dst, and copy the upper 2 packed elements from a to the upper elements of +// dst. +// +// dst[31:0] := Convert_Int32_To_FP32(b[31:0]) +// dst[63:32] := Convert_Int32_To_FP32(b[63:32]) +// dst[95:64] := a[95:64] +// dst[127:96] := a[127:96] +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvt_pi2ps +FORCE_INLINE __m128 _mm_cvt_pi2ps(__m128 a, __m64 b) +{ + return vreinterpretq_m128_f32( + vcombine_f32(vcvt_f32_s32(vreinterpret_s32_m64(b)), + vget_high_f32(vreinterpretq_f32_m128(a)))); +} + +// Convert the signed 32-bit integer b to a single-precision (32-bit) +// floating-point element, store the result in the lower element of dst, and +// copy the upper 3 packed elements from a to the upper elements of dst. +// +// dst[31:0] := Convert_Int32_To_FP32(b[31:0]) +// dst[127:32] := a[127:32] +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvt_si2ss +FORCE_INLINE __m128 _mm_cvt_si2ss(__m128 a, int b) +{ + return vreinterpretq_m128_f32( + vsetq_lane_f32((float) b, vreinterpretq_f32_m128(a), 0)); +} + +// Convert the signed 32-bit integer b to a single-precision (32-bit) +// floating-point element, store the result in the lower element of dst, and +// copy the upper 3 packed elements from a to the upper elements of dst. +// +// dst[31:0] := Convert_Int32_To_FP32(b[31:0]) +// dst[127:32] := a[127:32] +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvtsi32_ss +#define _mm_cvtsi32_ss(a, b) _mm_cvt_si2ss(a, b) + +// Convert the signed 64-bit integer b to a single-precision (32-bit) +// floating-point element, store the result in the lower element of dst, and +// copy the upper 3 packed elements from a to the upper elements of dst. +// +// dst[31:0] := Convert_Int64_To_FP32(b[63:0]) +// dst[127:32] := a[127:32] +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvtsi64_ss +FORCE_INLINE __m128 _mm_cvtsi64_ss(__m128 a, int64_t b) +{ + return vreinterpretq_m128_f32( + vsetq_lane_f32((float) b, vreinterpretq_f32_m128(a), 0)); +} + +// Convert the lower single-precision (32-bit) floating-point element in a to a +// 32-bit integer, and store the result in dst. +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvt_ss2si +FORCE_INLINE int _mm_cvt_ss2si(__m128 a) +{ +#if defined(__aarch64__) + return vgetq_lane_s32(vcvtnq_s32_f32(vreinterpretq_f32_m128(a)), 0); +#else + float32_t data = vgetq_lane_f32(vreinterpretq_f32_m128(a), 0); + float32_t diff = data - floor(data); + if (diff > 0.5) + return (int32_t) ceil(data); + if (diff == 0.5) { + int32_t f = (int32_t) floor(data); + int32_t c = (int32_t) ceil(data); + return c & 1 ? f : c; + } + return (int32_t) floor(data); +#endif +} + +// Convert packed 16-bit integers in a to packed single-precision (32-bit) +// floating-point elements, and store the results in dst. +// +// FOR j := 0 to 3 +// i := j*16 +// m := j*32 +// dst[m+31:m] := Convert_Int16_To_FP32(a[i+15:i]) +// ENDFOR +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvtpi16_ps +FORCE_INLINE __m128 _mm_cvtpi16_ps(__m64 a) +{ + return vreinterpretq_m128_f32( + vcvtq_f32_s32(vmovl_s16(vreinterpret_s16_m64(a)))); +} + +// Convert packed 32-bit integers in b to packed single-precision (32-bit) +// floating-point elements, store the results in the lower 2 elements of dst, +// and copy the upper 2 packed elements from a to the upper elements of dst. +// +// dst[31:0] := Convert_Int32_To_FP32(b[31:0]) +// dst[63:32] := Convert_Int32_To_FP32(b[63:32]) +// dst[95:64] := a[95:64] +// dst[127:96] := a[127:96] +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvtpi32_ps +FORCE_INLINE __m128 _mm_cvtpi32_ps(__m128 a, __m64 b) +{ + return vreinterpretq_m128_f32( + vcombine_f32(vcvt_f32_s32(vreinterpret_s32_m64(b)), + vget_high_f32(vreinterpretq_f32_m128(a)))); +} + +// Convert packed signed 32-bit integers in a to packed single-precision +// (32-bit) floating-point elements, store the results in the lower 2 elements +// of dst, then covert the packed signed 32-bit integers in b to +// single-precision (32-bit) floating-point element, and store the results in +// the upper 2 elements of dst. +// +// dst[31:0] := Convert_Int32_To_FP32(a[31:0]) +// dst[63:32] := Convert_Int32_To_FP32(a[63:32]) +// dst[95:64] := Convert_Int32_To_FP32(b[31:0]) +// dst[127:96] := Convert_Int32_To_FP32(b[63:32]) +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvtpi32x2_ps +FORCE_INLINE __m128 _mm_cvtpi32x2_ps(__m64 a, __m64 b) +{ + return vreinterpretq_m128_f32(vcvtq_f32_s32( + vcombine_s32(vreinterpret_s32_m64(a), vreinterpret_s32_m64(b)))); +} + +// Convert the lower packed 8-bit integers in a to packed single-precision +// (32-bit) floating-point elements, and store the results in dst. +// +// FOR j := 0 to 3 +// i := j*8 +// m := j*32 +// dst[m+31:m] := Convert_Int8_To_FP32(a[i+7:i]) +// ENDFOR +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvtpi8_ps +FORCE_INLINE __m128 _mm_cvtpi8_ps(__m64 a) +{ + return vreinterpretq_m128_f32(vcvtq_f32_s32( + vmovl_s16(vget_low_s16(vmovl_s8(vreinterpret_s8_m64(a)))))); +} + +// Convert packed unsigned 16-bit integers in a to packed single-precision +// (32-bit) floating-point elements, and store the results in dst. +// +// FOR j := 0 to 3 +// i := j*16 +// m := j*32 +// dst[m+31:m] := Convert_UInt16_To_FP32(a[i+15:i]) +// ENDFOR +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvtpu16_ps +FORCE_INLINE __m128 _mm_cvtpu16_ps(__m64 a) +{ + return vreinterpretq_m128_f32( + vcvtq_f32_u32(vmovl_u16(vreinterpret_u16_m64(a)))); +} + +// Convert the lower packed unsigned 8-bit integers in a to packed +// single-precision (32-bit) floating-point elements, and store the results in +// dst. +// +// FOR j := 0 to 3 +// i := j*8 +// m := j*32 +// dst[m+31:m] := Convert_UInt8_To_FP32(a[i+7:i]) +// ENDFOR +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvtpu8_ps +FORCE_INLINE __m128 _mm_cvtpu8_ps(__m64 a) +{ + return vreinterpretq_m128_f32(vcvtq_f32_u32( + vmovl_u16(vget_low_u16(vmovl_u8(vreinterpret_u8_m64(a)))))); +} + +// Converts the four single-precision, floating-point values of a to signed +// 32-bit integer values using truncate. +// https://msdn.microsoft.com/en-us/library/vstudio/1h005y6x(v=vs.100).aspx +FORCE_INLINE __m128i _mm_cvttps_epi32(__m128 a) +{ + return vreinterpretq_m128i_s32(vcvtq_s32_f32(vreinterpretq_f32_m128(a))); +} + +// Convert the lower double-precision (64-bit) floating-point element in a to a +// 64-bit integer with truncation, and store the result in dst. +// +// dst[63:0] := Convert_FP64_To_Int64_Truncate(a[63:0]) +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvttsd_si64 +FORCE_INLINE int64_t _mm_cvttsd_si64(__m128d a) +{ +#if defined(__aarch64__) + return vgetq_lane_s64(vcvtq_s64_f64(vreinterpretq_f64_m128d(a)), 0); +#else + double ret = *((double *) &a); + return (int64_t) ret; +#endif +} + +// Convert the lower double-precision (64-bit) floating-point element in a to a +// 64-bit integer with truncation, and store the result in dst. +// +// dst[63:0] := Convert_FP64_To_Int64_Truncate(a[63:0]) +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvttsd_si64x +#define _mm_cvttsd_si64x(a) _mm_cvttsd_si64(a) + +// Converts the four signed 32-bit integer values of a to single-precision, +// floating-point values +// https://msdn.microsoft.com/en-us/library/vstudio/36bwxcx5(v=vs.100).aspx +FORCE_INLINE __m128 _mm_cvtepi32_ps(__m128i a) +{ + return vreinterpretq_m128_f32(vcvtq_f32_s32(vreinterpretq_s32_m128i(a))); +} + +// Converts the four unsigned 8-bit integers in the lower 16 bits to four +// unsigned 32-bit integers. +FORCE_INLINE __m128i _mm_cvtepu8_epi16(__m128i a) +{ + uint8x16_t u8x16 = vreinterpretq_u8_m128i(a); /* xxxx xxxx xxxx DCBA */ + uint16x8_t u16x8 = vmovl_u8(vget_low_u8(u8x16)); /* 0x0x 0x0x 0D0C 0B0A */ + return vreinterpretq_m128i_u16(u16x8); +} + +// Converts the four unsigned 8-bit integers in the lower 32 bits to four +// unsigned 32-bit integers. +// https://msdn.microsoft.com/en-us/library/bb531467%28v=vs.100%29.aspx +FORCE_INLINE __m128i _mm_cvtepu8_epi32(__m128i a) +{ + uint8x16_t u8x16 = vreinterpretq_u8_m128i(a); /* xxxx xxxx xxxx DCBA */ + uint16x8_t u16x8 = vmovl_u8(vget_low_u8(u8x16)); /* 0x0x 0x0x 0D0C 0B0A */ + uint32x4_t u32x4 = vmovl_u16(vget_low_u16(u16x8)); /* 000D 000C 000B 000A */ + return vreinterpretq_m128i_u32(u32x4); +} + +// Converts the two unsigned 8-bit integers in the lower 16 bits to two +// unsigned 64-bit integers. +FORCE_INLINE __m128i _mm_cvtepu8_epi64(__m128i a) +{ + uint8x16_t u8x16 = vreinterpretq_u8_m128i(a); /* xxxx xxxx xxxx xxBA */ + uint16x8_t u16x8 = vmovl_u8(vget_low_u8(u8x16)); /* 0x0x 0x0x 0x0x 0B0A */ + uint32x4_t u32x4 = vmovl_u16(vget_low_u16(u16x8)); /* 000x 000x 000B 000A */ + uint64x2_t u64x2 = vmovl_u32(vget_low_u32(u32x4)); /* 0000 000B 0000 000A */ + return vreinterpretq_m128i_u64(u64x2); +} + +// Converts the four unsigned 8-bit integers in the lower 16 bits to four +// unsigned 32-bit integers. +FORCE_INLINE __m128i _mm_cvtepi8_epi16(__m128i a) +{ + int8x16_t s8x16 = vreinterpretq_s8_m128i(a); /* xxxx xxxx xxxx DCBA */ + int16x8_t s16x8 = vmovl_s8(vget_low_s8(s8x16)); /* 0x0x 0x0x 0D0C 0B0A */ + return vreinterpretq_m128i_s16(s16x8); +} + +// Converts the four unsigned 8-bit integers in the lower 32 bits to four +// unsigned 32-bit integers. +FORCE_INLINE __m128i _mm_cvtepi8_epi32(__m128i a) +{ + int8x16_t s8x16 = vreinterpretq_s8_m128i(a); /* xxxx xxxx xxxx DCBA */ + int16x8_t s16x8 = vmovl_s8(vget_low_s8(s8x16)); /* 0x0x 0x0x 0D0C 0B0A */ + int32x4_t s32x4 = vmovl_s16(vget_low_s16(s16x8)); /* 000D 000C 000B 000A */ + return vreinterpretq_m128i_s32(s32x4); +} + +// Converts the two signed 8-bit integers in the lower 32 bits to four +// signed 64-bit integers. +FORCE_INLINE __m128i _mm_cvtepi8_epi64(__m128i a) +{ + int8x16_t s8x16 = vreinterpretq_s8_m128i(a); /* xxxx xxxx xxxx xxBA */ + int16x8_t s16x8 = vmovl_s8(vget_low_s8(s8x16)); /* 0x0x 0x0x 0x0x 0B0A */ + int32x4_t s32x4 = vmovl_s16(vget_low_s16(s16x8)); /* 000x 000x 000B 000A */ + int64x2_t s64x2 = vmovl_s32(vget_low_s32(s32x4)); /* 0000 000B 0000 000A */ + return vreinterpretq_m128i_s64(s64x2); +} + +// Converts the four signed 16-bit integers in the lower 64 bits to four signed +// 32-bit integers. +FORCE_INLINE __m128i _mm_cvtepi16_epi32(__m128i a) +{ + return vreinterpretq_m128i_s32( + vmovl_s16(vget_low_s16(vreinterpretq_s16_m128i(a)))); +} + +// Converts the two signed 16-bit integers in the lower 32 bits two signed +// 32-bit integers. +FORCE_INLINE __m128i _mm_cvtepi16_epi64(__m128i a) +{ + int16x8_t s16x8 = vreinterpretq_s16_m128i(a); /* xxxx xxxx xxxx 0B0A */ + int32x4_t s32x4 = vmovl_s16(vget_low_s16(s16x8)); /* 000x 000x 000B 000A */ + int64x2_t s64x2 = vmovl_s32(vget_low_s32(s32x4)); /* 0000 000B 0000 000A */ + return vreinterpretq_m128i_s64(s64x2); +} + +// Converts the four unsigned 16-bit integers in the lower 64 bits to four +// unsigned 32-bit integers. +FORCE_INLINE __m128i _mm_cvtepu16_epi32(__m128i a) +{ + return vreinterpretq_m128i_u32( + vmovl_u16(vget_low_u16(vreinterpretq_u16_m128i(a)))); +} + +// Converts the two unsigned 16-bit integers in the lower 32 bits to two +// unsigned 64-bit integers. +FORCE_INLINE __m128i _mm_cvtepu16_epi64(__m128i a) +{ + uint16x8_t u16x8 = vreinterpretq_u16_m128i(a); /* xxxx xxxx xxxx 0B0A */ + uint32x4_t u32x4 = vmovl_u16(vget_low_u16(u16x8)); /* 000x 000x 000B 000A */ + uint64x2_t u64x2 = vmovl_u32(vget_low_u32(u32x4)); /* 0000 000B 0000 000A */ + return vreinterpretq_m128i_u64(u64x2); +} + +// Converts the two unsigned 32-bit integers in the lower 64 bits to two +// unsigned 64-bit integers. +FORCE_INLINE __m128i _mm_cvtepu32_epi64(__m128i a) +{ + return vreinterpretq_m128i_u64( + vmovl_u32(vget_low_u32(vreinterpretq_u32_m128i(a)))); +} + +// Converts the two signed 32-bit integers in the lower 64 bits to two signed +// 64-bit integers. +FORCE_INLINE __m128i _mm_cvtepi32_epi64(__m128i a) +{ + return vreinterpretq_m128i_s64( + vmovl_s32(vget_low_s32(vreinterpretq_s32_m128i(a)))); +} + +// Converts the four single-precision, floating-point values of a to signed +// 32-bit integer values. +// +// r0 := (int) a0 +// r1 := (int) a1 +// r2 := (int) a2 +// r3 := (int) a3 +// +// https://msdn.microsoft.com/en-us/library/vstudio/xdc42k5e(v=vs.100).aspx +// *NOTE*. The default rounding mode on SSE is 'round to even', which ARMv7-A +// does not support! It is supported on ARMv8-A however. +FORCE_INLINE __m128i _mm_cvtps_epi32(__m128 a) +{ +#if defined(__aarch64__) + return vreinterpretq_m128i_s32(vcvtnq_s32_f32(a)); +#else + uint32x4_t signmask = vdupq_n_u32(0x80000000); + float32x4_t half = vbslq_f32(signmask, vreinterpretq_f32_m128(a), + vdupq_n_f32(0.5f)); /* +/- 0.5 */ + int32x4_t r_normal = vcvtq_s32_f32(vaddq_f32( + vreinterpretq_f32_m128(a), half)); /* round to integer: [a + 0.5]*/ + int32x4_t r_trunc = + vcvtq_s32_f32(vreinterpretq_f32_m128(a)); /* truncate to integer: [a] */ + int32x4_t plusone = vreinterpretq_s32_u32(vshrq_n_u32( + vreinterpretq_u32_s32(vnegq_s32(r_trunc)), 31)); /* 1 or 0 */ + int32x4_t r_even = vbicq_s32(vaddq_s32(r_trunc, plusone), + vdupq_n_s32(1)); /* ([a] + {0,1}) & ~1 */ + float32x4_t delta = vsubq_f32( + vreinterpretq_f32_m128(a), + vcvtq_f32_s32(r_trunc)); /* compute delta: delta = (a - [a]) */ + uint32x4_t is_delta_half = vceqq_f32(delta, half); /* delta == +/- 0.5 */ + return vreinterpretq_m128i_s32(vbslq_s32(is_delta_half, r_even, r_normal)); +#endif +} + +// Copy the lower 32-bit integer in a to dst. +// +// dst[31:0] := a[31:0] +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvtsi128_si32 +FORCE_INLINE int _mm_cvtsi128_si32(__m128i a) +{ + return vgetq_lane_s32(vreinterpretq_s32_m128i(a), 0); +} + +// Copy the lower 64-bit integer in a to dst. +// +// dst[63:0] := a[63:0] +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvtsi128_si64 +FORCE_INLINE int64_t _mm_cvtsi128_si64(__m128i a) +{ + return vgetq_lane_s64(vreinterpretq_s64_m128i(a), 0); +} + +// Copy the lower 64-bit integer in a to dst. +// +// dst[63:0] := a[63:0] +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvtsi128_si64x +#define _mm_cvtsi128_si64x(a) _mm_cvtsi128_si64(a) + +// Moves 32-bit integer a to the least significant 32 bits of an __m128 object, +// zero extending the upper bits. +// +// r0 := a +// r1 := 0x0 +// r2 := 0x0 +// r3 := 0x0 +// +// https://msdn.microsoft.com/en-us/library/ct3539ha%28v=vs.90%29.aspx +FORCE_INLINE __m128i _mm_cvtsi32_si128(int a) +{ + return vreinterpretq_m128i_s32(vsetq_lane_s32(a, vdupq_n_s32(0), 0)); +} + +// Moves 64-bit integer a to the least significant 64 bits of an __m128 object, +// zero extending the upper bits. +// +// r0 := a +// r1 := 0x0 +FORCE_INLINE __m128i _mm_cvtsi64_si128(int64_t a) +{ + return vreinterpretq_m128i_s64(vsetq_lane_s64(a, vdupq_n_s64(0), 0)); +} + +// Cast vector of type __m128 to type __m128d. This intrinsic is only used for +// compilation and does not generate any instructions, thus it has zero latency. +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_castps_pd +FORCE_INLINE __m128d _mm_castps_pd(__m128 a) +{ + return vreinterpretq_m128d_s32(vreinterpretq_s32_m128(a)); +} + +// Applies a type cast to reinterpret four 32-bit floating point values passed +// in as a 128-bit parameter as packed 32-bit integers. +// https://msdn.microsoft.com/en-us/library/bb514099.aspx +FORCE_INLINE __m128i _mm_castps_si128(__m128 a) +{ + return vreinterpretq_m128i_s32(vreinterpretq_s32_m128(a)); +} + +// Applies a type cast to reinterpret four 32-bit integers passed in as a +// 128-bit parameter as packed 32-bit floating point values. +// https://msdn.microsoft.com/en-us/library/bb514029.aspx +FORCE_INLINE __m128 _mm_castsi128_ps(__m128i a) +{ + return vreinterpretq_m128_s32(vreinterpretq_s32_m128i(a)); +} + +// Loads 128-bit value. : +// https://msdn.microsoft.com/en-us/library/atzzad1h(v=vs.80).aspx +FORCE_INLINE __m128i _mm_load_si128(const __m128i *p) +{ + return vreinterpretq_m128i_s32(vld1q_s32((const int32_t *) p)); +} + +// Load a double-precision (64-bit) floating-point element from memory into both +// elements of dst. +// +// dst[63:0] := MEM[mem_addr+63:mem_addr] +// dst[127:64] := MEM[mem_addr+63:mem_addr] +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_load1_pd +FORCE_INLINE __m128d _mm_load1_pd(const double *p) +{ +#if defined(__aarch64__) + return vreinterpretq_m128d_f64(vld1q_dup_f64(p)); +#else + return vreinterpretq_m128d_s64(vdupq_n_s64(*(const int64_t *) p)); +#endif +} + +// Load a double-precision (64-bit) floating-point element from memory into the +// upper element of dst, and copy the lower element from a to dst. mem_addr does +// not need to be aligned on any particular boundary. +// +// dst[63:0] := a[63:0] +// dst[127:64] := MEM[mem_addr+63:mem_addr] +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_loadh_pd +FORCE_INLINE __m128d _mm_loadh_pd(__m128d a, const double *p) +{ +#if defined(__aarch64__) + return vreinterpretq_m128d_f64( + vcombine_f64(vget_low_f64(vreinterpretq_f64_m128d(a)), vld1_f64(p))); +#else + return vreinterpretq_m128d_f32(vcombine_f32( + vget_low_f32(vreinterpretq_f32_m128d(a)), vld1_f32((const float *) p))); +#endif +} + +// Load a double-precision (64-bit) floating-point element from memory into both +// elements of dst. +// +// dst[63:0] := MEM[mem_addr+63:mem_addr] +// dst[127:64] := MEM[mem_addr+63:mem_addr] +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_load_pd1 +#define _mm_load_pd1 _mm_load1_pd + +// Load a double-precision (64-bit) floating-point element from memory into both +// elements of dst. +// +// dst[63:0] := MEM[mem_addr+63:mem_addr] +// dst[127:64] := MEM[mem_addr+63:mem_addr] +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_loaddup_pd +#define _mm_loaddup_pd _mm_load1_pd + +// Loads 128-bit value. : +// https://msdn.microsoft.com/zh-cn/library/f4k12ae8(v=vs.90).aspx +FORCE_INLINE __m128i _mm_loadu_si128(const __m128i *p) +{ + return vreinterpretq_m128i_s32(vld1q_s32((const int32_t *) p)); +} + +// Load unaligned 32-bit integer from memory into the first element of dst. +// +// dst[31:0] := MEM[mem_addr+31:mem_addr] +// dst[MAX:32] := 0 +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_loadu_si32 +FORCE_INLINE __m128i _mm_loadu_si32(const void *p) +{ + return vreinterpretq_m128i_s32( + vsetq_lane_s32(*(const int32_t *) p, vdupq_n_s32(0), 0)); +} + +// Convert packed double-precision (64-bit) floating-point elements in a to +// packed single-precision (32-bit) floating-point elements, and store the +// results in dst. +// +// FOR j := 0 to 1 +// i := 32*j +// k := 64*j +// dst[i+31:i] := Convert_FP64_To_FP32(a[k+64:k]) +// ENDFOR +// dst[127:64] := 0 +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvtpd_ps +FORCE_INLINE __m128 _mm_cvtpd_ps(__m128d a) +{ +#if defined(__aarch64__) + float32x2_t tmp = vcvt_f32_f64(vreinterpretq_f64_m128d(a)); + return vreinterpretq_m128_f32(vcombine_f32(tmp, vdup_n_f32(0))); +#else + float a0 = (float) ((double *) &a)[0]; + float a1 = (float) ((double *) &a)[1]; + return _mm_set_ps(0, 0, a1, a0); +#endif +} + +// Copy the lower double-precision (64-bit) floating-point element of a to dst. +// +// dst[63:0] := a[63:0] +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvtsd_f64 +FORCE_INLINE double _mm_cvtsd_f64(__m128d a) +{ +#if defined(__aarch64__) + return (double) vgetq_lane_f64(vreinterpretq_f64_m128d(a), 0); +#else + return ((double *) &a)[0]; +#endif +} + +// Convert packed single-precision (32-bit) floating-point elements in a to +// packed double-precision (64-bit) floating-point elements, and store the +// results in dst. +// +// FOR j := 0 to 1 +// i := 64*j +// k := 32*j +// dst[i+63:i] := Convert_FP32_To_FP64(a[k+31:k]) +// ENDFOR +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvtps_pd +FORCE_INLINE __m128d _mm_cvtps_pd(__m128 a) +{ +#if defined(__aarch64__) + return vreinterpretq_m128d_f64( + vcvt_f64_f32(vget_low_f32(vreinterpretq_f32_m128(a)))); +#else + double a0 = (double) vgetq_lane_f32(vreinterpretq_f32_m128(a), 0); + double a1 = (double) vgetq_lane_f32(vreinterpretq_f32_m128(a), 1); + return _mm_set_pd(a1, a0); +#endif +} + +// Cast vector of type __m128d to type __m128i. This intrinsic is only used for +// compilation and does not generate any instructions, thus it has zero latency. +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_castpd_si128 +FORCE_INLINE __m128i _mm_castpd_si128(__m128d a) +{ + return vreinterpretq_m128i_s64(vreinterpretq_s64_m128d(a)); +} + +// Blend packed single-precision (32-bit) floating-point elements from a and b +// using mask, and store the results in dst. +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_blendv_ps +FORCE_INLINE __m128 _mm_blendv_ps(__m128 a, __m128 b, __m128 mask) +{ + return vreinterpretq_m128_f32(vbslq_f32(vreinterpretq_u32_m128(mask), + vreinterpretq_f32_m128(b), + vreinterpretq_f32_m128(a))); +} + +// Round the packed single-precision (32-bit) floating-point elements in a using +// the rounding parameter, and store the results as packed single-precision +// floating-point elements in dst. +// software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_round_ps +FORCE_INLINE __m128 _mm_round_ps(__m128 a, int rounding) +{ +#if defined(__aarch64__) + switch (rounding) { + case (_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC): + return vreinterpretq_m128_f32(vrndnq_f32(vreinterpretq_f32_m128(a))); + case (_MM_FROUND_TO_NEG_INF | _MM_FROUND_NO_EXC): + return vreinterpretq_m128_f32(vrndmq_f32(vreinterpretq_f32_m128(a))); + case (_MM_FROUND_TO_POS_INF | _MM_FROUND_NO_EXC): + return vreinterpretq_m128_f32(vrndpq_f32(vreinterpretq_f32_m128(a))); + case (_MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC): + return vreinterpretq_m128_f32(vrndq_f32(vreinterpretq_f32_m128(a))); + default: //_MM_FROUND_CUR_DIRECTION + return vreinterpretq_m128_f32(vrndiq_f32(vreinterpretq_f32_m128(a))); + } +#else + float *v_float = (float *) &a; + __m128 zero, neg_inf, pos_inf; + + switch (rounding) { + case (_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC): + return _mm_cvtepi32_ps(_mm_cvtps_epi32(a)); + case (_MM_FROUND_TO_NEG_INF | _MM_FROUND_NO_EXC): + return (__m128){floorf(v_float[0]), floorf(v_float[1]), + floorf(v_float[2]), floorf(v_float[3])}; + case (_MM_FROUND_TO_POS_INF | _MM_FROUND_NO_EXC): + return (__m128){ceilf(v_float[0]), ceilf(v_float[1]), ceilf(v_float[2]), + ceilf(v_float[3])}; + case (_MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC): + zero = _mm_set_ps(0.0f, 0.0f, 0.0f, 0.0f); + neg_inf = _mm_set_ps(floorf(v_float[0]), floorf(v_float[1]), + floorf(v_float[2]), floorf(v_float[3])); + pos_inf = _mm_set_ps(ceilf(v_float[0]), ceilf(v_float[1]), + ceilf(v_float[2]), ceilf(v_float[3])); + return _mm_blendv_ps(pos_inf, neg_inf, _mm_cmple_ps(a, zero)); + default: //_MM_FROUND_CUR_DIRECTION + return (__m128){roundf(v_float[0]), roundf(v_float[1]), + roundf(v_float[2]), roundf(v_float[3])}; + } +#endif +} + +// Convert packed single-precision (32-bit) floating-point elements in a to +// packed 32-bit integers, and store the results in dst. +// +// FOR j := 0 to 1 +// i := 32*j +// dst[i+31:i] := Convert_FP32_To_Int32(a[i+31:i]) +// ENDFOR +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvt_ps2pi +FORCE_INLINE __m64 _mm_cvt_ps2pi(__m128 a) +{ +#if defined(__aarch64__) + return vreinterpret_m64_s32( + vget_low_s32(vcvtnq_s32_f32(vreinterpretq_f32_m128(a)))); +#else + return vreinterpret_m64_s32( + vcvt_s32_f32(vget_low_f32(vreinterpretq_f32_m128( + _mm_round_ps(a, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC))))); +#endif +} + +// Round the packed single-precision (32-bit) floating-point elements in a up to +// an integer value, and store the results as packed single-precision +// floating-point elements in dst. +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_ceil_ps +FORCE_INLINE __m128 _mm_ceil_ps(__m128 a) +{ + return _mm_round_ps(a, _MM_FROUND_TO_POS_INF | _MM_FROUND_NO_EXC); +} + +// Round the packed single-precision (32-bit) floating-point elements in a down +// to an integer value, and store the results as packed single-precision +// floating-point elements in dst. +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_floor_ps +FORCE_INLINE __m128 _mm_floor_ps(__m128 a) +{ + return _mm_round_ps(a, _MM_FROUND_TO_NEG_INF | _MM_FROUND_NO_EXC); +} + + +// Load 128-bits of integer data from unaligned memory into dst. This intrinsic +// may perform better than _mm_loadu_si128 when the data crosses a cache line +// boundary. +// +// dst[127:0] := MEM[mem_addr+127:mem_addr] +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_lddqu_si128 +#define _mm_lddqu_si128 _mm_loadu_si128 + +/* Miscellaneous Operations */ + +// Shifts the 8 signed 16-bit integers in a right by count bits while shifting +// in the sign bit. +// +// r0 := a0 >> count +// r1 := a1 >> count +// ... +// r7 := a7 >> count +// +// https://msdn.microsoft.com/en-us/library/3c9997dk(v%3dvs.90).aspx +FORCE_INLINE __m128i _mm_sra_epi16(__m128i a, __m128i count) +{ + int64_t c = (int64_t) vget_low_s64((int64x2_t) count); + if (c > 15) + return _mm_cmplt_epi16(a, _mm_setzero_si128()); + return vreinterpretq_m128i_s16(vshlq_s16((int16x8_t) a, vdupq_n_s16(-c))); +} + +// Shifts the 4 signed 32-bit integers in a right by count bits while shifting +// in the sign bit. +// +// r0 := a0 >> count +// r1 := a1 >> count +// r2 := a2 >> count +// r3 := a3 >> count +// +// https://msdn.microsoft.com/en-us/library/ce40009e(v%3dvs.100).aspx +FORCE_INLINE __m128i _mm_sra_epi32(__m128i a, __m128i count) +{ + int64_t c = (int64_t) vget_low_s64((int64x2_t) count); + if (c > 31) + return _mm_cmplt_epi32(a, _mm_setzero_si128()); + return vreinterpretq_m128i_s32(vshlq_s32((int32x4_t) a, vdupq_n_s32(-c))); +} + +// Packs the 16 signed 16-bit integers from a and b into 8-bit integers and +// saturates. +// https://msdn.microsoft.com/en-us/library/k4y4f7w5%28v=vs.90%29.aspx +FORCE_INLINE __m128i _mm_packs_epi16(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s8( + vcombine_s8(vqmovn_s16(vreinterpretq_s16_m128i(a)), + vqmovn_s16(vreinterpretq_s16_m128i(b)))); +} + +// Packs the 16 signed 16 - bit integers from a and b into 8 - bit unsigned +// integers and saturates. +// +// r0 := UnsignedSaturate(a0) +// r1 := UnsignedSaturate(a1) +// ... +// r7 := UnsignedSaturate(a7) +// r8 := UnsignedSaturate(b0) +// r9 := UnsignedSaturate(b1) +// ... +// r15 := UnsignedSaturate(b7) +// +// https://msdn.microsoft.com/en-us/library/07ad1wx4(v=vs.100).aspx +FORCE_INLINE __m128i _mm_packus_epi16(const __m128i a, const __m128i b) +{ + return vreinterpretq_m128i_u8( + vcombine_u8(vqmovun_s16(vreinterpretq_s16_m128i(a)), + vqmovun_s16(vreinterpretq_s16_m128i(b)))); +} + +// Packs the 8 signed 32-bit integers from a and b into signed 16-bit integers +// and saturates. +// +// r0 := SignedSaturate(a0) +// r1 := SignedSaturate(a1) +// r2 := SignedSaturate(a2) +// r3 := SignedSaturate(a3) +// r4 := SignedSaturate(b0) +// r5 := SignedSaturate(b1) +// r6 := SignedSaturate(b2) +// r7 := SignedSaturate(b3) +// +// https://msdn.microsoft.com/en-us/library/393t56f9%28v=vs.90%29.aspx +FORCE_INLINE __m128i _mm_packs_epi32(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s16( + vcombine_s16(vqmovn_s32(vreinterpretq_s32_m128i(a)), + vqmovn_s32(vreinterpretq_s32_m128i(b)))); +} + +// Packs the 8 unsigned 32-bit integers from a and b into unsigned 16-bit +// integers and saturates. +// +// r0 := UnsignedSaturate(a0) +// r1 := UnsignedSaturate(a1) +// r2 := UnsignedSaturate(a2) +// r3 := UnsignedSaturate(a3) +// r4 := UnsignedSaturate(b0) +// r5 := UnsignedSaturate(b1) +// r6 := UnsignedSaturate(b2) +// r7 := UnsignedSaturate(b3) +FORCE_INLINE __m128i _mm_packus_epi32(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_u16( + vcombine_u16(vqmovun_s32(vreinterpretq_s32_m128i(a)), + vqmovun_s32(vreinterpretq_s32_m128i(b)))); +} + +// Interleaves the lower 8 signed or unsigned 8-bit integers in a with the lower +// 8 signed or unsigned 8-bit integers in b. +// +// r0 := a0 +// r1 := b0 +// r2 := a1 +// r3 := b1 +// ... +// r14 := a7 +// r15 := b7 +// +// https://msdn.microsoft.com/en-us/library/xf7k860c%28v=vs.90%29.aspx +FORCE_INLINE __m128i _mm_unpacklo_epi8(__m128i a, __m128i b) +{ +#if defined(__aarch64__) + return vreinterpretq_m128i_s8( + vzip1q_s8(vreinterpretq_s8_m128i(a), vreinterpretq_s8_m128i(b))); +#else + int8x8_t a1 = vreinterpret_s8_s16(vget_low_s16(vreinterpretq_s16_m128i(a))); + int8x8_t b1 = vreinterpret_s8_s16(vget_low_s16(vreinterpretq_s16_m128i(b))); + int8x8x2_t result = vzip_s8(a1, b1); + return vreinterpretq_m128i_s8(vcombine_s8(result.val[0], result.val[1])); +#endif +} + +// Interleaves the lower 4 signed or unsigned 16-bit integers in a with the +// lower 4 signed or unsigned 16-bit integers in b. +// +// r0 := a0 +// r1 := b0 +// r2 := a1 +// r3 := b1 +// r4 := a2 +// r5 := b2 +// r6 := a3 +// r7 := b3 +// +// https://msdn.microsoft.com/en-us/library/btxb17bw%28v=vs.90%29.aspx +FORCE_INLINE __m128i _mm_unpacklo_epi16(__m128i a, __m128i b) +{ +#if defined(__aarch64__) + return vreinterpretq_m128i_s16( + vzip1q_s16(vreinterpretq_s16_m128i(a), vreinterpretq_s16_m128i(b))); +#else + int16x4_t a1 = vget_low_s16(vreinterpretq_s16_m128i(a)); + int16x4_t b1 = vget_low_s16(vreinterpretq_s16_m128i(b)); + int16x4x2_t result = vzip_s16(a1, b1); + return vreinterpretq_m128i_s16(vcombine_s16(result.val[0], result.val[1])); +#endif +} + +// Interleaves the lower 2 signed or unsigned 32 - bit integers in a with the +// lower 2 signed or unsigned 32 - bit integers in b. +// +// r0 := a0 +// r1 := b0 +// r2 := a1 +// r3 := b1 +// +// https://msdn.microsoft.com/en-us/library/x8atst9d(v=vs.100).aspx +FORCE_INLINE __m128i _mm_unpacklo_epi32(__m128i a, __m128i b) +{ +#if defined(__aarch64__) + return vreinterpretq_m128i_s32( + vzip1q_s32(vreinterpretq_s32_m128i(a), vreinterpretq_s32_m128i(b))); +#else + int32x2_t a1 = vget_low_s32(vreinterpretq_s32_m128i(a)); + int32x2_t b1 = vget_low_s32(vreinterpretq_s32_m128i(b)); + int32x2x2_t result = vzip_s32(a1, b1); + return vreinterpretq_m128i_s32(vcombine_s32(result.val[0], result.val[1])); +#endif +} + +FORCE_INLINE __m128i _mm_unpacklo_epi64(__m128i a, __m128i b) +{ + int64x1_t a_l = vget_low_s64(vreinterpretq_s64_m128i(a)); + int64x1_t b_l = vget_low_s64(vreinterpretq_s64_m128i(b)); + return vreinterpretq_m128i_s64(vcombine_s64(a_l, b_l)); +} + +// Selects and interleaves the lower two single-precision, floating-point values +// from a and b. +// +// r0 := a0 +// r1 := b0 +// r2 := a1 +// r3 := b1 +// +// https://msdn.microsoft.com/en-us/library/25st103b%28v=vs.90%29.aspx +FORCE_INLINE __m128 _mm_unpacklo_ps(__m128 a, __m128 b) +{ +#if defined(__aarch64__) + return vreinterpretq_m128_f32( + vzip1q_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b))); +#else + float32x2_t a1 = vget_low_f32(vreinterpretq_f32_m128(a)); + float32x2_t b1 = vget_low_f32(vreinterpretq_f32_m128(b)); + float32x2x2_t result = vzip_f32(a1, b1); + return vreinterpretq_m128_f32(vcombine_f32(result.val[0], result.val[1])); +#endif +} + +// Selects and interleaves the upper two single-precision, floating-point values +// from a and b. +// +// r0 := a2 +// r1 := b2 +// r2 := a3 +// r3 := b3 +// +// https://msdn.microsoft.com/en-us/library/skccxx7d%28v=vs.90%29.aspx +FORCE_INLINE __m128 _mm_unpackhi_ps(__m128 a, __m128 b) +{ +#if defined(__aarch64__) + return vreinterpretq_m128_f32( + vzip2q_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b))); +#else + float32x2_t a1 = vget_high_f32(vreinterpretq_f32_m128(a)); + float32x2_t b1 = vget_high_f32(vreinterpretq_f32_m128(b)); + float32x2x2_t result = vzip_f32(a1, b1); + return vreinterpretq_m128_f32(vcombine_f32(result.val[0], result.val[1])); +#endif +} + +// Interleaves the upper 8 signed or unsigned 8-bit integers in a with the upper +// 8 signed or unsigned 8-bit integers in b. +// +// r0 := a8 +// r1 := b8 +// r2 := a9 +// r3 := b9 +// ... +// r14 := a15 +// r15 := b15 +// +// https://msdn.microsoft.com/en-us/library/t5h7783k(v=vs.100).aspx +FORCE_INLINE __m128i _mm_unpackhi_epi8(__m128i a, __m128i b) +{ +#if defined(__aarch64__) + return vreinterpretq_m128i_s8( + vzip2q_s8(vreinterpretq_s8_m128i(a), vreinterpretq_s8_m128i(b))); +#else + int8x8_t a1 = + vreinterpret_s8_s16(vget_high_s16(vreinterpretq_s16_m128i(a))); + int8x8_t b1 = + vreinterpret_s8_s16(vget_high_s16(vreinterpretq_s16_m128i(b))); + int8x8x2_t result = vzip_s8(a1, b1); + return vreinterpretq_m128i_s8(vcombine_s8(result.val[0], result.val[1])); +#endif +} + +// Interleaves the upper 4 signed or unsigned 16-bit integers in a with the +// upper 4 signed or unsigned 16-bit integers in b. +// +// r0 := a4 +// r1 := b4 +// r2 := a5 +// r3 := b5 +// r4 := a6 +// r5 := b6 +// r6 := a7 +// r7 := b7 +// +// https://msdn.microsoft.com/en-us/library/03196cz7(v=vs.100).aspx +FORCE_INLINE __m128i _mm_unpackhi_epi16(__m128i a, __m128i b) +{ +#if defined(__aarch64__) + return vreinterpretq_m128i_s16( + vzip2q_s16(vreinterpretq_s16_m128i(a), vreinterpretq_s16_m128i(b))); +#else + int16x4_t a1 = vget_high_s16(vreinterpretq_s16_m128i(a)); + int16x4_t b1 = vget_high_s16(vreinterpretq_s16_m128i(b)); + int16x4x2_t result = vzip_s16(a1, b1); + return vreinterpretq_m128i_s16(vcombine_s16(result.val[0], result.val[1])); +#endif +} + +// Interleaves the upper 2 signed or unsigned 32-bit integers in a with the +// upper 2 signed or unsigned 32-bit integers in b. +// https://msdn.microsoft.com/en-us/library/65sa7cbs(v=vs.100).aspx +FORCE_INLINE __m128i _mm_unpackhi_epi32(__m128i a, __m128i b) +{ +#if defined(__aarch64__) + return vreinterpretq_m128i_s32( + vzip2q_s32(vreinterpretq_s32_m128i(a), vreinterpretq_s32_m128i(b))); +#else + int32x2_t a1 = vget_high_s32(vreinterpretq_s32_m128i(a)); + int32x2_t b1 = vget_high_s32(vreinterpretq_s32_m128i(b)); + int32x2x2_t result = vzip_s32(a1, b1); + return vreinterpretq_m128i_s32(vcombine_s32(result.val[0], result.val[1])); +#endif +} + +// Interleaves the upper signed or unsigned 64-bit integer in a with the +// upper signed or unsigned 64-bit integer in b. +// +// r0 := a1 +// r1 := b1 +FORCE_INLINE __m128i _mm_unpackhi_epi64(__m128i a, __m128i b) +{ + int64x1_t a_h = vget_high_s64(vreinterpretq_s64_m128i(a)); + int64x1_t b_h = vget_high_s64(vreinterpretq_s64_m128i(b)); + return vreinterpretq_m128i_s64(vcombine_s64(a_h, b_h)); +} + +// Horizontally compute the minimum amongst the packed unsigned 16-bit integers +// in a, store the minimum and index in dst, and zero the remaining bits in dst. +// +// index[2:0] := 0 +// min[15:0] := a[15:0] +// FOR j := 0 to 7 +// i := j*16 +// IF a[i+15:i] < min[15:0] +// index[2:0] := j +// min[15:0] := a[i+15:i] +// FI +// ENDFOR +// dst[15:0] := min[15:0] +// dst[18:16] := index[2:0] +// dst[127:19] := 0 +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_minpos_epu16 +FORCE_INLINE __m128i _mm_minpos_epu16(__m128i a) +{ + __m128i dst; + uint16_t min, idx = 0; + // Find the minimum value +#if defined(__aarch64__) + min = vminvq_u16(vreinterpretq_u16_m128i(a)); +#else + __m64 tmp; + tmp = vreinterpret_m64_u16( + vmin_u16(vget_low_u16(vreinterpretq_u16_m128i(a)), + vget_high_u16(vreinterpretq_u16_m128i(a)))); + tmp = vreinterpret_m64_u16( + vpmin_u16(vreinterpret_u16_m64(tmp), vreinterpret_u16_m64(tmp))); + tmp = vreinterpret_m64_u16( + vpmin_u16(vreinterpret_u16_m64(tmp), vreinterpret_u16_m64(tmp))); + min = vget_lane_u16(vreinterpret_u16_m64(tmp), 0); +#endif + // Get the index of the minimum value + int i; + for (i = 0; i < 8; i++) { + if (min == vgetq_lane_u16(vreinterpretq_u16_m128i(a), 0)) { + idx = (uint16_t) i; + break; + } + a = _mm_srli_si128(a, 2); + } + // Generate result + dst = _mm_setzero_si128(); + dst = vreinterpretq_m128i_u16( + vsetq_lane_u16(min, vreinterpretq_u16_m128i(dst), 0)); + dst = vreinterpretq_m128i_u16( + vsetq_lane_u16(idx, vreinterpretq_u16_m128i(dst), 1)); + return dst; +} + +// shift to right +// https://msdn.microsoft.com/en-us/library/bb514041(v=vs.120).aspx +// http://blog.csdn.net/hemmingway/article/details/44828303 +// Clang requires a macro here, as it is extremely picky about c being a +// literal. +#define _mm_alignr_epi8(a, b, c) \ + ((__m128i) vextq_s8((int8x16_t)(b), (int8x16_t)(a), (c))) + +// Compute the bitwise AND of 128 bits (representing integer data) in a and b, +// and set ZF to 1 if the result is zero, otherwise set ZF to 0. Compute the +// bitwise NOT of a and then AND with b, and set CF to 1 if the result is zero, +// otherwise set CF to 0. Return the CF value. +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_testc_si128 +FORCE_INLINE int _mm_testc_si128(__m128i a, __m128i b) +{ + int64x2_t s64 = + vandq_s64(vreinterpretq_s64_s32(vmvnq_s32(vreinterpretq_s32_m128i(a))), + vreinterpretq_s64_m128i(b)); + return !(vgetq_lane_s64(s64, 0) | vgetq_lane_s64(s64, 1)); +} + +// Compute the bitwise AND of 128 bits (representing integer data) in a and b, +// and set ZF to 1 if the result is zero, otherwise set ZF to 0. Compute the +// bitwise NOT of a and then AND with b, and set CF to 1 if the result is zero, +// otherwise set CF to 0. Return the ZF value. +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_testz_si128 +FORCE_INLINE int _mm_testz_si128(__m128i a, __m128i b) +{ + int64x2_t s64 = + vandq_s64(vreinterpretq_s64_m128i(a), vreinterpretq_s64_m128i(b)); + return !(vgetq_lane_s64(s64, 0) | vgetq_lane_s64(s64, 1)); +} + +// Extracts the selected signed or unsigned 8-bit integer from a and zero +// extends. +// FORCE_INLINE int _mm_extract_epi8(__m128i a, __constrange(0,16) int imm) +#define _mm_extract_epi8(a, imm) vgetq_lane_u8(vreinterpretq_u8_m128i(a), (imm)) + +// Inserts the least significant 8 bits of b into the selected 8-bit integer +// of a. +// FORCE_INLINE __m128i _mm_insert_epi8(__m128i a, int b, +// __constrange(0,16) int imm) +#define _mm_insert_epi8(a, b, imm) \ + __extension__({ \ + vreinterpretq_m128i_s8( \ + vsetq_lane_s8((b), vreinterpretq_s8_m128i(a), (imm))); \ + }) + +// Extracts the selected signed or unsigned 16-bit integer from a and zero +// extends. +// https://msdn.microsoft.com/en-us/library/6dceta0c(v=vs.100).aspx +// FORCE_INLINE int _mm_extract_epi16(__m128i a, __constrange(0,8) int imm) +#define _mm_extract_epi16(a, imm) \ + vgetq_lane_u16(vreinterpretq_u16_m128i(a), (imm)) + +// Inserts the least significant 16 bits of b into the selected 16-bit integer +// of a. +// https://msdn.microsoft.com/en-us/library/kaze8hz1%28v=vs.100%29.aspx +// FORCE_INLINE __m128i _mm_insert_epi16(__m128i a, int b, +// __constrange(0,8) int imm) +#define _mm_insert_epi16(a, b, imm) \ + __extension__({ \ + vreinterpretq_m128i_s16( \ + vsetq_lane_s16((b), vreinterpretq_s16_m128i(a), (imm))); \ + }) + +// Extracts the selected signed or unsigned 32-bit integer from a and zero +// extends. +// FORCE_INLINE int _mm_extract_epi32(__m128i a, __constrange(0,4) int imm) +#define _mm_extract_epi32(a, imm) \ + vgetq_lane_s32(vreinterpretq_s32_m128i(a), (imm)) + +// Extracts the selected single-precision (32-bit) floating-point from a. +// FORCE_INLINE int _mm_extract_ps(__m128 a, __constrange(0,4) int imm) +#define _mm_extract_ps(a, imm) vgetq_lane_s32(vreinterpretq_s32_m128(a), (imm)) + +// Inserts the least significant 32 bits of b into the selected 32-bit integer +// of a. +// FORCE_INLINE __m128i _mm_insert_epi32(__m128i a, int b, +// __constrange(0,4) int imm) +#define _mm_insert_epi32(a, b, imm) \ + __extension__({ \ + vreinterpretq_m128i_s32( \ + vsetq_lane_s32((b), vreinterpretq_s32_m128i(a), (imm))); \ + }) + +// Extracts the selected signed or unsigned 64-bit integer from a and zero +// extends. +// FORCE_INLINE __int64 _mm_extract_epi64(__m128i a, __constrange(0,2) int imm) +#define _mm_extract_epi64(a, imm) \ + vgetq_lane_s64(vreinterpretq_s64_m128i(a), (imm)) + +// Inserts the least significant 64 bits of b into the selected 64-bit integer +// of a. +// FORCE_INLINE __m128i _mm_insert_epi64(__m128i a, __int64 b, +// __constrange(0,2) int imm) +#define _mm_insert_epi64(a, b, imm) \ + __extension__({ \ + vreinterpretq_m128i_s64( \ + vsetq_lane_s64((b), vreinterpretq_s64_m128i(a), (imm))); \ + }) + +// Count the number of bits set to 1 in unsigned 32-bit integer a, and +// return that count in dst. +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_popcnt_u32 +FORCE_INLINE int _mm_popcnt_u32(unsigned int a) +{ +#if defined(__aarch64__) +#if __has_builtin(__builtin_popcount) + return __builtin_popcount(a); +#else + return (int) vaddlv_u8(vcnt_u8(vcreate_u8((uint64_t) a))); +#endif +#else + uint32_t count = 0; + uint8x8_t input_val, count8x8_val; + uint16x4_t count16x4_val; + uint32x2_t count32x2_val; + + input_val = vld1_u8((uint8_t *) &a); + count8x8_val = vcnt_u8(input_val); + count16x4_val = vpaddl_u8(count8x8_val); + count32x2_val = vpaddl_u16(count16x4_val); + + vst1_u32(&count, count32x2_val); + return count; +#endif +} + +// Count the number of bits set to 1 in unsigned 64-bit integer a, and +// return that count in dst. +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_popcnt_u64 +FORCE_INLINE int64_t _mm_popcnt_u64(uint64_t a) +{ +#if defined(__aarch64__) +#if __has_builtin(__builtin_popcountll) + return __builtin_popcountll(a); +#else + return (int64_t) vaddlv_u8(vcnt_u8(vcreate_u8(a))); +#endif +#else + uint64_t count = 0; + uint8x8_t input_val, count8x8_val; + uint16x4_t count16x4_val; + uint32x2_t count32x2_val; + uint64x1_t count64x1_val; + + input_val = vld1_u8((uint8_t *) &a); + count8x8_val = vcnt_u8(input_val); + count16x4_val = vpaddl_u8(count8x8_val); + count32x2_val = vpaddl_u16(count16x4_val); + count64x1_val = vpaddl_u32(count32x2_val); + vst1_u64(&count, count64x1_val); + return count; +#endif +} + +// Macro: Transpose the 4x4 matrix formed by the 4 rows of single-precision +// (32-bit) floating-point elements in row0, row1, row2, and row3, and store the +// transposed matrix in these vectors (row0 now contains column 0, etc.). +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=MM_TRANSPOSE4_PS +#define _MM_TRANSPOSE4_PS(row0, row1, row2, row3) \ + do { \ + float32x4x2_t ROW01 = vtrnq_f32(row0, row1); \ + float32x4x2_t ROW23 = vtrnq_f32(row2, row3); \ + row0 = vcombine_f32(vget_low_f32(ROW01.val[0]), \ + vget_low_f32(ROW23.val[0])); \ + row1 = vcombine_f32(vget_low_f32(ROW01.val[1]), \ + vget_low_f32(ROW23.val[1])); \ + row2 = vcombine_f32(vget_high_f32(ROW01.val[0]), \ + vget_high_f32(ROW23.val[0])); \ + row3 = vcombine_f32(vget_high_f32(ROW01.val[1]), \ + vget_high_f32(ROW23.val[1])); \ + } while (0) + +/* Crypto Extensions */ + +#if defined(__ARM_FEATURE_CRYPTO) +// Wraps vmull_p64 +FORCE_INLINE uint64x2_t _sse2neon_vmull_p64(uint64x1_t _a, uint64x1_t _b) +{ + poly64_t a = vget_lane_p64(vreinterpret_p64_u64(_a), 0); + poly64_t b = vget_lane_p64(vreinterpret_p64_u64(_b), 0); + return vreinterpretq_u64_p128(vmull_p64(a, b)); +} +#else // ARMv7 polyfill +// ARMv7/some A64 lacks vmull_p64, but it has vmull_p8. +// +// vmull_p8 calculates 8 8-bit->16-bit polynomial multiplies, but we need a +// 64-bit->128-bit polynomial multiply. +// +// It needs some work and is somewhat slow, but it is still faster than all +// known scalar methods. +// +// Algorithm adapted to C from +// https://www.workofard.com/2017/07/ghash-for-low-end-cores/, which is adapted +// from "Fast Software Polynomial Multiplication on ARM Processors Using the +// NEON Engine" by Danilo Camara, Conrado Gouvea, Julio Lopez and Ricardo Dahab +// (https://hal.inria.fr/hal-01506572) +static uint64x2_t _sse2neon_vmull_p64(uint64x1_t _a, uint64x1_t _b) +{ + poly8x8_t a = vreinterpret_p8_u64(_a); + poly8x8_t b = vreinterpret_p8_u64(_b); + + // Masks + uint8x16_t k48_32 = vcombine_u8(vcreate_u8(0x0000ffffffffffff), + vcreate_u8(0x00000000ffffffff)); + uint8x16_t k16_00 = vcombine_u8(vcreate_u8(0x000000000000ffff), + vcreate_u8(0x0000000000000000)); + + // Do the multiplies, rotating with vext to get all combinations + uint8x16_t d = vreinterpretq_u8_p16(vmull_p8(a, b)); // D = A0 * B0 + uint8x16_t e = + vreinterpretq_u8_p16(vmull_p8(a, vext_p8(b, b, 1))); // E = A0 * B1 + uint8x16_t f = + vreinterpretq_u8_p16(vmull_p8(vext_p8(a, a, 1), b)); // F = A1 * B0 + uint8x16_t g = + vreinterpretq_u8_p16(vmull_p8(a, vext_p8(b, b, 2))); // G = A0 * B2 + uint8x16_t h = + vreinterpretq_u8_p16(vmull_p8(vext_p8(a, a, 2), b)); // H = A2 * B0 + uint8x16_t i = + vreinterpretq_u8_p16(vmull_p8(a, vext_p8(b, b, 3))); // I = A0 * B3 + uint8x16_t j = + vreinterpretq_u8_p16(vmull_p8(vext_p8(a, a, 3), b)); // J = A3 * B0 + uint8x16_t k = + vreinterpretq_u8_p16(vmull_p8(a, vext_p8(b, b, 4))); // L = A0 * B4 + + // Add cross products + uint8x16_t l = veorq_u8(e, f); // L = E + F + uint8x16_t m = veorq_u8(g, h); // M = G + H + uint8x16_t n = veorq_u8(i, j); // N = I + J + + // Interleave. Using vzip1 and vzip2 prevents Clang from emitting TBL + // instructions. +#if defined(__aarch64__) + uint8x16_t lm_p0 = vreinterpretq_u8_u64( + vzip1q_u64(vreinterpretq_u64_u8(l), vreinterpretq_u64_u8(m))); + uint8x16_t lm_p1 = vreinterpretq_u8_u64( + vzip2q_u64(vreinterpretq_u64_u8(l), vreinterpretq_u64_u8(m))); + uint8x16_t nk_p0 = vreinterpretq_u8_u64( + vzip1q_u64(vreinterpretq_u64_u8(n), vreinterpretq_u64_u8(k))); + uint8x16_t nk_p1 = vreinterpretq_u8_u64( + vzip2q_u64(vreinterpretq_u64_u8(n), vreinterpretq_u64_u8(k))); +#else + uint8x16_t lm_p0 = vcombine_u8(vget_low_u8(l), vget_low_u8(m)); + uint8x16_t lm_p1 = vcombine_u8(vget_high_u8(l), vget_high_u8(m)); + uint8x16_t nk_p0 = vcombine_u8(vget_low_u8(n), vget_low_u8(k)); + uint8x16_t nk_p1 = vcombine_u8(vget_high_u8(n), vget_high_u8(k)); +#endif + // t0 = (L) (P0 + P1) << 8 + // t1 = (M) (P2 + P3) << 16 + uint8x16_t t0t1_tmp = veorq_u8(lm_p0, lm_p1); + uint8x16_t t0t1_h = vandq_u8(lm_p1, k48_32); + uint8x16_t t0t1_l = veorq_u8(t0t1_tmp, t0t1_h); + + // t2 = (N) (P4 + P5) << 24 + // t3 = (K) (P6 + P7) << 32 + uint8x16_t t2t3_tmp = veorq_u8(nk_p0, nk_p1); + uint8x16_t t2t3_h = vandq_u8(nk_p1, k16_00); + uint8x16_t t2t3_l = veorq_u8(t2t3_tmp, t2t3_h); + + // De-interleave +#if defined(__aarch64__) + uint8x16_t t0 = vreinterpretq_u8_u64( + vuzp1q_u64(vreinterpretq_u64_u8(t0t1_l), vreinterpretq_u64_u8(t0t1_h))); + uint8x16_t t1 = vreinterpretq_u8_u64( + vuzp2q_u64(vreinterpretq_u64_u8(t0t1_l), vreinterpretq_u64_u8(t0t1_h))); + uint8x16_t t2 = vreinterpretq_u8_u64( + vuzp1q_u64(vreinterpretq_u64_u8(t2t3_l), vreinterpretq_u64_u8(t2t3_h))); + uint8x16_t t3 = vreinterpretq_u8_u64( + vuzp2q_u64(vreinterpretq_u64_u8(t2t3_l), vreinterpretq_u64_u8(t2t3_h))); +#else + uint8x16_t t1 = vcombine_u8(vget_high_u8(t0t1_l), vget_high_u8(t0t1_h)); + uint8x16_t t0 = vcombine_u8(vget_low_u8(t0t1_l), vget_low_u8(t0t1_h)); + uint8x16_t t3 = vcombine_u8(vget_high_u8(t2t3_l), vget_high_u8(t2t3_h)); + uint8x16_t t2 = vcombine_u8(vget_low_u8(t2t3_l), vget_low_u8(t2t3_h)); +#endif + // Shift the cross products + uint8x16_t t0_shift = vextq_u8(t0, t0, 15); // t0 << 8 + uint8x16_t t1_shift = vextq_u8(t1, t1, 14); // t1 << 16 + uint8x16_t t2_shift = vextq_u8(t2, t2, 13); // t2 << 24 + uint8x16_t t3_shift = vextq_u8(t3, t3, 12); // t3 << 32 + + // Accumulate the products + uint8x16_t cross1 = veorq_u8(t0_shift, t1_shift); + uint8x16_t cross2 = veorq_u8(t2_shift, t3_shift); + uint8x16_t mix = veorq_u8(d, cross1); + uint8x16_t r = veorq_u8(mix, cross2); + return vreinterpretq_u64_u8(r); +} +#endif // ARMv7 polyfill + +FORCE_INLINE __m128i _mm_clmulepi64_si128(__m128i _a, __m128i _b, const int imm) +{ + uint64x2_t a = vreinterpretq_u64_m128i(_a); + uint64x2_t b = vreinterpretq_u64_m128i(_b); + switch (imm & 0x11) { + case 0x00: + return vreinterpretq_m128i_u64( + _sse2neon_vmull_p64(vget_low_u64(a), vget_low_u64(b))); + case 0x01: + return vreinterpretq_m128i_u64( + _sse2neon_vmull_p64(vget_high_u64(a), vget_low_u64(b))); + case 0x10: + return vreinterpretq_m128i_u64( + _sse2neon_vmull_p64(vget_low_u64(a), vget_high_u64(b))); + case 0x11: + return vreinterpretq_m128i_u64( + _sse2neon_vmull_p64(vget_high_u64(a), vget_high_u64(b))); + default: + abort(); + } +} + +#if !defined(__ARM_FEATURE_CRYPTO) +/* clang-format off */ +#define SSE2NEON_AES_DATA(w) \ + { \ + w(0x63), w(0x7c), w(0x77), w(0x7b), w(0xf2), w(0x6b), w(0x6f), \ + w(0xc5), w(0x30), w(0x01), w(0x67), w(0x2b), w(0xfe), w(0xd7), \ + w(0xab), w(0x76), w(0xca), w(0x82), w(0xc9), w(0x7d), w(0xfa), \ + w(0x59), w(0x47), w(0xf0), w(0xad), w(0xd4), w(0xa2), w(0xaf), \ + w(0x9c), w(0xa4), w(0x72), w(0xc0), w(0xb7), w(0xfd), w(0x93), \ + w(0x26), w(0x36), w(0x3f), w(0xf7), w(0xcc), w(0x34), w(0xa5), \ + w(0xe5), w(0xf1), w(0x71), w(0xd8), w(0x31), w(0x15), w(0x04), \ + w(0xc7), w(0x23), w(0xc3), w(0x18), w(0x96), w(0x05), w(0x9a), \ + w(0x07), w(0x12), w(0x80), w(0xe2), w(0xeb), w(0x27), w(0xb2), \ + w(0x75), w(0x09), w(0x83), w(0x2c), w(0x1a), w(0x1b), w(0x6e), \ + w(0x5a), w(0xa0), w(0x52), w(0x3b), w(0xd6), w(0xb3), w(0x29), \ + w(0xe3), w(0x2f), w(0x84), w(0x53), w(0xd1), w(0x00), w(0xed), \ + w(0x20), w(0xfc), w(0xb1), w(0x5b), w(0x6a), w(0xcb), w(0xbe), \ + w(0x39), w(0x4a), w(0x4c), w(0x58), w(0xcf), w(0xd0), w(0xef), \ + w(0xaa), w(0xfb), w(0x43), w(0x4d), w(0x33), w(0x85), w(0x45), \ + w(0xf9), w(0x02), w(0x7f), w(0x50), w(0x3c), w(0x9f), w(0xa8), \ + w(0x51), w(0xa3), w(0x40), w(0x8f), w(0x92), w(0x9d), w(0x38), \ + w(0xf5), w(0xbc), w(0xb6), w(0xda), w(0x21), w(0x10), w(0xff), \ + w(0xf3), w(0xd2), w(0xcd), w(0x0c), w(0x13), w(0xec), w(0x5f), \ + w(0x97), w(0x44), w(0x17), w(0xc4), w(0xa7), w(0x7e), w(0x3d), \ + w(0x64), w(0x5d), w(0x19), w(0x73), w(0x60), w(0x81), w(0x4f), \ + w(0xdc), w(0x22), w(0x2a), w(0x90), w(0x88), w(0x46), w(0xee), \ + w(0xb8), w(0x14), w(0xde), w(0x5e), w(0x0b), w(0xdb), w(0xe0), \ + w(0x32), w(0x3a), w(0x0a), w(0x49), w(0x06), w(0x24), w(0x5c), \ + w(0xc2), w(0xd3), w(0xac), w(0x62), w(0x91), w(0x95), w(0xe4), \ + w(0x79), w(0xe7), w(0xc8), w(0x37), w(0x6d), w(0x8d), w(0xd5), \ + w(0x4e), w(0xa9), w(0x6c), w(0x56), w(0xf4), w(0xea), w(0x65), \ + w(0x7a), w(0xae), w(0x08), w(0xba), w(0x78), w(0x25), w(0x2e), \ + w(0x1c), w(0xa6), w(0xb4), w(0xc6), w(0xe8), w(0xdd), w(0x74), \ + w(0x1f), w(0x4b), w(0xbd), w(0x8b), w(0x8a), w(0x70), w(0x3e), \ + w(0xb5), w(0x66), w(0x48), w(0x03), w(0xf6), w(0x0e), w(0x61), \ + w(0x35), w(0x57), w(0xb9), w(0x86), w(0xc1), w(0x1d), w(0x9e), \ + w(0xe1), w(0xf8), w(0x98), w(0x11), w(0x69), w(0xd9), w(0x8e), \ + w(0x94), w(0x9b), w(0x1e), w(0x87), w(0xe9), w(0xce), w(0x55), \ + w(0x28), w(0xdf), w(0x8c), w(0xa1), w(0x89), w(0x0d), w(0xbf), \ + w(0xe6), w(0x42), w(0x68), w(0x41), w(0x99), w(0x2d), w(0x0f), \ + w(0xb0), w(0x54), w(0xbb), w(0x16) \ + } +/* clang-format on */ + +/* X Macro trick. See https://en.wikipedia.org/wiki/X_Macro */ +#define SSE2NEON_AES_H0(x) (x) +static const uint8_t SSE2NEON_sbox[256] = SSE2NEON_AES_DATA(SSE2NEON_AES_H0); +#undef SSE2NEON_AES_H0 + +// In the absence of crypto extensions, implement aesenc using regular neon +// intrinsics instead. See: +// https://www.workofard.com/2017/01/accelerated-aes-for-the-arm64-linux-kernel/ +// https://www.workofard.com/2017/07/ghash-for-low-end-cores/ and +// https://github.com/ColinIanKing/linux-next-mirror/blob/b5f466091e130caaf0735976648f72bd5e09aa84/crypto/aegis128-neon-inner.c#L52 +// for more information Reproduced with permission of the author. +FORCE_INLINE __m128i _mm_aesenc_si128(__m128i EncBlock, __m128i RoundKey) +{ +#if defined(__aarch64__) + static const uint8_t shift_rows[] = {0x0, 0x5, 0xa, 0xf, 0x4, 0x9, + 0xe, 0x3, 0x8, 0xd, 0x2, 0x7, + 0xc, 0x1, 0x6, 0xb}; + static const uint8_t ror32by8[] = {0x1, 0x2, 0x3, 0x0, 0x5, 0x6, 0x7, 0x4, + 0x9, 0xa, 0xb, 0x8, 0xd, 0xe, 0xf, 0xc}; + + uint8x16_t v; + uint8x16_t w = vreinterpretq_u8_m128i(EncBlock); + + // shift rows + w = vqtbl1q_u8(w, vld1q_u8(shift_rows)); + + // sub bytes + v = vqtbl4q_u8(vld1q_u8_x4(SSE2NEON_sbox), w); + v = vqtbx4q_u8(v, vld1q_u8_x4(SSE2NEON_sbox + 0x40), w - 0x40); + v = vqtbx4q_u8(v, vld1q_u8_x4(SSE2NEON_sbox + 0x80), w - 0x80); + v = vqtbx4q_u8(v, vld1q_u8_x4(SSE2NEON_sbox + 0xc0), w - 0xc0); + + // mix columns + w = (v << 1) ^ (uint8x16_t)(((int8x16_t) v >> 7) & 0x1b); + w ^= (uint8x16_t) vrev32q_u16((uint16x8_t) v); + w ^= vqtbl1q_u8(v ^ w, vld1q_u8(ror32by8)); + + // add round key + return vreinterpretq_m128i_u8(w) ^ RoundKey; + +#else /* ARMv7-A NEON implementation */ +#define SSE2NEON_AES_B2W(b0, b1, b2, b3) \ + (((uint32_t)(b3) << 24) | ((uint32_t)(b2) << 16) | ((uint32_t)(b1) << 8) | \ + (b0)) +#define SSE2NEON_AES_F2(x) ((x << 1) ^ (((x >> 7) & 1) * 0x011b /* WPOLY */)) +#define SSE2NEON_AES_F3(x) (SSE2NEON_AES_F2(x) ^ x) +#define SSE2NEON_AES_U0(p) \ + SSE2NEON_AES_B2W(SSE2NEON_AES_F2(p), p, p, SSE2NEON_AES_F3(p)) +#define SSE2NEON_AES_U1(p) \ + SSE2NEON_AES_B2W(SSE2NEON_AES_F3(p), SSE2NEON_AES_F2(p), p, p) +#define SSE2NEON_AES_U2(p) \ + SSE2NEON_AES_B2W(p, SSE2NEON_AES_F3(p), SSE2NEON_AES_F2(p), p) +#define SSE2NEON_AES_U3(p) \ + SSE2NEON_AES_B2W(p, p, SSE2NEON_AES_F3(p), SSE2NEON_AES_F2(p)) + static const uint32_t ALIGN_STRUCT(16) aes_table[4][256] = { + SSE2NEON_AES_DATA(SSE2NEON_AES_U0), + SSE2NEON_AES_DATA(SSE2NEON_AES_U1), + SSE2NEON_AES_DATA(SSE2NEON_AES_U2), + SSE2NEON_AES_DATA(SSE2NEON_AES_U3), + }; +#undef SSE2NEON_AES_B2W +#undef SSE2NEON_AES_F2 +#undef SSE2NEON_AES_F3 +#undef SSE2NEON_AES_U0 +#undef SSE2NEON_AES_U1 +#undef SSE2NEON_AES_U2 +#undef SSE2NEON_AES_U3 + + uint32_t x0 = _mm_cvtsi128_si32(EncBlock); + uint32_t x1 = _mm_cvtsi128_si32(_mm_shuffle_epi32(EncBlock, 0x55)); + uint32_t x2 = _mm_cvtsi128_si32(_mm_shuffle_epi32(EncBlock, 0xAA)); + uint32_t x3 = _mm_cvtsi128_si32(_mm_shuffle_epi32(EncBlock, 0xFF)); + + __m128i out = _mm_set_epi32( + (aes_table[0][x3 & 0xff] ^ aes_table[1][(x0 >> 8) & 0xff] ^ + aes_table[2][(x1 >> 16) & 0xff] ^ aes_table[3][x2 >> 24]), + (aes_table[0][x2 & 0xff] ^ aes_table[1][(x3 >> 8) & 0xff] ^ + aes_table[2][(x0 >> 16) & 0xff] ^ aes_table[3][x1 >> 24]), + (aes_table[0][x1 & 0xff] ^ aes_table[1][(x2 >> 8) & 0xff] ^ + aes_table[2][(x3 >> 16) & 0xff] ^ aes_table[3][x0 >> 24]), + (aes_table[0][x0 & 0xff] ^ aes_table[1][(x1 >> 8) & 0xff] ^ + aes_table[2][(x2 >> 16) & 0xff] ^ aes_table[3][x3 >> 24])); + + return _mm_xor_si128(out, RoundKey); +#endif +} + +FORCE_INLINE __m128i _mm_aesenclast_si128(__m128i a, __m128i RoundKey) +{ + /* FIXME: optimized for NEON */ + uint8_t v[4][4] = { + [0] = {SSE2NEON_sbox[vreinterpretq_nth_u8_m128i(a, 0)], + SSE2NEON_sbox[vreinterpretq_nth_u8_m128i(a, 5)], + SSE2NEON_sbox[vreinterpretq_nth_u8_m128i(a, 10)], + SSE2NEON_sbox[vreinterpretq_nth_u8_m128i(a, 15)]}, + [1] = {SSE2NEON_sbox[vreinterpretq_nth_u8_m128i(a, 4)], + SSE2NEON_sbox[vreinterpretq_nth_u8_m128i(a, 9)], + SSE2NEON_sbox[vreinterpretq_nth_u8_m128i(a, 14)], + SSE2NEON_sbox[vreinterpretq_nth_u8_m128i(a, 3)]}, + [2] = {SSE2NEON_sbox[vreinterpretq_nth_u8_m128i(a, 8)], + SSE2NEON_sbox[vreinterpretq_nth_u8_m128i(a, 13)], + SSE2NEON_sbox[vreinterpretq_nth_u8_m128i(a, 2)], + SSE2NEON_sbox[vreinterpretq_nth_u8_m128i(a, 7)]}, + [3] = {SSE2NEON_sbox[vreinterpretq_nth_u8_m128i(a, 12)], + SSE2NEON_sbox[vreinterpretq_nth_u8_m128i(a, 1)], + SSE2NEON_sbox[vreinterpretq_nth_u8_m128i(a, 6)], + SSE2NEON_sbox[vreinterpretq_nth_u8_m128i(a, 11)]}, + }; + for (int i = 0; i < 16; i++) + vreinterpretq_nth_u8_m128i(a, i) = + v[i / 4][i % 4] ^ vreinterpretq_nth_u8_m128i(RoundKey, i); + return a; +} + +// Emits the Advanced Encryption Standard (AES) instruction aeskeygenassist. +// This instruction generates a round key for AES encryption. See +// https://kazakov.life/2017/11/01/cryptocurrency-mining-on-ios-devices/ +// for details. +// +// https://msdn.microsoft.com/en-us/library/cc714138(v=vs.120).aspx +FORCE_INLINE __m128i _mm_aeskeygenassist_si128(__m128i key, const int rcon) +{ + uint32_t X1 = _mm_cvtsi128_si32(_mm_shuffle_epi32(key, 0x55)); + uint32_t X3 = _mm_cvtsi128_si32(_mm_shuffle_epi32(key, 0xFF)); + for (int i = 0; i < 4; ++i) { + ((uint8_t *) &X1)[i] = SSE2NEON_sbox[((uint8_t *) &X1)[i]]; + ((uint8_t *) &X3)[i] = SSE2NEON_sbox[((uint8_t *) &X3)[i]]; + } + return _mm_set_epi32(((X3 >> 8) | (X3 << 24)) ^ rcon, X3, + ((X1 >> 8) | (X1 << 24)) ^ rcon, X1); +} +#undef SSE2NEON_AES_DATA + +#else /* __ARM_FEATURE_CRYPTO */ +// Implements equivalent of 'aesenc' by combining AESE (with an empty key) and +// AESMC and then manually applying the real key as an xor operation. This +// unfortunately means an additional xor op; the compiler should be able to +// optimize this away for repeated calls however. See +// https://blog.michaelbrase.com/2018/05/08/emulating-x86-aes-intrinsics-on-armv8-a +// for more details. +FORCE_INLINE __m128i _mm_aesenc_si128(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_u8( + vaesmcq_u8(vaeseq_u8(vreinterpretq_u8_m128i(a), vdupq_n_u8(0))) ^ + vreinterpretq_u8_m128i(b)); +} + +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_aesenclast_si128 +FORCE_INLINE __m128i _mm_aesenclast_si128(__m128i a, __m128i RoundKey) +{ + return _mm_xor_si128(vreinterpretq_m128i_u8(vaeseq_u8( + vreinterpretq_u8_m128i(a), vdupq_n_u8(0))), + RoundKey); +} + +FORCE_INLINE __m128i _mm_aeskeygenassist_si128(__m128i a, const int rcon) +{ + // AESE does ShiftRows and SubBytes on A + uint8x16_t u8 = vaeseq_u8(vreinterpretq_u8_m128i(a), vdupq_n_u8(0)); + + uint8x16_t dest = { + // Undo ShiftRows step from AESE and extract X1 and X3 + u8[0x4], u8[0x1], u8[0xE], u8[0xB], // SubBytes(X1) + u8[0x1], u8[0xE], u8[0xB], u8[0x4], // ROT(SubBytes(X1)) + u8[0xC], u8[0x9], u8[0x6], u8[0x3], // SubBytes(X3) + u8[0x9], u8[0x6], u8[0x3], u8[0xC], // ROT(SubBytes(X3)) + }; + uint32x4_t r = {0, (unsigned) rcon, 0, (unsigned) rcon}; + return vreinterpretq_m128i_u8(dest) ^ vreinterpretq_m128i_u32(r); +} +#endif + +/* Streaming Extensions */ + +// Guarantees that every preceding store is globally visible before any +// subsequent store. +// https://msdn.microsoft.com/en-us/library/5h2w73d1%28v=vs.90%29.aspx +FORCE_INLINE void _mm_sfence(void) +{ + __sync_synchronize(); +} + +// Store 128-bits (composed of 4 packed single-precision (32-bit) floating- +// point elements) from a into memory using a non-temporal memory hint. +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_stream_ps +FORCE_INLINE void _mm_stream_ps(float *p, __m128 a) +{ +#if __has_builtin(__builtin_nontemporal_store) + __builtin_nontemporal_store(a, (float32x4_t *) p); +#else + vst1q_f32(p, vreinterpretq_f32_m128(a)); +#endif +} + +// Stores the data in a to the address p without polluting the caches. If the +// cache line containing address p is already in the cache, the cache will be +// updated. +// https://msdn.microsoft.com/en-us/library/ba08y07y%28v=vs.90%29.aspx +FORCE_INLINE void _mm_stream_si128(__m128i *p, __m128i a) +{ +#if __has_builtin(__builtin_nontemporal_store) + __builtin_nontemporal_store(a, p); +#else + vst1q_s64((int64_t *) p, vreinterpretq_s64_m128i(a)); +#endif +} + +// Load 128-bits of integer data from memory into dst using a non-temporal +// memory hint. mem_addr must be aligned on a 16-byte boundary or a +// general-protection exception may be generated. +// +// dst[127:0] := MEM[mem_addr+127:mem_addr] +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_stream_load_si128 +FORCE_INLINE __m128i _mm_stream_load_si128(__m128i *p) +{ +#if __has_builtin(__builtin_nontemporal_store) + return __builtin_nontemporal_load(p); +#else + return vreinterpretq_m128i_s64(vld1q_s64((int64_t *) p)); +#endif +} + +// Cache line containing p is flushed and invalidated from all caches in the +// coherency domain. : +// https://msdn.microsoft.com/en-us/library/ba08y07y(v=vs.100).aspx +FORCE_INLINE void _mm_clflush(void const *p) +{ + (void) p; + // no corollary for Neon? +} + +// Allocate aligned blocks of memory. +// https://software.intel.com/en-us/ +// cpp-compiler-developer-guide-and-reference-allocating-and-freeing-aligned-memory-blocks +FORCE_INLINE void *_mm_malloc(size_t size, size_t align) +{ + void *ptr; + if (align == 1) + return malloc(size); + if (align == 2 || (sizeof(void *) == 8 && align == 4)) + align = sizeof(void *); + if (!posix_memalign(&ptr, align, size)) + return ptr; + return NULL; +} + +FORCE_INLINE void _mm_free(void *addr) +{ + free(addr); +} + +// Starting with the initial value in crc, accumulates a CRC32 value for +// unsigned 8-bit integer v. +// https://msdn.microsoft.com/en-us/library/bb514036(v=vs.100) +FORCE_INLINE uint32_t _mm_crc32_u8(uint32_t crc, uint8_t v) +{ +#if defined(__aarch64__) && defined(__ARM_FEATURE_CRC32) + __asm__ __volatile__("crc32cb %w[c], %w[c], %w[v]\n\t" + : [c] "+r"(crc) + : [v] "r"(v)); +#else + crc ^= v; + for (int bit = 0; bit < 8; bit++) { + if (crc & 1) + crc = (crc >> 1) ^ UINT32_C(0x82f63b78); + else + crc = (crc >> 1); + } +#endif + return crc; +} + +// Starting with the initial value in crc, accumulates a CRC32 value for +// unsigned 16-bit integer v. +// https://msdn.microsoft.com/en-us/library/bb531411(v=vs.100) +FORCE_INLINE uint32_t _mm_crc32_u16(uint32_t crc, uint16_t v) +{ +#if defined(__aarch64__) && defined(__ARM_FEATURE_CRC32) + __asm__ __volatile__("crc32ch %w[c], %w[c], %w[v]\n\t" + : [c] "+r"(crc) + : [v] "r"(v)); +#else + crc = _mm_crc32_u8(crc, v & 0xff); + crc = _mm_crc32_u8(crc, (v >> 8) & 0xff); +#endif + return crc; +} + +// Starting with the initial value in crc, accumulates a CRC32 value for +// unsigned 32-bit integer v. +// https://msdn.microsoft.com/en-us/library/bb531394(v=vs.100) +FORCE_INLINE uint32_t _mm_crc32_u32(uint32_t crc, uint32_t v) +{ +#if defined(__aarch64__) && defined(__ARM_FEATURE_CRC32) + __asm__ __volatile__("crc32cw %w[c], %w[c], %w[v]\n\t" + : [c] "+r"(crc) + : [v] "r"(v)); +#else + crc = _mm_crc32_u16(crc, v & 0xffff); + crc = _mm_crc32_u16(crc, (v >> 16) & 0xffff); +#endif + return crc; +} + +// Starting with the initial value in crc, accumulates a CRC32 value for +// unsigned 64-bit integer v. +// https://msdn.microsoft.com/en-us/library/bb514033(v=vs.100) +FORCE_INLINE uint64_t _mm_crc32_u64(uint64_t crc, uint64_t v) +{ +#if defined(__aarch64__) && defined(__ARM_FEATURE_CRC32) + __asm__ __volatile__("crc32cx %w[c], %w[c], %x[v]\n\t" + : [c] "+r"(crc) + : [v] "r"(v)); +#else + crc = _mm_crc32_u32((uint32_t)(crc), v & 0xffffffff); + crc = _mm_crc32_u32((uint32_t)(crc), (v >> 32) & 0xffffffff); +#endif + return crc; +} + +#if defined(__GNUC__) || defined(__clang__) +#pragma pop_macro("ALIGN_STRUCT") +#pragma pop_macro("FORCE_INLINE") +#endif + +#if defined(__GNUC__) +#pragma GCC pop_options +#endif + +#endif diff --git a/EXE version/main/libFLAC-8.dll b/EXE version/main/libFLAC-8.dll new file mode 100644 index 00000000..71f2e19d Binary files /dev/null and b/EXE version/main/libFLAC-8.dll differ diff --git a/EXE version/main/libcrypto-1_1.dll b/EXE version/main/libcrypto-1_1.dll new file mode 100644 index 00000000..05522c76 Binary files /dev/null and b/EXE version/main/libcrypto-1_1.dll differ diff --git a/EXE version/main/libffi-7.dll b/EXE version/main/libffi-7.dll new file mode 100644 index 00000000..8fd2e5e0 Binary files /dev/null and b/EXE version/main/libffi-7.dll differ diff --git a/EXE version/main/libfreetype-6.dll b/EXE version/main/libfreetype-6.dll new file mode 100644 index 00000000..16ef7771 Binary files /dev/null and b/EXE version/main/libfreetype-6.dll differ diff --git a/EXE version/main/libjpeg-9.dll b/EXE version/main/libjpeg-9.dll new file mode 100644 index 00000000..9a05528e Binary files /dev/null and b/EXE version/main/libjpeg-9.dll differ diff --git a/EXE version/main/libmodplug-1.dll b/EXE version/main/libmodplug-1.dll new file mode 100644 index 00000000..7c051267 Binary files /dev/null and b/EXE version/main/libmodplug-1.dll differ diff --git a/EXE version/main/libmpg123-0.dll b/EXE version/main/libmpg123-0.dll new file mode 100644 index 00000000..c7809b16 Binary files /dev/null and b/EXE version/main/libmpg123-0.dll differ diff --git a/EXE version/main/libogg-0.dll b/EXE version/main/libogg-0.dll new file mode 100644 index 00000000..51334815 Binary files /dev/null and b/EXE version/main/libogg-0.dll differ diff --git a/EXE version/main/libopenblas.XWYDX2IKJW2NMTWSFYNGFUWKQU3LYTCZ.gfortran-win_amd64.dll b/EXE version/main/libopenblas.XWYDX2IKJW2NMTWSFYNGFUWKQU3LYTCZ.gfortran-win_amd64.dll new file mode 100644 index 00000000..a690bd3e Binary files /dev/null and b/EXE version/main/libopenblas.XWYDX2IKJW2NMTWSFYNGFUWKQU3LYTCZ.gfortran-win_amd64.dll differ diff --git a/EXE version/main/libopus-0.dll b/EXE version/main/libopus-0.dll new file mode 100644 index 00000000..9ba6c386 Binary files /dev/null and b/EXE version/main/libopus-0.dll differ diff --git a/EXE version/main/libopusfile-0.dll b/EXE version/main/libopusfile-0.dll new file mode 100644 index 00000000..97a88b61 Binary files /dev/null and b/EXE version/main/libopusfile-0.dll differ diff --git a/EXE version/main/libpng16-16.dll b/EXE version/main/libpng16-16.dll new file mode 100644 index 00000000..709f7244 Binary files /dev/null and b/EXE version/main/libpng16-16.dll differ diff --git a/EXE version/main/libssl-1_1.dll b/EXE version/main/libssl-1_1.dll new file mode 100644 index 00000000..aa5005e0 Binary files /dev/null and b/EXE version/main/libssl-1_1.dll differ diff --git a/EXE version/main/libtiff-5.dll b/EXE version/main/libtiff-5.dll new file mode 100644 index 00000000..fc8a7c0c Binary files /dev/null and b/EXE version/main/libtiff-5.dll differ diff --git a/EXE version/main/libvorbis-0.dll b/EXE version/main/libvorbis-0.dll new file mode 100644 index 00000000..f5ae1bf7 Binary files /dev/null and b/EXE version/main/libvorbis-0.dll differ diff --git a/EXE version/main/libvorbisfile-3.dll b/EXE version/main/libvorbisfile-3.dll new file mode 100644 index 00000000..d0787368 Binary files /dev/null and b/EXE version/main/libvorbisfile-3.dll differ diff --git a/EXE version/main/libwebp-7.dll b/EXE version/main/libwebp-7.dll new file mode 100644 index 00000000..fad57b22 Binary files /dev/null and b/EXE version/main/libwebp-7.dll differ diff --git a/EXE version/main/main.exe b/EXE version/main/main.exe new file mode 100644 index 00000000..54cde1ce Binary files /dev/null and b/EXE version/main/main.exe differ diff --git a/EXE version/main/main.exe.manifest b/EXE version/main/main.exe.manifest new file mode 100644 index 00000000..fbc1b5e2 --- /dev/null +++ b/EXE version/main/main.exe.manifest @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + + \ No newline at end of file diff --git a/EXE version/main/mask.h b/EXE version/main/mask.h new file mode 100644 index 00000000..45ad8c51 --- /dev/null +++ b/EXE version/main/mask.h @@ -0,0 +1,7 @@ +#ifndef PGMASK_INTERNAL_H +#define PGMASK_INTERNAL_H + +#include "include/pygame_mask.h" +#define PYGAMEAPI_MASK_NUMSLOTS 1 + +#endif /* ~PGMASK_INTERNAL_H */ diff --git a/EXE version/main/mixer.h b/EXE version/main/mixer.h new file mode 100644 index 00000000..79e52f94 --- /dev/null +++ b/EXE version/main/mixer.h @@ -0,0 +1,14 @@ +#ifndef MIXER_INTERNAL_H +#define MIXER_INTERNAL_H + +#include + +/* test mixer initializations */ +#define MIXER_INIT_CHECK() \ + if(!SDL_WasInit(SDL_INIT_AUDIO)) \ + return RAISE(pgExc_SDLError, "mixer not initialized") + +#define PYGAMEAPI_MIXER_NUMSLOTS 5 +#include "include/pygame_mixer.h" + +#endif /* ~MIXER_INTERNAL_H */ diff --git a/EXE version/main/numpy/.libs/libopenblas.XWYDX2IKJW2NMTWSFYNGFUWKQU3LYTCZ.gfortran-win_amd64.dll b/EXE version/main/numpy/.libs/libopenblas.XWYDX2IKJW2NMTWSFYNGFUWKQU3LYTCZ.gfortran-win_amd64.dll new file mode 100644 index 00000000..a690bd3e Binary files /dev/null and b/EXE version/main/numpy/.libs/libopenblas.XWYDX2IKJW2NMTWSFYNGFUWKQU3LYTCZ.gfortran-win_amd64.dll differ diff --git a/EXE version/main/numpy/LICENSE.txt b/EXE version/main/numpy/LICENSE.txt new file mode 100644 index 00000000..04619f58 --- /dev/null +++ b/EXE version/main/numpy/LICENSE.txt @@ -0,0 +1,938 @@ + +---- + +This binary distribution of NumPy also bundles the following software: + + +Name: OpenBLAS +Files: extra-dll\libopenb*.dll +Description: bundled as a dynamically linked library +Availability: https://github.com/xianyi/OpenBLAS/ +License: 3-clause BSD + Copyright (c) 2011-2014, The OpenBLAS Project + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + 2. 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. + 3. Neither the name of the OpenBLAS project nor the names of + its 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. + + +Name: LAPACK +Files: extra-dll\libopenb*.dll +Description: bundled in OpenBLAS +Availability: https://github.com/xianyi/OpenBLAS/ +License 3-clause BSD + Copyright (c) 1992-2013 The University of Tennessee and The University + of Tennessee Research Foundation. All rights + reserved. + Copyright (c) 2000-2013 The University of California Berkeley. All + rights reserved. + Copyright (c) 2006-2013 The University of Colorado Denver. All rights + reserved. + + $COPYRIGHT$ + + Additional copyrights may follow + + $HEADER$ + + 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 listed + in this license in the documentation and/or other materials + provided with the distribution. + + - Neither the name of the copyright holders nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + The copyright holders provide no reassurances that the source code + provided does not infringe any patent, copyright, or any other + intellectual property rights of third parties. The copyright holders + disclaim any liability to any recipient for claims brought against + recipient by any third party for infringement of that parties + intellectual property rights. + + 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. + + +Name: GCC runtime library +Files: extra-dll\*.dll +Description: statically linked, in DLL files compiled with gfortran only +Availability: https://gcc.gnu.org/viewcvs/gcc/ +License: GPLv3 + runtime exception + Copyright (C) 2002-2017 Free Software Foundation, Inc. + + Libgfortran is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + Libgfortran is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + Under Section 7 of GPL version 3, you are granted additional + permissions described in the GCC Runtime Library Exception, version + 3.1, as published by the Free Software Foundation. + + You should have received a copy of the GNU General Public License and + a copy of the GCC Runtime Library Exception along with this program; + see the files COPYING3 and COPYING.RUNTIME respectively. If not, see + . + + +Name: Microsoft Visual C++ Runtime Files +Files: extra-dll\msvcp140.dll +License: MSVC + https://www.visualstudio.com/license-terms/distributable-code-microsoft-visual-studio-2015-rc-microsoft-visual-studio-2015-sdk-rc-includes-utilities-buildserver-files/#visual-c-runtime + + Subject to the License Terms for the software, you may copy and + distribute with your program any of the files within the followng + folder and its subfolders except as noted below. You may not modify + these files. + + C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\redist + + You may not distribute the contents of the following folders: + + C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\redist\debug_nonredist + C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\redist\onecore\debug_nonredist + + Subject to the License Terms for the software, you may copy and + distribute the following files with your program in your program’s + application local folder or by deploying them into the Global + Assembly Cache (GAC): + + VC\atlmfc\lib\mfcmifc80.dll + VC\atlmfc\lib\amd64\mfcmifc80.dll + + +Name: Microsoft Visual C++ Runtime Files +Files: extra-dll\msvc*90.dll, extra-dll\Microsoft.VC90.CRT.manifest +License: MSVC + For your convenience, we have provided the following folders for + use when redistributing VC++ runtime files. Subject to the license + terms for the software, you may redistribute the folder + (unmodified) in the application local folder as a sub-folder with + no change to the folder name. You may also redistribute all the + files (*.dll and *.manifest) within a folder, listed below the + folder for your convenience, as an entire set. + + \VC\redist\x86\Microsoft.VC90.ATL\ + atl90.dll + Microsoft.VC90.ATL.manifest + \VC\redist\ia64\Microsoft.VC90.ATL\ + atl90.dll + Microsoft.VC90.ATL.manifest + \VC\redist\amd64\Microsoft.VC90.ATL\ + atl90.dll + Microsoft.VC90.ATL.manifest + \VC\redist\x86\Microsoft.VC90.CRT\ + msvcm90.dll + msvcp90.dll + msvcr90.dll + Microsoft.VC90.CRT.manifest + \VC\redist\ia64\Microsoft.VC90.CRT\ + msvcm90.dll + msvcp90.dll + msvcr90.dll + Microsoft.VC90.CRT.manifest + +---- + +Full text of license texts referred to above follows (that they are +listed below does not necessarily imply the conditions apply to the +present binary release): + +---- + +GCC RUNTIME LIBRARY EXCEPTION + +Version 3.1, 31 March 2009 + +Copyright (C) 2009 Free Software Foundation, Inc. + +Everyone is permitted to copy and distribute verbatim copies of this +license document, but changing it is not allowed. + +This GCC Runtime Library Exception ("Exception") is an additional +permission under section 7 of the GNU General Public License, version +3 ("GPLv3"). It applies to a given file (the "Runtime Library") that +bears a notice placed by the copyright holder of the file stating that +the file is governed by GPLv3 along with this Exception. + +When you use GCC to compile a program, GCC may combine portions of +certain GCC header files and runtime libraries with the compiled +program. The purpose of this Exception is to allow compilation of +non-GPL (including proprietary) programs to use, in this way, the +header files and runtime libraries covered by this Exception. + +0. Definitions. + +A file is an "Independent Module" if it either requires the Runtime +Library for execution after a Compilation Process, or makes use of an +interface provided by the Runtime Library, but is not otherwise based +on the Runtime Library. + +"GCC" means a version of the GNU Compiler Collection, with or without +modifications, governed by version 3 (or a specified later version) of +the GNU General Public License (GPL) with the option of using any +subsequent versions published by the FSF. + +"GPL-compatible Software" is software whose conditions of propagation, +modification and use would permit combination with GCC in accord with +the license of GCC. + +"Target Code" refers to output from any compiler for a real or virtual +target processor architecture, in executable form or suitable for +input to an assembler, loader, linker and/or execution +phase. Notwithstanding that, Target Code does not include data in any +format that is used as a compiler intermediate representation, or used +for producing a compiler intermediate representation. + +The "Compilation Process" transforms code entirely represented in +non-intermediate languages designed for human-written code, and/or in +Java Virtual Machine byte code, into Target Code. Thus, for example, +use of source code generators and preprocessors need not be considered +part of the Compilation Process, since the Compilation Process can be +understood as starting with the output of the generators or +preprocessors. + +A Compilation Process is "Eligible" if it is done using GCC, alone or +with other GPL-compatible software, or if it is done without using any +work based on GCC. For example, using non-GPL-compatible Software to +optimize any GCC intermediate representations would not qualify as an +Eligible Compilation Process. + +1. Grant of Additional Permission. + +You have permission to propagate a work of Target Code formed by +combining the Runtime Library with Independent Modules, even if such +propagation would otherwise violate the terms of GPLv3, provided that +all Target Code was generated by Eligible Compilation Processes. You +may then convey such a combination under terms of your choice, +consistent with the licensing of the Independent Modules. + +2. No Weakening of GCC Copyleft. + +The availability of this Exception does not imply any general +presumption that third-party software is unaffected by the copyleft +requirements of the license of GCC. + +---- + + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/EXE version/main/numpy/__init__.cython-30.pxd b/EXE version/main/numpy/__init__.cython-30.pxd new file mode 100644 index 00000000..42a46d0b --- /dev/null +++ b/EXE version/main/numpy/__init__.cython-30.pxd @@ -0,0 +1,1053 @@ +# NumPy static imports for Cython >= 3.0 +# +# If any of the PyArray_* functions are called, import_array must be +# called first. This is done automatically by Cython 3.0+ if a call +# is not detected inside of the module. +# +# Author: Dag Sverre Seljebotn +# + +from cpython.ref cimport Py_INCREF +from cpython.object cimport PyObject, PyTypeObject, PyObject_TypeCheck +cimport libc.stdio as stdio + + +cdef extern from *: + # Leave a marker that the NumPy declarations came from NumPy itself and not from Cython. + # See https://github.com/cython/cython/issues/3573 + """ + /* Using NumPy API declarations from "numpy/__init__.cython-30.pxd" */ + """ + + +cdef extern from "Python.h": + ctypedef Py_ssize_t Py_intptr_t + +cdef extern from "numpy/arrayobject.h": + ctypedef Py_intptr_t npy_intp + ctypedef size_t npy_uintp + + cdef enum NPY_TYPES: + NPY_BOOL + NPY_BYTE + NPY_UBYTE + NPY_SHORT + NPY_USHORT + NPY_INT + NPY_UINT + NPY_LONG + NPY_ULONG + NPY_LONGLONG + NPY_ULONGLONG + NPY_FLOAT + NPY_DOUBLE + NPY_LONGDOUBLE + NPY_CFLOAT + NPY_CDOUBLE + NPY_CLONGDOUBLE + NPY_OBJECT + NPY_STRING + NPY_UNICODE + NPY_VOID + NPY_DATETIME + NPY_TIMEDELTA + NPY_NTYPES + NPY_NOTYPE + + NPY_INT8 + NPY_INT16 + NPY_INT32 + NPY_INT64 + NPY_INT128 + NPY_INT256 + NPY_UINT8 + NPY_UINT16 + NPY_UINT32 + NPY_UINT64 + NPY_UINT128 + NPY_UINT256 + NPY_FLOAT16 + NPY_FLOAT32 + NPY_FLOAT64 + NPY_FLOAT80 + NPY_FLOAT96 + NPY_FLOAT128 + NPY_FLOAT256 + NPY_COMPLEX32 + NPY_COMPLEX64 + NPY_COMPLEX128 + NPY_COMPLEX160 + NPY_COMPLEX192 + NPY_COMPLEX256 + NPY_COMPLEX512 + + NPY_INTP + + ctypedef enum NPY_ORDER: + NPY_ANYORDER + NPY_CORDER + NPY_FORTRANORDER + NPY_KEEPORDER + + ctypedef enum NPY_CASTING: + NPY_NO_CASTING + NPY_EQUIV_CASTING + NPY_SAFE_CASTING + NPY_SAME_KIND_CASTING + NPY_UNSAFE_CASTING + + ctypedef enum NPY_CLIPMODE: + NPY_CLIP + NPY_WRAP + NPY_RAISE + + ctypedef enum NPY_SCALARKIND: + NPY_NOSCALAR, + NPY_BOOL_SCALAR, + NPY_INTPOS_SCALAR, + NPY_INTNEG_SCALAR, + NPY_FLOAT_SCALAR, + NPY_COMPLEX_SCALAR, + NPY_OBJECT_SCALAR + + ctypedef enum NPY_SORTKIND: + NPY_QUICKSORT + NPY_HEAPSORT + NPY_MERGESORT + + ctypedef enum NPY_SEARCHSIDE: + NPY_SEARCHLEFT + NPY_SEARCHRIGHT + + enum: + # DEPRECATED since NumPy 1.7 ! Do not use in new code! + NPY_C_CONTIGUOUS + NPY_F_CONTIGUOUS + NPY_CONTIGUOUS + NPY_FORTRAN + NPY_OWNDATA + NPY_FORCECAST + NPY_ENSURECOPY + NPY_ENSUREARRAY + NPY_ELEMENTSTRIDES + NPY_ALIGNED + NPY_NOTSWAPPED + NPY_WRITEABLE + NPY_UPDATEIFCOPY + NPY_ARR_HAS_DESCR + + NPY_BEHAVED + NPY_BEHAVED_NS + NPY_CARRAY + NPY_CARRAY_RO + NPY_FARRAY + NPY_FARRAY_RO + NPY_DEFAULT + + NPY_IN_ARRAY + NPY_OUT_ARRAY + NPY_INOUT_ARRAY + NPY_IN_FARRAY + NPY_OUT_FARRAY + NPY_INOUT_FARRAY + + NPY_UPDATE_ALL + + enum: + # Added in NumPy 1.7 to replace the deprecated enums above. + NPY_ARRAY_C_CONTIGUOUS + NPY_ARRAY_F_CONTIGUOUS + NPY_ARRAY_OWNDATA + NPY_ARRAY_FORCECAST + NPY_ARRAY_ENSURECOPY + NPY_ARRAY_ENSUREARRAY + NPY_ARRAY_ELEMENTSTRIDES + NPY_ARRAY_ALIGNED + NPY_ARRAY_NOTSWAPPED + NPY_ARRAY_WRITEABLE + NPY_ARRAY_UPDATEIFCOPY + + NPY_ARRAY_BEHAVED + NPY_ARRAY_BEHAVED_NS + NPY_ARRAY_CARRAY + NPY_ARRAY_CARRAY_RO + NPY_ARRAY_FARRAY + NPY_ARRAY_FARRAY_RO + NPY_ARRAY_DEFAULT + + NPY_ARRAY_IN_ARRAY + NPY_ARRAY_OUT_ARRAY + NPY_ARRAY_INOUT_ARRAY + NPY_ARRAY_IN_FARRAY + NPY_ARRAY_OUT_FARRAY + NPY_ARRAY_INOUT_FARRAY + + NPY_ARRAY_UPDATE_ALL + + cdef enum: + NPY_MAXDIMS + + npy_intp NPY_MAX_ELSIZE + + ctypedef void (*PyArray_VectorUnaryFunc)(void *, void *, npy_intp, void *, void *) + + ctypedef struct PyArray_ArrayDescr: + # shape is a tuple, but Cython doesn't support "tuple shape" + # inside a non-PyObject declaration, so we have to declare it + # as just a PyObject*. + PyObject* shape + + ctypedef struct PyArray_Descr: + pass + + ctypedef class numpy.dtype [object PyArray_Descr, check_size ignore]: + # Use PyDataType_* macros when possible, however there are no macros + # for accessing some of the fields, so some are defined. + cdef PyTypeObject* typeobj + cdef char kind + cdef char type + # Numpy sometimes mutates this without warning (e.g. it'll + # sometimes change "|" to "<" in shared dtype objects on + # little-endian machines). If this matters to you, use + # PyArray_IsNativeByteOrder(dtype.byteorder) instead of + # directly accessing this field. + cdef char byteorder + cdef char flags + cdef int type_num + cdef int itemsize "elsize" + cdef int alignment + cdef object fields + cdef tuple names + # Use PyDataType_HASSUBARRAY to test whether this field is + # valid (the pointer can be NULL). Most users should access + # this field via the inline helper method PyDataType_SHAPE. + cdef PyArray_ArrayDescr* subarray + + ctypedef class numpy.flatiter [object PyArrayIterObject, check_size ignore]: + # Use through macros + pass + + ctypedef class numpy.broadcast [object PyArrayMultiIterObject, check_size ignore]: + # Use through macros + pass + + ctypedef struct PyArrayObject: + # For use in situations where ndarray can't replace PyArrayObject*, + # like PyArrayObject**. + pass + + ctypedef class numpy.ndarray [object PyArrayObject, check_size ignore]: + cdef __cythonbufferdefaults__ = {"mode": "strided"} + + # NOTE: no field declarations since direct access is deprecated since NumPy 1.7 + # Instead, we use properties that map to the corresponding C-API functions. + + @property + cdef inline PyObject* base(self) nogil: + """Returns a borrowed reference to the object owning the data/memory. + """ + return PyArray_BASE(self) + + @property + cdef inline dtype descr(self): + """Returns an owned reference to the dtype of the array. + """ + return PyArray_DESCR(self) + + @property + cdef inline int ndim(self) nogil: + """Returns the number of dimensions in the array. + """ + return PyArray_NDIM(self) + + @property + cdef inline npy_intp *shape(self) nogil: + """Returns a pointer to the dimensions/shape of the array. + The number of elements matches the number of dimensions of the array (ndim). + Can return NULL for 0-dimensional arrays. + """ + return PyArray_DIMS(self) + + @property + cdef inline npy_intp *strides(self) nogil: + """Returns a pointer to the strides of the array. + The number of elements matches the number of dimensions of the array (ndim). + """ + return PyArray_STRIDES(self) + + @property + cdef inline npy_intp size(self) nogil: + """Returns the total size (in number of elements) of the array. + """ + return PyArray_SIZE(self) + + @property + cdef inline char* data(self) nogil: + """The pointer to the data buffer as a char*. + This is provided for legacy reasons to avoid direct struct field access. + For new code that needs this access, you probably want to cast the result + of `PyArray_DATA()` instead, which returns a 'void*'. + """ + return PyArray_BYTES(self) + + ctypedef unsigned char npy_bool + + ctypedef signed char npy_byte + ctypedef signed short npy_short + ctypedef signed int npy_int + ctypedef signed long npy_long + ctypedef signed long long npy_longlong + + ctypedef unsigned char npy_ubyte + ctypedef unsigned short npy_ushort + ctypedef unsigned int npy_uint + ctypedef unsigned long npy_ulong + ctypedef unsigned long long npy_ulonglong + + ctypedef float npy_float + ctypedef double npy_double + ctypedef long double npy_longdouble + + ctypedef signed char npy_int8 + ctypedef signed short npy_int16 + ctypedef signed int npy_int32 + ctypedef signed long long npy_int64 + ctypedef signed long long npy_int96 + ctypedef signed long long npy_int128 + + ctypedef unsigned char npy_uint8 + ctypedef unsigned short npy_uint16 + ctypedef unsigned int npy_uint32 + ctypedef unsigned long long npy_uint64 + ctypedef unsigned long long npy_uint96 + ctypedef unsigned long long npy_uint128 + + ctypedef float npy_float32 + ctypedef double npy_float64 + ctypedef long double npy_float80 + ctypedef long double npy_float96 + ctypedef long double npy_float128 + + ctypedef struct npy_cfloat: + float real + float imag + + ctypedef struct npy_cdouble: + double real + double imag + + ctypedef struct npy_clongdouble: + long double real + long double imag + + ctypedef struct npy_complex64: + float real + float imag + + ctypedef struct npy_complex128: + double real + double imag + + ctypedef struct npy_complex160: + long double real + long double imag + + ctypedef struct npy_complex192: + long double real + long double imag + + ctypedef struct npy_complex256: + long double real + long double imag + + ctypedef struct PyArray_Dims: + npy_intp *ptr + int len + + int _import_array() except -1 + # A second definition so _import_array isn't marked as used when we use it here. + # Do not use - subject to change any time. + int __pyx_import_array "_import_array"() except -1 + + # + # Macros from ndarrayobject.h + # + bint PyArray_CHKFLAGS(ndarray m, int flags) nogil + bint PyArray_IS_C_CONTIGUOUS(ndarray arr) nogil + bint PyArray_IS_F_CONTIGUOUS(ndarray arr) nogil + bint PyArray_ISCONTIGUOUS(ndarray m) nogil + bint PyArray_ISWRITEABLE(ndarray m) nogil + bint PyArray_ISALIGNED(ndarray m) nogil + + int PyArray_NDIM(ndarray) nogil + bint PyArray_ISONESEGMENT(ndarray) nogil + bint PyArray_ISFORTRAN(ndarray) nogil + int PyArray_FORTRANIF(ndarray) nogil + + void* PyArray_DATA(ndarray) nogil + char* PyArray_BYTES(ndarray) nogil + + npy_intp* PyArray_DIMS(ndarray) nogil + npy_intp* PyArray_STRIDES(ndarray) nogil + npy_intp PyArray_DIM(ndarray, size_t) nogil + npy_intp PyArray_STRIDE(ndarray, size_t) nogil + + PyObject *PyArray_BASE(ndarray) nogil # returns borrowed reference! + PyArray_Descr *PyArray_DESCR(ndarray) nogil # returns borrowed reference to dtype! + PyArray_Descr *PyArray_DTYPE(ndarray) nogil # returns borrowed reference to dtype! NP 1.7+ alias for descr. + int PyArray_FLAGS(ndarray) nogil + void PyArray_CLEARFLAGS(ndarray, int flags) nogil # Added in NumPy 1.7 + void PyArray_ENABLEFLAGS(ndarray, int flags) nogil # Added in NumPy 1.7 + npy_intp PyArray_ITEMSIZE(ndarray) nogil + int PyArray_TYPE(ndarray arr) nogil + + object PyArray_GETITEM(ndarray arr, void *itemptr) + int PyArray_SETITEM(ndarray arr, void *itemptr, object obj) + + bint PyTypeNum_ISBOOL(int) nogil + bint PyTypeNum_ISUNSIGNED(int) nogil + bint PyTypeNum_ISSIGNED(int) nogil + bint PyTypeNum_ISINTEGER(int) nogil + bint PyTypeNum_ISFLOAT(int) nogil + bint PyTypeNum_ISNUMBER(int) nogil + bint PyTypeNum_ISSTRING(int) nogil + bint PyTypeNum_ISCOMPLEX(int) nogil + bint PyTypeNum_ISPYTHON(int) nogil + bint PyTypeNum_ISFLEXIBLE(int) nogil + bint PyTypeNum_ISUSERDEF(int) nogil + bint PyTypeNum_ISEXTENDED(int) nogil + bint PyTypeNum_ISOBJECT(int) nogil + + bint PyDataType_ISBOOL(dtype) nogil + bint PyDataType_ISUNSIGNED(dtype) nogil + bint PyDataType_ISSIGNED(dtype) nogil + bint PyDataType_ISINTEGER(dtype) nogil + bint PyDataType_ISFLOAT(dtype) nogil + bint PyDataType_ISNUMBER(dtype) nogil + bint PyDataType_ISSTRING(dtype) nogil + bint PyDataType_ISCOMPLEX(dtype) nogil + bint PyDataType_ISPYTHON(dtype) nogil + bint PyDataType_ISFLEXIBLE(dtype) nogil + bint PyDataType_ISUSERDEF(dtype) nogil + bint PyDataType_ISEXTENDED(dtype) nogil + bint PyDataType_ISOBJECT(dtype) nogil + bint PyDataType_HASFIELDS(dtype) nogil + bint PyDataType_HASSUBARRAY(dtype) nogil + + bint PyArray_ISBOOL(ndarray) nogil + bint PyArray_ISUNSIGNED(ndarray) nogil + bint PyArray_ISSIGNED(ndarray) nogil + bint PyArray_ISINTEGER(ndarray) nogil + bint PyArray_ISFLOAT(ndarray) nogil + bint PyArray_ISNUMBER(ndarray) nogil + bint PyArray_ISSTRING(ndarray) nogil + bint PyArray_ISCOMPLEX(ndarray) nogil + bint PyArray_ISPYTHON(ndarray) nogil + bint PyArray_ISFLEXIBLE(ndarray) nogil + bint PyArray_ISUSERDEF(ndarray) nogil + bint PyArray_ISEXTENDED(ndarray) nogil + bint PyArray_ISOBJECT(ndarray) nogil + bint PyArray_HASFIELDS(ndarray) nogil + + bint PyArray_ISVARIABLE(ndarray) nogil + + bint PyArray_SAFEALIGNEDCOPY(ndarray) nogil + bint PyArray_ISNBO(char) nogil # works on ndarray.byteorder + bint PyArray_IsNativeByteOrder(char) nogil # works on ndarray.byteorder + bint PyArray_ISNOTSWAPPED(ndarray) nogil + bint PyArray_ISBYTESWAPPED(ndarray) nogil + + bint PyArray_FLAGSWAP(ndarray, int) nogil + + bint PyArray_ISCARRAY(ndarray) nogil + bint PyArray_ISCARRAY_RO(ndarray) nogil + bint PyArray_ISFARRAY(ndarray) nogil + bint PyArray_ISFARRAY_RO(ndarray) nogil + bint PyArray_ISBEHAVED(ndarray) nogil + bint PyArray_ISBEHAVED_RO(ndarray) nogil + + + bint PyDataType_ISNOTSWAPPED(dtype) nogil + bint PyDataType_ISBYTESWAPPED(dtype) nogil + + bint PyArray_DescrCheck(object) + + bint PyArray_Check(object) + bint PyArray_CheckExact(object) + + # Cannot be supported due to out arg: + # bint PyArray_HasArrayInterfaceType(object, dtype, object, object&) + # bint PyArray_HasArrayInterface(op, out) + + + bint PyArray_IsZeroDim(object) + # Cannot be supported due to ## ## in macro: + # bint PyArray_IsScalar(object, verbatim work) + bint PyArray_CheckScalar(object) + bint PyArray_IsPythonNumber(object) + bint PyArray_IsPythonScalar(object) + bint PyArray_IsAnyScalar(object) + bint PyArray_CheckAnyScalar(object) + + ndarray PyArray_GETCONTIGUOUS(ndarray) + bint PyArray_SAMESHAPE(ndarray, ndarray) nogil + npy_intp PyArray_SIZE(ndarray) nogil + npy_intp PyArray_NBYTES(ndarray) nogil + + object PyArray_FROM_O(object) + object PyArray_FROM_OF(object m, int flags) + object PyArray_FROM_OT(object m, int type) + object PyArray_FROM_OTF(object m, int type, int flags) + object PyArray_FROMANY(object m, int type, int min, int max, int flags) + object PyArray_ZEROS(int nd, npy_intp* dims, int type, int fortran) + object PyArray_EMPTY(int nd, npy_intp* dims, int type, int fortran) + void PyArray_FILLWBYTE(object, int val) + npy_intp PyArray_REFCOUNT(object) + object PyArray_ContiguousFromAny(op, int, int min_depth, int max_depth) + unsigned char PyArray_EquivArrTypes(ndarray a1, ndarray a2) + bint PyArray_EquivByteorders(int b1, int b2) nogil + object PyArray_SimpleNew(int nd, npy_intp* dims, int typenum) + object PyArray_SimpleNewFromData(int nd, npy_intp* dims, int typenum, void* data) + #object PyArray_SimpleNewFromDescr(int nd, npy_intp* dims, dtype descr) + object PyArray_ToScalar(void* data, ndarray arr) + + void* PyArray_GETPTR1(ndarray m, npy_intp i) nogil + void* PyArray_GETPTR2(ndarray m, npy_intp i, npy_intp j) nogil + void* PyArray_GETPTR3(ndarray m, npy_intp i, npy_intp j, npy_intp k) nogil + void* PyArray_GETPTR4(ndarray m, npy_intp i, npy_intp j, npy_intp k, npy_intp l) nogil + + void PyArray_XDECREF_ERR(ndarray) + # Cannot be supported due to out arg + # void PyArray_DESCR_REPLACE(descr) + + + object PyArray_Copy(ndarray) + object PyArray_FromObject(object op, int type, int min_depth, int max_depth) + object PyArray_ContiguousFromObject(object op, int type, int min_depth, int max_depth) + object PyArray_CopyFromObject(object op, int type, int min_depth, int max_depth) + + object PyArray_Cast(ndarray mp, int type_num) + object PyArray_Take(ndarray ap, object items, int axis) + object PyArray_Put(ndarray ap, object items, object values) + + void PyArray_ITER_RESET(flatiter it) nogil + void PyArray_ITER_NEXT(flatiter it) nogil + void PyArray_ITER_GOTO(flatiter it, npy_intp* destination) nogil + void PyArray_ITER_GOTO1D(flatiter it, npy_intp ind) nogil + void* PyArray_ITER_DATA(flatiter it) nogil + bint PyArray_ITER_NOTDONE(flatiter it) nogil + + void PyArray_MultiIter_RESET(broadcast multi) nogil + void PyArray_MultiIter_NEXT(broadcast multi) nogil + void PyArray_MultiIter_GOTO(broadcast multi, npy_intp dest) nogil + void PyArray_MultiIter_GOTO1D(broadcast multi, npy_intp ind) nogil + void* PyArray_MultiIter_DATA(broadcast multi, npy_intp i) nogil + void PyArray_MultiIter_NEXTi(broadcast multi, npy_intp i) nogil + bint PyArray_MultiIter_NOTDONE(broadcast multi) nogil + + # Functions from __multiarray_api.h + + # Functions taking dtype and returning object/ndarray are disabled + # for now as they steal dtype references. I'm conservative and disable + # more than is probably needed until it can be checked further. + int PyArray_SetNumericOps (object) + object PyArray_GetNumericOps () + int PyArray_INCREF (ndarray) + int PyArray_XDECREF (ndarray) + void PyArray_SetStringFunction (object, int) + dtype PyArray_DescrFromType (int) + object PyArray_TypeObjectFromType (int) + char * PyArray_Zero (ndarray) + char * PyArray_One (ndarray) + #object PyArray_CastToType (ndarray, dtype, int) + int PyArray_CastTo (ndarray, ndarray) + int PyArray_CastAnyTo (ndarray, ndarray) + int PyArray_CanCastSafely (int, int) + npy_bool PyArray_CanCastTo (dtype, dtype) + int PyArray_ObjectType (object, int) + dtype PyArray_DescrFromObject (object, dtype) + #ndarray* PyArray_ConvertToCommonType (object, int *) + dtype PyArray_DescrFromScalar (object) + dtype PyArray_DescrFromTypeObject (object) + npy_intp PyArray_Size (object) + #object PyArray_Scalar (void *, dtype, object) + #object PyArray_FromScalar (object, dtype) + void PyArray_ScalarAsCtype (object, void *) + #int PyArray_CastScalarToCtype (object, void *, dtype) + #int PyArray_CastScalarDirect (object, dtype, void *, int) + object PyArray_ScalarFromObject (object) + #PyArray_VectorUnaryFunc * PyArray_GetCastFunc (dtype, int) + object PyArray_FromDims (int, int *, int) + #object PyArray_FromDimsAndDataAndDescr (int, int *, dtype, char *) + #object PyArray_FromAny (object, dtype, int, int, int, object) + object PyArray_EnsureArray (object) + object PyArray_EnsureAnyArray (object) + #object PyArray_FromFile (stdio.FILE *, dtype, npy_intp, char *) + #object PyArray_FromString (char *, npy_intp, dtype, npy_intp, char *) + #object PyArray_FromBuffer (object, dtype, npy_intp, npy_intp) + #object PyArray_FromIter (object, dtype, npy_intp) + object PyArray_Return (ndarray) + #object PyArray_GetField (ndarray, dtype, int) + #int PyArray_SetField (ndarray, dtype, int, object) + object PyArray_Byteswap (ndarray, npy_bool) + object PyArray_Resize (ndarray, PyArray_Dims *, int, NPY_ORDER) + int PyArray_MoveInto (ndarray, ndarray) + int PyArray_CopyInto (ndarray, ndarray) + int PyArray_CopyAnyInto (ndarray, ndarray) + int PyArray_CopyObject (ndarray, object) + object PyArray_NewCopy (ndarray, NPY_ORDER) + object PyArray_ToList (ndarray) + object PyArray_ToString (ndarray, NPY_ORDER) + int PyArray_ToFile (ndarray, stdio.FILE *, char *, char *) + int PyArray_Dump (object, object, int) + object PyArray_Dumps (object, int) + int PyArray_ValidType (int) + void PyArray_UpdateFlags (ndarray, int) + object PyArray_New (type, int, npy_intp *, int, npy_intp *, void *, int, int, object) + #object PyArray_NewFromDescr (type, dtype, int, npy_intp *, npy_intp *, void *, int, object) + #dtype PyArray_DescrNew (dtype) + dtype PyArray_DescrNewFromType (int) + double PyArray_GetPriority (object, double) + object PyArray_IterNew (object) + object PyArray_MultiIterNew (int, ...) + + int PyArray_PyIntAsInt (object) + npy_intp PyArray_PyIntAsIntp (object) + int PyArray_Broadcast (broadcast) + void PyArray_FillObjectArray (ndarray, object) + int PyArray_FillWithScalar (ndarray, object) + npy_bool PyArray_CheckStrides (int, int, npy_intp, npy_intp, npy_intp *, npy_intp *) + dtype PyArray_DescrNewByteorder (dtype, char) + object PyArray_IterAllButAxis (object, int *) + #object PyArray_CheckFromAny (object, dtype, int, int, int, object) + #object PyArray_FromArray (ndarray, dtype, int) + object PyArray_FromInterface (object) + object PyArray_FromStructInterface (object) + #object PyArray_FromArrayAttr (object, dtype, object) + #NPY_SCALARKIND PyArray_ScalarKind (int, ndarray*) + int PyArray_CanCoerceScalar (int, int, NPY_SCALARKIND) + object PyArray_NewFlagsObject (object) + npy_bool PyArray_CanCastScalar (type, type) + #int PyArray_CompareUCS4 (npy_ucs4 *, npy_ucs4 *, register size_t) + int PyArray_RemoveSmallest (broadcast) + int PyArray_ElementStrides (object) + void PyArray_Item_INCREF (char *, dtype) + void PyArray_Item_XDECREF (char *, dtype) + object PyArray_FieldNames (object) + object PyArray_Transpose (ndarray, PyArray_Dims *) + object PyArray_TakeFrom (ndarray, object, int, ndarray, NPY_CLIPMODE) + object PyArray_PutTo (ndarray, object, object, NPY_CLIPMODE) + object PyArray_PutMask (ndarray, object, object) + object PyArray_Repeat (ndarray, object, int) + object PyArray_Choose (ndarray, object, ndarray, NPY_CLIPMODE) + int PyArray_Sort (ndarray, int, NPY_SORTKIND) + object PyArray_ArgSort (ndarray, int, NPY_SORTKIND) + object PyArray_SearchSorted (ndarray, object, NPY_SEARCHSIDE, PyObject *) + object PyArray_ArgMax (ndarray, int, ndarray) + object PyArray_ArgMin (ndarray, int, ndarray) + object PyArray_Reshape (ndarray, object) + object PyArray_Newshape (ndarray, PyArray_Dims *, NPY_ORDER) + object PyArray_Squeeze (ndarray) + #object PyArray_View (ndarray, dtype, type) + object PyArray_SwapAxes (ndarray, int, int) + object PyArray_Max (ndarray, int, ndarray) + object PyArray_Min (ndarray, int, ndarray) + object PyArray_Ptp (ndarray, int, ndarray) + object PyArray_Mean (ndarray, int, int, ndarray) + object PyArray_Trace (ndarray, int, int, int, int, ndarray) + object PyArray_Diagonal (ndarray, int, int, int) + object PyArray_Clip (ndarray, object, object, ndarray) + object PyArray_Conjugate (ndarray, ndarray) + object PyArray_Nonzero (ndarray) + object PyArray_Std (ndarray, int, int, ndarray, int) + object PyArray_Sum (ndarray, int, int, ndarray) + object PyArray_CumSum (ndarray, int, int, ndarray) + object PyArray_Prod (ndarray, int, int, ndarray) + object PyArray_CumProd (ndarray, int, int, ndarray) + object PyArray_All (ndarray, int, ndarray) + object PyArray_Any (ndarray, int, ndarray) + object PyArray_Compress (ndarray, object, int, ndarray) + object PyArray_Flatten (ndarray, NPY_ORDER) + object PyArray_Ravel (ndarray, NPY_ORDER) + npy_intp PyArray_MultiplyList (npy_intp *, int) + int PyArray_MultiplyIntList (int *, int) + void * PyArray_GetPtr (ndarray, npy_intp*) + int PyArray_CompareLists (npy_intp *, npy_intp *, int) + #int PyArray_AsCArray (object*, void *, npy_intp *, int, dtype) + #int PyArray_As1D (object*, char **, int *, int) + #int PyArray_As2D (object*, char ***, int *, int *, int) + int PyArray_Free (object, void *) + #int PyArray_Converter (object, object*) + int PyArray_IntpFromSequence (object, npy_intp *, int) + object PyArray_Concatenate (object, int) + object PyArray_InnerProduct (object, object) + object PyArray_MatrixProduct (object, object) + object PyArray_CopyAndTranspose (object) + object PyArray_Correlate (object, object, int) + int PyArray_TypestrConvert (int, int) + #int PyArray_DescrConverter (object, dtype*) + #int PyArray_DescrConverter2 (object, dtype*) + int PyArray_IntpConverter (object, PyArray_Dims *) + #int PyArray_BufferConverter (object, chunk) + int PyArray_AxisConverter (object, int *) + int PyArray_BoolConverter (object, npy_bool *) + int PyArray_ByteorderConverter (object, char *) + int PyArray_OrderConverter (object, NPY_ORDER *) + unsigned char PyArray_EquivTypes (dtype, dtype) + #object PyArray_Zeros (int, npy_intp *, dtype, int) + #object PyArray_Empty (int, npy_intp *, dtype, int) + object PyArray_Where (object, object, object) + object PyArray_Arange (double, double, double, int) + #object PyArray_ArangeObj (object, object, object, dtype) + int PyArray_SortkindConverter (object, NPY_SORTKIND *) + object PyArray_LexSort (object, int) + object PyArray_Round (ndarray, int, ndarray) + unsigned char PyArray_EquivTypenums (int, int) + int PyArray_RegisterDataType (dtype) + int PyArray_RegisterCastFunc (dtype, int, PyArray_VectorUnaryFunc *) + int PyArray_RegisterCanCast (dtype, int, NPY_SCALARKIND) + #void PyArray_InitArrFuncs (PyArray_ArrFuncs *) + object PyArray_IntTupleFromIntp (int, npy_intp *) + int PyArray_TypeNumFromName (char *) + int PyArray_ClipmodeConverter (object, NPY_CLIPMODE *) + #int PyArray_OutputConverter (object, ndarray*) + object PyArray_BroadcastToShape (object, npy_intp *, int) + void _PyArray_SigintHandler (int) + void* _PyArray_GetSigintBuf () + #int PyArray_DescrAlignConverter (object, dtype*) + #int PyArray_DescrAlignConverter2 (object, dtype*) + int PyArray_SearchsideConverter (object, void *) + object PyArray_CheckAxis (ndarray, int *, int) + npy_intp PyArray_OverflowMultiplyList (npy_intp *, int) + int PyArray_CompareString (char *, char *, size_t) + int PyArray_SetBaseObject(ndarray, base) # NOTE: steals a reference to base! Use "set_array_base()" instead. + + +# Typedefs that matches the runtime dtype objects in +# the numpy module. + +# The ones that are commented out needs an IFDEF function +# in Cython to enable them only on the right systems. + +ctypedef npy_int8 int8_t +ctypedef npy_int16 int16_t +ctypedef npy_int32 int32_t +ctypedef npy_int64 int64_t +#ctypedef npy_int96 int96_t +#ctypedef npy_int128 int128_t + +ctypedef npy_uint8 uint8_t +ctypedef npy_uint16 uint16_t +ctypedef npy_uint32 uint32_t +ctypedef npy_uint64 uint64_t +#ctypedef npy_uint96 uint96_t +#ctypedef npy_uint128 uint128_t + +ctypedef npy_float32 float32_t +ctypedef npy_float64 float64_t +#ctypedef npy_float80 float80_t +#ctypedef npy_float128 float128_t + +ctypedef float complex complex64_t +ctypedef double complex complex128_t + +# The int types are mapped a bit surprising -- +# numpy.int corresponds to 'l' and numpy.long to 'q' +ctypedef npy_long int_t +ctypedef npy_longlong long_t +ctypedef npy_longlong longlong_t + +ctypedef npy_ulong uint_t +ctypedef npy_ulonglong ulong_t +ctypedef npy_ulonglong ulonglong_t + +ctypedef npy_intp intp_t +ctypedef npy_uintp uintp_t + +ctypedef npy_double float_t +ctypedef npy_double double_t +ctypedef npy_longdouble longdouble_t + +ctypedef npy_cfloat cfloat_t +ctypedef npy_cdouble cdouble_t +ctypedef npy_clongdouble clongdouble_t + +ctypedef npy_cdouble complex_t + +cdef inline object PyArray_MultiIterNew1(a): + return PyArray_MultiIterNew(1, a) + +cdef inline object PyArray_MultiIterNew2(a, b): + return PyArray_MultiIterNew(2, a, b) + +cdef inline object PyArray_MultiIterNew3(a, b, c): + return PyArray_MultiIterNew(3, a, b, c) + +cdef inline object PyArray_MultiIterNew4(a, b, c, d): + return PyArray_MultiIterNew(4, a, b, c, d) + +cdef inline object PyArray_MultiIterNew5(a, b, c, d, e): + return PyArray_MultiIterNew(5, a, b, c, d, e) + +cdef inline tuple PyDataType_SHAPE(dtype d): + if PyDataType_HASSUBARRAY(d): + return d.subarray.shape + else: + return () + + +cdef extern from "numpy/ndarrayobject.h": + PyTypeObject PyTimedeltaArrType_Type + PyTypeObject PyDatetimeArrType_Type + ctypedef int64_t npy_timedelta + ctypedef int64_t npy_datetime + +cdef extern from "numpy/ndarraytypes.h": + ctypedef struct PyArray_DatetimeMetaData: + NPY_DATETIMEUNIT base + int64_t num + +cdef extern from "numpy/arrayscalars.h": + + # abstract types + ctypedef class numpy.generic [object PyObject]: + pass + ctypedef class numpy.number [object PyObject]: + pass + ctypedef class numpy.integer [object PyObject]: + pass + ctypedef class numpy.signedinteger [object PyObject]: + pass + ctypedef class numpy.unsignedinteger [object PyObject]: + pass + ctypedef class numpy.inexact [object PyObject]: + pass + ctypedef class numpy.floating [object PyObject]: + pass + ctypedef class numpy.complexfloating [object PyObject]: + pass + ctypedef class numpy.flexible [object PyObject]: + pass + ctypedef class numpy.character [object PyObject]: + pass + + ctypedef struct PyDatetimeScalarObject: + # PyObject_HEAD + npy_datetime obval + PyArray_DatetimeMetaData obmeta + + ctypedef struct PyTimedeltaScalarObject: + # PyObject_HEAD + npy_timedelta obval + PyArray_DatetimeMetaData obmeta + + ctypedef enum NPY_DATETIMEUNIT: + NPY_FR_Y + NPY_FR_M + NPY_FR_W + NPY_FR_D + NPY_FR_B + NPY_FR_h + NPY_FR_m + NPY_FR_s + NPY_FR_ms + NPY_FR_us + NPY_FR_ns + NPY_FR_ps + NPY_FR_fs + NPY_FR_as + + +# +# ufunc API +# + +cdef extern from "numpy/ufuncobject.h": + + ctypedef void (*PyUFuncGenericFunction) (char **, npy_intp *, npy_intp *, void *) + + ctypedef class numpy.ufunc [object PyUFuncObject, check_size ignore]: + cdef: + int nin, nout, nargs + int identity + PyUFuncGenericFunction *functions + void **data + int ntypes + int check_return + char *name + char *types + char *doc + void *ptr + PyObject *obj + PyObject *userloops + + cdef enum: + PyUFunc_Zero + PyUFunc_One + PyUFunc_None + UFUNC_ERR_IGNORE + UFUNC_ERR_WARN + UFUNC_ERR_RAISE + UFUNC_ERR_CALL + UFUNC_ERR_PRINT + UFUNC_ERR_LOG + UFUNC_MASK_DIVIDEBYZERO + UFUNC_MASK_OVERFLOW + UFUNC_MASK_UNDERFLOW + UFUNC_MASK_INVALID + UFUNC_SHIFT_DIVIDEBYZERO + UFUNC_SHIFT_OVERFLOW + UFUNC_SHIFT_UNDERFLOW + UFUNC_SHIFT_INVALID + UFUNC_FPE_DIVIDEBYZERO + UFUNC_FPE_OVERFLOW + UFUNC_FPE_UNDERFLOW + UFUNC_FPE_INVALID + UFUNC_ERR_DEFAULT + UFUNC_ERR_DEFAULT2 + + object PyUFunc_FromFuncAndData(PyUFuncGenericFunction *, + void **, char *, int, int, int, int, char *, char *, int) + int PyUFunc_RegisterLoopForType(ufunc, int, + PyUFuncGenericFunction, int *, void *) + void PyUFunc_f_f_As_d_d \ + (char **, npy_intp *, npy_intp *, void *) + void PyUFunc_d_d \ + (char **, npy_intp *, npy_intp *, void *) + void PyUFunc_f_f \ + (char **, npy_intp *, npy_intp *, void *) + void PyUFunc_g_g \ + (char **, npy_intp *, npy_intp *, void *) + void PyUFunc_F_F_As_D_D \ + (char **, npy_intp *, npy_intp *, void *) + void PyUFunc_F_F \ + (char **, npy_intp *, npy_intp *, void *) + void PyUFunc_D_D \ + (char **, npy_intp *, npy_intp *, void *) + void PyUFunc_G_G \ + (char **, npy_intp *, npy_intp *, void *) + void PyUFunc_O_O \ + (char **, npy_intp *, npy_intp *, void *) + void PyUFunc_ff_f_As_dd_d \ + (char **, npy_intp *, npy_intp *, void *) + void PyUFunc_ff_f \ + (char **, npy_intp *, npy_intp *, void *) + void PyUFunc_dd_d \ + (char **, npy_intp *, npy_intp *, void *) + void PyUFunc_gg_g \ + (char **, npy_intp *, npy_intp *, void *) + void PyUFunc_FF_F_As_DD_D \ + (char **, npy_intp *, npy_intp *, void *) + void PyUFunc_DD_D \ + (char **, npy_intp *, npy_intp *, void *) + void PyUFunc_FF_F \ + (char **, npy_intp *, npy_intp *, void *) + void PyUFunc_GG_G \ + (char **, npy_intp *, npy_intp *, void *) + void PyUFunc_OO_O \ + (char **, npy_intp *, npy_intp *, void *) + void PyUFunc_O_O_method \ + (char **, npy_intp *, npy_intp *, void *) + void PyUFunc_OO_O_method \ + (char **, npy_intp *, npy_intp *, void *) + void PyUFunc_On_Om \ + (char **, npy_intp *, npy_intp *, void *) + int PyUFunc_GetPyValues \ + (char *, int *, int *, PyObject **) + int PyUFunc_checkfperr \ + (int, PyObject *, int *) + void PyUFunc_clearfperr() + int PyUFunc_getfperr() + int PyUFunc_handlefperr \ + (int, PyObject *, int, int *) + int PyUFunc_ReplaceLoopBySignature \ + (ufunc, PyUFuncGenericFunction, int *, PyUFuncGenericFunction *) + object PyUFunc_FromFuncAndDataAndSignature \ + (PyUFuncGenericFunction *, void **, char *, int, int, int, + int, char *, char *, int, char *) + + int _import_umath() except -1 + +cdef inline void set_array_base(ndarray arr, object base): + Py_INCREF(base) # important to do this before stealing the reference below! + PyArray_SetBaseObject(arr, base) + +cdef inline object get_array_base(ndarray arr): + base = PyArray_BASE(arr) + if base is NULL: + return None + return base + +# Versions of the import_* functions which are more suitable for +# Cython code. +cdef inline int import_array() except -1: + try: + __pyx_import_array() + except Exception: + raise ImportError("numpy.core.multiarray failed to import") + +cdef inline int import_umath() except -1: + try: + _import_umath() + except Exception: + raise ImportError("numpy.core.umath failed to import") + +cdef inline int import_ufunc() except -1: + try: + _import_umath() + except Exception: + raise ImportError("numpy.core.umath failed to import") + + +cdef inline bint is_timedelta64_object(object obj): + """ + Cython equivalent of `isinstance(obj, np.timedelta64)` + + Parameters + ---------- + obj : object + + Returns + ------- + bool + """ + return PyObject_TypeCheck(obj, &PyTimedeltaArrType_Type) + + +cdef inline bint is_datetime64_object(object obj): + """ + Cython equivalent of `isinstance(obj, np.datetime64)` + + Parameters + ---------- + obj : object + + Returns + ------- + bool + """ + return PyObject_TypeCheck(obj, &PyDatetimeArrType_Type) + + +cdef inline npy_datetime get_datetime64_value(object obj) nogil: + """ + returns the int64 value underlying scalar numpy datetime64 object + + Note that to interpret this as a datetime, the corresponding unit is + also needed. That can be found using `get_datetime64_unit`. + """ + return (obj).obval + + +cdef inline npy_timedelta get_timedelta64_value(object obj) nogil: + """ + returns the int64 value underlying scalar numpy timedelta64 object + """ + return (obj).obval + + +cdef inline NPY_DATETIMEUNIT get_datetime64_unit(object obj) nogil: + """ + returns the unit part of the dtype for a numpy datetime64 object. + """ + return (obj).obmeta.base diff --git a/EXE version/main/numpy/__init__.pxd b/EXE version/main/numpy/__init__.pxd new file mode 100644 index 00000000..97f3da2e --- /dev/null +++ b/EXE version/main/numpy/__init__.pxd @@ -0,0 +1,1018 @@ +# NumPy static imports for Cython < 3.0 +# +# If any of the PyArray_* functions are called, import_array must be +# called first. +# +# Author: Dag Sverre Seljebotn +# + +DEF _buffer_format_string_len = 255 + +cimport cpython.buffer as pybuf +from cpython.ref cimport Py_INCREF +from cpython.mem cimport PyObject_Malloc, PyObject_Free +from cpython.object cimport PyObject, PyTypeObject +from cpython.buffer cimport PyObject_GetBuffer +from cpython.type cimport type +cimport libc.stdio as stdio + +cdef extern from "Python.h": + ctypedef int Py_intptr_t + bint PyObject_TypeCheck(object obj, PyTypeObject* type) + +cdef extern from "numpy/arrayobject.h": + ctypedef Py_intptr_t npy_intp + ctypedef size_t npy_uintp + + cdef enum NPY_TYPES: + NPY_BOOL + NPY_BYTE + NPY_UBYTE + NPY_SHORT + NPY_USHORT + NPY_INT + NPY_UINT + NPY_LONG + NPY_ULONG + NPY_LONGLONG + NPY_ULONGLONG + NPY_FLOAT + NPY_DOUBLE + NPY_LONGDOUBLE + NPY_CFLOAT + NPY_CDOUBLE + NPY_CLONGDOUBLE + NPY_OBJECT + NPY_STRING + NPY_UNICODE + NPY_VOID + NPY_DATETIME + NPY_TIMEDELTA + NPY_NTYPES + NPY_NOTYPE + + NPY_INT8 + NPY_INT16 + NPY_INT32 + NPY_INT64 + NPY_INT128 + NPY_INT256 + NPY_UINT8 + NPY_UINT16 + NPY_UINT32 + NPY_UINT64 + NPY_UINT128 + NPY_UINT256 + NPY_FLOAT16 + NPY_FLOAT32 + NPY_FLOAT64 + NPY_FLOAT80 + NPY_FLOAT96 + NPY_FLOAT128 + NPY_FLOAT256 + NPY_COMPLEX32 + NPY_COMPLEX64 + NPY_COMPLEX128 + NPY_COMPLEX160 + NPY_COMPLEX192 + NPY_COMPLEX256 + NPY_COMPLEX512 + + NPY_INTP + + ctypedef enum NPY_ORDER: + NPY_ANYORDER + NPY_CORDER + NPY_FORTRANORDER + NPY_KEEPORDER + + ctypedef enum NPY_CASTING: + NPY_NO_CASTING + NPY_EQUIV_CASTING + NPY_SAFE_CASTING + NPY_SAME_KIND_CASTING + NPY_UNSAFE_CASTING + + ctypedef enum NPY_CLIPMODE: + NPY_CLIP + NPY_WRAP + NPY_RAISE + + ctypedef enum NPY_SCALARKIND: + NPY_NOSCALAR, + NPY_BOOL_SCALAR, + NPY_INTPOS_SCALAR, + NPY_INTNEG_SCALAR, + NPY_FLOAT_SCALAR, + NPY_COMPLEX_SCALAR, + NPY_OBJECT_SCALAR + + ctypedef enum NPY_SORTKIND: + NPY_QUICKSORT + NPY_HEAPSORT + NPY_MERGESORT + + ctypedef enum NPY_SEARCHSIDE: + NPY_SEARCHLEFT + NPY_SEARCHRIGHT + + enum: + # DEPRECATED since NumPy 1.7 ! Do not use in new code! + NPY_C_CONTIGUOUS + NPY_F_CONTIGUOUS + NPY_CONTIGUOUS + NPY_FORTRAN + NPY_OWNDATA + NPY_FORCECAST + NPY_ENSURECOPY + NPY_ENSUREARRAY + NPY_ELEMENTSTRIDES + NPY_ALIGNED + NPY_NOTSWAPPED + NPY_WRITEABLE + NPY_UPDATEIFCOPY + NPY_ARR_HAS_DESCR + + NPY_BEHAVED + NPY_BEHAVED_NS + NPY_CARRAY + NPY_CARRAY_RO + NPY_FARRAY + NPY_FARRAY_RO + NPY_DEFAULT + + NPY_IN_ARRAY + NPY_OUT_ARRAY + NPY_INOUT_ARRAY + NPY_IN_FARRAY + NPY_OUT_FARRAY + NPY_INOUT_FARRAY + + NPY_UPDATE_ALL + + enum: + # Added in NumPy 1.7 to replace the deprecated enums above. + NPY_ARRAY_C_CONTIGUOUS + NPY_ARRAY_F_CONTIGUOUS + NPY_ARRAY_OWNDATA + NPY_ARRAY_FORCECAST + NPY_ARRAY_ENSURECOPY + NPY_ARRAY_ENSUREARRAY + NPY_ARRAY_ELEMENTSTRIDES + NPY_ARRAY_ALIGNED + NPY_ARRAY_NOTSWAPPED + NPY_ARRAY_WRITEABLE + NPY_ARRAY_UPDATEIFCOPY + + NPY_ARRAY_BEHAVED + NPY_ARRAY_BEHAVED_NS + NPY_ARRAY_CARRAY + NPY_ARRAY_CARRAY_RO + NPY_ARRAY_FARRAY + NPY_ARRAY_FARRAY_RO + NPY_ARRAY_DEFAULT + + NPY_ARRAY_IN_ARRAY + NPY_ARRAY_OUT_ARRAY + NPY_ARRAY_INOUT_ARRAY + NPY_ARRAY_IN_FARRAY + NPY_ARRAY_OUT_FARRAY + NPY_ARRAY_INOUT_FARRAY + + NPY_ARRAY_UPDATE_ALL + + cdef enum: + NPY_MAXDIMS + + npy_intp NPY_MAX_ELSIZE + + ctypedef void (*PyArray_VectorUnaryFunc)(void *, void *, npy_intp, void *, void *) + + ctypedef struct PyArray_ArrayDescr: + # shape is a tuple, but Cython doesn't support "tuple shape" + # inside a non-PyObject declaration, so we have to declare it + # as just a PyObject*. + PyObject* shape + + ctypedef struct PyArray_Descr: + pass + + ctypedef class numpy.dtype [object PyArray_Descr, check_size ignore]: + # Use PyDataType_* macros when possible, however there are no macros + # for accessing some of the fields, so some are defined. + cdef PyTypeObject* typeobj + cdef char kind + cdef char type + # Numpy sometimes mutates this without warning (e.g. it'll + # sometimes change "|" to "<" in shared dtype objects on + # little-endian machines). If this matters to you, use + # PyArray_IsNativeByteOrder(dtype.byteorder) instead of + # directly accessing this field. + cdef char byteorder + cdef char flags + cdef int type_num + cdef int itemsize "elsize" + cdef int alignment + cdef object fields + cdef tuple names + # Use PyDataType_HASSUBARRAY to test whether this field is + # valid (the pointer can be NULL). Most users should access + # this field via the inline helper method PyDataType_SHAPE. + cdef PyArray_ArrayDescr* subarray + + ctypedef class numpy.flatiter [object PyArrayIterObject, check_size ignore]: + # Use through macros + pass + + ctypedef class numpy.broadcast [object PyArrayMultiIterObject, check_size ignore]: + cdef int numiter + cdef npy_intp size, index + cdef int nd + cdef npy_intp *dimensions + cdef void **iters + + ctypedef struct PyArrayObject: + # For use in situations where ndarray can't replace PyArrayObject*, + # like PyArrayObject**. + pass + + ctypedef class numpy.ndarray [object PyArrayObject, check_size ignore]: + cdef __cythonbufferdefaults__ = {"mode": "strided"} + + cdef: + # Only taking a few of the most commonly used and stable fields. + # One should use PyArray_* macros instead to access the C fields. + char *data + int ndim "nd" + npy_intp *shape "dimensions" + npy_intp *strides + dtype descr # deprecated since NumPy 1.7 ! + PyObject* base # NOT PUBLIC, DO NOT USE ! + + + + ctypedef unsigned char npy_bool + + ctypedef signed char npy_byte + ctypedef signed short npy_short + ctypedef signed int npy_int + ctypedef signed long npy_long + ctypedef signed long long npy_longlong + + ctypedef unsigned char npy_ubyte + ctypedef unsigned short npy_ushort + ctypedef unsigned int npy_uint + ctypedef unsigned long npy_ulong + ctypedef unsigned long long npy_ulonglong + + ctypedef float npy_float + ctypedef double npy_double + ctypedef long double npy_longdouble + + ctypedef signed char npy_int8 + ctypedef signed short npy_int16 + ctypedef signed int npy_int32 + ctypedef signed long long npy_int64 + ctypedef signed long long npy_int96 + ctypedef signed long long npy_int128 + + ctypedef unsigned char npy_uint8 + ctypedef unsigned short npy_uint16 + ctypedef unsigned int npy_uint32 + ctypedef unsigned long long npy_uint64 + ctypedef unsigned long long npy_uint96 + ctypedef unsigned long long npy_uint128 + + ctypedef float npy_float32 + ctypedef double npy_float64 + ctypedef long double npy_float80 + ctypedef long double npy_float96 + ctypedef long double npy_float128 + + ctypedef struct npy_cfloat: + float real + float imag + + ctypedef struct npy_cdouble: + double real + double imag + + ctypedef struct npy_clongdouble: + long double real + long double imag + + ctypedef struct npy_complex64: + float real + float imag + + ctypedef struct npy_complex128: + double real + double imag + + ctypedef struct npy_complex160: + long double real + long double imag + + ctypedef struct npy_complex192: + long double real + long double imag + + ctypedef struct npy_complex256: + long double real + long double imag + + ctypedef struct PyArray_Dims: + npy_intp *ptr + int len + + int _import_array() except -1 + # A second definition so _import_array isn't marked as used when we use it here. + # Do not use - subject to change any time. + int __pyx_import_array "_import_array"() except -1 + + # + # Macros from ndarrayobject.h + # + bint PyArray_CHKFLAGS(ndarray m, int flags) nogil + bint PyArray_IS_C_CONTIGUOUS(ndarray arr) nogil + bint PyArray_IS_F_CONTIGUOUS(ndarray arr) nogil + bint PyArray_ISCONTIGUOUS(ndarray m) nogil + bint PyArray_ISWRITEABLE(ndarray m) nogil + bint PyArray_ISALIGNED(ndarray m) nogil + + int PyArray_NDIM(ndarray) nogil + bint PyArray_ISONESEGMENT(ndarray) nogil + bint PyArray_ISFORTRAN(ndarray) nogil + int PyArray_FORTRANIF(ndarray) nogil + + void* PyArray_DATA(ndarray) nogil + char* PyArray_BYTES(ndarray) nogil + + npy_intp* PyArray_DIMS(ndarray) nogil + npy_intp* PyArray_STRIDES(ndarray) nogil + npy_intp PyArray_DIM(ndarray, size_t) nogil + npy_intp PyArray_STRIDE(ndarray, size_t) nogil + + PyObject *PyArray_BASE(ndarray) nogil # returns borrowed reference! + PyArray_Descr *PyArray_DESCR(ndarray) nogil # returns borrowed reference to dtype! + int PyArray_FLAGS(ndarray) nogil + npy_intp PyArray_ITEMSIZE(ndarray) nogil + int PyArray_TYPE(ndarray arr) nogil + + object PyArray_GETITEM(ndarray arr, void *itemptr) + int PyArray_SETITEM(ndarray arr, void *itemptr, object obj) + + bint PyTypeNum_ISBOOL(int) nogil + bint PyTypeNum_ISUNSIGNED(int) nogil + bint PyTypeNum_ISSIGNED(int) nogil + bint PyTypeNum_ISINTEGER(int) nogil + bint PyTypeNum_ISFLOAT(int) nogil + bint PyTypeNum_ISNUMBER(int) nogil + bint PyTypeNum_ISSTRING(int) nogil + bint PyTypeNum_ISCOMPLEX(int) nogil + bint PyTypeNum_ISPYTHON(int) nogil + bint PyTypeNum_ISFLEXIBLE(int) nogil + bint PyTypeNum_ISUSERDEF(int) nogil + bint PyTypeNum_ISEXTENDED(int) nogil + bint PyTypeNum_ISOBJECT(int) nogil + + bint PyDataType_ISBOOL(dtype) nogil + bint PyDataType_ISUNSIGNED(dtype) nogil + bint PyDataType_ISSIGNED(dtype) nogil + bint PyDataType_ISINTEGER(dtype) nogil + bint PyDataType_ISFLOAT(dtype) nogil + bint PyDataType_ISNUMBER(dtype) nogil + bint PyDataType_ISSTRING(dtype) nogil + bint PyDataType_ISCOMPLEX(dtype) nogil + bint PyDataType_ISPYTHON(dtype) nogil + bint PyDataType_ISFLEXIBLE(dtype) nogil + bint PyDataType_ISUSERDEF(dtype) nogil + bint PyDataType_ISEXTENDED(dtype) nogil + bint PyDataType_ISOBJECT(dtype) nogil + bint PyDataType_HASFIELDS(dtype) nogil + bint PyDataType_HASSUBARRAY(dtype) nogil + + bint PyArray_ISBOOL(ndarray) nogil + bint PyArray_ISUNSIGNED(ndarray) nogil + bint PyArray_ISSIGNED(ndarray) nogil + bint PyArray_ISINTEGER(ndarray) nogil + bint PyArray_ISFLOAT(ndarray) nogil + bint PyArray_ISNUMBER(ndarray) nogil + bint PyArray_ISSTRING(ndarray) nogil + bint PyArray_ISCOMPLEX(ndarray) nogil + bint PyArray_ISPYTHON(ndarray) nogil + bint PyArray_ISFLEXIBLE(ndarray) nogil + bint PyArray_ISUSERDEF(ndarray) nogil + bint PyArray_ISEXTENDED(ndarray) nogil + bint PyArray_ISOBJECT(ndarray) nogil + bint PyArray_HASFIELDS(ndarray) nogil + + bint PyArray_ISVARIABLE(ndarray) nogil + + bint PyArray_SAFEALIGNEDCOPY(ndarray) nogil + bint PyArray_ISNBO(char) nogil # works on ndarray.byteorder + bint PyArray_IsNativeByteOrder(char) nogil # works on ndarray.byteorder + bint PyArray_ISNOTSWAPPED(ndarray) nogil + bint PyArray_ISBYTESWAPPED(ndarray) nogil + + bint PyArray_FLAGSWAP(ndarray, int) nogil + + bint PyArray_ISCARRAY(ndarray) nogil + bint PyArray_ISCARRAY_RO(ndarray) nogil + bint PyArray_ISFARRAY(ndarray) nogil + bint PyArray_ISFARRAY_RO(ndarray) nogil + bint PyArray_ISBEHAVED(ndarray) nogil + bint PyArray_ISBEHAVED_RO(ndarray) nogil + + + bint PyDataType_ISNOTSWAPPED(dtype) nogil + bint PyDataType_ISBYTESWAPPED(dtype) nogil + + bint PyArray_DescrCheck(object) + + bint PyArray_Check(object) + bint PyArray_CheckExact(object) + + # Cannot be supported due to out arg: + # bint PyArray_HasArrayInterfaceType(object, dtype, object, object&) + # bint PyArray_HasArrayInterface(op, out) + + + bint PyArray_IsZeroDim(object) + # Cannot be supported due to ## ## in macro: + # bint PyArray_IsScalar(object, verbatim work) + bint PyArray_CheckScalar(object) + bint PyArray_IsPythonNumber(object) + bint PyArray_IsPythonScalar(object) + bint PyArray_IsAnyScalar(object) + bint PyArray_CheckAnyScalar(object) + + ndarray PyArray_GETCONTIGUOUS(ndarray) + bint PyArray_SAMESHAPE(ndarray, ndarray) nogil + npy_intp PyArray_SIZE(ndarray) nogil + npy_intp PyArray_NBYTES(ndarray) nogil + + object PyArray_FROM_O(object) + object PyArray_FROM_OF(object m, int flags) + object PyArray_FROM_OT(object m, int type) + object PyArray_FROM_OTF(object m, int type, int flags) + object PyArray_FROMANY(object m, int type, int min, int max, int flags) + object PyArray_ZEROS(int nd, npy_intp* dims, int type, int fortran) + object PyArray_EMPTY(int nd, npy_intp* dims, int type, int fortran) + void PyArray_FILLWBYTE(object, int val) + npy_intp PyArray_REFCOUNT(object) + object PyArray_ContiguousFromAny(op, int, int min_depth, int max_depth) + unsigned char PyArray_EquivArrTypes(ndarray a1, ndarray a2) + bint PyArray_EquivByteorders(int b1, int b2) nogil + object PyArray_SimpleNew(int nd, npy_intp* dims, int typenum) + object PyArray_SimpleNewFromData(int nd, npy_intp* dims, int typenum, void* data) + #object PyArray_SimpleNewFromDescr(int nd, npy_intp* dims, dtype descr) + object PyArray_ToScalar(void* data, ndarray arr) + + void* PyArray_GETPTR1(ndarray m, npy_intp i) nogil + void* PyArray_GETPTR2(ndarray m, npy_intp i, npy_intp j) nogil + void* PyArray_GETPTR3(ndarray m, npy_intp i, npy_intp j, npy_intp k) nogil + void* PyArray_GETPTR4(ndarray m, npy_intp i, npy_intp j, npy_intp k, npy_intp l) nogil + + void PyArray_XDECREF_ERR(ndarray) + # Cannot be supported due to out arg + # void PyArray_DESCR_REPLACE(descr) + + + object PyArray_Copy(ndarray) + object PyArray_FromObject(object op, int type, int min_depth, int max_depth) + object PyArray_ContiguousFromObject(object op, int type, int min_depth, int max_depth) + object PyArray_CopyFromObject(object op, int type, int min_depth, int max_depth) + + object PyArray_Cast(ndarray mp, int type_num) + object PyArray_Take(ndarray ap, object items, int axis) + object PyArray_Put(ndarray ap, object items, object values) + + void PyArray_ITER_RESET(flatiter it) nogil + void PyArray_ITER_NEXT(flatiter it) nogil + void PyArray_ITER_GOTO(flatiter it, npy_intp* destination) nogil + void PyArray_ITER_GOTO1D(flatiter it, npy_intp ind) nogil + void* PyArray_ITER_DATA(flatiter it) nogil + bint PyArray_ITER_NOTDONE(flatiter it) nogil + + void PyArray_MultiIter_RESET(broadcast multi) nogil + void PyArray_MultiIter_NEXT(broadcast multi) nogil + void PyArray_MultiIter_GOTO(broadcast multi, npy_intp dest) nogil + void PyArray_MultiIter_GOTO1D(broadcast multi, npy_intp ind) nogil + void* PyArray_MultiIter_DATA(broadcast multi, npy_intp i) nogil + void PyArray_MultiIter_NEXTi(broadcast multi, npy_intp i) nogil + bint PyArray_MultiIter_NOTDONE(broadcast multi) nogil + + # Functions from __multiarray_api.h + + # Functions taking dtype and returning object/ndarray are disabled + # for now as they steal dtype references. I'm conservative and disable + # more than is probably needed until it can be checked further. + int PyArray_SetNumericOps (object) + object PyArray_GetNumericOps () + int PyArray_INCREF (ndarray) + int PyArray_XDECREF (ndarray) + void PyArray_SetStringFunction (object, int) + dtype PyArray_DescrFromType (int) + object PyArray_TypeObjectFromType (int) + char * PyArray_Zero (ndarray) + char * PyArray_One (ndarray) + #object PyArray_CastToType (ndarray, dtype, int) + int PyArray_CastTo (ndarray, ndarray) + int PyArray_CastAnyTo (ndarray, ndarray) + int PyArray_CanCastSafely (int, int) + npy_bool PyArray_CanCastTo (dtype, dtype) + int PyArray_ObjectType (object, int) + dtype PyArray_DescrFromObject (object, dtype) + #ndarray* PyArray_ConvertToCommonType (object, int *) + dtype PyArray_DescrFromScalar (object) + dtype PyArray_DescrFromTypeObject (object) + npy_intp PyArray_Size (object) + #object PyArray_Scalar (void *, dtype, object) + #object PyArray_FromScalar (object, dtype) + void PyArray_ScalarAsCtype (object, void *) + #int PyArray_CastScalarToCtype (object, void *, dtype) + #int PyArray_CastScalarDirect (object, dtype, void *, int) + object PyArray_ScalarFromObject (object) + #PyArray_VectorUnaryFunc * PyArray_GetCastFunc (dtype, int) + object PyArray_FromDims (int, int *, int) + #object PyArray_FromDimsAndDataAndDescr (int, int *, dtype, char *) + #object PyArray_FromAny (object, dtype, int, int, int, object) + object PyArray_EnsureArray (object) + object PyArray_EnsureAnyArray (object) + #object PyArray_FromFile (stdio.FILE *, dtype, npy_intp, char *) + #object PyArray_FromString (char *, npy_intp, dtype, npy_intp, char *) + #object PyArray_FromBuffer (object, dtype, npy_intp, npy_intp) + #object PyArray_FromIter (object, dtype, npy_intp) + object PyArray_Return (ndarray) + #object PyArray_GetField (ndarray, dtype, int) + #int PyArray_SetField (ndarray, dtype, int, object) + object PyArray_Byteswap (ndarray, npy_bool) + object PyArray_Resize (ndarray, PyArray_Dims *, int, NPY_ORDER) + int PyArray_MoveInto (ndarray, ndarray) + int PyArray_CopyInto (ndarray, ndarray) + int PyArray_CopyAnyInto (ndarray, ndarray) + int PyArray_CopyObject (ndarray, object) + object PyArray_NewCopy (ndarray, NPY_ORDER) + object PyArray_ToList (ndarray) + object PyArray_ToString (ndarray, NPY_ORDER) + int PyArray_ToFile (ndarray, stdio.FILE *, char *, char *) + int PyArray_Dump (object, object, int) + object PyArray_Dumps (object, int) + int PyArray_ValidType (int) + void PyArray_UpdateFlags (ndarray, int) + object PyArray_New (type, int, npy_intp *, int, npy_intp *, void *, int, int, object) + #object PyArray_NewFromDescr (type, dtype, int, npy_intp *, npy_intp *, void *, int, object) + #dtype PyArray_DescrNew (dtype) + dtype PyArray_DescrNewFromType (int) + double PyArray_GetPriority (object, double) + object PyArray_IterNew (object) + object PyArray_MultiIterNew (int, ...) + + int PyArray_PyIntAsInt (object) + npy_intp PyArray_PyIntAsIntp (object) + int PyArray_Broadcast (broadcast) + void PyArray_FillObjectArray (ndarray, object) + int PyArray_FillWithScalar (ndarray, object) + npy_bool PyArray_CheckStrides (int, int, npy_intp, npy_intp, npy_intp *, npy_intp *) + dtype PyArray_DescrNewByteorder (dtype, char) + object PyArray_IterAllButAxis (object, int *) + #object PyArray_CheckFromAny (object, dtype, int, int, int, object) + #object PyArray_FromArray (ndarray, dtype, int) + object PyArray_FromInterface (object) + object PyArray_FromStructInterface (object) + #object PyArray_FromArrayAttr (object, dtype, object) + #NPY_SCALARKIND PyArray_ScalarKind (int, ndarray*) + int PyArray_CanCoerceScalar (int, int, NPY_SCALARKIND) + object PyArray_NewFlagsObject (object) + npy_bool PyArray_CanCastScalar (type, type) + #int PyArray_CompareUCS4 (npy_ucs4 *, npy_ucs4 *, register size_t) + int PyArray_RemoveSmallest (broadcast) + int PyArray_ElementStrides (object) + void PyArray_Item_INCREF (char *, dtype) + void PyArray_Item_XDECREF (char *, dtype) + object PyArray_FieldNames (object) + object PyArray_Transpose (ndarray, PyArray_Dims *) + object PyArray_TakeFrom (ndarray, object, int, ndarray, NPY_CLIPMODE) + object PyArray_PutTo (ndarray, object, object, NPY_CLIPMODE) + object PyArray_PutMask (ndarray, object, object) + object PyArray_Repeat (ndarray, object, int) + object PyArray_Choose (ndarray, object, ndarray, NPY_CLIPMODE) + int PyArray_Sort (ndarray, int, NPY_SORTKIND) + object PyArray_ArgSort (ndarray, int, NPY_SORTKIND) + object PyArray_SearchSorted (ndarray, object, NPY_SEARCHSIDE, PyObject *) + object PyArray_ArgMax (ndarray, int, ndarray) + object PyArray_ArgMin (ndarray, int, ndarray) + object PyArray_Reshape (ndarray, object) + object PyArray_Newshape (ndarray, PyArray_Dims *, NPY_ORDER) + object PyArray_Squeeze (ndarray) + #object PyArray_View (ndarray, dtype, type) + object PyArray_SwapAxes (ndarray, int, int) + object PyArray_Max (ndarray, int, ndarray) + object PyArray_Min (ndarray, int, ndarray) + object PyArray_Ptp (ndarray, int, ndarray) + object PyArray_Mean (ndarray, int, int, ndarray) + object PyArray_Trace (ndarray, int, int, int, int, ndarray) + object PyArray_Diagonal (ndarray, int, int, int) + object PyArray_Clip (ndarray, object, object, ndarray) + object PyArray_Conjugate (ndarray, ndarray) + object PyArray_Nonzero (ndarray) + object PyArray_Std (ndarray, int, int, ndarray, int) + object PyArray_Sum (ndarray, int, int, ndarray) + object PyArray_CumSum (ndarray, int, int, ndarray) + object PyArray_Prod (ndarray, int, int, ndarray) + object PyArray_CumProd (ndarray, int, int, ndarray) + object PyArray_All (ndarray, int, ndarray) + object PyArray_Any (ndarray, int, ndarray) + object PyArray_Compress (ndarray, object, int, ndarray) + object PyArray_Flatten (ndarray, NPY_ORDER) + object PyArray_Ravel (ndarray, NPY_ORDER) + npy_intp PyArray_MultiplyList (npy_intp *, int) + int PyArray_MultiplyIntList (int *, int) + void * PyArray_GetPtr (ndarray, npy_intp*) + int PyArray_CompareLists (npy_intp *, npy_intp *, int) + #int PyArray_AsCArray (object*, void *, npy_intp *, int, dtype) + #int PyArray_As1D (object*, char **, int *, int) + #int PyArray_As2D (object*, char ***, int *, int *, int) + int PyArray_Free (object, void *) + #int PyArray_Converter (object, object*) + int PyArray_IntpFromSequence (object, npy_intp *, int) + object PyArray_Concatenate (object, int) + object PyArray_InnerProduct (object, object) + object PyArray_MatrixProduct (object, object) + object PyArray_CopyAndTranspose (object) + object PyArray_Correlate (object, object, int) + int PyArray_TypestrConvert (int, int) + #int PyArray_DescrConverter (object, dtype*) + #int PyArray_DescrConverter2 (object, dtype*) + int PyArray_IntpConverter (object, PyArray_Dims *) + #int PyArray_BufferConverter (object, chunk) + int PyArray_AxisConverter (object, int *) + int PyArray_BoolConverter (object, npy_bool *) + int PyArray_ByteorderConverter (object, char *) + int PyArray_OrderConverter (object, NPY_ORDER *) + unsigned char PyArray_EquivTypes (dtype, dtype) + #object PyArray_Zeros (int, npy_intp *, dtype, int) + #object PyArray_Empty (int, npy_intp *, dtype, int) + object PyArray_Where (object, object, object) + object PyArray_Arange (double, double, double, int) + #object PyArray_ArangeObj (object, object, object, dtype) + int PyArray_SortkindConverter (object, NPY_SORTKIND *) + object PyArray_LexSort (object, int) + object PyArray_Round (ndarray, int, ndarray) + unsigned char PyArray_EquivTypenums (int, int) + int PyArray_RegisterDataType (dtype) + int PyArray_RegisterCastFunc (dtype, int, PyArray_VectorUnaryFunc *) + int PyArray_RegisterCanCast (dtype, int, NPY_SCALARKIND) + #void PyArray_InitArrFuncs (PyArray_ArrFuncs *) + object PyArray_IntTupleFromIntp (int, npy_intp *) + int PyArray_TypeNumFromName (char *) + int PyArray_ClipmodeConverter (object, NPY_CLIPMODE *) + #int PyArray_OutputConverter (object, ndarray*) + object PyArray_BroadcastToShape (object, npy_intp *, int) + void _PyArray_SigintHandler (int) + void* _PyArray_GetSigintBuf () + #int PyArray_DescrAlignConverter (object, dtype*) + #int PyArray_DescrAlignConverter2 (object, dtype*) + int PyArray_SearchsideConverter (object, void *) + object PyArray_CheckAxis (ndarray, int *, int) + npy_intp PyArray_OverflowMultiplyList (npy_intp *, int) + int PyArray_CompareString (char *, char *, size_t) + int PyArray_SetBaseObject(ndarray, base) # NOTE: steals a reference to base! Use "set_array_base()" instead. + + +# Typedefs that matches the runtime dtype objects in +# the numpy module. + +# The ones that are commented out needs an IFDEF function +# in Cython to enable them only on the right systems. + +ctypedef npy_int8 int8_t +ctypedef npy_int16 int16_t +ctypedef npy_int32 int32_t +ctypedef npy_int64 int64_t +#ctypedef npy_int96 int96_t +#ctypedef npy_int128 int128_t + +ctypedef npy_uint8 uint8_t +ctypedef npy_uint16 uint16_t +ctypedef npy_uint32 uint32_t +ctypedef npy_uint64 uint64_t +#ctypedef npy_uint96 uint96_t +#ctypedef npy_uint128 uint128_t + +ctypedef npy_float32 float32_t +ctypedef npy_float64 float64_t +#ctypedef npy_float80 float80_t +#ctypedef npy_float128 float128_t + +ctypedef float complex complex64_t +ctypedef double complex complex128_t + +# The int types are mapped a bit surprising -- +# numpy.int corresponds to 'l' and numpy.long to 'q' +ctypedef npy_long int_t +ctypedef npy_longlong long_t +ctypedef npy_longlong longlong_t + +ctypedef npy_ulong uint_t +ctypedef npy_ulonglong ulong_t +ctypedef npy_ulonglong ulonglong_t + +ctypedef npy_intp intp_t +ctypedef npy_uintp uintp_t + +ctypedef npy_double float_t +ctypedef npy_double double_t +ctypedef npy_longdouble longdouble_t + +ctypedef npy_cfloat cfloat_t +ctypedef npy_cdouble cdouble_t +ctypedef npy_clongdouble clongdouble_t + +ctypedef npy_cdouble complex_t + +cdef inline object PyArray_MultiIterNew1(a): + return PyArray_MultiIterNew(1, a) + +cdef inline object PyArray_MultiIterNew2(a, b): + return PyArray_MultiIterNew(2, a, b) + +cdef inline object PyArray_MultiIterNew3(a, b, c): + return PyArray_MultiIterNew(3, a, b, c) + +cdef inline object PyArray_MultiIterNew4(a, b, c, d): + return PyArray_MultiIterNew(4, a, b, c, d) + +cdef inline object PyArray_MultiIterNew5(a, b, c, d, e): + return PyArray_MultiIterNew(5, a, b, c, d, e) + +cdef inline tuple PyDataType_SHAPE(dtype d): + if PyDataType_HASSUBARRAY(d): + return d.subarray.shape + else: + return () + + +cdef extern from "numpy/ndarrayobject.h": + PyTypeObject PyTimedeltaArrType_Type + PyTypeObject PyDatetimeArrType_Type + ctypedef int64_t npy_timedelta + ctypedef int64_t npy_datetime + +cdef extern from "numpy/ndarraytypes.h": + ctypedef struct PyArray_DatetimeMetaData: + NPY_DATETIMEUNIT base + int64_t num + +cdef extern from "numpy/arrayscalars.h": + + # abstract types + ctypedef class numpy.generic [object PyObject]: + pass + ctypedef class numpy.number [object PyObject]: + pass + ctypedef class numpy.integer [object PyObject]: + pass + ctypedef class numpy.signedinteger [object PyObject]: + pass + ctypedef class numpy.unsignedinteger [object PyObject]: + pass + ctypedef class numpy.inexact [object PyObject]: + pass + ctypedef class numpy.floating [object PyObject]: + pass + ctypedef class numpy.complexfloating [object PyObject]: + pass + ctypedef class numpy.flexible [object PyObject]: + pass + ctypedef class numpy.character [object PyObject]: + pass + + ctypedef struct PyDatetimeScalarObject: + # PyObject_HEAD + npy_datetime obval + PyArray_DatetimeMetaData obmeta + + ctypedef struct PyTimedeltaScalarObject: + # PyObject_HEAD + npy_timedelta obval + PyArray_DatetimeMetaData obmeta + + ctypedef enum NPY_DATETIMEUNIT: + NPY_FR_Y + NPY_FR_M + NPY_FR_W + NPY_FR_D + NPY_FR_B + NPY_FR_h + NPY_FR_m + NPY_FR_s + NPY_FR_ms + NPY_FR_us + NPY_FR_ns + NPY_FR_ps + NPY_FR_fs + NPY_FR_as + + +# +# ufunc API +# + +cdef extern from "numpy/ufuncobject.h": + + ctypedef void (*PyUFuncGenericFunction) (char **, npy_intp *, npy_intp *, void *) + + ctypedef class numpy.ufunc [object PyUFuncObject, check_size ignore]: + cdef: + int nin, nout, nargs + int identity + PyUFuncGenericFunction *functions + void **data + int ntypes + int check_return + char *name + char *types + char *doc + void *ptr + PyObject *obj + PyObject *userloops + + cdef enum: + PyUFunc_Zero + PyUFunc_One + PyUFunc_None + UFUNC_ERR_IGNORE + UFUNC_ERR_WARN + UFUNC_ERR_RAISE + UFUNC_ERR_CALL + UFUNC_ERR_PRINT + UFUNC_ERR_LOG + UFUNC_MASK_DIVIDEBYZERO + UFUNC_MASK_OVERFLOW + UFUNC_MASK_UNDERFLOW + UFUNC_MASK_INVALID + UFUNC_SHIFT_DIVIDEBYZERO + UFUNC_SHIFT_OVERFLOW + UFUNC_SHIFT_UNDERFLOW + UFUNC_SHIFT_INVALID + UFUNC_FPE_DIVIDEBYZERO + UFUNC_FPE_OVERFLOW + UFUNC_FPE_UNDERFLOW + UFUNC_FPE_INVALID + UFUNC_ERR_DEFAULT + UFUNC_ERR_DEFAULT2 + + object PyUFunc_FromFuncAndData(PyUFuncGenericFunction *, + void **, char *, int, int, int, int, char *, char *, int) + int PyUFunc_RegisterLoopForType(ufunc, int, + PyUFuncGenericFunction, int *, void *) + void PyUFunc_f_f_As_d_d \ + (char **, npy_intp *, npy_intp *, void *) + void PyUFunc_d_d \ + (char **, npy_intp *, npy_intp *, void *) + void PyUFunc_f_f \ + (char **, npy_intp *, npy_intp *, void *) + void PyUFunc_g_g \ + (char **, npy_intp *, npy_intp *, void *) + void PyUFunc_F_F_As_D_D \ + (char **, npy_intp *, npy_intp *, void *) + void PyUFunc_F_F \ + (char **, npy_intp *, npy_intp *, void *) + void PyUFunc_D_D \ + (char **, npy_intp *, npy_intp *, void *) + void PyUFunc_G_G \ + (char **, npy_intp *, npy_intp *, void *) + void PyUFunc_O_O \ + (char **, npy_intp *, npy_intp *, void *) + void PyUFunc_ff_f_As_dd_d \ + (char **, npy_intp *, npy_intp *, void *) + void PyUFunc_ff_f \ + (char **, npy_intp *, npy_intp *, void *) + void PyUFunc_dd_d \ + (char **, npy_intp *, npy_intp *, void *) + void PyUFunc_gg_g \ + (char **, npy_intp *, npy_intp *, void *) + void PyUFunc_FF_F_As_DD_D \ + (char **, npy_intp *, npy_intp *, void *) + void PyUFunc_DD_D \ + (char **, npy_intp *, npy_intp *, void *) + void PyUFunc_FF_F \ + (char **, npy_intp *, npy_intp *, void *) + void PyUFunc_GG_G \ + (char **, npy_intp *, npy_intp *, void *) + void PyUFunc_OO_O \ + (char **, npy_intp *, npy_intp *, void *) + void PyUFunc_O_O_method \ + (char **, npy_intp *, npy_intp *, void *) + void PyUFunc_OO_O_method \ + (char **, npy_intp *, npy_intp *, void *) + void PyUFunc_On_Om \ + (char **, npy_intp *, npy_intp *, void *) + int PyUFunc_GetPyValues \ + (char *, int *, int *, PyObject **) + int PyUFunc_checkfperr \ + (int, PyObject *, int *) + void PyUFunc_clearfperr() + int PyUFunc_getfperr() + int PyUFunc_handlefperr \ + (int, PyObject *, int, int *) + int PyUFunc_ReplaceLoopBySignature \ + (ufunc, PyUFuncGenericFunction, int *, PyUFuncGenericFunction *) + object PyUFunc_FromFuncAndDataAndSignature \ + (PyUFuncGenericFunction *, void **, char *, int, int, int, + int, char *, char *, int, char *) + + int _import_umath() except -1 + +cdef inline void set_array_base(ndarray arr, object base): + Py_INCREF(base) # important to do this before stealing the reference below! + PyArray_SetBaseObject(arr, base) + +cdef inline object get_array_base(ndarray arr): + base = PyArray_BASE(arr) + if base is NULL: + return None + return base + +# Versions of the import_* functions which are more suitable for +# Cython code. +cdef inline int import_array() except -1: + try: + __pyx_import_array() + except Exception: + raise ImportError("numpy.core.multiarray failed to import") + +cdef inline int import_umath() except -1: + try: + _import_umath() + except Exception: + raise ImportError("numpy.core.umath failed to import") + +cdef inline int import_ufunc() except -1: + try: + _import_umath() + except Exception: + raise ImportError("numpy.core.umath failed to import") + +cdef extern from *: + # Leave a marker that the NumPy declarations came from this file + # See https://github.com/cython/cython/issues/3573 + """ + /* NumPy API declarations from "numpy/__init__.pxd" */ + """ + + +cdef inline bint is_timedelta64_object(object obj): + """ + Cython equivalent of `isinstance(obj, np.timedelta64)` + + Parameters + ---------- + obj : object + + Returns + ------- + bool + """ + return PyObject_TypeCheck(obj, &PyTimedeltaArrType_Type) + + +cdef inline bint is_datetime64_object(object obj): + """ + Cython equivalent of `isinstance(obj, np.datetime64)` + + Parameters + ---------- + obj : object + + Returns + ------- + bool + """ + return PyObject_TypeCheck(obj, &PyDatetimeArrType_Type) + + +cdef inline npy_datetime get_datetime64_value(object obj) nogil: + """ + returns the int64 value underlying scalar numpy datetime64 object + + Note that to interpret this as a datetime, the corresponding unit is + also needed. That can be found using `get_datetime64_unit`. + """ + return (obj).obval + + +cdef inline npy_timedelta get_timedelta64_value(object obj) nogil: + """ + returns the int64 value underlying scalar numpy timedelta64 object + """ + return (obj).obval + + +cdef inline NPY_DATETIMEUNIT get_datetime64_unit(object obj) nogil: + """ + returns the unit part of the dtype for a numpy datetime64 object. + """ + return (obj).obmeta.base diff --git a/EXE version/main/numpy/__init__.pyi b/EXE version/main/numpy/__init__.pyi new file mode 100644 index 00000000..d07e32f1 --- /dev/null +++ b/EXE version/main/numpy/__init__.pyi @@ -0,0 +1,3741 @@ +import builtins +import os +import sys +import mmap +import ctypes as ct +import array as _array +import datetime as dt +from abc import abstractmethod +from types import TracebackType +from contextlib import ContextDecorator + +from numpy.core._internal import _ctypes +from numpy.typing import ( + # Arrays + ArrayLike, + NDArray, + _SupportsArray, + _NestedSequence, + _RecursiveSequence, + _SupportsArray, + _ArrayLikeBool_co, + _ArrayLikeUInt_co, + _ArrayLikeInt_co, + _ArrayLikeFloat_co, + _ArrayLikeComplex_co, + _ArrayLikeNumber_co, + _ArrayLikeTD64_co, + _ArrayLikeDT64_co, + _ArrayLikeObject_co, + + # DTypes + DTypeLike, + _SupportsDType, + _VoidDTypeLike, + + # Shapes + _Shape, + _ShapeLike, + + # Scalars + _CharLike_co, + _BoolLike_co, + _IntLike_co, + _FloatLike_co, + _ComplexLike_co, + _TD64Like_co, + _NumberLike_co, + _ScalarLike_co, + + # `number` precision + NBitBase, + _256Bit, + _128Bit, + _96Bit, + _80Bit, + _64Bit, + _32Bit, + _16Bit, + _8Bit, + _NBitByte, + _NBitShort, + _NBitIntC, + _NBitIntP, + _NBitInt, + _NBitLongLong, + _NBitHalf, + _NBitSingle, + _NBitDouble, + _NBitLongDouble, + + # Character codes + _BoolCodes, + _UInt8Codes, + _UInt16Codes, + _UInt32Codes, + _UInt64Codes, + _Int8Codes, + _Int16Codes, + _Int32Codes, + _Int64Codes, + _Float16Codes, + _Float32Codes, + _Float64Codes, + _Complex64Codes, + _Complex128Codes, + _ByteCodes, + _ShortCodes, + _IntCCodes, + _IntPCodes, + _IntCodes, + _LongLongCodes, + _UByteCodes, + _UShortCodes, + _UIntCCodes, + _UIntPCodes, + _UIntCodes, + _ULongLongCodes, + _HalfCodes, + _SingleCodes, + _DoubleCodes, + _LongDoubleCodes, + _CSingleCodes, + _CDoubleCodes, + _CLongDoubleCodes, + _DT64Codes, + _TD64Codes, + _StrCodes, + _BytesCodes, + _VoidCodes, + _ObjectCodes, + + # Ufuncs + _UFunc_Nin1_Nout1, + _UFunc_Nin2_Nout1, + _UFunc_Nin1_Nout2, + _UFunc_Nin2_Nout2, + _GUFunc_Nin2_Nout1, +) + +from numpy.typing._callable import ( + _BoolOp, + _BoolBitOp, + _BoolSub, + _BoolTrueDiv, + _BoolMod, + _BoolDivMod, + _TD64Div, + _IntTrueDiv, + _UnsignedIntOp, + _UnsignedIntBitOp, + _UnsignedIntMod, + _UnsignedIntDivMod, + _SignedIntOp, + _SignedIntBitOp, + _SignedIntMod, + _SignedIntDivMod, + _FloatOp, + _FloatMod, + _FloatDivMod, + _ComplexOp, + _NumberOp, + _ComparisonOp, +) + +# NOTE: Numpy's mypy plugin is used for removing the types unavailable +# to the specific platform +from numpy.typing._extended_precision import ( + uint128 as uint128, + uint256 as uint256, + int128 as int128, + int256 as int256, + float80 as float80, + float96 as float96, + float128 as float128, + float256 as float256, + complex160 as complex160, + complex192 as complex192, + complex256 as complex256, + complex512 as complex512, +) + +from typing import ( + Any, + ByteString, + Callable, + Container, + Callable, + Dict, + Generic, + IO, + Iterable, + Iterator, + List, + Mapping, + NoReturn, + Optional, + overload, + Sequence, + Sized, + SupportsComplex, + SupportsFloat, + SupportsInt, + Text, + Tuple, + Type, + TypeVar, + Union, +) + +if sys.version_info >= (3, 8): + from typing import Literal as L, Protocol, SupportsIndex, Final +else: + from typing_extensions import Literal as L, Protocol, SupportsIndex, Final + +# Ensures that the stubs are picked up +from numpy import ( + char as char, + ctypeslib as ctypeslib, + fft as fft, + lib as lib, + linalg as linalg, + ma as ma, + matrixlib as matrixlib, + polynomial as polynomial, + random as random, + rec as rec, + testing as testing, + version as version, +) + +from numpy.core.function_base import ( + linspace as linspace, + logspace as logspace, + geomspace as geomspace, +) + +from numpy.core.fromnumeric import ( + take as take, + reshape as reshape, + choose as choose, + repeat as repeat, + put as put, + swapaxes as swapaxes, + transpose as transpose, + partition as partition, + argpartition as argpartition, + sort as sort, + argsort as argsort, + argmax as argmax, + argmin as argmin, + searchsorted as searchsorted, + resize as resize, + squeeze as squeeze, + diagonal as diagonal, + trace as trace, + ravel as ravel, + nonzero as nonzero, + shape as shape, + compress as compress, + clip as clip, + sum as sum, + all as all, + any as any, + cumsum as cumsum, + ptp as ptp, + amax as amax, + amin as amin, + prod as prod, + cumprod as cumprod, + ndim as ndim, + size as size, + around as around, + mean as mean, + std as std, + var as var, +) + +from numpy.core._asarray import ( + asarray as asarray, + asanyarray as asanyarray, + ascontiguousarray as ascontiguousarray, + asfortranarray as asfortranarray, + require as require, +) + +from numpy.core._type_aliases import ( + sctypes as sctypes, + sctypeDict as sctypeDict, +) + +from numpy.core._ufunc_config import ( + seterr as seterr, + geterr as geterr, + setbufsize as setbufsize, + getbufsize as getbufsize, + seterrcall as seterrcall, + geterrcall as geterrcall, + _SupportsWrite, + _ErrKind, + _ErrFunc, + _ErrDictOptional, +) + +from numpy.core.arrayprint import ( + set_printoptions as set_printoptions, + get_printoptions as get_printoptions, + array2string as array2string, + format_float_scientific as format_float_scientific, + format_float_positional as format_float_positional, + array_repr as array_repr, + array_str as array_str, + set_string_function as set_string_function, + printoptions as printoptions, +) + +from numpy.core.einsumfunc import ( + einsum as einsum, + einsum_path as einsum_path, +) + +from numpy.core.numeric import ( + zeros_like as zeros_like, + ones as ones, + ones_like as ones_like, + empty_like as empty_like, + full as full, + full_like as full_like, + count_nonzero as count_nonzero, + isfortran as isfortran, + argwhere as argwhere, + flatnonzero as flatnonzero, + correlate as correlate, + convolve as convolve, + outer as outer, + tensordot as tensordot, + roll as roll, + rollaxis as rollaxis, + moveaxis as moveaxis, + cross as cross, + indices as indices, + fromfunction as fromfunction, + isscalar as isscalar, + binary_repr as binary_repr, + base_repr as base_repr, + identity as identity, + allclose as allclose, + isclose as isclose, + array_equal as array_equal, + array_equiv as array_equiv, +) + +from numpy.core.numerictypes import ( + maximum_sctype as maximum_sctype, + issctype as issctype, + obj2sctype as obj2sctype, + issubclass_ as issubclass_, + issubsctype as issubsctype, + issubdtype as issubdtype, + sctype2char as sctype2char, + find_common_type as find_common_type, + nbytes as nbytes, + cast as cast, + ScalarType as ScalarType, + typecodes as typecodes, +) + +from numpy.core.shape_base import ( + atleast_1d as atleast_1d, + atleast_2d as atleast_2d, + atleast_3d as atleast_3d, + block as block, + hstack as hstack, + stack as stack, + vstack as vstack, +) + +from numpy.lib import ( + emath as emath, +) + +from numpy.lib.arraypad import ( + pad as pad, +) + +from numpy.lib.arraysetops import ( + ediff1d as ediff1d, + intersect1d as intersect1d, + setxor1d as setxor1d, + union1d as union1d, + setdiff1d as setdiff1d, + unique as unique, + in1d as in1d, + isin as isin, +) + +from numpy.lib.arrayterator import ( + Arrayterator as Arrayterator, +) + +from numpy.lib.function_base import ( + select as select, + piecewise as piecewise, + trim_zeros as trim_zeros, + copy as copy, + iterable as iterable, + percentile as percentile, + diff as diff, + gradient as gradient, + angle as angle, + unwrap as unwrap, + sort_complex as sort_complex, + disp as disp, + flip as flip, + rot90 as rot90, + extract as extract, + place as place, + asarray_chkfinite as asarray_chkfinite, + average as average, + bincount as bincount, + digitize as digitize, + cov as cov, + corrcoef as corrcoef, + msort as msort, + median as median, + sinc as sinc, + hamming as hamming, + hanning as hanning, + bartlett as bartlett, + blackman as blackman, + kaiser as kaiser, + trapz as trapz, + i0 as i0, + add_newdoc as add_newdoc, + add_docstring as add_docstring, + meshgrid as meshgrid, + delete as delete, + insert as insert, + append as append, + interp as interp, + add_newdoc_ufunc as add_newdoc_ufunc, + quantile as quantile, +) + +from numpy.lib.index_tricks import ( + ravel_multi_index as ravel_multi_index, + unravel_index as unravel_index, + mgrid as mgrid, + ogrid as ogrid, + r_ as r_, + c_ as c_, + s_ as s_, + index_exp as index_exp, + ix_ as ix_, + fill_diagonal as fill_diagonal, + diag_indices as diag_indices, + diag_indices_from as diag_indices_from, +) + +from numpy.lib.nanfunctions import ( + nansum as nansum, + nanmax as nanmax, + nanmin as nanmin, + nanargmax as nanargmax, + nanargmin as nanargmin, + nanmean as nanmean, + nanmedian as nanmedian, + nanpercentile as nanpercentile, + nanvar as nanvar, + nanstd as nanstd, + nanprod as nanprod, + nancumsum as nancumsum, + nancumprod as nancumprod, + nanquantile as nanquantile, +) + +from numpy.lib.npyio import ( + savetxt as savetxt, + loadtxt as loadtxt, + genfromtxt as genfromtxt, + recfromtxt as recfromtxt, + recfromcsv as recfromcsv, + load as load, + loads as loads, + save as save, + savez as savez, + savez_compressed as savez_compressed, + packbits as packbits, + unpackbits as unpackbits, + fromregex as fromregex, +) + +from numpy.lib.polynomial import ( + poly as poly, + roots as roots, + polyint as polyint, + polyder as polyder, + polyadd as polyadd, + polysub as polysub, + polymul as polymul, + polydiv as polydiv, + polyval as polyval, + polyfit as polyfit, +) + +from numpy.lib.shape_base import ( + column_stack as column_stack, + row_stack as row_stack, + dstack as dstack, + array_split as array_split, + split as split, + hsplit as hsplit, + vsplit as vsplit, + dsplit as dsplit, + apply_over_axes as apply_over_axes, + expand_dims as expand_dims, + apply_along_axis as apply_along_axis, + kron as kron, + tile as tile, + get_array_wrap as get_array_wrap, + take_along_axis as take_along_axis, + put_along_axis as put_along_axis, +) + +from numpy.lib.stride_tricks import ( + broadcast_to as broadcast_to, + broadcast_arrays as broadcast_arrays, + broadcast_shapes as broadcast_shapes, +) + +from numpy.lib.twodim_base import ( + diag as diag, + diagflat as diagflat, + eye as eye, + fliplr as fliplr, + flipud as flipud, + tri as tri, + triu as triu, + tril as tril, + vander as vander, + histogram2d as histogram2d, + mask_indices as mask_indices, + tril_indices as tril_indices, + tril_indices_from as tril_indices_from, + triu_indices as triu_indices, + triu_indices_from as triu_indices_from, +) + +from numpy.lib.type_check import ( + mintypecode as mintypecode, + asfarray as asfarray, + real as real, + imag as imag, + iscomplex as iscomplex, + isreal as isreal, + iscomplexobj as iscomplexobj, + isrealobj as isrealobj, + nan_to_num as nan_to_num, + real_if_close as real_if_close, + typename as typename, + common_type as common_type, +) + +from numpy.lib.ufunclike import ( + fix as fix, + isposinf as isposinf, + isneginf as isneginf, +) + +from numpy.lib.utils import ( + issubclass_ as issubclass_, + issubsctype as issubsctype, + issubdtype as issubdtype, + deprecate as deprecate, + deprecate_with_doc as deprecate_with_doc, + get_include as get_include, + info as info, + source as source, + who as who, + lookfor as lookfor, + byte_bounds as byte_bounds, + safe_eval as safe_eval, +) + +__all__: List[str] +__path__: List[str] +__version__: str +__git_version__: str + +# TODO: Move placeholders to their respective module once +# their annotations are properly implemented +# +# Placeholders for classes +# TODO: Remove `__getattr__` once the classes are stubbed out +class MachAr: + def __init__( + self, + float_conv: Any = ..., + int_conv: Any = ..., + float_to_float: Any = ..., + float_to_str: Any = ..., + title: Any = ..., + ) -> None: ... + def __getattr__(self, key: str) -> Any: ... + +class busdaycalendar: + def __new__(cls, weekmask: Any = ..., holidays: Any = ...) -> Any: ... + def __getattr__(self, key: str) -> Any: ... + +class chararray(ndarray[_ShapeType, _DType_co]): + def __new__( + subtype, + shape: Any, + itemsize: Any = ..., + unicode: Any = ..., + buffer: Any = ..., + offset: Any = ..., + strides: Any = ..., + order: Any = ..., + ) -> Any: ... + def __array_finalize__(self, obj): ... + def argsort(self, axis=..., kind=..., order=...): ... + def capitalize(self): ... + def center(self, width, fillchar=...): ... + def count(self, sub, start=..., end=...): ... + def decode(self, encoding=..., errors=...): ... + def encode(self, encoding=..., errors=...): ... + def endswith(self, suffix, start=..., end=...): ... + def expandtabs(self, tabsize=...): ... + def find(self, sub, start=..., end=...): ... + def index(self, sub, start=..., end=...): ... + def isalnum(self): ... + def isalpha(self): ... + def isdigit(self): ... + def islower(self): ... + def isspace(self): ... + def istitle(self): ... + def isupper(self): ... + def join(self, seq): ... + def ljust(self, width, fillchar=...): ... + def lower(self): ... + def lstrip(self, chars=...): ... + def partition(self, sep): ... + def replace(self, old, new, count=...): ... + def rfind(self, sub, start=..., end=...): ... + def rindex(self, sub, start=..., end=...): ... + def rjust(self, width, fillchar=...): ... + def rpartition(self, sep): ... + def rsplit(self, sep=..., maxsplit=...): ... + def rstrip(self, chars=...): ... + def split(self, sep=..., maxsplit=...): ... + def splitlines(self, keepends=...): ... + def startswith(self, prefix, start=..., end=...): ... + def strip(self, chars=...): ... + def swapcase(self): ... + def title(self): ... + def translate(self, table, deletechars=...): ... + def upper(self): ... + def zfill(self, width): ... + def isnumeric(self): ... + def isdecimal(self): ... + +class finfo: + def __new__(cls, dtype: Any) -> Any: ... + def __getattr__(self, key: str) -> Any: ... + +class format_parser: + def __init__( + self, + formats: Any, + names: Any, + titles: Any, + aligned: Any = ..., + byteorder: Any = ..., + ) -> None: ... + +class iinfo: + def __init__(self, int_type: Any) -> None: ... + def __getattr__(self, key: str) -> Any: ... + +class matrix(ndarray[_ShapeType, _DType_co]): + def __new__( + subtype, + data: Any, + dtype: Any = ..., + copy: Any = ..., + ) -> Any: ... + def __array_finalize__(self, obj): ... + def __getitem__(self, index): ... + def __mul__(self, other): ... + def __rmul__(self, other): ... + def __imul__(self, other): ... + def __pow__(self, other): ... + def __ipow__(self, other): ... + def __rpow__(self, other): ... + def tolist(self): ... + def sum(self, axis=..., dtype=..., out=...): ... + def squeeze(self, axis=...): ... + def flatten(self, order=...): ... + def mean(self, axis=..., dtype=..., out=...): ... + def std(self, axis=..., dtype=..., out=..., ddof=...): ... + def var(self, axis=..., dtype=..., out=..., ddof=...): ... + def prod(self, axis=..., dtype=..., out=...): ... + def any(self, axis=..., out=...): ... + def all(self, axis=..., out=...): ... + def max(self, axis=..., out=...): ... + def argmax(self, axis=..., out=...): ... + def min(self, axis=..., out=...): ... + def argmin(self, axis=..., out=...): ... + def ptp(self, axis=..., out=...): ... + def ravel(self, order=...): ... + @property + def T(self): ... + @property + def I(self): ... + @property + def A(self): ... + @property + def A1(self): ... + @property + def H(self): ... + def getT(self): ... + def getA(self): ... + def getA1(self): ... + def getH(self): ... + def getI(self): ... + +class memmap(ndarray[_ShapeType, _DType_co]): + def __new__( + subtype, + filename: Any, + dtype: Any = ..., + mode: Any = ..., + offset: Any = ..., + shape: Any = ..., + order: Any = ..., + ) -> Any: ... + def __getattr__(self, key: str) -> Any: ... + +class nditer: + def __new__( + cls, + op: Any, + flags: Any = ..., + op_flags: Any = ..., + op_dtypes: Any = ..., + order: Any = ..., + casting: Any = ..., + op_axes: Any = ..., + itershape: Any = ..., + buffersize: Any = ..., + ) -> Any: ... + def __getattr__(self, key: str) -> Any: ... + def __enter__(self) -> nditer: ... + def __exit__( + self, + exc_type: None | Type[BaseException], + exc_value: None | BaseException, + traceback: None | TracebackType, + ) -> None: ... + def __iter__(self) -> Iterator[Any]: ... + def __next__(self) -> Any: ... + def __len__(self) -> int: ... + def __copy__(self) -> nditer: ... + def __getitem__(self, index: SupportsIndex | slice) -> Any: ... + def __setitem__(self, index: SupportsIndex | slice, value: Any) -> None: ... + def __delitem__(self, key: SupportsIndex | slice) -> None: ... + + +class poly1d: + def __init__( + self, + c_or_r: Any, + r: Any = ..., + variable: Any = ..., + ) -> None: ... + def __call__(self, val: Any) -> Any: ... + __hash__: Any + @property + def coeffs(self): ... + @coeffs.setter + def coeffs(self, value): ... + @property + def c(self): ... + @c.setter + def c(self, value): ... + @property + def coef(self): ... + @coef.setter + def coef(self, value): ... + @property + def coefficients(self): ... + @coefficients.setter + def coefficients(self, value): ... + @property + def variable(self): ... + @property + def order(self): ... + @property + def o(self): ... + @property + def roots(self): ... + @property + def r(self): ... + def __array__(self, t=...): ... + def __len__(self): ... + def __neg__(self): ... + def __pos__(self): ... + def __mul__(self, other): ... + def __rmul__(self, other): ... + def __add__(self, other): ... + def __radd__(self, other): ... + def __pow__(self, val): ... + def __sub__(self, other): ... + def __rsub__(self, other): ... + def __div__(self, other): ... + def __truediv__(self, other): ... + def __rdiv__(self, other): ... + def __rtruediv__(self, other): ... + def __eq__(self, other): ... + def __ne__(self, other): ... + def __getitem__(self, val): ... + def __setitem__(self, key, val): ... + def __iter__(self): ... + def integ(self, m=..., k=...): ... + def deriv(self, m=...): ... + +class recarray(ndarray[_ShapeType, _DType_co]): + def __new__( + subtype, + shape: Any, + dtype: Any = ..., + buf: Any = ..., + offset: Any = ..., + strides: Any = ..., + formats: Any = ..., + names: Any = ..., + titles: Any = ..., + byteorder: Any = ..., + aligned: Any = ..., + order: Any = ..., + ) -> Any: ... + def __array_finalize__(self, obj): ... + def __getattribute__(self, attr): ... + def __setattr__(self, attr, val): ... + def __getitem__(self, indx): ... + def field(self, attr, val=...): ... + +class record(void): + def __getattribute__(self, attr): ... + def __setattr__(self, attr, val): ... + def __getitem__(self, indx): ... + def pprint(self): ... + +class vectorize: + pyfunc: Any + cache: Any + signature: Any + otypes: Any + excluded: Any + __doc__: Any + def __init__( + self, + pyfunc, + otypes: Any = ..., + doc: Any = ..., + excluded: Any = ..., + cache: Any = ..., + signature: Any = ..., + ) -> None: ... + def __call__(self, *args: Any, **kwargs: Any) -> Any: ... + +# Placeholders for Python-based functions +def asmatrix(data, dtype=...): ... +def asscalar(a): ... +def cumproduct(*args, **kwargs): ... +def histogram(a, bins=..., range=..., normed=..., weights=..., density=...): ... +def histogram_bin_edges(a, bins=..., range=..., weights=...): ... +def histogramdd(sample, bins=..., range=..., normed=..., weights=..., density=...): ... +def mat(data, dtype=...): ... +def max(a, axis=..., out=..., keepdims=..., initial=..., where=...): ... +def min(a, axis=..., out=..., keepdims=..., initial=..., where=...): ... +def product(*args, **kwargs): ... +def round(a, decimals=..., out=...): ... +def round_(a, decimals=..., out=...): ... +def show_config(): ... + +# Placeholders for C-based functions +# TODO: Sort out which parameters are positional-only +@overload +def arange(stop, dtype=..., *, like=...): ... +@overload +def arange(start, stop, step=..., dtype=..., *, like=...): ... +def busday_count( + begindates, + enddates, + weekmask=..., + holidays=..., + busdaycal=..., + out=..., +): ... +def busday_offset( + dates, + offsets, + roll=..., + weekmask=..., + holidays=..., + busdaycal=..., + out=..., +): ... +def can_cast(from_, to, casting=...): ... +def compare_chararrays(a, b, cmp_op, rstrip): ... +def concatenate(__a, axis=..., out=..., dtype=..., casting=...): ... +def copyto(dst, src, casting=..., where=...): ... +def datetime_as_string(arr, unit=..., timezone=..., casting=...): ... +def datetime_data(__dtype): ... +def dot(a, b, out=...): ... +def frombuffer(buffer, dtype=..., count=..., offset=..., *, like=...): ... +def fromfile( + file, dtype=..., count=..., sep=..., offset=..., *, like=... +): ... +def fromiter(iter, dtype, count=..., *, like=...): ... +def frompyfunc(func, nin, nout, * identity): ... +def fromstring(string, dtype=..., count=..., sep=..., *, like=...): ... +def geterrobj(): ... +def inner(a, b): ... +def is_busday( + dates, weekmask=..., holidays=..., busdaycal=..., out=... +): ... +def lexsort(keys, axis=...): ... +def may_share_memory(a, b, max_work=...): ... +def min_scalar_type(a): ... +def nested_iters(*args, **kwargs): ... # TODO: Sort out parameters +def promote_types(type1, type2): ... +def putmask(a, mask, values): ... +def result_type(*arrays_and_dtypes): ... +def seterrobj(errobj): ... +def shares_memory(a, b, max_work=...): ... +def vdot(a, b): ... +@overload +def where(__condition): ... +@overload +def where(__condition, __x, __y): ... + +_NdArraySubClass = TypeVar("_NdArraySubClass", bound=ndarray) +_DTypeScalar_co = TypeVar("_DTypeScalar_co", covariant=True, bound=generic) +_ByteOrder = L["S", "<", ">", "=", "|", "L", "B", "N", "I"] + +class dtype(Generic[_DTypeScalar_co]): + names: Optional[Tuple[str, ...]] + # Overload for subclass of generic + @overload + def __new__( + cls, + dtype: Type[_DTypeScalar_co], + align: bool = ..., + copy: bool = ..., + ) -> dtype[_DTypeScalar_co]: ... + # Overloads for string aliases, Python types, and some assorted + # other special cases. Order is sometimes important because of the + # subtype relationships + # + # bool < int < float < complex < object + # + # so we have to make sure the overloads for the narrowest type is + # first. + # Builtin types + @overload + def __new__(cls, dtype: Type[bool], align: bool = ..., copy: bool = ...) -> dtype[bool_]: ... + @overload + def __new__(cls, dtype: Type[int], align: bool = ..., copy: bool = ...) -> dtype[int_]: ... + @overload + def __new__(cls, dtype: Optional[Type[float]], align: bool = ..., copy: bool = ...) -> dtype[float_]: ... + @overload + def __new__(cls, dtype: Type[complex], align: bool = ..., copy: bool = ...) -> dtype[complex_]: ... + @overload + def __new__(cls, dtype: Type[str], align: bool = ..., copy: bool = ...) -> dtype[str_]: ... + @overload + def __new__(cls, dtype: Type[bytes], align: bool = ..., copy: bool = ...) -> dtype[bytes_]: ... + + # `unsignedinteger` string-based representations and ctypes + @overload + def __new__(cls, dtype: _UInt8Codes | Type[ct.c_uint8], align: bool = ..., copy: bool = ...) -> dtype[uint8]: ... + @overload + def __new__(cls, dtype: _UInt16Codes | Type[ct.c_uint16], align: bool = ..., copy: bool = ...) -> dtype[uint16]: ... + @overload + def __new__(cls, dtype: _UInt32Codes | Type[ct.c_uint32], align: bool = ..., copy: bool = ...) -> dtype[uint32]: ... + @overload + def __new__(cls, dtype: _UInt64Codes | Type[ct.c_uint64], align: bool = ..., copy: bool = ...) -> dtype[uint64]: ... + @overload + def __new__(cls, dtype: _UByteCodes | Type[ct.c_ubyte], align: bool = ..., copy: bool = ...) -> dtype[ubyte]: ... + @overload + def __new__(cls, dtype: _UShortCodes | Type[ct.c_ushort], align: bool = ..., copy: bool = ...) -> dtype[ushort]: ... + @overload + def __new__(cls, dtype: _UIntCCodes | Type[ct.c_uint], align: bool = ..., copy: bool = ...) -> dtype[uintc]: ... + + # NOTE: We're assuming here that `uint_ptr_t == size_t`, + # an assumption that does not hold in rare cases (same for `ssize_t`) + @overload + def __new__(cls, dtype: _UIntPCodes | Type[ct.c_void_p] | Type[ct.c_size_t], align: bool = ..., copy: bool = ...) -> dtype[uintp]: ... + @overload + def __new__(cls, dtype: _UIntCodes | Type[ct.c_ulong], align: bool = ..., copy: bool = ...) -> dtype[uint]: ... + @overload + def __new__(cls, dtype: _ULongLongCodes | Type[ct.c_ulonglong], align: bool = ..., copy: bool = ...) -> dtype[ulonglong]: ... + + # `signedinteger` string-based representations and ctypes + @overload + def __new__(cls, dtype: _Int8Codes | Type[ct.c_int8], align: bool = ..., copy: bool = ...) -> dtype[int8]: ... + @overload + def __new__(cls, dtype: _Int16Codes | Type[ct.c_int16], align: bool = ..., copy: bool = ...) -> dtype[int16]: ... + @overload + def __new__(cls, dtype: _Int32Codes | Type[ct.c_int32], align: bool = ..., copy: bool = ...) -> dtype[int32]: ... + @overload + def __new__(cls, dtype: _Int64Codes | Type[ct.c_int64], align: bool = ..., copy: bool = ...) -> dtype[int64]: ... + @overload + def __new__(cls, dtype: _ByteCodes | Type[ct.c_byte], align: bool = ..., copy: bool = ...) -> dtype[byte]: ... + @overload + def __new__(cls, dtype: _ShortCodes | Type[ct.c_short], align: bool = ..., copy: bool = ...) -> dtype[short]: ... + @overload + def __new__(cls, dtype: _IntCCodes | Type[ct.c_int], align: bool = ..., copy: bool = ...) -> dtype[intc]: ... + @overload + def __new__(cls, dtype: _IntPCodes | Type[ct.c_ssize_t], align: bool = ..., copy: bool = ...) -> dtype[intp]: ... + @overload + def __new__(cls, dtype: _IntCodes | Type[ct.c_long], align: bool = ..., copy: bool = ...) -> dtype[int_]: ... + @overload + def __new__(cls, dtype: _LongLongCodes | Type[ct.c_longlong], align: bool = ..., copy: bool = ...) -> dtype[longlong]: ... + + # `floating` string-based representations and ctypes + @overload + def __new__(cls, dtype: _Float16Codes, align: bool = ..., copy: bool = ...) -> dtype[float16]: ... + @overload + def __new__(cls, dtype: _Float32Codes, align: bool = ..., copy: bool = ...) -> dtype[float32]: ... + @overload + def __new__(cls, dtype: _Float64Codes, align: bool = ..., copy: bool = ...) -> dtype[float64]: ... + @overload + def __new__(cls, dtype: _HalfCodes, align: bool = ..., copy: bool = ...) -> dtype[half]: ... + @overload + def __new__(cls, dtype: _SingleCodes | Type[ct.c_float], align: bool = ..., copy: bool = ...) -> dtype[single]: ... + @overload + def __new__(cls, dtype: _DoubleCodes | Type[ct.c_double], align: bool = ..., copy: bool = ...) -> dtype[double]: ... + @overload + def __new__(cls, dtype: _LongDoubleCodes | Type[ct.c_longdouble], align: bool = ..., copy: bool = ...) -> dtype[longdouble]: ... + + # `complexfloating` string-based representations + @overload + def __new__(cls, dtype: _Complex64Codes, align: bool = ..., copy: bool = ...) -> dtype[complex64]: ... + @overload + def __new__(cls, dtype: _Complex128Codes, align: bool = ..., copy: bool = ...) -> dtype[complex128]: ... + @overload + def __new__(cls, dtype: _CSingleCodes, align: bool = ..., copy: bool = ...) -> dtype[csingle]: ... + @overload + def __new__(cls, dtype: _CDoubleCodes, align: bool = ..., copy: bool = ...) -> dtype[cdouble]: ... + @overload + def __new__(cls, dtype: _CLongDoubleCodes, align: bool = ..., copy: bool = ...) -> dtype[clongdouble]: ... + + # Miscellaneous string-based representations and ctypes + @overload + def __new__(cls, dtype: _BoolCodes | Type[ct.c_bool], align: bool = ..., copy: bool = ...) -> dtype[bool_]: ... + @overload + def __new__(cls, dtype: _TD64Codes, align: bool = ..., copy: bool = ...) -> dtype[timedelta64]: ... + @overload + def __new__(cls, dtype: _DT64Codes, align: bool = ..., copy: bool = ...) -> dtype[datetime64]: ... + @overload + def __new__(cls, dtype: _StrCodes, align: bool = ..., copy: bool = ...) -> dtype[str_]: ... + @overload + def __new__(cls, dtype: _BytesCodes | Type[ct.c_char], align: bool = ..., copy: bool = ...) -> dtype[bytes_]: ... + @overload + def __new__(cls, dtype: _VoidCodes, align: bool = ..., copy: bool = ...) -> dtype[void]: ... + @overload + def __new__(cls, dtype: _ObjectCodes | Type[ct.py_object], align: bool = ..., copy: bool = ...) -> dtype[object_]: ... + + # dtype of a dtype is the same dtype + @overload + def __new__( + cls, + dtype: dtype[_DTypeScalar_co], + align: bool = ..., + copy: bool = ..., + ) -> dtype[_DTypeScalar_co]: ... + @overload + def __new__( + cls, + dtype: _SupportsDType[dtype[_DTypeScalar_co]], + align: bool = ..., + copy: bool = ..., + ) -> dtype[_DTypeScalar_co]: ... + # Handle strings that can't be expressed as literals; i.e. s1, s2, ... + @overload + def __new__( + cls, + dtype: str, + align: bool = ..., + copy: bool = ..., + ) -> dtype[Any]: ... + # Catchall overload for void-likes + @overload + def __new__( + cls, + dtype: _VoidDTypeLike, + align: bool = ..., + copy: bool = ..., + ) -> dtype[void]: ... + # Catchall overload for object-likes + @overload + def __new__( + cls, + dtype: Type[object], + align: bool = ..., + copy: bool = ..., + ) -> dtype[object_]: ... + + @overload + def __getitem__(self: dtype[void], key: List[str]) -> dtype[void]: ... + @overload + def __getitem__(self: dtype[void], key: Union[str, int]) -> dtype[Any]: ... + + # NOTE: In the future 1-based multiplications will also yield `void` dtypes + @overload + def __mul__(self, value: L[0]) -> None: ... # type: ignore[misc] + @overload + def __mul__(self: _DType, value: L[1]) -> _DType: ... + @overload + def __mul__(self, value: int) -> dtype[void]: ... + + # NOTE: `__rmul__` seems to be broken when used in combination with + # literals as of mypy 0.800. Set the return-type to `Any` for now. + def __rmul__(self, value: int) -> Any: ... + + def __gt__(self, other: DTypeLike) -> bool: ... + def __ge__(self, other: DTypeLike) -> bool: ... + def __lt__(self, other: DTypeLike) -> bool: ... + def __le__(self, other: DTypeLike) -> bool: ... + @property + def alignment(self) -> int: ... + @property + def base(self: _DType) -> _DType: ... + @property + def byteorder(self) -> str: ... + @property + def char(self) -> str: ... + @property + def descr(self) -> List[Union[Tuple[str, str], Tuple[str, str, _Shape]]]: ... + @property + def fields( + self, + ) -> Optional[Mapping[str, Union[Tuple[dtype[Any], int], Tuple[dtype[Any], int, Any]]]]: ... + @property + def flags(self) -> int: ... + @property + def hasobject(self) -> bool: ... + @property + def isbuiltin(self) -> int: ... + @property + def isnative(self) -> bool: ... + @property + def isalignedstruct(self) -> bool: ... + @property + def itemsize(self) -> int: ... + @property + def kind(self) -> str: ... + @property + def metadata(self) -> Optional[Mapping[str, Any]]: ... + @property + def name(self) -> str: ... + @property + def names(self) -> Optional[Tuple[str, ...]]: ... + @property + def num(self) -> int: ... + @property + def shape(self) -> _Shape: ... + @property + def ndim(self) -> int: ... + @property + def subdtype(self: _DType) -> Optional[Tuple[_DType, _Shape]]: ... + def newbyteorder(self: _DType, __new_order: _ByteOrder = ...) -> _DType: ... + # Leave str and type for end to avoid having to use `builtins.str` + # everywhere. See https://github.com/python/mypy/issues/3775 + @property + def str(self) -> builtins.str: ... + @property + def type(self) -> Type[_DTypeScalar_co]: ... + +class _flagsobj: + aligned: bool + updateifcopy: bool + writeable: bool + writebackifcopy: bool + @property + def behaved(self) -> bool: ... + @property + def c_contiguous(self) -> bool: ... + @property + def carray(self) -> bool: ... + @property + def contiguous(self) -> bool: ... + @property + def f_contiguous(self) -> bool: ... + @property + def farray(self) -> bool: ... + @property + def fnc(self) -> bool: ... + @property + def forc(self) -> bool: ... + @property + def fortran(self) -> bool: ... + @property + def num(self) -> int: ... + @property + def owndata(self) -> bool: ... + def __getitem__(self, key: str) -> bool: ... + def __setitem__(self, key: str, value: bool) -> None: ... + +_ArrayLikeInt = Union[ + int, + integer, + Sequence[Union[int, integer]], + Sequence[Sequence[Any]], # TODO: wait for support for recursive types + ndarray +] + +_FlatIterSelf = TypeVar("_FlatIterSelf", bound=flatiter) + +class flatiter(Generic[_NdArraySubClass]): + @property + def base(self) -> _NdArraySubClass: ... + @property + def coords(self) -> _Shape: ... + @property + def index(self) -> int: ... + def copy(self) -> _NdArraySubClass: ... + def __iter__(self: _FlatIterSelf) -> _FlatIterSelf: ... + def __next__(self: flatiter[ndarray[Any, dtype[_ScalarType]]]) -> _ScalarType: ... + def __len__(self) -> int: ... + @overload + def __getitem__( + self: flatiter[ndarray[Any, dtype[_ScalarType]]], + key: Union[int, integer], + ) -> _ScalarType: ... + @overload + def __getitem__( + self, key: Union[_ArrayLikeInt, slice, ellipsis], + ) -> _NdArraySubClass: ... + @overload + def __array__(self: flatiter[ndarray[Any, _DType]], __dtype: None = ...) -> ndarray[Any, _DType]: ... + @overload + def __array__(self, __dtype: _DType) -> ndarray[Any, _DType]: ... + +_OrderKACF = Optional[L["K", "A", "C", "F"]] +_OrderACF = Optional[L["A", "C", "F"]] +_OrderCF = Optional[L["C", "F"]] + +_ModeKind = L["raise", "wrap", "clip"] +_PartitionKind = L["introselect"] +_SortKind = L["quicksort", "mergesort", "heapsort", "stable"] +_SortSide = L["left", "right"] + +_ArraySelf = TypeVar("_ArraySelf", bound=_ArrayOrScalarCommon) + +class _ArrayOrScalarCommon: + @property + def T(self: _ArraySelf) -> _ArraySelf: ... + @property + def data(self) -> memoryview: ... + @property + def flags(self) -> _flagsobj: ... + @property + def itemsize(self) -> int: ... + @property + def nbytes(self) -> int: ... + def __bool__(self) -> bool: ... + def __bytes__(self) -> bytes: ... + def __str__(self) -> str: ... + def __repr__(self) -> str: ... + def __copy__(self: _ArraySelf) -> _ArraySelf: ... + def __deepcopy__(self: _ArraySelf, __memo: Optional[dict] = ...) -> _ArraySelf: ... + def __eq__(self, other): ... + def __ne__(self, other): ... + def astype( + self: _ArraySelf, + dtype: DTypeLike, + order: _OrderKACF = ..., + casting: _Casting = ..., + subok: bool = ..., + copy: bool = ..., + ) -> _ArraySelf: ... + def copy(self: _ArraySelf, order: _OrderKACF = ...) -> _ArraySelf: ... + def dump(self, file: str) -> None: ... + def dumps(self) -> bytes: ... + def getfield( + self: _ArraySelf, dtype: DTypeLike, offset: int = ... + ) -> _ArraySelf: ... + def tobytes(self, order: _OrderKACF = ...) -> bytes: ... + # NOTE: `tostring()` is deprecated and therefore excluded + # def tostring(self, order=...): ... + def tofile( + self, fid: Union[IO[bytes], str, bytes, os.PathLike[Any]], sep: str = ..., format: str = ... + ) -> None: ... + # generics and 0d arrays return builtin scalars + def tolist(self) -> Any: ... + @overload + def view(self, type: Type[_NdArraySubClass]) -> _NdArraySubClass: ... + @overload + def view(self: _ArraySelf, dtype: DTypeLike = ...) -> _ArraySelf: ... + @overload + def view( + self, dtype: DTypeLike, type: Type[_NdArraySubClass] + ) -> _NdArraySubClass: ... + + # TODO: Add proper signatures + def __getitem__(self, key) -> Any: ... + @property + def __array_interface__(self): ... + @property + def __array_priority__(self): ... + @property + def __array_struct__(self): ... + def __array_wrap__(array, context=...): ... + def __setstate__(self, __state): ... + # a `bool_` is returned when `keepdims=True` and `self` is a 0d array + + @overload + def all( + self, + axis: None = ..., + out: None = ..., + keepdims: L[False] = ..., + ) -> bool_: ... + @overload + def all( + self, + axis: Optional[_ShapeLike] = ..., + out: None = ..., + keepdims: bool = ..., + ) -> Any: ... + @overload + def all( + self, + axis: Optional[_ShapeLike] = ..., + out: _NdArraySubClass = ..., + keepdims: bool = ..., + ) -> _NdArraySubClass: ... + + @overload + def any( + self, + axis: None = ..., + out: None = ..., + keepdims: L[False] = ..., + ) -> bool_: ... + @overload + def any( + self, + axis: Optional[_ShapeLike] = ..., + out: None = ..., + keepdims: bool = ..., + ) -> Any: ... + @overload + def any( + self, + axis: Optional[_ShapeLike] = ..., + out: _NdArraySubClass = ..., + keepdims: bool = ..., + ) -> _NdArraySubClass: ... + + @overload + def argmax( + self, + axis: None = ..., + out: None = ..., + ) -> intp: ... + @overload + def argmax( + self, + axis: _ShapeLike = ..., + out: None = ..., + ) -> Any: ... + @overload + def argmax( + self, + axis: Optional[_ShapeLike] = ..., + out: _NdArraySubClass = ..., + ) -> _NdArraySubClass: ... + + @overload + def argmin( + self, + axis: None = ..., + out: None = ..., + ) -> intp: ... + @overload + def argmin( + self, + axis: _ShapeLike = ..., + out: None = ..., + ) -> Any: ... + @overload + def argmin( + self, + axis: Optional[_ShapeLike] = ..., + out: _NdArraySubClass = ..., + ) -> _NdArraySubClass: ... + + def argsort( + self, + axis: Optional[SupportsIndex] = ..., + kind: Optional[_SortKind] = ..., + order: Union[None, str, Sequence[str]] = ..., + ) -> ndarray: ... + + @overload + def choose( + self, + choices: ArrayLike, + out: None = ..., + mode: _ModeKind = ..., + ) -> ndarray: ... + @overload + def choose( + self, + choices: ArrayLike, + out: _NdArraySubClass = ..., + mode: _ModeKind = ..., + ) -> _NdArraySubClass: ... + + @overload + def clip( + self, + min: ArrayLike = ..., + max: Optional[ArrayLike] = ..., + out: None = ..., + **kwargs: Any, + ) -> ndarray: ... + @overload + def clip( + self, + min: None = ..., + max: ArrayLike = ..., + out: None = ..., + **kwargs: Any, + ) -> ndarray: ... + @overload + def clip( + self, + min: ArrayLike = ..., + max: Optional[ArrayLike] = ..., + out: _NdArraySubClass = ..., + **kwargs: Any, + ) -> _NdArraySubClass: ... + @overload + def clip( + self, + min: None = ..., + max: ArrayLike = ..., + out: _NdArraySubClass = ..., + **kwargs: Any, + ) -> _NdArraySubClass: ... + + @overload + def compress( + self, + a: ArrayLike, + axis: Optional[SupportsIndex] = ..., + out: None = ..., + ) -> ndarray: ... + @overload + def compress( + self, + a: ArrayLike, + axis: Optional[SupportsIndex] = ..., + out: _NdArraySubClass = ..., + ) -> _NdArraySubClass: ... + + def conj(self: _ArraySelf) -> _ArraySelf: ... + + def conjugate(self: _ArraySelf) -> _ArraySelf: ... + + @overload + def cumprod( + self, + axis: Optional[SupportsIndex] = ..., + dtype: DTypeLike = ..., + out: None = ..., + ) -> ndarray: ... + @overload + def cumprod( + self, + axis: Optional[SupportsIndex] = ..., + dtype: DTypeLike = ..., + out: _NdArraySubClass = ..., + ) -> _NdArraySubClass: ... + + @overload + def cumsum( + self, + axis: Optional[SupportsIndex] = ..., + dtype: DTypeLike = ..., + out: None = ..., + ) -> ndarray: ... + @overload + def cumsum( + self, + axis: Optional[SupportsIndex] = ..., + dtype: DTypeLike = ..., + out: _NdArraySubClass = ..., + ) -> _NdArraySubClass: ... + + @overload + def max( + self, + axis: Optional[_ShapeLike] = ..., + out: None = ..., + keepdims: bool = ..., + initial: _NumberLike_co = ..., + where: _ArrayLikeBool_co = ..., + ) -> Any: ... + @overload + def max( + self, + axis: Optional[_ShapeLike] = ..., + out: _NdArraySubClass = ..., + keepdims: bool = ..., + initial: _NumberLike_co = ..., + where: _ArrayLikeBool_co = ..., + ) -> _NdArraySubClass: ... + + @overload + def mean( + self, + axis: Optional[_ShapeLike] = ..., + dtype: DTypeLike = ..., + out: None = ..., + keepdims: bool = ..., + ) -> Any: ... + @overload + def mean( + self, + axis: Optional[_ShapeLike] = ..., + dtype: DTypeLike = ..., + out: _NdArraySubClass = ..., + keepdims: bool = ..., + ) -> _NdArraySubClass: ... + + @overload + def min( + self, + axis: Optional[_ShapeLike] = ..., + out: None = ..., + keepdims: bool = ..., + initial: _NumberLike_co = ..., + where: _ArrayLikeBool_co = ..., + ) -> Any: ... + @overload + def min( + self, + axis: Optional[_ShapeLike] = ..., + out: _NdArraySubClass = ..., + keepdims: bool = ..., + initial: _NumberLike_co = ..., + where: _ArrayLikeBool_co = ..., + ) -> _NdArraySubClass: ... + + def newbyteorder( + self: _ArraySelf, + __new_order: _ByteOrder = ..., + ) -> _ArraySelf: ... + + @overload + def prod( + self, + axis: Optional[_ShapeLike] = ..., + dtype: DTypeLike = ..., + out: None = ..., + keepdims: bool = ..., + initial: _NumberLike_co = ..., + where: _ArrayLikeBool_co = ..., + ) -> Any: ... + @overload + def prod( + self, + axis: Optional[_ShapeLike] = ..., + dtype: DTypeLike = ..., + out: _NdArraySubClass = ..., + keepdims: bool = ..., + initial: _NumberLike_co = ..., + where: _ArrayLikeBool_co = ..., + ) -> _NdArraySubClass: ... + + @overload + def ptp( + self, + axis: Optional[_ShapeLike] = ..., + out: None = ..., + keepdims: bool = ..., + ) -> Any: ... + @overload + def ptp( + self, + axis: Optional[_ShapeLike] = ..., + out: _NdArraySubClass = ..., + keepdims: bool = ..., + ) -> _NdArraySubClass: ... + + @overload + def round( + self: _ArraySelf, + decimals: SupportsIndex = ..., + out: None = ..., + ) -> _ArraySelf: ... + @overload + def round( + self, + decimals: SupportsIndex = ..., + out: _NdArraySubClass = ..., + ) -> _NdArraySubClass: ... + + @overload + def std( + self, + axis: Optional[_ShapeLike] = ..., + dtype: DTypeLike = ..., + out: None = ..., + ddof: int = ..., + keepdims: bool = ..., + ) -> Any: ... + @overload + def std( + self, + axis: Optional[_ShapeLike] = ..., + dtype: DTypeLike = ..., + out: _NdArraySubClass = ..., + ddof: int = ..., + keepdims: bool = ..., + ) -> _NdArraySubClass: ... + + @overload + def sum( + self, + axis: Optional[_ShapeLike] = ..., + dtype: DTypeLike = ..., + out: None = ..., + keepdims: bool = ..., + initial: _NumberLike_co = ..., + where: _ArrayLikeBool_co = ..., + ) -> Any: ... + @overload + def sum( + self, + axis: Optional[_ShapeLike] = ..., + dtype: DTypeLike = ..., + out: _NdArraySubClass = ..., + keepdims: bool = ..., + initial: _NumberLike_co = ..., + where: _ArrayLikeBool_co = ..., + ) -> _NdArraySubClass: ... + + @overload + def var( + self, + axis: Optional[_ShapeLike] = ..., + dtype: DTypeLike = ..., + out: None = ..., + ddof: int = ..., + keepdims: bool = ..., + ) -> Any: ... + @overload + def var( + self, + axis: Optional[_ShapeLike] = ..., + dtype: DTypeLike = ..., + out: _NdArraySubClass = ..., + ddof: int = ..., + keepdims: bool = ..., + ) -> _NdArraySubClass: ... + +_DType = TypeVar("_DType", bound=dtype[Any]) +_DType_co = TypeVar("_DType_co", covariant=True, bound=dtype[Any]) + +# TODO: Set the `bound` to something more suitable once we +# have proper shape support +_ShapeType = TypeVar("_ShapeType", bound=Any) +_NumberType = TypeVar("_NumberType", bound=number[Any]) +_BufferType = Union[ndarray, bytes, bytearray, memoryview] + +_T = TypeVar("_T") +_T_co = TypeVar("_T_co", covariant=True) +_2Tuple = Tuple[_T, _T] +_Casting = L["no", "equiv", "safe", "same_kind", "unsafe"] + +_ArrayUInt_co = NDArray[Union[bool_, unsignedinteger[Any]]] +_ArrayInt_co = NDArray[Union[bool_, integer[Any]]] +_ArrayFloat_co = NDArray[Union[bool_, integer[Any], floating[Any]]] +_ArrayComplex_co = NDArray[Union[bool_, integer[Any], floating[Any], complexfloating[Any, Any]]] +_ArrayNumber_co = NDArray[Union[bool_, number[Any]]] +_ArrayTD64_co = NDArray[Union[bool_, integer[Any], timedelta64]] + +class _SupportsItem(Protocol[_T_co]): + def item(self, __args: Any) -> _T_co: ... + +class _SupportsReal(Protocol[_T_co]): + @property + def real(self) -> _T_co: ... + +class _SupportsImag(Protocol[_T_co]): + @property + def imag(self) -> _T_co: ... + +class ndarray(_ArrayOrScalarCommon, Generic[_ShapeType, _DType_co]): + @property + def base(self) -> Optional[ndarray]: ... + @property + def ndim(self) -> int: ... + @property + def size(self) -> int: ... + @property + def real( + self: NDArray[_SupportsReal[_ScalarType]], # type: ignore[type-var] + ) -> ndarray[_ShapeType, dtype[_ScalarType]]: ... + @real.setter + def real(self, value: ArrayLike) -> None: ... + @property + def imag( + self: NDArray[_SupportsImag[_ScalarType]], # type: ignore[type-var] + ) -> ndarray[_ShapeType, dtype[_ScalarType]]: ... + @imag.setter + def imag(self, value: ArrayLike) -> None: ... + def __new__( + cls: Type[_ArraySelf], + shape: _ShapeLike, + dtype: DTypeLike = ..., + buffer: _BufferType = ..., + offset: int = ..., + strides: _ShapeLike = ..., + order: _OrderKACF = ..., + ) -> _ArraySelf: ... + @overload + def __array__(self, __dtype: None = ...) -> ndarray[Any, _DType_co]: ... + @overload + def __array__(self, __dtype: _DType) -> ndarray[Any, _DType]: ... + @property + def ctypes(self) -> _ctypes[int]: ... + @property + def shape(self) -> _Shape: ... + @shape.setter + def shape(self, value: _ShapeLike) -> None: ... + @property + def strides(self) -> _Shape: ... + @strides.setter + def strides(self, value: _ShapeLike) -> None: ... + def byteswap(self: _ArraySelf, inplace: bool = ...) -> _ArraySelf: ... + def fill(self, value: Any) -> None: ... + @property + def flat(self: _NdArraySubClass) -> flatiter[_NdArraySubClass]: ... + + # Use the same output type as that of the underlying `generic` + @overload + def item( + self: ndarray[Any, dtype[_SupportsItem[_T]]], # type: ignore[type-var] + *args: SupportsIndex, + ) -> _T: ... + @overload + def item( + self: ndarray[Any, dtype[_SupportsItem[_T]]], # type: ignore[type-var] + __args: Tuple[SupportsIndex, ...], + ) -> _T: ... + + @overload + def itemset(self, __value: Any) -> None: ... + @overload + def itemset(self, __item: _ShapeLike, __value: Any) -> None: ... + + @overload + def resize(self, __new_shape: _ShapeLike, *, refcheck: bool = ...) -> None: ... + @overload + def resize(self, *new_shape: SupportsIndex, refcheck: bool = ...) -> None: ... + + def setflags( + self, write: bool = ..., align: bool = ..., uic: bool = ... + ) -> None: ... + + def squeeze( + self, + axis: Union[SupportsIndex, Tuple[SupportsIndex, ...]] = ..., + ) -> ndarray[Any, _DType_co]: ... + + def swapaxes( + self, + axis1: SupportsIndex, + axis2: SupportsIndex, + ) -> ndarray[Any, _DType_co]: ... + + @overload + def transpose(self: _ArraySelf, __axes: _ShapeLike) -> _ArraySelf: ... + @overload + def transpose(self: _ArraySelf, *axes: SupportsIndex) -> _ArraySelf: ... + + def argpartition( + self, + kth: _ArrayLikeInt_co, + axis: Optional[SupportsIndex] = ..., + kind: _PartitionKind = ..., + order: Union[None, str, Sequence[str]] = ..., + ) -> ndarray[Any, dtype[intp]]: ... + + def diagonal( + self, + offset: SupportsIndex = ..., + axis1: SupportsIndex = ..., + axis2: SupportsIndex = ..., + ) -> ndarray[Any, _DType_co]: ... + + # 1D + 1D returns a scalar; + # all other with at least 1 non-0D array return an ndarray. + @overload + def dot(self, b: _ScalarLike_co, out: None = ...) -> ndarray: ... + @overload + def dot(self, b: ArrayLike, out: None = ...) -> Any: ... # type: ignore[misc] + @overload + def dot(self, b: ArrayLike, out: _NdArraySubClass) -> _NdArraySubClass: ... + + # `nonzero()` is deprecated for 0d arrays/generics + def nonzero(self) -> Tuple[ndarray[Any, dtype[intp]], ...]: ... + + def partition( + self, + kth: _ArrayLikeInt_co, + axis: SupportsIndex = ..., + kind: _PartitionKind = ..., + order: Union[None, str, Sequence[str]] = ..., + ) -> None: ... + + # `put` is technically available to `generic`, + # but is pointless as `generic`s are immutable + def put( + self, + ind: _ArrayLikeInt_co, + v: ArrayLike, + mode: _ModeKind = ..., + ) -> None: ... + + @overload + def searchsorted( # type: ignore[misc] + self, # >= 1D array + v: _ScalarLike_co, # 0D array-like + side: _SortSide = ..., + sorter: Optional[_ArrayLikeInt_co] = ..., + ) -> intp: ... + @overload + def searchsorted( + self, # >= 1D array + v: ArrayLike, + side: _SortSide = ..., + sorter: Optional[_ArrayLikeInt_co] = ..., + ) -> ndarray[Any, dtype[intp]]: ... + + def setfield( + self, + val: ArrayLike, + dtype: DTypeLike, + offset: SupportsIndex = ..., + ) -> None: ... + + def sort( + self, + axis: SupportsIndex = ..., + kind: Optional[_SortKind] = ..., + order: Union[None, str, Sequence[str]] = ..., + ) -> None: ... + + @overload + def trace( + self, # >= 2D array + offset: SupportsIndex = ..., + axis1: SupportsIndex = ..., + axis2: SupportsIndex = ..., + dtype: DTypeLike = ..., + out: None = ..., + ) -> Any: ... + @overload + def trace( + self, # >= 2D array + offset: SupportsIndex = ..., + axis1: SupportsIndex = ..., + axis2: SupportsIndex = ..., + dtype: DTypeLike = ..., + out: _NdArraySubClass = ..., + ) -> _NdArraySubClass: ... + + @overload + def take( # type: ignore[misc] + self: ndarray[Any, dtype[_ScalarType]], + indices: _IntLike_co, + axis: Optional[SupportsIndex] = ..., + out: None = ..., + mode: _ModeKind = ..., + ) -> _ScalarType: ... + @overload + def take( # type: ignore[misc] + self, + indices: _ArrayLikeInt_co, + axis: Optional[SupportsIndex] = ..., + out: None = ..., + mode: _ModeKind = ..., + ) -> ndarray[Any, _DType_co]: ... + @overload + def take( + self, + indices: _ArrayLikeInt_co, + axis: Optional[SupportsIndex] = ..., + out: _NdArraySubClass = ..., + mode: _ModeKind = ..., + ) -> _NdArraySubClass: ... + + def repeat( + self, + repeats: _ArrayLikeInt_co, + axis: Optional[SupportsIndex] = ..., + ) -> ndarray[Any, _DType_co]: ... + + def flatten( + self, + order: _OrderKACF = ..., + ) -> ndarray[Any, _DType_co]: ... + + def ravel( + self, + order: _OrderKACF = ..., + ) -> ndarray[Any, _DType_co]: ... + + @overload + def reshape( + self, __shape: _ShapeLike, *, order: _OrderACF = ... + ) -> ndarray[Any, _DType_co]: ... + @overload + def reshape( + self, *shape: SupportsIndex, order: _OrderACF = ... + ) -> ndarray[Any, _DType_co]: ... + + # Dispatch to the underlying `generic` via protocols + def __int__( + self: ndarray[Any, dtype[SupportsInt]], # type: ignore[type-var] + ) -> int: ... + + def __float__( + self: ndarray[Any, dtype[SupportsFloat]], # type: ignore[type-var] + ) -> float: ... + + def __complex__( + self: ndarray[Any, dtype[SupportsComplex]], # type: ignore[type-var] + ) -> complex: ... + + def __index__( + self: ndarray[Any, dtype[SupportsIndex]], # type: ignore[type-var] + ) -> int: ... + + def __len__(self) -> int: ... + def __setitem__(self, key, value): ... + def __iter__(self) -> Any: ... + def __contains__(self, key) -> bool: ... + + # The last overload is for catching recursive objects whose + # nesting is too deep. + # The first overload is for catching `bytes` (as they are a subtype of + # `Sequence[int]`) and `str`. As `str` is a recusive sequence of + # strings, it will pass through the final overload otherwise + + @overload + def __lt__(self: NDArray[Any], other: _NestedSequence[Union[str, bytes]]) -> NoReturn: ... + @overload + def __lt__(self: _ArrayNumber_co, other: _ArrayLikeNumber_co) -> NDArray[bool_]: ... + @overload + def __lt__(self: _ArrayTD64_co, other: _ArrayLikeTD64_co) -> NDArray[bool_]: ... + @overload + def __lt__(self: NDArray[datetime64], other: _ArrayLikeDT64_co) -> NDArray[bool_]: ... + @overload + def __lt__(self: NDArray[object_], other: Any) -> NDArray[bool_]: ... + @overload + def __lt__(self: NDArray[Any], other: _ArrayLikeObject_co) -> NDArray[bool_]: ... + @overload + def __lt__( + self: NDArray[Union[number[Any], datetime64, timedelta64, bool_]], + other: _RecursiveSequence, + ) -> NDArray[bool_]: ... + + @overload + def __le__(self: NDArray[Any], other: _NestedSequence[Union[str, bytes]]) -> NoReturn: ... + @overload + def __le__(self: _ArrayNumber_co, other: _ArrayLikeNumber_co) -> NDArray[bool_]: ... + @overload + def __le__(self: _ArrayTD64_co, other: _ArrayLikeTD64_co) -> NDArray[bool_]: ... + @overload + def __le__(self: NDArray[datetime64], other: _ArrayLikeDT64_co) -> NDArray[bool_]: ... + @overload + def __le__(self: NDArray[object_], other: Any) -> NDArray[bool_]: ... + @overload + def __le__(self: NDArray[Any], other: _ArrayLikeObject_co) -> NDArray[bool_]: ... + @overload + def __le__( + self: NDArray[Union[number[Any], datetime64, timedelta64, bool_]], + other: _RecursiveSequence, + ) -> NDArray[bool_]: ... + + @overload + def __gt__(self: NDArray[Any], other: _NestedSequence[Union[str, bytes]]) -> NoReturn: ... + @overload + def __gt__(self: _ArrayNumber_co, other: _ArrayLikeNumber_co) -> NDArray[bool_]: ... + @overload + def __gt__(self: _ArrayTD64_co, other: _ArrayLikeTD64_co) -> NDArray[bool_]: ... + @overload + def __gt__(self: NDArray[datetime64], other: _ArrayLikeDT64_co) -> NDArray[bool_]: ... + @overload + def __gt__(self: NDArray[object_], other: Any) -> NDArray[bool_]: ... + @overload + def __gt__(self: NDArray[Any], other: _ArrayLikeObject_co) -> NDArray[bool_]: ... + @overload + def __gt__( + self: NDArray[Union[number[Any], datetime64, timedelta64, bool_]], + other: _RecursiveSequence, + ) -> NDArray[bool_]: ... + + @overload + def __ge__(self: NDArray[Any], other: _NestedSequence[Union[str, bytes]]) -> NoReturn: ... + @overload + def __ge__(self: _ArrayNumber_co, other: _ArrayLikeNumber_co) -> NDArray[bool_]: ... + @overload + def __ge__(self: _ArrayTD64_co, other: _ArrayLikeTD64_co) -> NDArray[bool_]: ... + @overload + def __ge__(self: NDArray[datetime64], other: _ArrayLikeDT64_co) -> NDArray[bool_]: ... + @overload + def __ge__(self: NDArray[object_], other: Any) -> NDArray[bool_]: ... + @overload + def __ge__(self: NDArray[Any], other: _ArrayLikeObject_co) -> NDArray[bool_]: ... + @overload + def __ge__( + self: NDArray[Union[number[Any], datetime64, timedelta64, bool_]], + other: _RecursiveSequence, + ) -> NDArray[bool_]: ... + + # Unary ops + @overload + def __abs__(self: NDArray[bool_]) -> NDArray[bool_]: ... + @overload + def __abs__(self: NDArray[complexfloating[_NBit1, _NBit1]]) -> NDArray[floating[_NBit1]]: ... + @overload + def __abs__(self: NDArray[_NumberType]) -> NDArray[_NumberType]: ... + @overload + def __abs__(self: NDArray[timedelta64]) -> NDArray[timedelta64]: ... + @overload + def __abs__(self: NDArray[object_]) -> Any: ... + + @overload + def __invert__(self: NDArray[bool_]) -> NDArray[bool_]: ... + @overload + def __invert__(self: NDArray[_IntType]) -> NDArray[_IntType]: ... + @overload + def __invert__(self: NDArray[object_]) -> Any: ... + + @overload + def __pos__(self: NDArray[_NumberType]) -> NDArray[_NumberType]: ... + @overload + def __pos__(self: NDArray[timedelta64]) -> NDArray[timedelta64]: ... + @overload + def __pos__(self: NDArray[object_]) -> Any: ... + + @overload + def __neg__(self: NDArray[_NumberType]) -> NDArray[_NumberType]: ... + @overload + def __neg__(self: NDArray[timedelta64]) -> NDArray[timedelta64]: ... + @overload + def __neg__(self: NDArray[object_]) -> Any: ... + + # Binary ops + # NOTE: `ndarray` does not implement `__imatmul__` + @overload + def __matmul__(self: NDArray[Any], other: _NestedSequence[Union[str, bytes]]) -> NoReturn: ... + @overload + def __matmul__(self: NDArray[bool_], other: _ArrayLikeBool_co) -> NDArray[bool_]: ... # type: ignore[misc] + @overload + def __matmul__(self: _ArrayUInt_co, other: _ArrayLikeUInt_co) -> NDArray[unsignedinteger[Any]]: ... # type: ignore[misc] + @overload + def __matmul__(self: _ArrayInt_co, other: _ArrayLikeInt_co) -> NDArray[signedinteger[Any]]: ... # type: ignore[misc] + @overload + def __matmul__(self: _ArrayFloat_co, other: _ArrayLikeFloat_co) -> NDArray[floating[Any]]: ... # type: ignore[misc] + @overload + def __matmul__(self: _ArrayComplex_co, other: _ArrayLikeComplex_co) -> NDArray[complexfloating[Any, Any]]: ... + @overload + def __matmul__(self: NDArray[object_], other: Any) -> Any: ... + @overload + def __matmul__(self: NDArray[Any], other: _ArrayLikeObject_co) -> Any: ... + @overload + def __matmul__( + self: _ArrayNumber_co, + other: _RecursiveSequence, + ) -> Any: ... + + @overload + def __rmatmul__(self: NDArray[Any], other: _NestedSequence[Union[str, bytes]]) -> NoReturn: ... + @overload + def __rmatmul__(self: NDArray[bool_], other: _ArrayLikeBool_co) -> NDArray[bool_]: ... # type: ignore[misc] + @overload + def __rmatmul__(self: _ArrayUInt_co, other: _ArrayLikeUInt_co) -> NDArray[unsignedinteger[Any]]: ... # type: ignore[misc] + @overload + def __rmatmul__(self: _ArrayInt_co, other: _ArrayLikeInt_co) -> NDArray[signedinteger[Any]]: ... # type: ignore[misc] + @overload + def __rmatmul__(self: _ArrayFloat_co, other: _ArrayLikeFloat_co) -> NDArray[floating[Any]]: ... # type: ignore[misc] + @overload + def __rmatmul__(self: _ArrayComplex_co, other: _ArrayLikeComplex_co) -> NDArray[complexfloating[Any, Any]]: ... + @overload + def __rmatmul__(self: NDArray[object_], other: Any) -> Any: ... + @overload + def __rmatmul__(self: NDArray[Any], other: _ArrayLikeObject_co) -> Any: ... + @overload + def __rmatmul__( + self: _ArrayNumber_co, + other: _RecursiveSequence, + ) -> Any: ... + + @overload + def __mod__(self: NDArray[Any], other: _NestedSequence[Union[str, bytes]]) -> NoReturn: ... + @overload + def __mod__(self: NDArray[bool_], other: _ArrayLikeBool_co) -> NDArray[int8]: ... # type: ignore[misc] + @overload + def __mod__(self: _ArrayUInt_co, other: _ArrayLikeUInt_co) -> NDArray[unsignedinteger[Any]]: ... # type: ignore[misc] + @overload + def __mod__(self: _ArrayInt_co, other: _ArrayLikeInt_co) -> NDArray[signedinteger[Any]]: ... # type: ignore[misc] + @overload + def __mod__(self: _ArrayFloat_co, other: _ArrayLikeFloat_co) -> NDArray[floating[Any]]: ... # type: ignore[misc] + @overload + def __mod__(self: _ArrayTD64_co, other: _NestedSequence[_SupportsArray[dtype[timedelta64]]]) -> NDArray[timedelta64]: ... + @overload + def __mod__(self: NDArray[object_], other: Any) -> Any: ... + @overload + def __mod__(self: NDArray[Any], other: _ArrayLikeObject_co) -> Any: ... + @overload + def __mod__( + self: NDArray[Union[bool_, integer[Any], floating[Any], timedelta64]], + other: _RecursiveSequence, + ) -> Any: ... + + @overload + def __rmod__(self: NDArray[Any], other: _NestedSequence[Union[str, bytes]]) -> NoReturn: ... + @overload + def __rmod__(self: NDArray[bool_], other: _ArrayLikeBool_co) -> NDArray[int8]: ... # type: ignore[misc] + @overload + def __rmod__(self: _ArrayUInt_co, other: _ArrayLikeUInt_co) -> NDArray[unsignedinteger[Any]]: ... # type: ignore[misc] + @overload + def __rmod__(self: _ArrayInt_co, other: _ArrayLikeInt_co) -> NDArray[signedinteger[Any]]: ... # type: ignore[misc] + @overload + def __rmod__(self: _ArrayFloat_co, other: _ArrayLikeFloat_co) -> NDArray[floating[Any]]: ... # type: ignore[misc] + @overload + def __rmod__(self: _ArrayTD64_co, other: _NestedSequence[_SupportsArray[dtype[timedelta64]]]) -> NDArray[timedelta64]: ... + @overload + def __rmod__(self: NDArray[object_], other: Any) -> Any: ... + @overload + def __rmod__(self: NDArray[Any], other: _ArrayLikeObject_co) -> Any: ... + @overload + def __rmod__( + self: NDArray[Union[bool_, integer[Any], floating[Any], timedelta64]], + other: _RecursiveSequence, + ) -> Any: ... + + @overload + def __divmod__(self: NDArray[Any], other: _NestedSequence[Union[str, bytes]]) -> NoReturn: ... + @overload + def __divmod__(self: NDArray[bool_], other: _ArrayLikeBool_co) -> _2Tuple[NDArray[int8]]: ... # type: ignore[misc] + @overload + def __divmod__(self: _ArrayUInt_co, other: _ArrayLikeUInt_co) -> _2Tuple[NDArray[unsignedinteger[Any]]]: ... # type: ignore[misc] + @overload + def __divmod__(self: _ArrayInt_co, other: _ArrayLikeInt_co) -> _2Tuple[NDArray[signedinteger[Any]]]: ... # type: ignore[misc] + @overload + def __divmod__(self: _ArrayFloat_co, other: _ArrayLikeFloat_co) -> _2Tuple[NDArray[floating[Any]]]: ... # type: ignore[misc] + @overload + def __divmod__(self: _ArrayTD64_co, other: _NestedSequence[_SupportsArray[dtype[timedelta64]]]) -> Tuple[NDArray[int64], NDArray[timedelta64]]: ... + @overload + def __divmod__( + self: NDArray[Union[bool_, integer[Any], floating[Any], timedelta64]], + other: _RecursiveSequence, + ) -> _2Tuple[Any]: ... + + @overload + def __rdivmod__(self: NDArray[Any], other: _NestedSequence[Union[str, bytes]]) -> NoReturn: ... + @overload + def __rdivmod__(self: NDArray[bool_], other: _ArrayLikeBool_co) -> _2Tuple[NDArray[int8]]: ... # type: ignore[misc] + @overload + def __rdivmod__(self: _ArrayUInt_co, other: _ArrayLikeUInt_co) -> _2Tuple[NDArray[unsignedinteger[Any]]]: ... # type: ignore[misc] + @overload + def __rdivmod__(self: _ArrayInt_co, other: _ArrayLikeInt_co) -> _2Tuple[NDArray[signedinteger[Any]]]: ... # type: ignore[misc] + @overload + def __rdivmod__(self: _ArrayFloat_co, other: _ArrayLikeFloat_co) -> _2Tuple[NDArray[floating[Any]]]: ... # type: ignore[misc] + @overload + def __rdivmod__(self: _ArrayTD64_co, other: _NestedSequence[_SupportsArray[dtype[timedelta64]]]) -> Tuple[NDArray[int64], NDArray[timedelta64]]: ... + @overload + def __rdivmod__( + self: NDArray[Union[bool_, integer[Any], floating[Any], timedelta64]], + other: _RecursiveSequence, + ) -> _2Tuple[Any]: ... + + @overload + def __add__(self: NDArray[Any], other: _NestedSequence[Union[str, bytes]]) -> NoReturn: ... + @overload + def __add__(self: NDArray[bool_], other: _ArrayLikeBool_co) -> NDArray[bool_]: ... # type: ignore[misc] + @overload + def __add__(self: _ArrayUInt_co, other: _ArrayLikeUInt_co) -> NDArray[unsignedinteger[Any]]: ... # type: ignore[misc] + @overload + def __add__(self: _ArrayInt_co, other: _ArrayLikeInt_co) -> NDArray[signedinteger[Any]]: ... # type: ignore[misc] + @overload + def __add__(self: _ArrayFloat_co, other: _ArrayLikeFloat_co) -> NDArray[floating[Any]]: ... # type: ignore[misc] + @overload + def __add__(self: _ArrayComplex_co, other: _ArrayLikeComplex_co) -> NDArray[complexfloating[Any, Any]]: ... # type: ignore[misc] + @overload + def __add__(self: _ArrayTD64_co, other: _ArrayLikeTD64_co) -> NDArray[timedelta64]: ... # type: ignore[misc] + @overload + def __add__(self: _ArrayTD64_co, other: _ArrayLikeDT64_co) -> NDArray[datetime64]: ... + @overload + def __add__(self: NDArray[datetime64], other: _ArrayLikeTD64_co) -> NDArray[datetime64]: ... + @overload + def __add__(self: NDArray[object_], other: Any) -> Any: ... + @overload + def __add__(self: NDArray[Any], other: _ArrayLikeObject_co) -> Any: ... + @overload + def __add__( + self: NDArray[Union[bool_, number[Any], timedelta64, datetime64]], + other: _RecursiveSequence, + ) -> Any: ... + + @overload + def __radd__(self: NDArray[Any], other: _NestedSequence[Union[str, bytes]]) -> NoReturn: ... + @overload + def __radd__(self: NDArray[bool_], other: _ArrayLikeBool_co) -> NDArray[bool_]: ... # type: ignore[misc] + @overload + def __radd__(self: _ArrayUInt_co, other: _ArrayLikeUInt_co) -> NDArray[unsignedinteger[Any]]: ... # type: ignore[misc] + @overload + def __radd__(self: _ArrayInt_co, other: _ArrayLikeInt_co) -> NDArray[signedinteger[Any]]: ... # type: ignore[misc] + @overload + def __radd__(self: _ArrayFloat_co, other: _ArrayLikeFloat_co) -> NDArray[floating[Any]]: ... # type: ignore[misc] + @overload + def __radd__(self: _ArrayComplex_co, other: _ArrayLikeComplex_co) -> NDArray[complexfloating[Any, Any]]: ... # type: ignore[misc] + @overload + def __radd__(self: _ArrayTD64_co, other: _ArrayLikeTD64_co) -> NDArray[timedelta64]: ... # type: ignore[misc] + @overload + def __radd__(self: _ArrayTD64_co, other: _ArrayLikeDT64_co) -> NDArray[datetime64]: ... + @overload + def __radd__(self: NDArray[datetime64], other: _ArrayLikeTD64_co) -> NDArray[datetime64]: ... + @overload + def __radd__(self: NDArray[object_], other: Any) -> Any: ... + @overload + def __radd__(self: NDArray[Any], other: _ArrayLikeObject_co) -> Any: ... + @overload + def __radd__( + self: NDArray[Union[bool_, number[Any], timedelta64, datetime64]], + other: _RecursiveSequence, + ) -> Any: ... + + @overload + def __sub__(self: NDArray[Any], other: _NestedSequence[Union[str, bytes]]) -> NoReturn: ... + @overload + def __sub__(self: NDArray[bool_], other: _ArrayLikeBool_co) -> NoReturn: ... + @overload + def __sub__(self: _ArrayUInt_co, other: _ArrayLikeUInt_co) -> NDArray[unsignedinteger[Any]]: ... # type: ignore[misc] + @overload + def __sub__(self: _ArrayInt_co, other: _ArrayLikeInt_co) -> NDArray[signedinteger[Any]]: ... # type: ignore[misc] + @overload + def __sub__(self: _ArrayFloat_co, other: _ArrayLikeFloat_co) -> NDArray[floating[Any]]: ... # type: ignore[misc] + @overload + def __sub__(self: _ArrayComplex_co, other: _ArrayLikeComplex_co) -> NDArray[complexfloating[Any, Any]]: ... # type: ignore[misc] + @overload + def __sub__(self: _ArrayTD64_co, other: _ArrayLikeTD64_co) -> NDArray[timedelta64]: ... # type: ignore[misc] + @overload + def __sub__(self: NDArray[datetime64], other: _ArrayLikeTD64_co) -> NDArray[datetime64]: ... + @overload + def __sub__(self: NDArray[datetime64], other: _ArrayLikeDT64_co) -> NDArray[timedelta64]: ... + @overload + def __sub__(self: NDArray[object_], other: Any) -> Any: ... + @overload + def __sub__(self: NDArray[Any], other: _ArrayLikeObject_co) -> Any: ... + @overload + def __sub__( + self: NDArray[Union[bool_, number[Any], timedelta64, datetime64]], + other: _RecursiveSequence, + ) -> Any: ... + + @overload + def __rsub__(self: NDArray[Any], other: _NestedSequence[Union[str, bytes]]) -> NoReturn: ... + @overload + def __rsub__(self: NDArray[bool_], other: _ArrayLikeBool_co) -> NoReturn: ... + @overload + def __rsub__(self: _ArrayUInt_co, other: _ArrayLikeUInt_co) -> NDArray[unsignedinteger[Any]]: ... # type: ignore[misc] + @overload + def __rsub__(self: _ArrayInt_co, other: _ArrayLikeInt_co) -> NDArray[signedinteger[Any]]: ... # type: ignore[misc] + @overload + def __rsub__(self: _ArrayFloat_co, other: _ArrayLikeFloat_co) -> NDArray[floating[Any]]: ... # type: ignore[misc] + @overload + def __rsub__(self: _ArrayComplex_co, other: _ArrayLikeComplex_co) -> NDArray[complexfloating[Any, Any]]: ... # type: ignore[misc] + @overload + def __rsub__(self: _ArrayTD64_co, other: _ArrayLikeTD64_co) -> NDArray[timedelta64]: ... # type: ignore[misc] + @overload + def __rsub__(self: _ArrayTD64_co, other: _ArrayLikeDT64_co) -> NDArray[datetime64]: ... # type: ignore[misc] + @overload + def __rsub__(self: NDArray[datetime64], other: _ArrayLikeDT64_co) -> NDArray[timedelta64]: ... + @overload + def __rsub__(self: NDArray[object_], other: Any) -> Any: ... + @overload + def __rsub__(self: NDArray[Any], other: _ArrayLikeObject_co) -> Any: ... + @overload + def __rsub__( + self: NDArray[Union[bool_, number[Any], timedelta64, datetime64]], + other: _RecursiveSequence, + ) -> Any: ... + + @overload + def __mul__(self: NDArray[Any], other: _NestedSequence[Union[str, bytes]]) -> NoReturn: ... + @overload + def __mul__(self: NDArray[bool_], other: _ArrayLikeBool_co) -> NDArray[bool_]: ... # type: ignore[misc] + @overload + def __mul__(self: _ArrayUInt_co, other: _ArrayLikeUInt_co) -> NDArray[unsignedinteger[Any]]: ... # type: ignore[misc] + @overload + def __mul__(self: _ArrayInt_co, other: _ArrayLikeInt_co) -> NDArray[signedinteger[Any]]: ... # type: ignore[misc] + @overload + def __mul__(self: _ArrayFloat_co, other: _ArrayLikeFloat_co) -> NDArray[floating[Any]]: ... # type: ignore[misc] + @overload + def __mul__(self: _ArrayComplex_co, other: _ArrayLikeComplex_co) -> NDArray[complexfloating[Any, Any]]: ... # type: ignore[misc] + @overload + def __mul__(self: _ArrayTD64_co, other: _ArrayLikeFloat_co) -> NDArray[timedelta64]: ... + @overload + def __mul__(self: _ArrayFloat_co, other: _ArrayLikeTD64_co) -> NDArray[timedelta64]: ... + @overload + def __mul__(self: NDArray[object_], other: Any) -> Any: ... + @overload + def __mul__(self: NDArray[Any], other: _ArrayLikeObject_co) -> Any: ... + @overload + def __mul__( + self: NDArray[Union[bool_, number[Any], timedelta64]], + other: _RecursiveSequence, + ) -> Any: ... + + @overload + def __rmul__(self: NDArray[Any], other: _NestedSequence[Union[str, bytes]]) -> NoReturn: ... + @overload + def __rmul__(self: NDArray[bool_], other: _ArrayLikeBool_co) -> NDArray[bool_]: ... # type: ignore[misc] + @overload + def __rmul__(self: _ArrayUInt_co, other: _ArrayLikeUInt_co) -> NDArray[unsignedinteger[Any]]: ... # type: ignore[misc] + @overload + def __rmul__(self: _ArrayInt_co, other: _ArrayLikeInt_co) -> NDArray[signedinteger[Any]]: ... # type: ignore[misc] + @overload + def __rmul__(self: _ArrayFloat_co, other: _ArrayLikeFloat_co) -> NDArray[floating[Any]]: ... # type: ignore[misc] + @overload + def __rmul__(self: _ArrayComplex_co, other: _ArrayLikeComplex_co) -> NDArray[complexfloating[Any, Any]]: ... # type: ignore[misc] + @overload + def __rmul__(self: _ArrayTD64_co, other: _ArrayLikeFloat_co) -> NDArray[timedelta64]: ... + @overload + def __rmul__(self: _ArrayFloat_co, other: _ArrayLikeTD64_co) -> NDArray[timedelta64]: ... + @overload + def __rmul__(self: NDArray[object_], other: Any) -> Any: ... + @overload + def __rmul__(self: NDArray[Any], other: _ArrayLikeObject_co) -> Any: ... + @overload + def __rmul__( + self: NDArray[Union[bool_, number[Any], timedelta64]], + other: _RecursiveSequence, + ) -> Any: ... + + @overload + def __floordiv__(self: NDArray[Any], other: _NestedSequence[Union[str, bytes]]) -> NoReturn: ... + @overload + def __floordiv__(self: NDArray[bool_], other: _ArrayLikeBool_co) -> NDArray[int8]: ... # type: ignore[misc] + @overload + def __floordiv__(self: _ArrayUInt_co, other: _ArrayLikeUInt_co) -> NDArray[unsignedinteger[Any]]: ... # type: ignore[misc] + @overload + def __floordiv__(self: _ArrayInt_co, other: _ArrayLikeInt_co) -> NDArray[signedinteger[Any]]: ... # type: ignore[misc] + @overload + def __floordiv__(self: _ArrayFloat_co, other: _ArrayLikeFloat_co) -> NDArray[floating[Any]]: ... # type: ignore[misc] + @overload + def __floordiv__(self: _ArrayComplex_co, other: _ArrayLikeComplex_co) -> NDArray[complexfloating[Any, Any]]: ... # type: ignore[misc] + @overload + def __floordiv__(self: NDArray[timedelta64], other: _NestedSequence[_SupportsArray[dtype[timedelta64]]]) -> NDArray[int64]: ... + @overload + def __floordiv__(self: NDArray[timedelta64], other: _ArrayLikeBool_co) -> NoReturn: ... + @overload + def __floordiv__(self: NDArray[timedelta64], other: _ArrayLikeFloat_co) -> NDArray[timedelta64]: ... + @overload + def __floordiv__(self: NDArray[object_], other: Any) -> Any: ... + @overload + def __floordiv__(self: NDArray[Any], other: _ArrayLikeObject_co) -> Any: ... + @overload + def __floordiv__( + self: NDArray[Union[bool_, number[Any], timedelta64]], + other: _RecursiveSequence, + ) -> Any: ... + + @overload + def __rfloordiv__(self: NDArray[Any], other: _NestedSequence[Union[str, bytes]]) -> NoReturn: ... + @overload + def __rfloordiv__(self: NDArray[bool_], other: _ArrayLikeBool_co) -> NDArray[int8]: ... # type: ignore[misc] + @overload + def __rfloordiv__(self: _ArrayUInt_co, other: _ArrayLikeUInt_co) -> NDArray[unsignedinteger[Any]]: ... # type: ignore[misc] + @overload + def __rfloordiv__(self: _ArrayInt_co, other: _ArrayLikeInt_co) -> NDArray[signedinteger[Any]]: ... # type: ignore[misc] + @overload + def __rfloordiv__(self: _ArrayFloat_co, other: _ArrayLikeFloat_co) -> NDArray[floating[Any]]: ... # type: ignore[misc] + @overload + def __rfloordiv__(self: _ArrayComplex_co, other: _ArrayLikeComplex_co) -> NDArray[complexfloating[Any, Any]]: ... # type: ignore[misc] + @overload + def __rfloordiv__(self: NDArray[timedelta64], other: _NestedSequence[_SupportsArray[dtype[timedelta64]]]) -> NDArray[int64]: ... + @overload + def __rfloordiv__(self: NDArray[bool_], other: _ArrayLikeTD64_co) -> NoReturn: ... + @overload + def __rfloordiv__(self: _ArrayFloat_co, other: _ArrayLikeTD64_co) -> NDArray[timedelta64]: ... + @overload + def __rfloordiv__(self: NDArray[object_], other: Any) -> Any: ... + @overload + def __rfloordiv__(self: NDArray[Any], other: _ArrayLikeObject_co) -> Any: ... + @overload + def __rfloordiv__( + self: NDArray[Union[bool_, number[Any], timedelta64]], + other: _RecursiveSequence, + ) -> Any: ... + + @overload + def __pow__(self: NDArray[Any], other: _NestedSequence[Union[str, bytes]]) -> NoReturn: ... + @overload + def __pow__(self: NDArray[bool_], other: _ArrayLikeBool_co) -> NDArray[int8]: ... # type: ignore[misc] + @overload + def __pow__(self: _ArrayUInt_co, other: _ArrayLikeUInt_co) -> NDArray[unsignedinteger[Any]]: ... # type: ignore[misc] + @overload + def __pow__(self: _ArrayInt_co, other: _ArrayLikeInt_co) -> NDArray[signedinteger[Any]]: ... # type: ignore[misc] + @overload + def __pow__(self: _ArrayFloat_co, other: _ArrayLikeFloat_co) -> NDArray[floating[Any]]: ... # type: ignore[misc] + @overload + def __pow__(self: _ArrayComplex_co, other: _ArrayLikeComplex_co) -> NDArray[complexfloating[Any, Any]]: ... + @overload + def __pow__(self: NDArray[object_], other: Any) -> Any: ... + @overload + def __pow__(self: NDArray[Any], other: _ArrayLikeObject_co) -> Any: ... + @overload + def __pow__( + self: NDArray[Union[bool_, number[Any]]], + other: _RecursiveSequence, + ) -> Any: ... + + @overload + def __rpow__(self: NDArray[Any], other: _NestedSequence[Union[str, bytes]]) -> NoReturn: ... + @overload + def __rpow__(self: NDArray[bool_], other: _ArrayLikeBool_co) -> NDArray[int8]: ... # type: ignore[misc] + @overload + def __rpow__(self: _ArrayUInt_co, other: _ArrayLikeUInt_co) -> NDArray[unsignedinteger[Any]]: ... # type: ignore[misc] + @overload + def __rpow__(self: _ArrayInt_co, other: _ArrayLikeInt_co) -> NDArray[signedinteger[Any]]: ... # type: ignore[misc] + @overload + def __rpow__(self: _ArrayFloat_co, other: _ArrayLikeFloat_co) -> NDArray[floating[Any]]: ... # type: ignore[misc] + @overload + def __rpow__(self: _ArrayComplex_co, other: _ArrayLikeComplex_co) -> NDArray[complexfloating[Any, Any]]: ... + @overload + def __rpow__(self: NDArray[object_], other: Any) -> Any: ... + @overload + def __rpow__(self: NDArray[Any], other: _ArrayLikeObject_co) -> Any: ... + @overload + def __rpow__( + self: NDArray[Union[bool_, number[Any]]], + other: _RecursiveSequence, + ) -> Any: ... + + @overload + def __truediv__(self: NDArray[Any], other: _NestedSequence[Union[str, bytes]]) -> NoReturn: ... + @overload + def __truediv__(self: _ArrayInt_co, other: _ArrayInt_co) -> NDArray[float64]: ... # type: ignore[misc] + @overload + def __truediv__(self: _ArrayFloat_co, other: _ArrayLikeFloat_co) -> NDArray[floating[Any]]: ... # type: ignore[misc] + @overload + def __truediv__(self: _ArrayComplex_co, other: _ArrayLikeComplex_co) -> NDArray[complexfloating[Any, Any]]: ... # type: ignore[misc] + @overload + def __truediv__(self: NDArray[timedelta64], other: _NestedSequence[_SupportsArray[dtype[timedelta64]]]) -> NDArray[float64]: ... + @overload + def __truediv__(self: NDArray[timedelta64], other: _ArrayLikeBool_co) -> NoReturn: ... + @overload + def __truediv__(self: NDArray[timedelta64], other: _ArrayLikeFloat_co) -> NDArray[timedelta64]: ... + @overload + def __truediv__(self: NDArray[object_], other: Any) -> Any: ... + @overload + def __truediv__(self: NDArray[Any], other: _ArrayLikeObject_co) -> Any: ... + @overload + def __truediv__( + self: NDArray[Union[bool_, number[Any], timedelta64]], + other: _RecursiveSequence, + ) -> Any: ... + + @overload + def __rtruediv__(self: NDArray[Any], other: _NestedSequence[Union[str, bytes]]) -> NoReturn: ... + @overload + def __rtruediv__(self: _ArrayInt_co, other: _ArrayInt_co) -> NDArray[float64]: ... # type: ignore[misc] + @overload + def __rtruediv__(self: _ArrayFloat_co, other: _ArrayLikeFloat_co) -> NDArray[floating[Any]]: ... # type: ignore[misc] + @overload + def __rtruediv__(self: _ArrayComplex_co, other: _ArrayLikeComplex_co) -> NDArray[complexfloating[Any, Any]]: ... # type: ignore[misc] + @overload + def __rtruediv__(self: NDArray[timedelta64], other: _NestedSequence[_SupportsArray[dtype[timedelta64]]]) -> NDArray[float64]: ... + @overload + def __rtruediv__(self: NDArray[bool_], other: _ArrayLikeTD64_co) -> NoReturn: ... + @overload + def __rtruediv__(self: _ArrayFloat_co, other: _ArrayLikeTD64_co) -> NDArray[timedelta64]: ... + @overload + def __rtruediv__(self: NDArray[object_], other: Any) -> Any: ... + @overload + def __rtruediv__(self: NDArray[Any], other: _ArrayLikeObject_co) -> Any: ... + @overload + def __rtruediv__( + self: NDArray[Union[bool_, number[Any], timedelta64]], + other: _RecursiveSequence, + ) -> Any: ... + + @overload + def __lshift__(self: NDArray[Any], other: _NestedSequence[Union[str, bytes]]) -> NoReturn: ... + @overload + def __lshift__(self: NDArray[bool_], other: _ArrayLikeBool_co) -> NDArray[int8]: ... # type: ignore[misc] + @overload + def __lshift__(self: _ArrayUInt_co, other: _ArrayLikeUInt_co) -> NDArray[unsignedinteger[Any]]: ... # type: ignore[misc] + @overload + def __lshift__(self: _ArrayInt_co, other: _ArrayLikeInt_co) -> NDArray[signedinteger[Any]]: ... + @overload + def __lshift__(self: NDArray[object_], other: Any) -> Any: ... + @overload + def __lshift__(self: NDArray[Any], other: _ArrayLikeObject_co) -> Any: ... + @overload + def __lshift__( + self: NDArray[Union[bool_, integer[Any]]], + other: _RecursiveSequence, + ) -> Any: ... + + @overload + def __rlshift__(self: NDArray[Any], other: _NestedSequence[Union[str, bytes]]) -> NoReturn: ... + @overload + def __rlshift__(self: NDArray[bool_], other: _ArrayLikeBool_co) -> NDArray[int8]: ... # type: ignore[misc] + @overload + def __rlshift__(self: _ArrayUInt_co, other: _ArrayLikeUInt_co) -> NDArray[unsignedinteger[Any]]: ... # type: ignore[misc] + @overload + def __rlshift__(self: _ArrayInt_co, other: _ArrayLikeInt_co) -> NDArray[signedinteger[Any]]: ... + @overload + def __rlshift__(self: NDArray[object_], other: Any) -> Any: ... + @overload + def __rlshift__(self: NDArray[Any], other: _ArrayLikeObject_co) -> Any: ... + @overload + def __rlshift__( + self: NDArray[Union[bool_, integer[Any]]], + other: _RecursiveSequence, + ) -> Any: ... + + @overload + def __rshift__(self: NDArray[Any], other: _NestedSequence[Union[str, bytes]]) -> NoReturn: ... + @overload + def __rshift__(self: NDArray[bool_], other: _ArrayLikeBool_co) -> NDArray[int8]: ... # type: ignore[misc] + @overload + def __rshift__(self: _ArrayUInt_co, other: _ArrayLikeUInt_co) -> NDArray[unsignedinteger[Any]]: ... # type: ignore[misc] + @overload + def __rshift__(self: _ArrayInt_co, other: _ArrayLikeInt_co) -> NDArray[signedinteger[Any]]: ... + @overload + def __rshift__(self: NDArray[object_], other: Any) -> Any: ... + @overload + def __rshift__(self: NDArray[Any], other: _ArrayLikeObject_co) -> Any: ... + @overload + def __rshift__( + self: NDArray[Union[bool_, integer[Any]]], + other: _RecursiveSequence, + ) -> Any: ... + + @overload + def __rrshift__(self: NDArray[Any], other: _NestedSequence[Union[str, bytes]]) -> NoReturn: ... + @overload + def __rrshift__(self: NDArray[bool_], other: _ArrayLikeBool_co) -> NDArray[int8]: ... # type: ignore[misc] + @overload + def __rrshift__(self: _ArrayUInt_co, other: _ArrayLikeUInt_co) -> NDArray[unsignedinteger[Any]]: ... # type: ignore[misc] + @overload + def __rrshift__(self: _ArrayInt_co, other: _ArrayLikeInt_co) -> NDArray[signedinteger[Any]]: ... + @overload + def __rrshift__(self: NDArray[object_], other: Any) -> Any: ... + @overload + def __rrshift__(self: NDArray[Any], other: _ArrayLikeObject_co) -> Any: ... + @overload + def __rrshift__( + self: NDArray[Union[bool_, integer[Any]]], + other: _RecursiveSequence, + ) -> Any: ... + + @overload + def __and__(self: NDArray[Any], other: _NestedSequence[Union[str, bytes]]) -> NoReturn: ... + @overload + def __and__(self: NDArray[bool_], other: _ArrayLikeBool_co) -> NDArray[bool_]: ... # type: ignore[misc] + @overload + def __and__(self: _ArrayUInt_co, other: _ArrayLikeUInt_co) -> NDArray[unsignedinteger[Any]]: ... # type: ignore[misc] + @overload + def __and__(self: _ArrayInt_co, other: _ArrayLikeInt_co) -> NDArray[signedinteger[Any]]: ... + @overload + def __and__(self: NDArray[object_], other: Any) -> Any: ... + @overload + def __and__(self: NDArray[Any], other: _ArrayLikeObject_co) -> Any: ... + @overload + def __and__( + self: NDArray[Union[bool_, integer[Any]]], + other: _RecursiveSequence, + ) -> Any: ... + + @overload + def __rand__(self: NDArray[Any], other: _NestedSequence[Union[str, bytes]]) -> NoReturn: ... + @overload + def __rand__(self: NDArray[bool_], other: _ArrayLikeBool_co) -> NDArray[bool_]: ... # type: ignore[misc] + @overload + def __rand__(self: _ArrayUInt_co, other: _ArrayLikeUInt_co) -> NDArray[unsignedinteger[Any]]: ... # type: ignore[misc] + @overload + def __rand__(self: _ArrayInt_co, other: _ArrayLikeInt_co) -> NDArray[signedinteger[Any]]: ... + @overload + def __rand__(self: NDArray[object_], other: Any) -> Any: ... + @overload + def __rand__(self: NDArray[Any], other: _ArrayLikeObject_co) -> Any: ... + @overload + def __rand__( + self: NDArray[Union[bool_, integer[Any]]], + other: _RecursiveSequence, + ) -> Any: ... + + @overload + def __xor__(self: NDArray[Any], other: _NestedSequence[Union[str, bytes]]) -> NoReturn: ... + @overload + def __xor__(self: NDArray[bool_], other: _ArrayLikeBool_co) -> NDArray[bool_]: ... # type: ignore[misc] + @overload + def __xor__(self: _ArrayUInt_co, other: _ArrayLikeUInt_co) -> NDArray[unsignedinteger[Any]]: ... # type: ignore[misc] + @overload + def __xor__(self: _ArrayInt_co, other: _ArrayLikeInt_co) -> NDArray[signedinteger[Any]]: ... + @overload + def __xor__(self: NDArray[object_], other: Any) -> Any: ... + @overload + def __xor__(self: NDArray[Any], other: _ArrayLikeObject_co) -> Any: ... + @overload + def __xor__( + self: NDArray[Union[bool_, integer[Any]]], + other: _RecursiveSequence, + ) -> Any: ... + + @overload + def __rxor__(self: NDArray[Any], other: _NestedSequence[Union[str, bytes]]) -> NoReturn: ... + @overload + def __rxor__(self: NDArray[bool_], other: _ArrayLikeBool_co) -> NDArray[bool_]: ... # type: ignore[misc] + @overload + def __rxor__(self: _ArrayUInt_co, other: _ArrayLikeUInt_co) -> NDArray[unsignedinteger[Any]]: ... # type: ignore[misc] + @overload + def __rxor__(self: _ArrayInt_co, other: _ArrayLikeInt_co) -> NDArray[signedinteger[Any]]: ... + @overload + def __rxor__(self: NDArray[object_], other: Any) -> Any: ... + @overload + def __rxor__(self: NDArray[Any], other: _ArrayLikeObject_co) -> Any: ... + @overload + def __rxor__( + self: NDArray[Union[bool_, integer[Any]]], + other: _RecursiveSequence, + ) -> Any: ... + + @overload + def __or__(self: NDArray[Any], other: _NestedSequence[Union[str, bytes]]) -> NoReturn: ... + @overload + def __or__(self: NDArray[bool_], other: _ArrayLikeBool_co) -> NDArray[bool_]: ... # type: ignore[misc] + @overload + def __or__(self: _ArrayUInt_co, other: _ArrayLikeUInt_co) -> NDArray[unsignedinteger[Any]]: ... # type: ignore[misc] + @overload + def __or__(self: _ArrayInt_co, other: _ArrayLikeInt_co) -> NDArray[signedinteger[Any]]: ... + @overload + def __or__(self: NDArray[object_], other: Any) -> Any: ... + @overload + def __or__(self: NDArray[Any], other: _ArrayLikeObject_co) -> Any: ... + @overload + def __or__( + self: NDArray[Union[bool_, integer[Any]]], + other: _RecursiveSequence, + ) -> Any: ... + + @overload + def __ror__(self: NDArray[Any], other: _NestedSequence[Union[str, bytes]]) -> NoReturn: ... + @overload + def __ror__(self: NDArray[bool_], other: _ArrayLikeBool_co) -> NDArray[bool_]: ... # type: ignore[misc] + @overload + def __ror__(self: _ArrayUInt_co, other: _ArrayLikeUInt_co) -> NDArray[unsignedinteger[Any]]: ... # type: ignore[misc] + @overload + def __ror__(self: _ArrayInt_co, other: _ArrayLikeInt_co) -> NDArray[signedinteger[Any]]: ... + @overload + def __ror__(self: NDArray[object_], other: Any) -> Any: ... + @overload + def __ror__(self: NDArray[Any], other: _ArrayLikeObject_co) -> Any: ... + @overload + def __ror__( + self: NDArray[Union[bool_, integer[Any]]], + other: _RecursiveSequence, + ) -> Any: ... + + # `np.generic` does not support inplace operations + @overload # type: ignore[misc] + def __iadd__(self: NDArray[Any], other: _NestedSequence[Union[str, bytes]]) -> NoReturn: ... + @overload + def __iadd__(self: NDArray[bool_], other: _ArrayLikeBool_co) -> NDArray[bool_]: ... + @overload + def __iadd__(self: NDArray[unsignedinteger[_NBit1]], other: _ArrayLikeUInt_co) -> NDArray[unsignedinteger[_NBit1]]: ... + @overload + def __iadd__(self: NDArray[signedinteger[_NBit1]], other: _ArrayLikeInt_co) -> NDArray[signedinteger[_NBit1]]: ... + @overload + def __iadd__(self: NDArray[floating[_NBit1]], other: _ArrayLikeFloat_co) -> NDArray[floating[_NBit1]]: ... + @overload + def __iadd__(self: NDArray[complexfloating[_NBit1, _NBit1]], other: _ArrayLikeComplex_co) -> NDArray[complexfloating[_NBit1, _NBit1]]: ... + @overload + def __iadd__(self: NDArray[timedelta64], other: _ArrayLikeTD64_co) -> NDArray[timedelta64]: ... + @overload + def __iadd__(self: NDArray[datetime64], other: _ArrayLikeTD64_co) -> NDArray[datetime64]: ... + @overload + def __iadd__(self: NDArray[object_], other: Any) -> NDArray[object_]: ... + @overload + def __iadd__(self: NDArray[_ScalarType], other: _RecursiveSequence) -> NDArray[_ScalarType]: ... + + @overload # type: ignore[misc] + def __isub__(self: NDArray[Any], other: _NestedSequence[Union[str, bytes]]) -> NoReturn: ... + @overload + def __isub__(self: NDArray[unsignedinteger[_NBit1]], other: _ArrayLikeUInt_co) -> NDArray[unsignedinteger[_NBit1]]: ... + @overload + def __isub__(self: NDArray[signedinteger[_NBit1]], other: _ArrayLikeInt_co) -> NDArray[signedinteger[_NBit1]]: ... + @overload + def __isub__(self: NDArray[floating[_NBit1]], other: _ArrayLikeFloat_co) -> NDArray[floating[_NBit1]]: ... + @overload + def __isub__(self: NDArray[complexfloating[_NBit1, _NBit1]], other: _ArrayLikeComplex_co) -> NDArray[complexfloating[_NBit1, _NBit1]]: ... + @overload + def __isub__(self: NDArray[timedelta64], other: _ArrayLikeTD64_co) -> NDArray[timedelta64]: ... + @overload + def __isub__(self: NDArray[datetime64], other: _ArrayLikeTD64_co) -> NDArray[datetime64]: ... + @overload + def __isub__(self: NDArray[object_], other: Any) -> NDArray[object_]: ... + @overload + def __isub__(self: NDArray[_ScalarType], other: _RecursiveSequence) -> NDArray[_ScalarType]: ... + + @overload # type: ignore[misc] + def __imul__(self: NDArray[Any], other: _NestedSequence[Union[str, bytes]]) -> NoReturn: ... + @overload + def __imul__(self: NDArray[bool_], other: _ArrayLikeBool_co) -> NDArray[bool_]: ... + @overload + def __imul__(self: NDArray[unsignedinteger[_NBit1]], other: _ArrayLikeUInt_co) -> NDArray[unsignedinteger[_NBit1]]: ... + @overload + def __imul__(self: NDArray[signedinteger[_NBit1]], other: _ArrayLikeInt_co) -> NDArray[signedinteger[_NBit1]]: ... + @overload + def __imul__(self: NDArray[floating[_NBit1]], other: _ArrayLikeFloat_co) -> NDArray[floating[_NBit1]]: ... + @overload + def __imul__(self: NDArray[complexfloating[_NBit1, _NBit1]], other: _ArrayLikeComplex_co) -> NDArray[complexfloating[_NBit1, _NBit1]]: ... + @overload + def __imul__(self: NDArray[timedelta64], other: _ArrayLikeFloat_co) -> NDArray[timedelta64]: ... + @overload + def __imul__(self: NDArray[object_], other: Any) -> NDArray[object_]: ... + @overload + def __imul__(self: NDArray[_ScalarType], other: _RecursiveSequence) -> NDArray[_ScalarType]: ... + + @overload # type: ignore[misc] + def __itruediv__(self: NDArray[Any], other: _NestedSequence[Union[str, bytes]]) -> NoReturn: ... + @overload + def __itruediv__(self: NDArray[floating[_NBit1]], other: _ArrayLikeFloat_co) -> NDArray[floating[_NBit1]]: ... + @overload + def __itruediv__(self: NDArray[complexfloating[_NBit1, _NBit1]], other: _ArrayLikeComplex_co) -> NDArray[complexfloating[_NBit1, _NBit1]]: ... + @overload + def __itruediv__(self: NDArray[timedelta64], other: _ArrayLikeBool_co) -> NoReturn: ... + @overload + def __itruediv__(self: NDArray[timedelta64], other: _ArrayLikeInt_co) -> NDArray[timedelta64]: ... + @overload + def __itruediv__(self: NDArray[object_], other: Any) -> NDArray[object_]: ... + @overload + def __itruediv__(self: NDArray[_ScalarType], other: _RecursiveSequence) -> NDArray[_ScalarType]: ... + + @overload # type: ignore[misc] + def __ifloordiv__(self: NDArray[Any], other: _NestedSequence[Union[str, bytes]]) -> NoReturn: ... + @overload + def __ifloordiv__(self: NDArray[unsignedinteger[_NBit1]], other: _ArrayLikeUInt_co) -> NDArray[unsignedinteger[_NBit1]]: ... + @overload + def __ifloordiv__(self: NDArray[signedinteger[_NBit1]], other: _ArrayLikeInt_co) -> NDArray[signedinteger[_NBit1]]: ... + @overload + def __ifloordiv__(self: NDArray[floating[_NBit1]], other: _ArrayLikeFloat_co) -> NDArray[floating[_NBit1]]: ... + @overload + def __ifloordiv__(self: NDArray[complexfloating[_NBit1, _NBit1]], other: _ArrayLikeComplex_co) -> NDArray[complexfloating[_NBit1, _NBit1]]: ... + @overload + def __ifloordiv__(self: NDArray[timedelta64], other: _ArrayLikeBool_co) -> NoReturn: ... + @overload + def __ifloordiv__(self: NDArray[timedelta64], other: _ArrayLikeInt_co) -> NDArray[timedelta64]: ... + @overload + def __ifloordiv__(self: NDArray[object_], other: Any) -> NDArray[object_]: ... + @overload + def __ifloordiv__(self: NDArray[_ScalarType], other: _RecursiveSequence) -> NDArray[_ScalarType]: ... + + @overload # type: ignore[misc] + def __ipow__(self: NDArray[Any], other: _NestedSequence[Union[str, bytes]]) -> NoReturn: ... + @overload + def __ipow__(self: NDArray[unsignedinteger[_NBit1]], other: _ArrayLikeUInt_co) -> NDArray[unsignedinteger[_NBit1]]: ... + @overload + def __ipow__(self: NDArray[signedinteger[_NBit1]], other: _ArrayLikeInt_co) -> NDArray[signedinteger[_NBit1]]: ... + @overload + def __ipow__(self: NDArray[floating[_NBit1]], other: _ArrayLikeFloat_co) -> NDArray[floating[_NBit1]]: ... + @overload + def __ipow__(self: NDArray[complexfloating[_NBit1, _NBit1]], other: _ArrayLikeComplex_co) -> NDArray[complexfloating[_NBit1, _NBit1]]: ... + @overload + def __ipow__(self: NDArray[object_], other: Any) -> NDArray[object_]: ... + @overload + def __ipow__(self: NDArray[_ScalarType], other: _RecursiveSequence) -> NDArray[_ScalarType]: ... + + @overload # type: ignore[misc] + def __imod__(self: NDArray[Any], other: _NestedSequence[Union[str, bytes]]) -> NoReturn: ... + @overload + def __imod__(self: NDArray[unsignedinteger[_NBit1]], other: _ArrayLikeUInt_co) -> NDArray[unsignedinteger[_NBit1]]: ... + @overload + def __imod__(self: NDArray[signedinteger[_NBit1]], other: _ArrayLikeInt_co) -> NDArray[signedinteger[_NBit1]]: ... + @overload + def __imod__(self: NDArray[floating[_NBit1]], other: _ArrayLikeFloat_co) -> NDArray[floating[_NBit1]]: ... + @overload + def __imod__(self: NDArray[timedelta64], other: _NestedSequence[_SupportsArray[dtype[timedelta64]]]) -> NDArray[timedelta64]: ... + @overload + def __imod__(self: NDArray[object_], other: Any) -> NDArray[object_]: ... + @overload + def __imod__(self: NDArray[_ScalarType], other: _RecursiveSequence) -> NDArray[_ScalarType]: ... + + @overload # type: ignore[misc] + def __ilshift__(self: NDArray[Any], other: _NestedSequence[Union[str, bytes]]) -> NoReturn: ... + @overload + def __ilshift__(self: NDArray[unsignedinteger[_NBit1]], other: _ArrayLikeUInt_co) -> NDArray[unsignedinteger[_NBit1]]: ... + @overload + def __ilshift__(self: NDArray[signedinteger[_NBit1]], other: _ArrayLikeInt_co) -> NDArray[signedinteger[_NBit1]]: ... + @overload + def __ilshift__(self: NDArray[object_], other: Any) -> NDArray[object_]: ... + @overload + def __ilshift__(self: NDArray[_ScalarType], other: _RecursiveSequence) -> NDArray[_ScalarType]: ... + + @overload # type: ignore[misc] + def __irshift__(self: NDArray[Any], other: _NestedSequence[Union[str, bytes]]) -> NoReturn: ... + @overload + def __irshift__(self: NDArray[unsignedinteger[_NBit1]], other: _ArrayLikeUInt_co) -> NDArray[unsignedinteger[_NBit1]]: ... + @overload + def __irshift__(self: NDArray[signedinteger[_NBit1]], other: _ArrayLikeInt_co) -> NDArray[signedinteger[_NBit1]]: ... + @overload + def __irshift__(self: NDArray[object_], other: Any) -> NDArray[object_]: ... + @overload + def __irshift__(self: NDArray[_ScalarType], other: _RecursiveSequence) -> NDArray[_ScalarType]: ... + + @overload # type: ignore[misc] + def __iand__(self: NDArray[Any], other: _NestedSequence[Union[str, bytes]]) -> NoReturn: ... + @overload + def __iand__(self: NDArray[bool_], other: _ArrayLikeBool_co) -> NDArray[bool_]: ... + @overload + def __iand__(self: NDArray[unsignedinteger[_NBit1]], other: _ArrayLikeUInt_co) -> NDArray[unsignedinteger[_NBit1]]: ... + @overload + def __iand__(self: NDArray[signedinteger[_NBit1]], other: _ArrayLikeInt_co) -> NDArray[signedinteger[_NBit1]]: ... + @overload + def __iand__(self: NDArray[object_], other: Any) -> NDArray[object_]: ... + @overload + def __iand__(self: NDArray[_ScalarType], other: _RecursiveSequence) -> NDArray[_ScalarType]: ... + + @overload # type: ignore[misc] + def __ixor__(self: NDArray[Any], other: _NestedSequence[Union[str, bytes]]) -> NoReturn: ... + @overload + def __ixor__(self: NDArray[bool_], other: _ArrayLikeBool_co) -> NDArray[bool_]: ... + @overload + def __ixor__(self: NDArray[unsignedinteger[_NBit1]], other: _ArrayLikeUInt_co) -> NDArray[unsignedinteger[_NBit1]]: ... + @overload + def __ixor__(self: NDArray[signedinteger[_NBit1]], other: _ArrayLikeInt_co) -> NDArray[signedinteger[_NBit1]]: ... + @overload + def __ixor__(self: NDArray[object_], other: Any) -> NDArray[object_]: ... + @overload + def __ixor__(self: NDArray[_ScalarType], other: _RecursiveSequence) -> NDArray[_ScalarType]: ... + + @overload # type: ignore[misc] + def __ior__(self: NDArray[Any], other: _NestedSequence[Union[str, bytes]]) -> NoReturn: ... + @overload + def __ior__(self: NDArray[bool_], other: _ArrayLikeBool_co) -> NDArray[bool_]: ... + @overload + def __ior__(self: NDArray[unsignedinteger[_NBit1]], other: _ArrayLikeUInt_co) -> NDArray[unsignedinteger[_NBit1]]: ... + @overload + def __ior__(self: NDArray[signedinteger[_NBit1]], other: _ArrayLikeInt_co) -> NDArray[signedinteger[_NBit1]]: ... + @overload + def __ior__(self: NDArray[object_], other: Any) -> NDArray[object_]: ... + @overload + def __ior__(self: NDArray[_ScalarType], other: _RecursiveSequence) -> NDArray[_ScalarType]: ... + + # Keep `dtype` at the bottom to avoid name conflicts with `np.dtype` + @property + def dtype(self) -> _DType_co: ... + +# NOTE: while `np.generic` is not technically an instance of `ABCMeta`, +# the `@abstractmethod` decorator is herein used to (forcefully) deny +# the creation of `np.generic` instances. +# The `# type: ignore` comments are necessary to silence mypy errors regarding +# the missing `ABCMeta` metaclass. + +# See https://github.com/numpy/numpy-stubs/pull/80 for more details. + +_ScalarType = TypeVar("_ScalarType", bound=generic) +_NBit1 = TypeVar("_NBit1", bound=NBitBase) +_NBit2 = TypeVar("_NBit2", bound=NBitBase) + +class generic(_ArrayOrScalarCommon): + @abstractmethod + def __init__(self, *args: Any, **kwargs: Any) -> None: ... + @overload + def __array__(self: _ScalarType, __dtype: None = ...) -> ndarray[Any, dtype[_ScalarType]]: ... + @overload + def __array__(self, __dtype: _DType) -> ndarray[Any, _DType]: ... + @property + def base(self) -> None: ... + @property + def ndim(self) -> L[0]: ... + @property + def size(self) -> L[1]: ... + @property + def shape(self) -> Tuple[()]: ... + @property + def strides(self) -> Tuple[()]: ... + def byteswap(self: _ScalarType, inplace: L[False] = ...) -> _ScalarType: ... + @property + def flat(self: _ScalarType) -> flatiter[ndarray[Any, dtype[_ScalarType]]]: ... + def item( + self, + __args: Union[L[0], Tuple[()], Tuple[L[0]]] = ..., + ) -> Any: ... + + @overload + def take( # type: ignore[misc] + self: _ScalarType, + indices: _IntLike_co, + axis: Optional[SupportsIndex] = ..., + out: None = ..., + mode: _ModeKind = ..., + ) -> _ScalarType: ... + @overload + def take( # type: ignore[misc] + self: _ScalarType, + indices: _ArrayLikeInt_co, + axis: Optional[SupportsIndex] = ..., + out: None = ..., + mode: _ModeKind = ..., + ) -> ndarray[Any, dtype[_ScalarType]]: ... + @overload + def take( + self, + indices: _ArrayLikeInt_co, + axis: Optional[SupportsIndex] = ..., + out: _NdArraySubClass = ..., + mode: _ModeKind = ..., + ) -> _NdArraySubClass: ... + + def repeat( + self: _ScalarType, + repeats: _ArrayLikeInt_co, + axis: Optional[SupportsIndex] = ..., + ) -> ndarray[Any, dtype[_ScalarType]]: ... + + def flatten( + self: _ScalarType, + order: _OrderKACF = ..., + ) -> ndarray[Any, dtype[_ScalarType]]: ... + + def ravel( + self: _ScalarType, + order: _OrderKACF = ..., + ) -> ndarray[Any, dtype[_ScalarType]]: ... + + @overload + def reshape( + self: _ScalarType, __shape: _ShapeLike, *, order: _OrderACF = ... + ) -> ndarray[Any, dtype[_ScalarType]]: ... + @overload + def reshape( + self: _ScalarType, *shape: SupportsIndex, order: _OrderACF = ... + ) -> ndarray[Any, dtype[_ScalarType]]: ... + + def squeeze( + self: _ScalarType, axis: Union[L[0], Tuple[()]] = ... + ) -> _ScalarType: ... + def transpose(self: _ScalarType, __axes: Tuple[()] = ...) -> _ScalarType: ... + # Keep `dtype` at the bottom to avoid name conflicts with `np.dtype` + @property + def dtype(self: _ScalarType) -> dtype[_ScalarType]: ... + +class number(generic, Generic[_NBit1]): # type: ignore + @property + def real(self: _ArraySelf) -> _ArraySelf: ... + @property + def imag(self: _ArraySelf) -> _ArraySelf: ... + def __int__(self) -> int: ... + def __float__(self) -> float: ... + def __complex__(self) -> complex: ... + def __neg__(self: _ArraySelf) -> _ArraySelf: ... + def __pos__(self: _ArraySelf) -> _ArraySelf: ... + def __abs__(self: _ArraySelf) -> _ArraySelf: ... + # Ensure that objects annotated as `number` support arithmetic operations + __add__: _NumberOp + __radd__: _NumberOp + __sub__: _NumberOp + __rsub__: _NumberOp + __mul__: _NumberOp + __rmul__: _NumberOp + __floordiv__: _NumberOp + __rfloordiv__: _NumberOp + __pow__: _NumberOp + __rpow__: _NumberOp + __truediv__: _NumberOp + __rtruediv__: _NumberOp + __lt__: _ComparisonOp[_NumberLike_co, _ArrayLikeNumber_co] + __le__: _ComparisonOp[_NumberLike_co, _ArrayLikeNumber_co] + __gt__: _ComparisonOp[_NumberLike_co, _ArrayLikeNumber_co] + __ge__: _ComparisonOp[_NumberLike_co, _ArrayLikeNumber_co] + +class bool_(generic): + def __init__(self, __value: object = ...) -> None: ... + def item( + self, + __args: Union[L[0], Tuple[()], Tuple[L[0]]] = ..., + ) -> bool: ... + def tolist(self) -> bool: ... + @property + def real(self: _ArraySelf) -> _ArraySelf: ... + @property + def imag(self: _ArraySelf) -> _ArraySelf: ... + def __int__(self) -> int: ... + def __float__(self) -> float: ... + def __complex__(self) -> complex: ... + def __abs__(self: _ArraySelf) -> _ArraySelf: ... + __add__: _BoolOp[bool_] + __radd__: _BoolOp[bool_] + __sub__: _BoolSub + __rsub__: _BoolSub + __mul__: _BoolOp[bool_] + __rmul__: _BoolOp[bool_] + __floordiv__: _BoolOp[int8] + __rfloordiv__: _BoolOp[int8] + __pow__: _BoolOp[int8] + __rpow__: _BoolOp[int8] + __truediv__: _BoolTrueDiv + __rtruediv__: _BoolTrueDiv + def __invert__(self) -> bool_: ... + __lshift__: _BoolBitOp[int8] + __rlshift__: _BoolBitOp[int8] + __rshift__: _BoolBitOp[int8] + __rrshift__: _BoolBitOp[int8] + __and__: _BoolBitOp[bool_] + __rand__: _BoolBitOp[bool_] + __xor__: _BoolBitOp[bool_] + __rxor__: _BoolBitOp[bool_] + __or__: _BoolBitOp[bool_] + __ror__: _BoolBitOp[bool_] + __mod__: _BoolMod + __rmod__: _BoolMod + __divmod__: _BoolDivMod + __rdivmod__: _BoolDivMod + __lt__: _ComparisonOp[_NumberLike_co, _ArrayLikeNumber_co] + __le__: _ComparisonOp[_NumberLike_co, _ArrayLikeNumber_co] + __gt__: _ComparisonOp[_NumberLike_co, _ArrayLikeNumber_co] + __ge__: _ComparisonOp[_NumberLike_co, _ArrayLikeNumber_co] + +bool8 = bool_ + +class object_(generic): + def __init__(self, __value: object = ...) -> None: ... + @property + def real(self: _ArraySelf) -> _ArraySelf: ... + @property + def imag(self: _ArraySelf) -> _ArraySelf: ... + # The 3 protocols below may or may not raise, + # depending on the underlying object + def __int__(self) -> int: ... + def __float__(self) -> float: ... + def __complex__(self) -> complex: ... + +object0 = object_ + +# The `datetime64` constructors requires an object with the three attributes below, +# and thus supports datetime duck typing +class _DatetimeScalar(Protocol): + @property + def day(self) -> int: ... + @property + def month(self) -> int: ... + @property + def year(self) -> int: ... + +# TODO: `item`/`tolist` returns either `dt.date`, `dt.datetime` or `int` +# depending on the unit +class datetime64(generic): + @overload + def __init__( + self, + __value: Union[None, datetime64, _CharLike_co, _DatetimeScalar] = ..., + __format: Union[_CharLike_co, Tuple[_CharLike_co, _IntLike_co]] = ..., + ) -> None: ... + @overload + def __init__( + self, + __value: int, + __format: Union[_CharLike_co, Tuple[_CharLike_co, _IntLike_co]] + ) -> None: ... + def __add__(self, other: _TD64Like_co) -> datetime64: ... + def __radd__(self, other: _TD64Like_co) -> datetime64: ... + @overload + def __sub__(self, other: datetime64) -> timedelta64: ... + @overload + def __sub__(self, other: _TD64Like_co) -> datetime64: ... + def __rsub__(self, other: datetime64) -> timedelta64: ... + __lt__: _ComparisonOp[datetime64, _ArrayLikeDT64_co] + __le__: _ComparisonOp[datetime64, _ArrayLikeDT64_co] + __gt__: _ComparisonOp[datetime64, _ArrayLikeDT64_co] + __ge__: _ComparisonOp[datetime64, _ArrayLikeDT64_co] + +# Support for `__index__` was added in python 3.8 (bpo-20092) +if sys.version_info >= (3, 8): + _IntValue = Union[SupportsInt, _CharLike_co, SupportsIndex] + _FloatValue = Union[None, _CharLike_co, SupportsFloat, SupportsIndex] + _ComplexValue = Union[ + None, + _CharLike_co, + SupportsFloat, + SupportsComplex, + SupportsIndex, + complex, # `complex` is not a subtype of `SupportsComplex` + ] +else: + _IntValue = Union[SupportsInt, _CharLike_co] + _FloatValue = Union[None, _CharLike_co, SupportsFloat] + _ComplexValue = Union[ + None, + _CharLike_co, + SupportsFloat, + SupportsComplex, + complex, + ] + +class integer(number[_NBit1]): # type: ignore + @property + def numerator(self: _ScalarType) -> _ScalarType: ... + @property + def denominator(self) -> L[1]: ... + @overload + def __round__(self, ndigits: None = ...) -> int: ... + @overload + def __round__(self: _ScalarType, ndigits: SupportsIndex) -> _ScalarType: ... + + # NOTE: `__index__` is technically defined in the bottom-most + # sub-classes (`int64`, `uint32`, etc) + def item( + self, + __args: Union[L[0], Tuple[()], Tuple[L[0]]] = ..., + ) -> int: ... + def tolist(self) -> int: ... + def __index__(self) -> int: ... + __truediv__: _IntTrueDiv[_NBit1] + __rtruediv__: _IntTrueDiv[_NBit1] + def __mod__(self, value: _IntLike_co) -> integer: ... + def __rmod__(self, value: _IntLike_co) -> integer: ... + def __invert__(self: _IntType) -> _IntType: ... + # Ensure that objects annotated as `integer` support bit-wise operations + def __lshift__(self, other: _IntLike_co) -> integer: ... + def __rlshift__(self, other: _IntLike_co) -> integer: ... + def __rshift__(self, other: _IntLike_co) -> integer: ... + def __rrshift__(self, other: _IntLike_co) -> integer: ... + def __and__(self, other: _IntLike_co) -> integer: ... + def __rand__(self, other: _IntLike_co) -> integer: ... + def __or__(self, other: _IntLike_co) -> integer: ... + def __ror__(self, other: _IntLike_co) -> integer: ... + def __xor__(self, other: _IntLike_co) -> integer: ... + def __rxor__(self, other: _IntLike_co) -> integer: ... + +class signedinteger(integer[_NBit1]): + def __init__(self, __value: _IntValue = ...) -> None: ... + __add__: _SignedIntOp[_NBit1] + __radd__: _SignedIntOp[_NBit1] + __sub__: _SignedIntOp[_NBit1] + __rsub__: _SignedIntOp[_NBit1] + __mul__: _SignedIntOp[_NBit1] + __rmul__: _SignedIntOp[_NBit1] + __floordiv__: _SignedIntOp[_NBit1] + __rfloordiv__: _SignedIntOp[_NBit1] + __pow__: _SignedIntOp[_NBit1] + __rpow__: _SignedIntOp[_NBit1] + __lshift__: _SignedIntBitOp[_NBit1] + __rlshift__: _SignedIntBitOp[_NBit1] + __rshift__: _SignedIntBitOp[_NBit1] + __rrshift__: _SignedIntBitOp[_NBit1] + __and__: _SignedIntBitOp[_NBit1] + __rand__: _SignedIntBitOp[_NBit1] + __xor__: _SignedIntBitOp[_NBit1] + __rxor__: _SignedIntBitOp[_NBit1] + __or__: _SignedIntBitOp[_NBit1] + __ror__: _SignedIntBitOp[_NBit1] + __mod__: _SignedIntMod[_NBit1] + __rmod__: _SignedIntMod[_NBit1] + __divmod__: _SignedIntDivMod[_NBit1] + __rdivmod__: _SignedIntDivMod[_NBit1] + +int8 = signedinteger[_8Bit] +int16 = signedinteger[_16Bit] +int32 = signedinteger[_32Bit] +int64 = signedinteger[_64Bit] + +byte = signedinteger[_NBitByte] +short = signedinteger[_NBitShort] +intc = signedinteger[_NBitIntC] +intp = signedinteger[_NBitIntP] +int0 = signedinteger[_NBitIntP] +int_ = signedinteger[_NBitInt] +longlong = signedinteger[_NBitLongLong] + +# TODO: `item`/`tolist` returns either `dt.timedelta` or `int` +# depending on the unit +class timedelta64(generic): + def __init__( + self, + __value: Union[None, int, _CharLike_co, dt.timedelta, timedelta64] = ..., + __format: Union[_CharLike_co, Tuple[_CharLike_co, _IntLike_co]] = ..., + ) -> None: ... + @property + def numerator(self: _ScalarType) -> _ScalarType: ... + @property + def denominator(self) -> L[1]: ... + + # NOTE: Only a limited number of units support conversion + # to builtin scalar types: `Y`, `M`, `ns`, `ps`, `fs`, `as` + def __int__(self) -> int: ... + def __float__(self) -> float: ... + def __complex__(self) -> complex: ... + def __neg__(self: _ArraySelf) -> _ArraySelf: ... + def __pos__(self: _ArraySelf) -> _ArraySelf: ... + def __abs__(self: _ArraySelf) -> _ArraySelf: ... + def __add__(self, other: _TD64Like_co) -> timedelta64: ... + def __radd__(self, other: _TD64Like_co) -> timedelta64: ... + def __sub__(self, other: _TD64Like_co) -> timedelta64: ... + def __rsub__(self, other: _TD64Like_co) -> timedelta64: ... + def __mul__(self, other: _FloatLike_co) -> timedelta64: ... + def __rmul__(self, other: _FloatLike_co) -> timedelta64: ... + __truediv__: _TD64Div[float64] + __floordiv__: _TD64Div[int64] + def __rtruediv__(self, other: timedelta64) -> float64: ... + def __rfloordiv__(self, other: timedelta64) -> int64: ... + def __mod__(self, other: timedelta64) -> timedelta64: ... + def __rmod__(self, other: timedelta64) -> timedelta64: ... + def __divmod__(self, other: timedelta64) -> Tuple[int64, timedelta64]: ... + def __rdivmod__(self, other: timedelta64) -> Tuple[int64, timedelta64]: ... + __lt__: _ComparisonOp[_TD64Like_co, _ArrayLikeTD64_co] + __le__: _ComparisonOp[_TD64Like_co, _ArrayLikeTD64_co] + __gt__: _ComparisonOp[_TD64Like_co, _ArrayLikeTD64_co] + __ge__: _ComparisonOp[_TD64Like_co, _ArrayLikeTD64_co] + +class unsignedinteger(integer[_NBit1]): + # NOTE: `uint64 + signedinteger -> float64` + def __init__(self, __value: _IntValue = ...) -> None: ... + __add__: _UnsignedIntOp[_NBit1] + __radd__: _UnsignedIntOp[_NBit1] + __sub__: _UnsignedIntOp[_NBit1] + __rsub__: _UnsignedIntOp[_NBit1] + __mul__: _UnsignedIntOp[_NBit1] + __rmul__: _UnsignedIntOp[_NBit1] + __floordiv__: _UnsignedIntOp[_NBit1] + __rfloordiv__: _UnsignedIntOp[_NBit1] + __pow__: _UnsignedIntOp[_NBit1] + __rpow__: _UnsignedIntOp[_NBit1] + __lshift__: _UnsignedIntBitOp[_NBit1] + __rlshift__: _UnsignedIntBitOp[_NBit1] + __rshift__: _UnsignedIntBitOp[_NBit1] + __rrshift__: _UnsignedIntBitOp[_NBit1] + __and__: _UnsignedIntBitOp[_NBit1] + __rand__: _UnsignedIntBitOp[_NBit1] + __xor__: _UnsignedIntBitOp[_NBit1] + __rxor__: _UnsignedIntBitOp[_NBit1] + __or__: _UnsignedIntBitOp[_NBit1] + __ror__: _UnsignedIntBitOp[_NBit1] + __mod__: _UnsignedIntMod[_NBit1] + __rmod__: _UnsignedIntMod[_NBit1] + __divmod__: _UnsignedIntDivMod[_NBit1] + __rdivmod__: _UnsignedIntDivMod[_NBit1] + +uint8 = unsignedinteger[_8Bit] +uint16 = unsignedinteger[_16Bit] +uint32 = unsignedinteger[_32Bit] +uint64 = unsignedinteger[_64Bit] + +ubyte = unsignedinteger[_NBitByte] +ushort = unsignedinteger[_NBitShort] +uintc = unsignedinteger[_NBitIntC] +uintp = unsignedinteger[_NBitIntP] +uint0 = unsignedinteger[_NBitIntP] +uint = unsignedinteger[_NBitInt] +ulonglong = unsignedinteger[_NBitLongLong] + +class inexact(number[_NBit1]): # type: ignore + def __getnewargs__(self: inexact[_64Bit]) -> Tuple[float, ...]: ... + +_IntType = TypeVar("_IntType", bound=integer) +_FloatType = TypeVar('_FloatType', bound=floating) + +class floating(inexact[_NBit1]): + def __init__(self, __value: _FloatValue = ...) -> None: ... + def item( + self, + __args: Union[L[0], Tuple[()], Tuple[L[0]]] = ..., + ) -> float: ... + def tolist(self) -> float: ... + def is_integer(self: float64) -> bool: ... + def hex(self: float64) -> str: ... + @classmethod + def fromhex(cls: Type[float64], __string: str) -> float64: ... + def as_integer_ratio(self) -> Tuple[int, int]: ... + if sys.version_info >= (3, 9): + def __ceil__(self: float64) -> int: ... + def __floor__(self: float64) -> int: ... + def __trunc__(self: float64) -> int: ... + def __getnewargs__(self: float64) -> Tuple[float]: ... + def __getformat__(self: float64, __typestr: L["double", "float"]) -> str: ... + @overload + def __round__(self, ndigits: None = ...) -> int: ... + @overload + def __round__(self: _ScalarType, ndigits: SupportsIndex) -> _ScalarType: ... + __add__: _FloatOp[_NBit1] + __radd__: _FloatOp[_NBit1] + __sub__: _FloatOp[_NBit1] + __rsub__: _FloatOp[_NBit1] + __mul__: _FloatOp[_NBit1] + __rmul__: _FloatOp[_NBit1] + __truediv__: _FloatOp[_NBit1] + __rtruediv__: _FloatOp[_NBit1] + __floordiv__: _FloatOp[_NBit1] + __rfloordiv__: _FloatOp[_NBit1] + __pow__: _FloatOp[_NBit1] + __rpow__: _FloatOp[_NBit1] + __mod__: _FloatMod[_NBit1] + __rmod__: _FloatMod[_NBit1] + __divmod__: _FloatDivMod[_NBit1] + __rdivmod__: _FloatDivMod[_NBit1] + +float16 = floating[_16Bit] +float32 = floating[_32Bit] +float64 = floating[_64Bit] + +half = floating[_NBitHalf] +single = floating[_NBitSingle] +double = floating[_NBitDouble] +float_ = floating[_NBitDouble] +longdouble = floating[_NBitLongDouble] +longfloat = floating[_NBitLongDouble] + +# The main reason for `complexfloating` having two typevars is cosmetic. +# It is used to clarify why `complex128`s precision is `_64Bit`, the latter +# describing the two 64 bit floats representing its real and imaginary component + +class complexfloating(inexact[_NBit1], Generic[_NBit1, _NBit2]): + def __init__(self, __value: _ComplexValue = ...) -> None: ... + def item( + self, + __args: Union[L[0], Tuple[()], Tuple[L[0]]] = ..., + ) -> complex: ... + def tolist(self) -> complex: ... + @property + def real(self) -> floating[_NBit1]: ... # type: ignore[override] + @property + def imag(self) -> floating[_NBit2]: ... # type: ignore[override] + def __abs__(self) -> floating[_NBit1]: ... # type: ignore[override] + def __getnewargs__(self: complex128) -> Tuple[float, float]: ... + # NOTE: Deprecated + # def __round__(self, ndigits=...): ... + __add__: _ComplexOp[_NBit1] + __radd__: _ComplexOp[_NBit1] + __sub__: _ComplexOp[_NBit1] + __rsub__: _ComplexOp[_NBit1] + __mul__: _ComplexOp[_NBit1] + __rmul__: _ComplexOp[_NBit1] + __truediv__: _ComplexOp[_NBit1] + __rtruediv__: _ComplexOp[_NBit1] + __floordiv__: _ComplexOp[_NBit1] + __rfloordiv__: _ComplexOp[_NBit1] + __pow__: _ComplexOp[_NBit1] + __rpow__: _ComplexOp[_NBit1] + +complex64 = complexfloating[_32Bit, _32Bit] +complex128 = complexfloating[_64Bit, _64Bit] + +csingle = complexfloating[_NBitSingle, _NBitSingle] +singlecomplex = complexfloating[_NBitSingle, _NBitSingle] +cdouble = complexfloating[_NBitDouble, _NBitDouble] +complex_ = complexfloating[_NBitDouble, _NBitDouble] +cfloat = complexfloating[_NBitDouble, _NBitDouble] +clongdouble = complexfloating[_NBitLongDouble, _NBitLongDouble] +clongfloat = complexfloating[_NBitLongDouble, _NBitLongDouble] +longcomplex = complexfloating[_NBitLongDouble, _NBitLongDouble] + +class flexible(generic): ... # type: ignore + +# TODO: `item`/`tolist` returns either `bytes` or `tuple` +# depending on whether or not it's used as an opaque bytes sequence +# or a structure +class void(flexible): + def __init__(self, __value: Union[_IntLike_co, bytes]) -> None: ... + @property + def real(self: _ArraySelf) -> _ArraySelf: ... + @property + def imag(self: _ArraySelf) -> _ArraySelf: ... + def setfield( + self, val: ArrayLike, dtype: DTypeLike, offset: int = ... + ) -> None: ... + def __getitem__(self, key: SupportsIndex) -> Any: ... + def __setitem__(self, key: SupportsIndex, value: ArrayLike) -> None: ... + +void0 = void + +class character(flexible): # type: ignore + def __int__(self) -> int: ... + def __float__(self) -> float: ... + +# NOTE: Most `np.bytes_` / `np.str_` methods return their +# builtin `bytes` / `str` counterpart + +class bytes_(character, bytes): + @overload + def __init__(self, __value: object = ...) -> None: ... + @overload + def __init__( + self, __value: str, encoding: str = ..., errors: str = ... + ) -> None: ... + def item( + self, + __args: Union[L[0], Tuple[()], Tuple[L[0]]] = ..., + ) -> bytes: ... + def tolist(self) -> bytes: ... + +string_ = bytes_ +bytes0 = bytes_ + +class str_(character, str): + @overload + def __init__(self, __value: object = ...) -> None: ... + @overload + def __init__( + self, __value: bytes, encoding: str = ..., errors: str = ... + ) -> None: ... + def item( + self, + __args: Union[L[0], Tuple[()], Tuple[L[0]]] = ..., + ) -> str: ... + def tolist(self) -> str: ... + +unicode_ = str_ +str0 = str_ + +def array( + object: object, + dtype: DTypeLike = ..., + *, + copy: bool = ..., + order: _OrderKACF = ..., + subok: bool = ..., + ndmin: int = ..., + like: ArrayLike = ..., +) -> ndarray: ... +def zeros( + shape: _ShapeLike, + dtype: DTypeLike = ..., + order: _OrderCF = ..., + *, + like: ArrayLike = ..., +) -> ndarray: ... +def empty( + shape: _ShapeLike, + dtype: DTypeLike = ..., + order: _OrderCF = ..., + *, + like: ArrayLike = ..., +) -> ndarray: ... + +# +# Constants +# + +Inf: Final[float] +Infinity: Final[float] +NAN: Final[float] +NINF: Final[float] +NZERO: Final[float] +NaN: Final[float] +PINF: Final[float] +PZERO: Final[float] +e: Final[float] +euler_gamma: Final[float] +inf: Final[float] +infty: Final[float] +nan: Final[float] +pi: Final[float] +ALLOW_THREADS: Final[int] +BUFSIZE: Final[int] +CLIP: Final[int] +ERR_CALL: Final[int] +ERR_DEFAULT: Final[int] +ERR_IGNORE: Final[int] +ERR_LOG: Final[int] +ERR_PRINT: Final[int] +ERR_RAISE: Final[int] +ERR_WARN: Final[int] +FLOATING_POINT_SUPPORT: Final[int] +FPE_DIVIDEBYZERO: Final[int] +FPE_INVALID: Final[int] +FPE_OVERFLOW: Final[int] +FPE_UNDERFLOW: Final[int] +MAXDIMS: Final[int] +MAY_SHARE_BOUNDS: Final[int] +MAY_SHARE_EXACT: Final[int] +RAISE: Final[int] +SHIFT_DIVIDEBYZERO: Final[int] +SHIFT_INVALID: Final[int] +SHIFT_OVERFLOW: Final[int] +SHIFT_UNDERFLOW: Final[int] +UFUNC_BUFSIZE_DEFAULT: Final[int] +WRAP: Final[int] +tracemalloc_domain: Final[int] + +little_endian: Final[bool] +True_: Final[bool_] +False_: Final[bool_] + +UFUNC_PYVALS_NAME: Final[str] + +newaxis: None + +# See `npt._ufunc` for more concrete nin-/nout-specific stubs +class ufunc: + @property + def __name__(self) -> str: ... + @property + def __doc__(self) -> str: ... + __call__: Callable[..., Any] + @property + def nin(self) -> int: ... + @property + def nout(self) -> int: ... + @property + def nargs(self) -> int: ... + @property + def ntypes(self) -> int: ... + @property + def types(self) -> List[str]: ... + # Broad return type because it has to encompass things like + # + # >>> np.logical_and.identity is True + # True + # >>> np.add.identity is 0 + # True + # >>> np.sin.identity is None + # True + # + # and any user-defined ufuncs. + @property + def identity(self) -> Any: ... + # This is None for ufuncs and a string for gufuncs. + @property + def signature(self) -> Optional[str]: ... + # The next four methods will always exist, but they will just + # raise a ValueError ufuncs with that don't accept two input + # arguments and return one output argument. Because of that we + # can't type them very precisely. + reduce: Any + accumulate: Any + reduce: Any + outer: Any + # Similarly at won't be defined for ufuncs that return multiple + # outputs, so we can't type it very precisely. + at: Any + +# Parameters: `__name__`, `ntypes` and `identity` +absolute: _UFunc_Nin1_Nout1[L['absolute'], L[20], None] +add: _UFunc_Nin2_Nout1[L['add'], L[22], L[0]] +arccos: _UFunc_Nin1_Nout1[L['arccos'], L[8], None] +arccosh: _UFunc_Nin1_Nout1[L['arccosh'], L[8], None] +arcsin: _UFunc_Nin1_Nout1[L['arcsin'], L[8], None] +arcsinh: _UFunc_Nin1_Nout1[L['arcsinh'], L[8], None] +arctan2: _UFunc_Nin2_Nout1[L['arctan2'], L[5], None] +arctan: _UFunc_Nin1_Nout1[L['arctan'], L[8], None] +arctanh: _UFunc_Nin1_Nout1[L['arctanh'], L[8], None] +bitwise_and: _UFunc_Nin2_Nout1[L['bitwise_and'], L[12], L[-1]] +bitwise_not: _UFunc_Nin1_Nout1[L['invert'], L[12], None] +bitwise_or: _UFunc_Nin2_Nout1[L['bitwise_or'], L[12], L[0]] +bitwise_xor: _UFunc_Nin2_Nout1[L['bitwise_xor'], L[12], L[0]] +cbrt: _UFunc_Nin1_Nout1[L['cbrt'], L[5], None] +ceil: _UFunc_Nin1_Nout1[L['ceil'], L[7], None] +conj: _UFunc_Nin1_Nout1[L['conjugate'], L[18], None] +conjugate: _UFunc_Nin1_Nout1[L['conjugate'], L[18], None] +copysign: _UFunc_Nin2_Nout1[L['copysign'], L[4], None] +cos: _UFunc_Nin1_Nout1[L['cos'], L[9], None] +cosh: _UFunc_Nin1_Nout1[L['cosh'], L[8], None] +deg2rad: _UFunc_Nin1_Nout1[L['deg2rad'], L[5], None] +degrees: _UFunc_Nin1_Nout1[L['degrees'], L[5], None] +divide: _UFunc_Nin2_Nout1[L['true_divide'], L[11], None] +divmod: _UFunc_Nin2_Nout2[L['divmod'], L[15], None] +equal: _UFunc_Nin2_Nout1[L['equal'], L[23], None] +exp2: _UFunc_Nin1_Nout1[L['exp2'], L[8], None] +exp: _UFunc_Nin1_Nout1[L['exp'], L[10], None] +expm1: _UFunc_Nin1_Nout1[L['expm1'], L[8], None] +fabs: _UFunc_Nin1_Nout1[L['fabs'], L[5], None] +float_power: _UFunc_Nin2_Nout1[L['float_power'], L[4], None] +floor: _UFunc_Nin1_Nout1[L['floor'], L[7], None] +floor_divide: _UFunc_Nin2_Nout1[L['floor_divide'], L[21], None] +fmax: _UFunc_Nin2_Nout1[L['fmax'], L[21], None] +fmin: _UFunc_Nin2_Nout1[L['fmin'], L[21], None] +fmod: _UFunc_Nin2_Nout1[L['fmod'], L[15], None] +frexp: _UFunc_Nin1_Nout2[L['frexp'], L[4], None] +gcd: _UFunc_Nin2_Nout1[L['gcd'], L[11], L[0]] +greater: _UFunc_Nin2_Nout1[L['greater'], L[23], None] +greater_equal: _UFunc_Nin2_Nout1[L['greater_equal'], L[23], None] +heaviside: _UFunc_Nin2_Nout1[L['heaviside'], L[4], None] +hypot: _UFunc_Nin2_Nout1[L['hypot'], L[5], L[0]] +invert: _UFunc_Nin1_Nout1[L['invert'], L[12], None] +isfinite: _UFunc_Nin1_Nout1[L['isfinite'], L[20], None] +isinf: _UFunc_Nin1_Nout1[L['isinf'], L[20], None] +isnan: _UFunc_Nin1_Nout1[L['isnan'], L[20], None] +isnat: _UFunc_Nin1_Nout1[L['isnat'], L[2], None] +lcm: _UFunc_Nin2_Nout1[L['lcm'], L[11], None] +ldexp: _UFunc_Nin2_Nout1[L['ldexp'], L[8], None] +left_shift: _UFunc_Nin2_Nout1[L['left_shift'], L[11], None] +less: _UFunc_Nin2_Nout1[L['less'], L[23], None] +less_equal: _UFunc_Nin2_Nout1[L['less_equal'], L[23], None] +log10: _UFunc_Nin1_Nout1[L['log10'], L[8], None] +log1p: _UFunc_Nin1_Nout1[L['log1p'], L[8], None] +log2: _UFunc_Nin1_Nout1[L['log2'], L[8], None] +log: _UFunc_Nin1_Nout1[L['log'], L[10], None] +logaddexp2: _UFunc_Nin2_Nout1[L['logaddexp2'], L[4], float] +logaddexp: _UFunc_Nin2_Nout1[L['logaddexp'], L[4], float] +logical_and: _UFunc_Nin2_Nout1[L['logical_and'], L[20], L[True]] +logical_not: _UFunc_Nin1_Nout1[L['logical_not'], L[20], None] +logical_or: _UFunc_Nin2_Nout1[L['logical_or'], L[20], L[False]] +logical_xor: _UFunc_Nin2_Nout1[L['logical_xor'], L[19], L[False]] +matmul: _GUFunc_Nin2_Nout1[L['matmul'], L[19], None] +maximum: _UFunc_Nin2_Nout1[L['maximum'], L[21], None] +minimum: _UFunc_Nin2_Nout1[L['minimum'], L[21], None] +mod: _UFunc_Nin2_Nout1[L['remainder'], L[16], None] +modf: _UFunc_Nin1_Nout2[L['modf'], L[4], None] +multiply: _UFunc_Nin2_Nout1[L['multiply'], L[23], L[1]] +negative: _UFunc_Nin1_Nout1[L['negative'], L[19], None] +nextafter: _UFunc_Nin2_Nout1[L['nextafter'], L[4], None] +not_equal: _UFunc_Nin2_Nout1[L['not_equal'], L[23], None] +positive: _UFunc_Nin1_Nout1[L['positive'], L[19], None] +power: _UFunc_Nin2_Nout1[L['power'], L[18], None] +rad2deg: _UFunc_Nin1_Nout1[L['rad2deg'], L[5], None] +radians: _UFunc_Nin1_Nout1[L['radians'], L[5], None] +reciprocal: _UFunc_Nin1_Nout1[L['reciprocal'], L[18], None] +remainder: _UFunc_Nin2_Nout1[L['remainder'], L[16], None] +right_shift: _UFunc_Nin2_Nout1[L['right_shift'], L[11], None] +rint: _UFunc_Nin1_Nout1[L['rint'], L[10], None] +sign: _UFunc_Nin1_Nout1[L['sign'], L[19], None] +signbit: _UFunc_Nin1_Nout1[L['signbit'], L[4], None] +sin: _UFunc_Nin1_Nout1[L['sin'], L[9], None] +sinh: _UFunc_Nin1_Nout1[L['sinh'], L[8], None] +spacing: _UFunc_Nin1_Nout1[L['spacing'], L[4], None] +sqrt: _UFunc_Nin1_Nout1[L['sqrt'], L[10], None] +square: _UFunc_Nin1_Nout1[L['square'], L[18], None] +subtract: _UFunc_Nin2_Nout1[L['subtract'], L[21], None] +tan: _UFunc_Nin1_Nout1[L['tan'], L[8], None] +tanh: _UFunc_Nin1_Nout1[L['tanh'], L[8], None] +true_divide: _UFunc_Nin2_Nout1[L['true_divide'], L[11], None] +trunc: _UFunc_Nin1_Nout1[L['trunc'], L[7], None] + +abs = absolute + +# Warnings +class ModuleDeprecationWarning(DeprecationWarning): ... +class VisibleDeprecationWarning(UserWarning): ... +class ComplexWarning(RuntimeWarning): ... +class RankWarning(UserWarning): ... + +# Errors +class TooHardError(RuntimeError): ... + +class AxisError(ValueError, IndexError): + def __init__( + self, axis: int, ndim: Optional[int] = ..., msg_prefix: Optional[str] = ... + ) -> None: ... + +_CallType = TypeVar("_CallType", bound=Union[_ErrFunc, _SupportsWrite]) + +class errstate(Generic[_CallType], ContextDecorator): + call: _CallType + kwargs: _ErrDictOptional + + # Expand `**kwargs` into explicit keyword-only arguments + def __init__( + self, + *, + call: _CallType = ..., + all: Optional[_ErrKind] = ..., + divide: Optional[_ErrKind] = ..., + over: Optional[_ErrKind] = ..., + under: Optional[_ErrKind] = ..., + invalid: Optional[_ErrKind] = ..., + ) -> None: ... + def __enter__(self) -> None: ... + def __exit__( + self, + __exc_type: Optional[Type[BaseException]], + __exc_value: Optional[BaseException], + __traceback: Optional[TracebackType], + ) -> None: ... + +class ndenumerate(Generic[_ScalarType]): + iter: flatiter[NDArray[_ScalarType]] + @overload + def __new__( + cls, arr: _NestedSequence[_SupportsArray[dtype[_ScalarType]]], + ) -> ndenumerate[_ScalarType]: ... + @overload + def __new__(cls, arr: _NestedSequence[str]) -> ndenumerate[str_]: ... + @overload + def __new__(cls, arr: _NestedSequence[bytes]) -> ndenumerate[bytes_]: ... + @overload + def __new__(cls, arr: _NestedSequence[bool]) -> ndenumerate[bool_]: ... + @overload + def __new__(cls, arr: _NestedSequence[int]) -> ndenumerate[int_]: ... + @overload + def __new__(cls, arr: _NestedSequence[float]) -> ndenumerate[float_]: ... + @overload + def __new__(cls, arr: _NestedSequence[complex]) -> ndenumerate[complex_]: ... + @overload + def __new__(cls, arr: _RecursiveSequence) -> ndenumerate[Any]: ... + def __next__(self: ndenumerate[_ScalarType]) -> Tuple[_Shape, _ScalarType]: ... + def __iter__(self: _T) -> _T: ... + +class ndindex: + def __init__(self, *shape: SupportsIndex) -> None: ... + def __iter__(self: _T) -> _T: ... + def __next__(self) -> _Shape: ... + +class DataSource: + def __init__( + self, + destpath: Union[None, str, os.PathLike[str]] = ..., + ) -> None: ... + def __del__(self) -> None: ... + def abspath(self, path: str) -> str: ... + def exists(self, path: str) -> bool: ... + + # Whether the file-object is opened in string or bytes mode (by default) + # depends on the file-extension of `path` + def open( + self, + path: str, + mode: str = ..., + encoding: Optional[str] = ..., + newline: Optional[str] = ..., + ) -> IO[Any]: ... + +# TODO: The type of each `__next__` and `iters` return-type depends +# on the length and dtype of `args`; we can't describe this behavior yet +# as we lack variadics (PEP 646). +class broadcast: + def __new__(cls, *args: ArrayLike) -> broadcast: ... + @property + def index(self) -> int: ... + @property + def iters(self) -> Tuple[flatiter[Any], ...]: ... + @property + def nd(self) -> int: ... + @property + def ndim(self) -> int: ... + @property + def numiter(self) -> int: ... + @property + def shape(self) -> _Shape: ... + @property + def size(self) -> int: ... + def __next__(self) -> Tuple[Any, ...]: ... + def __iter__(self: _T) -> _T: ... + def reset(self) -> None: ... diff --git a/EXE version/main/numpy/char.pyi b/EXE version/main/numpy/char.pyi new file mode 100644 index 00000000..4904aa27 --- /dev/null +++ b/EXE version/main/numpy/char.pyi @@ -0,0 +1,59 @@ +from typing import Any, List + +from numpy import ( + chararray as chararray, +) + +__all__: List[str] + +def equal(x1, x2): ... +def not_equal(x1, x2): ... +def greater_equal(x1, x2): ... +def less_equal(x1, x2): ... +def greater(x1, x2): ... +def less(x1, x2): ... +def str_len(a): ... +def add(x1, x2): ... +def multiply(a, i): ... +def mod(a, values): ... +def capitalize(a): ... +def center(a, width, fillchar=...): ... +def count(a, sub, start=..., end=...): ... +def decode(a, encoding=..., errors=...): ... +def encode(a, encoding=..., errors=...): ... +def endswith(a, suffix, start=..., end=...): ... +def expandtabs(a, tabsize=...): ... +def find(a, sub, start=..., end=...): ... +def index(a, sub, start=..., end=...): ... +def isalnum(a): ... +def isalpha(a): ... +def isdigit(a): ... +def islower(a): ... +def isspace(a): ... +def istitle(a): ... +def isupper(a): ... +def join(sep, seq): ... +def ljust(a, width, fillchar=...): ... +def lower(a): ... +def lstrip(a, chars=...): ... +def partition(a, sep): ... +def replace(a, old, new, count=...): ... +def rfind(a, sub, start=..., end=...): ... +def rindex(a, sub, start=..., end=...): ... +def rjust(a, width, fillchar=...): ... +def rpartition(a, sep): ... +def rsplit(a, sep=..., maxsplit=...): ... +def rstrip(a, chars=...): ... +def split(a, sep=..., maxsplit=...): ... +def splitlines(a, keepends=...): ... +def startswith(a, prefix, start=..., end=...): ... +def strip(a, chars=...): ... +def swapcase(a): ... +def title(a): ... +def translate(a, table, deletechars=...): ... +def upper(a): ... +def zfill(a, width): ... +def isnumeric(a): ... +def isdecimal(a): ... +def array(obj, itemsize=..., copy=..., unicode=..., order=...): ... +def asarray(obj, itemsize=..., unicode=..., order=...): ... diff --git a/EXE version/main/numpy/core/__init__.pyi b/EXE version/main/numpy/core/__init__.pyi new file mode 100644 index 00000000..4c7a42bf --- /dev/null +++ b/EXE version/main/numpy/core/__init__.pyi @@ -0,0 +1,2 @@ +# NOTE: The `np.core` namespace is deliberately kept empty due to it +# being private (despite the lack of leading underscore) diff --git a/EXE version/main/numpy/core/_asarray.pyi b/EXE version/main/numpy/core/_asarray.pyi new file mode 100644 index 00000000..ee21fc0f --- /dev/null +++ b/EXE version/main/numpy/core/_asarray.pyi @@ -0,0 +1,81 @@ +import sys +from typing import TypeVar, Union, Iterable, overload + +from numpy import ndarray, _OrderKACF +from numpy.typing import ArrayLike, DTypeLike + +if sys.version_info >= (3, 8): + from typing import Literal +else: + from typing_extensions import Literal + +_ArrayType = TypeVar("_ArrayType", bound=ndarray) + +# TODO: The following functions are now defined in C, so should be defined +# in a (not yet existing) `multiarray.pyi`. +# (with the exception of `require`) + +def asarray( + a: object, + dtype: DTypeLike = ..., + order: _OrderKACF = ..., + *, + like: ArrayLike = ... +) -> ndarray: ... +@overload +def asanyarray( + a: _ArrayType, + dtype: None = ..., + order: _OrderKACF = ..., + *, + like: ArrayLike = ... +) -> _ArrayType: ... +@overload +def asanyarray( + a: object, + dtype: DTypeLike = ..., + order: _OrderKACF = ..., + *, + like: ArrayLike = ... +) -> ndarray: ... +def ascontiguousarray( + a: object, dtype: DTypeLike = ..., *, like: ArrayLike = ... +) -> ndarray: ... +def asfortranarray( + a: object, dtype: DTypeLike = ..., *, like: ArrayLike = ... +) -> ndarray: ... + +_Requirements = Literal[ + "C", "C_CONTIGUOUS", "CONTIGUOUS", + "F", "F_CONTIGUOUS", "FORTRAN", + "A", "ALIGNED", + "W", "WRITEABLE", + "O", "OWNDATA" +] +_E = Literal["E", "ENSUREARRAY"] +_RequirementsWithE = Union[_Requirements, _E] + +@overload +def require( + a: _ArrayType, + dtype: None = ..., + requirements: Union[None, _Requirements, Iterable[_Requirements]] = ..., + *, + like: ArrayLike = ... +) -> _ArrayType: ... +@overload +def require( + a: object, + dtype: DTypeLike = ..., + requirements: Union[_E, Iterable[_RequirementsWithE]] = ..., + *, + like: ArrayLike = ... +) -> ndarray: ... +@overload +def require( + a: object, + dtype: DTypeLike = ..., + requirements: Union[None, _Requirements, Iterable[_Requirements]] = ..., + *, + like: ArrayLike = ... +) -> ndarray: ... diff --git a/EXE version/main/numpy/core/_internal.pyi b/EXE version/main/numpy/core/_internal.pyi new file mode 100644 index 00000000..1ef1c9fa --- /dev/null +++ b/EXE version/main/numpy/core/_internal.pyi @@ -0,0 +1,35 @@ +from typing import Any, TypeVar, Type, overload, Optional, Generic +import ctypes as ct + +from numpy import ndarray + +_CastT = TypeVar("_CastT", bound=ct._CanCastTo) # Copied from `ctypes.cast` +_CT = TypeVar("_CT", bound=ct._CData) +_PT = TypeVar("_PT", bound=Optional[int]) + +# TODO: Let the likes of `shape_as` and `strides_as` return `None` +# for 0D arrays once we've got shape-support + +class _ctypes(Generic[_PT]): + @overload + def __new__(cls, array: ndarray[Any, Any], ptr: None = ...) -> _ctypes[None]: ... + @overload + def __new__(cls, array: ndarray[Any, Any], ptr: _PT) -> _ctypes[_PT]: ... + + # NOTE: In practice `shape` and `strides` return one of the concrete + # platform dependant array-types (`c_int`, `c_long` or `c_longlong`) + # corresponding to C's `int_ptr_t`, as determined by `_getintp_ctype` + # TODO: Hook this in to the mypy plugin so that a more appropiate + # `ctypes._SimpleCData[int]` sub-type can be returned + @property + def data(self) -> _PT: ... + @property + def shape(self) -> ct.Array[ct.c_int64]: ... + @property + def strides(self) -> ct.Array[ct.c_int64]: ... + @property + def _as_parameter_(self) -> ct.c_void_p: ... + + def data_as(self, obj: Type[_CastT]) -> _CastT: ... + def shape_as(self, obj: Type[_CT]) -> ct.Array[_CT]: ... + def strides_as(self, obj: Type[_CT]) -> ct.Array[_CT]: ... diff --git a/EXE version/main/numpy/core/_multiarray_tests.cp39-win_amd64.pyd b/EXE version/main/numpy/core/_multiarray_tests.cp39-win_amd64.pyd new file mode 100644 index 00000000..4ad37f94 Binary files /dev/null and b/EXE version/main/numpy/core/_multiarray_tests.cp39-win_amd64.pyd differ diff --git a/EXE version/main/numpy/core/_multiarray_umath.cp39-win_amd64.pyd b/EXE version/main/numpy/core/_multiarray_umath.cp39-win_amd64.pyd new file mode 100644 index 00000000..e934c937 Binary files /dev/null and b/EXE version/main/numpy/core/_multiarray_umath.cp39-win_amd64.pyd differ diff --git a/EXE version/main/numpy/core/_type_aliases.pyi b/EXE version/main/numpy/core/_type_aliases.pyi new file mode 100644 index 00000000..6a1099cd --- /dev/null +++ b/EXE version/main/numpy/core/_type_aliases.pyi @@ -0,0 +1,19 @@ +import sys +from typing import Dict, Union, Type, List + +from numpy import generic, signedinteger, unsignedinteger, floating, complexfloating + +if sys.version_info >= (3, 8): + from typing import TypedDict +else: + from typing_extensions import TypedDict + +class _SCTypes(TypedDict): + int: List[Type[signedinteger]] + uint: List[Type[unsignedinteger]] + float: List[Type[floating]] + complex: List[Type[complexfloating]] + others: List[type] + +sctypeDict: Dict[Union[int, str], Type[generic]] +sctypes: _SCTypes diff --git a/EXE version/main/numpy/core/_ufunc_config.pyi b/EXE version/main/numpy/core/_ufunc_config.pyi new file mode 100644 index 00000000..e90f1c51 --- /dev/null +++ b/EXE version/main/numpy/core/_ufunc_config.pyi @@ -0,0 +1,43 @@ +import sys +from typing import Optional, Union, Callable, Any + +if sys.version_info >= (3, 8): + from typing import Literal, Protocol, TypedDict +else: + from typing_extensions import Literal, Protocol, TypedDict + +_ErrKind = Literal["ignore", "warn", "raise", "call", "print", "log"] +_ErrFunc = Callable[[str, int], Any] + +class _SupportsWrite(Protocol): + def write(self, __msg: str) -> Any: ... + +class _ErrDict(TypedDict): + divide: _ErrKind + over: _ErrKind + under: _ErrKind + invalid: _ErrKind + +class _ErrDictOptional(TypedDict, total=False): + all: Optional[_ErrKind] + divide: Optional[_ErrKind] + over: Optional[_ErrKind] + under: Optional[_ErrKind] + invalid: Optional[_ErrKind] + +def seterr( + all: Optional[_ErrKind] = ..., + divide: Optional[_ErrKind] = ..., + over: Optional[_ErrKind] = ..., + under: Optional[_ErrKind] = ..., + invalid: Optional[_ErrKind] = ..., +) -> _ErrDict: ... +def geterr() -> _ErrDict: ... +def setbufsize(size: int) -> int: ... +def getbufsize() -> int: ... +def seterrcall( + func: Union[None, _ErrFunc, _SupportsWrite] +) -> Union[None, _ErrFunc, _SupportsWrite]: ... +def geterrcall() -> Union[None, _ErrFunc, _SupportsWrite]: ... + +# See `numpy/__init__.pyi` for the `errstate` class diff --git a/EXE version/main/numpy/core/arrayprint.pyi b/EXE version/main/numpy/core/arrayprint.pyi new file mode 100644 index 00000000..ac2b6f5a --- /dev/null +++ b/EXE version/main/numpy/core/arrayprint.pyi @@ -0,0 +1,147 @@ +import sys +from types import TracebackType +from typing import Any, Optional, Callable, Union, Type + +# Using a private class is by no means ideal, but it is simply a consquence +# of a `contextlib.context` returning an instance of aformentioned class +from contextlib import _GeneratorContextManager + +from numpy import ( + ndarray, + generic, + bool_, + integer, + timedelta64, + datetime64, + floating, + complexfloating, + void, + str_, + bytes_, + longdouble, + clongdouble, +) +from numpy.typing import ArrayLike, _CharLike_co, _FloatLike_co + +if sys.version_info > (3, 8): + from typing import Literal, TypedDict, SupportsIndex +else: + from typing_extensions import Literal, TypedDict, SupportsIndex + +_FloatMode = Literal["fixed", "unique", "maxprec", "maxprec_equal"] + +class _FormatDict(TypedDict, total=False): + bool: Callable[[bool_], str] + int: Callable[[integer[Any]], str] + timedelta: Callable[[timedelta64], str] + datetime: Callable[[datetime64], str] + float: Callable[[floating[Any]], str] + longfloat: Callable[[longdouble], str] + complexfloat: Callable[[complexfloating[Any, Any]], str] + longcomplexfloat: Callable[[clongdouble], str] + void: Callable[[void], str] + numpystr: Callable[[_CharLike_co], str] + object: Callable[[object], str] + all: Callable[[object], str] + int_kind: Callable[[integer[Any]], str] + float_kind: Callable[[floating[Any]], str] + complex_kind: Callable[[complexfloating[Any, Any]], str] + str_kind: Callable[[_CharLike_co], str] + +class _FormatOptions(TypedDict): + precision: int + threshold: int + edgeitems: int + linewidth: int + suppress: bool + nanstr: str + infstr: str + formatter: Optional[_FormatDict] + sign: Literal["-", "+", " "] + floatmode: _FloatMode + legacy: Literal[False, "1.13"] + +def set_printoptions( + precision: Optional[SupportsIndex] = ..., + threshold: Optional[int] = ..., + edgeitems: Optional[int] = ..., + linewidth: Optional[int] = ..., + suppress: Optional[bool] = ..., + nanstr: Optional[str] = ..., + infstr: Optional[str] = ..., + formatter: Optional[_FormatDict] = ..., + sign: Optional[Literal["-", "+", " "]] = ..., + floatmode: Optional[_FloatMode] = ..., + *, + legacy: Optional[Literal[False, "1.13"]] = ... +) -> None: ... +def get_printoptions() -> _FormatOptions: ... +def array2string( + a: ndarray[Any, Any], + max_line_width: Optional[int] = ..., + precision: Optional[SupportsIndex] = ..., + suppress_small: Optional[bool] = ..., + separator: str = ..., + prefix: str = ..., + # NOTE: With the `style` argument being deprecated, + # all arguments between `formatter` and `suffix` are de facto + # keyworld-only arguments + *, + formatter: Optional[_FormatDict] = ..., + threshold: Optional[int] = ..., + edgeitems: Optional[int] = ..., + sign: Optional[Literal["-", "+", " "]] = ..., + floatmode: Optional[_FloatMode] = ..., + suffix: str = ..., + legacy: Optional[Literal[False, "1.13"]] = ..., +) -> str: ... +def format_float_scientific( + x: _FloatLike_co, + precision: Optional[int] = ..., + unique: bool = ..., + trim: Literal["k", ".", "0", "-"] = ..., + sign: bool = ..., + pad_left: Optional[int] = ..., + exp_digits: Optional[int] = ..., + min_digits: Optional[int] = ..., +) -> str: ... +def format_float_positional( + x: _FloatLike_co, + precision: Optional[int] = ..., + unique: bool = ..., + fractional: bool = ..., + trim: Literal["k", ".", "0", "-"] = ..., + sign: bool = ..., + pad_left: Optional[int] = ..., + pad_right: Optional[int] = ..., + min_digits: Optional[int] = ..., +) -> str: ... +def array_repr( + arr: ndarray[Any, Any], + max_line_width: Optional[int] = ..., + precision: Optional[SupportsIndex] = ..., + suppress_small: Optional[bool] = ..., +) -> str: ... +def array_str( + a: ndarray[Any, Any], + max_line_width: Optional[int] = ..., + precision: Optional[SupportsIndex] = ..., + suppress_small: Optional[bool] = ..., +) -> str: ... +def set_string_function( + f: Optional[Callable[[ndarray[Any, Any]], str]], repr: bool = ... +) -> None: ... +def printoptions( + precision: Optional[SupportsIndex] = ..., + threshold: Optional[int] = ..., + edgeitems: Optional[int] = ..., + linewidth: Optional[int] = ..., + suppress: Optional[bool] = ..., + nanstr: Optional[str] = ..., + infstr: Optional[str] = ..., + formatter: Optional[_FormatDict] = ..., + sign: Optional[Literal["-", "+", " "]] = ..., + floatmode: Optional[_FloatMode] = ..., + *, + legacy: Optional[Literal[False, "1.13"]] = ... +) -> _GeneratorContextManager[_FormatOptions]: ... diff --git a/EXE version/main/numpy/core/einsumfunc.pyi b/EXE version/main/numpy/core/einsumfunc.pyi new file mode 100644 index 00000000..2457e871 --- /dev/null +++ b/EXE version/main/numpy/core/einsumfunc.pyi @@ -0,0 +1,142 @@ +import sys +from typing import List, TypeVar, Optional, Any, overload, Union, Tuple, Sequence + +from numpy import ( + ndarray, + dtype, + bool_, + unsignedinteger, + signedinteger, + floating, + complexfloating, + number, + _OrderKACF, +) +from numpy.typing import ( + _ArrayLikeBool_co, + _ArrayLikeUInt_co, + _ArrayLikeInt_co, + _ArrayLikeFloat_co, + _ArrayLikeComplex_co, + _DTypeLikeBool, + _DTypeLikeUInt, + _DTypeLikeInt, + _DTypeLikeFloat, + _DTypeLikeComplex, + _DTypeLikeComplex_co, +) + +if sys.version_info >= (3, 8): + from typing import Literal +else: + from typing_extensions import Literal + +_ArrayType = TypeVar( + "_ArrayType", + bound=ndarray[Any, dtype[Union[bool_, number[Any]]]], +) + +_OptimizeKind = Union[ + None, bool, Literal["greedy", "optimal"], Sequence[Any] +] +_CastingSafe = Literal["no", "equiv", "safe", "same_kind"] +_CastingUnsafe = Literal["unsafe"] + +__all__: List[str] + +# TODO: Properly handle the `casting`-based combinatorics +# TODO: We need to evaluate the content `__subscripts` in order +# to identify whether or an array or scalar is returned. At a cursory +# glance this seems like something that can quite easilly be done with +# a mypy plugin. +# Something like `is_scalar = bool(__subscripts.partition("->")[-1])` +@overload +def einsum( + __subscripts: str, + *operands: _ArrayLikeBool_co, + out: None = ..., + dtype: Optional[_DTypeLikeBool] = ..., + order: _OrderKACF = ..., + casting: _CastingSafe = ..., + optimize: _OptimizeKind = ..., +) -> Any: ... +@overload +def einsum( + __subscripts: str, + *operands: _ArrayLikeUInt_co, + out: None = ..., + dtype: Optional[_DTypeLikeUInt] = ..., + order: _OrderKACF = ..., + casting: _CastingSafe = ..., + optimize: _OptimizeKind = ..., +) -> Any: ... +@overload +def einsum( + __subscripts: str, + *operands: _ArrayLikeInt_co, + out: None = ..., + dtype: Optional[_DTypeLikeInt] = ..., + order: _OrderKACF = ..., + casting: _CastingSafe = ..., + optimize: _OptimizeKind = ..., +) -> Any: ... +@overload +def einsum( + __subscripts: str, + *operands: _ArrayLikeFloat_co, + out: None = ..., + dtype: Optional[_DTypeLikeFloat] = ..., + order: _OrderKACF = ..., + casting: _CastingSafe = ..., + optimize: _OptimizeKind = ..., +) -> Any: ... +@overload +def einsum( + __subscripts: str, + *operands: _ArrayLikeComplex_co, + out: None = ..., + dtype: Optional[_DTypeLikeComplex] = ..., + order: _OrderKACF = ..., + casting: _CastingSafe = ..., + optimize: _OptimizeKind = ..., +) -> Any: ... +@overload +def einsum( + __subscripts: str, + *operands: Any, + casting: _CastingUnsafe, + dtype: Optional[_DTypeLikeComplex_co] = ..., + out: None = ..., + order: _OrderKACF = ..., + optimize: _OptimizeKind = ..., +) -> Any: ... +@overload +def einsum( + __subscripts: str, + *operands: _ArrayLikeComplex_co, + out: _ArrayType, + dtype: Optional[_DTypeLikeComplex_co] = ..., + order: _OrderKACF = ..., + casting: _CastingSafe = ..., + optimize: _OptimizeKind = ..., +) -> _ArrayType: ... +@overload +def einsum( + __subscripts: str, + *operands: Any, + out: _ArrayType, + casting: _CastingUnsafe, + dtype: Optional[_DTypeLikeComplex_co] = ..., + order: _OrderKACF = ..., + optimize: _OptimizeKind = ..., +) -> _ArrayType: ... + +# NOTE: `einsum_call` is a hidden kwarg unavailable for public use. +# It is therefore excluded from the signatures below. +# NOTE: In practice the list consists of a `str` (first element) +# and a variable number of integer tuples. +def einsum_path( + __subscripts: str, + *operands: _ArrayLikeComplex_co, + optimize: _OptimizeKind = ..., +) -> Tuple[List[Any], str]: ... diff --git a/EXE version/main/numpy/core/fromnumeric.pyi b/EXE version/main/numpy/core/fromnumeric.pyi new file mode 100644 index 00000000..3342ec3a --- /dev/null +++ b/EXE version/main/numpy/core/fromnumeric.pyi @@ -0,0 +1,361 @@ +import sys +import datetime as dt +from typing import Optional, Union, Sequence, Tuple, Any, overload, TypeVar + +from numpy import ( + ndarray, + number, + integer, + intp, + bool_, + generic, + _OrderKACF, + _OrderACF, + _ModeKind, + _PartitionKind, + _SortKind, + _SortSide, +) +from numpy.typing import ( + DTypeLike, + ArrayLike, + _ShapeLike, + _Shape, + _ArrayLikeBool_co, + _ArrayLikeInt_co, + _NumberLike_co, +) + +if sys.version_info >= (3, 8): + from typing import Literal +else: + from typing_extensions import Literal + +# Various annotations for scalars + +# While dt.datetime and dt.timedelta are not technically part of NumPy, +# they are one of the rare few builtin scalars which serve as valid return types. +# See https://github.com/numpy/numpy-stubs/pull/67#discussion_r412604113. +_ScalarNumpy = Union[generic, dt.datetime, dt.timedelta] +_ScalarBuiltin = Union[str, bytes, dt.date, dt.timedelta, bool, int, float, complex] +_Scalar = Union[_ScalarBuiltin, _ScalarNumpy] + +# Integers and booleans can generally be used interchangeably +_ScalarGeneric = TypeVar("_ScalarGeneric", bound=generic) + +_Number = TypeVar("_Number", bound=number) + +# The signature of take() follows a common theme with its overloads: +# 1. A generic comes in; the same generic comes out +# 2. A scalar comes in; a generic comes out +# 3. An array-like object comes in; some keyword ensures that a generic comes out +# 4. An array-like object comes in; an ndarray or generic comes out +def take( + a: ArrayLike, + indices: _ArrayLikeInt_co, + axis: Optional[int] = ..., + out: Optional[ndarray] = ..., + mode: _ModeKind = ..., +) -> Any: ... + +def reshape( + a: ArrayLike, + newshape: _ShapeLike, + order: _OrderACF = ..., +) -> ndarray: ... + +def choose( + a: _ArrayLikeInt_co, + choices: ArrayLike, + out: Optional[ndarray] = ..., + mode: _ModeKind = ..., +) -> Any: ... + +def repeat( + a: ArrayLike, + repeats: _ArrayLikeInt_co, + axis: Optional[int] = ..., +) -> ndarray: ... + +def put( + a: ndarray, + ind: _ArrayLikeInt_co, + v: ArrayLike, + mode: _ModeKind = ..., +) -> None: ... + +def swapaxes( + a: ArrayLike, + axis1: int, + axis2: int, +) -> ndarray: ... + +def transpose( + a: ArrayLike, + axes: Union[None, Sequence[int], ndarray] = ... +) -> ndarray: ... + +def partition( + a: ArrayLike, + kth: _ArrayLikeInt_co, + axis: Optional[int] = ..., + kind: _PartitionKind = ..., + order: Union[None, str, Sequence[str]] = ..., +) -> ndarray: ... + +def argpartition( + a: ArrayLike, + kth: _ArrayLikeInt_co, + axis: Optional[int] = ..., + kind: _PartitionKind = ..., + order: Union[None, str, Sequence[str]] = ..., +) -> Any: ... + +def sort( + a: ArrayLike, + axis: Optional[int] = ..., + kind: Optional[_SortKind] = ..., + order: Union[None, str, Sequence[str]] = ..., +) -> ndarray: ... + +def argsort( + a: ArrayLike, + axis: Optional[int] = ..., + kind: Optional[_SortKind] = ..., + order: Union[None, str, Sequence[str]] = ..., +) -> ndarray: ... + +@overload +def argmax( + a: ArrayLike, + axis: None = ..., + out: Optional[ndarray] = ..., +) -> intp: ... +@overload +def argmax( + a: ArrayLike, + axis: Optional[int] = ..., + out: Optional[ndarray] = ..., +) -> Any: ... + +@overload +def argmin( + a: ArrayLike, + axis: None = ..., + out: Optional[ndarray] = ..., +) -> intp: ... +@overload +def argmin( + a: ArrayLike, + axis: Optional[int] = ..., + out: Optional[ndarray] = ..., +) -> Any: ... + +@overload +def searchsorted( + a: ArrayLike, + v: _Scalar, + side: _SortSide = ..., + sorter: Optional[_ArrayLikeInt_co] = ..., # 1D int array +) -> intp: ... +@overload +def searchsorted( + a: ArrayLike, + v: ArrayLike, + side: _SortSide = ..., + sorter: Optional[_ArrayLikeInt_co] = ..., # 1D int array +) -> ndarray: ... + +def resize( + a: ArrayLike, + new_shape: _ShapeLike, +) -> ndarray: ... + +@overload +def squeeze( + a: _ScalarGeneric, + axis: Optional[_ShapeLike] = ..., +) -> _ScalarGeneric: ... +@overload +def squeeze( + a: ArrayLike, + axis: Optional[_ShapeLike] = ..., +) -> ndarray: ... + +def diagonal( + a: ArrayLike, + offset: int = ..., + axis1: int = ..., + axis2: int = ..., # >= 2D array +) -> ndarray: ... + +def trace( + a: ArrayLike, # >= 2D array + offset: int = ..., + axis1: int = ..., + axis2: int = ..., + dtype: DTypeLike = ..., + out: Optional[ndarray] = ..., +) -> Any: ... + +def ravel(a: ArrayLike, order: _OrderKACF = ...) -> ndarray: ... + +def nonzero(a: ArrayLike) -> Tuple[ndarray, ...]: ... + +def shape(a: ArrayLike) -> _Shape: ... + +def compress( + condition: ArrayLike, # 1D bool array + a: ArrayLike, + axis: Optional[int] = ..., + out: Optional[ndarray] = ..., +) -> ndarray: ... + +@overload +def clip( + a: ArrayLike, + a_min: ArrayLike, + a_max: Optional[ArrayLike], + out: Optional[ndarray] = ..., + **kwargs: Any, +) -> Any: ... +@overload +def clip( + a: ArrayLike, + a_min: None, + a_max: ArrayLike, + out: Optional[ndarray] = ..., + **kwargs: Any, +) -> Any: ... + +def sum( + a: ArrayLike, + axis: _ShapeLike = ..., + dtype: DTypeLike = ..., + out: Optional[ndarray] = ..., + keepdims: bool = ..., + initial: _NumberLike_co = ..., + where: _ArrayLikeBool_co = ..., +) -> Any: ... + +@overload +def all( + a: ArrayLike, + axis: None = ..., + out: None = ..., + keepdims: Literal[False] = ..., +) -> bool_: ... +@overload +def all( + a: ArrayLike, + axis: Optional[_ShapeLike] = ..., + out: Optional[ndarray] = ..., + keepdims: bool = ..., +) -> Any: ... + +@overload +def any( + a: ArrayLike, + axis: None = ..., + out: None = ..., + keepdims: Literal[False] = ..., +) -> bool_: ... +@overload +def any( + a: ArrayLike, + axis: Optional[_ShapeLike] = ..., + out: Optional[ndarray] = ..., + keepdims: bool = ..., +) -> Any: ... + +def cumsum( + a: ArrayLike, + axis: Optional[int] = ..., + dtype: DTypeLike = ..., + out: Optional[ndarray] = ..., +) -> ndarray: ... + +def ptp( + a: ArrayLike, + axis: Optional[_ShapeLike] = ..., + out: Optional[ndarray] = ..., + keepdims: bool = ..., +) -> Any: ... + +def amax( + a: ArrayLike, + axis: Optional[_ShapeLike] = ..., + out: Optional[ndarray] = ..., + keepdims: bool = ..., + initial: _NumberLike_co = ..., + where: _ArrayLikeBool_co = ..., +) -> Any: ... + +def amin( + a: ArrayLike, + axis: Optional[_ShapeLike] = ..., + out: Optional[ndarray] = ..., + keepdims: bool = ..., + initial: _NumberLike_co = ..., + where: _ArrayLikeBool_co = ..., +) -> Any: ... + +# TODO: `np.prod()``: For object arrays `initial` does not necessarily +# have to be a numerical scalar. +# The only requirement is that it is compatible +# with the `.__mul__()` method(s) of the passed array's elements. + +# Note that the same situation holds for all wrappers around +# `np.ufunc.reduce`, e.g. `np.sum()` (`.__add__()`). +def prod( + a: ArrayLike, + axis: Optional[_ShapeLike] = ..., + dtype: DTypeLike = ..., + out: Optional[ndarray] = ..., + keepdims: bool = ..., + initial: _NumberLike_co = ..., + where: _ArrayLikeBool_co = ..., +) -> Any: ... + +def cumprod( + a: ArrayLike, + axis: Optional[int] = ..., + dtype: DTypeLike = ..., + out: Optional[ndarray] = ..., +) -> ndarray: ... + +def ndim(a: ArrayLike) -> int: ... + +def size(a: ArrayLike, axis: Optional[int] = ...) -> int: ... + +def around( + a: ArrayLike, + decimals: int = ..., + out: Optional[ndarray] = ..., +) -> Any: ... + +def mean( + a: ArrayLike, + axis: Optional[_ShapeLike] = ..., + dtype: DTypeLike = ..., + out: Optional[ndarray] = ..., + keepdims: bool = ..., +) -> Any: ... + +def std( + a: ArrayLike, + axis: Optional[_ShapeLike] = ..., + dtype: DTypeLike = ..., + out: Optional[ndarray] = ..., + ddof: int = ..., + keepdims: bool = ..., +) -> Any: ... + +def var( + a: ArrayLike, + axis: Optional[_ShapeLike] = ..., + dtype: DTypeLike = ..., + out: Optional[ndarray] = ..., + ddof: int = ..., + keepdims: bool = ..., +) -> Any: ... diff --git a/EXE version/main/numpy/core/function_base.pyi b/EXE version/main/numpy/core/function_base.pyi new file mode 100644 index 00000000..b5d6ca6a --- /dev/null +++ b/EXE version/main/numpy/core/function_base.pyi @@ -0,0 +1,55 @@ +import sys +from typing import overload, Tuple, Union, Sequence, Any + +from numpy import ndarray +from numpy.typing import ArrayLike, DTypeLike, _SupportsArray, _NumberLike_co + +if sys.version_info >= (3, 8): + from typing import SupportsIndex, Literal +else: + from typing_extensions import SupportsIndex, Literal + +# TODO: wait for support for recursive types +_ArrayLikeNested = Sequence[Sequence[Any]] +_ArrayLikeNumber = Union[ + _NumberLike_co, Sequence[_NumberLike_co], ndarray, _SupportsArray, _ArrayLikeNested +] +@overload +def linspace( + start: _ArrayLikeNumber, + stop: _ArrayLikeNumber, + num: SupportsIndex = ..., + endpoint: bool = ..., + retstep: Literal[False] = ..., + dtype: DTypeLike = ..., + axis: SupportsIndex = ..., +) -> ndarray: ... +@overload +def linspace( + start: _ArrayLikeNumber, + stop: _ArrayLikeNumber, + num: SupportsIndex = ..., + endpoint: bool = ..., + retstep: Literal[True] = ..., + dtype: DTypeLike = ..., + axis: SupportsIndex = ..., +) -> Tuple[ndarray, Any]: ... + +def logspace( + start: _ArrayLikeNumber, + stop: _ArrayLikeNumber, + num: SupportsIndex = ..., + endpoint: bool = ..., + base: _ArrayLikeNumber = ..., + dtype: DTypeLike = ..., + axis: SupportsIndex = ..., +) -> ndarray: ... + +def geomspace( + start: _ArrayLikeNumber, + stop: _ArrayLikeNumber, + num: SupportsIndex = ..., + endpoint: bool = ..., + dtype: DTypeLike = ..., + axis: SupportsIndex = ..., +) -> ndarray: ... diff --git a/EXE version/main/numpy/core/include/numpy/__multiarray_api.h b/EXE version/main/numpy/core/include/numpy/__multiarray_api.h new file mode 100644 index 00000000..a375c8ca --- /dev/null +++ b/EXE version/main/numpy/core/include/numpy/__multiarray_api.h @@ -0,0 +1,1540 @@ + +#if defined(_MULTIARRAYMODULE) || defined(WITH_CPYCHECKER_STEALS_REFERENCE_TO_ARG_ATTRIBUTE) + +typedef struct { + PyObject_HEAD + npy_bool obval; +} PyBoolScalarObject; + +extern NPY_NO_EXPORT PyTypeObject PyArrayMapIter_Type; +extern NPY_NO_EXPORT PyTypeObject PyArrayNeighborhoodIter_Type; +extern NPY_NO_EXPORT PyBoolScalarObject _PyArrayScalar_BoolValues[2]; + +NPY_NO_EXPORT unsigned int PyArray_GetNDArrayCVersion \ + (void); +extern NPY_NO_EXPORT PyTypeObject PyBigArray_Type; + +extern NPY_NO_EXPORT PyTypeObject PyArray_Type; + +extern NPY_NO_EXPORT PyArray_DTypeMeta PyArrayDescr_TypeFull; +#define PyArrayDescr_Type (*(PyTypeObject *)(&PyArrayDescr_TypeFull)) + +extern NPY_NO_EXPORT PyTypeObject PyArrayFlags_Type; + +extern NPY_NO_EXPORT PyTypeObject PyArrayIter_Type; + +extern NPY_NO_EXPORT PyTypeObject PyArrayMultiIter_Type; + +extern NPY_NO_EXPORT int NPY_NUMUSERTYPES; + +extern NPY_NO_EXPORT PyTypeObject PyBoolArrType_Type; + +extern NPY_NO_EXPORT PyBoolScalarObject _PyArrayScalar_BoolValues[2]; + +extern NPY_NO_EXPORT PyTypeObject PyGenericArrType_Type; + +extern NPY_NO_EXPORT PyTypeObject PyNumberArrType_Type; + +extern NPY_NO_EXPORT PyTypeObject PyIntegerArrType_Type; + +extern NPY_NO_EXPORT PyTypeObject PySignedIntegerArrType_Type; + +extern NPY_NO_EXPORT PyTypeObject PyUnsignedIntegerArrType_Type; + +extern NPY_NO_EXPORT PyTypeObject PyInexactArrType_Type; + +extern NPY_NO_EXPORT PyTypeObject PyFloatingArrType_Type; + +extern NPY_NO_EXPORT PyTypeObject PyComplexFloatingArrType_Type; + +extern NPY_NO_EXPORT PyTypeObject PyFlexibleArrType_Type; + +extern NPY_NO_EXPORT PyTypeObject PyCharacterArrType_Type; + +extern NPY_NO_EXPORT PyTypeObject PyByteArrType_Type; + +extern NPY_NO_EXPORT PyTypeObject PyShortArrType_Type; + +extern NPY_NO_EXPORT PyTypeObject PyIntArrType_Type; + +extern NPY_NO_EXPORT PyTypeObject PyLongArrType_Type; + +extern NPY_NO_EXPORT PyTypeObject PyLongLongArrType_Type; + +extern NPY_NO_EXPORT PyTypeObject PyUByteArrType_Type; + +extern NPY_NO_EXPORT PyTypeObject PyUShortArrType_Type; + +extern NPY_NO_EXPORT PyTypeObject PyUIntArrType_Type; + +extern NPY_NO_EXPORT PyTypeObject PyULongArrType_Type; + +extern NPY_NO_EXPORT PyTypeObject PyULongLongArrType_Type; + +extern NPY_NO_EXPORT PyTypeObject PyFloatArrType_Type; + +extern NPY_NO_EXPORT PyTypeObject PyDoubleArrType_Type; + +extern NPY_NO_EXPORT PyTypeObject PyLongDoubleArrType_Type; + +extern NPY_NO_EXPORT PyTypeObject PyCFloatArrType_Type; + +extern NPY_NO_EXPORT PyTypeObject PyCDoubleArrType_Type; + +extern NPY_NO_EXPORT PyTypeObject PyCLongDoubleArrType_Type; + +extern NPY_NO_EXPORT PyTypeObject PyObjectArrType_Type; + +extern NPY_NO_EXPORT PyTypeObject PyStringArrType_Type; + +extern NPY_NO_EXPORT PyTypeObject PyUnicodeArrType_Type; + +extern NPY_NO_EXPORT PyTypeObject PyVoidArrType_Type; + +NPY_NO_EXPORT int PyArray_SetNumericOps \ + (PyObject *); +NPY_NO_EXPORT PyObject * PyArray_GetNumericOps \ + (void); +NPY_NO_EXPORT int PyArray_INCREF \ + (PyArrayObject *); +NPY_NO_EXPORT int PyArray_XDECREF \ + (PyArrayObject *); +NPY_NO_EXPORT void PyArray_SetStringFunction \ + (PyObject *, int); +NPY_NO_EXPORT PyArray_Descr * PyArray_DescrFromType \ + (int); +NPY_NO_EXPORT PyObject * PyArray_TypeObjectFromType \ + (int); +NPY_NO_EXPORT char * PyArray_Zero \ + (PyArrayObject *); +NPY_NO_EXPORT char * PyArray_One \ + (PyArrayObject *); +NPY_NO_EXPORT NPY_STEALS_REF_TO_ARG(2) NPY_GCC_NONNULL(2) PyObject * PyArray_CastToType \ + (PyArrayObject *, PyArray_Descr *, int); +NPY_NO_EXPORT int PyArray_CastTo \ + (PyArrayObject *, PyArrayObject *); +NPY_NO_EXPORT int PyArray_CastAnyTo \ + (PyArrayObject *, PyArrayObject *); +NPY_NO_EXPORT int PyArray_CanCastSafely \ + (int, int); +NPY_NO_EXPORT npy_bool PyArray_CanCastTo \ + (PyArray_Descr *, PyArray_Descr *); +NPY_NO_EXPORT int PyArray_ObjectType \ + (PyObject *, int); +NPY_NO_EXPORT PyArray_Descr * PyArray_DescrFromObject \ + (PyObject *, PyArray_Descr *); +NPY_NO_EXPORT PyArrayObject ** PyArray_ConvertToCommonType \ + (PyObject *, int *); +NPY_NO_EXPORT PyArray_Descr * PyArray_DescrFromScalar \ + (PyObject *); +NPY_NO_EXPORT PyArray_Descr * PyArray_DescrFromTypeObject \ + (PyObject *); +NPY_NO_EXPORT npy_intp PyArray_Size \ + (PyObject *); +NPY_NO_EXPORT PyObject * PyArray_Scalar \ + (void *, PyArray_Descr *, PyObject *); +NPY_NO_EXPORT NPY_STEALS_REF_TO_ARG(2) PyObject * PyArray_FromScalar \ + (PyObject *, PyArray_Descr *); +NPY_NO_EXPORT void PyArray_ScalarAsCtype \ + (PyObject *, void *); +NPY_NO_EXPORT int PyArray_CastScalarToCtype \ + (PyObject *, void *, PyArray_Descr *); +NPY_NO_EXPORT int PyArray_CastScalarDirect \ + (PyObject *, PyArray_Descr *, void *, int); +NPY_NO_EXPORT PyObject * PyArray_ScalarFromObject \ + (PyObject *); +NPY_NO_EXPORT PyArray_VectorUnaryFunc * PyArray_GetCastFunc \ + (PyArray_Descr *, int); +NPY_NO_EXPORT PyObject * PyArray_FromDims \ + (int NPY_UNUSED(nd), int *NPY_UNUSED(d), int NPY_UNUSED(type)); +NPY_NO_EXPORT NPY_STEALS_REF_TO_ARG(3) PyObject * PyArray_FromDimsAndDataAndDescr \ + (int NPY_UNUSED(nd), int *NPY_UNUSED(d), PyArray_Descr *, char *NPY_UNUSED(data)); +NPY_NO_EXPORT NPY_STEALS_REF_TO_ARG(2) PyObject * PyArray_FromAny \ + (PyObject *, PyArray_Descr *, int, int, int, PyObject *); +NPY_NO_EXPORT NPY_STEALS_REF_TO_ARG(1) PyObject * PyArray_EnsureArray \ + (PyObject *); +NPY_NO_EXPORT NPY_STEALS_REF_TO_ARG(1) PyObject * PyArray_EnsureAnyArray \ + (PyObject *); +NPY_NO_EXPORT PyObject * PyArray_FromFile \ + (FILE *, PyArray_Descr *, npy_intp, char *); +NPY_NO_EXPORT PyObject * PyArray_FromString \ + (char *, npy_intp, PyArray_Descr *, npy_intp, char *); +NPY_NO_EXPORT PyObject * PyArray_FromBuffer \ + (PyObject *, PyArray_Descr *, npy_intp, npy_intp); +NPY_NO_EXPORT NPY_STEALS_REF_TO_ARG(2) PyObject * PyArray_FromIter \ + (PyObject *, PyArray_Descr *, npy_intp); +NPY_NO_EXPORT NPY_STEALS_REF_TO_ARG(1) PyObject * PyArray_Return \ + (PyArrayObject *); +NPY_NO_EXPORT NPY_STEALS_REF_TO_ARG(2) NPY_GCC_NONNULL(2) PyObject * PyArray_GetField \ + (PyArrayObject *, PyArray_Descr *, int); +NPY_NO_EXPORT NPY_STEALS_REF_TO_ARG(2) NPY_GCC_NONNULL(2) int PyArray_SetField \ + (PyArrayObject *, PyArray_Descr *, int, PyObject *); +NPY_NO_EXPORT PyObject * PyArray_Byteswap \ + (PyArrayObject *, npy_bool); +NPY_NO_EXPORT PyObject * PyArray_Resize \ + (PyArrayObject *, PyArray_Dims *, int, NPY_ORDER NPY_UNUSED(order)); +NPY_NO_EXPORT int PyArray_MoveInto \ + (PyArrayObject *, PyArrayObject *); +NPY_NO_EXPORT int PyArray_CopyInto \ + (PyArrayObject *, PyArrayObject *); +NPY_NO_EXPORT int PyArray_CopyAnyInto \ + (PyArrayObject *, PyArrayObject *); +NPY_NO_EXPORT int PyArray_CopyObject \ + (PyArrayObject *, PyObject *); +NPY_NO_EXPORT NPY_GCC_NONNULL(1) PyObject * PyArray_NewCopy \ + (PyArrayObject *, NPY_ORDER); +NPY_NO_EXPORT PyObject * PyArray_ToList \ + (PyArrayObject *); +NPY_NO_EXPORT PyObject * PyArray_ToString \ + (PyArrayObject *, NPY_ORDER); +NPY_NO_EXPORT int PyArray_ToFile \ + (PyArrayObject *, FILE *, char *, char *); +NPY_NO_EXPORT int PyArray_Dump \ + (PyObject *, PyObject *, int); +NPY_NO_EXPORT PyObject * PyArray_Dumps \ + (PyObject *, int); +NPY_NO_EXPORT int PyArray_ValidType \ + (int); +NPY_NO_EXPORT void PyArray_UpdateFlags \ + (PyArrayObject *, int); +NPY_NO_EXPORT NPY_GCC_NONNULL(1) PyObject * PyArray_New \ + (PyTypeObject *, int, npy_intp const *, int, npy_intp const *, void *, int, int, PyObject *); +NPY_NO_EXPORT NPY_STEALS_REF_TO_ARG(2) NPY_GCC_NONNULL(1) NPY_GCC_NONNULL(2) PyObject * PyArray_NewFromDescr \ + (PyTypeObject *, PyArray_Descr *, int, npy_intp const *, npy_intp const *, void *, int, PyObject *); +NPY_NO_EXPORT PyArray_Descr * PyArray_DescrNew \ + (PyArray_Descr *); +NPY_NO_EXPORT PyArray_Descr * PyArray_DescrNewFromType \ + (int); +NPY_NO_EXPORT double PyArray_GetPriority \ + (PyObject *, double); +NPY_NO_EXPORT PyObject * PyArray_IterNew \ + (PyObject *); +NPY_NO_EXPORT PyObject* PyArray_MultiIterNew \ + (int, ...); +NPY_NO_EXPORT int PyArray_PyIntAsInt \ + (PyObject *); +NPY_NO_EXPORT npy_intp PyArray_PyIntAsIntp \ + (PyObject *); +NPY_NO_EXPORT int PyArray_Broadcast \ + (PyArrayMultiIterObject *); +NPY_NO_EXPORT void PyArray_FillObjectArray \ + (PyArrayObject *, PyObject *); +NPY_NO_EXPORT int PyArray_FillWithScalar \ + (PyArrayObject *, PyObject *); +NPY_NO_EXPORT npy_bool PyArray_CheckStrides \ + (int, int, npy_intp, npy_intp, npy_intp const *, npy_intp const *); +NPY_NO_EXPORT PyArray_Descr * PyArray_DescrNewByteorder \ + (PyArray_Descr *, char); +NPY_NO_EXPORT PyObject * PyArray_IterAllButAxis \ + (PyObject *, int *); +NPY_NO_EXPORT NPY_STEALS_REF_TO_ARG(2) PyObject * PyArray_CheckFromAny \ + (PyObject *, PyArray_Descr *, int, int, int, PyObject *); +NPY_NO_EXPORT NPY_STEALS_REF_TO_ARG(2) PyObject * PyArray_FromArray \ + (PyArrayObject *, PyArray_Descr *, int); +NPY_NO_EXPORT PyObject * PyArray_FromInterface \ + (PyObject *); +NPY_NO_EXPORT PyObject * PyArray_FromStructInterface \ + (PyObject *); +NPY_NO_EXPORT PyObject * PyArray_FromArrayAttr \ + (PyObject *, PyArray_Descr *, PyObject *); +NPY_NO_EXPORT NPY_SCALARKIND PyArray_ScalarKind \ + (int, PyArrayObject **); +NPY_NO_EXPORT int PyArray_CanCoerceScalar \ + (int, int, NPY_SCALARKIND); +NPY_NO_EXPORT PyObject * PyArray_NewFlagsObject \ + (PyObject *); +NPY_NO_EXPORT npy_bool PyArray_CanCastScalar \ + (PyTypeObject *, PyTypeObject *); +NPY_NO_EXPORT int PyArray_CompareUCS4 \ + (npy_ucs4 const *, npy_ucs4 const *, size_t); +NPY_NO_EXPORT int PyArray_RemoveSmallest \ + (PyArrayMultiIterObject *); +NPY_NO_EXPORT int PyArray_ElementStrides \ + (PyObject *); +NPY_NO_EXPORT void PyArray_Item_INCREF \ + (char *, PyArray_Descr *); +NPY_NO_EXPORT void PyArray_Item_XDECREF \ + (char *, PyArray_Descr *); +NPY_NO_EXPORT PyObject * PyArray_FieldNames \ + (PyObject *); +NPY_NO_EXPORT PyObject * PyArray_Transpose \ + (PyArrayObject *, PyArray_Dims *); +NPY_NO_EXPORT PyObject * PyArray_TakeFrom \ + (PyArrayObject *, PyObject *, int, PyArrayObject *, NPY_CLIPMODE); +NPY_NO_EXPORT PyObject * PyArray_PutTo \ + (PyArrayObject *, PyObject*, PyObject *, NPY_CLIPMODE); +NPY_NO_EXPORT PyObject * PyArray_PutMask \ + (PyArrayObject *, PyObject*, PyObject*); +NPY_NO_EXPORT PyObject * PyArray_Repeat \ + (PyArrayObject *, PyObject *, int); +NPY_NO_EXPORT PyObject * PyArray_Choose \ + (PyArrayObject *, PyObject *, PyArrayObject *, NPY_CLIPMODE); +NPY_NO_EXPORT int PyArray_Sort \ + (PyArrayObject *, int, NPY_SORTKIND); +NPY_NO_EXPORT PyObject * PyArray_ArgSort \ + (PyArrayObject *, int, NPY_SORTKIND); +NPY_NO_EXPORT PyObject * PyArray_SearchSorted \ + (PyArrayObject *, PyObject *, NPY_SEARCHSIDE, PyObject *); +NPY_NO_EXPORT PyObject * PyArray_ArgMax \ + (PyArrayObject *, int, PyArrayObject *); +NPY_NO_EXPORT PyObject * PyArray_ArgMin \ + (PyArrayObject *, int, PyArrayObject *); +NPY_NO_EXPORT PyObject * PyArray_Reshape \ + (PyArrayObject *, PyObject *); +NPY_NO_EXPORT PyObject * PyArray_Newshape \ + (PyArrayObject *, PyArray_Dims *, NPY_ORDER); +NPY_NO_EXPORT PyObject * PyArray_Squeeze \ + (PyArrayObject *); +NPY_NO_EXPORT NPY_STEALS_REF_TO_ARG(2) PyObject * PyArray_View \ + (PyArrayObject *, PyArray_Descr *, PyTypeObject *); +NPY_NO_EXPORT PyObject * PyArray_SwapAxes \ + (PyArrayObject *, int, int); +NPY_NO_EXPORT PyObject * PyArray_Max \ + (PyArrayObject *, int, PyArrayObject *); +NPY_NO_EXPORT PyObject * PyArray_Min \ + (PyArrayObject *, int, PyArrayObject *); +NPY_NO_EXPORT PyObject * PyArray_Ptp \ + (PyArrayObject *, int, PyArrayObject *); +NPY_NO_EXPORT PyObject * PyArray_Mean \ + (PyArrayObject *, int, int, PyArrayObject *); +NPY_NO_EXPORT PyObject * PyArray_Trace \ + (PyArrayObject *, int, int, int, int, PyArrayObject *); +NPY_NO_EXPORT PyObject * PyArray_Diagonal \ + (PyArrayObject *, int, int, int); +NPY_NO_EXPORT PyObject * PyArray_Clip \ + (PyArrayObject *, PyObject *, PyObject *, PyArrayObject *); +NPY_NO_EXPORT PyObject * PyArray_Conjugate \ + (PyArrayObject *, PyArrayObject *); +NPY_NO_EXPORT PyObject * PyArray_Nonzero \ + (PyArrayObject *); +NPY_NO_EXPORT PyObject * PyArray_Std \ + (PyArrayObject *, int, int, PyArrayObject *, int); +NPY_NO_EXPORT PyObject * PyArray_Sum \ + (PyArrayObject *, int, int, PyArrayObject *); +NPY_NO_EXPORT PyObject * PyArray_CumSum \ + (PyArrayObject *, int, int, PyArrayObject *); +NPY_NO_EXPORT PyObject * PyArray_Prod \ + (PyArrayObject *, int, int, PyArrayObject *); +NPY_NO_EXPORT PyObject * PyArray_CumProd \ + (PyArrayObject *, int, int, PyArrayObject *); +NPY_NO_EXPORT PyObject * PyArray_All \ + (PyArrayObject *, int, PyArrayObject *); +NPY_NO_EXPORT PyObject * PyArray_Any \ + (PyArrayObject *, int, PyArrayObject *); +NPY_NO_EXPORT PyObject * PyArray_Compress \ + (PyArrayObject *, PyObject *, int, PyArrayObject *); +NPY_NO_EXPORT PyObject * PyArray_Flatten \ + (PyArrayObject *, NPY_ORDER); +NPY_NO_EXPORT PyObject * PyArray_Ravel \ + (PyArrayObject *, NPY_ORDER); +NPY_NO_EXPORT npy_intp PyArray_MultiplyList \ + (npy_intp const *, int); +NPY_NO_EXPORT int PyArray_MultiplyIntList \ + (int const *, int); +NPY_NO_EXPORT void * PyArray_GetPtr \ + (PyArrayObject *, npy_intp const*); +NPY_NO_EXPORT int PyArray_CompareLists \ + (npy_intp const *, npy_intp const *, int); +NPY_NO_EXPORT NPY_STEALS_REF_TO_ARG(5) int PyArray_AsCArray \ + (PyObject **, void *, npy_intp *, int, PyArray_Descr*); +NPY_NO_EXPORT int PyArray_As1D \ + (PyObject **NPY_UNUSED(op), char **NPY_UNUSED(ptr), int *NPY_UNUSED(d1), int NPY_UNUSED(typecode)); +NPY_NO_EXPORT int PyArray_As2D \ + (PyObject **NPY_UNUSED(op), char ***NPY_UNUSED(ptr), int *NPY_UNUSED(d1), int *NPY_UNUSED(d2), int NPY_UNUSED(typecode)); +NPY_NO_EXPORT int PyArray_Free \ + (PyObject *, void *); +NPY_NO_EXPORT int PyArray_Converter \ + (PyObject *, PyObject **); +NPY_NO_EXPORT int PyArray_IntpFromSequence \ + (PyObject *, npy_intp *, int); +NPY_NO_EXPORT PyObject * PyArray_Concatenate \ + (PyObject *, int); +NPY_NO_EXPORT PyObject * PyArray_InnerProduct \ + (PyObject *, PyObject *); +NPY_NO_EXPORT PyObject * PyArray_MatrixProduct \ + (PyObject *, PyObject *); +NPY_NO_EXPORT PyObject * PyArray_CopyAndTranspose \ + (PyObject *); +NPY_NO_EXPORT PyObject * PyArray_Correlate \ + (PyObject *, PyObject *, int); +NPY_NO_EXPORT int PyArray_TypestrConvert \ + (int, int); +NPY_NO_EXPORT int PyArray_DescrConverter \ + (PyObject *, PyArray_Descr **); +NPY_NO_EXPORT int PyArray_DescrConverter2 \ + (PyObject *, PyArray_Descr **); +NPY_NO_EXPORT int PyArray_IntpConverter \ + (PyObject *, PyArray_Dims *); +NPY_NO_EXPORT int PyArray_BufferConverter \ + (PyObject *, PyArray_Chunk *); +NPY_NO_EXPORT int PyArray_AxisConverter \ + (PyObject *, int *); +NPY_NO_EXPORT int PyArray_BoolConverter \ + (PyObject *, npy_bool *); +NPY_NO_EXPORT int PyArray_ByteorderConverter \ + (PyObject *, char *); +NPY_NO_EXPORT int PyArray_OrderConverter \ + (PyObject *, NPY_ORDER *); +NPY_NO_EXPORT unsigned char PyArray_EquivTypes \ + (PyArray_Descr *, PyArray_Descr *); +NPY_NO_EXPORT NPY_STEALS_REF_TO_ARG(3) PyObject * PyArray_Zeros \ + (int, npy_intp const *, PyArray_Descr *, int); +NPY_NO_EXPORT NPY_STEALS_REF_TO_ARG(3) PyObject * PyArray_Empty \ + (int, npy_intp const *, PyArray_Descr *, int); +NPY_NO_EXPORT PyObject * PyArray_Where \ + (PyObject *, PyObject *, PyObject *); +NPY_NO_EXPORT PyObject * PyArray_Arange \ + (double, double, double, int); +NPY_NO_EXPORT PyObject * PyArray_ArangeObj \ + (PyObject *, PyObject *, PyObject *, PyArray_Descr *); +NPY_NO_EXPORT int PyArray_SortkindConverter \ + (PyObject *, NPY_SORTKIND *); +NPY_NO_EXPORT PyObject * PyArray_LexSort \ + (PyObject *, int); +NPY_NO_EXPORT PyObject * PyArray_Round \ + (PyArrayObject *, int, PyArrayObject *); +NPY_NO_EXPORT unsigned char PyArray_EquivTypenums \ + (int, int); +NPY_NO_EXPORT int PyArray_RegisterDataType \ + (PyArray_Descr *); +NPY_NO_EXPORT int PyArray_RegisterCastFunc \ + (PyArray_Descr *, int, PyArray_VectorUnaryFunc *); +NPY_NO_EXPORT int PyArray_RegisterCanCast \ + (PyArray_Descr *, int, NPY_SCALARKIND); +NPY_NO_EXPORT void PyArray_InitArrFuncs \ + (PyArray_ArrFuncs *); +NPY_NO_EXPORT PyObject * PyArray_IntTupleFromIntp \ + (int, npy_intp const *); +NPY_NO_EXPORT int PyArray_TypeNumFromName \ + (char const *); +NPY_NO_EXPORT int PyArray_ClipmodeConverter \ + (PyObject *, NPY_CLIPMODE *); +NPY_NO_EXPORT int PyArray_OutputConverter \ + (PyObject *, PyArrayObject **); +NPY_NO_EXPORT PyObject * PyArray_BroadcastToShape \ + (PyObject *, npy_intp *, int); +NPY_NO_EXPORT void _PyArray_SigintHandler \ + (int); +NPY_NO_EXPORT void* _PyArray_GetSigintBuf \ + (void); +NPY_NO_EXPORT int PyArray_DescrAlignConverter \ + (PyObject *, PyArray_Descr **); +NPY_NO_EXPORT int PyArray_DescrAlignConverter2 \ + (PyObject *, PyArray_Descr **); +NPY_NO_EXPORT int PyArray_SearchsideConverter \ + (PyObject *, void *); +NPY_NO_EXPORT PyObject * PyArray_CheckAxis \ + (PyArrayObject *, int *, int); +NPY_NO_EXPORT npy_intp PyArray_OverflowMultiplyList \ + (npy_intp const *, int); +NPY_NO_EXPORT int PyArray_CompareString \ + (const char *, const char *, size_t); +NPY_NO_EXPORT PyObject* PyArray_MultiIterFromObjects \ + (PyObject **, int, int, ...); +NPY_NO_EXPORT int PyArray_GetEndianness \ + (void); +NPY_NO_EXPORT unsigned int PyArray_GetNDArrayCFeatureVersion \ + (void); +NPY_NO_EXPORT PyObject * PyArray_Correlate2 \ + (PyObject *, PyObject *, int); +NPY_NO_EXPORT PyObject* PyArray_NeighborhoodIterNew \ + (PyArrayIterObject *, const npy_intp *, int, PyArrayObject*); +extern NPY_NO_EXPORT PyTypeObject PyTimeIntegerArrType_Type; + +extern NPY_NO_EXPORT PyTypeObject PyDatetimeArrType_Type; + +extern NPY_NO_EXPORT PyTypeObject PyTimedeltaArrType_Type; + +extern NPY_NO_EXPORT PyTypeObject PyHalfArrType_Type; + +extern NPY_NO_EXPORT PyTypeObject NpyIter_Type; + +NPY_NO_EXPORT void PyArray_SetDatetimeParseFunction \ + (PyObject *NPY_UNUSED(op)); +NPY_NO_EXPORT void PyArray_DatetimeToDatetimeStruct \ + (npy_datetime NPY_UNUSED(val), NPY_DATETIMEUNIT NPY_UNUSED(fr), npy_datetimestruct *); +NPY_NO_EXPORT void PyArray_TimedeltaToTimedeltaStruct \ + (npy_timedelta NPY_UNUSED(val), NPY_DATETIMEUNIT NPY_UNUSED(fr), npy_timedeltastruct *); +NPY_NO_EXPORT npy_datetime PyArray_DatetimeStructToDatetime \ + (NPY_DATETIMEUNIT NPY_UNUSED(fr), npy_datetimestruct *NPY_UNUSED(d)); +NPY_NO_EXPORT npy_datetime PyArray_TimedeltaStructToTimedelta \ + (NPY_DATETIMEUNIT NPY_UNUSED(fr), npy_timedeltastruct *NPY_UNUSED(d)); +NPY_NO_EXPORT NpyIter * NpyIter_New \ + (PyArrayObject *, npy_uint32, NPY_ORDER, NPY_CASTING, PyArray_Descr*); +NPY_NO_EXPORT NpyIter * NpyIter_MultiNew \ + (int, PyArrayObject **, npy_uint32, NPY_ORDER, NPY_CASTING, npy_uint32 *, PyArray_Descr **); +NPY_NO_EXPORT NpyIter * NpyIter_AdvancedNew \ + (int, PyArrayObject **, npy_uint32, NPY_ORDER, NPY_CASTING, npy_uint32 *, PyArray_Descr **, int, int **, npy_intp *, npy_intp); +NPY_NO_EXPORT NpyIter * NpyIter_Copy \ + (NpyIter *); +NPY_NO_EXPORT int NpyIter_Deallocate \ + (NpyIter *); +NPY_NO_EXPORT npy_bool NpyIter_HasDelayedBufAlloc \ + (NpyIter *); +NPY_NO_EXPORT npy_bool NpyIter_HasExternalLoop \ + (NpyIter *); +NPY_NO_EXPORT int NpyIter_EnableExternalLoop \ + (NpyIter *); +NPY_NO_EXPORT npy_intp * NpyIter_GetInnerStrideArray \ + (NpyIter *); +NPY_NO_EXPORT npy_intp * NpyIter_GetInnerLoopSizePtr \ + (NpyIter *); +NPY_NO_EXPORT int NpyIter_Reset \ + (NpyIter *, char **); +NPY_NO_EXPORT int NpyIter_ResetBasePointers \ + (NpyIter *, char **, char **); +NPY_NO_EXPORT int NpyIter_ResetToIterIndexRange \ + (NpyIter *, npy_intp, npy_intp, char **); +NPY_NO_EXPORT int NpyIter_GetNDim \ + (NpyIter *); +NPY_NO_EXPORT int NpyIter_GetNOp \ + (NpyIter *); +NPY_NO_EXPORT NpyIter_IterNextFunc * NpyIter_GetIterNext \ + (NpyIter *, char **); +NPY_NO_EXPORT npy_intp NpyIter_GetIterSize \ + (NpyIter *); +NPY_NO_EXPORT void NpyIter_GetIterIndexRange \ + (NpyIter *, npy_intp *, npy_intp *); +NPY_NO_EXPORT npy_intp NpyIter_GetIterIndex \ + (NpyIter *); +NPY_NO_EXPORT int NpyIter_GotoIterIndex \ + (NpyIter *, npy_intp); +NPY_NO_EXPORT npy_bool NpyIter_HasMultiIndex \ + (NpyIter *); +NPY_NO_EXPORT int NpyIter_GetShape \ + (NpyIter *, npy_intp *); +NPY_NO_EXPORT NpyIter_GetMultiIndexFunc * NpyIter_GetGetMultiIndex \ + (NpyIter *, char **); +NPY_NO_EXPORT int NpyIter_GotoMultiIndex \ + (NpyIter *, npy_intp const *); +NPY_NO_EXPORT int NpyIter_RemoveMultiIndex \ + (NpyIter *); +NPY_NO_EXPORT npy_bool NpyIter_HasIndex \ + (NpyIter *); +NPY_NO_EXPORT npy_bool NpyIter_IsBuffered \ + (NpyIter *); +NPY_NO_EXPORT npy_bool NpyIter_IsGrowInner \ + (NpyIter *); +NPY_NO_EXPORT npy_intp NpyIter_GetBufferSize \ + (NpyIter *); +NPY_NO_EXPORT npy_intp * NpyIter_GetIndexPtr \ + (NpyIter *); +NPY_NO_EXPORT int NpyIter_GotoIndex \ + (NpyIter *, npy_intp); +NPY_NO_EXPORT char ** NpyIter_GetDataPtrArray \ + (NpyIter *); +NPY_NO_EXPORT PyArray_Descr ** NpyIter_GetDescrArray \ + (NpyIter *); +NPY_NO_EXPORT PyArrayObject ** NpyIter_GetOperandArray \ + (NpyIter *); +NPY_NO_EXPORT PyArrayObject * NpyIter_GetIterView \ + (NpyIter *, npy_intp); +NPY_NO_EXPORT void NpyIter_GetReadFlags \ + (NpyIter *, char *); +NPY_NO_EXPORT void NpyIter_GetWriteFlags \ + (NpyIter *, char *); +NPY_NO_EXPORT void NpyIter_DebugPrint \ + (NpyIter *); +NPY_NO_EXPORT npy_bool NpyIter_IterationNeedsAPI \ + (NpyIter *); +NPY_NO_EXPORT void NpyIter_GetInnerFixedStrideArray \ + (NpyIter *, npy_intp *); +NPY_NO_EXPORT int NpyIter_RemoveAxis \ + (NpyIter *, int); +NPY_NO_EXPORT npy_intp * NpyIter_GetAxisStrideArray \ + (NpyIter *, int); +NPY_NO_EXPORT npy_bool NpyIter_RequiresBuffering \ + (NpyIter *); +NPY_NO_EXPORT char ** NpyIter_GetInitialDataPtrArray \ + (NpyIter *); +NPY_NO_EXPORT int NpyIter_CreateCompatibleStrides \ + (NpyIter *, npy_intp, npy_intp *); +NPY_NO_EXPORT int PyArray_CastingConverter \ + (PyObject *, NPY_CASTING *); +NPY_NO_EXPORT npy_intp PyArray_CountNonzero \ + (PyArrayObject *); +NPY_NO_EXPORT PyArray_Descr * PyArray_PromoteTypes \ + (PyArray_Descr *, PyArray_Descr *); +NPY_NO_EXPORT PyArray_Descr * PyArray_MinScalarType \ + (PyArrayObject *); +NPY_NO_EXPORT PyArray_Descr * PyArray_ResultType \ + (npy_intp, PyArrayObject *arrs[], npy_intp, PyArray_Descr *descrs[]); +NPY_NO_EXPORT npy_bool PyArray_CanCastArrayTo \ + (PyArrayObject *, PyArray_Descr *, NPY_CASTING); +NPY_NO_EXPORT npy_bool PyArray_CanCastTypeTo \ + (PyArray_Descr *, PyArray_Descr *, NPY_CASTING); +NPY_NO_EXPORT PyArrayObject * PyArray_EinsteinSum \ + (char *, npy_intp, PyArrayObject **, PyArray_Descr *, NPY_ORDER, NPY_CASTING, PyArrayObject *); +NPY_NO_EXPORT NPY_STEALS_REF_TO_ARG(3) NPY_GCC_NONNULL(1) PyObject * PyArray_NewLikeArray \ + (PyArrayObject *, NPY_ORDER, PyArray_Descr *, int); +NPY_NO_EXPORT int PyArray_GetArrayParamsFromObject \ + (PyObject *NPY_UNUSED(op), PyArray_Descr *NPY_UNUSED(requested_dtype), npy_bool NPY_UNUSED(writeable), PyArray_Descr **NPY_UNUSED(out_dtype), int *NPY_UNUSED(out_ndim), npy_intp *NPY_UNUSED(out_dims), PyArrayObject **NPY_UNUSED(out_arr), PyObject *NPY_UNUSED(context)); +NPY_NO_EXPORT int PyArray_ConvertClipmodeSequence \ + (PyObject *, NPY_CLIPMODE *, int); +NPY_NO_EXPORT PyObject * PyArray_MatrixProduct2 \ + (PyObject *, PyObject *, PyArrayObject*); +NPY_NO_EXPORT npy_bool NpyIter_IsFirstVisit \ + (NpyIter *, int); +NPY_NO_EXPORT NPY_STEALS_REF_TO_ARG(2) int PyArray_SetBaseObject \ + (PyArrayObject *, PyObject *); +NPY_NO_EXPORT void PyArray_CreateSortedStridePerm \ + (int, npy_intp const *, npy_stride_sort_item *); +NPY_NO_EXPORT void PyArray_RemoveAxesInPlace \ + (PyArrayObject *, const npy_bool *); +NPY_NO_EXPORT void PyArray_DebugPrint \ + (PyArrayObject *); +NPY_NO_EXPORT int PyArray_FailUnlessWriteable \ + (PyArrayObject *, const char *); +NPY_NO_EXPORT NPY_STEALS_REF_TO_ARG(2) int PyArray_SetUpdateIfCopyBase \ + (PyArrayObject *, PyArrayObject *); +NPY_NO_EXPORT void * PyDataMem_NEW \ + (size_t); +NPY_NO_EXPORT void PyDataMem_FREE \ + (void *); +NPY_NO_EXPORT void * PyDataMem_RENEW \ + (void *, size_t); +NPY_NO_EXPORT PyDataMem_EventHookFunc * PyDataMem_SetEventHook \ + (PyDataMem_EventHookFunc *, void *, void **); +extern NPY_NO_EXPORT NPY_CASTING NPY_DEFAULT_ASSIGN_CASTING; + +NPY_NO_EXPORT void PyArray_MapIterSwapAxes \ + (PyArrayMapIterObject *, PyArrayObject **, int); +NPY_NO_EXPORT PyObject * PyArray_MapIterArray \ + (PyArrayObject *, PyObject *); +NPY_NO_EXPORT void PyArray_MapIterNext \ + (PyArrayMapIterObject *); +NPY_NO_EXPORT int PyArray_Partition \ + (PyArrayObject *, PyArrayObject *, int, NPY_SELECTKIND); +NPY_NO_EXPORT PyObject * PyArray_ArgPartition \ + (PyArrayObject *, PyArrayObject *, int, NPY_SELECTKIND); +NPY_NO_EXPORT int PyArray_SelectkindConverter \ + (PyObject *, NPY_SELECTKIND *); +NPY_NO_EXPORT void * PyDataMem_NEW_ZEROED \ + (size_t, size_t); +NPY_NO_EXPORT NPY_GCC_NONNULL(1) int PyArray_CheckAnyScalarExact \ + (PyObject *); +NPY_NO_EXPORT PyObject * PyArray_MapIterArrayCopyIfOverlap \ + (PyArrayObject *, PyObject *, int, PyArrayObject *); +NPY_NO_EXPORT int PyArray_ResolveWritebackIfCopy \ + (PyArrayObject *); +NPY_NO_EXPORT int PyArray_SetWritebackIfCopyBase \ + (PyArrayObject *, PyArrayObject *); + +#else + +#if defined(PY_ARRAY_UNIQUE_SYMBOL) +#define PyArray_API PY_ARRAY_UNIQUE_SYMBOL +#endif + +#if defined(NO_IMPORT) || defined(NO_IMPORT_ARRAY) +extern void **PyArray_API; +#else +#if defined(PY_ARRAY_UNIQUE_SYMBOL) +void **PyArray_API; +#else +static void **PyArray_API=NULL; +#endif +#endif + +#define PyArray_GetNDArrayCVersion \ + (*(unsigned int (*)(void)) \ + PyArray_API[0]) +#define PyBigArray_Type (*(PyTypeObject *)PyArray_API[1]) +#define PyArray_Type (*(PyTypeObject *)PyArray_API[2]) +#define PyArrayDescr_Type (*(PyTypeObject *)PyArray_API[3]) +#define PyArrayFlags_Type (*(PyTypeObject *)PyArray_API[4]) +#define PyArrayIter_Type (*(PyTypeObject *)PyArray_API[5]) +#define PyArrayMultiIter_Type (*(PyTypeObject *)PyArray_API[6]) +#define NPY_NUMUSERTYPES (*(int *)PyArray_API[7]) +#define PyBoolArrType_Type (*(PyTypeObject *)PyArray_API[8]) +#define _PyArrayScalar_BoolValues ((PyBoolScalarObject *)PyArray_API[9]) +#define PyGenericArrType_Type (*(PyTypeObject *)PyArray_API[10]) +#define PyNumberArrType_Type (*(PyTypeObject *)PyArray_API[11]) +#define PyIntegerArrType_Type (*(PyTypeObject *)PyArray_API[12]) +#define PySignedIntegerArrType_Type (*(PyTypeObject *)PyArray_API[13]) +#define PyUnsignedIntegerArrType_Type (*(PyTypeObject *)PyArray_API[14]) +#define PyInexactArrType_Type (*(PyTypeObject *)PyArray_API[15]) +#define PyFloatingArrType_Type (*(PyTypeObject *)PyArray_API[16]) +#define PyComplexFloatingArrType_Type (*(PyTypeObject *)PyArray_API[17]) +#define PyFlexibleArrType_Type (*(PyTypeObject *)PyArray_API[18]) +#define PyCharacterArrType_Type (*(PyTypeObject *)PyArray_API[19]) +#define PyByteArrType_Type (*(PyTypeObject *)PyArray_API[20]) +#define PyShortArrType_Type (*(PyTypeObject *)PyArray_API[21]) +#define PyIntArrType_Type (*(PyTypeObject *)PyArray_API[22]) +#define PyLongArrType_Type (*(PyTypeObject *)PyArray_API[23]) +#define PyLongLongArrType_Type (*(PyTypeObject *)PyArray_API[24]) +#define PyUByteArrType_Type (*(PyTypeObject *)PyArray_API[25]) +#define PyUShortArrType_Type (*(PyTypeObject *)PyArray_API[26]) +#define PyUIntArrType_Type (*(PyTypeObject *)PyArray_API[27]) +#define PyULongArrType_Type (*(PyTypeObject *)PyArray_API[28]) +#define PyULongLongArrType_Type (*(PyTypeObject *)PyArray_API[29]) +#define PyFloatArrType_Type (*(PyTypeObject *)PyArray_API[30]) +#define PyDoubleArrType_Type (*(PyTypeObject *)PyArray_API[31]) +#define PyLongDoubleArrType_Type (*(PyTypeObject *)PyArray_API[32]) +#define PyCFloatArrType_Type (*(PyTypeObject *)PyArray_API[33]) +#define PyCDoubleArrType_Type (*(PyTypeObject *)PyArray_API[34]) +#define PyCLongDoubleArrType_Type (*(PyTypeObject *)PyArray_API[35]) +#define PyObjectArrType_Type (*(PyTypeObject *)PyArray_API[36]) +#define PyStringArrType_Type (*(PyTypeObject *)PyArray_API[37]) +#define PyUnicodeArrType_Type (*(PyTypeObject *)PyArray_API[38]) +#define PyVoidArrType_Type (*(PyTypeObject *)PyArray_API[39]) +#define PyArray_SetNumericOps \ + (*(int (*)(PyObject *)) \ + PyArray_API[40]) +#define PyArray_GetNumericOps \ + (*(PyObject * (*)(void)) \ + PyArray_API[41]) +#define PyArray_INCREF \ + (*(int (*)(PyArrayObject *)) \ + PyArray_API[42]) +#define PyArray_XDECREF \ + (*(int (*)(PyArrayObject *)) \ + PyArray_API[43]) +#define PyArray_SetStringFunction \ + (*(void (*)(PyObject *, int)) \ + PyArray_API[44]) +#define PyArray_DescrFromType \ + (*(PyArray_Descr * (*)(int)) \ + PyArray_API[45]) +#define PyArray_TypeObjectFromType \ + (*(PyObject * (*)(int)) \ + PyArray_API[46]) +#define PyArray_Zero \ + (*(char * (*)(PyArrayObject *)) \ + PyArray_API[47]) +#define PyArray_One \ + (*(char * (*)(PyArrayObject *)) \ + PyArray_API[48]) +#define PyArray_CastToType \ + (*(PyObject * (*)(PyArrayObject *, PyArray_Descr *, int)) \ + PyArray_API[49]) +#define PyArray_CastTo \ + (*(int (*)(PyArrayObject *, PyArrayObject *)) \ + PyArray_API[50]) +#define PyArray_CastAnyTo \ + (*(int (*)(PyArrayObject *, PyArrayObject *)) \ + PyArray_API[51]) +#define PyArray_CanCastSafely \ + (*(int (*)(int, int)) \ + PyArray_API[52]) +#define PyArray_CanCastTo \ + (*(npy_bool (*)(PyArray_Descr *, PyArray_Descr *)) \ + PyArray_API[53]) +#define PyArray_ObjectType \ + (*(int (*)(PyObject *, int)) \ + PyArray_API[54]) +#define PyArray_DescrFromObject \ + (*(PyArray_Descr * (*)(PyObject *, PyArray_Descr *)) \ + PyArray_API[55]) +#define PyArray_ConvertToCommonType \ + (*(PyArrayObject ** (*)(PyObject *, int *)) \ + PyArray_API[56]) +#define PyArray_DescrFromScalar \ + (*(PyArray_Descr * (*)(PyObject *)) \ + PyArray_API[57]) +#define PyArray_DescrFromTypeObject \ + (*(PyArray_Descr * (*)(PyObject *)) \ + PyArray_API[58]) +#define PyArray_Size \ + (*(npy_intp (*)(PyObject *)) \ + PyArray_API[59]) +#define PyArray_Scalar \ + (*(PyObject * (*)(void *, PyArray_Descr *, PyObject *)) \ + PyArray_API[60]) +#define PyArray_FromScalar \ + (*(PyObject * (*)(PyObject *, PyArray_Descr *)) \ + PyArray_API[61]) +#define PyArray_ScalarAsCtype \ + (*(void (*)(PyObject *, void *)) \ + PyArray_API[62]) +#define PyArray_CastScalarToCtype \ + (*(int (*)(PyObject *, void *, PyArray_Descr *)) \ + PyArray_API[63]) +#define PyArray_CastScalarDirect \ + (*(int (*)(PyObject *, PyArray_Descr *, void *, int)) \ + PyArray_API[64]) +#define PyArray_ScalarFromObject \ + (*(PyObject * (*)(PyObject *)) \ + PyArray_API[65]) +#define PyArray_GetCastFunc \ + (*(PyArray_VectorUnaryFunc * (*)(PyArray_Descr *, int)) \ + PyArray_API[66]) +#define PyArray_FromDims \ + (*(PyObject * (*)(int NPY_UNUSED(nd), int *NPY_UNUSED(d), int NPY_UNUSED(type))) \ + PyArray_API[67]) +#define PyArray_FromDimsAndDataAndDescr \ + (*(PyObject * (*)(int NPY_UNUSED(nd), int *NPY_UNUSED(d), PyArray_Descr *, char *NPY_UNUSED(data))) \ + PyArray_API[68]) +#define PyArray_FromAny \ + (*(PyObject * (*)(PyObject *, PyArray_Descr *, int, int, int, PyObject *)) \ + PyArray_API[69]) +#define PyArray_EnsureArray \ + (*(PyObject * (*)(PyObject *)) \ + PyArray_API[70]) +#define PyArray_EnsureAnyArray \ + (*(PyObject * (*)(PyObject *)) \ + PyArray_API[71]) +#define PyArray_FromFile \ + (*(PyObject * (*)(FILE *, PyArray_Descr *, npy_intp, char *)) \ + PyArray_API[72]) +#define PyArray_FromString \ + (*(PyObject * (*)(char *, npy_intp, PyArray_Descr *, npy_intp, char *)) \ + PyArray_API[73]) +#define PyArray_FromBuffer \ + (*(PyObject * (*)(PyObject *, PyArray_Descr *, npy_intp, npy_intp)) \ + PyArray_API[74]) +#define PyArray_FromIter \ + (*(PyObject * (*)(PyObject *, PyArray_Descr *, npy_intp)) \ + PyArray_API[75]) +#define PyArray_Return \ + (*(PyObject * (*)(PyArrayObject *)) \ + PyArray_API[76]) +#define PyArray_GetField \ + (*(PyObject * (*)(PyArrayObject *, PyArray_Descr *, int)) \ + PyArray_API[77]) +#define PyArray_SetField \ + (*(int (*)(PyArrayObject *, PyArray_Descr *, int, PyObject *)) \ + PyArray_API[78]) +#define PyArray_Byteswap \ + (*(PyObject * (*)(PyArrayObject *, npy_bool)) \ + PyArray_API[79]) +#define PyArray_Resize \ + (*(PyObject * (*)(PyArrayObject *, PyArray_Dims *, int, NPY_ORDER NPY_UNUSED(order))) \ + PyArray_API[80]) +#define PyArray_MoveInto \ + (*(int (*)(PyArrayObject *, PyArrayObject *)) \ + PyArray_API[81]) +#define PyArray_CopyInto \ + (*(int (*)(PyArrayObject *, PyArrayObject *)) \ + PyArray_API[82]) +#define PyArray_CopyAnyInto \ + (*(int (*)(PyArrayObject *, PyArrayObject *)) \ + PyArray_API[83]) +#define PyArray_CopyObject \ + (*(int (*)(PyArrayObject *, PyObject *)) \ + PyArray_API[84]) +#define PyArray_NewCopy \ + (*(PyObject * (*)(PyArrayObject *, NPY_ORDER)) \ + PyArray_API[85]) +#define PyArray_ToList \ + (*(PyObject * (*)(PyArrayObject *)) \ + PyArray_API[86]) +#define PyArray_ToString \ + (*(PyObject * (*)(PyArrayObject *, NPY_ORDER)) \ + PyArray_API[87]) +#define PyArray_ToFile \ + (*(int (*)(PyArrayObject *, FILE *, char *, char *)) \ + PyArray_API[88]) +#define PyArray_Dump \ + (*(int (*)(PyObject *, PyObject *, int)) \ + PyArray_API[89]) +#define PyArray_Dumps \ + (*(PyObject * (*)(PyObject *, int)) \ + PyArray_API[90]) +#define PyArray_ValidType \ + (*(int (*)(int)) \ + PyArray_API[91]) +#define PyArray_UpdateFlags \ + (*(void (*)(PyArrayObject *, int)) \ + PyArray_API[92]) +#define PyArray_New \ + (*(PyObject * (*)(PyTypeObject *, int, npy_intp const *, int, npy_intp const *, void *, int, int, PyObject *)) \ + PyArray_API[93]) +#define PyArray_NewFromDescr \ + (*(PyObject * (*)(PyTypeObject *, PyArray_Descr *, int, npy_intp const *, npy_intp const *, void *, int, PyObject *)) \ + PyArray_API[94]) +#define PyArray_DescrNew \ + (*(PyArray_Descr * (*)(PyArray_Descr *)) \ + PyArray_API[95]) +#define PyArray_DescrNewFromType \ + (*(PyArray_Descr * (*)(int)) \ + PyArray_API[96]) +#define PyArray_GetPriority \ + (*(double (*)(PyObject *, double)) \ + PyArray_API[97]) +#define PyArray_IterNew \ + (*(PyObject * (*)(PyObject *)) \ + PyArray_API[98]) +#define PyArray_MultiIterNew \ + (*(PyObject* (*)(int, ...)) \ + PyArray_API[99]) +#define PyArray_PyIntAsInt \ + (*(int (*)(PyObject *)) \ + PyArray_API[100]) +#define PyArray_PyIntAsIntp \ + (*(npy_intp (*)(PyObject *)) \ + PyArray_API[101]) +#define PyArray_Broadcast \ + (*(int (*)(PyArrayMultiIterObject *)) \ + PyArray_API[102]) +#define PyArray_FillObjectArray \ + (*(void (*)(PyArrayObject *, PyObject *)) \ + PyArray_API[103]) +#define PyArray_FillWithScalar \ + (*(int (*)(PyArrayObject *, PyObject *)) \ + PyArray_API[104]) +#define PyArray_CheckStrides \ + (*(npy_bool (*)(int, int, npy_intp, npy_intp, npy_intp const *, npy_intp const *)) \ + PyArray_API[105]) +#define PyArray_DescrNewByteorder \ + (*(PyArray_Descr * (*)(PyArray_Descr *, char)) \ + PyArray_API[106]) +#define PyArray_IterAllButAxis \ + (*(PyObject * (*)(PyObject *, int *)) \ + PyArray_API[107]) +#define PyArray_CheckFromAny \ + (*(PyObject * (*)(PyObject *, PyArray_Descr *, int, int, int, PyObject *)) \ + PyArray_API[108]) +#define PyArray_FromArray \ + (*(PyObject * (*)(PyArrayObject *, PyArray_Descr *, int)) \ + PyArray_API[109]) +#define PyArray_FromInterface \ + (*(PyObject * (*)(PyObject *)) \ + PyArray_API[110]) +#define PyArray_FromStructInterface \ + (*(PyObject * (*)(PyObject *)) \ + PyArray_API[111]) +#define PyArray_FromArrayAttr \ + (*(PyObject * (*)(PyObject *, PyArray_Descr *, PyObject *)) \ + PyArray_API[112]) +#define PyArray_ScalarKind \ + (*(NPY_SCALARKIND (*)(int, PyArrayObject **)) \ + PyArray_API[113]) +#define PyArray_CanCoerceScalar \ + (*(int (*)(int, int, NPY_SCALARKIND)) \ + PyArray_API[114]) +#define PyArray_NewFlagsObject \ + (*(PyObject * (*)(PyObject *)) \ + PyArray_API[115]) +#define PyArray_CanCastScalar \ + (*(npy_bool (*)(PyTypeObject *, PyTypeObject *)) \ + PyArray_API[116]) +#define PyArray_CompareUCS4 \ + (*(int (*)(npy_ucs4 const *, npy_ucs4 const *, size_t)) \ + PyArray_API[117]) +#define PyArray_RemoveSmallest \ + (*(int (*)(PyArrayMultiIterObject *)) \ + PyArray_API[118]) +#define PyArray_ElementStrides \ + (*(int (*)(PyObject *)) \ + PyArray_API[119]) +#define PyArray_Item_INCREF \ + (*(void (*)(char *, PyArray_Descr *)) \ + PyArray_API[120]) +#define PyArray_Item_XDECREF \ + (*(void (*)(char *, PyArray_Descr *)) \ + PyArray_API[121]) +#define PyArray_FieldNames \ + (*(PyObject * (*)(PyObject *)) \ + PyArray_API[122]) +#define PyArray_Transpose \ + (*(PyObject * (*)(PyArrayObject *, PyArray_Dims *)) \ + PyArray_API[123]) +#define PyArray_TakeFrom \ + (*(PyObject * (*)(PyArrayObject *, PyObject *, int, PyArrayObject *, NPY_CLIPMODE)) \ + PyArray_API[124]) +#define PyArray_PutTo \ + (*(PyObject * (*)(PyArrayObject *, PyObject*, PyObject *, NPY_CLIPMODE)) \ + PyArray_API[125]) +#define PyArray_PutMask \ + (*(PyObject * (*)(PyArrayObject *, PyObject*, PyObject*)) \ + PyArray_API[126]) +#define PyArray_Repeat \ + (*(PyObject * (*)(PyArrayObject *, PyObject *, int)) \ + PyArray_API[127]) +#define PyArray_Choose \ + (*(PyObject * (*)(PyArrayObject *, PyObject *, PyArrayObject *, NPY_CLIPMODE)) \ + PyArray_API[128]) +#define PyArray_Sort \ + (*(int (*)(PyArrayObject *, int, NPY_SORTKIND)) \ + PyArray_API[129]) +#define PyArray_ArgSort \ + (*(PyObject * (*)(PyArrayObject *, int, NPY_SORTKIND)) \ + PyArray_API[130]) +#define PyArray_SearchSorted \ + (*(PyObject * (*)(PyArrayObject *, PyObject *, NPY_SEARCHSIDE, PyObject *)) \ + PyArray_API[131]) +#define PyArray_ArgMax \ + (*(PyObject * (*)(PyArrayObject *, int, PyArrayObject *)) \ + PyArray_API[132]) +#define PyArray_ArgMin \ + (*(PyObject * (*)(PyArrayObject *, int, PyArrayObject *)) \ + PyArray_API[133]) +#define PyArray_Reshape \ + (*(PyObject * (*)(PyArrayObject *, PyObject *)) \ + PyArray_API[134]) +#define PyArray_Newshape \ + (*(PyObject * (*)(PyArrayObject *, PyArray_Dims *, NPY_ORDER)) \ + PyArray_API[135]) +#define PyArray_Squeeze \ + (*(PyObject * (*)(PyArrayObject *)) \ + PyArray_API[136]) +#define PyArray_View \ + (*(PyObject * (*)(PyArrayObject *, PyArray_Descr *, PyTypeObject *)) \ + PyArray_API[137]) +#define PyArray_SwapAxes \ + (*(PyObject * (*)(PyArrayObject *, int, int)) \ + PyArray_API[138]) +#define PyArray_Max \ + (*(PyObject * (*)(PyArrayObject *, int, PyArrayObject *)) \ + PyArray_API[139]) +#define PyArray_Min \ + (*(PyObject * (*)(PyArrayObject *, int, PyArrayObject *)) \ + PyArray_API[140]) +#define PyArray_Ptp \ + (*(PyObject * (*)(PyArrayObject *, int, PyArrayObject *)) \ + PyArray_API[141]) +#define PyArray_Mean \ + (*(PyObject * (*)(PyArrayObject *, int, int, PyArrayObject *)) \ + PyArray_API[142]) +#define PyArray_Trace \ + (*(PyObject * (*)(PyArrayObject *, int, int, int, int, PyArrayObject *)) \ + PyArray_API[143]) +#define PyArray_Diagonal \ + (*(PyObject * (*)(PyArrayObject *, int, int, int)) \ + PyArray_API[144]) +#define PyArray_Clip \ + (*(PyObject * (*)(PyArrayObject *, PyObject *, PyObject *, PyArrayObject *)) \ + PyArray_API[145]) +#define PyArray_Conjugate \ + (*(PyObject * (*)(PyArrayObject *, PyArrayObject *)) \ + PyArray_API[146]) +#define PyArray_Nonzero \ + (*(PyObject * (*)(PyArrayObject *)) \ + PyArray_API[147]) +#define PyArray_Std \ + (*(PyObject * (*)(PyArrayObject *, int, int, PyArrayObject *, int)) \ + PyArray_API[148]) +#define PyArray_Sum \ + (*(PyObject * (*)(PyArrayObject *, int, int, PyArrayObject *)) \ + PyArray_API[149]) +#define PyArray_CumSum \ + (*(PyObject * (*)(PyArrayObject *, int, int, PyArrayObject *)) \ + PyArray_API[150]) +#define PyArray_Prod \ + (*(PyObject * (*)(PyArrayObject *, int, int, PyArrayObject *)) \ + PyArray_API[151]) +#define PyArray_CumProd \ + (*(PyObject * (*)(PyArrayObject *, int, int, PyArrayObject *)) \ + PyArray_API[152]) +#define PyArray_All \ + (*(PyObject * (*)(PyArrayObject *, int, PyArrayObject *)) \ + PyArray_API[153]) +#define PyArray_Any \ + (*(PyObject * (*)(PyArrayObject *, int, PyArrayObject *)) \ + PyArray_API[154]) +#define PyArray_Compress \ + (*(PyObject * (*)(PyArrayObject *, PyObject *, int, PyArrayObject *)) \ + PyArray_API[155]) +#define PyArray_Flatten \ + (*(PyObject * (*)(PyArrayObject *, NPY_ORDER)) \ + PyArray_API[156]) +#define PyArray_Ravel \ + (*(PyObject * (*)(PyArrayObject *, NPY_ORDER)) \ + PyArray_API[157]) +#define PyArray_MultiplyList \ + (*(npy_intp (*)(npy_intp const *, int)) \ + PyArray_API[158]) +#define PyArray_MultiplyIntList \ + (*(int (*)(int const *, int)) \ + PyArray_API[159]) +#define PyArray_GetPtr \ + (*(void * (*)(PyArrayObject *, npy_intp const*)) \ + PyArray_API[160]) +#define PyArray_CompareLists \ + (*(int (*)(npy_intp const *, npy_intp const *, int)) \ + PyArray_API[161]) +#define PyArray_AsCArray \ + (*(int (*)(PyObject **, void *, npy_intp *, int, PyArray_Descr*)) \ + PyArray_API[162]) +#define PyArray_As1D \ + (*(int (*)(PyObject **NPY_UNUSED(op), char **NPY_UNUSED(ptr), int *NPY_UNUSED(d1), int NPY_UNUSED(typecode))) \ + PyArray_API[163]) +#define PyArray_As2D \ + (*(int (*)(PyObject **NPY_UNUSED(op), char ***NPY_UNUSED(ptr), int *NPY_UNUSED(d1), int *NPY_UNUSED(d2), int NPY_UNUSED(typecode))) \ + PyArray_API[164]) +#define PyArray_Free \ + (*(int (*)(PyObject *, void *)) \ + PyArray_API[165]) +#define PyArray_Converter \ + (*(int (*)(PyObject *, PyObject **)) \ + PyArray_API[166]) +#define PyArray_IntpFromSequence \ + (*(int (*)(PyObject *, npy_intp *, int)) \ + PyArray_API[167]) +#define PyArray_Concatenate \ + (*(PyObject * (*)(PyObject *, int)) \ + PyArray_API[168]) +#define PyArray_InnerProduct \ + (*(PyObject * (*)(PyObject *, PyObject *)) \ + PyArray_API[169]) +#define PyArray_MatrixProduct \ + (*(PyObject * (*)(PyObject *, PyObject *)) \ + PyArray_API[170]) +#define PyArray_CopyAndTranspose \ + (*(PyObject * (*)(PyObject *)) \ + PyArray_API[171]) +#define PyArray_Correlate \ + (*(PyObject * (*)(PyObject *, PyObject *, int)) \ + PyArray_API[172]) +#define PyArray_TypestrConvert \ + (*(int (*)(int, int)) \ + PyArray_API[173]) +#define PyArray_DescrConverter \ + (*(int (*)(PyObject *, PyArray_Descr **)) \ + PyArray_API[174]) +#define PyArray_DescrConverter2 \ + (*(int (*)(PyObject *, PyArray_Descr **)) \ + PyArray_API[175]) +#define PyArray_IntpConverter \ + (*(int (*)(PyObject *, PyArray_Dims *)) \ + PyArray_API[176]) +#define PyArray_BufferConverter \ + (*(int (*)(PyObject *, PyArray_Chunk *)) \ + PyArray_API[177]) +#define PyArray_AxisConverter \ + (*(int (*)(PyObject *, int *)) \ + PyArray_API[178]) +#define PyArray_BoolConverter \ + (*(int (*)(PyObject *, npy_bool *)) \ + PyArray_API[179]) +#define PyArray_ByteorderConverter \ + (*(int (*)(PyObject *, char *)) \ + PyArray_API[180]) +#define PyArray_OrderConverter \ + (*(int (*)(PyObject *, NPY_ORDER *)) \ + PyArray_API[181]) +#define PyArray_EquivTypes \ + (*(unsigned char (*)(PyArray_Descr *, PyArray_Descr *)) \ + PyArray_API[182]) +#define PyArray_Zeros \ + (*(PyObject * (*)(int, npy_intp const *, PyArray_Descr *, int)) \ + PyArray_API[183]) +#define PyArray_Empty \ + (*(PyObject * (*)(int, npy_intp const *, PyArray_Descr *, int)) \ + PyArray_API[184]) +#define PyArray_Where \ + (*(PyObject * (*)(PyObject *, PyObject *, PyObject *)) \ + PyArray_API[185]) +#define PyArray_Arange \ + (*(PyObject * (*)(double, double, double, int)) \ + PyArray_API[186]) +#define PyArray_ArangeObj \ + (*(PyObject * (*)(PyObject *, PyObject *, PyObject *, PyArray_Descr *)) \ + PyArray_API[187]) +#define PyArray_SortkindConverter \ + (*(int (*)(PyObject *, NPY_SORTKIND *)) \ + PyArray_API[188]) +#define PyArray_LexSort \ + (*(PyObject * (*)(PyObject *, int)) \ + PyArray_API[189]) +#define PyArray_Round \ + (*(PyObject * (*)(PyArrayObject *, int, PyArrayObject *)) \ + PyArray_API[190]) +#define PyArray_EquivTypenums \ + (*(unsigned char (*)(int, int)) \ + PyArray_API[191]) +#define PyArray_RegisterDataType \ + (*(int (*)(PyArray_Descr *)) \ + PyArray_API[192]) +#define PyArray_RegisterCastFunc \ + (*(int (*)(PyArray_Descr *, int, PyArray_VectorUnaryFunc *)) \ + PyArray_API[193]) +#define PyArray_RegisterCanCast \ + (*(int (*)(PyArray_Descr *, int, NPY_SCALARKIND)) \ + PyArray_API[194]) +#define PyArray_InitArrFuncs \ + (*(void (*)(PyArray_ArrFuncs *)) \ + PyArray_API[195]) +#define PyArray_IntTupleFromIntp \ + (*(PyObject * (*)(int, npy_intp const *)) \ + PyArray_API[196]) +#define PyArray_TypeNumFromName \ + (*(int (*)(char const *)) \ + PyArray_API[197]) +#define PyArray_ClipmodeConverter \ + (*(int (*)(PyObject *, NPY_CLIPMODE *)) \ + PyArray_API[198]) +#define PyArray_OutputConverter \ + (*(int (*)(PyObject *, PyArrayObject **)) \ + PyArray_API[199]) +#define PyArray_BroadcastToShape \ + (*(PyObject * (*)(PyObject *, npy_intp *, int)) \ + PyArray_API[200]) +#define _PyArray_SigintHandler \ + (*(void (*)(int)) \ + PyArray_API[201]) +#define _PyArray_GetSigintBuf \ + (*(void* (*)(void)) \ + PyArray_API[202]) +#define PyArray_DescrAlignConverter \ + (*(int (*)(PyObject *, PyArray_Descr **)) \ + PyArray_API[203]) +#define PyArray_DescrAlignConverter2 \ + (*(int (*)(PyObject *, PyArray_Descr **)) \ + PyArray_API[204]) +#define PyArray_SearchsideConverter \ + (*(int (*)(PyObject *, void *)) \ + PyArray_API[205]) +#define PyArray_CheckAxis \ + (*(PyObject * (*)(PyArrayObject *, int *, int)) \ + PyArray_API[206]) +#define PyArray_OverflowMultiplyList \ + (*(npy_intp (*)(npy_intp const *, int)) \ + PyArray_API[207]) +#define PyArray_CompareString \ + (*(int (*)(const char *, const char *, size_t)) \ + PyArray_API[208]) +#define PyArray_MultiIterFromObjects \ + (*(PyObject* (*)(PyObject **, int, int, ...)) \ + PyArray_API[209]) +#define PyArray_GetEndianness \ + (*(int (*)(void)) \ + PyArray_API[210]) +#define PyArray_GetNDArrayCFeatureVersion \ + (*(unsigned int (*)(void)) \ + PyArray_API[211]) +#define PyArray_Correlate2 \ + (*(PyObject * (*)(PyObject *, PyObject *, int)) \ + PyArray_API[212]) +#define PyArray_NeighborhoodIterNew \ + (*(PyObject* (*)(PyArrayIterObject *, const npy_intp *, int, PyArrayObject*)) \ + PyArray_API[213]) +#define PyTimeIntegerArrType_Type (*(PyTypeObject *)PyArray_API[214]) +#define PyDatetimeArrType_Type (*(PyTypeObject *)PyArray_API[215]) +#define PyTimedeltaArrType_Type (*(PyTypeObject *)PyArray_API[216]) +#define PyHalfArrType_Type (*(PyTypeObject *)PyArray_API[217]) +#define NpyIter_Type (*(PyTypeObject *)PyArray_API[218]) +#define PyArray_SetDatetimeParseFunction \ + (*(void (*)(PyObject *NPY_UNUSED(op))) \ + PyArray_API[219]) +#define PyArray_DatetimeToDatetimeStruct \ + (*(void (*)(npy_datetime NPY_UNUSED(val), NPY_DATETIMEUNIT NPY_UNUSED(fr), npy_datetimestruct *)) \ + PyArray_API[220]) +#define PyArray_TimedeltaToTimedeltaStruct \ + (*(void (*)(npy_timedelta NPY_UNUSED(val), NPY_DATETIMEUNIT NPY_UNUSED(fr), npy_timedeltastruct *)) \ + PyArray_API[221]) +#define PyArray_DatetimeStructToDatetime \ + (*(npy_datetime (*)(NPY_DATETIMEUNIT NPY_UNUSED(fr), npy_datetimestruct *NPY_UNUSED(d))) \ + PyArray_API[222]) +#define PyArray_TimedeltaStructToTimedelta \ + (*(npy_datetime (*)(NPY_DATETIMEUNIT NPY_UNUSED(fr), npy_timedeltastruct *NPY_UNUSED(d))) \ + PyArray_API[223]) +#define NpyIter_New \ + (*(NpyIter * (*)(PyArrayObject *, npy_uint32, NPY_ORDER, NPY_CASTING, PyArray_Descr*)) \ + PyArray_API[224]) +#define NpyIter_MultiNew \ + (*(NpyIter * (*)(int, PyArrayObject **, npy_uint32, NPY_ORDER, NPY_CASTING, npy_uint32 *, PyArray_Descr **)) \ + PyArray_API[225]) +#define NpyIter_AdvancedNew \ + (*(NpyIter * (*)(int, PyArrayObject **, npy_uint32, NPY_ORDER, NPY_CASTING, npy_uint32 *, PyArray_Descr **, int, int **, npy_intp *, npy_intp)) \ + PyArray_API[226]) +#define NpyIter_Copy \ + (*(NpyIter * (*)(NpyIter *)) \ + PyArray_API[227]) +#define NpyIter_Deallocate \ + (*(int (*)(NpyIter *)) \ + PyArray_API[228]) +#define NpyIter_HasDelayedBufAlloc \ + (*(npy_bool (*)(NpyIter *)) \ + PyArray_API[229]) +#define NpyIter_HasExternalLoop \ + (*(npy_bool (*)(NpyIter *)) \ + PyArray_API[230]) +#define NpyIter_EnableExternalLoop \ + (*(int (*)(NpyIter *)) \ + PyArray_API[231]) +#define NpyIter_GetInnerStrideArray \ + (*(npy_intp * (*)(NpyIter *)) \ + PyArray_API[232]) +#define NpyIter_GetInnerLoopSizePtr \ + (*(npy_intp * (*)(NpyIter *)) \ + PyArray_API[233]) +#define NpyIter_Reset \ + (*(int (*)(NpyIter *, char **)) \ + PyArray_API[234]) +#define NpyIter_ResetBasePointers \ + (*(int (*)(NpyIter *, char **, char **)) \ + PyArray_API[235]) +#define NpyIter_ResetToIterIndexRange \ + (*(int (*)(NpyIter *, npy_intp, npy_intp, char **)) \ + PyArray_API[236]) +#define NpyIter_GetNDim \ + (*(int (*)(NpyIter *)) \ + PyArray_API[237]) +#define NpyIter_GetNOp \ + (*(int (*)(NpyIter *)) \ + PyArray_API[238]) +#define NpyIter_GetIterNext \ + (*(NpyIter_IterNextFunc * (*)(NpyIter *, char **)) \ + PyArray_API[239]) +#define NpyIter_GetIterSize \ + (*(npy_intp (*)(NpyIter *)) \ + PyArray_API[240]) +#define NpyIter_GetIterIndexRange \ + (*(void (*)(NpyIter *, npy_intp *, npy_intp *)) \ + PyArray_API[241]) +#define NpyIter_GetIterIndex \ + (*(npy_intp (*)(NpyIter *)) \ + PyArray_API[242]) +#define NpyIter_GotoIterIndex \ + (*(int (*)(NpyIter *, npy_intp)) \ + PyArray_API[243]) +#define NpyIter_HasMultiIndex \ + (*(npy_bool (*)(NpyIter *)) \ + PyArray_API[244]) +#define NpyIter_GetShape \ + (*(int (*)(NpyIter *, npy_intp *)) \ + PyArray_API[245]) +#define NpyIter_GetGetMultiIndex \ + (*(NpyIter_GetMultiIndexFunc * (*)(NpyIter *, char **)) \ + PyArray_API[246]) +#define NpyIter_GotoMultiIndex \ + (*(int (*)(NpyIter *, npy_intp const *)) \ + PyArray_API[247]) +#define NpyIter_RemoveMultiIndex \ + (*(int (*)(NpyIter *)) \ + PyArray_API[248]) +#define NpyIter_HasIndex \ + (*(npy_bool (*)(NpyIter *)) \ + PyArray_API[249]) +#define NpyIter_IsBuffered \ + (*(npy_bool (*)(NpyIter *)) \ + PyArray_API[250]) +#define NpyIter_IsGrowInner \ + (*(npy_bool (*)(NpyIter *)) \ + PyArray_API[251]) +#define NpyIter_GetBufferSize \ + (*(npy_intp (*)(NpyIter *)) \ + PyArray_API[252]) +#define NpyIter_GetIndexPtr \ + (*(npy_intp * (*)(NpyIter *)) \ + PyArray_API[253]) +#define NpyIter_GotoIndex \ + (*(int (*)(NpyIter *, npy_intp)) \ + PyArray_API[254]) +#define NpyIter_GetDataPtrArray \ + (*(char ** (*)(NpyIter *)) \ + PyArray_API[255]) +#define NpyIter_GetDescrArray \ + (*(PyArray_Descr ** (*)(NpyIter *)) \ + PyArray_API[256]) +#define NpyIter_GetOperandArray \ + (*(PyArrayObject ** (*)(NpyIter *)) \ + PyArray_API[257]) +#define NpyIter_GetIterView \ + (*(PyArrayObject * (*)(NpyIter *, npy_intp)) \ + PyArray_API[258]) +#define NpyIter_GetReadFlags \ + (*(void (*)(NpyIter *, char *)) \ + PyArray_API[259]) +#define NpyIter_GetWriteFlags \ + (*(void (*)(NpyIter *, char *)) \ + PyArray_API[260]) +#define NpyIter_DebugPrint \ + (*(void (*)(NpyIter *)) \ + PyArray_API[261]) +#define NpyIter_IterationNeedsAPI \ + (*(npy_bool (*)(NpyIter *)) \ + PyArray_API[262]) +#define NpyIter_GetInnerFixedStrideArray \ + (*(void (*)(NpyIter *, npy_intp *)) \ + PyArray_API[263]) +#define NpyIter_RemoveAxis \ + (*(int (*)(NpyIter *, int)) \ + PyArray_API[264]) +#define NpyIter_GetAxisStrideArray \ + (*(npy_intp * (*)(NpyIter *, int)) \ + PyArray_API[265]) +#define NpyIter_RequiresBuffering \ + (*(npy_bool (*)(NpyIter *)) \ + PyArray_API[266]) +#define NpyIter_GetInitialDataPtrArray \ + (*(char ** (*)(NpyIter *)) \ + PyArray_API[267]) +#define NpyIter_CreateCompatibleStrides \ + (*(int (*)(NpyIter *, npy_intp, npy_intp *)) \ + PyArray_API[268]) +#define PyArray_CastingConverter \ + (*(int (*)(PyObject *, NPY_CASTING *)) \ + PyArray_API[269]) +#define PyArray_CountNonzero \ + (*(npy_intp (*)(PyArrayObject *)) \ + PyArray_API[270]) +#define PyArray_PromoteTypes \ + (*(PyArray_Descr * (*)(PyArray_Descr *, PyArray_Descr *)) \ + PyArray_API[271]) +#define PyArray_MinScalarType \ + (*(PyArray_Descr * (*)(PyArrayObject *)) \ + PyArray_API[272]) +#define PyArray_ResultType \ + (*(PyArray_Descr * (*)(npy_intp, PyArrayObject *arrs[], npy_intp, PyArray_Descr *descrs[])) \ + PyArray_API[273]) +#define PyArray_CanCastArrayTo \ + (*(npy_bool (*)(PyArrayObject *, PyArray_Descr *, NPY_CASTING)) \ + PyArray_API[274]) +#define PyArray_CanCastTypeTo \ + (*(npy_bool (*)(PyArray_Descr *, PyArray_Descr *, NPY_CASTING)) \ + PyArray_API[275]) +#define PyArray_EinsteinSum \ + (*(PyArrayObject * (*)(char *, npy_intp, PyArrayObject **, PyArray_Descr *, NPY_ORDER, NPY_CASTING, PyArrayObject *)) \ + PyArray_API[276]) +#define PyArray_NewLikeArray \ + (*(PyObject * (*)(PyArrayObject *, NPY_ORDER, PyArray_Descr *, int)) \ + PyArray_API[277]) +#define PyArray_GetArrayParamsFromObject \ + (*(int (*)(PyObject *NPY_UNUSED(op), PyArray_Descr *NPY_UNUSED(requested_dtype), npy_bool NPY_UNUSED(writeable), PyArray_Descr **NPY_UNUSED(out_dtype), int *NPY_UNUSED(out_ndim), npy_intp *NPY_UNUSED(out_dims), PyArrayObject **NPY_UNUSED(out_arr), PyObject *NPY_UNUSED(context))) \ + PyArray_API[278]) +#define PyArray_ConvertClipmodeSequence \ + (*(int (*)(PyObject *, NPY_CLIPMODE *, int)) \ + PyArray_API[279]) +#define PyArray_MatrixProduct2 \ + (*(PyObject * (*)(PyObject *, PyObject *, PyArrayObject*)) \ + PyArray_API[280]) +#define NpyIter_IsFirstVisit \ + (*(npy_bool (*)(NpyIter *, int)) \ + PyArray_API[281]) +#define PyArray_SetBaseObject \ + (*(int (*)(PyArrayObject *, PyObject *)) \ + PyArray_API[282]) +#define PyArray_CreateSortedStridePerm \ + (*(void (*)(int, npy_intp const *, npy_stride_sort_item *)) \ + PyArray_API[283]) +#define PyArray_RemoveAxesInPlace \ + (*(void (*)(PyArrayObject *, const npy_bool *)) \ + PyArray_API[284]) +#define PyArray_DebugPrint \ + (*(void (*)(PyArrayObject *)) \ + PyArray_API[285]) +#define PyArray_FailUnlessWriteable \ + (*(int (*)(PyArrayObject *, const char *)) \ + PyArray_API[286]) +#define PyArray_SetUpdateIfCopyBase \ + (*(int (*)(PyArrayObject *, PyArrayObject *)) \ + PyArray_API[287]) +#define PyDataMem_NEW \ + (*(void * (*)(size_t)) \ + PyArray_API[288]) +#define PyDataMem_FREE \ + (*(void (*)(void *)) \ + PyArray_API[289]) +#define PyDataMem_RENEW \ + (*(void * (*)(void *, size_t)) \ + PyArray_API[290]) +#define PyDataMem_SetEventHook \ + (*(PyDataMem_EventHookFunc * (*)(PyDataMem_EventHookFunc *, void *, void **)) \ + PyArray_API[291]) +#define NPY_DEFAULT_ASSIGN_CASTING (*(NPY_CASTING *)PyArray_API[292]) +#define PyArray_MapIterSwapAxes \ + (*(void (*)(PyArrayMapIterObject *, PyArrayObject **, int)) \ + PyArray_API[293]) +#define PyArray_MapIterArray \ + (*(PyObject * (*)(PyArrayObject *, PyObject *)) \ + PyArray_API[294]) +#define PyArray_MapIterNext \ + (*(void (*)(PyArrayMapIterObject *)) \ + PyArray_API[295]) +#define PyArray_Partition \ + (*(int (*)(PyArrayObject *, PyArrayObject *, int, NPY_SELECTKIND)) \ + PyArray_API[296]) +#define PyArray_ArgPartition \ + (*(PyObject * (*)(PyArrayObject *, PyArrayObject *, int, NPY_SELECTKIND)) \ + PyArray_API[297]) +#define PyArray_SelectkindConverter \ + (*(int (*)(PyObject *, NPY_SELECTKIND *)) \ + PyArray_API[298]) +#define PyDataMem_NEW_ZEROED \ + (*(void * (*)(size_t, size_t)) \ + PyArray_API[299]) +#define PyArray_CheckAnyScalarExact \ + (*(int (*)(PyObject *)) \ + PyArray_API[300]) +#define PyArray_MapIterArrayCopyIfOverlap \ + (*(PyObject * (*)(PyArrayObject *, PyObject *, int, PyArrayObject *)) \ + PyArray_API[301]) +#define PyArray_ResolveWritebackIfCopy \ + (*(int (*)(PyArrayObject *)) \ + PyArray_API[302]) +#define PyArray_SetWritebackIfCopyBase \ + (*(int (*)(PyArrayObject *, PyArrayObject *)) \ + PyArray_API[303]) + +#if !defined(NO_IMPORT_ARRAY) && !defined(NO_IMPORT) +static int +_import_array(void) +{ + int st; + PyObject *numpy = PyImport_ImportModule("numpy.core._multiarray_umath"); + PyObject *c_api = NULL; + + if (numpy == NULL) { + return -1; + } + c_api = PyObject_GetAttrString(numpy, "_ARRAY_API"); + Py_DECREF(numpy); + if (c_api == NULL) { + PyErr_SetString(PyExc_AttributeError, "_ARRAY_API not found"); + return -1; + } + + if (!PyCapsule_CheckExact(c_api)) { + PyErr_SetString(PyExc_RuntimeError, "_ARRAY_API is not PyCapsule object"); + Py_DECREF(c_api); + return -1; + } + PyArray_API = (void **)PyCapsule_GetPointer(c_api, NULL); + Py_DECREF(c_api); + if (PyArray_API == NULL) { + PyErr_SetString(PyExc_RuntimeError, "_ARRAY_API is NULL pointer"); + return -1; + } + + /* Perform runtime check of C API version */ + if (NPY_VERSION != PyArray_GetNDArrayCVersion()) { + PyErr_Format(PyExc_RuntimeError, "module compiled against "\ + "ABI version 0x%x but this version of numpy is 0x%x", \ + (int) NPY_VERSION, (int) PyArray_GetNDArrayCVersion()); + return -1; + } + if (NPY_FEATURE_VERSION > PyArray_GetNDArrayCFeatureVersion()) { + PyErr_Format(PyExc_RuntimeError, "module compiled against "\ + "API version 0x%x but this version of numpy is 0x%x", \ + (int) NPY_FEATURE_VERSION, (int) PyArray_GetNDArrayCFeatureVersion()); + return -1; + } + + /* + * Perform runtime check of endianness and check it matches the one set by + * the headers (npy_endian.h) as a safeguard + */ + st = PyArray_GetEndianness(); + if (st == NPY_CPU_UNKNOWN_ENDIAN) { + PyErr_Format(PyExc_RuntimeError, "FATAL: module compiled as unknown endian"); + return -1; + } +#if NPY_BYTE_ORDER == NPY_BIG_ENDIAN + if (st != NPY_CPU_BIG) { + PyErr_Format(PyExc_RuntimeError, "FATAL: module compiled as "\ + "big endian, but detected different endianness at runtime"); + return -1; + } +#elif NPY_BYTE_ORDER == NPY_LITTLE_ENDIAN + if (st != NPY_CPU_LITTLE) { + PyErr_Format(PyExc_RuntimeError, "FATAL: module compiled as "\ + "little endian, but detected different endianness at runtime"); + return -1; + } +#endif + + return 0; +} + +#define import_array() {if (_import_array() < 0) {PyErr_Print(); PyErr_SetString(PyExc_ImportError, "numpy.core.multiarray failed to import"); return NULL; } } + +#define import_array1(ret) {if (_import_array() < 0) {PyErr_Print(); PyErr_SetString(PyExc_ImportError, "numpy.core.multiarray failed to import"); return ret; } } + +#define import_array2(msg, ret) {if (_import_array() < 0) {PyErr_Print(); PyErr_SetString(PyExc_ImportError, msg); return ret; } } + +#endif + +#endif diff --git a/EXE version/main/numpy/core/include/numpy/__ufunc_api.h b/EXE version/main/numpy/core/include/numpy/__ufunc_api.h new file mode 100644 index 00000000..5b5a9f4d --- /dev/null +++ b/EXE version/main/numpy/core/include/numpy/__ufunc_api.h @@ -0,0 +1,311 @@ + +#ifdef _UMATHMODULE + +extern NPY_NO_EXPORT PyTypeObject PyUFunc_Type; + +extern NPY_NO_EXPORT PyTypeObject PyUFunc_Type; + +NPY_NO_EXPORT PyObject * PyUFunc_FromFuncAndData \ + (PyUFuncGenericFunction *, void **, char *, int, int, int, int, const char *, const char *, int); +NPY_NO_EXPORT int PyUFunc_RegisterLoopForType \ + (PyUFuncObject *, int, PyUFuncGenericFunction, const int *, void *); +NPY_NO_EXPORT int PyUFunc_GenericFunction \ + (PyUFuncObject *NPY_UNUSED(ufunc), PyObject *NPY_UNUSED(args), PyObject *NPY_UNUSED(kwds), PyArrayObject **NPY_UNUSED(op)); +NPY_NO_EXPORT void PyUFunc_f_f_As_d_d \ + (char **, npy_intp const *, npy_intp const *, void *); +NPY_NO_EXPORT void PyUFunc_d_d \ + (char **, npy_intp const *, npy_intp const *, void *); +NPY_NO_EXPORT void PyUFunc_f_f \ + (char **, npy_intp const *, npy_intp const *, void *); +NPY_NO_EXPORT void PyUFunc_g_g \ + (char **, npy_intp const *, npy_intp const *, void *); +NPY_NO_EXPORT void PyUFunc_F_F_As_D_D \ + (char **, npy_intp const *, npy_intp const *, void *); +NPY_NO_EXPORT void PyUFunc_F_F \ + (char **, npy_intp const *, npy_intp const *, void *); +NPY_NO_EXPORT void PyUFunc_D_D \ + (char **, npy_intp const *, npy_intp const *, void *); +NPY_NO_EXPORT void PyUFunc_G_G \ + (char **, npy_intp const *, npy_intp const *, void *); +NPY_NO_EXPORT void PyUFunc_O_O \ + (char **, npy_intp const *, npy_intp const *, void *); +NPY_NO_EXPORT void PyUFunc_ff_f_As_dd_d \ + (char **, npy_intp const *, npy_intp const *, void *); +NPY_NO_EXPORT void PyUFunc_ff_f \ + (char **, npy_intp const *, npy_intp const *, void *); +NPY_NO_EXPORT void PyUFunc_dd_d \ + (char **, npy_intp const *, npy_intp const *, void *); +NPY_NO_EXPORT void PyUFunc_gg_g \ + (char **, npy_intp const *, npy_intp const *, void *); +NPY_NO_EXPORT void PyUFunc_FF_F_As_DD_D \ + (char **, npy_intp const *, npy_intp const *, void *); +NPY_NO_EXPORT void PyUFunc_DD_D \ + (char **, npy_intp const *, npy_intp const *, void *); +NPY_NO_EXPORT void PyUFunc_FF_F \ + (char **, npy_intp const *, npy_intp const *, void *); +NPY_NO_EXPORT void PyUFunc_GG_G \ + (char **, npy_intp const *, npy_intp const *, void *); +NPY_NO_EXPORT void PyUFunc_OO_O \ + (char **, npy_intp const *, npy_intp const *, void *); +NPY_NO_EXPORT void PyUFunc_O_O_method \ + (char **, npy_intp const *, npy_intp const *, void *); +NPY_NO_EXPORT void PyUFunc_OO_O_method \ + (char **, npy_intp const *, npy_intp const *, void *); +NPY_NO_EXPORT void PyUFunc_On_Om \ + (char **, npy_intp const *, npy_intp const *, void *); +NPY_NO_EXPORT int PyUFunc_GetPyValues \ + (char *, int *, int *, PyObject **); +NPY_NO_EXPORT int PyUFunc_checkfperr \ + (int, PyObject *, int *); +NPY_NO_EXPORT void PyUFunc_clearfperr \ + (void); +NPY_NO_EXPORT int PyUFunc_getfperr \ + (void); +NPY_NO_EXPORT int PyUFunc_handlefperr \ + (int, PyObject *, int, int *); +NPY_NO_EXPORT int PyUFunc_ReplaceLoopBySignature \ + (PyUFuncObject *, PyUFuncGenericFunction, const int *, PyUFuncGenericFunction *); +NPY_NO_EXPORT PyObject * PyUFunc_FromFuncAndDataAndSignature \ + (PyUFuncGenericFunction *, void **, char *, int, int, int, int, const char *, const char *, int, const char *); +NPY_NO_EXPORT int PyUFunc_SetUsesArraysAsData \ + (void **NPY_UNUSED(data), size_t NPY_UNUSED(i)); +NPY_NO_EXPORT void PyUFunc_e_e \ + (char **, npy_intp const *, npy_intp const *, void *); +NPY_NO_EXPORT void PyUFunc_e_e_As_f_f \ + (char **, npy_intp const *, npy_intp const *, void *); +NPY_NO_EXPORT void PyUFunc_e_e_As_d_d \ + (char **, npy_intp const *, npy_intp const *, void *); +NPY_NO_EXPORT void PyUFunc_ee_e \ + (char **, npy_intp const *, npy_intp const *, void *); +NPY_NO_EXPORT void PyUFunc_ee_e_As_ff_f \ + (char **, npy_intp const *, npy_intp const *, void *); +NPY_NO_EXPORT void PyUFunc_ee_e_As_dd_d \ + (char **, npy_intp const *, npy_intp const *, void *); +NPY_NO_EXPORT int PyUFunc_DefaultTypeResolver \ + (PyUFuncObject *, NPY_CASTING, PyArrayObject **, PyObject *, PyArray_Descr **); +NPY_NO_EXPORT int PyUFunc_ValidateCasting \ + (PyUFuncObject *, NPY_CASTING, PyArrayObject **, PyArray_Descr **); +NPY_NO_EXPORT int PyUFunc_RegisterLoopForDescr \ + (PyUFuncObject *, PyArray_Descr *, PyUFuncGenericFunction, PyArray_Descr **, void *); +NPY_NO_EXPORT PyObject * PyUFunc_FromFuncAndDataAndSignatureAndIdentity \ + (PyUFuncGenericFunction *, void **, char *, int, int, int, int, const char *, const char *, const int, const char *, PyObject *); + +#else + +#if defined(PY_UFUNC_UNIQUE_SYMBOL) +#define PyUFunc_API PY_UFUNC_UNIQUE_SYMBOL +#endif + +#if defined(NO_IMPORT) || defined(NO_IMPORT_UFUNC) +extern void **PyUFunc_API; +#else +#if defined(PY_UFUNC_UNIQUE_SYMBOL) +void **PyUFunc_API; +#else +static void **PyUFunc_API=NULL; +#endif +#endif + +#define PyUFunc_Type (*(PyTypeObject *)PyUFunc_API[0]) +#define PyUFunc_FromFuncAndData \ + (*(PyObject * (*)(PyUFuncGenericFunction *, void **, char *, int, int, int, int, const char *, const char *, int)) \ + PyUFunc_API[1]) +#define PyUFunc_RegisterLoopForType \ + (*(int (*)(PyUFuncObject *, int, PyUFuncGenericFunction, const int *, void *)) \ + PyUFunc_API[2]) +#define PyUFunc_GenericFunction \ + (*(int (*)(PyUFuncObject *NPY_UNUSED(ufunc), PyObject *NPY_UNUSED(args), PyObject *NPY_UNUSED(kwds), PyArrayObject **NPY_UNUSED(op))) \ + PyUFunc_API[3]) +#define PyUFunc_f_f_As_d_d \ + (*(void (*)(char **, npy_intp const *, npy_intp const *, void *)) \ + PyUFunc_API[4]) +#define PyUFunc_d_d \ + (*(void (*)(char **, npy_intp const *, npy_intp const *, void *)) \ + PyUFunc_API[5]) +#define PyUFunc_f_f \ + (*(void (*)(char **, npy_intp const *, npy_intp const *, void *)) \ + PyUFunc_API[6]) +#define PyUFunc_g_g \ + (*(void (*)(char **, npy_intp const *, npy_intp const *, void *)) \ + PyUFunc_API[7]) +#define PyUFunc_F_F_As_D_D \ + (*(void (*)(char **, npy_intp const *, npy_intp const *, void *)) \ + PyUFunc_API[8]) +#define PyUFunc_F_F \ + (*(void (*)(char **, npy_intp const *, npy_intp const *, void *)) \ + PyUFunc_API[9]) +#define PyUFunc_D_D \ + (*(void (*)(char **, npy_intp const *, npy_intp const *, void *)) \ + PyUFunc_API[10]) +#define PyUFunc_G_G \ + (*(void (*)(char **, npy_intp const *, npy_intp const *, void *)) \ + PyUFunc_API[11]) +#define PyUFunc_O_O \ + (*(void (*)(char **, npy_intp const *, npy_intp const *, void *)) \ + PyUFunc_API[12]) +#define PyUFunc_ff_f_As_dd_d \ + (*(void (*)(char **, npy_intp const *, npy_intp const *, void *)) \ + PyUFunc_API[13]) +#define PyUFunc_ff_f \ + (*(void (*)(char **, npy_intp const *, npy_intp const *, void *)) \ + PyUFunc_API[14]) +#define PyUFunc_dd_d \ + (*(void (*)(char **, npy_intp const *, npy_intp const *, void *)) \ + PyUFunc_API[15]) +#define PyUFunc_gg_g \ + (*(void (*)(char **, npy_intp const *, npy_intp const *, void *)) \ + PyUFunc_API[16]) +#define PyUFunc_FF_F_As_DD_D \ + (*(void (*)(char **, npy_intp const *, npy_intp const *, void *)) \ + PyUFunc_API[17]) +#define PyUFunc_DD_D \ + (*(void (*)(char **, npy_intp const *, npy_intp const *, void *)) \ + PyUFunc_API[18]) +#define PyUFunc_FF_F \ + (*(void (*)(char **, npy_intp const *, npy_intp const *, void *)) \ + PyUFunc_API[19]) +#define PyUFunc_GG_G \ + (*(void (*)(char **, npy_intp const *, npy_intp const *, void *)) \ + PyUFunc_API[20]) +#define PyUFunc_OO_O \ + (*(void (*)(char **, npy_intp const *, npy_intp const *, void *)) \ + PyUFunc_API[21]) +#define PyUFunc_O_O_method \ + (*(void (*)(char **, npy_intp const *, npy_intp const *, void *)) \ + PyUFunc_API[22]) +#define PyUFunc_OO_O_method \ + (*(void (*)(char **, npy_intp const *, npy_intp const *, void *)) \ + PyUFunc_API[23]) +#define PyUFunc_On_Om \ + (*(void (*)(char **, npy_intp const *, npy_intp const *, void *)) \ + PyUFunc_API[24]) +#define PyUFunc_GetPyValues \ + (*(int (*)(char *, int *, int *, PyObject **)) \ + PyUFunc_API[25]) +#define PyUFunc_checkfperr \ + (*(int (*)(int, PyObject *, int *)) \ + PyUFunc_API[26]) +#define PyUFunc_clearfperr \ + (*(void (*)(void)) \ + PyUFunc_API[27]) +#define PyUFunc_getfperr \ + (*(int (*)(void)) \ + PyUFunc_API[28]) +#define PyUFunc_handlefperr \ + (*(int (*)(int, PyObject *, int, int *)) \ + PyUFunc_API[29]) +#define PyUFunc_ReplaceLoopBySignature \ + (*(int (*)(PyUFuncObject *, PyUFuncGenericFunction, const int *, PyUFuncGenericFunction *)) \ + PyUFunc_API[30]) +#define PyUFunc_FromFuncAndDataAndSignature \ + (*(PyObject * (*)(PyUFuncGenericFunction *, void **, char *, int, int, int, int, const char *, const char *, int, const char *)) \ + PyUFunc_API[31]) +#define PyUFunc_SetUsesArraysAsData \ + (*(int (*)(void **NPY_UNUSED(data), size_t NPY_UNUSED(i))) \ + PyUFunc_API[32]) +#define PyUFunc_e_e \ + (*(void (*)(char **, npy_intp const *, npy_intp const *, void *)) \ + PyUFunc_API[33]) +#define PyUFunc_e_e_As_f_f \ + (*(void (*)(char **, npy_intp const *, npy_intp const *, void *)) \ + PyUFunc_API[34]) +#define PyUFunc_e_e_As_d_d \ + (*(void (*)(char **, npy_intp const *, npy_intp const *, void *)) \ + PyUFunc_API[35]) +#define PyUFunc_ee_e \ + (*(void (*)(char **, npy_intp const *, npy_intp const *, void *)) \ + PyUFunc_API[36]) +#define PyUFunc_ee_e_As_ff_f \ + (*(void (*)(char **, npy_intp const *, npy_intp const *, void *)) \ + PyUFunc_API[37]) +#define PyUFunc_ee_e_As_dd_d \ + (*(void (*)(char **, npy_intp const *, npy_intp const *, void *)) \ + PyUFunc_API[38]) +#define PyUFunc_DefaultTypeResolver \ + (*(int (*)(PyUFuncObject *, NPY_CASTING, PyArrayObject **, PyObject *, PyArray_Descr **)) \ + PyUFunc_API[39]) +#define PyUFunc_ValidateCasting \ + (*(int (*)(PyUFuncObject *, NPY_CASTING, PyArrayObject **, PyArray_Descr **)) \ + PyUFunc_API[40]) +#define PyUFunc_RegisterLoopForDescr \ + (*(int (*)(PyUFuncObject *, PyArray_Descr *, PyUFuncGenericFunction, PyArray_Descr **, void *)) \ + PyUFunc_API[41]) +#define PyUFunc_FromFuncAndDataAndSignatureAndIdentity \ + (*(PyObject * (*)(PyUFuncGenericFunction *, void **, char *, int, int, int, int, const char *, const char *, const int, const char *, PyObject *)) \ + PyUFunc_API[42]) + +static NPY_INLINE int +_import_umath(void) +{ + PyObject *numpy = PyImport_ImportModule("numpy.core._multiarray_umath"); + PyObject *c_api = NULL; + + if (numpy == NULL) { + PyErr_SetString(PyExc_ImportError, + "numpy.core._multiarray_umath failed to import"); + return -1; + } + c_api = PyObject_GetAttrString(numpy, "_UFUNC_API"); + Py_DECREF(numpy); + if (c_api == NULL) { + PyErr_SetString(PyExc_AttributeError, "_UFUNC_API not found"); + return -1; + } + + if (!PyCapsule_CheckExact(c_api)) { + PyErr_SetString(PyExc_RuntimeError, "_UFUNC_API is not PyCapsule object"); + Py_DECREF(c_api); + return -1; + } + PyUFunc_API = (void **)PyCapsule_GetPointer(c_api, NULL); + Py_DECREF(c_api); + if (PyUFunc_API == NULL) { + PyErr_SetString(PyExc_RuntimeError, "_UFUNC_API is NULL pointer"); + return -1; + } + return 0; +} + +#define import_umath() \ + do {\ + UFUNC_NOFPE\ + if (_import_umath() < 0) {\ + PyErr_Print();\ + PyErr_SetString(PyExc_ImportError,\ + "numpy.core.umath failed to import");\ + return NULL;\ + }\ + } while(0) + +#define import_umath1(ret) \ + do {\ + UFUNC_NOFPE\ + if (_import_umath() < 0) {\ + PyErr_Print();\ + PyErr_SetString(PyExc_ImportError,\ + "numpy.core.umath failed to import");\ + return ret;\ + }\ + } while(0) + +#define import_umath2(ret, msg) \ + do {\ + UFUNC_NOFPE\ + if (_import_umath() < 0) {\ + PyErr_Print();\ + PyErr_SetString(PyExc_ImportError, msg);\ + return ret;\ + }\ + } while(0) + +#define import_ufunc() \ + do {\ + UFUNC_NOFPE\ + if (_import_umath() < 0) {\ + PyErr_Print();\ + PyErr_SetString(PyExc_ImportError,\ + "numpy.core.umath failed to import");\ + }\ + } while(0) + +#endif diff --git a/EXE version/main/numpy/core/include/numpy/_neighborhood_iterator_imp.h b/EXE version/main/numpy/core/include/numpy/_neighborhood_iterator_imp.h new file mode 100644 index 00000000..e8860cbc --- /dev/null +++ b/EXE version/main/numpy/core/include/numpy/_neighborhood_iterator_imp.h @@ -0,0 +1,90 @@ +#ifndef _NPY_INCLUDE_NEIGHBORHOOD_IMP +#error You should not include this header directly +#endif +/* + * Private API (here for inline) + */ +static NPY_INLINE int +_PyArrayNeighborhoodIter_IncrCoord(PyArrayNeighborhoodIterObject* iter); + +/* + * Update to next item of the iterator + * + * Note: this simply increment the coordinates vector, last dimension + * incremented first , i.e, for dimension 3 + * ... + * -1, -1, -1 + * -1, -1, 0 + * -1, -1, 1 + * .... + * -1, 0, -1 + * -1, 0, 0 + * .... + * 0, -1, -1 + * 0, -1, 0 + * .... + */ +#define _UPDATE_COORD_ITER(c) \ + wb = iter->coordinates[c] < iter->bounds[c][1]; \ + if (wb) { \ + iter->coordinates[c] += 1; \ + return 0; \ + } \ + else { \ + iter->coordinates[c] = iter->bounds[c][0]; \ + } + +static NPY_INLINE int +_PyArrayNeighborhoodIter_IncrCoord(PyArrayNeighborhoodIterObject* iter) +{ + npy_intp i, wb; + + for (i = iter->nd - 1; i >= 0; --i) { + _UPDATE_COORD_ITER(i) + } + + return 0; +} + +/* + * Version optimized for 2d arrays, manual loop unrolling + */ +static NPY_INLINE int +_PyArrayNeighborhoodIter_IncrCoord2D(PyArrayNeighborhoodIterObject* iter) +{ + npy_intp wb; + + _UPDATE_COORD_ITER(1) + _UPDATE_COORD_ITER(0) + + return 0; +} +#undef _UPDATE_COORD_ITER + +/* + * Advance to the next neighbour + */ +static NPY_INLINE int +PyArrayNeighborhoodIter_Next(PyArrayNeighborhoodIterObject* iter) +{ + _PyArrayNeighborhoodIter_IncrCoord (iter); + iter->dataptr = iter->translate((PyArrayIterObject*)iter, iter->coordinates); + + return 0; +} + +/* + * Reset functions + */ +static NPY_INLINE int +PyArrayNeighborhoodIter_Reset(PyArrayNeighborhoodIterObject* iter) +{ + npy_intp i; + + for (i = 0; i < iter->nd; ++i) { + iter->coordinates[i] = iter->bounds[i][0]; + } + iter->dataptr = iter->translate((PyArrayIterObject*)iter, iter->coordinates); + + return 0; +} diff --git a/EXE version/main/numpy/core/include/numpy/_numpyconfig.h b/EXE version/main/numpy/core/include/numpy/_numpyconfig.h new file mode 100644 index 00000000..3ddc405c --- /dev/null +++ b/EXE version/main/numpy/core/include/numpy/_numpyconfig.h @@ -0,0 +1,29 @@ +#define NPY_SIZEOF_SHORT SIZEOF_SHORT +#define NPY_SIZEOF_INT SIZEOF_INT +#define NPY_SIZEOF_LONG SIZEOF_LONG +#define NPY_SIZEOF_FLOAT 4 +#define NPY_SIZEOF_COMPLEX_FLOAT 8 +#define NPY_SIZEOF_DOUBLE 8 +#define NPY_SIZEOF_COMPLEX_DOUBLE 16 +#define NPY_SIZEOF_LONGDOUBLE 8 +#define NPY_SIZEOF_COMPLEX_LONGDOUBLE 16 +#define NPY_SIZEOF_PY_INTPTR_T 8 +#define NPY_SIZEOF_OFF_T 4 +#define NPY_SIZEOF_PY_LONG_LONG 8 +#define NPY_SIZEOF_LONGLONG 8 +#define NPY_NO_SIGNAL 1 +#define NPY_NO_SMP 0 +#define NPY_HAVE_DECL_ISNAN +#define NPY_HAVE_DECL_ISINF +#define NPY_HAVE_DECL_SIGNBIT +#define NPY_HAVE_DECL_ISFINITE +#define NPY_USE_C99_COMPLEX 1 +#define NPY_RELAXED_STRIDES_CHECKING 1 +#define NPY_USE_C99_FORMATS 1 +#define NPY_VISIBILITY_HIDDEN +#define NPY_ABI_VERSION 0x01000009 +#define NPY_API_VERSION 0x0000000E + +#ifndef __STDC_FORMAT_MACROS +#define __STDC_FORMAT_MACROS 1 +#endif diff --git a/EXE version/main/numpy/core/include/numpy/arrayobject.h b/EXE version/main/numpy/core/include/numpy/arrayobject.h new file mode 100644 index 00000000..4f46d6b1 --- /dev/null +++ b/EXE version/main/numpy/core/include/numpy/arrayobject.h @@ -0,0 +1,11 @@ +#ifndef Py_ARRAYOBJECT_H +#define Py_ARRAYOBJECT_H + +#include "ndarrayobject.h" +#include "npy_interrupt.h" + +#ifdef NPY_NO_PREFIX +#include "noprefix.h" +#endif + +#endif diff --git a/EXE version/main/numpy/core/include/numpy/arrayscalars.h b/EXE version/main/numpy/core/include/numpy/arrayscalars.h new file mode 100644 index 00000000..14a31988 --- /dev/null +++ b/EXE version/main/numpy/core/include/numpy/arrayscalars.h @@ -0,0 +1,182 @@ +#ifndef _NPY_ARRAYSCALARS_H_ +#define _NPY_ARRAYSCALARS_H_ + +#ifndef _MULTIARRAYMODULE +typedef struct { + PyObject_HEAD + npy_bool obval; +} PyBoolScalarObject; +#endif + + +typedef struct { + PyObject_HEAD + signed char obval; +} PyByteScalarObject; + + +typedef struct { + PyObject_HEAD + short obval; +} PyShortScalarObject; + + +typedef struct { + PyObject_HEAD + int obval; +} PyIntScalarObject; + + +typedef struct { + PyObject_HEAD + long obval; +} PyLongScalarObject; + + +typedef struct { + PyObject_HEAD + npy_longlong obval; +} PyLongLongScalarObject; + + +typedef struct { + PyObject_HEAD + unsigned char obval; +} PyUByteScalarObject; + + +typedef struct { + PyObject_HEAD + unsigned short obval; +} PyUShortScalarObject; + + +typedef struct { + PyObject_HEAD + unsigned int obval; +} PyUIntScalarObject; + + +typedef struct { + PyObject_HEAD + unsigned long obval; +} PyULongScalarObject; + + +typedef struct { + PyObject_HEAD + npy_ulonglong obval; +} PyULongLongScalarObject; + + +typedef struct { + PyObject_HEAD + npy_half obval; +} PyHalfScalarObject; + + +typedef struct { + PyObject_HEAD + float obval; +} PyFloatScalarObject; + + +typedef struct { + PyObject_HEAD + double obval; +} PyDoubleScalarObject; + + +typedef struct { + PyObject_HEAD + npy_longdouble obval; +} PyLongDoubleScalarObject; + + +typedef struct { + PyObject_HEAD + npy_cfloat obval; +} PyCFloatScalarObject; + + +typedef struct { + PyObject_HEAD + npy_cdouble obval; +} PyCDoubleScalarObject; + + +typedef struct { + PyObject_HEAD + npy_clongdouble obval; +} PyCLongDoubleScalarObject; + + +typedef struct { + PyObject_HEAD + PyObject * obval; +} PyObjectScalarObject; + +typedef struct { + PyObject_HEAD + npy_datetime obval; + PyArray_DatetimeMetaData obmeta; +} PyDatetimeScalarObject; + +typedef struct { + PyObject_HEAD + npy_timedelta obval; + PyArray_DatetimeMetaData obmeta; +} PyTimedeltaScalarObject; + + +typedef struct { + PyObject_HEAD + char obval; +} PyScalarObject; + +#define PyStringScalarObject PyBytesObject +typedef struct { + /* note that the PyObject_HEAD macro lives right here */ + PyUnicodeObject base; + Py_UCS4 *obval; + char *buffer_fmt; +} PyUnicodeScalarObject; + + +typedef struct { + PyObject_VAR_HEAD + char *obval; + PyArray_Descr *descr; + int flags; + PyObject *base; + void *_buffer_info; /* private buffer info, tagged to allow warning */ +} PyVoidScalarObject; + +/* Macros + PyScalarObject + PyArrType_Type + are defined in ndarrayobject.h +*/ + +#define PyArrayScalar_False ((PyObject *)(&(_PyArrayScalar_BoolValues[0]))) +#define PyArrayScalar_True ((PyObject *)(&(_PyArrayScalar_BoolValues[1]))) +#define PyArrayScalar_FromLong(i) \ + ((PyObject *)(&(_PyArrayScalar_BoolValues[((i)!=0)]))) +#define PyArrayScalar_RETURN_BOOL_FROM_LONG(i) \ + return Py_INCREF(PyArrayScalar_FromLong(i)), \ + PyArrayScalar_FromLong(i) +#define PyArrayScalar_RETURN_FALSE \ + return Py_INCREF(PyArrayScalar_False), \ + PyArrayScalar_False +#define PyArrayScalar_RETURN_TRUE \ + return Py_INCREF(PyArrayScalar_True), \ + PyArrayScalar_True + +#define PyArrayScalar_New(cls) \ + Py##cls##ArrType_Type.tp_alloc(&Py##cls##ArrType_Type, 0) +#define PyArrayScalar_VAL(obj, cls) \ + ((Py##cls##ScalarObject *)obj)->obval +#define PyArrayScalar_ASSIGN(obj, cls, val) \ + PyArrayScalar_VAL(obj, cls) = val + +#endif diff --git a/EXE version/main/numpy/core/include/numpy/halffloat.h b/EXE version/main/numpy/core/include/numpy/halffloat.h new file mode 100644 index 00000000..ab0d221f --- /dev/null +++ b/EXE version/main/numpy/core/include/numpy/halffloat.h @@ -0,0 +1,70 @@ +#ifndef __NPY_HALFFLOAT_H__ +#define __NPY_HALFFLOAT_H__ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Half-precision routines + */ + +/* Conversions */ +float npy_half_to_float(npy_half h); +double npy_half_to_double(npy_half h); +npy_half npy_float_to_half(float f); +npy_half npy_double_to_half(double d); +/* Comparisons */ +int npy_half_eq(npy_half h1, npy_half h2); +int npy_half_ne(npy_half h1, npy_half h2); +int npy_half_le(npy_half h1, npy_half h2); +int npy_half_lt(npy_half h1, npy_half h2); +int npy_half_ge(npy_half h1, npy_half h2); +int npy_half_gt(npy_half h1, npy_half h2); +/* faster *_nonan variants for when you know h1 and h2 are not NaN */ +int npy_half_eq_nonan(npy_half h1, npy_half h2); +int npy_half_lt_nonan(npy_half h1, npy_half h2); +int npy_half_le_nonan(npy_half h1, npy_half h2); +/* Miscellaneous functions */ +int npy_half_iszero(npy_half h); +int npy_half_isnan(npy_half h); +int npy_half_isinf(npy_half h); +int npy_half_isfinite(npy_half h); +int npy_half_signbit(npy_half h); +npy_half npy_half_copysign(npy_half x, npy_half y); +npy_half npy_half_spacing(npy_half h); +npy_half npy_half_nextafter(npy_half x, npy_half y); +npy_half npy_half_divmod(npy_half x, npy_half y, npy_half *modulus); + +/* + * Half-precision constants + */ + +#define NPY_HALF_ZERO (0x0000u) +#define NPY_HALF_PZERO (0x0000u) +#define NPY_HALF_NZERO (0x8000u) +#define NPY_HALF_ONE (0x3c00u) +#define NPY_HALF_NEGONE (0xbc00u) +#define NPY_HALF_PINF (0x7c00u) +#define NPY_HALF_NINF (0xfc00u) +#define NPY_HALF_NAN (0x7e00u) + +#define NPY_MAX_HALF (0x7bffu) + +/* + * Bit-level conversions + */ + +npy_uint16 npy_floatbits_to_halfbits(npy_uint32 f); +npy_uint16 npy_doublebits_to_halfbits(npy_uint64 d); +npy_uint32 npy_halfbits_to_floatbits(npy_uint16 h); +npy_uint64 npy_halfbits_to_doublebits(npy_uint16 h); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/EXE version/main/numpy/core/include/numpy/libdivide/LICENSE.txt b/EXE version/main/numpy/core/include/numpy/libdivide/LICENSE.txt new file mode 100644 index 00000000..d72a7c38 --- /dev/null +++ b/EXE version/main/numpy/core/include/numpy/libdivide/LICENSE.txt @@ -0,0 +1,21 @@ + zlib License + ------------ + + Copyright (C) 2010 - 2019 ridiculous_fish, + Copyright (C) 2016 - 2019 Kim Walisch, + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. diff --git a/EXE version/main/numpy/core/include/numpy/libdivide/libdivide.h b/EXE version/main/numpy/core/include/numpy/libdivide/libdivide.h new file mode 100644 index 00000000..81057b7b --- /dev/null +++ b/EXE version/main/numpy/core/include/numpy/libdivide/libdivide.h @@ -0,0 +1,2079 @@ +// libdivide.h - Optimized integer division +// https://libdivide.com +// +// Copyright (C) 2010 - 2019 ridiculous_fish, +// Copyright (C) 2016 - 2019 Kim Walisch, +// +// libdivide is dual-licensed under the Boost or zlib licenses. +// You may use libdivide under the terms of either of these. +// See LICENSE.txt for more details. + +#ifndef LIBDIVIDE_H +#define LIBDIVIDE_H + +#define LIBDIVIDE_VERSION "3.0" +#define LIBDIVIDE_VERSION_MAJOR 3 +#define LIBDIVIDE_VERSION_MINOR 0 + +#include + +#if defined(__cplusplus) + #include + #include + #include +#else + #include + #include +#endif + +#if defined(LIBDIVIDE_AVX512) + #include +#elif defined(LIBDIVIDE_AVX2) + #include +#elif defined(LIBDIVIDE_SSE2) + #include +#endif + +#if defined(_MSC_VER) + #include + // disable warning C4146: unary minus operator applied + // to unsigned type, result still unsigned + #pragma warning(disable: 4146) + #define LIBDIVIDE_VC +#endif + +#if !defined(__has_builtin) + #define __has_builtin(x) 0 +#endif + +#if defined(__SIZEOF_INT128__) + #define HAS_INT128_T + // clang-cl on Windows does not yet support 128-bit division + #if !(defined(__clang__) && defined(LIBDIVIDE_VC)) + #define HAS_INT128_DIV + #endif +#endif + +#if defined(__x86_64__) || defined(_M_X64) + #define LIBDIVIDE_X86_64 +#endif + +#if defined(__i386__) + #define LIBDIVIDE_i386 +#endif + +#if defined(__GNUC__) || defined(__clang__) + #define LIBDIVIDE_GCC_STYLE_ASM +#endif + +#if defined(__cplusplus) || defined(LIBDIVIDE_VC) + #define LIBDIVIDE_FUNCTION __FUNCTION__ +#else + #define LIBDIVIDE_FUNCTION __func__ +#endif + +#define LIBDIVIDE_ERROR(msg) \ + do { \ + fprintf(stderr, "libdivide.h:%d: %s(): Error: %s\n", \ + __LINE__, LIBDIVIDE_FUNCTION, msg); \ + abort(); \ + } while (0) + +#if defined(LIBDIVIDE_ASSERTIONS_ON) + #define LIBDIVIDE_ASSERT(x) \ + do { \ + if (!(x)) { \ + fprintf(stderr, "libdivide.h:%d: %s(): Assertion failed: %s\n", \ + __LINE__, LIBDIVIDE_FUNCTION, #x); \ + abort(); \ + } \ + } while (0) +#else + #define LIBDIVIDE_ASSERT(x) +#endif + +#ifdef __cplusplus +namespace libdivide { +#endif + +// pack divider structs to prevent compilers from padding. +// This reduces memory usage by up to 43% when using a large +// array of libdivide dividers and improves performance +// by up to 10% because of reduced memory bandwidth. +#pragma pack(push, 1) + +struct libdivide_u32_t { + uint32_t magic; + uint8_t more; +}; + +struct libdivide_s32_t { + int32_t magic; + uint8_t more; +}; + +struct libdivide_u64_t { + uint64_t magic; + uint8_t more; +}; + +struct libdivide_s64_t { + int64_t magic; + uint8_t more; +}; + +struct libdivide_u32_branchfree_t { + uint32_t magic; + uint8_t more; +}; + +struct libdivide_s32_branchfree_t { + int32_t magic; + uint8_t more; +}; + +struct libdivide_u64_branchfree_t { + uint64_t magic; + uint8_t more; +}; + +struct libdivide_s64_branchfree_t { + int64_t magic; + uint8_t more; +}; + +#pragma pack(pop) + +// Explanation of the "more" field: +// +// * Bits 0-5 is the shift value (for shift path or mult path). +// * Bit 6 is the add indicator for mult path. +// * Bit 7 is set if the divisor is negative. We use bit 7 as the negative +// divisor indicator so that we can efficiently use sign extension to +// create a bitmask with all bits set to 1 (if the divisor is negative) +// or 0 (if the divisor is positive). +// +// u32: [0-4] shift value +// [5] ignored +// [6] add indicator +// magic number of 0 indicates shift path +// +// s32: [0-4] shift value +// [5] ignored +// [6] add indicator +// [7] indicates negative divisor +// magic number of 0 indicates shift path +// +// u64: [0-5] shift value +// [6] add indicator +// magic number of 0 indicates shift path +// +// s64: [0-5] shift value +// [6] add indicator +// [7] indicates negative divisor +// magic number of 0 indicates shift path +// +// In s32 and s64 branchfree modes, the magic number is negated according to +// whether the divisor is negated. In branchfree strategy, it is not negated. + +enum { + LIBDIVIDE_32_SHIFT_MASK = 0x1F, + LIBDIVIDE_64_SHIFT_MASK = 0x3F, + LIBDIVIDE_ADD_MARKER = 0x40, + LIBDIVIDE_NEGATIVE_DIVISOR = 0x80 +}; + +static inline struct libdivide_s32_t libdivide_s32_gen(int32_t d); +static inline struct libdivide_u32_t libdivide_u32_gen(uint32_t d); +static inline struct libdivide_s64_t libdivide_s64_gen(int64_t d); +static inline struct libdivide_u64_t libdivide_u64_gen(uint64_t d); + +static inline struct libdivide_s32_branchfree_t libdivide_s32_branchfree_gen(int32_t d); +static inline struct libdivide_u32_branchfree_t libdivide_u32_branchfree_gen(uint32_t d); +static inline struct libdivide_s64_branchfree_t libdivide_s64_branchfree_gen(int64_t d); +static inline struct libdivide_u64_branchfree_t libdivide_u64_branchfree_gen(uint64_t d); + +static inline int32_t libdivide_s32_do(int32_t numer, const struct libdivide_s32_t *denom); +static inline uint32_t libdivide_u32_do(uint32_t numer, const struct libdivide_u32_t *denom); +static inline int64_t libdivide_s64_do(int64_t numer, const struct libdivide_s64_t *denom); +static inline uint64_t libdivide_u64_do(uint64_t numer, const struct libdivide_u64_t *denom); + +static inline int32_t libdivide_s32_branchfree_do(int32_t numer, const struct libdivide_s32_branchfree_t *denom); +static inline uint32_t libdivide_u32_branchfree_do(uint32_t numer, const struct libdivide_u32_branchfree_t *denom); +static inline int64_t libdivide_s64_branchfree_do(int64_t numer, const struct libdivide_s64_branchfree_t *denom); +static inline uint64_t libdivide_u64_branchfree_do(uint64_t numer, const struct libdivide_u64_branchfree_t *denom); + +static inline int32_t libdivide_s32_recover(const struct libdivide_s32_t *denom); +static inline uint32_t libdivide_u32_recover(const struct libdivide_u32_t *denom); +static inline int64_t libdivide_s64_recover(const struct libdivide_s64_t *denom); +static inline uint64_t libdivide_u64_recover(const struct libdivide_u64_t *denom); + +static inline int32_t libdivide_s32_branchfree_recover(const struct libdivide_s32_branchfree_t *denom); +static inline uint32_t libdivide_u32_branchfree_recover(const struct libdivide_u32_branchfree_t *denom); +static inline int64_t libdivide_s64_branchfree_recover(const struct libdivide_s64_branchfree_t *denom); +static inline uint64_t libdivide_u64_branchfree_recover(const struct libdivide_u64_branchfree_t *denom); + +//////// Internal Utility Functions + +static inline uint32_t libdivide_mullhi_u32(uint32_t x, uint32_t y) { + uint64_t xl = x, yl = y; + uint64_t rl = xl * yl; + return (uint32_t)(rl >> 32); +} + +static inline int32_t libdivide_mullhi_s32(int32_t x, int32_t y) { + int64_t xl = x, yl = y; + int64_t rl = xl * yl; + // needs to be arithmetic shift + return (int32_t)(rl >> 32); +} + +static inline uint64_t libdivide_mullhi_u64(uint64_t x, uint64_t y) { +#if defined(LIBDIVIDE_VC) && \ + defined(LIBDIVIDE_X86_64) + return __umulh(x, y); +#elif defined(HAS_INT128_T) + __uint128_t xl = x, yl = y; + __uint128_t rl = xl * yl; + return (uint64_t)(rl >> 64); +#else + // full 128 bits are x0 * y0 + (x0 * y1 << 32) + (x1 * y0 << 32) + (x1 * y1 << 64) + uint32_t mask = 0xFFFFFFFF; + uint32_t x0 = (uint32_t)(x & mask); + uint32_t x1 = (uint32_t)(x >> 32); + uint32_t y0 = (uint32_t)(y & mask); + uint32_t y1 = (uint32_t)(y >> 32); + uint32_t x0y0_hi = libdivide_mullhi_u32(x0, y0); + uint64_t x0y1 = x0 * (uint64_t)y1; + uint64_t x1y0 = x1 * (uint64_t)y0; + uint64_t x1y1 = x1 * (uint64_t)y1; + uint64_t temp = x1y0 + x0y0_hi; + uint64_t temp_lo = temp & mask; + uint64_t temp_hi = temp >> 32; + + return x1y1 + temp_hi + ((temp_lo + x0y1) >> 32); +#endif +} + +static inline int64_t libdivide_mullhi_s64(int64_t x, int64_t y) { +#if defined(LIBDIVIDE_VC) && \ + defined(LIBDIVIDE_X86_64) + return __mulh(x, y); +#elif defined(HAS_INT128_T) + __int128_t xl = x, yl = y; + __int128_t rl = xl * yl; + return (int64_t)(rl >> 64); +#else + // full 128 bits are x0 * y0 + (x0 * y1 << 32) + (x1 * y0 << 32) + (x1 * y1 << 64) + uint32_t mask = 0xFFFFFFFF; + uint32_t x0 = (uint32_t)(x & mask); + uint32_t y0 = (uint32_t)(y & mask); + int32_t x1 = (int32_t)(x >> 32); + int32_t y1 = (int32_t)(y >> 32); + uint32_t x0y0_hi = libdivide_mullhi_u32(x0, y0); + int64_t t = x1 * (int64_t)y0 + x0y0_hi; + int64_t w1 = x0 * (int64_t)y1 + (t & mask); + + return x1 * (int64_t)y1 + (t >> 32) + (w1 >> 32); +#endif +} + +static inline int32_t libdivide_count_leading_zeros32(uint32_t val) { +#if defined(__GNUC__) || \ + __has_builtin(__builtin_clz) + // Fast way to count leading zeros + return __builtin_clz(val); +#elif defined(LIBDIVIDE_VC) + unsigned long result; + if (_BitScanReverse(&result, val)) { + return 31 - result; + } + return 0; +#else + if (val == 0) + return 32; + int32_t result = 8; + uint32_t hi = 0xFFU << 24; + while ((val & hi) == 0) { + hi >>= 8; + result += 8; + } + while (val & hi) { + result -= 1; + hi <<= 1; + } + return result; +#endif +} + +static inline int32_t libdivide_count_leading_zeros64(uint64_t val) { +#if defined(__GNUC__) || \ + __has_builtin(__builtin_clzll) + // Fast way to count leading zeros + return __builtin_clzll(val); +#elif defined(LIBDIVIDE_VC) && defined(_WIN64) + unsigned long result; + if (_BitScanReverse64(&result, val)) { + return 63 - result; + } + return 0; +#else + uint32_t hi = val >> 32; + uint32_t lo = val & 0xFFFFFFFF; + if (hi != 0) return libdivide_count_leading_zeros32(hi); + return 32 + libdivide_count_leading_zeros32(lo); +#endif +} + +// libdivide_64_div_32_to_32: divides a 64-bit uint {u1, u0} by a 32-bit +// uint {v}. The result must fit in 32 bits. +// Returns the quotient directly and the remainder in *r +static inline uint32_t libdivide_64_div_32_to_32(uint32_t u1, uint32_t u0, uint32_t v, uint32_t *r) { +#if (defined(LIBDIVIDE_i386) || defined(LIBDIVIDE_X86_64)) && \ + defined(LIBDIVIDE_GCC_STYLE_ASM) + uint32_t result; + __asm__("divl %[v]" + : "=a"(result), "=d"(*r) + : [v] "r"(v), "a"(u0), "d"(u1) + ); + return result; +#else + uint64_t n = ((uint64_t)u1 << 32) | u0; + uint32_t result = (uint32_t)(n / v); + *r = (uint32_t)(n - result * (uint64_t)v); + return result; +#endif +} + +// libdivide_128_div_64_to_64: divides a 128-bit uint {u1, u0} by a 64-bit +// uint {v}. The result must fit in 64 bits. +// Returns the quotient directly and the remainder in *r +static uint64_t libdivide_128_div_64_to_64(uint64_t u1, uint64_t u0, uint64_t v, uint64_t *r) { +#if defined(LIBDIVIDE_X86_64) && \ + defined(LIBDIVIDE_GCC_STYLE_ASM) + uint64_t result; + __asm__("divq %[v]" + : "=a"(result), "=d"(*r) + : [v] "r"(v), "a"(u0), "d"(u1) + ); + return result; +#elif defined(HAS_INT128_T) && \ + defined(HAS_INT128_DIV) + __uint128_t n = ((__uint128_t)u1 << 64) | u0; + uint64_t result = (uint64_t)(n / v); + *r = (uint64_t)(n - result * (__uint128_t)v); + return result; +#else + // Code taken from Hacker's Delight: + // http://www.hackersdelight.org/HDcode/divlu.c. + // License permits inclusion here per: + // http://www.hackersdelight.org/permissions.htm + + const uint64_t b = (1ULL << 32); // Number base (32 bits) + uint64_t un1, un0; // Norm. dividend LSD's + uint64_t vn1, vn0; // Norm. divisor digits + uint64_t q1, q0; // Quotient digits + uint64_t un64, un21, un10; // Dividend digit pairs + uint64_t rhat; // A remainder + int32_t s; // Shift amount for norm + + // If overflow, set rem. to an impossible value, + // and return the largest possible quotient + if (u1 >= v) { + *r = (uint64_t) -1; + return (uint64_t) -1; + } + + // count leading zeros + s = libdivide_count_leading_zeros64(v); + if (s > 0) { + // Normalize divisor + v = v << s; + un64 = (u1 << s) | (u0 >> (64 - s)); + un10 = u0 << s; // Shift dividend left + } else { + // Avoid undefined behavior of (u0 >> 64). + // The behavior is undefined if the right operand is + // negative, or greater than or equal to the length + // in bits of the promoted left operand. + un64 = u1; + un10 = u0; + } + + // Break divisor up into two 32-bit digits + vn1 = v >> 32; + vn0 = v & 0xFFFFFFFF; + + // Break right half of dividend into two digits + un1 = un10 >> 32; + un0 = un10 & 0xFFFFFFFF; + + // Compute the first quotient digit, q1 + q1 = un64 / vn1; + rhat = un64 - q1 * vn1; + + while (q1 >= b || q1 * vn0 > b * rhat + un1) { + q1 = q1 - 1; + rhat = rhat + vn1; + if (rhat >= b) + break; + } + + // Multiply and subtract + un21 = un64 * b + un1 - q1 * v; + + // Compute the second quotient digit + q0 = un21 / vn1; + rhat = un21 - q0 * vn1; + + while (q0 >= b || q0 * vn0 > b * rhat + un0) { + q0 = q0 - 1; + rhat = rhat + vn1; + if (rhat >= b) + break; + } + + *r = (un21 * b + un0 - q0 * v) >> s; + return q1 * b + q0; +#endif +} + +// Bitshift a u128 in place, left (signed_shift > 0) or right (signed_shift < 0) +static inline void libdivide_u128_shift(uint64_t *u1, uint64_t *u0, int32_t signed_shift) { + if (signed_shift > 0) { + uint32_t shift = signed_shift; + *u1 <<= shift; + *u1 |= *u0 >> (64 - shift); + *u0 <<= shift; + } + else if (signed_shift < 0) { + uint32_t shift = -signed_shift; + *u0 >>= shift; + *u0 |= *u1 << (64 - shift); + *u1 >>= shift; + } +} + +// Computes a 128 / 128 -> 64 bit division, with a 128 bit remainder. +static uint64_t libdivide_128_div_128_to_64(uint64_t u_hi, uint64_t u_lo, uint64_t v_hi, uint64_t v_lo, uint64_t *r_hi, uint64_t *r_lo) { +#if defined(HAS_INT128_T) && \ + defined(HAS_INT128_DIV) + __uint128_t ufull = u_hi; + __uint128_t vfull = v_hi; + ufull = (ufull << 64) | u_lo; + vfull = (vfull << 64) | v_lo; + uint64_t res = (uint64_t)(ufull / vfull); + __uint128_t remainder = ufull - (vfull * res); + *r_lo = (uint64_t)remainder; + *r_hi = (uint64_t)(remainder >> 64); + return res; +#else + // Adapted from "Unsigned Doubleword Division" in Hacker's Delight + // We want to compute u / v + typedef struct { uint64_t hi; uint64_t lo; } u128_t; + u128_t u = {u_hi, u_lo}; + u128_t v = {v_hi, v_lo}; + + if (v.hi == 0) { + // divisor v is a 64 bit value, so we just need one 128/64 division + // Note that we are simpler than Hacker's Delight here, because we know + // the quotient fits in 64 bits whereas Hacker's Delight demands a full + // 128 bit quotient + *r_hi = 0; + return libdivide_128_div_64_to_64(u.hi, u.lo, v.lo, r_lo); + } + // Here v >= 2**64 + // We know that v.hi != 0, so count leading zeros is OK + // We have 0 <= n <= 63 + uint32_t n = libdivide_count_leading_zeros64(v.hi); + + // Normalize the divisor so its MSB is 1 + u128_t v1t = v; + libdivide_u128_shift(&v1t.hi, &v1t.lo, n); + uint64_t v1 = v1t.hi; // i.e. v1 = v1t >> 64 + + // To ensure no overflow + u128_t u1 = u; + libdivide_u128_shift(&u1.hi, &u1.lo, -1); + + // Get quotient from divide unsigned insn. + uint64_t rem_ignored; + uint64_t q1 = libdivide_128_div_64_to_64(u1.hi, u1.lo, v1, &rem_ignored); + + // Undo normalization and division of u by 2. + u128_t q0 = {0, q1}; + libdivide_u128_shift(&q0.hi, &q0.lo, n); + libdivide_u128_shift(&q0.hi, &q0.lo, -63); + + // Make q0 correct or too small by 1 + // Equivalent to `if (q0 != 0) q0 = q0 - 1;` + if (q0.hi != 0 || q0.lo != 0) { + q0.hi -= (q0.lo == 0); // borrow + q0.lo -= 1; + } + + // Now q0 is correct. + // Compute q0 * v as q0v + // = (q0.hi << 64 + q0.lo) * (v.hi << 64 + v.lo) + // = (q0.hi * v.hi << 128) + (q0.hi * v.lo << 64) + + // (q0.lo * v.hi << 64) + q0.lo * v.lo) + // Each term is 128 bit + // High half of full product (upper 128 bits!) are dropped + u128_t q0v = {0, 0}; + q0v.hi = q0.hi*v.lo + q0.lo*v.hi + libdivide_mullhi_u64(q0.lo, v.lo); + q0v.lo = q0.lo*v.lo; + + // Compute u - q0v as u_q0v + // This is the remainder + u128_t u_q0v = u; + u_q0v.hi -= q0v.hi + (u.lo < q0v.lo); // second term is borrow + u_q0v.lo -= q0v.lo; + + // Check if u_q0v >= v + // This checks if our remainder is larger than the divisor + if ((u_q0v.hi > v.hi) || + (u_q0v.hi == v.hi && u_q0v.lo >= v.lo)) { + // Increment q0 + q0.lo += 1; + q0.hi += (q0.lo == 0); // carry + + // Subtract v from remainder + u_q0v.hi -= v.hi + (u_q0v.lo < v.lo); + u_q0v.lo -= v.lo; + } + + *r_hi = u_q0v.hi; + *r_lo = u_q0v.lo; + + LIBDIVIDE_ASSERT(q0.hi == 0); + return q0.lo; +#endif +} + +////////// UINT32 + +static inline struct libdivide_u32_t libdivide_internal_u32_gen(uint32_t d, int branchfree) { + if (d == 0) { + LIBDIVIDE_ERROR("divider must be != 0"); + } + + struct libdivide_u32_t result; + uint32_t floor_log_2_d = 31 - libdivide_count_leading_zeros32(d); + + // Power of 2 + if ((d & (d - 1)) == 0) { + // We need to subtract 1 from the shift value in case of an unsigned + // branchfree divider because there is a hardcoded right shift by 1 + // in its division algorithm. Because of this we also need to add back + // 1 in its recovery algorithm. + result.magic = 0; + result.more = (uint8_t)(floor_log_2_d - (branchfree != 0)); + } else { + uint8_t more; + uint32_t rem, proposed_m; + proposed_m = libdivide_64_div_32_to_32(1U << floor_log_2_d, 0, d, &rem); + + LIBDIVIDE_ASSERT(rem > 0 && rem < d); + const uint32_t e = d - rem; + + // This power works if e < 2**floor_log_2_d. + if (!branchfree && (e < (1U << floor_log_2_d))) { + // This power works + more = floor_log_2_d; + } else { + // We have to use the general 33-bit algorithm. We need to compute + // (2**power) / d. However, we already have (2**(power-1))/d and + // its remainder. By doubling both, and then correcting the + // remainder, we can compute the larger division. + // don't care about overflow here - in fact, we expect it + proposed_m += proposed_m; + const uint32_t twice_rem = rem + rem; + if (twice_rem >= d || twice_rem < rem) proposed_m += 1; + more = floor_log_2_d | LIBDIVIDE_ADD_MARKER; + } + result.magic = 1 + proposed_m; + result.more = more; + // result.more's shift should in general be ceil_log_2_d. But if we + // used the smaller power, we subtract one from the shift because we're + // using the smaller power. If we're using the larger power, we + // subtract one from the shift because it's taken care of by the add + // indicator. So floor_log_2_d happens to be correct in both cases. + } + return result; +} + +struct libdivide_u32_t libdivide_u32_gen(uint32_t d) { + return libdivide_internal_u32_gen(d, 0); +} + +struct libdivide_u32_branchfree_t libdivide_u32_branchfree_gen(uint32_t d) { + if (d == 1) { + LIBDIVIDE_ERROR("branchfree divider must be != 1"); + } + struct libdivide_u32_t tmp = libdivide_internal_u32_gen(d, 1); + struct libdivide_u32_branchfree_t ret = {tmp.magic, (uint8_t)(tmp.more & LIBDIVIDE_32_SHIFT_MASK)}; + return ret; +} + +uint32_t libdivide_u32_do(uint32_t numer, const struct libdivide_u32_t *denom) { + uint8_t more = denom->more; + if (!denom->magic) { + return numer >> more; + } + else { + uint32_t q = libdivide_mullhi_u32(denom->magic, numer); + if (more & LIBDIVIDE_ADD_MARKER) { + uint32_t t = ((numer - q) >> 1) + q; + return t >> (more & LIBDIVIDE_32_SHIFT_MASK); + } + else { + // All upper bits are 0, + // don't need to mask them off. + return q >> more; + } + } +} + +uint32_t libdivide_u32_branchfree_do(uint32_t numer, const struct libdivide_u32_branchfree_t *denom) { + uint32_t q = libdivide_mullhi_u32(denom->magic, numer); + uint32_t t = ((numer - q) >> 1) + q; + return t >> denom->more; +} + +uint32_t libdivide_u32_recover(const struct libdivide_u32_t *denom) { + uint8_t more = denom->more; + uint8_t shift = more & LIBDIVIDE_32_SHIFT_MASK; + + if (!denom->magic) { + return 1U << shift; + } else if (!(more & LIBDIVIDE_ADD_MARKER)) { + // We compute q = n/d = n*m / 2^(32 + shift) + // Therefore we have d = 2^(32 + shift) / m + // We need to ceil it. + // We know d is not a power of 2, so m is not a power of 2, + // so we can just add 1 to the floor + uint32_t hi_dividend = 1U << shift; + uint32_t rem_ignored; + return 1 + libdivide_64_div_32_to_32(hi_dividend, 0, denom->magic, &rem_ignored); + } else { + // Here we wish to compute d = 2^(32+shift+1)/(m+2^32). + // Notice (m + 2^32) is a 33 bit number. Use 64 bit division for now + // Also note that shift may be as high as 31, so shift + 1 will + // overflow. So we have to compute it as 2^(32+shift)/(m+2^32), and + // then double the quotient and remainder. + uint64_t half_n = 1ULL << (32 + shift); + uint64_t d = (1ULL << 32) | denom->magic; + // Note that the quotient is guaranteed <= 32 bits, but the remainder + // may need 33! + uint32_t half_q = (uint32_t)(half_n / d); + uint64_t rem = half_n % d; + // We computed 2^(32+shift)/(m+2^32) + // Need to double it, and then add 1 to the quotient if doubling th + // remainder would increase the quotient. + // Note that rem<<1 cannot overflow, since rem < d and d is 33 bits + uint32_t full_q = half_q + half_q + ((rem<<1) >= d); + + // We rounded down in gen (hence +1) + return full_q + 1; + } +} + +uint32_t libdivide_u32_branchfree_recover(const struct libdivide_u32_branchfree_t *denom) { + uint8_t more = denom->more; + uint8_t shift = more & LIBDIVIDE_32_SHIFT_MASK; + + if (!denom->magic) { + return 1U << (shift + 1); + } else { + // Here we wish to compute d = 2^(32+shift+1)/(m+2^32). + // Notice (m + 2^32) is a 33 bit number. Use 64 bit division for now + // Also note that shift may be as high as 31, so shift + 1 will + // overflow. So we have to compute it as 2^(32+shift)/(m+2^32), and + // then double the quotient and remainder. + uint64_t half_n = 1ULL << (32 + shift); + uint64_t d = (1ULL << 32) | denom->magic; + // Note that the quotient is guaranteed <= 32 bits, but the remainder + // may need 33! + uint32_t half_q = (uint32_t)(half_n / d); + uint64_t rem = half_n % d; + // We computed 2^(32+shift)/(m+2^32) + // Need to double it, and then add 1 to the quotient if doubling th + // remainder would increase the quotient. + // Note that rem<<1 cannot overflow, since rem < d and d is 33 bits + uint32_t full_q = half_q + half_q + ((rem<<1) >= d); + + // We rounded down in gen (hence +1) + return full_q + 1; + } +} + +/////////// UINT64 + +static inline struct libdivide_u64_t libdivide_internal_u64_gen(uint64_t d, int branchfree) { + if (d == 0) { + LIBDIVIDE_ERROR("divider must be != 0"); + } + + struct libdivide_u64_t result; + uint32_t floor_log_2_d = 63 - libdivide_count_leading_zeros64(d); + + // Power of 2 + if ((d & (d - 1)) == 0) { + // We need to subtract 1 from the shift value in case of an unsigned + // branchfree divider because there is a hardcoded right shift by 1 + // in its division algorithm. Because of this we also need to add back + // 1 in its recovery algorithm. + result.magic = 0; + result.more = (uint8_t)(floor_log_2_d - (branchfree != 0)); + } else { + uint64_t proposed_m, rem; + uint8_t more; + // (1 << (64 + floor_log_2_d)) / d + proposed_m = libdivide_128_div_64_to_64(1ULL << floor_log_2_d, 0, d, &rem); + + LIBDIVIDE_ASSERT(rem > 0 && rem < d); + const uint64_t e = d - rem; + + // This power works if e < 2**floor_log_2_d. + if (!branchfree && e < (1ULL << floor_log_2_d)) { + // This power works + more = floor_log_2_d; + } else { + // We have to use the general 65-bit algorithm. We need to compute + // (2**power) / d. However, we already have (2**(power-1))/d and + // its remainder. By doubling both, and then correcting the + // remainder, we can compute the larger division. + // don't care about overflow here - in fact, we expect it + proposed_m += proposed_m; + const uint64_t twice_rem = rem + rem; + if (twice_rem >= d || twice_rem < rem) proposed_m += 1; + more = floor_log_2_d | LIBDIVIDE_ADD_MARKER; + } + result.magic = 1 + proposed_m; + result.more = more; + // result.more's shift should in general be ceil_log_2_d. But if we + // used the smaller power, we subtract one from the shift because we're + // using the smaller power. If we're using the larger power, we + // subtract one from the shift because it's taken care of by the add + // indicator. So floor_log_2_d happens to be correct in both cases, + // which is why we do it outside of the if statement. + } + return result; +} + +struct libdivide_u64_t libdivide_u64_gen(uint64_t d) { + return libdivide_internal_u64_gen(d, 0); +} + +struct libdivide_u64_branchfree_t libdivide_u64_branchfree_gen(uint64_t d) { + if (d == 1) { + LIBDIVIDE_ERROR("branchfree divider must be != 1"); + } + struct libdivide_u64_t tmp = libdivide_internal_u64_gen(d, 1); + struct libdivide_u64_branchfree_t ret = {tmp.magic, (uint8_t)(tmp.more & LIBDIVIDE_64_SHIFT_MASK)}; + return ret; +} + +uint64_t libdivide_u64_do(uint64_t numer, const struct libdivide_u64_t *denom) { + uint8_t more = denom->more; + if (!denom->magic) { + return numer >> more; + } + else { + uint64_t q = libdivide_mullhi_u64(denom->magic, numer); + if (more & LIBDIVIDE_ADD_MARKER) { + uint64_t t = ((numer - q) >> 1) + q; + return t >> (more & LIBDIVIDE_64_SHIFT_MASK); + } + else { + // All upper bits are 0, + // don't need to mask them off. + return q >> more; + } + } +} + +uint64_t libdivide_u64_branchfree_do(uint64_t numer, const struct libdivide_u64_branchfree_t *denom) { + uint64_t q = libdivide_mullhi_u64(denom->magic, numer); + uint64_t t = ((numer - q) >> 1) + q; + return t >> denom->more; +} + +uint64_t libdivide_u64_recover(const struct libdivide_u64_t *denom) { + uint8_t more = denom->more; + uint8_t shift = more & LIBDIVIDE_64_SHIFT_MASK; + + if (!denom->magic) { + return 1ULL << shift; + } else if (!(more & LIBDIVIDE_ADD_MARKER)) { + // We compute q = n/d = n*m / 2^(64 + shift) + // Therefore we have d = 2^(64 + shift) / m + // We need to ceil it. + // We know d is not a power of 2, so m is not a power of 2, + // so we can just add 1 to the floor + uint64_t hi_dividend = 1ULL << shift; + uint64_t rem_ignored; + return 1 + libdivide_128_div_64_to_64(hi_dividend, 0, denom->magic, &rem_ignored); + } else { + // Here we wish to compute d = 2^(64+shift+1)/(m+2^64). + // Notice (m + 2^64) is a 65 bit number. This gets hairy. See + // libdivide_u32_recover for more on what we do here. + // TODO: do something better than 128 bit math + + // Full n is a (potentially) 129 bit value + // half_n is a 128 bit value + // Compute the hi half of half_n. Low half is 0. + uint64_t half_n_hi = 1ULL << shift, half_n_lo = 0; + // d is a 65 bit value. The high bit is always set to 1. + const uint64_t d_hi = 1, d_lo = denom->magic; + // Note that the quotient is guaranteed <= 64 bits, + // but the remainder may need 65! + uint64_t r_hi, r_lo; + uint64_t half_q = libdivide_128_div_128_to_64(half_n_hi, half_n_lo, d_hi, d_lo, &r_hi, &r_lo); + // We computed 2^(64+shift)/(m+2^64) + // Double the remainder ('dr') and check if that is larger than d + // Note that d is a 65 bit value, so r1 is small and so r1 + r1 + // cannot overflow + uint64_t dr_lo = r_lo + r_lo; + uint64_t dr_hi = r_hi + r_hi + (dr_lo < r_lo); // last term is carry + int dr_exceeds_d = (dr_hi > d_hi) || (dr_hi == d_hi && dr_lo >= d_lo); + uint64_t full_q = half_q + half_q + (dr_exceeds_d ? 1 : 0); + return full_q + 1; + } +} + +uint64_t libdivide_u64_branchfree_recover(const struct libdivide_u64_branchfree_t *denom) { + uint8_t more = denom->more; + uint8_t shift = more & LIBDIVIDE_64_SHIFT_MASK; + + if (!denom->magic) { + return 1ULL << (shift + 1); + } else { + // Here we wish to compute d = 2^(64+shift+1)/(m+2^64). + // Notice (m + 2^64) is a 65 bit number. This gets hairy. See + // libdivide_u32_recover for more on what we do here. + // TODO: do something better than 128 bit math + + // Full n is a (potentially) 129 bit value + // half_n is a 128 bit value + // Compute the hi half of half_n. Low half is 0. + uint64_t half_n_hi = 1ULL << shift, half_n_lo = 0; + // d is a 65 bit value. The high bit is always set to 1. + const uint64_t d_hi = 1, d_lo = denom->magic; + // Note that the quotient is guaranteed <= 64 bits, + // but the remainder may need 65! + uint64_t r_hi, r_lo; + uint64_t half_q = libdivide_128_div_128_to_64(half_n_hi, half_n_lo, d_hi, d_lo, &r_hi, &r_lo); + // We computed 2^(64+shift)/(m+2^64) + // Double the remainder ('dr') and check if that is larger than d + // Note that d is a 65 bit value, so r1 is small and so r1 + r1 + // cannot overflow + uint64_t dr_lo = r_lo + r_lo; + uint64_t dr_hi = r_hi + r_hi + (dr_lo < r_lo); // last term is carry + int dr_exceeds_d = (dr_hi > d_hi) || (dr_hi == d_hi && dr_lo >= d_lo); + uint64_t full_q = half_q + half_q + (dr_exceeds_d ? 1 : 0); + return full_q + 1; + } +} + +/////////// SINT32 + +static inline struct libdivide_s32_t libdivide_internal_s32_gen(int32_t d, int branchfree) { + if (d == 0) { + LIBDIVIDE_ERROR("divider must be != 0"); + } + + struct libdivide_s32_t result; + + // If d is a power of 2, or negative a power of 2, we have to use a shift. + // This is especially important because the magic algorithm fails for -1. + // To check if d is a power of 2 or its inverse, it suffices to check + // whether its absolute value has exactly one bit set. This works even for + // INT_MIN, because abs(INT_MIN) == INT_MIN, and INT_MIN has one bit set + // and is a power of 2. + uint32_t ud = (uint32_t)d; + uint32_t absD = (d < 0) ? -ud : ud; + uint32_t floor_log_2_d = 31 - libdivide_count_leading_zeros32(absD); + // check if exactly one bit is set, + // don't care if absD is 0 since that's divide by zero + if ((absD & (absD - 1)) == 0) { + // Branchfree and normal paths are exactly the same + result.magic = 0; + result.more = floor_log_2_d | (d < 0 ? LIBDIVIDE_NEGATIVE_DIVISOR : 0); + } else { + LIBDIVIDE_ASSERT(floor_log_2_d >= 1); + + uint8_t more; + // the dividend here is 2**(floor_log_2_d + 31), so the low 32 bit word + // is 0 and the high word is floor_log_2_d - 1 + uint32_t rem, proposed_m; + proposed_m = libdivide_64_div_32_to_32(1U << (floor_log_2_d - 1), 0, absD, &rem); + const uint32_t e = absD - rem; + + // We are going to start with a power of floor_log_2_d - 1. + // This works if works if e < 2**floor_log_2_d. + if (!branchfree && e < (1U << floor_log_2_d)) { + // This power works + more = floor_log_2_d - 1; + } else { + // We need to go one higher. This should not make proposed_m + // overflow, but it will make it negative when interpreted as an + // int32_t. + proposed_m += proposed_m; + const uint32_t twice_rem = rem + rem; + if (twice_rem >= absD || twice_rem < rem) proposed_m += 1; + more = floor_log_2_d | LIBDIVIDE_ADD_MARKER; + } + + proposed_m += 1; + int32_t magic = (int32_t)proposed_m; + + // Mark if we are negative. Note we only negate the magic number in the + // branchfull case. + if (d < 0) { + more |= LIBDIVIDE_NEGATIVE_DIVISOR; + if (!branchfree) { + magic = -magic; + } + } + + result.more = more; + result.magic = magic; + } + return result; +} + +struct libdivide_s32_t libdivide_s32_gen(int32_t d) { + return libdivide_internal_s32_gen(d, 0); +} + +struct libdivide_s32_branchfree_t libdivide_s32_branchfree_gen(int32_t d) { + struct libdivide_s32_t tmp = libdivide_internal_s32_gen(d, 1); + struct libdivide_s32_branchfree_t result = {tmp.magic, tmp.more}; + return result; +} + +int32_t libdivide_s32_do(int32_t numer, const struct libdivide_s32_t *denom) { + uint8_t more = denom->more; + uint8_t shift = more & LIBDIVIDE_32_SHIFT_MASK; + + if (!denom->magic) { + uint32_t sign = (int8_t)more >> 7; + uint32_t mask = (1U << shift) - 1; + uint32_t uq = numer + ((numer >> 31) & mask); + int32_t q = (int32_t)uq; + q >>= shift; + q = (q ^ sign) - sign; + return q; + } else { + uint32_t uq = (uint32_t)libdivide_mullhi_s32(denom->magic, numer); + if (more & LIBDIVIDE_ADD_MARKER) { + // must be arithmetic shift and then sign extend + int32_t sign = (int8_t)more >> 7; + // q += (more < 0 ? -numer : numer) + // cast required to avoid UB + uq += ((uint32_t)numer ^ sign) - sign; + } + int32_t q = (int32_t)uq; + q >>= shift; + q += (q < 0); + return q; + } +} + +int32_t libdivide_s32_branchfree_do(int32_t numer, const struct libdivide_s32_branchfree_t *denom) { + uint8_t more = denom->more; + uint8_t shift = more & LIBDIVIDE_32_SHIFT_MASK; + // must be arithmetic shift and then sign extend + int32_t sign = (int8_t)more >> 7; + int32_t magic = denom->magic; + int32_t q = libdivide_mullhi_s32(magic, numer); + q += numer; + + // If q is non-negative, we have nothing to do + // If q is negative, we want to add either (2**shift)-1 if d is a power of + // 2, or (2**shift) if it is not a power of 2 + uint32_t is_power_of_2 = (magic == 0); + uint32_t q_sign = (uint32_t)(q >> 31); + q += q_sign & ((1U << shift) - is_power_of_2); + + // Now arithmetic right shift + q >>= shift; + // Negate if needed + q = (q ^ sign) - sign; + + return q; +} + +int32_t libdivide_s32_recover(const struct libdivide_s32_t *denom) { + uint8_t more = denom->more; + uint8_t shift = more & LIBDIVIDE_32_SHIFT_MASK; + if (!denom->magic) { + uint32_t absD = 1U << shift; + if (more & LIBDIVIDE_NEGATIVE_DIVISOR) { + absD = -absD; + } + return (int32_t)absD; + } else { + // Unsigned math is much easier + // We negate the magic number only in the branchfull case, and we don't + // know which case we're in. However we have enough information to + // determine the correct sign of the magic number. The divisor was + // negative if LIBDIVIDE_NEGATIVE_DIVISOR is set. If ADD_MARKER is set, + // the magic number's sign is opposite that of the divisor. + // We want to compute the positive magic number. + int negative_divisor = (more & LIBDIVIDE_NEGATIVE_DIVISOR); + int magic_was_negated = (more & LIBDIVIDE_ADD_MARKER) + ? denom->magic > 0 : denom->magic < 0; + + // Handle the power of 2 case (including branchfree) + if (denom->magic == 0) { + int32_t result = 1U << shift; + return negative_divisor ? -result : result; + } + + uint32_t d = (uint32_t)(magic_was_negated ? -denom->magic : denom->magic); + uint64_t n = 1ULL << (32 + shift); // this shift cannot exceed 30 + uint32_t q = (uint32_t)(n / d); + int32_t result = (int32_t)q; + result += 1; + return negative_divisor ? -result : result; + } +} + +int32_t libdivide_s32_branchfree_recover(const struct libdivide_s32_branchfree_t *denom) { + return libdivide_s32_recover((const struct libdivide_s32_t *)denom); +} + +///////////// SINT64 + +static inline struct libdivide_s64_t libdivide_internal_s64_gen(int64_t d, int branchfree) { + if (d == 0) { + LIBDIVIDE_ERROR("divider must be != 0"); + } + + struct libdivide_s64_t result; + + // If d is a power of 2, or negative a power of 2, we have to use a shift. + // This is especially important because the magic algorithm fails for -1. + // To check if d is a power of 2 or its inverse, it suffices to check + // whether its absolute value has exactly one bit set. This works even for + // INT_MIN, because abs(INT_MIN) == INT_MIN, and INT_MIN has one bit set + // and is a power of 2. + uint64_t ud = (uint64_t)d; + uint64_t absD = (d < 0) ? -ud : ud; + uint32_t floor_log_2_d = 63 - libdivide_count_leading_zeros64(absD); + // check if exactly one bit is set, + // don't care if absD is 0 since that's divide by zero + if ((absD & (absD - 1)) == 0) { + // Branchfree and non-branchfree cases are the same + result.magic = 0; + result.more = floor_log_2_d | (d < 0 ? LIBDIVIDE_NEGATIVE_DIVISOR : 0); + } else { + // the dividend here is 2**(floor_log_2_d + 63), so the low 64 bit word + // is 0 and the high word is floor_log_2_d - 1 + uint8_t more; + uint64_t rem, proposed_m; + proposed_m = libdivide_128_div_64_to_64(1ULL << (floor_log_2_d - 1), 0, absD, &rem); + const uint64_t e = absD - rem; + + // We are going to start with a power of floor_log_2_d - 1. + // This works if works if e < 2**floor_log_2_d. + if (!branchfree && e < (1ULL << floor_log_2_d)) { + // This power works + more = floor_log_2_d - 1; + } else { + // We need to go one higher. This should not make proposed_m + // overflow, but it will make it negative when interpreted as an + // int32_t. + proposed_m += proposed_m; + const uint64_t twice_rem = rem + rem; + if (twice_rem >= absD || twice_rem < rem) proposed_m += 1; + // note that we only set the LIBDIVIDE_NEGATIVE_DIVISOR bit if we + // also set ADD_MARKER this is an annoying optimization that + // enables algorithm #4 to avoid the mask. However we always set it + // in the branchfree case + more = floor_log_2_d | LIBDIVIDE_ADD_MARKER; + } + proposed_m += 1; + int64_t magic = (int64_t)proposed_m; + + // Mark if we are negative + if (d < 0) { + more |= LIBDIVIDE_NEGATIVE_DIVISOR; + if (!branchfree) { + magic = -magic; + } + } + + result.more = more; + result.magic = magic; + } + return result; +} + +struct libdivide_s64_t libdivide_s64_gen(int64_t d) { + return libdivide_internal_s64_gen(d, 0); +} + +struct libdivide_s64_branchfree_t libdivide_s64_branchfree_gen(int64_t d) { + struct libdivide_s64_t tmp = libdivide_internal_s64_gen(d, 1); + struct libdivide_s64_branchfree_t ret = {tmp.magic, tmp.more}; + return ret; +} + +int64_t libdivide_s64_do(int64_t numer, const struct libdivide_s64_t *denom) { + uint8_t more = denom->more; + uint8_t shift = more & LIBDIVIDE_64_SHIFT_MASK; + + if (!denom->magic) { // shift path + uint64_t mask = (1ULL << shift) - 1; + uint64_t uq = numer + ((numer >> 63) & mask); + int64_t q = (int64_t)uq; + q >>= shift; + // must be arithmetic shift and then sign-extend + int64_t sign = (int8_t)more >> 7; + q = (q ^ sign) - sign; + return q; + } else { + uint64_t uq = (uint64_t)libdivide_mullhi_s64(denom->magic, numer); + if (more & LIBDIVIDE_ADD_MARKER) { + // must be arithmetic shift and then sign extend + int64_t sign = (int8_t)more >> 7; + // q += (more < 0 ? -numer : numer) + // cast required to avoid UB + uq += ((uint64_t)numer ^ sign) - sign; + } + int64_t q = (int64_t)uq; + q >>= shift; + q += (q < 0); + return q; + } +} + +int64_t libdivide_s64_branchfree_do(int64_t numer, const struct libdivide_s64_branchfree_t *denom) { + uint8_t more = denom->more; + uint8_t shift = more & LIBDIVIDE_64_SHIFT_MASK; + // must be arithmetic shift and then sign extend + int64_t sign = (int8_t)more >> 7; + int64_t magic = denom->magic; + int64_t q = libdivide_mullhi_s64(magic, numer); + q += numer; + + // If q is non-negative, we have nothing to do. + // If q is negative, we want to add either (2**shift)-1 if d is a power of + // 2, or (2**shift) if it is not a power of 2. + uint64_t is_power_of_2 = (magic == 0); + uint64_t q_sign = (uint64_t)(q >> 63); + q += q_sign & ((1ULL << shift) - is_power_of_2); + + // Arithmetic right shift + q >>= shift; + // Negate if needed + q = (q ^ sign) - sign; + + return q; +} + +int64_t libdivide_s64_recover(const struct libdivide_s64_t *denom) { + uint8_t more = denom->more; + uint8_t shift = more & LIBDIVIDE_64_SHIFT_MASK; + if (denom->magic == 0) { // shift path + uint64_t absD = 1ULL << shift; + if (more & LIBDIVIDE_NEGATIVE_DIVISOR) { + absD = -absD; + } + return (int64_t)absD; + } else { + // Unsigned math is much easier + int negative_divisor = (more & LIBDIVIDE_NEGATIVE_DIVISOR); + int magic_was_negated = (more & LIBDIVIDE_ADD_MARKER) + ? denom->magic > 0 : denom->magic < 0; + + uint64_t d = (uint64_t)(magic_was_negated ? -denom->magic : denom->magic); + uint64_t n_hi = 1ULL << shift, n_lo = 0; + uint64_t rem_ignored; + uint64_t q = libdivide_128_div_64_to_64(n_hi, n_lo, d, &rem_ignored); + int64_t result = (int64_t)(q + 1); + if (negative_divisor) { + result = -result; + } + return result; + } +} + +int64_t libdivide_s64_branchfree_recover(const struct libdivide_s64_branchfree_t *denom) { + return libdivide_s64_recover((const struct libdivide_s64_t *)denom); +} + +#if defined(LIBDIVIDE_AVX512) + +static inline __m512i libdivide_u32_do_vector(__m512i numers, const struct libdivide_u32_t *denom); +static inline __m512i libdivide_s32_do_vector(__m512i numers, const struct libdivide_s32_t *denom); +static inline __m512i libdivide_u64_do_vector(__m512i numers, const struct libdivide_u64_t *denom); +static inline __m512i libdivide_s64_do_vector(__m512i numers, const struct libdivide_s64_t *denom); + +static inline __m512i libdivide_u32_branchfree_do_vector(__m512i numers, const struct libdivide_u32_branchfree_t *denom); +static inline __m512i libdivide_s32_branchfree_do_vector(__m512i numers, const struct libdivide_s32_branchfree_t *denom); +static inline __m512i libdivide_u64_branchfree_do_vector(__m512i numers, const struct libdivide_u64_branchfree_t *denom); +static inline __m512i libdivide_s64_branchfree_do_vector(__m512i numers, const struct libdivide_s64_branchfree_t *denom); + +//////// Internal Utility Functions + +static inline __m512i libdivide_s64_signbits(__m512i v) {; + return _mm512_srai_epi64(v, 63); +} + +static inline __m512i libdivide_s64_shift_right_vector(__m512i v, int amt) { + return _mm512_srai_epi64(v, amt); +} + +// Here, b is assumed to contain one 32-bit value repeated. +static inline __m512i libdivide_mullhi_u32_vector(__m512i a, __m512i b) { + __m512i hi_product_0Z2Z = _mm512_srli_epi64(_mm512_mul_epu32(a, b), 32); + __m512i a1X3X = _mm512_srli_epi64(a, 32); + __m512i mask = _mm512_set_epi32(-1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0); + __m512i hi_product_Z1Z3 = _mm512_and_si512(_mm512_mul_epu32(a1X3X, b), mask); + return _mm512_or_si512(hi_product_0Z2Z, hi_product_Z1Z3); +} + +// b is one 32-bit value repeated. +static inline __m512i libdivide_mullhi_s32_vector(__m512i a, __m512i b) { + __m512i hi_product_0Z2Z = _mm512_srli_epi64(_mm512_mul_epi32(a, b), 32); + __m512i a1X3X = _mm512_srli_epi64(a, 32); + __m512i mask = _mm512_set_epi32(-1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0); + __m512i hi_product_Z1Z3 = _mm512_and_si512(_mm512_mul_epi32(a1X3X, b), mask); + return _mm512_or_si512(hi_product_0Z2Z, hi_product_Z1Z3); +} + +// Here, y is assumed to contain one 64-bit value repeated. +// https://stackoverflow.com/a/28827013 +static inline __m512i libdivide_mullhi_u64_vector(__m512i x, __m512i y) { + __m512i lomask = _mm512_set1_epi64(0xffffffff); + __m512i xh = _mm512_shuffle_epi32(x, (_MM_PERM_ENUM) 0xB1); + __m512i yh = _mm512_shuffle_epi32(y, (_MM_PERM_ENUM) 0xB1); + __m512i w0 = _mm512_mul_epu32(x, y); + __m512i w1 = _mm512_mul_epu32(x, yh); + __m512i w2 = _mm512_mul_epu32(xh, y); + __m512i w3 = _mm512_mul_epu32(xh, yh); + __m512i w0h = _mm512_srli_epi64(w0, 32); + __m512i s1 = _mm512_add_epi64(w1, w0h); + __m512i s1l = _mm512_and_si512(s1, lomask); + __m512i s1h = _mm512_srli_epi64(s1, 32); + __m512i s2 = _mm512_add_epi64(w2, s1l); + __m512i s2h = _mm512_srli_epi64(s2, 32); + __m512i hi = _mm512_add_epi64(w3, s1h); + hi = _mm512_add_epi64(hi, s2h); + + return hi; +} + +// y is one 64-bit value repeated. +static inline __m512i libdivide_mullhi_s64_vector(__m512i x, __m512i y) { + __m512i p = libdivide_mullhi_u64_vector(x, y); + __m512i t1 = _mm512_and_si512(libdivide_s64_signbits(x), y); + __m512i t2 = _mm512_and_si512(libdivide_s64_signbits(y), x); + p = _mm512_sub_epi64(p, t1); + p = _mm512_sub_epi64(p, t2); + return p; +} + +////////// UINT32 + +__m512i libdivide_u32_do_vector(__m512i numers, const struct libdivide_u32_t *denom) { + uint8_t more = denom->more; + if (!denom->magic) { + return _mm512_srli_epi32(numers, more); + } + else { + __m512i q = libdivide_mullhi_u32_vector(numers, _mm512_set1_epi32(denom->magic)); + if (more & LIBDIVIDE_ADD_MARKER) { + // uint32_t t = ((numer - q) >> 1) + q; + // return t >> denom->shift; + uint32_t shift = more & LIBDIVIDE_32_SHIFT_MASK; + __m512i t = _mm512_add_epi32(_mm512_srli_epi32(_mm512_sub_epi32(numers, q), 1), q); + return _mm512_srli_epi32(t, shift); + } + else { + return _mm512_srli_epi32(q, more); + } + } +} + +__m512i libdivide_u32_branchfree_do_vector(__m512i numers, const struct libdivide_u32_branchfree_t *denom) { + __m512i q = libdivide_mullhi_u32_vector(numers, _mm512_set1_epi32(denom->magic)); + __m512i t = _mm512_add_epi32(_mm512_srli_epi32(_mm512_sub_epi32(numers, q), 1), q); + return _mm512_srli_epi32(t, denom->more); +} + +////////// UINT64 + +__m512i libdivide_u64_do_vector(__m512i numers, const struct libdivide_u64_t *denom) { + uint8_t more = denom->more; + if (!denom->magic) { + return _mm512_srli_epi64(numers, more); + } + else { + __m512i q = libdivide_mullhi_u64_vector(numers, _mm512_set1_epi64(denom->magic)); + if (more & LIBDIVIDE_ADD_MARKER) { + // uint32_t t = ((numer - q) >> 1) + q; + // return t >> denom->shift; + uint32_t shift = more & LIBDIVIDE_64_SHIFT_MASK; + __m512i t = _mm512_add_epi64(_mm512_srli_epi64(_mm512_sub_epi64(numers, q), 1), q); + return _mm512_srli_epi64(t, shift); + } + else { + return _mm512_srli_epi64(q, more); + } + } +} + +__m512i libdivide_u64_branchfree_do_vector(__m512i numers, const struct libdivide_u64_branchfree_t *denom) { + __m512i q = libdivide_mullhi_u64_vector(numers, _mm512_set1_epi64(denom->magic)); + __m512i t = _mm512_add_epi64(_mm512_srli_epi64(_mm512_sub_epi64(numers, q), 1), q); + return _mm512_srli_epi64(t, denom->more); +} + +////////// SINT32 + +__m512i libdivide_s32_do_vector(__m512i numers, const struct libdivide_s32_t *denom) { + uint8_t more = denom->more; + if (!denom->magic) { + uint32_t shift = more & LIBDIVIDE_32_SHIFT_MASK; + uint32_t mask = (1U << shift) - 1; + __m512i roundToZeroTweak = _mm512_set1_epi32(mask); + // q = numer + ((numer >> 31) & roundToZeroTweak); + __m512i q = _mm512_add_epi32(numers, _mm512_and_si512(_mm512_srai_epi32(numers, 31), roundToZeroTweak)); + q = _mm512_srai_epi32(q, shift); + __m512i sign = _mm512_set1_epi32((int8_t)more >> 7); + // q = (q ^ sign) - sign; + q = _mm512_sub_epi32(_mm512_xor_si512(q, sign), sign); + return q; + } + else { + __m512i q = libdivide_mullhi_s32_vector(numers, _mm512_set1_epi32(denom->magic)); + if (more & LIBDIVIDE_ADD_MARKER) { + // must be arithmetic shift + __m512i sign = _mm512_set1_epi32((int8_t)more >> 7); + // q += ((numer ^ sign) - sign); + q = _mm512_add_epi32(q, _mm512_sub_epi32(_mm512_xor_si512(numers, sign), sign)); + } + // q >>= shift + q = _mm512_srai_epi32(q, more & LIBDIVIDE_32_SHIFT_MASK); + q = _mm512_add_epi32(q, _mm512_srli_epi32(q, 31)); // q += (q < 0) + return q; + } +} + +__m512i libdivide_s32_branchfree_do_vector(__m512i numers, const struct libdivide_s32_branchfree_t *denom) { + int32_t magic = denom->magic; + uint8_t more = denom->more; + uint8_t shift = more & LIBDIVIDE_32_SHIFT_MASK; + // must be arithmetic shift + __m512i sign = _mm512_set1_epi32((int8_t)more >> 7); + __m512i q = libdivide_mullhi_s32_vector(numers, _mm512_set1_epi32(magic)); + q = _mm512_add_epi32(q, numers); // q += numers + + // If q is non-negative, we have nothing to do + // If q is negative, we want to add either (2**shift)-1 if d is + // a power of 2, or (2**shift) if it is not a power of 2 + uint32_t is_power_of_2 = (magic == 0); + __m512i q_sign = _mm512_srai_epi32(q, 31); // q_sign = q >> 31 + __m512i mask = _mm512_set1_epi32((1U << shift) - is_power_of_2); + q = _mm512_add_epi32(q, _mm512_and_si512(q_sign, mask)); // q = q + (q_sign & mask) + q = _mm512_srai_epi32(q, shift); // q >>= shift + q = _mm512_sub_epi32(_mm512_xor_si512(q, sign), sign); // q = (q ^ sign) - sign + return q; +} + +////////// SINT64 + +__m512i libdivide_s64_do_vector(__m512i numers, const struct libdivide_s64_t *denom) { + uint8_t more = denom->more; + int64_t magic = denom->magic; + if (magic == 0) { // shift path + uint32_t shift = more & LIBDIVIDE_64_SHIFT_MASK; + uint64_t mask = (1ULL << shift) - 1; + __m512i roundToZeroTweak = _mm512_set1_epi64(mask); + // q = numer + ((numer >> 63) & roundToZeroTweak); + __m512i q = _mm512_add_epi64(numers, _mm512_and_si512(libdivide_s64_signbits(numers), roundToZeroTweak)); + q = libdivide_s64_shift_right_vector(q, shift); + __m512i sign = _mm512_set1_epi32((int8_t)more >> 7); + // q = (q ^ sign) - sign; + q = _mm512_sub_epi64(_mm512_xor_si512(q, sign), sign); + return q; + } + else { + __m512i q = libdivide_mullhi_s64_vector(numers, _mm512_set1_epi64(magic)); + if (more & LIBDIVIDE_ADD_MARKER) { + // must be arithmetic shift + __m512i sign = _mm512_set1_epi32((int8_t)more >> 7); + // q += ((numer ^ sign) - sign); + q = _mm512_add_epi64(q, _mm512_sub_epi64(_mm512_xor_si512(numers, sign), sign)); + } + // q >>= denom->mult_path.shift + q = libdivide_s64_shift_right_vector(q, more & LIBDIVIDE_64_SHIFT_MASK); + q = _mm512_add_epi64(q, _mm512_srli_epi64(q, 63)); // q += (q < 0) + return q; + } +} + +__m512i libdivide_s64_branchfree_do_vector(__m512i numers, const struct libdivide_s64_branchfree_t *denom) { + int64_t magic = denom->magic; + uint8_t more = denom->more; + uint8_t shift = more & LIBDIVIDE_64_SHIFT_MASK; + // must be arithmetic shift + __m512i sign = _mm512_set1_epi32((int8_t)more >> 7); + + // libdivide_mullhi_s64(numers, magic); + __m512i q = libdivide_mullhi_s64_vector(numers, _mm512_set1_epi64(magic)); + q = _mm512_add_epi64(q, numers); // q += numers + + // If q is non-negative, we have nothing to do. + // If q is negative, we want to add either (2**shift)-1 if d is + // a power of 2, or (2**shift) if it is not a power of 2. + uint32_t is_power_of_2 = (magic == 0); + __m512i q_sign = libdivide_s64_signbits(q); // q_sign = q >> 63 + __m512i mask = _mm512_set1_epi64((1ULL << shift) - is_power_of_2); + q = _mm512_add_epi64(q, _mm512_and_si512(q_sign, mask)); // q = q + (q_sign & mask) + q = libdivide_s64_shift_right_vector(q, shift); // q >>= shift + q = _mm512_sub_epi64(_mm512_xor_si512(q, sign), sign); // q = (q ^ sign) - sign + return q; +} + +#elif defined(LIBDIVIDE_AVX2) + +static inline __m256i libdivide_u32_do_vector(__m256i numers, const struct libdivide_u32_t *denom); +static inline __m256i libdivide_s32_do_vector(__m256i numers, const struct libdivide_s32_t *denom); +static inline __m256i libdivide_u64_do_vector(__m256i numers, const struct libdivide_u64_t *denom); +static inline __m256i libdivide_s64_do_vector(__m256i numers, const struct libdivide_s64_t *denom); + +static inline __m256i libdivide_u32_branchfree_do_vector(__m256i numers, const struct libdivide_u32_branchfree_t *denom); +static inline __m256i libdivide_s32_branchfree_do_vector(__m256i numers, const struct libdivide_s32_branchfree_t *denom); +static inline __m256i libdivide_u64_branchfree_do_vector(__m256i numers, const struct libdivide_u64_branchfree_t *denom); +static inline __m256i libdivide_s64_branchfree_do_vector(__m256i numers, const struct libdivide_s64_branchfree_t *denom); + +//////// Internal Utility Functions + +// Implementation of _mm256_srai_epi64(v, 63) (from AVX512). +static inline __m256i libdivide_s64_signbits(__m256i v) { + __m256i hiBitsDuped = _mm256_shuffle_epi32(v, _MM_SHUFFLE(3, 3, 1, 1)); + __m256i signBits = _mm256_srai_epi32(hiBitsDuped, 31); + return signBits; +} + +// Implementation of _mm256_srai_epi64 (from AVX512). +static inline __m256i libdivide_s64_shift_right_vector(__m256i v, int amt) { + const int b = 64 - amt; + __m256i m = _mm256_set1_epi64x(1ULL << (b - 1)); + __m256i x = _mm256_srli_epi64(v, amt); + __m256i result = _mm256_sub_epi64(_mm256_xor_si256(x, m), m); + return result; +} + +// Here, b is assumed to contain one 32-bit value repeated. +static inline __m256i libdivide_mullhi_u32_vector(__m256i a, __m256i b) { + __m256i hi_product_0Z2Z = _mm256_srli_epi64(_mm256_mul_epu32(a, b), 32); + __m256i a1X3X = _mm256_srli_epi64(a, 32); + __m256i mask = _mm256_set_epi32(-1, 0, -1, 0, -1, 0, -1, 0); + __m256i hi_product_Z1Z3 = _mm256_and_si256(_mm256_mul_epu32(a1X3X, b), mask); + return _mm256_or_si256(hi_product_0Z2Z, hi_product_Z1Z3); +} + +// b is one 32-bit value repeated. +static inline __m256i libdivide_mullhi_s32_vector(__m256i a, __m256i b) { + __m256i hi_product_0Z2Z = _mm256_srli_epi64(_mm256_mul_epi32(a, b), 32); + __m256i a1X3X = _mm256_srli_epi64(a, 32); + __m256i mask = _mm256_set_epi32(-1, 0, -1, 0, -1, 0, -1, 0); + __m256i hi_product_Z1Z3 = _mm256_and_si256(_mm256_mul_epi32(a1X3X, b), mask); + return _mm256_or_si256(hi_product_0Z2Z, hi_product_Z1Z3); +} + +// Here, y is assumed to contain one 64-bit value repeated. +// https://stackoverflow.com/a/28827013 +static inline __m256i libdivide_mullhi_u64_vector(__m256i x, __m256i y) { + __m256i lomask = _mm256_set1_epi64x(0xffffffff); + __m256i xh = _mm256_shuffle_epi32(x, 0xB1); // x0l, x0h, x1l, x1h + __m256i yh = _mm256_shuffle_epi32(y, 0xB1); // y0l, y0h, y1l, y1h + __m256i w0 = _mm256_mul_epu32(x, y); // x0l*y0l, x1l*y1l + __m256i w1 = _mm256_mul_epu32(x, yh); // x0l*y0h, x1l*y1h + __m256i w2 = _mm256_mul_epu32(xh, y); // x0h*y0l, x1h*y0l + __m256i w3 = _mm256_mul_epu32(xh, yh); // x0h*y0h, x1h*y1h + __m256i w0h = _mm256_srli_epi64(w0, 32); + __m256i s1 = _mm256_add_epi64(w1, w0h); + __m256i s1l = _mm256_and_si256(s1, lomask); + __m256i s1h = _mm256_srli_epi64(s1, 32); + __m256i s2 = _mm256_add_epi64(w2, s1l); + __m256i s2h = _mm256_srli_epi64(s2, 32); + __m256i hi = _mm256_add_epi64(w3, s1h); + hi = _mm256_add_epi64(hi, s2h); + + return hi; +} + +// y is one 64-bit value repeated. +static inline __m256i libdivide_mullhi_s64_vector(__m256i x, __m256i y) { + __m256i p = libdivide_mullhi_u64_vector(x, y); + __m256i t1 = _mm256_and_si256(libdivide_s64_signbits(x), y); + __m256i t2 = _mm256_and_si256(libdivide_s64_signbits(y), x); + p = _mm256_sub_epi64(p, t1); + p = _mm256_sub_epi64(p, t2); + return p; +} + +////////// UINT32 + +__m256i libdivide_u32_do_vector(__m256i numers, const struct libdivide_u32_t *denom) { + uint8_t more = denom->more; + if (!denom->magic) { + return _mm256_srli_epi32(numers, more); + } + else { + __m256i q = libdivide_mullhi_u32_vector(numers, _mm256_set1_epi32(denom->magic)); + if (more & LIBDIVIDE_ADD_MARKER) { + // uint32_t t = ((numer - q) >> 1) + q; + // return t >> denom->shift; + uint32_t shift = more & LIBDIVIDE_32_SHIFT_MASK; + __m256i t = _mm256_add_epi32(_mm256_srli_epi32(_mm256_sub_epi32(numers, q), 1), q); + return _mm256_srli_epi32(t, shift); + } + else { + return _mm256_srli_epi32(q, more); + } + } +} + +__m256i libdivide_u32_branchfree_do_vector(__m256i numers, const struct libdivide_u32_branchfree_t *denom) { + __m256i q = libdivide_mullhi_u32_vector(numers, _mm256_set1_epi32(denom->magic)); + __m256i t = _mm256_add_epi32(_mm256_srli_epi32(_mm256_sub_epi32(numers, q), 1), q); + return _mm256_srli_epi32(t, denom->more); +} + +////////// UINT64 + +__m256i libdivide_u64_do_vector(__m256i numers, const struct libdivide_u64_t *denom) { + uint8_t more = denom->more; + if (!denom->magic) { + return _mm256_srli_epi64(numers, more); + } + else { + __m256i q = libdivide_mullhi_u64_vector(numers, _mm256_set1_epi64x(denom->magic)); + if (more & LIBDIVIDE_ADD_MARKER) { + // uint32_t t = ((numer - q) >> 1) + q; + // return t >> denom->shift; + uint32_t shift = more & LIBDIVIDE_64_SHIFT_MASK; + __m256i t = _mm256_add_epi64(_mm256_srli_epi64(_mm256_sub_epi64(numers, q), 1), q); + return _mm256_srli_epi64(t, shift); + } + else { + return _mm256_srli_epi64(q, more); + } + } +} + +__m256i libdivide_u64_branchfree_do_vector(__m256i numers, const struct libdivide_u64_branchfree_t *denom) { + __m256i q = libdivide_mullhi_u64_vector(numers, _mm256_set1_epi64x(denom->magic)); + __m256i t = _mm256_add_epi64(_mm256_srli_epi64(_mm256_sub_epi64(numers, q), 1), q); + return _mm256_srli_epi64(t, denom->more); +} + +////////// SINT32 + +__m256i libdivide_s32_do_vector(__m256i numers, const struct libdivide_s32_t *denom) { + uint8_t more = denom->more; + if (!denom->magic) { + uint32_t shift = more & LIBDIVIDE_32_SHIFT_MASK; + uint32_t mask = (1U << shift) - 1; + __m256i roundToZeroTweak = _mm256_set1_epi32(mask); + // q = numer + ((numer >> 31) & roundToZeroTweak); + __m256i q = _mm256_add_epi32(numers, _mm256_and_si256(_mm256_srai_epi32(numers, 31), roundToZeroTweak)); + q = _mm256_srai_epi32(q, shift); + __m256i sign = _mm256_set1_epi32((int8_t)more >> 7); + // q = (q ^ sign) - sign; + q = _mm256_sub_epi32(_mm256_xor_si256(q, sign), sign); + return q; + } + else { + __m256i q = libdivide_mullhi_s32_vector(numers, _mm256_set1_epi32(denom->magic)); + if (more & LIBDIVIDE_ADD_MARKER) { + // must be arithmetic shift + __m256i sign = _mm256_set1_epi32((int8_t)more >> 7); + // q += ((numer ^ sign) - sign); + q = _mm256_add_epi32(q, _mm256_sub_epi32(_mm256_xor_si256(numers, sign), sign)); + } + // q >>= shift + q = _mm256_srai_epi32(q, more & LIBDIVIDE_32_SHIFT_MASK); + q = _mm256_add_epi32(q, _mm256_srli_epi32(q, 31)); // q += (q < 0) + return q; + } +} + +__m256i libdivide_s32_branchfree_do_vector(__m256i numers, const struct libdivide_s32_branchfree_t *denom) { + int32_t magic = denom->magic; + uint8_t more = denom->more; + uint8_t shift = more & LIBDIVIDE_32_SHIFT_MASK; + // must be arithmetic shift + __m256i sign = _mm256_set1_epi32((int8_t)more >> 7); + __m256i q = libdivide_mullhi_s32_vector(numers, _mm256_set1_epi32(magic)); + q = _mm256_add_epi32(q, numers); // q += numers + + // If q is non-negative, we have nothing to do + // If q is negative, we want to add either (2**shift)-1 if d is + // a power of 2, or (2**shift) if it is not a power of 2 + uint32_t is_power_of_2 = (magic == 0); + __m256i q_sign = _mm256_srai_epi32(q, 31); // q_sign = q >> 31 + __m256i mask = _mm256_set1_epi32((1U << shift) - is_power_of_2); + q = _mm256_add_epi32(q, _mm256_and_si256(q_sign, mask)); // q = q + (q_sign & mask) + q = _mm256_srai_epi32(q, shift); // q >>= shift + q = _mm256_sub_epi32(_mm256_xor_si256(q, sign), sign); // q = (q ^ sign) - sign + return q; +} + +////////// SINT64 + +__m256i libdivide_s64_do_vector(__m256i numers, const struct libdivide_s64_t *denom) { + uint8_t more = denom->more; + int64_t magic = denom->magic; + if (magic == 0) { // shift path + uint32_t shift = more & LIBDIVIDE_64_SHIFT_MASK; + uint64_t mask = (1ULL << shift) - 1; + __m256i roundToZeroTweak = _mm256_set1_epi64x(mask); + // q = numer + ((numer >> 63) & roundToZeroTweak); + __m256i q = _mm256_add_epi64(numers, _mm256_and_si256(libdivide_s64_signbits(numers), roundToZeroTweak)); + q = libdivide_s64_shift_right_vector(q, shift); + __m256i sign = _mm256_set1_epi32((int8_t)more >> 7); + // q = (q ^ sign) - sign; + q = _mm256_sub_epi64(_mm256_xor_si256(q, sign), sign); + return q; + } + else { + __m256i q = libdivide_mullhi_s64_vector(numers, _mm256_set1_epi64x(magic)); + if (more & LIBDIVIDE_ADD_MARKER) { + // must be arithmetic shift + __m256i sign = _mm256_set1_epi32((int8_t)more >> 7); + // q += ((numer ^ sign) - sign); + q = _mm256_add_epi64(q, _mm256_sub_epi64(_mm256_xor_si256(numers, sign), sign)); + } + // q >>= denom->mult_path.shift + q = libdivide_s64_shift_right_vector(q, more & LIBDIVIDE_64_SHIFT_MASK); + q = _mm256_add_epi64(q, _mm256_srli_epi64(q, 63)); // q += (q < 0) + return q; + } +} + +__m256i libdivide_s64_branchfree_do_vector(__m256i numers, const struct libdivide_s64_branchfree_t *denom) { + int64_t magic = denom->magic; + uint8_t more = denom->more; + uint8_t shift = more & LIBDIVIDE_64_SHIFT_MASK; + // must be arithmetic shift + __m256i sign = _mm256_set1_epi32((int8_t)more >> 7); + + // libdivide_mullhi_s64(numers, magic); + __m256i q = libdivide_mullhi_s64_vector(numers, _mm256_set1_epi64x(magic)); + q = _mm256_add_epi64(q, numers); // q += numers + + // If q is non-negative, we have nothing to do. + // If q is negative, we want to add either (2**shift)-1 if d is + // a power of 2, or (2**shift) if it is not a power of 2. + uint32_t is_power_of_2 = (magic == 0); + __m256i q_sign = libdivide_s64_signbits(q); // q_sign = q >> 63 + __m256i mask = _mm256_set1_epi64x((1ULL << shift) - is_power_of_2); + q = _mm256_add_epi64(q, _mm256_and_si256(q_sign, mask)); // q = q + (q_sign & mask) + q = libdivide_s64_shift_right_vector(q, shift); // q >>= shift + q = _mm256_sub_epi64(_mm256_xor_si256(q, sign), sign); // q = (q ^ sign) - sign + return q; +} + +#elif defined(LIBDIVIDE_SSE2) + +static inline __m128i libdivide_u32_do_vector(__m128i numers, const struct libdivide_u32_t *denom); +static inline __m128i libdivide_s32_do_vector(__m128i numers, const struct libdivide_s32_t *denom); +static inline __m128i libdivide_u64_do_vector(__m128i numers, const struct libdivide_u64_t *denom); +static inline __m128i libdivide_s64_do_vector(__m128i numers, const struct libdivide_s64_t *denom); + +static inline __m128i libdivide_u32_branchfree_do_vector(__m128i numers, const struct libdivide_u32_branchfree_t *denom); +static inline __m128i libdivide_s32_branchfree_do_vector(__m128i numers, const struct libdivide_s32_branchfree_t *denom); +static inline __m128i libdivide_u64_branchfree_do_vector(__m128i numers, const struct libdivide_u64_branchfree_t *denom); +static inline __m128i libdivide_s64_branchfree_do_vector(__m128i numers, const struct libdivide_s64_branchfree_t *denom); + +//////// Internal Utility Functions + +// Implementation of _mm_srai_epi64(v, 63) (from AVX512). +static inline __m128i libdivide_s64_signbits(__m128i v) { + __m128i hiBitsDuped = _mm_shuffle_epi32(v, _MM_SHUFFLE(3, 3, 1, 1)); + __m128i signBits = _mm_srai_epi32(hiBitsDuped, 31); + return signBits; +} + +// Implementation of _mm_srai_epi64 (from AVX512). +static inline __m128i libdivide_s64_shift_right_vector(__m128i v, int amt) { + const int b = 64 - amt; + __m128i m = _mm_set1_epi64x(1ULL << (b - 1)); + __m128i x = _mm_srli_epi64(v, amt); + __m128i result = _mm_sub_epi64(_mm_xor_si128(x, m), m); + return result; +} + +// Here, b is assumed to contain one 32-bit value repeated. +static inline __m128i libdivide_mullhi_u32_vector(__m128i a, __m128i b) { + __m128i hi_product_0Z2Z = _mm_srli_epi64(_mm_mul_epu32(a, b), 32); + __m128i a1X3X = _mm_srli_epi64(a, 32); + __m128i mask = _mm_set_epi32(-1, 0, -1, 0); + __m128i hi_product_Z1Z3 = _mm_and_si128(_mm_mul_epu32(a1X3X, b), mask); + return _mm_or_si128(hi_product_0Z2Z, hi_product_Z1Z3); +} + +// SSE2 does not have a signed multiplication instruction, but we can convert +// unsigned to signed pretty efficiently. Again, b is just a 32 bit value +// repeated four times. +static inline __m128i libdivide_mullhi_s32_vector(__m128i a, __m128i b) { + __m128i p = libdivide_mullhi_u32_vector(a, b); + // t1 = (a >> 31) & y, arithmetic shift + __m128i t1 = _mm_and_si128(_mm_srai_epi32(a, 31), b); + __m128i t2 = _mm_and_si128(_mm_srai_epi32(b, 31), a); + p = _mm_sub_epi32(p, t1); + p = _mm_sub_epi32(p, t2); + return p; +} + +// Here, y is assumed to contain one 64-bit value repeated. +// https://stackoverflow.com/a/28827013 +static inline __m128i libdivide_mullhi_u64_vector(__m128i x, __m128i y) { + __m128i lomask = _mm_set1_epi64x(0xffffffff); + __m128i xh = _mm_shuffle_epi32(x, 0xB1); // x0l, x0h, x1l, x1h + __m128i yh = _mm_shuffle_epi32(y, 0xB1); // y0l, y0h, y1l, y1h + __m128i w0 = _mm_mul_epu32(x, y); // x0l*y0l, x1l*y1l + __m128i w1 = _mm_mul_epu32(x, yh); // x0l*y0h, x1l*y1h + __m128i w2 = _mm_mul_epu32(xh, y); // x0h*y0l, x1h*y0l + __m128i w3 = _mm_mul_epu32(xh, yh); // x0h*y0h, x1h*y1h + __m128i w0h = _mm_srli_epi64(w0, 32); + __m128i s1 = _mm_add_epi64(w1, w0h); + __m128i s1l = _mm_and_si128(s1, lomask); + __m128i s1h = _mm_srli_epi64(s1, 32); + __m128i s2 = _mm_add_epi64(w2, s1l); + __m128i s2h = _mm_srli_epi64(s2, 32); + __m128i hi = _mm_add_epi64(w3, s1h); + hi = _mm_add_epi64(hi, s2h); + + return hi; +} + +// y is one 64-bit value repeated. +static inline __m128i libdivide_mullhi_s64_vector(__m128i x, __m128i y) { + __m128i p = libdivide_mullhi_u64_vector(x, y); + __m128i t1 = _mm_and_si128(libdivide_s64_signbits(x), y); + __m128i t2 = _mm_and_si128(libdivide_s64_signbits(y), x); + p = _mm_sub_epi64(p, t1); + p = _mm_sub_epi64(p, t2); + return p; +} + +////////// UINT32 + +__m128i libdivide_u32_do_vector(__m128i numers, const struct libdivide_u32_t *denom) { + uint8_t more = denom->more; + if (!denom->magic) { + return _mm_srli_epi32(numers, more); + } + else { + __m128i q = libdivide_mullhi_u32_vector(numers, _mm_set1_epi32(denom->magic)); + if (more & LIBDIVIDE_ADD_MARKER) { + // uint32_t t = ((numer - q) >> 1) + q; + // return t >> denom->shift; + uint32_t shift = more & LIBDIVIDE_32_SHIFT_MASK; + __m128i t = _mm_add_epi32(_mm_srli_epi32(_mm_sub_epi32(numers, q), 1), q); + return _mm_srli_epi32(t, shift); + } + else { + return _mm_srli_epi32(q, more); + } + } +} + +__m128i libdivide_u32_branchfree_do_vector(__m128i numers, const struct libdivide_u32_branchfree_t *denom) { + __m128i q = libdivide_mullhi_u32_vector(numers, _mm_set1_epi32(denom->magic)); + __m128i t = _mm_add_epi32(_mm_srli_epi32(_mm_sub_epi32(numers, q), 1), q); + return _mm_srli_epi32(t, denom->more); +} + +////////// UINT64 + +__m128i libdivide_u64_do_vector(__m128i numers, const struct libdivide_u64_t *denom) { + uint8_t more = denom->more; + if (!denom->magic) { + return _mm_srli_epi64(numers, more); + } + else { + __m128i q = libdivide_mullhi_u64_vector(numers, _mm_set1_epi64x(denom->magic)); + if (more & LIBDIVIDE_ADD_MARKER) { + // uint32_t t = ((numer - q) >> 1) + q; + // return t >> denom->shift; + uint32_t shift = more & LIBDIVIDE_64_SHIFT_MASK; + __m128i t = _mm_add_epi64(_mm_srli_epi64(_mm_sub_epi64(numers, q), 1), q); + return _mm_srli_epi64(t, shift); + } + else { + return _mm_srli_epi64(q, more); + } + } +} + +__m128i libdivide_u64_branchfree_do_vector(__m128i numers, const struct libdivide_u64_branchfree_t *denom) { + __m128i q = libdivide_mullhi_u64_vector(numers, _mm_set1_epi64x(denom->magic)); + __m128i t = _mm_add_epi64(_mm_srli_epi64(_mm_sub_epi64(numers, q), 1), q); + return _mm_srli_epi64(t, denom->more); +} + +////////// SINT32 + +__m128i libdivide_s32_do_vector(__m128i numers, const struct libdivide_s32_t *denom) { + uint8_t more = denom->more; + if (!denom->magic) { + uint32_t shift = more & LIBDIVIDE_32_SHIFT_MASK; + uint32_t mask = (1U << shift) - 1; + __m128i roundToZeroTweak = _mm_set1_epi32(mask); + // q = numer + ((numer >> 31) & roundToZeroTweak); + __m128i q = _mm_add_epi32(numers, _mm_and_si128(_mm_srai_epi32(numers, 31), roundToZeroTweak)); + q = _mm_srai_epi32(q, shift); + __m128i sign = _mm_set1_epi32((int8_t)more >> 7); + // q = (q ^ sign) - sign; + q = _mm_sub_epi32(_mm_xor_si128(q, sign), sign); + return q; + } + else { + __m128i q = libdivide_mullhi_s32_vector(numers, _mm_set1_epi32(denom->magic)); + if (more & LIBDIVIDE_ADD_MARKER) { + // must be arithmetic shift + __m128i sign = _mm_set1_epi32((int8_t)more >> 7); + // q += ((numer ^ sign) - sign); + q = _mm_add_epi32(q, _mm_sub_epi32(_mm_xor_si128(numers, sign), sign)); + } + // q >>= shift + q = _mm_srai_epi32(q, more & LIBDIVIDE_32_SHIFT_MASK); + q = _mm_add_epi32(q, _mm_srli_epi32(q, 31)); // q += (q < 0) + return q; + } +} + +__m128i libdivide_s32_branchfree_do_vector(__m128i numers, const struct libdivide_s32_branchfree_t *denom) { + int32_t magic = denom->magic; + uint8_t more = denom->more; + uint8_t shift = more & LIBDIVIDE_32_SHIFT_MASK; + // must be arithmetic shift + __m128i sign = _mm_set1_epi32((int8_t)more >> 7); + __m128i q = libdivide_mullhi_s32_vector(numers, _mm_set1_epi32(magic)); + q = _mm_add_epi32(q, numers); // q += numers + + // If q is non-negative, we have nothing to do + // If q is negative, we want to add either (2**shift)-1 if d is + // a power of 2, or (2**shift) if it is not a power of 2 + uint32_t is_power_of_2 = (magic == 0); + __m128i q_sign = _mm_srai_epi32(q, 31); // q_sign = q >> 31 + __m128i mask = _mm_set1_epi32((1U << shift) - is_power_of_2); + q = _mm_add_epi32(q, _mm_and_si128(q_sign, mask)); // q = q + (q_sign & mask) + q = _mm_srai_epi32(q, shift); // q >>= shift + q = _mm_sub_epi32(_mm_xor_si128(q, sign), sign); // q = (q ^ sign) - sign + return q; +} + +////////// SINT64 + +__m128i libdivide_s64_do_vector(__m128i numers, const struct libdivide_s64_t *denom) { + uint8_t more = denom->more; + int64_t magic = denom->magic; + if (magic == 0) { // shift path + uint32_t shift = more & LIBDIVIDE_64_SHIFT_MASK; + uint64_t mask = (1ULL << shift) - 1; + __m128i roundToZeroTweak = _mm_set1_epi64x(mask); + // q = numer + ((numer >> 63) & roundToZeroTweak); + __m128i q = _mm_add_epi64(numers, _mm_and_si128(libdivide_s64_signbits(numers), roundToZeroTweak)); + q = libdivide_s64_shift_right_vector(q, shift); + __m128i sign = _mm_set1_epi32((int8_t)more >> 7); + // q = (q ^ sign) - sign; + q = _mm_sub_epi64(_mm_xor_si128(q, sign), sign); + return q; + } + else { + __m128i q = libdivide_mullhi_s64_vector(numers, _mm_set1_epi64x(magic)); + if (more & LIBDIVIDE_ADD_MARKER) { + // must be arithmetic shift + __m128i sign = _mm_set1_epi32((int8_t)more >> 7); + // q += ((numer ^ sign) - sign); + q = _mm_add_epi64(q, _mm_sub_epi64(_mm_xor_si128(numers, sign), sign)); + } + // q >>= denom->mult_path.shift + q = libdivide_s64_shift_right_vector(q, more & LIBDIVIDE_64_SHIFT_MASK); + q = _mm_add_epi64(q, _mm_srli_epi64(q, 63)); // q += (q < 0) + return q; + } +} + +__m128i libdivide_s64_branchfree_do_vector(__m128i numers, const struct libdivide_s64_branchfree_t *denom) { + int64_t magic = denom->magic; + uint8_t more = denom->more; + uint8_t shift = more & LIBDIVIDE_64_SHIFT_MASK; + // must be arithmetic shift + __m128i sign = _mm_set1_epi32((int8_t)more >> 7); + + // libdivide_mullhi_s64(numers, magic); + __m128i q = libdivide_mullhi_s64_vector(numers, _mm_set1_epi64x(magic)); + q = _mm_add_epi64(q, numers); // q += numers + + // If q is non-negative, we have nothing to do. + // If q is negative, we want to add either (2**shift)-1 if d is + // a power of 2, or (2**shift) if it is not a power of 2. + uint32_t is_power_of_2 = (magic == 0); + __m128i q_sign = libdivide_s64_signbits(q); // q_sign = q >> 63 + __m128i mask = _mm_set1_epi64x((1ULL << shift) - is_power_of_2); + q = _mm_add_epi64(q, _mm_and_si128(q_sign, mask)); // q = q + (q_sign & mask) + q = libdivide_s64_shift_right_vector(q, shift); // q >>= shift + q = _mm_sub_epi64(_mm_xor_si128(q, sign), sign); // q = (q ^ sign) - sign + return q; +} + +#endif + +/////////// C++ stuff + +#ifdef __cplusplus + +// The C++ divider class is templated on both an integer type +// (like uint64_t) and an algorithm type. +// * BRANCHFULL is the default algorithm type. +// * BRANCHFREE is the branchfree algorithm type. +enum { + BRANCHFULL, + BRANCHFREE +}; + +#if defined(LIBDIVIDE_AVX512) + #define LIBDIVIDE_VECTOR_TYPE __m512i +#elif defined(LIBDIVIDE_AVX2) + #define LIBDIVIDE_VECTOR_TYPE __m256i +#elif defined(LIBDIVIDE_SSE2) + #define LIBDIVIDE_VECTOR_TYPE __m128i +#endif + +#if !defined(LIBDIVIDE_VECTOR_TYPE) + #define LIBDIVIDE_DIVIDE_VECTOR(ALGO) +#else + #define LIBDIVIDE_DIVIDE_VECTOR(ALGO) \ + LIBDIVIDE_VECTOR_TYPE divide(LIBDIVIDE_VECTOR_TYPE n) const { \ + return libdivide_##ALGO##_do_vector(n, &denom); \ + } +#endif + +// The DISPATCHER_GEN() macro generates C++ methods (for the given integer +// and algorithm types) that redirect to libdivide's C API. +#define DISPATCHER_GEN(T, ALGO) \ + libdivide_##ALGO##_t denom; \ + dispatcher() { } \ + dispatcher(T d) \ + : denom(libdivide_##ALGO##_gen(d)) \ + { } \ + T divide(T n) const { \ + return libdivide_##ALGO##_do(n, &denom); \ + } \ + LIBDIVIDE_DIVIDE_VECTOR(ALGO) \ + T recover() const { \ + return libdivide_##ALGO##_recover(&denom); \ + } + +// The dispatcher selects a specific division algorithm for a given +// type and ALGO using partial template specialization. +template struct dispatcher { }; + +template<> struct dispatcher { DISPATCHER_GEN(int32_t, s32) }; +template<> struct dispatcher { DISPATCHER_GEN(int32_t, s32_branchfree) }; +template<> struct dispatcher { DISPATCHER_GEN(uint32_t, u32) }; +template<> struct dispatcher { DISPATCHER_GEN(uint32_t, u32_branchfree) }; +template<> struct dispatcher { DISPATCHER_GEN(int64_t, s64) }; +template<> struct dispatcher { DISPATCHER_GEN(int64_t, s64_branchfree) }; +template<> struct dispatcher { DISPATCHER_GEN(uint64_t, u64) }; +template<> struct dispatcher { DISPATCHER_GEN(uint64_t, u64_branchfree) }; + +// This is the main divider class for use by the user (C++ API). +// The actual division algorithm is selected using the dispatcher struct +// based on the integer and algorithm template parameters. +template +class divider { +public: + // We leave the default constructor empty so that creating + // an array of dividers and then initializing them + // later doesn't slow us down. + divider() { } + + // Constructor that takes the divisor as a parameter + divider(T d) : div(d) { } + + // Divides n by the divisor + T divide(T n) const { + return div.divide(n); + } + + // Recovers the divisor, returns the value that was + // used to initialize this divider object. + T recover() const { + return div.recover(); + } + + bool operator==(const divider& other) const { + return div.denom.magic == other.denom.magic && + div.denom.more == other.denom.more; + } + + bool operator!=(const divider& other) const { + return !(*this == other); + } + +#if defined(LIBDIVIDE_VECTOR_TYPE) + // Treats the vector as packed integer values with the same type as + // the divider (e.g. s32, u32, s64, u64) and divides each of + // them by the divider, returning the packed quotients. + LIBDIVIDE_VECTOR_TYPE divide(LIBDIVIDE_VECTOR_TYPE n) const { + return div.divide(n); + } +#endif + +private: + // Storage for the actual divisor + dispatcher::value, + std::is_signed::value, sizeof(T), ALGO> div; +}; + +// Overload of operator / for scalar division +template +T operator/(T n, const divider& div) { + return div.divide(n); +} + +// Overload of operator /= for scalar division +template +T& operator/=(T& n, const divider& div) { + n = div.divide(n); + return n; +} + +#if defined(LIBDIVIDE_VECTOR_TYPE) + // Overload of operator / for vector division + template + LIBDIVIDE_VECTOR_TYPE operator/(LIBDIVIDE_VECTOR_TYPE n, const divider& div) { + return div.divide(n); + } + // Overload of operator /= for vector division + template + LIBDIVIDE_VECTOR_TYPE& operator/=(LIBDIVIDE_VECTOR_TYPE& n, const divider& div) { + n = div.divide(n); + return n; + } +#endif + +// libdivdie::branchfree_divider +template +using branchfree_divider = divider; + +} // namespace libdivide + +#endif // __cplusplus + +#endif // LIBDIVIDE_H diff --git a/EXE version/main/numpy/core/include/numpy/multiarray_api.txt b/EXE version/main/numpy/core/include/numpy/multiarray_api.txt new file mode 100644 index 00000000..5e4374c2 --- /dev/null +++ b/EXE version/main/numpy/core/include/numpy/multiarray_api.txt @@ -0,0 +1,2483 @@ + +=========== +NumPy C-API +=========== +:: + + unsigned int + PyArray_GetNDArrayCVersion(void ) + + +Included at the very first so not auto-grabbed and thus not labeled. + +:: + + int + PyArray_SetNumericOps(PyObject *dict) + +Set internal structure with number functions that all arrays will use + +:: + + PyObject * + PyArray_GetNumericOps(void ) + +Get dictionary showing number functions that all arrays will use + +:: + + int + PyArray_INCREF(PyArrayObject *mp) + +For object arrays, increment all internal references. + +:: + + int + PyArray_XDECREF(PyArrayObject *mp) + +Decrement all internal references for object arrays. +(or arrays with object fields) + +:: + + void + PyArray_SetStringFunction(PyObject *op, int repr) + +Set the array print function to be a Python function. + +:: + + PyArray_Descr * + PyArray_DescrFromType(int type) + +Get the PyArray_Descr structure for a type. + +:: + + PyObject * + PyArray_TypeObjectFromType(int type) + +Get a typeobject from a type-number -- can return NULL. + +New reference + +:: + + char * + PyArray_Zero(PyArrayObject *arr) + +Get pointer to zero of correct type for array. + +:: + + char * + PyArray_One(PyArrayObject *arr) + +Get pointer to one of correct type for array + +:: + + PyObject * + PyArray_CastToType(PyArrayObject *arr, PyArray_Descr *dtype, int + is_f_order) + +For backward compatibility + +Cast an array using typecode structure. +steals reference to dtype --- cannot be NULL + +This function always makes a copy of arr, even if the dtype +doesn't change. + +:: + + int + PyArray_CastTo(PyArrayObject *out, PyArrayObject *mp) + +Cast to an already created array. + +:: + + int + PyArray_CastAnyTo(PyArrayObject *out, PyArrayObject *mp) + +Cast to an already created array. Arrays don't have to be "broadcastable" +Only requirement is they have the same number of elements. + +:: + + int + PyArray_CanCastSafely(int fromtype, int totype) + +Check the type coercion rules. + +:: + + npy_bool + PyArray_CanCastTo(PyArray_Descr *from, PyArray_Descr *to) + +leaves reference count alone --- cannot be NULL + +PyArray_CanCastTypeTo is equivalent to this, but adds a 'casting' +parameter. + +:: + + int + PyArray_ObjectType(PyObject *op, int minimum_type) + +Return the typecode of the array a Python object would be converted to + +Returns the type number the result should have, or NPY_NOTYPE on error. + +:: + + PyArray_Descr * + PyArray_DescrFromObject(PyObject *op, PyArray_Descr *mintype) + +new reference -- accepts NULL for mintype + +:: + + PyArrayObject ** + PyArray_ConvertToCommonType(PyObject *op, int *retn) + + +This function is only used in one place within NumPy and should +generally be avoided. It is provided mainly for backward compatibility. + +The user of the function has to free the returned array. + +:: + + PyArray_Descr * + PyArray_DescrFromScalar(PyObject *sc) + +Return descr object from array scalar. + +New reference + +:: + + PyArray_Descr * + PyArray_DescrFromTypeObject(PyObject *type) + + +:: + + npy_intp + PyArray_Size(PyObject *op) + +Compute the size of an array (in number of items) + +:: + + PyObject * + PyArray_Scalar(void *data, PyArray_Descr *descr, PyObject *base) + +Get scalar-equivalent to a region of memory described by a descriptor. + +:: + + PyObject * + PyArray_FromScalar(PyObject *scalar, PyArray_Descr *outcode) + +Get 0-dim array from scalar + +0-dim array from array-scalar object +always contains a copy of the data +unless outcode is NULL, it is of void type and the referrer does +not own it either. + +steals reference to outcode + +:: + + void + PyArray_ScalarAsCtype(PyObject *scalar, void *ctypeptr) + +Convert to c-type + +no error checking is performed -- ctypeptr must be same type as scalar +in case of flexible type, the data is not copied +into ctypeptr which is expected to be a pointer to pointer + +:: + + int + PyArray_CastScalarToCtype(PyObject *scalar, void + *ctypeptr, PyArray_Descr *outcode) + +Cast Scalar to c-type + +The output buffer must be large-enough to receive the value +Even for flexible types which is different from ScalarAsCtype +where only a reference for flexible types is returned + +This may not work right on narrow builds for NumPy unicode scalars. + +:: + + int + PyArray_CastScalarDirect(PyObject *scalar, PyArray_Descr + *indescr, void *ctypeptr, int outtype) + +Cast Scalar to c-type + +:: + + PyObject * + PyArray_ScalarFromObject(PyObject *object) + +Get an Array Scalar From a Python Object + +Returns NULL if unsuccessful but error is only set if another error occurred. +Currently only Numeric-like object supported. + +:: + + PyArray_VectorUnaryFunc * + PyArray_GetCastFunc(PyArray_Descr *descr, int type_num) + +Get a cast function to cast from the input descriptor to the +output type_number (must be a registered data-type). +Returns NULL if un-successful. + +:: + + PyObject * + PyArray_FromDims(int NPY_UNUSED(nd) , int *NPY_UNUSED(d) , int + NPY_UNUSED(type) ) + +Deprecated, use PyArray_SimpleNew instead. + +:: + + PyObject * + PyArray_FromDimsAndDataAndDescr(int NPY_UNUSED(nd) , int + *NPY_UNUSED(d) , PyArray_Descr + *descr, char *NPY_UNUSED(data) ) + +Deprecated, use PyArray_NewFromDescr instead. + +:: + + PyObject * + PyArray_FromAny(PyObject *op, PyArray_Descr *newtype, int + min_depth, int max_depth, int flags, PyObject + *context) + +Does not check for NPY_ARRAY_ENSURECOPY and NPY_ARRAY_NOTSWAPPED in flags +Steals a reference to newtype --- which can be NULL + +:: + + PyObject * + PyArray_EnsureArray(PyObject *op) + +This is a quick wrapper around +PyArray_FromAny(op, NULL, 0, 0, NPY_ARRAY_ENSUREARRAY, NULL) +that special cases Arrays and PyArray_Scalars up front +It *steals a reference* to the object +It also guarantees that the result is PyArray_Type +Because it decrefs op if any conversion needs to take place +so it can be used like PyArray_EnsureArray(some_function(...)) + +:: + + PyObject * + PyArray_EnsureAnyArray(PyObject *op) + + +:: + + PyObject * + PyArray_FromFile(FILE *fp, PyArray_Descr *dtype, npy_intp num, char + *sep) + + +Given a ``FILE *`` pointer ``fp``, and a ``PyArray_Descr``, return an +array corresponding to the data encoded in that file. + +The reference to `dtype` is stolen (it is possible that the passed in +dtype is not held on to). + +The number of elements to read is given as ``num``; if it is < 0, then +then as many as possible are read. + +If ``sep`` is NULL or empty, then binary data is assumed, else +text data, with ``sep`` as the separator between elements. Whitespace in +the separator matches any length of whitespace in the text, and a match +for whitespace around the separator is added. + +For memory-mapped files, use the buffer interface. No more data than +necessary is read by this routine. + +:: + + PyObject * + PyArray_FromString(char *data, npy_intp slen, PyArray_Descr + *dtype, npy_intp num, char *sep) + + +Given a pointer to a string ``data``, a string length ``slen``, and +a ``PyArray_Descr``, return an array corresponding to the data +encoded in that string. + +If the dtype is NULL, the default array type is used (double). +If non-null, the reference is stolen. + +If ``slen`` is < 0, then the end of string is used for text data. +It is an error for ``slen`` to be < 0 for binary data (since embedded NULLs +would be the norm). + +The number of elements to read is given as ``num``; if it is < 0, then +then as many as possible are read. + +If ``sep`` is NULL or empty, then binary data is assumed, else +text data, with ``sep`` as the separator between elements. Whitespace in +the separator matches any length of whitespace in the text, and a match +for whitespace around the separator is added. + +:: + + PyObject * + PyArray_FromBuffer(PyObject *buf, PyArray_Descr *type, npy_intp + count, npy_intp offset) + + +:: + + PyObject * + PyArray_FromIter(PyObject *obj, PyArray_Descr *dtype, npy_intp count) + + +steals a reference to dtype (which cannot be NULL) + +:: + + PyObject * + PyArray_Return(PyArrayObject *mp) + + +Return either an array or the appropriate Python object if the array +is 0d and matches a Python type. +steals reference to mp + +:: + + PyObject * + PyArray_GetField(PyArrayObject *self, PyArray_Descr *typed, int + offset) + +Get a subset of bytes from each element of the array +steals reference to typed, must not be NULL + +:: + + int + PyArray_SetField(PyArrayObject *self, PyArray_Descr *dtype, int + offset, PyObject *val) + +Set a subset of bytes from each element of the array +steals reference to dtype, must not be NULL + +:: + + PyObject * + PyArray_Byteswap(PyArrayObject *self, npy_bool inplace) + + +:: + + PyObject * + PyArray_Resize(PyArrayObject *self, PyArray_Dims *newshape, int + refcheck, NPY_ORDER NPY_UNUSED(order) ) + +Resize (reallocate data). Only works if nothing else is referencing this +array and it is contiguous. If refcheck is 0, then the reference count is +not checked and assumed to be 1. You still must own this data and have no +weak-references and no base object. + +:: + + int + PyArray_MoveInto(PyArrayObject *dst, PyArrayObject *src) + +Move the memory of one array into another, allowing for overlapping data. + +Returns 0 on success, negative on failure. + +:: + + int + PyArray_CopyInto(PyArrayObject *dst, PyArrayObject *src) + +Copy an Array into another array. +Broadcast to the destination shape if necessary. + +Returns 0 on success, -1 on failure. + +:: + + int + PyArray_CopyAnyInto(PyArrayObject *dst, PyArrayObject *src) + +Copy an Array into another array -- memory must not overlap +Does not require src and dest to have "broadcastable" shapes +(only the same number of elements). + +TODO: For NumPy 2.0, this could accept an order parameter which +only allows NPY_CORDER and NPY_FORDER. Could also rename +this to CopyAsFlat to make the name more intuitive. + +Returns 0 on success, -1 on error. + +:: + + int + PyArray_CopyObject(PyArrayObject *dest, PyObject *src_object) + + +:: + + PyObject * + PyArray_NewCopy(PyArrayObject *obj, NPY_ORDER order) + +Copy an array. + +:: + + PyObject * + PyArray_ToList(PyArrayObject *self) + +To List + +:: + + PyObject * + PyArray_ToString(PyArrayObject *self, NPY_ORDER order) + + +:: + + int + PyArray_ToFile(PyArrayObject *self, FILE *fp, char *sep, char *format) + +To File + +:: + + int + PyArray_Dump(PyObject *self, PyObject *file, int protocol) + + +:: + + PyObject * + PyArray_Dumps(PyObject *self, int protocol) + + +:: + + int + PyArray_ValidType(int type) + +Is the typenum valid? + +:: + + void + PyArray_UpdateFlags(PyArrayObject *ret, int flagmask) + +Update Several Flags at once. + +:: + + PyObject * + PyArray_New(PyTypeObject *subtype, int nd, npy_intp const *dims, int + type_num, npy_intp const *strides, void *data, int + itemsize, int flags, PyObject *obj) + +Generic new array creation routine. + +:: + + PyObject * + PyArray_NewFromDescr(PyTypeObject *subtype, PyArray_Descr *descr, int + nd, npy_intp const *dims, npy_intp const + *strides, void *data, int flags, PyObject *obj) + +Generic new array creation routine. + +steals a reference to descr. On failure or when dtype->subarray is +true, dtype will be decrefed. + +:: + + PyArray_Descr * + PyArray_DescrNew(PyArray_Descr *base) + +base cannot be NULL + +:: + + PyArray_Descr * + PyArray_DescrNewFromType(int type_num) + + +:: + + double + PyArray_GetPriority(PyObject *obj, double default_) + +Get Priority from object + +:: + + PyObject * + PyArray_IterNew(PyObject *obj) + +Get Iterator. + +:: + + PyObject* + PyArray_MultiIterNew(int n, ... ) + +Get MultiIterator, + +:: + + int + PyArray_PyIntAsInt(PyObject *o) + + +:: + + npy_intp + PyArray_PyIntAsIntp(PyObject *o) + + +:: + + int + PyArray_Broadcast(PyArrayMultiIterObject *mit) + + +:: + + void + PyArray_FillObjectArray(PyArrayObject *arr, PyObject *obj) + +Assumes contiguous + +:: + + int + PyArray_FillWithScalar(PyArrayObject *arr, PyObject *obj) + + +:: + + npy_bool + PyArray_CheckStrides(int elsize, int nd, npy_intp numbytes, npy_intp + offset, npy_intp const *dims, npy_intp const + *newstrides) + + +:: + + PyArray_Descr * + PyArray_DescrNewByteorder(PyArray_Descr *self, char newendian) + + +returns a copy of the PyArray_Descr structure with the byteorder +altered: +no arguments: The byteorder is swapped (in all subfields as well) +single argument: The byteorder is forced to the given state +(in all subfields as well) + +Valid states: ('big', '>') or ('little' or '<') +('native', or '=') + +If a descr structure with | is encountered it's own +byte-order is not changed but any fields are: + + +Deep bytorder change of a data-type descriptor +Leaves reference count of self unchanged --- does not DECREF self *** + +:: + + PyObject * + PyArray_IterAllButAxis(PyObject *obj, int *inaxis) + +Get Iterator that iterates over all but one axis (don't use this with +PyArray_ITER_GOTO1D). The axis will be over-written if negative +with the axis having the smallest stride. + +:: + + PyObject * + PyArray_CheckFromAny(PyObject *op, PyArray_Descr *descr, int + min_depth, int max_depth, int requires, PyObject + *context) + +steals a reference to descr -- accepts NULL + +:: + + PyObject * + PyArray_FromArray(PyArrayObject *arr, PyArray_Descr *newtype, int + flags) + +steals reference to newtype --- acc. NULL + +:: + + PyObject * + PyArray_FromInterface(PyObject *origin) + + +:: + + PyObject * + PyArray_FromStructInterface(PyObject *input) + + +:: + + PyObject * + PyArray_FromArrayAttr(PyObject *op, PyArray_Descr *typecode, PyObject + *context) + + +:: + + NPY_SCALARKIND + PyArray_ScalarKind(int typenum, PyArrayObject **arr) + +ScalarKind + +Returns the scalar kind of a type number, with an +optional tweak based on the scalar value itself. +If no scalar is provided, it returns INTPOS_SCALAR +for both signed and unsigned integers, otherwise +it checks the sign of any signed integer to choose +INTNEG_SCALAR when appropriate. + +:: + + int + PyArray_CanCoerceScalar(int thistype, int neededtype, NPY_SCALARKIND + scalar) + + +Determines whether the data type 'thistype', with +scalar kind 'scalar', can be coerced into 'neededtype'. + +:: + + PyObject * + PyArray_NewFlagsObject(PyObject *obj) + + +Get New ArrayFlagsObject + +:: + + npy_bool + PyArray_CanCastScalar(PyTypeObject *from, PyTypeObject *to) + +See if array scalars can be cast. + +TODO: For NumPy 2.0, add a NPY_CASTING parameter. + +:: + + int + PyArray_CompareUCS4(npy_ucs4 const *s1, npy_ucs4 const *s2, size_t + len) + + +:: + + int + PyArray_RemoveSmallest(PyArrayMultiIterObject *multi) + +Adjusts previously broadcasted iterators so that the axis with +the smallest sum of iterator strides is not iterated over. +Returns dimension which is smallest in the range [0,multi->nd). +A -1 is returned if multi->nd == 0. + +don't use with PyArray_ITER_GOTO1D because factors are not adjusted + +:: + + int + PyArray_ElementStrides(PyObject *obj) + + +:: + + void + PyArray_Item_INCREF(char *data, PyArray_Descr *descr) + +XINCREF all objects in a single array item. This is complicated for +structured datatypes where the position of objects needs to be extracted. +The function is execute recursively for each nested field or subarrays dtype +such as as `np.dtype([("field1", "O"), ("field2", "f,O", (3,2))])` + +:: + + void + PyArray_Item_XDECREF(char *data, PyArray_Descr *descr) + + +XDECREF all objects in a single array item. This is complicated for +structured datatypes where the position of objects needs to be extracted. +The function is execute recursively for each nested field or subarrays dtype +such as as `np.dtype([("field1", "O"), ("field2", "f,O", (3,2))])` + +:: + + PyObject * + PyArray_FieldNames(PyObject *fields) + +Return the tuple of ordered field names from a dictionary. + +:: + + PyObject * + PyArray_Transpose(PyArrayObject *ap, PyArray_Dims *permute) + +Return Transpose. + +:: + + PyObject * + PyArray_TakeFrom(PyArrayObject *self0, PyObject *indices0, int + axis, PyArrayObject *out, NPY_CLIPMODE clipmode) + +Take + +:: + + PyObject * + PyArray_PutTo(PyArrayObject *self, PyObject*values0, PyObject + *indices0, NPY_CLIPMODE clipmode) + +Put values into an array + +:: + + PyObject * + PyArray_PutMask(PyArrayObject *self, PyObject*values0, PyObject*mask0) + +Put values into an array according to a mask. + +:: + + PyObject * + PyArray_Repeat(PyArrayObject *aop, PyObject *op, int axis) + +Repeat the array. + +:: + + PyObject * + PyArray_Choose(PyArrayObject *ip, PyObject *op, PyArrayObject + *out, NPY_CLIPMODE clipmode) + + +:: + + int + PyArray_Sort(PyArrayObject *op, int axis, NPY_SORTKIND which) + +Sort an array in-place + +:: + + PyObject * + PyArray_ArgSort(PyArrayObject *op, int axis, NPY_SORTKIND which) + +ArgSort an array + +:: + + PyObject * + PyArray_SearchSorted(PyArrayObject *op1, PyObject *op2, NPY_SEARCHSIDE + side, PyObject *perm) + + +Search the sorted array op1 for the location of the items in op2. The +result is an array of indexes, one for each element in op2, such that if +the item were to be inserted in op1 just before that index the array +would still be in sorted order. + +Parameters +---------- +op1 : PyArrayObject * +Array to be searched, must be 1-D. +op2 : PyObject * +Array of items whose insertion indexes in op1 are wanted +side : {NPY_SEARCHLEFT, NPY_SEARCHRIGHT} +If NPY_SEARCHLEFT, return first valid insertion indexes +If NPY_SEARCHRIGHT, return last valid insertion indexes +perm : PyObject * +Permutation array that sorts op1 (optional) + +Returns +------- +ret : PyObject * +New reference to npy_intp array containing indexes where items in op2 +could be validly inserted into op1. NULL on error. + +Notes +----- +Binary search is used to find the indexes. + +:: + + PyObject * + PyArray_ArgMax(PyArrayObject *op, int axis, PyArrayObject *out) + +ArgMax + +:: + + PyObject * + PyArray_ArgMin(PyArrayObject *op, int axis, PyArrayObject *out) + +ArgMin + +:: + + PyObject * + PyArray_Reshape(PyArrayObject *self, PyObject *shape) + +Reshape + +:: + + PyObject * + PyArray_Newshape(PyArrayObject *self, PyArray_Dims *newdims, NPY_ORDER + order) + +New shape for an array + +:: + + PyObject * + PyArray_Squeeze(PyArrayObject *self) + + +return a new view of the array object with all of its unit-length +dimensions squeezed out if needed, otherwise +return the same array. + +:: + + PyObject * + PyArray_View(PyArrayObject *self, PyArray_Descr *type, PyTypeObject + *pytype) + +View +steals a reference to type -- accepts NULL + +:: + + PyObject * + PyArray_SwapAxes(PyArrayObject *ap, int a1, int a2) + +SwapAxes + +:: + + PyObject * + PyArray_Max(PyArrayObject *ap, int axis, PyArrayObject *out) + +Max + +:: + + PyObject * + PyArray_Min(PyArrayObject *ap, int axis, PyArrayObject *out) + +Min + +:: + + PyObject * + PyArray_Ptp(PyArrayObject *ap, int axis, PyArrayObject *out) + +Ptp + +:: + + PyObject * + PyArray_Mean(PyArrayObject *self, int axis, int rtype, PyArrayObject + *out) + +Mean + +:: + + PyObject * + PyArray_Trace(PyArrayObject *self, int offset, int axis1, int + axis2, int rtype, PyArrayObject *out) + +Trace + +:: + + PyObject * + PyArray_Diagonal(PyArrayObject *self, int offset, int axis1, int + axis2) + +Diagonal + +In NumPy versions prior to 1.7, this function always returned a copy of +the diagonal array. In 1.7, the code has been updated to compute a view +onto 'self', but it still copies this array before returning, as well as +setting the internal WARN_ON_WRITE flag. In a future version, it will +simply return a view onto self. + +:: + + PyObject * + PyArray_Clip(PyArrayObject *self, PyObject *min, PyObject + *max, PyArrayObject *out) + +Clip + +:: + + PyObject * + PyArray_Conjugate(PyArrayObject *self, PyArrayObject *out) + +Conjugate + +:: + + PyObject * + PyArray_Nonzero(PyArrayObject *self) + +Nonzero + +TODO: In NumPy 2.0, should make the iteration order a parameter. + +:: + + PyObject * + PyArray_Std(PyArrayObject *self, int axis, int rtype, PyArrayObject + *out, int variance) + +Set variance to 1 to by-pass square-root calculation and return variance +Std + +:: + + PyObject * + PyArray_Sum(PyArrayObject *self, int axis, int rtype, PyArrayObject + *out) + +Sum + +:: + + PyObject * + PyArray_CumSum(PyArrayObject *self, int axis, int rtype, PyArrayObject + *out) + +CumSum + +:: + + PyObject * + PyArray_Prod(PyArrayObject *self, int axis, int rtype, PyArrayObject + *out) + +Prod + +:: + + PyObject * + PyArray_CumProd(PyArrayObject *self, int axis, int + rtype, PyArrayObject *out) + +CumProd + +:: + + PyObject * + PyArray_All(PyArrayObject *self, int axis, PyArrayObject *out) + +All + +:: + + PyObject * + PyArray_Any(PyArrayObject *self, int axis, PyArrayObject *out) + +Any + +:: + + PyObject * + PyArray_Compress(PyArrayObject *self, PyObject *condition, int + axis, PyArrayObject *out) + +Compress + +:: + + PyObject * + PyArray_Flatten(PyArrayObject *a, NPY_ORDER order) + +Flatten + +:: + + PyObject * + PyArray_Ravel(PyArrayObject *arr, NPY_ORDER order) + +Ravel +Returns a contiguous array + +:: + + npy_intp + PyArray_MultiplyList(npy_intp const *l1, int n) + +Multiply a List + +:: + + int + PyArray_MultiplyIntList(int const *l1, int n) + +Multiply a List of ints + +:: + + void * + PyArray_GetPtr(PyArrayObject *obj, npy_intp const*ind) + +Produce a pointer into array + +:: + + int + PyArray_CompareLists(npy_intp const *l1, npy_intp const *l2, int n) + +Compare Lists + +:: + + int + PyArray_AsCArray(PyObject **op, void *ptr, npy_intp *dims, int + nd, PyArray_Descr*typedescr) + +Simulate a C-array +steals a reference to typedescr -- can be NULL + +:: + + int + PyArray_As1D(PyObject **NPY_UNUSED(op) , char **NPY_UNUSED(ptr) , int + *NPY_UNUSED(d1) , int NPY_UNUSED(typecode) ) + +Convert to a 1D C-array + +:: + + int + PyArray_As2D(PyObject **NPY_UNUSED(op) , char ***NPY_UNUSED(ptr) , int + *NPY_UNUSED(d1) , int *NPY_UNUSED(d2) , int + NPY_UNUSED(typecode) ) + +Convert to a 2D C-array + +:: + + int + PyArray_Free(PyObject *op, void *ptr) + +Free pointers created if As2D is called + +:: + + int + PyArray_Converter(PyObject *object, PyObject **address) + + +Useful to pass as converter function for O& processing in PyArgs_ParseTuple. + +This conversion function can be used with the "O&" argument for +PyArg_ParseTuple. It will immediately return an object of array type +or will convert to a NPY_ARRAY_CARRAY any other object. + +If you use PyArray_Converter, you must DECREF the array when finished +as you get a new reference to it. + +:: + + int + PyArray_IntpFromSequence(PyObject *seq, npy_intp *vals, int maxvals) + +PyArray_IntpFromSequence +Returns the number of integers converted or -1 if an error occurred. +vals must be large enough to hold maxvals + +:: + + PyObject * + PyArray_Concatenate(PyObject *op, int axis) + +Concatenate + +Concatenate an arbitrary Python sequence into an array. +op is a python object supporting the sequence interface. +Its elements will be concatenated together to form a single +multidimensional array. If axis is NPY_MAXDIMS or bigger, then +each sequence object will be flattened before concatenation + +:: + + PyObject * + PyArray_InnerProduct(PyObject *op1, PyObject *op2) + +Numeric.innerproduct(a,v) + +:: + + PyObject * + PyArray_MatrixProduct(PyObject *op1, PyObject *op2) + +Numeric.matrixproduct(a,v) +just like inner product but does the swapaxes stuff on the fly + +:: + + PyObject * + PyArray_CopyAndTranspose(PyObject *op) + +Copy and Transpose + +Could deprecate this function, as there isn't a speed benefit over +calling Transpose and then Copy. + +:: + + PyObject * + PyArray_Correlate(PyObject *op1, PyObject *op2, int mode) + +Numeric.correlate(a1,a2,mode) + +:: + + int + PyArray_TypestrConvert(int itemsize, int gentype) + +Typestr converter + +:: + + int + PyArray_DescrConverter(PyObject *obj, PyArray_Descr **at) + +Get typenum from an object -- None goes to NPY_DEFAULT_TYPE +This function takes a Python object representing a type and converts it +to a the correct PyArray_Descr * structure to describe the type. + +Many objects can be used to represent a data-type which in NumPy is +quite a flexible concept. + +This is the central code that converts Python objects to +Type-descriptor objects that are used throughout numpy. + +Returns a new reference in *at, but the returned should not be +modified as it may be one of the canonical immutable objects or +a reference to the input obj. + +:: + + int + PyArray_DescrConverter2(PyObject *obj, PyArray_Descr **at) + +Get typenum from an object -- None goes to NULL + +:: + + int + PyArray_IntpConverter(PyObject *obj, PyArray_Dims *seq) + +Get intp chunk from sequence + +This function takes a Python sequence object and allocates and +fills in an intp array with the converted values. + +Remember to free the pointer seq.ptr when done using +PyDimMem_FREE(seq.ptr)** + +:: + + int + PyArray_BufferConverter(PyObject *obj, PyArray_Chunk *buf) + +Get buffer chunk from object + +this function takes a Python object which exposes the (single-segment) +buffer interface and returns a pointer to the data segment + +You should increment the reference count by one of buf->base +if you will hang on to a reference + +You only get a borrowed reference to the object. Do not free the +memory... + +:: + + int + PyArray_AxisConverter(PyObject *obj, int *axis) + +Get axis from an object (possibly None) -- a converter function, + +See also PyArray_ConvertMultiAxis, which also handles a tuple of axes. + +:: + + int + PyArray_BoolConverter(PyObject *object, npy_bool *val) + +Convert an object to true / false + +:: + + int + PyArray_ByteorderConverter(PyObject *obj, char *endian) + +Convert object to endian + +:: + + int + PyArray_OrderConverter(PyObject *object, NPY_ORDER *val) + +Convert an object to FORTRAN / C / ANY / KEEP + +:: + + unsigned char + PyArray_EquivTypes(PyArray_Descr *type1, PyArray_Descr *type2) + + +This function returns true if the two typecodes are +equivalent (same basic kind and same itemsize). + +:: + + PyObject * + PyArray_Zeros(int nd, npy_intp const *dims, PyArray_Descr *type, int + is_f_order) + +Zeros + +steals a reference to type. On failure or when dtype->subarray is +true, dtype will be decrefed. +accepts NULL type + +:: + + PyObject * + PyArray_Empty(int nd, npy_intp const *dims, PyArray_Descr *type, int + is_f_order) + +Empty + +accepts NULL type +steals a reference to type + +:: + + PyObject * + PyArray_Where(PyObject *condition, PyObject *x, PyObject *y) + +Where + +:: + + PyObject * + PyArray_Arange(double start, double stop, double step, int type_num) + +Arange, + +:: + + PyObject * + PyArray_ArangeObj(PyObject *start, PyObject *stop, PyObject + *step, PyArray_Descr *dtype) + + +ArangeObj, + +this doesn't change the references + +:: + + int + PyArray_SortkindConverter(PyObject *obj, NPY_SORTKIND *sortkind) + +Convert object to sort kind + +:: + + PyObject * + PyArray_LexSort(PyObject *sort_keys, int axis) + +LexSort an array providing indices that will sort a collection of arrays +lexicographically. The first key is sorted on first, followed by the second key +-- requires that arg"merge"sort is available for each sort_key + +Returns an index array that shows the indexes for the lexicographic sort along +the given axis. + +:: + + PyObject * + PyArray_Round(PyArrayObject *a, int decimals, PyArrayObject *out) + +Round + +:: + + unsigned char + PyArray_EquivTypenums(int typenum1, int typenum2) + + +:: + + int + PyArray_RegisterDataType(PyArray_Descr *descr) + +Register Data type +Does not change the reference count of descr + +:: + + int + PyArray_RegisterCastFunc(PyArray_Descr *descr, int + totype, PyArray_VectorUnaryFunc *castfunc) + +Register Casting Function +Replaces any function currently stored. + +:: + + int + PyArray_RegisterCanCast(PyArray_Descr *descr, int + totype, NPY_SCALARKIND scalar) + +Register a type number indicating that a descriptor can be cast +to it safely + +:: + + void + PyArray_InitArrFuncs(PyArray_ArrFuncs *f) + +Initialize arrfuncs to NULL + +:: + + PyObject * + PyArray_IntTupleFromIntp(int len, npy_intp const *vals) + +PyArray_IntTupleFromIntp + +:: + + int + PyArray_TypeNumFromName(char const *str) + + +:: + + int + PyArray_ClipmodeConverter(PyObject *object, NPY_CLIPMODE *val) + +Convert an object to NPY_RAISE / NPY_CLIP / NPY_WRAP + +:: + + int + PyArray_OutputConverter(PyObject *object, PyArrayObject **address) + +Useful to pass as converter function for O& processing in +PyArgs_ParseTuple for output arrays + +:: + + PyObject * + PyArray_BroadcastToShape(PyObject *obj, npy_intp *dims, int nd) + +Get Iterator broadcast to a particular shape + +:: + + void + _PyArray_SigintHandler(int signum) + + +:: + + void* + _PyArray_GetSigintBuf(void ) + + +:: + + int + PyArray_DescrAlignConverter(PyObject *obj, PyArray_Descr **at) + + +Get type-descriptor from an object forcing alignment if possible +None goes to DEFAULT type. + +any object with the .fields attribute and/or .itemsize attribute (if the +.fields attribute does not give the total size -- i.e. a partial record +naming). If itemsize is given it must be >= size computed from fields + +The .fields attribute must return a convertible dictionary if present. +Result inherits from NPY_VOID. + +:: + + int + PyArray_DescrAlignConverter2(PyObject *obj, PyArray_Descr **at) + + +Get type-descriptor from an object forcing alignment if possible +None goes to NULL. + +:: + + int + PyArray_SearchsideConverter(PyObject *obj, void *addr) + +Convert object to searchsorted side + +:: + + PyObject * + PyArray_CheckAxis(PyArrayObject *arr, int *axis, int flags) + +PyArray_CheckAxis + +check that axis is valid +convert 0-d arrays to 1-d arrays + +:: + + npy_intp + PyArray_OverflowMultiplyList(npy_intp const *l1, int n) + +Multiply a List of Non-negative numbers with over-flow detection. + +:: + + int + PyArray_CompareString(const char *s1, const char *s2, size_t len) + + +:: + + PyObject* + PyArray_MultiIterFromObjects(PyObject **mps, int n, int nadd, ... ) + +Get MultiIterator from array of Python objects and any additional + +PyObject **mps - array of PyObjects +int n - number of PyObjects in the array +int nadd - number of additional arrays to include in the iterator. + +Returns a multi-iterator object. + +:: + + int + PyArray_GetEndianness(void ) + + +:: + + unsigned int + PyArray_GetNDArrayCFeatureVersion(void ) + +Returns the built-in (at compilation time) C API version + +:: + + PyObject * + PyArray_Correlate2(PyObject *op1, PyObject *op2, int mode) + +correlate(a1,a2,mode) + +This function computes the usual correlation (correlate(a1, a2) != +correlate(a2, a1), and conjugate the second argument for complex inputs + +:: + + PyObject* + PyArray_NeighborhoodIterNew(PyArrayIterObject *x, const npy_intp + *bounds, int mode, PyArrayObject*fill) + +A Neighborhood Iterator object. + +:: + + void + PyArray_SetDatetimeParseFunction(PyObject *NPY_UNUSED(op) ) + +This function is scheduled to be removed + +TO BE REMOVED - NOT USED INTERNALLY. + +:: + + void + PyArray_DatetimeToDatetimeStruct(npy_datetime NPY_UNUSED(val) + , NPY_DATETIMEUNIT NPY_UNUSED(fr) + , npy_datetimestruct *result) + +Fill the datetime struct from the value and resolution unit. + +TO BE REMOVED - NOT USED INTERNALLY. + +:: + + void + PyArray_TimedeltaToTimedeltaStruct(npy_timedelta NPY_UNUSED(val) + , NPY_DATETIMEUNIT NPY_UNUSED(fr) + , npy_timedeltastruct *result) + +Fill the timedelta struct from the timedelta value and resolution unit. + +TO BE REMOVED - NOT USED INTERNALLY. + +:: + + npy_datetime + PyArray_DatetimeStructToDatetime(NPY_DATETIMEUNIT NPY_UNUSED(fr) + , npy_datetimestruct *NPY_UNUSED(d) ) + +Create a datetime value from a filled datetime struct and resolution unit. + +TO BE REMOVED - NOT USED INTERNALLY. + +:: + + npy_datetime + PyArray_TimedeltaStructToTimedelta(NPY_DATETIMEUNIT NPY_UNUSED(fr) + , npy_timedeltastruct + *NPY_UNUSED(d) ) + +Create a timdelta value from a filled timedelta struct and resolution unit. + +TO BE REMOVED - NOT USED INTERNALLY. + +:: + + NpyIter * + NpyIter_New(PyArrayObject *op, npy_uint32 flags, NPY_ORDER + order, NPY_CASTING casting, PyArray_Descr*dtype) + +Allocate a new iterator for one array object. + +:: + + NpyIter * + NpyIter_MultiNew(int nop, PyArrayObject **op_in, npy_uint32 + flags, NPY_ORDER order, NPY_CASTING + casting, npy_uint32 *op_flags, PyArray_Descr + **op_request_dtypes) + +Allocate a new iterator for more than one array object, using +standard NumPy broadcasting rules and the default buffer size. + +:: + + NpyIter * + NpyIter_AdvancedNew(int nop, PyArrayObject **op_in, npy_uint32 + flags, NPY_ORDER order, NPY_CASTING + casting, npy_uint32 *op_flags, PyArray_Descr + **op_request_dtypes, int oa_ndim, int + **op_axes, npy_intp *itershape, npy_intp + buffersize) + +Allocate a new iterator for multiple array objects, and advanced +options for controlling the broadcasting, shape, and buffer size. + +:: + + NpyIter * + NpyIter_Copy(NpyIter *iter) + +Makes a copy of the iterator + +:: + + int + NpyIter_Deallocate(NpyIter *iter) + +Deallocate an iterator. + +To correctly work when an error is in progress, we have to check +`PyErr_Occurred()`. This is necessary when buffers are not finalized +or WritebackIfCopy is used. We could avoid that check by exposing a new +function which is passed in whether or not a Python error is already set. + +:: + + npy_bool + NpyIter_HasDelayedBufAlloc(NpyIter *iter) + +Whether the buffer allocation is being delayed + +:: + + npy_bool + NpyIter_HasExternalLoop(NpyIter *iter) + +Whether the iterator handles the inner loop + +:: + + int + NpyIter_EnableExternalLoop(NpyIter *iter) + +Removes the inner loop handling (so HasExternalLoop returns true) + +:: + + npy_intp * + NpyIter_GetInnerStrideArray(NpyIter *iter) + +Get the array of strides for the inner loop (when HasExternalLoop is true) + +This function may be safely called without holding the Python GIL. + +:: + + npy_intp * + NpyIter_GetInnerLoopSizePtr(NpyIter *iter) + +Get a pointer to the size of the inner loop (when HasExternalLoop is true) + +This function may be safely called without holding the Python GIL. + +:: + + int + NpyIter_Reset(NpyIter *iter, char **errmsg) + +Resets the iterator to its initial state + +The use of errmsg is discouraged, it cannot be guaranteed that the GIL +will not be grabbed on casting errors even when this is passed. + +If errmsg is non-NULL, it should point to a variable which will +receive the error message, and no Python exception will be set. +This is so that the function can be called from code not holding +the GIL. Note that cast errors may still lead to the GIL being +grabbed temporarily. + +:: + + int + NpyIter_ResetBasePointers(NpyIter *iter, char **baseptrs, char + **errmsg) + +Resets the iterator to its initial state, with new base data pointers. +This function requires great caution. + +If errmsg is non-NULL, it should point to a variable which will +receive the error message, and no Python exception will be set. +This is so that the function can be called from code not holding +the GIL. Note that cast errors may still lead to the GIL being +grabbed temporarily. + +:: + + int + NpyIter_ResetToIterIndexRange(NpyIter *iter, npy_intp istart, npy_intp + iend, char **errmsg) + +Resets the iterator to a new iterator index range + +If errmsg is non-NULL, it should point to a variable which will +receive the error message, and no Python exception will be set. +This is so that the function can be called from code not holding +the GIL. Note that cast errors may still lead to the GIL being +grabbed temporarily. + +:: + + int + NpyIter_GetNDim(NpyIter *iter) + +Gets the number of dimensions being iterated + +:: + + int + NpyIter_GetNOp(NpyIter *iter) + +Gets the number of operands being iterated + +:: + + NpyIter_IterNextFunc * + NpyIter_GetIterNext(NpyIter *iter, char **errmsg) + +Compute the specialized iteration function for an iterator + +If errmsg is non-NULL, it should point to a variable which will +receive the error message, and no Python exception will be set. +This is so that the function can be called from code not holding +the GIL. + +:: + + npy_intp + NpyIter_GetIterSize(NpyIter *iter) + +Gets the number of elements being iterated + +:: + + void + NpyIter_GetIterIndexRange(NpyIter *iter, npy_intp *istart, npy_intp + *iend) + +Gets the range of iteration indices being iterated + +:: + + npy_intp + NpyIter_GetIterIndex(NpyIter *iter) + +Gets the current iteration index + +:: + + int + NpyIter_GotoIterIndex(NpyIter *iter, npy_intp iterindex) + +Sets the iterator position to the specified iterindex, +which matches the iteration order of the iterator. + +Returns NPY_SUCCEED on success, NPY_FAIL on failure. + +:: + + npy_bool + NpyIter_HasMultiIndex(NpyIter *iter) + +Whether the iterator is tracking a multi-index + +:: + + int + NpyIter_GetShape(NpyIter *iter, npy_intp *outshape) + +Gets the broadcast shape if a multi-index is being tracked by the iterator, +otherwise gets the shape of the iteration as Fortran-order +(fastest-changing index first). + +The reason Fortran-order is returned when a multi-index +is not enabled is that this is providing a direct view into how +the iterator traverses the n-dimensional space. The iterator organizes +its memory from fastest index to slowest index, and when +a multi-index is enabled, it uses a permutation to recover the original +order. + +Returns NPY_SUCCEED or NPY_FAIL. + +:: + + NpyIter_GetMultiIndexFunc * + NpyIter_GetGetMultiIndex(NpyIter *iter, char **errmsg) + +Compute a specialized get_multi_index function for the iterator + +If errmsg is non-NULL, it should point to a variable which will +receive the error message, and no Python exception will be set. +This is so that the function can be called from code not holding +the GIL. + +:: + + int + NpyIter_GotoMultiIndex(NpyIter *iter, npy_intp const *multi_index) + +Sets the iterator to the specified multi-index, which must have the +correct number of entries for 'ndim'. It is only valid +when NPY_ITER_MULTI_INDEX was passed to the constructor. This operation +fails if the multi-index is out of bounds. + +Returns NPY_SUCCEED on success, NPY_FAIL on failure. + +:: + + int + NpyIter_RemoveMultiIndex(NpyIter *iter) + +Removes multi-index support from an iterator. + +Returns NPY_SUCCEED or NPY_FAIL. + +:: + + npy_bool + NpyIter_HasIndex(NpyIter *iter) + +Whether the iterator is tracking an index + +:: + + npy_bool + NpyIter_IsBuffered(NpyIter *iter) + +Whether the iterator is buffered + +:: + + npy_bool + NpyIter_IsGrowInner(NpyIter *iter) + +Whether the inner loop can grow if buffering is unneeded + +:: + + npy_intp + NpyIter_GetBufferSize(NpyIter *iter) + +Gets the size of the buffer, or 0 if buffering is not enabled + +:: + + npy_intp * + NpyIter_GetIndexPtr(NpyIter *iter) + +Get a pointer to the index, if it is being tracked + +:: + + int + NpyIter_GotoIndex(NpyIter *iter, npy_intp flat_index) + +If the iterator is tracking an index, sets the iterator +to the specified index. + +Returns NPY_SUCCEED on success, NPY_FAIL on failure. + +:: + + char ** + NpyIter_GetDataPtrArray(NpyIter *iter) + +Get the array of data pointers (1 per object being iterated) + +This function may be safely called without holding the Python GIL. + +:: + + PyArray_Descr ** + NpyIter_GetDescrArray(NpyIter *iter) + +Get the array of data type pointers (1 per object being iterated) + +:: + + PyArrayObject ** + NpyIter_GetOperandArray(NpyIter *iter) + +Get the array of objects being iterated + +:: + + PyArrayObject * + NpyIter_GetIterView(NpyIter *iter, npy_intp i) + +Returns a view to the i-th object with the iterator's internal axes + +:: + + void + NpyIter_GetReadFlags(NpyIter *iter, char *outreadflags) + +Gets an array of read flags (1 per object being iterated) + +:: + + void + NpyIter_GetWriteFlags(NpyIter *iter, char *outwriteflags) + +Gets an array of write flags (1 per object being iterated) + +:: + + void + NpyIter_DebugPrint(NpyIter *iter) + +For debugging + +:: + + npy_bool + NpyIter_IterationNeedsAPI(NpyIter *iter) + +Whether the iteration loop, and in particular the iternext() +function, needs API access. If this is true, the GIL must +be retained while iterating. + +:: + + void + NpyIter_GetInnerFixedStrideArray(NpyIter *iter, npy_intp *out_strides) + +Get an array of strides which are fixed. Any strides which may +change during iteration receive the value NPY_MAX_INTP. Once +the iterator is ready to iterate, call this to get the strides +which will always be fixed in the inner loop, then choose optimized +inner loop functions which take advantage of those fixed strides. + +This function may be safely called without holding the Python GIL. + +:: + + int + NpyIter_RemoveAxis(NpyIter *iter, int axis) + +Removes an axis from iteration. This requires that NPY_ITER_MULTI_INDEX +was set for iterator creation, and does not work if buffering is +enabled. This function also resets the iterator to its initial state. + +Returns NPY_SUCCEED or NPY_FAIL. + +:: + + npy_intp * + NpyIter_GetAxisStrideArray(NpyIter *iter, int axis) + +Gets the array of strides for the specified axis. +If the iterator is tracking a multi-index, gets the strides +for the axis specified, otherwise gets the strides for +the iteration axis as Fortran order (fastest-changing axis first). + +Returns NULL if an error occurs. + +:: + + npy_bool + NpyIter_RequiresBuffering(NpyIter *iter) + +Whether the iteration could be done with no buffering. + +:: + + char ** + NpyIter_GetInitialDataPtrArray(NpyIter *iter) + +Get the array of data pointers (1 per object being iterated), +directly into the arrays (never pointing to a buffer), for starting +unbuffered iteration. This always returns the addresses for the +iterator position as reset to iterator index 0. + +These pointers are different from the pointers accepted by +NpyIter_ResetBasePointers, because the direction along some +axes may have been reversed, requiring base offsets. + +This function may be safely called without holding the Python GIL. + +:: + + int + NpyIter_CreateCompatibleStrides(NpyIter *iter, npy_intp + itemsize, npy_intp *outstrides) + +Builds a set of strides which are the same as the strides of an +output array created using the NPY_ITER_ALLOCATE flag, where NULL +was passed for op_axes. This is for data packed contiguously, +but not necessarily in C or Fortran order. This should be used +together with NpyIter_GetShape and NpyIter_GetNDim. + +A use case for this function is to match the shape and layout of +the iterator and tack on one or more dimensions. For example, +in order to generate a vector per input value for a numerical gradient, +you pass in ndim*itemsize for itemsize, then add another dimension to +the end with size ndim and stride itemsize. To do the Hessian matrix, +you do the same thing but add two dimensions, or take advantage of +the symmetry and pack it into 1 dimension with a particular encoding. + +This function may only be called if the iterator is tracking a multi-index +and if NPY_ITER_DONT_NEGATE_STRIDES was used to prevent an axis from +being iterated in reverse order. + +If an array is created with this method, simply adding 'itemsize' +for each iteration will traverse the new array matching the +iterator. + +Returns NPY_SUCCEED or NPY_FAIL. + +:: + + int + PyArray_CastingConverter(PyObject *obj, NPY_CASTING *casting) + +Convert any Python object, *obj*, to an NPY_CASTING enum. + +:: + + npy_intp + PyArray_CountNonzero(PyArrayObject *self) + +Counts the number of non-zero elements in the array. + +Returns -1 on error. + +:: + + PyArray_Descr * + PyArray_PromoteTypes(PyArray_Descr *type1, PyArray_Descr *type2) + +Produces the smallest size and lowest kind type to which both +input types can be cast. + +:: + + PyArray_Descr * + PyArray_MinScalarType(PyArrayObject *arr) + +If arr is a scalar (has 0 dimensions) with a built-in number data type, +finds the smallest type size/kind which can still represent its data. +Otherwise, returns the array's data type. + + +:: + + PyArray_Descr * + PyArray_ResultType(npy_intp narrs, PyArrayObject *arrs[] , npy_intp + ndtypes, PyArray_Descr *descrs[] ) + + +Produces the result type of a bunch of inputs, using the same rules +as `np.result_type`. + +NOTE: This function is expected to through a transitional period or +change behaviour. DTypes should always be strictly enforced for +0-D arrays, while "weak DTypes" will be used to represent Python +integers, floats, and complex in all cases. +(Within this function, these are currently flagged on the array +object to work through `np.result_type`, this may change.) + +Until a time where this transition is complete, we probably cannot +add new "weak DTypes" or allow users to create their own. + +:: + + npy_bool + PyArray_CanCastArrayTo(PyArrayObject *arr, PyArray_Descr + *to, NPY_CASTING casting) + +Returns 1 if the array object may be cast to the given data type using +the casting rule, 0 otherwise. This differs from PyArray_CanCastTo in +that it handles scalar arrays (0 dimensions) specially, by checking +their value. + +:: + + npy_bool + PyArray_CanCastTypeTo(PyArray_Descr *from, PyArray_Descr + *to, NPY_CASTING casting) + +Returns true if data of type 'from' may be cast to data of type +'to' according to the rule 'casting'. + +:: + + PyArrayObject * + PyArray_EinsteinSum(char *subscripts, npy_intp nop, PyArrayObject + **op_in, PyArray_Descr *dtype, NPY_ORDER + order, NPY_CASTING casting, PyArrayObject *out) + +This function provides summation of array elements according to +the Einstein summation convention. For example: +- trace(a) -> einsum("ii", a) +- transpose(a) -> einsum("ji", a) +- multiply(a,b) -> einsum(",", a, b) +- inner(a,b) -> einsum("i,i", a, b) +- outer(a,b) -> einsum("i,j", a, b) +- matvec(a,b) -> einsum("ij,j", a, b) +- matmat(a,b) -> einsum("ij,jk", a, b) + +subscripts: The string of subscripts for einstein summation. +nop: The number of operands +op_in: The array of operands +dtype: Either NULL, or the data type to force the calculation as. +order: The order for the calculation/the output axes. +casting: What kind of casts should be permitted. +out: Either NULL, or an array into which the output should be placed. + +By default, the labels get placed in alphabetical order +at the end of the output. So, if c = einsum("i,j", a, b) +then c[i,j] == a[i]*b[j], but if c = einsum("j,i", a, b) +then c[i,j] = a[j]*b[i]. + +Alternatively, you can control the output order or prevent +an axis from being summed/force an axis to be summed by providing +indices for the output. This allows us to turn 'trace' into +'diag', for example. +- diag(a) -> einsum("ii->i", a) +- sum(a, axis=0) -> einsum("i...->", a) + +Subscripts at the beginning and end may be specified by +putting an ellipsis "..." in the middle. For example, +the function einsum("i...i", a) takes the diagonal of +the first and last dimensions of the operand, and +einsum("ij...,jk...->ik...") takes the matrix product using +the first two indices of each operand instead of the last two. + +When there is only one operand, no axes being summed, and +no output parameter, this function returns a view +into the operand instead of making a copy. + +:: + + PyObject * + PyArray_NewLikeArray(PyArrayObject *prototype, NPY_ORDER + order, PyArray_Descr *dtype, int subok) + +Creates a new array with the same shape as the provided one, +with possible memory layout order and data type changes. + +prototype - The array the new one should be like. +order - NPY_CORDER - C-contiguous result. +NPY_FORTRANORDER - Fortran-contiguous result. +NPY_ANYORDER - Fortran if prototype is Fortran, C otherwise. +NPY_KEEPORDER - Keeps the axis ordering of prototype. +dtype - If not NULL, overrides the data type of the result. +subok - If 1, use the prototype's array subtype, otherwise +always create a base-class array. + +NOTE: If dtype is not NULL, steals the dtype reference. On failure or when +dtype->subarray is true, dtype will be decrefed. + +:: + + int + PyArray_GetArrayParamsFromObject(PyObject *NPY_UNUSED(op) + , PyArray_Descr + *NPY_UNUSED(requested_dtype) + , npy_bool NPY_UNUSED(writeable) + , PyArray_Descr + **NPY_UNUSED(out_dtype) , int + *NPY_UNUSED(out_ndim) , npy_intp + *NPY_UNUSED(out_dims) , PyArrayObject + **NPY_UNUSED(out_arr) , PyObject + *NPY_UNUSED(context) ) + + +:: + + int + PyArray_ConvertClipmodeSequence(PyObject *object, NPY_CLIPMODE + *modes, int n) + +Convert an object to an array of n NPY_CLIPMODE values. +This is intended to be used in functions where a different mode +could be applied to each axis, like in ravel_multi_index. + +:: + + PyObject * + PyArray_MatrixProduct2(PyObject *op1, PyObject + *op2, PyArrayObject*out) + +Numeric.matrixproduct2(a,v,out) +just like inner product but does the swapaxes stuff on the fly + +:: + + npy_bool + NpyIter_IsFirstVisit(NpyIter *iter, int iop) + +Checks to see whether this is the first time the elements +of the specified reduction operand which the iterator points at are +being seen for the first time. The function returns +a reasonable answer for reduction operands and when buffering is +disabled. The answer may be incorrect for buffered non-reduction +operands. + +This function is intended to be used in EXTERNAL_LOOP mode only, +and will produce some wrong answers when that mode is not enabled. + +If this function returns true, the caller should also +check the inner loop stride of the operand, because if +that stride is 0, then only the first element of the innermost +external loop is being visited for the first time. + +WARNING: For performance reasons, 'iop' is not bounds-checked, +it is not confirmed that 'iop' is actually a reduction +operand, and it is not confirmed that EXTERNAL_LOOP +mode is enabled. These checks are the responsibility of +the caller, and should be done outside of any inner loops. + +:: + + int + PyArray_SetBaseObject(PyArrayObject *arr, PyObject *obj) + +Sets the 'base' attribute of the array. This steals a reference +to 'obj'. + +Returns 0 on success, -1 on failure. + +:: + + void + PyArray_CreateSortedStridePerm(int ndim, npy_intp const + *strides, npy_stride_sort_item + *out_strideperm) + + +This function populates the first ndim elements +of strideperm with sorted descending by their absolute values. +For example, the stride array (4, -2, 12) becomes +[(2, 12), (0, 4), (1, -2)]. + +:: + + void + PyArray_RemoveAxesInPlace(PyArrayObject *arr, const npy_bool *flags) + + +Removes the axes flagged as True from the array, +modifying it in place. If an axis flagged for removal +has a shape entry bigger than one, this effectively selects +index zero for that axis. + +WARNING: If an axis flagged for removal has a shape equal to zero, +the array will point to invalid memory. The caller must +validate this! +If an axis flagged for removal has a shape larger than one, +the aligned flag (and in the future the contiguous flags), +may need explicit update. +(check also NPY_RELAXED_STRIDES_CHECKING) + +For example, this can be used to remove the reduction axes +from a reduction result once its computation is complete. + +:: + + void + PyArray_DebugPrint(PyArrayObject *obj) + +Prints the raw data of the ndarray in a form useful for debugging +low-level C issues. + +:: + + int + PyArray_FailUnlessWriteable(PyArrayObject *obj, const char *name) + + +This function does nothing if obj is writeable, and raises an exception +(and returns -1) if obj is not writeable. It may also do other +house-keeping, such as issuing warnings on arrays which are transitioning +to become views. Always call this function at some point before writing to +an array. + +'name' is a name for the array, used to give better error +messages. Something like "assignment destination", "output array", or even +just "array". + +:: + + int + PyArray_SetUpdateIfCopyBase(PyArrayObject *arr, PyArrayObject *base) + + +Precondition: 'arr' is a copy of 'base' (though possibly with different +strides, ordering, etc.). This function sets the UPDATEIFCOPY flag and the +->base pointer on 'arr', so that when 'arr' is destructed, it will copy any +changes back to 'base'. DEPRECATED, use PyArray_SetWritebackIfCopyBase + +Steals a reference to 'base'. + +Returns 0 on success, -1 on failure. + +:: + + void * + PyDataMem_NEW(size_t size) + +Allocates memory for array data. + +:: + + void + PyDataMem_FREE(void *ptr) + +Free memory for array data. + +:: + + void * + PyDataMem_RENEW(void *ptr, size_t size) + +Reallocate/resize memory for array data. + +:: + + PyDataMem_EventHookFunc * + PyDataMem_SetEventHook(PyDataMem_EventHookFunc *newhook, void + *user_data, void **old_data) + +Sets the allocation event hook for numpy array data. +Takes a PyDataMem_EventHookFunc *, which has the signature: +void hook(void *old, void *new, size_t size, void *user_data). +Also takes a void *user_data, and void **old_data. + +Returns a pointer to the previous hook or NULL. If old_data is +non-NULL, the previous user_data pointer will be copied to it. + +If not NULL, hook will be called at the end of each PyDataMem_NEW/FREE/RENEW: +result = PyDataMem_NEW(size) -> (*hook)(NULL, result, size, user_data) +PyDataMem_FREE(ptr) -> (*hook)(ptr, NULL, 0, user_data) +result = PyDataMem_RENEW(ptr, size) -> (*hook)(ptr, result, size, user_data) + +When the hook is called, the GIL will be held by the calling +thread. The hook should be written to be reentrant, if it performs +operations that might cause new allocation events (such as the +creation/destruction numpy objects, or creating/destroying Python +objects which might cause a gc) + +:: + + void + PyArray_MapIterSwapAxes(PyArrayMapIterObject *mit, PyArrayObject + **ret, int getmap) + + +Swap the axes to or from their inserted form. MapIter always puts the +advanced (array) indices first in the iteration. But if they are +consecutive, will insert/transpose them back before returning. +This is stored as `mit->consec != 0` (the place where they are inserted) +For assignments, the opposite happens: The values to be assigned are +transposed (getmap=1 instead of getmap=0). `getmap=0` and `getmap=1` +undo the other operation. + +:: + + PyObject * + PyArray_MapIterArray(PyArrayObject *a, PyObject *index) + + +Use advanced indexing to iterate an array. + +:: + + void + PyArray_MapIterNext(PyArrayMapIterObject *mit) + +This function needs to update the state of the map iterator +and point mit->dataptr to the memory-location of the next object + +Note that this function never handles an extra operand but provides +compatibility for an old (exposed) API. + +:: + + int + PyArray_Partition(PyArrayObject *op, PyArrayObject *ktharray, int + axis, NPY_SELECTKIND which) + +Partition an array in-place + +:: + + PyObject * + PyArray_ArgPartition(PyArrayObject *op, PyArrayObject *ktharray, int + axis, NPY_SELECTKIND which) + +ArgPartition an array + +:: + + int + PyArray_SelectkindConverter(PyObject *obj, NPY_SELECTKIND *selectkind) + +Convert object to select kind + +:: + + void * + PyDataMem_NEW_ZEROED(size_t size, size_t elsize) + +Allocates zeroed memory for array data. + +:: + + int + PyArray_CheckAnyScalarExact(PyObject *obj) + +return true an object is exactly a numpy scalar + +:: + + PyObject * + PyArray_MapIterArrayCopyIfOverlap(PyArrayObject *a, PyObject + *index, int + copy_if_overlap, PyArrayObject + *extra_op) + + +Same as PyArray_MapIterArray, but: + +If copy_if_overlap != 0, check if `a` has memory overlap with any of the +arrays in `index` and with `extra_op`. If yes, make copies as appropriate +to avoid problems if `a` is modified during the iteration. +`iter->array` may contain a copied array (UPDATEIFCOPY/WRITEBACKIFCOPY set). + +:: + + int + PyArray_ResolveWritebackIfCopy(PyArrayObject *self) + + +If WRITEBACKIFCOPY and self has data, reset the base WRITEABLE flag, +copy the local data to base, release the local data, and set flags +appropriately. Return 0 if not relevant, 1 if success, < 0 on failure + +:: + + int + PyArray_SetWritebackIfCopyBase(PyArrayObject *arr, PyArrayObject + *base) + + +Precondition: 'arr' is a copy of 'base' (though possibly with different +strides, ordering, etc.). This function sets the WRITEBACKIFCOPY flag and the +->base pointer on 'arr', call PyArray_ResolveWritebackIfCopy to copy any +changes back to 'base' before deallocating the array. + +Steals a reference to 'base'. + +Returns 0 on success, -1 on failure. + diff --git a/EXE version/main/numpy/core/include/numpy/ndarrayobject.h b/EXE version/main/numpy/core/include/numpy/ndarrayobject.h new file mode 100644 index 00000000..5ef1f10a --- /dev/null +++ b/EXE version/main/numpy/core/include/numpy/ndarrayobject.h @@ -0,0 +1,268 @@ +/* + * DON'T INCLUDE THIS DIRECTLY. + */ + +#ifndef NPY_NDARRAYOBJECT_H +#define NPY_NDARRAYOBJECT_H +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include "ndarraytypes.h" + +/* Includes the "function" C-API -- these are all stored in a + list of pointers --- one for each file + The two lists are concatenated into one in multiarray. + + They are available as import_array() +*/ + +#include "__multiarray_api.h" + + +/* C-API that requires previous API to be defined */ + +#define PyArray_DescrCheck(op) PyObject_TypeCheck(op, &PyArrayDescr_Type) + +#define PyArray_Check(op) PyObject_TypeCheck(op, &PyArray_Type) +#define PyArray_CheckExact(op) (((PyObject*)(op))->ob_type == &PyArray_Type) + +#define PyArray_HasArrayInterfaceType(op, type, context, out) \ + ((((out)=PyArray_FromStructInterface(op)) != Py_NotImplemented) || \ + (((out)=PyArray_FromInterface(op)) != Py_NotImplemented) || \ + (((out)=PyArray_FromArrayAttr(op, type, context)) != \ + Py_NotImplemented)) + +#define PyArray_HasArrayInterface(op, out) \ + PyArray_HasArrayInterfaceType(op, NULL, NULL, out) + +#define PyArray_IsZeroDim(op) (PyArray_Check(op) && \ + (PyArray_NDIM((PyArrayObject *)op) == 0)) + +#define PyArray_IsScalar(obj, cls) \ + (PyObject_TypeCheck(obj, &Py##cls##ArrType_Type)) + +#define PyArray_CheckScalar(m) (PyArray_IsScalar(m, Generic) || \ + PyArray_IsZeroDim(m)) +#define PyArray_IsPythonNumber(obj) \ + (PyFloat_Check(obj) || PyComplex_Check(obj) || \ + PyLong_Check(obj) || PyBool_Check(obj)) +#define PyArray_IsIntegerScalar(obj) (PyLong_Check(obj) \ + || PyArray_IsScalar((obj), Integer)) +#define PyArray_IsPythonScalar(obj) \ + (PyArray_IsPythonNumber(obj) || PyBytes_Check(obj) || \ + PyUnicode_Check(obj)) + +#define PyArray_IsAnyScalar(obj) \ + (PyArray_IsScalar(obj, Generic) || PyArray_IsPythonScalar(obj)) + +#define PyArray_CheckAnyScalar(obj) (PyArray_IsPythonScalar(obj) || \ + PyArray_CheckScalar(obj)) + + +#define PyArray_GETCONTIGUOUS(m) (PyArray_ISCONTIGUOUS(m) ? \ + Py_INCREF(m), (m) : \ + (PyArrayObject *)(PyArray_Copy(m))) + +#define PyArray_SAMESHAPE(a1,a2) ((PyArray_NDIM(a1) == PyArray_NDIM(a2)) && \ + PyArray_CompareLists(PyArray_DIMS(a1), \ + PyArray_DIMS(a2), \ + PyArray_NDIM(a1))) + +#define PyArray_SIZE(m) PyArray_MultiplyList(PyArray_DIMS(m), PyArray_NDIM(m)) +#define PyArray_NBYTES(m) (PyArray_ITEMSIZE(m) * PyArray_SIZE(m)) +#define PyArray_FROM_O(m) PyArray_FromAny(m, NULL, 0, 0, 0, NULL) + +#define PyArray_FROM_OF(m,flags) PyArray_CheckFromAny(m, NULL, 0, 0, flags, \ + NULL) + +#define PyArray_FROM_OT(m,type) PyArray_FromAny(m, \ + PyArray_DescrFromType(type), 0, 0, 0, NULL) + +#define PyArray_FROM_OTF(m, type, flags) \ + PyArray_FromAny(m, PyArray_DescrFromType(type), 0, 0, \ + (((flags) & NPY_ARRAY_ENSURECOPY) ? \ + ((flags) | NPY_ARRAY_DEFAULT) : (flags)), NULL) + +#define PyArray_FROMANY(m, type, min, max, flags) \ + PyArray_FromAny(m, PyArray_DescrFromType(type), min, max, \ + (((flags) & NPY_ARRAY_ENSURECOPY) ? \ + (flags) | NPY_ARRAY_DEFAULT : (flags)), NULL) + +#define PyArray_ZEROS(m, dims, type, is_f_order) \ + PyArray_Zeros(m, dims, PyArray_DescrFromType(type), is_f_order) + +#define PyArray_EMPTY(m, dims, type, is_f_order) \ + PyArray_Empty(m, dims, PyArray_DescrFromType(type), is_f_order) + +#define PyArray_FILLWBYTE(obj, val) memset(PyArray_DATA(obj), val, \ + PyArray_NBYTES(obj)) +#ifndef PYPY_VERSION +#define PyArray_REFCOUNT(obj) (((PyObject *)(obj))->ob_refcnt) +#define NPY_REFCOUNT PyArray_REFCOUNT +#endif +#define NPY_MAX_ELSIZE (2 * NPY_SIZEOF_LONGDOUBLE) + +#define PyArray_ContiguousFromAny(op, type, min_depth, max_depth) \ + PyArray_FromAny(op, PyArray_DescrFromType(type), min_depth, \ + max_depth, NPY_ARRAY_DEFAULT, NULL) + +#define PyArray_EquivArrTypes(a1, a2) \ + PyArray_EquivTypes(PyArray_DESCR(a1), PyArray_DESCR(a2)) + +#define PyArray_EquivByteorders(b1, b2) \ + (((b1) == (b2)) || (PyArray_ISNBO(b1) == PyArray_ISNBO(b2))) + +#define PyArray_SimpleNew(nd, dims, typenum) \ + PyArray_New(&PyArray_Type, nd, dims, typenum, NULL, NULL, 0, 0, NULL) + +#define PyArray_SimpleNewFromData(nd, dims, typenum, data) \ + PyArray_New(&PyArray_Type, nd, dims, typenum, NULL, \ + data, 0, NPY_ARRAY_CARRAY, NULL) + +#define PyArray_SimpleNewFromDescr(nd, dims, descr) \ + PyArray_NewFromDescr(&PyArray_Type, descr, nd, dims, \ + NULL, NULL, 0, NULL) + +#define PyArray_ToScalar(data, arr) \ + PyArray_Scalar(data, PyArray_DESCR(arr), (PyObject *)arr) + + +/* These might be faster without the dereferencing of obj + going on inside -- of course an optimizing compiler should + inline the constants inside a for loop making it a moot point +*/ + +#define PyArray_GETPTR1(obj, i) ((void *)(PyArray_BYTES(obj) + \ + (i)*PyArray_STRIDES(obj)[0])) + +#define PyArray_GETPTR2(obj, i, j) ((void *)(PyArray_BYTES(obj) + \ + (i)*PyArray_STRIDES(obj)[0] + \ + (j)*PyArray_STRIDES(obj)[1])) + +#define PyArray_GETPTR3(obj, i, j, k) ((void *)(PyArray_BYTES(obj) + \ + (i)*PyArray_STRIDES(obj)[0] + \ + (j)*PyArray_STRIDES(obj)[1] + \ + (k)*PyArray_STRIDES(obj)[2])) + +#define PyArray_GETPTR4(obj, i, j, k, l) ((void *)(PyArray_BYTES(obj) + \ + (i)*PyArray_STRIDES(obj)[0] + \ + (j)*PyArray_STRIDES(obj)[1] + \ + (k)*PyArray_STRIDES(obj)[2] + \ + (l)*PyArray_STRIDES(obj)[3])) + +/* Move to arrayobject.c once PyArray_XDECREF_ERR is removed */ +static NPY_INLINE void +PyArray_DiscardWritebackIfCopy(PyArrayObject *arr) +{ + PyArrayObject_fields *fa = (PyArrayObject_fields *)arr; + if (fa && fa->base) { + if ((fa->flags & NPY_ARRAY_UPDATEIFCOPY) || + (fa->flags & NPY_ARRAY_WRITEBACKIFCOPY)) { + PyArray_ENABLEFLAGS((PyArrayObject*)fa->base, NPY_ARRAY_WRITEABLE); + Py_DECREF(fa->base); + fa->base = NULL; + PyArray_CLEARFLAGS(arr, NPY_ARRAY_WRITEBACKIFCOPY); + PyArray_CLEARFLAGS(arr, NPY_ARRAY_UPDATEIFCOPY); + } + } +} + +#define PyArray_DESCR_REPLACE(descr) do { \ + PyArray_Descr *_new_; \ + _new_ = PyArray_DescrNew(descr); \ + Py_XDECREF(descr); \ + descr = _new_; \ + } while(0) + +/* Copy should always return contiguous array */ +#define PyArray_Copy(obj) PyArray_NewCopy(obj, NPY_CORDER) + +#define PyArray_FromObject(op, type, min_depth, max_depth) \ + PyArray_FromAny(op, PyArray_DescrFromType(type), min_depth, \ + max_depth, NPY_ARRAY_BEHAVED | \ + NPY_ARRAY_ENSUREARRAY, NULL) + +#define PyArray_ContiguousFromObject(op, type, min_depth, max_depth) \ + PyArray_FromAny(op, PyArray_DescrFromType(type), min_depth, \ + max_depth, NPY_ARRAY_DEFAULT | \ + NPY_ARRAY_ENSUREARRAY, NULL) + +#define PyArray_CopyFromObject(op, type, min_depth, max_depth) \ + PyArray_FromAny(op, PyArray_DescrFromType(type), min_depth, \ + max_depth, NPY_ARRAY_ENSURECOPY | \ + NPY_ARRAY_DEFAULT | \ + NPY_ARRAY_ENSUREARRAY, NULL) + +#define PyArray_Cast(mp, type_num) \ + PyArray_CastToType(mp, PyArray_DescrFromType(type_num), 0) + +#define PyArray_Take(ap, items, axis) \ + PyArray_TakeFrom(ap, items, axis, NULL, NPY_RAISE) + +#define PyArray_Put(ap, items, values) \ + PyArray_PutTo(ap, items, values, NPY_RAISE) + +/* Compatibility with old Numeric stuff -- don't use in new code */ + +#define PyArray_FromDimsAndData(nd, d, type, data) \ + PyArray_FromDimsAndDataAndDescr(nd, d, PyArray_DescrFromType(type), \ + data) + + +/* + Check to see if this key in the dictionary is the "title" + entry of the tuple (i.e. a duplicate dictionary entry in the fields + dict). +*/ + +static NPY_INLINE int +NPY_TITLE_KEY_check(PyObject *key, PyObject *value) +{ + PyObject *title; + if (PyTuple_Size(value) != 3) { + return 0; + } + title = PyTuple_GetItem(value, 2); + if (key == title) { + return 1; + } +#ifdef PYPY_VERSION + /* + * On PyPy, dictionary keys do not always preserve object identity. + * Fall back to comparison by value. + */ + if (PyUnicode_Check(title) && PyUnicode_Check(key)) { + return PyUnicode_Compare(title, key) == 0 ? 1 : 0; + } +#endif + return 0; +} + +/* Macro, for backward compat with "if NPY_TITLE_KEY(key, value) { ..." */ +#define NPY_TITLE_KEY(key, value) (NPY_TITLE_KEY_check((key), (value))) + +#define DEPRECATE(msg) PyErr_WarnEx(PyExc_DeprecationWarning,msg,1) +#define DEPRECATE_FUTUREWARNING(msg) PyErr_WarnEx(PyExc_FutureWarning,msg,1) + +#if !defined(NPY_NO_DEPRECATED_API) || \ + (NPY_NO_DEPRECATED_API < NPY_1_14_API_VERSION) +static NPY_INLINE void +PyArray_XDECREF_ERR(PyArrayObject *arr) +{ + /* 2017-Nov-10 1.14 */ + DEPRECATE("PyArray_XDECREF_ERR is deprecated, call " + "PyArray_DiscardWritebackIfCopy then Py_XDECREF instead"); + PyArray_DiscardWritebackIfCopy(arr); + Py_XDECREF(arr); +} +#endif + + +#ifdef __cplusplus +} +#endif + + +#endif /* NPY_NDARRAYOBJECT_H */ diff --git a/EXE version/main/numpy/core/include/numpy/ndarraytypes.h b/EXE version/main/numpy/core/include/numpy/ndarraytypes.h new file mode 100644 index 00000000..d1acfdf2 --- /dev/null +++ b/EXE version/main/numpy/core/include/numpy/ndarraytypes.h @@ -0,0 +1,1985 @@ +#ifndef NDARRAYTYPES_H +#define NDARRAYTYPES_H + +#include "npy_common.h" +#include "npy_endian.h" +#include "npy_cpu.h" +#include "utils.h" + +#define NPY_NO_EXPORT NPY_VISIBILITY_HIDDEN + +/* Only use thread if configured in config and python supports it */ +#if defined WITH_THREAD && !NPY_NO_SMP + #define NPY_ALLOW_THREADS 1 +#else + #define NPY_ALLOW_THREADS 0 +#endif + +#ifndef __has_extension +#define __has_extension(x) 0 +#endif + +#if !defined(_NPY_NO_DEPRECATIONS) && \ + ((defined(__GNUC__)&& __GNUC__ >= 6) || \ + __has_extension(attribute_deprecated_with_message)) +#define NPY_ATTR_DEPRECATE(text) __attribute__ ((deprecated (text))) +#else +#define NPY_ATTR_DEPRECATE(text) +#endif + +/* + * There are several places in the code where an array of dimensions + * is allocated statically. This is the size of that static + * allocation. + * + * The array creation itself could have arbitrary dimensions but all + * the places where static allocation is used would need to be changed + * to dynamic (including inside of several structures) + */ + +#define NPY_MAXDIMS 32 +#define NPY_MAXARGS 32 + +/* Used for Converter Functions "O&" code in ParseTuple */ +#define NPY_FAIL 0 +#define NPY_SUCCEED 1 + +/* + * Binary compatibility version number. This number is increased + * whenever the C-API is changed such that binary compatibility is + * broken, i.e. whenever a recompile of extension modules is needed. + */ +#define NPY_VERSION NPY_ABI_VERSION + +/* + * Minor API version. This number is increased whenever a change is + * made to the C-API -- whether it breaks binary compatibility or not. + * Some changes, such as adding a function pointer to the end of the + * function table, can be made without breaking binary compatibility. + * In this case, only the NPY_FEATURE_VERSION (*not* NPY_VERSION) + * would be increased. Whenever binary compatibility is broken, both + * NPY_VERSION and NPY_FEATURE_VERSION should be increased. + */ +#define NPY_FEATURE_VERSION NPY_API_VERSION + +enum NPY_TYPES { NPY_BOOL=0, + NPY_BYTE, NPY_UBYTE, + NPY_SHORT, NPY_USHORT, + NPY_INT, NPY_UINT, + NPY_LONG, NPY_ULONG, + NPY_LONGLONG, NPY_ULONGLONG, + NPY_FLOAT, NPY_DOUBLE, NPY_LONGDOUBLE, + NPY_CFLOAT, NPY_CDOUBLE, NPY_CLONGDOUBLE, + NPY_OBJECT=17, + NPY_STRING, NPY_UNICODE, + NPY_VOID, + /* + * New 1.6 types appended, may be integrated + * into the above in 2.0. + */ + NPY_DATETIME, NPY_TIMEDELTA, NPY_HALF, + + NPY_NTYPES, + NPY_NOTYPE, + NPY_CHAR NPY_ATTR_DEPRECATE("Use NPY_STRING"), + NPY_USERDEF=256, /* leave room for characters */ + + /* The number of types not including the new 1.6 types */ + NPY_NTYPES_ABI_COMPATIBLE=21 +}; +#ifdef _MSC_VER +#pragma deprecated(NPY_CHAR) +#endif + +/* basetype array priority */ +#define NPY_PRIORITY 0.0 + +/* default subtype priority */ +#define NPY_SUBTYPE_PRIORITY 1.0 + +/* default scalar priority */ +#define NPY_SCALAR_PRIORITY -1000000.0 + +/* How many floating point types are there (excluding half) */ +#define NPY_NUM_FLOATTYPE 3 + +/* + * These characters correspond to the array type and the struct + * module + */ + +enum NPY_TYPECHAR { + NPY_BOOLLTR = '?', + NPY_BYTELTR = 'b', + NPY_UBYTELTR = 'B', + NPY_SHORTLTR = 'h', + NPY_USHORTLTR = 'H', + NPY_INTLTR = 'i', + NPY_UINTLTR = 'I', + NPY_LONGLTR = 'l', + NPY_ULONGLTR = 'L', + NPY_LONGLONGLTR = 'q', + NPY_ULONGLONGLTR = 'Q', + NPY_HALFLTR = 'e', + NPY_FLOATLTR = 'f', + NPY_DOUBLELTR = 'd', + NPY_LONGDOUBLELTR = 'g', + NPY_CFLOATLTR = 'F', + NPY_CDOUBLELTR = 'D', + NPY_CLONGDOUBLELTR = 'G', + NPY_OBJECTLTR = 'O', + NPY_STRINGLTR = 'S', + NPY_STRINGLTR2 = 'a', + NPY_UNICODELTR = 'U', + NPY_VOIDLTR = 'V', + NPY_DATETIMELTR = 'M', + NPY_TIMEDELTALTR = 'm', + NPY_CHARLTR = 'c', + + /* + * No Descriptor, just a define -- this let's + * Python users specify an array of integers + * large enough to hold a pointer on the + * platform + */ + NPY_INTPLTR = 'p', + NPY_UINTPLTR = 'P', + + /* + * These are for dtype 'kinds', not dtype 'typecodes' + * as the above are for. + */ + NPY_GENBOOLLTR ='b', + NPY_SIGNEDLTR = 'i', + NPY_UNSIGNEDLTR = 'u', + NPY_FLOATINGLTR = 'f', + NPY_COMPLEXLTR = 'c' +}; + +/* + * Changing this may break Numpy API compatibility + * due to changing offsets in PyArray_ArrFuncs, so be + * careful. Here we have reused the mergesort slot for + * any kind of stable sort, the actual implementation will + * depend on the data type. + */ +typedef enum { + NPY_QUICKSORT=0, + NPY_HEAPSORT=1, + NPY_MERGESORT=2, + NPY_STABLESORT=2, +} NPY_SORTKIND; +#define NPY_NSORTS (NPY_STABLESORT + 1) + + +typedef enum { + NPY_INTROSELECT=0 +} NPY_SELECTKIND; +#define NPY_NSELECTS (NPY_INTROSELECT + 1) + + +typedef enum { + NPY_SEARCHLEFT=0, + NPY_SEARCHRIGHT=1 +} NPY_SEARCHSIDE; +#define NPY_NSEARCHSIDES (NPY_SEARCHRIGHT + 1) + + +typedef enum { + NPY_NOSCALAR=-1, + NPY_BOOL_SCALAR, + NPY_INTPOS_SCALAR, + NPY_INTNEG_SCALAR, + NPY_FLOAT_SCALAR, + NPY_COMPLEX_SCALAR, + NPY_OBJECT_SCALAR +} NPY_SCALARKIND; +#define NPY_NSCALARKINDS (NPY_OBJECT_SCALAR + 1) + +/* For specifying array memory layout or iteration order */ +typedef enum { + /* Fortran order if inputs are all Fortran, C otherwise */ + NPY_ANYORDER=-1, + /* C order */ + NPY_CORDER=0, + /* Fortran order */ + NPY_FORTRANORDER=1, + /* An order as close to the inputs as possible */ + NPY_KEEPORDER=2 +} NPY_ORDER; + +/* For specifying allowed casting in operations which support it */ +typedef enum { + _NPY_ERROR_OCCURRED_IN_CAST = -1, + /* Only allow identical types */ + NPY_NO_CASTING=0, + /* Allow identical and byte swapped types */ + NPY_EQUIV_CASTING=1, + /* Only allow safe casts */ + NPY_SAFE_CASTING=2, + /* Allow safe casts or casts within the same kind */ + NPY_SAME_KIND_CASTING=3, + /* Allow any casts */ + NPY_UNSAFE_CASTING=4, + /* + * Flag to allow signalling that a cast is a view, this flag is not + * valid when requesting a cast of specific safety. + * _NPY_CAST_IS_VIEW|NPY_EQUIV_CASTING means the same as NPY_NO_CASTING. + */ + // TODO-DTYPES: Needs to be documented. + _NPY_CAST_IS_VIEW = 1 << 16, +} NPY_CASTING; + +typedef enum { + NPY_CLIP=0, + NPY_WRAP=1, + NPY_RAISE=2 +} NPY_CLIPMODE; + +typedef enum { + NPY_VALID=0, + NPY_SAME=1, + NPY_FULL=2 +} NPY_CORRELATEMODE; + +/* The special not-a-time (NaT) value */ +#define NPY_DATETIME_NAT NPY_MIN_INT64 + +/* + * Upper bound on the length of a DATETIME ISO 8601 string + * YEAR: 21 (64-bit year) + * MONTH: 3 + * DAY: 3 + * HOURS: 3 + * MINUTES: 3 + * SECONDS: 3 + * ATTOSECONDS: 1 + 3*6 + * TIMEZONE: 5 + * NULL TERMINATOR: 1 + */ +#define NPY_DATETIME_MAX_ISO8601_STRLEN (21 + 3*5 + 1 + 3*6 + 6 + 1) + +/* The FR in the unit names stands for frequency */ +typedef enum { + /* Force signed enum type, must be -1 for code compatibility */ + NPY_FR_ERROR = -1, /* error or undetermined */ + + /* Start of valid units */ + NPY_FR_Y = 0, /* Years */ + NPY_FR_M = 1, /* Months */ + NPY_FR_W = 2, /* Weeks */ + /* Gap where 1.6 NPY_FR_B (value 3) was */ + NPY_FR_D = 4, /* Days */ + NPY_FR_h = 5, /* hours */ + NPY_FR_m = 6, /* minutes */ + NPY_FR_s = 7, /* seconds */ + NPY_FR_ms = 8, /* milliseconds */ + NPY_FR_us = 9, /* microseconds */ + NPY_FR_ns = 10, /* nanoseconds */ + NPY_FR_ps = 11, /* picoseconds */ + NPY_FR_fs = 12, /* femtoseconds */ + NPY_FR_as = 13, /* attoseconds */ + NPY_FR_GENERIC = 14 /* unbound units, can convert to anything */ +} NPY_DATETIMEUNIT; + +/* + * NOTE: With the NPY_FR_B gap for 1.6 ABI compatibility, NPY_DATETIME_NUMUNITS + * is technically one more than the actual number of units. + */ +#define NPY_DATETIME_NUMUNITS (NPY_FR_GENERIC + 1) +#define NPY_DATETIME_DEFAULTUNIT NPY_FR_GENERIC + +/* + * Business day conventions for mapping invalid business + * days to valid business days. + */ +typedef enum { + /* Go forward in time to the following business day. */ + NPY_BUSDAY_FORWARD, + NPY_BUSDAY_FOLLOWING = NPY_BUSDAY_FORWARD, + /* Go backward in time to the preceding business day. */ + NPY_BUSDAY_BACKWARD, + NPY_BUSDAY_PRECEDING = NPY_BUSDAY_BACKWARD, + /* + * Go forward in time to the following business day, unless it + * crosses a month boundary, in which case go backward + */ + NPY_BUSDAY_MODIFIEDFOLLOWING, + /* + * Go backward in time to the preceding business day, unless it + * crosses a month boundary, in which case go forward. + */ + NPY_BUSDAY_MODIFIEDPRECEDING, + /* Produce a NaT for non-business days. */ + NPY_BUSDAY_NAT, + /* Raise an exception for non-business days. */ + NPY_BUSDAY_RAISE +} NPY_BUSDAY_ROLL; + +/************************************************************ + * NumPy Auxiliary Data for inner loops, sort functions, etc. + ************************************************************/ + +/* + * When creating an auxiliary data struct, this should always appear + * as the first member, like this: + * + * typedef struct { + * NpyAuxData base; + * double constant; + * } constant_multiplier_aux_data; + */ +typedef struct NpyAuxData_tag NpyAuxData; + +/* Function pointers for freeing or cloning auxiliary data */ +typedef void (NpyAuxData_FreeFunc) (NpyAuxData *); +typedef NpyAuxData *(NpyAuxData_CloneFunc) (NpyAuxData *); + +struct NpyAuxData_tag { + NpyAuxData_FreeFunc *free; + NpyAuxData_CloneFunc *clone; + /* To allow for a bit of expansion without breaking the ABI */ + void *reserved[2]; +}; + +/* Macros to use for freeing and cloning auxiliary data */ +#define NPY_AUXDATA_FREE(auxdata) \ + do { \ + if ((auxdata) != NULL) { \ + (auxdata)->free(auxdata); \ + } \ + } while(0) +#define NPY_AUXDATA_CLONE(auxdata) \ + ((auxdata)->clone(auxdata)) + +#define NPY_ERR(str) fprintf(stderr, #str); fflush(stderr); +#define NPY_ERR2(str) fprintf(stderr, str); fflush(stderr); + + /* + * Macros to define how array, and dimension/strides data is + * allocated. + */ + + /* Data buffer - PyDataMem_NEW/FREE/RENEW are in multiarraymodule.c */ + +#define NPY_USE_PYMEM 1 + + +#if NPY_USE_PYMEM == 1 +/* use the Raw versions which are safe to call with the GIL released */ +#define PyArray_malloc PyMem_RawMalloc +#define PyArray_free PyMem_RawFree +#define PyArray_realloc PyMem_RawRealloc +#else +#define PyArray_malloc malloc +#define PyArray_free free +#define PyArray_realloc realloc +#endif + +/* Dimensions and strides */ +#define PyDimMem_NEW(size) \ + ((npy_intp *)PyArray_malloc(size*sizeof(npy_intp))) + +#define PyDimMem_FREE(ptr) PyArray_free(ptr) + +#define PyDimMem_RENEW(ptr,size) \ + ((npy_intp *)PyArray_realloc(ptr,size*sizeof(npy_intp))) + +/* forward declaration */ +struct _PyArray_Descr; + +/* These must deal with unaligned and swapped data if necessary */ +typedef PyObject * (PyArray_GetItemFunc) (void *, void *); +typedef int (PyArray_SetItemFunc)(PyObject *, void *, void *); + +typedef void (PyArray_CopySwapNFunc)(void *, npy_intp, void *, npy_intp, + npy_intp, int, void *); + +typedef void (PyArray_CopySwapFunc)(void *, void *, int, void *); +typedef npy_bool (PyArray_NonzeroFunc)(void *, void *); + + +/* + * These assume aligned and notswapped data -- a buffer will be used + * before or contiguous data will be obtained + */ + +typedef int (PyArray_CompareFunc)(const void *, const void *, void *); +typedef int (PyArray_ArgFunc)(void*, npy_intp, npy_intp*, void *); + +typedef void (PyArray_DotFunc)(void *, npy_intp, void *, npy_intp, void *, + npy_intp, void *); + +typedef void (PyArray_VectorUnaryFunc)(void *, void *, npy_intp, void *, + void *); + +/* + * XXX the ignore argument should be removed next time the API version + * is bumped. It used to be the separator. + */ +typedef int (PyArray_ScanFunc)(FILE *fp, void *dptr, + char *ignore, struct _PyArray_Descr *); +typedef int (PyArray_FromStrFunc)(char *s, void *dptr, char **endptr, + struct _PyArray_Descr *); + +typedef int (PyArray_FillFunc)(void *, npy_intp, void *); + +typedef int (PyArray_SortFunc)(void *, npy_intp, void *); +typedef int (PyArray_ArgSortFunc)(void *, npy_intp *, npy_intp, void *); +typedef int (PyArray_PartitionFunc)(void *, npy_intp, npy_intp, + npy_intp *, npy_intp *, + void *); +typedef int (PyArray_ArgPartitionFunc)(void *, npy_intp *, npy_intp, npy_intp, + npy_intp *, npy_intp *, + void *); + +typedef int (PyArray_FillWithScalarFunc)(void *, npy_intp, void *, void *); + +typedef int (PyArray_ScalarKindFunc)(void *); + +typedef void (PyArray_FastClipFunc)(void *in, npy_intp n_in, void *min, + void *max, void *out); +typedef void (PyArray_FastPutmaskFunc)(void *in, void *mask, npy_intp n_in, + void *values, npy_intp nv); +typedef int (PyArray_FastTakeFunc)(void *dest, void *src, npy_intp *indarray, + npy_intp nindarray, npy_intp n_outer, + npy_intp m_middle, npy_intp nelem, + NPY_CLIPMODE clipmode); + +typedef struct { + npy_intp *ptr; + int len; +} PyArray_Dims; + +typedef struct { + /* + * Functions to cast to most other standard types + * Can have some NULL entries. The types + * DATETIME, TIMEDELTA, and HALF go into the castdict + * even though they are built-in. + */ + PyArray_VectorUnaryFunc *cast[NPY_NTYPES_ABI_COMPATIBLE]; + + /* The next four functions *cannot* be NULL */ + + /* + * Functions to get and set items with standard Python types + * -- not array scalars + */ + PyArray_GetItemFunc *getitem; + PyArray_SetItemFunc *setitem; + + /* + * Copy and/or swap data. Memory areas may not overlap + * Use memmove first if they might + */ + PyArray_CopySwapNFunc *copyswapn; + PyArray_CopySwapFunc *copyswap; + + /* + * Function to compare items + * Can be NULL + */ + PyArray_CompareFunc *compare; + + /* + * Function to select largest + * Can be NULL + */ + PyArray_ArgFunc *argmax; + + /* + * Function to compute dot product + * Can be NULL + */ + PyArray_DotFunc *dotfunc; + + /* + * Function to scan an ASCII file and + * place a single value plus possible separator + * Can be NULL + */ + PyArray_ScanFunc *scanfunc; + + /* + * Function to read a single value from a string + * and adjust the pointer; Can be NULL + */ + PyArray_FromStrFunc *fromstr; + + /* + * Function to determine if data is zero or not + * If NULL a default version is + * used at Registration time. + */ + PyArray_NonzeroFunc *nonzero; + + /* + * Used for arange. Should return 0 on success + * and -1 on failure. + * Can be NULL. + */ + PyArray_FillFunc *fill; + + /* + * Function to fill arrays with scalar values + * Can be NULL + */ + PyArray_FillWithScalarFunc *fillwithscalar; + + /* + * Sorting functions + * Can be NULL + */ + PyArray_SortFunc *sort[NPY_NSORTS]; + PyArray_ArgSortFunc *argsort[NPY_NSORTS]; + + /* + * Dictionary of additional casting functions + * PyArray_VectorUnaryFuncs + * which can be populated to support casting + * to other registered types. Can be NULL + */ + PyObject *castdict; + + /* + * Functions useful for generalizing + * the casting rules. + * Can be NULL; + */ + PyArray_ScalarKindFunc *scalarkind; + int **cancastscalarkindto; + int *cancastto; + + PyArray_FastClipFunc *fastclip; + PyArray_FastPutmaskFunc *fastputmask; + PyArray_FastTakeFunc *fasttake; + + /* + * Function to select smallest + * Can be NULL + */ + PyArray_ArgFunc *argmin; + +} PyArray_ArrFuncs; + +/* The item must be reference counted when it is inserted or extracted. */ +#define NPY_ITEM_REFCOUNT 0x01 +/* Same as needing REFCOUNT */ +#define NPY_ITEM_HASOBJECT 0x01 +/* Convert to list for pickling */ +#define NPY_LIST_PICKLE 0x02 +/* The item is a POINTER */ +#define NPY_ITEM_IS_POINTER 0x04 +/* memory needs to be initialized for this data-type */ +#define NPY_NEEDS_INIT 0x08 +/* operations need Python C-API so don't give-up thread. */ +#define NPY_NEEDS_PYAPI 0x10 +/* Use f.getitem when extracting elements of this data-type */ +#define NPY_USE_GETITEM 0x20 +/* Use f.setitem when setting creating 0-d array from this data-type.*/ +#define NPY_USE_SETITEM 0x40 +/* A sticky flag specifically for structured arrays */ +#define NPY_ALIGNED_STRUCT 0x80 + +/* + *These are inherited for global data-type if any data-types in the + * field have them + */ +#define NPY_FROM_FIELDS (NPY_NEEDS_INIT | NPY_LIST_PICKLE | \ + NPY_ITEM_REFCOUNT | NPY_NEEDS_PYAPI) + +#define NPY_OBJECT_DTYPE_FLAGS (NPY_LIST_PICKLE | NPY_USE_GETITEM | \ + NPY_ITEM_IS_POINTER | NPY_ITEM_REFCOUNT | \ + NPY_NEEDS_INIT | NPY_NEEDS_PYAPI) + +#define PyDataType_FLAGCHK(dtype, flag) \ + (((dtype)->flags & (flag)) == (flag)) + +#define PyDataType_REFCHK(dtype) \ + PyDataType_FLAGCHK(dtype, NPY_ITEM_REFCOUNT) + +typedef struct _PyArray_Descr { + PyObject_HEAD + /* + * the type object representing an + * instance of this type -- should not + * be two type_numbers with the same type + * object. + */ + PyTypeObject *typeobj; + /* kind for this type */ + char kind; + /* unique-character representing this type */ + char type; + /* + * '>' (big), '<' (little), '|' + * (not-applicable), or '=' (native). + */ + char byteorder; + /* flags describing data type */ + char flags; + /* number representing this type */ + int type_num; + /* element size (itemsize) for this type */ + int elsize; + /* alignment needed for this type */ + int alignment; + /* + * Non-NULL if this type is + * is an array (C-contiguous) + * of some other type + */ + struct _arr_descr *subarray; + /* + * The fields dictionary for this type + * For statically defined descr this + * is always Py_None + */ + PyObject *fields; + /* + * An ordered tuple of field names or NULL + * if no fields are defined + */ + PyObject *names; + /* + * a table of functions specific for each + * basic data descriptor + */ + PyArray_ArrFuncs *f; + /* Metadata about this dtype */ + PyObject *metadata; + /* + * Metadata specific to the C implementation + * of the particular dtype. This was added + * for NumPy 1.7.0. + */ + NpyAuxData *c_metadata; + /* Cached hash value (-1 if not yet computed). + * This was added for NumPy 2.0.0. + */ + npy_hash_t hash; +} PyArray_Descr; + +typedef struct _arr_descr { + PyArray_Descr *base; + PyObject *shape; /* a tuple */ +} PyArray_ArrayDescr; + +/* + * The main array object structure. + * + * It has been recommended to use the inline functions defined below + * (PyArray_DATA and friends) to access fields here for a number of + * releases. Direct access to the members themselves is deprecated. + * To ensure that your code does not use deprecated access, + * #define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION + * (or NPY_1_8_API_VERSION or higher as required). + */ +/* This struct will be moved to a private header in a future release */ +typedef struct tagPyArrayObject_fields { + PyObject_HEAD + /* Pointer to the raw data buffer */ + char *data; + /* The number of dimensions, also called 'ndim' */ + int nd; + /* The size in each dimension, also called 'shape' */ + npy_intp *dimensions; + /* + * Number of bytes to jump to get to the + * next element in each dimension + */ + npy_intp *strides; + /* + * This object is decref'd upon + * deletion of array. Except in the + * case of WRITEBACKIFCOPY which has + * special handling. + * + * For views it points to the original + * array, collapsed so no chains of + * views occur. + * + * For creation from buffer object it + * points to an object that should be + * decref'd on deletion + * + * For WRITEBACKIFCOPY flag this is an + * array to-be-updated upon calling + * PyArray_ResolveWritebackIfCopy + */ + PyObject *base; + /* Pointer to type structure */ + PyArray_Descr *descr; + /* Flags describing array -- see below */ + int flags; + /* For weak references */ + PyObject *weakreflist; + void *_buffer_info; /* private buffer info, tagged to allow warning */ +} PyArrayObject_fields; + +/* + * To hide the implementation details, we only expose + * the Python struct HEAD. + */ +#if !defined(NPY_NO_DEPRECATED_API) || \ + (NPY_NO_DEPRECATED_API < NPY_1_7_API_VERSION) +/* + * Can't put this in npy_deprecated_api.h like the others. + * PyArrayObject field access is deprecated as of NumPy 1.7. + */ +typedef PyArrayObject_fields PyArrayObject; +#else +typedef struct tagPyArrayObject { + PyObject_HEAD +} PyArrayObject; +#endif + +/* + * Removed 2020-Nov-25, NumPy 1.20 + * #define NPY_SIZEOF_PYARRAYOBJECT (sizeof(PyArrayObject_fields)) + * + * The above macro was removed as it gave a false sense of a stable ABI + * with respect to the structures size. If you require a runtime constant, + * you can use `PyArray_Type.tp_basicsize` instead. Otherwise, please + * see the PyArrayObject documentation or ask the NumPy developers for + * information on how to correctly replace the macro in a way that is + * compatible with multiple NumPy versions. + */ + + +/* Array Flags Object */ +typedef struct PyArrayFlagsObject { + PyObject_HEAD + PyObject *arr; + int flags; +} PyArrayFlagsObject; + +/* Mirrors buffer object to ptr */ + +typedef struct { + PyObject_HEAD + PyObject *base; + void *ptr; + npy_intp len; + int flags; +} PyArray_Chunk; + +typedef struct { + NPY_DATETIMEUNIT base; + int num; +} PyArray_DatetimeMetaData; + +typedef struct { + NpyAuxData base; + PyArray_DatetimeMetaData meta; +} PyArray_DatetimeDTypeMetaData; + +/* + * This structure contains an exploded view of a date-time value. + * NaT is represented by year == NPY_DATETIME_NAT. + */ +typedef struct { + npy_int64 year; + npy_int32 month, day, hour, min, sec, us, ps, as; +} npy_datetimestruct; + +/* This is not used internally. */ +typedef struct { + npy_int64 day; + npy_int32 sec, us, ps, as; +} npy_timedeltastruct; + +typedef int (PyArray_FinalizeFunc)(PyArrayObject *, PyObject *); + +/* + * Means c-style contiguous (last index varies the fastest). The data + * elements right after each other. + * + * This flag may be requested in constructor functions. + * This flag may be tested for in PyArray_FLAGS(arr). + */ +#define NPY_ARRAY_C_CONTIGUOUS 0x0001 + +/* + * Set if array is a contiguous Fortran array: the first index varies + * the fastest in memory (strides array is reverse of C-contiguous + * array) + * + * This flag may be requested in constructor functions. + * This flag may be tested for in PyArray_FLAGS(arr). + */ +#define NPY_ARRAY_F_CONTIGUOUS 0x0002 + +/* + * Note: all 0-d arrays are C_CONTIGUOUS and F_CONTIGUOUS. If a + * 1-d array is C_CONTIGUOUS it is also F_CONTIGUOUS. Arrays with + * more then one dimension can be C_CONTIGUOUS and F_CONTIGUOUS + * at the same time if they have either zero or one element. + * If NPY_RELAXED_STRIDES_CHECKING is set, a higher dimensional + * array is always C_CONTIGUOUS and F_CONTIGUOUS if it has zero elements + * and the array is contiguous if ndarray.squeeze() is contiguous. + * I.e. dimensions for which `ndarray.shape[dimension] == 1` are + * ignored. + */ + +/* + * If set, the array owns the data: it will be free'd when the array + * is deleted. + * + * This flag may be tested for in PyArray_FLAGS(arr). + */ +#define NPY_ARRAY_OWNDATA 0x0004 + +/* + * An array never has the next four set; they're only used as parameter + * flags to the various FromAny functions + * + * This flag may be requested in constructor functions. + */ + +/* Cause a cast to occur regardless of whether or not it is safe. */ +#define NPY_ARRAY_FORCECAST 0x0010 + +/* + * Always copy the array. Returned arrays are always CONTIGUOUS, + * ALIGNED, and WRITEABLE. + * + * This flag may be requested in constructor functions. + */ +#define NPY_ARRAY_ENSURECOPY 0x0020 + +/* + * Make sure the returned array is a base-class ndarray + * + * This flag may be requested in constructor functions. + */ +#define NPY_ARRAY_ENSUREARRAY 0x0040 + +#if defined(NPY_INTERNAL_BUILD) && NPY_INTERNAL_BUILD + /* + * Dual use of the ENSUREARRAY flag, to indicate that this was converted + * from a python float, int, or complex. + * An array using this flag must be a temporary array that can never + * leave the C internals of NumPy. Even if it does, ENSUREARRAY is + * absolutely safe to abuse, since it already is a base class array :). + */ + #define _NPY_ARRAY_WAS_PYSCALAR 0x0040 +#endif /* NPY_INTERNAL_BUILD */ + +/* + * Make sure that the strides are in units of the element size Needed + * for some operations with record-arrays. + * + * This flag may be requested in constructor functions. + */ +#define NPY_ARRAY_ELEMENTSTRIDES 0x0080 + +/* + * Array data is aligned on the appropriate memory address for the type + * stored according to how the compiler would align things (e.g., an + * array of integers (4 bytes each) starts on a memory address that's + * a multiple of 4) + * + * This flag may be requested in constructor functions. + * This flag may be tested for in PyArray_FLAGS(arr). + */ +#define NPY_ARRAY_ALIGNED 0x0100 + +/* + * Array data has the native endianness + * + * This flag may be requested in constructor functions. + */ +#define NPY_ARRAY_NOTSWAPPED 0x0200 + +/* + * Array data is writeable + * + * This flag may be requested in constructor functions. + * This flag may be tested for in PyArray_FLAGS(arr). + */ +#define NPY_ARRAY_WRITEABLE 0x0400 + +/* + * If this flag is set, then base contains a pointer to an array of + * the same size that should be updated with the current contents of + * this array when PyArray_ResolveWritebackIfCopy is called. + * + * This flag may be requested in constructor functions. + * This flag may be tested for in PyArray_FLAGS(arr). + */ +#define NPY_ARRAY_UPDATEIFCOPY 0x1000 /* Deprecated in 1.14 */ +#define NPY_ARRAY_WRITEBACKIFCOPY 0x2000 + +/* + * NOTE: there are also internal flags defined in multiarray/arrayobject.h, + * which start at bit 31 and work down. + */ + +#define NPY_ARRAY_BEHAVED (NPY_ARRAY_ALIGNED | \ + NPY_ARRAY_WRITEABLE) +#define NPY_ARRAY_BEHAVED_NS (NPY_ARRAY_ALIGNED | \ + NPY_ARRAY_WRITEABLE | \ + NPY_ARRAY_NOTSWAPPED) +#define NPY_ARRAY_CARRAY (NPY_ARRAY_C_CONTIGUOUS | \ + NPY_ARRAY_BEHAVED) +#define NPY_ARRAY_CARRAY_RO (NPY_ARRAY_C_CONTIGUOUS | \ + NPY_ARRAY_ALIGNED) +#define NPY_ARRAY_FARRAY (NPY_ARRAY_F_CONTIGUOUS | \ + NPY_ARRAY_BEHAVED) +#define NPY_ARRAY_FARRAY_RO (NPY_ARRAY_F_CONTIGUOUS | \ + NPY_ARRAY_ALIGNED) +#define NPY_ARRAY_DEFAULT (NPY_ARRAY_CARRAY) +#define NPY_ARRAY_IN_ARRAY (NPY_ARRAY_CARRAY_RO) +#define NPY_ARRAY_OUT_ARRAY (NPY_ARRAY_CARRAY) +#define NPY_ARRAY_INOUT_ARRAY (NPY_ARRAY_CARRAY | \ + NPY_ARRAY_UPDATEIFCOPY) +#define NPY_ARRAY_INOUT_ARRAY2 (NPY_ARRAY_CARRAY | \ + NPY_ARRAY_WRITEBACKIFCOPY) +#define NPY_ARRAY_IN_FARRAY (NPY_ARRAY_FARRAY_RO) +#define NPY_ARRAY_OUT_FARRAY (NPY_ARRAY_FARRAY) +#define NPY_ARRAY_INOUT_FARRAY (NPY_ARRAY_FARRAY | \ + NPY_ARRAY_UPDATEIFCOPY) +#define NPY_ARRAY_INOUT_FARRAY2 (NPY_ARRAY_FARRAY | \ + NPY_ARRAY_WRITEBACKIFCOPY) + +#define NPY_ARRAY_UPDATE_ALL (NPY_ARRAY_C_CONTIGUOUS | \ + NPY_ARRAY_F_CONTIGUOUS | \ + NPY_ARRAY_ALIGNED) + +/* This flag is for the array interface, not PyArrayObject */ +#define NPY_ARR_HAS_DESCR 0x0800 + + + + +/* + * Size of internal buffers used for alignment Make BUFSIZE a multiple + * of sizeof(npy_cdouble) -- usually 16 so that ufunc buffers are aligned + */ +#define NPY_MIN_BUFSIZE ((int)sizeof(npy_cdouble)) +#define NPY_MAX_BUFSIZE (((int)sizeof(npy_cdouble))*1000000) +#define NPY_BUFSIZE 8192 +/* buffer stress test size: */ +/*#define NPY_BUFSIZE 17*/ + +#define PyArray_MAX(a,b) (((a)>(b))?(a):(b)) +#define PyArray_MIN(a,b) (((a)<(b))?(a):(b)) +#define PyArray_CLT(p,q) ((((p).real==(q).real) ? ((p).imag < (q).imag) : \ + ((p).real < (q).real))) +#define PyArray_CGT(p,q) ((((p).real==(q).real) ? ((p).imag > (q).imag) : \ + ((p).real > (q).real))) +#define PyArray_CLE(p,q) ((((p).real==(q).real) ? ((p).imag <= (q).imag) : \ + ((p).real <= (q).real))) +#define PyArray_CGE(p,q) ((((p).real==(q).real) ? ((p).imag >= (q).imag) : \ + ((p).real >= (q).real))) +#define PyArray_CEQ(p,q) (((p).real==(q).real) && ((p).imag == (q).imag)) +#define PyArray_CNE(p,q) (((p).real!=(q).real) || ((p).imag != (q).imag)) + +/* + * C API: consists of Macros and functions. The MACROS are defined + * here. + */ + + +#define PyArray_ISCONTIGUOUS(m) PyArray_CHKFLAGS((m), NPY_ARRAY_C_CONTIGUOUS) +#define PyArray_ISWRITEABLE(m) PyArray_CHKFLAGS((m), NPY_ARRAY_WRITEABLE) +#define PyArray_ISALIGNED(m) PyArray_CHKFLAGS((m), NPY_ARRAY_ALIGNED) + +#define PyArray_IS_C_CONTIGUOUS(m) PyArray_CHKFLAGS((m), NPY_ARRAY_C_CONTIGUOUS) +#define PyArray_IS_F_CONTIGUOUS(m) PyArray_CHKFLAGS((m), NPY_ARRAY_F_CONTIGUOUS) + +/* the variable is used in some places, so always define it */ +#define NPY_BEGIN_THREADS_DEF PyThreadState *_save=NULL; +#if NPY_ALLOW_THREADS +#define NPY_BEGIN_ALLOW_THREADS Py_BEGIN_ALLOW_THREADS +#define NPY_END_ALLOW_THREADS Py_END_ALLOW_THREADS +#define NPY_BEGIN_THREADS do {_save = PyEval_SaveThread();} while (0); +#define NPY_END_THREADS do { if (_save) \ + { PyEval_RestoreThread(_save); _save = NULL;} } while (0); +#define NPY_BEGIN_THREADS_THRESHOLDED(loop_size) do { if ((loop_size) > 500) \ + { _save = PyEval_SaveThread();} } while (0); + +#define NPY_BEGIN_THREADS_DESCR(dtype) \ + do {if (!(PyDataType_FLAGCHK((dtype), NPY_NEEDS_PYAPI))) \ + NPY_BEGIN_THREADS;} while (0); + +#define NPY_END_THREADS_DESCR(dtype) \ + do {if (!(PyDataType_FLAGCHK((dtype), NPY_NEEDS_PYAPI))) \ + NPY_END_THREADS; } while (0); + +#define NPY_ALLOW_C_API_DEF PyGILState_STATE __save__; +#define NPY_ALLOW_C_API do {__save__ = PyGILState_Ensure();} while (0); +#define NPY_DISABLE_C_API do {PyGILState_Release(__save__);} while (0); +#else +#define NPY_BEGIN_ALLOW_THREADS +#define NPY_END_ALLOW_THREADS +#define NPY_BEGIN_THREADS +#define NPY_END_THREADS +#define NPY_BEGIN_THREADS_THRESHOLDED(loop_size) +#define NPY_BEGIN_THREADS_DESCR(dtype) +#define NPY_END_THREADS_DESCR(dtype) +#define NPY_ALLOW_C_API_DEF +#define NPY_ALLOW_C_API +#define NPY_DISABLE_C_API +#endif + +/********************************** + * The nditer object, added in 1.6 + **********************************/ + +/* The actual structure of the iterator is an internal detail */ +typedef struct NpyIter_InternalOnly NpyIter; + +/* Iterator function pointers that may be specialized */ +typedef int (NpyIter_IterNextFunc)(NpyIter *iter); +typedef void (NpyIter_GetMultiIndexFunc)(NpyIter *iter, + npy_intp *outcoords); + +/*** Global flags that may be passed to the iterator constructors ***/ + +/* Track an index representing C order */ +#define NPY_ITER_C_INDEX 0x00000001 +/* Track an index representing Fortran order */ +#define NPY_ITER_F_INDEX 0x00000002 +/* Track a multi-index */ +#define NPY_ITER_MULTI_INDEX 0x00000004 +/* User code external to the iterator does the 1-dimensional innermost loop */ +#define NPY_ITER_EXTERNAL_LOOP 0x00000008 +/* Convert all the operands to a common data type */ +#define NPY_ITER_COMMON_DTYPE 0x00000010 +/* Operands may hold references, requiring API access during iteration */ +#define NPY_ITER_REFS_OK 0x00000020 +/* Zero-sized operands should be permitted, iteration checks IterSize for 0 */ +#define NPY_ITER_ZEROSIZE_OK 0x00000040 +/* Permits reductions (size-0 stride with dimension size > 1) */ +#define NPY_ITER_REDUCE_OK 0x00000080 +/* Enables sub-range iteration */ +#define NPY_ITER_RANGED 0x00000100 +/* Enables buffering */ +#define NPY_ITER_BUFFERED 0x00000200 +/* When buffering is enabled, grows the inner loop if possible */ +#define NPY_ITER_GROWINNER 0x00000400 +/* Delay allocation of buffers until first Reset* call */ +#define NPY_ITER_DELAY_BUFALLOC 0x00000800 +/* When NPY_KEEPORDER is specified, disable reversing negative-stride axes */ +#define NPY_ITER_DONT_NEGATE_STRIDES 0x00001000 +/* + * If output operands overlap with other operands (based on heuristics that + * has false positives but no false negatives), make temporary copies to + * eliminate overlap. + */ +#define NPY_ITER_COPY_IF_OVERLAP 0x00002000 + +/*** Per-operand flags that may be passed to the iterator constructors ***/ + +/* The operand will be read from and written to */ +#define NPY_ITER_READWRITE 0x00010000 +/* The operand will only be read from */ +#define NPY_ITER_READONLY 0x00020000 +/* The operand will only be written to */ +#define NPY_ITER_WRITEONLY 0x00040000 +/* The operand's data must be in native byte order */ +#define NPY_ITER_NBO 0x00080000 +/* The operand's data must be aligned */ +#define NPY_ITER_ALIGNED 0x00100000 +/* The operand's data must be contiguous (within the inner loop) */ +#define NPY_ITER_CONTIG 0x00200000 +/* The operand may be copied to satisfy requirements */ +#define NPY_ITER_COPY 0x00400000 +/* The operand may be copied with WRITEBACKIFCOPY to satisfy requirements */ +#define NPY_ITER_UPDATEIFCOPY 0x00800000 +/* Allocate the operand if it is NULL */ +#define NPY_ITER_ALLOCATE 0x01000000 +/* If an operand is allocated, don't use any subtype */ +#define NPY_ITER_NO_SUBTYPE 0x02000000 +/* This is a virtual array slot, operand is NULL but temporary data is there */ +#define NPY_ITER_VIRTUAL 0x04000000 +/* Require that the dimension match the iterator dimensions exactly */ +#define NPY_ITER_NO_BROADCAST 0x08000000 +/* A mask is being used on this array, affects buffer -> array copy */ +#define NPY_ITER_WRITEMASKED 0x10000000 +/* This array is the mask for all WRITEMASKED operands */ +#define NPY_ITER_ARRAYMASK 0x20000000 +/* Assume iterator order data access for COPY_IF_OVERLAP */ +#define NPY_ITER_OVERLAP_ASSUME_ELEMENTWISE 0x40000000 + +#define NPY_ITER_GLOBAL_FLAGS 0x0000ffff +#define NPY_ITER_PER_OP_FLAGS 0xffff0000 + + +/***************************** + * Basic iterator object + *****************************/ + +/* FWD declaration */ +typedef struct PyArrayIterObject_tag PyArrayIterObject; + +/* + * type of the function which translates a set of coordinates to a + * pointer to the data + */ +typedef char* (*npy_iter_get_dataptr_t)( + PyArrayIterObject* iter, const npy_intp*); + +struct PyArrayIterObject_tag { + PyObject_HEAD + int nd_m1; /* number of dimensions - 1 */ + npy_intp index, size; + npy_intp coordinates[NPY_MAXDIMS];/* N-dimensional loop */ + npy_intp dims_m1[NPY_MAXDIMS]; /* ao->dimensions - 1 */ + npy_intp strides[NPY_MAXDIMS]; /* ao->strides or fake */ + npy_intp backstrides[NPY_MAXDIMS];/* how far to jump back */ + npy_intp factors[NPY_MAXDIMS]; /* shape factors */ + PyArrayObject *ao; + char *dataptr; /* pointer to current item*/ + npy_bool contiguous; + + npy_intp bounds[NPY_MAXDIMS][2]; + npy_intp limits[NPY_MAXDIMS][2]; + npy_intp limits_sizes[NPY_MAXDIMS]; + npy_iter_get_dataptr_t translate; +} ; + + +/* Iterator API */ +#define PyArrayIter_Check(op) PyObject_TypeCheck((op), &PyArrayIter_Type) + +#define _PyAIT(it) ((PyArrayIterObject *)(it)) +#define PyArray_ITER_RESET(it) do { \ + _PyAIT(it)->index = 0; \ + _PyAIT(it)->dataptr = PyArray_BYTES(_PyAIT(it)->ao); \ + memset(_PyAIT(it)->coordinates, 0, \ + (_PyAIT(it)->nd_m1+1)*sizeof(npy_intp)); \ +} while (0) + +#define _PyArray_ITER_NEXT1(it) do { \ + (it)->dataptr += _PyAIT(it)->strides[0]; \ + (it)->coordinates[0]++; \ +} while (0) + +#define _PyArray_ITER_NEXT2(it) do { \ + if ((it)->coordinates[1] < (it)->dims_m1[1]) { \ + (it)->coordinates[1]++; \ + (it)->dataptr += (it)->strides[1]; \ + } \ + else { \ + (it)->coordinates[1] = 0; \ + (it)->coordinates[0]++; \ + (it)->dataptr += (it)->strides[0] - \ + (it)->backstrides[1]; \ + } \ +} while (0) + +#define PyArray_ITER_NEXT(it) do { \ + _PyAIT(it)->index++; \ + if (_PyAIT(it)->nd_m1 == 0) { \ + _PyArray_ITER_NEXT1(_PyAIT(it)); \ + } \ + else if (_PyAIT(it)->contiguous) \ + _PyAIT(it)->dataptr += PyArray_DESCR(_PyAIT(it)->ao)->elsize; \ + else if (_PyAIT(it)->nd_m1 == 1) { \ + _PyArray_ITER_NEXT2(_PyAIT(it)); \ + } \ + else { \ + int __npy_i; \ + for (__npy_i=_PyAIT(it)->nd_m1; __npy_i >= 0; __npy_i--) { \ + if (_PyAIT(it)->coordinates[__npy_i] < \ + _PyAIT(it)->dims_m1[__npy_i]) { \ + _PyAIT(it)->coordinates[__npy_i]++; \ + _PyAIT(it)->dataptr += \ + _PyAIT(it)->strides[__npy_i]; \ + break; \ + } \ + else { \ + _PyAIT(it)->coordinates[__npy_i] = 0; \ + _PyAIT(it)->dataptr -= \ + _PyAIT(it)->backstrides[__npy_i]; \ + } \ + } \ + } \ +} while (0) + +#define PyArray_ITER_GOTO(it, destination) do { \ + int __npy_i; \ + _PyAIT(it)->index = 0; \ + _PyAIT(it)->dataptr = PyArray_BYTES(_PyAIT(it)->ao); \ + for (__npy_i = _PyAIT(it)->nd_m1; __npy_i>=0; __npy_i--) { \ + if (destination[__npy_i] < 0) { \ + destination[__npy_i] += \ + _PyAIT(it)->dims_m1[__npy_i]+1; \ + } \ + _PyAIT(it)->dataptr += destination[__npy_i] * \ + _PyAIT(it)->strides[__npy_i]; \ + _PyAIT(it)->coordinates[__npy_i] = \ + destination[__npy_i]; \ + _PyAIT(it)->index += destination[__npy_i] * \ + ( __npy_i==_PyAIT(it)->nd_m1 ? 1 : \ + _PyAIT(it)->dims_m1[__npy_i+1]+1) ; \ + } \ +} while (0) + +#define PyArray_ITER_GOTO1D(it, ind) do { \ + int __npy_i; \ + npy_intp __npy_ind = (npy_intp)(ind); \ + if (__npy_ind < 0) __npy_ind += _PyAIT(it)->size; \ + _PyAIT(it)->index = __npy_ind; \ + if (_PyAIT(it)->nd_m1 == 0) { \ + _PyAIT(it)->dataptr = PyArray_BYTES(_PyAIT(it)->ao) + \ + __npy_ind * _PyAIT(it)->strides[0]; \ + } \ + else if (_PyAIT(it)->contiguous) \ + _PyAIT(it)->dataptr = PyArray_BYTES(_PyAIT(it)->ao) + \ + __npy_ind * PyArray_DESCR(_PyAIT(it)->ao)->elsize; \ + else { \ + _PyAIT(it)->dataptr = PyArray_BYTES(_PyAIT(it)->ao); \ + for (__npy_i = 0; __npy_i<=_PyAIT(it)->nd_m1; \ + __npy_i++) { \ + _PyAIT(it)->dataptr += \ + (__npy_ind / _PyAIT(it)->factors[__npy_i]) \ + * _PyAIT(it)->strides[__npy_i]; \ + __npy_ind %= _PyAIT(it)->factors[__npy_i]; \ + } \ + } \ +} while (0) + +#define PyArray_ITER_DATA(it) ((void *)(_PyAIT(it)->dataptr)) + +#define PyArray_ITER_NOTDONE(it) (_PyAIT(it)->index < _PyAIT(it)->size) + + +/* + * Any object passed to PyArray_Broadcast must be binary compatible + * with this structure. + */ + +typedef struct { + PyObject_HEAD + int numiter; /* number of iters */ + npy_intp size; /* broadcasted size */ + npy_intp index; /* current index */ + int nd; /* number of dims */ + npy_intp dimensions[NPY_MAXDIMS]; /* dimensions */ + PyArrayIterObject *iters[NPY_MAXARGS]; /* iterators */ +} PyArrayMultiIterObject; + +#define _PyMIT(m) ((PyArrayMultiIterObject *)(m)) +#define PyArray_MultiIter_RESET(multi) do { \ + int __npy_mi; \ + _PyMIT(multi)->index = 0; \ + for (__npy_mi=0; __npy_mi < _PyMIT(multi)->numiter; __npy_mi++) { \ + PyArray_ITER_RESET(_PyMIT(multi)->iters[__npy_mi]); \ + } \ +} while (0) + +#define PyArray_MultiIter_NEXT(multi) do { \ + int __npy_mi; \ + _PyMIT(multi)->index++; \ + for (__npy_mi=0; __npy_mi < _PyMIT(multi)->numiter; __npy_mi++) { \ + PyArray_ITER_NEXT(_PyMIT(multi)->iters[__npy_mi]); \ + } \ +} while (0) + +#define PyArray_MultiIter_GOTO(multi, dest) do { \ + int __npy_mi; \ + for (__npy_mi=0; __npy_mi < _PyMIT(multi)->numiter; __npy_mi++) { \ + PyArray_ITER_GOTO(_PyMIT(multi)->iters[__npy_mi], dest); \ + } \ + _PyMIT(multi)->index = _PyMIT(multi)->iters[0]->index; \ +} while (0) + +#define PyArray_MultiIter_GOTO1D(multi, ind) do { \ + int __npy_mi; \ + for (__npy_mi=0; __npy_mi < _PyMIT(multi)->numiter; __npy_mi++) { \ + PyArray_ITER_GOTO1D(_PyMIT(multi)->iters[__npy_mi], ind); \ + } \ + _PyMIT(multi)->index = _PyMIT(multi)->iters[0]->index; \ +} while (0) + +#define PyArray_MultiIter_DATA(multi, i) \ + ((void *)(_PyMIT(multi)->iters[i]->dataptr)) + +#define PyArray_MultiIter_NEXTi(multi, i) \ + PyArray_ITER_NEXT(_PyMIT(multi)->iters[i]) + +#define PyArray_MultiIter_NOTDONE(multi) \ + (_PyMIT(multi)->index < _PyMIT(multi)->size) + + +/* + * Store the information needed for fancy-indexing over an array. The + * fields are slightly unordered to keep consec, dataptr and subspace + * where they were originally. + */ +typedef struct { + PyObject_HEAD + /* + * Multi-iterator portion --- needs to be present in this + * order to work with PyArray_Broadcast + */ + + int numiter; /* number of index-array + iterators */ + npy_intp size; /* size of broadcasted + result */ + npy_intp index; /* current index */ + int nd; /* number of dims */ + npy_intp dimensions[NPY_MAXDIMS]; /* dimensions */ + NpyIter *outer; /* index objects + iterator */ + void *unused[NPY_MAXDIMS - 2]; + PyArrayObject *array; + /* Flat iterator for the indexed array. For compatibility solely. */ + PyArrayIterObject *ait; + + /* + * Subspace array. For binary compatibility (was an iterator, + * but only the check for NULL should be used). + */ + PyArrayObject *subspace; + + /* + * if subspace iteration, then this is the array of axes in + * the underlying array represented by the index objects + */ + int iteraxes[NPY_MAXDIMS]; + npy_intp fancy_strides[NPY_MAXDIMS]; + + /* pointer when all fancy indices are 0 */ + char *baseoffset; + + /* + * after binding consec denotes at which axis the fancy axes + * are inserted. + */ + int consec; + char *dataptr; + + int nd_fancy; + npy_intp fancy_dims[NPY_MAXDIMS]; + + /* Whether the iterator (any of the iterators) requires API */ + int needs_api; + + /* + * Extra op information. + */ + PyArrayObject *extra_op; + PyArray_Descr *extra_op_dtype; /* desired dtype */ + npy_uint32 *extra_op_flags; /* Iterator flags */ + + NpyIter *extra_op_iter; + NpyIter_IterNextFunc *extra_op_next; + char **extra_op_ptrs; + + /* + * Information about the iteration state. + */ + NpyIter_IterNextFunc *outer_next; + char **outer_ptrs; + npy_intp *outer_strides; + + /* + * Information about the subspace iterator. + */ + NpyIter *subspace_iter; + NpyIter_IterNextFunc *subspace_next; + char **subspace_ptrs; + npy_intp *subspace_strides; + + /* Count for the external loop (which ever it is) for API iteration */ + npy_intp iter_count; + +} PyArrayMapIterObject; + +enum { + NPY_NEIGHBORHOOD_ITER_ZERO_PADDING, + NPY_NEIGHBORHOOD_ITER_ONE_PADDING, + NPY_NEIGHBORHOOD_ITER_CONSTANT_PADDING, + NPY_NEIGHBORHOOD_ITER_CIRCULAR_PADDING, + NPY_NEIGHBORHOOD_ITER_MIRROR_PADDING +}; + +typedef struct { + PyObject_HEAD + + /* + * PyArrayIterObject part: keep this in this exact order + */ + int nd_m1; /* number of dimensions - 1 */ + npy_intp index, size; + npy_intp coordinates[NPY_MAXDIMS];/* N-dimensional loop */ + npy_intp dims_m1[NPY_MAXDIMS]; /* ao->dimensions - 1 */ + npy_intp strides[NPY_MAXDIMS]; /* ao->strides or fake */ + npy_intp backstrides[NPY_MAXDIMS];/* how far to jump back */ + npy_intp factors[NPY_MAXDIMS]; /* shape factors */ + PyArrayObject *ao; + char *dataptr; /* pointer to current item*/ + npy_bool contiguous; + + npy_intp bounds[NPY_MAXDIMS][2]; + npy_intp limits[NPY_MAXDIMS][2]; + npy_intp limits_sizes[NPY_MAXDIMS]; + npy_iter_get_dataptr_t translate; + + /* + * New members + */ + npy_intp nd; + + /* Dimensions is the dimension of the array */ + npy_intp dimensions[NPY_MAXDIMS]; + + /* + * Neighborhood points coordinates are computed relatively to the + * point pointed by _internal_iter + */ + PyArrayIterObject* _internal_iter; + /* + * To keep a reference to the representation of the constant value + * for constant padding + */ + char* constant; + + int mode; +} PyArrayNeighborhoodIterObject; + +/* + * Neighborhood iterator API + */ + +/* General: those work for any mode */ +static NPY_INLINE int +PyArrayNeighborhoodIter_Reset(PyArrayNeighborhoodIterObject* iter); +static NPY_INLINE int +PyArrayNeighborhoodIter_Next(PyArrayNeighborhoodIterObject* iter); +#if 0 +static NPY_INLINE int +PyArrayNeighborhoodIter_Next2D(PyArrayNeighborhoodIterObject* iter); +#endif + +/* + * Include inline implementations - functions defined there are not + * considered public API + */ +#define _NPY_INCLUDE_NEIGHBORHOOD_IMP +#include "_neighborhood_iterator_imp.h" +#undef _NPY_INCLUDE_NEIGHBORHOOD_IMP + +/* The default array type */ +#define NPY_DEFAULT_TYPE NPY_DOUBLE + +/* + * All sorts of useful ways to look into a PyArrayObject. It is recommended + * to use PyArrayObject * objects instead of always casting from PyObject *, + * for improved type checking. + * + * In many cases here the macro versions of the accessors are deprecated, + * but can't be immediately changed to inline functions because the + * preexisting macros accept PyObject * and do automatic casts. Inline + * functions accepting PyArrayObject * provides for some compile-time + * checking of correctness when working with these objects in C. + */ + +#define PyArray_ISONESEGMENT(m) (PyArray_CHKFLAGS(m, NPY_ARRAY_C_CONTIGUOUS) || \ + PyArray_CHKFLAGS(m, NPY_ARRAY_F_CONTIGUOUS)) + +#define PyArray_ISFORTRAN(m) (PyArray_CHKFLAGS(m, NPY_ARRAY_F_CONTIGUOUS) && \ + (!PyArray_CHKFLAGS(m, NPY_ARRAY_C_CONTIGUOUS))) + +#define PyArray_FORTRAN_IF(m) ((PyArray_CHKFLAGS(m, NPY_ARRAY_F_CONTIGUOUS) ? \ + NPY_ARRAY_F_CONTIGUOUS : 0)) + +#if (defined(NPY_NO_DEPRECATED_API) && (NPY_1_7_API_VERSION <= NPY_NO_DEPRECATED_API)) +/* + * Changing access macros into functions, to allow for future hiding + * of the internal memory layout. This later hiding will allow the 2.x series + * to change the internal representation of arrays without affecting + * ABI compatibility. + */ + +static NPY_INLINE int +PyArray_NDIM(const PyArrayObject *arr) +{ + return ((PyArrayObject_fields *)arr)->nd; +} + +static NPY_INLINE void * +PyArray_DATA(PyArrayObject *arr) +{ + return ((PyArrayObject_fields *)arr)->data; +} + +static NPY_INLINE char * +PyArray_BYTES(PyArrayObject *arr) +{ + return ((PyArrayObject_fields *)arr)->data; +} + +static NPY_INLINE npy_intp * +PyArray_DIMS(PyArrayObject *arr) +{ + return ((PyArrayObject_fields *)arr)->dimensions; +} + +static NPY_INLINE npy_intp * +PyArray_STRIDES(PyArrayObject *arr) +{ + return ((PyArrayObject_fields *)arr)->strides; +} + +static NPY_INLINE npy_intp +PyArray_DIM(const PyArrayObject *arr, int idim) +{ + return ((PyArrayObject_fields *)arr)->dimensions[idim]; +} + +static NPY_INLINE npy_intp +PyArray_STRIDE(const PyArrayObject *arr, int istride) +{ + return ((PyArrayObject_fields *)arr)->strides[istride]; +} + +static NPY_INLINE NPY_RETURNS_BORROWED_REF PyObject * +PyArray_BASE(PyArrayObject *arr) +{ + return ((PyArrayObject_fields *)arr)->base; +} + +static NPY_INLINE NPY_RETURNS_BORROWED_REF PyArray_Descr * +PyArray_DESCR(PyArrayObject *arr) +{ + return ((PyArrayObject_fields *)arr)->descr; +} + +static NPY_INLINE int +PyArray_FLAGS(const PyArrayObject *arr) +{ + return ((PyArrayObject_fields *)arr)->flags; +} + +static NPY_INLINE npy_intp +PyArray_ITEMSIZE(const PyArrayObject *arr) +{ + return ((PyArrayObject_fields *)arr)->descr->elsize; +} + +static NPY_INLINE int +PyArray_TYPE(const PyArrayObject *arr) +{ + return ((PyArrayObject_fields *)arr)->descr->type_num; +} + +static NPY_INLINE int +PyArray_CHKFLAGS(const PyArrayObject *arr, int flags) +{ + return (PyArray_FLAGS(arr) & flags) == flags; +} + +static NPY_INLINE PyObject * +PyArray_GETITEM(const PyArrayObject *arr, const char *itemptr) +{ + return ((PyArrayObject_fields *)arr)->descr->f->getitem( + (void *)itemptr, (PyArrayObject *)arr); +} + +/* + * SETITEM should only be used if it is known that the value is a scalar + * and of a type understood by the arrays dtype. + * Use `PyArray_Pack` if the value may be of a different dtype. + */ +static NPY_INLINE int +PyArray_SETITEM(PyArrayObject *arr, char *itemptr, PyObject *v) +{ + return ((PyArrayObject_fields *)arr)->descr->f->setitem(v, itemptr, arr); +} + +#else + +/* These macros are deprecated as of NumPy 1.7. */ +#define PyArray_NDIM(obj) (((PyArrayObject_fields *)(obj))->nd) +#define PyArray_BYTES(obj) (((PyArrayObject_fields *)(obj))->data) +#define PyArray_DATA(obj) ((void *)((PyArrayObject_fields *)(obj))->data) +#define PyArray_DIMS(obj) (((PyArrayObject_fields *)(obj))->dimensions) +#define PyArray_STRIDES(obj) (((PyArrayObject_fields *)(obj))->strides) +#define PyArray_DIM(obj,n) (PyArray_DIMS(obj)[n]) +#define PyArray_STRIDE(obj,n) (PyArray_STRIDES(obj)[n]) +#define PyArray_BASE(obj) (((PyArrayObject_fields *)(obj))->base) +#define PyArray_DESCR(obj) (((PyArrayObject_fields *)(obj))->descr) +#define PyArray_FLAGS(obj) (((PyArrayObject_fields *)(obj))->flags) +#define PyArray_CHKFLAGS(m, FLAGS) \ + ((((PyArrayObject_fields *)(m))->flags & (FLAGS)) == (FLAGS)) +#define PyArray_ITEMSIZE(obj) \ + (((PyArrayObject_fields *)(obj))->descr->elsize) +#define PyArray_TYPE(obj) \ + (((PyArrayObject_fields *)(obj))->descr->type_num) +#define PyArray_GETITEM(obj,itemptr) \ + PyArray_DESCR(obj)->f->getitem((char *)(itemptr), \ + (PyArrayObject *)(obj)) + +#define PyArray_SETITEM(obj,itemptr,v) \ + PyArray_DESCR(obj)->f->setitem((PyObject *)(v), \ + (char *)(itemptr), \ + (PyArrayObject *)(obj)) +#endif + +static NPY_INLINE PyArray_Descr * +PyArray_DTYPE(PyArrayObject *arr) +{ + return ((PyArrayObject_fields *)arr)->descr; +} + +static NPY_INLINE npy_intp * +PyArray_SHAPE(PyArrayObject *arr) +{ + return ((PyArrayObject_fields *)arr)->dimensions; +} + +/* + * Enables the specified array flags. Does no checking, + * assumes you know what you're doing. + */ +static NPY_INLINE void +PyArray_ENABLEFLAGS(PyArrayObject *arr, int flags) +{ + ((PyArrayObject_fields *)arr)->flags |= flags; +} + +/* + * Clears the specified array flags. Does no checking, + * assumes you know what you're doing. + */ +static NPY_INLINE void +PyArray_CLEARFLAGS(PyArrayObject *arr, int flags) +{ + ((PyArrayObject_fields *)arr)->flags &= ~flags; +} + +#define PyTypeNum_ISBOOL(type) ((type) == NPY_BOOL) + +#define PyTypeNum_ISUNSIGNED(type) (((type) == NPY_UBYTE) || \ + ((type) == NPY_USHORT) || \ + ((type) == NPY_UINT) || \ + ((type) == NPY_ULONG) || \ + ((type) == NPY_ULONGLONG)) + +#define PyTypeNum_ISSIGNED(type) (((type) == NPY_BYTE) || \ + ((type) == NPY_SHORT) || \ + ((type) == NPY_INT) || \ + ((type) == NPY_LONG) || \ + ((type) == NPY_LONGLONG)) + +#define PyTypeNum_ISINTEGER(type) (((type) >= NPY_BYTE) && \ + ((type) <= NPY_ULONGLONG)) + +#define PyTypeNum_ISFLOAT(type) ((((type) >= NPY_FLOAT) && \ + ((type) <= NPY_LONGDOUBLE)) || \ + ((type) == NPY_HALF)) + +#define PyTypeNum_ISNUMBER(type) (((type) <= NPY_CLONGDOUBLE) || \ + ((type) == NPY_HALF)) + +#define PyTypeNum_ISSTRING(type) (((type) == NPY_STRING) || \ + ((type) == NPY_UNICODE)) + +#define PyTypeNum_ISCOMPLEX(type) (((type) >= NPY_CFLOAT) && \ + ((type) <= NPY_CLONGDOUBLE)) + +#define PyTypeNum_ISPYTHON(type) (((type) == NPY_LONG) || \ + ((type) == NPY_DOUBLE) || \ + ((type) == NPY_CDOUBLE) || \ + ((type) == NPY_BOOL) || \ + ((type) == NPY_OBJECT )) + +#define PyTypeNum_ISFLEXIBLE(type) (((type) >=NPY_STRING) && \ + ((type) <=NPY_VOID)) + +#define PyTypeNum_ISDATETIME(type) (((type) >=NPY_DATETIME) && \ + ((type) <=NPY_TIMEDELTA)) + +#define PyTypeNum_ISUSERDEF(type) (((type) >= NPY_USERDEF) && \ + ((type) < NPY_USERDEF+ \ + NPY_NUMUSERTYPES)) + +#define PyTypeNum_ISEXTENDED(type) (PyTypeNum_ISFLEXIBLE(type) || \ + PyTypeNum_ISUSERDEF(type)) + +#define PyTypeNum_ISOBJECT(type) ((type) == NPY_OBJECT) + + +#define PyDataType_ISBOOL(obj) PyTypeNum_ISBOOL(((PyArray_Descr*)(obj))->type_num) +#define PyDataType_ISUNSIGNED(obj) PyTypeNum_ISUNSIGNED(((PyArray_Descr*)(obj))->type_num) +#define PyDataType_ISSIGNED(obj) PyTypeNum_ISSIGNED(((PyArray_Descr*)(obj))->type_num) +#define PyDataType_ISINTEGER(obj) PyTypeNum_ISINTEGER(((PyArray_Descr*)(obj))->type_num ) +#define PyDataType_ISFLOAT(obj) PyTypeNum_ISFLOAT(((PyArray_Descr*)(obj))->type_num) +#define PyDataType_ISNUMBER(obj) PyTypeNum_ISNUMBER(((PyArray_Descr*)(obj))->type_num) +#define PyDataType_ISSTRING(obj) PyTypeNum_ISSTRING(((PyArray_Descr*)(obj))->type_num) +#define PyDataType_ISCOMPLEX(obj) PyTypeNum_ISCOMPLEX(((PyArray_Descr*)(obj))->type_num) +#define PyDataType_ISPYTHON(obj) PyTypeNum_ISPYTHON(((PyArray_Descr*)(obj))->type_num) +#define PyDataType_ISFLEXIBLE(obj) PyTypeNum_ISFLEXIBLE(((PyArray_Descr*)(obj))->type_num) +#define PyDataType_ISDATETIME(obj) PyTypeNum_ISDATETIME(((PyArray_Descr*)(obj))->type_num) +#define PyDataType_ISUSERDEF(obj) PyTypeNum_ISUSERDEF(((PyArray_Descr*)(obj))->type_num) +#define PyDataType_ISEXTENDED(obj) PyTypeNum_ISEXTENDED(((PyArray_Descr*)(obj))->type_num) +#define PyDataType_ISOBJECT(obj) PyTypeNum_ISOBJECT(((PyArray_Descr*)(obj))->type_num) +#define PyDataType_HASFIELDS(obj) (((PyArray_Descr *)(obj))->names != NULL) +#define PyDataType_HASSUBARRAY(dtype) ((dtype)->subarray != NULL) +#define PyDataType_ISUNSIZED(dtype) ((dtype)->elsize == 0 && \ + !PyDataType_HASFIELDS(dtype)) +#define PyDataType_MAKEUNSIZED(dtype) ((dtype)->elsize = 0) + +#define PyArray_ISBOOL(obj) PyTypeNum_ISBOOL(PyArray_TYPE(obj)) +#define PyArray_ISUNSIGNED(obj) PyTypeNum_ISUNSIGNED(PyArray_TYPE(obj)) +#define PyArray_ISSIGNED(obj) PyTypeNum_ISSIGNED(PyArray_TYPE(obj)) +#define PyArray_ISINTEGER(obj) PyTypeNum_ISINTEGER(PyArray_TYPE(obj)) +#define PyArray_ISFLOAT(obj) PyTypeNum_ISFLOAT(PyArray_TYPE(obj)) +#define PyArray_ISNUMBER(obj) PyTypeNum_ISNUMBER(PyArray_TYPE(obj)) +#define PyArray_ISSTRING(obj) PyTypeNum_ISSTRING(PyArray_TYPE(obj)) +#define PyArray_ISCOMPLEX(obj) PyTypeNum_ISCOMPLEX(PyArray_TYPE(obj)) +#define PyArray_ISPYTHON(obj) PyTypeNum_ISPYTHON(PyArray_TYPE(obj)) +#define PyArray_ISFLEXIBLE(obj) PyTypeNum_ISFLEXIBLE(PyArray_TYPE(obj)) +#define PyArray_ISDATETIME(obj) PyTypeNum_ISDATETIME(PyArray_TYPE(obj)) +#define PyArray_ISUSERDEF(obj) PyTypeNum_ISUSERDEF(PyArray_TYPE(obj)) +#define PyArray_ISEXTENDED(obj) PyTypeNum_ISEXTENDED(PyArray_TYPE(obj)) +#define PyArray_ISOBJECT(obj) PyTypeNum_ISOBJECT(PyArray_TYPE(obj)) +#define PyArray_HASFIELDS(obj) PyDataType_HASFIELDS(PyArray_DESCR(obj)) + + /* + * FIXME: This should check for a flag on the data-type that + * states whether or not it is variable length. Because the + * ISFLEXIBLE check is hard-coded to the built-in data-types. + */ +#define PyArray_ISVARIABLE(obj) PyTypeNum_ISFLEXIBLE(PyArray_TYPE(obj)) + +#define PyArray_SAFEALIGNEDCOPY(obj) (PyArray_ISALIGNED(obj) && !PyArray_ISVARIABLE(obj)) + + +#define NPY_LITTLE '<' +#define NPY_BIG '>' +#define NPY_NATIVE '=' +#define NPY_SWAP 's' +#define NPY_IGNORE '|' + +#if NPY_BYTE_ORDER == NPY_BIG_ENDIAN +#define NPY_NATBYTE NPY_BIG +#define NPY_OPPBYTE NPY_LITTLE +#else +#define NPY_NATBYTE NPY_LITTLE +#define NPY_OPPBYTE NPY_BIG +#endif + +#define PyArray_ISNBO(arg) ((arg) != NPY_OPPBYTE) +#define PyArray_IsNativeByteOrder PyArray_ISNBO +#define PyArray_ISNOTSWAPPED(m) PyArray_ISNBO(PyArray_DESCR(m)->byteorder) +#define PyArray_ISBYTESWAPPED(m) (!PyArray_ISNOTSWAPPED(m)) + +#define PyArray_FLAGSWAP(m, flags) (PyArray_CHKFLAGS(m, flags) && \ + PyArray_ISNOTSWAPPED(m)) + +#define PyArray_ISCARRAY(m) PyArray_FLAGSWAP(m, NPY_ARRAY_CARRAY) +#define PyArray_ISCARRAY_RO(m) PyArray_FLAGSWAP(m, NPY_ARRAY_CARRAY_RO) +#define PyArray_ISFARRAY(m) PyArray_FLAGSWAP(m, NPY_ARRAY_FARRAY) +#define PyArray_ISFARRAY_RO(m) PyArray_FLAGSWAP(m, NPY_ARRAY_FARRAY_RO) +#define PyArray_ISBEHAVED(m) PyArray_FLAGSWAP(m, NPY_ARRAY_BEHAVED) +#define PyArray_ISBEHAVED_RO(m) PyArray_FLAGSWAP(m, NPY_ARRAY_ALIGNED) + + +#define PyDataType_ISNOTSWAPPED(d) PyArray_ISNBO(((PyArray_Descr *)(d))->byteorder) +#define PyDataType_ISBYTESWAPPED(d) (!PyDataType_ISNOTSWAPPED(d)) + +/************************************************************ + * A struct used by PyArray_CreateSortedStridePerm, new in 1.7. + ************************************************************/ + +typedef struct { + npy_intp perm, stride; +} npy_stride_sort_item; + +/************************************************************ + * This is the form of the struct that's stored in the + * PyCapsule returned by an array's __array_struct__ attribute. See + * https://docs.scipy.org/doc/numpy/reference/arrays.interface.html for the full + * documentation. + ************************************************************/ +typedef struct { + int two; /* + * contains the integer 2 as a sanity + * check + */ + + int nd; /* number of dimensions */ + + char typekind; /* + * kind in array --- character code of + * typestr + */ + + int itemsize; /* size of each element */ + + int flags; /* + * how should be data interpreted. Valid + * flags are CONTIGUOUS (1), F_CONTIGUOUS (2), + * ALIGNED (0x100), NOTSWAPPED (0x200), and + * WRITEABLE (0x400). ARR_HAS_DESCR (0x800) + * states that arrdescr field is present in + * structure + */ + + npy_intp *shape; /* + * A length-nd array of shape + * information + */ + + npy_intp *strides; /* A length-nd array of stride information */ + + void *data; /* A pointer to the first element of the array */ + + PyObject *descr; /* + * A list of fields or NULL (ignored if flags + * does not have ARR_HAS_DESCR flag set) + */ +} PyArrayInterface; + +/* + * This is a function for hooking into the PyDataMem_NEW/FREE/RENEW functions. + * See the documentation for PyDataMem_SetEventHook. + */ +typedef void (PyDataMem_EventHookFunc)(void *inp, void *outp, size_t size, + void *user_data); + + +/* + * PyArray_DTypeMeta related definitions. + * + * As of now, this API is preliminary and will be extended as necessary. + */ +#if defined(NPY_INTERNAL_BUILD) && NPY_INTERNAL_BUILD + /* + * The Structures defined in this block are considered private API and + * may change without warning! + */ + /* TODO: Make this definition public in the API, as soon as its settled */ + NPY_NO_EXPORT extern PyTypeObject PyArrayDTypeMeta_Type; + + typedef struct PyArray_DTypeMeta_tag PyArray_DTypeMeta; + + typedef PyArray_Descr *(discover_descr_from_pyobject_function)( + PyArray_DTypeMeta *cls, PyObject *obj); + + /* + * Before making this public, we should decide whether it should pass + * the type, or allow looking at the object. A possible use-case: + * `np.array(np.array([0]), dtype=np.ndarray)` + * Could consider arrays that are not `dtype=ndarray` "scalars". + */ + typedef int (is_known_scalar_type_function)( + PyArray_DTypeMeta *cls, PyTypeObject *obj); + + typedef PyArray_Descr *(default_descr_function)(PyArray_DTypeMeta *cls); + typedef PyArray_DTypeMeta *(common_dtype_function)( + PyArray_DTypeMeta *dtype1, PyArray_DTypeMeta *dtyep2); + typedef PyArray_DTypeMeta *(common_dtype_with_value_function)( + PyArray_DTypeMeta *dtype1, PyArray_DTypeMeta *dtyep2, PyObject *value); + typedef PyArray_Descr *(common_instance_function)( + PyArray_Descr *dtype1, PyArray_Descr *dtyep2); + + /* + * While NumPy DTypes would not need to be heap types the plan is to + * make DTypes available in Python at which point they will be heap types. + * Since we also wish to add fields to the DType class, this looks like + * a typical instance definition, but with PyHeapTypeObject instead of + * only the PyObject_HEAD. + * This must only be exposed very extremely careful consideration, since + * it is a fairly complex construct which may be better to allow + * refactoring of. + */ + struct PyArray_DTypeMeta_tag { + PyHeapTypeObject super; + + /* + * Most DTypes will have a singleton default instance, for the + * parametric legacy DTypes (bytes, string, void, datetime) this + * may be a pointer to the *prototype* instance? + */ + PyArray_Descr *singleton; + /* + * Is this DType created using the old API? This exists mainly to + * allow for assertions in paths specific to wrapping legacy types. + */ + npy_bool legacy; + /* The values stored by a parametric datatype depend on its instance */ + npy_bool parametric; + /* whether the DType can be instantiated (i.e. np.dtype cannot) */ + npy_bool abstract; + + /* + * The following fields replicate the most important dtype information. + * In the legacy implementation most of these are stored in the + * PyArray_Descr struct. + */ + /* The type object of the scalar instances (may be NULL?) */ + PyTypeObject *scalar_type; + /* kind for this type */ + char kind; + /* unique-character representing this type */ + char type; + /* flags describing data type */ + char flags; + /* number representing this type */ + int type_num; + /* + * Point to the original ArrFuncs. + * NOTE: We could make a copy to detect changes to `f`. + */ + PyArray_ArrFuncs *f; + + /* DType methods, these could be moved into its own struct */ + discover_descr_from_pyobject_function *discover_descr_from_pyobject; + is_known_scalar_type_function *is_known_scalar_type; + default_descr_function *default_descr; + common_dtype_function *common_dtype; + common_dtype_with_value_function *common_dtype_with_value; + common_instance_function *common_instance; + /* + * The casting implementation (ArrayMethod) to convert between two + * instances of this DType, stored explicitly for fast access: + */ + PyObject *within_dtype_castingimpl; + /* + * Dictionary of ArrayMethods representing most possible casts + * (structured and object are exceptions). + * This should potentially become a weak mapping in the future. + */ + PyObject *castingimpls; + }; + +#endif /* NPY_INTERNAL_BUILD */ + + +/* + * Use the keyword NPY_DEPRECATED_INCLUDES to ensure that the header files + * npy_*_*_deprecated_api.h are only included from here and nowhere else. + */ +#ifdef NPY_DEPRECATED_INCLUDES +#error "Do not use the reserved keyword NPY_DEPRECATED_INCLUDES." +#endif +#define NPY_DEPRECATED_INCLUDES +#if !defined(NPY_NO_DEPRECATED_API) || \ + (NPY_NO_DEPRECATED_API < NPY_1_7_API_VERSION) +#include "npy_1_7_deprecated_api.h" +#endif +/* + * There is no file npy_1_8_deprecated_api.h since there are no additional + * deprecated API features in NumPy 1.8. + * + * Note to maintainers: insert code like the following in future NumPy + * versions. + * + * #if !defined(NPY_NO_DEPRECATED_API) || \ + * (NPY_NO_DEPRECATED_API < NPY_1_9_API_VERSION) + * #include "npy_1_9_deprecated_api.h" + * #endif + */ +#undef NPY_DEPRECATED_INCLUDES + +#endif /* NPY_ARRAYTYPES_H */ diff --git a/EXE version/main/numpy/core/include/numpy/noprefix.h b/EXE version/main/numpy/core/include/numpy/noprefix.h new file mode 100644 index 00000000..041f3019 --- /dev/null +++ b/EXE version/main/numpy/core/include/numpy/noprefix.h @@ -0,0 +1,212 @@ +#ifndef NPY_NOPREFIX_H +#define NPY_NOPREFIX_H + +/* + * You can directly include noprefix.h as a backward + * compatibility measure + */ +#ifndef NPY_NO_PREFIX +#include "ndarrayobject.h" +#include "npy_interrupt.h" +#endif + +#define SIGSETJMP NPY_SIGSETJMP +#define SIGLONGJMP NPY_SIGLONGJMP +#define SIGJMP_BUF NPY_SIGJMP_BUF + +#define MAX_DIMS NPY_MAXDIMS + +#define longlong npy_longlong +#define ulonglong npy_ulonglong +#define Bool npy_bool +#define longdouble npy_longdouble +#define byte npy_byte + +#ifndef _BSD_SOURCE +#define ushort npy_ushort +#define uint npy_uint +#define ulong npy_ulong +#endif + +#define ubyte npy_ubyte +#define ushort npy_ushort +#define uint npy_uint +#define ulong npy_ulong +#define cfloat npy_cfloat +#define cdouble npy_cdouble +#define clongdouble npy_clongdouble +#define Int8 npy_int8 +#define UInt8 npy_uint8 +#define Int16 npy_int16 +#define UInt16 npy_uint16 +#define Int32 npy_int32 +#define UInt32 npy_uint32 +#define Int64 npy_int64 +#define UInt64 npy_uint64 +#define Int128 npy_int128 +#define UInt128 npy_uint128 +#define Int256 npy_int256 +#define UInt256 npy_uint256 +#define Float16 npy_float16 +#define Complex32 npy_complex32 +#define Float32 npy_float32 +#define Complex64 npy_complex64 +#define Float64 npy_float64 +#define Complex128 npy_complex128 +#define Float80 npy_float80 +#define Complex160 npy_complex160 +#define Float96 npy_float96 +#define Complex192 npy_complex192 +#define Float128 npy_float128 +#define Complex256 npy_complex256 +#define intp npy_intp +#define uintp npy_uintp +#define datetime npy_datetime +#define timedelta npy_timedelta + +#define SIZEOF_LONGLONG NPY_SIZEOF_LONGLONG +#define SIZEOF_INTP NPY_SIZEOF_INTP +#define SIZEOF_UINTP NPY_SIZEOF_UINTP +#define SIZEOF_HALF NPY_SIZEOF_HALF +#define SIZEOF_LONGDOUBLE NPY_SIZEOF_LONGDOUBLE +#define SIZEOF_DATETIME NPY_SIZEOF_DATETIME +#define SIZEOF_TIMEDELTA NPY_SIZEOF_TIMEDELTA + +#define LONGLONG_FMT NPY_LONGLONG_FMT +#define ULONGLONG_FMT NPY_ULONGLONG_FMT +#define LONGLONG_SUFFIX NPY_LONGLONG_SUFFIX +#define ULONGLONG_SUFFIX NPY_ULONGLONG_SUFFIX + +#define MAX_INT8 127 +#define MIN_INT8 -128 +#define MAX_UINT8 255 +#define MAX_INT16 32767 +#define MIN_INT16 -32768 +#define MAX_UINT16 65535 +#define MAX_INT32 2147483647 +#define MIN_INT32 (-MAX_INT32 - 1) +#define MAX_UINT32 4294967295U +#define MAX_INT64 LONGLONG_SUFFIX(9223372036854775807) +#define MIN_INT64 (-MAX_INT64 - LONGLONG_SUFFIX(1)) +#define MAX_UINT64 ULONGLONG_SUFFIX(18446744073709551615) +#define MAX_INT128 LONGLONG_SUFFIX(85070591730234615865843651857942052864) +#define MIN_INT128 (-MAX_INT128 - LONGLONG_SUFFIX(1)) +#define MAX_UINT128 ULONGLONG_SUFFIX(170141183460469231731687303715884105728) +#define MAX_INT256 LONGLONG_SUFFIX(57896044618658097711785492504343953926634992332820282019728792003956564819967) +#define MIN_INT256 (-MAX_INT256 - LONGLONG_SUFFIX(1)) +#define MAX_UINT256 ULONGLONG_SUFFIX(115792089237316195423570985008687907853269984665640564039457584007913129639935) + +#define MAX_BYTE NPY_MAX_BYTE +#define MIN_BYTE NPY_MIN_BYTE +#define MAX_UBYTE NPY_MAX_UBYTE +#define MAX_SHORT NPY_MAX_SHORT +#define MIN_SHORT NPY_MIN_SHORT +#define MAX_USHORT NPY_MAX_USHORT +#define MAX_INT NPY_MAX_INT +#define MIN_INT NPY_MIN_INT +#define MAX_UINT NPY_MAX_UINT +#define MAX_LONG NPY_MAX_LONG +#define MIN_LONG NPY_MIN_LONG +#define MAX_ULONG NPY_MAX_ULONG +#define MAX_LONGLONG NPY_MAX_LONGLONG +#define MIN_LONGLONG NPY_MIN_LONGLONG +#define MAX_ULONGLONG NPY_MAX_ULONGLONG +#define MIN_DATETIME NPY_MIN_DATETIME +#define MAX_DATETIME NPY_MAX_DATETIME +#define MIN_TIMEDELTA NPY_MIN_TIMEDELTA +#define MAX_TIMEDELTA NPY_MAX_TIMEDELTA + +#define BITSOF_BOOL NPY_BITSOF_BOOL +#define BITSOF_CHAR NPY_BITSOF_CHAR +#define BITSOF_SHORT NPY_BITSOF_SHORT +#define BITSOF_INT NPY_BITSOF_INT +#define BITSOF_LONG NPY_BITSOF_LONG +#define BITSOF_LONGLONG NPY_BITSOF_LONGLONG +#define BITSOF_HALF NPY_BITSOF_HALF +#define BITSOF_FLOAT NPY_BITSOF_FLOAT +#define BITSOF_DOUBLE NPY_BITSOF_DOUBLE +#define BITSOF_LONGDOUBLE NPY_BITSOF_LONGDOUBLE +#define BITSOF_DATETIME NPY_BITSOF_DATETIME +#define BITSOF_TIMEDELTA NPY_BITSOF_TIMEDELTA + +#define _pya_malloc PyArray_malloc +#define _pya_free PyArray_free +#define _pya_realloc PyArray_realloc + +#define BEGIN_THREADS_DEF NPY_BEGIN_THREADS_DEF +#define BEGIN_THREADS NPY_BEGIN_THREADS +#define END_THREADS NPY_END_THREADS +#define ALLOW_C_API_DEF NPY_ALLOW_C_API_DEF +#define ALLOW_C_API NPY_ALLOW_C_API +#define DISABLE_C_API NPY_DISABLE_C_API + +#define PY_FAIL NPY_FAIL +#define PY_SUCCEED NPY_SUCCEED + +#ifndef TRUE +#define TRUE NPY_TRUE +#endif + +#ifndef FALSE +#define FALSE NPY_FALSE +#endif + +#define LONGDOUBLE_FMT NPY_LONGDOUBLE_FMT + +#define CONTIGUOUS NPY_CONTIGUOUS +#define C_CONTIGUOUS NPY_C_CONTIGUOUS +#define FORTRAN NPY_FORTRAN +#define F_CONTIGUOUS NPY_F_CONTIGUOUS +#define OWNDATA NPY_OWNDATA +#define FORCECAST NPY_FORCECAST +#define ENSURECOPY NPY_ENSURECOPY +#define ENSUREARRAY NPY_ENSUREARRAY +#define ELEMENTSTRIDES NPY_ELEMENTSTRIDES +#define ALIGNED NPY_ALIGNED +#define NOTSWAPPED NPY_NOTSWAPPED +#define WRITEABLE NPY_WRITEABLE +#define UPDATEIFCOPY NPY_UPDATEIFCOPY +#define WRITEBACKIFCOPY NPY_ARRAY_WRITEBACKIFCOPY +#define ARR_HAS_DESCR NPY_ARR_HAS_DESCR +#define BEHAVED NPY_BEHAVED +#define BEHAVED_NS NPY_BEHAVED_NS +#define CARRAY NPY_CARRAY +#define CARRAY_RO NPY_CARRAY_RO +#define FARRAY NPY_FARRAY +#define FARRAY_RO NPY_FARRAY_RO +#define DEFAULT NPY_DEFAULT +#define IN_ARRAY NPY_IN_ARRAY +#define OUT_ARRAY NPY_OUT_ARRAY +#define INOUT_ARRAY NPY_INOUT_ARRAY +#define IN_FARRAY NPY_IN_FARRAY +#define OUT_FARRAY NPY_OUT_FARRAY +#define INOUT_FARRAY NPY_INOUT_FARRAY +#define UPDATE_ALL NPY_UPDATE_ALL + +#define OWN_DATA NPY_OWNDATA +#define BEHAVED_FLAGS NPY_BEHAVED +#define BEHAVED_FLAGS_NS NPY_BEHAVED_NS +#define CARRAY_FLAGS_RO NPY_CARRAY_RO +#define CARRAY_FLAGS NPY_CARRAY +#define FARRAY_FLAGS NPY_FARRAY +#define FARRAY_FLAGS_RO NPY_FARRAY_RO +#define DEFAULT_FLAGS NPY_DEFAULT +#define UPDATE_ALL_FLAGS NPY_UPDATE_ALL_FLAGS + +#ifndef MIN +#define MIN PyArray_MIN +#endif +#ifndef MAX +#define MAX PyArray_MAX +#endif +#define MAX_INTP NPY_MAX_INTP +#define MIN_INTP NPY_MIN_INTP +#define MAX_UINTP NPY_MAX_UINTP +#define INTP_FMT NPY_INTP_FMT + +#ifndef PYPY_VERSION +#define REFCOUNT PyArray_REFCOUNT +#define MAX_ELSIZE NPY_MAX_ELSIZE +#endif + +#endif diff --git a/EXE version/main/numpy/core/include/numpy/npy_1_7_deprecated_api.h b/EXE version/main/numpy/core/include/numpy/npy_1_7_deprecated_api.h new file mode 100644 index 00000000..a4f90e01 --- /dev/null +++ b/EXE version/main/numpy/core/include/numpy/npy_1_7_deprecated_api.h @@ -0,0 +1,125 @@ +#ifndef _NPY_1_7_DEPRECATED_API_H +#define _NPY_1_7_DEPRECATED_API_H + +#ifndef NPY_DEPRECATED_INCLUDES +#error "Should never include npy_*_*_deprecated_api directly." +#endif + +/* Emit a warning if the user did not specifically request the old API */ +#ifndef NPY_NO_DEPRECATED_API +#if defined(_WIN32) +#define _WARN___STR2__(x) #x +#define _WARN___STR1__(x) _WARN___STR2__(x) +#define _WARN___LOC__ __FILE__ "(" _WARN___STR1__(__LINE__) ") : Warning Msg: " +#pragma message(_WARN___LOC__"Using deprecated NumPy API, disable it with " \ + "#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION") +#else +#warning "Using deprecated NumPy API, disable it with " \ + "#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION" +#endif +#endif + +/* + * This header exists to collect all dangerous/deprecated NumPy API + * as of NumPy 1.7. + * + * This is an attempt to remove bad API, the proliferation of macros, + * and namespace pollution currently produced by the NumPy headers. + */ + +/* These array flags are deprecated as of NumPy 1.7 */ +#define NPY_CONTIGUOUS NPY_ARRAY_C_CONTIGUOUS +#define NPY_FORTRAN NPY_ARRAY_F_CONTIGUOUS + +/* + * The consistent NPY_ARRAY_* names which don't pollute the NPY_* + * namespace were added in NumPy 1.7. + * + * These versions of the carray flags are deprecated, but + * probably should only be removed after two releases instead of one. + */ +#define NPY_C_CONTIGUOUS NPY_ARRAY_C_CONTIGUOUS +#define NPY_F_CONTIGUOUS NPY_ARRAY_F_CONTIGUOUS +#define NPY_OWNDATA NPY_ARRAY_OWNDATA +#define NPY_FORCECAST NPY_ARRAY_FORCECAST +#define NPY_ENSURECOPY NPY_ARRAY_ENSURECOPY +#define NPY_ENSUREARRAY NPY_ARRAY_ENSUREARRAY +#define NPY_ELEMENTSTRIDES NPY_ARRAY_ELEMENTSTRIDES +#define NPY_ALIGNED NPY_ARRAY_ALIGNED +#define NPY_NOTSWAPPED NPY_ARRAY_NOTSWAPPED +#define NPY_WRITEABLE NPY_ARRAY_WRITEABLE +#define NPY_UPDATEIFCOPY NPY_ARRAY_UPDATEIFCOPY +#define NPY_BEHAVED NPY_ARRAY_BEHAVED +#define NPY_BEHAVED_NS NPY_ARRAY_BEHAVED_NS +#define NPY_CARRAY NPY_ARRAY_CARRAY +#define NPY_CARRAY_RO NPY_ARRAY_CARRAY_RO +#define NPY_FARRAY NPY_ARRAY_FARRAY +#define NPY_FARRAY_RO NPY_ARRAY_FARRAY_RO +#define NPY_DEFAULT NPY_ARRAY_DEFAULT +#define NPY_IN_ARRAY NPY_ARRAY_IN_ARRAY +#define NPY_OUT_ARRAY NPY_ARRAY_OUT_ARRAY +#define NPY_INOUT_ARRAY NPY_ARRAY_INOUT_ARRAY +#define NPY_IN_FARRAY NPY_ARRAY_IN_FARRAY +#define NPY_OUT_FARRAY NPY_ARRAY_OUT_FARRAY +#define NPY_INOUT_FARRAY NPY_ARRAY_INOUT_FARRAY +#define NPY_UPDATE_ALL NPY_ARRAY_UPDATE_ALL + +/* This way of accessing the default type is deprecated as of NumPy 1.7 */ +#define PyArray_DEFAULT NPY_DEFAULT_TYPE + +/* These DATETIME bits aren't used internally */ +#define PyDataType_GetDatetimeMetaData(descr) \ + ((descr->metadata == NULL) ? NULL : \ + ((PyArray_DatetimeMetaData *)(PyCapsule_GetPointer( \ + PyDict_GetItemString( \ + descr->metadata, NPY_METADATA_DTSTR), NULL)))) + +/* + * Deprecated as of NumPy 1.7, this kind of shortcut doesn't + * belong in the public API. + */ +#define NPY_AO PyArrayObject + +/* + * Deprecated as of NumPy 1.7, an all-lowercase macro doesn't + * belong in the public API. + */ +#define fortran fortran_ + +/* + * Deprecated as of NumPy 1.7, as it is a namespace-polluting + * macro. + */ +#define FORTRAN_IF PyArray_FORTRAN_IF + +/* Deprecated as of NumPy 1.7, datetime64 uses c_metadata instead */ +#define NPY_METADATA_DTSTR "__timeunit__" + +/* + * Deprecated as of NumPy 1.7. + * The reasoning: + * - These are for datetime, but there's no datetime "namespace". + * - They just turn NPY_STR_ into "", which is just + * making something simple be indirected. + */ +#define NPY_STR_Y "Y" +#define NPY_STR_M "M" +#define NPY_STR_W "W" +#define NPY_STR_D "D" +#define NPY_STR_h "h" +#define NPY_STR_m "m" +#define NPY_STR_s "s" +#define NPY_STR_ms "ms" +#define NPY_STR_us "us" +#define NPY_STR_ns "ns" +#define NPY_STR_ps "ps" +#define NPY_STR_fs "fs" +#define NPY_STR_as "as" + +/* + * The macros in old_defines.h are Deprecated as of NumPy 1.7 and will be + * removed in the next major release. + */ +#include "old_defines.h" + +#endif diff --git a/EXE version/main/numpy/core/include/numpy/npy_3kcompat.h b/EXE version/main/numpy/core/include/numpy/npy_3kcompat.h new file mode 100644 index 00000000..551ec6be --- /dev/null +++ b/EXE version/main/numpy/core/include/numpy/npy_3kcompat.h @@ -0,0 +1,595 @@ +/* + * This is a convenience header file providing compatibility utilities + * for supporting Python 2 and Python 3 in the same code base. + * + * If you want to use this for your own projects, it's recommended to make a + * copy of it. Although the stuff below is unlikely to change, we don't provide + * strong backwards compatibility guarantees at the moment. + */ + +#ifndef _NPY_3KCOMPAT_H_ +#define _NPY_3KCOMPAT_H_ + +#include +#include + +#ifndef NPY_PY3K +#define NPY_PY3K 1 +#endif + +#include "numpy/npy_common.h" +#include "numpy/ndarrayobject.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * PyInt -> PyLong + */ + + +/* + * This is a renamed copy of the Python non-limited API function _PyLong_AsInt. It is + * included here because it is missing from the PyPy API. It completes the PyLong_As* + * group of functions and can be useful in replacing PyInt_Check. + */ +static NPY_INLINE int +Npy__PyLong_AsInt(PyObject *obj) +{ + int overflow; + long result = PyLong_AsLongAndOverflow(obj, &overflow); + + /* INT_MAX and INT_MIN are defined in Python.h */ + if (overflow || result > INT_MAX || result < INT_MIN) { + /* XXX: could be cute and give a different + message for overflow == -1 */ + PyErr_SetString(PyExc_OverflowError, + "Python int too large to convert to C int"); + return -1; + } + return (int)result; +} + + +#if defined(NPY_PY3K) +/* Return True only if the long fits in a C long */ +static NPY_INLINE int PyInt_Check(PyObject *op) { + int overflow = 0; + if (!PyLong_Check(op)) { + return 0; + } + PyLong_AsLongAndOverflow(op, &overflow); + return (overflow == 0); +} + + +#define PyInt_FromLong PyLong_FromLong +#define PyInt_AsLong PyLong_AsLong +#define PyInt_AS_LONG PyLong_AsLong +#define PyInt_AsSsize_t PyLong_AsSsize_t +#define PyNumber_Int PyNumber_Long + +/* NOTE: + * + * Since the PyLong type is very different from the fixed-range PyInt, + * we don't define PyInt_Type -> PyLong_Type. + */ +#endif /* NPY_PY3K */ + +/* Py3 changes PySlice_GetIndicesEx' first argument's type to PyObject* */ +#ifdef NPY_PY3K +# define NpySlice_GetIndicesEx PySlice_GetIndicesEx +#else +# define NpySlice_GetIndicesEx(op, nop, start, end, step, slicelength) \ + PySlice_GetIndicesEx((PySliceObject *)op, nop, start, end, step, slicelength) +#endif + +#if PY_VERSION_HEX < 0x030900a4 + /* Introduced in https://github.com/python/cpython/commit/d2ec81a8c99796b51fb8c49b77a7fe369863226f */ + #define Py_SET_TYPE(obj, type) ((Py_TYPE(obj) = (type)), (void)0) + /* Introduced in https://github.com/python/cpython/commit/b10dc3e7a11fcdb97e285882eba6da92594f90f9 */ + #define Py_SET_SIZE(obj, size) ((Py_SIZE(obj) = (size)), (void)0) + /* Introduced in https://github.com/python/cpython/commit/c86a11221df7e37da389f9c6ce6e47ea22dc44ff */ + #define Py_SET_REFCNT(obj, refcnt) ((Py_REFCNT(obj) = (refcnt)), (void)0) +#endif + + +#define Npy_EnterRecursiveCall(x) Py_EnterRecursiveCall(x) + +/* Py_SETREF was added in 3.5.2, and only if Py_LIMITED_API is absent */ +#if PY_VERSION_HEX < 0x03050200 + #define Py_SETREF(op, op2) \ + do { \ + PyObject *_py_tmp = (PyObject *)(op); \ + (op) = (op2); \ + Py_DECREF(_py_tmp); \ + } while (0) +#endif + +/* introduced in https://github.com/python/cpython/commit/a24107b04c1277e3c1105f98aff5bfa3a98b33a0 */ +#if PY_VERSION_HEX < 0x030800A3 + static NPY_INLINE PyObject * + _PyDict_GetItemStringWithError(PyObject *v, const char *key) + { + PyObject *kv, *rv; + kv = PyUnicode_FromString(key); + if (kv == NULL) { + return NULL; + } + rv = PyDict_GetItemWithError(v, kv); + Py_DECREF(kv); + return rv; + } +#endif + +/* + * PyString -> PyBytes + */ + +#if defined(NPY_PY3K) + +#define PyString_Type PyBytes_Type +#define PyString_Check PyBytes_Check +#define PyStringObject PyBytesObject +#define PyString_FromString PyBytes_FromString +#define PyString_FromStringAndSize PyBytes_FromStringAndSize +#define PyString_AS_STRING PyBytes_AS_STRING +#define PyString_AsStringAndSize PyBytes_AsStringAndSize +#define PyString_FromFormat PyBytes_FromFormat +#define PyString_Concat PyBytes_Concat +#define PyString_ConcatAndDel PyBytes_ConcatAndDel +#define PyString_AsString PyBytes_AsString +#define PyString_GET_SIZE PyBytes_GET_SIZE +#define PyString_Size PyBytes_Size + +#define PyUString_Type PyUnicode_Type +#define PyUString_Check PyUnicode_Check +#define PyUStringObject PyUnicodeObject +#define PyUString_FromString PyUnicode_FromString +#define PyUString_FromStringAndSize PyUnicode_FromStringAndSize +#define PyUString_FromFormat PyUnicode_FromFormat +#define PyUString_Concat PyUnicode_Concat2 +#define PyUString_ConcatAndDel PyUnicode_ConcatAndDel +#define PyUString_GET_SIZE PyUnicode_GET_SIZE +#define PyUString_Size PyUnicode_Size +#define PyUString_InternFromString PyUnicode_InternFromString +#define PyUString_Format PyUnicode_Format + +#define PyBaseString_Check(obj) (PyUnicode_Check(obj)) + +#else + +#define PyBytes_Type PyString_Type +#define PyBytes_Check PyString_Check +#define PyBytesObject PyStringObject +#define PyBytes_FromString PyString_FromString +#define PyBytes_FromStringAndSize PyString_FromStringAndSize +#define PyBytes_AS_STRING PyString_AS_STRING +#define PyBytes_AsStringAndSize PyString_AsStringAndSize +#define PyBytes_FromFormat PyString_FromFormat +#define PyBytes_Concat PyString_Concat +#define PyBytes_ConcatAndDel PyString_ConcatAndDel +#define PyBytes_AsString PyString_AsString +#define PyBytes_GET_SIZE PyString_GET_SIZE +#define PyBytes_Size PyString_Size + +#define PyUString_Type PyString_Type +#define PyUString_Check PyString_Check +#define PyUStringObject PyStringObject +#define PyUString_FromString PyString_FromString +#define PyUString_FromStringAndSize PyString_FromStringAndSize +#define PyUString_FromFormat PyString_FromFormat +#define PyUString_Concat PyString_Concat +#define PyUString_ConcatAndDel PyString_ConcatAndDel +#define PyUString_GET_SIZE PyString_GET_SIZE +#define PyUString_Size PyString_Size +#define PyUString_InternFromString PyString_InternFromString +#define PyUString_Format PyString_Format + +#define PyBaseString_Check(obj) (PyBytes_Check(obj) || PyUnicode_Check(obj)) + +#endif /* NPY_PY3K */ + + +static NPY_INLINE void +PyUnicode_ConcatAndDel(PyObject **left, PyObject *right) +{ + Py_SETREF(*left, PyUnicode_Concat(*left, right)); + Py_DECREF(right); +} + +static NPY_INLINE void +PyUnicode_Concat2(PyObject **left, PyObject *right) +{ + Py_SETREF(*left, PyUnicode_Concat(*left, right)); +} + +/* + * PyFile_* compatibility + */ + +/* + * Get a FILE* handle to the file represented by the Python object + */ +static NPY_INLINE FILE* +npy_PyFile_Dup2(PyObject *file, char *mode, npy_off_t *orig_pos) +{ + int fd, fd2, unbuf; + Py_ssize_t fd2_tmp; + PyObject *ret, *os, *io, *io_raw; + npy_off_t pos; + FILE *handle; + + /* For Python 2 PyFileObject, use PyFile_AsFile */ +#if !defined(NPY_PY3K) + if (PyFile_Check(file)) { + return PyFile_AsFile(file); + } +#endif + + /* Flush first to ensure things end up in the file in the correct order */ + ret = PyObject_CallMethod(file, "flush", ""); + if (ret == NULL) { + return NULL; + } + Py_DECREF(ret); + fd = PyObject_AsFileDescriptor(file); + if (fd == -1) { + return NULL; + } + + /* + * The handle needs to be dup'd because we have to call fclose + * at the end + */ + os = PyImport_ImportModule("os"); + if (os == NULL) { + return NULL; + } + ret = PyObject_CallMethod(os, "dup", "i", fd); + Py_DECREF(os); + if (ret == NULL) { + return NULL; + } + fd2_tmp = PyNumber_AsSsize_t(ret, PyExc_IOError); + Py_DECREF(ret); + if (fd2_tmp == -1 && PyErr_Occurred()) { + return NULL; + } + if (fd2_tmp < INT_MIN || fd2_tmp > INT_MAX) { + PyErr_SetString(PyExc_IOError, + "Getting an 'int' from os.dup() failed"); + return NULL; + } + fd2 = (int)fd2_tmp; + + /* Convert to FILE* handle */ +#ifdef _WIN32 + handle = _fdopen(fd2, mode); +#else + handle = fdopen(fd2, mode); +#endif + if (handle == NULL) { + PyErr_SetString(PyExc_IOError, + "Getting a FILE* from a Python file object failed"); + return NULL; + } + + /* Record the original raw file handle position */ + *orig_pos = npy_ftell(handle); + if (*orig_pos == -1) { + /* The io module is needed to determine if buffering is used */ + io = PyImport_ImportModule("io"); + if (io == NULL) { + fclose(handle); + return NULL; + } + /* File object instances of RawIOBase are unbuffered */ + io_raw = PyObject_GetAttrString(io, "RawIOBase"); + Py_DECREF(io); + if (io_raw == NULL) { + fclose(handle); + return NULL; + } + unbuf = PyObject_IsInstance(file, io_raw); + Py_DECREF(io_raw); + if (unbuf == 1) { + /* Succeed if the IO is unbuffered */ + return handle; + } + else { + PyErr_SetString(PyExc_IOError, "obtaining file position failed"); + fclose(handle); + return NULL; + } + } + + /* Seek raw handle to the Python-side position */ + ret = PyObject_CallMethod(file, "tell", ""); + if (ret == NULL) { + fclose(handle); + return NULL; + } + pos = PyLong_AsLongLong(ret); + Py_DECREF(ret); + if (PyErr_Occurred()) { + fclose(handle); + return NULL; + } + if (npy_fseek(handle, pos, SEEK_SET) == -1) { + PyErr_SetString(PyExc_IOError, "seeking file failed"); + fclose(handle); + return NULL; + } + return handle; +} + +/* + * Close the dup-ed file handle, and seek the Python one to the current position + */ +static NPY_INLINE int +npy_PyFile_DupClose2(PyObject *file, FILE* handle, npy_off_t orig_pos) +{ + int fd, unbuf; + PyObject *ret, *io, *io_raw; + npy_off_t position; + + /* For Python 2 PyFileObject, do nothing */ +#if !defined(NPY_PY3K) + if (PyFile_Check(file)) { + return 0; + } +#endif + + position = npy_ftell(handle); + + /* Close the FILE* handle */ + fclose(handle); + + /* + * Restore original file handle position, in order to not confuse + * Python-side data structures + */ + fd = PyObject_AsFileDescriptor(file); + if (fd == -1) { + return -1; + } + + if (npy_lseek(fd, orig_pos, SEEK_SET) == -1) { + + /* The io module is needed to determine if buffering is used */ + io = PyImport_ImportModule("io"); + if (io == NULL) { + return -1; + } + /* File object instances of RawIOBase are unbuffered */ + io_raw = PyObject_GetAttrString(io, "RawIOBase"); + Py_DECREF(io); + if (io_raw == NULL) { + return -1; + } + unbuf = PyObject_IsInstance(file, io_raw); + Py_DECREF(io_raw); + if (unbuf == 1) { + /* Succeed if the IO is unbuffered */ + return 0; + } + else { + PyErr_SetString(PyExc_IOError, "seeking file failed"); + return -1; + } + } + + if (position == -1) { + PyErr_SetString(PyExc_IOError, "obtaining file position failed"); + return -1; + } + + /* Seek Python-side handle to the FILE* handle position */ + ret = PyObject_CallMethod(file, "seek", NPY_OFF_T_PYFMT "i", position, 0); + if (ret == NULL) { + return -1; + } + Py_DECREF(ret); + return 0; +} + +static NPY_INLINE int +npy_PyFile_Check(PyObject *file) +{ + int fd; + /* For Python 2, check if it is a PyFileObject */ +#if !defined(NPY_PY3K) + if (PyFile_Check(file)) { + return 1; + } +#endif + fd = PyObject_AsFileDescriptor(file); + if (fd == -1) { + PyErr_Clear(); + return 0; + } + return 1; +} + +static NPY_INLINE PyObject* +npy_PyFile_OpenFile(PyObject *filename, const char *mode) +{ + PyObject *open; + open = PyDict_GetItemString(PyEval_GetBuiltins(), "open"); + if (open == NULL) { + return NULL; + } + return PyObject_CallFunction(open, "Os", filename, mode); +} + +static NPY_INLINE int +npy_PyFile_CloseFile(PyObject *file) +{ + PyObject *ret; + + ret = PyObject_CallMethod(file, "close", NULL); + if (ret == NULL) { + return -1; + } + Py_DECREF(ret); + return 0; +} + + +/* This is a copy of _PyErr_ChainExceptions + */ +static NPY_INLINE void +npy_PyErr_ChainExceptions(PyObject *exc, PyObject *val, PyObject *tb) +{ + if (exc == NULL) + return; + + if (PyErr_Occurred()) { + /* only py3 supports this anyway */ + #ifdef NPY_PY3K + PyObject *exc2, *val2, *tb2; + PyErr_Fetch(&exc2, &val2, &tb2); + PyErr_NormalizeException(&exc, &val, &tb); + if (tb != NULL) { + PyException_SetTraceback(val, tb); + Py_DECREF(tb); + } + Py_DECREF(exc); + PyErr_NormalizeException(&exc2, &val2, &tb2); + PyException_SetContext(val2, val); + PyErr_Restore(exc2, val2, tb2); + #endif + } + else { + PyErr_Restore(exc, val, tb); + } +} + + +/* This is a copy of _PyErr_ChainExceptions, with: + * - a minimal implementation for python 2 + * - __cause__ used instead of __context__ + */ +static NPY_INLINE void +npy_PyErr_ChainExceptionsCause(PyObject *exc, PyObject *val, PyObject *tb) +{ + if (exc == NULL) + return; + + if (PyErr_Occurred()) { + /* only py3 supports this anyway */ + #ifdef NPY_PY3K + PyObject *exc2, *val2, *tb2; + PyErr_Fetch(&exc2, &val2, &tb2); + PyErr_NormalizeException(&exc, &val, &tb); + if (tb != NULL) { + PyException_SetTraceback(val, tb); + Py_DECREF(tb); + } + Py_DECREF(exc); + PyErr_NormalizeException(&exc2, &val2, &tb2); + PyException_SetCause(val2, val); + PyErr_Restore(exc2, val2, tb2); + #endif + } + else { + PyErr_Restore(exc, val, tb); + } +} + +/* + * PyObject_Cmp + */ +#if defined(NPY_PY3K) +static NPY_INLINE int +PyObject_Cmp(PyObject *i1, PyObject *i2, int *cmp) +{ + int v; + v = PyObject_RichCompareBool(i1, i2, Py_LT); + if (v == 1) { + *cmp = -1; + return 1; + } + else if (v == -1) { + return -1; + } + + v = PyObject_RichCompareBool(i1, i2, Py_GT); + if (v == 1) { + *cmp = 1; + return 1; + } + else if (v == -1) { + return -1; + } + + v = PyObject_RichCompareBool(i1, i2, Py_EQ); + if (v == 1) { + *cmp = 0; + return 1; + } + else { + *cmp = 0; + return -1; + } +} +#endif + +/* + * PyCObject functions adapted to PyCapsules. + * + * The main job here is to get rid of the improved error handling + * of PyCapsules. It's a shame... + */ +static NPY_INLINE PyObject * +NpyCapsule_FromVoidPtr(void *ptr, void (*dtor)(PyObject *)) +{ + PyObject *ret = PyCapsule_New(ptr, NULL, dtor); + if (ret == NULL) { + PyErr_Clear(); + } + return ret; +} + +static NPY_INLINE PyObject * +NpyCapsule_FromVoidPtrAndDesc(void *ptr, void* context, void (*dtor)(PyObject *)) +{ + PyObject *ret = NpyCapsule_FromVoidPtr(ptr, dtor); + if (ret != NULL && PyCapsule_SetContext(ret, context) != 0) { + PyErr_Clear(); + Py_DECREF(ret); + ret = NULL; + } + return ret; +} + +static NPY_INLINE void * +NpyCapsule_AsVoidPtr(PyObject *obj) +{ + void *ret = PyCapsule_GetPointer(obj, NULL); + if (ret == NULL) { + PyErr_Clear(); + } + return ret; +} + +static NPY_INLINE void * +NpyCapsule_GetDesc(PyObject *obj) +{ + return PyCapsule_GetContext(obj); +} + +static NPY_INLINE int +NpyCapsule_Check(PyObject *ptr) +{ + return PyCapsule_CheckExact(ptr); +} + +#ifdef __cplusplus +} +#endif + + +#endif /* _NPY_3KCOMPAT_H_ */ diff --git a/EXE version/main/numpy/core/include/numpy/npy_common.h b/EXE version/main/numpy/core/include/numpy/npy_common.h new file mode 100644 index 00000000..d5f329b6 --- /dev/null +++ b/EXE version/main/numpy/core/include/numpy/npy_common.h @@ -0,0 +1,1110 @@ +#ifndef _NPY_COMMON_H_ +#define _NPY_COMMON_H_ + +/* need Python.h for npy_intp, npy_uintp */ +#include + +/* numpconfig.h is auto-generated */ +#include "numpyconfig.h" +#ifdef HAVE_NPY_CONFIG_H +#include +#endif + +/* + * using static inline modifiers when defining npy_math functions + * allows the compiler to make optimizations when possible + */ +#ifndef NPY_INLINE_MATH +#if defined(NPY_INTERNAL_BUILD) && NPY_INTERNAL_BUILD + #define NPY_INLINE_MATH 1 +#else + #define NPY_INLINE_MATH 0 +#endif +#endif + +/* + * gcc does not unroll even with -O3 + * use with care, unrolling on modern cpus rarely speeds things up + */ +#ifdef HAVE_ATTRIBUTE_OPTIMIZE_UNROLL_LOOPS +#define NPY_GCC_UNROLL_LOOPS \ + __attribute__((optimize("unroll-loops"))) +#else +#define NPY_GCC_UNROLL_LOOPS +#endif + +/* highest gcc optimization level, enabled autovectorizer */ +#ifdef HAVE_ATTRIBUTE_OPTIMIZE_OPT_3 +#define NPY_GCC_OPT_3 __attribute__((optimize("O3"))) +#else +#define NPY_GCC_OPT_3 +#endif + +/* compile target attributes */ +#if defined HAVE_ATTRIBUTE_TARGET_AVX && defined HAVE_LINK_AVX +#define NPY_GCC_TARGET_AVX __attribute__((target("avx"))) +#else +#define NPY_GCC_TARGET_AVX +#endif + +#if defined HAVE_ATTRIBUTE_TARGET_AVX2_WITH_INTRINSICS +#define HAVE_ATTRIBUTE_TARGET_FMA +#define NPY_GCC_TARGET_FMA __attribute__((target("avx2,fma"))) +#endif + +#if defined HAVE_ATTRIBUTE_TARGET_AVX2 && defined HAVE_LINK_AVX2 +#define NPY_GCC_TARGET_AVX2 __attribute__((target("avx2"))) +#else +#define NPY_GCC_TARGET_AVX2 +#endif + +#if defined HAVE_ATTRIBUTE_TARGET_AVX512F && defined HAVE_LINK_AVX512F +#define NPY_GCC_TARGET_AVX512F __attribute__((target("avx512f"))) +#elif defined HAVE_ATTRIBUTE_TARGET_AVX512F_WITH_INTRINSICS +#define NPY_GCC_TARGET_AVX512F __attribute__((target("avx512f"))) +#else +#define NPY_GCC_TARGET_AVX512F +#endif + +#if defined HAVE_ATTRIBUTE_TARGET_AVX512_SKX && defined HAVE_LINK_AVX512_SKX +#define NPY_GCC_TARGET_AVX512_SKX __attribute__((target("avx512f,avx512dq,avx512vl,avx512bw,avx512cd"))) +#elif defined HAVE_ATTRIBUTE_TARGET_AVX512_SKX_WITH_INTRINSICS +#define NPY_GCC_TARGET_AVX512_SKX __attribute__((target("avx512f,avx512dq,avx512vl,avx512bw,avx512cd"))) +#else +#define NPY_GCC_TARGET_AVX512_SKX +#endif +/* + * mark an argument (starting from 1) that must not be NULL and is not checked + * DO NOT USE IF FUNCTION CHECKS FOR NULL!! the compiler will remove the check + */ +#ifdef HAVE_ATTRIBUTE_NONNULL +#define NPY_GCC_NONNULL(n) __attribute__((nonnull(n))) +#else +#define NPY_GCC_NONNULL(n) +#endif + +#if defined HAVE_XMMINTRIN_H && defined HAVE__MM_LOAD_PS +#define NPY_HAVE_SSE_INTRINSICS +#endif + +#if defined HAVE_EMMINTRIN_H && defined HAVE__MM_LOAD_PD +#define NPY_HAVE_SSE2_INTRINSICS +#endif + +#if defined HAVE_IMMINTRIN_H && defined HAVE_LINK_AVX2 +#define NPY_HAVE_AVX2_INTRINSICS +#endif + +#if defined HAVE_IMMINTRIN_H && defined HAVE_LINK_AVX512F +#define NPY_HAVE_AVX512F_INTRINSICS +#endif +/* + * give a hint to the compiler which branch is more likely or unlikely + * to occur, e.g. rare error cases: + * + * if (NPY_UNLIKELY(failure == 0)) + * return NULL; + * + * the double !! is to cast the expression (e.g. NULL) to a boolean required by + * the intrinsic + */ +#ifdef HAVE___BUILTIN_EXPECT +#define NPY_LIKELY(x) __builtin_expect(!!(x), 1) +#define NPY_UNLIKELY(x) __builtin_expect(!!(x), 0) +#else +#define NPY_LIKELY(x) (x) +#define NPY_UNLIKELY(x) (x) +#endif + +#ifdef HAVE___BUILTIN_PREFETCH +/* unlike _mm_prefetch also works on non-x86 */ +#define NPY_PREFETCH(x, rw, loc) __builtin_prefetch((x), (rw), (loc)) +#else +#ifdef HAVE__MM_PREFETCH +/* _MM_HINT_ET[01] (rw = 1) unsupported, only available in gcc >= 4.9 */ +#define NPY_PREFETCH(x, rw, loc) _mm_prefetch((x), loc == 0 ? _MM_HINT_NTA : \ + (loc == 1 ? _MM_HINT_T2 : \ + (loc == 2 ? _MM_HINT_T1 : \ + (loc == 3 ? _MM_HINT_T0 : -1)))) +#else +#define NPY_PREFETCH(x, rw,loc) +#endif +#endif + +#if defined(_MSC_VER) + #define NPY_INLINE __inline +#elif defined(__GNUC__) + #if defined(__STRICT_ANSI__) + #define NPY_INLINE __inline__ + #else + #define NPY_INLINE inline + #endif +#else + #define NPY_INLINE +#endif + +#ifdef _MSC_VER + #define NPY_FINLINE static __forceinline +#elif defined(__GNUC__) + #define NPY_FINLINE static NPY_INLINE __attribute__((always_inline)) +#else + #define NPY_FINLINE static +#endif + +#ifdef HAVE___THREAD + #define NPY_TLS __thread +#else + #ifdef HAVE___DECLSPEC_THREAD_ + #define NPY_TLS __declspec(thread) + #else + #define NPY_TLS + #endif +#endif + +#ifdef WITH_CPYCHECKER_RETURNS_BORROWED_REF_ATTRIBUTE + #define NPY_RETURNS_BORROWED_REF \ + __attribute__((cpychecker_returns_borrowed_ref)) +#else + #define NPY_RETURNS_BORROWED_REF +#endif + +#ifdef WITH_CPYCHECKER_STEALS_REFERENCE_TO_ARG_ATTRIBUTE + #define NPY_STEALS_REF_TO_ARG(n) \ + __attribute__((cpychecker_steals_reference_to_arg(n))) +#else + #define NPY_STEALS_REF_TO_ARG(n) +#endif + +/* 64 bit file position support, also on win-amd64. Ticket #1660 */ +#if defined(_MSC_VER) && defined(_WIN64) && (_MSC_VER > 1400) || \ + defined(__MINGW32__) || defined(__MINGW64__) + #include + +/* mingw based on 3.4.5 has lseek but not ftell/fseek */ +#if defined(__MINGW32__) || defined(__MINGW64__) +extern int __cdecl _fseeki64(FILE *, long long, int); +extern long long __cdecl _ftelli64(FILE *); +#endif + + #define npy_fseek _fseeki64 + #define npy_ftell _ftelli64 + #define npy_lseek _lseeki64 + #define npy_off_t npy_int64 + + #if NPY_SIZEOF_INT == 8 + #define NPY_OFF_T_PYFMT "i" + #elif NPY_SIZEOF_LONG == 8 + #define NPY_OFF_T_PYFMT "l" + #elif NPY_SIZEOF_LONGLONG == 8 + #define NPY_OFF_T_PYFMT "L" + #else + #error Unsupported size for type off_t + #endif +#else +#ifdef HAVE_FSEEKO + #define npy_fseek fseeko +#else + #define npy_fseek fseek +#endif +#ifdef HAVE_FTELLO + #define npy_ftell ftello +#else + #define npy_ftell ftell +#endif + #include + #define npy_lseek lseek + #define npy_off_t off_t + + #if NPY_SIZEOF_OFF_T == NPY_SIZEOF_SHORT + #define NPY_OFF_T_PYFMT "h" + #elif NPY_SIZEOF_OFF_T == NPY_SIZEOF_INT + #define NPY_OFF_T_PYFMT "i" + #elif NPY_SIZEOF_OFF_T == NPY_SIZEOF_LONG + #define NPY_OFF_T_PYFMT "l" + #elif NPY_SIZEOF_OFF_T == NPY_SIZEOF_LONGLONG + #define NPY_OFF_T_PYFMT "L" + #else + #error Unsupported size for type off_t + #endif +#endif + +/* enums for detected endianness */ +enum { + NPY_CPU_UNKNOWN_ENDIAN, + NPY_CPU_LITTLE, + NPY_CPU_BIG +}; + +/* + * This is to typedef npy_intp to the appropriate pointer size for this + * platform. Py_intptr_t, Py_uintptr_t are defined in pyport.h. + */ +typedef Py_intptr_t npy_intp; +typedef Py_uintptr_t npy_uintp; + +/* + * Define sizes that were not defined in numpyconfig.h. + */ +#define NPY_SIZEOF_CHAR 1 +#define NPY_SIZEOF_BYTE 1 +#define NPY_SIZEOF_DATETIME 8 +#define NPY_SIZEOF_TIMEDELTA 8 +#define NPY_SIZEOF_INTP NPY_SIZEOF_PY_INTPTR_T +#define NPY_SIZEOF_UINTP NPY_SIZEOF_PY_INTPTR_T +#define NPY_SIZEOF_HALF 2 +#define NPY_SIZEOF_CFLOAT NPY_SIZEOF_COMPLEX_FLOAT +#define NPY_SIZEOF_CDOUBLE NPY_SIZEOF_COMPLEX_DOUBLE +#define NPY_SIZEOF_CLONGDOUBLE NPY_SIZEOF_COMPLEX_LONGDOUBLE + +#ifdef constchar +#undef constchar +#endif + +#define NPY_SSIZE_T_PYFMT "n" +#define constchar char + +/* NPY_INTP_FMT Note: + * Unlike the other NPY_*_FMT macros, which are used with PyOS_snprintf, + * NPY_INTP_FMT is used with PyErr_Format and PyUnicode_FromFormat. Those + * functions use different formatting codes that are portably specified + * according to the Python documentation. See issue gh-2388. + */ +#if NPY_SIZEOF_PY_INTPTR_T == NPY_SIZEOF_INT + #define NPY_INTP NPY_INT + #define NPY_UINTP NPY_UINT + #define PyIntpArrType_Type PyIntArrType_Type + #define PyUIntpArrType_Type PyUIntArrType_Type + #define NPY_MAX_INTP NPY_MAX_INT + #define NPY_MIN_INTP NPY_MIN_INT + #define NPY_MAX_UINTP NPY_MAX_UINT + #define NPY_INTP_FMT "d" +#elif NPY_SIZEOF_PY_INTPTR_T == NPY_SIZEOF_LONG + #define NPY_INTP NPY_LONG + #define NPY_UINTP NPY_ULONG + #define PyIntpArrType_Type PyLongArrType_Type + #define PyUIntpArrType_Type PyULongArrType_Type + #define NPY_MAX_INTP NPY_MAX_LONG + #define NPY_MIN_INTP NPY_MIN_LONG + #define NPY_MAX_UINTP NPY_MAX_ULONG + #define NPY_INTP_FMT "ld" +#elif defined(PY_LONG_LONG) && (NPY_SIZEOF_PY_INTPTR_T == NPY_SIZEOF_LONGLONG) + #define NPY_INTP NPY_LONGLONG + #define NPY_UINTP NPY_ULONGLONG + #define PyIntpArrType_Type PyLongLongArrType_Type + #define PyUIntpArrType_Type PyULongLongArrType_Type + #define NPY_MAX_INTP NPY_MAX_LONGLONG + #define NPY_MIN_INTP NPY_MIN_LONGLONG + #define NPY_MAX_UINTP NPY_MAX_ULONGLONG + #define NPY_INTP_FMT "lld" +#endif + +/* + * We can only use C99 formats for npy_int_p if it is the same as + * intp_t, hence the condition on HAVE_UNITPTR_T + */ +#if (NPY_USE_C99_FORMATS) == 1 \ + && (defined HAVE_UINTPTR_T) \ + && (defined HAVE_INTTYPES_H) + #include + #undef NPY_INTP_FMT + #define NPY_INTP_FMT PRIdPTR +#endif + + +/* + * Some platforms don't define bool, long long, or long double. + * Handle that here. + */ +#define NPY_BYTE_FMT "hhd" +#define NPY_UBYTE_FMT "hhu" +#define NPY_SHORT_FMT "hd" +#define NPY_USHORT_FMT "hu" +#define NPY_INT_FMT "d" +#define NPY_UINT_FMT "u" +#define NPY_LONG_FMT "ld" +#define NPY_ULONG_FMT "lu" +#define NPY_HALF_FMT "g" +#define NPY_FLOAT_FMT "g" +#define NPY_DOUBLE_FMT "g" + + +#ifdef PY_LONG_LONG +typedef PY_LONG_LONG npy_longlong; +typedef unsigned PY_LONG_LONG npy_ulonglong; +# ifdef _MSC_VER +# define NPY_LONGLONG_FMT "I64d" +# define NPY_ULONGLONG_FMT "I64u" +# else +# define NPY_LONGLONG_FMT "lld" +# define NPY_ULONGLONG_FMT "llu" +# endif +# ifdef _MSC_VER +# define NPY_LONGLONG_SUFFIX(x) (x##i64) +# define NPY_ULONGLONG_SUFFIX(x) (x##Ui64) +# else +# define NPY_LONGLONG_SUFFIX(x) (x##LL) +# define NPY_ULONGLONG_SUFFIX(x) (x##ULL) +# endif +#else +typedef long npy_longlong; +typedef unsigned long npy_ulonglong; +# define NPY_LONGLONG_SUFFIX(x) (x##L) +# define NPY_ULONGLONG_SUFFIX(x) (x##UL) +#endif + + +typedef unsigned char npy_bool; +#define NPY_FALSE 0 +#define NPY_TRUE 1 + + +#if NPY_SIZEOF_LONGDOUBLE == NPY_SIZEOF_DOUBLE + typedef double npy_longdouble; + #define NPY_LONGDOUBLE_FMT "g" +#else + typedef long double npy_longdouble; + #define NPY_LONGDOUBLE_FMT "Lg" +#endif + +#ifndef Py_USING_UNICODE +#error Must use Python with unicode enabled. +#endif + + +typedef signed char npy_byte; +typedef unsigned char npy_ubyte; +typedef unsigned short npy_ushort; +typedef unsigned int npy_uint; +typedef unsigned long npy_ulong; + +/* These are for completeness */ +typedef char npy_char; +typedef short npy_short; +typedef int npy_int; +typedef long npy_long; +typedef float npy_float; +typedef double npy_double; + +typedef Py_hash_t npy_hash_t; +#define NPY_SIZEOF_HASH_T NPY_SIZEOF_INTP + +/* + * Disabling C99 complex usage: a lot of C code in numpy/scipy rely on being + * able to do .real/.imag. Will have to convert code first. + */ +#if 0 +#if defined(NPY_USE_C99_COMPLEX) && defined(NPY_HAVE_COMPLEX_DOUBLE) +typedef complex npy_cdouble; +#else +typedef struct { double real, imag; } npy_cdouble; +#endif + +#if defined(NPY_USE_C99_COMPLEX) && defined(NPY_HAVE_COMPLEX_FLOAT) +typedef complex float npy_cfloat; +#else +typedef struct { float real, imag; } npy_cfloat; +#endif + +#if defined(NPY_USE_C99_COMPLEX) && defined(NPY_HAVE_COMPLEX_LONG_DOUBLE) +typedef complex long double npy_clongdouble; +#else +typedef struct {npy_longdouble real, imag;} npy_clongdouble; +#endif +#endif +#if NPY_SIZEOF_COMPLEX_DOUBLE != 2 * NPY_SIZEOF_DOUBLE +#error npy_cdouble definition is not compatible with C99 complex definition ! \ + Please contact NumPy maintainers and give detailed information about your \ + compiler and platform +#endif +typedef struct { double real, imag; } npy_cdouble; + +#if NPY_SIZEOF_COMPLEX_FLOAT != 2 * NPY_SIZEOF_FLOAT +#error npy_cfloat definition is not compatible with C99 complex definition ! \ + Please contact NumPy maintainers and give detailed information about your \ + compiler and platform +#endif +typedef struct { float real, imag; } npy_cfloat; + +#if NPY_SIZEOF_COMPLEX_LONGDOUBLE != 2 * NPY_SIZEOF_LONGDOUBLE +#error npy_clongdouble definition is not compatible with C99 complex definition ! \ + Please contact NumPy maintainers and give detailed information about your \ + compiler and platform +#endif +typedef struct { npy_longdouble real, imag; } npy_clongdouble; + +/* + * numarray-style bit-width typedefs + */ +#define NPY_MAX_INT8 127 +#define NPY_MIN_INT8 -128 +#define NPY_MAX_UINT8 255 +#define NPY_MAX_INT16 32767 +#define NPY_MIN_INT16 -32768 +#define NPY_MAX_UINT16 65535 +#define NPY_MAX_INT32 2147483647 +#define NPY_MIN_INT32 (-NPY_MAX_INT32 - 1) +#define NPY_MAX_UINT32 4294967295U +#define NPY_MAX_INT64 NPY_LONGLONG_SUFFIX(9223372036854775807) +#define NPY_MIN_INT64 (-NPY_MAX_INT64 - NPY_LONGLONG_SUFFIX(1)) +#define NPY_MAX_UINT64 NPY_ULONGLONG_SUFFIX(18446744073709551615) +#define NPY_MAX_INT128 NPY_LONGLONG_SUFFIX(85070591730234615865843651857942052864) +#define NPY_MIN_INT128 (-NPY_MAX_INT128 - NPY_LONGLONG_SUFFIX(1)) +#define NPY_MAX_UINT128 NPY_ULONGLONG_SUFFIX(170141183460469231731687303715884105728) +#define NPY_MAX_INT256 NPY_LONGLONG_SUFFIX(57896044618658097711785492504343953926634992332820282019728792003956564819967) +#define NPY_MIN_INT256 (-NPY_MAX_INT256 - NPY_LONGLONG_SUFFIX(1)) +#define NPY_MAX_UINT256 NPY_ULONGLONG_SUFFIX(115792089237316195423570985008687907853269984665640564039457584007913129639935) +#define NPY_MIN_DATETIME NPY_MIN_INT64 +#define NPY_MAX_DATETIME NPY_MAX_INT64 +#define NPY_MIN_TIMEDELTA NPY_MIN_INT64 +#define NPY_MAX_TIMEDELTA NPY_MAX_INT64 + + /* Need to find the number of bits for each type and + make definitions accordingly. + + C states that sizeof(char) == 1 by definition + + So, just using the sizeof keyword won't help. + + It also looks like Python itself uses sizeof(char) quite a + bit, which by definition should be 1 all the time. + + Idea: Make Use of CHAR_BIT which should tell us how many + BITS per CHARACTER + */ + + /* Include platform definitions -- These are in the C89/90 standard */ +#include +#define NPY_MAX_BYTE SCHAR_MAX +#define NPY_MIN_BYTE SCHAR_MIN +#define NPY_MAX_UBYTE UCHAR_MAX +#define NPY_MAX_SHORT SHRT_MAX +#define NPY_MIN_SHORT SHRT_MIN +#define NPY_MAX_USHORT USHRT_MAX +#define NPY_MAX_INT INT_MAX +#ifndef INT_MIN +#define INT_MIN (-INT_MAX - 1) +#endif +#define NPY_MIN_INT INT_MIN +#define NPY_MAX_UINT UINT_MAX +#define NPY_MAX_LONG LONG_MAX +#define NPY_MIN_LONG LONG_MIN +#define NPY_MAX_ULONG ULONG_MAX + +#define NPY_BITSOF_BOOL (sizeof(npy_bool) * CHAR_BIT) +#define NPY_BITSOF_CHAR CHAR_BIT +#define NPY_BITSOF_BYTE (NPY_SIZEOF_BYTE * CHAR_BIT) +#define NPY_BITSOF_SHORT (NPY_SIZEOF_SHORT * CHAR_BIT) +#define NPY_BITSOF_INT (NPY_SIZEOF_INT * CHAR_BIT) +#define NPY_BITSOF_LONG (NPY_SIZEOF_LONG * CHAR_BIT) +#define NPY_BITSOF_LONGLONG (NPY_SIZEOF_LONGLONG * CHAR_BIT) +#define NPY_BITSOF_INTP (NPY_SIZEOF_INTP * CHAR_BIT) +#define NPY_BITSOF_HALF (NPY_SIZEOF_HALF * CHAR_BIT) +#define NPY_BITSOF_FLOAT (NPY_SIZEOF_FLOAT * CHAR_BIT) +#define NPY_BITSOF_DOUBLE (NPY_SIZEOF_DOUBLE * CHAR_BIT) +#define NPY_BITSOF_LONGDOUBLE (NPY_SIZEOF_LONGDOUBLE * CHAR_BIT) +#define NPY_BITSOF_CFLOAT (NPY_SIZEOF_CFLOAT * CHAR_BIT) +#define NPY_BITSOF_CDOUBLE (NPY_SIZEOF_CDOUBLE * CHAR_BIT) +#define NPY_BITSOF_CLONGDOUBLE (NPY_SIZEOF_CLONGDOUBLE * CHAR_BIT) +#define NPY_BITSOF_DATETIME (NPY_SIZEOF_DATETIME * CHAR_BIT) +#define NPY_BITSOF_TIMEDELTA (NPY_SIZEOF_TIMEDELTA * CHAR_BIT) + +#if NPY_BITSOF_LONG == 8 +#define NPY_INT8 NPY_LONG +#define NPY_UINT8 NPY_ULONG + typedef long npy_int8; + typedef unsigned long npy_uint8; +#define PyInt8ScalarObject PyLongScalarObject +#define PyInt8ArrType_Type PyLongArrType_Type +#define PyUInt8ScalarObject PyULongScalarObject +#define PyUInt8ArrType_Type PyULongArrType_Type +#define NPY_INT8_FMT NPY_LONG_FMT +#define NPY_UINT8_FMT NPY_ULONG_FMT +#elif NPY_BITSOF_LONG == 16 +#define NPY_INT16 NPY_LONG +#define NPY_UINT16 NPY_ULONG + typedef long npy_int16; + typedef unsigned long npy_uint16; +#define PyInt16ScalarObject PyLongScalarObject +#define PyInt16ArrType_Type PyLongArrType_Type +#define PyUInt16ScalarObject PyULongScalarObject +#define PyUInt16ArrType_Type PyULongArrType_Type +#define NPY_INT16_FMT NPY_LONG_FMT +#define NPY_UINT16_FMT NPY_ULONG_FMT +#elif NPY_BITSOF_LONG == 32 +#define NPY_INT32 NPY_LONG +#define NPY_UINT32 NPY_ULONG + typedef long npy_int32; + typedef unsigned long npy_uint32; + typedef unsigned long npy_ucs4; +#define PyInt32ScalarObject PyLongScalarObject +#define PyInt32ArrType_Type PyLongArrType_Type +#define PyUInt32ScalarObject PyULongScalarObject +#define PyUInt32ArrType_Type PyULongArrType_Type +#define NPY_INT32_FMT NPY_LONG_FMT +#define NPY_UINT32_FMT NPY_ULONG_FMT +#elif NPY_BITSOF_LONG == 64 +#define NPY_INT64 NPY_LONG +#define NPY_UINT64 NPY_ULONG + typedef long npy_int64; + typedef unsigned long npy_uint64; +#define PyInt64ScalarObject PyLongScalarObject +#define PyInt64ArrType_Type PyLongArrType_Type +#define PyUInt64ScalarObject PyULongScalarObject +#define PyUInt64ArrType_Type PyULongArrType_Type +#define NPY_INT64_FMT NPY_LONG_FMT +#define NPY_UINT64_FMT NPY_ULONG_FMT +#define MyPyLong_FromInt64 PyLong_FromLong +#define MyPyLong_AsInt64 PyLong_AsLong +#elif NPY_BITSOF_LONG == 128 +#define NPY_INT128 NPY_LONG +#define NPY_UINT128 NPY_ULONG + typedef long npy_int128; + typedef unsigned long npy_uint128; +#define PyInt128ScalarObject PyLongScalarObject +#define PyInt128ArrType_Type PyLongArrType_Type +#define PyUInt128ScalarObject PyULongScalarObject +#define PyUInt128ArrType_Type PyULongArrType_Type +#define NPY_INT128_FMT NPY_LONG_FMT +#define NPY_UINT128_FMT NPY_ULONG_FMT +#endif + +#if NPY_BITSOF_LONGLONG == 8 +# ifndef NPY_INT8 +# define NPY_INT8 NPY_LONGLONG +# define NPY_UINT8 NPY_ULONGLONG + typedef npy_longlong npy_int8; + typedef npy_ulonglong npy_uint8; +# define PyInt8ScalarObject PyLongLongScalarObject +# define PyInt8ArrType_Type PyLongLongArrType_Type +# define PyUInt8ScalarObject PyULongLongScalarObject +# define PyUInt8ArrType_Type PyULongLongArrType_Type +#define NPY_INT8_FMT NPY_LONGLONG_FMT +#define NPY_UINT8_FMT NPY_ULONGLONG_FMT +# endif +# define NPY_MAX_LONGLONG NPY_MAX_INT8 +# define NPY_MIN_LONGLONG NPY_MIN_INT8 +# define NPY_MAX_ULONGLONG NPY_MAX_UINT8 +#elif NPY_BITSOF_LONGLONG == 16 +# ifndef NPY_INT16 +# define NPY_INT16 NPY_LONGLONG +# define NPY_UINT16 NPY_ULONGLONG + typedef npy_longlong npy_int16; + typedef npy_ulonglong npy_uint16; +# define PyInt16ScalarObject PyLongLongScalarObject +# define PyInt16ArrType_Type PyLongLongArrType_Type +# define PyUInt16ScalarObject PyULongLongScalarObject +# define PyUInt16ArrType_Type PyULongLongArrType_Type +#define NPY_INT16_FMT NPY_LONGLONG_FMT +#define NPY_UINT16_FMT NPY_ULONGLONG_FMT +# endif +# define NPY_MAX_LONGLONG NPY_MAX_INT16 +# define NPY_MIN_LONGLONG NPY_MIN_INT16 +# define NPY_MAX_ULONGLONG NPY_MAX_UINT16 +#elif NPY_BITSOF_LONGLONG == 32 +# ifndef NPY_INT32 +# define NPY_INT32 NPY_LONGLONG +# define NPY_UINT32 NPY_ULONGLONG + typedef npy_longlong npy_int32; + typedef npy_ulonglong npy_uint32; + typedef npy_ulonglong npy_ucs4; +# define PyInt32ScalarObject PyLongLongScalarObject +# define PyInt32ArrType_Type PyLongLongArrType_Type +# define PyUInt32ScalarObject PyULongLongScalarObject +# define PyUInt32ArrType_Type PyULongLongArrType_Type +#define NPY_INT32_FMT NPY_LONGLONG_FMT +#define NPY_UINT32_FMT NPY_ULONGLONG_FMT +# endif +# define NPY_MAX_LONGLONG NPY_MAX_INT32 +# define NPY_MIN_LONGLONG NPY_MIN_INT32 +# define NPY_MAX_ULONGLONG NPY_MAX_UINT32 +#elif NPY_BITSOF_LONGLONG == 64 +# ifndef NPY_INT64 +# define NPY_INT64 NPY_LONGLONG +# define NPY_UINT64 NPY_ULONGLONG + typedef npy_longlong npy_int64; + typedef npy_ulonglong npy_uint64; +# define PyInt64ScalarObject PyLongLongScalarObject +# define PyInt64ArrType_Type PyLongLongArrType_Type +# define PyUInt64ScalarObject PyULongLongScalarObject +# define PyUInt64ArrType_Type PyULongLongArrType_Type +#define NPY_INT64_FMT NPY_LONGLONG_FMT +#define NPY_UINT64_FMT NPY_ULONGLONG_FMT +# define MyPyLong_FromInt64 PyLong_FromLongLong +# define MyPyLong_AsInt64 PyLong_AsLongLong +# endif +# define NPY_MAX_LONGLONG NPY_MAX_INT64 +# define NPY_MIN_LONGLONG NPY_MIN_INT64 +# define NPY_MAX_ULONGLONG NPY_MAX_UINT64 +#elif NPY_BITSOF_LONGLONG == 128 +# ifndef NPY_INT128 +# define NPY_INT128 NPY_LONGLONG +# define NPY_UINT128 NPY_ULONGLONG + typedef npy_longlong npy_int128; + typedef npy_ulonglong npy_uint128; +# define PyInt128ScalarObject PyLongLongScalarObject +# define PyInt128ArrType_Type PyLongLongArrType_Type +# define PyUInt128ScalarObject PyULongLongScalarObject +# define PyUInt128ArrType_Type PyULongLongArrType_Type +#define NPY_INT128_FMT NPY_LONGLONG_FMT +#define NPY_UINT128_FMT NPY_ULONGLONG_FMT +# endif +# define NPY_MAX_LONGLONG NPY_MAX_INT128 +# define NPY_MIN_LONGLONG NPY_MIN_INT128 +# define NPY_MAX_ULONGLONG NPY_MAX_UINT128 +#elif NPY_BITSOF_LONGLONG == 256 +# define NPY_INT256 NPY_LONGLONG +# define NPY_UINT256 NPY_ULONGLONG + typedef npy_longlong npy_int256; + typedef npy_ulonglong npy_uint256; +# define PyInt256ScalarObject PyLongLongScalarObject +# define PyInt256ArrType_Type PyLongLongArrType_Type +# define PyUInt256ScalarObject PyULongLongScalarObject +# define PyUInt256ArrType_Type PyULongLongArrType_Type +#define NPY_INT256_FMT NPY_LONGLONG_FMT +#define NPY_UINT256_FMT NPY_ULONGLONG_FMT +# define NPY_MAX_LONGLONG NPY_MAX_INT256 +# define NPY_MIN_LONGLONG NPY_MIN_INT256 +# define NPY_MAX_ULONGLONG NPY_MAX_UINT256 +#endif + +#if NPY_BITSOF_INT == 8 +#ifndef NPY_INT8 +#define NPY_INT8 NPY_INT +#define NPY_UINT8 NPY_UINT + typedef int npy_int8; + typedef unsigned int npy_uint8; +# define PyInt8ScalarObject PyIntScalarObject +# define PyInt8ArrType_Type PyIntArrType_Type +# define PyUInt8ScalarObject PyUIntScalarObject +# define PyUInt8ArrType_Type PyUIntArrType_Type +#define NPY_INT8_FMT NPY_INT_FMT +#define NPY_UINT8_FMT NPY_UINT_FMT +#endif +#elif NPY_BITSOF_INT == 16 +#ifndef NPY_INT16 +#define NPY_INT16 NPY_INT +#define NPY_UINT16 NPY_UINT + typedef int npy_int16; + typedef unsigned int npy_uint16; +# define PyInt16ScalarObject PyIntScalarObject +# define PyInt16ArrType_Type PyIntArrType_Type +# define PyUInt16ScalarObject PyIntUScalarObject +# define PyUInt16ArrType_Type PyIntUArrType_Type +#define NPY_INT16_FMT NPY_INT_FMT +#define NPY_UINT16_FMT NPY_UINT_FMT +#endif +#elif NPY_BITSOF_INT == 32 +#ifndef NPY_INT32 +#define NPY_INT32 NPY_INT +#define NPY_UINT32 NPY_UINT + typedef int npy_int32; + typedef unsigned int npy_uint32; + typedef unsigned int npy_ucs4; +# define PyInt32ScalarObject PyIntScalarObject +# define PyInt32ArrType_Type PyIntArrType_Type +# define PyUInt32ScalarObject PyUIntScalarObject +# define PyUInt32ArrType_Type PyUIntArrType_Type +#define NPY_INT32_FMT NPY_INT_FMT +#define NPY_UINT32_FMT NPY_UINT_FMT +#endif +#elif NPY_BITSOF_INT == 64 +#ifndef NPY_INT64 +#define NPY_INT64 NPY_INT +#define NPY_UINT64 NPY_UINT + typedef int npy_int64; + typedef unsigned int npy_uint64; +# define PyInt64ScalarObject PyIntScalarObject +# define PyInt64ArrType_Type PyIntArrType_Type +# define PyUInt64ScalarObject PyUIntScalarObject +# define PyUInt64ArrType_Type PyUIntArrType_Type +#define NPY_INT64_FMT NPY_INT_FMT +#define NPY_UINT64_FMT NPY_UINT_FMT +# define MyPyLong_FromInt64 PyLong_FromLong +# define MyPyLong_AsInt64 PyLong_AsLong +#endif +#elif NPY_BITSOF_INT == 128 +#ifndef NPY_INT128 +#define NPY_INT128 NPY_INT +#define NPY_UINT128 NPY_UINT + typedef int npy_int128; + typedef unsigned int npy_uint128; +# define PyInt128ScalarObject PyIntScalarObject +# define PyInt128ArrType_Type PyIntArrType_Type +# define PyUInt128ScalarObject PyUIntScalarObject +# define PyUInt128ArrType_Type PyUIntArrType_Type +#define NPY_INT128_FMT NPY_INT_FMT +#define NPY_UINT128_FMT NPY_UINT_FMT +#endif +#endif + +#if NPY_BITSOF_SHORT == 8 +#ifndef NPY_INT8 +#define NPY_INT8 NPY_SHORT +#define NPY_UINT8 NPY_USHORT + typedef short npy_int8; + typedef unsigned short npy_uint8; +# define PyInt8ScalarObject PyShortScalarObject +# define PyInt8ArrType_Type PyShortArrType_Type +# define PyUInt8ScalarObject PyUShortScalarObject +# define PyUInt8ArrType_Type PyUShortArrType_Type +#define NPY_INT8_FMT NPY_SHORT_FMT +#define NPY_UINT8_FMT NPY_USHORT_FMT +#endif +#elif NPY_BITSOF_SHORT == 16 +#ifndef NPY_INT16 +#define NPY_INT16 NPY_SHORT +#define NPY_UINT16 NPY_USHORT + typedef short npy_int16; + typedef unsigned short npy_uint16; +# define PyInt16ScalarObject PyShortScalarObject +# define PyInt16ArrType_Type PyShortArrType_Type +# define PyUInt16ScalarObject PyUShortScalarObject +# define PyUInt16ArrType_Type PyUShortArrType_Type +#define NPY_INT16_FMT NPY_SHORT_FMT +#define NPY_UINT16_FMT NPY_USHORT_FMT +#endif +#elif NPY_BITSOF_SHORT == 32 +#ifndef NPY_INT32 +#define NPY_INT32 NPY_SHORT +#define NPY_UINT32 NPY_USHORT + typedef short npy_int32; + typedef unsigned short npy_uint32; + typedef unsigned short npy_ucs4; +# define PyInt32ScalarObject PyShortScalarObject +# define PyInt32ArrType_Type PyShortArrType_Type +# define PyUInt32ScalarObject PyUShortScalarObject +# define PyUInt32ArrType_Type PyUShortArrType_Type +#define NPY_INT32_FMT NPY_SHORT_FMT +#define NPY_UINT32_FMT NPY_USHORT_FMT +#endif +#elif NPY_BITSOF_SHORT == 64 +#ifndef NPY_INT64 +#define NPY_INT64 NPY_SHORT +#define NPY_UINT64 NPY_USHORT + typedef short npy_int64; + typedef unsigned short npy_uint64; +# define PyInt64ScalarObject PyShortScalarObject +# define PyInt64ArrType_Type PyShortArrType_Type +# define PyUInt64ScalarObject PyUShortScalarObject +# define PyUInt64ArrType_Type PyUShortArrType_Type +#define NPY_INT64_FMT NPY_SHORT_FMT +#define NPY_UINT64_FMT NPY_USHORT_FMT +# define MyPyLong_FromInt64 PyLong_FromLong +# define MyPyLong_AsInt64 PyLong_AsLong +#endif +#elif NPY_BITSOF_SHORT == 128 +#ifndef NPY_INT128 +#define NPY_INT128 NPY_SHORT +#define NPY_UINT128 NPY_USHORT + typedef short npy_int128; + typedef unsigned short npy_uint128; +# define PyInt128ScalarObject PyShortScalarObject +# define PyInt128ArrType_Type PyShortArrType_Type +# define PyUInt128ScalarObject PyUShortScalarObject +# define PyUInt128ArrType_Type PyUShortArrType_Type +#define NPY_INT128_FMT NPY_SHORT_FMT +#define NPY_UINT128_FMT NPY_USHORT_FMT +#endif +#endif + + +#if NPY_BITSOF_CHAR == 8 +#ifndef NPY_INT8 +#define NPY_INT8 NPY_BYTE +#define NPY_UINT8 NPY_UBYTE + typedef signed char npy_int8; + typedef unsigned char npy_uint8; +# define PyInt8ScalarObject PyByteScalarObject +# define PyInt8ArrType_Type PyByteArrType_Type +# define PyUInt8ScalarObject PyUByteScalarObject +# define PyUInt8ArrType_Type PyUByteArrType_Type +#define NPY_INT8_FMT NPY_BYTE_FMT +#define NPY_UINT8_FMT NPY_UBYTE_FMT +#endif +#elif NPY_BITSOF_CHAR == 16 +#ifndef NPY_INT16 +#define NPY_INT16 NPY_BYTE +#define NPY_UINT16 NPY_UBYTE + typedef signed char npy_int16; + typedef unsigned char npy_uint16; +# define PyInt16ScalarObject PyByteScalarObject +# define PyInt16ArrType_Type PyByteArrType_Type +# define PyUInt16ScalarObject PyUByteScalarObject +# define PyUInt16ArrType_Type PyUByteArrType_Type +#define NPY_INT16_FMT NPY_BYTE_FMT +#define NPY_UINT16_FMT NPY_UBYTE_FMT +#endif +#elif NPY_BITSOF_CHAR == 32 +#ifndef NPY_INT32 +#define NPY_INT32 NPY_BYTE +#define NPY_UINT32 NPY_UBYTE + typedef signed char npy_int32; + typedef unsigned char npy_uint32; + typedef unsigned char npy_ucs4; +# define PyInt32ScalarObject PyByteScalarObject +# define PyInt32ArrType_Type PyByteArrType_Type +# define PyUInt32ScalarObject PyUByteScalarObject +# define PyUInt32ArrType_Type PyUByteArrType_Type +#define NPY_INT32_FMT NPY_BYTE_FMT +#define NPY_UINT32_FMT NPY_UBYTE_FMT +#endif +#elif NPY_BITSOF_CHAR == 64 +#ifndef NPY_INT64 +#define NPY_INT64 NPY_BYTE +#define NPY_UINT64 NPY_UBYTE + typedef signed char npy_int64; + typedef unsigned char npy_uint64; +# define PyInt64ScalarObject PyByteScalarObject +# define PyInt64ArrType_Type PyByteArrType_Type +# define PyUInt64ScalarObject PyUByteScalarObject +# define PyUInt64ArrType_Type PyUByteArrType_Type +#define NPY_INT64_FMT NPY_BYTE_FMT +#define NPY_UINT64_FMT NPY_UBYTE_FMT +# define MyPyLong_FromInt64 PyLong_FromLong +# define MyPyLong_AsInt64 PyLong_AsLong +#endif +#elif NPY_BITSOF_CHAR == 128 +#ifndef NPY_INT128 +#define NPY_INT128 NPY_BYTE +#define NPY_UINT128 NPY_UBYTE + typedef signed char npy_int128; + typedef unsigned char npy_uint128; +# define PyInt128ScalarObject PyByteScalarObject +# define PyInt128ArrType_Type PyByteArrType_Type +# define PyUInt128ScalarObject PyUByteScalarObject +# define PyUInt128ArrType_Type PyUByteArrType_Type +#define NPY_INT128_FMT NPY_BYTE_FMT +#define NPY_UINT128_FMT NPY_UBYTE_FMT +#endif +#endif + + + +#if NPY_BITSOF_DOUBLE == 32 +#ifndef NPY_FLOAT32 +#define NPY_FLOAT32 NPY_DOUBLE +#define NPY_COMPLEX64 NPY_CDOUBLE + typedef double npy_float32; + typedef npy_cdouble npy_complex64; +# define PyFloat32ScalarObject PyDoubleScalarObject +# define PyComplex64ScalarObject PyCDoubleScalarObject +# define PyFloat32ArrType_Type PyDoubleArrType_Type +# define PyComplex64ArrType_Type PyCDoubleArrType_Type +#define NPY_FLOAT32_FMT NPY_DOUBLE_FMT +#define NPY_COMPLEX64_FMT NPY_CDOUBLE_FMT +#endif +#elif NPY_BITSOF_DOUBLE == 64 +#ifndef NPY_FLOAT64 +#define NPY_FLOAT64 NPY_DOUBLE +#define NPY_COMPLEX128 NPY_CDOUBLE + typedef double npy_float64; + typedef npy_cdouble npy_complex128; +# define PyFloat64ScalarObject PyDoubleScalarObject +# define PyComplex128ScalarObject PyCDoubleScalarObject +# define PyFloat64ArrType_Type PyDoubleArrType_Type +# define PyComplex128ArrType_Type PyCDoubleArrType_Type +#define NPY_FLOAT64_FMT NPY_DOUBLE_FMT +#define NPY_COMPLEX128_FMT NPY_CDOUBLE_FMT +#endif +#elif NPY_BITSOF_DOUBLE == 80 +#ifndef NPY_FLOAT80 +#define NPY_FLOAT80 NPY_DOUBLE +#define NPY_COMPLEX160 NPY_CDOUBLE + typedef double npy_float80; + typedef npy_cdouble npy_complex160; +# define PyFloat80ScalarObject PyDoubleScalarObject +# define PyComplex160ScalarObject PyCDoubleScalarObject +# define PyFloat80ArrType_Type PyDoubleArrType_Type +# define PyComplex160ArrType_Type PyCDoubleArrType_Type +#define NPY_FLOAT80_FMT NPY_DOUBLE_FMT +#define NPY_COMPLEX160_FMT NPY_CDOUBLE_FMT +#endif +#elif NPY_BITSOF_DOUBLE == 96 +#ifndef NPY_FLOAT96 +#define NPY_FLOAT96 NPY_DOUBLE +#define NPY_COMPLEX192 NPY_CDOUBLE + typedef double npy_float96; + typedef npy_cdouble npy_complex192; +# define PyFloat96ScalarObject PyDoubleScalarObject +# define PyComplex192ScalarObject PyCDoubleScalarObject +# define PyFloat96ArrType_Type PyDoubleArrType_Type +# define PyComplex192ArrType_Type PyCDoubleArrType_Type +#define NPY_FLOAT96_FMT NPY_DOUBLE_FMT +#define NPY_COMPLEX192_FMT NPY_CDOUBLE_FMT +#endif +#elif NPY_BITSOF_DOUBLE == 128 +#ifndef NPY_FLOAT128 +#define NPY_FLOAT128 NPY_DOUBLE +#define NPY_COMPLEX256 NPY_CDOUBLE + typedef double npy_float128; + typedef npy_cdouble npy_complex256; +# define PyFloat128ScalarObject PyDoubleScalarObject +# define PyComplex256ScalarObject PyCDoubleScalarObject +# define PyFloat128ArrType_Type PyDoubleArrType_Type +# define PyComplex256ArrType_Type PyCDoubleArrType_Type +#define NPY_FLOAT128_FMT NPY_DOUBLE_FMT +#define NPY_COMPLEX256_FMT NPY_CDOUBLE_FMT +#endif +#endif + + + +#if NPY_BITSOF_FLOAT == 32 +#ifndef NPY_FLOAT32 +#define NPY_FLOAT32 NPY_FLOAT +#define NPY_COMPLEX64 NPY_CFLOAT + typedef float npy_float32; + typedef npy_cfloat npy_complex64; +# define PyFloat32ScalarObject PyFloatScalarObject +# define PyComplex64ScalarObject PyCFloatScalarObject +# define PyFloat32ArrType_Type PyFloatArrType_Type +# define PyComplex64ArrType_Type PyCFloatArrType_Type +#define NPY_FLOAT32_FMT NPY_FLOAT_FMT +#define NPY_COMPLEX64_FMT NPY_CFLOAT_FMT +#endif +#elif NPY_BITSOF_FLOAT == 64 +#ifndef NPY_FLOAT64 +#define NPY_FLOAT64 NPY_FLOAT +#define NPY_COMPLEX128 NPY_CFLOAT + typedef float npy_float64; + typedef npy_cfloat npy_complex128; +# define PyFloat64ScalarObject PyFloatScalarObject +# define PyComplex128ScalarObject PyCFloatScalarObject +# define PyFloat64ArrType_Type PyFloatArrType_Type +# define PyComplex128ArrType_Type PyCFloatArrType_Type +#define NPY_FLOAT64_FMT NPY_FLOAT_FMT +#define NPY_COMPLEX128_FMT NPY_CFLOAT_FMT +#endif +#elif NPY_BITSOF_FLOAT == 80 +#ifndef NPY_FLOAT80 +#define NPY_FLOAT80 NPY_FLOAT +#define NPY_COMPLEX160 NPY_CFLOAT + typedef float npy_float80; + typedef npy_cfloat npy_complex160; +# define PyFloat80ScalarObject PyFloatScalarObject +# define PyComplex160ScalarObject PyCFloatScalarObject +# define PyFloat80ArrType_Type PyFloatArrType_Type +# define PyComplex160ArrType_Type PyCFloatArrType_Type +#define NPY_FLOAT80_FMT NPY_FLOAT_FMT +#define NPY_COMPLEX160_FMT NPY_CFLOAT_FMT +#endif +#elif NPY_BITSOF_FLOAT == 96 +#ifndef NPY_FLOAT96 +#define NPY_FLOAT96 NPY_FLOAT +#define NPY_COMPLEX192 NPY_CFLOAT + typedef float npy_float96; + typedef npy_cfloat npy_complex192; +# define PyFloat96ScalarObject PyFloatScalarObject +# define PyComplex192ScalarObject PyCFloatScalarObject +# define PyFloat96ArrType_Type PyFloatArrType_Type +# define PyComplex192ArrType_Type PyCFloatArrType_Type +#define NPY_FLOAT96_FMT NPY_FLOAT_FMT +#define NPY_COMPLEX192_FMT NPY_CFLOAT_FMT +#endif +#elif NPY_BITSOF_FLOAT == 128 +#ifndef NPY_FLOAT128 +#define NPY_FLOAT128 NPY_FLOAT +#define NPY_COMPLEX256 NPY_CFLOAT + typedef float npy_float128; + typedef npy_cfloat npy_complex256; +# define PyFloat128ScalarObject PyFloatScalarObject +# define PyComplex256ScalarObject PyCFloatScalarObject +# define PyFloat128ArrType_Type PyFloatArrType_Type +# define PyComplex256ArrType_Type PyCFloatArrType_Type +#define NPY_FLOAT128_FMT NPY_FLOAT_FMT +#define NPY_COMPLEX256_FMT NPY_CFLOAT_FMT +#endif +#endif + +/* half/float16 isn't a floating-point type in C */ +#define NPY_FLOAT16 NPY_HALF +typedef npy_uint16 npy_half; +typedef npy_half npy_float16; + +#if NPY_BITSOF_LONGDOUBLE == 32 +#ifndef NPY_FLOAT32 +#define NPY_FLOAT32 NPY_LONGDOUBLE +#define NPY_COMPLEX64 NPY_CLONGDOUBLE + typedef npy_longdouble npy_float32; + typedef npy_clongdouble npy_complex64; +# define PyFloat32ScalarObject PyLongDoubleScalarObject +# define PyComplex64ScalarObject PyCLongDoubleScalarObject +# define PyFloat32ArrType_Type PyLongDoubleArrType_Type +# define PyComplex64ArrType_Type PyCLongDoubleArrType_Type +#define NPY_FLOAT32_FMT NPY_LONGDOUBLE_FMT +#define NPY_COMPLEX64_FMT NPY_CLONGDOUBLE_FMT +#endif +#elif NPY_BITSOF_LONGDOUBLE == 64 +#ifndef NPY_FLOAT64 +#define NPY_FLOAT64 NPY_LONGDOUBLE +#define NPY_COMPLEX128 NPY_CLONGDOUBLE + typedef npy_longdouble npy_float64; + typedef npy_clongdouble npy_complex128; +# define PyFloat64ScalarObject PyLongDoubleScalarObject +# define PyComplex128ScalarObject PyCLongDoubleScalarObject +# define PyFloat64ArrType_Type PyLongDoubleArrType_Type +# define PyComplex128ArrType_Type PyCLongDoubleArrType_Type +#define NPY_FLOAT64_FMT NPY_LONGDOUBLE_FMT +#define NPY_COMPLEX128_FMT NPY_CLONGDOUBLE_FMT +#endif +#elif NPY_BITSOF_LONGDOUBLE == 80 +#ifndef NPY_FLOAT80 +#define NPY_FLOAT80 NPY_LONGDOUBLE +#define NPY_COMPLEX160 NPY_CLONGDOUBLE + typedef npy_longdouble npy_float80; + typedef npy_clongdouble npy_complex160; +# define PyFloat80ScalarObject PyLongDoubleScalarObject +# define PyComplex160ScalarObject PyCLongDoubleScalarObject +# define PyFloat80ArrType_Type PyLongDoubleArrType_Type +# define PyComplex160ArrType_Type PyCLongDoubleArrType_Type +#define NPY_FLOAT80_FMT NPY_LONGDOUBLE_FMT +#define NPY_COMPLEX160_FMT NPY_CLONGDOUBLE_FMT +#endif +#elif NPY_BITSOF_LONGDOUBLE == 96 +#ifndef NPY_FLOAT96 +#define NPY_FLOAT96 NPY_LONGDOUBLE +#define NPY_COMPLEX192 NPY_CLONGDOUBLE + typedef npy_longdouble npy_float96; + typedef npy_clongdouble npy_complex192; +# define PyFloat96ScalarObject PyLongDoubleScalarObject +# define PyComplex192ScalarObject PyCLongDoubleScalarObject +# define PyFloat96ArrType_Type PyLongDoubleArrType_Type +# define PyComplex192ArrType_Type PyCLongDoubleArrType_Type +#define NPY_FLOAT96_FMT NPY_LONGDOUBLE_FMT +#define NPY_COMPLEX192_FMT NPY_CLONGDOUBLE_FMT +#endif +#elif NPY_BITSOF_LONGDOUBLE == 128 +#ifndef NPY_FLOAT128 +#define NPY_FLOAT128 NPY_LONGDOUBLE +#define NPY_COMPLEX256 NPY_CLONGDOUBLE + typedef npy_longdouble npy_float128; + typedef npy_clongdouble npy_complex256; +# define PyFloat128ScalarObject PyLongDoubleScalarObject +# define PyComplex256ScalarObject PyCLongDoubleScalarObject +# define PyFloat128ArrType_Type PyLongDoubleArrType_Type +# define PyComplex256ArrType_Type PyCLongDoubleArrType_Type +#define NPY_FLOAT128_FMT NPY_LONGDOUBLE_FMT +#define NPY_COMPLEX256_FMT NPY_CLONGDOUBLE_FMT +#endif +#elif NPY_BITSOF_LONGDOUBLE == 256 +#define NPY_FLOAT256 NPY_LONGDOUBLE +#define NPY_COMPLEX512 NPY_CLONGDOUBLE + typedef npy_longdouble npy_float256; + typedef npy_clongdouble npy_complex512; +# define PyFloat256ScalarObject PyLongDoubleScalarObject +# define PyComplex512ScalarObject PyCLongDoubleScalarObject +# define PyFloat256ArrType_Type PyLongDoubleArrType_Type +# define PyComplex512ArrType_Type PyCLongDoubleArrType_Type +#define NPY_FLOAT256_FMT NPY_LONGDOUBLE_FMT +#define NPY_COMPLEX512_FMT NPY_CLONGDOUBLE_FMT +#endif + +/* datetime typedefs */ +typedef npy_int64 npy_timedelta; +typedef npy_int64 npy_datetime; +#define NPY_DATETIME_FMT NPY_INT64_FMT +#define NPY_TIMEDELTA_FMT NPY_INT64_FMT + +/* End of typedefs for numarray style bit-width names */ + +#endif diff --git a/EXE version/main/numpy/core/include/numpy/npy_cpu.h b/EXE version/main/numpy/core/include/numpy/npy_cpu.h new file mode 100644 index 00000000..bc1fad72 --- /dev/null +++ b/EXE version/main/numpy/core/include/numpy/npy_cpu.h @@ -0,0 +1,126 @@ +/* + * This set (target) cpu specific macros: + * - Possible values: + * NPY_CPU_X86 + * NPY_CPU_AMD64 + * NPY_CPU_PPC + * NPY_CPU_PPC64 + * NPY_CPU_PPC64LE + * NPY_CPU_SPARC + * NPY_CPU_S390 + * NPY_CPU_IA64 + * NPY_CPU_HPPA + * NPY_CPU_ALPHA + * NPY_CPU_ARMEL + * NPY_CPU_ARMEB + * NPY_CPU_SH_LE + * NPY_CPU_SH_BE + * NPY_CPU_ARCEL + * NPY_CPU_ARCEB + * NPY_CPU_RISCV64 + * NPY_CPU_WASM + */ +#ifndef _NPY_CPUARCH_H_ +#define _NPY_CPUARCH_H_ + +#include "numpyconfig.h" + +#if defined( __i386__ ) || defined(i386) || defined(_M_IX86) + /* + * __i386__ is defined by gcc and Intel compiler on Linux, + * _M_IX86 by VS compiler, + * i386 by Sun compilers on opensolaris at least + */ + #define NPY_CPU_X86 +#elif defined(__x86_64__) || defined(__amd64__) || defined(__x86_64) || defined(_M_AMD64) + /* + * both __x86_64__ and __amd64__ are defined by gcc + * __x86_64 defined by sun compiler on opensolaris at least + * _M_AMD64 defined by MS compiler + */ + #define NPY_CPU_AMD64 +#elif defined(__powerpc64__) && defined(__LITTLE_ENDIAN__) + #define NPY_CPU_PPC64LE +#elif defined(__powerpc64__) && defined(__BIG_ENDIAN__) + #define NPY_CPU_PPC64 +#elif defined(__ppc__) || defined(__powerpc__) || defined(_ARCH_PPC) + /* + * __ppc__ is defined by gcc, I remember having seen __powerpc__ once, + * but can't find it ATM + * _ARCH_PPC is used by at least gcc on AIX + * As __powerpc__ and _ARCH_PPC are also defined by PPC64 check + * for those specifically first before defaulting to ppc + */ + #define NPY_CPU_PPC +#elif defined(__sparc__) || defined(__sparc) + /* __sparc__ is defined by gcc and Forte (e.g. Sun) compilers */ + #define NPY_CPU_SPARC +#elif defined(__s390__) + #define NPY_CPU_S390 +#elif defined(__ia64) + #define NPY_CPU_IA64 +#elif defined(__hppa) + #define NPY_CPU_HPPA +#elif defined(__alpha__) + #define NPY_CPU_ALPHA +#elif defined(__arm__) || defined(__aarch64__) || defined(_M_ARM64) + /* _M_ARM64 is defined in MSVC for ARM64 compilation on Windows */ + #if defined(__ARMEB__) || defined(__AARCH64EB__) + #if defined(__ARM_32BIT_STATE) + #define NPY_CPU_ARMEB_AARCH32 + #elif defined(__ARM_64BIT_STATE) + #define NPY_CPU_ARMEB_AARCH64 + #else + #define NPY_CPU_ARMEB + #endif + #elif defined(__ARMEL__) || defined(__AARCH64EL__) || defined(_M_ARM64) + #if defined(__ARM_32BIT_STATE) + #define NPY_CPU_ARMEL_AARCH32 + #elif defined(__ARM_64BIT_STATE) || defined(_M_ARM64) + #define NPY_CPU_ARMEL_AARCH64 + #else + #define NPY_CPU_ARMEL + #endif + #else + # error Unknown ARM CPU, please report this to numpy maintainers with \ + information about your platform (OS, CPU and compiler) + #endif +#elif defined(__sh__) && defined(__LITTLE_ENDIAN__) + #define NPY_CPU_SH_LE +#elif defined(__sh__) && defined(__BIG_ENDIAN__) + #define NPY_CPU_SH_BE +#elif defined(__MIPSEL__) + #define NPY_CPU_MIPSEL +#elif defined(__MIPSEB__) + #define NPY_CPU_MIPSEB +#elif defined(__or1k__) + #define NPY_CPU_OR1K +#elif defined(__mc68000__) + #define NPY_CPU_M68K +#elif defined(__arc__) && defined(__LITTLE_ENDIAN__) + #define NPY_CPU_ARCEL +#elif defined(__arc__) && defined(__BIG_ENDIAN__) + #define NPY_CPU_ARCEB +#elif defined(__riscv) && defined(__riscv_xlen) && __riscv_xlen == 64 + #define NPY_CPU_RISCV64 +#elif defined(__EMSCRIPTEN__) + /* __EMSCRIPTEN__ is defined by emscripten: an LLVM-to-Web compiler */ + #define NPY_CPU_WASM +#else + #error Unknown CPU, please report this to numpy maintainers with \ + information about your platform (OS, CPU and compiler) +#endif + +/* + * Except for the following architectures, memory access is limited to the natural + * alignment of data types otherwise it may lead to bus error or performance regression. + * For more details about unaligned access, see https://www.kernel.org/doc/Documentation/unaligned-memory-access.txt. +*/ +#if defined(NPY_CPU_X86) || defined(NPY_CPU_AMD64) || defined(__aarch64__) || defined(__powerpc64__) + #define NPY_ALIGNMENT_REQUIRED 0 +#endif +#ifndef NPY_ALIGNMENT_REQUIRED + #define NPY_ALIGNMENT_REQUIRED 1 +#endif + +#endif diff --git a/EXE version/main/numpy/core/include/numpy/npy_endian.h b/EXE version/main/numpy/core/include/numpy/npy_endian.h new file mode 100644 index 00000000..aa367a00 --- /dev/null +++ b/EXE version/main/numpy/core/include/numpy/npy_endian.h @@ -0,0 +1,73 @@ +#ifndef _NPY_ENDIAN_H_ +#define _NPY_ENDIAN_H_ + +/* + * NPY_BYTE_ORDER is set to the same value as BYTE_ORDER set by glibc in + * endian.h + */ + +#if defined(NPY_HAVE_ENDIAN_H) || defined(NPY_HAVE_SYS_ENDIAN_H) + /* Use endian.h if available */ + + #if defined(NPY_HAVE_ENDIAN_H) + #include + #elif defined(NPY_HAVE_SYS_ENDIAN_H) + #include + #endif + + #if defined(BYTE_ORDER) && defined(BIG_ENDIAN) && defined(LITTLE_ENDIAN) + #define NPY_BYTE_ORDER BYTE_ORDER + #define NPY_LITTLE_ENDIAN LITTLE_ENDIAN + #define NPY_BIG_ENDIAN BIG_ENDIAN + #elif defined(_BYTE_ORDER) && defined(_BIG_ENDIAN) && defined(_LITTLE_ENDIAN) + #define NPY_BYTE_ORDER _BYTE_ORDER + #define NPY_LITTLE_ENDIAN _LITTLE_ENDIAN + #define NPY_BIG_ENDIAN _BIG_ENDIAN + #elif defined(__BYTE_ORDER) && defined(__BIG_ENDIAN) && defined(__LITTLE_ENDIAN) + #define NPY_BYTE_ORDER __BYTE_ORDER + #define NPY_LITTLE_ENDIAN __LITTLE_ENDIAN + #define NPY_BIG_ENDIAN __BIG_ENDIAN + #endif +#endif + +#ifndef NPY_BYTE_ORDER + /* Set endianness info using target CPU */ + #include "npy_cpu.h" + + #define NPY_LITTLE_ENDIAN 1234 + #define NPY_BIG_ENDIAN 4321 + + #if defined(NPY_CPU_X86) \ + || defined(NPY_CPU_AMD64) \ + || defined(NPY_CPU_IA64) \ + || defined(NPY_CPU_ALPHA) \ + || defined(NPY_CPU_ARMEL) \ + || defined(NPY_CPU_ARMEL_AARCH32) \ + || defined(NPY_CPU_ARMEL_AARCH64) \ + || defined(NPY_CPU_SH_LE) \ + || defined(NPY_CPU_MIPSEL) \ + || defined(NPY_CPU_PPC64LE) \ + || defined(NPY_CPU_ARCEL) \ + || defined(NPY_CPU_RISCV64) \ + || defined(NPY_CPU_WASM) + #define NPY_BYTE_ORDER NPY_LITTLE_ENDIAN + #elif defined(NPY_CPU_PPC) \ + || defined(NPY_CPU_SPARC) \ + || defined(NPY_CPU_S390) \ + || defined(NPY_CPU_HPPA) \ + || defined(NPY_CPU_PPC64) \ + || defined(NPY_CPU_ARMEB) \ + || defined(NPY_CPU_ARMEB_AARCH32) \ + || defined(NPY_CPU_ARMEB_AARCH64) \ + || defined(NPY_CPU_SH_BE) \ + || defined(NPY_CPU_MIPSEB) \ + || defined(NPY_CPU_OR1K) \ + || defined(NPY_CPU_M68K) \ + || defined(NPY_CPU_ARCEB) + #define NPY_BYTE_ORDER NPY_BIG_ENDIAN + #else + #error Unknown CPU: can not set endianness + #endif +#endif + +#endif diff --git a/EXE version/main/numpy/core/include/numpy/npy_interrupt.h b/EXE version/main/numpy/core/include/numpy/npy_interrupt.h new file mode 100644 index 00000000..bcb53932 --- /dev/null +++ b/EXE version/main/numpy/core/include/numpy/npy_interrupt.h @@ -0,0 +1,56 @@ +/* + * This API is only provided because it is part of publicly exported + * headers. Its use is considered DEPRECATED, and it will be removed + * eventually. + * (This includes the _PyArray_SigintHandler and _PyArray_GetSigintBuf + * functions which are however, public API, and not headers.) + * + * Instead of using these non-threadsafe macros consider periodically + * querying `PyErr_CheckSignals()` or `PyOS_InterruptOccurred()` will work. + * Both of these require holding the GIL, although cpython could add a + * version of `PyOS_InterruptOccurred()` which does not. Such a version + * actually exists as private API in Python 3.10, and backported to 3.9 and 3.8, + * see also https://bugs.python.org/issue41037 and + * https://github.com/python/cpython/pull/20599). + */ + +#ifndef NPY_INTERRUPT_H +#define NPY_INTERRUPT_H + +#ifndef NPY_NO_SIGNAL + +#include +#include + +#ifndef sigsetjmp + +#define NPY_SIGSETJMP(arg1, arg2) setjmp(arg1) +#define NPY_SIGLONGJMP(arg1, arg2) longjmp(arg1, arg2) +#define NPY_SIGJMP_BUF jmp_buf + +#else + +#define NPY_SIGSETJMP(arg1, arg2) sigsetjmp(arg1, arg2) +#define NPY_SIGLONGJMP(arg1, arg2) siglongjmp(arg1, arg2) +#define NPY_SIGJMP_BUF sigjmp_buf + +#endif + +# define NPY_SIGINT_ON { \ + PyOS_sighandler_t _npy_sig_save; \ + _npy_sig_save = PyOS_setsig(SIGINT, _PyArray_SigintHandler); \ + if (NPY_SIGSETJMP(*((NPY_SIGJMP_BUF *)_PyArray_GetSigintBuf()), \ + 1) == 0) { \ + +# define NPY_SIGINT_OFF } \ + PyOS_setsig(SIGINT, _npy_sig_save); \ + } + +#else /* NPY_NO_SIGNAL */ + +#define NPY_SIGINT_ON +#define NPY_SIGINT_OFF + +#endif /* HAVE_SIGSETJMP */ + +#endif /* NPY_INTERRUPT_H */ diff --git a/EXE version/main/numpy/core/include/numpy/npy_math.h b/EXE version/main/numpy/core/include/numpy/npy_math.h new file mode 100644 index 00000000..f32e298f --- /dev/null +++ b/EXE version/main/numpy/core/include/numpy/npy_math.h @@ -0,0 +1,588 @@ +#ifndef __NPY_MATH_C99_H_ +#define __NPY_MATH_C99_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +#include +#ifdef __SUNPRO_CC +#include +#endif + +/* By adding static inline specifiers to npy_math function definitions when + appropriate, compiler is given the opportunity to optimize */ +#if NPY_INLINE_MATH +#define NPY_INPLACE NPY_INLINE static +#else +#define NPY_INPLACE +#endif + + +/* + * NAN and INFINITY like macros (same behavior as glibc for NAN, same as C99 + * for INFINITY) + * + * XXX: I should test whether INFINITY and NAN are available on the platform + */ +NPY_INLINE static float __npy_inff(void) +{ + const union { npy_uint32 __i; float __f;} __bint = {0x7f800000UL}; + return __bint.__f; +} + +NPY_INLINE static float __npy_nanf(void) +{ + const union { npy_uint32 __i; float __f;} __bint = {0x7fc00000UL}; + return __bint.__f; +} + +NPY_INLINE static float __npy_pzerof(void) +{ + const union { npy_uint32 __i; float __f;} __bint = {0x00000000UL}; + return __bint.__f; +} + +NPY_INLINE static float __npy_nzerof(void) +{ + const union { npy_uint32 __i; float __f;} __bint = {0x80000000UL}; + return __bint.__f; +} + +#define NPY_INFINITYF __npy_inff() +#define NPY_NANF __npy_nanf() +#define NPY_PZEROF __npy_pzerof() +#define NPY_NZEROF __npy_nzerof() + +#define NPY_INFINITY ((npy_double)NPY_INFINITYF) +#define NPY_NAN ((npy_double)NPY_NANF) +#define NPY_PZERO ((npy_double)NPY_PZEROF) +#define NPY_NZERO ((npy_double)NPY_NZEROF) + +#define NPY_INFINITYL ((npy_longdouble)NPY_INFINITYF) +#define NPY_NANL ((npy_longdouble)NPY_NANF) +#define NPY_PZEROL ((npy_longdouble)NPY_PZEROF) +#define NPY_NZEROL ((npy_longdouble)NPY_NZEROF) + +/* + * Useful constants + */ +#define NPY_E 2.718281828459045235360287471352662498 /* e */ +#define NPY_LOG2E 1.442695040888963407359924681001892137 /* log_2 e */ +#define NPY_LOG10E 0.434294481903251827651128918916605082 /* log_10 e */ +#define NPY_LOGE2 0.693147180559945309417232121458176568 /* log_e 2 */ +#define NPY_LOGE10 2.302585092994045684017991454684364208 /* log_e 10 */ +#define NPY_PI 3.141592653589793238462643383279502884 /* pi */ +#define NPY_PI_2 1.570796326794896619231321691639751442 /* pi/2 */ +#define NPY_PI_4 0.785398163397448309615660845819875721 /* pi/4 */ +#define NPY_1_PI 0.318309886183790671537767526745028724 /* 1/pi */ +#define NPY_2_PI 0.636619772367581343075535053490057448 /* 2/pi */ +#define NPY_EULER 0.577215664901532860606512090082402431 /* Euler constant */ +#define NPY_SQRT2 1.414213562373095048801688724209698079 /* sqrt(2) */ +#define NPY_SQRT1_2 0.707106781186547524400844362104849039 /* 1/sqrt(2) */ + +#define NPY_Ef 2.718281828459045235360287471352662498F /* e */ +#define NPY_LOG2Ef 1.442695040888963407359924681001892137F /* log_2 e */ +#define NPY_LOG10Ef 0.434294481903251827651128918916605082F /* log_10 e */ +#define NPY_LOGE2f 0.693147180559945309417232121458176568F /* log_e 2 */ +#define NPY_LOGE10f 2.302585092994045684017991454684364208F /* log_e 10 */ +#define NPY_PIf 3.141592653589793238462643383279502884F /* pi */ +#define NPY_PI_2f 1.570796326794896619231321691639751442F /* pi/2 */ +#define NPY_PI_4f 0.785398163397448309615660845819875721F /* pi/4 */ +#define NPY_1_PIf 0.318309886183790671537767526745028724F /* 1/pi */ +#define NPY_2_PIf 0.636619772367581343075535053490057448F /* 2/pi */ +#define NPY_EULERf 0.577215664901532860606512090082402431F /* Euler constant */ +#define NPY_SQRT2f 1.414213562373095048801688724209698079F /* sqrt(2) */ +#define NPY_SQRT1_2f 0.707106781186547524400844362104849039F /* 1/sqrt(2) */ + +#define NPY_El 2.718281828459045235360287471352662498L /* e */ +#define NPY_LOG2El 1.442695040888963407359924681001892137L /* log_2 e */ +#define NPY_LOG10El 0.434294481903251827651128918916605082L /* log_10 e */ +#define NPY_LOGE2l 0.693147180559945309417232121458176568L /* log_e 2 */ +#define NPY_LOGE10l 2.302585092994045684017991454684364208L /* log_e 10 */ +#define NPY_PIl 3.141592653589793238462643383279502884L /* pi */ +#define NPY_PI_2l 1.570796326794896619231321691639751442L /* pi/2 */ +#define NPY_PI_4l 0.785398163397448309615660845819875721L /* pi/4 */ +#define NPY_1_PIl 0.318309886183790671537767526745028724L /* 1/pi */ +#define NPY_2_PIl 0.636619772367581343075535053490057448L /* 2/pi */ +#define NPY_EULERl 0.577215664901532860606512090082402431L /* Euler constant */ +#define NPY_SQRT2l 1.414213562373095048801688724209698079L /* sqrt(2) */ +#define NPY_SQRT1_2l 0.707106781186547524400844362104849039L /* 1/sqrt(2) */ + +/* + * Integer functions. + */ +NPY_INPLACE npy_uint npy_gcdu(npy_uint a, npy_uint b); +NPY_INPLACE npy_uint npy_lcmu(npy_uint a, npy_uint b); +NPY_INPLACE npy_ulong npy_gcdul(npy_ulong a, npy_ulong b); +NPY_INPLACE npy_ulong npy_lcmul(npy_ulong a, npy_ulong b); +NPY_INPLACE npy_ulonglong npy_gcdull(npy_ulonglong a, npy_ulonglong b); +NPY_INPLACE npy_ulonglong npy_lcmull(npy_ulonglong a, npy_ulonglong b); + +NPY_INPLACE npy_int npy_gcd(npy_int a, npy_int b); +NPY_INPLACE npy_int npy_lcm(npy_int a, npy_int b); +NPY_INPLACE npy_long npy_gcdl(npy_long a, npy_long b); +NPY_INPLACE npy_long npy_lcml(npy_long a, npy_long b); +NPY_INPLACE npy_longlong npy_gcdll(npy_longlong a, npy_longlong b); +NPY_INPLACE npy_longlong npy_lcmll(npy_longlong a, npy_longlong b); + +NPY_INPLACE npy_ubyte npy_rshiftuhh(npy_ubyte a, npy_ubyte b); +NPY_INPLACE npy_ubyte npy_lshiftuhh(npy_ubyte a, npy_ubyte b); +NPY_INPLACE npy_ushort npy_rshiftuh(npy_ushort a, npy_ushort b); +NPY_INPLACE npy_ushort npy_lshiftuh(npy_ushort a, npy_ushort b); +NPY_INPLACE npy_uint npy_rshiftu(npy_uint a, npy_uint b); +NPY_INPLACE npy_uint npy_lshiftu(npy_uint a, npy_uint b); +NPY_INPLACE npy_ulong npy_rshiftul(npy_ulong a, npy_ulong b); +NPY_INPLACE npy_ulong npy_lshiftul(npy_ulong a, npy_ulong b); +NPY_INPLACE npy_ulonglong npy_rshiftull(npy_ulonglong a, npy_ulonglong b); +NPY_INPLACE npy_ulonglong npy_lshiftull(npy_ulonglong a, npy_ulonglong b); + +NPY_INPLACE npy_byte npy_rshifthh(npy_byte a, npy_byte b); +NPY_INPLACE npy_byte npy_lshifthh(npy_byte a, npy_byte b); +NPY_INPLACE npy_short npy_rshifth(npy_short a, npy_short b); +NPY_INPLACE npy_short npy_lshifth(npy_short a, npy_short b); +NPY_INPLACE npy_int npy_rshift(npy_int a, npy_int b); +NPY_INPLACE npy_int npy_lshift(npy_int a, npy_int b); +NPY_INPLACE npy_long npy_rshiftl(npy_long a, npy_long b); +NPY_INPLACE npy_long npy_lshiftl(npy_long a, npy_long b); +NPY_INPLACE npy_longlong npy_rshiftll(npy_longlong a, npy_longlong b); +NPY_INPLACE npy_longlong npy_lshiftll(npy_longlong a, npy_longlong b); + +/* + * C99 double math funcs + */ +NPY_INPLACE double npy_sin(double x); +NPY_INPLACE double npy_cos(double x); +NPY_INPLACE double npy_tan(double x); +NPY_INPLACE double npy_sinh(double x); +NPY_INPLACE double npy_cosh(double x); +NPY_INPLACE double npy_tanh(double x); + +NPY_INPLACE double npy_asin(double x); +NPY_INPLACE double npy_acos(double x); +NPY_INPLACE double npy_atan(double x); + +NPY_INPLACE double npy_log(double x); +NPY_INPLACE double npy_log10(double x); +NPY_INPLACE double npy_exp(double x); +NPY_INPLACE double npy_sqrt(double x); +NPY_INPLACE double npy_cbrt(double x); + +NPY_INPLACE double npy_fabs(double x); +NPY_INPLACE double npy_ceil(double x); +NPY_INPLACE double npy_fmod(double x, double y); +NPY_INPLACE double npy_floor(double x); + +NPY_INPLACE double npy_expm1(double x); +NPY_INPLACE double npy_log1p(double x); +NPY_INPLACE double npy_hypot(double x, double y); +NPY_INPLACE double npy_acosh(double x); +NPY_INPLACE double npy_asinh(double xx); +NPY_INPLACE double npy_atanh(double x); +NPY_INPLACE double npy_rint(double x); +NPY_INPLACE double npy_trunc(double x); +NPY_INPLACE double npy_exp2(double x); +NPY_INPLACE double npy_log2(double x); + +NPY_INPLACE double npy_atan2(double x, double y); +NPY_INPLACE double npy_pow(double x, double y); +NPY_INPLACE double npy_modf(double x, double* y); +NPY_INPLACE double npy_frexp(double x, int* y); +NPY_INPLACE double npy_ldexp(double n, int y); + +NPY_INPLACE double npy_copysign(double x, double y); +double npy_nextafter(double x, double y); +double npy_spacing(double x); + +/* + * IEEE 754 fpu handling. Those are guaranteed to be macros + */ + +/* use builtins to avoid function calls in tight loops + * only available if npy_config.h is available (= numpys own build) */ +#ifdef HAVE___BUILTIN_ISNAN + #define npy_isnan(x) __builtin_isnan(x) +#else + #ifndef NPY_HAVE_DECL_ISNAN + #define npy_isnan(x) ((x) != (x)) + #else + #if defined(_MSC_VER) && (_MSC_VER < 1900) + #define npy_isnan(x) _isnan((x)) + #else + #define npy_isnan(x) isnan(x) + #endif + #endif +#endif + + +/* only available if npy_config.h is available (= numpys own build) */ +#ifdef HAVE___BUILTIN_ISFINITE + #define npy_isfinite(x) __builtin_isfinite(x) +#else + #ifndef NPY_HAVE_DECL_ISFINITE + #ifdef _MSC_VER + #define npy_isfinite(x) _finite((x)) + #else + #define npy_isfinite(x) !npy_isnan((x) + (-x)) + #endif + #else + #define npy_isfinite(x) isfinite((x)) + #endif +#endif + +/* only available if npy_config.h is available (= numpys own build) */ +#ifdef HAVE___BUILTIN_ISINF + #define npy_isinf(x) __builtin_isinf(x) +#else + #ifndef NPY_HAVE_DECL_ISINF + #define npy_isinf(x) (!npy_isfinite(x) && !npy_isnan(x)) + #else + #if defined(_MSC_VER) && (_MSC_VER < 1900) + #define npy_isinf(x) (!_finite((x)) && !_isnan((x))) + #else + #define npy_isinf(x) isinf((x)) + #endif + #endif +#endif + +#ifndef NPY_HAVE_DECL_SIGNBIT + int _npy_signbit_f(float x); + int _npy_signbit_d(double x); + int _npy_signbit_ld(long double x); + #define npy_signbit(x) \ + (sizeof (x) == sizeof (long double) ? _npy_signbit_ld (x) \ + : sizeof (x) == sizeof (double) ? _npy_signbit_d (x) \ + : _npy_signbit_f (x)) +#else + #define npy_signbit(x) signbit((x)) +#endif + +/* + * float C99 math functions + */ +NPY_INPLACE float npy_sinf(float x); +NPY_INPLACE float npy_cosf(float x); +NPY_INPLACE float npy_tanf(float x); +NPY_INPLACE float npy_sinhf(float x); +NPY_INPLACE float npy_coshf(float x); +NPY_INPLACE float npy_tanhf(float x); +NPY_INPLACE float npy_fabsf(float x); +NPY_INPLACE float npy_floorf(float x); +NPY_INPLACE float npy_ceilf(float x); +NPY_INPLACE float npy_rintf(float x); +NPY_INPLACE float npy_truncf(float x); +NPY_INPLACE float npy_sqrtf(float x); +NPY_INPLACE float npy_cbrtf(float x); +NPY_INPLACE float npy_log10f(float x); +NPY_INPLACE float npy_logf(float x); +NPY_INPLACE float npy_expf(float x); +NPY_INPLACE float npy_expm1f(float x); +NPY_INPLACE float npy_asinf(float x); +NPY_INPLACE float npy_acosf(float x); +NPY_INPLACE float npy_atanf(float x); +NPY_INPLACE float npy_asinhf(float x); +NPY_INPLACE float npy_acoshf(float x); +NPY_INPLACE float npy_atanhf(float x); +NPY_INPLACE float npy_log1pf(float x); +NPY_INPLACE float npy_exp2f(float x); +NPY_INPLACE float npy_log2f(float x); + +NPY_INPLACE float npy_atan2f(float x, float y); +NPY_INPLACE float npy_hypotf(float x, float y); +NPY_INPLACE float npy_powf(float x, float y); +NPY_INPLACE float npy_fmodf(float x, float y); + +NPY_INPLACE float npy_modff(float x, float* y); +NPY_INPLACE float npy_frexpf(float x, int* y); +NPY_INPLACE float npy_ldexpf(float x, int y); + +NPY_INPLACE float npy_copysignf(float x, float y); +float npy_nextafterf(float x, float y); +float npy_spacingf(float x); + +/* + * long double C99 math functions + */ +NPY_INPLACE npy_longdouble npy_sinl(npy_longdouble x); +NPY_INPLACE npy_longdouble npy_cosl(npy_longdouble x); +NPY_INPLACE npy_longdouble npy_tanl(npy_longdouble x); +NPY_INPLACE npy_longdouble npy_sinhl(npy_longdouble x); +NPY_INPLACE npy_longdouble npy_coshl(npy_longdouble x); +NPY_INPLACE npy_longdouble npy_tanhl(npy_longdouble x); +NPY_INPLACE npy_longdouble npy_fabsl(npy_longdouble x); +NPY_INPLACE npy_longdouble npy_floorl(npy_longdouble x); +NPY_INPLACE npy_longdouble npy_ceill(npy_longdouble x); +NPY_INPLACE npy_longdouble npy_rintl(npy_longdouble x); +NPY_INPLACE npy_longdouble npy_truncl(npy_longdouble x); +NPY_INPLACE npy_longdouble npy_sqrtl(npy_longdouble x); +NPY_INPLACE npy_longdouble npy_cbrtl(npy_longdouble x); +NPY_INPLACE npy_longdouble npy_log10l(npy_longdouble x); +NPY_INPLACE npy_longdouble npy_logl(npy_longdouble x); +NPY_INPLACE npy_longdouble npy_expl(npy_longdouble x); +NPY_INPLACE npy_longdouble npy_expm1l(npy_longdouble x); +NPY_INPLACE npy_longdouble npy_asinl(npy_longdouble x); +NPY_INPLACE npy_longdouble npy_acosl(npy_longdouble x); +NPY_INPLACE npy_longdouble npy_atanl(npy_longdouble x); +NPY_INPLACE npy_longdouble npy_asinhl(npy_longdouble x); +NPY_INPLACE npy_longdouble npy_acoshl(npy_longdouble x); +NPY_INPLACE npy_longdouble npy_atanhl(npy_longdouble x); +NPY_INPLACE npy_longdouble npy_log1pl(npy_longdouble x); +NPY_INPLACE npy_longdouble npy_exp2l(npy_longdouble x); +NPY_INPLACE npy_longdouble npy_log2l(npy_longdouble x); + +NPY_INPLACE npy_longdouble npy_atan2l(npy_longdouble x, npy_longdouble y); +NPY_INPLACE npy_longdouble npy_hypotl(npy_longdouble x, npy_longdouble y); +NPY_INPLACE npy_longdouble npy_powl(npy_longdouble x, npy_longdouble y); +NPY_INPLACE npy_longdouble npy_fmodl(npy_longdouble x, npy_longdouble y); + +NPY_INPLACE npy_longdouble npy_modfl(npy_longdouble x, npy_longdouble* y); +NPY_INPLACE npy_longdouble npy_frexpl(npy_longdouble x, int* y); +NPY_INPLACE npy_longdouble npy_ldexpl(npy_longdouble x, int y); + +NPY_INPLACE npy_longdouble npy_copysignl(npy_longdouble x, npy_longdouble y); +npy_longdouble npy_nextafterl(npy_longdouble x, npy_longdouble y); +npy_longdouble npy_spacingl(npy_longdouble x); + +/* + * Non standard functions + */ +NPY_INPLACE double npy_deg2rad(double x); +NPY_INPLACE double npy_rad2deg(double x); +NPY_INPLACE double npy_logaddexp(double x, double y); +NPY_INPLACE double npy_logaddexp2(double x, double y); +NPY_INPLACE double npy_divmod(double x, double y, double *modulus); +NPY_INPLACE double npy_heaviside(double x, double h0); + +NPY_INPLACE float npy_deg2radf(float x); +NPY_INPLACE float npy_rad2degf(float x); +NPY_INPLACE float npy_logaddexpf(float x, float y); +NPY_INPLACE float npy_logaddexp2f(float x, float y); +NPY_INPLACE float npy_divmodf(float x, float y, float *modulus); +NPY_INPLACE float npy_heavisidef(float x, float h0); + +NPY_INPLACE npy_longdouble npy_deg2radl(npy_longdouble x); +NPY_INPLACE npy_longdouble npy_rad2degl(npy_longdouble x); +NPY_INPLACE npy_longdouble npy_logaddexpl(npy_longdouble x, npy_longdouble y); +NPY_INPLACE npy_longdouble npy_logaddexp2l(npy_longdouble x, npy_longdouble y); +NPY_INPLACE npy_longdouble npy_divmodl(npy_longdouble x, npy_longdouble y, + npy_longdouble *modulus); +NPY_INPLACE npy_longdouble npy_heavisidel(npy_longdouble x, npy_longdouble h0); + +#define npy_degrees npy_rad2deg +#define npy_degreesf npy_rad2degf +#define npy_degreesl npy_rad2degl + +#define npy_radians npy_deg2rad +#define npy_radiansf npy_deg2radf +#define npy_radiansl npy_deg2radl + +/* + * Complex declarations + */ + +/* + * C99 specifies that complex numbers have the same representation as + * an array of two elements, where the first element is the real part + * and the second element is the imaginary part. + */ +#define __NPY_CPACK_IMP(x, y, type, ctype) \ + union { \ + ctype z; \ + type a[2]; \ + } z1;; \ + \ + z1.a[0] = (x); \ + z1.a[1] = (y); \ + \ + return z1.z; + +static NPY_INLINE npy_cdouble npy_cpack(double x, double y) +{ + __NPY_CPACK_IMP(x, y, double, npy_cdouble); +} + +static NPY_INLINE npy_cfloat npy_cpackf(float x, float y) +{ + __NPY_CPACK_IMP(x, y, float, npy_cfloat); +} + +static NPY_INLINE npy_clongdouble npy_cpackl(npy_longdouble x, npy_longdouble y) +{ + __NPY_CPACK_IMP(x, y, npy_longdouble, npy_clongdouble); +} +#undef __NPY_CPACK_IMP + +/* + * Same remark as above, but in the other direction: extract first/second + * member of complex number, assuming a C99-compatible representation + * + * Those are defineds as static inline, and such as a reasonable compiler would + * most likely compile this to one or two instructions (on CISC at least) + */ +#define __NPY_CEXTRACT_IMP(z, index, type, ctype) \ + union { \ + ctype z; \ + type a[2]; \ + } __z_repr; \ + __z_repr.z = z; \ + \ + return __z_repr.a[index]; + +static NPY_INLINE double npy_creal(npy_cdouble z) +{ + __NPY_CEXTRACT_IMP(z, 0, double, npy_cdouble); +} + +static NPY_INLINE double npy_cimag(npy_cdouble z) +{ + __NPY_CEXTRACT_IMP(z, 1, double, npy_cdouble); +} + +static NPY_INLINE float npy_crealf(npy_cfloat z) +{ + __NPY_CEXTRACT_IMP(z, 0, float, npy_cfloat); +} + +static NPY_INLINE float npy_cimagf(npy_cfloat z) +{ + __NPY_CEXTRACT_IMP(z, 1, float, npy_cfloat); +} + +static NPY_INLINE npy_longdouble npy_creall(npy_clongdouble z) +{ + __NPY_CEXTRACT_IMP(z, 0, npy_longdouble, npy_clongdouble); +} + +static NPY_INLINE npy_longdouble npy_cimagl(npy_clongdouble z) +{ + __NPY_CEXTRACT_IMP(z, 1, npy_longdouble, npy_clongdouble); +} +#undef __NPY_CEXTRACT_IMP + +/* + * Double precision complex functions + */ +double npy_cabs(npy_cdouble z); +double npy_carg(npy_cdouble z); + +npy_cdouble npy_cexp(npy_cdouble z); +npy_cdouble npy_clog(npy_cdouble z); +npy_cdouble npy_cpow(npy_cdouble x, npy_cdouble y); + +npy_cdouble npy_csqrt(npy_cdouble z); + +npy_cdouble npy_ccos(npy_cdouble z); +npy_cdouble npy_csin(npy_cdouble z); +npy_cdouble npy_ctan(npy_cdouble z); + +npy_cdouble npy_ccosh(npy_cdouble z); +npy_cdouble npy_csinh(npy_cdouble z); +npy_cdouble npy_ctanh(npy_cdouble z); + +npy_cdouble npy_cacos(npy_cdouble z); +npy_cdouble npy_casin(npy_cdouble z); +npy_cdouble npy_catan(npy_cdouble z); + +npy_cdouble npy_cacosh(npy_cdouble z); +npy_cdouble npy_casinh(npy_cdouble z); +npy_cdouble npy_catanh(npy_cdouble z); + +/* + * Single precision complex functions + */ +float npy_cabsf(npy_cfloat z); +float npy_cargf(npy_cfloat z); + +npy_cfloat npy_cexpf(npy_cfloat z); +npy_cfloat npy_clogf(npy_cfloat z); +npy_cfloat npy_cpowf(npy_cfloat x, npy_cfloat y); + +npy_cfloat npy_csqrtf(npy_cfloat z); + +npy_cfloat npy_ccosf(npy_cfloat z); +npy_cfloat npy_csinf(npy_cfloat z); +npy_cfloat npy_ctanf(npy_cfloat z); + +npy_cfloat npy_ccoshf(npy_cfloat z); +npy_cfloat npy_csinhf(npy_cfloat z); +npy_cfloat npy_ctanhf(npy_cfloat z); + +npy_cfloat npy_cacosf(npy_cfloat z); +npy_cfloat npy_casinf(npy_cfloat z); +npy_cfloat npy_catanf(npy_cfloat z); + +npy_cfloat npy_cacoshf(npy_cfloat z); +npy_cfloat npy_casinhf(npy_cfloat z); +npy_cfloat npy_catanhf(npy_cfloat z); + + +/* + * Extended precision complex functions + */ +npy_longdouble npy_cabsl(npy_clongdouble z); +npy_longdouble npy_cargl(npy_clongdouble z); + +npy_clongdouble npy_cexpl(npy_clongdouble z); +npy_clongdouble npy_clogl(npy_clongdouble z); +npy_clongdouble npy_cpowl(npy_clongdouble x, npy_clongdouble y); + +npy_clongdouble npy_csqrtl(npy_clongdouble z); + +npy_clongdouble npy_ccosl(npy_clongdouble z); +npy_clongdouble npy_csinl(npy_clongdouble z); +npy_clongdouble npy_ctanl(npy_clongdouble z); + +npy_clongdouble npy_ccoshl(npy_clongdouble z); +npy_clongdouble npy_csinhl(npy_clongdouble z); +npy_clongdouble npy_ctanhl(npy_clongdouble z); + +npy_clongdouble npy_cacosl(npy_clongdouble z); +npy_clongdouble npy_casinl(npy_clongdouble z); +npy_clongdouble npy_catanl(npy_clongdouble z); + +npy_clongdouble npy_cacoshl(npy_clongdouble z); +npy_clongdouble npy_casinhl(npy_clongdouble z); +npy_clongdouble npy_catanhl(npy_clongdouble z); + + +/* + * Functions that set the floating point error + * status word. + */ + +/* + * platform-dependent code translates floating point + * status to an integer sum of these values + */ +#define NPY_FPE_DIVIDEBYZERO 1 +#define NPY_FPE_OVERFLOW 2 +#define NPY_FPE_UNDERFLOW 4 +#define NPY_FPE_INVALID 8 + +int npy_clear_floatstatus_barrier(char*); +int npy_get_floatstatus_barrier(char*); +/* + * use caution with these - clang and gcc8.1 are known to reorder calls + * to this form of the function which can defeat the check. The _barrier + * form of the call is preferable, where the argument is + * (char*)&local_variable + */ +int npy_clear_floatstatus(void); +int npy_get_floatstatus(void); + +void npy_set_floatstatus_divbyzero(void); +void npy_set_floatstatus_overflow(void); +void npy_set_floatstatus_underflow(void); +void npy_set_floatstatus_invalid(void); + +#ifdef __cplusplus +} +#endif + +#if NPY_INLINE_MATH +#include "npy_math_internal.h" +#endif + +#endif diff --git a/EXE version/main/numpy/core/include/numpy/npy_no_deprecated_api.h b/EXE version/main/numpy/core/include/numpy/npy_no_deprecated_api.h new file mode 100644 index 00000000..6183dc27 --- /dev/null +++ b/EXE version/main/numpy/core/include/numpy/npy_no_deprecated_api.h @@ -0,0 +1,19 @@ +/* + * This include file is provided for inclusion in Cython *.pyd files where + * one would like to define the NPY_NO_DEPRECATED_API macro. It can be + * included by + * + * cdef extern from "npy_no_deprecated_api.h": pass + * + */ +#ifndef NPY_NO_DEPRECATED_API + +/* put this check here since there may be multiple includes in C extensions. */ +#if defined(NDARRAYTYPES_H) || defined(_NPY_DEPRECATED_API_H) || \ + defined(OLD_DEFINES_H) +#error "npy_no_deprecated_api.h" must be first among numpy includes. +#else +#define NPY_NO_DEPRECATED_API NPY_API_VERSION +#endif + +#endif diff --git a/EXE version/main/numpy/core/include/numpy/npy_os.h b/EXE version/main/numpy/core/include/numpy/npy_os.h new file mode 100644 index 00000000..9228c391 --- /dev/null +++ b/EXE version/main/numpy/core/include/numpy/npy_os.h @@ -0,0 +1,30 @@ +#ifndef _NPY_OS_H_ +#define _NPY_OS_H_ + +#if defined(linux) || defined(__linux) || defined(__linux__) + #define NPY_OS_LINUX +#elif defined(__FreeBSD__) || defined(__NetBSD__) || \ + defined(__OpenBSD__) || defined(__DragonFly__) + #define NPY_OS_BSD + #ifdef __FreeBSD__ + #define NPY_OS_FREEBSD + #elif defined(__NetBSD__) + #define NPY_OS_NETBSD + #elif defined(__OpenBSD__) + #define NPY_OS_OPENBSD + #elif defined(__DragonFly__) + #define NPY_OS_DRAGONFLY + #endif +#elif defined(sun) || defined(__sun) + #define NPY_OS_SOLARIS +#elif defined(__CYGWIN__) + #define NPY_OS_CYGWIN +#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32) + #define NPY_OS_WIN32 +#elif defined(__APPLE__) + #define NPY_OS_DARWIN +#else + #define NPY_OS_UNKNOWN +#endif + +#endif diff --git a/EXE version/main/numpy/core/include/numpy/numpyconfig.h b/EXE version/main/numpy/core/include/numpy/numpyconfig.h new file mode 100644 index 00000000..a1b1de0e --- /dev/null +++ b/EXE version/main/numpy/core/include/numpy/numpyconfig.h @@ -0,0 +1,47 @@ +#ifndef _NPY_NUMPYCONFIG_H_ +#define _NPY_NUMPYCONFIG_H_ + +#include "_numpyconfig.h" + +/* + * On Mac OS X, because there is only one configuration stage for all the archs + * in universal builds, any macro which depends on the arch needs to be + * hardcoded + */ +#ifdef __APPLE__ + #undef NPY_SIZEOF_LONG + #undef NPY_SIZEOF_PY_INTPTR_T + + #ifdef __LP64__ + #define NPY_SIZEOF_LONG 8 + #define NPY_SIZEOF_PY_INTPTR_T 8 + #else + #define NPY_SIZEOF_LONG 4 + #define NPY_SIZEOF_PY_INTPTR_T 4 + #endif +#endif + +/** + * To help with the NPY_NO_DEPRECATED_API macro, we include API version + * numbers for specific versions of NumPy. To exclude all API that was + * deprecated as of 1.7, add the following before #including any NumPy + * headers: + * #define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION + */ +#define NPY_1_7_API_VERSION 0x00000007 +#define NPY_1_8_API_VERSION 0x00000008 +#define NPY_1_9_API_VERSION 0x00000008 +#define NPY_1_10_API_VERSION 0x00000008 +#define NPY_1_11_API_VERSION 0x00000008 +#define NPY_1_12_API_VERSION 0x00000008 +#define NPY_1_13_API_VERSION 0x00000008 +#define NPY_1_14_API_VERSION 0x00000008 +#define NPY_1_15_API_VERSION 0x00000008 +#define NPY_1_16_API_VERSION 0x00000008 +#define NPY_1_17_API_VERSION 0x00000008 +#define NPY_1_18_API_VERSION 0x00000008 +#define NPY_1_19_API_VERSION 0x00000008 +#define NPY_1_20_API_VERSION 0x0000000e +#define NPY_1_21_API_VERSION 0x0000000e + +#endif diff --git a/EXE version/main/numpy/core/include/numpy/old_defines.h b/EXE version/main/numpy/core/include/numpy/old_defines.h new file mode 100644 index 00000000..abf81595 --- /dev/null +++ b/EXE version/main/numpy/core/include/numpy/old_defines.h @@ -0,0 +1,187 @@ +/* This header is deprecated as of NumPy 1.7 */ +#ifndef OLD_DEFINES_H +#define OLD_DEFINES_H + +#if defined(NPY_NO_DEPRECATED_API) && NPY_NO_DEPRECATED_API >= NPY_1_7_API_VERSION +#error The header "old_defines.h" is deprecated as of NumPy 1.7. +#endif + +#define NDARRAY_VERSION NPY_VERSION + +#define PyArray_MIN_BUFSIZE NPY_MIN_BUFSIZE +#define PyArray_MAX_BUFSIZE NPY_MAX_BUFSIZE +#define PyArray_BUFSIZE NPY_BUFSIZE + +#define PyArray_PRIORITY NPY_PRIORITY +#define PyArray_SUBTYPE_PRIORITY NPY_PRIORITY +#define PyArray_NUM_FLOATTYPE NPY_NUM_FLOATTYPE + +#define NPY_MAX PyArray_MAX +#define NPY_MIN PyArray_MIN + +#define PyArray_TYPES NPY_TYPES +#define PyArray_BOOL NPY_BOOL +#define PyArray_BYTE NPY_BYTE +#define PyArray_UBYTE NPY_UBYTE +#define PyArray_SHORT NPY_SHORT +#define PyArray_USHORT NPY_USHORT +#define PyArray_INT NPY_INT +#define PyArray_UINT NPY_UINT +#define PyArray_LONG NPY_LONG +#define PyArray_ULONG NPY_ULONG +#define PyArray_LONGLONG NPY_LONGLONG +#define PyArray_ULONGLONG NPY_ULONGLONG +#define PyArray_HALF NPY_HALF +#define PyArray_FLOAT NPY_FLOAT +#define PyArray_DOUBLE NPY_DOUBLE +#define PyArray_LONGDOUBLE NPY_LONGDOUBLE +#define PyArray_CFLOAT NPY_CFLOAT +#define PyArray_CDOUBLE NPY_CDOUBLE +#define PyArray_CLONGDOUBLE NPY_CLONGDOUBLE +#define PyArray_OBJECT NPY_OBJECT +#define PyArray_STRING NPY_STRING +#define PyArray_UNICODE NPY_UNICODE +#define PyArray_VOID NPY_VOID +#define PyArray_DATETIME NPY_DATETIME +#define PyArray_TIMEDELTA NPY_TIMEDELTA +#define PyArray_NTYPES NPY_NTYPES +#define PyArray_NOTYPE NPY_NOTYPE +#define PyArray_CHAR NPY_CHAR +#define PyArray_USERDEF NPY_USERDEF +#define PyArray_NUMUSERTYPES NPY_NUMUSERTYPES + +#define PyArray_INTP NPY_INTP +#define PyArray_UINTP NPY_UINTP + +#define PyArray_INT8 NPY_INT8 +#define PyArray_UINT8 NPY_UINT8 +#define PyArray_INT16 NPY_INT16 +#define PyArray_UINT16 NPY_UINT16 +#define PyArray_INT32 NPY_INT32 +#define PyArray_UINT32 NPY_UINT32 + +#ifdef NPY_INT64 +#define PyArray_INT64 NPY_INT64 +#define PyArray_UINT64 NPY_UINT64 +#endif + +#ifdef NPY_INT128 +#define PyArray_INT128 NPY_INT128 +#define PyArray_UINT128 NPY_UINT128 +#endif + +#ifdef NPY_FLOAT16 +#define PyArray_FLOAT16 NPY_FLOAT16 +#define PyArray_COMPLEX32 NPY_COMPLEX32 +#endif + +#ifdef NPY_FLOAT80 +#define PyArray_FLOAT80 NPY_FLOAT80 +#define PyArray_COMPLEX160 NPY_COMPLEX160 +#endif + +#ifdef NPY_FLOAT96 +#define PyArray_FLOAT96 NPY_FLOAT96 +#define PyArray_COMPLEX192 NPY_COMPLEX192 +#endif + +#ifdef NPY_FLOAT128 +#define PyArray_FLOAT128 NPY_FLOAT128 +#define PyArray_COMPLEX256 NPY_COMPLEX256 +#endif + +#define PyArray_FLOAT32 NPY_FLOAT32 +#define PyArray_COMPLEX64 NPY_COMPLEX64 +#define PyArray_FLOAT64 NPY_FLOAT64 +#define PyArray_COMPLEX128 NPY_COMPLEX128 + + +#define PyArray_TYPECHAR NPY_TYPECHAR +#define PyArray_BOOLLTR NPY_BOOLLTR +#define PyArray_BYTELTR NPY_BYTELTR +#define PyArray_UBYTELTR NPY_UBYTELTR +#define PyArray_SHORTLTR NPY_SHORTLTR +#define PyArray_USHORTLTR NPY_USHORTLTR +#define PyArray_INTLTR NPY_INTLTR +#define PyArray_UINTLTR NPY_UINTLTR +#define PyArray_LONGLTR NPY_LONGLTR +#define PyArray_ULONGLTR NPY_ULONGLTR +#define PyArray_LONGLONGLTR NPY_LONGLONGLTR +#define PyArray_ULONGLONGLTR NPY_ULONGLONGLTR +#define PyArray_HALFLTR NPY_HALFLTR +#define PyArray_FLOATLTR NPY_FLOATLTR +#define PyArray_DOUBLELTR NPY_DOUBLELTR +#define PyArray_LONGDOUBLELTR NPY_LONGDOUBLELTR +#define PyArray_CFLOATLTR NPY_CFLOATLTR +#define PyArray_CDOUBLELTR NPY_CDOUBLELTR +#define PyArray_CLONGDOUBLELTR NPY_CLONGDOUBLELTR +#define PyArray_OBJECTLTR NPY_OBJECTLTR +#define PyArray_STRINGLTR NPY_STRINGLTR +#define PyArray_STRINGLTR2 NPY_STRINGLTR2 +#define PyArray_UNICODELTR NPY_UNICODELTR +#define PyArray_VOIDLTR NPY_VOIDLTR +#define PyArray_DATETIMELTR NPY_DATETIMELTR +#define PyArray_TIMEDELTALTR NPY_TIMEDELTALTR +#define PyArray_CHARLTR NPY_CHARLTR +#define PyArray_INTPLTR NPY_INTPLTR +#define PyArray_UINTPLTR NPY_UINTPLTR +#define PyArray_GENBOOLLTR NPY_GENBOOLLTR +#define PyArray_SIGNEDLTR NPY_SIGNEDLTR +#define PyArray_UNSIGNEDLTR NPY_UNSIGNEDLTR +#define PyArray_FLOATINGLTR NPY_FLOATINGLTR +#define PyArray_COMPLEXLTR NPY_COMPLEXLTR + +#define PyArray_QUICKSORT NPY_QUICKSORT +#define PyArray_HEAPSORT NPY_HEAPSORT +#define PyArray_MERGESORT NPY_MERGESORT +#define PyArray_SORTKIND NPY_SORTKIND +#define PyArray_NSORTS NPY_NSORTS + +#define PyArray_NOSCALAR NPY_NOSCALAR +#define PyArray_BOOL_SCALAR NPY_BOOL_SCALAR +#define PyArray_INTPOS_SCALAR NPY_INTPOS_SCALAR +#define PyArray_INTNEG_SCALAR NPY_INTNEG_SCALAR +#define PyArray_FLOAT_SCALAR NPY_FLOAT_SCALAR +#define PyArray_COMPLEX_SCALAR NPY_COMPLEX_SCALAR +#define PyArray_OBJECT_SCALAR NPY_OBJECT_SCALAR +#define PyArray_SCALARKIND NPY_SCALARKIND +#define PyArray_NSCALARKINDS NPY_NSCALARKINDS + +#define PyArray_ANYORDER NPY_ANYORDER +#define PyArray_CORDER NPY_CORDER +#define PyArray_FORTRANORDER NPY_FORTRANORDER +#define PyArray_ORDER NPY_ORDER + +#define PyDescr_ISBOOL PyDataType_ISBOOL +#define PyDescr_ISUNSIGNED PyDataType_ISUNSIGNED +#define PyDescr_ISSIGNED PyDataType_ISSIGNED +#define PyDescr_ISINTEGER PyDataType_ISINTEGER +#define PyDescr_ISFLOAT PyDataType_ISFLOAT +#define PyDescr_ISNUMBER PyDataType_ISNUMBER +#define PyDescr_ISSTRING PyDataType_ISSTRING +#define PyDescr_ISCOMPLEX PyDataType_ISCOMPLEX +#define PyDescr_ISPYTHON PyDataType_ISPYTHON +#define PyDescr_ISFLEXIBLE PyDataType_ISFLEXIBLE +#define PyDescr_ISUSERDEF PyDataType_ISUSERDEF +#define PyDescr_ISEXTENDED PyDataType_ISEXTENDED +#define PyDescr_ISOBJECT PyDataType_ISOBJECT +#define PyDescr_HASFIELDS PyDataType_HASFIELDS + +#define PyArray_LITTLE NPY_LITTLE +#define PyArray_BIG NPY_BIG +#define PyArray_NATIVE NPY_NATIVE +#define PyArray_SWAP NPY_SWAP +#define PyArray_IGNORE NPY_IGNORE + +#define PyArray_NATBYTE NPY_NATBYTE +#define PyArray_OPPBYTE NPY_OPPBYTE + +#define PyArray_MAX_ELSIZE NPY_MAX_ELSIZE + +#define PyArray_USE_PYMEM NPY_USE_PYMEM + +#define PyArray_RemoveLargest PyArray_RemoveSmallest + +#define PyArray_UCS4 npy_ucs4 + +#endif diff --git a/EXE version/main/numpy/core/include/numpy/oldnumeric.h b/EXE version/main/numpy/core/include/numpy/oldnumeric.h new file mode 100644 index 00000000..38530faf --- /dev/null +++ b/EXE version/main/numpy/core/include/numpy/oldnumeric.h @@ -0,0 +1,25 @@ +#include "arrayobject.h" + +#ifndef PYPY_VERSION +#ifndef REFCOUNT +# define REFCOUNT NPY_REFCOUNT +# define MAX_ELSIZE 16 +#endif +#endif + +#define PyArray_UNSIGNED_TYPES +#define PyArray_SBYTE NPY_BYTE +#define PyArray_CopyArray PyArray_CopyInto +#define _PyArray_multiply_list PyArray_MultiplyIntList +#define PyArray_ISSPACESAVER(m) NPY_FALSE +#define PyScalarArray_Check PyArray_CheckScalar + +#define CONTIGUOUS NPY_CONTIGUOUS +#define OWN_DIMENSIONS 0 +#define OWN_STRIDES 0 +#define OWN_DATA NPY_OWNDATA +#define SAVESPACE 0 +#define SAVESPACEBIT 0 + +#undef import_array +#define import_array() { if (_import_array() < 0) {PyErr_Print(); PyErr_SetString(PyExc_ImportError, "numpy.core.multiarray failed to import"); } } diff --git a/EXE version/main/numpy/core/include/numpy/random/bitgen.h b/EXE version/main/numpy/core/include/numpy/random/bitgen.h new file mode 100644 index 00000000..83c2858d --- /dev/null +++ b/EXE version/main/numpy/core/include/numpy/random/bitgen.h @@ -0,0 +1,20 @@ +#ifndef _RANDOM_BITGEN_H +#define _RANDOM_BITGEN_H + +#pragma once +#include +#include +#include + +/* Must match the declaration in numpy/random/.pxd */ + +typedef struct bitgen { + void *state; + uint64_t (*next_uint64)(void *st); + uint32_t (*next_uint32)(void *st); + double (*next_double)(void *st); + uint64_t (*next_raw)(void *st); +} bitgen_t; + + +#endif diff --git a/EXE version/main/numpy/core/include/numpy/random/distributions.h b/EXE version/main/numpy/core/include/numpy/random/distributions.h new file mode 100644 index 00000000..c5802460 --- /dev/null +++ b/EXE version/main/numpy/core/include/numpy/random/distributions.h @@ -0,0 +1,209 @@ +#ifndef _RANDOMDGEN__DISTRIBUTIONS_H_ +#define _RANDOMDGEN__DISTRIBUTIONS_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include "Python.h" +#include "numpy/npy_common.h" +#include +#include +#include + +#include "numpy/npy_math.h" +#include "numpy/random/bitgen.h" + +/* + * RAND_INT_TYPE is used to share integer generators with RandomState which + * used long in place of int64_t. If changing a distribution that uses + * RAND_INT_TYPE, then the original unmodified copy must be retained for + * use in RandomState by copying to the legacy distributions source file. + */ +#ifdef NP_RANDOM_LEGACY +#define RAND_INT_TYPE long +#define RAND_INT_MAX LONG_MAX +#else +#define RAND_INT_TYPE int64_t +#define RAND_INT_MAX INT64_MAX +#endif + +#ifdef _MSC_VER +#define DECLDIR __declspec(dllexport) +#else +#define DECLDIR extern +#endif + +#ifndef MIN +#define MIN(x, y) (((x) < (y)) ? x : y) +#define MAX(x, y) (((x) > (y)) ? x : y) +#endif + +#ifndef M_PI +#define M_PI 3.14159265358979323846264338328 +#endif + +typedef struct s_binomial_t { + int has_binomial; /* !=0: following parameters initialized for binomial */ + double psave; + RAND_INT_TYPE nsave; + double r; + double q; + double fm; + RAND_INT_TYPE m; + double p1; + double xm; + double xl; + double xr; + double c; + double laml; + double lamr; + double p2; + double p3; + double p4; +} binomial_t; + +DECLDIR float random_standard_uniform_f(bitgen_t *bitgen_state); +DECLDIR double random_standard_uniform(bitgen_t *bitgen_state); +DECLDIR void random_standard_uniform_fill(bitgen_t *, npy_intp, double *); +DECLDIR void random_standard_uniform_fill_f(bitgen_t *, npy_intp, float *); + +DECLDIR int64_t random_positive_int64(bitgen_t *bitgen_state); +DECLDIR int32_t random_positive_int32(bitgen_t *bitgen_state); +DECLDIR int64_t random_positive_int(bitgen_t *bitgen_state); +DECLDIR uint64_t random_uint(bitgen_t *bitgen_state); + +DECLDIR double random_standard_exponential(bitgen_t *bitgen_state); +DECLDIR float random_standard_exponential_f(bitgen_t *bitgen_state); +DECLDIR void random_standard_exponential_fill(bitgen_t *, npy_intp, double *); +DECLDIR void random_standard_exponential_fill_f(bitgen_t *, npy_intp, float *); +DECLDIR void random_standard_exponential_inv_fill(bitgen_t *, npy_intp, double *); +DECLDIR void random_standard_exponential_inv_fill_f(bitgen_t *, npy_intp, float *); + +DECLDIR double random_standard_normal(bitgen_t *bitgen_state); +DECLDIR float random_standard_normal_f(bitgen_t *bitgen_state); +DECLDIR void random_standard_normal_fill(bitgen_t *, npy_intp, double *); +DECLDIR void random_standard_normal_fill_f(bitgen_t *, npy_intp, float *); +DECLDIR double random_standard_gamma(bitgen_t *bitgen_state, double shape); +DECLDIR float random_standard_gamma_f(bitgen_t *bitgen_state, float shape); + +DECLDIR double random_normal(bitgen_t *bitgen_state, double loc, double scale); + +DECLDIR double random_gamma(bitgen_t *bitgen_state, double shape, double scale); +DECLDIR float random_gamma_f(bitgen_t *bitgen_state, float shape, float scale); + +DECLDIR double random_exponential(bitgen_t *bitgen_state, double scale); +DECLDIR double random_uniform(bitgen_t *bitgen_state, double lower, double range); +DECLDIR double random_beta(bitgen_t *bitgen_state, double a, double b); +DECLDIR double random_chisquare(bitgen_t *bitgen_state, double df); +DECLDIR double random_f(bitgen_t *bitgen_state, double dfnum, double dfden); +DECLDIR double random_standard_cauchy(bitgen_t *bitgen_state); +DECLDIR double random_pareto(bitgen_t *bitgen_state, double a); +DECLDIR double random_weibull(bitgen_t *bitgen_state, double a); +DECLDIR double random_power(bitgen_t *bitgen_state, double a); +DECLDIR double random_laplace(bitgen_t *bitgen_state, double loc, double scale); +DECLDIR double random_gumbel(bitgen_t *bitgen_state, double loc, double scale); +DECLDIR double random_logistic(bitgen_t *bitgen_state, double loc, double scale); +DECLDIR double random_lognormal(bitgen_t *bitgen_state, double mean, double sigma); +DECLDIR double random_rayleigh(bitgen_t *bitgen_state, double mode); +DECLDIR double random_standard_t(bitgen_t *bitgen_state, double df); +DECLDIR double random_noncentral_chisquare(bitgen_t *bitgen_state, double df, + double nonc); +DECLDIR double random_noncentral_f(bitgen_t *bitgen_state, double dfnum, + double dfden, double nonc); +DECLDIR double random_wald(bitgen_t *bitgen_state, double mean, double scale); +DECLDIR double random_vonmises(bitgen_t *bitgen_state, double mu, double kappa); +DECLDIR double random_triangular(bitgen_t *bitgen_state, double left, double mode, + double right); + +DECLDIR RAND_INT_TYPE random_poisson(bitgen_t *bitgen_state, double lam); +DECLDIR RAND_INT_TYPE random_negative_binomial(bitgen_t *bitgen_state, double n, + double p); + +DECLDIR int64_t random_binomial(bitgen_t *bitgen_state, double p, + int64_t n, binomial_t *binomial); + +DECLDIR int64_t random_logseries(bitgen_t *bitgen_state, double p); +DECLDIR int64_t random_geometric(bitgen_t *bitgen_state, double p); +DECLDIR RAND_INT_TYPE random_geometric_search(bitgen_t *bitgen_state, double p); +DECLDIR RAND_INT_TYPE random_zipf(bitgen_t *bitgen_state, double a); +DECLDIR int64_t random_hypergeometric(bitgen_t *bitgen_state, + int64_t good, int64_t bad, int64_t sample); +DECLDIR uint64_t random_interval(bitgen_t *bitgen_state, uint64_t max); + +/* Generate random uint64 numbers in closed interval [off, off + rng]. */ +DECLDIR uint64_t random_bounded_uint64(bitgen_t *bitgen_state, uint64_t off, + uint64_t rng, uint64_t mask, + bool use_masked); + +/* Generate random uint32 numbers in closed interval [off, off + rng]. */ +DECLDIR uint32_t random_buffered_bounded_uint32(bitgen_t *bitgen_state, + uint32_t off, uint32_t rng, + uint32_t mask, bool use_masked, + int *bcnt, uint32_t *buf); +DECLDIR uint16_t random_buffered_bounded_uint16(bitgen_t *bitgen_state, + uint16_t off, uint16_t rng, + uint16_t mask, bool use_masked, + int *bcnt, uint32_t *buf); +DECLDIR uint8_t random_buffered_bounded_uint8(bitgen_t *bitgen_state, uint8_t off, + uint8_t rng, uint8_t mask, + bool use_masked, int *bcnt, + uint32_t *buf); +DECLDIR npy_bool random_buffered_bounded_bool(bitgen_t *bitgen_state, npy_bool off, + npy_bool rng, npy_bool mask, + bool use_masked, int *bcnt, + uint32_t *buf); + +DECLDIR void random_bounded_uint64_fill(bitgen_t *bitgen_state, uint64_t off, + uint64_t rng, npy_intp cnt, + bool use_masked, uint64_t *out); +DECLDIR void random_bounded_uint32_fill(bitgen_t *bitgen_state, uint32_t off, + uint32_t rng, npy_intp cnt, + bool use_masked, uint32_t *out); +DECLDIR void random_bounded_uint16_fill(bitgen_t *bitgen_state, uint16_t off, + uint16_t rng, npy_intp cnt, + bool use_masked, uint16_t *out); +DECLDIR void random_bounded_uint8_fill(bitgen_t *bitgen_state, uint8_t off, + uint8_t rng, npy_intp cnt, + bool use_masked, uint8_t *out); +DECLDIR void random_bounded_bool_fill(bitgen_t *bitgen_state, npy_bool off, + npy_bool rng, npy_intp cnt, + bool use_masked, npy_bool *out); + +DECLDIR void random_multinomial(bitgen_t *bitgen_state, RAND_INT_TYPE n, RAND_INT_TYPE *mnix, + double *pix, npy_intp d, binomial_t *binomial); + +/* multivariate hypergeometric, "count" method */ +DECLDIR int random_multivariate_hypergeometric_count(bitgen_t *bitgen_state, + int64_t total, + size_t num_colors, int64_t *colors, + int64_t nsample, + size_t num_variates, int64_t *variates); + +/* multivariate hypergeometric, "marginals" method */ +DECLDIR void random_multivariate_hypergeometric_marginals(bitgen_t *bitgen_state, + int64_t total, + size_t num_colors, int64_t *colors, + int64_t nsample, + size_t num_variates, int64_t *variates); + +/* Common to legacy-distributions.c and distributions.c but not exported */ + +RAND_INT_TYPE random_binomial_btpe(bitgen_t *bitgen_state, + RAND_INT_TYPE n, + double p, + binomial_t *binomial); +RAND_INT_TYPE random_binomial_inversion(bitgen_t *bitgen_state, + RAND_INT_TYPE n, + double p, + binomial_t *binomial); +double random_loggam(double x); +static NPY_INLINE double next_double(bitgen_t *bitgen_state) { + return bitgen_state->next_double(bitgen_state->state); +} + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/EXE version/main/numpy/core/include/numpy/ufunc_api.txt b/EXE version/main/numpy/core/include/numpy/ufunc_api.txt new file mode 100644 index 00000000..20a8a75f --- /dev/null +++ b/EXE version/main/numpy/core/include/numpy/ufunc_api.txt @@ -0,0 +1,335 @@ + +================= +NumPy Ufunc C-API +================= +:: + + PyObject * + PyUFunc_FromFuncAndData(PyUFuncGenericFunction *func, void + **data, char *types, int ntypes, int nin, int + nout, int identity, const char *name, const + char *doc, int unused) + + +:: + + int + PyUFunc_RegisterLoopForType(PyUFuncObject *ufunc, int + usertype, PyUFuncGenericFunction + function, const int *arg_types, void + *data) + + +:: + + int + PyUFunc_GenericFunction(PyUFuncObject *NPY_UNUSED(ufunc) , PyObject + *NPY_UNUSED(args) , PyObject *NPY_UNUSED(kwds) + , PyArrayObject **NPY_UNUSED(op) ) + + +:: + + void + PyUFunc_f_f_As_d_d(char **args, npy_intp const *dimensions, npy_intp + const *steps, void *func) + + +:: + + void + PyUFunc_d_d(char **args, npy_intp const *dimensions, npy_intp const + *steps, void *func) + + +:: + + void + PyUFunc_f_f(char **args, npy_intp const *dimensions, npy_intp const + *steps, void *func) + + +:: + + void + PyUFunc_g_g(char **args, npy_intp const *dimensions, npy_intp const + *steps, void *func) + + +:: + + void + PyUFunc_F_F_As_D_D(char **args, npy_intp const *dimensions, npy_intp + const *steps, void *func) + + +:: + + void + PyUFunc_F_F(char **args, npy_intp const *dimensions, npy_intp const + *steps, void *func) + + +:: + + void + PyUFunc_D_D(char **args, npy_intp const *dimensions, npy_intp const + *steps, void *func) + + +:: + + void + PyUFunc_G_G(char **args, npy_intp const *dimensions, npy_intp const + *steps, void *func) + + +:: + + void + PyUFunc_O_O(char **args, npy_intp const *dimensions, npy_intp const + *steps, void *func) + + +:: + + void + PyUFunc_ff_f_As_dd_d(char **args, npy_intp const *dimensions, npy_intp + const *steps, void *func) + + +:: + + void + PyUFunc_ff_f(char **args, npy_intp const *dimensions, npy_intp const + *steps, void *func) + + +:: + + void + PyUFunc_dd_d(char **args, npy_intp const *dimensions, npy_intp const + *steps, void *func) + + +:: + + void + PyUFunc_gg_g(char **args, npy_intp const *dimensions, npy_intp const + *steps, void *func) + + +:: + + void + PyUFunc_FF_F_As_DD_D(char **args, npy_intp const *dimensions, npy_intp + const *steps, void *func) + + +:: + + void + PyUFunc_DD_D(char **args, npy_intp const *dimensions, npy_intp const + *steps, void *func) + + +:: + + void + PyUFunc_FF_F(char **args, npy_intp const *dimensions, npy_intp const + *steps, void *func) + + +:: + + void + PyUFunc_GG_G(char **args, npy_intp const *dimensions, npy_intp const + *steps, void *func) + + +:: + + void + PyUFunc_OO_O(char **args, npy_intp const *dimensions, npy_intp const + *steps, void *func) + + +:: + + void + PyUFunc_O_O_method(char **args, npy_intp const *dimensions, npy_intp + const *steps, void *func) + + +:: + + void + PyUFunc_OO_O_method(char **args, npy_intp const *dimensions, npy_intp + const *steps, void *func) + + +:: + + void + PyUFunc_On_Om(char **args, npy_intp const *dimensions, npy_intp const + *steps, void *func) + + +:: + + int + PyUFunc_GetPyValues(char *name, int *bufsize, int *errmask, PyObject + **errobj) + + +On return, if errobj is populated with a non-NULL value, the caller +owns a new reference to errobj. + +:: + + int + PyUFunc_checkfperr(int errmask, PyObject *errobj, int *first) + + +:: + + void + PyUFunc_clearfperr() + + +:: + + int + PyUFunc_getfperr(void ) + + +:: + + int + PyUFunc_handlefperr(int errmask, PyObject *errobj, int retstatus, int + *first) + + +:: + + int + PyUFunc_ReplaceLoopBySignature(PyUFuncObject + *func, PyUFuncGenericFunction + newfunc, const int + *signature, PyUFuncGenericFunction + *oldfunc) + + +:: + + PyObject * + PyUFunc_FromFuncAndDataAndSignature(PyUFuncGenericFunction *func, void + **data, char *types, int + ntypes, int nin, int nout, int + identity, const char *name, const + char *doc, int unused, const char + *signature) + + +:: + + int + PyUFunc_SetUsesArraysAsData(void **NPY_UNUSED(data) , size_t + NPY_UNUSED(i) ) + + +:: + + void + PyUFunc_e_e(char **args, npy_intp const *dimensions, npy_intp const + *steps, void *func) + + +:: + + void + PyUFunc_e_e_As_f_f(char **args, npy_intp const *dimensions, npy_intp + const *steps, void *func) + + +:: + + void + PyUFunc_e_e_As_d_d(char **args, npy_intp const *dimensions, npy_intp + const *steps, void *func) + + +:: + + void + PyUFunc_ee_e(char **args, npy_intp const *dimensions, npy_intp const + *steps, void *func) + + +:: + + void + PyUFunc_ee_e_As_ff_f(char **args, npy_intp const *dimensions, npy_intp + const *steps, void *func) + + +:: + + void + PyUFunc_ee_e_As_dd_d(char **args, npy_intp const *dimensions, npy_intp + const *steps, void *func) + + +:: + + int + PyUFunc_DefaultTypeResolver(PyUFuncObject *ufunc, NPY_CASTING + casting, PyArrayObject + **operands, PyObject + *type_tup, PyArray_Descr **out_dtypes) + + +This function applies the default type resolution rules +for the provided ufunc. + +Returns 0 on success, -1 on error. + +:: + + int + PyUFunc_ValidateCasting(PyUFuncObject *ufunc, NPY_CASTING + casting, PyArrayObject + **operands, PyArray_Descr **dtypes) + + +Validates that the input operands can be cast to +the input types, and the output types can be cast to +the output operands where provided. + +Returns 0 on success, -1 (with exception raised) on validation failure. + +:: + + int + PyUFunc_RegisterLoopForDescr(PyUFuncObject *ufunc, PyArray_Descr + *user_dtype, PyUFuncGenericFunction + function, PyArray_Descr + **arg_dtypes, void *data) + + +:: + + PyObject * + PyUFunc_FromFuncAndDataAndSignatureAndIdentity(PyUFuncGenericFunction + *func, void + **data, char + *types, int ntypes, int + nin, int nout, int + identity, const char + *name, const char + *doc, const int + unused, const char + *signature, PyObject + *identity_value) + + diff --git a/EXE version/main/numpy/core/include/numpy/ufuncobject.h b/EXE version/main/numpy/core/include/numpy/ufuncobject.h new file mode 100644 index 00000000..333a326e --- /dev/null +++ b/EXE version/main/numpy/core/include/numpy/ufuncobject.h @@ -0,0 +1,373 @@ +#ifndef Py_UFUNCOBJECT_H +#define Py_UFUNCOBJECT_H + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * The legacy generic inner loop for a standard element-wise or + * generalized ufunc. + */ +typedef void (*PyUFuncGenericFunction) + (char **args, + npy_intp const *dimensions, + npy_intp const *strides, + void *innerloopdata); + +/* + * The most generic one-dimensional inner loop for + * a masked standard element-wise ufunc. "Masked" here means that it skips + * doing calculations on any items for which the maskptr array has a true + * value. + */ +typedef void (PyUFunc_MaskedStridedInnerLoopFunc)( + char **dataptrs, npy_intp *strides, + char *maskptr, npy_intp mask_stride, + npy_intp count, + NpyAuxData *innerloopdata); + +/* Forward declaration for the type resolver and loop selector typedefs */ +struct _tagPyUFuncObject; + +/* + * Given the operands for calling a ufunc, should determine the + * calculation input and output data types and return an inner loop function. + * This function should validate that the casting rule is being followed, + * and fail if it is not. + * + * For backwards compatibility, the regular type resolution function does not + * support auxiliary data with object semantics. The type resolution call + * which returns a masked generic function returns a standard NpyAuxData + * object, for which the NPY_AUXDATA_FREE and NPY_AUXDATA_CLONE macros + * work. + * + * ufunc: The ufunc object. + * casting: The 'casting' parameter provided to the ufunc. + * operands: An array of length (ufunc->nin + ufunc->nout), + * with the output parameters possibly NULL. + * type_tup: Either NULL, or the type_tup passed to the ufunc. + * out_dtypes: An array which should be populated with new + * references to (ufunc->nin + ufunc->nout) new + * dtypes, one for each input and output. These + * dtypes should all be in native-endian format. + * + * Should return 0 on success, -1 on failure (with exception set), + * or -2 if Py_NotImplemented should be returned. + */ +typedef int (PyUFunc_TypeResolutionFunc)( + struct _tagPyUFuncObject *ufunc, + NPY_CASTING casting, + PyArrayObject **operands, + PyObject *type_tup, + PyArray_Descr **out_dtypes); + +/* + * Given an array of DTypes as returned by the PyUFunc_TypeResolutionFunc, + * and an array of fixed strides (the array will contain NPY_MAX_INTP for + * strides which are not necessarily fixed), returns an inner loop + * with associated auxiliary data. + * + * For backwards compatibility, there is a variant of the inner loop + * selection which returns an inner loop irrespective of the strides, + * and with a void* static auxiliary data instead of an NpyAuxData * + * dynamically allocatable auxiliary data. + * + * ufunc: The ufunc object. + * dtypes: An array which has been populated with dtypes, + * in most cases by the type resolution function + * for the same ufunc. + * fixed_strides: For each input/output, either the stride that + * will be used every time the function is called + * or NPY_MAX_INTP if the stride might change or + * is not known ahead of time. The loop selection + * function may use this stride to pick inner loops + * which are optimized for contiguous or 0-stride + * cases. + * out_innerloop: Should be populated with the correct ufunc inner + * loop for the given type. + * out_innerloopdata: Should be populated with the void* data to + * be passed into the out_innerloop function. + * out_needs_api: If the inner loop needs to use the Python API, + * should set the to 1, otherwise should leave + * this untouched. + */ +typedef int (PyUFunc_LegacyInnerLoopSelectionFunc)( + struct _tagPyUFuncObject *ufunc, + PyArray_Descr **dtypes, + PyUFuncGenericFunction *out_innerloop, + void **out_innerloopdata, + int *out_needs_api); +typedef int (PyUFunc_MaskedInnerLoopSelectionFunc)( + struct _tagPyUFuncObject *ufunc, + PyArray_Descr **dtypes, + PyArray_Descr *mask_dtype, + npy_intp *fixed_strides, + npy_intp fixed_mask_stride, + PyUFunc_MaskedStridedInnerLoopFunc **out_innerloop, + NpyAuxData **out_innerloopdata, + int *out_needs_api); + +typedef struct _tagPyUFuncObject { + PyObject_HEAD + /* + * nin: Number of inputs + * nout: Number of outputs + * nargs: Always nin + nout (Why is it stored?) + */ + int nin, nout, nargs; + + /* + * Identity for reduction, any of PyUFunc_One, PyUFunc_Zero + * PyUFunc_MinusOne, PyUFunc_None, PyUFunc_ReorderableNone, + * PyUFunc_IdentityValue. + */ + int identity; + + /* Array of one-dimensional core loops */ + PyUFuncGenericFunction *functions; + /* Array of funcdata that gets passed into the functions */ + void **data; + /* The number of elements in 'functions' and 'data' */ + int ntypes; + + /* Used to be unused field 'check_return' */ + int reserved1; + + /* The name of the ufunc */ + const char *name; + + /* Array of type numbers, of size ('nargs' * 'ntypes') */ + char *types; + + /* Documentation string */ + const char *doc; + + void *ptr; + PyObject *obj; + PyObject *userloops; + + /* generalized ufunc parameters */ + + /* 0 for scalar ufunc; 1 for generalized ufunc */ + int core_enabled; + /* number of distinct dimension names in signature */ + int core_num_dim_ix; + + /* + * dimension indices of input/output argument k are stored in + * core_dim_ixs[core_offsets[k]..core_offsets[k]+core_num_dims[k]-1] + */ + + /* numbers of core dimensions of each argument */ + int *core_num_dims; + /* + * dimension indices in a flatted form; indices + * are in the range of [0,core_num_dim_ix) + */ + int *core_dim_ixs; + /* + * positions of 1st core dimensions of each + * argument in core_dim_ixs, equivalent to cumsum(core_num_dims) + */ + int *core_offsets; + /* signature string for printing purpose */ + char *core_signature; + + /* + * A function which resolves the types and fills an array + * with the dtypes for the inputs and outputs. + */ + PyUFunc_TypeResolutionFunc *type_resolver; + /* + * A function which returns an inner loop written for + * NumPy 1.6 and earlier ufuncs. This is for backwards + * compatibility, and may be NULL if inner_loop_selector + * is specified. + */ + PyUFunc_LegacyInnerLoopSelectionFunc *legacy_inner_loop_selector; + /* + * This was blocked off to be the "new" inner loop selector in 1.7, + * but this was never implemented. (This is also why the above + * selector is called the "legacy" selector.) + */ + #if PY_VERSION_HEX >= 0x03080000 + vectorcallfunc vectorcall; + #else + void *reserved2; + #endif + /* + * A function which returns a masked inner loop for the ufunc. + */ + PyUFunc_MaskedInnerLoopSelectionFunc *masked_inner_loop_selector; + + /* + * List of flags for each operand when ufunc is called by nditer object. + * These flags will be used in addition to the default flags for each + * operand set by nditer object. + */ + npy_uint32 *op_flags; + + /* + * List of global flags used when ufunc is called by nditer object. + * These flags will be used in addition to the default global flags + * set by nditer object. + */ + npy_uint32 iter_flags; + + /* New in NPY_API_VERSION 0x0000000D and above */ + + /* + * for each core_num_dim_ix distinct dimension names, + * the possible "frozen" size (-1 if not frozen). + */ + npy_intp *core_dim_sizes; + + /* + * for each distinct core dimension, a set of UFUNC_CORE_DIM* flags + */ + npy_uint32 *core_dim_flags; + + /* Identity for reduction, when identity == PyUFunc_IdentityValue */ + PyObject *identity_value; + +} PyUFuncObject; + +#include "arrayobject.h" +/* Generalized ufunc; 0x0001 reserved for possible use as CORE_ENABLED */ +/* the core dimension's size will be determined by the operands. */ +#define UFUNC_CORE_DIM_SIZE_INFERRED 0x0002 +/* the core dimension may be absent */ +#define UFUNC_CORE_DIM_CAN_IGNORE 0x0004 +/* flags inferred during execution */ +#define UFUNC_CORE_DIM_MISSING 0x00040000 + +#define UFUNC_ERR_IGNORE 0 +#define UFUNC_ERR_WARN 1 +#define UFUNC_ERR_RAISE 2 +#define UFUNC_ERR_CALL 3 +#define UFUNC_ERR_PRINT 4 +#define UFUNC_ERR_LOG 5 + + /* Python side integer mask */ + +#define UFUNC_MASK_DIVIDEBYZERO 0x07 +#define UFUNC_MASK_OVERFLOW 0x3f +#define UFUNC_MASK_UNDERFLOW 0x1ff +#define UFUNC_MASK_INVALID 0xfff + +#define UFUNC_SHIFT_DIVIDEBYZERO 0 +#define UFUNC_SHIFT_OVERFLOW 3 +#define UFUNC_SHIFT_UNDERFLOW 6 +#define UFUNC_SHIFT_INVALID 9 + + +#define UFUNC_OBJ_ISOBJECT 1 +#define UFUNC_OBJ_NEEDS_API 2 + + /* Default user error mode */ +#define UFUNC_ERR_DEFAULT \ + (UFUNC_ERR_WARN << UFUNC_SHIFT_DIVIDEBYZERO) + \ + (UFUNC_ERR_WARN << UFUNC_SHIFT_OVERFLOW) + \ + (UFUNC_ERR_WARN << UFUNC_SHIFT_INVALID) + +#if NPY_ALLOW_THREADS +#define NPY_LOOP_BEGIN_THREADS do {if (!(loop->obj & UFUNC_OBJ_NEEDS_API)) _save = PyEval_SaveThread();} while (0); +#define NPY_LOOP_END_THREADS do {if (!(loop->obj & UFUNC_OBJ_NEEDS_API)) PyEval_RestoreThread(_save);} while (0); +#else +#define NPY_LOOP_BEGIN_THREADS +#define NPY_LOOP_END_THREADS +#endif + +/* + * UFunc has unit of 0, and the order of operations can be reordered + * This case allows reduction with multiple axes at once. + */ +#define PyUFunc_Zero 0 +/* + * UFunc has unit of 1, and the order of operations can be reordered + * This case allows reduction with multiple axes at once. + */ +#define PyUFunc_One 1 +/* + * UFunc has unit of -1, and the order of operations can be reordered + * This case allows reduction with multiple axes at once. Intended for + * bitwise_and reduction. + */ +#define PyUFunc_MinusOne 2 +/* + * UFunc has no unit, and the order of operations cannot be reordered. + * This case does not allow reduction with multiple axes at once. + */ +#define PyUFunc_None -1 +/* + * UFunc has no unit, and the order of operations can be reordered + * This case allows reduction with multiple axes at once. + */ +#define PyUFunc_ReorderableNone -2 +/* + * UFunc unit is an identity_value, and the order of operations can be reordered + * This case allows reduction with multiple axes at once. + */ +#define PyUFunc_IdentityValue -3 + + +#define UFUNC_REDUCE 0 +#define UFUNC_ACCUMULATE 1 +#define UFUNC_REDUCEAT 2 +#define UFUNC_OUTER 3 + + +typedef struct { + int nin; + int nout; + PyObject *callable; +} PyUFunc_PyFuncData; + +/* A linked-list of function information for + user-defined 1-d loops. + */ +typedef struct _loop1d_info { + PyUFuncGenericFunction func; + void *data; + int *arg_types; + struct _loop1d_info *next; + int nargs; + PyArray_Descr **arg_dtypes; +} PyUFunc_Loop1d; + + +#include "__ufunc_api.h" + +#define UFUNC_PYVALS_NAME "UFUNC_PYVALS" + +/* + * THESE MACROS ARE DEPRECATED. + * Use npy_set_floatstatus_* in the npymath library. + */ +#define UFUNC_FPE_DIVIDEBYZERO NPY_FPE_DIVIDEBYZERO +#define UFUNC_FPE_OVERFLOW NPY_FPE_OVERFLOW +#define UFUNC_FPE_UNDERFLOW NPY_FPE_UNDERFLOW +#define UFUNC_FPE_INVALID NPY_FPE_INVALID + +#define generate_divbyzero_error() npy_set_floatstatus_divbyzero() +#define generate_overflow_error() npy_set_floatstatus_overflow() + + /* Make sure it gets defined if it isn't already */ +#ifndef UFUNC_NOFPE +/* Clear the floating point exception default of Borland C++ */ +#if defined(__BORLANDC__) +#define UFUNC_NOFPE _control87(MCW_EM, MCW_EM); +#else +#define UFUNC_NOFPE +#endif +#endif + + +#ifdef __cplusplus +} +#endif +#endif /* !Py_UFUNCOBJECT_H */ diff --git a/EXE version/main/numpy/core/include/numpy/utils.h b/EXE version/main/numpy/core/include/numpy/utils.h new file mode 100644 index 00000000..e251a520 --- /dev/null +++ b/EXE version/main/numpy/core/include/numpy/utils.h @@ -0,0 +1,37 @@ +#ifndef __NUMPY_UTILS_HEADER__ +#define __NUMPY_UTILS_HEADER__ + +#ifndef __COMP_NPY_UNUSED + #if defined(__GNUC__) + #define __COMP_NPY_UNUSED __attribute__ ((__unused__)) + #elif defined(__ICC) + #define __COMP_NPY_UNUSED __attribute__ ((__unused__)) + #elif defined(__clang__) + #define __COMP_NPY_UNUSED __attribute__ ((unused)) + #else + #define __COMP_NPY_UNUSED + #endif +#endif + +#if defined(__GNUC__) || defined(__ICC) || defined(__clang__) + #define NPY_DECL_ALIGNED(x) __attribute__ ((aligned (x))) +#elif defined(_MSC_VER) + #define NPY_DECL_ALIGNED(x) __declspec(align(x)) +#else + #define NPY_DECL_ALIGNED(x) +#endif + +/* Use this to tag a variable as not used. It will remove unused variable + * warning on support platforms (see __COM_NPY_UNUSED) and mangle the variable + * to avoid accidental use */ +#define NPY_UNUSED(x) (__NPY_UNUSED_TAGGED ## x) __COMP_NPY_UNUSED +#define NPY_EXPAND(x) x + +#define NPY_STRINGIFY(x) #x +#define NPY_TOSTRING(x) NPY_STRINGIFY(x) + +#define NPY_CAT__(a, b) a ## b +#define NPY_CAT_(a, b) NPY_CAT__(a, b) +#define NPY_CAT(a, b) NPY_CAT_(a, b) + +#endif diff --git a/EXE version/main/numpy/core/lib/npy-pkg-config/mlib.ini b/EXE version/main/numpy/core/lib/npy-pkg-config/mlib.ini new file mode 100644 index 00000000..1e70ccb6 --- /dev/null +++ b/EXE version/main/numpy/core/lib/npy-pkg-config/mlib.ini @@ -0,0 +1,12 @@ +[meta] +Name = mlib +Description = Math library used with this version of numpy +Version = 1.0 + +[default] +Libs= +Cflags= + +[msvc] +Libs= +Cflags= diff --git a/EXE version/main/numpy/core/lib/npy-pkg-config/npymath.ini b/EXE version/main/numpy/core/lib/npy-pkg-config/npymath.ini new file mode 100644 index 00000000..ec63fa89 --- /dev/null +++ b/EXE version/main/numpy/core/lib/npy-pkg-config/npymath.ini @@ -0,0 +1,20 @@ +[meta] +Name=npymath +Description=Portable, core math library implementing C99 standard +Version=0.1 + +[variables] +pkgname=numpy.core +prefix=${pkgdir} +libdir=${prefix}\lib +includedir=${prefix}\include + +[default] +Libs=-L${libdir} -lnpymath +Cflags=-I${includedir} +Requires=mlib + +[msvc] +Libs=/LIBPATH:${libdir} npymath.lib +Cflags=/INCLUDE:${includedir} +Requires=mlib diff --git a/EXE version/main/numpy/core/lib/npymath.lib b/EXE version/main/numpy/core/lib/npymath.lib new file mode 100644 index 00000000..6d926573 Binary files /dev/null and b/EXE version/main/numpy/core/lib/npymath.lib differ diff --git a/EXE version/main/numpy/core/numeric.pyi b/EXE version/main/numpy/core/numeric.pyi new file mode 100644 index 00000000..f5795143 --- /dev/null +++ b/EXE version/main/numpy/core/numeric.pyi @@ -0,0 +1,243 @@ +import sys +from typing import ( + Any, + Optional, + Union, + Sequence, + Tuple, + Callable, + List, + overload, + TypeVar, + Iterable, +) + +from numpy import ndarray, generic, dtype, bool_, signedinteger, _OrderKACF, _OrderCF +from numpy.typing import ArrayLike, DTypeLike, _ShapeLike + +if sys.version_info >= (3, 8): + from typing import Literal +else: + from typing_extensions import Literal + +_T = TypeVar("_T") +_ArrayType = TypeVar("_ArrayType", bound=ndarray) + +_CorrelateMode = Literal["valid", "same", "full"] + +@overload +def zeros_like( + a: _ArrayType, + dtype: None = ..., + order: _OrderKACF = ..., + subok: Literal[True] = ..., + shape: None = ..., +) -> _ArrayType: ... +@overload +def zeros_like( + a: ArrayLike, + dtype: DTypeLike = ..., + order: _OrderKACF = ..., + subok: bool = ..., + shape: Optional[_ShapeLike] = ..., +) -> ndarray: ... + +def ones( + shape: _ShapeLike, + dtype: DTypeLike = ..., + order: _OrderCF = ..., + *, + like: ArrayLike = ..., +) -> ndarray: ... + +@overload +def ones_like( + a: _ArrayType, + dtype: None = ..., + order: _OrderKACF = ..., + subok: Literal[True] = ..., + shape: None = ..., +) -> _ArrayType: ... +@overload +def ones_like( + a: ArrayLike, + dtype: DTypeLike = ..., + order: _OrderKACF = ..., + subok: bool = ..., + shape: Optional[_ShapeLike] = ..., +) -> ndarray: ... + +@overload +def empty_like( + a: _ArrayType, + dtype: None = ..., + order: _OrderKACF = ..., + subok: Literal[True] = ..., + shape: None = ..., +) -> _ArrayType: ... +@overload +def empty_like( + a: ArrayLike, + dtype: DTypeLike = ..., + order: _OrderKACF = ..., + subok: bool = ..., + shape: Optional[_ShapeLike] = ..., +) -> ndarray: ... + +def full( + shape: _ShapeLike, + fill_value: Any, + dtype: DTypeLike = ..., + order: _OrderCF = ..., + *, + like: ArrayLike = ..., +) -> ndarray: ... + +@overload +def full_like( + a: _ArrayType, + fill_value: Any, + dtype: None = ..., + order: _OrderKACF = ..., + subok: Literal[True] = ..., + shape: None = ..., +) -> _ArrayType: ... +@overload +def full_like( + a: ArrayLike, + fill_value: Any, + dtype: DTypeLike = ..., + order: _OrderKACF = ..., + subok: bool = ..., + shape: Optional[_ShapeLike] = ..., +) -> ndarray: ... + +@overload +def count_nonzero( + a: ArrayLike, + axis: None = ..., + *, + keepdims: Literal[False] = ..., +) -> int: ... +@overload +def count_nonzero( + a: ArrayLike, + axis: _ShapeLike = ..., + *, + keepdims: bool = ..., +) -> Any: ... # TODO: np.intp or ndarray[np.intp] + +def isfortran(a: Union[ndarray, generic]) -> bool: ... + +def argwhere(a: ArrayLike) -> ndarray: ... + +def flatnonzero(a: ArrayLike) -> ndarray: ... + +def correlate( + a: ArrayLike, + v: ArrayLike, + mode: _CorrelateMode = ..., +) -> ndarray: ... + +def convolve( + a: ArrayLike, + v: ArrayLike, + mode: _CorrelateMode = ..., +) -> ndarray: ... + +@overload +def outer( + a: ArrayLike, + b: ArrayLike, + out: None = ..., +) -> ndarray: ... +@overload +def outer( + a: ArrayLike, + b: ArrayLike, + out: _ArrayType = ..., +) -> _ArrayType: ... + +def tensordot( + a: ArrayLike, + b: ArrayLike, + axes: Union[int, Tuple[_ShapeLike, _ShapeLike]] = ..., +) -> ndarray: ... + +def roll( + a: ArrayLike, + shift: _ShapeLike, + axis: Optional[_ShapeLike] = ..., +) -> ndarray: ... + +def rollaxis(a: ndarray, axis: int, start: int = ...) -> ndarray: ... + +def moveaxis( + a: ndarray, + source: _ShapeLike, + destination: _ShapeLike, +) -> ndarray: ... + +def cross( + a: ArrayLike, + b: ArrayLike, + axisa: int = ..., + axisb: int = ..., + axisc: int = ..., + axis: Optional[int] = ..., +) -> ndarray: ... + +@overload +def indices( + dimensions: Sequence[int], + dtype: DTypeLike = ..., + sparse: Literal[False] = ..., +) -> ndarray: ... +@overload +def indices( + dimensions: Sequence[int], + dtype: DTypeLike = ..., + sparse: Literal[True] = ..., +) -> Tuple[ndarray, ...]: ... + +def fromfunction( + function: Callable[..., _T], + shape: Sequence[int], + *, + dtype: DTypeLike = ..., + like: ArrayLike = ..., + **kwargs: Any, +) -> _T: ... + +def isscalar(element: Any) -> bool: ... + +def binary_repr(num: int, width: Optional[int] = ...) -> str: ... + +def base_repr(number: int, base: int = ..., padding: int = ...) -> str: ... + +def identity( + n: int, + dtype: DTypeLike = ..., + *, + like: ArrayLike = ..., +) -> ndarray: ... + +def allclose( + a: ArrayLike, + b: ArrayLike, + rtol: float = ..., + atol: float = ..., + equal_nan: bool = ..., +) -> bool: ... + +def isclose( + a: ArrayLike, + b: ArrayLike, + rtol: float = ..., + atol: float = ..., + equal_nan: bool = ..., +) -> Any: ... + +def array_equal(a1: ArrayLike, a2: ArrayLike, equal_nan: bool = ...) -> bool: ... + +def array_equiv(a1: ArrayLike, a2: ArrayLike) -> bool: ... diff --git a/EXE version/main/numpy/core/numerictypes.pyi b/EXE version/main/numpy/core/numerictypes.pyi new file mode 100644 index 00000000..fd4aa3fd --- /dev/null +++ b/EXE version/main/numpy/core/numerictypes.pyi @@ -0,0 +1,140 @@ +import sys +from typing import ( + TypeVar, + Optional, + Type, + Union, + Tuple, + Sequence, + overload, + Any, + TypeVar, + Dict, + List, +) + +from numpy import ( + ndarray, + dtype, + generic, + bool_, + ubyte, + ushort, + uintc, + uint, + ulonglong, + byte, + short, + intc, + int_, + longlong, + half, + single, + double, + longdouble, + csingle, + cdouble, + clongdouble, + datetime64, + timedelta64, + object_, + str_, + bytes_, + void, +) + +from numpy.core._type_aliases import ( + sctypeDict as sctypeDict, + sctypes as sctypes, +) + +from numpy.typing import DTypeLike, ArrayLike + +if sys.version_info >= (3, 8): + from typing import Literal, Protocol, TypedDict +else: + from typing_extensions import Literal, Protocol, TypedDict + +_T = TypeVar("_T") +_ScalarType = TypeVar("_ScalarType", bound=generic) + +class _CastFunc(Protocol): + def __call__( + self, x: ArrayLike, k: DTypeLike = ... + ) -> ndarray[Any, dtype[Any]]: ... + +class _TypeCodes(TypedDict): + Character: Literal['c'] + Integer: Literal['bhilqp'] + UnsignedInteger: Literal['BHILQP'] + Float: Literal['efdg'] + Complex: Literal['FDG'] + AllInteger: Literal['bBhHiIlLqQpP'] + AllFloat: Literal['efdgFDG'] + Datetime: Literal['Mm'] + All: Literal['?bhilqpBHILQPefdgFDGSUVOMm'] + +class _typedict(Dict[Type[generic], _T]): + def __getitem__(self, key: DTypeLike) -> _T: ... + +__all__: List[str] + +# TODO: Clean up the annotations for the 7 functions below + +def maximum_sctype(t: DTypeLike) -> dtype: ... +def issctype(rep: object) -> bool: ... +@overload +def obj2sctype(rep: object) -> Optional[generic]: ... +@overload +def obj2sctype(rep: object, default: None) -> Optional[generic]: ... +@overload +def obj2sctype( + rep: object, default: Type[_T] +) -> Union[generic, Type[_T]]: ... +def issubclass_(arg1: object, arg2: Union[object, Tuple[object, ...]]) -> bool: ... +def issubsctype( + arg1: Union[ndarray, DTypeLike], arg2: Union[ndarray, DTypeLike] +) -> bool: ... +def issubdtype(arg1: DTypeLike, arg2: DTypeLike) -> bool: ... +def sctype2char(sctype: object) -> str: ... +def find_common_type( + array_types: Sequence[DTypeLike], scalar_types: Sequence[DTypeLike] +) -> dtype: ... + +cast: _typedict[_CastFunc] +nbytes: _typedict[int] +typecodes: _TypeCodes +ScalarType: Tuple[ + Type[int], + Type[float], + Type[complex], + Type[int], + Type[bool], + Type[bytes], + Type[str], + Type[memoryview], + Type[bool_], + Type[csingle], + Type[cdouble], + Type[clongdouble], + Type[half], + Type[single], + Type[double], + Type[longdouble], + Type[byte], + Type[short], + Type[intc], + Type[int_], + Type[longlong], + Type[timedelta64], + Type[datetime64], + Type[object_], + Type[bytes_], + Type[str_], + Type[ubyte], + Type[ushort], + Type[uintc], + Type[uint], + Type[ulonglong], + Type[void], +] diff --git a/EXE version/main/numpy/core/shape_base.pyi b/EXE version/main/numpy/core/shape_base.pyi new file mode 100644 index 00000000..ec40a881 --- /dev/null +++ b/EXE version/main/numpy/core/shape_base.pyi @@ -0,0 +1,39 @@ +import sys +from typing import TypeVar, overload, List, Sequence + +from numpy import ndarray +from numpy.typing import ArrayLike + +if sys.version_info >= (3, 8): + from typing import SupportsIndex +else: + from typing_extensions import SupportsIndex + +_ArrayType = TypeVar("_ArrayType", bound=ndarray) + +@overload +def atleast_1d(__arys: ArrayLike) -> ndarray: ... +@overload +def atleast_1d(*arys: ArrayLike) -> List[ndarray]: ... + +@overload +def atleast_2d(__arys: ArrayLike) -> ndarray: ... +@overload +def atleast_2d(*arys: ArrayLike) -> List[ndarray]: ... + +@overload +def atleast_3d(__arys: ArrayLike) -> ndarray: ... +@overload +def atleast_3d(*arys: ArrayLike) -> List[ndarray]: ... + +def vstack(tup: Sequence[ArrayLike]) -> ndarray: ... +def hstack(tup: Sequence[ArrayLike]) -> ndarray: ... +@overload +def stack( + arrays: Sequence[ArrayLike], axis: SupportsIndex = ..., out: None = ... +) -> ndarray: ... +@overload +def stack( + arrays: Sequence[ArrayLike], axis: SupportsIndex = ..., out: _ArrayType = ... +) -> _ArrayType: ... +def block(arrays: ArrayLike) -> ndarray: ... diff --git a/EXE version/main/numpy/core/tests/data/astype_copy.pkl b/EXE version/main/numpy/core/tests/data/astype_copy.pkl new file mode 100644 index 00000000..7397c978 Binary files /dev/null and b/EXE version/main/numpy/core/tests/data/astype_copy.pkl differ diff --git a/EXE version/main/numpy/core/tests/data/recarray_from_file.fits b/EXE version/main/numpy/core/tests/data/recarray_from_file.fits new file mode 100644 index 00000000..ca48ee85 Binary files /dev/null and b/EXE version/main/numpy/core/tests/data/recarray_from_file.fits differ diff --git a/EXE version/main/numpy/core/tests/data/umath-validation-set-README.txt b/EXE version/main/numpy/core/tests/data/umath-validation-set-README.txt new file mode 100644 index 00000000..cfc9e414 --- /dev/null +++ b/EXE version/main/numpy/core/tests/data/umath-validation-set-README.txt @@ -0,0 +1,15 @@ +Steps to validate transcendental functions: +1) Add a file 'umath-validation-set-.txt', where ufuncname is name of + the function in NumPy you want to validate +2) The file should contain 4 columns: dtype,input,expected output,ulperror + a. dtype: one of np.float16, np.float32, np.float64 + b. input: floating point input to ufunc in hex. Example: 0x414570a4 + represents 12.340000152587890625 + c. expected output: floating point output for the corresponding input in hex. + This should be computed using a high(er) precision library and then rounded to + same format as the input. + d. ulperror: expected maximum ulp error of the function. This + should be same across all rows of the same dtype. Otherwise, the function is + tested for the maximum ulp error among all entries of that dtype. +3) Add file umath-validation-set-.txt to the test file test_umath_accuracy.py + which will then validate your ufunc. diff --git a/EXE version/main/numpy/core/tests/data/umath-validation-set-cos.csv b/EXE version/main/numpy/core/tests/data/umath-validation-set-cos.csv new file mode 100644 index 00000000..2e75f044 --- /dev/null +++ b/EXE version/main/numpy/core/tests/data/umath-validation-set-cos.csv @@ -0,0 +1,665 @@ +dtype,input,output,ulperrortol +## +ve denormals ## +np.float32,0x004b4716,0x3f800000,2 +np.float32,0x007b2490,0x3f800000,2 +np.float32,0x007c99fa,0x3f800000,2 +np.float32,0x00734a0c,0x3f800000,2 +np.float32,0x0070de24,0x3f800000,2 +np.float32,0x007fffff,0x3f800000,2 +np.float32,0x00000001,0x3f800000,2 +## -ve denormals ## +np.float32,0x80495d65,0x3f800000,2 +np.float32,0x806894f6,0x3f800000,2 +np.float32,0x80555a76,0x3f800000,2 +np.float32,0x804e1fb8,0x3f800000,2 +np.float32,0x80687de9,0x3f800000,2 +np.float32,0x807fffff,0x3f800000,2 +np.float32,0x80000001,0x3f800000,2 +## +/-0.0f, +/-FLT_MIN +/-FLT_MAX ## +np.float32,0x00000000,0x3f800000,2 +np.float32,0x80000000,0x3f800000,2 +np.float32,0x00800000,0x3f800000,2 +np.float32,0x80800000,0x3f800000,2 +## 1.00f + 0x00000001 ## +np.float32,0x3f800000,0x3f0a5140,2 +np.float32,0x3f800001,0x3f0a513f,2 +np.float32,0x3f800002,0x3f0a513d,2 +np.float32,0xc090a8b0,0xbe4332ce,2 +np.float32,0x41ce3184,0x3f4d1de1,2 +np.float32,0xc1d85848,0xbeaa8980,2 +np.float32,0x402b8820,0xbf653aa3,2 +np.float32,0x42b4e454,0xbf4a338b,2 +np.float32,0x42a67a60,0x3c58202e,2 +np.float32,0x41d92388,0xbed987c7,2 +np.float32,0x422dd66c,0x3f5dcab3,2 +np.float32,0xc28f5be6,0xbf5688d8,2 +np.float32,0x41ab2674,0xbf53aa3b,2 +np.float32,0x3f490fdb,0x3f3504f3,2 +np.float32,0xbf490fdb,0x3f3504f3,2 +np.float32,0x3fc90fdb,0xb33bbd2e,2 +np.float32,0xbfc90fdb,0xb33bbd2e,2 +np.float32,0x40490fdb,0xbf800000,2 +np.float32,0xc0490fdb,0xbf800000,2 +np.float32,0x3fc90fdb,0xb33bbd2e,2 +np.float32,0xbfc90fdb,0xb33bbd2e,2 +np.float32,0x40490fdb,0xbf800000,2 +np.float32,0xc0490fdb,0xbf800000,2 +np.float32,0x40c90fdb,0x3f800000,2 +np.float32,0xc0c90fdb,0x3f800000,2 +np.float32,0x4016cbe4,0xbf3504f3,2 +np.float32,0xc016cbe4,0xbf3504f3,2 +np.float32,0x4096cbe4,0x324cde2e,2 +np.float32,0xc096cbe4,0x324cde2e,2 +np.float32,0x4116cbe4,0xbf800000,2 +np.float32,0xc116cbe4,0xbf800000,2 +np.float32,0x40490fdb,0xbf800000,2 +np.float32,0xc0490fdb,0xbf800000,2 +np.float32,0x40c90fdb,0x3f800000,2 +np.float32,0xc0c90fdb,0x3f800000,2 +np.float32,0x41490fdb,0x3f800000,2 +np.float32,0xc1490fdb,0x3f800000,2 +np.float32,0x407b53d2,0xbf3504f1,2 +np.float32,0xc07b53d2,0xbf3504f1,2 +np.float32,0x40fb53d2,0xb4b5563d,2 +np.float32,0xc0fb53d2,0xb4b5563d,2 +np.float32,0x417b53d2,0xbf800000,2 +np.float32,0xc17b53d2,0xbf800000,2 +np.float32,0x4096cbe4,0x324cde2e,2 +np.float32,0xc096cbe4,0x324cde2e,2 +np.float32,0x4116cbe4,0xbf800000,2 +np.float32,0xc116cbe4,0xbf800000,2 +np.float32,0x4196cbe4,0x3f800000,2 +np.float32,0xc196cbe4,0x3f800000,2 +np.float32,0x40afede0,0x3f3504f7,2 +np.float32,0xc0afede0,0x3f3504f7,2 +np.float32,0x412fede0,0x353222c4,2 +np.float32,0xc12fede0,0x353222c4,2 +np.float32,0x41afede0,0xbf800000,2 +np.float32,0xc1afede0,0xbf800000,2 +np.float32,0x40c90fdb,0x3f800000,2 +np.float32,0xc0c90fdb,0x3f800000,2 +np.float32,0x41490fdb,0x3f800000,2 +np.float32,0xc1490fdb,0x3f800000,2 +np.float32,0x41c90fdb,0x3f800000,2 +np.float32,0xc1c90fdb,0x3f800000,2 +np.float32,0x40e231d6,0x3f3504f3,2 +np.float32,0xc0e231d6,0x3f3504f3,2 +np.float32,0x416231d6,0xb319a6a2,2 +np.float32,0xc16231d6,0xb319a6a2,2 +np.float32,0x41e231d6,0xbf800000,2 +np.float32,0xc1e231d6,0xbf800000,2 +np.float32,0x40fb53d2,0xb4b5563d,2 +np.float32,0xc0fb53d2,0xb4b5563d,2 +np.float32,0x417b53d2,0xbf800000,2 +np.float32,0xc17b53d2,0xbf800000,2 +np.float32,0x41fb53d2,0x3f800000,2 +np.float32,0xc1fb53d2,0x3f800000,2 +np.float32,0x410a3ae7,0xbf3504fb,2 +np.float32,0xc10a3ae7,0xbf3504fb,2 +np.float32,0x418a3ae7,0x35b08908,2 +np.float32,0xc18a3ae7,0x35b08908,2 +np.float32,0x420a3ae7,0xbf800000,2 +np.float32,0xc20a3ae7,0xbf800000,2 +np.float32,0x4116cbe4,0xbf800000,2 +np.float32,0xc116cbe4,0xbf800000,2 +np.float32,0x4196cbe4,0x3f800000,2 +np.float32,0xc196cbe4,0x3f800000,2 +np.float32,0x4216cbe4,0x3f800000,2 +np.float32,0xc216cbe4,0x3f800000,2 +np.float32,0x41235ce2,0xbf3504ef,2 +np.float32,0xc1235ce2,0xbf3504ef,2 +np.float32,0x41a35ce2,0xb53889b6,2 +np.float32,0xc1a35ce2,0xb53889b6,2 +np.float32,0x42235ce2,0xbf800000,2 +np.float32,0xc2235ce2,0xbf800000,2 +np.float32,0x412fede0,0x353222c4,2 +np.float32,0xc12fede0,0x353222c4,2 +np.float32,0x41afede0,0xbf800000,2 +np.float32,0xc1afede0,0xbf800000,2 +np.float32,0x422fede0,0x3f800000,2 +np.float32,0xc22fede0,0x3f800000,2 +np.float32,0x413c7edd,0x3f3504f4,2 +np.float32,0xc13c7edd,0x3f3504f4,2 +np.float32,0x41bc7edd,0x33800add,2 +np.float32,0xc1bc7edd,0x33800add,2 +np.float32,0x423c7edd,0xbf800000,2 +np.float32,0xc23c7edd,0xbf800000,2 +np.float32,0x41490fdb,0x3f800000,2 +np.float32,0xc1490fdb,0x3f800000,2 +np.float32,0x41c90fdb,0x3f800000,2 +np.float32,0xc1c90fdb,0x3f800000,2 +np.float32,0x42490fdb,0x3f800000,2 +np.float32,0xc2490fdb,0x3f800000,2 +np.float32,0x4155a0d9,0x3f3504eb,2 +np.float32,0xc155a0d9,0x3f3504eb,2 +np.float32,0x41d5a0d9,0xb5b3bc81,2 +np.float32,0xc1d5a0d9,0xb5b3bc81,2 +np.float32,0x4255a0d9,0xbf800000,2 +np.float32,0xc255a0d9,0xbf800000,2 +np.float32,0x416231d6,0xb319a6a2,2 +np.float32,0xc16231d6,0xb319a6a2,2 +np.float32,0x41e231d6,0xbf800000,2 +np.float32,0xc1e231d6,0xbf800000,2 +np.float32,0x426231d6,0x3f800000,2 +np.float32,0xc26231d6,0x3f800000,2 +np.float32,0x416ec2d4,0xbf3504f7,2 +np.float32,0xc16ec2d4,0xbf3504f7,2 +np.float32,0x41eec2d4,0x353ef0a7,2 +np.float32,0xc1eec2d4,0x353ef0a7,2 +np.float32,0x426ec2d4,0xbf800000,2 +np.float32,0xc26ec2d4,0xbf800000,2 +np.float32,0x417b53d2,0xbf800000,2 +np.float32,0xc17b53d2,0xbf800000,2 +np.float32,0x41fb53d2,0x3f800000,2 +np.float32,0xc1fb53d2,0x3f800000,2 +np.float32,0x427b53d2,0x3f800000,2 +np.float32,0xc27b53d2,0x3f800000,2 +np.float32,0x4183f268,0xbf3504e7,2 +np.float32,0xc183f268,0xbf3504e7,2 +np.float32,0x4203f268,0xb6059a13,2 +np.float32,0xc203f268,0xb6059a13,2 +np.float32,0x4283f268,0xbf800000,2 +np.float32,0xc283f268,0xbf800000,2 +np.float32,0x418a3ae7,0x35b08908,2 +np.float32,0xc18a3ae7,0x35b08908,2 +np.float32,0x420a3ae7,0xbf800000,2 +np.float32,0xc20a3ae7,0xbf800000,2 +np.float32,0x428a3ae7,0x3f800000,2 +np.float32,0xc28a3ae7,0x3f800000,2 +np.float32,0x41908365,0x3f3504f0,2 +np.float32,0xc1908365,0x3f3504f0,2 +np.float32,0x42108365,0xb512200d,2 +np.float32,0xc2108365,0xb512200d,2 +np.float32,0x42908365,0xbf800000,2 +np.float32,0xc2908365,0xbf800000,2 +np.float32,0x4196cbe4,0x3f800000,2 +np.float32,0xc196cbe4,0x3f800000,2 +np.float32,0x4216cbe4,0x3f800000,2 +np.float32,0xc216cbe4,0x3f800000,2 +np.float32,0x4296cbe4,0x3f800000,2 +np.float32,0xc296cbe4,0x3f800000,2 +np.float32,0x419d1463,0x3f3504ef,2 +np.float32,0xc19d1463,0x3f3504ef,2 +np.float32,0x421d1463,0xb5455799,2 +np.float32,0xc21d1463,0xb5455799,2 +np.float32,0x429d1463,0xbf800000,2 +np.float32,0xc29d1463,0xbf800000,2 +np.float32,0x41a35ce2,0xb53889b6,2 +np.float32,0xc1a35ce2,0xb53889b6,2 +np.float32,0x42235ce2,0xbf800000,2 +np.float32,0xc2235ce2,0xbf800000,2 +np.float32,0x42a35ce2,0x3f800000,2 +np.float32,0xc2a35ce2,0x3f800000,2 +np.float32,0x41a9a561,0xbf3504ff,2 +np.float32,0xc1a9a561,0xbf3504ff,2 +np.float32,0x4229a561,0x360733d0,2 +np.float32,0xc229a561,0x360733d0,2 +np.float32,0x42a9a561,0xbf800000,2 +np.float32,0xc2a9a561,0xbf800000,2 +np.float32,0x41afede0,0xbf800000,2 +np.float32,0xc1afede0,0xbf800000,2 +np.float32,0x422fede0,0x3f800000,2 +np.float32,0xc22fede0,0x3f800000,2 +np.float32,0x42afede0,0x3f800000,2 +np.float32,0xc2afede0,0x3f800000,2 +np.float32,0x41b6365e,0xbf3504f6,2 +np.float32,0xc1b6365e,0xbf3504f6,2 +np.float32,0x4236365e,0x350bb91c,2 +np.float32,0xc236365e,0x350bb91c,2 +np.float32,0x42b6365e,0xbf800000,2 +np.float32,0xc2b6365e,0xbf800000,2 +np.float32,0x41bc7edd,0x33800add,2 +np.float32,0xc1bc7edd,0x33800add,2 +np.float32,0x423c7edd,0xbf800000,2 +np.float32,0xc23c7edd,0xbf800000,2 +np.float32,0x42bc7edd,0x3f800000,2 +np.float32,0xc2bc7edd,0x3f800000,2 +np.float32,0x41c2c75c,0x3f3504f8,2 +np.float32,0xc1c2c75c,0x3f3504f8,2 +np.float32,0x4242c75c,0x354bbe8a,2 +np.float32,0xc242c75c,0x354bbe8a,2 +np.float32,0x42c2c75c,0xbf800000,2 +np.float32,0xc2c2c75c,0xbf800000,2 +np.float32,0x41c90fdb,0x3f800000,2 +np.float32,0xc1c90fdb,0x3f800000,2 +np.float32,0x42490fdb,0x3f800000,2 +np.float32,0xc2490fdb,0x3f800000,2 +np.float32,0x42c90fdb,0x3f800000,2 +np.float32,0xc2c90fdb,0x3f800000,2 +np.float32,0x41cf585a,0x3f3504e7,2 +np.float32,0xc1cf585a,0x3f3504e7,2 +np.float32,0x424f585a,0xb608cd8c,2 +np.float32,0xc24f585a,0xb608cd8c,2 +np.float32,0x42cf585a,0xbf800000,2 +np.float32,0xc2cf585a,0xbf800000,2 +np.float32,0x41d5a0d9,0xb5b3bc81,2 +np.float32,0xc1d5a0d9,0xb5b3bc81,2 +np.float32,0x4255a0d9,0xbf800000,2 +np.float32,0xc255a0d9,0xbf800000,2 +np.float32,0x42d5a0d9,0x3f800000,2 +np.float32,0xc2d5a0d9,0x3f800000,2 +np.float32,0x41dbe958,0xbf350507,2 +np.float32,0xc1dbe958,0xbf350507,2 +np.float32,0x425be958,0x365eab75,2 +np.float32,0xc25be958,0x365eab75,2 +np.float32,0x42dbe958,0xbf800000,2 +np.float32,0xc2dbe958,0xbf800000,2 +np.float32,0x41e231d6,0xbf800000,2 +np.float32,0xc1e231d6,0xbf800000,2 +np.float32,0x426231d6,0x3f800000,2 +np.float32,0xc26231d6,0x3f800000,2 +np.float32,0x42e231d6,0x3f800000,2 +np.float32,0xc2e231d6,0x3f800000,2 +np.float32,0x41e87a55,0xbf3504ef,2 +np.float32,0xc1e87a55,0xbf3504ef,2 +np.float32,0x42687a55,0xb552257b,2 +np.float32,0xc2687a55,0xb552257b,2 +np.float32,0x42e87a55,0xbf800000,2 +np.float32,0xc2e87a55,0xbf800000,2 +np.float32,0x41eec2d4,0x353ef0a7,2 +np.float32,0xc1eec2d4,0x353ef0a7,2 +np.float32,0x426ec2d4,0xbf800000,2 +np.float32,0xc26ec2d4,0xbf800000,2 +np.float32,0x42eec2d4,0x3f800000,2 +np.float32,0xc2eec2d4,0x3f800000,2 +np.float32,0x41f50b53,0x3f3504ff,2 +np.float32,0xc1f50b53,0x3f3504ff,2 +np.float32,0x42750b53,0x360a6748,2 +np.float32,0xc2750b53,0x360a6748,2 +np.float32,0x42f50b53,0xbf800000,2 +np.float32,0xc2f50b53,0xbf800000,2 +np.float32,0x41fb53d2,0x3f800000,2 +np.float32,0xc1fb53d2,0x3f800000,2 +np.float32,0x427b53d2,0x3f800000,2 +np.float32,0xc27b53d2,0x3f800000,2 +np.float32,0x42fb53d2,0x3f800000,2 +np.float32,0xc2fb53d2,0x3f800000,2 +np.float32,0x4200ce28,0x3f3504f6,2 +np.float32,0xc200ce28,0x3f3504f6,2 +np.float32,0x4280ce28,0x34fdd672,2 +np.float32,0xc280ce28,0x34fdd672,2 +np.float32,0x4300ce28,0xbf800000,2 +np.float32,0xc300ce28,0xbf800000,2 +np.float32,0x4203f268,0xb6059a13,2 +np.float32,0xc203f268,0xb6059a13,2 +np.float32,0x4283f268,0xbf800000,2 +np.float32,0xc283f268,0xbf800000,2 +np.float32,0x4303f268,0x3f800000,2 +np.float32,0xc303f268,0x3f800000,2 +np.float32,0x420716a7,0xbf3504f8,2 +np.float32,0xc20716a7,0xbf3504f8,2 +np.float32,0x428716a7,0x35588c6d,2 +np.float32,0xc28716a7,0x35588c6d,2 +np.float32,0x430716a7,0xbf800000,2 +np.float32,0xc30716a7,0xbf800000,2 +np.float32,0x420a3ae7,0xbf800000,2 +np.float32,0xc20a3ae7,0xbf800000,2 +np.float32,0x428a3ae7,0x3f800000,2 +np.float32,0xc28a3ae7,0x3f800000,2 +np.float32,0x430a3ae7,0x3f800000,2 +np.float32,0xc30a3ae7,0x3f800000,2 +np.float32,0x420d5f26,0xbf3504e7,2 +np.float32,0xc20d5f26,0xbf3504e7,2 +np.float32,0x428d5f26,0xb60c0105,2 +np.float32,0xc28d5f26,0xb60c0105,2 +np.float32,0x430d5f26,0xbf800000,2 +np.float32,0xc30d5f26,0xbf800000,2 +np.float32,0x42108365,0xb512200d,2 +np.float32,0xc2108365,0xb512200d,2 +np.float32,0x42908365,0xbf800000,2 +np.float32,0xc2908365,0xbf800000,2 +np.float32,0x43108365,0x3f800000,2 +np.float32,0xc3108365,0x3f800000,2 +np.float32,0x4213a7a5,0x3f350507,2 +np.float32,0xc213a7a5,0x3f350507,2 +np.float32,0x4293a7a5,0x3661deee,2 +np.float32,0xc293a7a5,0x3661deee,2 +np.float32,0x4313a7a5,0xbf800000,2 +np.float32,0xc313a7a5,0xbf800000,2 +np.float32,0x4216cbe4,0x3f800000,2 +np.float32,0xc216cbe4,0x3f800000,2 +np.float32,0x4296cbe4,0x3f800000,2 +np.float32,0xc296cbe4,0x3f800000,2 +np.float32,0x4316cbe4,0x3f800000,2 +np.float32,0xc316cbe4,0x3f800000,2 +np.float32,0x4219f024,0x3f3504d8,2 +np.float32,0xc219f024,0x3f3504d8,2 +np.float32,0x4299f024,0xb69bde6c,2 +np.float32,0xc299f024,0xb69bde6c,2 +np.float32,0x4319f024,0xbf800000,2 +np.float32,0xc319f024,0xbf800000,2 +np.float32,0x421d1463,0xb5455799,2 +np.float32,0xc21d1463,0xb5455799,2 +np.float32,0x429d1463,0xbf800000,2 +np.float32,0xc29d1463,0xbf800000,2 +np.float32,0x431d1463,0x3f800000,2 +np.float32,0xc31d1463,0x3f800000,2 +np.float32,0x422038a3,0xbf350516,2 +np.float32,0xc22038a3,0xbf350516,2 +np.float32,0x42a038a3,0x36c6cd61,2 +np.float32,0xc2a038a3,0x36c6cd61,2 +np.float32,0x432038a3,0xbf800000,2 +np.float32,0xc32038a3,0xbf800000,2 +np.float32,0x42235ce2,0xbf800000,2 +np.float32,0xc2235ce2,0xbf800000,2 +np.float32,0x42a35ce2,0x3f800000,2 +np.float32,0xc2a35ce2,0x3f800000,2 +np.float32,0x43235ce2,0x3f800000,2 +np.float32,0xc3235ce2,0x3f800000,2 +np.float32,0x42268121,0xbf3504f6,2 +np.float32,0xc2268121,0xbf3504f6,2 +np.float32,0x42a68121,0x34e43aac,2 +np.float32,0xc2a68121,0x34e43aac,2 +np.float32,0x43268121,0xbf800000,2 +np.float32,0xc3268121,0xbf800000,2 +np.float32,0x4229a561,0x360733d0,2 +np.float32,0xc229a561,0x360733d0,2 +np.float32,0x42a9a561,0xbf800000,2 +np.float32,0xc2a9a561,0xbf800000,2 +np.float32,0x4329a561,0x3f800000,2 +np.float32,0xc329a561,0x3f800000,2 +np.float32,0x422cc9a0,0x3f3504f8,2 +np.float32,0xc22cc9a0,0x3f3504f8,2 +np.float32,0x42acc9a0,0x35655a50,2 +np.float32,0xc2acc9a0,0x35655a50,2 +np.float32,0x432cc9a0,0xbf800000,2 +np.float32,0xc32cc9a0,0xbf800000,2 +np.float32,0x422fede0,0x3f800000,2 +np.float32,0xc22fede0,0x3f800000,2 +np.float32,0x42afede0,0x3f800000,2 +np.float32,0xc2afede0,0x3f800000,2 +np.float32,0x432fede0,0x3f800000,2 +np.float32,0xc32fede0,0x3f800000,2 +np.float32,0x4233121f,0x3f3504e7,2 +np.float32,0xc233121f,0x3f3504e7,2 +np.float32,0x42b3121f,0xb60f347d,2 +np.float32,0xc2b3121f,0xb60f347d,2 +np.float32,0x4333121f,0xbf800000,2 +np.float32,0xc333121f,0xbf800000,2 +np.float32,0x4236365e,0x350bb91c,2 +np.float32,0xc236365e,0x350bb91c,2 +np.float32,0x42b6365e,0xbf800000,2 +np.float32,0xc2b6365e,0xbf800000,2 +np.float32,0x4336365e,0x3f800000,2 +np.float32,0xc336365e,0x3f800000,2 +np.float32,0x42395a9e,0xbf350507,2 +np.float32,0xc2395a9e,0xbf350507,2 +np.float32,0x42b95a9e,0x36651267,2 +np.float32,0xc2b95a9e,0x36651267,2 +np.float32,0x43395a9e,0xbf800000,2 +np.float32,0xc3395a9e,0xbf800000,2 +np.float32,0x423c7edd,0xbf800000,2 +np.float32,0xc23c7edd,0xbf800000,2 +np.float32,0x42bc7edd,0x3f800000,2 +np.float32,0xc2bc7edd,0x3f800000,2 +np.float32,0x433c7edd,0x3f800000,2 +np.float32,0xc33c7edd,0x3f800000,2 +np.float32,0x423fa31d,0xbf3504d7,2 +np.float32,0xc23fa31d,0xbf3504d7,2 +np.float32,0x42bfa31d,0xb69d7828,2 +np.float32,0xc2bfa31d,0xb69d7828,2 +np.float32,0x433fa31d,0xbf800000,2 +np.float32,0xc33fa31d,0xbf800000,2 +np.float32,0x4242c75c,0x354bbe8a,2 +np.float32,0xc242c75c,0x354bbe8a,2 +np.float32,0x42c2c75c,0xbf800000,2 +np.float32,0xc2c2c75c,0xbf800000,2 +np.float32,0x4342c75c,0x3f800000,2 +np.float32,0xc342c75c,0x3f800000,2 +np.float32,0x4245eb9c,0x3f350517,2 +np.float32,0xc245eb9c,0x3f350517,2 +np.float32,0x42c5eb9c,0x36c8671d,2 +np.float32,0xc2c5eb9c,0x36c8671d,2 +np.float32,0x4345eb9c,0xbf800000,2 +np.float32,0xc345eb9c,0xbf800000,2 +np.float32,0x42490fdb,0x3f800000,2 +np.float32,0xc2490fdb,0x3f800000,2 +np.float32,0x42c90fdb,0x3f800000,2 +np.float32,0xc2c90fdb,0x3f800000,2 +np.float32,0x43490fdb,0x3f800000,2 +np.float32,0xc3490fdb,0x3f800000,2 +np.float32,0x424c341a,0x3f3504f5,2 +np.float32,0xc24c341a,0x3f3504f5,2 +np.float32,0x42cc341a,0x34ca9ee6,2 +np.float32,0xc2cc341a,0x34ca9ee6,2 +np.float32,0x434c341a,0xbf800000,2 +np.float32,0xc34c341a,0xbf800000,2 +np.float32,0x424f585a,0xb608cd8c,2 +np.float32,0xc24f585a,0xb608cd8c,2 +np.float32,0x42cf585a,0xbf800000,2 +np.float32,0xc2cf585a,0xbf800000,2 +np.float32,0x434f585a,0x3f800000,2 +np.float32,0xc34f585a,0x3f800000,2 +np.float32,0x42527c99,0xbf3504f9,2 +np.float32,0xc2527c99,0xbf3504f9,2 +np.float32,0x42d27c99,0x35722833,2 +np.float32,0xc2d27c99,0x35722833,2 +np.float32,0x43527c99,0xbf800000,2 +np.float32,0xc3527c99,0xbf800000,2 +np.float32,0x4255a0d9,0xbf800000,2 +np.float32,0xc255a0d9,0xbf800000,2 +np.float32,0x42d5a0d9,0x3f800000,2 +np.float32,0xc2d5a0d9,0x3f800000,2 +np.float32,0x4355a0d9,0x3f800000,2 +np.float32,0xc355a0d9,0x3f800000,2 +np.float32,0x4258c518,0xbf3504e6,2 +np.float32,0xc258c518,0xbf3504e6,2 +np.float32,0x42d8c518,0xb61267f6,2 +np.float32,0xc2d8c518,0xb61267f6,2 +np.float32,0x4358c518,0xbf800000,2 +np.float32,0xc358c518,0xbf800000,2 +np.float32,0x425be958,0x365eab75,2 +np.float32,0xc25be958,0x365eab75,2 +np.float32,0x42dbe958,0xbf800000,2 +np.float32,0xc2dbe958,0xbf800000,2 +np.float32,0x435be958,0x3f800000,2 +np.float32,0xc35be958,0x3f800000,2 +np.float32,0x425f0d97,0x3f350508,2 +np.float32,0xc25f0d97,0x3f350508,2 +np.float32,0x42df0d97,0x366845e0,2 +np.float32,0xc2df0d97,0x366845e0,2 +np.float32,0x435f0d97,0xbf800000,2 +np.float32,0xc35f0d97,0xbf800000,2 +np.float32,0x426231d6,0x3f800000,2 +np.float32,0xc26231d6,0x3f800000,2 +np.float32,0x42e231d6,0x3f800000,2 +np.float32,0xc2e231d6,0x3f800000,2 +np.float32,0x436231d6,0x3f800000,2 +np.float32,0xc36231d6,0x3f800000,2 +np.float32,0x42655616,0x3f3504d7,2 +np.float32,0xc2655616,0x3f3504d7,2 +np.float32,0x42e55616,0xb69f11e5,2 +np.float32,0xc2e55616,0xb69f11e5,2 +np.float32,0x43655616,0xbf800000,2 +np.float32,0xc3655616,0xbf800000,2 +np.float32,0x42687a55,0xb552257b,2 +np.float32,0xc2687a55,0xb552257b,2 +np.float32,0x42e87a55,0xbf800000,2 +np.float32,0xc2e87a55,0xbf800000,2 +np.float32,0x43687a55,0x3f800000,2 +np.float32,0xc3687a55,0x3f800000,2 +np.float32,0x426b9e95,0xbf350517,2 +np.float32,0xc26b9e95,0xbf350517,2 +np.float32,0x42eb9e95,0x36ca00d9,2 +np.float32,0xc2eb9e95,0x36ca00d9,2 +np.float32,0x436b9e95,0xbf800000,2 +np.float32,0xc36b9e95,0xbf800000,2 +np.float32,0x426ec2d4,0xbf800000,2 +np.float32,0xc26ec2d4,0xbf800000,2 +np.float32,0x42eec2d4,0x3f800000,2 +np.float32,0xc2eec2d4,0x3f800000,2 +np.float32,0x436ec2d4,0x3f800000,2 +np.float32,0xc36ec2d4,0x3f800000,2 +np.float32,0x4271e713,0xbf3504f5,2 +np.float32,0xc271e713,0xbf3504f5,2 +np.float32,0x42f1e713,0x34b10321,2 +np.float32,0xc2f1e713,0x34b10321,2 +np.float32,0x4371e713,0xbf800000,2 +np.float32,0xc371e713,0xbf800000,2 +np.float32,0x42750b53,0x360a6748,2 +np.float32,0xc2750b53,0x360a6748,2 +np.float32,0x42f50b53,0xbf800000,2 +np.float32,0xc2f50b53,0xbf800000,2 +np.float32,0x43750b53,0x3f800000,2 +np.float32,0xc3750b53,0x3f800000,2 +np.float32,0x42782f92,0x3f3504f9,2 +np.float32,0xc2782f92,0x3f3504f9,2 +np.float32,0x42f82f92,0x357ef616,2 +np.float32,0xc2f82f92,0x357ef616,2 +np.float32,0x43782f92,0xbf800000,2 +np.float32,0xc3782f92,0xbf800000,2 +np.float32,0x427b53d2,0x3f800000,2 +np.float32,0xc27b53d2,0x3f800000,2 +np.float32,0x42fb53d2,0x3f800000,2 +np.float32,0xc2fb53d2,0x3f800000,2 +np.float32,0x437b53d2,0x3f800000,2 +np.float32,0xc37b53d2,0x3f800000,2 +np.float32,0x427e7811,0x3f3504e6,2 +np.float32,0xc27e7811,0x3f3504e6,2 +np.float32,0x42fe7811,0xb6159b6f,2 +np.float32,0xc2fe7811,0xb6159b6f,2 +np.float32,0x437e7811,0xbf800000,2 +np.float32,0xc37e7811,0xbf800000,2 +np.float32,0x4280ce28,0x34fdd672,2 +np.float32,0xc280ce28,0x34fdd672,2 +np.float32,0x4300ce28,0xbf800000,2 +np.float32,0xc300ce28,0xbf800000,2 +np.float32,0x4380ce28,0x3f800000,2 +np.float32,0xc380ce28,0x3f800000,2 +np.float32,0x42826048,0xbf350508,2 +np.float32,0xc2826048,0xbf350508,2 +np.float32,0x43026048,0x366b7958,2 +np.float32,0xc3026048,0x366b7958,2 +np.float32,0x43826048,0xbf800000,2 +np.float32,0xc3826048,0xbf800000,2 +np.float32,0x4283f268,0xbf800000,2 +np.float32,0xc283f268,0xbf800000,2 +np.float32,0x4303f268,0x3f800000,2 +np.float32,0xc303f268,0x3f800000,2 +np.float32,0x4383f268,0x3f800000,2 +np.float32,0xc383f268,0x3f800000,2 +np.float32,0x42858487,0xbf350504,2 +np.float32,0xc2858487,0xbf350504,2 +np.float32,0x43058487,0x363ea8be,2 +np.float32,0xc3058487,0x363ea8be,2 +np.float32,0x43858487,0xbf800000,2 +np.float32,0xc3858487,0xbf800000,2 +np.float32,0x428716a7,0x35588c6d,2 +np.float32,0xc28716a7,0x35588c6d,2 +np.float32,0x430716a7,0xbf800000,2 +np.float32,0xc30716a7,0xbf800000,2 +np.float32,0x438716a7,0x3f800000,2 +np.float32,0xc38716a7,0x3f800000,2 +np.float32,0x4288a8c7,0x3f350517,2 +np.float32,0xc288a8c7,0x3f350517,2 +np.float32,0x4308a8c7,0x36cb9a96,2 +np.float32,0xc308a8c7,0x36cb9a96,2 +np.float32,0x4388a8c7,0xbf800000,2 +np.float32,0xc388a8c7,0xbf800000,2 +np.float32,0x428a3ae7,0x3f800000,2 +np.float32,0xc28a3ae7,0x3f800000,2 +np.float32,0x430a3ae7,0x3f800000,2 +np.float32,0xc30a3ae7,0x3f800000,2 +np.float32,0x438a3ae7,0x3f800000,2 +np.float32,0xc38a3ae7,0x3f800000,2 +np.float32,0x428bcd06,0x3f3504f5,2 +np.float32,0xc28bcd06,0x3f3504f5,2 +np.float32,0x430bcd06,0x3497675b,2 +np.float32,0xc30bcd06,0x3497675b,2 +np.float32,0x438bcd06,0xbf800000,2 +np.float32,0xc38bcd06,0xbf800000,2 +np.float32,0x428d5f26,0xb60c0105,2 +np.float32,0xc28d5f26,0xb60c0105,2 +np.float32,0x430d5f26,0xbf800000,2 +np.float32,0xc30d5f26,0xbf800000,2 +np.float32,0x438d5f26,0x3f800000,2 +np.float32,0xc38d5f26,0x3f800000,2 +np.float32,0x428ef146,0xbf350526,2 +np.float32,0xc28ef146,0xbf350526,2 +np.float32,0x430ef146,0x3710bc40,2 +np.float32,0xc30ef146,0x3710bc40,2 +np.float32,0x438ef146,0xbf800000,2 +np.float32,0xc38ef146,0xbf800000,2 +np.float32,0x42908365,0xbf800000,2 +np.float32,0xc2908365,0xbf800000,2 +np.float32,0x43108365,0x3f800000,2 +np.float32,0xc3108365,0x3f800000,2 +np.float32,0x43908365,0x3f800000,2 +np.float32,0xc3908365,0x3f800000,2 +np.float32,0x42921585,0xbf3504e6,2 +np.float32,0xc2921585,0xbf3504e6,2 +np.float32,0x43121585,0xb618cee8,2 +np.float32,0xc3121585,0xb618cee8,2 +np.float32,0x43921585,0xbf800000,2 +np.float32,0xc3921585,0xbf800000,2 +np.float32,0x4293a7a5,0x3661deee,2 +np.float32,0xc293a7a5,0x3661deee,2 +np.float32,0x4313a7a5,0xbf800000,2 +np.float32,0xc313a7a5,0xbf800000,2 +np.float32,0x4393a7a5,0x3f800000,2 +np.float32,0xc393a7a5,0x3f800000,2 +np.float32,0x429539c5,0x3f350536,2 +np.float32,0xc29539c5,0x3f350536,2 +np.float32,0x431539c5,0x373bab34,2 +np.float32,0xc31539c5,0x373bab34,2 +np.float32,0x439539c5,0xbf800000,2 +np.float32,0xc39539c5,0xbf800000,2 +np.float32,0x4296cbe4,0x3f800000,2 +np.float32,0xc296cbe4,0x3f800000,2 +np.float32,0x4316cbe4,0x3f800000,2 +np.float32,0xc316cbe4,0x3f800000,2 +np.float32,0x4396cbe4,0x3f800000,2 +np.float32,0xc396cbe4,0x3f800000,2 +np.float32,0x42985e04,0x3f3504d7,2 +np.float32,0xc2985e04,0x3f3504d7,2 +np.float32,0x43185e04,0xb6a2455d,2 +np.float32,0xc3185e04,0xb6a2455d,2 +np.float32,0x43985e04,0xbf800000,2 +np.float32,0xc3985e04,0xbf800000,2 +np.float32,0x4299f024,0xb69bde6c,2 +np.float32,0xc299f024,0xb69bde6c,2 +np.float32,0x4319f024,0xbf800000,2 +np.float32,0xc319f024,0xbf800000,2 +np.float32,0x4399f024,0x3f800000,2 +np.float32,0xc399f024,0x3f800000,2 +np.float32,0x429b8243,0xbf3504ea,2 +np.float32,0xc29b8243,0xbf3504ea,2 +np.float32,0x431b8243,0xb5cb2eb8,2 +np.float32,0xc31b8243,0xb5cb2eb8,2 +np.float32,0x439b8243,0xbf800000,2 +np.float32,0xc39b8243,0xbf800000,2 +np.float32,0x435b2047,0x3f3504c1,2 +np.float32,0x42a038a2,0xb5e4ca7e,2 +np.float32,0x432038a2,0xbf800000,2 +np.float32,0x4345eb9b,0xbf800000,2 +np.float32,0x42c5eb9b,0xb5de638c,2 +np.float32,0x42eb9e94,0xb5d7fc9b,2 +np.float32,0x4350ea79,0x3631dadb,2 +np.float32,0x42dbe957,0xbf800000,2 +np.float32,0x425be957,0xb505522a,2 +np.float32,0x435be957,0x3f800000,2 +np.float32,0x46027eb2,0x3e7d94c9,2 +np.float32,0x4477baed,0xbe7f1824,2 +np.float32,0x454b8024,0x3e7f5268,2 +np.float32,0x455d2c09,0x3e7f40cb,2 +np.float32,0x4768d3de,0xba14b4af,2 +np.float32,0x46c1e7cd,0x3e7fb102,2 +np.float32,0x44a52949,0xbe7dc9d5,2 +np.float32,0x4454633a,0x3e7dbc7d,2 +np.float32,0x4689810b,0x3e7eb02b,2 +np.float32,0x473473cd,0xbe7eef6f,2 +np.float32,0x44a5193f,0x3e7e1b1f,2 +np.float32,0x46004b36,0x3e7dac59,2 +np.float32,0x467f604b,0x3d7ffd3a,2 +np.float32,0x45ea1805,0x3dffd2e0,2 +np.float32,0x457b6af3,0x3dff7831,2 +np.float32,0x44996159,0xbe7d85f4,2 +np.float32,0x47883553,0xbb80584e,2 +np.float32,0x44e19f0c,0xbdffcfe6,2 +np.float32,0x472b3bf6,0xbe7f7a82,2 +np.float32,0x4600bb4e,0x3a135e33,2 +np.float32,0x449f4556,0x3e7e42e5,2 +np.float32,0x474e9420,0x3dff77b2,2 +np.float32,0x45cbdb23,0x3dff7240,2 +np.float32,0x44222747,0x3dffb039,2 +np.float32,0x4772e419,0xbdff74b8,2 diff --git a/EXE version/main/numpy/core/tests/data/umath-validation-set-exp.csv b/EXE version/main/numpy/core/tests/data/umath-validation-set-exp.csv new file mode 100644 index 00000000..7c5ef3b3 --- /dev/null +++ b/EXE version/main/numpy/core/tests/data/umath-validation-set-exp.csv @@ -0,0 +1,412 @@ +dtype,input,output,ulperrortol +## +ve denormals ## +np.float32,0x004b4716,0x3f800000,3 +np.float32,0x007b2490,0x3f800000,3 +np.float32,0x007c99fa,0x3f800000,3 +np.float32,0x00734a0c,0x3f800000,3 +np.float32,0x0070de24,0x3f800000,3 +np.float32,0x00495d65,0x3f800000,3 +np.float32,0x006894f6,0x3f800000,3 +np.float32,0x00555a76,0x3f800000,3 +np.float32,0x004e1fb8,0x3f800000,3 +np.float32,0x00687de9,0x3f800000,3 +## -ve denormals ## +np.float32,0x805b59af,0x3f800000,3 +np.float32,0x807ed8ed,0x3f800000,3 +np.float32,0x807142ad,0x3f800000,3 +np.float32,0x80772002,0x3f800000,3 +np.float32,0x8062abcb,0x3f800000,3 +np.float32,0x8045e31c,0x3f800000,3 +np.float32,0x805f01c2,0x3f800000,3 +np.float32,0x80506432,0x3f800000,3 +np.float32,0x8060089d,0x3f800000,3 +np.float32,0x8071292f,0x3f800000,3 +## floats that output a denormal ## +np.float32,0xc2cf3fc1,0x00000001,3 +np.float32,0xc2c79726,0x00000021,3 +np.float32,0xc2cb295d,0x00000005,3 +np.float32,0xc2b49e6b,0x00068c4c,3 +np.float32,0xc2ca8116,0x00000008,3 +np.float32,0xc2c23f82,0x000001d7,3 +np.float32,0xc2cb69c0,0x00000005,3 +np.float32,0xc2cc1f4d,0x00000003,3 +np.float32,0xc2ae094e,0x00affc4c,3 +np.float32,0xc2c86c44,0x00000015,3 +## random floats between -87.0f and 88.0f ## +np.float32,0x4030d7e0,0x417d9a05,3 +np.float32,0x426f60e8,0x6aa1be2c,3 +np.float32,0x41a1b220,0x4e0efc11,3 +np.float32,0xc20cc722,0x26159da7,3 +np.float32,0x41c492bc,0x512ec79d,3 +np.float32,0x40980210,0x42e73a0e,3 +np.float32,0xbf1f7b80,0x3f094de3,3 +np.float32,0x42a678a4,0x7b87a383,3 +np.float32,0xc20f3cfd,0x25a1c304,3 +np.float32,0x423ff34c,0x6216467f,3 +np.float32,0x00000000,0x3f800000,3 +## floats that cause an overflow ## +np.float32,0x7f06d8c1,0x7f800000,3 +np.float32,0x7f451912,0x7f800000,3 +np.float32,0x7ecceac3,0x7f800000,3 +np.float32,0x7f643b45,0x7f800000,3 +np.float32,0x7e910ea0,0x7f800000,3 +np.float32,0x7eb4756b,0x7f800000,3 +np.float32,0x7f4ec708,0x7f800000,3 +np.float32,0x7f6b4551,0x7f800000,3 +np.float32,0x7d8edbda,0x7f800000,3 +np.float32,0x7f730718,0x7f800000,3 +np.float32,0x42b17217,0x7f7fff84,3 +np.float32,0x42b17218,0x7f800000,3 +np.float32,0x42b17219,0x7f800000,3 +np.float32,0xfef2b0bc,0x00000000,3 +np.float32,0xff69f83e,0x00000000,3 +np.float32,0xff4ecb12,0x00000000,3 +np.float32,0xfeac6d86,0x00000000,3 +np.float32,0xfde0cdb8,0x00000000,3 +np.float32,0xff26aef4,0x00000000,3 +np.float32,0xff6f9277,0x00000000,3 +np.float32,0xff7adfc4,0x00000000,3 +np.float32,0xff0ad40e,0x00000000,3 +np.float32,0xff6fd8f3,0x00000000,3 +np.float32,0xc2cff1b4,0x00000001,3 +np.float32,0xc2cff1b5,0x00000000,3 +np.float32,0xc2cff1b6,0x00000000,3 +np.float32,0x7f800000,0x7f800000,3 +np.float32,0xff800000,0x00000000,3 +np.float32,0x4292f27c,0x7480000a,3 +np.float32,0x42a920be,0x7c7fff94,3 +np.float32,0x41c214c9,0x50ffffd9,3 +np.float32,0x41abe686,0x4effffd9,3 +np.float32,0x4287db5a,0x707fffd3,3 +np.float32,0x41902cbb,0x4c800078,3 +np.float32,0x42609466,0x67ffffeb,3 +np.float32,0x41a65af5,0x4e7fffd1,3 +np.float32,0x417f13ff,0x4affffc9,3 +np.float32,0x426d0e6c,0x6a3504f2,3 +np.float32,0x41bc8934,0x507fff51,3 +np.float32,0x42a7bdde,0x7c0000d6,3 +np.float32,0x4120cf66,0x46b504f6,3 +np.float32,0x4244da8f,0x62ffff1a,3 +np.float32,0x41a0cf69,0x4e000034,3 +np.float32,0x41cd2bec,0x52000005,3 +np.float32,0x42893e41,0x7100009e,3 +np.float32,0x41b437e1,0x4fb50502,3 +np.float32,0x41d8430f,0x5300001d,3 +np.float32,0x4244da92,0x62ffffda,3 +np.float32,0x41a0cf63,0x4dffffa9,3 +np.float32,0x3eb17218,0x3fb504f3,3 +np.float32,0x428729e8,0x703504dc,3 +np.float32,0x41a0cf67,0x4e000014,3 +np.float32,0x4252b77d,0x65800011,3 +np.float32,0x41902cb9,0x4c800058,3 +np.float32,0x42a0cf67,0x79800052,3 +np.float32,0x4152b77b,0x48ffffe9,3 +np.float32,0x41265af3,0x46ffffc8,3 +np.float32,0x42187e0b,0x5affff9a,3 +np.float32,0xc0d2b77c,0x3ab504f6,3 +np.float32,0xc283b2ac,0x10000072,3 +np.float32,0xc1cff1b4,0x2cb504f5,3 +np.float32,0xc05dce9e,0x3d000000,3 +np.float32,0xc28ec9d2,0x0bfffea5,3 +np.float32,0xc23c893a,0x1d7fffde,3 +np.float32,0xc2a920c0,0x027fff6c,3 +np.float32,0xc1f9886f,0x2900002b,3 +np.float32,0xc2c42920,0x000000b5,3 +np.float32,0xc2893e41,0x0dfffec5,3 +np.float32,0xc2c4da93,0x00000080,3 +np.float32,0xc17f1401,0x3400000c,3 +np.float32,0xc1902cb6,0x327fffaf,3 +np.float32,0xc27c4e3b,0x11ffffc5,3 +np.float32,0xc268e5c5,0x157ffe9d,3 +np.float32,0xc2b4e953,0x0005a826,3 +np.float32,0xc287db5a,0x0e800016,3 +np.float32,0xc207db5a,0x2700000b,3 +np.float32,0xc2b2d4fe,0x000ffff1,3 +np.float32,0xc268e5c0,0x157fffdd,3 +np.float32,0xc22920bd,0x2100003b,3 +np.float32,0xc2902caf,0x0b80011e,3 +np.float32,0xc1902cba,0x327fff2f,3 +np.float32,0xc2ca6625,0x00000008,3 +np.float32,0xc280ece8,0x10fffeb5,3 +np.float32,0xc2918f94,0x0b0000ea,3 +np.float32,0xc29b43d5,0x077ffffc,3 +np.float32,0xc1e61ff7,0x2ab504f5,3 +np.float32,0xc2867878,0x0effff15,3 +np.float32,0xc2a2324a,0x04fffff4,3 +#float64 +## near zero ## +np.float64,0x8000000000000000,0x3ff0000000000000,1 +np.float64,0x8010000000000000,0x3ff0000000000000,1 +np.float64,0x8000000000000001,0x3ff0000000000000,1 +np.float64,0x8360000000000000,0x3ff0000000000000,1 +np.float64,0x9a70000000000000,0x3ff0000000000000,1 +np.float64,0xb9b0000000000000,0x3ff0000000000000,1 +np.float64,0xb810000000000000,0x3ff0000000000000,1 +np.float64,0xbc30000000000000,0x3ff0000000000000,1 +np.float64,0xb6a0000000000000,0x3ff0000000000000,1 +np.float64,0x0000000000000000,0x3ff0000000000000,1 +np.float64,0x0010000000000000,0x3ff0000000000000,1 +np.float64,0x0000000000000001,0x3ff0000000000000,1 +np.float64,0x0360000000000000,0x3ff0000000000000,1 +np.float64,0x1a70000000000000,0x3ff0000000000000,1 +np.float64,0x3c30000000000000,0x3ff0000000000000,1 +np.float64,0x36a0000000000000,0x3ff0000000000000,1 +np.float64,0x39b0000000000000,0x3ff0000000000000,1 +np.float64,0x3810000000000000,0x3ff0000000000000,1 +## underflow ## +np.float64,0xc0c6276800000000,0x0000000000000000,1 +np.float64,0xc0c62d918ce2421d,0x0000000000000000,1 +np.float64,0xc0c62d918ce2421e,0x0000000000000000,1 +np.float64,0xc0c62d91a0000000,0x0000000000000000,1 +np.float64,0xc0c62d9180000000,0x0000000000000000,1 +np.float64,0xc0c62dea45ee3e06,0x0000000000000000,1 +np.float64,0xc0c62dea45ee3e07,0x0000000000000000,1 +np.float64,0xc0c62dea40000000,0x0000000000000000,1 +np.float64,0xc0c62dea60000000,0x0000000000000000,1 +np.float64,0xc0875f1120000000,0x0000000000000000,1 +np.float64,0xc0875f113c30b1c8,0x0000000000000000,1 +np.float64,0xc0875f1140000000,0x0000000000000000,1 +np.float64,0xc093480000000000,0x0000000000000000,1 +np.float64,0xffefffffffffffff,0x0000000000000000,1 +np.float64,0xc7efffffe0000000,0x0000000000000000,1 +## overflow ## +np.float64,0x40862e52fefa39ef,0x7ff0000000000000,1 +np.float64,0x40872e42fefa39ef,0x7ff0000000000000,1 +## +/- INF, +/- NAN ## +np.float64,0x7ff0000000000000,0x7ff0000000000000,1 +np.float64,0xfff0000000000000,0x0000000000000000,1 +np.float64,0x7ff8000000000000,0x7ff8000000000000,1 +np.float64,0xfff8000000000000,0xfff8000000000000,1 +## output denormal ## +np.float64,0xc087438520000000,0x0000000000000001,1 +np.float64,0xc08743853f2f4461,0x0000000000000001,1 +np.float64,0xc08743853f2f4460,0x0000000000000001,1 +np.float64,0xc087438540000000,0x0000000000000001,1 +## between -745.13321910 and 709.78271289 ## +np.float64,0xbff760cd14774bd9,0x3fcdb14ced00ceb6,1 +np.float64,0xbff760cd20000000,0x3fcdb14cd7993879,1 +np.float64,0xbff760cd00000000,0x3fcdb14d12fbd264,1 +np.float64,0xc07f1cf360000000,0x130c1b369af14fda,1 +np.float64,0xbeb0000000000000,0x3feffffe00001000,1 +np.float64,0xbd70000000000000,0x3fefffffffffe000,1 +np.float64,0xc084fd46e5c84952,0x0360000000000139,1 +np.float64,0xc084fd46e5c84953,0x035ffffffffffe71,1 +np.float64,0xc084fd46e0000000,0x0360000b9096d32c,1 +np.float64,0xc084fd4700000000,0x035fff9721d12104,1 +np.float64,0xc086232bc0000000,0x0010003af5e64635,1 +np.float64,0xc086232bdd7abcd2,0x001000000000007c,1 +np.float64,0xc086232bdd7abcd3,0x000ffffffffffe7c,1 +np.float64,0xc086232be0000000,0x000ffffaf57a6fc9,1 +np.float64,0xc086233920000000,0x000fe590e3b45eb0,1 +np.float64,0xc086233938000000,0x000fe56133493c57,1 +np.float64,0xc086233940000000,0x000fe5514deffbbc,1 +np.float64,0xc086234c98000000,0x000fbf1024c32ccb,1 +np.float64,0xc086234ca0000000,0x000fbf0065bae78d,1 +np.float64,0xc086234c80000000,0x000fbf3f623a7724,1 +np.float64,0xc086234ec0000000,0x000fbad237c846f9,1 +np.float64,0xc086234ec8000000,0x000fbac27cfdec97,1 +np.float64,0xc086234ee0000000,0x000fba934cfd3dc2,1 +np.float64,0xc086234ef0000000,0x000fba73d7f618d9,1 +np.float64,0xc086234f00000000,0x000fba54632dddc0,1 +np.float64,0xc0862356e0000000,0x000faae0945b761a,1 +np.float64,0xc0862356f0000000,0x000faac13eb9a310,1 +np.float64,0xc086235700000000,0x000faaa1e9567b0a,1 +np.float64,0xc086236020000000,0x000f98cd75c11ed7,1 +np.float64,0xc086236ca0000000,0x000f8081b4d93f89,1 +np.float64,0xc086236cb0000000,0x000f8062b3f4d6c5,1 +np.float64,0xc086236cc0000000,0x000f8043b34e6f8c,1 +np.float64,0xc086238d98000000,0x000f41220d9b0d2c,1 +np.float64,0xc086238da0000000,0x000f4112cc80a01f,1 +np.float64,0xc086238d80000000,0x000f414fd145db5b,1 +np.float64,0xc08624fd00000000,0x000cbfce8ea1e6c4,1 +np.float64,0xc086256080000000,0x000c250747fcd46e,1 +np.float64,0xc08626c480000000,0x000a34f4bd975193,1 +np.float64,0xbf50000000000000,0x3feff800ffeaac00,1 +np.float64,0xbe10000000000000,0x3fefffffff800000,1 +np.float64,0xbcd0000000000000,0x3feffffffffffff8,1 +np.float64,0xc055d589e0000000,0x38100004bf94f63e,1 +np.float64,0xc055d58a00000000,0x380ffff97f292ce8,1 +np.float64,0xbfd962d900000000,0x3fe585a4b00110e1,1 +np.float64,0x3ff4bed280000000,0x400d411e7a58a303,1 +np.float64,0x3fff0b3620000000,0x401bd7737ffffcf3,1 +np.float64,0x3ff0000000000000,0x4005bf0a8b145769,1 +np.float64,0x3eb0000000000000,0x3ff0000100000800,1 +np.float64,0x3d70000000000000,0x3ff0000000001000,1 +np.float64,0x40862e42e0000000,0x7fefff841808287f,1 +np.float64,0x40862e42fefa39ef,0x7fefffffffffff2a,1 +np.float64,0x40862e0000000000,0x7feef85a11e73f2d,1 +np.float64,0x4000000000000000,0x401d8e64b8d4ddae,1 +np.float64,0x4009242920000000,0x40372a52c383a488,1 +np.float64,0x4049000000000000,0x44719103e4080b45,1 +np.float64,0x4008000000000000,0x403415e5bf6fb106,1 +np.float64,0x3f50000000000000,0x3ff00400800aab55,1 +np.float64,0x3e10000000000000,0x3ff0000000400000,1 +np.float64,0x3cd0000000000000,0x3ff0000000000004,1 +np.float64,0x40562e40a0000000,0x47effed088821c3f,1 +np.float64,0x40562e42e0000000,0x47effff082e6c7ff,1 +np.float64,0x40562e4300000000,0x47f00000417184b8,1 +np.float64,0x3fe8000000000000,0x4000ef9db467dcf8,1 +np.float64,0x402b12e8d4f33589,0x412718f68c71a6fe,1 +np.float64,0x402b12e8d4f3358a,0x412718f68c71a70a,1 +np.float64,0x402b12e8c0000000,0x412718f59a7f472e,1 +np.float64,0x402b12e8e0000000,0x412718f70c0eac62,1 +##use 1th entry +np.float64,0x40631659AE147CB4,0x4db3a95025a4890f,1 +np.float64,0xC061B87D2E85A4E2,0x332640c8e2de2c51,1 +np.float64,0x405A4A50BE243AF4,0x496a45e4b7f0339a,1 +np.float64,0xC0839898B98EC5C6,0x0764027828830df4,1 +#use 2th entry +np.float64,0xC072428C44B6537C,0x2596ade838b96f3e,1 +np.float64,0xC053057C5E1AE9BF,0x3912c8fad18fdadf,1 +np.float64,0x407E89C78328BAA3,0x6bfe35d5b9a1a194,1 +np.float64,0x4083501B6DD87112,0x77a855503a38924e,1 +#use 3th entry +np.float64,0x40832C6195F24540,0x7741e73c80e5eb2f,1 +np.float64,0xC083D4CD557C2EC9,0x06b61727c2d2508e,1 +np.float64,0x400C48F5F67C99BD,0x404128820f02b92e,1 +np.float64,0x4056E36D9B2DF26A,0x4830f52ff34a8242,1 +#use 4th entry +np.float64,0x4080FF700D8CBD06,0x70fa70df9bc30f20,1 +np.float64,0x406C276D39E53328,0x543eb8e20a8f4741,1 +np.float64,0xC070D6159BBD8716,0x27a4a0548c904a75,1 +np.float64,0xC052EBCF8ED61F83,0x391c0e92368d15e4,1 +#use 5th entry +np.float64,0xC061F892A8AC5FBE,0x32f807a89efd3869,1 +np.float64,0x4021D885D2DBA085,0x40bd4dc86d3e3270,1 +np.float64,0x40767AEEEE7D4FCF,0x605e22851ee2afb7,1 +np.float64,0xC0757C5D75D08C80,0x20f0751599b992a2,1 +#use 6th entry +np.float64,0x405ACF7A284C4CE3,0x499a4e0b7a27027c,1 +np.float64,0xC085A6C9E80D7AF5,0x0175914009d62ec2,1 +np.float64,0xC07E4C02F86F1DAE,0x1439269b29a9231e,1 +np.float64,0x4080D80F9691CC87,0x7088a6cdafb041de,1 +#use 7th entry +np.float64,0x407FDFD84FBA0AC1,0x6deb1ae6f9bc4767,1 +np.float64,0x40630C06A1A2213D,0x4dac7a9d51a838b7,1 +np.float64,0x40685FDB30BB8B4F,0x5183f5cc2cac9e79,1 +np.float64,0x408045A2208F77F4,0x6ee299e08e2aa2f0,1 +#use 8th entry +np.float64,0xC08104E391F5078B,0x0ed397b7cbfbd230,1 +np.float64,0xC031501CAEFAE395,0x3e6040fd1ea35085,1 +np.float64,0xC079229124F6247C,0x1babf4f923306b1e,1 +np.float64,0x407FB65F44600435,0x6db03beaf2512b8a,1 +#use 9th entry +np.float64,0xC07EDEE8E8E8A5AC,0x136536cec9cbef48,1 +np.float64,0x4072BB4086099A14,0x5af4d3c3008b56cc,1 +np.float64,0x4050442A2EC42CB4,0x45cd393bd8fad357,1 +np.float64,0xC06AC28FB3D419B4,0x2ca1b9d3437df85f,1 +#use 10th entry +np.float64,0x40567FC6F0A68076,0x480c977fd5f3122e,1 +np.float64,0x40620A2F7EDA59BB,0x4cf278e96f4ce4d7,1 +np.float64,0xC085044707CD557C,0x034aad6c968a045a,1 +np.float64,0xC07374EA5AC516AA,0x23dd6afdc03e83d5,1 +#use 11th entry +np.float64,0x4073CC95332619C1,0x5c804b1498bbaa54,1 +np.float64,0xC0799FEBBE257F31,0x1af6a954c43b87d2,1 +np.float64,0x408159F19EA424F6,0x7200858efcbfc84d,1 +np.float64,0x404A81F6F24C0792,0x44b664a07ce5bbfa,1 +#use 12th entry +np.float64,0x40295FF1EFB9A741,0x4113c0e74c52d7b0,1 +np.float64,0x4073975F4CC411DA,0x5c32be40b4fec2c1,1 +np.float64,0x406E9DE52E82A77E,0x56049c9a3f1ae089,1 +np.float64,0x40748C2F52560ED9,0x5d93bc14fd4cd23b,1 +#use 13th entry +np.float64,0x4062A553CDC4D04C,0x4d6266bfde301318,1 +np.float64,0xC079EC1D63598AB7,0x1a88cb184dab224c,1 +np.float64,0xC0725C1CB3167427,0x25725b46f8a081f6,1 +np.float64,0x407888771D9B45F9,0x6353b1ec6bd7ce80,1 +#use 14th entry +np.float64,0xC082CBA03AA89807,0x09b383723831ce56,1 +np.float64,0xC083A8961BB67DD7,0x0735b118d5275552,1 +np.float64,0xC076BC6ECA12E7E3,0x1f2222679eaef615,1 +np.float64,0xC072752503AA1A5B,0x254eb832242c77e1,1 +#use 15th entry +np.float64,0xC058800792125DEC,0x371882372a0b48d4,1 +np.float64,0x4082909FD863E81C,0x7580d5f386920142,1 +np.float64,0xC071616F8FB534F9,0x26dbe20ef64a412b,1 +np.float64,0x406D1AB571CAA747,0x54ee0d55cb38ac20,1 +#use 16th entry +np.float64,0x406956428B7DAD09,0x52358682c271237f,1 +np.float64,0xC07EFC2D9D17B621,0x133b3e77c27a4d45,1 +np.float64,0xC08469BAC5BA3CCA,0x050863e5f42cc52f,1 +np.float64,0x407189D9626386A5,0x593cb1c0b3b5c1d3,1 +#use 17th entry +np.float64,0x4077E652E3DEB8C6,0x6269a10dcbd3c752,1 +np.float64,0x407674C97DB06878,0x605485dcc2426ec2,1 +np.float64,0xC07CE9969CF4268D,0x16386cf8996669f2,1 +np.float64,0x40780EE32D5847C4,0x62a436bd1abe108d,1 +#use 18th entry +np.float64,0x4076C3AA5E1E8DA1,0x60c62f56a5e72e24,1 +np.float64,0xC0730AFC7239B9BE,0x24758ead095cec1e,1 +np.float64,0xC085CC2B9C420DDB,0x0109cdaa2e5694c1,1 +np.float64,0x406D0765CB6D7AA4,0x54e06f8dd91bd945,1 +#use 19th entry +np.float64,0xC082D011F3B495E7,0x09a6647661d279c2,1 +np.float64,0xC072826AF8F6AFBC,0x253acd3cd224507e,1 +np.float64,0x404EB9C4810CEA09,0x457933dbf07e8133,1 +np.float64,0x408284FBC97C58CE,0x755f6eb234aa4b98,1 +#use 20th entry +np.float64,0x40856008CF6EDC63,0x7d9c0b3c03f4f73c,1 +np.float64,0xC077CB2E9F013B17,0x1d9b3d3a166a55db,1 +np.float64,0xC0479CA3C20AD057,0x3bad40e081555b99,1 +np.float64,0x40844CD31107332A,0x7a821d70aea478e2,1 +#use 21th entry +np.float64,0xC07C8FCC0BFCC844,0x16ba1cc8c539d19b,1 +np.float64,0xC085C4E9A3ABA488,0x011ff675ba1a2217,1 +np.float64,0x4074D538B32966E5,0x5dfd9d78043c6ad9,1 +np.float64,0xC0630CA16902AD46,0x3231a446074cede6,1 +#use 22th entry +np.float64,0xC06C826733D7D0B7,0x2b5f1078314d41e1,1 +np.float64,0xC0520DF55B2B907F,0x396c13a6ce8e833e,1 +np.float64,0xC080712072B0F437,0x107eae02d11d98ea,1 +np.float64,0x40528A6150E19EFB,0x469fdabda02228c5,1 +#use 23th entry +np.float64,0xC07B1D74B6586451,0x18d1253883ae3b48,1 +np.float64,0x4045AFD7867DAEC0,0x43d7d634fc4c5d98,1 +np.float64,0xC07A08B91F9ED3E2,0x1a60973e6397fc37,1 +np.float64,0x407B3ECF0AE21C8C,0x673e03e9d98d7235,1 +#use 24th entry +np.float64,0xC078AEB6F30CEABF,0x1c530b93ab54a1b3,1 +np.float64,0x4084495006A41672,0x7a775b6dc7e63064,1 +np.float64,0x40830B1C0EBF95DD,0x76e1e6eed77cfb89,1 +np.float64,0x407D93E8F33D8470,0x6a9adbc9e1e4f1e5,1 +#use 25th entry +np.float64,0x4066B11A09EFD9E8,0x504dd528065c28a7,1 +np.float64,0x408545823723AEEB,0x7d504a9b1844f594,1 +np.float64,0xC068C711F2CA3362,0x2e104f3496ea118e,1 +np.float64,0x407F317FCC3CA873,0x6cf0732c9948ebf4,1 +#use 26th entry +np.float64,0x407AFB3EBA2ED50F,0x66dc28a129c868d5,1 +np.float64,0xC075377037708ADE,0x21531a329f3d793e,1 +np.float64,0xC07C30066A1F3246,0x174448baa16ded2b,1 +np.float64,0xC06689A75DE2ABD3,0x2fad70662fae230b,1 +#use 27th entry +np.float64,0x4081514E9FCCF1E0,0x71e673b9efd15f44,1 +np.float64,0xC0762C710AF68460,0x1ff1ed7d8947fe43,1 +np.float64,0xC0468102FF70D9C4,0x3be0c3a8ff3419a3,1 +np.float64,0xC07EA4CEEF02A83E,0x13b908f085102c61,1 +#use 28th entry +np.float64,0xC06290B04AE823C4,0x328a83da3c2e3351,1 +np.float64,0xC0770EB1D1C395FB,0x1eab281c1f1db5fe,1 +np.float64,0xC06F5D4D838A5BAE,0x29500ea32fb474ea,1 +np.float64,0x40723B3133B54C5D,0x5a3c82c7c3a2b848,1 +#use 29th entry +np.float64,0x4085E6454CE3B4AA,0x7f20319b9638d06a,1 +np.float64,0x408389F2A0585D4B,0x7850667c58aab3d0,1 +np.float64,0xC0382798F9C8AE69,0x3dc1c79fe8739d6d,1 +np.float64,0xC08299D827608418,0x0a4335f76cdbaeb5,1 +#use 30th entry +np.float64,0xC06F3DED43301BF1,0x2965670ae46750a8,1 +np.float64,0xC070CAF6BDD577D9,0x27b4aa4ffdd29981,1 +np.float64,0x4078529AD4B2D9F2,0x6305c12755d5e0a6,1 +np.float64,0xC055B14E75A31B96,0x381c2eda6d111e5d,1 +#use 31th entry +np.float64,0x407B13EE414FA931,0x6700772c7544564d,1 +np.float64,0x407EAFDE9DE3EC54,0x6c346a0e49724a3c,1 +np.float64,0xC08362F398B9530D,0x07ffeddbadf980cb,1 +np.float64,0x407E865CDD9EEB86,0x6bf866cac5e0d126,1 +#use 32th entry +np.float64,0x407FB62DBC794C86,0x6db009f708ac62cb,1 +np.float64,0xC063D0BAA68CDDDE,0x31a3b2a51ce50430,1 +np.float64,0xC05E7706A2231394,0x34f24bead6fab5c9,1 +np.float64,0x4083E3A06FDE444E,0x79527b7a386d1937,1 diff --git a/EXE version/main/numpy/core/tests/data/umath-validation-set-log.csv b/EXE version/main/numpy/core/tests/data/umath-validation-set-log.csv new file mode 100644 index 00000000..b8f6b087 --- /dev/null +++ b/EXE version/main/numpy/core/tests/data/umath-validation-set-log.csv @@ -0,0 +1,271 @@ +dtype,input,output,ulperrortol +## +ve denormals ## +np.float32,0x004b4716,0xc2afbc1b,4 +np.float32,0x007b2490,0xc2aec01e,4 +np.float32,0x007c99fa,0xc2aeba17,4 +np.float32,0x00734a0c,0xc2aee1dc,4 +np.float32,0x0070de24,0xc2aeecba,4 +np.float32,0x007fffff,0xc2aeac50,4 +np.float32,0x00000001,0xc2ce8ed0,4 +## -ve denormals ## +np.float32,0x80495d65,0xffc00000,4 +np.float32,0x806894f6,0xffc00000,4 +np.float32,0x80555a76,0xffc00000,4 +np.float32,0x804e1fb8,0xffc00000,4 +np.float32,0x80687de9,0xffc00000,4 +np.float32,0x807fffff,0xffc00000,4 +np.float32,0x80000001,0xffc00000,4 +## +/-0.0f, +/-FLT_MIN +/-FLT_MAX ## +np.float32,0x00000000,0xff800000,4 +np.float32,0x80000000,0xff800000,4 +np.float32,0x7f7fffff,0x42b17218,4 +np.float32,0x80800000,0xffc00000,4 +np.float32,0xff7fffff,0xffc00000,4 +## 1.00f + 0x00000001 ## +np.float32,0x3f800000,0x00000000,4 +np.float32,0x3f800001,0x33ffffff,4 +np.float32,0x3f800002,0x347ffffe,4 +np.float32,0x3f7fffff,0xb3800000,4 +np.float32,0x3f7ffffe,0xb4000000,4 +np.float32,0x3f7ffffd,0xb4400001,4 +np.float32,0x402df853,0x3f7ffffe,4 +np.float32,0x402df854,0x3f7fffff,4 +np.float32,0x402df855,0x3f800000,4 +np.float32,0x402df856,0x3f800001,4 +np.float32,0x3ebc5ab0,0xbf800001,4 +np.float32,0x3ebc5ab1,0xbf800000,4 +np.float32,0x3ebc5ab2,0xbf800000,4 +np.float32,0x3ebc5ab3,0xbf7ffffe,4 +np.float32,0x423ef575,0x407768ab,4 +np.float32,0x427b8c61,0x408485dd,4 +np.float32,0x4211e9ee,0x406630b0,4 +np.float32,0x424d5c41,0x407c0fed,4 +np.float32,0x42be722a,0x4091cc91,4 +np.float32,0x42b73d30,0x4090908b,4 +np.float32,0x427e48e2,0x4084de7f,4 +np.float32,0x428f759b,0x4088bba3,4 +np.float32,0x41629069,0x4029a0cc,4 +np.float32,0x4272c99d,0x40836379,4 +np.float32,0x4d1b7458,0x4197463d,4 +np.float32,0x4f10c594,0x41ace2b2,4 +np.float32,0x4ea397c2,0x41a85171,4 +np.float32,0x4fefa9d1,0x41b6769c,4 +np.float32,0x4ebac6ab,0x41a960dc,4 +np.float32,0x4f6efb42,0x41b0e535,4 +np.float32,0x4e9ab8e7,0x41a7df44,4 +np.float32,0x4e81b5d1,0x41a67625,4 +np.float32,0x5014d9f2,0x41b832bd,4 +np.float32,0x4f02175c,0x41ac07b8,4 +np.float32,0x7f034f89,0x42b01c47,4 +np.float32,0x7f56d00e,0x42b11849,4 +np.float32,0x7f1cd5f6,0x42b0773a,4 +np.float32,0x7e979174,0x42af02d7,4 +np.float32,0x7f23369f,0x42b08ba2,4 +np.float32,0x7f0637ae,0x42b0277d,4 +np.float32,0x7efcb6e8,0x42b00897,4 +np.float32,0x7f7907c8,0x42b163f6,4 +np.float32,0x7e95c4c2,0x42aefcba,4 +np.float32,0x7f4577b2,0x42b0ed2d,4 +np.float32,0x3f49c92e,0xbe73ae84,4 +np.float32,0x3f4a23d1,0xbe71e2f8,4 +np.float32,0x3f4abb67,0xbe6ee430,4 +np.float32,0x3f48169a,0xbe7c5532,4 +np.float32,0x3f47f5fa,0xbe7cfc37,4 +np.float32,0x3f488309,0xbe7a2ad8,4 +np.float32,0x3f479df4,0xbe7ebf5f,4 +np.float32,0x3f47cfff,0xbe7dbec9,4 +np.float32,0x3f496704,0xbe75a125,4 +np.float32,0x3f478ee8,0xbe7f0c92,4 +np.float32,0x3f4a763b,0xbe7041ce,4 +np.float32,0x3f47a108,0xbe7eaf94,4 +np.float32,0x3f48136c,0xbe7c6578,4 +np.float32,0x3f481c17,0xbe7c391c,4 +np.float32,0x3f47cd28,0xbe7dcd56,4 +np.float32,0x3f478be8,0xbe7f1bf7,4 +np.float32,0x3f4c1f8e,0xbe67e367,4 +np.float32,0x3f489b0c,0xbe79b03f,4 +np.float32,0x3f4934cf,0xbe76a08a,4 +np.float32,0x3f4954df,0xbe75fd6a,4 +np.float32,0x3f47a3f5,0xbe7ea093,4 +np.float32,0x3f4ba4fc,0xbe6a4b02,4 +np.float32,0x3f47a0e1,0xbe7eb05c,4 +np.float32,0x3f48c30a,0xbe78e42f,4 +np.float32,0x3f48cab8,0xbe78bd05,4 +np.float32,0x3f4b0569,0xbe6d6ea4,4 +np.float32,0x3f47de32,0xbe7d7607,4 +np.float32,0x3f477328,0xbe7f9b00,4 +np.float32,0x3f496dab,0xbe757f52,4 +np.float32,0x3f47662c,0xbe7fddac,4 +np.float32,0x3f48ddd8,0xbe785b80,4 +np.float32,0x3f481866,0xbe7c4bff,4 +np.float32,0x3f48b119,0xbe793fb6,4 +np.float32,0x3f48c7e8,0xbe78cb5c,4 +np.float32,0x3f4985f6,0xbe7503da,4 +np.float32,0x3f483fdf,0xbe7b8212,4 +np.float32,0x3f4b1c76,0xbe6cfa67,4 +np.float32,0x3f480b2e,0xbe7c8fa8,4 +np.float32,0x3f48745f,0xbe7a75bf,4 +np.float32,0x3f485bda,0xbe7af308,4 +np.float32,0x3f47a660,0xbe7e942c,4 +np.float32,0x3f47d4d5,0xbe7da600,4 +np.float32,0x3f4b0a26,0xbe6d56be,4 +np.float32,0x3f4a4883,0xbe712924,4 +np.float32,0x3f4769e7,0xbe7fca84,4 +np.float32,0x3f499702,0xbe74ad3f,4 +np.float32,0x3f494ab1,0xbe763131,4 +np.float32,0x3f476b69,0xbe7fc2c6,4 +np.float32,0x3f4884e8,0xbe7a214a,4 +np.float32,0x3f486945,0xbe7aae76,4 +#float64 +## +ve denormal ## +np.float64,0x0000000000000001,0xc0874385446d71c3,1 +np.float64,0x0001000000000000,0xc086395a2079b70c,1 +np.float64,0x000fffffffffffff,0xc086232bdd7abcd2,1 +np.float64,0x0007ad63e2168cb6,0xc086290bc0b2980f,1 +## -ve denormal ## +np.float64,0x8000000000000001,0xfff8000000000001,1 +np.float64,0x8001000000000000,0xfff8000000000001,1 +np.float64,0x800fffffffffffff,0xfff8000000000001,1 +np.float64,0x8007ad63e2168cb6,0xfff8000000000001,1 +## +/-0.0f, MAX, MIN## +np.float64,0x0000000000000000,0xfff0000000000000,1 +np.float64,0x8000000000000000,0xfff0000000000000,1 +np.float64,0x7fefffffffffffff,0x40862e42fefa39ef,1 +np.float64,0xffefffffffffffff,0xfff8000000000001,1 +## near 1.0f ## +np.float64,0x3ff0000000000000,0x0000000000000000,1 +np.float64,0x3fe8000000000000,0xbfd269621134db92,1 +np.float64,0x3ff0000000000001,0x3cafffffffffffff,1 +np.float64,0x3ff0000020000000,0x3e7fffffe000002b,1 +np.float64,0x3ff0000000000001,0x3cafffffffffffff,1 +np.float64,0x3fefffffe0000000,0xbe70000008000005,1 +np.float64,0x3fefffffffffffff,0xbca0000000000000,1 +## random numbers ## +np.float64,0x02500186f3d9da56,0xc0855b8abf135773,1 +np.float64,0x09200815a3951173,0xc082ff1ad7131bdc,1 +np.float64,0x0da029623b0243d4,0xc0816fc994695bb5,1 +np.float64,0x48703b8ac483a382,0x40579213a313490b,1 +np.float64,0x09207b74c87c9860,0xc082fee20ff349ef,1 +np.float64,0x62c077698e8df947,0x407821c996d110f0,1 +np.float64,0x2350b45e87c3cfb0,0xc073d6b16b51d072,1 +np.float64,0x3990a23f9ff2b623,0xc051aa60eadd8c61,1 +np.float64,0x0d011386a116c348,0xc081a6cc7ea3b8fb,1 +np.float64,0x1fe0f0303ebe273a,0xc0763870b78a81ca,1 +np.float64,0x0cd1260121d387da,0xc081b7668d61a9d1,1 +np.float64,0x1e6135a8f581d422,0xc077425ac10f08c2,1 +np.float64,0x622168db5fe52d30,0x4077b3c669b9fadb,1 +np.float64,0x69f188e1ec6d1718,0x407d1e2f18c63889,1 +np.float64,0x3aa1bf1d9c4dd1a3,0xc04d682e24bde479,1 +np.float64,0x6c81c4011ce4f683,0x407ee5190e8a8e6a,1 +np.float64,0x2191fa55aa5a5095,0xc0750c0c318b5e2d,1 +np.float64,0x32a1f602a32bf360,0xc06270caa493fc17,1 +np.float64,0x16023c90ba93249b,0xc07d0f88e0801638,1 +np.float64,0x1c525fe6d71fa9ff,0xc078af49c66a5d63,1 +np.float64,0x1a927675815d65b7,0xc079e5bdd7fe376e,1 +np.float64,0x41227b8fe70da028,0x402aa0c9f9a84c71,1 +np.float64,0x4962bb6e853fe87d,0x405a34aa04c83747,1 +np.float64,0x23d2cda00b26b5a4,0xc0737c13a06d00ea,1 +np.float64,0x2d13083fd62987fa,0xc06a25055aeb474e,1 +np.float64,0x10e31e4c9b4579a1,0xc0804e181929418e,1 +np.float64,0x26d3247d556a86a9,0xc0716774171da7e8,1 +np.float64,0x6603379398d0d4ac,0x407a64f51f8a887b,1 +np.float64,0x02d38af17d9442ba,0xc0852d955ac9dd68,1 +np.float64,0x6a2382b4818dd967,0x407d4129d688e5d4,1 +np.float64,0x2ee3c403c79b3934,0xc067a091fefaf8b6,1 +np.float64,0x6493a699acdbf1a4,0x4079663c8602bfc5,1 +np.float64,0x1c8413c4f0de3100,0xc0788c99697059b6,1 +np.float64,0x4573f1ed350d9622,0x404e9bd1e4c08920,1 +np.float64,0x2f34265c9200b69c,0xc067310cfea4e986,1 +np.float64,0x19b43e65fa22029b,0xc07a7f8877de22d6,1 +np.float64,0x0af48ab7925ed6bc,0xc0825c4fbc0e5ade,1 +np.float64,0x4fa49699cad82542,0x4065c76d2a318235,1 +np.float64,0x7204a15e56ade492,0x40815bb87484dffb,1 +np.float64,0x4734aa08a230982d,0x40542a4bf7a361a9,1 +np.float64,0x1ae4ed296c2fd749,0xc079ac4921f20abb,1 +np.float64,0x472514ea4370289c,0x4053ff372bd8f18f,1 +np.float64,0x53a54b3f73820430,0x406b5411fc5f2e33,1 +np.float64,0x64754de5a15684fa,0x407951592e99a5ab,1 +np.float64,0x69358e279868a7c3,0x407c9c671a882c31,1 +np.float64,0x284579ec61215945,0xc0706688e55f0927,1 +np.float64,0x68b5c58806447adc,0x407c43d6f4eff760,1 +np.float64,0x1945a83f98b0e65d,0xc07acc15eeb032cc,1 +np.float64,0x0fc5eb98a16578bf,0xc080b0d02eddca0e,1 +np.float64,0x6a75e208f5784250,0x407d7a7383bf8f05,1 +np.float64,0x0fe63a029c47645d,0xc080a59ca1e98866,1 +np.float64,0x37963ac53f065510,0xc057236281f7bdb6,1 +np.float64,0x135661bb07067ff7,0xc07ee924930c21e4,1 +np.float64,0x4b4699469d458422,0x405f73843756e887,1 +np.float64,0x1a66d73e4bf4881b,0xc07a039ba1c63adf,1 +np.float64,0x12a6b9b119a7da59,0xc07f62e49c6431f3,1 +np.float64,0x24c719aa8fd1bdb5,0xc072d26da4bf84d3,1 +np.float64,0x0fa6ff524ffef314,0xc080bb8514662e77,1 +np.float64,0x1db751d66fdd4a9a,0xc077b77cb50d7c92,1 +np.float64,0x4947374c516da82c,0x4059e9acfc7105bf,1 +np.float64,0x1b1771ab98f3afc8,0xc07989326b8e1f66,1 +np.float64,0x25e78805baac8070,0xc0720a818e6ef080,1 +np.float64,0x4bd7a148225d3687,0x406082d004ea3ee7,1 +np.float64,0x53d7d6b2bbbda00a,0x406b9a398967cbd5,1 +np.float64,0x6997fb9f4e1c685f,0x407ce0a703413eba,1 +np.float64,0x069802c2ff71b951,0xc083df39bf7acddc,1 +np.float64,0x4d683ac9890f66d8,0x4062ae21d8c2acf0,1 +np.float64,0x5a2825863ec14f4c,0x40722d718d549552,1 +np.float64,0x0398799a88f4db80,0xc084e93dab8e2158,1 +np.float64,0x5ed87a8b77e135a5,0x40756d7051777b33,1 +np.float64,0x5828cd6d79b9bede,0x4070cafb22fc6ca1,1 +np.float64,0x7b18ba2a5ec6f068,0x408481386b3ed6fe,1 +np.float64,0x4938fd60922198fe,0x4059c206b762ea7e,1 +np.float64,0x31b8f44fcdd1a46e,0xc063b2faa8b6434e,1 +np.float64,0x5729341c0d918464,0x407019cac0c4a7d7,1 +np.float64,0x13595e9228ee878e,0xc07ee7235a7d8088,1 +np.float64,0x17698b0dc9dd4135,0xc07c1627e3a5ad5f,1 +np.float64,0x63b977c283abb0cc,0x4078cf1ec6ed65be,1 +np.float64,0x7349cc0d4dc16943,0x4081cc697ce4cb53,1 +np.float64,0x4e49a80b732fb28d,0x4063e67e3c5cbe90,1 +np.float64,0x07ba14b848a8ae02,0xc0837ac032a094e0,1 +np.float64,0x3da9f17b691bfddc,0xc03929c25366acda,1 +np.float64,0x02ea39aa6c3ac007,0xc08525af6f21e1c4,1 +np.float64,0x3a6a42f04ed9563d,0xc04e98e825dca46b,1 +np.float64,0x1afa877cd7900be7,0xc0799d6648cb34a9,1 +np.float64,0x58ea986649e052c6,0x4071512e939ad790,1 +np.float64,0x691abbc04647f536,0x407c89aaae0fcb83,1 +np.float64,0x43aabc5063e6f284,0x4044b45d18106fd2,1 +np.float64,0x488b003c893e0bea,0x4057df012a2dafbe,1 +np.float64,0x77eb076ed67caee5,0x40836720de94769e,1 +np.float64,0x5c1b46974aba46f4,0x40738731ba256007,1 +np.float64,0x1a5b29ecb5d3c261,0xc07a0becc77040d6,1 +np.float64,0x5d8b6ccf868c6032,0x4074865c1865e2db,1 +np.float64,0x4cfb6690b4aaf5af,0x406216cd8c7e8ddb,1 +np.float64,0x76cbd8eb5c5fc39e,0x4083038dc66d682b,1 +np.float64,0x28bbd1fec5012814,0xc07014c2dd1b9711,1 +np.float64,0x33dc1b3a4fd6bf7a,0xc060bd0756e07d8a,1 +np.float64,0x52bbe89b37de99f3,0x406a10041aa7d343,1 +np.float64,0x07bc479d15eb2dd3,0xc0837a1a6e3a3b61,1 +np.float64,0x18fc5275711a901d,0xc07aff3e9d62bc93,1 +np.float64,0x114c9758e247dc71,0xc080299a7cf15b05,1 +np.float64,0x25ac8f6d60755148,0xc07233c4c0c511d4,1 +np.float64,0x260cae2bb9e9fd7e,0xc071f128c7e82eac,1 +np.float64,0x572ccdfe0241de82,0x40701bedc84bb504,1 +np.float64,0x0ddcef6c8d41f5ee,0xc0815a7e16d07084,1 +np.float64,0x6dad1d59c988af68,0x407fb4a0bc0142b1,1 +np.float64,0x025d200580d8b6d1,0xc08556c0bc32b1b2,1 +np.float64,0x7aad344b6aa74c18,0x40845bbc453f22be,1 +np.float64,0x5b5d9d6ad9d14429,0x4073036d2d21f382,1 +np.float64,0x49cd8d8dcdf19954,0x405b5c034f5c7353,1 +np.float64,0x63edb9483335c1e6,0x4078f2dd21378786,1 +np.float64,0x7b1dd64c9d2c26bd,0x408482b922017bc9,1 +np.float64,0x782e13e0b574be5f,0x40837e2a0090a5ad,1 +np.float64,0x592dfe18b9d6db2f,0x40717f777fbcb1ec,1 +np.float64,0x654e3232ac60d72c,0x4079e71a95a70446,1 +np.float64,0x7b8e42ad22091456,0x4084a9a6f1e61722,1 +np.float64,0x570e88dfd5860ae6,0x407006ae6c0d137a,1 +np.float64,0x294e98346cb98ef1,0xc06f5edaac12bd44,1 +np.float64,0x1adeaa4ab792e642,0xc079b1431d5e2633,1 +np.float64,0x7b6ead3377529ac8,0x40849eabc8c7683c,1 +np.float64,0x2b8eedae8a9b2928,0xc06c400054deef11,1 +np.float64,0x65defb45b2dcf660,0x407a4b53f181c05a,1 +np.float64,0x1baf582d475e7701,0xc07920bcad4a502c,1 +np.float64,0x461f39cf05a0f15a,0x405126368f984fa1,1 +np.float64,0x7e5f6f5dcfff005b,0x4085a37d610439b4,1 +np.float64,0x136f66e4d09bd662,0xc07ed8a2719f2511,1 +np.float64,0x65afd8983fb6ca1f,0x407a2a7f48bf7fc1,1 +np.float64,0x572fa7f95ed22319,0x40701d706cf82e6f,1 diff --git a/EXE version/main/numpy/core/tests/data/umath-validation-set-sin.csv b/EXE version/main/numpy/core/tests/data/umath-validation-set-sin.csv new file mode 100644 index 00000000..64e78ae1 --- /dev/null +++ b/EXE version/main/numpy/core/tests/data/umath-validation-set-sin.csv @@ -0,0 +1,660 @@ +dtype,input,output,ulperrortol +## +ve denormals ## +np.float32,0x004b4716,0x004b4716,2 +np.float32,0x007b2490,0x007b2490,2 +np.float32,0x007c99fa,0x007c99fa,2 +np.float32,0x00734a0c,0x00734a0c,2 +np.float32,0x0070de24,0x0070de24,2 +np.float32,0x007fffff,0x007fffff,2 +np.float32,0x00000001,0x00000001,2 +## -ve denormals ## +np.float32,0x80495d65,0x80495d65,2 +np.float32,0x806894f6,0x806894f6,2 +np.float32,0x80555a76,0x80555a76,2 +np.float32,0x804e1fb8,0x804e1fb8,2 +np.float32,0x80687de9,0x80687de9,2 +np.float32,0x807fffff,0x807fffff,2 +np.float32,0x80000001,0x80000001,2 +## +/-0.0f, +/-FLT_MIN +/-FLT_MAX ## +np.float32,0x00000000,0x00000000,2 +np.float32,0x80000000,0x80000000,2 +np.float32,0x00800000,0x00800000,2 +np.float32,0x80800000,0x80800000,2 +## 1.00f ## +np.float32,0x3f800000,0x3f576aa4,2 +np.float32,0x3f800001,0x3f576aa6,2 +np.float32,0x3f800002,0x3f576aa7,2 +np.float32,0xc090a8b0,0x3f7b4e48,2 +np.float32,0x41ce3184,0x3f192d43,2 +np.float32,0xc1d85848,0xbf7161cb,2 +np.float32,0x402b8820,0x3ee3f29f,2 +np.float32,0x42b4e454,0x3f1d0151,2 +np.float32,0x42a67a60,0x3f7ffa4c,2 +np.float32,0x41d92388,0x3f67beef,2 +np.float32,0x422dd66c,0xbeffb0c1,2 +np.float32,0xc28f5be6,0xbf0bae79,2 +np.float32,0x41ab2674,0x3f0ffe2b,2 +np.float32,0x3f490fdb,0x3f3504f3,2 +np.float32,0xbf490fdb,0xbf3504f3,2 +np.float32,0x3fc90fdb,0x3f800000,2 +np.float32,0xbfc90fdb,0xbf800000,2 +np.float32,0x40490fdb,0xb3bbbd2e,2 +np.float32,0xc0490fdb,0x33bbbd2e,2 +np.float32,0x3fc90fdb,0x3f800000,2 +np.float32,0xbfc90fdb,0xbf800000,2 +np.float32,0x40490fdb,0xb3bbbd2e,2 +np.float32,0xc0490fdb,0x33bbbd2e,2 +np.float32,0x40c90fdb,0x343bbd2e,2 +np.float32,0xc0c90fdb,0xb43bbd2e,2 +np.float32,0x4016cbe4,0x3f3504f3,2 +np.float32,0xc016cbe4,0xbf3504f3,2 +np.float32,0x4096cbe4,0xbf800000,2 +np.float32,0xc096cbe4,0x3f800000,2 +np.float32,0x4116cbe4,0xb2ccde2e,2 +np.float32,0xc116cbe4,0x32ccde2e,2 +np.float32,0x40490fdb,0xb3bbbd2e,2 +np.float32,0xc0490fdb,0x33bbbd2e,2 +np.float32,0x40c90fdb,0x343bbd2e,2 +np.float32,0xc0c90fdb,0xb43bbd2e,2 +np.float32,0x41490fdb,0x34bbbd2e,2 +np.float32,0xc1490fdb,0xb4bbbd2e,2 +np.float32,0x407b53d2,0xbf3504f5,2 +np.float32,0xc07b53d2,0x3f3504f5,2 +np.float32,0x40fb53d2,0x3f800000,2 +np.float32,0xc0fb53d2,0xbf800000,2 +np.float32,0x417b53d2,0xb535563d,2 +np.float32,0xc17b53d2,0x3535563d,2 +np.float32,0x4096cbe4,0xbf800000,2 +np.float32,0xc096cbe4,0x3f800000,2 +np.float32,0x4116cbe4,0xb2ccde2e,2 +np.float32,0xc116cbe4,0x32ccde2e,2 +np.float32,0x4196cbe4,0x334cde2e,2 +np.float32,0xc196cbe4,0xb34cde2e,2 +np.float32,0x40afede0,0xbf3504ef,2 +np.float32,0xc0afede0,0x3f3504ef,2 +np.float32,0x412fede0,0xbf800000,2 +np.float32,0xc12fede0,0x3f800000,2 +np.float32,0x41afede0,0xb5b222c4,2 +np.float32,0xc1afede0,0x35b222c4,2 +np.float32,0x40c90fdb,0x343bbd2e,2 +np.float32,0xc0c90fdb,0xb43bbd2e,2 +np.float32,0x41490fdb,0x34bbbd2e,2 +np.float32,0xc1490fdb,0xb4bbbd2e,2 +np.float32,0x41c90fdb,0x353bbd2e,2 +np.float32,0xc1c90fdb,0xb53bbd2e,2 +np.float32,0x40e231d6,0x3f3504f3,2 +np.float32,0xc0e231d6,0xbf3504f3,2 +np.float32,0x416231d6,0x3f800000,2 +np.float32,0xc16231d6,0xbf800000,2 +np.float32,0x41e231d6,0xb399a6a2,2 +np.float32,0xc1e231d6,0x3399a6a2,2 +np.float32,0x40fb53d2,0x3f800000,2 +np.float32,0xc0fb53d2,0xbf800000,2 +np.float32,0x417b53d2,0xb535563d,2 +np.float32,0xc17b53d2,0x3535563d,2 +np.float32,0x41fb53d2,0x35b5563d,2 +np.float32,0xc1fb53d2,0xb5b5563d,2 +np.float32,0x410a3ae7,0x3f3504eb,2 +np.float32,0xc10a3ae7,0xbf3504eb,2 +np.float32,0x418a3ae7,0xbf800000,2 +np.float32,0xc18a3ae7,0x3f800000,2 +np.float32,0x420a3ae7,0xb6308908,2 +np.float32,0xc20a3ae7,0x36308908,2 +np.float32,0x4116cbe4,0xb2ccde2e,2 +np.float32,0xc116cbe4,0x32ccde2e,2 +np.float32,0x4196cbe4,0x334cde2e,2 +np.float32,0xc196cbe4,0xb34cde2e,2 +np.float32,0x4216cbe4,0x33ccde2e,2 +np.float32,0xc216cbe4,0xb3ccde2e,2 +np.float32,0x41235ce2,0xbf3504f7,2 +np.float32,0xc1235ce2,0x3f3504f7,2 +np.float32,0x41a35ce2,0x3f800000,2 +np.float32,0xc1a35ce2,0xbf800000,2 +np.float32,0x42235ce2,0xb5b889b6,2 +np.float32,0xc2235ce2,0x35b889b6,2 +np.float32,0x412fede0,0xbf800000,2 +np.float32,0xc12fede0,0x3f800000,2 +np.float32,0x41afede0,0xb5b222c4,2 +np.float32,0xc1afede0,0x35b222c4,2 +np.float32,0x422fede0,0x363222c4,2 +np.float32,0xc22fede0,0xb63222c4,2 +np.float32,0x413c7edd,0xbf3504f3,2 +np.float32,0xc13c7edd,0x3f3504f3,2 +np.float32,0x41bc7edd,0xbf800000,2 +np.float32,0xc1bc7edd,0x3f800000,2 +np.float32,0x423c7edd,0xb4000add,2 +np.float32,0xc23c7edd,0x34000add,2 +np.float32,0x41490fdb,0x34bbbd2e,2 +np.float32,0xc1490fdb,0xb4bbbd2e,2 +np.float32,0x41c90fdb,0x353bbd2e,2 +np.float32,0xc1c90fdb,0xb53bbd2e,2 +np.float32,0x42490fdb,0x35bbbd2e,2 +np.float32,0xc2490fdb,0xb5bbbd2e,2 +np.float32,0x4155a0d9,0x3f3504fb,2 +np.float32,0xc155a0d9,0xbf3504fb,2 +np.float32,0x41d5a0d9,0x3f800000,2 +np.float32,0xc1d5a0d9,0xbf800000,2 +np.float32,0x4255a0d9,0xb633bc81,2 +np.float32,0xc255a0d9,0x3633bc81,2 +np.float32,0x416231d6,0x3f800000,2 +np.float32,0xc16231d6,0xbf800000,2 +np.float32,0x41e231d6,0xb399a6a2,2 +np.float32,0xc1e231d6,0x3399a6a2,2 +np.float32,0x426231d6,0x3419a6a2,2 +np.float32,0xc26231d6,0xb419a6a2,2 +np.float32,0x416ec2d4,0x3f3504ef,2 +np.float32,0xc16ec2d4,0xbf3504ef,2 +np.float32,0x41eec2d4,0xbf800000,2 +np.float32,0xc1eec2d4,0x3f800000,2 +np.float32,0x426ec2d4,0xb5bef0a7,2 +np.float32,0xc26ec2d4,0x35bef0a7,2 +np.float32,0x417b53d2,0xb535563d,2 +np.float32,0xc17b53d2,0x3535563d,2 +np.float32,0x41fb53d2,0x35b5563d,2 +np.float32,0xc1fb53d2,0xb5b5563d,2 +np.float32,0x427b53d2,0x3635563d,2 +np.float32,0xc27b53d2,0xb635563d,2 +np.float32,0x4183f268,0xbf3504ff,2 +np.float32,0xc183f268,0x3f3504ff,2 +np.float32,0x4203f268,0x3f800000,2 +np.float32,0xc203f268,0xbf800000,2 +np.float32,0x4283f268,0xb6859a13,2 +np.float32,0xc283f268,0x36859a13,2 +np.float32,0x418a3ae7,0xbf800000,2 +np.float32,0xc18a3ae7,0x3f800000,2 +np.float32,0x420a3ae7,0xb6308908,2 +np.float32,0xc20a3ae7,0x36308908,2 +np.float32,0x428a3ae7,0x36b08908,2 +np.float32,0xc28a3ae7,0xb6b08908,2 +np.float32,0x41908365,0xbf3504f6,2 +np.float32,0xc1908365,0x3f3504f6,2 +np.float32,0x42108365,0xbf800000,2 +np.float32,0xc2108365,0x3f800000,2 +np.float32,0x42908365,0x3592200d,2 +np.float32,0xc2908365,0xb592200d,2 +np.float32,0x4196cbe4,0x334cde2e,2 +np.float32,0xc196cbe4,0xb34cde2e,2 +np.float32,0x4216cbe4,0x33ccde2e,2 +np.float32,0xc216cbe4,0xb3ccde2e,2 +np.float32,0x4296cbe4,0x344cde2e,2 +np.float32,0xc296cbe4,0xb44cde2e,2 +np.float32,0x419d1463,0x3f3504f8,2 +np.float32,0xc19d1463,0xbf3504f8,2 +np.float32,0x421d1463,0x3f800000,2 +np.float32,0xc21d1463,0xbf800000,2 +np.float32,0x429d1463,0xb5c55799,2 +np.float32,0xc29d1463,0x35c55799,2 +np.float32,0x41a35ce2,0x3f800000,2 +np.float32,0xc1a35ce2,0xbf800000,2 +np.float32,0x42235ce2,0xb5b889b6,2 +np.float32,0xc2235ce2,0x35b889b6,2 +np.float32,0x42a35ce2,0x363889b6,2 +np.float32,0xc2a35ce2,0xb63889b6,2 +np.float32,0x41a9a561,0x3f3504e7,2 +np.float32,0xc1a9a561,0xbf3504e7,2 +np.float32,0x4229a561,0xbf800000,2 +np.float32,0xc229a561,0x3f800000,2 +np.float32,0x42a9a561,0xb68733d0,2 +np.float32,0xc2a9a561,0x368733d0,2 +np.float32,0x41afede0,0xb5b222c4,2 +np.float32,0xc1afede0,0x35b222c4,2 +np.float32,0x422fede0,0x363222c4,2 +np.float32,0xc22fede0,0xb63222c4,2 +np.float32,0x42afede0,0x36b222c4,2 +np.float32,0xc2afede0,0xb6b222c4,2 +np.float32,0x41b6365e,0xbf3504f0,2 +np.float32,0xc1b6365e,0x3f3504f0,2 +np.float32,0x4236365e,0x3f800000,2 +np.float32,0xc236365e,0xbf800000,2 +np.float32,0x42b6365e,0x358bb91c,2 +np.float32,0xc2b6365e,0xb58bb91c,2 +np.float32,0x41bc7edd,0xbf800000,2 +np.float32,0xc1bc7edd,0x3f800000,2 +np.float32,0x423c7edd,0xb4000add,2 +np.float32,0xc23c7edd,0x34000add,2 +np.float32,0x42bc7edd,0x34800add,2 +np.float32,0xc2bc7edd,0xb4800add,2 +np.float32,0x41c2c75c,0xbf3504ef,2 +np.float32,0xc1c2c75c,0x3f3504ef,2 +np.float32,0x4242c75c,0xbf800000,2 +np.float32,0xc242c75c,0x3f800000,2 +np.float32,0x42c2c75c,0xb5cbbe8a,2 +np.float32,0xc2c2c75c,0x35cbbe8a,2 +np.float32,0x41c90fdb,0x353bbd2e,2 +np.float32,0xc1c90fdb,0xb53bbd2e,2 +np.float32,0x42490fdb,0x35bbbd2e,2 +np.float32,0xc2490fdb,0xb5bbbd2e,2 +np.float32,0x42c90fdb,0x363bbd2e,2 +np.float32,0xc2c90fdb,0xb63bbd2e,2 +np.float32,0x41cf585a,0x3f3504ff,2 +np.float32,0xc1cf585a,0xbf3504ff,2 +np.float32,0x424f585a,0x3f800000,2 +np.float32,0xc24f585a,0xbf800000,2 +np.float32,0x42cf585a,0xb688cd8c,2 +np.float32,0xc2cf585a,0x3688cd8c,2 +np.float32,0x41d5a0d9,0x3f800000,2 +np.float32,0xc1d5a0d9,0xbf800000,2 +np.float32,0x4255a0d9,0xb633bc81,2 +np.float32,0xc255a0d9,0x3633bc81,2 +np.float32,0x42d5a0d9,0x36b3bc81,2 +np.float32,0xc2d5a0d9,0xb6b3bc81,2 +np.float32,0x41dbe958,0x3f3504e0,2 +np.float32,0xc1dbe958,0xbf3504e0,2 +np.float32,0x425be958,0xbf800000,2 +np.float32,0xc25be958,0x3f800000,2 +np.float32,0x42dbe958,0xb6deab75,2 +np.float32,0xc2dbe958,0x36deab75,2 +np.float32,0x41e231d6,0xb399a6a2,2 +np.float32,0xc1e231d6,0x3399a6a2,2 +np.float32,0x426231d6,0x3419a6a2,2 +np.float32,0xc26231d6,0xb419a6a2,2 +np.float32,0x42e231d6,0x3499a6a2,2 +np.float32,0xc2e231d6,0xb499a6a2,2 +np.float32,0x41e87a55,0xbf3504f8,2 +np.float32,0xc1e87a55,0x3f3504f8,2 +np.float32,0x42687a55,0x3f800000,2 +np.float32,0xc2687a55,0xbf800000,2 +np.float32,0x42e87a55,0xb5d2257b,2 +np.float32,0xc2e87a55,0x35d2257b,2 +np.float32,0x41eec2d4,0xbf800000,2 +np.float32,0xc1eec2d4,0x3f800000,2 +np.float32,0x426ec2d4,0xb5bef0a7,2 +np.float32,0xc26ec2d4,0x35bef0a7,2 +np.float32,0x42eec2d4,0x363ef0a7,2 +np.float32,0xc2eec2d4,0xb63ef0a7,2 +np.float32,0x41f50b53,0xbf3504e7,2 +np.float32,0xc1f50b53,0x3f3504e7,2 +np.float32,0x42750b53,0xbf800000,2 +np.float32,0xc2750b53,0x3f800000,2 +np.float32,0x42f50b53,0xb68a6748,2 +np.float32,0xc2f50b53,0x368a6748,2 +np.float32,0x41fb53d2,0x35b5563d,2 +np.float32,0xc1fb53d2,0xb5b5563d,2 +np.float32,0x427b53d2,0x3635563d,2 +np.float32,0xc27b53d2,0xb635563d,2 +np.float32,0x42fb53d2,0x36b5563d,2 +np.float32,0xc2fb53d2,0xb6b5563d,2 +np.float32,0x4200ce28,0x3f3504f0,2 +np.float32,0xc200ce28,0xbf3504f0,2 +np.float32,0x4280ce28,0x3f800000,2 +np.float32,0xc280ce28,0xbf800000,2 +np.float32,0x4300ce28,0x357dd672,2 +np.float32,0xc300ce28,0xb57dd672,2 +np.float32,0x4203f268,0x3f800000,2 +np.float32,0xc203f268,0xbf800000,2 +np.float32,0x4283f268,0xb6859a13,2 +np.float32,0xc283f268,0x36859a13,2 +np.float32,0x4303f268,0x37059a13,2 +np.float32,0xc303f268,0xb7059a13,2 +np.float32,0x420716a7,0x3f3504ee,2 +np.float32,0xc20716a7,0xbf3504ee,2 +np.float32,0x428716a7,0xbf800000,2 +np.float32,0xc28716a7,0x3f800000,2 +np.float32,0x430716a7,0xb5d88c6d,2 +np.float32,0xc30716a7,0x35d88c6d,2 +np.float32,0x420a3ae7,0xb6308908,2 +np.float32,0xc20a3ae7,0x36308908,2 +np.float32,0x428a3ae7,0x36b08908,2 +np.float32,0xc28a3ae7,0xb6b08908,2 +np.float32,0x430a3ae7,0x37308908,2 +np.float32,0xc30a3ae7,0xb7308908,2 +np.float32,0x420d5f26,0xbf350500,2 +np.float32,0xc20d5f26,0x3f350500,2 +np.float32,0x428d5f26,0x3f800000,2 +np.float32,0xc28d5f26,0xbf800000,2 +np.float32,0x430d5f26,0xb68c0105,2 +np.float32,0xc30d5f26,0x368c0105,2 +np.float32,0x42108365,0xbf800000,2 +np.float32,0xc2108365,0x3f800000,2 +np.float32,0x42908365,0x3592200d,2 +np.float32,0xc2908365,0xb592200d,2 +np.float32,0x43108365,0xb612200d,2 +np.float32,0xc3108365,0x3612200d,2 +np.float32,0x4213a7a5,0xbf3504df,2 +np.float32,0xc213a7a5,0x3f3504df,2 +np.float32,0x4293a7a5,0xbf800000,2 +np.float32,0xc293a7a5,0x3f800000,2 +np.float32,0x4313a7a5,0xb6e1deee,2 +np.float32,0xc313a7a5,0x36e1deee,2 +np.float32,0x4216cbe4,0x33ccde2e,2 +np.float32,0xc216cbe4,0xb3ccde2e,2 +np.float32,0x4296cbe4,0x344cde2e,2 +np.float32,0xc296cbe4,0xb44cde2e,2 +np.float32,0x4316cbe4,0x34ccde2e,2 +np.float32,0xc316cbe4,0xb4ccde2e,2 +np.float32,0x4219f024,0x3f35050f,2 +np.float32,0xc219f024,0xbf35050f,2 +np.float32,0x4299f024,0x3f800000,2 +np.float32,0xc299f024,0xbf800000,2 +np.float32,0x4319f024,0xb71bde6c,2 +np.float32,0xc319f024,0x371bde6c,2 +np.float32,0x421d1463,0x3f800000,2 +np.float32,0xc21d1463,0xbf800000,2 +np.float32,0x429d1463,0xb5c55799,2 +np.float32,0xc29d1463,0x35c55799,2 +np.float32,0x431d1463,0x36455799,2 +np.float32,0xc31d1463,0xb6455799,2 +np.float32,0x422038a3,0x3f3504d0,2 +np.float32,0xc22038a3,0xbf3504d0,2 +np.float32,0x42a038a3,0xbf800000,2 +np.float32,0xc2a038a3,0x3f800000,2 +np.float32,0x432038a3,0xb746cd61,2 +np.float32,0xc32038a3,0x3746cd61,2 +np.float32,0x42235ce2,0xb5b889b6,2 +np.float32,0xc2235ce2,0x35b889b6,2 +np.float32,0x42a35ce2,0x363889b6,2 +np.float32,0xc2a35ce2,0xb63889b6,2 +np.float32,0x43235ce2,0x36b889b6,2 +np.float32,0xc3235ce2,0xb6b889b6,2 +np.float32,0x42268121,0xbf3504f1,2 +np.float32,0xc2268121,0x3f3504f1,2 +np.float32,0x42a68121,0x3f800000,2 +np.float32,0xc2a68121,0xbf800000,2 +np.float32,0x43268121,0x35643aac,2 +np.float32,0xc3268121,0xb5643aac,2 +np.float32,0x4229a561,0xbf800000,2 +np.float32,0xc229a561,0x3f800000,2 +np.float32,0x42a9a561,0xb68733d0,2 +np.float32,0xc2a9a561,0x368733d0,2 +np.float32,0x4329a561,0x370733d0,2 +np.float32,0xc329a561,0xb70733d0,2 +np.float32,0x422cc9a0,0xbf3504ee,2 +np.float32,0xc22cc9a0,0x3f3504ee,2 +np.float32,0x42acc9a0,0xbf800000,2 +np.float32,0xc2acc9a0,0x3f800000,2 +np.float32,0x432cc9a0,0xb5e55a50,2 +np.float32,0xc32cc9a0,0x35e55a50,2 +np.float32,0x422fede0,0x363222c4,2 +np.float32,0xc22fede0,0xb63222c4,2 +np.float32,0x42afede0,0x36b222c4,2 +np.float32,0xc2afede0,0xb6b222c4,2 +np.float32,0x432fede0,0x373222c4,2 +np.float32,0xc32fede0,0xb73222c4,2 +np.float32,0x4233121f,0x3f350500,2 +np.float32,0xc233121f,0xbf350500,2 +np.float32,0x42b3121f,0x3f800000,2 +np.float32,0xc2b3121f,0xbf800000,2 +np.float32,0x4333121f,0xb68f347d,2 +np.float32,0xc333121f,0x368f347d,2 +np.float32,0x4236365e,0x3f800000,2 +np.float32,0xc236365e,0xbf800000,2 +np.float32,0x42b6365e,0x358bb91c,2 +np.float32,0xc2b6365e,0xb58bb91c,2 +np.float32,0x4336365e,0xb60bb91c,2 +np.float32,0xc336365e,0x360bb91c,2 +np.float32,0x42395a9e,0x3f3504df,2 +np.float32,0xc2395a9e,0xbf3504df,2 +np.float32,0x42b95a9e,0xbf800000,2 +np.float32,0xc2b95a9e,0x3f800000,2 +np.float32,0x43395a9e,0xb6e51267,2 +np.float32,0xc3395a9e,0x36e51267,2 +np.float32,0x423c7edd,0xb4000add,2 +np.float32,0xc23c7edd,0x34000add,2 +np.float32,0x42bc7edd,0x34800add,2 +np.float32,0xc2bc7edd,0xb4800add,2 +np.float32,0x433c7edd,0x35000add,2 +np.float32,0xc33c7edd,0xb5000add,2 +np.float32,0x423fa31d,0xbf35050f,2 +np.float32,0xc23fa31d,0x3f35050f,2 +np.float32,0x42bfa31d,0x3f800000,2 +np.float32,0xc2bfa31d,0xbf800000,2 +np.float32,0x433fa31d,0xb71d7828,2 +np.float32,0xc33fa31d,0x371d7828,2 +np.float32,0x4242c75c,0xbf800000,2 +np.float32,0xc242c75c,0x3f800000,2 +np.float32,0x42c2c75c,0xb5cbbe8a,2 +np.float32,0xc2c2c75c,0x35cbbe8a,2 +np.float32,0x4342c75c,0x364bbe8a,2 +np.float32,0xc342c75c,0xb64bbe8a,2 +np.float32,0x4245eb9c,0xbf3504d0,2 +np.float32,0xc245eb9c,0x3f3504d0,2 +np.float32,0x42c5eb9c,0xbf800000,2 +np.float32,0xc2c5eb9c,0x3f800000,2 +np.float32,0x4345eb9c,0xb748671d,2 +np.float32,0xc345eb9c,0x3748671d,2 +np.float32,0x42490fdb,0x35bbbd2e,2 +np.float32,0xc2490fdb,0xb5bbbd2e,2 +np.float32,0x42c90fdb,0x363bbd2e,2 +np.float32,0xc2c90fdb,0xb63bbd2e,2 +np.float32,0x43490fdb,0x36bbbd2e,2 +np.float32,0xc3490fdb,0xb6bbbd2e,2 +np.float32,0x424c341a,0x3f3504f1,2 +np.float32,0xc24c341a,0xbf3504f1,2 +np.float32,0x42cc341a,0x3f800000,2 +np.float32,0xc2cc341a,0xbf800000,2 +np.float32,0x434c341a,0x354a9ee6,2 +np.float32,0xc34c341a,0xb54a9ee6,2 +np.float32,0x424f585a,0x3f800000,2 +np.float32,0xc24f585a,0xbf800000,2 +np.float32,0x42cf585a,0xb688cd8c,2 +np.float32,0xc2cf585a,0x3688cd8c,2 +np.float32,0x434f585a,0x3708cd8c,2 +np.float32,0xc34f585a,0xb708cd8c,2 +np.float32,0x42527c99,0x3f3504ee,2 +np.float32,0xc2527c99,0xbf3504ee,2 +np.float32,0x42d27c99,0xbf800000,2 +np.float32,0xc2d27c99,0x3f800000,2 +np.float32,0x43527c99,0xb5f22833,2 +np.float32,0xc3527c99,0x35f22833,2 +np.float32,0x4255a0d9,0xb633bc81,2 +np.float32,0xc255a0d9,0x3633bc81,2 +np.float32,0x42d5a0d9,0x36b3bc81,2 +np.float32,0xc2d5a0d9,0xb6b3bc81,2 +np.float32,0x4355a0d9,0x3733bc81,2 +np.float32,0xc355a0d9,0xb733bc81,2 +np.float32,0x4258c518,0xbf350500,2 +np.float32,0xc258c518,0x3f350500,2 +np.float32,0x42d8c518,0x3f800000,2 +np.float32,0xc2d8c518,0xbf800000,2 +np.float32,0x4358c518,0xb69267f6,2 +np.float32,0xc358c518,0x369267f6,2 +np.float32,0x425be958,0xbf800000,2 +np.float32,0xc25be958,0x3f800000,2 +np.float32,0x42dbe958,0xb6deab75,2 +np.float32,0xc2dbe958,0x36deab75,2 +np.float32,0x435be958,0x375eab75,2 +np.float32,0xc35be958,0xb75eab75,2 +np.float32,0x425f0d97,0xbf3504df,2 +np.float32,0xc25f0d97,0x3f3504df,2 +np.float32,0x42df0d97,0xbf800000,2 +np.float32,0xc2df0d97,0x3f800000,2 +np.float32,0x435f0d97,0xb6e845e0,2 +np.float32,0xc35f0d97,0x36e845e0,2 +np.float32,0x426231d6,0x3419a6a2,2 +np.float32,0xc26231d6,0xb419a6a2,2 +np.float32,0x42e231d6,0x3499a6a2,2 +np.float32,0xc2e231d6,0xb499a6a2,2 +np.float32,0x436231d6,0x3519a6a2,2 +np.float32,0xc36231d6,0xb519a6a2,2 +np.float32,0x42655616,0x3f35050f,2 +np.float32,0xc2655616,0xbf35050f,2 +np.float32,0x42e55616,0x3f800000,2 +np.float32,0xc2e55616,0xbf800000,2 +np.float32,0x43655616,0xb71f11e5,2 +np.float32,0xc3655616,0x371f11e5,2 +np.float32,0x42687a55,0x3f800000,2 +np.float32,0xc2687a55,0xbf800000,2 +np.float32,0x42e87a55,0xb5d2257b,2 +np.float32,0xc2e87a55,0x35d2257b,2 +np.float32,0x43687a55,0x3652257b,2 +np.float32,0xc3687a55,0xb652257b,2 +np.float32,0x426b9e95,0x3f3504cf,2 +np.float32,0xc26b9e95,0xbf3504cf,2 +np.float32,0x42eb9e95,0xbf800000,2 +np.float32,0xc2eb9e95,0x3f800000,2 +np.float32,0x436b9e95,0xb74a00d9,2 +np.float32,0xc36b9e95,0x374a00d9,2 +np.float32,0x426ec2d4,0xb5bef0a7,2 +np.float32,0xc26ec2d4,0x35bef0a7,2 +np.float32,0x42eec2d4,0x363ef0a7,2 +np.float32,0xc2eec2d4,0xb63ef0a7,2 +np.float32,0x436ec2d4,0x36bef0a7,2 +np.float32,0xc36ec2d4,0xb6bef0a7,2 +np.float32,0x4271e713,0xbf3504f1,2 +np.float32,0xc271e713,0x3f3504f1,2 +np.float32,0x42f1e713,0x3f800000,2 +np.float32,0xc2f1e713,0xbf800000,2 +np.float32,0x4371e713,0x35310321,2 +np.float32,0xc371e713,0xb5310321,2 +np.float32,0x42750b53,0xbf800000,2 +np.float32,0xc2750b53,0x3f800000,2 +np.float32,0x42f50b53,0xb68a6748,2 +np.float32,0xc2f50b53,0x368a6748,2 +np.float32,0x43750b53,0x370a6748,2 +np.float32,0xc3750b53,0xb70a6748,2 +np.float32,0x42782f92,0xbf3504ee,2 +np.float32,0xc2782f92,0x3f3504ee,2 +np.float32,0x42f82f92,0xbf800000,2 +np.float32,0xc2f82f92,0x3f800000,2 +np.float32,0x43782f92,0xb5fef616,2 +np.float32,0xc3782f92,0x35fef616,2 +np.float32,0x427b53d2,0x3635563d,2 +np.float32,0xc27b53d2,0xb635563d,2 +np.float32,0x42fb53d2,0x36b5563d,2 +np.float32,0xc2fb53d2,0xb6b5563d,2 +np.float32,0x437b53d2,0x3735563d,2 +np.float32,0xc37b53d2,0xb735563d,2 +np.float32,0x427e7811,0x3f350500,2 +np.float32,0xc27e7811,0xbf350500,2 +np.float32,0x42fe7811,0x3f800000,2 +np.float32,0xc2fe7811,0xbf800000,2 +np.float32,0x437e7811,0xb6959b6f,2 +np.float32,0xc37e7811,0x36959b6f,2 +np.float32,0x4280ce28,0x3f800000,2 +np.float32,0xc280ce28,0xbf800000,2 +np.float32,0x4300ce28,0x357dd672,2 +np.float32,0xc300ce28,0xb57dd672,2 +np.float32,0x4380ce28,0xb5fdd672,2 +np.float32,0xc380ce28,0x35fdd672,2 +np.float32,0x42826048,0x3f3504de,2 +np.float32,0xc2826048,0xbf3504de,2 +np.float32,0x43026048,0xbf800000,2 +np.float32,0xc3026048,0x3f800000,2 +np.float32,0x43826048,0xb6eb7958,2 +np.float32,0xc3826048,0x36eb7958,2 +np.float32,0x4283f268,0xb6859a13,2 +np.float32,0xc283f268,0x36859a13,2 +np.float32,0x4303f268,0x37059a13,2 +np.float32,0xc303f268,0xb7059a13,2 +np.float32,0x4383f268,0x37859a13,2 +np.float32,0xc383f268,0xb7859a13,2 +np.float32,0x42858487,0xbf3504e2,2 +np.float32,0xc2858487,0x3f3504e2,2 +np.float32,0x43058487,0x3f800000,2 +np.float32,0xc3058487,0xbf800000,2 +np.float32,0x43858487,0x36bea8be,2 +np.float32,0xc3858487,0xb6bea8be,2 +np.float32,0x428716a7,0xbf800000,2 +np.float32,0xc28716a7,0x3f800000,2 +np.float32,0x430716a7,0xb5d88c6d,2 +np.float32,0xc30716a7,0x35d88c6d,2 +np.float32,0x438716a7,0x36588c6d,2 +np.float32,0xc38716a7,0xb6588c6d,2 +np.float32,0x4288a8c7,0xbf3504cf,2 +np.float32,0xc288a8c7,0x3f3504cf,2 +np.float32,0x4308a8c7,0xbf800000,2 +np.float32,0xc308a8c7,0x3f800000,2 +np.float32,0x4388a8c7,0xb74b9a96,2 +np.float32,0xc388a8c7,0x374b9a96,2 +np.float32,0x428a3ae7,0x36b08908,2 +np.float32,0xc28a3ae7,0xb6b08908,2 +np.float32,0x430a3ae7,0x37308908,2 +np.float32,0xc30a3ae7,0xb7308908,2 +np.float32,0x438a3ae7,0x37b08908,2 +np.float32,0xc38a3ae7,0xb7b08908,2 +np.float32,0x428bcd06,0x3f3504f2,2 +np.float32,0xc28bcd06,0xbf3504f2,2 +np.float32,0x430bcd06,0x3f800000,2 +np.float32,0xc30bcd06,0xbf800000,2 +np.float32,0x438bcd06,0x3517675b,2 +np.float32,0xc38bcd06,0xb517675b,2 +np.float32,0x428d5f26,0x3f800000,2 +np.float32,0xc28d5f26,0xbf800000,2 +np.float32,0x430d5f26,0xb68c0105,2 +np.float32,0xc30d5f26,0x368c0105,2 +np.float32,0x438d5f26,0x370c0105,2 +np.float32,0xc38d5f26,0xb70c0105,2 +np.float32,0x428ef146,0x3f3504c0,2 +np.float32,0xc28ef146,0xbf3504c0,2 +np.float32,0x430ef146,0xbf800000,2 +np.float32,0xc30ef146,0x3f800000,2 +np.float32,0x438ef146,0xb790bc40,2 +np.float32,0xc38ef146,0x3790bc40,2 +np.float32,0x42908365,0x3592200d,2 +np.float32,0xc2908365,0xb592200d,2 +np.float32,0x43108365,0xb612200d,2 +np.float32,0xc3108365,0x3612200d,2 +np.float32,0x43908365,0xb692200d,2 +np.float32,0xc3908365,0x3692200d,2 +np.float32,0x42921585,0xbf350501,2 +np.float32,0xc2921585,0x3f350501,2 +np.float32,0x43121585,0x3f800000,2 +np.float32,0xc3121585,0xbf800000,2 +np.float32,0x43921585,0xb698cee8,2 +np.float32,0xc3921585,0x3698cee8,2 +np.float32,0x4293a7a5,0xbf800000,2 +np.float32,0xc293a7a5,0x3f800000,2 +np.float32,0x4313a7a5,0xb6e1deee,2 +np.float32,0xc313a7a5,0x36e1deee,2 +np.float32,0x4393a7a5,0x3761deee,2 +np.float32,0xc393a7a5,0xb761deee,2 +np.float32,0x429539c5,0xbf3504b1,2 +np.float32,0xc29539c5,0x3f3504b1,2 +np.float32,0x431539c5,0xbf800000,2 +np.float32,0xc31539c5,0x3f800000,2 +np.float32,0x439539c5,0xb7bbab34,2 +np.float32,0xc39539c5,0x37bbab34,2 +np.float32,0x4296cbe4,0x344cde2e,2 +np.float32,0xc296cbe4,0xb44cde2e,2 +np.float32,0x4316cbe4,0x34ccde2e,2 +np.float32,0xc316cbe4,0xb4ccde2e,2 +np.float32,0x4396cbe4,0x354cde2e,2 +np.float32,0xc396cbe4,0xb54cde2e,2 +np.float32,0x42985e04,0x3f350510,2 +np.float32,0xc2985e04,0xbf350510,2 +np.float32,0x43185e04,0x3f800000,2 +np.float32,0xc3185e04,0xbf800000,2 +np.float32,0x43985e04,0xb722455d,2 +np.float32,0xc3985e04,0x3722455d,2 +np.float32,0x4299f024,0x3f800000,2 +np.float32,0xc299f024,0xbf800000,2 +np.float32,0x4319f024,0xb71bde6c,2 +np.float32,0xc319f024,0x371bde6c,2 +np.float32,0x4399f024,0x379bde6c,2 +np.float32,0xc399f024,0xb79bde6c,2 +np.float32,0x429b8243,0x3f3504fc,2 +np.float32,0xc29b8243,0xbf3504fc,2 +np.float32,0x431b8243,0xbf800000,2 +np.float32,0xc31b8243,0x3f800000,2 +np.float32,0x439b8243,0x364b2eb8,2 +np.float32,0xc39b8243,0xb64b2eb8,2 +np.float32,0x435b2047,0xbf350525,2 +np.float32,0x42a038a2,0xbf800000,2 +np.float32,0x432038a2,0x3664ca7e,2 +np.float32,0x4345eb9b,0x365e638c,2 +np.float32,0x42c5eb9b,0xbf800000,2 +np.float32,0x42eb9e94,0xbf800000,2 +np.float32,0x4350ea79,0x3f800000,2 +np.float32,0x42dbe957,0x3585522a,2 +np.float32,0x425be957,0xbf800000,2 +np.float32,0x435be957,0xb605522a,2 +np.float32,0x476362a2,0xbd7ff911,2 +np.float32,0x464c99a4,0x3e7f4d41,2 +np.float32,0x4471f73d,0x3e7fe1b0,2 +np.float32,0x445a6752,0x3e7ef367,2 +np.float32,0x474fa400,0x3e7f9fcd,2 +np.float32,0x45c1e72f,0xbe7fc7af,2 +np.float32,0x4558c91d,0x3e7e9f31,2 +np.float32,0x43784f94,0xbdff6654,2 +np.float32,0x466e8500,0xbe7ea0a3,2 +np.float32,0x468e1c25,0x3e7e22fb,2 +np.float32,0x44ea6cfc,0x3dff70c3,2 +np.float32,0x4605126c,0x3e7f89ef,2 +np.float32,0x4788b3c6,0xbb87d853,2 +np.float32,0x4531b042,0x3dffd163,2 +np.float32,0x43f1f71d,0x3dfff387,2 +np.float32,0x462c3fa5,0xbd7fe13d,2 +np.float32,0x441c5354,0xbdff76b4,2 +np.float32,0x44908b69,0x3e7dcf0d,2 +np.float32,0x478813ad,0xbe7e9d80,2 +np.float32,0x441c4351,0x3dff937b,2 diff --git a/EXE version/main/numpy/core/tests/examples/checks.pyx b/EXE version/main/numpy/core/tests/examples/checks.pyx new file mode 100644 index 00000000..151979db --- /dev/null +++ b/EXE version/main/numpy/core/tests/examples/checks.pyx @@ -0,0 +1,30 @@ +""" +Functions in this module give python-space wrappers for cython functions +exposed in numpy/__init__.pxd, so they can be tested in test_cython.py +""" +cimport numpy as cnp +cnp.import_array() + + +def is_td64(obj): + return cnp.is_timedelta64_object(obj) + + +def is_dt64(obj): + return cnp.is_datetime64_object(obj) + + +def get_dt64_value(obj): + return cnp.get_datetime64_value(obj) + + +def get_td64_value(obj): + return cnp.get_timedelta64_value(obj) + + +def get_dt64_unit(obj): + return cnp.get_datetime64_unit(obj) + + +def is_integer(obj): + return isinstance(obj, (cnp.integer, int)) diff --git a/EXE version/main/numpy/ctypeslib.pyi b/EXE version/main/numpy/ctypeslib.pyi new file mode 100644 index 00000000..689ea416 --- /dev/null +++ b/EXE version/main/numpy/ctypeslib.pyi @@ -0,0 +1,14 @@ +from typing import List, Type +from ctypes import _SimpleCData + +__all__: List[str] + +# TODO: Update the `npt.mypy_plugin` such that it substitutes `c_intp` for +# a specific `_SimpleCData[int]` subclass (e.g. `ctypes.c_long`) +c_intp: Type[_SimpleCData[int]] + +def load_library(libname, loader_path): ... +def ndpointer(dtype=..., ndim=..., shape=..., flags=...): ... +def as_ctypes(obj): ... +def as_array(obj, shape=...): ... +def as_ctypes_type(dtype): ... diff --git a/EXE version/main/numpy/distutils/__init__.pyi b/EXE version/main/numpy/distutils/__init__.pyi new file mode 100644 index 00000000..3938d68d --- /dev/null +++ b/EXE version/main/numpy/distutils/__init__.pyi @@ -0,0 +1,4 @@ +from typing import Any + +# TODO: remove when the full numpy namespace is defined +def __getattr__(name: str) -> Any: ... diff --git a/EXE version/main/numpy/distutils/checks/cpu_asimd.c b/EXE version/main/numpy/distutils/checks/cpu_asimd.c new file mode 100644 index 00000000..8df556b6 --- /dev/null +++ b/EXE version/main/numpy/distutils/checks/cpu_asimd.c @@ -0,0 +1,25 @@ +#ifdef _MSC_VER + #include +#endif +#include + +int main(void) +{ + float32x4_t v1 = vdupq_n_f32(1.0f), v2 = vdupq_n_f32(2.0f); + /* MAXMIN */ + int ret = (int)vgetq_lane_f32(vmaxnmq_f32(v1, v2), 0); + ret += (int)vgetq_lane_f32(vminnmq_f32(v1, v2), 0); + /* ROUNDING */ + ret += (int)vgetq_lane_f32(vrndq_f32(v1), 0); +#ifdef __aarch64__ + { + float64x2_t vd1 = vdupq_n_f64(1.0), vd2 = vdupq_n_f64(2.0); + /* MAXMIN */ + ret += (int)vgetq_lane_f64(vmaxnmq_f64(vd1, vd2), 0); + ret += (int)vgetq_lane_f64(vminnmq_f64(vd1, vd2), 0); + /* ROUNDING */ + ret += (int)vgetq_lane_f64(vrndq_f64(vd1), 0); + } +#endif + return ret; +} diff --git a/EXE version/main/numpy/distutils/checks/cpu_asimddp.c b/EXE version/main/numpy/distutils/checks/cpu_asimddp.c new file mode 100644 index 00000000..0158d135 --- /dev/null +++ b/EXE version/main/numpy/distutils/checks/cpu_asimddp.c @@ -0,0 +1,15 @@ +#ifdef _MSC_VER + #include +#endif +#include + +int main(void) +{ + uint8x16_t v1 = vdupq_n_u8((unsigned char)1), v2 = vdupq_n_u8((unsigned char)2); + uint32x4_t va = vdupq_n_u32(3); + int ret = (int)vgetq_lane_u32(vdotq_u32(va, v1, v2), 0); +#ifdef __aarch64__ + ret += (int)vgetq_lane_u32(vdotq_laneq_u32(va, v1, v2, 0), 0); +#endif + return ret; +} diff --git a/EXE version/main/numpy/distutils/checks/cpu_asimdfhm.c b/EXE version/main/numpy/distutils/checks/cpu_asimdfhm.c new file mode 100644 index 00000000..bb437aa4 --- /dev/null +++ b/EXE version/main/numpy/distutils/checks/cpu_asimdfhm.c @@ -0,0 +1,17 @@ +#ifdef _MSC_VER + #include +#endif +#include + +int main(void) +{ + float16x8_t vhp = vdupq_n_f16((float16_t)1); + float16x4_t vlhp = vdup_n_f16((float16_t)1); + float32x4_t vf = vdupq_n_f32(1.0f); + float32x2_t vlf = vdup_n_f32(1.0f); + + int ret = (int)vget_lane_f32(vfmlal_low_u32(vlf, vlhp, vlhp), 0); + ret += (int)vgetq_lane_f32(vfmlslq_high_u32(vf, vhp, vhp), 0); + + return ret; +} diff --git a/EXE version/main/numpy/distutils/checks/cpu_asimdhp.c b/EXE version/main/numpy/distutils/checks/cpu_asimdhp.c new file mode 100644 index 00000000..80b94000 --- /dev/null +++ b/EXE version/main/numpy/distutils/checks/cpu_asimdhp.c @@ -0,0 +1,14 @@ +#ifdef _MSC_VER + #include +#endif +#include + +int main(void) +{ + float16x8_t vhp = vdupq_n_f16((float16_t)-1); + float16x4_t vlhp = vdup_n_f16((float16_t)-1); + + int ret = (int)vgetq_lane_f16(vabdq_f16(vhp, vhp), 0); + ret += (int)vget_lane_f16(vabd_f16(vlhp, vlhp), 0); + return ret; +} diff --git a/EXE version/main/numpy/distutils/checks/cpu_avx.c b/EXE version/main/numpy/distutils/checks/cpu_avx.c new file mode 100644 index 00000000..26ae1846 --- /dev/null +++ b/EXE version/main/numpy/distutils/checks/cpu_avx.c @@ -0,0 +1,20 @@ +#if defined(DETECT_FEATURES) && defined(__INTEL_COMPILER) + /* + * Unlike GCC and CLANG, Intel Compiler exposes all supported intrinsics, + * whether or not the build options for those features are specified. + * Therefore, we must test #definitions of CPU features when option native/host + * is enabled via `--cpu-baseline` or through env var `CFLAGS` otherwise + * the test will be broken and leads to enable all possible features. + */ + #ifndef __AVX__ + #error "HOST/ARCH doesn't support AVX" + #endif +#endif + +#include + +int main(int argc, char **argv) +{ + __m256 a = _mm256_add_ps(_mm256_loadu_ps((const float*)argv[argc-1]), _mm256_loadu_ps((const float*)argv[1])); + return (int)_mm_cvtss_f32(_mm256_castps256_ps128(a)); +} diff --git a/EXE version/main/numpy/distutils/checks/cpu_avx2.c b/EXE version/main/numpy/distutils/checks/cpu_avx2.c new file mode 100644 index 00000000..ddde868f --- /dev/null +++ b/EXE version/main/numpy/distutils/checks/cpu_avx2.c @@ -0,0 +1,20 @@ +#if defined(DETECT_FEATURES) && defined(__INTEL_COMPILER) + /* + * Unlike GCC and CLANG, Intel Compiler exposes all supported intrinsics, + * whether or not the build options for those features are specified. + * Therefore, we must test #definitions of CPU features when option native/host + * is enabled via `--cpu-baseline` or through env var `CFLAGS` otherwise + * the test will be broken and leads to enable all possible features. + */ + #ifndef __AVX2__ + #error "HOST/ARCH doesn't support AVX2" + #endif +#endif + +#include + +int main(int argc, char **argv) +{ + __m256i a = _mm256_abs_epi16(_mm256_loadu_si256((const __m256i*)argv[argc-1])); + return _mm_cvtsi128_si32(_mm256_castsi256_si128(a)); +} diff --git a/EXE version/main/numpy/distutils/checks/cpu_avx512_clx.c b/EXE version/main/numpy/distutils/checks/cpu_avx512_clx.c new file mode 100644 index 00000000..81edcd06 --- /dev/null +++ b/EXE version/main/numpy/distutils/checks/cpu_avx512_clx.c @@ -0,0 +1,22 @@ +#if defined(DETECT_FEATURES) && defined(__INTEL_COMPILER) + /* + * Unlike GCC and CLANG, Intel Compiler exposes all supported intrinsics, + * whether or not the build options for those features are specified. + * Therefore, we must test #definitions of CPU features when option native/host + * is enabled via `--cpu-baseline` or through env var `CFLAGS` otherwise + * the test will be broken and leads to enable all possible features. + */ + #ifndef __AVX512VNNI__ + #error "HOST/ARCH doesn't support CascadeLake AVX512 features" + #endif +#endif + +#include + +int main(int argc, char **argv) +{ + /* VNNI */ + __m512i a = _mm512_loadu_si512((const __m512i*)argv[argc-1]); + a = _mm512_dpbusd_epi32(a, _mm512_setzero_si512(), a); + return _mm_cvtsi128_si32(_mm512_castsi512_si128(a)); +} diff --git a/EXE version/main/numpy/distutils/checks/cpu_avx512_cnl.c b/EXE version/main/numpy/distutils/checks/cpu_avx512_cnl.c new file mode 100644 index 00000000..5799f122 --- /dev/null +++ b/EXE version/main/numpy/distutils/checks/cpu_avx512_cnl.c @@ -0,0 +1,24 @@ +#if defined(DETECT_FEATURES) && defined(__INTEL_COMPILER) + /* + * Unlike GCC and CLANG, Intel Compiler exposes all supported intrinsics, + * whether or not the build options for those features are specified. + * Therefore, we must test #definitions of CPU features when option native/host + * is enabled via `--cpu-baseline` or through env var `CFLAGS` otherwise + * the test will be broken and leads to enable all possible features. + */ + #if !defined(__AVX512VBMI__) || !defined(__AVX512IFMA__) + #error "HOST/ARCH doesn't support CannonLake AVX512 features" + #endif +#endif + +#include + +int main(int argc, char **argv) +{ + __m512i a = _mm512_loadu_si512((const __m512i*)argv[argc-1]); + /* IFMA */ + a = _mm512_madd52hi_epu64(a, a, _mm512_setzero_si512()); + /* VMBI */ + a = _mm512_permutex2var_epi8(a, _mm512_setzero_si512(), a); + return _mm_cvtsi128_si32(_mm512_castsi512_si128(a)); +} diff --git a/EXE version/main/numpy/distutils/checks/cpu_avx512_icl.c b/EXE version/main/numpy/distutils/checks/cpu_avx512_icl.c new file mode 100644 index 00000000..3cf44d73 --- /dev/null +++ b/EXE version/main/numpy/distutils/checks/cpu_avx512_icl.c @@ -0,0 +1,26 @@ +#if defined(DETECT_FEATURES) && defined(__INTEL_COMPILER) + /* + * Unlike GCC and CLANG, Intel Compiler exposes all supported intrinsics, + * whether or not the build options for those features are specified. + * Therefore, we must test #definitions of CPU features when option native/host + * is enabled via `--cpu-baseline` or through env var `CFLAGS` otherwise + * the test will be broken and leads to enable all possible features. + */ + #if !defined(__AVX512VPOPCNTDQ__) || !defined(__AVX512BITALG__) || !defined(__AVX512VPOPCNTDQ__) + #error "HOST/ARCH doesn't support IceLake AVX512 features" + #endif +#endif + +#include + +int main(int argc, char **argv) +{ + __m512i a = _mm512_loadu_si512((const __m512i*)argv[argc-1]); + /* VBMI2 */ + a = _mm512_shrdv_epi64(a, a, _mm512_setzero_si512()); + /* BITLAG */ + a = _mm512_popcnt_epi8(a); + /* VPOPCNTDQ */ + a = _mm512_popcnt_epi64(a); + return _mm_cvtsi128_si32(_mm512_castsi512_si128(a)); +} diff --git a/EXE version/main/numpy/distutils/checks/cpu_avx512_knl.c b/EXE version/main/numpy/distutils/checks/cpu_avx512_knl.c new file mode 100644 index 00000000..b3f4f697 --- /dev/null +++ b/EXE version/main/numpy/distutils/checks/cpu_avx512_knl.c @@ -0,0 +1,25 @@ +#if defined(DETECT_FEATURES) && defined(__INTEL_COMPILER) + /* + * Unlike GCC and CLANG, Intel Compiler exposes all supported intrinsics, + * whether or not the build options for those features are specified. + * Therefore, we must test #definitions of CPU features when option native/host + * is enabled via `--cpu-baseline` or through env var `CFLAGS` otherwise + * the test will be broken and leads to enable all possible features. + */ + #if !defined(__AVX512ER__) || !defined(__AVX512PF__) + #error "HOST/ARCH doesn't support Knights Landing AVX512 features" + #endif +#endif + +#include + +int main(int argc, char **argv) +{ + int base[128]; + __m512d ad = _mm512_loadu_pd((const __m512d*)argv[argc-1]); + /* ER */ + __m512i a = _mm512_castpd_si512(_mm512_exp2a23_pd(ad)); + /* PF */ + _mm512_mask_prefetch_i64scatter_pd(base, _mm512_cmpeq_epi64_mask(a, a), a, 1, _MM_HINT_T1); + return base[0]; +} diff --git a/EXE version/main/numpy/distutils/checks/cpu_avx512_knm.c b/EXE version/main/numpy/distutils/checks/cpu_avx512_knm.c new file mode 100644 index 00000000..2c426462 --- /dev/null +++ b/EXE version/main/numpy/distutils/checks/cpu_avx512_knm.c @@ -0,0 +1,30 @@ +#if defined(DETECT_FEATURES) && defined(__INTEL_COMPILER) + /* + * Unlike GCC and CLANG, Intel Compiler exposes all supported intrinsics, + * whether or not the build options for those features are specified. + * Therefore, we must test #definitions of CPU features when option native/host + * is enabled via `--cpu-baseline` or through env var `CFLAGS` otherwise + * the test will be broken and leads to enable all possible features. + */ + #if !defined(__AVX5124FMAPS__) || !defined(__AVX5124VNNIW__) || !defined(__AVX512VPOPCNTDQ__) + #error "HOST/ARCH doesn't support Knights Mill AVX512 features" + #endif +#endif + +#include + +int main(int argc, char **argv) +{ + __m512i a = _mm512_loadu_si512((const __m512i*)argv[argc-1]); + __m512 b = _mm512_loadu_ps((const __m512*)argv[argc-2]); + + /* 4FMAPS */ + b = _mm512_4fmadd_ps(b, b, b, b, b, NULL); + /* 4VNNIW */ + a = _mm512_4dpwssd_epi32(a, a, a, a, a, NULL); + /* VPOPCNTDQ */ + a = _mm512_popcnt_epi64(a); + + a = _mm512_add_epi32(a, _mm512_castps_si512(b)); + return _mm_cvtsi128_si32(_mm512_castsi512_si128(a)); +} diff --git a/EXE version/main/numpy/distutils/checks/cpu_avx512_skx.c b/EXE version/main/numpy/distutils/checks/cpu_avx512_skx.c new file mode 100644 index 00000000..8840efb7 --- /dev/null +++ b/EXE version/main/numpy/distutils/checks/cpu_avx512_skx.c @@ -0,0 +1,26 @@ +#if defined(DETECT_FEATURES) && defined(__INTEL_COMPILER) + /* + * Unlike GCC and CLANG, Intel Compiler exposes all supported intrinsics, + * whether or not the build options for those features are specified. + * Therefore, we must test #definitions of CPU features when option native/host + * is enabled via `--cpu-baseline` or through env var `CFLAGS` otherwise + * the test will be broken and leads to enable all possible features. + */ + #if !defined(__AVX512VL__) || !defined(__AVX512BW__) || !defined(__AVX512DQ__) + #error "HOST/ARCH doesn't support SkyLake AVX512 features" + #endif +#endif + +#include + +int main(int argc, char **argv) +{ + __m512i aa = _mm512_abs_epi32(_mm512_loadu_si512((const __m512i*)argv[argc-1])); + /* VL */ + __m256i a = _mm256_abs_epi64(_mm512_extracti64x4_epi64(aa, 1)); + /* DQ */ + __m512i b = _mm512_broadcast_i32x8(a); + /* BW */ + b = _mm512_abs_epi16(b); + return _mm_cvtsi128_si32(_mm512_castsi512_si128(b)); +} diff --git a/EXE version/main/numpy/distutils/checks/cpu_avx512cd.c b/EXE version/main/numpy/distutils/checks/cpu_avx512cd.c new file mode 100644 index 00000000..5e29c79e --- /dev/null +++ b/EXE version/main/numpy/distutils/checks/cpu_avx512cd.c @@ -0,0 +1,20 @@ +#if defined(DETECT_FEATURES) && defined(__INTEL_COMPILER) + /* + * Unlike GCC and CLANG, Intel Compiler exposes all supported intrinsics, + * whether or not the build options for those features are specified. + * Therefore, we must test #definitions of CPU features when option native/host + * is enabled via `--cpu-baseline` or through env var `CFLAGS` otherwise + * the test will be broken and leads to enable all possible features. + */ + #ifndef __AVX512CD__ + #error "HOST/ARCH doesn't support AVX512CD" + #endif +#endif + +#include + +int main(int argc, char **argv) +{ + __m512i a = _mm512_lzcnt_epi32(_mm512_loadu_si512((const __m512i*)argv[argc-1])); + return _mm_cvtsi128_si32(_mm512_castsi512_si128(a)); +} diff --git a/EXE version/main/numpy/distutils/checks/cpu_avx512f.c b/EXE version/main/numpy/distutils/checks/cpu_avx512f.c new file mode 100644 index 00000000..d0eb7b1a --- /dev/null +++ b/EXE version/main/numpy/distutils/checks/cpu_avx512f.c @@ -0,0 +1,20 @@ +#if defined(DETECT_FEATURES) && defined(__INTEL_COMPILER) + /* + * Unlike GCC and CLANG, Intel Compiler exposes all supported intrinsics, + * whether or not the build options for those features are specified. + * Therefore, we must test #definitions of CPU features when option native/host + * is enabled via `--cpu-baseline` or through env var `CFLAGS` otherwise + * the test will be broken and leads to enable all possible features. + */ + #ifndef __AVX512F__ + #error "HOST/ARCH doesn't support AVX512F" + #endif +#endif + +#include + +int main(int argc, char **argv) +{ + __m512i a = _mm512_abs_epi32(_mm512_loadu_si512((const __m512i*)argv[argc-1])); + return _mm_cvtsi128_si32(_mm512_castsi512_si128(a)); +} diff --git a/EXE version/main/numpy/distutils/checks/cpu_f16c.c b/EXE version/main/numpy/distutils/checks/cpu_f16c.c new file mode 100644 index 00000000..fdf36cec --- /dev/null +++ b/EXE version/main/numpy/distutils/checks/cpu_f16c.c @@ -0,0 +1,22 @@ +#if defined(DETECT_FEATURES) && defined(__INTEL_COMPILER) + /* + * Unlike GCC and CLANG, Intel Compiler exposes all supported intrinsics, + * whether or not the build options for those features are specified. + * Therefore, we must test #definitions of CPU features when option native/host + * is enabled via `--cpu-baseline` or through env var `CFLAGS` otherwise + * the test will be broken and leads to enable all possible features. + */ + #ifndef __F16C__ + #error "HOST/ARCH doesn't support F16C" + #endif +#endif + +#include +#include + +int main(int argc, char **argv) +{ + __m128 a = _mm_cvtph_ps(_mm_loadu_si128((const __m128i*)argv[argc-1])); + __m256 a8 = _mm256_cvtph_ps(_mm_loadu_si128((const __m128i*)argv[argc-2])); + return (int)(_mm_cvtss_f32(a) + _mm_cvtss_f32(_mm256_castps256_ps128(a8))); +} diff --git a/EXE version/main/numpy/distutils/checks/cpu_fma3.c b/EXE version/main/numpy/distutils/checks/cpu_fma3.c new file mode 100644 index 00000000..bfeef22b --- /dev/null +++ b/EXE version/main/numpy/distutils/checks/cpu_fma3.c @@ -0,0 +1,22 @@ +#if defined(DETECT_FEATURES) && defined(__INTEL_COMPILER) + /* + * Unlike GCC and CLANG, Intel Compiler exposes all supported intrinsics, + * whether or not the build options for those features are specified. + * Therefore, we must test #definitions of CPU features when option native/host + * is enabled via `--cpu-baseline` or through env var `CFLAGS` otherwise + * the test will be broken and leads to enable all possible features. + */ + #if !defined(__FMA__) && !defined(__AVX2__) + #error "HOST/ARCH doesn't support FMA3" + #endif +#endif + +#include +#include + +int main(int argc, char **argv) +{ + __m256 a = _mm256_loadu_ps((const float*)argv[argc-1]); + a = _mm256_fmadd_ps(a, a, a); + return (int)_mm_cvtss_f32(_mm256_castps256_ps128(a)); +} diff --git a/EXE version/main/numpy/distutils/checks/cpu_fma4.c b/EXE version/main/numpy/distutils/checks/cpu_fma4.c new file mode 100644 index 00000000..0ff17a48 --- /dev/null +++ b/EXE version/main/numpy/distutils/checks/cpu_fma4.c @@ -0,0 +1,13 @@ +#include +#ifdef _MSC_VER + #include +#else + #include +#endif + +int main(int argc, char **argv) +{ + __m256 a = _mm256_loadu_ps((const float*)argv[argc-1]); + a = _mm256_macc_ps(a, a, a); + return (int)_mm_cvtss_f32(_mm256_castps256_ps128(a)); +} diff --git a/EXE version/main/numpy/distutils/checks/cpu_neon.c b/EXE version/main/numpy/distutils/checks/cpu_neon.c new file mode 100644 index 00000000..4eab1f38 --- /dev/null +++ b/EXE version/main/numpy/distutils/checks/cpu_neon.c @@ -0,0 +1,15 @@ +#ifdef _MSC_VER + #include +#endif +#include + +int main(void) +{ + float32x4_t v1 = vdupq_n_f32(1.0f), v2 = vdupq_n_f32(2.0f); + int ret = (int)vgetq_lane_f32(vmulq_f32(v1, v2), 0); +#ifdef __aarch64__ + float64x2_t vd1 = vdupq_n_f64(1.0), vd2 = vdupq_n_f64(2.0); + ret += (int)vgetq_lane_f64(vmulq_f64(vd1, vd2), 0); +#endif + return ret; +} diff --git a/EXE version/main/numpy/distutils/checks/cpu_neon_fp16.c b/EXE version/main/numpy/distutils/checks/cpu_neon_fp16.c new file mode 100644 index 00000000..745d2e79 --- /dev/null +++ b/EXE version/main/numpy/distutils/checks/cpu_neon_fp16.c @@ -0,0 +1,11 @@ +#ifdef _MSC_VER + #include +#endif +#include + +int main(void) +{ + short z4[] = {0, 0, 0, 0, 0, 0, 0, 0}; + float32x4_t v_z4 = vcvt_f32_f16((float16x4_t)vld1_s16((const short*)z4)); + return (int)vgetq_lane_f32(v_z4, 0); +} diff --git a/EXE version/main/numpy/distutils/checks/cpu_neon_vfpv4.c b/EXE version/main/numpy/distutils/checks/cpu_neon_vfpv4.c new file mode 100644 index 00000000..45f7b5d6 --- /dev/null +++ b/EXE version/main/numpy/distutils/checks/cpu_neon_vfpv4.c @@ -0,0 +1,19 @@ +#ifdef _MSC_VER + #include +#endif +#include + +int main(void) +{ + float32x4_t v1 = vdupq_n_f32(1.0f); + float32x4_t v2 = vdupq_n_f32(2.0f); + float32x4_t v3 = vdupq_n_f32(3.0f); + int ret = (int)vgetq_lane_f32(vfmaq_f32(v1, v2, v3), 0); +#ifdef __aarch64__ + float64x2_t vd1 = vdupq_n_f64(1.0); + float64x2_t vd2 = vdupq_n_f64(2.0); + float64x2_t vd3 = vdupq_n_f64(3.0); + ret += (int)vgetq_lane_f64(vfmaq_f64(vd1, vd2, vd3), 0); +#endif + return ret; +} diff --git a/EXE version/main/numpy/distutils/checks/cpu_popcnt.c b/EXE version/main/numpy/distutils/checks/cpu_popcnt.c new file mode 100644 index 00000000..813c461f --- /dev/null +++ b/EXE version/main/numpy/distutils/checks/cpu_popcnt.c @@ -0,0 +1,32 @@ +#if defined(DETECT_FEATURES) && defined(__INTEL_COMPILER) + /* + * Unlike GCC and CLANG, Intel Compiler exposes all supported intrinsics, + * whether or not the build options for those features are specified. + * Therefore, we must test #definitions of CPU features when option native/host + * is enabled via `--cpu-baseline` or through env vr `CFLAGS` otherwise + * the test will be broken and leads to enable all possible features. + */ + #if !defined(__SSE4_2__) && !defined(__POPCNT__) + #error "HOST/ARCH doesn't support POPCNT" + #endif +#endif + +#ifdef _MSC_VER + #include +#else + #include +#endif + +int main(int argc, char **argv) +{ + // To make sure popcnt instructions are generated + // and been tested against the assembler + unsigned long long a = *((unsigned long long*)argv[argc-1]); + unsigned int b = *((unsigned int*)argv[argc-2]); + +#if defined(_M_X64) || defined(__x86_64__) + a = _mm_popcnt_u64(a); +#endif + b = _mm_popcnt_u32(b); + return (int)a + b; +} diff --git a/EXE version/main/numpy/distutils/checks/cpu_sse.c b/EXE version/main/numpy/distutils/checks/cpu_sse.c new file mode 100644 index 00000000..602b74e7 --- /dev/null +++ b/EXE version/main/numpy/distutils/checks/cpu_sse.c @@ -0,0 +1,20 @@ +#if defined(DETECT_FEATURES) && defined(__INTEL_COMPILER) + /* + * Unlike GCC and CLANG, Intel Compiler exposes all supported intrinsics, + * whether or not the build options for those features are specified. + * Therefore, we must test #definitions of CPU features when option native/host + * is enabled via `--cpu-baseline` or through env var `CFLAGS` otherwise + * the test will be broken and leads to enable all possible features. + */ + #ifndef __SSE__ + #error "HOST/ARCH doesn't support SSE" + #endif +#endif + +#include + +int main(void) +{ + __m128 a = _mm_add_ps(_mm_setzero_ps(), _mm_setzero_ps()); + return (int)_mm_cvtss_f32(a); +} diff --git a/EXE version/main/numpy/distutils/checks/cpu_sse2.c b/EXE version/main/numpy/distutils/checks/cpu_sse2.c new file mode 100644 index 00000000..33826a9e --- /dev/null +++ b/EXE version/main/numpy/distutils/checks/cpu_sse2.c @@ -0,0 +1,20 @@ +#if defined(DETECT_FEATURES) && defined(__INTEL_COMPILER) + /* + * Unlike GCC and CLANG, Intel Compiler exposes all supported intrinsics, + * whether or not the build options for those features are specified. + * Therefore, we must test #definitions of CPU features when option native/host + * is enabled via `--cpu-baseline` or through env var `CFLAGS` otherwise + * the test will be broken and leads to enable all possible features. + */ + #ifndef __SSE2__ + #error "HOST/ARCH doesn't support SSE2" + #endif +#endif + +#include + +int main(void) +{ + __m128i a = _mm_add_epi16(_mm_setzero_si128(), _mm_setzero_si128()); + return _mm_cvtsi128_si32(a); +} diff --git a/EXE version/main/numpy/distutils/checks/cpu_sse3.c b/EXE version/main/numpy/distutils/checks/cpu_sse3.c new file mode 100644 index 00000000..d47c20f7 --- /dev/null +++ b/EXE version/main/numpy/distutils/checks/cpu_sse3.c @@ -0,0 +1,20 @@ +#if defined(DETECT_FEATURES) && defined(__INTEL_COMPILER) + /* + * Unlike GCC and CLANG, Intel Compiler exposes all supported intrinsics, + * whether or not the build options for those features are specified. + * Therefore, we must test #definitions of CPU features when option native/host + * is enabled via `--cpu-baseline` or through env var `CFLAGS` otherwise + * the test will be broken and leads to enable all possible features. + */ + #ifndef __SSE3__ + #error "HOST/ARCH doesn't support SSE3" + #endif +#endif + +#include + +int main(void) +{ + __m128 a = _mm_hadd_ps(_mm_setzero_ps(), _mm_setzero_ps()); + return (int)_mm_cvtss_f32(a); +} diff --git a/EXE version/main/numpy/distutils/checks/cpu_sse41.c b/EXE version/main/numpy/distutils/checks/cpu_sse41.c new file mode 100644 index 00000000..7c80238a --- /dev/null +++ b/EXE version/main/numpy/distutils/checks/cpu_sse41.c @@ -0,0 +1,20 @@ +#if defined(DETECT_FEATURES) && defined(__INTEL_COMPILER) + /* + * Unlike GCC and CLANG, Intel Compiler exposes all supported intrinsics, + * whether or not the build options for those features are specified. + * Therefore, we must test #definitions of CPU features when option native/host + * is enabled via `--cpu-baseline` or through env var `CFLAGS` otherwise + * the test will be broken and leads to enable all possible features. + */ + #ifndef __SSE4_1__ + #error "HOST/ARCH doesn't support SSE41" + #endif +#endif + +#include + +int main(void) +{ + __m128 a = _mm_floor_ps(_mm_setzero_ps()); + return (int)_mm_cvtss_f32(a); +} diff --git a/EXE version/main/numpy/distutils/checks/cpu_sse42.c b/EXE version/main/numpy/distutils/checks/cpu_sse42.c new file mode 100644 index 00000000..f60e18f3 --- /dev/null +++ b/EXE version/main/numpy/distutils/checks/cpu_sse42.c @@ -0,0 +1,20 @@ +#if defined(DETECT_FEATURES) && defined(__INTEL_COMPILER) + /* + * Unlike GCC and CLANG, Intel Compiler exposes all supported intrinsics, + * whether or not the build options for those features are specified. + * Therefore, we must test #definitions of CPU features when option native/host + * is enabled via `--cpu-baseline` or through env var `CFLAGS` otherwise + * the test will be broken and leads to enable all possible features. + */ + #ifndef __SSE4_2__ + #error "HOST/ARCH doesn't support SSE42" + #endif +#endif + +#include + +int main(void) +{ + __m128 a = _mm_hadd_ps(_mm_setzero_ps(), _mm_setzero_ps()); + return (int)_mm_cvtss_f32(a); +} diff --git a/EXE version/main/numpy/distutils/checks/cpu_ssse3.c b/EXE version/main/numpy/distutils/checks/cpu_ssse3.c new file mode 100644 index 00000000..fde390d6 --- /dev/null +++ b/EXE version/main/numpy/distutils/checks/cpu_ssse3.c @@ -0,0 +1,20 @@ +#if defined(DETECT_FEATURES) && defined(__INTEL_COMPILER) + /* + * Unlike GCC and CLANG, Intel Compiler exposes all supported intrinsics, + * whether or not the build options for those features are specified. + * Therefore, we must test #definitions of CPU features when option native/host + * is enabled via `--cpu-baseline` or through env var `CFLAGS` otherwise + * the test will be broken and leads to enable all possible features. + */ + #ifndef __SSSE3__ + #error "HOST/ARCH doesn't support SSSE3" + #endif +#endif + +#include + +int main(void) +{ + __m128i a = _mm_hadd_epi16(_mm_setzero_si128(), _mm_setzero_si128()); + return (int)_mm_cvtsi128_si32(a); +} diff --git a/EXE version/main/numpy/distutils/checks/cpu_vsx.c b/EXE version/main/numpy/distutils/checks/cpu_vsx.c new file mode 100644 index 00000000..0b3f30d6 --- /dev/null +++ b/EXE version/main/numpy/distutils/checks/cpu_vsx.c @@ -0,0 +1,21 @@ +#ifndef __VSX__ + #error "VSX is not supported" +#endif +#include + +#if (defined(__GNUC__) && !defined(vec_xl)) || (defined(__clang__) && !defined(__IBMC__)) + #define vsx_ld vec_vsx_ld + #define vsx_st vec_vsx_st +#else + #define vsx_ld vec_xl + #define vsx_st vec_xst +#endif + +int main(void) +{ + unsigned int zout[4]; + unsigned int z4[] = {0, 0, 0, 0}; + __vector unsigned int v_z4 = vsx_ld(0, z4); + vsx_st(v_z4, 0, zout); + return zout[0]; +} diff --git a/EXE version/main/numpy/distutils/checks/cpu_vsx2.c b/EXE version/main/numpy/distutils/checks/cpu_vsx2.c new file mode 100644 index 00000000..410fb29d --- /dev/null +++ b/EXE version/main/numpy/distutils/checks/cpu_vsx2.c @@ -0,0 +1,13 @@ +#ifndef __VSX__ + #error "VSX is not supported" +#endif +#include + +typedef __vector unsigned long long v_uint64x2; + +int main(void) +{ + v_uint64x2 z2 = (v_uint64x2){0, 0}; + z2 = (v_uint64x2)vec_cmpeq(z2, z2); + return (int)vec_extract(z2, 0); +} diff --git a/EXE version/main/numpy/distutils/checks/cpu_vsx3.c b/EXE version/main/numpy/distutils/checks/cpu_vsx3.c new file mode 100644 index 00000000..85752653 --- /dev/null +++ b/EXE version/main/numpy/distutils/checks/cpu_vsx3.c @@ -0,0 +1,13 @@ +#ifndef __VSX__ + #error "VSX is not supported" +#endif +#include + +typedef __vector unsigned int v_uint32x4; + +int main(void) +{ + v_uint32x4 z4 = (v_uint32x4){0, 0, 0, 0}; + z4 = vec_absd(z4, z4); + return (int)vec_extract(z4, 0); +} diff --git a/EXE version/main/numpy/distutils/checks/cpu_xop.c b/EXE version/main/numpy/distutils/checks/cpu_xop.c new file mode 100644 index 00000000..51d70cf2 --- /dev/null +++ b/EXE version/main/numpy/distutils/checks/cpu_xop.c @@ -0,0 +1,12 @@ +#include +#ifdef _MSC_VER + #include +#else + #include +#endif + +int main(void) +{ + __m128i a = _mm_comge_epu32(_mm_setzero_si128(), _mm_setzero_si128()); + return _mm_cvtsi128_si32(a); +} diff --git a/EXE version/main/numpy/distutils/checks/extra_avx512bw_mask.c b/EXE version/main/numpy/distutils/checks/extra_avx512bw_mask.c new file mode 100644 index 00000000..9cfd0c2a --- /dev/null +++ b/EXE version/main/numpy/distutils/checks/extra_avx512bw_mask.c @@ -0,0 +1,18 @@ +#include +/** + * Test BW mask operations due to: + * - MSVC has supported it since vs2019 see, + * https://developercommunity.visualstudio.com/content/problem/518298/missing-avx512bw-mask-intrinsics.html + * - Clang >= v8.0 + * - GCC >= v7.1 + */ +int main(void) +{ + __mmask64 m64 = _mm512_cmpeq_epi8_mask(_mm512_set1_epi8((char)1), _mm512_set1_epi8((char)1)); + m64 = _kor_mask64(m64, m64); + m64 = _kxor_mask64(m64, m64); + m64 = _cvtu64_mask64(_cvtmask64_u64(m64)); + m64 = _mm512_kunpackd(m64, m64); + m64 = (__mmask64)_mm512_kunpackw((__mmask32)m64, (__mmask32)m64); + return (int)_cvtmask64_u64(m64); +} diff --git a/EXE version/main/numpy/distutils/checks/extra_avx512dq_mask.c b/EXE version/main/numpy/distutils/checks/extra_avx512dq_mask.c new file mode 100644 index 00000000..f0dc88bd --- /dev/null +++ b/EXE version/main/numpy/distutils/checks/extra_avx512dq_mask.c @@ -0,0 +1,16 @@ +#include +/** + * Test DQ mask operations due to: + * - MSVC has supported it since vs2019 see, + * https://developercommunity.visualstudio.com/content/problem/518298/missing-avx512bw-mask-intrinsics.html + * - Clang >= v8.0 + * - GCC >= v7.1 + */ +int main(void) +{ + __mmask8 m8 = _mm512_cmpeq_epi64_mask(_mm512_set1_epi64(1), _mm512_set1_epi64(1)); + m8 = _kor_mask8(m8, m8); + m8 = _kxor_mask8(m8, m8); + m8 = _cvtu32_mask8(_cvtmask8_u32(m8)); + return (int)_cvtmask8_u32(m8); +} diff --git a/EXE version/main/numpy/distutils/checks/extra_avx512f_reduce.c b/EXE version/main/numpy/distutils/checks/extra_avx512f_reduce.c new file mode 100644 index 00000000..db01aaee --- /dev/null +++ b/EXE version/main/numpy/distutils/checks/extra_avx512f_reduce.c @@ -0,0 +1,41 @@ +#include +/** + * The following intrinsics don't have direct native support but compilers + * tend to emulate them. + * They're usually supported by gcc >= 7.1, clang >= 4 and icc >= 19 + */ +int main(void) +{ + __m512 one_ps = _mm512_set1_ps(1.0f); + __m512d one_pd = _mm512_set1_pd(1.0); + __m512i one_i64 = _mm512_set1_epi64(1); + // add + float sum_ps = _mm512_reduce_add_ps(one_ps); + double sum_pd = _mm512_reduce_add_pd(one_pd); + int sum_int = (int)_mm512_reduce_add_epi64(one_i64); + sum_int += (int)_mm512_reduce_add_epi32(one_i64); + // mul + sum_ps += _mm512_reduce_mul_ps(one_ps); + sum_pd += _mm512_reduce_mul_pd(one_pd); + sum_int += (int)_mm512_reduce_mul_epi64(one_i64); + sum_int += (int)_mm512_reduce_mul_epi32(one_i64); + // min + sum_ps += _mm512_reduce_min_ps(one_ps); + sum_pd += _mm512_reduce_min_pd(one_pd); + sum_int += (int)_mm512_reduce_min_epi32(one_i64); + sum_int += (int)_mm512_reduce_min_epu32(one_i64); + sum_int += (int)_mm512_reduce_min_epi64(one_i64); + // max + sum_ps += _mm512_reduce_max_ps(one_ps); + sum_pd += _mm512_reduce_max_pd(one_pd); + sum_int += (int)_mm512_reduce_max_epi32(one_i64); + sum_int += (int)_mm512_reduce_max_epu32(one_i64); + sum_int += (int)_mm512_reduce_max_epi64(one_i64); + // and + sum_int += (int)_mm512_reduce_and_epi32(one_i64); + sum_int += (int)_mm512_reduce_and_epi64(one_i64); + // or + sum_int += (int)_mm512_reduce_or_epi32(one_i64); + sum_int += (int)_mm512_reduce_or_epi64(one_i64); + return (int)sum_ps + (int)sum_pd + sum_int; +} diff --git a/EXE version/main/numpy/distutils/checks/extra_vsx_asm.c b/EXE version/main/numpy/distutils/checks/extra_vsx_asm.c new file mode 100644 index 00000000..b73a6f43 --- /dev/null +++ b/EXE version/main/numpy/distutils/checks/extra_vsx_asm.c @@ -0,0 +1,36 @@ +/** + * Testing ASM VSX register number fixer '%x' + * + * old versions of CLANG doesn't support %x in the inline asm template + * which fixes register number when using any of the register constraints wa, wd, wf. + * + * xref: + * - https://bugs.llvm.org/show_bug.cgi?id=31837 + * - https://gcc.gnu.org/onlinedocs/gcc/Machine-Constraints.html + */ +#ifndef __VSX__ + #error "VSX is not supported" +#endif +#include + +#if (defined(__GNUC__) && !defined(vec_xl)) || (defined(__clang__) && !defined(__IBMC__)) + #define vsx_ld vec_vsx_ld + #define vsx_st vec_vsx_st +#else + #define vsx_ld vec_xl + #define vsx_st vec_xst +#endif + +int main(void) +{ + float z4[] = {0, 0, 0, 0}; + signed int zout[] = {0, 0, 0, 0}; + + __vector float vz4 = vsx_ld(0, z4); + __vector signed int asm_ret = vsx_ld(0, zout); + + __asm__ ("xvcvspsxws %x0,%x1" : "=wa" (vz4) : "wa" (asm_ret)); + + vsx_st(asm_ret, 0, zout); + return zout[0]; +} diff --git a/EXE version/main/numpy/distutils/checks/test_flags.c b/EXE version/main/numpy/distutils/checks/test_flags.c new file mode 100644 index 00000000..4cd09d42 --- /dev/null +++ b/EXE version/main/numpy/distutils/checks/test_flags.c @@ -0,0 +1 @@ +int test_flags; diff --git a/EXE version/main/numpy/distutils/mingw/gfortran_vs2003_hack.c b/EXE version/main/numpy/distutils/mingw/gfortran_vs2003_hack.c new file mode 100644 index 00000000..485a675d --- /dev/null +++ b/EXE version/main/numpy/distutils/mingw/gfortran_vs2003_hack.c @@ -0,0 +1,6 @@ +int _get_output_format(void) +{ + return 0; +} + +int _imp____lc_codepage = 0; diff --git a/EXE version/main/numpy/f2py/__init__.pyi b/EXE version/main/numpy/f2py/__init__.pyi new file mode 100644 index 00000000..3f7231fe --- /dev/null +++ b/EXE version/main/numpy/f2py/__init__.pyi @@ -0,0 +1,18 @@ +from typing import Any, List + +from numpy.f2py import ( + f2py_testing as f2py_testing, +) + +__all__: List[str] + +def run_main(comline_list): ... +def compile( + source, + modulename=..., + extra_args=..., + verbose=..., + source_fn=..., + extension=..., + full_output=..., +): ... diff --git a/EXE version/main/numpy/f2py/src/fortranobject.c b/EXE version/main/numpy/f2py/src/fortranobject.c new file mode 100644 index 00000000..b9ef1870 --- /dev/null +++ b/EXE version/main/numpy/f2py/src/fortranobject.c @@ -0,0 +1,1107 @@ +#define FORTRANOBJECT_C +#include "fortranobject.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include + +/* + This file implements: FortranObject, array_from_pyobj, copy_ND_array + + Author: Pearu Peterson + $Revision: 1.52 $ + $Date: 2005/07/11 07:44:20 $ +*/ + +int +F2PyDict_SetItemString(PyObject *dict, char *name, PyObject *obj) +{ + if (obj==NULL) { + fprintf(stderr, "Error loading %s\n", name); + if (PyErr_Occurred()) { + PyErr_Print(); + PyErr_Clear(); + } + return -1; + } + return PyDict_SetItemString(dict, name, obj); +} + +/* + * Python-only fallback for thread-local callback pointers + */ +void *F2PySwapThreadLocalCallbackPtr(char *key, void *ptr) +{ + PyObject *local_dict, *value; + void *prev; + + local_dict = PyThreadState_GetDict(); + if (local_dict == NULL) { + Py_FatalError("F2PySwapThreadLocalCallbackPtr: PyThreadState_GetDict failed"); + } + + value = PyDict_GetItemString(local_dict, key); + if (value != NULL) { + prev = PyLong_AsVoidPtr(value); + if (PyErr_Occurred()) { + Py_FatalError("F2PySwapThreadLocalCallbackPtr: PyLong_AsVoidPtr failed"); + } + } + else { + prev = NULL; + } + + value = PyLong_FromVoidPtr((void *)ptr); + if (value == NULL) { + Py_FatalError("F2PySwapThreadLocalCallbackPtr: PyLong_FromVoidPtr failed"); + } + + if (PyDict_SetItemString(local_dict, key, value) != 0) { + Py_FatalError("F2PySwapThreadLocalCallbackPtr: PyDict_SetItemString failed"); + } + + Py_DECREF(value); + + return prev; +} + +void *F2PyGetThreadLocalCallbackPtr(char *key) +{ + PyObject *local_dict, *value; + void *prev; + + local_dict = PyThreadState_GetDict(); + if (local_dict == NULL) { + Py_FatalError("F2PyGetThreadLocalCallbackPtr: PyThreadState_GetDict failed"); + } + + value = PyDict_GetItemString(local_dict, key); + if (value != NULL) { + prev = PyLong_AsVoidPtr(value); + if (PyErr_Occurred()) { + Py_FatalError("F2PyGetThreadLocalCallbackPtr: PyLong_AsVoidPtr failed"); + } + } + else { + prev = NULL; + } + + return prev; +} + +/************************* FortranObject *******************************/ + +typedef PyObject *(*fortranfunc)(PyObject *,PyObject *,PyObject *,void *); + +PyObject * +PyFortranObject_New(FortranDataDef* defs, f2py_void_func init) { + int i; + PyFortranObject *fp = NULL; + PyObject *v = NULL; + if (init!=NULL) { /* Initialize F90 module objects */ + (*(init))(); + } + fp = PyObject_New(PyFortranObject, &PyFortran_Type); + if (fp == NULL) { + return NULL; + } + if ((fp->dict = PyDict_New()) == NULL) { + Py_DECREF(fp); + return NULL; + } + fp->len = 0; + while (defs[fp->len].name != NULL) { + fp->len++; + } + if (fp->len == 0) { + goto fail; + } + fp->defs = defs; + for (i=0;ilen;i++) { + if (fp->defs[i].rank == -1) { /* Is Fortran routine */ + v = PyFortranObject_NewAsAttr(&(fp->defs[i])); + if (v==NULL) { + goto fail; + } + PyDict_SetItemString(fp->dict,fp->defs[i].name,v); + Py_XDECREF(v); + } else + if ((fp->defs[i].data)!=NULL) { /* Is Fortran variable or array (not allocatable) */ + if (fp->defs[i].type == NPY_STRING) { + int n = fp->defs[i].rank-1; + v = PyArray_New(&PyArray_Type, n, fp->defs[i].dims.d, + NPY_STRING, NULL, fp->defs[i].data, fp->defs[i].dims.d[n], + NPY_ARRAY_FARRAY, NULL); + } + else { + v = PyArray_New(&PyArray_Type, fp->defs[i].rank, fp->defs[i].dims.d, + fp->defs[i].type, NULL, fp->defs[i].data, 0, NPY_ARRAY_FARRAY, + NULL); + } + if (v==NULL) { + goto fail; + } + PyDict_SetItemString(fp->dict,fp->defs[i].name,v); + Py_XDECREF(v); + } + } + return (PyObject *)fp; + fail: + Py_XDECREF(fp); + return NULL; +} + +PyObject * +PyFortranObject_NewAsAttr(FortranDataDef* defs) { /* used for calling F90 module routines */ + PyFortranObject *fp = NULL; + fp = PyObject_New(PyFortranObject, &PyFortran_Type); + if (fp == NULL) return NULL; + if ((fp->dict = PyDict_New())==NULL) { + PyObject_Del(fp); + return NULL; + } + fp->len = 1; + fp->defs = defs; + return (PyObject *)fp; +} + +/* Fortran methods */ + +static void +fortran_dealloc(PyFortranObject *fp) { + Py_XDECREF(fp->dict); + PyObject_Del(fp); +} + + +/* Returns number of bytes consumed from buf, or -1 on error. */ +static Py_ssize_t +format_def(char *buf, Py_ssize_t size, FortranDataDef def) +{ + char *p = buf; + int i, n; + + n = PyOS_snprintf(p, size, "array(%" NPY_INTP_FMT, def.dims.d[0]); + if (n < 0 || n >= size) { + return -1; + } + p += n; + size -= n; + + for (i = 1; i < def.rank; i++) { + n = PyOS_snprintf(p, size, ",%" NPY_INTP_FMT, def.dims.d[i]); + if (n < 0 || n >= size) { + return -1; + } + p += n; + size -= n; + } + + if (size <= 0) { + return -1; + } + + *p++ = ')'; + size--; + + if (def.data == NULL) { + static const char notalloc[] = ", not allocated"; + if ((size_t) size < sizeof(notalloc)) { + return -1; + } + memcpy(p, notalloc, sizeof(notalloc)); + p += sizeof(notalloc); + size -= sizeof(notalloc); + } + + return p - buf; +} + +static PyObject * +fortran_doc(FortranDataDef def) +{ + char *buf, *p; + PyObject *s = NULL; + Py_ssize_t n, origsize, size = 100; + + if (def.doc != NULL) { + size += strlen(def.doc); + } + origsize = size; + buf = p = (char *)PyMem_Malloc(size); + if (buf == NULL) { + return PyErr_NoMemory(); + } + + if (def.rank == -1) { + if (def.doc) { + n = strlen(def.doc); + if (n > size) { + goto fail; + } + memcpy(p, def.doc, n); + p += n; + size -= n; + } + else { + n = PyOS_snprintf(p, size, "%s - no docs available", def.name); + if (n < 0 || n >= size) { + goto fail; + } + p += n; + size -= n; + } + } + else { + PyArray_Descr *d = PyArray_DescrFromType(def.type); + n = PyOS_snprintf(p, size, "%s : '%c'-", def.name, d->type); + Py_DECREF(d); + if (n < 0 || n >= size) { + goto fail; + } + p += n; + size -= n; + + if (def.data == NULL) { + n = format_def(p, size, def); + if (n < 0) { + goto fail; + } + p += n; + size -= n; + } + else if (def.rank > 0) { + n = format_def(p, size, def); + if (n < 0) { + goto fail; + } + p += n; + size -= n; + } + else { + n = strlen("scalar"); + if (size < n) { + goto fail; + } + memcpy(p, "scalar", n); + p += n; + size -= n; + } + + } + if (size <= 1) { + goto fail; + } + *p++ = '\n'; + size--; + + /* p now points one beyond the last character of the string in buf */ + s = PyUnicode_FromStringAndSize(buf, p - buf); + + PyMem_Free(buf); + return s; + + fail: + fprintf(stderr, "fortranobject.c: fortran_doc: len(p)=%zd>%zd=size:" + " too long docstring required, increase size\n", + p - buf, origsize); + PyMem_Free(buf); + return NULL; +} + +static FortranDataDef *save_def; /* save pointer of an allocatable array */ +static void set_data(char *d,npy_intp *f) { /* callback from Fortran */ + if (*f) /* In fortran f=allocated(d) */ + save_def->data = d; + else + save_def->data = NULL; + /* printf("set_data: d=%p,f=%d\n",d,*f); */ +} + +static PyObject * +fortran_getattr(PyFortranObject *fp, char *name) { + int i,j,k,flag; + if (fp->dict != NULL) { + PyObject *v = _PyDict_GetItemStringWithError(fp->dict, name); + if (v == NULL && PyErr_Occurred()) { + return NULL; + } + else if (v != NULL) { + Py_INCREF(v); + return v; + } + } + for (i=0,j=1;ilen && (j=strcmp(name,fp->defs[i].name));i++); + if (j==0) + if (fp->defs[i].rank!=-1) { /* F90 allocatable array */ + if (fp->defs[i].func==NULL) return NULL; + for(k=0;kdefs[i].rank;++k) + fp->defs[i].dims.d[k]=-1; + save_def = &fp->defs[i]; + (*(fp->defs[i].func))(&fp->defs[i].rank,fp->defs[i].dims.d,set_data,&flag); + if (flag==2) + k = fp->defs[i].rank + 1; + else + k = fp->defs[i].rank; + if (fp->defs[i].data !=NULL) { /* array is allocated */ + PyObject *v = PyArray_New(&PyArray_Type, k, fp->defs[i].dims.d, + fp->defs[i].type, NULL, fp->defs[i].data, 0, NPY_ARRAY_FARRAY, + NULL); + if (v==NULL) return NULL; + /* Py_INCREF(v); */ + return v; + } else { /* array is not allocated */ + Py_RETURN_NONE; + } + } + if (strcmp(name,"__dict__")==0) { + Py_INCREF(fp->dict); + return fp->dict; + } + if (strcmp(name,"__doc__")==0) { + PyObject *s = PyUnicode_FromString(""), *s2, *s3; + for (i=0;ilen;i++) { + s2 = fortran_doc(fp->defs[i]); + s3 = PyUnicode_Concat(s, s2); + Py_DECREF(s2); + Py_DECREF(s); + s = s3; + } + if (PyDict_SetItemString(fp->dict, name, s)) + return NULL; + return s; + } + if ((strcmp(name,"_cpointer")==0) && (fp->len==1)) { + PyObject *cobj = F2PyCapsule_FromVoidPtr((void *)(fp->defs[0].data),NULL); + if (PyDict_SetItemString(fp->dict, name, cobj)) + return NULL; + return cobj; + } + PyObject *str, *ret; + str = PyUnicode_FromString(name); + ret = PyObject_GenericGetAttr((PyObject *)fp, str); + Py_DECREF(str); + return ret; +} + +static int +fortran_setattr(PyFortranObject *fp, char *name, PyObject *v) { + int i,j,flag; + PyArrayObject *arr = NULL; + for (i=0,j=1;ilen && (j=strcmp(name,fp->defs[i].name));i++); + if (j==0) { + if (fp->defs[i].rank==-1) { + PyErr_SetString(PyExc_AttributeError,"over-writing fortran routine"); + return -1; + } + if (fp->defs[i].func!=NULL) { /* is allocatable array */ + npy_intp dims[F2PY_MAX_DIMS]; + int k; + save_def = &fp->defs[i]; + if (v!=Py_None) { /* set new value (reallocate if needed -- + see f2py generated code for more + details ) */ + for(k=0;kdefs[i].rank;k++) dims[k]=-1; + if ((arr = array_from_pyobj(fp->defs[i].type,dims,fp->defs[i].rank,F2PY_INTENT_IN,v))==NULL) + return -1; + (*(fp->defs[i].func))(&fp->defs[i].rank,PyArray_DIMS(arr),set_data,&flag); + } else { /* deallocate */ + for(k=0;kdefs[i].rank;k++) dims[k]=0; + (*(fp->defs[i].func))(&fp->defs[i].rank,dims,set_data,&flag); + for(k=0;kdefs[i].rank;k++) dims[k]=-1; + } + memcpy(fp->defs[i].dims.d,dims,fp->defs[i].rank*sizeof(npy_intp)); + } else { /* not allocatable array */ + if ((arr = array_from_pyobj(fp->defs[i].type,fp->defs[i].dims.d,fp->defs[i].rank,F2PY_INTENT_IN,v))==NULL) + return -1; + } + if (fp->defs[i].data!=NULL) { /* copy Python object to Fortran array */ + npy_intp s = PyArray_MultiplyList(fp->defs[i].dims.d,PyArray_NDIM(arr)); + if (s==-1) + s = PyArray_MultiplyList(PyArray_DIMS(arr),PyArray_NDIM(arr)); + if (s<0 || + (memcpy(fp->defs[i].data,PyArray_DATA(arr),s*PyArray_ITEMSIZE(arr)))==NULL) { + if ((PyObject*)arr!=v) { + Py_DECREF(arr); + } + return -1; + } + if ((PyObject*)arr!=v) { + Py_DECREF(arr); + } + } else return (fp->defs[i].func==NULL?-1:0); + return 0; /* successful */ + } + if (fp->dict == NULL) { + fp->dict = PyDict_New(); + if (fp->dict == NULL) + return -1; + } + if (v == NULL) { + int rv = PyDict_DelItemString(fp->dict, name); + if (rv < 0) + PyErr_SetString(PyExc_AttributeError,"delete non-existing fortran attribute"); + return rv; + } + else + return PyDict_SetItemString(fp->dict, name, v); +} + +static PyObject* +fortran_call(PyFortranObject *fp, PyObject *arg, PyObject *kw) { + int i = 0; + /* printf("fortran call + name=%s,func=%p,data=%p,%p\n",fp->defs[i].name, + fp->defs[i].func,fp->defs[i].data,&fp->defs[i].data); */ + if (fp->defs[i].rank==-1) {/* is Fortran routine */ + if (fp->defs[i].func==NULL) { + PyErr_Format(PyExc_RuntimeError, "no function to call"); + return NULL; + } + else if (fp->defs[i].data==NULL) + /* dummy routine */ + return (*((fortranfunc)(fp->defs[i].func)))((PyObject *)fp,arg,kw,NULL); + else + return (*((fortranfunc)(fp->defs[i].func)))((PyObject *)fp,arg,kw, + (void *)fp->defs[i].data); + } + PyErr_Format(PyExc_TypeError, "this fortran object is not callable"); + return NULL; +} + +static PyObject * +fortran_repr(PyFortranObject *fp) +{ + PyObject *name = NULL, *repr = NULL; + name = PyObject_GetAttrString((PyObject *)fp, "__name__"); + PyErr_Clear(); + if (name != NULL && PyUnicode_Check(name)) { + repr = PyUnicode_FromFormat("", name); + } + else { + repr = PyUnicode_FromString(""); + } + Py_XDECREF(name); + return repr; +} + + +PyTypeObject PyFortran_Type = { + PyVarObject_HEAD_INIT(NULL, 0) + .tp_name ="fortran", + .tp_basicsize = sizeof(PyFortranObject), + .tp_dealloc = (destructor)fortran_dealloc, + .tp_getattr = (getattrfunc)fortran_getattr, + .tp_setattr = (setattrfunc)fortran_setattr, + .tp_repr = (reprfunc)fortran_repr, + .tp_call = (ternaryfunc)fortran_call, +}; + +/************************* f2py_report_atexit *******************************/ + +#ifdef F2PY_REPORT_ATEXIT +static int passed_time = 0; +static int passed_counter = 0; +static int passed_call_time = 0; +static struct timeb start_time; +static struct timeb stop_time; +static struct timeb start_call_time; +static struct timeb stop_call_time; +static int cb_passed_time = 0; +static int cb_passed_counter = 0; +static int cb_passed_call_time = 0; +static struct timeb cb_start_time; +static struct timeb cb_stop_time; +static struct timeb cb_start_call_time; +static struct timeb cb_stop_call_time; + +extern void f2py_start_clock(void) { ftime(&start_time); } +extern +void f2py_start_call_clock(void) { + f2py_stop_clock(); + ftime(&start_call_time); +} +extern +void f2py_stop_clock(void) { + ftime(&stop_time); + passed_time += 1000*(stop_time.time - start_time.time); + passed_time += stop_time.millitm - start_time.millitm; +} +extern +void f2py_stop_call_clock(void) { + ftime(&stop_call_time); + passed_call_time += 1000*(stop_call_time.time - start_call_time.time); + passed_call_time += stop_call_time.millitm - start_call_time.millitm; + passed_counter += 1; + f2py_start_clock(); +} + +extern void f2py_cb_start_clock(void) { ftime(&cb_start_time); } +extern +void f2py_cb_start_call_clock(void) { + f2py_cb_stop_clock(); + ftime(&cb_start_call_time); +} +extern +void f2py_cb_stop_clock(void) { + ftime(&cb_stop_time); + cb_passed_time += 1000*(cb_stop_time.time - cb_start_time.time); + cb_passed_time += cb_stop_time.millitm - cb_start_time.millitm; +} +extern +void f2py_cb_stop_call_clock(void) { + ftime(&cb_stop_call_time); + cb_passed_call_time += 1000*(cb_stop_call_time.time - cb_start_call_time.time); + cb_passed_call_time += cb_stop_call_time.millitm - cb_start_call_time.millitm; + cb_passed_counter += 1; + f2py_cb_start_clock(); +} + +static int f2py_report_on_exit_been_here = 0; +extern +void f2py_report_on_exit(int exit_flag,void *name) { + if (f2py_report_on_exit_been_here) { + fprintf(stderr," %s\n",(char*)name); + return; + } + f2py_report_on_exit_been_here = 1; + fprintf(stderr," /-----------------------\\\n"); + fprintf(stderr," < F2PY performance report >\n"); + fprintf(stderr," \\-----------------------/\n"); + fprintf(stderr,"Overall time spent in ...\n"); + fprintf(stderr,"(a) wrapped (Fortran/C) functions : %8d msec\n", + passed_call_time); + fprintf(stderr,"(b) f2py interface, %6d calls : %8d msec\n", + passed_counter,passed_time); + fprintf(stderr,"(c) call-back (Python) functions : %8d msec\n", + cb_passed_call_time); + fprintf(stderr,"(d) f2py call-back interface, %6d calls : %8d msec\n", + cb_passed_counter,cb_passed_time); + + fprintf(stderr,"(e) wrapped (Fortran/C) functions (actual) : %8d msec\n\n", + passed_call_time-cb_passed_call_time-cb_passed_time); + fprintf(stderr,"Use -DF2PY_REPORT_ATEXIT_DISABLE to disable this message.\n"); + fprintf(stderr,"Exit status: %d\n",exit_flag); + fprintf(stderr,"Modules : %s\n",(char*)name); +} +#endif + +/********************** report on array copy ****************************/ + +#ifdef F2PY_REPORT_ON_ARRAY_COPY +static void f2py_report_on_array_copy(PyArrayObject* arr) { + const npy_intp arr_size = PyArray_Size((PyObject *)arr); + if (arr_size>F2PY_REPORT_ON_ARRAY_COPY) { + fprintf(stderr,"copied an array: size=%ld, elsize=%"NPY_INTP_FMT"\n", + arr_size, (npy_intp)PyArray_ITEMSIZE(arr)); + } +} +static void f2py_report_on_array_copy_fromany(void) { + fprintf(stderr,"created an array from object\n"); +} + +#define F2PY_REPORT_ON_ARRAY_COPY_FROMARR f2py_report_on_array_copy((PyArrayObject *)arr) +#define F2PY_REPORT_ON_ARRAY_COPY_FROMANY f2py_report_on_array_copy_fromany() +#else +#define F2PY_REPORT_ON_ARRAY_COPY_FROMARR +#define F2PY_REPORT_ON_ARRAY_COPY_FROMANY +#endif + + +/************************* array_from_obj *******************************/ + +/* + * File: array_from_pyobj.c + * + * Description: + * ------------ + * Provides array_from_pyobj function that returns a contiguous array + * object with the given dimensions and required storage order, either + * in row-major (C) or column-major (Fortran) order. The function + * array_from_pyobj is very flexible about its Python object argument + * that can be any number, list, tuple, or array. + * + * array_from_pyobj is used in f2py generated Python extension + * modules. + * + * Author: Pearu Peterson + * Created: 13-16 January 2002 + * $Id: fortranobject.c,v 1.52 2005/07/11 07:44:20 pearu Exp $ + */ + +static int check_and_fix_dimensions(const PyArrayObject* arr, + const int rank, + npy_intp *dims); + +static int +count_negative_dimensions(const int rank, + const npy_intp *dims) { + int i=0,r=0; + while (iflags,size); + printf("\tstrides = "); + dump_dims(rank,arr->strides); + printf("\tdimensions = "); + dump_dims(rank,arr->dimensions); +} +#endif + +#define SWAPTYPE(a,b,t) {t c; c = (a); (a) = (b); (b) = c; } + +static int swap_arrays(PyArrayObject* obj1, PyArrayObject* obj2) { + PyArrayObject_fields *arr1 = (PyArrayObject_fields*) obj1, + *arr2 = (PyArrayObject_fields*) obj2; + SWAPTYPE(arr1->data,arr2->data,char*); + SWAPTYPE(arr1->nd,arr2->nd,int); + SWAPTYPE(arr1->dimensions,arr2->dimensions,npy_intp*); + SWAPTYPE(arr1->strides,arr2->strides,npy_intp*); + SWAPTYPE(arr1->base,arr2->base,PyObject*); + SWAPTYPE(arr1->descr,arr2->descr,PyArray_Descr*); + SWAPTYPE(arr1->flags,arr2->flags,int); + /* SWAPTYPE(arr1->weakreflist,arr2->weakreflist,PyObject*); */ + return 0; +} + +#define ARRAY_ISCOMPATIBLE(arr,type_num) \ + ( (PyArray_ISINTEGER(arr) && PyTypeNum_ISINTEGER(type_num)) \ + ||(PyArray_ISFLOAT(arr) && PyTypeNum_ISFLOAT(type_num)) \ + ||(PyArray_ISCOMPLEX(arr) && PyTypeNum_ISCOMPLEX(type_num)) \ + ||(PyArray_ISBOOL(arr) && PyTypeNum_ISBOOL(type_num)) \ + ) + +extern +PyArrayObject* array_from_pyobj(const int type_num, + npy_intp *dims, + const int rank, + const int intent, + PyObject *obj) { + /* + * Note about reference counting + * ----------------------------- + * If the caller returns the array to Python, it must be done with + * Py_BuildValue("N",arr). + * Otherwise, if obj!=arr then the caller must call Py_DECREF(arr). + * + * Note on intent(cache,out,..) + * --------------------- + * Don't expect correct data when returning intent(cache) array. + * + */ + char mess[200]; + PyArrayObject *arr = NULL; + PyArray_Descr *descr; + char typechar; + int elsize; + + if ((intent & F2PY_INTENT_HIDE) + || ((intent & F2PY_INTENT_CACHE) && (obj==Py_None)) + || ((intent & F2PY_OPTIONAL) && (obj==Py_None)) + ) { + /* intent(cache), optional, intent(hide) */ + if (count_negative_dimensions(rank,dims) > 0) { + int i; + strcpy(mess, "failed to create intent(cache|hide)|optional array" + "-- must have defined dimensions but got ("); + for(i=0;ielsize = 1; + descr->type = NPY_CHARLTR; + } + elsize = descr->elsize; + typechar = descr->type; + Py_DECREF(descr); + if (PyArray_Check(obj)) { + arr = (PyArrayObject *)obj; + + if (intent & F2PY_INTENT_CACHE) { + /* intent(cache) */ + if (PyArray_ISONESEGMENT(arr) + && PyArray_ITEMSIZE(arr)>=elsize) { + if (check_and_fix_dimensions(arr, rank, dims)) { + return NULL; + } + if (intent & F2PY_INTENT_OUT) + Py_INCREF(arr); + return arr; + } + strcpy(mess, "failed to initialize intent(cache) array"); + if (!PyArray_ISONESEGMENT(arr)) + strcat(mess, " -- input must be in one segment"); + if (PyArray_ITEMSIZE(arr)type,typechar); + if (!(F2PY_CHECK_ALIGNMENT(arr, intent))) + sprintf(mess+strlen(mess)," -- input not %d-aligned", F2PY_GET_ALIGNMENT(intent)); + PyErr_SetString(PyExc_ValueError,mess); + return NULL; + } + + /* here we have always intent(in) or intent(inplace) */ + + { + PyArrayObject * retarr; + retarr = (PyArrayObject *) \ + PyArray_New(&PyArray_Type, PyArray_NDIM(arr), PyArray_DIMS(arr), type_num, + NULL,NULL,1, + !(intent&F2PY_INTENT_C), + NULL); + if (retarr==NULL) + return NULL; + F2PY_REPORT_ON_ARRAY_COPY_FROMARR; + if (PyArray_CopyInto(retarr, arr)) { + Py_DECREF(retarr); + return NULL; + } + if (intent & F2PY_INTENT_INPLACE) { + if (swap_arrays(arr,retarr)) + return NULL; /* XXX: set exception */ + Py_XDECREF(retarr); + if (intent & F2PY_INTENT_OUT) + Py_INCREF(arr); + } else { + arr = retarr; + } + } + return arr; + } + + if ((intent & F2PY_INTENT_INOUT) || + (intent & F2PY_INTENT_INPLACE) || + (intent & F2PY_INTENT_CACHE)) { + PyErr_Format(PyExc_TypeError, + "failed to initialize intent(inout|inplace|cache) " + "array, input '%s' object is not an array", + Py_TYPE(obj)->tp_name); + return NULL; + } + + { + PyArray_Descr * descr = PyArray_DescrFromType(type_num); + /* compatibility with NPY_CHAR */ + if (type_num == NPY_STRING) { + PyArray_DESCR_REPLACE(descr); + if (descr == NULL) { + return NULL; + } + descr->elsize = 1; + descr->type = NPY_CHARLTR; + } + F2PY_REPORT_ON_ARRAY_COPY_FROMANY; + arr = (PyArrayObject *) \ + PyArray_FromAny(obj, descr, 0,0, + ((intent & F2PY_INTENT_C)?NPY_ARRAY_CARRAY:NPY_ARRAY_FARRAY) \ + | NPY_ARRAY_FORCECAST, NULL); + if (arr==NULL) + return NULL; + if (check_and_fix_dimensions(arr, rank, dims)) { + return NULL; + } + return arr; + } + +} + +/*****************************************/ +/* Helper functions for array_from_pyobj */ +/*****************************************/ + +static +int check_and_fix_dimensions(const PyArrayObject* arr, const int rank, npy_intp *dims) +{ + /* + * This function fills in blanks (that are -1's) in dims list using + * the dimensions from arr. It also checks that non-blank dims will + * match with the corresponding values in arr dimensions. + * + * Returns 0 if the function is successful. + * + * If an error condition is detected, an exception is set and 1 is returned. + */ + const npy_intp arr_size = (PyArray_NDIM(arr))?PyArray_Size((PyObject *)arr):1; +#ifdef DEBUG_COPY_ND_ARRAY + dump_attrs(arr); + printf("check_and_fix_dimensions:init: dims="); + dump_dims(rank,dims); +#endif + if (rank > PyArray_NDIM(arr)) { /* [1,2] -> [[1],[2]]; 1 -> [[1]] */ + npy_intp new_size = 1; + int free_axe = -1; + int i; + npy_intp d; + /* Fill dims where -1 or 0; check dimensions; calc new_size; */ + for(i=0;i= 0) { + if (d>1 && dims[i]!=d) { + PyErr_Format(PyExc_ValueError, + "%d-th dimension must be fixed to %" + NPY_INTP_FMT " but got %" NPY_INTP_FMT "\n", + i, dims[i], d); + return 1; + } + if (!dims[i]) dims[i] = 1; + } else { + dims[i] = d ? d : 1; + } + new_size *= dims[i]; + } + for(i=PyArray_NDIM(arr);i1) { + PyErr_Format(PyExc_ValueError, + "%d-th dimension must be %" NPY_INTP_FMT + " but got 0 (not defined).\n", + i, dims[i]); + return 1; + } else if (free_axe<0) + free_axe = i; + else + dims[i] = 1; + if (free_axe>=0) { + dims[free_axe] = arr_size/new_size; + new_size *= dims[free_axe]; + } + if (new_size != arr_size) { + PyErr_Format(PyExc_ValueError, + "unexpected array size: new_size=%" NPY_INTP_FMT + ", got array with arr_size=%" NPY_INTP_FMT + " (maybe too many free indices)\n", + new_size, arr_size); + return 1; + } + } else if (rank==PyArray_NDIM(arr)) { + npy_intp new_size = 1; + int i; + npy_intp d; + for (i=0; i=0) { + if (d > 1 && d!=dims[i]) { + PyErr_Format(PyExc_ValueError, + "%d-th dimension must be fixed to %" + NPY_INTP_FMT " but got %" NPY_INTP_FMT "\n", + i, dims[i], d); + return 1; + } + if (!dims[i]) dims[i] = 1; + } else dims[i] = d; + new_size *= dims[i]; + } + if (new_size != arr_size) { + PyErr_Format(PyExc_ValueError, + "unexpected array size: new_size=%" NPY_INTP_FMT + ", got array with arr_size=%" NPY_INTP_FMT "\n", + new_size, arr_size); + return 1; + } + } else { /* [[1,2]] -> [[1],[2]] */ + int i,j; + npy_intp d; + int effrank; + npy_intp size; + for (i=0,effrank=0;i1) ++effrank; + if (dims[rank-1]>=0) + if (effrank>rank) { + PyErr_Format(PyExc_ValueError, + "too many axes: %d (effrank=%d), " + "expected rank=%d\n", + PyArray_NDIM(arr), effrank, rank); + return 1; + } + + for (i=0,j=0;i=PyArray_NDIM(arr)) d = 1; + else d = PyArray_DIM(arr,j++); + if (dims[i]>=0) { + if (d>1 && d!=dims[i]) { + PyErr_Format(PyExc_ValueError, + "%d-th dimension must be fixed to %" + NPY_INTP_FMT " but got %" NPY_INTP_FMT + " (real index=%d)\n", + i, dims[i], d, j-1); + return 1; + } + if (!dims[i]) dims[i] = 1; + } else + dims[i] = d; + } + + for (i=rank;i [1,2,3,4] */ + while (j=PyArray_NDIM(arr)) d = 1; + else d = PyArray_DIM(arr,j++); + dims[rank-1] *= d; + } + for (i=0,size=1;i + extern void f2py_start_clock(void); + extern void f2py_stop_clock(void); + extern void f2py_start_call_clock(void); + extern void f2py_stop_call_clock(void); + extern void f2py_cb_start_clock(void); + extern void f2py_cb_stop_clock(void); + extern void f2py_cb_start_call_clock(void); + extern void f2py_cb_stop_call_clock(void); + extern void f2py_report_on_exit(int,void*); +#endif + +#ifdef DMALLOC +#include "dmalloc.h" +#endif + +/* Fortran object interface */ + +/* +123456789-123456789-123456789-123456789-123456789-123456789-123456789-12 + +PyFortranObject represents various Fortran objects: +Fortran (module) routines, COMMON blocks, module data. + +Author: Pearu Peterson +*/ + +#define F2PY_MAX_DIMS 40 + +typedef void (*f2py_set_data_func)(char*,npy_intp*); +typedef void (*f2py_void_func)(void); +typedef void (*f2py_init_func)(int*,npy_intp*,f2py_set_data_func,int*); + + /*typedef void* (*f2py_c_func)(void*,...);*/ + +typedef void *(*f2pycfunc)(void); + +typedef struct { + char *name; /* attribute (array||routine) name */ + int rank; /* array rank, 0 for scalar, max is F2PY_MAX_DIMS, + || rank=-1 for Fortran routine */ + struct {npy_intp d[F2PY_MAX_DIMS];} dims; /* dimensions of the array, || not used */ + int type; /* PyArray_ || not used */ + char *data; /* pointer to array || Fortran routine */ + f2py_init_func func; /* initialization function for + allocatable arrays: + func(&rank,dims,set_ptr_func,name,len(name)) + || C/API wrapper for Fortran routine */ + char *doc; /* documentation string; only recommended + for routines. */ +} FortranDataDef; + +typedef struct { + PyObject_HEAD + int len; /* Number of attributes */ + FortranDataDef *defs; /* An array of FortranDataDef's */ + PyObject *dict; /* Fortran object attribute dictionary */ +} PyFortranObject; + +#define PyFortran_Check(op) (Py_TYPE(op) == &PyFortran_Type) +#define PyFortran_Check1(op) (0==strcmp(Py_TYPE(op)->tp_name,"fortran")) + + extern PyTypeObject PyFortran_Type; + extern int F2PyDict_SetItemString(PyObject* dict, char *name, PyObject *obj); + extern PyObject * PyFortranObject_New(FortranDataDef* defs, f2py_void_func init); + extern PyObject * PyFortranObject_NewAsAttr(FortranDataDef* defs); + +PyObject * F2PyCapsule_FromVoidPtr(void *ptr, void (*dtor)(PyObject *)); +void * F2PyCapsule_AsVoidPtr(PyObject *obj); +int F2PyCapsule_Check(PyObject *ptr); + +extern void *F2PySwapThreadLocalCallbackPtr(char *key, void *ptr); +extern void *F2PyGetThreadLocalCallbackPtr(char *key); + +#define ISCONTIGUOUS(m) (PyArray_FLAGS(m) & NPY_ARRAY_C_CONTIGUOUS) +#define F2PY_INTENT_IN 1 +#define F2PY_INTENT_INOUT 2 +#define F2PY_INTENT_OUT 4 +#define F2PY_INTENT_HIDE 8 +#define F2PY_INTENT_CACHE 16 +#define F2PY_INTENT_COPY 32 +#define F2PY_INTENT_C 64 +#define F2PY_OPTIONAL 128 +#define F2PY_INTENT_INPLACE 256 +#define F2PY_INTENT_ALIGNED4 512 +#define F2PY_INTENT_ALIGNED8 1024 +#define F2PY_INTENT_ALIGNED16 2048 + +#define ARRAY_ISALIGNED(ARR, SIZE) ((size_t)(PyArray_DATA(ARR)) % (SIZE) == 0) +#define F2PY_ALIGN4(intent) (intent & F2PY_INTENT_ALIGNED4) +#define F2PY_ALIGN8(intent) (intent & F2PY_INTENT_ALIGNED8) +#define F2PY_ALIGN16(intent) (intent & F2PY_INTENT_ALIGNED16) + +#define F2PY_GET_ALIGNMENT(intent) \ + (F2PY_ALIGN4(intent) ? 4 : \ + (F2PY_ALIGN8(intent) ? 8 : \ + (F2PY_ALIGN16(intent) ? 16 : 1) )) +#define F2PY_CHECK_ALIGNMENT(arr, intent) ARRAY_ISALIGNED(arr, F2PY_GET_ALIGNMENT(intent)) + + extern PyArrayObject* array_from_pyobj(const int type_num, + npy_intp *dims, + const int rank, + const int intent, + PyObject *obj); + extern int copy_ND_array(const PyArrayObject *in, PyArrayObject *out); + +#ifdef DEBUG_COPY_ND_ARRAY + extern void dump_attrs(const PyArrayObject* arr); +#endif + + +#ifdef __cplusplus +} +#endif +#endif /* !Py_FORTRANOBJECT_H */ diff --git a/EXE version/main/numpy/f2py/tests/src/array_from_pyobj/wrapmodule.c b/EXE version/main/numpy/f2py/tests/src/array_from_pyobj/wrapmodule.c new file mode 100644 index 00000000..0411b62e --- /dev/null +++ b/EXE version/main/numpy/f2py/tests/src/array_from_pyobj/wrapmodule.c @@ -0,0 +1,228 @@ +/* + * This file was auto-generated with f2py (version:2_1330) and hand edited by + * Pearu for testing purposes. Do not edit this file unless you know what you + * are doing!!! + */ + +#ifdef __cplusplus +extern "C" { +#endif + +/*********************** See f2py2e/cfuncs.py: includes ***********************/ +#include "Python.h" +#include "fortranobject.h" +#include + +static PyObject *wrap_error; +static PyObject *wrap_module; + +/************************************ call ************************************/ +static char doc_f2py_rout_wrap_call[] = "\ +Function signature:\n\ + arr = call(type_num,dims,intent,obj)\n\ +Required arguments:\n" +" type_num : input int\n" +" dims : input int-sequence\n" +" intent : input int\n" +" obj : input python object\n" +"Return objects:\n" +" arr : array"; +static PyObject *f2py_rout_wrap_call(PyObject *capi_self, + PyObject *capi_args) { + PyObject * volatile capi_buildvalue = NULL; + int type_num = 0; + npy_intp *dims = NULL; + PyObject *dims_capi = Py_None; + int rank = 0; + int intent = 0; + PyArrayObject *capi_arr_tmp = NULL; + PyObject *arr_capi = Py_None; + int i; + + if (!PyArg_ParseTuple(capi_args,"iOiO|:wrap.call",\ + &type_num,&dims_capi,&intent,&arr_capi)) + return NULL; + rank = PySequence_Length(dims_capi); + dims = malloc(rank*sizeof(npy_intp)); + for (i=0;ikind, + PyArray_DESCR(arr)->type, + PyArray_TYPE(arr), + PyArray_ITEMSIZE(arr), + PyArray_DESCR(arr)->alignment, + PyArray_FLAGS(arr), + PyArray_ITEMSIZE(arr)); +} + +static PyMethodDef f2py_module_methods[] = { + + {"call",f2py_rout_wrap_call,METH_VARARGS,doc_f2py_rout_wrap_call}, + {"array_attrs",f2py_rout_wrap_attrs,METH_VARARGS,doc_f2py_rout_wrap_attrs}, + {NULL,NULL} +}; + +static struct PyModuleDef moduledef = { + PyModuleDef_HEAD_INIT, + "test_array_from_pyobj_ext", + NULL, + -1, + f2py_module_methods, + NULL, + NULL, + NULL, + NULL +}; + +PyMODINIT_FUNC PyInit_test_array_from_pyobj_ext(void) { + PyObject *m,*d, *s; + m = wrap_module = PyModule_Create(&moduledef); + Py_SET_TYPE(&PyFortran_Type, &PyType_Type); + import_array(); + if (PyErr_Occurred()) + Py_FatalError("can't initialize module wrap (failed to import numpy)"); + d = PyModule_GetDict(m); + s = PyUnicode_FromString("This module 'wrap' is auto-generated with f2py (version:2_1330).\nFunctions:\n" + " arr = call(type_num,dims,intent,obj)\n" + "."); + PyDict_SetItemString(d, "__doc__", s); + wrap_error = PyErr_NewException ("wrap.error", NULL, NULL); + Py_DECREF(s); + +#define ADDCONST(NAME, CONST) \ + s = PyLong_FromLong(CONST); \ + PyDict_SetItemString(d, NAME, s); \ + Py_DECREF(s) + + ADDCONST("F2PY_INTENT_IN", F2PY_INTENT_IN); + ADDCONST("F2PY_INTENT_INOUT", F2PY_INTENT_INOUT); + ADDCONST("F2PY_INTENT_OUT", F2PY_INTENT_OUT); + ADDCONST("F2PY_INTENT_HIDE", F2PY_INTENT_HIDE); + ADDCONST("F2PY_INTENT_CACHE", F2PY_INTENT_CACHE); + ADDCONST("F2PY_INTENT_COPY", F2PY_INTENT_COPY); + ADDCONST("F2PY_INTENT_C", F2PY_INTENT_C); + ADDCONST("F2PY_OPTIONAL", F2PY_OPTIONAL); + ADDCONST("F2PY_INTENT_INPLACE", F2PY_INTENT_INPLACE); + ADDCONST("NPY_BOOL", NPY_BOOL); + ADDCONST("NPY_BYTE", NPY_BYTE); + ADDCONST("NPY_UBYTE", NPY_UBYTE); + ADDCONST("NPY_SHORT", NPY_SHORT); + ADDCONST("NPY_USHORT", NPY_USHORT); + ADDCONST("NPY_INT", NPY_INT); + ADDCONST("NPY_UINT", NPY_UINT); + ADDCONST("NPY_INTP", NPY_INTP); + ADDCONST("NPY_UINTP", NPY_UINTP); + ADDCONST("NPY_LONG", NPY_LONG); + ADDCONST("NPY_ULONG", NPY_ULONG); + ADDCONST("NPY_LONGLONG", NPY_LONGLONG); + ADDCONST("NPY_ULONGLONG", NPY_ULONGLONG); + ADDCONST("NPY_FLOAT", NPY_FLOAT); + ADDCONST("NPY_DOUBLE", NPY_DOUBLE); + ADDCONST("NPY_LONGDOUBLE", NPY_LONGDOUBLE); + ADDCONST("NPY_CFLOAT", NPY_CFLOAT); + ADDCONST("NPY_CDOUBLE", NPY_CDOUBLE); + ADDCONST("NPY_CLONGDOUBLE", NPY_CLONGDOUBLE); + ADDCONST("NPY_OBJECT", NPY_OBJECT); + ADDCONST("NPY_STRING", NPY_STRING); + ADDCONST("NPY_UNICODE", NPY_UNICODE); + ADDCONST("NPY_VOID", NPY_VOID); + ADDCONST("NPY_NTYPES", NPY_NTYPES); + ADDCONST("NPY_NOTYPE", NPY_NOTYPE); + ADDCONST("NPY_USERDEF", NPY_USERDEF); + + ADDCONST("CONTIGUOUS", NPY_ARRAY_C_CONTIGUOUS); + ADDCONST("FORTRAN", NPY_ARRAY_F_CONTIGUOUS); + ADDCONST("OWNDATA", NPY_ARRAY_OWNDATA); + ADDCONST("FORCECAST", NPY_ARRAY_FORCECAST); + ADDCONST("ENSURECOPY", NPY_ARRAY_ENSURECOPY); + ADDCONST("ENSUREARRAY", NPY_ARRAY_ENSUREARRAY); + ADDCONST("ALIGNED", NPY_ARRAY_ALIGNED); + ADDCONST("WRITEABLE", NPY_ARRAY_WRITEABLE); + ADDCONST("UPDATEIFCOPY", NPY_ARRAY_UPDATEIFCOPY); + ADDCONST("WRITEBACKIFCOPY", NPY_ARRAY_WRITEBACKIFCOPY); + + ADDCONST("BEHAVED", NPY_ARRAY_BEHAVED); + ADDCONST("BEHAVED_NS", NPY_ARRAY_BEHAVED_NS); + ADDCONST("CARRAY", NPY_ARRAY_CARRAY); + ADDCONST("FARRAY", NPY_ARRAY_FARRAY); + ADDCONST("CARRAY_RO", NPY_ARRAY_CARRAY_RO); + ADDCONST("FARRAY_RO", NPY_ARRAY_FARRAY_RO); + ADDCONST("DEFAULT", NPY_ARRAY_DEFAULT); + ADDCONST("UPDATE_ALL", NPY_ARRAY_UPDATE_ALL); + +#undef ADDCONST( + + if (PyErr_Occurred()) + Py_FatalError("can't initialize module wrap"); + +#ifdef F2PY_REPORT_ATEXIT + on_exit(f2py_report_on_exit,(void*)"array_from_pyobj.wrap.call"); +#endif + + return m; +} +#ifdef __cplusplus +} +#endif diff --git a/EXE version/main/numpy/f2py/tests/src/assumed_shape/.f2py_f2cmap b/EXE version/main/numpy/f2py/tests/src/assumed_shape/.f2py_f2cmap new file mode 100644 index 00000000..2665f89b --- /dev/null +++ b/EXE version/main/numpy/f2py/tests/src/assumed_shape/.f2py_f2cmap @@ -0,0 +1 @@ +dict(real=dict(rk="double")) diff --git a/EXE version/main/numpy/f2py/tests/src/assumed_shape/foo_free.f90 b/EXE version/main/numpy/f2py/tests/src/assumed_shape/foo_free.f90 new file mode 100644 index 00000000..b301710f --- /dev/null +++ b/EXE version/main/numpy/f2py/tests/src/assumed_shape/foo_free.f90 @@ -0,0 +1,34 @@ + +subroutine sum(x, res) + implicit none + real, intent(in) :: x(:) + real, intent(out) :: res + + integer :: i + + !print *, "sum: size(x) = ", size(x) + + res = 0.0 + + do i = 1, size(x) + res = res + x(i) + enddo + +end subroutine sum + +function fsum(x) result (res) + implicit none + real, intent(in) :: x(:) + real :: res + + integer :: i + + !print *, "fsum: size(x) = ", size(x) + + res = 0.0 + + do i = 1, size(x) + res = res + x(i) + enddo + +end function fsum diff --git a/EXE version/main/numpy/f2py/tests/src/assumed_shape/foo_mod.f90 b/EXE version/main/numpy/f2py/tests/src/assumed_shape/foo_mod.f90 new file mode 100644 index 00000000..cbe6317e --- /dev/null +++ b/EXE version/main/numpy/f2py/tests/src/assumed_shape/foo_mod.f90 @@ -0,0 +1,41 @@ + +module mod + +contains + +subroutine sum(x, res) + implicit none + real, intent(in) :: x(:) + real, intent(out) :: res + + integer :: i + + !print *, "sum: size(x) = ", size(x) + + res = 0.0 + + do i = 1, size(x) + res = res + x(i) + enddo + +end subroutine sum + +function fsum(x) result (res) + implicit none + real, intent(in) :: x(:) + real :: res + + integer :: i + + !print *, "fsum: size(x) = ", size(x) + + res = 0.0 + + do i = 1, size(x) + res = res + x(i) + enddo + +end function fsum + + +end module mod diff --git a/EXE version/main/numpy/f2py/tests/src/assumed_shape/foo_use.f90 b/EXE version/main/numpy/f2py/tests/src/assumed_shape/foo_use.f90 new file mode 100644 index 00000000..337465ac --- /dev/null +++ b/EXE version/main/numpy/f2py/tests/src/assumed_shape/foo_use.f90 @@ -0,0 +1,19 @@ +subroutine sum_with_use(x, res) + use precision + + implicit none + + real(kind=rk), intent(in) :: x(:) + real(kind=rk), intent(out) :: res + + integer :: i + + !print *, "size(x) = ", size(x) + + res = 0.0 + + do i = 1, size(x) + res = res + x(i) + enddo + + end subroutine diff --git a/EXE version/main/numpy/f2py/tests/src/assumed_shape/precision.f90 b/EXE version/main/numpy/f2py/tests/src/assumed_shape/precision.f90 new file mode 100644 index 00000000..ed6c70cb --- /dev/null +++ b/EXE version/main/numpy/f2py/tests/src/assumed_shape/precision.f90 @@ -0,0 +1,4 @@ +module precision + integer, parameter :: rk = selected_real_kind(8) + integer, parameter :: ik = selected_real_kind(4) +end module diff --git a/EXE version/main/numpy/f2py/tests/src/common/block.f b/EXE version/main/numpy/f2py/tests/src/common/block.f new file mode 100644 index 00000000..7ea7968f --- /dev/null +++ b/EXE version/main/numpy/f2py/tests/src/common/block.f @@ -0,0 +1,11 @@ + SUBROUTINE INITCB + DOUBLE PRECISION LONG + CHARACTER STRING + INTEGER OK + + COMMON /BLOCK/ LONG, STRING, OK + LONG = 1.0 + STRING = '2' + OK = 3 + RETURN + END diff --git a/EXE version/main/numpy/f2py/tests/src/kind/foo.f90 b/EXE version/main/numpy/f2py/tests/src/kind/foo.f90 new file mode 100644 index 00000000..d3d15cfb --- /dev/null +++ b/EXE version/main/numpy/f2py/tests/src/kind/foo.f90 @@ -0,0 +1,20 @@ + + +subroutine selectedrealkind(p, r, res) + implicit none + + integer, intent(in) :: p, r + !f2py integer :: r=0 + integer, intent(out) :: res + res = selected_real_kind(p, r) + +end subroutine + +subroutine selectedintkind(p, res) + implicit none + + integer, intent(in) :: p + integer, intent(out) :: res + res = selected_int_kind(p) + +end subroutine diff --git a/EXE version/main/numpy/f2py/tests/src/mixed/foo.f b/EXE version/main/numpy/f2py/tests/src/mixed/foo.f new file mode 100644 index 00000000..c3474257 --- /dev/null +++ b/EXE version/main/numpy/f2py/tests/src/mixed/foo.f @@ -0,0 +1,5 @@ + subroutine bar11(a) +cf2py intent(out) a + integer a + a = 11 + end diff --git a/EXE version/main/numpy/f2py/tests/src/mixed/foo_fixed.f90 b/EXE version/main/numpy/f2py/tests/src/mixed/foo_fixed.f90 new file mode 100644 index 00000000..7543a6ac --- /dev/null +++ b/EXE version/main/numpy/f2py/tests/src/mixed/foo_fixed.f90 @@ -0,0 +1,8 @@ + module foo_fixed + contains + subroutine bar12(a) +!f2py intent(out) a + integer a + a = 12 + end subroutine bar12 + end module foo_fixed diff --git a/EXE version/main/numpy/f2py/tests/src/mixed/foo_free.f90 b/EXE version/main/numpy/f2py/tests/src/mixed/foo_free.f90 new file mode 100644 index 00000000..c1b641f1 --- /dev/null +++ b/EXE version/main/numpy/f2py/tests/src/mixed/foo_free.f90 @@ -0,0 +1,8 @@ +module foo_free +contains + subroutine bar13(a) + !f2py intent(out) a + integer a + a = 13 + end subroutine bar13 +end module foo_free diff --git a/EXE version/main/numpy/f2py/tests/src/module_data/mod.mod b/EXE version/main/numpy/f2py/tests/src/module_data/mod.mod new file mode 100644 index 00000000..8670a97e Binary files /dev/null and b/EXE version/main/numpy/f2py/tests/src/module_data/mod.mod differ diff --git a/EXE version/main/numpy/f2py/tests/src/module_data/module_data_docstring.f90 b/EXE version/main/numpy/f2py/tests/src/module_data/module_data_docstring.f90 new file mode 100644 index 00000000..4505e0cb --- /dev/null +++ b/EXE version/main/numpy/f2py/tests/src/module_data/module_data_docstring.f90 @@ -0,0 +1,12 @@ +module mod + integer :: i + integer :: x(4) + real, dimension(2,3) :: a + real, allocatable, dimension(:,:) :: b +contains + subroutine foo + integer :: k + k = 1 + a(1,2) = a(1,2)+3 + end subroutine foo +end module mod diff --git a/EXE version/main/numpy/f2py/tests/src/parameter/constant_both.f90 b/EXE version/main/numpy/f2py/tests/src/parameter/constant_both.f90 new file mode 100644 index 00000000..ac90cedc --- /dev/null +++ b/EXE version/main/numpy/f2py/tests/src/parameter/constant_both.f90 @@ -0,0 +1,57 @@ +! Check that parameters are correct intercepted. +! Constants with comma separations are commonly +! used, for instance Pi = 3._dp +subroutine foo(x) + implicit none + integer, parameter :: sp = selected_real_kind(6) + integer, parameter :: dp = selected_real_kind(15) + integer, parameter :: ii = selected_int_kind(9) + integer, parameter :: il = selected_int_kind(18) + real(dp), intent(inout) :: x + dimension x(3) + real(sp), parameter :: three_s = 3._sp + real(dp), parameter :: three_d = 3._dp + integer(ii), parameter :: three_i = 3_ii + integer(il), parameter :: three_l = 3_il + x(1) = x(1) + x(2) * three_s * three_i + x(3) * three_d * three_l + x(2) = x(2) * three_s + x(3) = x(3) * three_l + return +end subroutine + + +subroutine foo_no(x) + implicit none + integer, parameter :: sp = selected_real_kind(6) + integer, parameter :: dp = selected_real_kind(15) + integer, parameter :: ii = selected_int_kind(9) + integer, parameter :: il = selected_int_kind(18) + real(dp), intent(inout) :: x + dimension x(3) + real(sp), parameter :: three_s = 3. + real(dp), parameter :: three_d = 3. + integer(ii), parameter :: three_i = 3 + integer(il), parameter :: three_l = 3 + x(1) = x(1) + x(2) * three_s * three_i + x(3) * three_d * three_l + x(2) = x(2) * three_s + x(3) = x(3) * three_l + return +end subroutine + +subroutine foo_sum(x) + implicit none + integer, parameter :: sp = selected_real_kind(6) + integer, parameter :: dp = selected_real_kind(15) + integer, parameter :: ii = selected_int_kind(9) + integer, parameter :: il = selected_int_kind(18) + real(dp), intent(inout) :: x + dimension x(3) + real(sp), parameter :: three_s = 2._sp + 1._sp + real(dp), parameter :: three_d = 1._dp + 2._dp + integer(ii), parameter :: three_i = 2_ii + 1_ii + integer(il), parameter :: three_l = 1_il + 2_il + x(1) = x(1) + x(2) * three_s * three_i + x(3) * three_d * three_l + x(2) = x(2) * three_s + x(3) = x(3) * three_l + return +end subroutine diff --git a/EXE version/main/numpy/f2py/tests/src/parameter/constant_compound.f90 b/EXE version/main/numpy/f2py/tests/src/parameter/constant_compound.f90 new file mode 100644 index 00000000..e51f5e9b --- /dev/null +++ b/EXE version/main/numpy/f2py/tests/src/parameter/constant_compound.f90 @@ -0,0 +1,15 @@ +! Check that parameters are correct intercepted. +! Constants with comma separations are commonly +! used, for instance Pi = 3._dp +subroutine foo_compound_int(x) + implicit none + integer, parameter :: ii = selected_int_kind(9) + integer(ii), intent(inout) :: x + dimension x(3) + integer(ii), parameter :: three = 3_ii + integer(ii), parameter :: two = 2_ii + integer(ii), parameter :: six = three * 1_ii * two + + x(1) = x(1) + x(2) + x(3) * six + return +end subroutine diff --git a/EXE version/main/numpy/f2py/tests/src/parameter/constant_integer.f90 b/EXE version/main/numpy/f2py/tests/src/parameter/constant_integer.f90 new file mode 100644 index 00000000..aaa83d2e --- /dev/null +++ b/EXE version/main/numpy/f2py/tests/src/parameter/constant_integer.f90 @@ -0,0 +1,22 @@ +! Check that parameters are correct intercepted. +! Constants with comma separations are commonly +! used, for instance Pi = 3._dp +subroutine foo_int(x) + implicit none + integer, parameter :: ii = selected_int_kind(9) + integer(ii), intent(inout) :: x + dimension x(3) + integer(ii), parameter :: three = 3_ii + x(1) = x(1) + x(2) + x(3) * three + return +end subroutine + +subroutine foo_long(x) + implicit none + integer, parameter :: ii = selected_int_kind(18) + integer(ii), intent(inout) :: x + dimension x(3) + integer(ii), parameter :: three = 3_ii + x(1) = x(1) + x(2) + x(3) * three + return +end subroutine diff --git a/EXE version/main/numpy/f2py/tests/src/parameter/constant_non_compound.f90 b/EXE version/main/numpy/f2py/tests/src/parameter/constant_non_compound.f90 new file mode 100644 index 00000000..62c9a5b9 --- /dev/null +++ b/EXE version/main/numpy/f2py/tests/src/parameter/constant_non_compound.f90 @@ -0,0 +1,23 @@ +! Check that parameters are correct intercepted. +! Specifically that types of constants without +! compound kind specs are correctly inferred +! adapted Gibbs iteration code from pymc +! for this test case +subroutine foo_non_compound_int(x) + implicit none + integer, parameter :: ii = selected_int_kind(9) + + integer(ii) maxiterates + parameter (maxiterates=2) + + integer(ii) maxseries + parameter (maxseries=2) + + integer(ii) wasize + parameter (wasize=maxiterates*maxseries) + integer(ii), intent(inout) :: x + dimension x(wasize) + + x(1) = x(1) + x(2) + x(3) + x(4) * wasize + return +end subroutine diff --git a/EXE version/main/numpy/f2py/tests/src/parameter/constant_real.f90 b/EXE version/main/numpy/f2py/tests/src/parameter/constant_real.f90 new file mode 100644 index 00000000..02ac9dd9 --- /dev/null +++ b/EXE version/main/numpy/f2py/tests/src/parameter/constant_real.f90 @@ -0,0 +1,23 @@ +! Check that parameters are correct intercepted. +! Constants with comma separations are commonly +! used, for instance Pi = 3._dp +subroutine foo_single(x) + implicit none + integer, parameter :: rp = selected_real_kind(6) + real(rp), intent(inout) :: x + dimension x(3) + real(rp), parameter :: three = 3._rp + x(1) = x(1) + x(2) + x(3) * three + return +end subroutine + +subroutine foo_double(x) + implicit none + integer, parameter :: rp = selected_real_kind(15) + real(rp), intent(inout) :: x + dimension x(3) + real(rp), parameter :: three = 3._rp + x(1) = x(1) + x(2) + x(3) * three + return +end subroutine + diff --git a/EXE version/main/numpy/f2py/tests/src/regression/inout.f90 b/EXE version/main/numpy/f2py/tests/src/regression/inout.f90 new file mode 100644 index 00000000..80cdad90 --- /dev/null +++ b/EXE version/main/numpy/f2py/tests/src/regression/inout.f90 @@ -0,0 +1,9 @@ +! Check that intent(in out) translates as intent(inout). +! The separation seems to be a common usage. + subroutine foo(x) + implicit none + real(4), intent(in out) :: x + dimension x(3) + x(1) = x(1) + x(2) + x(3) + return + end diff --git a/EXE version/main/numpy/f2py/tests/src/size/foo.f90 b/EXE version/main/numpy/f2py/tests/src/size/foo.f90 new file mode 100644 index 00000000..5b66f8c4 --- /dev/null +++ b/EXE version/main/numpy/f2py/tests/src/size/foo.f90 @@ -0,0 +1,44 @@ + +subroutine foo(a, n, m, b) + implicit none + + real, intent(in) :: a(n, m) + integer, intent(in) :: n, m + real, intent(out) :: b(size(a, 1)) + + integer :: i + + do i = 1, size(b) + b(i) = sum(a(i,:)) + enddo +end subroutine + +subroutine trans(x,y) + implicit none + real, intent(in), dimension(:,:) :: x + real, intent(out), dimension( size(x,2), size(x,1) ) :: y + integer :: N, M, i, j + N = size(x,1) + M = size(x,2) + DO i=1,N + do j=1,M + y(j,i) = x(i,j) + END DO + END DO +end subroutine trans + +subroutine flatten(x,y) + implicit none + real, intent(in), dimension(:,:) :: x + real, intent(out), dimension( size(x) ) :: y + integer :: N, M, i, j, k + N = size(x,1) + M = size(x,2) + k = 1 + DO i=1,N + do j=1,M + y(k) = x(i,j) + k = k + 1 + END DO + END DO +end subroutine flatten diff --git a/EXE version/main/numpy/f2py/tests/src/string/char.f90 b/EXE version/main/numpy/f2py/tests/src/string/char.f90 new file mode 100644 index 00000000..bb7985ce --- /dev/null +++ b/EXE version/main/numpy/f2py/tests/src/string/char.f90 @@ -0,0 +1,29 @@ +MODULE char_test + +CONTAINS + +SUBROUTINE change_strings(strings, n_strs, out_strings) + IMPLICIT NONE + + ! Inputs + INTEGER, INTENT(IN) :: n_strs + CHARACTER, INTENT(IN), DIMENSION(2,n_strs) :: strings + CHARACTER, INTENT(OUT), DIMENSION(2,n_strs) :: out_strings + +!f2py INTEGER, INTENT(IN) :: n_strs +!f2py CHARACTER, INTENT(IN), DIMENSION(2,n_strs) :: strings +!f2py CHARACTER, INTENT(OUT), DIMENSION(2,n_strs) :: strings + + ! Misc. + INTEGER*4 :: j + + + DO j=1, n_strs + out_strings(1,j) = strings(1,j) + out_strings(2,j) = 'A' + END DO + +END SUBROUTINE change_strings + +END MODULE char_test + diff --git a/EXE version/main/numpy/fft/__init__.pyi b/EXE version/main/numpy/fft/__init__.pyi new file mode 100644 index 00000000..3c191a35 --- /dev/null +++ b/EXE version/main/numpy/fft/__init__.pyi @@ -0,0 +1,22 @@ +from typing import Any, List + +__all__: List[str] + +def fft(a, n=..., axis=..., norm=...): ... +def ifft(a, n=..., axis=..., norm=...): ... +def rfft(a, n=..., axis=..., norm=...): ... +def irfft(a, n=..., axis=..., norm=...): ... +def hfft(a, n=..., axis=..., norm=...): ... +def ihfft(a, n=..., axis=..., norm=...): ... +def fftn(a, s=..., axes=..., norm=...): ... +def ifftn(a, s=..., axes=..., norm=...): ... +def rfftn(a, s=..., axes=..., norm=...): ... +def irfftn(a, s=..., axes=..., norm=...): ... +def fft2(a, s=..., axes=..., norm=...): ... +def ifft2(a, s=..., axes=..., norm=...): ... +def rfft2(a, s=..., axes=..., norm=...): ... +def irfft2(a, s=..., axes=..., norm=...): ... +def fftshift(x, axes=...): ... +def ifftshift(x, axes=...): ... +def fftfreq(n, d=...): ... +def rfftfreq(n, d=...): ... diff --git a/EXE version/main/numpy/fft/_pocketfft_internal.cp39-win_amd64.pyd b/EXE version/main/numpy/fft/_pocketfft_internal.cp39-win_amd64.pyd new file mode 100644 index 00000000..c12bfa50 Binary files /dev/null and b/EXE version/main/numpy/fft/_pocketfft_internal.cp39-win_amd64.pyd differ diff --git a/EXE version/main/numpy/lib/__init__.pyi b/EXE version/main/numpy/lib/__init__.pyi new file mode 100644 index 00000000..2904b6a8 --- /dev/null +++ b/EXE version/main/numpy/lib/__init__.pyi @@ -0,0 +1,233 @@ +import math as math +from typing import Any, List + +from numpy import ( + ndenumerate as ndenumerate, + ndindex as ndindex, +) + +from numpy.version import version + +from numpy.lib import ( + format as format, + mixins as mixins, + scimath as scimath, + stride_tricks as stride_stricks, +) + +from numpy.lib._version import ( + NumpyVersion as NumpyVersion, +) + +from numpy.lib.arraypad import ( + pad as pad, +) + +from numpy.lib.arraysetops import ( + ediff1d as ediff1d, + intersect1d as intersect1d, + setxor1d as setxor1d, + union1d as union1d, + setdiff1d as setdiff1d, + unique as unique, + in1d as in1d, + isin as isin, +) + +from numpy.lib.arrayterator import ( + Arrayterator as Arrayterator, +) + +from numpy.lib.function_base import ( + select as select, + piecewise as piecewise, + trim_zeros as trim_zeros, + copy as copy, + iterable as iterable, + percentile as percentile, + diff as diff, + gradient as gradient, + angle as angle, + unwrap as unwrap, + sort_complex as sort_complex, + disp as disp, + flip as flip, + rot90 as rot90, + extract as extract, + place as place, + vectorize as vectorize, + asarray_chkfinite as asarray_chkfinite, + average as average, + bincount as bincount, + digitize as digitize, + cov as cov, + corrcoef as corrcoef, + msort as msort, + median as median, + sinc as sinc, + hamming as hamming, + hanning as hanning, + bartlett as bartlett, + blackman as blackman, + kaiser as kaiser, + trapz as trapz, + i0 as i0, + add_newdoc as add_newdoc, + add_docstring as add_docstring, + meshgrid as meshgrid, + delete as delete, + insert as insert, + append as append, + interp as interp, + add_newdoc_ufunc as add_newdoc_ufunc, + quantile as quantile, +) + +from numpy.lib.index_tricks import ( + ravel_multi_index as ravel_multi_index, + unravel_index as unravel_index, + mgrid as mgrid, + ogrid as ogrid, + r_ as r_, + c_ as c_, + s_ as s_, + index_exp as index_exp, + ix_ as ix_, + fill_diagonal as fill_diagonal, + diag_indices as diag_indices, + diag_indices_from as diag_indices_from, +) + +from numpy.lib.nanfunctions import ( + nansum as nansum, + nanmax as nanmax, + nanmin as nanmin, + nanargmax as nanargmax, + nanargmin as nanargmin, + nanmean as nanmean, + nanmedian as nanmedian, + nanpercentile as nanpercentile, + nanvar as nanvar, + nanstd as nanstd, + nanprod as nanprod, + nancumsum as nancumsum, + nancumprod as nancumprod, + nanquantile as nanquantile, +) + +from numpy.lib.npyio import ( + savetxt as savetxt, + loadtxt as loadtxt, + genfromtxt as genfromtxt, + recfromtxt as recfromtxt, + recfromcsv as recfromcsv, + load as load, + loads as loads, + save as save, + savez as savez, + savez_compressed as savez_compressed, + packbits as packbits, + unpackbits as unpackbits, + fromregex as fromregex, + DataSource as DataSource, +) + +from numpy.lib.polynomial import ( + poly as poly, + roots as roots, + polyint as polyint, + polyder as polyder, + polyadd as polyadd, + polysub as polysub, + polymul as polymul, + polydiv as polydiv, + polyval as polyval, + polyfit as polyfit, + RankWarning as RankWarning, + poly1d as poly1d, +) + +from numpy.lib.shape_base import ( + column_stack as column_stack, + row_stack as row_stack, + dstack as dstack, + array_split as array_split, + split as split, + hsplit as hsplit, + vsplit as vsplit, + dsplit as dsplit, + apply_over_axes as apply_over_axes, + expand_dims as expand_dims, + apply_along_axis as apply_along_axis, + kron as kron, + tile as tile, + get_array_wrap as get_array_wrap, + take_along_axis as take_along_axis, + put_along_axis as put_along_axis, +) + +from numpy.lib.stride_tricks import ( + broadcast_to as broadcast_to, + broadcast_arrays as broadcast_arrays, + broadcast_shapes as broadcast_shapes, +) + +from numpy.lib.twodim_base import ( + diag as diag, + diagflat as diagflat, + eye as eye, + fliplr as fliplr, + flipud as flipud, + tri as tri, + triu as triu, + tril as tril, + vander as vander, + histogram2d as histogram2d, + mask_indices as mask_indices, + tril_indices as tril_indices, + tril_indices_from as tril_indices_from, + triu_indices as triu_indices, + triu_indices_from as triu_indices_from, +) + +from numpy.lib.type_check import ( + mintypecode as mintypecode, + asfarray as asfarray, + real as real, + imag as imag, + iscomplex as iscomplex, + isreal as isreal, + iscomplexobj as iscomplexobj, + isrealobj as isrealobj, + nan_to_num as nan_to_num, + real_if_close as real_if_close, + typename as typename, + common_type as common_type, +) + +from numpy.lib.ufunclike import ( + fix as fix, + isposinf as isposinf, + isneginf as isneginf, +) + +from numpy.lib.utils import ( + issubclass_ as issubclass_, + issubsctype as issubsctype, + issubdtype as issubdtype, + deprecate as deprecate, + deprecate_with_doc as deprecate_with_doc, + get_include as get_include, + info as info, + source as source, + who as who, + lookfor as lookfor, + byte_bounds as byte_bounds, + safe_eval as safe_eval, +) + +__all__: List[str] + +__version__ = version +emath = scimath +tracemalloc_domain: int diff --git a/EXE version/main/numpy/lib/_version.pyi b/EXE version/main/numpy/lib/_version.pyi new file mode 100644 index 00000000..3581d639 --- /dev/null +++ b/EXE version/main/numpy/lib/_version.pyi @@ -0,0 +1,19 @@ +from typing import Union, List + +__all__: List[str] + +class NumpyVersion: + vstring: str + version: str + major: int + minor: int + bugfix: int + pre_release: str + is_devversion: bool + def __init__(self, vstring: str) -> None: ... + def __lt__(self, other: Union[str, NumpyVersion]) -> bool: ... + def __le__(self, other: Union[str, NumpyVersion]) -> bool: ... + def __eq__(self, other: Union[str, NumpyVersion]) -> bool: ... # type: ignore[override] + def __ne__(self, other: Union[str, NumpyVersion]) -> bool: ... # type: ignore[override] + def __gt__(self, other: Union[str, NumpyVersion]) -> bool: ... + def __ge__(self, other: Union[str, NumpyVersion]) -> bool: ... diff --git a/EXE version/main/numpy/lib/arraypad.pyi b/EXE version/main/numpy/lib/arraypad.pyi new file mode 100644 index 00000000..64e3e133 --- /dev/null +++ b/EXE version/main/numpy/lib/arraypad.pyi @@ -0,0 +1,5 @@ +from typing import List + +__all__: List[str] + +def pad(array, pad_width, mode=..., **kwargs): ... diff --git a/EXE version/main/numpy/lib/arraysetops.pyi b/EXE version/main/numpy/lib/arraysetops.pyi new file mode 100644 index 00000000..029aa147 --- /dev/null +++ b/EXE version/main/numpy/lib/arraysetops.pyi @@ -0,0 +1,12 @@ +from typing import List + +__all__: List[str] + +def ediff1d(ary, to_end=..., to_begin=...): ... +def unique(ar, return_index=..., return_inverse=..., return_counts=..., axis=...): ... +def intersect1d(ar1, ar2, assume_unique=..., return_indices=...): ... +def setxor1d(ar1, ar2, assume_unique=...): ... +def in1d(ar1, ar2, assume_unique=..., invert=...): ... +def isin(element, test_elements, assume_unique=..., invert=...): ... +def union1d(ar1, ar2): ... +def setdiff1d(ar1, ar2, assume_unique=...): ... diff --git a/EXE version/main/numpy/lib/arrayterator.pyi b/EXE version/main/numpy/lib/arrayterator.pyi new file mode 100644 index 00000000..39d6fd84 --- /dev/null +++ b/EXE version/main/numpy/lib/arrayterator.pyi @@ -0,0 +1,53 @@ +import sys +from typing import ( + List, + Any, + TypeVar, + Generator, + List, + Union, + Tuple, + overload, +) + +from numpy import ndarray, dtype, generic +from numpy.typing import DTypeLike + +# TODO: Set a shape bound once we've got proper shape support +_Shape = TypeVar("_Shape", bound=Any) +_DType = TypeVar("_DType", bound=dtype[Any]) +_ScalarType = TypeVar("_ScalarType", bound=generic) + +_Index = Union[ + Union[ellipsis, int, slice], + Tuple[Union[ellipsis, int, slice], ...], +] + +__all__: List[str] + +# NOTE: In reality `Arrayterator` does not actually inherit from `ndarray`, +# but its ``__getattr__` method does wrap around the former and thus has +# access to all its methods + +class Arrayterator(ndarray[_Shape, _DType]): + var: ndarray[_Shape, _DType] # type: ignore[assignment] + buf_size: None | int + start: List[int] + stop: List[int] + step: List[int] + + @property # type: ignore[misc] + def shape(self) -> Tuple[int, ...]: ... + @property + def flat( # type: ignore[override] + self: ndarray[Any, dtype[_ScalarType]] + ) -> Generator[_ScalarType, None, None]: ... + def __init__( + self, var: ndarray[_Shape, _DType], buf_size: None | int = ... + ) -> None: ... + @overload + def __array__(self, dtype: None = ...) -> ndarray[Any, _DType]: ... + @overload + def __array__(self, dtype: DTypeLike) -> ndarray[Any, dtype[Any]]: ... + def __getitem__(self, index: _Index) -> Arrayterator[Any, _DType]: ... + def __iter__(self) -> Generator[ndarray[Any, _DType], None, None]: ... diff --git a/EXE version/main/numpy/lib/format.pyi b/EXE version/main/numpy/lib/format.pyi new file mode 100644 index 00000000..4c44d57b --- /dev/null +++ b/EXE version/main/numpy/lib/format.pyi @@ -0,0 +1,28 @@ +import sys +from typing import Any, List, Set + +if sys.version_info >= (3, 8): + from typing import Literal, Final +else: + from typing_extensions import Literal, Final + +__all__: List[str] + +EXPECTED_KEYS: Final[Set[str]] +MAGIC_PREFIX: Final[bytes] +MAGIC_LEN: Literal[8] +ARRAY_ALIGN: Literal[64] +BUFFER_SIZE: Literal[262144] # 2**18 + +def magic(major, minor): ... +def read_magic(fp): ... +def dtype_to_descr(dtype): ... +def descr_to_dtype(descr): ... +def header_data_from_array_1_0(array): ... +def write_array_header_1_0(fp, d): ... +def write_array_header_2_0(fp, d): ... +def read_array_header_1_0(fp): ... +def read_array_header_2_0(fp): ... +def write_array(fp, array, version=..., allow_pickle=..., pickle_kwargs=...): ... +def read_array(fp, allow_pickle=..., pickle_kwargs=...): ... +def open_memmap(filename, mode=..., dtype=..., shape=..., fortran_order=..., version=...): ... diff --git a/EXE version/main/numpy/lib/function_base.pyi b/EXE version/main/numpy/lib/function_base.pyi new file mode 100644 index 00000000..69c615c9 --- /dev/null +++ b/EXE version/main/numpy/lib/function_base.pyi @@ -0,0 +1,57 @@ +from typing import List + +from numpy import ( + vectorize as vectorize, +) + +from numpy.core.function_base import ( + add_newdoc as add_newdoc, +) + +from numpy.core.multiarray import ( + add_docstring as add_docstring, + bincount as bincount, +) +from numpy.core.umath import _add_newdoc_ufunc + +__all__: List[str] + +add_newdoc_ufunc = _add_newdoc_ufunc + +def rot90(m, k=..., axes = ...): ... +def flip(m, axis=...): ... +def iterable(y): ... +def average(a, axis=..., weights=..., returned=...): ... +def asarray_chkfinite(a, dtype=..., order=...): ... +def piecewise(x, condlist, funclist, *args, **kw): ... +def select(condlist, choicelist, default=...): ... +def copy(a, order=..., subok=...): ... +def gradient(f, *varargs, axis=..., edge_order=...): ... +def diff(a, n=..., axis=..., prepend = ..., append = ...): ... +def interp(x, xp, fp, left=..., right=..., period=...): ... +def angle(z, deg=...): ... +def unwrap(p, discont = ..., axis=..., *, period=...): ... +def sort_complex(a): ... +def trim_zeros(filt, trim=...): ... +def extract(condition, arr): ... +def place(arr, mask, vals): ... +def disp(mesg, device=..., linefeed=...): ... +def cov(m, y=..., rowvar=..., bias=..., ddof=..., fweights=..., aweights=..., *, dtype=...): ... +def corrcoef(x, y=..., rowvar=..., bias = ..., ddof = ..., *, dtype=...): ... +def blackman(M): ... +def bartlett(M): ... +def hanning(M): ... +def hamming(M): ... +def i0(x): ... +def kaiser(M, beta): ... +def sinc(x): ... +def msort(a): ... +def median(a, axis=..., out=..., overwrite_input=..., keepdims=...): ... +def percentile(a, q, axis=..., out=..., overwrite_input=..., interpolation=..., keepdims=...): ... +def quantile(a, q, axis=..., out=..., overwrite_input=..., interpolation=..., keepdims=...): ... +def trapz(y, x=..., dx=..., axis=...): ... +def meshgrid(*xi, copy=..., sparse=..., indexing=...): ... +def delete(arr, obj, axis=...): ... +def insert(arr, obj, values, axis=...): ... +def append(arr, values, axis=...): ... +def digitize(x, bins, right=...): ... diff --git a/EXE version/main/numpy/lib/histograms.pyi b/EXE version/main/numpy/lib/histograms.pyi new file mode 100644 index 00000000..25a33e3a --- /dev/null +++ b/EXE version/main/numpy/lib/histograms.pyi @@ -0,0 +1,7 @@ +from typing import List + +__all__: List[str] + +def histogram_bin_edges(a, bins=..., range=..., weights=...): ... +def histogram(a, bins=..., range=..., normed=..., weights=..., density=...): ... +def histogramdd(sample, bins=..., range=..., normed=..., weights=..., density=...): ... diff --git a/EXE version/main/numpy/lib/index_tricks.pyi b/EXE version/main/numpy/lib/index_tricks.pyi new file mode 100644 index 00000000..a3bfef6b --- /dev/null +++ b/EXE version/main/numpy/lib/index_tricks.pyi @@ -0,0 +1,194 @@ +import sys +from typing import ( + Any, + Tuple, + TypeVar, + Generic, + overload, + List, + Union, + Sequence, +) + +from numpy import ( + # Circumvent a naming conflict with `AxisConcatenator.matrix` + matrix as _Matrix, + ndenumerate as ndenumerate, + ndindex as ndindex, + ndarray, + dtype, + integer, + str_, + bytes_, + bool_, + int_, + float_, + complex_, + intp, + _OrderCF, + _ModeKind, +) +from numpy.typing import ( + # Arrays + ArrayLike, + _NestedSequence, + _RecursiveSequence, + NDArray, + _ArrayLikeInt, + + # DTypes + DTypeLike, + _SupportsDType, + + # Shapes + _ShapeLike, +) + +if sys.version_info >= (3, 8): + from typing import Literal, SupportsIndex +else: + from typing_extensions import Literal, SupportsIndex + +_T = TypeVar("_T") +_DType = TypeVar("_DType", bound=dtype[Any]) +_BoolType = TypeVar("_BoolType", Literal[True], Literal[False]) +_TupType = TypeVar("_TupType", bound=Tuple[Any, ...]) +_ArrayType = TypeVar("_ArrayType", bound=ndarray[Any, Any]) + +__all__: List[str] + +@overload +def unravel_index( # type: ignore[misc] + indices: Union[int, integer[Any]], + shape: _ShapeLike, + order: _OrderCF = ... +) -> Tuple[intp, ...]: ... +@overload +def unravel_index( + indices: _ArrayLikeInt, + shape: _ShapeLike, + order: _OrderCF = ... +) -> Tuple[NDArray[intp], ...]: ... + +@overload +def ravel_multi_index( # type: ignore[misc] + multi_index: Sequence[Union[int, integer[Any]]], + dims: _ShapeLike, + mode: Union[_ModeKind, Tuple[_ModeKind, ...]] = ..., + order: _OrderCF = ... +) -> intp: ... +@overload +def ravel_multi_index( + multi_index: Sequence[_ArrayLikeInt], + dims: _ShapeLike, + mode: Union[_ModeKind, Tuple[_ModeKind, ...]] = ..., + order: _OrderCF = ... +) -> NDArray[intp]: ... + +@overload +def ix_(*args: _NestedSequence[_SupportsDType[_DType]]) -> Tuple[ndarray[Any, _DType], ...]: ... +@overload +def ix_(*args: _NestedSequence[str]) -> Tuple[NDArray[str_], ...]: ... +@overload +def ix_(*args: _NestedSequence[bytes]) -> Tuple[NDArray[bytes_], ...]: ... +@overload +def ix_(*args: _NestedSequence[bool]) -> Tuple[NDArray[bool_], ...]: ... +@overload +def ix_(*args: _NestedSequence[int]) -> Tuple[NDArray[int_], ...]: ... +@overload +def ix_(*args: _NestedSequence[float]) -> Tuple[NDArray[float_], ...]: ... +@overload +def ix_(*args: _NestedSequence[complex]) -> Tuple[NDArray[complex_], ...]: ... +@overload +def ix_(*args: _RecursiveSequence) -> Tuple[NDArray[Any], ...]: ... + +class nd_grid(Generic[_BoolType]): + sparse: _BoolType + def __init__(self, sparse: _BoolType = ...) -> None: ... + @overload + def __getitem__( + self: nd_grid[Literal[False]], + key: Union[slice, Sequence[slice]], + ) -> NDArray[Any]: ... + @overload + def __getitem__( + self: nd_grid[Literal[True]], + key: Union[slice, Sequence[slice]], + ) -> List[NDArray[Any]]: ... + +class MGridClass(nd_grid[Literal[False]]): + def __init__(self) -> None: ... + +mgrid: MGridClass + +class OGridClass(nd_grid[Literal[True]]): + def __init__(self) -> None: ... + +ogrid: OGridClass + +class AxisConcatenator: + axis: int + matrix: bool + ndmin: int + trans1d: int + def __init__( + self, + axis: int = ..., + matrix: bool = ..., + ndmin: int = ..., + trans1d: int = ..., + ) -> None: ... + @staticmethod + @overload + def concatenate( # type: ignore[misc] + *a: ArrayLike, axis: SupportsIndex = ..., out: None = ... + ) -> NDArray[Any]: ... + @staticmethod + @overload + def concatenate( + *a: ArrayLike, axis: SupportsIndex = ..., out: _ArrayType = ... + ) -> _ArrayType: ... + @staticmethod + def makemat( + data: ArrayLike, dtype: DTypeLike = ..., copy: bool = ... + ) -> _Matrix: ... + + # TODO: Sort out this `__getitem__` method + def __getitem__(self, key: Any) -> Any: ... + +class RClass(AxisConcatenator): + axis: Literal[0] + matrix: Literal[False] + ndmin: Literal[1] + trans1d: Literal[-1] + def __init__(self) -> None: ... + +r_: RClass + +class CClass(AxisConcatenator): + axis: Literal[-1] + matrix: Literal[False] + ndmin: Literal[2] + trans1d: Literal[0] + def __init__(self) -> None: ... + +c_: CClass + +class IndexExpression(Generic[_BoolType]): + maketuple: _BoolType + def __init__(self, maketuple: _BoolType) -> None: ... + @overload + def __getitem__(self, item: _TupType) -> _TupType: ... # type: ignore[misc] + @overload + def __getitem__(self: IndexExpression[Literal[True]], item: _T) -> Tuple[_T]: ... + @overload + def __getitem__(self: IndexExpression[Literal[False]], item: _T) -> _T: ... + +index_exp: IndexExpression[Literal[True]] +s_: IndexExpression[Literal[False]] + +def fill_diagonal(a: ndarray[Any, Any], val: Any, wrap: bool = ...) -> None: ... +def diag_indices(n: int, ndim: int = ...) -> Tuple[NDArray[int_], ...]: ... +def diag_indices_from(arr: ArrayLike) -> Tuple[NDArray[int_], ...]: ... + +# NOTE: see `numpy/__init__.pyi` for `ndenumerate` and `ndindex` diff --git a/EXE version/main/numpy/lib/mixins.pyi b/EXE version/main/numpy/lib/mixins.pyi new file mode 100644 index 00000000..f137bb5b --- /dev/null +++ b/EXE version/main/numpy/lib/mixins.pyi @@ -0,0 +1,62 @@ +from typing import List +from abc import ABCMeta, abstractmethod + +__all__: List[str] + +# NOTE: `NDArrayOperatorsMixin` is not formally an abstract baseclass, +# even though it's reliant on subclasses implementing `__array_ufunc__` + +class NDArrayOperatorsMixin(metaclass=ABCMeta): + @abstractmethod + def __array_ufunc__(self, ufunc, method, *inputs, **kwargs): ... + def __lt__(self, other): ... + def __le__(self, other): ... + def __eq__(self, other): ... + def __ne__(self, other): ... + def __gt__(self, other): ... + def __ge__(self, other): ... + def __add__(self, other): ... + def __radd__(self, other): ... + def __iadd__(self, other): ... + def __sub__(self, other): ... + def __rsub__(self, other): ... + def __isub__(self, other): ... + def __mul__(self, other): ... + def __rmul__(self, other): ... + def __imul__(self, other): ... + def __matmul__(self, other): ... + def __rmatmul__(self, other): ... + def __imatmul__(self, other): ... + def __truediv__(self, other): ... + def __rtruediv__(self, other): ... + def __itruediv__(self, other): ... + def __floordiv__(self, other): ... + def __rfloordiv__(self, other): ... + def __ifloordiv__(self, other): ... + def __mod__(self, other): ... + def __rmod__(self, other): ... + def __imod__(self, other): ... + def __divmod__(self, other): ... + def __rdivmod__(self, other): ... + def __pow__(self, other): ... + def __rpow__(self, other): ... + def __ipow__(self, other): ... + def __lshift__(self, other): ... + def __rlshift__(self, other): ... + def __ilshift__(self, other): ... + def __rshift__(self, other): ... + def __rrshift__(self, other): ... + def __irshift__(self, other): ... + def __and__(self, other): ... + def __rand__(self, other): ... + def __iand__(self, other): ... + def __xor__(self, other): ... + def __rxor__(self, other): ... + def __ixor__(self, other): ... + def __or__(self, other): ... + def __ror__(self, other): ... + def __ior__(self, other): ... + def __neg__(self): ... + def __pos__(self): ... + def __abs__(self): ... + def __invert__(self): ... diff --git a/EXE version/main/numpy/lib/nanfunctions.pyi b/EXE version/main/numpy/lib/nanfunctions.pyi new file mode 100644 index 00000000..447770a5 --- /dev/null +++ b/EXE version/main/numpy/lib/nanfunctions.pyi @@ -0,0 +1,54 @@ +from typing import List + +__all__: List[str] + +def nanmin(a, axis=..., out=..., keepdims=...): ... +def nanmax(a, axis=..., out=..., keepdims=...): ... +def nanargmin(a, axis=...): ... +def nanargmax(a, axis=...): ... +def nansum(a, axis=..., dtype=..., out=..., keepdims=...): ... +def nanprod(a, axis=..., dtype=..., out=..., keepdims=...): ... +def nancumsum(a, axis=..., dtype=..., out=...): ... +def nancumprod(a, axis=..., dtype=..., out=...): ... +def nanmean(a, axis=..., dtype=..., out=..., keepdims=...): ... +def nanmedian( + a, + axis=..., + out=..., + overwrite_input=..., + keepdims=..., +): ... +def nanpercentile( + a, + q, + axis=..., + out=..., + overwrite_input=..., + interpolation=..., + keepdims=..., +): ... +def nanquantile( + a, + q, + axis=..., + out=..., + overwrite_input=..., + interpolation=..., + keepdims=..., +): ... +def nanvar( + a, + axis=..., + dtype=..., + out=..., + ddof=..., + keepdims=..., +): ... +def nanstd( + a, + axis=..., + dtype=..., + out=..., + ddof=..., + keepdims=..., +): ... diff --git a/EXE version/main/numpy/lib/npyio.pyi b/EXE version/main/numpy/lib/npyio.pyi new file mode 100644 index 00000000..50835792 --- /dev/null +++ b/EXE version/main/numpy/lib/npyio.pyi @@ -0,0 +1,104 @@ +from typing import Mapping, List, Any + +from numpy import ( + DataSource as DataSource, +) + +from numpy.core.multiarray import ( + packbits as packbits, + unpackbits as unpackbits, +) + +__all__: List[str] + +def loads(*args, **kwargs): ... + +class BagObj: + def __init__(self, obj): ... + def __getattribute__(self, key): ... + def __dir__(self): ... + +def zipfile_factory(file, *args, **kwargs): ... + +class NpzFile(Mapping[Any, Any]): + zip: Any + fid: Any + files: Any + allow_pickle: Any + pickle_kwargs: Any + f: Any + def __init__(self, fid, own_fid=..., allow_pickle=..., pickle_kwargs=...): ... + def __enter__(self): ... + def __exit__(self, exc_type, exc_value, traceback): ... + def close(self): ... + def __del__(self): ... + def __iter__(self): ... + def __len__(self): ... + def __getitem__(self, key): ... + def iteritems(self): ... + def iterkeys(self): ... + +def load(file, mmap_mode=..., allow_pickle=..., fix_imports=..., encoding=...): ... +def save(file, arr, allow_pickle=..., fix_imports=...): ... +def savez(file, *args, **kwds): ... +def savez_compressed(file, *args, **kwds): ... +def loadtxt( + fname, + dtype=..., + comments=..., + delimiter=..., + converters=..., + skiprows=..., + usecols=..., + unpack=..., + ndmin=..., + encoding=..., + max_rows=..., + *, + like=..., +): ... +def savetxt( + fname, + X, + fmt=..., + delimiter=..., + newline=..., + header=..., + footer=..., + comments=..., + encoding=..., +): ... +def fromregex(file, regexp, dtype, encoding=...): ... +def genfromtxt( + fname, + dtype=..., + comments=..., + delimiter=..., + skip_header=..., + skip_footer=..., + converters=..., + missing_values=..., + filling_values=..., + usecols=..., + names=..., + excludelist=..., + deletechars=..., + replace_space=..., + autostrip=..., + case_sensitive=..., + defaultfmt=..., + unpack=..., + usemask=..., + loose=..., + invalid_raise=..., + max_rows=..., + encoding=..., + *, + like=..., +): ... +def recfromtxt(fname, **kwargs): ... +def recfromcsv(fname, **kwargs): ... + +# NOTE: Deprecated +# def ndfromtxt(fname, **kwargs): ... +# def mafromtxt(fname, **kwargs): ... diff --git a/EXE version/main/numpy/lib/polynomial.pyi b/EXE version/main/numpy/lib/polynomial.pyi new file mode 100644 index 00000000..7d38658d --- /dev/null +++ b/EXE version/main/numpy/lib/polynomial.pyi @@ -0,0 +1,19 @@ +from typing import List + +from numpy import ( + RankWarning as RankWarning, + poly1d as poly1d, +) + +__all__: List[str] + +def poly(seq_of_zeros): ... +def roots(p): ... +def polyint(p, m=..., k=...): ... +def polyder(p, m=...): ... +def polyfit(x, y, deg, rcond=..., full=..., w=..., cov=...): ... +def polyval(p, x): ... +def polyadd(a1, a2): ... +def polysub(a1, a2): ... +def polymul(a1, a2): ... +def polydiv(u, v): ... diff --git a/EXE version/main/numpy/lib/scimath.pyi b/EXE version/main/numpy/lib/scimath.pyi new file mode 100644 index 00000000..d0d4af41 --- /dev/null +++ b/EXE version/main/numpy/lib/scimath.pyi @@ -0,0 +1,13 @@ +from typing import List + +__all__: List[str] + +def sqrt(x): ... +def log(x): ... +def log10(x): ... +def logn(n, x): ... +def log2(x): ... +def power(x, p): ... +def arccos(x): ... +def arcsin(x): ... +def arctanh(x): ... diff --git a/EXE version/main/numpy/lib/shape_base.pyi b/EXE version/main/numpy/lib/shape_base.pyi new file mode 100644 index 00000000..09edbcb6 --- /dev/null +++ b/EXE version/main/numpy/lib/shape_base.pyi @@ -0,0 +1,24 @@ +from typing import List + +from numpy.core.shape_base import vstack + +__all__: List[str] + +row_stack = vstack + +def take_along_axis(arr, indices, axis): ... +def put_along_axis(arr, indices, values, axis): ... +def apply_along_axis(func1d, axis, arr, *args, **kwargs): ... +def apply_over_axes(func, a, axes): ... +def expand_dims(a, axis): ... +def column_stack(tup): ... +def dstack(tup): ... +def array_split(ary, indices_or_sections, axis=...): ... +def split(ary, indices_or_sections, axis=...): ... +def hsplit(ary, indices_or_sections): ... +def vsplit(ary, indices_or_sections): ... +def dsplit(ary, indices_or_sections): ... +def get_array_prepare(*args): ... +def get_array_wrap(*args): ... +def kron(a, b): ... +def tile(A, reps): ... diff --git a/EXE version/main/numpy/lib/stride_tricks.pyi b/EXE version/main/numpy/lib/stride_tricks.pyi new file mode 100644 index 00000000..d2e744b5 --- /dev/null +++ b/EXE version/main/numpy/lib/stride_tricks.pyi @@ -0,0 +1,16 @@ +from typing import Any, List + +from numpy.typing import _ShapeLike, _Shape + +__all__: List[str] + +class DummyArray: + __array_interface__: Any + base: Any + def __init__(self, interface, base=...): ... + +def as_strided(x, shape=..., strides=..., subok=..., writeable=...): ... +def sliding_window_view(x, window_shape, axis=..., *, subok=..., writeable=...): ... +def broadcast_to(array, shape, subok=...): ... +def broadcast_shapes(*args: _ShapeLike) -> _Shape: ... +def broadcast_arrays(*args, subok=...): ... diff --git a/EXE version/main/numpy/lib/tests/data/py2-objarr.npy b/EXE version/main/numpy/lib/tests/data/py2-objarr.npy new file mode 100644 index 00000000..12936c92 Binary files /dev/null and b/EXE version/main/numpy/lib/tests/data/py2-objarr.npy differ diff --git a/EXE version/main/numpy/lib/tests/data/py2-objarr.npz b/EXE version/main/numpy/lib/tests/data/py2-objarr.npz new file mode 100644 index 00000000..68a3b53a Binary files /dev/null and b/EXE version/main/numpy/lib/tests/data/py2-objarr.npz differ diff --git a/EXE version/main/numpy/lib/tests/data/py3-objarr.npy b/EXE version/main/numpy/lib/tests/data/py3-objarr.npy new file mode 100644 index 00000000..6776074b Binary files /dev/null and b/EXE version/main/numpy/lib/tests/data/py3-objarr.npy differ diff --git a/EXE version/main/numpy/lib/tests/data/py3-objarr.npz b/EXE version/main/numpy/lib/tests/data/py3-objarr.npz new file mode 100644 index 00000000..05eac0b7 Binary files /dev/null and b/EXE version/main/numpy/lib/tests/data/py3-objarr.npz differ diff --git a/EXE version/main/numpy/lib/tests/data/python3.npy b/EXE version/main/numpy/lib/tests/data/python3.npy new file mode 100644 index 00000000..7c6997dd Binary files /dev/null and b/EXE version/main/numpy/lib/tests/data/python3.npy differ diff --git a/EXE version/main/numpy/lib/tests/data/win64python2.npy b/EXE version/main/numpy/lib/tests/data/win64python2.npy new file mode 100644 index 00000000..d9bc36af Binary files /dev/null and b/EXE version/main/numpy/lib/tests/data/win64python2.npy differ diff --git a/EXE version/main/numpy/lib/twodim_base.pyi b/EXE version/main/numpy/lib/twodim_base.pyi new file mode 100644 index 00000000..79b9511b --- /dev/null +++ b/EXE version/main/numpy/lib/twodim_base.pyi @@ -0,0 +1,32 @@ +from typing import List, Optional, Any + +from numpy import ndarray, _OrderCF +from numpy.typing import ArrayLike, DTypeLike + +__all__: List[str] + +def fliplr(m): ... +def flipud(m): ... + +def eye( + N: int, + M: Optional[int] = ..., + k: int = ..., + dtype: DTypeLike = ..., + order: _OrderCF = ..., + *, + like: Optional[ArrayLike] = ... +) -> ndarray[Any, Any]: ... + +def diag(v, k=...): ... +def diagflat(v, k=...): ... +def tri(N, M=..., k=..., dtype = ..., *, like=...): ... +def tril(m, k=...): ... +def triu(m, k=...): ... +def vander(x, N=..., increasing=...): ... +def histogram2d(x, y, bins=..., range=..., normed=..., weights=..., density=...): ... +def mask_indices(n, mask_func, k=...): ... +def tril_indices(n, k=..., m=...): ... +def tril_indices_from(arr, k=...): ... +def triu_indices(n, k=..., m=...): ... +def triu_indices_from(arr, k=...): ... diff --git a/EXE version/main/numpy/lib/type_check.pyi b/EXE version/main/numpy/lib/type_check.pyi new file mode 100644 index 00000000..7da02bb9 --- /dev/null +++ b/EXE version/main/numpy/lib/type_check.pyi @@ -0,0 +1,19 @@ +from typing import List + +__all__: List[str] + +def mintypecode(typechars, typeset=..., default=...): ... +def asfarray(a, dtype = ...): ... +def real(val): ... +def imag(val): ... +def iscomplex(x): ... +def isreal(x): ... +def iscomplexobj(x): ... +def isrealobj(x): ... +def nan_to_num(x, copy=..., nan=..., posinf=..., neginf=...): ... +def real_if_close(a, tol=...): ... +def typename(char): ... +def common_type(*arrays): ... + +# NOTE: Deprecated +# def asscalar(a): ... diff --git a/EXE version/main/numpy/lib/ufunclike.pyi b/EXE version/main/numpy/lib/ufunclike.pyi new file mode 100644 index 00000000..03f08ebf --- /dev/null +++ b/EXE version/main/numpy/lib/ufunclike.pyi @@ -0,0 +1,66 @@ +from typing import Any, overload, TypeVar, List, Union + +from numpy import floating, bool_, object_, ndarray +from numpy.typing import ( + NDArray, + _FloatLike_co, + _ArrayLikeFloat_co, + _ArrayLikeObject_co, +) + +_ArrayType = TypeVar("_ArrayType", bound=ndarray[Any, Any]) + +__all__: List[str] + +@overload +def fix( # type: ignore[misc] + x: _FloatLike_co, + out: None = ..., +) -> floating[Any]: ... +@overload +def fix( + x: _ArrayLikeFloat_co, + out: None = ..., +) -> NDArray[floating[Any]]: ... +@overload +def fix( + x: _ArrayLikeObject_co, + out: None = ..., +) -> NDArray[object_]: ... +@overload +def fix( + x: Union[_ArrayLikeFloat_co, _ArrayLikeObject_co], + out: _ArrayType, +) -> _ArrayType: ... + +@overload +def isposinf( # type: ignore[misc] + x: _FloatLike_co, + out: None = ..., +) -> bool_: ... +@overload +def isposinf( + x: _ArrayLikeFloat_co, + out: None = ..., +) -> NDArray[bool_]: ... +@overload +def isposinf( + x: _ArrayLikeFloat_co, + out: _ArrayType, +) -> _ArrayType: ... + +@overload +def isneginf( # type: ignore[misc] + x: _FloatLike_co, + out: None = ..., +) -> bool_: ... +@overload +def isneginf( + x: _ArrayLikeFloat_co, + out: None = ..., +) -> NDArray[bool_]: ... +@overload +def isneginf( + x: _ArrayLikeFloat_co, + out: _ArrayType, +) -> _ArrayType: ... diff --git a/EXE version/main/numpy/lib/utils.pyi b/EXE version/main/numpy/lib/utils.pyi new file mode 100644 index 00000000..0518655c --- /dev/null +++ b/EXE version/main/numpy/lib/utils.pyi @@ -0,0 +1,99 @@ +import sys +from ast import AST +from typing import ( + Any, + Callable, + List, + Mapping, + Optional, + overload, + Sequence, + Tuple, + TypeVar, + Union, +) + +from numpy import ndarray, generic + +from numpy.core.numerictypes import ( + issubclass_ as issubclass_, + issubdtype as issubdtype, + issubsctype as issubsctype, +) + +if sys.version_info >= (3, 8): + from typing import Protocol +else: + from typing_extensions import Protocol + +_T_contra = TypeVar("_T_contra", contravariant=True) +_FuncType = TypeVar("_FuncType", bound=Callable[..., Any]) + +# A file-like object opened in `w` mode +class _SupportsWrite(Protocol[_T_contra]): + def write(self, __s: _T_contra) -> Any: ... + +__all__: List[str] + +class _Deprecate: + old_name: Optional[str] + new_name: Optional[str] + message: Optional[str] + def __init__( + self, + old_name: Optional[str] = ..., + new_name: Optional[str] = ..., + message: Optional[str] = ..., + ) -> None: ... + # NOTE: `__call__` can in principle take arbitrary `*args` and `**kwargs`, + # even though they aren't used for anything + def __call__(self, func: _FuncType) -> _FuncType: ... + +def get_include() -> str: ... + +@overload +def deprecate( + *, + old_name: Optional[str] = ..., + new_name: Optional[str] = ..., + message: Optional[str] = ..., +) -> _Deprecate: ... +@overload +def deprecate( + __func: _FuncType, + old_name: Optional[str] = ..., + new_name: Optional[str] = ..., + message: Optional[str] = ..., +) -> _FuncType: ... + +def deprecate_with_doc(msg: Optional[str]) -> _Deprecate: ... + +# NOTE: In practice `byte_bounds` can (potentially) take any object +# implementing the `__array_interface__` protocol. The caveat is +# that certain keys, marked as optional in the spec, must be present for +# `byte_bounds`. This concerns `"strides"` and `"data"`. +def byte_bounds(a: Union[generic, ndarray[Any, Any]]) -> Tuple[int, int]: ... + +def who(vardict: Optional[Mapping[str, ndarray[Any, Any]]] = ...) -> None: ... + +def info( + object: object = ..., + maxwidth: int = ..., + output: Optional[_SupportsWrite[str]] = ..., + toplevel: str = ..., +) -> None: ... + +def source( + object: object, + output: Optional[_SupportsWrite[str]] = ..., +) -> None: ... + +def lookfor( + what: str, + module: Union[None, str, Sequence[str]] = ..., + import_modules: bool = ..., + regenerate: bool = ..., + output: Optional[_SupportsWrite[str]] =..., +) -> None: ... + +def safe_eval(source: Union[str, AST]) -> Any: ... diff --git a/EXE version/main/numpy/linalg/__init__.pyi b/EXE version/main/numpy/linalg/__init__.pyi new file mode 100644 index 00000000..5080019f --- /dev/null +++ b/EXE version/main/numpy/linalg/__init__.pyi @@ -0,0 +1,26 @@ +from typing import Any, List + +__all__: List[str] + +class LinAlgError(Exception): ... + +def tensorsolve(a, b, axes=...): ... +def solve(a, b): ... +def tensorinv(a, ind=...): ... +def inv(a): ... +def matrix_power(a, n): ... +def cholesky(a): ... +def qr(a, mode=...): ... +def eigvals(a): ... +def eigvalsh(a, UPLO=...): ... +def eig(a): ... +def eigh(a, UPLO=...): ... +def svd(a, full_matrices=..., compute_uv=..., hermitian=...): ... +def cond(x, p=...): ... +def matrix_rank(M, tol=..., hermitian=...): ... +def pinv(a, rcond=..., hermitian=...): ... +def slogdet(a): ... +def det(a): ... +def lstsq(a, b, rcond=...): ... +def norm(x, ord=..., axis=..., keepdims=...): ... +def multi_dot(arrays, *, out=...): ... diff --git a/EXE version/main/numpy/linalg/_umath_linalg.cp39-win_amd64.pyd b/EXE version/main/numpy/linalg/_umath_linalg.cp39-win_amd64.pyd new file mode 100644 index 00000000..923cfe02 Binary files /dev/null and b/EXE version/main/numpy/linalg/_umath_linalg.cp39-win_amd64.pyd differ diff --git a/EXE version/main/numpy/linalg/lapack_lite.cp39-win_amd64.pyd b/EXE version/main/numpy/linalg/lapack_lite.cp39-win_amd64.pyd new file mode 100644 index 00000000..9253c8f9 Binary files /dev/null and b/EXE version/main/numpy/linalg/lapack_lite.cp39-win_amd64.pyd differ diff --git a/EXE version/main/numpy/ma/__init__.pyi b/EXE version/main/numpy/ma/__init__.pyi new file mode 100644 index 00000000..a9a833e5 --- /dev/null +++ b/EXE version/main/numpy/ma/__init__.pyi @@ -0,0 +1,232 @@ +from typing import Any, List + +from numpy.ma import extras as extras + +from numpy.ma.core import ( + MAError as MAError, + MaskError as MaskError, + MaskType as MaskType, + MaskedArray as MaskedArray, + abs as abs, + absolute as absolute, + add as add, + all as all, + allclose as allclose, + allequal as allequal, + alltrue as alltrue, + amax as amax, + amin as amin, + angle as angle, + anom as anom, + anomalies as anomalies, + any as any, + append as append, + arange as arange, + arccos as arccos, + arccosh as arccosh, + arcsin as arcsin, + arcsinh as arcsinh, + arctan as arctan, + arctan2 as arctan2, + arctanh as arctanh, + argmax as argmax, + argmin as argmin, + argsort as argsort, + around as around, + array as array, + asanyarray as asanyarray, + asarray as asarray, + bitwise_and as bitwise_and, + bitwise_or as bitwise_or, + bitwise_xor as bitwise_xor, + bool_ as bool_, + ceil as ceil, + choose as choose, + clip as clip, + common_fill_value as common_fill_value, + compress as compress, + compressed as compressed, + concatenate as concatenate, + conjugate as conjugate, + convolve as convolve, + copy as copy, + correlate as correlate, + cos as cos, + cosh as cosh, + count as count, + cumprod as cumprod, + cumsum as cumsum, + default_fill_value as default_fill_value, + diag as diag, + diagonal as diagonal, + diff as diff, + divide as divide, + empty as empty, + empty_like as empty_like, + equal as equal, + exp as exp, + expand_dims as expand_dims, + fabs as fabs, + filled as filled, + fix_invalid as fix_invalid, + flatten_mask as flatten_mask, + flatten_structured_array as flatten_structured_array, + floor as floor, + floor_divide as floor_divide, + fmod as fmod, + frombuffer as frombuffer, + fromflex as fromflex, + fromfunction as fromfunction, + getdata as getdata, + getmask as getmask, + getmaskarray as getmaskarray, + greater as greater, + greater_equal as greater_equal, + harden_mask as harden_mask, + hypot as hypot, + identity as identity, + ids as ids, + indices as indices, + inner as inner, + innerproduct as innerproduct, + isMA as isMA, + isMaskedArray as isMaskedArray, + is_mask as is_mask, + is_masked as is_masked, + isarray as isarray, + left_shift as left_shift, + less as less, + less_equal as less_equal, + log as log, + log10 as log10, + log2 as log2, + logical_and as logical_and, + logical_not as logical_not, + logical_or as logical_or, + logical_xor as logical_xor, + make_mask as make_mask, + make_mask_descr as make_mask_descr, + make_mask_none as make_mask_none, + mask_or as mask_or, + masked as masked, + masked_array as masked_array, + masked_equal as masked_equal, + masked_greater as masked_greater, + masked_greater_equal as masked_greater_equal, + masked_inside as masked_inside, + masked_invalid as masked_invalid, + masked_less as masked_less, + masked_less_equal as masked_less_equal, + masked_not_equal as masked_not_equal, + masked_object as masked_object, + masked_outside as masked_outside, + masked_print_option as masked_print_option, + masked_singleton as masked_singleton, + masked_values as masked_values, + masked_where as masked_where, + max as max, + maximum as maximum, + maximum_fill_value as maximum_fill_value, + mean as mean, + min as min, + minimum as minimum, + minimum_fill_value as minimum_fill_value, + mod as mod, + multiply as multiply, + mvoid as mvoid, + ndim as ndim, + negative as negative, + nomask as nomask, + nonzero as nonzero, + not_equal as not_equal, + ones as ones, + outer as outer, + outerproduct as outerproduct, + power as power, + prod as prod, + product as product, + ptp as ptp, + put as put, + putmask as putmask, + ravel as ravel, + remainder as remainder, + repeat as repeat, + reshape as reshape, + resize as resize, + right_shift as right_shift, + round as round, + round_ as round_, + set_fill_value as set_fill_value, + shape as shape, + sin as sin, + sinh as sinh, + size as size, + soften_mask as soften_mask, + sometrue as sometrue, + sort as sort, + sqrt as sqrt, + squeeze as squeeze, + std as std, + subtract as subtract, + sum as sum, + swapaxes as swapaxes, + take as take, + tan as tan, + tanh as tanh, + trace as trace, + transpose as transpose, + true_divide as true_divide, + var as var, + where as where, + zeros as zeros, +) + +from numpy.ma.extras import ( + apply_along_axis as apply_along_axis, + apply_over_axes as apply_over_axes, + atleast_1d as atleast_1d, + atleast_2d as atleast_2d, + atleast_3d as atleast_3d, + average as average, + clump_masked as clump_masked, + clump_unmasked as clump_unmasked, + column_stack as column_stack, + compress_cols as compress_cols, + compress_nd as compress_nd, + compress_rowcols as compress_rowcols, + compress_rows as compress_rows, + count_masked as count_masked, + corrcoef as corrcoef, + cov as cov, + diagflat as diagflat, + dot as dot, + dstack as dstack, + ediff1d as ediff1d, + flatnotmasked_contiguous as flatnotmasked_contiguous, + flatnotmasked_edges as flatnotmasked_edges, + hsplit as hsplit, + hstack as hstack, + isin as isin, + in1d as in1d, + intersect1d as intersect1d, + mask_cols as mask_cols, + mask_rowcols as mask_rowcols, + mask_rows as mask_rows, + masked_all as masked_all, + masked_all_like as masked_all_like, + median as median, + mr_ as mr_, + notmasked_contiguous as notmasked_contiguous, + notmasked_edges as notmasked_edges, + polyfit as polyfit, + row_stack as row_stack, + setdiff1d as setdiff1d, + setxor1d as setxor1d, + stack as stack, + unique as unique, + union1d as union1d, + vander as vander, + vstack as vstack, +) + +__all__: List[str] diff --git a/EXE version/main/numpy/ma/core.pyi b/EXE version/main/numpy/ma/core.pyi new file mode 100644 index 00000000..e7e3f1f3 --- /dev/null +++ b/EXE version/main/numpy/ma/core.pyi @@ -0,0 +1,468 @@ +from typing import Any, List, TypeVar, Callable +from numpy import ndarray, dtype, float64 + +from numpy import ( + amax as amax, + amin as amin, + bool_ as bool_, + expand_dims as expand_dims, + diff as diff, + clip as clip, + indices as indices, + ones_like as ones_like, + squeeze as squeeze, + zeros_like as zeros_like, +) + +from numpy.lib.function_base import ( + angle as angle, +) + +# TODO: Set the `bound` to something more suitable once we +# have proper shape support +_ShapeType = TypeVar("_ShapeType", bound=Any) +_DType_co = TypeVar("_DType_co", bound=dtype[Any], covariant=True) + +__all__: List[str] + +MaskType = bool_ +nomask: bool_ + +class MaskedArrayFutureWarning(FutureWarning): ... +class MAError(Exception): ... +class MaskError(MAError): ... + +def default_fill_value(obj): ... +def minimum_fill_value(obj): ... +def maximum_fill_value(obj): ... +def set_fill_value(a, fill_value): ... +def common_fill_value(a, b): ... +def filled(a, fill_value=...): ... +def getdata(a, subok=...): ... +get_data = getdata + +def fix_invalid(a, mask=..., copy=..., fill_value=...): ... + +class _MaskedUFunc: + f: Any + __doc__: Any + __name__: Any + def __init__(self, ufunc): ... + +class _MaskedUnaryOperation(_MaskedUFunc): + fill: Any + domain: Any + def __init__(self, mufunc, fill=..., domain=...): ... + def __call__(self, a, *args, **kwargs): ... + +class _MaskedBinaryOperation(_MaskedUFunc): + fillx: Any + filly: Any + def __init__(self, mbfunc, fillx=..., filly=...): ... + def __call__(self, a, b, *args, **kwargs): ... + def reduce(self, target, axis=..., dtype=...): ... + def outer(self, a, b): ... + def accumulate(self, target, axis=...): ... + +class _DomainedBinaryOperation(_MaskedUFunc): + domain: Any + fillx: Any + filly: Any + def __init__(self, dbfunc, domain, fillx=..., filly=...): ... + def __call__(self, a, b, *args, **kwargs): ... + +exp: _MaskedUnaryOperation +conjugate: _MaskedUnaryOperation +sin: _MaskedUnaryOperation +cos: _MaskedUnaryOperation +arctan: _MaskedUnaryOperation +arcsinh: _MaskedUnaryOperation +sinh: _MaskedUnaryOperation +cosh: _MaskedUnaryOperation +tanh: _MaskedUnaryOperation +abs: _MaskedUnaryOperation +absolute: _MaskedUnaryOperation +fabs: _MaskedUnaryOperation +negative: _MaskedUnaryOperation +floor: _MaskedUnaryOperation +ceil: _MaskedUnaryOperation +around: _MaskedUnaryOperation +logical_not: _MaskedUnaryOperation +sqrt: _MaskedUnaryOperation +log: _MaskedUnaryOperation +log2: _MaskedUnaryOperation +log10: _MaskedUnaryOperation +tan: _MaskedUnaryOperation +arcsin: _MaskedUnaryOperation +arccos: _MaskedUnaryOperation +arccosh: _MaskedUnaryOperation +arctanh: _MaskedUnaryOperation + +add: _MaskedBinaryOperation +subtract: _MaskedBinaryOperation +multiply: _MaskedBinaryOperation +arctan2: _MaskedBinaryOperation +equal: _MaskedBinaryOperation +not_equal: _MaskedBinaryOperation +less_equal: _MaskedBinaryOperation +greater_equal: _MaskedBinaryOperation +less: _MaskedBinaryOperation +greater: _MaskedBinaryOperation +logical_and: _MaskedBinaryOperation +alltrue: _MaskedBinaryOperation +logical_or: _MaskedBinaryOperation +sometrue: Callable[..., Any] +logical_xor: _MaskedBinaryOperation +bitwise_and: _MaskedBinaryOperation +bitwise_or: _MaskedBinaryOperation +bitwise_xor: _MaskedBinaryOperation +hypot: _MaskedBinaryOperation +divide: _MaskedBinaryOperation +true_divide: _MaskedBinaryOperation +floor_divide: _MaskedBinaryOperation +remainder: _MaskedBinaryOperation +fmod: _MaskedBinaryOperation +mod: _MaskedBinaryOperation + +def make_mask_descr(ndtype): ... +def getmask(a): ... +get_mask = getmask + +def getmaskarray(arr): ... +def is_mask(m): ... +def make_mask(m, copy=..., shrink=..., dtype=...): ... +def make_mask_none(newshape, dtype=...): ... +def mask_or(m1, m2, copy=..., shrink=...): ... +def flatten_mask(mask): ... +def masked_where(condition, a, copy=...): ... +def masked_greater(x, value, copy=...): ... +def masked_greater_equal(x, value, copy=...): ... +def masked_less(x, value, copy=...): ... +def masked_less_equal(x, value, copy=...): ... +def masked_not_equal(x, value, copy=...): ... +def masked_equal(x, value, copy=...): ... +def masked_inside(x, v1, v2, copy=...): ... +def masked_outside(x, v1, v2, copy=...): ... +def masked_object(x, value, copy=..., shrink=...): ... +def masked_values(x, value, rtol=..., atol=..., copy=..., shrink=...): ... +def masked_invalid(a, copy=...): ... + +class _MaskedPrintOption: + def __init__(self, display): ... + def display(self): ... + def set_display(self, s): ... + def enabled(self): ... + def enable(self, shrink=...): ... + +masked_print_option: _MaskedPrintOption + +def flatten_structured_array(a): ... + +class MaskedIterator: + ma: Any + dataiter: Any + maskiter: Any + def __init__(self, ma): ... + def __iter__(self): ... + def __getitem__(self, indx): ... + def __setitem__(self, index, value): ... + def __next__(self): ... + +class MaskedArray(ndarray[_ShapeType, _DType_co]): + __array_priority__: Any + def __new__(cls, data=..., mask=..., dtype=..., copy=..., subok=..., ndmin=..., fill_value=..., keep_mask=..., hard_mask=..., shrink=..., order=...): ... + def __array_finalize__(self, obj): ... + def __array_wrap__(self, obj, context=...): ... + def view(self, dtype=..., type=..., fill_value=...): ... + def __getitem__(self, indx): ... + def __setitem__(self, indx, value): ... + @property + def dtype(self): ... + @dtype.setter + def dtype(self, dtype): ... + @property + def shape(self): ... + @shape.setter + def shape(self, shape): ... + def __setmask__(self, mask, copy=...): ... + @property + def mask(self): ... + @mask.setter + def mask(self, value): ... + @property + def recordmask(self): ... + @recordmask.setter + def recordmask(self, mask): ... + def harden_mask(self): ... + def soften_mask(self): ... + @property + def hardmask(self): ... + def unshare_mask(self): ... + @property + def sharedmask(self): ... + def shrink_mask(self): ... + @property + def baseclass(self): ... + data: Any + @property + def flat(self): ... + @flat.setter + def flat(self, value): ... + @property + def fill_value(self): ... + @fill_value.setter + def fill_value(self, value=...): ... + get_fill_value: Any + set_fill_value: Any + def filled(self, fill_value=...): ... + def compressed(self): ... + def compress(self, condition, axis=..., out=...): ... + def __eq__(self, other): ... + def __ne__(self, other): ... + def __add__(self, other): ... + def __radd__(self, other): ... + def __sub__(self, other): ... + def __rsub__(self, other): ... + def __mul__(self, other): ... + def __rmul__(self, other): ... + def __div__(self, other): ... + def __truediv__(self, other): ... + def __rtruediv__(self, other): ... + def __floordiv__(self, other): ... + def __rfloordiv__(self, other): ... + def __pow__(self, other): ... + def __rpow__(self, other): ... + def __iadd__(self, other): ... + def __isub__(self, other): ... + def __imul__(self, other): ... + def __idiv__(self, other): ... + def __ifloordiv__(self, other): ... + def __itruediv__(self, other): ... + def __ipow__(self, other): ... + def __float__(self): ... + def __int__(self): ... + @property # type: ignore[misc] + def imag(self): ... + get_imag: Any + @property # type: ignore[misc] + def real(self): ... + get_real: Any + def count(self, axis=..., keepdims=...): ... + def ravel(self, order=...): ... + def reshape(self, *s, **kwargs): ... + def resize(self, newshape, refcheck=..., order=...): ... + def put(self, indices, values, mode=...): ... + def ids(self): ... + def iscontiguous(self): ... + def all(self, axis=..., out=..., keepdims=...): ... + def any(self, axis=..., out=..., keepdims=...): ... + def nonzero(self): ... + def trace(self, offset=..., axis1=..., axis2=..., dtype=..., out=...): ... + def dot(self, b, out=..., strict=...): ... + def sum(self, axis=..., dtype=..., out=..., keepdims=...): ... + def cumsum(self, axis=..., dtype=..., out=...): ... + def prod(self, axis=..., dtype=..., out=..., keepdims=...): ... + product: Any + def cumprod(self, axis=..., dtype=..., out=...): ... + def mean(self, axis=..., dtype=..., out=..., keepdims=...): ... + def anom(self, axis=..., dtype=...): ... + def var(self, axis=..., dtype=..., out=..., ddof=..., keepdims=...): ... + def std(self, axis=..., dtype=..., out=..., ddof=..., keepdims=...): ... + def round(self, decimals=..., out=...): ... + def argsort(self, axis=..., kind=..., order=..., endwith=..., fill_value=...): ... + def argmin(self, axis=..., fill_value=..., out=...): ... + def argmax(self, axis=..., fill_value=..., out=...): ... + def sort(self, axis=..., kind=..., order=..., endwith=..., fill_value=...): ... + def min(self, axis=..., out=..., fill_value=..., keepdims=...): ... + # NOTE: deprecated + # def mini(self, axis=...): ... + # def tostring(self, fill_value=..., order=...): ... + def max(self, axis=..., out=..., fill_value=..., keepdims=...): ... + def ptp(self, axis=..., out=..., fill_value=..., keepdims=...): ... + def partition(self, *args, **kwargs): ... + def argpartition(self, *args, **kwargs): ... + def take(self, indices, axis=..., out=..., mode=...): ... + copy: Any + diagonal: Any + flatten: Any + repeat: Any + squeeze: Any + swapaxes: Any + T: Any + transpose: Any + def tolist(self, fill_value=...): ... + def tobytes(self, fill_value=..., order=...): ... + def tofile(self, fid, sep=..., format=...): ... + def toflex(self): ... + torecords: Any + def __reduce__(self): ... + def __deepcopy__(self, memo=...): ... + +class mvoid(MaskedArray[_ShapeType, _DType_co]): + def __new__( + self, + data, + mask=..., + dtype=..., + fill_value=..., + hardmask=..., + copy=..., + subok=..., + ): ... + def __getitem__(self, indx): ... + def __setitem__(self, indx, value): ... + def __iter__(self): ... + def __len__(self): ... + def filled(self, fill_value=...): ... + def tolist(self): ... + +def isMaskedArray(x): ... +isarray = isMaskedArray +isMA = isMaskedArray + +# 0D float64 array +class MaskedConstant(MaskedArray[Any, dtype[float64]]): + def __new__(cls): ... + __class__: Any + def __array_finalize__(self, obj): ... + def __array_prepare__(self, obj, context=...): ... + def __array_wrap__(self, obj, context=...): ... + def __format__(self, format_spec): ... + def __reduce__(self): ... + def __iop__(self, other): ... + __iadd__: Any + __isub__: Any + __imul__: Any + __ifloordiv__: Any + __itruediv__: Any + __ipow__: Any + def copy(self, *args, **kwargs): ... + def __copy__(self): ... + def __deepcopy__(self, memo): ... + def __setattr__(self, attr, value): ... + +masked: MaskedConstant +masked_singleton: MaskedConstant +masked_array = MaskedArray + +def array( + data, + dtype=..., + copy=..., + order=..., + mask=..., + fill_value=..., + keep_mask=..., + hard_mask=..., + shrink=..., + subok=..., + ndmin=..., +): ... +def is_masked(x): ... + +class _extrema_operation(_MaskedUFunc): + compare: Any + fill_value_func: Any + def __init__(self, ufunc, compare, fill_value): ... + # NOTE: in practice `b` has a default value, but users should + # explicitly provide a value here as the default is deprecated + def __call__(self, a, b): ... + def reduce(self, target, axis=...): ... + def outer(self, a, b): ... + +def min(obj, axis=..., out=..., fill_value=..., keepdims=...): ... +def max(obj, axis=..., out=..., fill_value=..., keepdims=...): ... +def ptp(obj, axis=..., out=..., fill_value=..., keepdims=...): ... + +class _frommethod: + __name__: Any + __doc__: Any + reversed: Any + def __init__(self, methodname, reversed=...): ... + def getdoc(self): ... + def __call__(self, a, *args, **params): ... + +all: _frommethod +anomalies: _frommethod +anom: _frommethod +any: _frommethod +compress: _frommethod +cumprod: _frommethod +cumsum: _frommethod +copy: _frommethod +diagonal: _frommethod +harden_mask: _frommethod +ids: _frommethod +mean: _frommethod +nonzero: _frommethod +prod: _frommethod +product: _frommethod +ravel: _frommethod +repeat: _frommethod +soften_mask: _frommethod +std: _frommethod +sum: _frommethod +swapaxes: _frommethod +trace: _frommethod +var: _frommethod +count: _frommethod +argmin: _frommethod +argmax: _frommethod + +minimum: _extrema_operation +maximum: _extrema_operation + +def take(a, indices, axis=..., out=..., mode=...): ... +def power(a, b, third=...): ... +def argsort(a, axis=..., kind=..., order=..., endwith=..., fill_value=...): ... +def sort(a, axis=..., kind=..., order=..., endwith=..., fill_value=...): ... +def compressed(x): ... +def concatenate(arrays, axis=...): ... +def diag(v, k=...): ... +def left_shift(a, n): ... +def right_shift(a, n): ... +def put(a, indices, values, mode=...): ... +def putmask(a, mask, values): ... +def transpose(a, axes=...): ... +def reshape(a, new_shape, order=...): ... +def resize(x, new_shape): ... +def ndim(obj): ... +def shape(obj): ... +def size(obj, axis=...): ... +def where(condition, x=..., y=...): ... +def choose(indices, choices, out=..., mode=...): ... +def round_(a, decimals=..., out=...): ... +round = round_ + +def inner(a, b): ... +innerproduct = inner + +def outer(a, b): ... +outerproduct = outer + +def correlate(a, v, mode=..., propagate_mask=...): ... +def convolve(a, v, mode=..., propagate_mask=...): ... +def allequal(a, b, fill_value=...): ... +def allclose(a, b, masked_equal=..., rtol=..., atol=...): ... +def asarray(a, dtype=..., order=...): ... +def asanyarray(a, dtype=...): ... +def fromflex(fxarray): ... + +class _convert2ma: + __doc__: Any + def __init__(self, funcname, params=...): ... + def getdoc(self): ... + def __call__(self, *args, **params): ... + +arange: _convert2ma +empty: _convert2ma +empty_like: _convert2ma +frombuffer: _convert2ma +fromfunction: _convert2ma +identity: _convert2ma +ones: _convert2ma +zeros: _convert2ma + +def append(a, b, axis=...): ... +def dot(a, b, strict=..., out=...): ... +def mask_rowcols(a, axis=...): ... diff --git a/EXE version/main/numpy/ma/extras.pyi b/EXE version/main/numpy/ma/extras.pyi new file mode 100644 index 00000000..e58e43ba --- /dev/null +++ b/EXE version/main/numpy/ma/extras.pyi @@ -0,0 +1,84 @@ +from typing import Any, List +from numpy.lib.index_tricks import AxisConcatenator + +from numpy.ma.core import ( + dot as dot, + mask_rowcols as mask_rowcols, +) + +__all__: List[str] + +def count_masked(arr, axis=...): ... +def masked_all(shape, dtype = ...): ... +def masked_all_like(arr): ... + +class _fromnxfunction: + __name__: Any + __doc__: Any + def __init__(self, funcname): ... + def getdoc(self): ... + def __call__(self, *args, **params): ... + +class _fromnxfunction_single(_fromnxfunction): + def __call__(self, x, *args, **params): ... + +class _fromnxfunction_seq(_fromnxfunction): + def __call__(self, x, *args, **params): ... + +class _fromnxfunction_allargs(_fromnxfunction): + def __call__(self, *args, **params): ... + +atleast_1d: _fromnxfunction_allargs +atleast_2d: _fromnxfunction_allargs +atleast_3d: _fromnxfunction_allargs + +vstack: _fromnxfunction_seq +row_stack: _fromnxfunction_seq +hstack: _fromnxfunction_seq +column_stack: _fromnxfunction_seq +dstack: _fromnxfunction_seq +stack: _fromnxfunction_seq + +hsplit: _fromnxfunction_single +diagflat: _fromnxfunction_single + +def apply_along_axis(func1d, axis, arr, *args, **kwargs): ... +def apply_over_axes(func, a, axes): ... +def average(a, axis=..., weights=..., returned=...): ... +def median(a, axis=..., out=..., overwrite_input=..., keepdims=...): ... +def compress_nd(x, axis=...): ... +def compress_rowcols(x, axis=...): ... +def compress_rows(a): ... +def compress_cols(a): ... +def mask_rows(a, axis = ...): ... +def mask_cols(a, axis = ...): ... +def ediff1d(arr, to_end=..., to_begin=...): ... +def unique(ar1, return_index=..., return_inverse=...): ... +def intersect1d(ar1, ar2, assume_unique=...): ... +def setxor1d(ar1, ar2, assume_unique=...): ... +def in1d(ar1, ar2, assume_unique=..., invert=...): ... +def isin(element, test_elements, assume_unique=..., invert=...): ... +def union1d(ar1, ar2): ... +def setdiff1d(ar1, ar2, assume_unique=...): ... +def cov(x, y=..., rowvar=..., bias=..., allow_masked=..., ddof=...): ... +def corrcoef(x, y=..., rowvar=..., bias = ..., allow_masked=..., ddof = ...): ... + +class MAxisConcatenator(AxisConcatenator): + concatenate: Any + @classmethod + def makemat(cls, arr): ... + def __getitem__(self, key): ... + +class mr_class(MAxisConcatenator): + def __init__(self): ... + +mr_: mr_class + +def flatnotmasked_edges(a): ... +def notmasked_edges(a, axis=...): ... +def flatnotmasked_contiguous(a): ... +def notmasked_contiguous(a, axis=...): ... +def clump_unmasked(a): ... +def clump_masked(a): ... +def vander(x, n=...): ... +def polyfit(x, y, deg, rcond=..., full=..., w=..., cov=...): ... diff --git a/EXE version/main/numpy/ma/mrecords.pyi b/EXE version/main/numpy/ma/mrecords.pyi new file mode 100644 index 00000000..92d5afb8 --- /dev/null +++ b/EXE version/main/numpy/ma/mrecords.pyi @@ -0,0 +1,88 @@ +from typing import List, Any, TypeVar + +from numpy import dtype +from numpy.ma import MaskedArray + +__all__: List[str] + +# TODO: Set the `bound` to something more suitable once we +# have proper shape support +_ShapeType = TypeVar("_ShapeType", bound=Any) +_DType_co = TypeVar("_DType_co", bound=dtype[Any], covariant=True) + +class MaskedRecords(MaskedArray[_ShapeType, _DType_co]): + def __new__( + cls, + shape, + dtype=..., + buf=..., + offset=..., + strides=..., + formats=..., + names=..., + titles=..., + byteorder=..., + aligned=..., + mask=..., + hard_mask=..., + fill_value=..., + keep_mask=..., + copy=..., + **options, + ): ... + _mask: Any + _fill_value: Any + @property + def _data(self): ... + @property + def _fieldmask(self): ... + def __array_finalize__(self, obj): ... + def __len__(self): ... + def __getattribute__(self, attr): ... + def __setattr__(self, attr, val): ... + def __getitem__(self, indx): ... + def __setitem__(self, indx, value): ... + def view(self, dtype=..., type=...): ... + def harden_mask(self): ... + def soften_mask(self): ... + def copy(self): ... + def tolist(self, fill_value=...): ... + def __reduce__(self): ... + +mrecarray = MaskedRecords + +def fromarrays( + arraylist, + dtype=..., + shape=..., + formats=..., + names=..., + titles=..., + aligned=..., + byteorder=..., + fill_value=..., +): ... + +def fromrecords( + reclist, + dtype=..., + shape=..., + formats=..., + names=..., + titles=..., + aligned=..., + byteorder=..., + fill_value=..., + mask=..., +): ... + +def fromtextfile( + fname, + delimitor=..., + commentchar=..., + missingchar=..., + varnames=..., + vartypes=..., +): ... + +def addfield(mrecord, newfield, newfieldname=...): ... diff --git a/EXE version/main/numpy/matrixlib/__init__.pyi b/EXE version/main/numpy/matrixlib/__init__.pyi new file mode 100644 index 00000000..e4b5c19a --- /dev/null +++ b/EXE version/main/numpy/matrixlib/__init__.pyi @@ -0,0 +1,11 @@ +from typing import Any, List + +from numpy import ( + matrix as matrix, +) + +__all__: List[str] + +def bmat(obj, ldict=..., gdict=...): ... +def asmatrix(data, dtype=...): ... +mat = asmatrix diff --git a/EXE version/main/numpy/polynomial/__init__.pyi b/EXE version/main/numpy/polynomial/__init__.pyi new file mode 100644 index 00000000..bebedb3a --- /dev/null +++ b/EXE version/main/numpy/polynomial/__init__.pyi @@ -0,0 +1,20 @@ +from typing import List + +from numpy.polynomial import ( + chebyshev as chebyshev, + hermite as hermite, + hermite_e as hermite_e, + laguerre as laguerre, + legendre as legendre, + polynomial as polynomial, +) +from numpy.polynomial.chebyshev import Chebyshev as Chebyshev +from numpy.polynomial.hermite import Hermite as Hermite +from numpy.polynomial.hermite_e import HermiteE as HermiteE +from numpy.polynomial.laguerre import Laguerre as Laguerre +from numpy.polynomial.legendre import Legendre as Legendre +from numpy.polynomial.polynomial import Polynomial as Polynomial + +__all__: List[str] + +def set_default_printstyle(style): ... diff --git a/EXE version/main/numpy/polynomial/_polybase.pyi b/EXE version/main/numpy/polynomial/_polybase.pyi new file mode 100644 index 00000000..c4160146 --- /dev/null +++ b/EXE version/main/numpy/polynomial/_polybase.pyi @@ -0,0 +1,69 @@ +import abc +from typing import Any, List, ClassVar + +__all__: List[str] + +class ABCPolyBase(abc.ABC): + __hash__: ClassVar[None] # type: ignore[assignment] + __array_ufunc__: ClassVar[None] + maxpower: ClassVar[int] + coef: Any + @property + @abc.abstractmethod + def domain(self): ... + @property + @abc.abstractmethod + def window(self): ... + @property + @abc.abstractmethod + def basis_name(self): ... + def has_samecoef(self, other): ... + def has_samedomain(self, other): ... + def has_samewindow(self, other): ... + def has_sametype(self, other): ... + def __init__(self, coef, domain=..., window=...): ... + def __format__(self, fmt_str): ... + def __call__(self, arg): ... + def __iter__(self): ... + def __len__(self): ... + def __neg__(self): ... + def __pos__(self): ... + def __add__(self, other): ... + def __sub__(self, other): ... + def __mul__(self, other): ... + def __truediv__(self, other): ... + def __floordiv__(self, other): ... + def __mod__(self, other): ... + def __divmod__(self, other): ... + def __pow__(self, other): ... + def __radd__(self, other): ... + def __rsub__(self, other): ... + def __rmul__(self, other): ... + def __rdiv__(self, other): ... + def __rtruediv__(self, other): ... + def __rfloordiv__(self, other): ... + def __rmod__(self, other): ... + def __rdivmod__(self, other): ... + def __eq__(self, other): ... + def __ne__(self, other): ... + def copy(self): ... + def degree(self): ... + def cutdeg(self, deg): ... + def trim(self, tol=...): ... + def truncate(self, size): ... + def convert(self, domain=..., kind=..., window=...): ... + def mapparms(self): ... + def integ(self, m=..., k = ..., lbnd=...): ... + def deriv(self, m=...): ... + def roots(self): ... + def linspace(self, n=..., domain=...): ... + @classmethod + def fit(cls, x, y, deg, domain=..., rcond=..., full=..., w=..., window=...): ... + @classmethod + def fromroots(cls, roots, domain = ..., window=...): ... + @classmethod + def identity(cls, domain=..., window=...): ... + @classmethod + def basis(cls, deg, domain=..., window=...): ... + @classmethod + def cast(cls, series, domain=..., window=...): ... diff --git a/EXE version/main/numpy/polynomial/chebyshev.pyi b/EXE version/main/numpy/polynomial/chebyshev.pyi new file mode 100644 index 00000000..841c0859 --- /dev/null +++ b/EXE version/main/numpy/polynomial/chebyshev.pyi @@ -0,0 +1,51 @@ +from typing import Any, List + +from numpy import ndarray, dtype, int_ +from numpy.polynomial._polybase import ABCPolyBase +from numpy.polynomial.polyutils import trimcoef + +__all__: List[str] + +chebtrim = trimcoef + +def poly2cheb(pol): ... +def cheb2poly(c): ... + +chebdomain: ndarray[Any, dtype[int_]] +chebzero: ndarray[Any, dtype[int_]] +chebone: ndarray[Any, dtype[int_]] +chebx: ndarray[Any, dtype[int_]] + +def chebline(off, scl): ... +def chebfromroots(roots): ... +def chebadd(c1, c2): ... +def chebsub(c1, c2): ... +def chebmulx(c): ... +def chebmul(c1, c2): ... +def chebdiv(c1, c2): ... +def chebpow(c, pow, maxpower=...): ... +def chebder(c, m=..., scl=..., axis=...): ... +def chebint(c, m=..., k = ..., lbnd=..., scl=..., axis=...): ... +def chebval(x, c, tensor=...): ... +def chebval2d(x, y, c): ... +def chebgrid2d(x, y, c): ... +def chebval3d(x, y, z, c): ... +def chebgrid3d(x, y, z, c): ... +def chebvander(x, deg): ... +def chebvander2d(x, y, deg): ... +def chebvander3d(x, y, z, deg): ... +def chebfit(x, y, deg, rcond=..., full=..., w=...): ... +def chebcompanion(c): ... +def chebroots(c): ... +def chebinterpolate(func, deg, args = ...): ... +def chebgauss(deg): ... +def chebweight(x): ... +def chebpts1(npts): ... +def chebpts2(npts): ... + +class Chebyshev(ABCPolyBase): + @classmethod + def interpolate(cls, func, deg, domain=..., args = ...): ... + domain: Any + window: Any + basis_name: Any diff --git a/EXE version/main/numpy/polynomial/hermite.pyi b/EXE version/main/numpy/polynomial/hermite.pyi new file mode 100644 index 00000000..8364a5b0 --- /dev/null +++ b/EXE version/main/numpy/polynomial/hermite.pyi @@ -0,0 +1,46 @@ +from typing import Any, List + +from numpy import ndarray, dtype, int_, float_ +from numpy.polynomial._polybase import ABCPolyBase +from numpy.polynomial.polyutils import trimcoef + +__all__: list[str] + +hermtrim = trimcoef + +def poly2herm(pol): ... +def herm2poly(c): ... + +hermdomain: ndarray[Any, dtype[int_]] +hermzero: ndarray[Any, dtype[int_]] +hermone: ndarray[Any, dtype[int_]] +hermx: ndarray[Any, dtype[float_]] + +def hermline(off, scl): ... +def hermfromroots(roots): ... +def hermadd(c1, c2): ... +def hermsub(c1, c2): ... +def hermmulx(c): ... +def hermmul(c1, c2): ... +def hermdiv(c1, c2): ... +def hermpow(c, pow, maxpower=...): ... +def hermder(c, m=..., scl=..., axis=...): ... +def hermint(c, m=..., k = ..., lbnd=..., scl=..., axis=...): ... +def hermval(x, c, tensor=...): ... +def hermval2d(x, y, c): ... +def hermgrid2d(x, y, c): ... +def hermval3d(x, y, z, c): ... +def hermgrid3d(x, y, z, c): ... +def hermvander(x, deg): ... +def hermvander2d(x, y, deg): ... +def hermvander3d(x, y, z, deg): ... +def hermfit(x, y, deg, rcond=..., full=..., w=...): ... +def hermcompanion(c): ... +def hermroots(c): ... +def hermgauss(deg): ... +def hermweight(x): ... + +class Hermite(ABCPolyBase): + domain: Any + window: Any + basis_name: Any diff --git a/EXE version/main/numpy/polynomial/hermite_e.pyi b/EXE version/main/numpy/polynomial/hermite_e.pyi new file mode 100644 index 00000000..c029bfda --- /dev/null +++ b/EXE version/main/numpy/polynomial/hermite_e.pyi @@ -0,0 +1,46 @@ +from typing import Any, List + +from numpy import ndarray, dtype, int_ +from numpy.polynomial._polybase import ABCPolyBase +from numpy.polynomial.polyutils import trimcoef + +__all__: list[str] + +hermetrim = trimcoef + +def poly2herme(pol): ... +def herme2poly(c): ... + +hermedomain: ndarray[Any, dtype[int_]] +hermezero: ndarray[Any, dtype[int_]] +hermeone: ndarray[Any, dtype[int_]] +hermex: ndarray[Any, dtype[int_]] + +def hermeline(off, scl): ... +def hermefromroots(roots): ... +def hermeadd(c1, c2): ... +def hermesub(c1, c2): ... +def hermemulx(c): ... +def hermemul(c1, c2): ... +def hermediv(c1, c2): ... +def hermepow(c, pow, maxpower=...): ... +def hermeder(c, m=..., scl=..., axis=...): ... +def hermeint(c, m=..., k = ..., lbnd=..., scl=..., axis=...): ... +def hermeval(x, c, tensor=...): ... +def hermeval2d(x, y, c): ... +def hermegrid2d(x, y, c): ... +def hermeval3d(x, y, z, c): ... +def hermegrid3d(x, y, z, c): ... +def hermevander(x, deg): ... +def hermevander2d(x, y, deg): ... +def hermevander3d(x, y, z, deg): ... +def hermefit(x, y, deg, rcond=..., full=..., w=...): ... +def hermecompanion(c): ... +def hermeroots(c): ... +def hermegauss(deg): ... +def hermeweight(x): ... + +class HermiteE(ABCPolyBase): + domain: Any + window: Any + basis_name: Any diff --git a/EXE version/main/numpy/polynomial/laguerre.pyi b/EXE version/main/numpy/polynomial/laguerre.pyi new file mode 100644 index 00000000..2b9ab34e --- /dev/null +++ b/EXE version/main/numpy/polynomial/laguerre.pyi @@ -0,0 +1,46 @@ +from typing import Any, List + +from numpy import ndarray, dtype, int_ +from numpy.polynomial._polybase import ABCPolyBase +from numpy.polynomial.polyutils import trimcoef + +__all__: list[str] + +lagtrim = trimcoef + +def poly2lag(pol): ... +def lag2poly(c): ... + +lagdomain: ndarray[Any, dtype[int_]] +lagzero: ndarray[Any, dtype[int_]] +lagone: ndarray[Any, dtype[int_]] +lagx: ndarray[Any, dtype[int_]] + +def lagline(off, scl): ... +def lagfromroots(roots): ... +def lagadd(c1, c2): ... +def lagsub(c1, c2): ... +def lagmulx(c): ... +def lagmul(c1, c2): ... +def lagdiv(c1, c2): ... +def lagpow(c, pow, maxpower=...): ... +def lagder(c, m=..., scl=..., axis=...): ... +def lagint(c, m=..., k = ..., lbnd=..., scl=..., axis=...): ... +def lagval(x, c, tensor=...): ... +def lagval2d(x, y, c): ... +def laggrid2d(x, y, c): ... +def lagval3d(x, y, z, c): ... +def laggrid3d(x, y, z, c): ... +def lagvander(x, deg): ... +def lagvander2d(x, y, deg): ... +def lagvander3d(x, y, z, deg): ... +def lagfit(x, y, deg, rcond=..., full=..., w=...): ... +def lagcompanion(c): ... +def lagroots(c): ... +def laggauss(deg): ... +def lagweight(x): ... + +class Laguerre(ABCPolyBase): + domain: Any + window: Any + basis_name: Any diff --git a/EXE version/main/numpy/polynomial/legendre.pyi b/EXE version/main/numpy/polynomial/legendre.pyi new file mode 100644 index 00000000..86aef179 --- /dev/null +++ b/EXE version/main/numpy/polynomial/legendre.pyi @@ -0,0 +1,46 @@ +from typing import Any, List + +from numpy import ndarray, dtype, int_ +from numpy.polynomial._polybase import ABCPolyBase +from numpy.polynomial.polyutils import trimcoef + +__all__: list[str] + +legtrim = trimcoef + +def poly2leg(pol): ... +def leg2poly(c): ... + +legdomain: ndarray[Any, dtype[int_]] +legzero: ndarray[Any, dtype[int_]] +legone: ndarray[Any, dtype[int_]] +legx: ndarray[Any, dtype[int_]] + +def legline(off, scl): ... +def legfromroots(roots): ... +def legadd(c1, c2): ... +def legsub(c1, c2): ... +def legmulx(c): ... +def legmul(c1, c2): ... +def legdiv(c1, c2): ... +def legpow(c, pow, maxpower=...): ... +def legder(c, m=..., scl=..., axis=...): ... +def legint(c, m=..., k = ..., lbnd=..., scl=..., axis=...): ... +def legval(x, c, tensor=...): ... +def legval2d(x, y, c): ... +def leggrid2d(x, y, c): ... +def legval3d(x, y, z, c): ... +def leggrid3d(x, y, z, c): ... +def legvander(x, deg): ... +def legvander2d(x, y, deg): ... +def legvander3d(x, y, z, deg): ... +def legfit(x, y, deg, rcond=..., full=..., w=...): ... +def legcompanion(c): ... +def legroots(c): ... +def leggauss(deg): ... +def legweight(x): ... + +class Legendre(ABCPolyBase): + domain: Any + window: Any + basis_name: Any diff --git a/EXE version/main/numpy/polynomial/polynomial.pyi b/EXE version/main/numpy/polynomial/polynomial.pyi new file mode 100644 index 00000000..f779300a --- /dev/null +++ b/EXE version/main/numpy/polynomial/polynomial.pyi @@ -0,0 +1,41 @@ +from typing import Any, List + +from numpy import ndarray, dtype, int_ +from numpy.polynomial._polybase import ABCPolyBase +from numpy.polynomial.polyutils import trimcoef + +__all__: list[str] + +polytrim = trimcoef + +polydomain: ndarray[Any, dtype[int_]] +polyzero: ndarray[Any, dtype[int_]] +polyone: ndarray[Any, dtype[int_]] +polyx: ndarray[Any, dtype[int_]] + +def polyline(off, scl): ... +def polyfromroots(roots): ... +def polyadd(c1, c2): ... +def polysub(c1, c2): ... +def polymulx(c): ... +def polymul(c1, c2): ... +def polydiv(c1, c2): ... +def polypow(c, pow, maxpower=...): ... +def polyder(c, m=..., scl=..., axis=...): ... +def polyint(c, m=..., k=..., lbnd=..., scl=..., axis=...): ... +def polyval(x, c, tensor=...): ... +def polyvalfromroots(x, r, tensor=...): ... +def polyval2d(x, y, c): ... +def polygrid2d(x, y, c): ... +def polyval3d(x, y, z, c): ... +def polygrid3d(x, y, z, c): ... +def polyvander(x, deg): ... +def polyvander2d(x, y, deg): ... +def polyvander3d(x, y, z, deg): ... +def polyfit(x, y, deg, rcond=..., full=..., w=...): ... +def polyroots(c): ... + +class Polynomial(ABCPolyBase): + domain: Any + window: Any + basis_name: Any diff --git a/EXE version/main/numpy/polynomial/polyutils.pyi b/EXE version/main/numpy/polynomial/polyutils.pyi new file mode 100644 index 00000000..52c9cfc4 --- /dev/null +++ b/EXE version/main/numpy/polynomial/polyutils.pyi @@ -0,0 +1,12 @@ +from typing import List + +__all__: List[str] + +class RankWarning(UserWarning): ... + +def trimseq(seq): ... +def as_series(alist, trim=...): ... +def trimcoef(c, tol=...): ... +def getdomain(x): ... +def mapparms(old, new): ... +def mapdomain(x, old, new): ... diff --git a/EXE version/main/numpy/py.typed b/EXE version/main/numpy/py.typed new file mode 100644 index 00000000..e69de29b diff --git a/EXE version/main/numpy/random/__init__.pxd b/EXE version/main/numpy/random/__init__.pxd new file mode 100644 index 00000000..1f905729 --- /dev/null +++ b/EXE version/main/numpy/random/__init__.pxd @@ -0,0 +1,14 @@ +cimport numpy as np +from libc.stdint cimport uint32_t, uint64_t + +cdef extern from "numpy/random/bitgen.h": + struct bitgen: + void *state + uint64_t (*next_uint64)(void *st) nogil + uint32_t (*next_uint32)(void *st) nogil + double (*next_double)(void *st) nogil + uint64_t (*next_raw)(void *st) nogil + + ctypedef bitgen bitgen_t + +from numpy.random.bit_generator cimport BitGenerator, SeedSequence diff --git a/EXE version/main/numpy/random/__init__.pyi b/EXE version/main/numpy/random/__init__.pyi new file mode 100644 index 00000000..48b620c4 --- /dev/null +++ b/EXE version/main/numpy/random/__init__.pyi @@ -0,0 +1,68 @@ +from typing import List + +from numpy.random._generator import Generator as Generator +from numpy.random._generator import default_rng as default_rng +from numpy.random._mt19937 import MT19937 as MT19937 +from numpy.random._pcg64 import ( + PCG64 as PCG64, + PCG64DXSM as PCG64DXSM, +) +from numpy.random._philox import Philox as Philox +from numpy.random._sfc64 import SFC64 as SFC64 +from numpy.random.bit_generator import BitGenerator as BitGenerator +from numpy.random.bit_generator import SeedSequence as SeedSequence +from numpy.random.mtrand import ( + RandomState as RandomState, + beta as beta, + binomial as binomial, + bytes as bytes, + chisquare as chisquare, + choice as choice, + dirichlet as dirichlet, + exponential as exponential, + f as f, + gamma as gamma, + geometric as geometric, + get_state as get_state, + gumbel as gumbel, + hypergeometric as hypergeometric, + laplace as laplace, + logistic as logistic, + lognormal as lognormal, + logseries as logseries, + multinomial as multinomial, + multivariate_normal as multivariate_normal, + negative_binomial as negative_binomial, + noncentral_chisquare as noncentral_chisquare, + noncentral_f as noncentral_f, + normal as normal, + pareto as pareto, + permutation as permutation, + poisson as poisson, + power as power, + rand as rand, + randint as randint, + randn as randn, + random as random, + random_integers as random_integers, + random_sample as random_sample, + ranf as ranf, + rayleigh as rayleigh, + sample as sample, + seed as seed, + set_state as set_state, + shuffle as shuffle, + standard_cauchy as standard_cauchy, + standard_exponential as standard_exponential, + standard_gamma as standard_gamma, + standard_normal as standard_normal, + standard_t as standard_t, + triangular as triangular, + uniform as uniform, + vonmises as vonmises, + wald as wald, + weibull as weibull, + zipf as zipf, +) + +__all__: List[str] diff --git a/EXE version/main/numpy/random/_bounded_integers.cp39-win_amd64.pyd b/EXE version/main/numpy/random/_bounded_integers.cp39-win_amd64.pyd new file mode 100644 index 00000000..b5029d68 Binary files /dev/null and b/EXE version/main/numpy/random/_bounded_integers.cp39-win_amd64.pyd differ diff --git a/EXE version/main/numpy/random/_bounded_integers.pxd b/EXE version/main/numpy/random/_bounded_integers.pxd new file mode 100644 index 00000000..7e41463a --- /dev/null +++ b/EXE version/main/numpy/random/_bounded_integers.pxd @@ -0,0 +1,29 @@ +from libc.stdint cimport (uint8_t, uint16_t, uint32_t, uint64_t, + int8_t, int16_t, int32_t, int64_t, intptr_t) +import numpy as np +cimport numpy as np +ctypedef np.npy_bool bool_t + +from numpy.random cimport bitgen_t + +cdef inline uint64_t _gen_mask(uint64_t max_val) nogil: + """Mask generator for use in bounded random numbers""" + # Smallest bit mask >= max + cdef uint64_t mask = max_val + mask |= mask >> 1 + mask |= mask >> 2 + mask |= mask >> 4 + mask |= mask >> 8 + mask |= mask >> 16 + mask |= mask >> 32 + return mask + +cdef object _rand_uint64(object low, object high, object size, bint use_masked, bint closed, bitgen_t *state, object lock) +cdef object _rand_uint32(object low, object high, object size, bint use_masked, bint closed, bitgen_t *state, object lock) +cdef object _rand_uint16(object low, object high, object size, bint use_masked, bint closed, bitgen_t *state, object lock) +cdef object _rand_uint8(object low, object high, object size, bint use_masked, bint closed, bitgen_t *state, object lock) +cdef object _rand_bool(object low, object high, object size, bint use_masked, bint closed, bitgen_t *state, object lock) +cdef object _rand_int64(object low, object high, object size, bint use_masked, bint closed, bitgen_t *state, object lock) +cdef object _rand_int32(object low, object high, object size, bint use_masked, bint closed, bitgen_t *state, object lock) +cdef object _rand_int16(object low, object high, object size, bint use_masked, bint closed, bitgen_t *state, object lock) +cdef object _rand_int8(object low, object high, object size, bint use_masked, bint closed, bitgen_t *state, object lock) diff --git a/EXE version/main/numpy/random/_common.cp39-win_amd64.pyd b/EXE version/main/numpy/random/_common.cp39-win_amd64.pyd new file mode 100644 index 00000000..2cd0ff35 Binary files /dev/null and b/EXE version/main/numpy/random/_common.cp39-win_amd64.pyd differ diff --git a/EXE version/main/numpy/random/_common.pxd b/EXE version/main/numpy/random/_common.pxd new file mode 100644 index 00000000..9f2e8c3c --- /dev/null +++ b/EXE version/main/numpy/random/_common.pxd @@ -0,0 +1,106 @@ +#cython: language_level=3 + +from libc.stdint cimport uint32_t, uint64_t, int32_t, int64_t + +import numpy as np +cimport numpy as np + +from numpy.random cimport bitgen_t + +cdef double POISSON_LAM_MAX +cdef double LEGACY_POISSON_LAM_MAX +cdef uint64_t MAXSIZE + +cdef enum ConstraintType: + CONS_NONE + CONS_NON_NEGATIVE + CONS_POSITIVE + CONS_POSITIVE_NOT_NAN + CONS_BOUNDED_0_1 + CONS_BOUNDED_0_1_NOTNAN + CONS_BOUNDED_GT_0_1 + CONS_GT_1 + CONS_GTE_1 + CONS_POISSON + LEGACY_CONS_POISSON + +ctypedef ConstraintType constraint_type + +cdef object benchmark(bitgen_t *bitgen, object lock, Py_ssize_t cnt, object method) +cdef object random_raw(bitgen_t *bitgen, object lock, object size, object output) +cdef object prepare_cffi(bitgen_t *bitgen) +cdef object prepare_ctypes(bitgen_t *bitgen) +cdef int check_constraint(double val, object name, constraint_type cons) except -1 +cdef int check_array_constraint(np.ndarray val, object name, constraint_type cons) except -1 + +cdef extern from "include/aligned_malloc.h": + cdef void *PyArray_realloc_aligned(void *p, size_t n) + cdef void *PyArray_malloc_aligned(size_t n) + cdef void *PyArray_calloc_aligned(size_t n, size_t s) + cdef void PyArray_free_aligned(void *p) + +ctypedef void (*random_double_fill)(bitgen_t *state, np.npy_intp count, double* out) nogil +ctypedef double (*random_double_0)(void *state) nogil +ctypedef double (*random_double_1)(void *state, double a) nogil +ctypedef double (*random_double_2)(void *state, double a, double b) nogil +ctypedef double (*random_double_3)(void *state, double a, double b, double c) nogil + +ctypedef double (*random_float_fill)(bitgen_t *state, np.npy_intp count, float* out) nogil +ctypedef float (*random_float_0)(bitgen_t *state) nogil +ctypedef float (*random_float_1)(bitgen_t *state, float a) nogil + +ctypedef int64_t (*random_uint_0)(void *state) nogil +ctypedef int64_t (*random_uint_d)(void *state, double a) nogil +ctypedef int64_t (*random_uint_dd)(void *state, double a, double b) nogil +ctypedef int64_t (*random_uint_di)(void *state, double a, uint64_t b) nogil +ctypedef int64_t (*random_uint_i)(void *state, int64_t a) nogil +ctypedef int64_t (*random_uint_iii)(void *state, int64_t a, int64_t b, int64_t c) nogil + +ctypedef uint32_t (*random_uint_0_32)(bitgen_t *state) nogil +ctypedef uint32_t (*random_uint_1_i_32)(bitgen_t *state, uint32_t a) nogil + +ctypedef int32_t (*random_int_2_i_32)(bitgen_t *state, int32_t a, int32_t b) nogil +ctypedef int64_t (*random_int_2_i)(bitgen_t *state, int64_t a, int64_t b) nogil + +cdef double kahan_sum(double *darr, np.npy_intp n) + +cdef inline double uint64_to_double(uint64_t rnd) nogil: + return (rnd >> 11) * (1.0 / 9007199254740992.0) + +cdef object double_fill(void *func, bitgen_t *state, object size, object lock, object out) + +cdef object float_fill(void *func, bitgen_t *state, object size, object lock, object out) + +cdef object float_fill_from_double(void *func, bitgen_t *state, object size, object lock, object out) + +cdef object wrap_int(object val, object bits) + +cdef np.ndarray int_to_array(object value, object name, object bits, object uint_size) + +cdef validate_output_shape(iter_shape, np.ndarray output) + +cdef object cont(void *func, void *state, object size, object lock, int narg, + object a, object a_name, constraint_type a_constraint, + object b, object b_name, constraint_type b_constraint, + object c, object c_name, constraint_type c_constraint, + object out) + +cdef object disc(void *func, void *state, object size, object lock, + int narg_double, int narg_int64, + object a, object a_name, constraint_type a_constraint, + object b, object b_name, constraint_type b_constraint, + object c, object c_name, constraint_type c_constraint) + +cdef object cont_f(void *func, bitgen_t *state, object size, object lock, + object a, object a_name, constraint_type a_constraint, + object out) + +cdef object cont_broadcast_3(void *func, void *state, object size, object lock, + np.ndarray a_arr, object a_name, constraint_type a_constraint, + np.ndarray b_arr, object b_name, constraint_type b_constraint, + np.ndarray c_arr, object c_name, constraint_type c_constraint) + +cdef object discrete_broadcast_iii(void *func, void *state, object size, object lock, + np.ndarray a_arr, object a_name, constraint_type a_constraint, + np.ndarray b_arr, object b_name, constraint_type b_constraint, + np.ndarray c_arr, object c_name, constraint_type c_constraint) diff --git a/EXE version/main/numpy/random/_examples/cython/extending.pyx b/EXE version/main/numpy/random/_examples/cython/extending.pyx new file mode 100644 index 00000000..3a7f81aa --- /dev/null +++ b/EXE version/main/numpy/random/_examples/cython/extending.pyx @@ -0,0 +1,78 @@ +#!/usr/bin/env python3 +#cython: language_level=3 + +from libc.stdint cimport uint32_t +from cpython.pycapsule cimport PyCapsule_IsValid, PyCapsule_GetPointer + +import numpy as np +cimport numpy as np +cimport cython + +from numpy.random cimport bitgen_t +from numpy.random import PCG64 + +np.import_array() + + +@cython.boundscheck(False) +@cython.wraparound(False) +def uniform_mean(Py_ssize_t n): + cdef Py_ssize_t i + cdef bitgen_t *rng + cdef const char *capsule_name = "BitGenerator" + cdef double[::1] random_values + cdef np.ndarray randoms + + x = PCG64() + capsule = x.capsule + if not PyCapsule_IsValid(capsule, capsule_name): + raise ValueError("Invalid pointer to anon_func_state") + rng = PyCapsule_GetPointer(capsule, capsule_name) + random_values = np.empty(n) + # Best practice is to acquire the lock whenever generating random values. + # This prevents other threads from modifying the state. Acquiring the lock + # is only necessary if if the GIL is also released, as in this example. + with x.lock, nogil: + for i in range(n): + random_values[i] = rng.next_double(rng.state) + randoms = np.asarray(random_values) + return randoms.mean() + + +# This function is declared nogil so it can be used without the GIL below +cdef uint32_t bounded_uint(uint32_t lb, uint32_t ub, bitgen_t *rng) nogil: + cdef uint32_t mask, delta, val + mask = delta = ub - lb + mask |= mask >> 1 + mask |= mask >> 2 + mask |= mask >> 4 + mask |= mask >> 8 + mask |= mask >> 16 + + val = rng.next_uint32(rng.state) & mask + while val > delta: + val = rng.next_uint32(rng.state) & mask + + return lb + val + + +@cython.boundscheck(False) +@cython.wraparound(False) +def bounded_uints(uint32_t lb, uint32_t ub, Py_ssize_t n): + cdef Py_ssize_t i + cdef bitgen_t *rng + cdef uint32_t[::1] out + cdef const char *capsule_name = "BitGenerator" + + x = PCG64() + out = np.empty(n, dtype=np.uint32) + capsule = x.capsule + + if not PyCapsule_IsValid(capsule, capsule_name): + raise ValueError("Invalid pointer to anon_func_state") + rng = PyCapsule_GetPointer(capsule, capsule_name) + + with x.lock, nogil: + for i in range(n): + out[i] = bounded_uint(lb, ub, rng) + return np.asarray(out) diff --git a/EXE version/main/numpy/random/_examples/cython/extending_distributions.pyx b/EXE version/main/numpy/random/_examples/cython/extending_distributions.pyx new file mode 100644 index 00000000..d908e92d --- /dev/null +++ b/EXE version/main/numpy/random/_examples/cython/extending_distributions.pyx @@ -0,0 +1,117 @@ +#!/usr/bin/env python3 +#cython: language_level=3 +""" +This file shows how the to use a BitGenerator to create a distribution. +""" +import numpy as np +cimport numpy as np +cimport cython +from cpython.pycapsule cimport PyCapsule_IsValid, PyCapsule_GetPointer +from libc.stdint cimport uint16_t, uint64_t +from numpy.random cimport bitgen_t +from numpy.random import PCG64 +from numpy.random.c_distributions cimport ( + random_standard_uniform_fill, random_standard_uniform_fill_f) + + +@cython.boundscheck(False) +@cython.wraparound(False) +def uniforms(Py_ssize_t n): + """ + Create an array of `n` uniformly distributed doubles. + A 'real' distribution would want to process the values into + some non-uniform distribution + """ + cdef Py_ssize_t i + cdef bitgen_t *rng + cdef const char *capsule_name = "BitGenerator" + cdef double[::1] random_values + + x = PCG64() + capsule = x.capsule + # Optional check that the capsule if from a BitGenerator + if not PyCapsule_IsValid(capsule, capsule_name): + raise ValueError("Invalid pointer to anon_func_state") + # Cast the pointer + rng = PyCapsule_GetPointer(capsule, capsule_name) + random_values = np.empty(n, dtype='float64') + with x.lock, nogil: + for i in range(n): + # Call the function + random_values[i] = rng.next_double(rng.state) + randoms = np.asarray(random_values) + + return randoms + +# cython example 2 +@cython.boundscheck(False) +@cython.wraparound(False) +def uint10_uniforms(Py_ssize_t n): + """Uniform 10 bit integers stored as 16-bit unsigned integers""" + cdef Py_ssize_t i + cdef bitgen_t *rng + cdef const char *capsule_name = "BitGenerator" + cdef uint16_t[::1] random_values + cdef int bits_remaining + cdef int width = 10 + cdef uint64_t buff, mask = 0x3FF + + x = PCG64() + capsule = x.capsule + if not PyCapsule_IsValid(capsule, capsule_name): + raise ValueError("Invalid pointer to anon_func_state") + rng = PyCapsule_GetPointer(capsule, capsule_name) + random_values = np.empty(n, dtype='uint16') + # Best practice is to release GIL and acquire the lock + bits_remaining = 0 + with x.lock, nogil: + for i in range(n): + if bits_remaining < width: + buff = rng.next_uint64(rng.state) + random_values[i] = buff & mask + buff >>= width + + randoms = np.asarray(random_values) + return randoms + +# cython example 3 +def uniforms_ex(bit_generator, Py_ssize_t n, dtype=np.float64): + """ + Create an array of `n` uniformly distributed doubles via a "fill" function. + + A 'real' distribution would want to process the values into + some non-uniform distribution + + Parameters + ---------- + bit_generator: BitGenerator instance + n: int + Output vector length + dtype: {str, dtype}, optional + Desired dtype, either 'd' (or 'float64') or 'f' (or 'float32'). The + default dtype value is 'd' + """ + cdef Py_ssize_t i + cdef bitgen_t *rng + cdef const char *capsule_name = "BitGenerator" + cdef np.ndarray randoms + + capsule = bit_generator.capsule + # Optional check that the capsule if from a BitGenerator + if not PyCapsule_IsValid(capsule, capsule_name): + raise ValueError("Invalid pointer to anon_func_state") + # Cast the pointer + rng = PyCapsule_GetPointer(capsule, capsule_name) + + _dtype = np.dtype(dtype) + randoms = np.empty(n, dtype=_dtype) + if _dtype == np.float32: + with bit_generator.lock: + random_standard_uniform_fill_f(rng, n, np.PyArray_DATA(randoms)) + elif _dtype == np.float64: + with bit_generator.lock: + random_standard_uniform_fill(rng, n, np.PyArray_DATA(randoms)) + else: + raise TypeError('Unsupported dtype %r for random' % _dtype) + return randoms + diff --git a/EXE version/main/numpy/random/_generator.cp39-win_amd64.pyd b/EXE version/main/numpy/random/_generator.cp39-win_amd64.pyd new file mode 100644 index 00000000..b460066f Binary files /dev/null and b/EXE version/main/numpy/random/_generator.cp39-win_amd64.pyd differ diff --git a/EXE version/main/numpy/random/_generator.pyi b/EXE version/main/numpy/random/_generator.pyi new file mode 100644 index 00000000..14dc5513 --- /dev/null +++ b/EXE version/main/numpy/random/_generator.pyi @@ -0,0 +1,651 @@ +import sys +from typing import Any, Callable, Dict, Optional, Tuple, Type, Union, overload, TypeVar + +from numpy import ( + bool_, + dtype, + float32, + float64, + int8, + int16, + int32, + int64, + int_, + ndarray, + uint, + uint8, + uint16, + uint32, + uint64, +) +from numpy.random import BitGenerator, SeedSequence +from numpy.typing import ( + ArrayLike, + _ArrayLikeFloat_co, + _ArrayLikeInt_co, + _DoubleCodes, + _DTypeLikeBool, + _DTypeLikeInt, + _DTypeLikeUInt, + _Float32Codes, + _Float64Codes, + _Int8Codes, + _Int16Codes, + _Int32Codes, + _Int64Codes, + _IntCodes, + _ShapeLike, + _SingleCodes, + _SupportsDType, + _UInt8Codes, + _UInt16Codes, + _UInt32Codes, + _UInt64Codes, + _UIntCodes, +) + +if sys.version_info >= (3, 8): + from typing import Literal +else: + from typing_extensions import Literal + +_ArrayType = TypeVar("_ArrayType", bound=ndarray[Any, Any]) + +_DTypeLikeFloat32 = Union[ + dtype[float32], + _SupportsDType[dtype[float32]], + Type[float32], + _Float32Codes, + _SingleCodes, +] + +_DTypeLikeFloat64 = Union[ + dtype[float64], + _SupportsDType[dtype[float64]], + Type[float], + Type[float64], + _Float64Codes, + _DoubleCodes, +] + +class Generator: + def __init__(self, bit_generator: BitGenerator) -> None: ... + def __repr__(self) -> str: ... + def __str__(self) -> str: ... + def __getstate__(self) -> Dict[str, Any]: ... + def __setstate__(self, state: Dict[str, Any]) -> None: ... + def __reduce__(self) -> Tuple[Callable[[str], Generator], Tuple[str], Dict[str, Any]]: ... + @property + def bit_generator(self) -> BitGenerator: ... + def bytes(self, length: int) -> bytes: ... + @overload + def standard_normal( # type: ignore[misc] + self, + size: None = ..., + dtype: Union[_DTypeLikeFloat32, _DTypeLikeFloat64] = ..., + out: None = ..., + ) -> float: ... + @overload + def standard_normal( # type: ignore[misc] + self, + size: _ShapeLike = ..., + ) -> ndarray[Any, dtype[float64]]: ... + @overload + def standard_normal( # type: ignore[misc] + self, + *, + out: ndarray[Any, dtype[float64]] = ..., + ) -> ndarray[Any, dtype[float64]]: ... + @overload + def standard_normal( # type: ignore[misc] + self, + size: _ShapeLike = ..., + dtype: _DTypeLikeFloat32 = ..., + out: Optional[ndarray[Any, dtype[float32]]] = ..., + ) -> ndarray[Any, dtype[float32]]: ... + @overload + def standard_normal( # type: ignore[misc] + self, + size: _ShapeLike = ..., + dtype: _DTypeLikeFloat64 = ..., + out: Optional[ndarray[Any, dtype[float64]]] = ..., + ) -> ndarray[Any, dtype[float64]]: ... + @overload + def permutation(self, x: int, axis: int = ...) -> ndarray[Any, dtype[int64]]: ... + @overload + def permutation(self, x: ArrayLike, axis: int = ...) -> ndarray[Any, Any]: ... + @overload + def standard_exponential( # type: ignore[misc] + self, + size: None = ..., + dtype: Union[_DTypeLikeFloat32, _DTypeLikeFloat64] = ..., + method: Literal["zig", "inv"] = ..., + out: None = ..., + ) -> float: ... + @overload + def standard_exponential( + self, + size: _ShapeLike = ..., + ) -> ndarray[Any, dtype[float64]]: ... + @overload + def standard_exponential( + self, + *, + out: ndarray[Any, dtype[float64]] = ..., + ) -> ndarray[Any, dtype[float64]]: ... + @overload + def standard_exponential( + self, + size: _ShapeLike = ..., + *, + method: Literal["zig", "inv"] = ..., + out: Optional[ndarray[Any, dtype[float64]]] = ..., + ) -> ndarray[Any, dtype[float64]]: ... + @overload + def standard_exponential( + self, + size: _ShapeLike = ..., + dtype: _DTypeLikeFloat32 = ..., + method: Literal["zig", "inv"] = ..., + out: Optional[ndarray[Any, dtype[float32]]] = ..., + ) -> ndarray[Any, dtype[float32]]: ... + @overload + def standard_exponential( + self, + size: _ShapeLike = ..., + dtype: _DTypeLikeFloat64 = ..., + method: Literal["zig", "inv"] = ..., + out: Optional[ndarray[Any, dtype[float64]]] = ..., + ) -> ndarray[Any, dtype[float64]]: ... + @overload + def random( # type: ignore[misc] + self, + size: None = ..., + dtype: Union[_DTypeLikeFloat32, _DTypeLikeFloat64] = ..., + out: None = ..., + ) -> float: ... + @overload + def random( + self, + *, + out: ndarray[Any, dtype[float64]] = ..., + ) -> ndarray[Any, dtype[float64]]: ... + @overload + def random( + self, + size: _ShapeLike = ..., + *, + out: Optional[ndarray[Any, dtype[float64]]] = ..., + ) -> ndarray[Any, dtype[float64]]: ... + @overload + def random( + self, + size: _ShapeLike = ..., + dtype: _DTypeLikeFloat32 = ..., + out: Optional[ndarray[Any, dtype[float32]]] = ..., + ) -> ndarray[Any, dtype[float32]]: ... + @overload + def random( + self, + size: _ShapeLike = ..., + dtype: _DTypeLikeFloat64 = ..., + out: Optional[ndarray[Any, dtype[float64]]] = ..., + ) -> ndarray[Any, dtype[float64]]: ... + @overload + def beta(self, a: float, b: float, size: None = ...) -> float: ... # type: ignore[misc] + @overload + def beta( + self, a: _ArrayLikeFloat_co, b: _ArrayLikeFloat_co, size: Optional[_ShapeLike] = ... + ) -> ndarray[Any, dtype[float64]]: ... + @overload + def exponential(self, scale: float = ..., size: None = ...) -> float: ... # type: ignore[misc] + @overload + def exponential( + self, scale: _ArrayLikeFloat_co = ..., size: Optional[_ShapeLike] = ... + ) -> ndarray[Any, dtype[float64]]: ... + @overload + def integers( # type: ignore[misc] + self, + low: int, + high: Optional[int] = ..., + ) -> int: ... + @overload + def integers( # type: ignore[misc] + self, + low: int, + high: Optional[int] = ..., + size: None = ..., + dtype: _DTypeLikeBool = ..., + endpoint: bool = ..., + ) -> bool: ... + @overload + def integers( # type: ignore[misc] + self, + low: int, + high: Optional[int] = ..., + size: None = ..., + dtype: Union[_DTypeLikeInt, _DTypeLikeUInt] = ..., + endpoint: bool = ..., + ) -> int: ... + @overload + def integers( # type: ignore[misc] + self, + low: _ArrayLikeInt_co, + high: Optional[_ArrayLikeInt_co] = ..., + size: Optional[_ShapeLike] = ..., + ) -> ndarray[Any, dtype[int64]]: ... + @overload + def integers( # type: ignore[misc] + self, + low: _ArrayLikeInt_co, + high: Optional[_ArrayLikeInt_co] = ..., + size: Optional[_ShapeLike] = ..., + dtype: _DTypeLikeBool = ..., + endpoint: bool = ..., + ) -> ndarray[Any, dtype[bool_]]: ... + @overload + def integers( # type: ignore[misc] + self, + low: _ArrayLikeInt_co, + high: Optional[_ArrayLikeInt_co] = ..., + size: Optional[_ShapeLike] = ..., + dtype: Union[dtype[int8], Type[int8], _Int8Codes, _SupportsDType[dtype[int8]]] = ..., + endpoint: bool = ..., + ) -> ndarray[Any, dtype[int8]]: ... + @overload + def integers( # type: ignore[misc] + self, + low: _ArrayLikeInt_co, + high: Optional[_ArrayLikeInt_co] = ..., + size: Optional[_ShapeLike] = ..., + dtype: Union[dtype[int16], Type[int16], _Int16Codes, _SupportsDType[dtype[int16]]] = ..., + endpoint: bool = ..., + ) -> ndarray[Any, dtype[int16]]: ... + @overload + def integers( # type: ignore[misc] + self, + low: _ArrayLikeInt_co, + high: Optional[_ArrayLikeInt_co] = ..., + size: Optional[_ShapeLike] = ..., + dtype: Union[dtype[int32], Type[int32], _Int32Codes, _SupportsDType[dtype[int32]]] = ..., + endpoint: bool = ..., + ) -> ndarray[Any, dtype[Union[int32]]]: ... + @overload + def integers( # type: ignore[misc] + self, + low: _ArrayLikeInt_co, + high: Optional[_ArrayLikeInt_co] = ..., + size: Optional[_ShapeLike] = ..., + dtype: Optional[ + Union[dtype[int64], Type[int64], _Int64Codes, _SupportsDType[dtype[int64]]] + ] = ..., + endpoint: bool = ..., + ) -> ndarray[Any, dtype[int64]]: ... + @overload + def integers( # type: ignore[misc] + self, + low: _ArrayLikeInt_co, + high: Optional[_ArrayLikeInt_co] = ..., + size: Optional[_ShapeLike] = ..., + dtype: Union[dtype[uint8], Type[uint8], _UInt8Codes, _SupportsDType[dtype[uint8]]] = ..., + endpoint: bool = ..., + ) -> ndarray[Any, dtype[uint8]]: ... + @overload + def integers( # type: ignore[misc] + self, + low: _ArrayLikeInt_co, + high: Optional[_ArrayLikeInt_co] = ..., + size: Optional[_ShapeLike] = ..., + dtype: Union[ + dtype[uint16], Type[uint16], _UInt16Codes, _SupportsDType[dtype[uint16]] + ] = ..., + endpoint: bool = ..., + ) -> ndarray[Any, dtype[Union[uint16]]]: ... + @overload + def integers( # type: ignore[misc] + self, + low: _ArrayLikeInt_co, + high: Optional[_ArrayLikeInt_co] = ..., + size: Optional[_ShapeLike] = ..., + dtype: Union[ + dtype[uint32], Type[uint32], _UInt32Codes, _SupportsDType[dtype[uint32]] + ] = ..., + endpoint: bool = ..., + ) -> ndarray[Any, dtype[uint32]]: ... + @overload + def integers( # type: ignore[misc] + self, + low: _ArrayLikeInt_co, + high: Optional[_ArrayLikeInt_co] = ..., + size: Optional[_ShapeLike] = ..., + dtype: Union[ + dtype[uint64], Type[uint64], _UInt64Codes, _SupportsDType[dtype[uint64]] + ] = ..., + endpoint: bool = ..., + ) -> ndarray[Any, dtype[uint64]]: ... + @overload + def integers( # type: ignore[misc] + self, + low: _ArrayLikeInt_co, + high: Optional[_ArrayLikeInt_co] = ..., + size: Optional[_ShapeLike] = ..., + dtype: Union[ + dtype[int_], Type[int], Type[int_], _IntCodes, _SupportsDType[dtype[int_]] + ] = ..., + endpoint: bool = ..., + ) -> ndarray[Any, dtype[int_]]: ... + @overload + def integers( # type: ignore[misc] + self, + low: _ArrayLikeInt_co, + high: Optional[_ArrayLikeInt_co] = ..., + size: Optional[_ShapeLike] = ..., + dtype: Union[dtype[uint], Type[uint], _UIntCodes, _SupportsDType[dtype[uint]]] = ..., + endpoint: bool = ..., + ) -> ndarray[Any, dtype[uint]]: ... + # TODO: Use a TypeVar _T here to get away from Any output? Should be int->ndarray[Any,dtype[int64]], ArrayLike[_T] -> Union[_T, ndarray[Any,Any]] + @overload + def choice( + self, + a: int, + size: None = ..., + replace: bool = ..., + p: Optional[_ArrayLikeFloat_co] = ..., + axis: int = ..., + shuffle: bool = ..., + ) -> int: ... + @overload + def choice( + self, + a: int, + size: _ShapeLike = ..., + replace: bool = ..., + p: Optional[_ArrayLikeFloat_co] = ..., + axis: int = ..., + shuffle: bool = ..., + ) -> ndarray[Any, dtype[int64]]: ... + @overload + def choice( + self, + a: ArrayLike, + size: None = ..., + replace: bool = ..., + p: Optional[_ArrayLikeFloat_co] = ..., + axis: int = ..., + shuffle: bool = ..., + ) -> Any: ... + @overload + def choice( + self, + a: ArrayLike, + size: _ShapeLike = ..., + replace: bool = ..., + p: Optional[_ArrayLikeFloat_co] = ..., + axis: int = ..., + shuffle: bool = ..., + ) -> ndarray[Any, Any]: ... + @overload + def uniform(self, low: float = ..., high: float = ..., size: None = ...) -> float: ... # type: ignore[misc] + @overload + def uniform( + self, + low: _ArrayLikeFloat_co = ..., + high: _ArrayLikeFloat_co = ..., + size: Optional[_ShapeLike] = ..., + ) -> ndarray[Any, dtype[float64]]: ... + @overload + def normal(self, loc: float = ..., scale: float = ..., size: None = ...) -> float: ... # type: ignore[misc] + @overload + def normal( + self, + loc: _ArrayLikeFloat_co = ..., + scale: _ArrayLikeFloat_co = ..., + size: Optional[_ShapeLike] = ..., + ) -> ndarray[Any, dtype[float64]]: ... + @overload + def standard_gamma( # type: ignore[misc] + self, + shape: float, + size: None = ..., + dtype: Union[_DTypeLikeFloat32, _DTypeLikeFloat64] = ..., + out: None = ..., + ) -> float: ... + @overload + def standard_gamma( + self, + shape: _ArrayLikeFloat_co, + size: Optional[_ShapeLike] = ..., + ) -> ndarray[Any, dtype[float64]]: ... + @overload + def standard_gamma( + self, + shape: _ArrayLikeFloat_co, + *, + out: ndarray[Any, dtype[float64]] = ..., + ) -> ndarray[Any, dtype[float64]]: ... + @overload + def standard_gamma( + self, + shape: _ArrayLikeFloat_co, + size: Optional[_ShapeLike] = ..., + dtype: _DTypeLikeFloat32 = ..., + out: Optional[ndarray[Any, dtype[float32]]] = ..., + ) -> ndarray[Any, dtype[float32]]: ... + @overload + def standard_gamma( + self, + shape: _ArrayLikeFloat_co, + size: Optional[_ShapeLike] = ..., + dtype: _DTypeLikeFloat64 = ..., + out: Optional[ndarray[Any, dtype[float64]]] = ..., + ) -> ndarray[Any, dtype[float64]]: ... + @overload + def gamma(self, shape: float, scale: float = ..., size: None = ...) -> float: ... # type: ignore[misc] + @overload + def gamma( + self, + shape: _ArrayLikeFloat_co, + scale: _ArrayLikeFloat_co = ..., + size: Optional[_ShapeLike] = ..., + ) -> ndarray[Any, dtype[float64]]: ... + @overload + def f(self, dfnum: float, dfden: float, size: None = ...) -> float: ... # type: ignore[misc] + @overload + def f( + self, dfnum: _ArrayLikeFloat_co, dfden: _ArrayLikeFloat_co, size: Optional[_ShapeLike] = ... + ) -> ndarray[Any, dtype[float64]]: ... + @overload + def noncentral_f(self, dfnum: float, dfden: float, nonc: float, size: None = ...) -> float: ... # type: ignore[misc] + @overload + def noncentral_f( + self, + dfnum: _ArrayLikeFloat_co, + dfden: _ArrayLikeFloat_co, + nonc: _ArrayLikeFloat_co, + size: Optional[_ShapeLike] = ..., + ) -> ndarray[Any, dtype[float64]]: ... + @overload + def chisquare(self, df: float, size: None = ...) -> float: ... # type: ignore[misc] + @overload + def chisquare( + self, df: _ArrayLikeFloat_co, size: Optional[_ShapeLike] = ... + ) -> ndarray[Any, dtype[float64]]: ... + @overload + def noncentral_chisquare(self, df: float, nonc: float, size: None = ...) -> float: ... # type: ignore[misc] + @overload + def noncentral_chisquare( + self, df: _ArrayLikeFloat_co, nonc: _ArrayLikeFloat_co, size: Optional[_ShapeLike] = ... + ) -> ndarray[Any, dtype[float64]]: ... + @overload + def standard_t(self, df: float, size: None = ...) -> float: ... # type: ignore[misc] + @overload + def standard_t( + self, df: _ArrayLikeFloat_co, size: None = ... + ) -> ndarray[Any, dtype[float64]]: ... + @overload + def standard_t( + self, df: _ArrayLikeFloat_co, size: _ShapeLike = ... + ) -> ndarray[Any, dtype[float64]]: ... + @overload + def vonmises(self, mu: float, kappa: float, size: None = ...) -> float: ... # type: ignore[misc] + @overload + def vonmises( + self, mu: _ArrayLikeFloat_co, kappa: _ArrayLikeFloat_co, size: Optional[_ShapeLike] = ... + ) -> ndarray[Any, dtype[float64]]: ... + @overload + def pareto(self, a: float, size: None = ...) -> float: ... # type: ignore[misc] + @overload + def pareto( + self, a: _ArrayLikeFloat_co, size: Optional[_ShapeLike] = ... + ) -> ndarray[Any, dtype[float64]]: ... + @overload + def weibull(self, a: float, size: None = ...) -> float: ... # type: ignore[misc] + @overload + def weibull( + self, a: _ArrayLikeFloat_co, size: Optional[_ShapeLike] = ... + ) -> ndarray[Any, dtype[float64]]: ... + @overload + def power(self, a: float, size: None = ...) -> float: ... # type: ignore[misc] + @overload + def power( + self, a: _ArrayLikeFloat_co, size: Optional[_ShapeLike] = ... + ) -> ndarray[Any, dtype[float64]]: ... + @overload + def standard_cauchy(self, size: None = ...) -> float: ... # type: ignore[misc] + @overload + def standard_cauchy(self, size: _ShapeLike = ...) -> ndarray[Any, dtype[float64]]: ... + @overload + def laplace(self, loc: float = ..., scale: float = ..., size: None = ...) -> float: ... # type: ignore[misc] + @overload + def laplace( + self, + loc: _ArrayLikeFloat_co = ..., + scale: _ArrayLikeFloat_co = ..., + size: Optional[_ShapeLike] = ..., + ) -> ndarray[Any, dtype[float64]]: ... + @overload + def gumbel(self, loc: float = ..., scale: float = ..., size: None = ...) -> float: ... # type: ignore[misc] + @overload + def gumbel( + self, + loc: _ArrayLikeFloat_co = ..., + scale: _ArrayLikeFloat_co = ..., + size: Optional[_ShapeLike] = ..., + ) -> ndarray[Any, dtype[float64]]: ... + @overload + def logistic(self, loc: float = ..., scale: float = ..., size: None = ...) -> float: ... # type: ignore[misc] + @overload + def logistic( + self, + loc: _ArrayLikeFloat_co = ..., + scale: _ArrayLikeFloat_co = ..., + size: Optional[_ShapeLike] = ..., + ) -> ndarray[Any, dtype[float64]]: ... + @overload + def lognormal(self, mean: float = ..., sigma: float = ..., size: None = ...) -> float: ... # type: ignore[misc] + @overload + def lognormal( + self, + mean: _ArrayLikeFloat_co = ..., + sigma: _ArrayLikeFloat_co = ..., + size: Optional[_ShapeLike] = ..., + ) -> ndarray[Any, dtype[float64]]: ... + @overload + def rayleigh(self, scale: float = ..., size: None = ...) -> float: ... # type: ignore[misc] + @overload + def rayleigh( + self, scale: _ArrayLikeFloat_co = ..., size: Optional[_ShapeLike] = ... + ) -> ndarray[Any, dtype[float64]]: ... + @overload + def wald(self, mean: float, scale: float, size: None = ...) -> float: ... # type: ignore[misc] + @overload + def wald( + self, mean: _ArrayLikeFloat_co, scale: _ArrayLikeFloat_co, size: Optional[_ShapeLike] = ... + ) -> ndarray[Any, dtype[float64]]: ... + @overload + def triangular(self, left: float, mode: float, right: float, size: None = ...) -> float: ... # type: ignore[misc] + @overload + def triangular( + self, + left: _ArrayLikeFloat_co, + mode: _ArrayLikeFloat_co, + right: _ArrayLikeFloat_co, + size: Optional[_ShapeLike] = ..., + ) -> ndarray[Any, dtype[float64]]: ... + @overload + def binomial(self, n: int, p: float, size: None = ...) -> int: ... # type: ignore[misc] + @overload + def binomial( + self, n: _ArrayLikeInt_co, p: _ArrayLikeFloat_co, size: Optional[_ShapeLike] = ... + ) -> ndarray[Any, dtype[int64]]: ... + @overload + def negative_binomial(self, n: float, p: float, size: None = ...) -> int: ... # type: ignore[misc] + @overload + def negative_binomial( + self, n: _ArrayLikeFloat_co, p: _ArrayLikeFloat_co, size: Optional[_ShapeLike] = ... + ) -> ndarray[Any, dtype[int64]]: ... + @overload + def poisson(self, lam: float = ..., size: None = ...) -> int: ... # type: ignore[misc] + @overload + def poisson( + self, lam: _ArrayLikeFloat_co = ..., size: Optional[_ShapeLike] = ... + ) -> ndarray[Any, dtype[int64]]: ... + @overload + def zipf(self, a: float, size: None = ...) -> int: ... # type: ignore[misc] + @overload + def zipf( + self, a: _ArrayLikeFloat_co, size: Optional[_ShapeLike] = ... + ) -> ndarray[Any, dtype[int64]]: ... + @overload + def geometric(self, p: float, size: None = ...) -> int: ... # type: ignore[misc] + @overload + def geometric( + self, p: _ArrayLikeFloat_co, size: Optional[_ShapeLike] = ... + ) -> ndarray[Any, dtype[int64]]: ... + @overload + def hypergeometric(self, ngood: int, nbad: int, nsample: int, size: None = ...) -> int: ... # type: ignore[misc] + @overload + def hypergeometric( + self, + ngood: _ArrayLikeInt_co, + nbad: _ArrayLikeInt_co, + nsample: _ArrayLikeInt_co, + size: Optional[_ShapeLike] = ..., + ) -> ndarray[Any, dtype[int64]]: ... + @overload + def logseries(self, p: float, size: None = ...) -> int: ... # type: ignore[misc] + @overload + def logseries( + self, p: _ArrayLikeFloat_co, size: Optional[_ShapeLike] = ... + ) -> ndarray[Any, dtype[int64]]: ... + def multivariate_normal( + self, + mean: _ArrayLikeFloat_co, + cov: _ArrayLikeFloat_co, + size: Optional[_ShapeLike] = ..., + check_valid: Literal["warn", "raise", "ignore"] = ..., + tol: float = ..., + *, + method: Literal["svd", "eigh", "cholesky"] = ..., + ) -> ndarray[Any, dtype[float64]]: ... + def multinomial( + self, n: _ArrayLikeInt_co, pvals: _ArrayLikeFloat_co, size: Optional[_ShapeLike] = ... + ) -> ndarray[Any, dtype[int64]]: ... + def multivariate_hypergeometric( + self, + colors: _ArrayLikeInt_co, + nsample: int, + size: Optional[_ShapeLike] = ..., + method: Literal["marginals", "count"] = ..., + ) -> ndarray[Any, dtype[int64]]: ... + def dirichlet( + self, alpha: _ArrayLikeFloat_co, size: Optional[_ShapeLike] = ... + ) -> ndarray[Any, dtype[float64]]: ... + def permuted( + self, x: ArrayLike, *, axis: Optional[int] = ..., out: Optional[ndarray[Any, Any]] = ... + ) -> ndarray[Any, Any]: ... + def shuffle(self, x: ArrayLike, axis: int = ...) -> None: ... + +def default_rng( + seed: Union[None, _ArrayLikeInt_co, SeedSequence, BitGenerator, Generator] = ... +) -> Generator: ... diff --git a/EXE version/main/numpy/random/_mt19937.cp39-win_amd64.pyd b/EXE version/main/numpy/random/_mt19937.cp39-win_amd64.pyd new file mode 100644 index 00000000..21014677 Binary files /dev/null and b/EXE version/main/numpy/random/_mt19937.cp39-win_amd64.pyd differ diff --git a/EXE version/main/numpy/random/_mt19937.pyi b/EXE version/main/numpy/random/_mt19937.pyi new file mode 100644 index 00000000..1b8bacda --- /dev/null +++ b/EXE version/main/numpy/random/_mt19937.pyi @@ -0,0 +1,28 @@ +import sys +from typing import Any, Union + +from numpy import dtype, ndarray, uint32 +from numpy.random.bit_generator import BitGenerator, SeedSequence +from numpy.typing import _ArrayLikeInt_co + +if sys.version_info >= (3, 8): + from typing import TypedDict +else: + from typing_extensions import TypedDict + +class _MT19937Internal(TypedDict): + key: ndarray[Any, dtype[uint32]] + pos: int + +class _MT19937State(TypedDict): + bit_generator: str + state: _MT19937Internal + +class MT19937(BitGenerator): + def __init__(self, seed: Union[None, _ArrayLikeInt_co, SeedSequence] = ...) -> None: ... + def _legacy_seeding(self, seed: _ArrayLikeInt_co) -> None: ... + def jumped(self, jumps: int = ...) -> MT19937: ... + @property + def state(self) -> _MT19937State: ... + @state.setter + def state(self, value: _MT19937State) -> None: ... diff --git a/EXE version/main/numpy/random/_pcg64.cp39-win_amd64.pyd b/EXE version/main/numpy/random/_pcg64.cp39-win_amd64.pyd new file mode 100644 index 00000000..22ef2137 Binary files /dev/null and b/EXE version/main/numpy/random/_pcg64.cp39-win_amd64.pyd differ diff --git a/EXE version/main/numpy/random/_pcg64.pyi b/EXE version/main/numpy/random/_pcg64.pyi new file mode 100644 index 00000000..25e2fdde --- /dev/null +++ b/EXE version/main/numpy/random/_pcg64.pyi @@ -0,0 +1,48 @@ +import sys +from typing import Union + +from numpy.random.bit_generator import BitGenerator, SeedSequence +from numpy.typing import _ArrayLikeInt_co + +if sys.version_info >= (3, 8): + from typing import TypedDict +else: + from typing_extensions import TypedDict + +class _PCG64Internal(TypedDict): + state: int + inc: int + +class _PCG64State(TypedDict): + bit_generator: str + state: _PCG64Internal + has_uint32: int + uinteger: int + +class PCG64(BitGenerator): + def __init__(self, seed: Union[None, _ArrayLikeInt_co, SeedSequence] = ...) -> None: ... + def jumped(self, jumps: int = ...) -> PCG64: ... + @property + def state( + self, + ) -> _PCG64State: ... + @state.setter + def state( + self, + value: _PCG64State, + ) -> None: ... + def advance(self, delta: int) -> PCG64: ... + +class PCG64DXSM(BitGenerator): + def __init__(self, seed: Union[None, _ArrayLikeInt_co, SeedSequence] = ...) -> None: ... + def jumped(self, jumps: int = ...) -> PCG64DXSM: ... + @property + def state( + self, + ) -> _PCG64State: ... + @state.setter + def state( + self, + value: _PCG64State, + ) -> None: ... + def advance(self, delta: int) -> PCG64DXSM: ... diff --git a/EXE version/main/numpy/random/_philox.cp39-win_amd64.pyd b/EXE version/main/numpy/random/_philox.cp39-win_amd64.pyd new file mode 100644 index 00000000..5ca0b861 Binary files /dev/null and b/EXE version/main/numpy/random/_philox.cp39-win_amd64.pyd differ diff --git a/EXE version/main/numpy/random/_philox.pyi b/EXE version/main/numpy/random/_philox.pyi new file mode 100644 index 00000000..f6a5b9b9 --- /dev/null +++ b/EXE version/main/numpy/random/_philox.pyi @@ -0,0 +1,42 @@ +import sys +from typing import Any, Union + +from numpy import dtype, ndarray, uint64 +from numpy.random.bit_generator import BitGenerator, SeedSequence +from numpy.typing import _ArrayLikeInt_co + +if sys.version_info >= (3, 8): + from typing import TypedDict +else: + from typing_extensions import TypedDict + +class _PhiloxInternal(TypedDict): + counter: ndarray[Any, dtype[uint64]] + key: ndarray[Any, dtype[uint64]] + +class _PhiloxState(TypedDict): + bit_generator: str + state: _PhiloxInternal + buffer: ndarray[Any, dtype[uint64]] + buffer_pos: int + has_uint32: int + uinteger: int + +class Philox(BitGenerator): + def __init__( + self, + seed: Union[None, _ArrayLikeInt_co, SeedSequence] = ..., + counter: Union[None, _ArrayLikeInt_co] = ..., + key: Union[None, _ArrayLikeInt_co] = ..., + ) -> None: ... + @property + def state( + self, + ) -> _PhiloxState: ... + @state.setter + def state( + self, + value: _PhiloxState, + ) -> None: ... + def jumped(self, jumps: int = ...) -> Philox: ... + def advance(self, delta: int) -> Philox: ... diff --git a/EXE version/main/numpy/random/_sfc64.cp39-win_amd64.pyd b/EXE version/main/numpy/random/_sfc64.cp39-win_amd64.pyd new file mode 100644 index 00000000..967af1e1 Binary files /dev/null and b/EXE version/main/numpy/random/_sfc64.cp39-win_amd64.pyd differ diff --git a/EXE version/main/numpy/random/_sfc64.pyi b/EXE version/main/numpy/random/_sfc64.pyi new file mode 100644 index 00000000..72a271c9 --- /dev/null +++ b/EXE version/main/numpy/random/_sfc64.pyi @@ -0,0 +1,34 @@ +import sys +from typing import Any, Union + +from numpy import dtype as dtype +from numpy import ndarray as ndarray +from numpy import uint64 +from numpy.random.bit_generator import BitGenerator, SeedSequence +from numpy.typing import _ArrayLikeInt_co + +if sys.version_info >= (3, 8): + from typing import TypedDict +else: + from typing_extensions import TypedDict + +class _SFC64Internal(TypedDict): + state: ndarray[Any, dtype[uint64]] + +class _SFC64State(TypedDict): + bit_generator: str + state: _SFC64Internal + has_uint32: int + uinteger: int + +class SFC64(BitGenerator): + def __init__(self, seed: Union[None, _ArrayLikeInt_co, SeedSequence] = ...) -> None: ... + @property + def state( + self, + ) -> _SFC64State: ... + @state.setter + def state( + self, + value: _SFC64State, + ) -> None: ... diff --git a/EXE version/main/numpy/random/bit_generator.cp39-win_amd64.pyd b/EXE version/main/numpy/random/bit_generator.cp39-win_amd64.pyd new file mode 100644 index 00000000..a9bf75fa Binary files /dev/null and b/EXE version/main/numpy/random/bit_generator.cp39-win_amd64.pyd differ diff --git a/EXE version/main/numpy/random/bit_generator.pxd b/EXE version/main/numpy/random/bit_generator.pxd new file mode 100644 index 00000000..dfa7d0a7 --- /dev/null +++ b/EXE version/main/numpy/random/bit_generator.pxd @@ -0,0 +1,35 @@ +cimport numpy as np +from libc.stdint cimport uint32_t, uint64_t + +cdef extern from "numpy/random/bitgen.h": + struct bitgen: + void *state + uint64_t (*next_uint64)(void *st) nogil + uint32_t (*next_uint32)(void *st) nogil + double (*next_double)(void *st) nogil + uint64_t (*next_raw)(void *st) nogil + + ctypedef bitgen bitgen_t + +cdef class BitGenerator(): + cdef readonly object _seed_seq + cdef readonly object lock + cdef bitgen_t _bitgen + cdef readonly object _ctypes + cdef readonly object _cffi + cdef readonly object capsule + + +cdef class SeedSequence(): + cdef readonly object entropy + cdef readonly tuple spawn_key + cdef readonly Py_ssize_t pool_size + cdef readonly object pool + cdef readonly uint32_t n_children_spawned + + cdef mix_entropy(self, np.ndarray[np.npy_uint32, ndim=1] mixer, + np.ndarray[np.npy_uint32, ndim=1] entropy_array) + cdef get_assembled_entropy(self) + +cdef class SeedlessSequence(): + pass diff --git a/EXE version/main/numpy/random/bit_generator.pyi b/EXE version/main/numpy/random/bit_generator.pyi new file mode 100644 index 00000000..5b68dde6 --- /dev/null +++ b/EXE version/main/numpy/random/bit_generator.pyi @@ -0,0 +1,121 @@ +import abc +import sys +from threading import Lock +from typing import ( + Any, + Callable, + Dict, + List, + Mapping, + NamedTuple, + Optional, + Sequence, + Tuple, + Type, + TypedDict, + TypeVar, + Union, + overload, +) + +from numpy import dtype, ndarray, uint32, uint64 +from numpy.typing import _ArrayLikeInt_co, _ShapeLike, _SupportsDType, _UInt32Codes, _UInt64Codes + +if sys.version_info >= (3, 8): + from typing import Literal +else: + from typing_extensions import Literal + +_T = TypeVar("_T") + +_DTypeLikeUint32 = Union[ + dtype[uint32], + _SupportsDType[dtype[uint32]], + Type[uint32], + _UInt32Codes, +] +_DTypeLikeUint64 = Union[ + dtype[uint64], + _SupportsDType[dtype[uint64]], + Type[uint64], + _UInt64Codes, +] + +class _SeedSeqState(TypedDict): + entropy: Union[None, int, Sequence[int]] + spawn_key: Tuple[int, ...] + pool_size: int + n_children_spawned: int + +class _Interface(NamedTuple): + state_address: Any + state: Any + next_uint64: Any + next_uint32: Any + next_double: Any + bit_generator: Any + +class ISeedSequence(abc.ABC): + @abc.abstractmethod + def generate_state( + self, n_words: int, dtype: Union[_DTypeLikeUint32, _DTypeLikeUint64] = ... + ) -> ndarray[Any, dtype[Union[uint32, uint64]]]: ... + +class ISpawnableSeedSequence(ISeedSequence): + @abc.abstractmethod + def spawn(self: _T, n_children: int) -> List[_T]: ... + +class SeedlessSeedSequence(ISpawnableSeedSequence): + def generate_state( + self, n_words: int, dtype: Union[_DTypeLikeUint32, _DTypeLikeUint64] = ... + ) -> ndarray[Any, dtype[Union[uint32, uint64]]]: ... + def spawn(self: _T, n_children: int) -> List[_T]: ... + +class SeedSequence(ISpawnableSeedSequence): + entropy: Union[None, int, Sequence[int]] + spawn_key: Tuple[int, ...] + pool_size: int + n_children_spawned: int + pool: ndarray[Any, dtype[uint32]] + def __init__( + self, + entropy: Union[None, int, Sequence[int], _ArrayLikeInt_co] = ..., + *, + spawn_key: Sequence[int] = ..., + pool_size: int = ..., + n_children_spawned: int = ..., + ) -> None: ... + def __repr__(self) -> str: ... + @property + def state( + self, + ) -> _SeedSeqState: ... + def generate_state( + self, n_words: int, dtype: Union[_DTypeLikeUint32, _DTypeLikeUint64] = ... + ) -> ndarray[Any, dtype[Union[uint32, uint64]]]: ... + def spawn(self, n_children: int) -> List[SeedSequence]: ... + +class BitGenerator(abc.ABC): + lock: Lock + def __init__(self, seed: Union[None, _ArrayLikeInt_co, SeedSequence] = ...) -> None: ... + def __getstate__(self) -> Dict[str, Any]: ... + def __setstate__(self, state: Dict[str, Any]) -> None: ... + def __reduce__( + self, + ) -> Tuple[Callable[[str], BitGenerator], Tuple[str], Tuple[Dict[str, Any]]]: ... + @abc.abstractmethod + @property + def state(self) -> Mapping[str, Any]: ... + @state.setter + def state(self, value: Mapping[str, Any]) -> None: ... + @overload + def random_raw(self, size: None = ..., output: Literal[True] = ...) -> int: ... # type: ignore[misc] + @overload + def random_raw(self, size: _ShapeLike = ..., output: Literal[True] = ...) -> ndarray[Any, dtype[uint64]]: ... # type: ignore[misc] + @overload + def random_raw(self, size: Optional[_ShapeLike] = ..., output: Literal[False] = ...) -> None: ... # type: ignore[misc] + def _benchmark(self, cnt: int, method: str = ...) -> None: ... + @property + def ctypes(self) -> _Interface: ... + @property + def cffi(self) -> _Interface: ... diff --git a/EXE version/main/numpy/random/c_distributions.pxd b/EXE version/main/numpy/random/c_distributions.pxd new file mode 100644 index 00000000..6f905edc --- /dev/null +++ b/EXE version/main/numpy/random/c_distributions.pxd @@ -0,0 +1,114 @@ +#!python +#cython: wraparound=False, nonecheck=False, boundscheck=False, cdivision=True, language_level=3 +from numpy cimport npy_intp + +from libc.stdint cimport (uint64_t, int32_t, int64_t) +from numpy.random cimport bitgen_t + +cdef extern from "numpy/random/distributions.h": + + struct s_binomial_t: + int has_binomial + double psave + int64_t nsave + double r + double q + double fm + int64_t m + double p1 + double xm + double xl + double xr + double c + double laml + double lamr + double p2 + double p3 + double p4 + + ctypedef s_binomial_t binomial_t + + double random_standard_uniform(bitgen_t *bitgen_state) nogil + void random_standard_uniform_fill(bitgen_t* bitgen_state, npy_intp cnt, double *out) nogil + double random_standard_exponential(bitgen_t *bitgen_state) nogil + double random_standard_exponential_f(bitgen_t *bitgen_state) nogil + void random_standard_exponential_fill(bitgen_t *bitgen_state, npy_intp cnt, double *out) nogil + void random_standard_exponential_fill_f(bitgen_t *bitgen_state, npy_intp cnt, double *out) nogil + void random_standard_exponential_inv_fill(bitgen_t *bitgen_state, npy_intp cnt, double *out) nogil + void random_standard_exponential_inv_fill_f(bitgen_t *bitgen_state, npy_intp cnt, double *out) nogil + double random_standard_normal(bitgen_t* bitgen_state) nogil + void random_standard_normal_fill(bitgen_t *bitgen_state, npy_intp count, double *out) nogil + void random_standard_normal_fill_f(bitgen_t *bitgen_state, npy_intp count, float *out) nogil + double random_standard_gamma(bitgen_t *bitgen_state, double shape) nogil + + float random_standard_uniform_f(bitgen_t *bitgen_state) nogil + void random_standard_uniform_fill_f(bitgen_t* bitgen_state, npy_intp cnt, float *out) nogil + float random_standard_normal_f(bitgen_t* bitgen_state) nogil + float random_standard_gamma_f(bitgen_t *bitgen_state, float shape) nogil + + int64_t random_positive_int64(bitgen_t *bitgen_state) nogil + int32_t random_positive_int32(bitgen_t *bitgen_state) nogil + int64_t random_positive_int(bitgen_t *bitgen_state) nogil + uint64_t random_uint(bitgen_t *bitgen_state) nogil + + double random_normal(bitgen_t *bitgen_state, double loc, double scale) nogil + + double random_gamma(bitgen_t *bitgen_state, double shape, double scale) nogil + float random_gamma_f(bitgen_t *bitgen_state, float shape, float scale) nogil + + double random_exponential(bitgen_t *bitgen_state, double scale) nogil + double random_uniform(bitgen_t *bitgen_state, double lower, double range) nogil + double random_beta(bitgen_t *bitgen_state, double a, double b) nogil + double random_chisquare(bitgen_t *bitgen_state, double df) nogil + double random_f(bitgen_t *bitgen_state, double dfnum, double dfden) nogil + double random_standard_cauchy(bitgen_t *bitgen_state) nogil + double random_pareto(bitgen_t *bitgen_state, double a) nogil + double random_weibull(bitgen_t *bitgen_state, double a) nogil + double random_power(bitgen_t *bitgen_state, double a) nogil + double random_laplace(bitgen_t *bitgen_state, double loc, double scale) nogil + double random_gumbel(bitgen_t *bitgen_state, double loc, double scale) nogil + double random_logistic(bitgen_t *bitgen_state, double loc, double scale) nogil + double random_lognormal(bitgen_t *bitgen_state, double mean, double sigma) nogil + double random_rayleigh(bitgen_t *bitgen_state, double mode) nogil + double random_standard_t(bitgen_t *bitgen_state, double df) nogil + double random_noncentral_chisquare(bitgen_t *bitgen_state, double df, + double nonc) nogil + double random_noncentral_f(bitgen_t *bitgen_state, double dfnum, + double dfden, double nonc) nogil + double random_wald(bitgen_t *bitgen_state, double mean, double scale) nogil + double random_vonmises(bitgen_t *bitgen_state, double mu, double kappa) nogil + double random_triangular(bitgen_t *bitgen_state, double left, double mode, + double right) nogil + + int64_t random_poisson(bitgen_t *bitgen_state, double lam) nogil + int64_t random_negative_binomial(bitgen_t *bitgen_state, double n, double p) nogil + int64_t random_binomial(bitgen_t *bitgen_state, double p, int64_t n, binomial_t *binomial) nogil + int64_t random_logseries(bitgen_t *bitgen_state, double p) nogil + int64_t random_geometric_search(bitgen_t *bitgen_state, double p) nogil + int64_t random_geometric_inversion(bitgen_t *bitgen_state, double p) nogil + int64_t random_geometric(bitgen_t *bitgen_state, double p) nogil + int64_t random_zipf(bitgen_t *bitgen_state, double a) nogil + int64_t random_hypergeometric(bitgen_t *bitgen_state, int64_t good, int64_t bad, + int64_t sample) nogil + + uint64_t random_interval(bitgen_t *bitgen_state, uint64_t max) nogil + + # Generate random uint64 numbers in closed interval [off, off + rng]. + uint64_t random_bounded_uint64(bitgen_t *bitgen_state, + uint64_t off, uint64_t rng, + uint64_t mask, bint use_masked) nogil + + void random_multinomial(bitgen_t *bitgen_state, int64_t n, int64_t *mnix, + double *pix, npy_intp d, binomial_t *binomial) nogil + + int random_multivariate_hypergeometric_count(bitgen_t *bitgen_state, + int64_t total, + size_t num_colors, int64_t *colors, + int64_t nsample, + size_t num_variates, int64_t *variates) nogil + void random_multivariate_hypergeometric_marginals(bitgen_t *bitgen_state, + int64_t total, + size_t num_colors, int64_t *colors, + int64_t nsample, + size_t num_variates, int64_t *variates) nogil + diff --git a/EXE version/main/numpy/random/lib/npyrandom.lib b/EXE version/main/numpy/random/lib/npyrandom.lib new file mode 100644 index 00000000..9a09e666 Binary files /dev/null and b/EXE version/main/numpy/random/lib/npyrandom.lib differ diff --git a/EXE version/main/numpy/random/mtrand.cp39-win_amd64.pyd b/EXE version/main/numpy/random/mtrand.cp39-win_amd64.pyd new file mode 100644 index 00000000..d0425e3c Binary files /dev/null and b/EXE version/main/numpy/random/mtrand.cp39-win_amd64.pyd differ diff --git a/EXE version/main/numpy/random/mtrand.pyi b/EXE version/main/numpy/random/mtrand.pyi new file mode 100644 index 00000000..3137b0a9 --- /dev/null +++ b/EXE version/main/numpy/random/mtrand.pyi @@ -0,0 +1,579 @@ +import sys +from typing import Any, Callable, Dict, Optional, Tuple, Type, Union, overload + +from numpy import ( + bool_, + dtype, + float32, + float64, + int8, + int16, + int32, + int64, + int_, + ndarray, + uint, + uint8, + uint16, + uint32, + uint64, +) +from numpy.random.bit_generator import BitGenerator +from numpy.typing import ( + ArrayLike, + _ArrayLikeFloat_co, + _ArrayLikeInt_co, + _DoubleCodes, + _DTypeLikeBool, + _DTypeLikeInt, + _DTypeLikeUInt, + _Float32Codes, + _Float64Codes, + _Int8Codes, + _Int16Codes, + _Int32Codes, + _Int64Codes, + _IntCodes, + _ShapeLike, + _SingleCodes, + _SupportsDType, + _UInt8Codes, + _UInt16Codes, + _UInt32Codes, + _UInt64Codes, + _UIntCodes, +) + +if sys.version_info >= (3, 8): + from typing import Literal +else: + from typing_extensions import Literal + +_DTypeLikeFloat32 = Union[ + dtype[float32], + _SupportsDType[dtype[float32]], + Type[float32], + _Float32Codes, + _SingleCodes, +] + +_DTypeLikeFloat64 = Union[ + dtype[float64], + _SupportsDType[dtype[float64]], + Type[float], + Type[float64], + _Float64Codes, + _DoubleCodes, +] + +class RandomState: + _bit_generator: BitGenerator + def __init__(self, seed: Union[None, _ArrayLikeInt_co, BitGenerator] = ...) -> None: ... + def __repr__(self) -> str: ... + def __str__(self) -> str: ... + def __getstate__(self) -> Dict[str, Any]: ... + def __setstate__(self, state: Dict[str, Any]) -> None: ... + def __reduce__(self) -> Tuple[Callable[[str], RandomState], Tuple[str], Dict[str, Any]]: ... + def seed(self, seed: Optional[_ArrayLikeFloat_co] = ...) -> None: ... + @overload + def get_state(self, legacy: Literal[False] = ...) -> Dict[str, Any]: ... + @overload + def get_state( + self, legacy: Literal[True] = ... + ) -> Union[Dict[str, Any], Tuple[str, ndarray[Any, dtype[uint32]], int, int, float]]: ... + def set_state( + self, state: Union[Dict[str, Any], Tuple[str, ndarray[Any, dtype[uint32]], int, int, float]] + ) -> None: ... + @overload + def random_sample(self, size: None = ...) -> float: ... # type: ignore[misc] + @overload + def random_sample(self, size: _ShapeLike = ...) -> ndarray[Any, dtype[float64]]: ... + @overload + def random(self, size: None = ...) -> float: ... # type: ignore[misc] + @overload + def random(self, size: _ShapeLike = ...) -> ndarray[Any, dtype[float64]]: ... + @overload + def beta(self, a: float, b: float, size: None = ...) -> float: ... # type: ignore[misc] + @overload + def beta( + self, a: _ArrayLikeFloat_co, b: _ArrayLikeFloat_co, size: Optional[_ShapeLike] = ... + ) -> ndarray[Any, dtype[float64]]: ... + @overload + def exponential(self, scale: float = ..., size: None = ...) -> float: ... # type: ignore[misc] + @overload + def exponential( + self, scale: _ArrayLikeFloat_co = ..., size: Optional[_ShapeLike] = ... + ) -> ndarray[Any, dtype[float64]]: ... + @overload + def standard_exponential(self, size: None = ...) -> float: ... # type: ignore[misc] + @overload + def standard_exponential(self, size: _ShapeLike = ...) -> ndarray[Any, dtype[float64]]: ... + @overload + def tomaxint(self, size: None = ...) -> int: ... # type: ignore[misc] + @overload + def tomaxint(self, size: _ShapeLike = ...) -> ndarray[Any, dtype[int_]]: ... + @overload + def randint( # type: ignore[misc] + self, + low: int, + high: Optional[int] = ..., + ) -> int: ... + @overload + def randint( # type: ignore[misc] + self, + low: int, + high: Optional[int] = ..., + size: None = ..., + dtype: _DTypeLikeBool = ..., + ) -> bool: ... + @overload + def randint( # type: ignore[misc] + self, + low: int, + high: Optional[int] = ..., + size: None = ..., + dtype: Union[_DTypeLikeInt, _DTypeLikeUInt] = ..., + ) -> int: ... + @overload + def randint( # type: ignore[misc] + self, + low: _ArrayLikeInt_co, + high: Optional[_ArrayLikeInt_co] = ..., + size: Optional[_ShapeLike] = ..., + ) -> ndarray[Any, dtype[int_]]: ... + @overload + def randint( # type: ignore[misc] + self, + low: _ArrayLikeInt_co, + high: Optional[_ArrayLikeInt_co] = ..., + size: Optional[_ShapeLike] = ..., + dtype: _DTypeLikeBool = ..., + ) -> ndarray[Any, dtype[bool_]]: ... + @overload + def randint( # type: ignore[misc] + self, + low: _ArrayLikeInt_co, + high: Optional[_ArrayLikeInt_co] = ..., + size: Optional[_ShapeLike] = ..., + dtype: Union[dtype[int8], Type[int8], _Int8Codes, _SupportsDType[dtype[int8]]] = ..., + ) -> ndarray[Any, dtype[int8]]: ... + @overload + def randint( # type: ignore[misc] + self, + low: _ArrayLikeInt_co, + high: Optional[_ArrayLikeInt_co] = ..., + size: Optional[_ShapeLike] = ..., + dtype: Union[dtype[int16], Type[int16], _Int16Codes, _SupportsDType[dtype[int16]]] = ..., + ) -> ndarray[Any, dtype[int16]]: ... + @overload + def randint( # type: ignore[misc] + self, + low: _ArrayLikeInt_co, + high: Optional[_ArrayLikeInt_co] = ..., + size: Optional[_ShapeLike] = ..., + dtype: Union[dtype[int32], Type[int32], _Int32Codes, _SupportsDType[dtype[int32]]] = ..., + ) -> ndarray[Any, dtype[Union[int32]]]: ... + @overload + def randint( # type: ignore[misc] + self, + low: _ArrayLikeInt_co, + high: Optional[_ArrayLikeInt_co] = ..., + size: Optional[_ShapeLike] = ..., + dtype: Optional[ + Union[dtype[int64], Type[int64], _Int64Codes, _SupportsDType[dtype[int64]]] + ] = ..., + ) -> ndarray[Any, dtype[int64]]: ... + @overload + def randint( # type: ignore[misc] + self, + low: _ArrayLikeInt_co, + high: Optional[_ArrayLikeInt_co] = ..., + size: Optional[_ShapeLike] = ..., + dtype: Union[dtype[uint8], Type[uint8], _UInt8Codes, _SupportsDType[dtype[uint8]]] = ..., + ) -> ndarray[Any, dtype[uint8]]: ... + @overload + def randint( # type: ignore[misc] + self, + low: _ArrayLikeInt_co, + high: Optional[_ArrayLikeInt_co] = ..., + size: Optional[_ShapeLike] = ..., + dtype: Union[ + dtype[uint16], Type[uint16], _UInt16Codes, _SupportsDType[dtype[uint16]] + ] = ..., + ) -> ndarray[Any, dtype[Union[uint16]]]: ... + @overload + def randint( # type: ignore[misc] + self, + low: _ArrayLikeInt_co, + high: Optional[_ArrayLikeInt_co] = ..., + size: Optional[_ShapeLike] = ..., + dtype: Union[ + dtype[uint32], Type[uint32], _UInt32Codes, _SupportsDType[dtype[uint32]] + ] = ..., + ) -> ndarray[Any, dtype[uint32]]: ... + @overload + def randint( # type: ignore[misc] + self, + low: _ArrayLikeInt_co, + high: Optional[_ArrayLikeInt_co] = ..., + size: Optional[_ShapeLike] = ..., + dtype: Union[ + dtype[uint64], Type[uint64], _UInt64Codes, _SupportsDType[dtype[uint64]] + ] = ..., + ) -> ndarray[Any, dtype[uint64]]: ... + @overload + def randint( # type: ignore[misc] + self, + low: _ArrayLikeInt_co, + high: Optional[_ArrayLikeInt_co] = ..., + size: Optional[_ShapeLike] = ..., + dtype: Union[ + dtype[int_], Type[int], Type[int_], _IntCodes, _SupportsDType[dtype[int_]] + ] = ..., + ) -> ndarray[Any, dtype[int_]]: ... + @overload + def randint( # type: ignore[misc] + self, + low: _ArrayLikeInt_co, + high: Optional[_ArrayLikeInt_co] = ..., + size: Optional[_ShapeLike] = ..., + dtype: Union[dtype[uint], Type[uint], _UIntCodes, _SupportsDType[dtype[uint]]] = ..., + ) -> ndarray[Any, dtype[uint]]: ... + def bytes(self, length: int) -> bytes: ... + @overload + def choice( + self, + a: int, + size: None = ..., + replace: bool = ..., + p: Optional[_ArrayLikeFloat_co] = ..., + ) -> int: ... + @overload + def choice( + self, + a: int, + size: _ShapeLike = ..., + replace: bool = ..., + p: Optional[_ArrayLikeFloat_co] = ..., + ) -> ndarray[Any, dtype[int_]]: ... + @overload + def choice( + self, + a: ArrayLike, + size: None = ..., + replace: bool = ..., + p: Optional[_ArrayLikeFloat_co] = ..., + ) -> Any: ... + @overload + def choice( + self, + a: ArrayLike, + size: _ShapeLike = ..., + replace: bool = ..., + p: Optional[_ArrayLikeFloat_co] = ..., + ) -> ndarray[Any, Any]: ... + @overload + def uniform(self, low: float = ..., high: float = ..., size: None = ...) -> float: ... # type: ignore[misc] + @overload + def uniform( + self, + low: _ArrayLikeFloat_co = ..., + high: _ArrayLikeFloat_co = ..., + size: Optional[_ShapeLike] = ..., + ) -> ndarray[Any, dtype[float64]]: ... + @overload + def rand(self) -> float: ... + @overload + def rand(self, *args: int) -> ndarray[Any, dtype[float64]]: ... + @overload + def randn(self) -> float: ... + @overload + def randn(self, *args: int) -> ndarray[Any, dtype[float64]]: ... + @overload + def random_integers(self, low: int, high: Optional[int] = ..., size: None = ...) -> int: ... # type: ignore[misc] + @overload + def random_integers( + self, + low: _ArrayLikeInt_co, + high: Optional[_ArrayLikeInt_co] = ..., + size: Optional[_ShapeLike] = ..., + ) -> ndarray[Any, dtype[int_]]: ... + @overload + def standard_normal(self, size: None = ...) -> float: ... # type: ignore[misc] + @overload + def standard_normal( # type: ignore[misc] + self, size: _ShapeLike = ... + ) -> ndarray[Any, dtype[float64]]: ... + @overload + def normal(self, loc: float = ..., scale: float = ..., size: None = ...) -> float: ... # type: ignore[misc] + @overload + def normal( + self, + loc: _ArrayLikeFloat_co = ..., + scale: _ArrayLikeFloat_co = ..., + size: Optional[_ShapeLike] = ..., + ) -> ndarray[Any, dtype[float64]]: ... + @overload + def standard_gamma( # type: ignore[misc] + self, + shape: float, + size: None = ..., + ) -> float: ... + @overload + def standard_gamma( + self, + shape: _ArrayLikeFloat_co, + size: Optional[_ShapeLike] = ..., + ) -> ndarray[Any, dtype[float64]]: ... + @overload + def gamma(self, shape: float, scale: float = ..., size: None = ...) -> float: ... # type: ignore[misc] + @overload + def gamma( + self, + shape: _ArrayLikeFloat_co, + scale: _ArrayLikeFloat_co = ..., + size: Optional[_ShapeLike] = ..., + ) -> ndarray[Any, dtype[float64]]: ... + @overload + def f(self, dfnum: float, dfden: float, size: None = ...) -> float: ... # type: ignore[misc] + @overload + def f( + self, dfnum: _ArrayLikeFloat_co, dfden: _ArrayLikeFloat_co, size: Optional[_ShapeLike] = ... + ) -> ndarray[Any, dtype[float64]]: ... + @overload + def noncentral_f(self, dfnum: float, dfden: float, nonc: float, size: None = ...) -> float: ... # type: ignore[misc] + @overload + def noncentral_f( + self, + dfnum: _ArrayLikeFloat_co, + dfden: _ArrayLikeFloat_co, + nonc: _ArrayLikeFloat_co, + size: Optional[_ShapeLike] = ..., + ) -> ndarray[Any, dtype[float64]]: ... + @overload + def chisquare(self, df: float, size: None = ...) -> float: ... # type: ignore[misc] + @overload + def chisquare( + self, df: _ArrayLikeFloat_co, size: Optional[_ShapeLike] = ... + ) -> ndarray[Any, dtype[float64]]: ... + @overload + def noncentral_chisquare(self, df: float, nonc: float, size: None = ...) -> float: ... # type: ignore[misc] + @overload + def noncentral_chisquare( + self, df: _ArrayLikeFloat_co, nonc: _ArrayLikeFloat_co, size: Optional[_ShapeLike] = ... + ) -> ndarray[Any, dtype[float64]]: ... + @overload + def standard_t(self, df: float, size: None = ...) -> float: ... # type: ignore[misc] + @overload + def standard_t( + self, df: _ArrayLikeFloat_co, size: None = ... + ) -> ndarray[Any, dtype[float64]]: ... + @overload + def standard_t( + self, df: _ArrayLikeFloat_co, size: _ShapeLike = ... + ) -> ndarray[Any, dtype[float64]]: ... + @overload + def vonmises(self, mu: float, kappa: float, size: None = ...) -> float: ... # type: ignore[misc] + @overload + def vonmises( + self, mu: _ArrayLikeFloat_co, kappa: _ArrayLikeFloat_co, size: Optional[_ShapeLike] = ... + ) -> ndarray[Any, dtype[float64]]: ... + @overload + def pareto(self, a: float, size: None = ...) -> float: ... # type: ignore[misc] + @overload + def pareto( + self, a: _ArrayLikeFloat_co, size: Optional[_ShapeLike] = ... + ) -> ndarray[Any, dtype[float64]]: ... + @overload + def weibull(self, a: float, size: None = ...) -> float: ... # type: ignore[misc] + @overload + def weibull( + self, a: _ArrayLikeFloat_co, size: Optional[_ShapeLike] = ... + ) -> ndarray[Any, dtype[float64]]: ... + @overload + def power(self, a: float, size: None = ...) -> float: ... # type: ignore[misc] + @overload + def power( + self, a: _ArrayLikeFloat_co, size: Optional[_ShapeLike] = ... + ) -> ndarray[Any, dtype[float64]]: ... + @overload + def standard_cauchy(self, size: None = ...) -> float: ... # type: ignore[misc] + @overload + def standard_cauchy(self, size: _ShapeLike = ...) -> ndarray[Any, dtype[float64]]: ... + @overload + def laplace(self, loc: float = ..., scale: float = ..., size: None = ...) -> float: ... # type: ignore[misc] + @overload + def laplace( + self, + loc: _ArrayLikeFloat_co = ..., + scale: _ArrayLikeFloat_co = ..., + size: Optional[_ShapeLike] = ..., + ) -> ndarray[Any, dtype[float64]]: ... + @overload + def gumbel(self, loc: float = ..., scale: float = ..., size: None = ...) -> float: ... # type: ignore[misc] + @overload + def gumbel( + self, + loc: _ArrayLikeFloat_co = ..., + scale: _ArrayLikeFloat_co = ..., + size: Optional[_ShapeLike] = ..., + ) -> ndarray[Any, dtype[float64]]: ... + @overload + def logistic(self, loc: float = ..., scale: float = ..., size: None = ...) -> float: ... # type: ignore[misc] + @overload + def logistic( + self, + loc: _ArrayLikeFloat_co = ..., + scale: _ArrayLikeFloat_co = ..., + size: Optional[_ShapeLike] = ..., + ) -> ndarray[Any, dtype[float64]]: ... + @overload + def lognormal(self, mean: float = ..., sigma: float = ..., size: None = ...) -> float: ... # type: ignore[misc] + @overload + def lognormal( + self, + mean: _ArrayLikeFloat_co = ..., + sigma: _ArrayLikeFloat_co = ..., + size: Optional[_ShapeLike] = ..., + ) -> ndarray[Any, dtype[float64]]: ... + @overload + def rayleigh(self, scale: float = ..., size: None = ...) -> float: ... # type: ignore[misc] + @overload + def rayleigh( + self, scale: _ArrayLikeFloat_co = ..., size: Optional[_ShapeLike] = ... + ) -> ndarray[Any, dtype[float64]]: ... + @overload + def wald(self, mean: float, scale: float, size: None = ...) -> float: ... # type: ignore[misc] + @overload + def wald( + self, mean: _ArrayLikeFloat_co, scale: _ArrayLikeFloat_co, size: Optional[_ShapeLike] = ... + ) -> ndarray[Any, dtype[float64]]: ... + @overload + def triangular(self, left: float, mode: float, right: float, size: None = ...) -> float: ... # type: ignore[misc] + @overload + def triangular( + self, + left: _ArrayLikeFloat_co, + mode: _ArrayLikeFloat_co, + right: _ArrayLikeFloat_co, + size: Optional[_ShapeLike] = ..., + ) -> ndarray[Any, dtype[float64]]: ... + @overload + def binomial(self, n: int, p: float, size: None = ...) -> int: ... # type: ignore[misc] + @overload + def binomial( + self, n: _ArrayLikeInt_co, p: _ArrayLikeFloat_co, size: Optional[_ShapeLike] = ... + ) -> ndarray[Any, dtype[int_]]: ... + @overload + def negative_binomial(self, n: float, p: float, size: None = ...) -> int: ... # type: ignore[misc] + @overload + def negative_binomial( + self, n: _ArrayLikeFloat_co, p: _ArrayLikeFloat_co, size: Optional[_ShapeLike] = ... + ) -> ndarray[Any, dtype[int_]]: ... + @overload + def poisson(self, lam: float = ..., size: None = ...) -> int: ... # type: ignore[misc] + @overload + def poisson( + self, lam: _ArrayLikeFloat_co = ..., size: Optional[_ShapeLike] = ... + ) -> ndarray[Any, dtype[int_]]: ... + @overload + def zipf(self, a: float, size: None = ...) -> int: ... # type: ignore[misc] + @overload + def zipf( + self, a: _ArrayLikeFloat_co, size: Optional[_ShapeLike] = ... + ) -> ndarray[Any, dtype[int_]]: ... + @overload + def geometric(self, p: float, size: None = ...) -> int: ... # type: ignore[misc] + @overload + def geometric( + self, p: _ArrayLikeFloat_co, size: Optional[_ShapeLike] = ... + ) -> ndarray[Any, dtype[int_]]: ... + @overload + def hypergeometric(self, ngood: int, nbad: int, nsample: int, size: None = ...) -> int: ... # type: ignore[misc] + @overload + def hypergeometric( + self, + ngood: _ArrayLikeInt_co, + nbad: _ArrayLikeInt_co, + nsample: _ArrayLikeInt_co, + size: Optional[_ShapeLike] = ..., + ) -> ndarray[Any, dtype[int_]]: ... + @overload + def logseries(self, p: float, size: None = ...) -> int: ... # type: ignore[misc] + @overload + def logseries( + self, p: _ArrayLikeFloat_co, size: Optional[_ShapeLike] = ... + ) -> ndarray[Any, dtype[int_]]: ... + def multivariate_normal( + self, + mean: _ArrayLikeFloat_co, + cov: _ArrayLikeFloat_co, + size: Optional[_ShapeLike] = ..., + check_valid: Literal["warn", "raise", "ignore"] = ..., + tol: float = ..., + ) -> ndarray[Any, dtype[float64]]: ... + def multinomial( + self, n: _ArrayLikeInt_co, pvals: _ArrayLikeFloat_co, size: Optional[_ShapeLike] = ... + ) -> ndarray[Any, dtype[int_]]: ... + def dirichlet( + self, alpha: _ArrayLikeFloat_co, size: Optional[_ShapeLike] = ... + ) -> ndarray[Any, dtype[float64]]: ... + def shuffle(self, x: ArrayLike) -> None: ... + @overload + def permutation(self, x: int) -> ndarray[Any, dtype[int_]]: ... + @overload + def permutation(self, x: ArrayLike) -> ndarray[Any, Any]: ... + +_rand: RandomState + +beta = _rand.beta +binomial = _rand.binomial +bytes = _rand.bytes +chisquare = _rand.chisquare +choice = _rand.choice +dirichlet = _rand.dirichlet +exponential = _rand.exponential +f = _rand.f +gamma = _rand.gamma +get_state = _rand.get_state +geometric = _rand.geometric +gumbel = _rand.gumbel +hypergeometric = _rand.hypergeometric +laplace = _rand.laplace +logistic = _rand.logistic +lognormal = _rand.lognormal +logseries = _rand.logseries +multinomial = _rand.multinomial +multivariate_normal = _rand.multivariate_normal +negative_binomial = _rand.negative_binomial +noncentral_chisquare = _rand.noncentral_chisquare +noncentral_f = _rand.noncentral_f +normal = _rand.normal +pareto = _rand.pareto +permutation = _rand.permutation +poisson = _rand.poisson +power = _rand.power +rand = _rand.rand +randint = _rand.randint +randn = _rand.randn +random = _rand.random +random_integers = _rand.random_integers +random_sample = _rand.random_sample +rayleigh = _rand.rayleigh +seed = _rand.seed +set_state = _rand.set_state +shuffle = _rand.shuffle +standard_cauchy = _rand.standard_cauchy +standard_exponential = _rand.standard_exponential +standard_gamma = _rand.standard_gamma +standard_normal = _rand.standard_normal +standard_t = _rand.standard_t +triangular = _rand.triangular +uniform = _rand.uniform +vonmises = _rand.vonmises +wald = _rand.wald +weibull = _rand.weibull +zipf = _rand.zipf +# Two legacy that are trivial wrappers around random_sample +sample = _rand.random_sample +ranf = _rand.random_sample diff --git a/EXE version/main/numpy/random/tests/data/mt19937-testset-1.csv b/EXE version/main/numpy/random/tests/data/mt19937-testset-1.csv new file mode 100644 index 00000000..b97bfa66 --- /dev/null +++ b/EXE version/main/numpy/random/tests/data/mt19937-testset-1.csv @@ -0,0 +1,1001 @@ +seed, 0xdeadbeaf +0, 0xc816921f +1, 0xb3623c6d +2, 0x5fa391bb +3, 0x40178d9 +4, 0x7dcc9811 +5, 0x548eb8e6 +6, 0x92ba3125 +7, 0x65fde68d +8, 0x2f81ec95 +9, 0xbd94f7a2 +10, 0xdc4d9bcc +11, 0xa672bf13 +12, 0xb41113e +13, 0xec7e0066 +14, 0x50239372 +15, 0xd9d66b1d +16, 0xab72a161 +17, 0xddc2e29f +18, 0x7ea29ab4 +19, 0x80d141ba +20, 0xb1c7edf1 +21, 0x44d29203 +22, 0xe224d98 +23, 0x5b3e9d26 +24, 0x14fd567c +25, 0x27d98c96 +26, 0x838779fc +27, 0x92a138a +28, 0x5d08965b +29, 0x531e0ad6 +30, 0x984ee8f4 +31, 0x1ed78539 +32, 0x32bd6d8d +33, 0xc37c8516 +34, 0x9aef5c6b +35, 0x3aacd139 +36, 0xd96ed154 +37, 0x489cd1ed +38, 0x2cba4b3b +39, 0x76c6ae72 +40, 0x2dae02b9 +41, 0x52ac5fd6 +42, 0xc2b5e265 +43, 0x630e6a28 +44, 0x3f560d5d +45, 0x9315bdf3 +46, 0xf1055aba +47, 0x840e42c6 +48, 0xf2099c6b +49, 0x15ff7696 +50, 0x7948d146 +51, 0x97342961 +52, 0x7a7a21c +53, 0xc66f4fb1 +54, 0x23c4103e +55, 0xd7321f98 +56, 0xeb7efb75 +57, 0xe02490b5 +58, 0x2aa02de +59, 0x8bee0bf7 +60, 0xfc2da059 +61, 0xae835034 +62, 0x678f2075 +63, 0x6d03094b +64, 0x56455e05 +65, 0x18b32373 +66, 0x8ff0356b +67, 0x1fe442fb +68, 0x3f1ab6c3 +69, 0xb6fd21b +70, 0xfc310eb2 +71, 0xb19e9a4d +72, 0x17ddee72 +73, 0xfd534251 +74, 0x9e500564 +75, 0x9013a036 +76, 0xcf08f118 +77, 0x6b6d5969 +78, 0x3ccf1977 +79, 0x7cc11497 +80, 0x651c6ac9 +81, 0x4d6b104b +82, 0x9a28314e +83, 0x14c237be +84, 0x9cfc8d52 +85, 0x2947fad5 +86, 0xd71eff49 +87, 0x5188730e +88, 0x4b894614 +89, 0xf4fa2a34 +90, 0x42f7cc69 +91, 0x4089c9e8 +92, 0xbf0bbfe4 +93, 0x3cea65c +94, 0xc6221207 +95, 0x1bb71a8f +96, 0x54843fe7 +97, 0xbc59de4c +98, 0x79c6ee64 +99, 0x14e57a26 +100, 0x68d88fe +101, 0x2b86ef64 +102, 0x8ffff3c1 +103, 0x5bdd573f +104, 0x85671813 +105, 0xefe32ca2 +106, 0x105ded1e +107, 0x90ca2769 +108, 0xb33963ac +109, 0x363fbbc3 +110, 0x3b3763ae +111, 0x1d50ab88 +112, 0xc9ec01eb +113, 0xc8bbeada +114, 0x5d704692 +115, 0x5fd9e40 +116, 0xe61c125 +117, 0x2fe05792 +118, 0xda8afb72 +119, 0x4cbaa653 +120, 0xdd2243df +121, 0x896fd3f5 +122, 0x5bc23db +123, 0xa1c4e807 +124, 0x57d1a24d +125, 0x66503ddc +126, 0xcf7c0838 +127, 0x19e034fc +128, 0x66807450 +129, 0xfc219b3b +130, 0xe8a843e7 +131, 0x9ce61f08 +132, 0x92b950d6 +133, 0xce955ec4 +134, 0xda0d1f0d +135, 0x960c6250 +136, 0x39552432 +137, 0xde845e84 +138, 0xff3b4b11 +139, 0x5d918e6f +140, 0xbb930df2 +141, 0x7cfb0993 +142, 0x5400e1e9 +143, 0x3bfa0954 +144, 0x7e2605fb +145, 0x11941591 +146, 0x887e6994 +147, 0xdc8bed45 +148, 0x45b3fb50 +149, 0xfbdf8358 +150, 0x41507468 +151, 0x34c87166 +152, 0x17f64d77 +153, 0x3bbaf4f8 +154, 0x4f26f37e +155, 0x4a56ebf2 +156, 0x81100f1 +157, 0x96d94eae +158, 0xca88fda5 +159, 0x2eef3a60 +160, 0x952afbd3 +161, 0x2bec88c7 +162, 0x52335c4b +163, 0x8296db8e +164, 0x4da7d00a +165, 0xc00ac899 +166, 0xadff8c72 +167, 0xbecf26cf +168, 0x8835c83c +169, 0x1d13c804 +170, 0xaa940ddc +171, 0x68222cfe +172, 0x4569c0e1 +173, 0x29077976 +174, 0x32d4a5af +175, 0xd31fcdef +176, 0xdc60682b +177, 0x7c95c368 +178, 0x75a70213 +179, 0x43021751 +180, 0x5e52e0a6 +181, 0xf7e190b5 +182, 0xee3e4bb +183, 0x2fe3b150 +184, 0xcf419c07 +185, 0x478a4570 +186, 0xe5c3ea50 +187, 0x417f30a8 +188, 0xf0cfdaa0 +189, 0xd1f7f738 +190, 0x2c70fc23 +191, 0x54fc89f9 +192, 0x444dcf01 +193, 0xec2a002d +194, 0xef0c3a88 +195, 0xde21be9 +196, 0x88ab3296 +197, 0x3028897c +198, 0x264b200b +199, 0xd8ae0706 +200, 0x9eef901a +201, 0xbd1b96e0 +202, 0xea71366c +203, 0x1465b694 +204, 0x5a794650 +205, 0x83df52d4 +206, 0x8262413d +207, 0x5bc148c0 +208, 0xe0ecd80c +209, 0x40649571 +210, 0xb4d2ee5f +211, 0xedfd7d09 +212, 0xa082e25f +213, 0xc62992d1 +214, 0xbc7e65ee +215, 0x5499cf8a +216, 0xac28f775 +217, 0x649840fb +218, 0xd4c54805 +219, 0x1d166ba6 +220, 0xbeb1171f +221, 0x45b66703 +222, 0x78c03349 +223, 0x38d2a6ff +224, 0x935cae8b +225, 0x1d07dc3f +226, 0x6c1ed365 +227, 0x579fc585 +228, 0x1320c0ec +229, 0x632757eb +230, 0xd265a397 +231, 0x70e9b6c2 +232, 0xc81e322c +233, 0xa27153cf +234, 0x2118ba19 +235, 0x514ec400 +236, 0x2bd0ecd6 +237, 0xc3e7dae3 +238, 0xfa39355e +239, 0x48f23cc1 +240, 0xbcf75948 +241, 0x53ccc70c +242, 0x75346423 +243, 0x951181e0 +244, 0x348e90df +245, 0x14365d7f +246, 0xfbc95d7a +247, 0xdc98a9e6 +248, 0xed202df7 +249, 0xa59ec913 +250, 0x6b6e9ae2 +251, 0x1697f265 +252, 0x15d322d0 +253, 0xa2e7ee0a +254, 0x88860b7e +255, 0x455d8b9d +256, 0x2f5c59cb +257, 0xac49c9f1 +258, 0xa6a6a039 +259, 0xc057f56b +260, 0xf1ff1208 +261, 0x5eb8dc9d +262, 0xe6702509 +263, 0xe238b0ed +264, 0x5ae32e3d +265, 0xa88ebbdf +266, 0xef885ae7 +267, 0xafa6d49b +268, 0xc94499e0 +269, 0x1a196325 +270, 0x88938da3 +271, 0x14f4345 +272, 0xd8e33637 +273, 0xa3551bd5 +274, 0x73fe35c7 +275, 0x9561e94b +276, 0xd673bf68 +277, 0x16134872 +278, 0x68c42f9f +279, 0xdf7574c8 +280, 0x8809bab9 +281, 0x1432cf69 +282, 0xafb66bf1 +283, 0xc184aa7b +284, 0xedbf2007 +285, 0xbd420ce1 +286, 0x761033a0 +287, 0xff7e351f +288, 0xd6c3780e +289, 0x5844416f +290, 0xc6c0ee1c +291, 0xd2e147db +292, 0x92ac601a +293, 0x393e846b +294, 0x18196cca +295, 0x54a22be +296, 0x32bab1c4 +297, 0x60365183 +298, 0x64fa342 +299, 0xca24a493 +300, 0xd8cc8b83 +301, 0x3faf102b +302, 0x6e09bb58 +303, 0x812f0ea +304, 0x592c95d8 +305, 0xe45ea4c5 +306, 0x23aebf83 +307, 0xbd9691d4 +308, 0xf47b4baa +309, 0x4ac7b487 +310, 0xcce18803 +311, 0x3377556e +312, 0x3ff8e6b6 +313, 0x99d22063 +314, 0x23250bec +315, 0x4e1f9861 +316, 0x8554249b +317, 0x8635c2fc +318, 0xe8426e8a +319, 0x966c29d8 +320, 0x270b6082 +321, 0x3180a8a1 +322, 0xe7e1668b +323, 0x7f868dc +324, 0xcf4c17cf +325, 0xe31de4d1 +326, 0xc8c8aff4 +327, 0xae8db704 +328, 0x3c928cc2 +329, 0xe12cd48 +330, 0xb33ecd04 +331, 0xb93d7cbe +332, 0x49c69d6a +333, 0x7d3bce64 +334, 0x86bc219 +335, 0x8408233b +336, 0x44dc7479 +337, 0xdf80d538 +338, 0xf3db02c3 +339, 0xbbbd31d7 +340, 0x121281f +341, 0x7521e9a3 +342, 0x8859675a +343, 0x75aa6502 +344, 0x430ed15b +345, 0xecf0a28d +346, 0x659774fd +347, 0xd58a2311 +348, 0x512389a9 +349, 0xff65e1ff +350, 0xb6ddf222 +351, 0xe3458895 +352, 0x8b13cd6e +353, 0xd4a22870 +354, 0xe604c50c +355, 0x27f54f26 +356, 0x8f7f422f +357, 0x9735b4cf +358, 0x414072b0 +359, 0x76a1c6d5 +360, 0xa2208c06 +361, 0x83cd0f61 +362, 0x6c4f7ead +363, 0x6553cf76 +364, 0xeffcf44 +365, 0x7f434a3f +366, 0x9dc364bd +367, 0x3cdf52ed +368, 0xad597594 +369, 0x9c3e211b +370, 0x6c04a33f +371, 0x885dafa6 +372, 0xbbdaca71 +373, 0x7ae5dd5c +374, 0x37675644 +375, 0x251853c6 +376, 0x130b086b +377, 0x143fa54b +378, 0x54cdc282 +379, 0x9faff5b3 +380, 0x502a5c8b +381, 0xd9524550 +382, 0xae221aa6 +383, 0x55cf759b +384, 0x24782da4 +385, 0xd715d815 +386, 0x250ea09a +387, 0x4e0744ac +388, 0x11e15814 +389, 0xabe5f9df +390, 0xc8146350 +391, 0xfba67d9b +392, 0x2b82e42f +393, 0xd4ea96fc +394, 0x5ffc179e +395, 0x1598bafe +396, 0x7fb6d662 +397, 0x1a12a0db +398, 0x450cee4a +399, 0x85f8e12 +400, 0xce71b594 +401, 0xd4bb1d19 +402, 0x968f379d +403, 0x54cc1d52 +404, 0x467e6066 +405, 0x7da5f9a9 +406, 0x70977034 +407, 0x49e65c4b +408, 0xd08570d1 +409, 0x7acdf60b +410, 0xdffa038b +411, 0x9ce14e4c +412, 0x107cbbf8 +413, 0xdd746ca0 +414, 0xc6370a46 +415, 0xe7f83312 +416, 0x373fa9ce +417, 0xd822a2c6 +418, 0x1d4efea6 +419, 0xc53dcadb +420, 0x9b4e898f +421, 0x71daa6bf +422, 0x7a0bc78b +423, 0xd7b86f50 +424, 0x1b8b3286 +425, 0xcf9425dd +426, 0xd5263220 +427, 0x4ea0b647 +428, 0xc767fe64 +429, 0xcfc5e67 +430, 0xcc6a2942 +431, 0xa51eff00 +432, 0x76092e1b +433, 0xf606e80f +434, 0x824b5e20 +435, 0xebb55e14 +436, 0x783d96a6 +437, 0x10696512 +438, 0x17ee510a +439, 0x3ab70a1f +440, 0xcce6b210 +441, 0x8f72f0fb +442, 0xf0610b41 +443, 0x83d01fb5 +444, 0x6b3de36 +445, 0xe4c2e84f +446, 0x9c43bb15 +447, 0xddf2905 +448, 0x7dd63556 +449, 0x3662ca09 +450, 0xfb81f35b +451, 0xc2c8a72a +452, 0x8e93c37 +453, 0xa93da2d4 +454, 0xa03af8f1 +455, 0x8d75159a +456, 0x15f010b0 +457, 0xa296ab06 +458, 0xe55962ba +459, 0xeae700a9 +460, 0xe388964a +461, 0x917f2bec +462, 0x1c203fea +463, 0x792a01ba +464, 0xa93a80ac +465, 0x9eb8a197 +466, 0x56c0bc73 +467, 0xb8f05799 +468, 0xf429a8c8 +469, 0xb92cee42 +470, 0xf8864ec +471, 0x62f2518a +472, 0x3a7bfa3e +473, 0x12e56e6d +474, 0xd7a18313 +475, 0x41fa3899 +476, 0xa09c4956 +477, 0xebcfd94a +478, 0xc485f90b +479, 0x4391ce40 +480, 0x742a3333 +481, 0xc932f9e5 +482, 0x75c6c263 +483, 0x80937f0 +484, 0xcf21833c +485, 0x16027520 +486, 0xd42e669f +487, 0xb0f01fb7 +488, 0xb35896f1 +489, 0x763737a9 +490, 0x1bb20209 +491, 0x3551f189 +492, 0x56bc2602 +493, 0xb6eacf4 +494, 0x42ec4d11 +495, 0x245cc68 +496, 0xc27ac43b +497, 0x9d903466 +498, 0xce3f0c05 +499, 0xb708c31c +500, 0xc0fd37eb +501, 0x95938b2c +502, 0xf20175a7 +503, 0x4a86ee9b +504, 0xbe039a58 +505, 0xd41cabe7 +506, 0x83bc99ba +507, 0x761d60e1 +508, 0x7737cc2e +509, 0x2b82fc4b +510, 0x375aa401 +511, 0xfe9597a0 +512, 0x5543806a +513, 0x44f31238 +514, 0x7df31538 +515, 0x74cfa770 +516, 0x8755d881 +517, 0x1fde665a +518, 0xda8bf315 +519, 0x973d8e95 +520, 0x72205228 +521, 0x8fe59717 +522, 0x7bb90b34 +523, 0xef6ed945 +524, 0x16fd4a38 +525, 0x5db44de1 +526, 0xf09f93b3 +527, 0xe84824cc +528, 0x945bb50e +529, 0xd0be4aa5 +530, 0x47c277c2 +531, 0xd3800c28 +532, 0xac1c33ec +533, 0xd3dacce +534, 0x811c8387 +535, 0x6761b36 +536, 0x70d3882f +537, 0xd6e62e3a +538, 0xea25daa2 +539, 0xb07f39d1 +540, 0x391d89d7 +541, 0x84b6fb5e +542, 0x3dda3fca +543, 0x229e80a4 +544, 0x3d94a4b7 +545, 0x5d3d576a +546, 0xad7818a0 +547, 0xce23b03a +548, 0x7aa2079c +549, 0x9a6be555 +550, 0x83f3b34a +551, 0x1848f9d9 +552, 0xd8fefc1c +553, 0x48e6ce48 +554, 0x52e55750 +555, 0xf41a71cf +556, 0xba08e259 +557, 0xfaf06a15 +558, 0xeaaac0fb +559, 0x34f90098 +560, 0xb1dfffbb +561, 0x718daec2 +562, 0xab4dda21 +563, 0xd27cc1ee +564, 0x4aafbc4c +565, 0x356dfb4f +566, 0x83fcdfd6 +567, 0x8f0bcde0 +568, 0x4363f844 +569, 0xadc0f4d5 +570, 0x3bde994e +571, 0x3884d452 +572, 0x21876b4a +573, 0x9c985398 +574, 0xca55a226 +575, 0x3a88c583 +576, 0x916dc33c +577, 0x8f67d1d7 +578, 0x3b26a667 +579, 0xe4ddeb4b +580, 0x1a9d8c33 +581, 0x81c9b74f +582, 0x9ed1e9df +583, 0x6e61aecf +584, 0x95e95a5d +585, 0x68864ff5 +586, 0xb8fa5b9 +587, 0x72b1b3de +588, 0x5e18a86b +589, 0xd7f2337d +590, 0xd70e0925 +591, 0xb573a4c1 +592, 0xc77b3f8a +593, 0x389b20de +594, 0x16cf6afb +595, 0xa39bd275 +596, 0xf491cf01 +597, 0x6f88a802 +598, 0x8510af05 +599, 0xe7cd549a +600, 0x8603179a +601, 0xef43f191 +602, 0xf9b64c60 +603, 0xb00254a7 +604, 0xd7c06a2d +605, 0x17e9380b +606, 0x529e727b +607, 0xaaa8fe0a +608, 0xfb64ff4c +609, 0xcd75af26 +610, 0xfb717c87 +611, 0xa0789899 +612, 0x10391ec9 +613, 0x7e9b40b3 +614, 0x18536554 +615, 0x728c05f7 +616, 0x787dca98 +617, 0xad948d1 +618, 0x44c18def +619, 0x3303f2ec +620, 0xa15acb5 +621, 0xb58d38f4 +622, 0xfe041ef8 +623, 0xd151a956 +624, 0x7b9168e8 +625, 0x5ebeca06 +626, 0x90fe95df +627, 0xf76875aa +628, 0xb2e0d664 +629, 0x2e3253b7 +630, 0x68e34469 +631, 0x1f0c2d89 +632, 0x13a34ac2 +633, 0x5ffeb841 +634, 0xe381e91c +635, 0xb8549a92 +636, 0x3f35cf1 +637, 0xda0f9dcb +638, 0xdd9828a6 +639, 0xe1428f29 +640, 0xf4db80b5 +641, 0xdac30af5 +642, 0x1af1dd17 +643, 0x9a540254 +644, 0xcab68a38 +645, 0x33560361 +646, 0x2fbf3886 +647, 0xbc785923 +648, 0xe081cd10 +649, 0x8e473356 +650, 0xd102c357 +651, 0xeea4fe48 +652, 0x248d3453 +653, 0x1da79ac +654, 0x815a65ff +655, 0x27693e76 +656, 0xb7d5af40 +657, 0x6d245d30 +658, 0x9e06fa8f +659, 0xb0570dcb +660, 0x469f0005 +661, 0x3e0ca132 +662, 0xd89bbf3 +663, 0xd61ccd47 +664, 0x6383878 +665, 0x62b5956 +666, 0x4dc83675 +667, 0x93fd8492 +668, 0x5a0091f5 +669, 0xc9f9bc3 +670, 0xa26e7778 +671, 0xeabf2d01 +672, 0xe612dc06 +673, 0x85d89ff9 +674, 0xd1763179 +675, 0xcb88947b +676, 0x9e8757a5 +677, 0xe100e85c +678, 0x904166eb +679, 0x4996243d +680, 0x4038e1cb +681, 0x2be2c63d +682, 0x77017e81 +683, 0x3b1f556b +684, 0x1c785c77 +685, 0x6869b8bd +686, 0xe1217ed4 +687, 0x4012ab2f +688, 0xc06c0d8e +689, 0x2122eb68 +690, 0xad1783fd +691, 0x5f0c80e3 +692, 0x828f7efa +693, 0x29328399 +694, 0xeadf1087 +695, 0x85dc0037 +696, 0x9691ef26 +697, 0xc0947a53 +698, 0x2a178d2a +699, 0x2a2c7e8f +700, 0x90378380 +701, 0xaad8d326 +702, 0x9cf1c3c8 +703, 0x84eccd44 +704, 0x79e61808 +705, 0x8b3f454e +706, 0x209e6e1 +707, 0x51f88378 +708, 0xc210226f +709, 0xd982adb5 +710, 0x55d44a31 +711, 0x9817d443 +712, 0xa328c626 +713, 0x13455966 +714, 0xb8f681d3 +715, 0x2a3c713b +716, 0xc186959b +717, 0x814a74b0 +718, 0xed7bc90 +719, 0xa88d3d6d +720, 0x88a9f561 +721, 0x73aa1c0a +722, 0xdfeff404 +723, 0xec037e4b +724, 0xa5c209f0 +725, 0xb3a223b4 +726, 0x24ce3709 +727, 0x3184c790 +728, 0xa1398c62 +729, 0x2f92034e +730, 0xbb37a79a +731, 0x605287b4 +732, 0x8faa772c +733, 0x6ce56c1d +734, 0xc035fb4c +735, 0x7cf5b316 +736, 0x6502645 +737, 0xa283d810 +738, 0x778bc2f1 +739, 0xfdf99313 +740, 0x1f513265 +741, 0xbd3837e2 +742, 0x9b84a9a +743, 0x2139ce91 +744, 0x61a8e890 +745, 0xf9ff12db +746, 0xb43d2ea7 +747, 0x88532e61 +748, 0x175a6655 +749, 0x7a6c4f72 +750, 0x6dafc1b7 +751, 0x449b1459 +752, 0x514f654f +753, 0x9a6731e2 +754, 0x8632da43 +755, 0xc81b0422 +756, 0x81fe9005 +757, 0x15b79618 +758, 0xb5fa629f +759, 0x987a474f +760, 0x1c74f54e +761, 0xf9743232 +762, 0xec4b55f +763, 0x87d761e5 +764, 0xd1ad78b7 +765, 0x453d9350 +766, 0xc7a7d85 +767, 0xb2576ff5 +768, 0xcdde49b7 +769, 0x8e1f763e +770, 0x1338583e +771, 0xfd65b9dc +772, 0x4f19c4f4 +773, 0x3a52d73d +774, 0xd3509c4c +775, 0xda24fe31 +776, 0xe2de56ba +777, 0x2db5e540 +778, 0x23172734 +779, 0x4db572f +780, 0xeb941718 +781, 0x84c2649a +782, 0x3b1e5b6a +783, 0x4c9c61b9 +784, 0x3bccd11 +785, 0xb4d7b78e +786, 0x48580ae5 +787, 0xd273ab68 +788, 0x25c11615 +789, 0x470b53f6 +790, 0x329c2068 +791, 0x1693721b +792, 0xf8c9aacf +793, 0x4c3d5693 +794, 0xd778284e +795, 0xae1cb24f +796, 0x3c11d1b3 +797, 0xddd2b0c0 +798, 0x90269fa7 +799, 0x5666e0a2 +800, 0xf9f195a4 +801, 0x61d78eb2 +802, 0xada5a7c0 +803, 0xaa272fbe +804, 0xba3bae2f +805, 0xd0b70fc2 +806, 0x529f32b +807, 0xda7a3e21 +808, 0x9a776a20 +809, 0xb21f9635 +810, 0xb3acc14e +811, 0xac55f56 +812, 0x29dccf41 +813, 0x32dabdb3 +814, 0xaa032f58 +815, 0xfa406af4 +816, 0xce3c415d +817, 0xb44fb4d9 +818, 0x32248d1c +819, 0x680c6440 +820, 0xae2337b +821, 0x294cb597 +822, 0x5bca48fe +823, 0xaef19f40 +824, 0xad60406 +825, 0x4781f090 +826, 0xfd691ffc +827, 0xb6568268 +828, 0xa56c72cb +829, 0xf8a9e0fc +830, 0x9af4fd02 +831, 0x2cd30932 +832, 0x776cefd7 +833, 0xe31f476e +834, 0x6d94a437 +835, 0xb3cab598 +836, 0xf582d13f +837, 0x3bf8759d +838, 0xc3777dc +839, 0x5e425ea8 +840, 0x1c7ff4ed +841, 0x1c2e97d1 +842, 0xc062d2b4 +843, 0x46dc80e0 +844, 0xbcdb47e6 +845, 0x32282fe0 +846, 0xaba89063 +847, 0x5e94e9bb +848, 0x3e667f78 +849, 0xea6eb21a +850, 0xe56e54e8 +851, 0xa0383510 +852, 0x6768fe2b +853, 0xb53ac3e0 +854, 0x779569a0 +855, 0xeca83c6a +856, 0x24db4d2d +857, 0x4585f696 +858, 0xf84748b2 +859, 0xf6a4dd5b +860, 0x31fb524d +861, 0x67ab39fe +862, 0x5882a899 +863, 0x9a05fcf6 +864, 0x712b5674 +865, 0xe8c6958f +866, 0x4b448bb3 +867, 0x530b9abf +868, 0xb491f491 +869, 0x98352c62 +870, 0x2d0a50e3 +871, 0xeb4384da +872, 0x36246f07 +873, 0xcbc5c1a +874, 0xae24031d +875, 0x44d11ed6 +876, 0xf07f1608 +877, 0xf296aadd +878, 0x3bcfe3be +879, 0x8fa1e7df +880, 0xfd317a6e +881, 0xe4975c44 +882, 0x15205892 +883, 0xa762d4df +884, 0xf1167365 +885, 0x6811cc00 +886, 0x8315f23 +887, 0xe045b4b1 +888, 0xa8496414 +889, 0xbed313ae +890, 0xcdae3ddb +891, 0xa9c22c9 +892, 0x275fab1a +893, 0xedd65fa +894, 0x4c188229 +895, 0x63a83e58 +896, 0x18aa9207 +897, 0xa41f2e78 +898, 0xd9f63653 +899, 0xbe2be73b +900, 0xa3364d39 +901, 0x896d5428 +902, 0xc737539e +903, 0x745a78c6 +904, 0xf0b2b042 +905, 0x510773b4 +906, 0x92ad8e37 +907, 0x27f2f8c4 +908, 0x23704cc8 +909, 0x3d95a77f +910, 0xf08587a4 +911, 0xbd696a25 +912, 0x948924f3 +913, 0x8cddb634 +914, 0xcd2a4910 +915, 0x8e0e300e +916, 0x83815a9b +917, 0x67383510 +918, 0x3c18f0d0 +919, 0xc7a7bccc +920, 0x7cc2d3a2 +921, 0x52eb2eeb +922, 0xe4a257e5 +923, 0xec76160e +924, 0x63f9ad68 +925, 0x36d0bbbf +926, 0x957bc4e4 +927, 0xc9ed90ff +928, 0x4cb6059d +929, 0x2f86eca1 +930, 0x3e3665a3 +931, 0x9b7eb6f4 +932, 0x492e7e18 +933, 0xa098aa51 +934, 0x7eb568b2 +935, 0x3fd639ba +936, 0x7bebcf1 +937, 0x99c844ad +938, 0x43cb5ec7 +939, 0x8dfbbef5 +940, 0x5be413ff +941, 0xd93b976d +942, 0xc1c7a86d +943, 0x1f0e93d0 +944, 0x498204a2 +945, 0xe8fe832a +946, 0x2236bd7 +947, 0x89953769 +948, 0x2acc3491 +949, 0x2c4f22c6 +950, 0xd7996277 +951, 0x3bcdc349 +952, 0xfc286630 +953, 0x5f8909fd +954, 0x242677c0 +955, 0x4cb34104 +956, 0xa6ff8100 +957, 0x39ea47ec +958, 0x9bd54140 +959, 0x7502ffe8 +960, 0x7ebef8ae +961, 0x1ed8abe4 +962, 0xfaba8450 +963, 0xc197b65f +964, 0x19431455 +965, 0xe229c176 +966, 0xeb2967da +967, 0xe0c5dc05 +968, 0xa84e3227 +969, 0x10dd9e0f +970, 0xbdb70b02 +971, 0xce24808a +972, 0x423edab8 +973, 0x194caf71 +974, 0x144f150d +975, 0xf811c2d2 +976, 0xc224ee85 +977, 0x2b217a5b +978, 0xf78a5a79 +979, 0x6554a4b1 +980, 0x769582df +981, 0xf4b2cf93 +982, 0x89648483 +983, 0xb3283a3e +984, 0x82b895db +985, 0x79388ef0 +986, 0x54bc42a6 +987, 0xc4dd39d9 +988, 0x45b33b7d +989, 0x8703b2c1 +990, 0x1cc94806 +991, 0xe0f43e49 +992, 0xcaa7b6bc +993, 0x4f88e9af +994, 0x1477cce5 +995, 0x347dd115 +996, 0x36e335fa +997, 0xb93c9a31 +998, 0xaac3a175 +999, 0x68a19647 diff --git a/EXE version/main/numpy/random/tests/data/mt19937-testset-2.csv b/EXE version/main/numpy/random/tests/data/mt19937-testset-2.csv new file mode 100644 index 00000000..cdb8e479 --- /dev/null +++ b/EXE version/main/numpy/random/tests/data/mt19937-testset-2.csv @@ -0,0 +1,1001 @@ +seed, 0x0 +0, 0x7ab4ea94 +1, 0x9b561119 +2, 0x4957d02e +3, 0x7dd3fdc2 +4, 0x5affe54 +5, 0x5a01741c +6, 0x8b9e8c1f +7, 0xda5bf11a +8, 0x509226 +9, 0x64e2ea17 +10, 0x82c6dab5 +11, 0xe4302515 +12, 0x8198b873 +13, 0xc3ec9a82 +14, 0x829dff28 +15, 0x5278e44f +16, 0x994a7d2c +17, 0xf1c89398 +18, 0xaf2fddec +19, 0x22abc6ee +20, 0x963dbd43 +21, 0xc29edffb +22, 0x41c1ce07 +23, 0x9c90034d +24, 0x1f17a796 +25, 0x3833caa8 +26, 0xb8795528 +27, 0xebc595a2 +28, 0xf8f5b5dd +29, 0xc2881f72 +30, 0x18e5d3f0 +31, 0x9b19ac7a +32, 0xb9992436 +33, 0xc00052b3 +34, 0xb63f4475 +35, 0x962642d9 +36, 0x63506c10 +37, 0x2be6b127 +38, 0x569bdbc6 +39, 0x7f185e01 +40, 0xebb55f53 +41, 0x1c30198c +42, 0x7c8d75c6 +43, 0xd3f2186b +44, 0xaca5b9b1 +45, 0xbc49ff45 +46, 0xc4a802af +47, 0x2cecd86f +48, 0x8e0da529 +49, 0x1f22b00e +50, 0x4559ea80 +51, 0x60f587d8 +52, 0x7c7460e9 +53, 0x67be0a4a +54, 0x987a0183 +55, 0x7bd30f1 +56, 0xab18c4ac +57, 0xffdbfb64 +58, 0x9ea917f9 +59, 0x1239dab7 +60, 0x38efabeb +61, 0x5da91888 +62, 0x8f49ed62 +63, 0x83f60b1e +64, 0x5950a3fc +65, 0xd8911104 +66, 0x19e8859e +67, 0x1a4d89ec +68, 0x968ca180 +69, 0x9e1b6da3 +70, 0x3d99c2c +71, 0x55f76289 +72, 0x8fa28b9e +73, 0x9fe01d33 +74, 0xdade4e38 +75, 0x1ea04290 +76, 0xa7263313 +77, 0xaafc762e +78, 0x460476d6 +79, 0x31226e12 +80, 0x451d3f05 +81, 0xd0d2764b +82, 0xd06e1ab3 +83, 0x1394e3f4 +84, 0x2fc04ea3 +85, 0x5b8401c +86, 0xebd6c929 +87, 0xe881687c +88, 0x94bdd66a +89, 0xabf85983 +90, 0x223ad12d +91, 0x2aaeeaa3 +92, 0x1f704934 +93, 0x2db2efb6 +94, 0xf49b8dfb +95, 0x5bdbbb9d +96, 0xba0cd0db +97, 0x4ec4674e +98, 0xad0129e +99, 0x7a66129b +100, 0x50d12c5e +101, 0x85b1d335 +102, 0x3efda58a +103, 0xecd886fb +104, 0x8ecadd3d +105, 0x60ebac0f +106, 0x5e10fe79 +107, 0xa84f7e5d +108, 0x43931288 +109, 0xfacf448 +110, 0x4ee01997 +111, 0xcdc0a651 +112, 0x33c87037 +113, 0x8b50fc03 +114, 0xf52aad34 +115, 0xda6cd856 +116, 0x7585bea0 +117, 0xe947c762 +118, 0x4ddff5d8 +119, 0xe0e79b3b +120, 0xb804cf09 +121, 0x84765c44 +122, 0x3ff666b4 +123, 0xe31621ad +124, 0x816f2236 +125, 0x228176bc +126, 0xfdc14904 +127, 0x635f5077 +128, 0x6981a817 +129, 0xfd9a0300 +130, 0xd3fa8a24 +131, 0xd67c1a77 +132, 0x903fe97a +133, 0xf7c4a4d5 +134, 0x109f2058 +135, 0x48ab87fe +136, 0xfd6f1928 +137, 0x707e9452 +138, 0xf327db9e +139, 0x7b80d76d +140, 0xfb6ba193 +141, 0x454a1ad0 +142, 0xe20b51e +143, 0xb774d085 +144, 0x6b1ed574 +145, 0xb1e77de4 +146, 0xe2a83b37 +147, 0x33d3176f +148, 0x2f0ca0fc +149, 0x17f51e2 +150, 0x7c1fbf55 +151, 0xf09e9cd0 +152, 0xe3d9bacd +153, 0x4244db0a +154, 0x876c09fc +155, 0x9db4fc2f +156, 0xd3771d60 +157, 0x25fc6a75 +158, 0xb309915c +159, 0xc50ee027 +160, 0xaa5b7b38 +161, 0x4c650ded +162, 0x1acb2879 +163, 0x50db5887 +164, 0x90054847 +165, 0xfef23e5b +166, 0x2dd7b7d5 +167, 0x990b8c2e +168, 0x6001a601 +169, 0xb5d314c4 +170, 0xfbfb7bf9 +171, 0x1aba997d +172, 0x814e7304 +173, 0x989d956a +174, 0x86d5a29c +175, 0x70a9fa08 +176, 0xc4ccba87 +177, 0x7e9cb366 +178, 0xee18eb0a +179, 0x44f5be58 +180, 0x91d4af2d +181, 0x5ab6e593 +182, 0x9fd6bb4d +183, 0x85894ce +184, 0x728a2401 +185, 0xf006f6d4 +186, 0xd782741e +187, 0x842cd5bd +188, 0xfb5883aa +189, 0x7e5a471 +190, 0x83ff6965 +191, 0xc9675c6b +192, 0xb6ced3c7 +193, 0x3de6425b +194, 0x25e14db4 +195, 0x69ca3dec +196, 0x81342d13 +197, 0xd7cd8417 +198, 0x88d15e69 +199, 0xefba17c9 +200, 0x43d595e6 +201, 0x89d4cf25 +202, 0x7cae9b9b +203, 0x2242c621 +204, 0x27fc3598 +205, 0x467b1d84 +206, 0xe84d4622 +207, 0xa26bf980 +208, 0x80411010 +209, 0xe2c2bfea +210, 0xbc6ca25a +211, 0x3ddb592a +212, 0xdd46eb9e +213, 0xdfe8f657 +214, 0x2cedc974 +215, 0xf0dc546b +216, 0xd46be68f +217, 0x26d8a5aa +218, 0x76e96ba3 +219, 0x7d5b5353 +220, 0xf532237c +221, 0x6478b79 +222, 0x9b81a5e5 +223, 0x5fc68e5c +224, 0x68436e70 +225, 0x2a0043f9 +226, 0x108d523c +227, 0x7a4c32a3 +228, 0x9c84c742 +229, 0x6f813dae +230, 0xfcc5bbcc +231, 0x215b6f3a +232, 0x84cb321d +233, 0x7913a248 +234, 0xb1e6b585 +235, 0x49376b31 +236, 0x1dc896b0 +237, 0x347051ad +238, 0x5524c042 +239, 0xda0eef9d +240, 0xf2e73342 +241, 0xbeee2f9d +242, 0x7c702874 +243, 0x9eb3bd34 +244, 0x97b09700 +245, 0xcdbab1d4 +246, 0x4a2f6ed1 +247, 0x2047bda5 +248, 0x3ecc7005 +249, 0x8d0d5e67 +250, 0x40876fb5 +251, 0xb5fd2187 +252, 0xe915d8af +253, 0x9a2351c7 +254, 0xccc658ae +255, 0xebb1eddc +256, 0xc4a83671 +257, 0xffb2548f +258, 0xe4fe387a +259, 0x477aaab4 +260, 0x8475a4e4 +261, 0xf8823e46 +262, 0xe4130f71 +263, 0xbdb54482 +264, 0x98fe0462 +265, 0xf36b27b8 +266, 0xed7733da +267, 0x5f428afc +268, 0x43a3a21a +269, 0xf8370b55 +270, 0xfade1de1 +271, 0xd9a038ea +272, 0x3c69af23 +273, 0x24df7dd0 +274, 0xf66d9353 +275, 0x71d811be +276, 0xcc4d024b +277, 0xb8c30bf0 +278, 0x4198509d +279, 0x8b37ba36 +280, 0xa41ae29a +281, 0x8cf7799e +282, 0x5cd0136a +283, 0xa11324ef +284, 0x2f8b6d4b +285, 0x3657cf17 +286, 0x35b6873f +287, 0xee6e5bd7 +288, 0xbeeaa98 +289, 0x9ad3c581 +290, 0xe2376c3f +291, 0x738027cc +292, 0x536ac839 +293, 0xf066227 +294, 0x6c9cb0f9 +295, 0x84082ae6 +296, 0xab38ae9d +297, 0x493eade9 +298, 0xcb630b3a +299, 0x64d44250 +300, 0xe5efb557 +301, 0xea2424d9 +302, 0x11a690ba +303, 0x30a48ae4 +304, 0x58987e53 +305, 0x94ec6076 +306, 0x5d3308fa +307, 0xf1635ebb +308, 0x56a5ab90 +309, 0x2b2f2ee4 +310, 0x6f9e6483 +311, 0x8b93e327 +312, 0xa7ce140b +313, 0x4c8aa42 +314, 0x7657bb3f +315, 0xf250fd75 +316, 0x1edfcb0f +317, 0xdb42ace3 +318, 0xf8147e16 +319, 0xd1992bd +320, 0x64bb14d1 +321, 0x423e724d +322, 0x7b172f7c +323, 0x17171696 +324, 0x4acaf83b +325, 0x7a83527e +326, 0xfc980c60 +327, 0xc8b56bb +328, 0x2453f77f +329, 0x85ad1bf9 +330, 0x62a85dfe +331, 0x48238c4d +332, 0xbb3ec1eb +333, 0x4c1c039c +334, 0x1f37f571 +335, 0x98aecb63 +336, 0xc3b3ddd6 +337, 0xd22dad4 +338, 0xe49671a3 +339, 0xe3baf945 +340, 0xb9e21680 +341, 0xda562856 +342, 0xe8b88ce4 +343, 0x86f88de2 +344, 0x986faf76 +345, 0x6f0025c3 +346, 0x3fe21234 +347, 0xd8d3f729 +348, 0xc2d11c6f +349, 0xd4f9e8f +350, 0xf61a0aa +351, 0xc48bb313 +352, 0xe944e940 +353, 0xf1801b2e +354, 0x253590be +355, 0x981f069d +356, 0x891454d8 +357, 0xa4f824ad +358, 0x6dd2cc48 +359, 0x3018827e +360, 0x3fb329e6 +361, 0x65276517 +362, 0x8d2c0dd2 +363, 0xc965b48e +364, 0x85d14d90 +365, 0x5a51623c +366, 0xa9573d6a +367, 0x82d00edf +368, 0x5ed7ce07 +369, 0x1d946abc +370, 0x24fa567b +371, 0x83ef5ecc +372, 0x9001724a +373, 0xc4fe48f3 +374, 0x1e07c25c +375, 0xf4d5e65e +376, 0xb734f6e9 +377, 0x327a2df8 +378, 0x766d59b7 +379, 0x625e6b61 +380, 0xe82f32d7 +381, 0x1566c638 +382, 0x2e815871 +383, 0x606514aa +384, 0x36b7386e +385, 0xcaa8ce08 +386, 0xb453fe9c +387, 0x48574e23 +388, 0x71f0da06 +389, 0xa8a79463 +390, 0x6b590210 +391, 0x86e989db +392, 0x42899f4f +393, 0x7a654ef9 +394, 0x4c4fe932 +395, 0x77b2fd10 +396, 0xb6b4565c +397, 0xa2e537a3 +398, 0xef5a3dca +399, 0x41235ea8 +400, 0x95c90541 +401, 0x50ad32c4 +402, 0xc1b8e0a4 +403, 0x498e9aab +404, 0xffc965f1 +405, 0x72633485 +406, 0x3a731aef +407, 0x7cfddd0b +408, 0xb04d4129 +409, 0x184fc28e +410, 0x424369b0 +411, 0xf9ae13a1 +412, 0xaf357c8d +413, 0x7a19228e +414, 0xb46de2a8 +415, 0xeff2ac76 +416, 0xa6c9357b +417, 0x614f19c1 +418, 0x8ee1a53f +419, 0xbe1257b1 +420, 0xf72651fe +421, 0xd347c298 +422, 0x96dd2f23 +423, 0x5bb1d63e +424, 0x32e10887 +425, 0x36a144da +426, 0x9d70e791 +427, 0x5e535a25 +428, 0x214253da +429, 0x2e43dd40 +430, 0xfc0413f4 +431, 0x1f5ea409 +432, 0x1754c126 +433, 0xcdbeebbe +434, 0x1fb44a14 +435, 0xaec7926 +436, 0xb9d9a1e +437, 0x9e4a6577 +438, 0x8b1f04c5 +439, 0x19854e8a +440, 0x531080cd +441, 0xc0cbd73 +442, 0x20399d77 +443, 0x7d8e9ed5 +444, 0x66177598 +445, 0x4d18a5c2 +446, 0xe08ebf58 +447, 0xb1f9c87b +448, 0x66bedb10 +449, 0x26670d21 +450, 0x7a7892da +451, 0x69b69d86 +452, 0xd04f1d1c +453, 0xaf469625 +454, 0x7946b813 +455, 0x1ee596bd +456, 0x7f365d85 +457, 0x795b662b +458, 0x194ad02d +459, 0x5a9649b5 +460, 0x6085e278 +461, 0x2cf54550 +462, 0x9c77ea0b +463, 0x3c6ff8b +464, 0x2141cd34 +465, 0xb90bc671 +466, 0x35037c4b +467, 0xd04c0d76 +468, 0xc75bff8 +469, 0x8f52003b +470, 0xfad3d031 +471, 0x667024bc +472, 0xcb04ea36 +473, 0x3e03d587 +474, 0x2644d3a0 +475, 0xa8fe99ba +476, 0x2b9a55fc +477, 0x45c4d44a +478, 0xd059881 +479, 0xe07fcd20 +480, 0x4e22046c +481, 0x7c2cbf81 +482, 0xbf7f23de +483, 0x69d924c3 +484, 0xe53cd01 +485, 0x3879017c +486, 0xa590e558 +487, 0x263bc076 +488, 0x245465b1 +489, 0x449212c6 +490, 0x249dcb29 +491, 0x703d42d7 +492, 0x140eb9ec +493, 0xc86c5741 +494, 0x7992aa5b +495, 0xb8b76a91 +496, 0x771dac3d +497, 0x4ecd81e3 +498, 0xe5ac30b3 +499, 0xf4d7a5a6 +500, 0xac24b97 +501, 0x63494d78 +502, 0x627ffa89 +503, 0xfa4f330 +504, 0x8098a1aa +505, 0xcc0c61dc +506, 0x34749fa0 +507, 0x7f217822 +508, 0x418d6f15 +509, 0xa4b6e51e +510, 0x1036de68 +511, 0x1436986e +512, 0x44df961d +513, 0x368e4651 +514, 0x6a9e5d8c +515, 0x27d1597e +516, 0xa1926c62 +517, 0x8d1f2b55 +518, 0x5797eb42 +519, 0xa90f9e81 +520, 0x57547b10 +521, 0xdbbcca8e +522, 0x9edd2d86 +523, 0xbb0a7527 +524, 0x7662380c +525, 0xe7c98590 +526, 0x950fbf3f +527, 0xdc2b76b3 +528, 0x8a945102 +529, 0x3f0a1a85 +530, 0xeb215834 +531, 0xc59f2802 +532, 0xe2a4610 +533, 0x8b5a8665 +534, 0x8b2d9933 +535, 0x40a4f0bc +536, 0xaab5bc67 +537, 0x1442a69e +538, 0xdf531193 +539, 0x698d3db4 +540, 0x2d40324e +541, 0x1a25feb2 +542, 0xe8cc898f +543, 0xf12e98f5 +544, 0xc03ad34c +545, 0xf62fceff +546, 0xdd827e1e +547, 0x7d8ccb3b +548, 0xab2d6bc1 +549, 0xc323a124 +550, 0x8184a19a +551, 0xc3c4e934 +552, 0x5487424d +553, 0xd6a81a44 +554, 0x90a8689d +555, 0xe69c4c67 +556, 0xbdae02dd +557, 0x72a18a79 +558, 0x2a88e907 +559, 0x31cf4b5d +560, 0xb157772f +561, 0x206ba601 +562, 0x18529232 +563, 0x7dac90d8 +564, 0x3a5f8a09 +565, 0x9f4b64a3 +566, 0xae373af9 +567, 0x1d79447c +568, 0x2a23684b +569, 0x41fb7ba4 +570, 0x55e4bb9e +571, 0xd7619d3e +572, 0xc04e4dd8 +573, 0x8418d516 +574, 0x2b2ca585 +575, 0xfa8eedf +576, 0x5bafd977 +577, 0x31974fb0 +578, 0x9eb6697b +579, 0xc8be22f5 +580, 0x173b126a +581, 0x8809becf +582, 0x3e41efe1 +583, 0x3d6cbbb8 +584, 0x278c81d8 +585, 0xa6f08434 +586, 0xa0e6601d +587, 0x2fccd88d +588, 0x3cbc8beb +589, 0x5f65d864 +590, 0xa1ff8ddf +591, 0x609dcb7c +592, 0x4a4e1663 +593, 0xeae5531 +594, 0x962a7c85 +595, 0x1e110607 +596, 0x8c5db5d0 +597, 0xc7f2337e +598, 0xc94fcc9c +599, 0xe7f62629 +600, 0x6c9aa9f8 +601, 0x2e27fe0e +602, 0x4d0dae12 +603, 0x9eecf588 +604, 0x977ba3f2 +605, 0xed0a51af +606, 0x3f3ec633 +607, 0xc174b2ec +608, 0x590be8a9 +609, 0x4f630d18 +610, 0xf579e989 +611, 0xe2a55584 +612, 0xee11edcd +613, 0x150a4833 +614, 0xc0a0535c +615, 0xb5e00993 +616, 0xb6435700 +617, 0xa98dbff +618, 0x315716af +619, 0x94395776 +620, 0x6cbd48d9 +621, 0xab17f8fc +622, 0xa794ffb7 +623, 0x6b55e231 +624, 0x89ff5783 +625, 0x431dcb26 +626, 0x270f9bf8 +627, 0x2af1b8d0 +628, 0x881745ed +629, 0x17e1be4e +630, 0x132a0ec4 +631, 0x5712df17 +632, 0x2dfb3334 +633, 0xf5a35519 +634, 0xcafbdac6 +635, 0x73b6189d +636, 0x10107cac +637, 0x18c1045e +638, 0xbc19bbad +639, 0x8b4f05ac +640, 0x5830d038 +641, 0x468cd98a +642, 0x5b83a201 +643, 0xf0ccdd9c +644, 0xcb20c4bd +645, 0x1ff186c9 +646, 0xcdddb47f +647, 0x5c65ce6 +648, 0xb748c580 +649, 0x23b6f262 +650, 0xe2ba8e5c +651, 0x9a164a03 +652, 0x62d3322e +653, 0x918d8b43 +654, 0x45c8b49d +655, 0xce172c6e +656, 0x23febc6 +657, 0x84fdc5b7 +658, 0xe7d1fd82 +659, 0xf0ddf3a6 +660, 0x87050436 +661, 0x13d46375 +662, 0x5b191c78 +663, 0x2cbd99c0 +664, 0x7686c7f +665, 0xcff56c84 +666, 0x7f9b4486 +667, 0xefc997fe +668, 0x984d4588 +669, 0xfa44f36a +670, 0x7a5276c1 +671, 0xcfde6176 +672, 0xcacf7b1d +673, 0xcffae9a7 +674, 0xe98848d5 +675, 0xd4346001 +676, 0xa2196cac +677, 0x217f07dc +678, 0x42d5bef +679, 0x6f2e8838 +680, 0x4677a24 +681, 0x4ad9cd54 +682, 0x43df42af +683, 0x2dde417 +684, 0xaef5acb1 +685, 0xf377f4b3 +686, 0x7d870d40 +687, 0xe53df1c2 +688, 0xaeb5be50 +689, 0x7c92eac0 +690, 0x4f00838c +691, 0x91e05e84 +692, 0x23856c80 +693, 0xc4266fa6 +694, 0x912fddb +695, 0x34d42d22 +696, 0x6c02ffa +697, 0xe47d093 +698, 0x183c55b3 +699, 0xc161d142 +700, 0x3d43ff5f +701, 0xc944a36 +702, 0x27bb9fc6 +703, 0x75c91080 +704, 0x2460d0dc +705, 0xd2174558 +706, 0x68062dbf +707, 0x778e5c6e +708, 0xa4dc9a +709, 0x7a191e69 +710, 0xc084b2ba +711, 0xbb391d2 +712, 0x88849be +713, 0x69c02714 +714, 0x69d4a389 +715, 0x8f51854d +716, 0xaf10bb82 +717, 0x4d5d1c77 +718, 0x53b53109 +719, 0xa0a92aa0 +720, 0x83ecb757 +721, 0x5325752a +722, 0x114e466e +723, 0x4b3f2780 +724, 0xa7a6a39c +725, 0x5e723357 +726, 0xa6b8be9b +727, 0x157c32ff +728, 0x8b898012 +729, 0xd7ff2b1e +730, 0x69cd8444 +731, 0x6ad8030c +732, 0xa08a49ec +733, 0xfbc055d3 +734, 0xedf17e46 +735, 0xc9526200 +736, 0x3849b88a +737, 0x2746860b +738, 0xae13d0c1 +739, 0x4f15154f +740, 0xd65c3975 +741, 0x6a377278 +742, 0x54d501f7 +743, 0x81a054ea +744, 0x143592ba +745, 0x97714ad6 +746, 0x4f9926d9 +747, 0x4f7ac56d +748, 0xe87ca939 +749, 0x58b76f6f +750, 0x60901ad8 +751, 0x3e401bb6 +752, 0xa058468e +753, 0xc0bb14f6 +754, 0x2cb8f02a +755, 0x7c2cf756 +756, 0x34c31de5 +757, 0x9b243e83 +758, 0xa5c85ab4 +759, 0x2741e3b3 +760, 0x1249000e +761, 0x3fc4e72b +762, 0xa3e038a2 +763, 0x952dd92c +764, 0x2b821966 +765, 0xfa81b365 +766, 0x530919b9 +767, 0x4486d66f +768, 0xccf4f3c1 +769, 0xa8bddd1d +770, 0xcc295eb9 +771, 0xfccbe42f +772, 0x38bacd8d +773, 0x2261854f +774, 0x56068c62 +775, 0x9bdaeb8 +776, 0x555fa5b6 +777, 0x20fe615e +778, 0x49fb23d3 +779, 0xd093bad6 +780, 0x54919e86 +781, 0x7373eb24 +782, 0xfbaa7a98 +783, 0x5f62fb39 +784, 0xe03bc9ec +785, 0xa5074d41 +786, 0xa1cefb1 +787, 0x13912d74 +788, 0xf6421b8 +789, 0xfcb48812 +790, 0x8f1db50b +791, 0xc1654b87 +792, 0x948b43c2 +793, 0xf503ef77 +794, 0x117d891d +795, 0x5493ffa +796, 0x171313b1 +797, 0xa4b62e1e +798, 0x77454ea6 +799, 0xbea0aff0 +800, 0x13c36389 +801, 0xe3b60bac +802, 0xa176bed3 +803, 0x2863d428 +804, 0xe2314f46 +805, 0xa85cd3d4 +806, 0x7866e57 +807, 0x8f03f5bc +808, 0x239ae +809, 0x46f279fb +810, 0xcca00559 +811, 0xaa07a104 +812, 0x89123d08 +813, 0x2e6856ba +814, 0x43a9780d +815, 0x676cff25 +816, 0x6744b87d +817, 0xee260d4f +818, 0xb98d8b77 +819, 0x9b0ca455 +820, 0x659f6fe +821, 0x28d20d1c +822, 0x601f2657 +823, 0xdec3073e +824, 0x61263863 +825, 0x1a13435a +826, 0x27497d1e +827, 0x17a8458e +828, 0xdddc407d +829, 0x4bb2e8ac +830, 0x16b2aedb +831, 0x77ccd696 +832, 0x9d108fcd +833, 0x25ad233e +834, 0xaa9bc370 +835, 0xa873ab50 +836, 0xaf19c9d9 +837, 0x696e1e6b +838, 0x1fdc4bf4 +839, 0x4c2ebc81 +840, 0xde4929ed +841, 0xf4d0c10c +842, 0xb6595b76 +843, 0x75cbb1b3 +844, 0xbcb6de49 +845, 0xe23157fd +846, 0x5e596078 +847, 0xa69b0d29 +848, 0x2118a41 +849, 0x7088c16 +850, 0xc75e1e1 +851, 0x6a4af2d6 +852, 0xf19c6521 +853, 0xaff7b3b1 +854, 0x615295c7 +855, 0xbda3a8d7 +856, 0x5b5ca72e +857, 0xdad9d80f +858, 0xfa81c084 +859, 0xf4703fa +860, 0x3ca54540 +861, 0xa8961d51 +862, 0x53d1ecc2 +863, 0x808d83b6 +864, 0x68e8c48e +865, 0x89be2039 +866, 0x9088ea11 +867, 0xb8665d12 +868, 0x91272f9 +869, 0x53dddff2 +870, 0xb7a54ab +871, 0xd2b645ca +872, 0x99fb8590 +873, 0x5315c8e +874, 0x2a913806 +875, 0x7f15eb2b +876, 0xa7f1cc5d +877, 0xbb2ee836 +878, 0xd9fafd60 +879, 0x17448d6f +880, 0x999ec436 +881, 0x482ec606 +882, 0x9b403c0e +883, 0x569eb51b +884, 0xb275d1a6 +885, 0xadd29c31 +886, 0xb7ebdb15 +887, 0xdfef3662 +888, 0x51aba6db +889, 0x6d41946d +890, 0x77bf8896 +891, 0xcafa6fab +892, 0x976ab40f +893, 0x49a6d86b +894, 0x56639e55 +895, 0x9945b996 +896, 0x81459b50 +897, 0xbce97542 +898, 0xe397c9c9 +899, 0x247a5955 +900, 0xb72b1573 +901, 0x86306f86 +902, 0x34f65dc5 +903, 0x909360c0 +904, 0xf3f696ef +905, 0xcb9faae5 +906, 0x93daecd9 +907, 0xde1af7af +908, 0x43a1f2d +909, 0x6d75cde5 +910, 0x9e412b6 +911, 0x5673fed +912, 0x16bb511a +913, 0x35ef4cca +914, 0x4e615aca +915, 0x5cdaf47a +916, 0x26676047 +917, 0x8c199325 +918, 0x2adf0cb9 +919, 0x84f2e6fd +920, 0x5e627f64 +921, 0xb7cee354 +922, 0x542ab4a6 +923, 0xe59cd83b +924, 0x89cc3f10 +925, 0x92b0f5f +926, 0xc1328370 +927, 0x8208d9f7 +928, 0x68eb00cf +929, 0xfadd4ac4 +930, 0x2517784f +931, 0x4042b99 +932, 0x75ce0230 +933, 0x97c5a1b4 +934, 0x1a97f709 +935, 0x4c62781e +936, 0xf530a83 +937, 0x75776413 +938, 0x321c7240 +939, 0x6afe4e36 +940, 0xad00a2b4 +941, 0xbc05477d +942, 0xb0911e80 +943, 0x9935b87d +944, 0xd535eec5 +945, 0x149af45e +946, 0x786934b0 +947, 0xbc13cdac +948, 0x208bfa2e +949, 0xcf4b39cc +950, 0x6ac6c172 +951, 0xbfa9a37 +952, 0x42d28db6 +953, 0x2bf1ea63 +954, 0xbed6e677 +955, 0x50325d27 +956, 0xa79d3b8b +957, 0x52448bb1 +958, 0xefaad1bd +959, 0x833a2e54 +960, 0xd9de549a +961, 0x9f59672f +962, 0x9d5f5f16 +963, 0x1c914489 +964, 0xc08fa058 +965, 0xb188698b +966, 0xdc4672b5 +967, 0x594f720e +968, 0x56ed428f +969, 0x9b0898af +970, 0x8a64d3d5 +971, 0x773308d6 +972, 0x84d62098 +973, 0x46da7cf9 +974, 0x1114eae7 +975, 0xf9f2a092 +976, 0x5363a28 +977, 0xf2db7b3a +978, 0x102c71a9 +979, 0xe8e76aaf +980, 0x77a97b3b +981, 0x77b090d +982, 0x1099620e +983, 0xa6daaae6 +984, 0x86ff4713 +985, 0xc0ef85b8 +986, 0xf621d409 +987, 0xfd1561e2 +988, 0x4bcc687d +989, 0x596f760 +990, 0x7c8819f9 +991, 0x8cb865b8 +992, 0xadea115a +993, 0x56609348 +994, 0xb321ac14 +995, 0x1bac7db2 +996, 0x5fe6ee2 +997, 0xe9bfe072 +998, 0x15549e74 +999, 0xad8c191b diff --git a/EXE version/main/numpy/random/tests/data/pcg64-testset-1.csv b/EXE version/main/numpy/random/tests/data/pcg64-testset-1.csv new file mode 100644 index 00000000..0c8271fa --- /dev/null +++ b/EXE version/main/numpy/random/tests/data/pcg64-testset-1.csv @@ -0,0 +1,1001 @@ +seed, 0xdeadbeaf +0, 0x60d24054e17a0698 +1, 0xd5e79d89856e4f12 +2, 0xd254972fe64bd782 +3, 0xf1e3072a53c72571 +4, 0xd7c1d7393d4115c9 +5, 0x77b75928b763e1e2 +6, 0xee6dee05190f7909 +7, 0x15f7b1c51d7fa319 +8, 0x27e44105f26ac2d7 +9, 0xcc0d88b29e5b415 +10, 0xe07b1a90c685e361 +11, 0xd2e430240de95e38 +12, 0x3260bca9a24ca9da +13, 0x9b3cf2e92385adb7 +14, 0x30b5514548271976 +15, 0xa3a1fa16c124faf9 +16, 0xf53e17e918e45bb6 +17, 0x26f19faaeb833bfc +18, 0x95e1d605730cce1b +19, 0xa7b520c5c093c1aa +20, 0x4b68c010c9b106a3 +21, 0x25e19fe91df703f0 +22, 0x898364bb0bf593cb +23, 0x5bd6ab7dbaa125db +24, 0xd1fe47f25152045c +25, 0x3bb11919addf2409 +26, 0x26a8cb7b3f54af8 +27, 0xe6a27ee11200aa24 +28, 0x7cb585ab01e22000 +29, 0x78e60028676d2ef3 +30, 0x5c32535e5a899528 +31, 0x83e8b6f8c4a46fb3 +32, 0xe56ef7668a161246 +33, 0x36dcbc15aeb73055 +34, 0x5ea247f0bd188acb +35, 0x438b547b84601a80 +36, 0x8acda2a1273e9e3d +37, 0x2b05e30a4b40c24c +38, 0xfd87236bd13af032 +39, 0x471df211d8d985ef +40, 0x18e8a5609a793292 +41, 0x46f0951fab6dc4e3 +42, 0x6c199c4e700f6795 +43, 0xf04aa16bfb7d22cb +44, 0xd763d269fbaffc89 +45, 0x9991930cefbe5c2b +46, 0xb2a11b953f824c96 +47, 0x63fd9f52172c44b0 +48, 0x183bdad907b1d848 +49, 0xe17953cddb931c52 +50, 0x515cf16726ec205a +51, 0x88c327605150711a +52, 0xc7090dd79cbc8dc3 +53, 0xcb487cedeb00a350 +54, 0xc8abf254d87b657 +55, 0xd43cc4cbfb493d1a +56, 0x8705452e5d9ed1e +57, 0xcecd11446769cf43 +58, 0xde72156c8d65bc69 +59, 0x796a8f0f47d52ee8 +60, 0xb4c0da443917d6c3 +61, 0xe07ad7568a8e3dc3 +62, 0xc24a8da39ce6dc21 +63, 0x92b21ea80a8556eb +64, 0x572f21e531edf3af +65, 0x9b917ed56bbed198 +66, 0xe65fd8ddc5ab3d7d +67, 0xf55a80a8ec84fa18 +68, 0x18fc22e1a5227b61 +69, 0x72305dc7eeaa79d3 +70, 0x47ce58a36e7592cf +71, 0x14c6374340c0f7cc +72, 0x6f98273d4eb5a2c +73, 0x59a8702c46fe8f8a +74, 0xb67cbd8113cfe57f +75, 0xaa03c5db5f5b7690 +76, 0x3fb0f77ea4568013 +77, 0x756530990398b26e +78, 0x4c1952b2a3a6a343 +79, 0x1da15c5383074582 +80, 0xb405b21c81c274f7 +81, 0xbe664677a16788b +82, 0x9d2e37550bcee656 +83, 0x8b4589f0d9defe02 +84, 0x2935f018ee06a59 +85, 0x3834bf88be97ed11 +86, 0xa610d049cea79b6d +87, 0xd49ffc0d09a59ea9 +88, 0x4073365b76567adf +89, 0x499eefb9bb7513e2 +90, 0x74a743ee6b0138a9 +91, 0x3bf0880f2d947594 +92, 0x555d1c0498600a99 +93, 0x923b32a88ef2ffa4 +94, 0x7325411065fbedea +95, 0x9f4129ff8b79d300 +96, 0xab2b0a9b8a3785dc +97, 0x11734bdfba3a1713 +98, 0xc8333398841ba585 +99, 0xee2409cc234e6742 +100, 0xf6638e700872ecd2 +101, 0x10875300c13cd284 +102, 0x27a9bbed7c15b2d3 +103, 0x3c87f8fef31ce9bd +104, 0x92be263cd0914a95 +105, 0xa7b0f11bc742307e +106, 0x4a56f788cc1c1a3c +107, 0x4a130fa32257a48b +108, 0x5d4d9eda16e90286 +109, 0x7cc2af564844bedc +110, 0x2532867bfe7cda1a +111, 0xb1c504676611fd17 +112, 0xce8e86cfb4189aee +113, 0x99685898980d1970 +114, 0x8c3b67db23bcf1e +115, 0x73e14c93905b135f +116, 0xf0271b64ac2bd4d3 +117, 0xf4beba82f3ec1b2d +118, 0x1cdbf3ee9f210af +119, 0x2e938557c09c3ea6 +120, 0x2d314ccfa6ffd81d +121, 0x31ad47079950ade4 +122, 0x342b27547b900872 +123, 0x171b0e20b9ef1a76 +124, 0xdf10ce6318b03654 +125, 0x1d625df4aa718897 +126, 0x8712715a9f6e02ec +127, 0xb4a072da725bca3b +128, 0x19d346cb7734bd42 +129, 0xfd4281d311cb2958 +130, 0x58274c9519fc8789 +131, 0x4cacf29d885fd544 +132, 0x784b14d1c2523b80 +133, 0x2d25242131bb2373 +134, 0xcd2a5e43a7d9abf9 +135, 0x15eda3806e650ecb +136, 0xdaac5e277d764d96 +137, 0xdc5a5dd59aaa94e0 +138, 0x40d00237a46d5999 +139, 0x6205dd35a692743f +140, 0xbbd8236740361f09 +141, 0x1625c9f4e7288bf9 +142, 0xb74f12df1479e3ce +143, 0xb2d72a51b43d7131 +144, 0xf006a324b3707c83 +145, 0x28e8ab4abe7655b8 +146, 0xfb480093ad7ab55 +147, 0x3f8abd0d6ff8d272 +148, 0xc81a94177ac26bb7 +149, 0x3cdc178307751b14 +150, 0x9de84cc2b10ba025 +151, 0x3f8ab5aefcd046e2 +152, 0x43bdb894e1ee83b2 +153, 0xe288a40f3f06ac9d +154, 0xdab62a7d04b4f30f +155, 0x49f4e20295e1a805 +156, 0x3643764805e0edef +157, 0x9449954618b6b +158, 0x6c87e0d4508e0ce0 +159, 0x3a334be688a9dd7b +160, 0xb35c39228776e499 +161, 0xc4118bfff938490e +162, 0x88cbde3dcbb034b2 +163, 0xf91b287793c417c3 +164, 0x42b15f731a59f5b3 +165, 0xffa27104bbe4814d +166, 0x1b6789d138beccde +167, 0x542c2c1440d0ceb9 +168, 0x367294504d18fa0d +169, 0xf918b60e804a1b58 +170, 0xd390964e33a9d0e3 +171, 0x23bb1be7c4030fe8 +172, 0x9731054d039a8afb +173, 0x1a6205026b9d139b +174, 0x2fa13b318254a07e +175, 0x69571de7d8520626 +176, 0x641a13d7c03332b7 +177, 0x76a6237818f7a441 +178, 0x4e77860d0c660d81 +179, 0x4441448a1c1cbdb2 +180, 0xccd7783a042046e5 +181, 0xf620d8e0805e3200 +182, 0x7de02971367fdd0c +183, 0x539c263c5914cab1 +184, 0x9c3b9ba1a87bbf08 +185, 0x6d95baa34cda215f +186, 0x2db3f83ace0bac5f +187, 0x7f5af1da2dc670a4 +188, 0xfcc098d16c891bfb +189, 0x81a33df1d7a5ab12 +190, 0x767b0f863c8e9882 +191, 0x7a92983830de483d +192, 0xfa7598c37a79ac25 +193, 0xb89b3ca42ce03053 +194, 0x457a542b8efed4f7 +195, 0x571b7737fd0eeda7 +196, 0xa0f59e524485c0a +197, 0x82dca766b7901efd +198, 0xa68243caf6a3bd5d +199, 0x1bac981c6c740e5e +200, 0xbcd51bedf9103e44 +201, 0x4e197efd3ae5a7bf +202, 0x523568efd782268b +203, 0x5ec4ef1191fef09 +204, 0xed751ed5e31c9ab +205, 0x44eac24de03e1b29 +206, 0x9237d57c011d3fb3 +207, 0xa8c6da0f7692f235 +208, 0x9f9eb6bc15d6cac7 +209, 0x34bb8e0c93427aad +210, 0x115febd738eaac4a +211, 0xa439991ed139d27a +212, 0x45c7c2633d8710a2 +213, 0x48b7475f3405a3ce +214, 0x80158497c77bd00b +215, 0x935c316a5b1657cb +216, 0x59c5d54440e9695e +217, 0x337c78c5b3d0ede2 +218, 0x8c46bb956b93790d +219, 0xbf1dd03e471d71c5 +220, 0x2d375e90a4bef583 +221, 0xd0365428331b3790 +222, 0xfcd3969ac827ecd4 +223, 0x392fb6c580498410 +224, 0x6d6db4ceab5ea6c0 +225, 0x9bf84f1972e24786 +226, 0x798dfd820959dcc5 +227, 0x2e425095e65e8bfb +228, 0x8c1aa11536b1c9c3 +229, 0xd28e2ef9b12f6f74 +230, 0x86583bc98c8f78d2 +231, 0x489877530e3f93e7 +232, 0xb1d9430631104a15 +233, 0x1814f6098e6263bd +234, 0x8e2658a4e0d4cd53 +235, 0x5afe20e2531cdb2a +236, 0x30d02f7c4755c9bf +237, 0xe1e217cda16ed2d2 +238, 0xccb4913a42e3b791 +239, 0xfff21363ac183226 +240, 0xe788690bbda147a7 +241, 0x76905cf5917bfc6a +242, 0x2a8fa58f7916f52c +243, 0xf903c0cc0357815a +244, 0x15d20f243a4998d2 +245, 0x5b7decee5a86ea44 +246, 0x114f7fc421211185 +247, 0x328eb21715764c50 +248, 0xaffaa3f45c0678fd +249, 0x2579e6ef50378393 +250, 0x7610ab7743c19795 +251, 0xf9923d2bd101b197 +252, 0x57e42e7a62ba7e53 +253, 0x9f1dc217b4f02901 +254, 0x88a9ebd86509b234 +255, 0x867fc926aecc8591 +256, 0xaf22c1bfef04c718 +257, 0x39f701f0313f4288 +258, 0x6171ad397e6faab2 +259, 0x239bb5b9abdec4fc +260, 0xd9a591e25dd01c6e +261, 0x826dc4a75b628e49 +262, 0xf112b152c408f47 +263, 0x6843a06110f86c0 +264, 0x965e56a7185c1332 +265, 0x8d84492edbc71710 +266, 0xeee8ec111cfd1319 +267, 0xf2858e94ad98e458 +268, 0xbc9589fdf5f3a97e +269, 0xaf0ceef3bc375130 +270, 0x48f4aaf13fa75c1e +271, 0x111e9db47bee758f +272, 0xea3171df130164ba +273, 0x2a7bbe30bf827ab6 +274, 0xc516c3fdbf758c35 +275, 0xec55097754b04be5 +276, 0x374a997d52b6d3e6 +277, 0x487df5456085ffbc +278, 0x528883b84df8eafe +279, 0x805f77ab5ba26f86 +280, 0x8eb81477dc04f213 +281, 0x471ea08ec6794d72 +282, 0x69d3667ecc4d2176 +283, 0x98b7b6e295548a66 +284, 0x3877713c173f8f2 +285, 0xa00542570d0e8de3 +286, 0xf534b1bfa4033e50 +287, 0x7e1fedeac8bf6b26 +288, 0x8043f37c89628af4 +289, 0x1dd7039ec295e86d +290, 0xce9c05b763a40cc4 +291, 0x246926481e61028f +292, 0xb7cb0f1babf5893b +293, 0xefe6b777f37fc63e +294, 0xebbcabb4cb35cdcb +295, 0x39fa63cd711eeea9 +296, 0xad5d3ba7aaf30c8d +297, 0x8e9e78fe46021990 +298, 0xc7eaef6e7d5a3c62 +299, 0xefccdd5495d3f386 +300, 0x2179557ee8cfc76a +301, 0x88a77f621f0885ce +302, 0xafda62674543d90c +303, 0xb8e6fbe2e13e56c0 +304, 0x8bfbbe26a14f9b1a +305, 0x1404f59f5851f8c3 +306, 0x1140c53a0489566d +307, 0x3edf2d138b5c3f1d +308, 0x75d6bb275d817dc +309, 0x8e660ae27107664e +310, 0x7a8021038ee303e1 +311, 0x2042ef5eefa9079f +312, 0xe3e7b90bbf6d457a +313, 0xf3f819d2bb9405b +314, 0x522e42155cae0c10 +315, 0xf5bfbb975b40e233 +316, 0x2cf82b614dd95cfa +317, 0x183ef4a96bc40e55 +318, 0x9f6e351c5ba4e752 +319, 0x37c1110683c90846 +320, 0x1d89b7a996d8a977 +321, 0x18a444f77c7cb4d9 +322, 0xd0a8a971b78dc893 +323, 0x860232fb9e6543f1 +324, 0x60b6097f51002555 +325, 0xca1e5214123e3894 +326, 0xe03fe695c95f99bb +327, 0x2c7c6779d5f03622 +328, 0xafeeee42f63055d1 +329, 0x670dde905515936a +330, 0x9a922f42b59fb094 +331, 0xddb5ff49af5a651a +332, 0xe61b04c9e58ebbf8 +333, 0x4e459dcf272e7fc4 +334, 0xd549e92c16adceeb +335, 0x7a17dba1299d4a9c +336, 0x825d756109f2b585 +337, 0xba142e61a9cb203e +338, 0xc2a19f00e9c04a30 +339, 0x2d0f8140d23d0652 +340, 0x8b866d4d4d6caaf4 +341, 0x4f11d90dd91f8217 +342, 0xf6efc37373b9e0d +343, 0x248493d6cd6a4736 +344, 0xd12b6ae74a951a3e +345, 0x56e34722070b70a7 +346, 0x22d3f201cc9fa0eb +347, 0xbfdcc320008291b7 +348, 0x1a7a6922e9204fbd +349, 0x831421e0c4945ae4 +350, 0x66316feddddf0e11 +351, 0xa8c86a1517456554 +352, 0x14a9049ad989e335 +353, 0x837022259f141ecd +354, 0xcb71793a06c261f7 +355, 0x4aeefc07ebe09a79 +356, 0x8982f15aa3b6594b +357, 0x67bccfa7ed9b0d5b +358, 0xb377463b523e9dec +359, 0x53d3d594870fecb7 +360, 0xa5274b1caec5a60a +361, 0xd6316d0cb643db39 +362, 0xabc1a9b536de88ce +363, 0xed2fdb1383d2a077 +364, 0x12319c6feb97221b +365, 0x7e0f6cd40ef47403 +366, 0x86135c84fe26dbf8 +367, 0xc96622d3fbbee19b +368, 0xe3989d8d8511573f +369, 0x42cc365554d1fdc7 +370, 0x4c1a1eb8bbce8b4f +371, 0xfc4e30e7ef2034c1 +372, 0xc490444317a91e76 +373, 0x7ccdf469ff5dc81c +374, 0xf5a0da4110cc09d7 +375, 0x505227baf34c0fb5 +376, 0xbe58737e8a35cc88 +377, 0xd449bee91b3e8c41 +378, 0x3e590e23299d0e6 +379, 0x291a7d9e0a64caf7 +380, 0xdc6fafbdfebd2293 +381, 0x8223f1e259fe8a65 +382, 0x6186fbc9efd9e3df +383, 0xfda39b07e4007ffb +384, 0xfc19aea98574dc02 +385, 0xd0e10d354fcacd8c +386, 0xc9619916544a55a5 +387, 0xd454d50a8c8558cd +388, 0xcd94a246712d91e +389, 0x76a771f5d1231cce +390, 0xdd20cb2b7b370ee5 +391, 0xa6f4f50feca57c49 +392, 0x78c8fb431f17ab9c +393, 0x1b692b79a59b43cc +394, 0x4c45045d287da7e6 +395, 0x522132e18bf43928 +396, 0x25c458983138b41c +397, 0x2a1fb426ef229796 +398, 0x74dc324c74e5dd3d +399, 0x6df75e3eb6eb5374 +400, 0xb63f2f4f9ca25b61 +401, 0xac72286112ee54d6 +402, 0x5a966f3d0a6863c4 +403, 0x8d7046bc64a46fc2 +404, 0xa7b740fd6e3087eb +405, 0xcdbcbe0340cfcdf5 +406, 0xcb632613bf312b65 +407, 0xa91b3f2c2aac238b +408, 0xa06deb3f5ae555a3 +409, 0x29d72e1f8db69 +410, 0x2d004bae09728ea6 +411, 0xc6eee5dce0736cc1 +412, 0xa7493145500ff60f +413, 0xc4d68c4aa18ab93c +414, 0x8210c29e79d48d7f +415, 0xd0999d7889ecbef6 +416, 0x6e3bd61e66e93566 +417, 0xe6cc13d47d7d7b1f +418, 0x3d6f181f42e03979 +419, 0xbed4e14fd867604a +420, 0xbe511c84067bd86d +421, 0x49a876d89e697d38 +422, 0xc04c3dde8f889c98 +423, 0xaf293eeab0f53e3f +424, 0x9f6291dd65732cd6 +425, 0xd7811ac01de78c01 +426, 0xe385cf0261d50ec2 +427, 0x5a64134b3542bbf +428, 0xf9d1302bc6f13a68 +429, 0x5d2aabbea37d8c31 +430, 0xd9842e99a5192970 +431, 0x713eadc4cd30e837 +432, 0xb7b002fc72abb413 +433, 0x276cfeea526af1cf +434, 0x8519fe79b633a0ce +435, 0x2f0e87363705a3e2 +436, 0x9adbac0be3c371e7 +437, 0xf3f44ba899a6173c +438, 0x782d6c29618fde2b +439, 0x7f61062acec408f +440, 0x6e79cd836359258f +441, 0x5c8e9b138df5785a +442, 0xa54359c9f39a9a84 +443, 0xeec3f033135084b0 +444, 0x883ee717787a535c +445, 0x9a2422b513a73b00 +446, 0x2dd4beddcdd64a58 +447, 0x90c8a13202239c7b +448, 0x85b352ab759646d9 +449, 0x139f5cb2e46c53aa +450, 0xe1d3ba6c721c66d1 +451, 0xaa66e0edc4b60a98 +452, 0x3521275c75be29b6 +453, 0x490a5190b3edfa5d +454, 0xd2abcdd2ccb2f14e +455, 0x9d9be8bef4a5857d +456, 0xde19676f13ef7755 +457, 0xdac2fee2e42615f3 +458, 0xf4239801cb02f2ab +459, 0xaa8bf923ed91875c +460, 0x61d18a1940e4c7c0 +461, 0x1eb6aa3d5f077a6d +462, 0xee7374c063bf29d8 +463, 0x2f0a59e34d76268d +464, 0xc92e80e17d1eb3e9 +465, 0xafd05b3ec3d2ca72 +466, 0x28a61ad8d6c497b8 +467, 0xa7094d6834ad7d47 +468, 0x57d80ea9eccbb4f +469, 0xb047e0fee6cdaf16 +470, 0x44f41b5eb48c00bb +471, 0xd6dc8e1eb9c8c9ba +472, 0x47adfd2c638c7849 +473, 0x365d63db7d526c68 +474, 0xc21cda439016135d +475, 0x14d10c3f0f98863c +476, 0xa93e56f74e037602 +477, 0x3b4e9c8915bdc9 +478, 0xb46f5ae155e54aa2 +479, 0x8e470d21ce1943e1 +480, 0x60b96301b5ba2e8d +481, 0x1b473a41d381f9ff +482, 0xabcf5a8e3269e73f +483, 0xd410f6e94fb21fa1 +484, 0x65d1a47eebf87e5e +485, 0x48eaa201c61cb843 +486, 0x212c1abc2499bfc5 +487, 0x4255ad8377d2d8d +488, 0x44caeef472010612 +489, 0xffae764524f572f2 +490, 0x78d374d20c9ee550 +491, 0x6e003206c0511cee +492, 0x7998a159145bfb82 +493, 0x921239650bda1d4d +494, 0xae05025509bcfdc5 +495, 0xc6430c980be407b4 +496, 0x78524f1744b153f1 +497, 0x84089e6f468181fe +498, 0x8d0d21d7dfb6c254 +499, 0x90bad90502a33603 +500, 0x3072a403cbd16315 +501, 0xdfadddf3f1c040c2 +502, 0x22f0b0639d9ff975 +503, 0xb49e48a4cad0765b +504, 0x95a0a04f8239709d +505, 0x56e147a24a4c481f +506, 0xacf16ef61dea4c7e +507, 0x424040afd2700de6 +508, 0xc67e8096a3c717a9 +509, 0x39f164181dd0a399 +510, 0x2449cedc1d62198c +511, 0x7a53df11a1f1a61c +512, 0x5596f1d4a3badae3 +513, 0x38ed4c822072b3d0 +514, 0xf07ef346b3fd730a +515, 0xfd349c35c3ed51fd +516, 0x2f15c9c7890f8f32 +517, 0x3b470df52b173c29 +518, 0xd31bfc8981281af7 +519, 0xbbcc9bdf561215bb +520, 0x5782fffea326574f +521, 0xb0ebdcfcc5e03290 +522, 0x7fd89d93d2b3fbef +523, 0x280ea1865d9ba2 +524, 0xe726959845b2c100 +525, 0xd0361f032cd7dbb1 +526, 0x3c65ec2028b81a22 +527, 0x5221e9b2188920bf +528, 0xeb5ab27c4125ec20 +529, 0x80a32dd48b54f0a4 +530, 0x369b5ced1012bebb +531, 0x582d35d76530bc6f +532, 0x7b50dc9b48e1e37d +533, 0x37fdfe8bbacf8dad +534, 0x7a0cb7e6e93840ea +535, 0xa1132c870be0b2ce +536, 0x9d8ac2c68267cd1a +537, 0x470969b647fa7df4 +538, 0xabcb7d8adf7e2d24 +539, 0xacdebec9bdf9eb1c +540, 0xe30f4cbf7eb6a59 +541, 0x746673836c4df41d +542, 0x75120a6b647bb326 +543, 0x2f4eab556c3f6878 +544, 0xd84651ab05405b7a +545, 0x9e695808b9622284 +546, 0xc93b71e56aa6e1a5 +547, 0x2be7f3be4a7b7050 +548, 0x6497e910b6733241 +549, 0xcf7050dfd08076fc +550, 0x4e3cc156eca183f7 +551, 0xf801a33d9326c265 +552, 0x6aa293c8a47d40e6 +553, 0x28c429755faa6230 +554, 0x82b818651f54e7bb +555, 0xa84d726d7acdbead +556, 0x5cfa535d5774965d +557, 0x4a34b7b1cb48d53 +558, 0x86a7b5bce426de84 +559, 0xfcd2307cecdb7318 +560, 0x16dbaaa71181a038 +561, 0x88e7e8cd261c2547 +562, 0x3c09ba6d1d5ea913 +563, 0x5dd3d643734ee5b6 +564, 0x326d725fe8cbb33 +565, 0x7bcca9ca2da8e784 +566, 0x482dcf6b11d7f9a4 +567, 0x1291b605b4cd3e04 +568, 0x6988181b50e2f4a8 +569, 0x649e3c37131fc292 +570, 0x4eeb67b9e21eba54 +571, 0xc051d39073dec45f +572, 0xc99c52e110270d67 +573, 0xcb813d5d77868add +574, 0x423a5f13573e7ac0 +575, 0x231ac4cc4fe73616 +576, 0x4c22b888a6e600ea +577, 0x8059a6dc7c9e25c6 +578, 0x49f498a5b8ad22de +579, 0xf1e812cc6d1826c8 +580, 0xbbaf60abe8b11e00 +581, 0x1d31d7f4d8be9a6a +582, 0xfeadce70a9a10c14 +583, 0xb47c635bc136996a +584, 0xd88e694c8da030cb +585, 0xc41bbe132aff1364 +586, 0x34249ab18a4b0800 +587, 0xf14b5c825aa736cc +588, 0x2710be6b08df78e +589, 0x2ab56bcc9bf9e740 +590, 0x9b7f6e591b5f648 +591, 0xfb665c3772f34135 +592, 0x628a0a5d2db5d8d5 +593, 0xb3e3f251e61b5259 +594, 0x82310ae33faf1b23 +595, 0x24af8723a65cbd0b +596, 0x671c93282fc4ad97 +597, 0x6cabeaac77270cad +598, 0xef4643fe38b02b7f +599, 0x7b011549d1ac6653 +600, 0xe2af87b9fccfe89 +601, 0x36b71ad67197ac8a +602, 0xdbba55d06f2fd93b +603, 0xf571dbd764b7f7e5 +604, 0x38ea402501cdbd45 +605, 0xb8ab5b5b1bab2913 +606, 0xfab973c4d45f32bd +607, 0x9364f1717c2636b9 +608, 0xfad00f4d983e00fe +609, 0xc90c532a11aef75a +610, 0x64a6eda96e44783c +611, 0x35891f2eb84520be +612, 0x28d216080caed43 +613, 0x129629cc5bd206f6 +614, 0x22c3d39822cbb4b3 +615, 0xf1efbf4cce1eaa2b +616, 0x7070cba12524ed08 +617, 0xa7ed0be9deabf20d +618, 0x8ddb4cd6b454f76b +619, 0xb82814b1db37b63 +620, 0x418e83b36de01876 +621, 0x9a538c7f39c6413 +622, 0xee0cd7abf8a2ecb9 +623, 0xa9222b07e95590f3 +624, 0x6296a415d68341e6 +625, 0x981e0a5a8f811929 +626, 0x4bb372d3b0de283d +627, 0xa9805b5971866e16 +628, 0xaf3b5f5183497657 +629, 0x2152b0fd23c3d9f +630, 0xb730c325b7173180 +631, 0x1e3439d231608c19 +632, 0x1c5ba6031379823c +633, 0x87f5d12d6d365cbc +634, 0xd3bc7f29614bc594 +635, 0x63102214bb391268 +636, 0x482bbd5bba648a44 +637, 0x6a23604690759dc4 +638, 0x4091d41408d3a39e +639, 0x7cd017f922101b15 +640, 0x7ce9004ac5f9231 +641, 0x978bc3d8ec7f7fdf +642, 0x5bd0c4d780580c11 +643, 0x4313c068bb040153 +644, 0x3ab7dab7bc38bf80 +645, 0x3aaf9c187728deea +646, 0x6633a4ce8efb88d9 +647, 0x7263b089878f00fc +648, 0xd0d767e96fe00eb8 +649, 0x184a7c0c01908028 +650, 0x1ebdf41e6f76e186 +651, 0xeb740ee1d0402083 +652, 0xfccf4974edb1c339 +653, 0x16e2707aa28306d +654, 0x1684f0bdb018c3a5 +655, 0x887b6b67b88aa862 +656, 0x923d7810a2bea33a +657, 0x56b3560babef5d6b +658, 0xb39a14614c54b8c6 +659, 0x33e4dc545a509fc8 +660, 0x26e21f84142da9b +661, 0xdd07598125756855 +662, 0x572d49a071d7ae0a +663, 0xba3c7e3baea28760 +664, 0x7ecdb2d714db4b61 +665, 0x1c62b4920e1b2fe2 +666, 0x71bfafb70092834a +667, 0xd710a4228f60d56a +668, 0xeb16277d4ce4e95b +669, 0x968168c90b16d3a1 +670, 0xac3439dfe8ad0062 +671, 0x5a8226f9dd5876ad +672, 0xb843affe917291b0 +673, 0xd76d1e67051f8259 +674, 0xb73a6638cce8ccde +675, 0xa0e6afd3c7295f9 +676, 0xff8857b4bbb5f4c6 +677, 0x99becf78938f0426 +678, 0xfcd17edc1e70f004 +679, 0x6223b8b23f2f50 +680, 0xca875f3e84587b4c +681, 0x7d1e81e589f87fb9 +682, 0x9eb621586aa826fc +683, 0xf46fb9ef5b9c2086 +684, 0x2882c9b7092725f3 +685, 0x5493f099bbedcd02 +686, 0x90c1ec979ffa811d +687, 0x963f765025bcc53 +688, 0x56194e3ec3d9d4e9 +689, 0x7ec4720954cac1f0 +690, 0xfab3145171af7f90 +691, 0x52a0b4e41a13b593 +692, 0x740e2d4d5909d126 +693, 0x98f5339c09c94a28 +694, 0x1700e462fe8dec76 +695, 0x3dbffc2aa4695ac3 +696, 0x5763edacabdfe2a1 +697, 0x7b5b623ce49ef21d +698, 0x30addc66f49860df +699, 0xcc7511a6c31bceda +700, 0x1b25b61ca75db43b +701, 0x416bc4c298e59046 +702, 0x4cd11fe2d74e4649 +703, 0xb54458a9229fc978 +704, 0x8c21a27882b6ca35 +705, 0x57887c8b5e01639b +706, 0xf4e893da996680bb +707, 0x8d601297702c9c0d +708, 0x2a27904a30aa53af +709, 0x497800f6917ea8d0 +710, 0xe96db3340ada9c00 +711, 0xcc23166f14c010ee +712, 0x782690d78fa65ec9 +713, 0xf3e00d74a0878eda +714, 0xa7cbb683decca0a3 +715, 0xdd2e038e683a94aa +716, 0xe2096ff8da896ca5 +717, 0xf7c83400afdabe11 +718, 0x395b8c6f6a4086a4 +719, 0x4a164ec05bee71d4 +720, 0xe87aa5d1ca0462fe +721, 0x8dbc5aed6dff9ceb +722, 0x12120d1e9552707b +723, 0x877dca6889b3e6cd +724, 0xbd65605c01e900fb +725, 0xbd6b82c4157c3115 +726, 0x8b60282732caf78a +727, 0x279fcf5e5de9e57f +728, 0x34b34ebfb6a37eae +729, 0xd258cc1a14e03b7b +730, 0x9a528ba3db4a13fb +731, 0xffa0aea59d057746 +732, 0x27fa7f456cd37c4e +733, 0xe1117a57a6fdce63 +734, 0xdc8fc903970a1551 +735, 0x492dd104f30faf29 +736, 0x110def0959e5652b +737, 0x7f8d1997636fdd15 +738, 0xfb77b05e538a9b59 +739, 0x2e41fa35b4b01fc6 +740, 0xbc35ae69a3374085 +741, 0x192c2a681c2d9b4b +742, 0x12566b8866c189d6 +743, 0x9d88ea785c5185c8 +744, 0x30a621ad5f983c4 +745, 0x8b875efe1206f587 +746, 0x224d25c3af6e3423 +747, 0x7503e976a1ac7bcc +748, 0x3c98aa869e823859 +749, 0x3d8835304b646892 +750, 0xf6353330ff970bc2 +751, 0x8a673f5e2edb8acb +752, 0xf2fdcc53493838b9 +753, 0x85ddcd526236af16 +754, 0x60afb99814c676c5 +755, 0x32a1c2749e281ca8 +756, 0x2367a92ae3bee9ca +757, 0x219fe082703743cc +758, 0x34d8b74dc85182a9 +759, 0xdd04164c72db23f +760, 0xe293ac28fe2671a9 +761, 0x9ca7d169cbda6f45 +762, 0x705c47972b4240ed +763, 0xc10eda9eeb536209 +764, 0xc36ddacd0c94e85d +765, 0x8eb592c27e8cd0d2 +766, 0x3e815991c76e7cc4 +767, 0xac9cfce31acf7580 +768, 0xbf7a4cb31c7aee94 +769, 0x663077444aceecf6 +770, 0xe7f614ff386eb568 +771, 0x79d7a229c66912c0 +772, 0x161ed4311f63e1f3 +773, 0x308a5faeb9982ede +774, 0x7b38ddb9b7efd10 +775, 0x1e103a2589b27ecf +776, 0x67b02baf4259f27e +777, 0x868921c115ea2eee +778, 0x959791912200f71e +779, 0x4dd55f36dec10557 +780, 0xe3464d90080cb99d +781, 0xfb2d4f6accce652f +782, 0x109900a9257d77ba +783, 0x3c4bda8e2c83684c +784, 0xc9ae040fb7f868c6 +785, 0x78098ffe994f4905 +786, 0x7a94c33eca77f0b4 +787, 0xbe6a2a95e9b5c0e8 +788, 0x797d39cf963f4837 +789, 0x8d2e249e4425d06d +790, 0x6ae2c30cd5da06f4 +791, 0x904489de762b179f +792, 0x84713e2dfb591e3b +793, 0x6405a40da3f6f51b +794, 0x976b560d663a2df1 +795, 0xed1c544784ba1e22 +796, 0xca658e995ed9344c +797, 0x2b1c6b8e4db49025 +798, 0x52b1513da528bad +799, 0x3c63406d256d9968 +800, 0x63a31ca3d423f85e +801, 0xb05a81f55789a720 +802, 0xd04412992c476c8e +803, 0x828ec2f77a150a3d +804, 0xee50926671bb60c6 +805, 0x5aa70f93e2df61b4 +806, 0x94d60fa2e8655858 +807, 0x3f5e5b770703cc7d +808, 0xc62dfb2688ca7784 +809, 0xaaf02e1e8ba89fe4 +810, 0x4ab74e0d8c047405 +811, 0x31ee04fbac6fcead +812, 0x1203b78b8228f5af +813, 0x412a70836f9aa71a +814, 0xab51cf98c03f1819 +815, 0x783a3ce9ce137f65 +816, 0x8897085b0a072cf2 +817, 0x685dd9bde8798cb +818, 0x9a1fac7b1705e2c1 +819, 0xf3e9ff98de48e9cb +820, 0x5c2d3eb1a1fbe917 +821, 0x3bda718b6b54d82e +822, 0x29f2dd18f22f0821 +823, 0xb992da1572ac3597 +824, 0xacb69e7aa14b34f7 +825, 0xcd36e3ad14f088d1 +826, 0x6aaacc96a1ec55e8 +827, 0xf8ac593f154fe68f +828, 0x18fc9cbff012339f +829, 0x2f3368ccbbb99899 +830, 0x7cec7d17f37031f7 +831, 0x96e86bfaadcb8fc2 +832, 0x74f9e7ee3d42a752 +833, 0xbd52f6c7d9b0733 +834, 0xa48e6d96bb6ce1c9 +835, 0xaefa058254b82133 +836, 0xb7a19edfd0929107 +837, 0x6160ce9125b26e26 +838, 0x6537dbbde1d2aed +839, 0xc567f9a6bec52dde +840, 0xca29fd3f22443342 +841, 0x7732aa6db6a1c476 +842, 0x8f5a4d7df6b11b3 +843, 0x76649262aa7e31e1 +844, 0x60a13eb125fbc829 +845, 0xc81e4d123dd21ac1 +846, 0x643cbb09bb72f86b +847, 0xf971a98fb25555a6 +848, 0xffa2774c66692d56 +849, 0xcb33c16c50b13ea9 +850, 0xfabf388dffda0e9b +851, 0x55d41ec12ca24b9f +852, 0x91cf693a3467e807 +853, 0x6be2c00b2c31d6dd +854, 0xc5cf513b5251ae28 +855, 0xffc4384212403dec +856, 0x45d4e1865255a69d +857, 0xfb1dcf956972086a +858, 0xcae946a55c4c55b8 +859, 0x7351ac7720e385c1 +860, 0x19aa8ffd86240254 +861, 0x8f515ae78f4040da +862, 0x1e1ed2058de50fce +863, 0x22d006dcdb374243 +864, 0x6e0f0ede7c95b441 +865, 0x70e8aa81b53b4d25 +866, 0x998f309ea41e3814 +867, 0x89ed6598fb66f390 +868, 0xb5997dc3278060df +869, 0xb2a021eac4f7e046 +870, 0x3705b60aa2fd0768 +871, 0xfc415079ab9200e +872, 0xf2871ac4cf45ecc9 +873, 0x24bf758d2246175f +874, 0xac503dd6f8141b3 +875, 0x4e879d12d9f03b3 +876, 0x82034af8cf93b644 +877, 0x59899dd7e478a6c7 +878, 0xae90addb6eb11507 +879, 0x1524ddf76730cdef +880, 0x6fd4afd5456b1c9d +881, 0xcddb9221ea001cbc +882, 0x64ff400bbf2e8604 +883, 0x6dda10549b06ed9b +884, 0xed2c85104c261527 +885, 0xc7e09217d29929a8 +886, 0x56284df611a428b1 +887, 0x1a7608289c0a61 +888, 0x7cb63db15166ff66 +889, 0xc6013c76fcdcdc72 +890, 0x8e5dd566c7a5a676 +891, 0x5a8e8565f40d133b +892, 0xe465973455848c44 +893, 0xf92eecbfe0f3c2c0 +894, 0x7d64155d4dcc5cac +895, 0xf17595706f988dad +896, 0xd590a001a6a19c5c +897, 0x82a164475758db3d +898, 0x6b144993ea1bbe32 +899, 0x22a81a7a6e453779 +900, 0x8e8c298df1a68a73 +901, 0x78056afd6d936b4c +902, 0xaaceef0325faaf62 +903, 0xe78bb7699f82266f +904, 0x523a2d283c5a5166 +905, 0x7076d87088f6c6db +906, 0x6087dd54cff5aeb2 +907, 0x7ef82e62cb851680 +908, 0x4e8bcc8ed84d03d8 +909, 0xd12fa0361df3cfd3 +910, 0xefb89c79f8127297 +911, 0xa9af4e2fbce0b1f8 +912, 0x462136685b70331e +913, 0xe9e74c93da699b77 +914, 0x9ec69215fb11d0c3 +915, 0xc10f229939e3e111 +916, 0x3f67fa79e41d2374 +917, 0xd5e7c1a9a7185162 +918, 0xa1dcce9ec91492fe +919, 0xd4e61f0727b5d21b +920, 0xdf6cdce46551800a +921, 0xa3f256ce906982d3 +922, 0x209742a6b9ffc27 +923, 0x4006c96958526a57 +924, 0x9606aebc75a1967e +925, 0x91b9f42fb64189df +926, 0xb27119defcb938bc +927, 0x128cc7a84ba05597 +928, 0x6c3df613c62d0d30 +929, 0x3adf69d48b629ec7 +930, 0xda42ee493837b128 +931, 0xb8e770480e760bb5 +932, 0x9feb55d57c99c626 +933, 0x29812d80afdae3ed +934, 0xae4222a64276a8c7 +935, 0xe3897212a5b4ed53 +936, 0x98bedfd13886e669 +937, 0xca858675d7fc0d0e +938, 0x28a359f665354234 +939, 0xfac2ccabe4128b35 +940, 0x61373cc5d11ca180 +941, 0x7007605a4512a87a +942, 0xe71f8eade7b30b3d +943, 0x3a9e77f9b99bd04d +944, 0x70d3e42488098866 +945, 0xd30fc159c7cd4d99 +946, 0xe4d3f6600d2e2d6f +947, 0x1088324dfa955c25 +948, 0x516437acd4764623 +949, 0x38a31abe50d0aa03 +950, 0x72e1054e9dc02ba +951, 0xe6971dd664d1a2e2 +952, 0xf6698cb095d3b702 +953, 0xad995a5a8c19bd92 +954, 0x34e53c6936f656e6 +955, 0x10de240bc07c757a +956, 0x3e3b9a6861c2bd1c +957, 0x9c0b0b97d3712ec9 +958, 0xabf1505a75043aed +959, 0xbdf93d3de3274179 +960, 0x28fa5904d3f62c28 +961, 0xc3b97b39ef6c5133 +962, 0xf2b2219225b8679d +963, 0x8be4ec0f930c0aaa +964, 0x47de5a56aa590643 +965, 0xb6f871b304129856 +966, 0x80a61c06233ab0f9 +967, 0x3ce6c3af8101b055 +968, 0x85b911708274e7d1 +969, 0x4cab65d093a488b7 +970, 0xaabc4b10661fe28e +971, 0x35b16dea64474a68 +972, 0x1d6eb5b093361223 +973, 0xc39107b92f0fe1fb +974, 0x1d09e048073c4841 +975, 0xc6a02f43aca8cb2f +976, 0xaf6613dbc7da909c +977, 0x5ac2a40c230aa756 +978, 0x33afb5e7c01c39a5 +979, 0xc7b0b20ea8b7d0ef +980, 0xdf7306c8ccb1bbea +981, 0x9710efc0c188b2a0 +982, 0xd6303eadb72c873e +983, 0xa38ca609b118f35a +984, 0x8390613065c6e535 +985, 0xdf9a0106757e431f +986, 0x8bcf77039788e143 +987, 0x6026806a986b378e +988, 0x482ff3b1394cb1dc +989, 0x2a27d0ccac9ede9c +990, 0x53c77f26e271b3ab +991, 0x1ba004cf276cf3f +992, 0xc135b0517dc81f7c +993, 0x5d137838db75e442 +994, 0x3fe505f93d1dbdd7 +995, 0x351654ae7d598294 +996, 0x173f8d182af9d84d +997, 0xf97dfcd164fe11c5 +998, 0xcda423e5ad43b290 +999, 0xa5cb380b8de10d10 diff --git a/EXE version/main/numpy/random/tests/data/pcg64-testset-2.csv b/EXE version/main/numpy/random/tests/data/pcg64-testset-2.csv new file mode 100644 index 00000000..7c13e317 --- /dev/null +++ b/EXE version/main/numpy/random/tests/data/pcg64-testset-2.csv @@ -0,0 +1,1001 @@ +seed, 0x0 +0, 0xa30febcfd9c2825f +1, 0x4510bdf882d9d721 +2, 0xa7d3da94ecde8b8 +3, 0x43b27b61342f01d +4, 0xd0327a782cde513b +5, 0xe9aa5979a6401c4e +6, 0x9b4c7b7180edb27f +7, 0xbac0495ff8829a45 +8, 0x8b2b01e7a1dc7fbf +9, 0xef60e8078f56bfed +10, 0xd0dbc74d4700374c +11, 0xb37868abbe90b0 +12, 0xdb7ed8bf64e6f5f0 +13, 0x89910738de7951f +14, 0xbacab307c3cfd379 +15, 0x2cf7c449d8b927a6 +16, 0xdcf94b3a16db7f0e +17, 0x8a9d33d905a8792e +18, 0x4cb9eb2014951238 +19, 0x6c353acf7b26d6f1 +20, 0x73ff53d673aa30c +21, 0x1fd10760015eca68 +22, 0xabae0aa9021eeba8 +23, 0xa5ae363a868ee2bb +24, 0x9d89e0f041de6631 +25, 0x6238b133c3991a65 +26, 0xff49267d75fef51a +27, 0xfb180656ce13c53f +28, 0xaf7fadf36128712d +29, 0xa6847fc6f339c63e +30, 0xb03e0b80d71ea5bc +31, 0x63905abcb43969af +32, 0x2295af3ee00a3bba +33, 0xb8b375b994330415 +34, 0x867d9ef1d8716a3b +35, 0x4f6c02f5601b4e18 +36, 0x7c5fb4c16c470d18 +37, 0xe3b57986b804b343 +38, 0xef1d79d212aca692 +39, 0x5b98774c8806209c +40, 0x924fc76bac38a5d1 +41, 0x5266084c412ddeed +42, 0x98240bf9b831d6a3 +43, 0x5681599e81219442 +44, 0x6441248fc2ba92bc +45, 0xe3e9051a540349ea +46, 0x3a2700034390baa3 +47, 0x9f893155b6d402bc +48, 0x158207910c6d8aef +49, 0xd5282ab7608c2cbc +50, 0xc97f4651669dee4f +51, 0x3d4750d95103ed60 +52, 0xe0614542caac1f04 +53, 0xefe5092144cfc6c +54, 0x560bc486abd7e9ae +55, 0x2678b71392daa4b8 +56, 0x734970d3dc2ba416 +57, 0xcbdbe849e51e4aaf +58, 0x3b0b5e28b491556c +59, 0xd51449ac45abd88 +60, 0x6790b59991f1b7ab +61, 0x32d1c039ff2415bc +62, 0x173b9772f24f72e0 +63, 0x9490a9ca9f883b1b +64, 0x4c775989e6214222 +65, 0xac07db37e6ee6114 +66, 0x331371b2e3f10aee +67, 0xf12e5326c21c28e4 +68, 0x5d77dc280c70d614 +69, 0x1b01bd17a2f281ec +70, 0xa10d3b5882938487 +71, 0xed5a0033c394ae8f +72, 0x70bc8ea568ea44b4 +73, 0xf4600ae77965e730 +74, 0x7ff92c0b321ce233 +75, 0x6cdbc87d0cc1d670 +76, 0x9ec64f0cf2000eb1 +77, 0xfebea50259800f68 +78, 0xf2edf9019a8fd343 +79, 0x75c584ac042e5468 +80, 0xc1fa8481d5bf9a1d +81, 0x7f57180168514ac2 +82, 0x878100716b94f81e +83, 0xc929406e3af17fd2 +84, 0x6a26e2c013e4bf4d +85, 0xbc071d8848280955 +86, 0xb60d75abbfd1bdac +87, 0xee9b76afeca9fa69 +88, 0x1d6c399d2f452810 +89, 0xbaa0bc1621e25c83 +90, 0xed6ba792f8671ba5 +91, 0xf7ca02c2ab11d8d7 +92, 0x3c3cadadf0b21e3 +93, 0xdd1784571e864e9c +94, 0xfb2f992015157509 +95, 0xf50bb9f0d3ced743 +96, 0x261565f75c3e185f +97, 0xf8fe33b284513e60 +98, 0xe3d2d10b5e024664 +99, 0xd28717566242cf35 +100, 0x7ae07d133ac5b789 +101, 0x3b7ccaaa53ac338e +102, 0xcd480bace4871650 +103, 0xec6c78f923c080e9 +104, 0x44211d0ff8919d59 +105, 0x89f79af76d2a45fe +106, 0x71583fd8a837548b +107, 0xee57269c261511f5 +108, 0xa5ee8f3b128c5d1 +109, 0xbb64c20ed0765a17 +110, 0x9d4790ab2eeaf7e4 +111, 0x742f3db806d9e98 +112, 0xb81ec97aed6a0d1b +113, 0x41808b34f6a8a23 +114, 0xc20913af175dfd4d +115, 0x834427db263b22bb +116, 0xedd9c632e611828a +117, 0x10eac8524496f571 +118, 0xd76091b97eb00ab7 +119, 0x111298ae9fe95666 +120, 0x5824b2e2a6719c43 +121, 0x6e280ec539e934ed +122, 0xf74fd832df90083e +123, 0x8fee6d0f241c2e97 +124, 0x4244f331c2f19c3c +125, 0x3dde75a845cce97f +126, 0xe35bb8e635a9915b +127, 0x39d2943037f7932e +128, 0x1fe2d134201d0970 +129, 0x49d00b63c749b804 +130, 0x960c2942cd4e4e04 +131, 0x8dd8e009dbc0435f +132, 0xcf493495c3a055cd +133, 0x8f7b5a1c0f9fe9cd +134, 0x49d5f90374641a25 +135, 0x69b3932073d3524c +136, 0xd170603e7de84ee2 +137, 0xa062ba3ed3539948 +138, 0xf5861cc5b5d56c82 +139, 0x5e914998a30c7e76 +140, 0x8d77f2ad1503c0f1 +141, 0x980b6a9e3b4181fb +142, 0xd9299cd50694c084 +143, 0x253dc0f8f1cec4c5 +144, 0x68110fb9d1b3e695 +145, 0xe8f3120d0aabc461 +146, 0xb066e7df0dfb042 +147, 0xd29ce0f797e6b60b +148, 0x6a569bb7ca33bd42 +149, 0xd46e08b2dc2385f8 +150, 0x28c61d11d055767 +151, 0x5d73aa3d1a2bb725 +152, 0x1421191e1c14829a +153, 0xa711bfb6423df35e +154, 0x461af97a86308006 +155, 0xb3e1018ff3519367 +156, 0xf19cf866a268ef2b +157, 0x207715eac9199d1d +158, 0xdd621c410975b78c +159, 0xf390aea68683610 +160, 0x617a2d107a0047d9 +161, 0x6e05ac416e5bebf0 +162, 0x7d253e70506c1bed +163, 0xf9f96f4a7dd53810 +164, 0xc693b29cb1573f73 +165, 0x4f1146b0020ea544 +166, 0x45140608fbd40579 +167, 0xdcf57219828ce6be +168, 0xe19d58cca37b5b32 +169, 0x82bda95b2a161235 +170, 0x5823c3d8a2b6c9ba +171, 0xfeb2e74092fdf89a +172, 0x50e1ad1abc8f869d +173, 0x2ec63d0c105eb8da +174, 0xe14e1c4845a3264a +175, 0xcff53670455eb6aa +176, 0xaafaccd24619fa3e +177, 0xf55a988486e2422a +178, 0xecfba16a90ff4d04 +179, 0xbf8d36c2f644757a +180, 0xdc56ed75a0dd6249 +181, 0x3f45023eff17c3bb +182, 0x2428bbfe90023fab +183, 0xab892c611adcb70c +184, 0xb6f13d8c0c2b9d74 +185, 0x2ac3fb11d224f2a8 +186, 0x65433dcfae2d9351 +187, 0xe906859ae4b45f82 +188, 0x8fb7f5f093d76a3b +189, 0x940dd290b5e88d1a +190, 0x31b27d21bef116e7 +191, 0x86a964e2c83b5296 +192, 0x85ffd17bc079a9e8 +193, 0x16c47c724e7ab7f1 +194, 0xfb6098a9867e7d7f +195, 0x9246fb69092c6cb2 +196, 0x1a4033572760f32 +197, 0xc5cc568a8b273b84 +198, 0xfa6f9f2fbdd44abc +199, 0x9701b8e087718ba3 +200, 0x51d6a7dcf73f8f3a +201, 0x30008172cc6a972d +202, 0xac2ab49a5ca6ac81 +203, 0x31f28ef79461e54c +204, 0x93e35a8da8cc6132 +205, 0x9a2c58beeba3d5b9 +206, 0xf6615c1de266ac39 +207, 0x127ff9f8166b766b +208, 0x7ffe380e80a69556 +209, 0xbe7d2c228e1542f7 +210, 0x2d5ebb4e50ba1746 +211, 0x63585761ae1bf684 +212, 0x1019eb5cee022fea +213, 0xb9d3540ab58da30d +214, 0x1677f4cb45620eb9 +215, 0x6524baee51783822 +216, 0xdf9f2ddcfabb0adc +217, 0x78e8acc43b287935 +218, 0xe9a1974e999222b5 +219, 0xc41324ec2291e780 +220, 0xea52abc9ecdcbc9f +221, 0x209d7bcd46ec6b04 +222, 0x12d504c09803db2e +223, 0x1200e6bf21475d81 +224, 0xde6d3c2b35fd2cfc +225, 0xa2526900ac33bd3c +226, 0x7f1f5290fc432bc5 +227, 0x29ddfb380a3d69c8 +228, 0xac79cb6942a2909d +229, 0x516996685b67a92a +230, 0xb5fc39041cb828bb +231, 0x75d9d8ca0644a276 +232, 0x81e98b76be92a3e9 +233, 0xca27888fafe12179 +234, 0x17be2ae039925765 +235, 0x9429846c0e6d0342 +236, 0x327dfd50439815e9 +237, 0xcee20cd7bc254aeb +238, 0x7d250389f453f29e +239, 0xfd1b232a85c95569 +240, 0x2ed55fac80f3e9e9 +241, 0xf6886c20417a1be7 +242, 0xcd08e61f0b0fdfde +243, 0x7b33e34da5c27bff +244, 0xd043c4b7d5603dd5 +245, 0x9a544e4c70a3b686 +246, 0xa7b60398c381f771 +247, 0xe9e7a3487c4bd4f2 +248, 0x10b58fdfe1ff112c +249, 0xd5c1c9748c0f4ceb +250, 0x61be9d09159d54ff +251, 0x5356f51e8239f510 +252, 0xfe7889d9b202ecef +253, 0xc7fc19ca5d263d5d +254, 0x7c4c07e61dfd9f69 +255, 0x6c315fe5015f300a +256, 0xe0a5bc00039747b4 +257, 0x16397fdcf829ee80 +258, 0xb55aee80d16a5169 +259, 0xca0609944d007eea +260, 0xcc982249f65a02ce +261, 0x528161feb149c148 +262, 0xcbf08ba49b41c006 +263, 0x39af1ff0b6f14138 +264, 0x5cc036be69799aec +265, 0x6adde125b1db21c5 +266, 0x8a99d83d6b613b67 +267, 0x1cd43fca9451f74c +268, 0x682dbb26ecc96365 +269, 0x13b4be2ceb43e3 +270, 0xbe8fbc3b6f4f581e +271, 0xda148a2f4bda5719 +272, 0x239106ca3319f393 +273, 0xb42b4dde641f0dd5 +274, 0xd233cfdf4cb0af74 +275, 0xfb5919d905589afc +276, 0xd802a8860c10b66a +277, 0x6c923e1d00e7b5bc +278, 0xfacce1134f383b89 +279, 0xf9570abda7a6d553 +280, 0x80f0f9796a208f18 +281, 0xc0e1df5280951c57 +282, 0xe9f143f08257bbe0 +283, 0x79e4c6463123d588 +284, 0xdd2118583f2b1684 +285, 0xb399ff5f2329fa18 +286, 0x4b3e9ebae96f813c +287, 0xc484dbf247787384 +288, 0x921865eb97603f2c +289, 0x18063c68e257d300 +290, 0x643181f345e7fc26 +291, 0x12e0b0e8eadf9fa7 +292, 0x79e613fe73dfa354 +293, 0x6db4c59203b7217a +294, 0x6c7a0e9ba6139eaf +295, 0x9617c7ac4e3f6d97 +296, 0x1f68a7b4fb1b4b75 +297, 0xef0b7ab24944f466 +298, 0xaf1dee1f4be1bc89 +299, 0xd2e355c959f5fd8d +300, 0xe594c3fb95d96efc +301, 0x9554766ca3342906 +302, 0xa4bbdc77d12842c +303, 0xb62400211ee489a8 +304, 0x91abadaaa3bbe67c +305, 0xd371eeb91deb42bb +306, 0x883bab35cbd2b6e5 +307, 0xd030c3d9411a9041 +308, 0xff3c110a858ff000 +309, 0x59bdf5ca47d0bde7 +310, 0x2bc80fa3cdba1853 +311, 0x6444ccb652662cb8 +312, 0xc0c7e256b9e90339 +313, 0x70714ea9c9d72302 +314, 0x96a0142f9d897d27 +315, 0x209a9097c5a91ef7 +316, 0xb9e33afc5171e009 +317, 0x47b37af433a58d40 +318, 0x30cc4ffbfa831d26 +319, 0xdcea4a85ff815466 +320, 0x907d5bd027f2e5cc +321, 0x7c081f6852e04a4b +322, 0xe61950749c1d502b +323, 0x1604e937ee69834a +324, 0xb2372d952dd25309 +325, 0x53f6a5b834c72577 +326, 0x2ce7a74395e0b694 +327, 0xacbf9ab4fe91f225 +328, 0x5ce1e63d3a2bb90f +329, 0x54740da3a5ed139b +330, 0xf194ddb39f29880b +331, 0x3305374f5d8ec08b +332, 0x831dd0164927ff4a +333, 0x625baa78e4458cf +334, 0x29d27dc0a4a71152 +335, 0xe227bae9a1401034 +336, 0xca0c209831846b2b +337, 0x8e8cc54b08b5a411 +338, 0x38f2b4acaac27db6 +339, 0x8ec88baac814e86b +340, 0x31c08e46b007bde +341, 0xb686c02722794c09 +342, 0xb77cf8fc682e3907 +343, 0xa56334e7f606f4b2 +344, 0x9c80b127bddd5f4f +345, 0x12df14834cd858bf +346, 0x3f14762a9cf5fb9f +347, 0x930a70941ef5779e +348, 0x64e96c849c30c080 +349, 0xfdf53bfba1300484 +350, 0xec7a9363c21bc616 +351, 0x26e9fd6a115ecb47 +352, 0x9707a84b5bc77fbb +353, 0xb23b2737b20d5903 +354, 0x22f4825ae80f6501 +355, 0x500644b12be6a01b +356, 0xb746645b2af082db +357, 0xe6af051f697892f8 +358, 0x577c724248a1cfc6 +359, 0x3d2b6a434c84eed3 +360, 0xd260f5efd7328314 +361, 0x95c16cc84bb3f55c +362, 0x7a01b2e4e0e80ca7 +363, 0x41930c3ce70a0935 +364, 0x1299bccf39d4e110 +365, 0x494883ba1a8a87f +366, 0x9478ecfe2d918e60 +367, 0x30ec9a5670cda8af +368, 0xf9bc877e833e2b99 +369, 0x1b83a0acfbb4a8db +370, 0x73bc1740c0d18880 +371, 0x65086ca9773cb3e1 +372, 0x3b78c3ccd63cff2e +373, 0xbfae748795acfb31 +374, 0xa4c9d5d56a15ba20 +375, 0xb9cb41721e52b71e +376, 0x1532f15d4dc47748 +377, 0x5a4d647a4b9ee632 +378, 0x8513c7c5a50898d9 +379, 0x6d3d98ccd5461b2e +380, 0xa65e99be2fe98d6 +381, 0x31abc8855334a0e5 +382, 0xf1ed22a661dca5b8 +383, 0x299e2b63229e03be +384, 0xda201a06687bce48 +385, 0xd27794b302142c55 +386, 0x642bd3e1c7898a9d +387, 0x777f1ff00afa1a87 +388, 0xd2f1c84fb3877baa +389, 0xae417583289191fd +390, 0xd641f1d88e0e2d55 +391, 0xc1f1d98fb5d18ebf +392, 0xb0f72aecdadce97b +393, 0xe9b8abc764f6018a +394, 0xd2a37cff8e890594 +395, 0x2dd70d631a528771 +396, 0xbf8ba0478c18e336 +397, 0x1630bf47f372ce0a +398, 0x6d04ea20dc3f46b8 +399, 0x6591881bf34337f2 +400, 0x33c149c7eb5b4103 +401, 0xf01a8c9857c86748 +402, 0x184348cdfc16d215 +403, 0x141168b253d2ed7 +404, 0x52aaf012ef50a6f1 +405, 0xfda1722387e16f4c +406, 0x43c30f57d6c038fa +407, 0xd4a8611f5f96d214 +408, 0x2c512ce17e987f2c +409, 0x961ce450f0fa2822 +410, 0xf55a506ec6cea9cd +411, 0xb76d694d9c7f5ef6 +412, 0xfb029216dbd8e988 +413, 0x93162501896a0081 +414, 0xfbbbd2c5ab300f5c +415, 0xd648b6da7387d491 +416, 0xc73b4697471d9d98 +417, 0xe37412bf1c93ee76 +418, 0xa1a96d96570e6637 +419, 0x5b3ab4f82428f65c +420, 0x873d849b188aa36f +421, 0x39fbee0ffc9fa9ff +422, 0xc70d21b744d677fe +423, 0x2b8a43c23043d209 +424, 0x93c33eaa37370d16 +425, 0x8930ac1880f2b0ef +426, 0xac01d27707036af0 +427, 0xc2af3fee504343a0 +428, 0x1c1dae2ad5535d97 +429, 0x9ffc21804b76a480 +430, 0x69f903412cc13563 +431, 0x9d3c4e2759a0c47d +432, 0xb1a8f894be6302b9 +433, 0x95e1fd7951479506 +434, 0xbb9e6c03cd4ae8e3 +435, 0x85206010c9b737cf +436, 0x767e813694d6238c +437, 0x4969af329ccbb30a +438, 0x3aa9af1075aaea5c +439, 0xb1ff519e8118a993 +440, 0xb21a23a3c91180fe +441, 0x320b24582ca3fd88 +442, 0xf8ca56415fb4e453 +443, 0xabd0899c07205e77 +444, 0x87fdc7a44b4ad50f +445, 0xd75744911641a278 +446, 0x7c8c9a65df6fcb95 +447, 0x79d785e3c7a5b695 +448, 0x421e4565ba1f592f +449, 0x27f87eb2517835cf +450, 0xb62cc4297441c83e +451, 0xd817a80ac815ca6d +452, 0xad84388130df2aa8 +453, 0x5e6b1640452d6ac8 +454, 0x936285e15edce2a3 +455, 0x903bccc4969768e8 +456, 0xefc2cb7b109d3140 +457, 0x633e9dfdda2d903a +458, 0x2a2f3225925678a1 +459, 0xe07eac91a27f8547 +460, 0xe50ced40eda78cb3 +461, 0xc5b22500e1c7441 +462, 0x32becf61bca3aa72 +463, 0xa2e37c4b30671344 +464, 0xc9f1c1910f45d544 +465, 0x9b50333b2dcdf730 +466, 0x310bfd53a1684b94 +467, 0x1e1dc21e66ac6455 +468, 0x81876c2bfb1ed5a1 +469, 0xd0c54a3e25eadc7b +470, 0x3791b6fbbd5c7ba0 +471, 0x133be57356c599fc +472, 0x8d1148eb8e83fdea +473, 0x311aedba0d8b42cc +474, 0x1142ae52745f94bb +475, 0xc5f4ab2fbde8c4a3 +476, 0xd23be827b5b24f6d +477, 0x65f95194cd122715 +478, 0x4b48969d73125922 +479, 0x46f165052b8ff988 +480, 0x5c689f94b9275ff4 +481, 0x93b03823ff2d536b +482, 0x871f3775aa4e3523 +483, 0x5af829f7cc0f66a5 +484, 0xa32e05739cbeac8c +485, 0xacff1856ddace0fe +486, 0x8eeb5e7f991a5322 +487, 0x6325c2720e0dbdea +488, 0x9fb817bc4fdf5200 +489, 0x9786f0d850e43d78 +490, 0x571f76dd7f9fb77a +491, 0x4d9e94e181cbc63f +492, 0x8bb632d3376c547a +493, 0x9cc26d9efd1c88b9 +494, 0x9c5d49579df52b0b +495, 0x6201abf7e1cda07b +496, 0x90d68f0c6c884963 +497, 0xfc5b66188ef7f561 +498, 0x6d9303cf2e0e0f95 +499, 0xd7cfcff535f5ed07 +500, 0x14d1a1228daa4ac6 +501, 0xe00ef5762f66ae50 +502, 0xf113a79471582978 +503, 0x430985281785dc7a +504, 0x31914108c206ed5 +505, 0x7ba6707b6419971c +506, 0x2ec63b033ce112e5 +507, 0xf8bcd36ced3b41e3 +508, 0xe5cf908c8010414b +509, 0xf5ee224b7c703e30 +510, 0x9a9733af0b12338b +511, 0x83e18cc00ace34f8 +512, 0xd52cff39e23008b8 +513, 0xa700578136b9c0c5 +514, 0x3fa179d32ac51f99 +515, 0xef2d5eab6d4ad380 +516, 0x709024a5abd032df +517, 0xc607c7ee349ede87 +518, 0x803d784e9731eb5f +519, 0x2ef06f4ba769282d +520, 0x4bc1dca1e9f07eb9 +521, 0x930c958a7a72f94d +522, 0x249bc8db2cc7a3bf +523, 0x3845305798f9a5d +524, 0x6f137eca9ab6f948 +525, 0xc31f5a963d31bd67 +526, 0x9d39693d5383626f +527, 0x52fb41c335a8b98e +528, 0xb79d1a29a06006ec +529, 0x7c0926a7a3eda2cc +530, 0xffdf5214406fd53e +531, 0xc6aa02a7e94282b9 +532, 0xd4a4431b4aa301ee +533, 0x4271cc0f9420d3ab +534, 0x26fccd7cc7fc2485 +535, 0x330594bb945b8d5a +536, 0x6ea8eaad12e5cb8c +537, 0x831c3467726bede3 +538, 0x31d1eb10017eaa61 +539, 0xc7aa75e41508f5cb +540, 0xde51810f0cadd0b5 +541, 0x50e5b3e73692f80b +542, 0x82107ec55636e188 +543, 0x9828ef175d843ab4 +544, 0xb8edc6a860dd421e +545, 0x25c0c138fd537ac3 +546, 0x47e72a771e8eb563 +547, 0xbb0f8c5333f4a2cc +548, 0x91750d2fb9b2d479 +549, 0xe662d8f6fe38df36 +550, 0x72a6d879fb5619f0 +551, 0x6817c7878dcbf077 +552, 0x4e7741cb484661e8 +553, 0x3b3b3ba0be5711bf +554, 0xa6989f5d25868765 +555, 0x43c276398997e4e0 +556, 0xdcbe16a94da28870 +557, 0x454936980a699c99 +558, 0xac614bfa8f0266c6 +559, 0x9174841392e213d5 +560, 0xa0e2acffc5fc9d1f +561, 0xe53a08a7a0e6521a +562, 0x2b845cf7c24172e0 +563, 0x265a4fc5f7adec0d +564, 0x1f34fbe5f1e49420 +565, 0x139181f6fb647f20 +566, 0x88c35d46e2fcd05e +567, 0x2a6d5b55903c0459 +568, 0xcea28eb621ad7bf1 +569, 0x5c9cdc13e7aaa30 +570, 0x5fe63e14746e7103 +571, 0x7923e53d73835db9 +572, 0x376e661210bf1b06 +573, 0x5b1cab85450efdd5 +574, 0x3908dc096c70b452 +575, 0x4825e303cd1f396f +576, 0xed476bfd702957c3 +577, 0x6acc013aff5db743 +578, 0x62c80b776343d488 +579, 0x9c75edcd5b012697 +580, 0xaa053362a3b9770a +581, 0xa907e236c7c07e94 +582, 0x15b2c380451692c0 +583, 0x94f79142697bd61f +584, 0xbc657d31ea98d44f +585, 0xcbaa5e52517a1f5e +586, 0x96aa2e44a7c4a03f +587, 0x216d3c66db2b515d +588, 0x157001807e3ca88a +589, 0x52b3a596bdd3859a +590, 0xed747e7fc5e3adac +591, 0x78fd765ddb2c448d +592, 0xe53dc7299ed8614e +593, 0x75ad41fb1d7a790a +594, 0xc14f6b944b0e6cb1 +595, 0x7c314b69fce3df1c +596, 0xb56d82eb740d7abc +597, 0x5132a93c41251fdb +598, 0xe3ce35bd2a82f958 +599, 0x440571a981c722f2 +600, 0x194cdfd9f186bc9 +601, 0xb89e522a5db00939 +602, 0xad35f339f68df3c8 +603, 0xa82ab18420322293 +604, 0xaffa6df9b72b27c4 +605, 0x9615694d23beaa2c +606, 0x1d82ebe563abad91 +607, 0xab50ef65fbd94385 +608, 0x1b070dbd70a9a14 +609, 0x2ececa796abbadf0 +610, 0x6bbeafe9e81ab2a2 +611, 0x60dcd0d2a9b76914 +612, 0x1e748039ef05c33f +613, 0x6d4d17f2213ccdff +614, 0x9fa56132957bc987 +615, 0x60a17185de2428eb +616, 0xb56038ddf306479c +617, 0x3b1db5df92d06d8b +618, 0x24d1bba8bdedf580 +619, 0xbfb7e6740ebaa4d9 +620, 0xab31c4473e46f61d +621, 0x6deb3cdd8fd5869f +622, 0x23032e47746d72d6 +623, 0xa9e72d734e10f2e8 +624, 0xbffd199b6157bc23 +625, 0x29f8254df273fb62 +626, 0xb076142130ee55ec +627, 0x5b0b08374126c309 +628, 0xea4536aae979521f +629, 0xc064e7abec91a174 +630, 0x46133ef80c59d935 +631, 0xf0227e2da1b14160 +632, 0x675a76641e1af5a +633, 0x2f50a069b33d198c +634, 0x3ded5a65e1d657eb +635, 0xbb6999b020694f6b +636, 0x86b2f2b33487aed7 +637, 0x76e14e85f8bfb4cf +638, 0x38f7f1e44bd4e0db +639, 0xc1a7d41b7e80d4ae +640, 0x1dfaaf80bbceb42e +641, 0x3f51c11497720c2b +642, 0xce6da1415ddb8b80 +643, 0x7377d8bcd359b5f3 +644, 0xe077208f3f810aca +645, 0x9a06a8a2dacbffce +646, 0xca1f99156b09b735 +647, 0x2ff9a93064d91451 +648, 0x50f3ea93f351a7ef +649, 0x606fceccb07054de +650, 0x7e83d6d2f8f6685d +651, 0x78f3995291c5d407 +652, 0xd28d2460e22d0228 +653, 0x2c5636f68a0054dd +654, 0xd9fafb1c56c8f6cb +655, 0xe39889b5f9d74464 +656, 0x1355372bf5db2cc1 +657, 0x26768426b9ac323 +658, 0x4af1dbdc1111fd89 +659, 0x66973587943b927f +660, 0xf86f5f50684dfb1d +661, 0x1247d574ff79b534 +662, 0xc8039f3259210fe2 +663, 0x79b573235c92a9f5 +664, 0x213f642d8450e2f0 +665, 0x5db7706973376566 +666, 0x6182c12e69b373d7 +667, 0x3e5ac47300aec07f +668, 0x4b5b6c57b1574376 +669, 0x6b7fcceefd56b17c +670, 0xf656c3455cb9d4b8 +671, 0x7577e2e13329721f +672, 0xf33c0c53ce956e8d +673, 0x7d0f328ee356174 +674, 0x10ec9a168088686e +675, 0x71ef1776d062dfa +676, 0xaa7b590a488a6bc4 +677, 0x38612b6dd8049a1c +678, 0x939045e36874f731 +679, 0xcb9d1d74c56d5ac9 +680, 0x54f1c1c8fef1d8ff +681, 0x3ee4b85c8c7e939e +682, 0xb9b4608e019f352c +683, 0x79d4701275d12e6a +684, 0x2632a2d9835c7f19 +685, 0x1662cd9fba293692 +686, 0xbcb70265115ee944 +687, 0xdc43fb9761468604 +688, 0xe3eec4e7d3871352 +689, 0x829531753226989d +690, 0x2748cc67f540e074 +691, 0x39c4af25d607837d +692, 0x741a243f4cb5df99 +693, 0xda1353287e18b49a +694, 0xa6735689d751ea74 +695, 0x46326d587340ce0b +696, 0xc18531df4550012b +697, 0x6f7901e05dd4b818 +698, 0xfb966afc4c001d63 +699, 0x6dc10fca67a9cfdb +700, 0xd6527ffadf0feaae +701, 0x3b900172045e25d +702, 0xb7dd594cdded6a46 +703, 0x6602aee7ec1599fc +704, 0x7fbf12f23747546a +705, 0x32e63f662bd2de0d +706, 0xedf47770b67ed641 +707, 0x331bef83481c5c2a +708, 0x8fc4256fdf05158c +709, 0x98eba48dabccf5e0 +710, 0xdbc2f2cdb7b1c154 +711, 0x7777755616517ad3 +712, 0xd473c147d2628ac1 +713, 0x861e15d1d760b5a7 +714, 0xf4d25926405ecb07 +715, 0xb7739c69effff86e +716, 0xe97fbafa6f96830c +717, 0xf13e8a334e8bede1 +718, 0xcd60010cba4ee4f9 +719, 0x1f537ac2b82e6008 +720, 0x1fda8d781a89140a +721, 0x9dc204f3f4a463f0 +722, 0x456dcd18eb56a1ab +723, 0x629957bc87bd16a1 +724, 0x2c8000ddb8c75253 +725, 0xc31dae9ec8449284 +726, 0xdac05c8baa2b691a +727, 0x21ff7be9ffa3e7ac +728, 0x844f4b5ed4ee08d0 +729, 0x651f913fd636c994 +730, 0xca3e71a2110b2d49 +731, 0x7709bc42253ed09d +732, 0xbb164d45b6569d43 +733, 0x90ec2f040c20a112 +734, 0xfa6e77e9166f5be4 +735, 0x6b6d12c1842d587d +736, 0xfcd7ff8466e25e2a +737, 0x6a5a2ed8bd971297 +738, 0x2ec35f6bba5adcbc +739, 0xc83676e16651249a +740, 0x458f6064cefe10ba +741, 0x90d54d527e6cd028 +742, 0xa5613e88db27c388 +743, 0x331e0c7d85aa1abc +744, 0x8cee4977e210358 +745, 0xfcae379aa6cbff8e +746, 0xd1407afc97a57e86 +747, 0x1fab25c864f094ae +748, 0xd914864a63004552 +749, 0x4214d226a20f1384 +750, 0x3f4e0d80c488b715 +751, 0xc5ca2f654024b7c8 +752, 0xc1e27a124e7c821c +753, 0xd890a915ffc7918c +754, 0x22fba040ce51a9f8 +755, 0xbf61cebd8891617a +756, 0x7846609ee228e319 +757, 0x536d1854375509b8 +758, 0xbbfb45fc6e666f50 +759, 0xd85b4c0527f9d7d6 +760, 0x528cc9c7fa2a84c8 +761, 0x27a1baece647f2cb +762, 0xfddf0cb92fe09dc3 +763, 0xeb5008fe965d8d96 +764, 0x4a3307937eb2e5c8 +765, 0xd07d74c240c6c363 +766, 0x16f62290179d1bbf +767, 0xe99c9bcc9cb1ece7 +768, 0xc64f9be03c8a93be +769, 0x32659effaf666c1f +770, 0x4bb228cfb30b6672 +771, 0x98764870842068a5 +772, 0x5b12ef2d2cd8bdcc +773, 0xbc79d1c1b41f28b8 +774, 0x97a517cf3279fc9a +775, 0x34ffd46c1d4d6025 +776, 0x9c302307ee25c8f0 +777, 0x399604eed1f18a8 +778, 0x1c9b813c2043142a +779, 0x2944ea5e55267fe9 +780, 0x5a8a9f5e728ea667 +781, 0x30c8440adb804a0 +782, 0xee0e6b627099a937 +783, 0x3d50757ada3c52da +784, 0x4548916b32c813ab +785, 0x602a186fe5bf109b +786, 0xf0d440a2227ba304 +787, 0x5a10d4e0ca9ea32b +788, 0x6e5eb90da13ba64c +789, 0x4c6af8fd04241ab2 +790, 0xf9eb31d26e093006 +791, 0x5d674878839fe3ea +792, 0x1562b55b2484e47c +793, 0xa87188c099c1cb61 +794, 0xb7736b8aa02a3392 +795, 0x5f4b301125abb20f +796, 0x361d566984637f44 +797, 0x68c4b3feac8bd0c3 +798, 0x7066c634dd2503c1 +799, 0xfecbf7c9441eb6ea +800, 0xdbc26ae0fc81436b +801, 0x9ef3e2b48252e7a4 +802, 0x31a49b4c339b37c7 +803, 0xb01b2a83cf346cf4 +804, 0xc24dc2347f82fbe3 +805, 0x134cad272dcd410f +806, 0x61260742823ba59c +807, 0x53ac4c193a97c730 +808, 0x9207c9833af34b52 +809, 0xa72e7ee77078d1f5 +810, 0x2e6f6e1b05936885 +811, 0x783b99ce5dbf9464 +812, 0xfdfeb6f0d027bb44 +813, 0x40eeb27096f92b0 +814, 0x5ef96ff5d4a4521f +815, 0x5595806ae873718a +816, 0x67d449eecf4ca1c3 +817, 0xde837ab611364f3f +818, 0x7034c24d2b139be9 +819, 0xe21166603e0a9c86 +820, 0x935694435c1f0d51 +821, 0x6cb3bec90c126088 +822, 0x4096ef662b7a9f89 +823, 0xd2d85b8d238d8c15 +824, 0xa4ea533ce3ec59b2 +825, 0x3654729d80a2db29 +826, 0x214c4cc3906d29d4 +827, 0x201c447e7588e373 +828, 0xe8b8f0ae25f683eb +829, 0x6744aaf5754e38af +830, 0xd1ffb10d6f27a061 +831, 0xe536733a7b3a6c30 +832, 0x39f0f66e47cbf2c9 +833, 0x856a9593526fde2 +834, 0x2e2a817a0098ea4b +835, 0xc5e1eeb551a0e3d3 +836, 0x3f21e2f5e2d50b2 +837, 0x906af56c66dd9f8c +838, 0x30f6dbd70329fac8 +839, 0xc443dfddf3c01a60 +840, 0x7ab85d9aa9675470 +841, 0x8c9080bd39717bfc +842, 0x4b1ccdb3c3597f6f +843, 0x74e2542d70ab5d67 +844, 0xbb3d236aad00f74 +845, 0xcf3cadf9a2804774 +846, 0xe851d9750e42bd07 +847, 0xc0ad82029b1c371f +848, 0x7ee119eb552d6c07 +849, 0xd8024049bd1d784a +850, 0xfa67a899760363 +851, 0xaa7c2f438b178197 +852, 0xc473674a47ffe064 +853, 0x539fbe3fc674c270 +854, 0xdb48484748a76f3b +855, 0xc73b2b092060d +856, 0xa1d2a15345016f5d +857, 0x4d0fe8599f9bba47 +858, 0xa0edc275e6f8f1d1 +859, 0x40590a8655bc8d72 +860, 0x35b4223161f05f75 +861, 0xa04c0c0f616752dc +862, 0x7f371ed2ca45432d +863, 0x2ff1a08f75ac6438 +864, 0xe2dc5c3682282f48 +865, 0xe1e4179fa98d9013 +866, 0x8cb083d6843a73d5 +867, 0xb4c2b5921b706854 +868, 0x738e14c0e7352445 +869, 0xcd2b646f91afd8c7 +870, 0xd5779a5b57a264fd +871, 0xc39ff855586c7d07 +872, 0x3e3f0098c631a859 +873, 0x644e02fae032110 +874, 0xa8834613c0a45278 +875, 0x69482f2c08e10657 +876, 0xe4ee475bdb87e69a +877, 0xdc1ef7b25c0d0019 +878, 0x88a3fa2be18d8744 +879, 0x60a02e0b21c5bec7 +880, 0xb6867b88aa19bc1a +881, 0xb599409affcf10eb +882, 0xaeaa1778a5e59daa +883, 0xd7a91a52c16663e3 +884, 0x93cb269affe07b1c +885, 0x841b6ced3a4ba815 +886, 0x84541768e1540a5c +887, 0xe3943c84f83b3020 +888, 0x5de366fbd7b45258 +889, 0xd787cc3bde91a661 +890, 0x814071446edecb57 +891, 0x15d8c602a1141514 +892, 0x72f07bc8002d1d0d +893, 0x4a8bd8dc9a1f0f3e +894, 0x8723796ae0f20d35 +895, 0xda7283c2051f73b2 +896, 0x2df0cc247f90bd3b +897, 0x79a8522b968f990a +898, 0x951ede190c8b9d02 +899, 0xc512f1a5b14b018a +900, 0xf0e3ddc03b9a4259 +901, 0x8cf4a35ad312e15f +902, 0xebef28926b11094b +903, 0x5628ba687325921c +904, 0xc3aa75e57edc49c3 +905, 0xc38382fa98e762ba +906, 0x8d209e896285848e +907, 0x2c7d6adf592b4a3e +908, 0x62de48e36f8338f3 +909, 0x4a752741e00de30e +910, 0xf7855b70f1f6ec2b +911, 0xa505fa4428199e43 +912, 0xe8b6b423b826bbac +913, 0x4bd1206cf8786d05 +914, 0x6dcf040391fe3bf4 +915, 0x913f500f87e1bba3 +916, 0x5acf775aa180a5d5 +917, 0x74dd28d9432ce739 +918, 0x996c2ff2f0dc2495 +919, 0x73dbfe6c56effe4 +920, 0x56fddd25196f5e40 +921, 0xe87810158f5b7 +922, 0x7b8795e996383f1f +923, 0x9ba5ee7c777c4c82 +924, 0x17ce3908d270fe1c +925, 0x3df9e613c1aedfae +926, 0xcdd26871b32fc8e1 +927, 0xd71cb13afc633979 +928, 0x63427c8ea9b1c79e +929, 0xd070f7664d3b405d +930, 0x46f2a9e32d9fb769 +931, 0xb4c3822a45e9fe9b +932, 0x8ba30b97fe6f5ec7 +933, 0x70aa554ee2fc11f9 +934, 0xa80c99dbe0cfcfaf +935, 0x36d9250cb2d68ed +936, 0x2995e4b9e1cd1db4 +937, 0x4b3803ba57fc570f +938, 0xae3959e7d740eaa5 +939, 0xb4cbd6662adbae08 +940, 0xae46576446e8dbc4 +941, 0xc4828e008a9a8a54 +942, 0x145d7db8e6554b2f +943, 0x1b1b8916a730c371 +944, 0xdaf84b2bebe31963 +945, 0x5b59b80ef23a2403 +946, 0x9180c7e89cab6fd3 +947, 0x80e58f5411babf34 +948, 0xa06cf55185b9b005 +949, 0x13b2c798424173ad +950, 0xc510f8e706311d49 +951, 0x1f974b83b6046d3a +952, 0xae6e8e85e822d1c3 +953, 0x66f2c8dc3274a31a +954, 0x7e04dbcbf65bd377 +955, 0xabf41ede01ec20a4 +956, 0x5efa0948f6bbb2ea +957, 0xbc91c99d8592255 +958, 0xf6d6917911d86d75 +959, 0x85ce273d54e9097a +960, 0xbdfd30f2420fff92 +961, 0x8802f02f610b537c +962, 0xd1d70037ed543229 +963, 0x908aaf97f9693a46 +964, 0x1f6cfeaa0834d53a +965, 0xa453fd1648ce04d2 +966, 0x2c38bb85ebc64af9 +967, 0xd2daff551c90c4f8 +968, 0xae5a0d949797d784 +969, 0xf0974c8552ac9593 +970, 0xa10b70499f65c693 +971, 0x39a449ebd594ddff +972, 0x8ea090f2b17b9b49 +973, 0xc592de318090fd83 +974, 0xb63e4fbc467b6912 +975, 0x57a0c1c5ce0e4dcc +976, 0xa7c517cf3d436b35 +977, 0xef6dcb0f3fad038b +978, 0xaf4fb60315b91287 +979, 0x5e0776f67304f331 +980, 0xe927753b8e6f7932 +981, 0xd3df2dd92559e304 +982, 0xdaed52aa6af44413 +983, 0x1b59f4dac1e181f8 +984, 0x4a73c2293877ef39 +985, 0xca45d0d015fe44de +986, 0x4659c8b7853735a8 +987, 0x12de6466bdf8adeb +988, 0xaeea857a09bfec15 +989, 0xcc9cf4b3c0b88a23 +990, 0xa44ae52396a5e1bf +991, 0x5847a724305d137f +992, 0x8f4d4de223956182 +993, 0x58254dfada867a8 +994, 0x900a98222c2f339e +995, 0xdb575260935d51d5 +996, 0x13fb4bfbbc0d7b53 +997, 0x62213850186bb92b +998, 0x2a34823312c00388 +999, 0x6148329042f743b0 diff --git a/EXE version/main/numpy/random/tests/data/pcg64dxsm-testset-1.csv b/EXE version/main/numpy/random/tests/data/pcg64dxsm-testset-1.csv new file mode 100644 index 00000000..39cef057 --- /dev/null +++ b/EXE version/main/numpy/random/tests/data/pcg64dxsm-testset-1.csv @@ -0,0 +1,1001 @@ +seed, 0xdeadbeaf +0, 0xdf1ddcf1e22521fe +1, 0xc71b2f9c706cf151 +2, 0x6922a8cc24ad96b2 +3, 0x82738c549beccc30 +4, 0x5e8415cdb1f17580 +5, 0x64c54ad0c09cb43 +6, 0x361a17a607dce278 +7, 0x4346f6afb7acad68 +8, 0x6e9f14d4f6398d6b +9, 0xf818d4343f8ed822 +10, 0x6327647daf508ed6 +11, 0xe1d1dbe5496a262a +12, 0xfc081e619076b2e0 +13, 0x37126563a956ab1 +14, 0x8bb46e155db16b9 +15, 0x56449f006c9f3fb4 +16, 0x34a9273550941803 +17, 0x5b4df62660f99462 +18, 0xb8665cad532e3018 +19, 0x72fc3e5f7f84216a +20, 0x71d3c47f6fd59939 +21, 0xfd4218afa1de463b +22, 0xc84054c78e0a9a71 +23, 0xae59034726be61a8 +24, 0xa6a5f21de983654d +25, 0x3b633acf572009da +26, 0x6a0884f347ab54c8 +27, 0x7a907ebe9adcab50 +28, 0xbe779be53d7b8d4a +29, 0xf5976e8c69b9dcd1 +30, 0x1d8302f114699e11 +31, 0x7d37e43042c038a0 +32, 0x2cc1d4edc2a40f35 +33, 0x83e3347bb2d581f1 +34, 0x253f8698651a844d +35, 0x4312dea0dd4e32f6 +36, 0x10f106439964ea3a +37, 0x810eb374844868cc +38, 0x366342a54b1978cc +39, 0x9fb39b13aaddfb5e +40, 0xdb91fd0d9482bed7 +41, 0x89f6ea4ca9c68204 +42, 0x146b31ccca461792 +43, 0x203fd9724deb2486 +44, 0x58a84f23748e25cb +45, 0x2f20eb6aeb94e88 +46, 0x14d3581460e473c +47, 0xad5bd0d25f37d047 +48, 0x1cf88fa16de258b2 +49, 0x3bcab6485b7a341 +50, 0xb2433b37f227d90c +51, 0x2cffd7e0a8360cc8 +52, 0x5d2eeff7c9ebc847 +53, 0x6fd7c7ae23f9f64b +54, 0x381650b2d00f175d +55, 0x9d93edcedc873cae +56, 0x56e369a033d4cb49 +57, 0x7547997116a3bac +58, 0x11debaa897fd4665 +59, 0xdf799d2b73bd6fb8 +60, 0x3747d299c66624d +61, 0xac9346701afd0cfa +62, 0xac90e150fa13c7bf +63, 0x85c56ad2248c2871 +64, 0xdea66bf35c45f195 +65, 0x59cf910ea079fb74 +66, 0x2f841bb782274586 +67, 0x9814df4384d92bd9 +68, 0x15bc70824be09925 +69, 0x16d4d0524c0503a3 +70, 0xf04ea249135c0cc7 +71, 0xa707ab509b7e3032 +72, 0x465459efa869e372 +73, 0x64cbf70a783fab67 +74, 0x36b3541a14ca8ed7 +75, 0x9a4dfae8f4c596bf +76, 0x11d9a04224281be3 +77, 0xe09bbe6d5e98ec32 +78, 0xa6c60d908973aa0d +79, 0x7c524c57dd5915c8 +80, 0xa810c170b27f1fdc +81, 0xce5d409819621583 +82, 0xfe2ee3d5332a3525 +83, 0x162fb7c8b32045eb +84, 0x4a3327156b0b2d83 +85, 0x808d0282f971064 +86, 0x2e6f04cf5ed27e60 +87, 0xaf6800699cca67a9 +88, 0xc7590aae7244c3bf +89, 0x7824345f4713f5f9 +90, 0x8f713505f8fd059b +91, 0x3d5b5b9bb6b1e80e +92, 0x8674f45e5dc40d79 +93, 0xcb1e36846aa14773 +94, 0xe0ae45b2b9b778c1 +95, 0xd7254ce931eefcfb +96, 0xef34e15e4f55ac0a +97, 0xf17cc0ba15a99bc4 +98, 0x77bb0f7ffe7b31f1 +99, 0x6ee86438d2e71d38 +100, 0x584890f86829a455 +101, 0x7baf0d8d30ba70fe +102, 0xb1ac8f326b8403ae +103, 0xcc1963435c874ba7 +104, 0x9c483b953d1334ce +105, 0xc0924bcbf3e10941 +106, 0x21bcc581558717b1 +107, 0x2c5ad1623f8d292b +108, 0xa8ea110f6124557e +109, 0x15f24a6c5c4c591 +110, 0x40fe0d9cd7629126 +111, 0xcfe8f2b3b081484d +112, 0x891383f4b4cac284 +113, 0x76f2fcdef7fa845 +114, 0x4edd12133aed0584 +115, 0xd53c06d12308873d +116, 0xf7f22882c17f86bf +117, 0xfbaa4aad72f35e10 +118, 0x627610da2e3c0cc3 +119, 0x582b16a143634d9a +120, 0x9b4a7f69ed38f4a0 +121, 0x2df694974d1e1cbe +122, 0xe5be6eaafed5d4b +123, 0xc48e2a288ad6605e +124, 0xbcb088149ce27c2b +125, 0x3cb6a7fb06ceecbe +126, 0x516735fff3b9e3ac +127, 0x5cbafc551ee5008d +128, 0xee27d1ab855c5fd5 +129, 0xc99fb341f6baf846 +130, 0x7ad8891b92058e6d +131, 0xf50310d03c1ac6c7 +132, 0x947e281d998cbd3e +133, 0x1d4d94a93824fe80 +134, 0x5568b77289e7ee73 +135, 0x7d82d1b2b41e3c8b +136, 0x1af462c7abc787b +137, 0xcfd8dfe80bfae1ef +138, 0xd314caeb723a63ea +139, 0x1c63ddcfc1145429 +140, 0x3801b7cc6cbf2437 +141, 0xc327d5b9fdafddd3 +142, 0xe140278430ca3c78 +143, 0x4d0345a685cb6ef8 +144, 0x47640dc86e261ff9 +145, 0xab817f158523ebf4 +146, 0x37c51e35fbe65a6b +147, 0xab090f475d30a178 +148, 0x4d3ec225bf599fc1 +149, 0xefd517b0041679b1 +150, 0x20ad50bca4da32c5 +151, 0x75e1f7cd07fad86d +152, 0x348cf781ee655f4b +153, 0x9375f0e5ffc2d2ec +154, 0x7689082fd5f7279c +155, 0x633e56f763561e77 +156, 0x9d1752d70861f9fd +157, 0xa3c994b4e70b0b0f +158, 0xabf7276a58701b88 +159, 0xbfa18d1a0540d000 +160, 0xc6a28a2475646d26 +161, 0x7cdf108583f65085 +162, 0x82dcefb9f32104be +163, 0xc6baadd0adc6b446 +164, 0x7a63cff01075b1b4 +165, 0x67ac62e575c89919 +166, 0x96fa4320a0942035 +167, 0xc4658859385b325f +168, 0xde22c17ff47808f6 +169, 0xbb952c4d89e2f2ec +170, 0x638251fbc55bdc37 +171, 0x38918b307a03b3ea +172, 0xccb60f2cedbb570b +173, 0x3c06f4086a28f012 +174, 0x4e8d238388986e33 +175, 0x1760b7793514a143 +176, 0xa3f924efe49ee7d6 +177, 0xaf6be2dbaebc0bdf +178, 0x6782682090dffe09 +179, 0xb63a4d90d848e8ef +180, 0x5f649c7eaf4c54c5 +181, 0xbe57582426a085ba +182, 0xb5dd825aa52fb76d +183, 0x74cb4e6ca4039617 +184, 0x382e578bf0a49588 +185, 0xc043e8ea6e1dcdae +186, 0xf902addd5c04fa7c +187, 0xf3337994612528db +188, 0x4e8fd48d6d15b4e6 +189, 0x7190a509927c07ab +190, 0x864c2dee5b7108ae +191, 0xbb9972ddc196f467 +192, 0x1ea02ab3ca10a448 +193, 0xe50a8ffde35ddef9 +194, 0x7bd2f59a67183541 +195, 0x5a940b30d8fcd27a +196, 0x82b4cea62623d4d3 +197, 0x6fbda76d4afef445 +198, 0x8b1f6880f418328e +199, 0x8b69a025c72c54b7 +200, 0xb71e0f3986a3835f +201, 0xa4a7ddb8b9816825 +202, 0x945dcda28228b1d8 +203, 0xb471abf2f8044d72 +204, 0xf07d4af64742b1ba +205, 0xfca5190bc4dd6a2a +206, 0xd681497262e11bc5 +207, 0xbe95d5f00c577028 +208, 0x56313439fd8bde19 +209, 0x3f3d9ac9b5ee6522 +210, 0x7b8d457dd2b49bbe +211, 0xe76b5747885d214b +212, 0xa8a695b3deb493ea +213, 0x5292446548c95d71 +214, 0xbf5cdf0d436412df +215, 0x7936abaed779d28d +216, 0x659c6e8073b3a06d +217, 0x86c9ff28f5543b71 +218, 0x6faa748445a99146 +219, 0xdcc1e6ab57904fd7 +220, 0x770bd61233addc5f +221, 0x16963e041e46d94f +222, 0x158e6cb2934157ac +223, 0xb65088a8fd246441 +224, 0x2b12ced6ce8a68c3 +225, 0x59a18d02cd6082b3 +226, 0x4ddbc318cb5488ee +227, 0x3d4cf520b3ed20a1 +228, 0x7028b3a92e2b292d +229, 0xf141da264a250e4d +230, 0x9788d53e86041c37 +231, 0x1bb91238a7c97dbf +232, 0x81953d0ddb634309 +233, 0xfa39ccfe14d2d46 +234, 0xf7c7861c9b7e8399 +235, 0x18d27ca50d9dc249 +236, 0x258dfdf38510d0d9 +237, 0x9e72d8af910ea76f +238, 0x4f8ef24b96de50ad +239, 0xb9d9c12297e03dc9 +240, 0x91994e41b4a1929c +241, 0x8defa79b2ccc83b9 +242, 0x948566748706dac5 +243, 0x7b0454946e70e4cf +244, 0x340b7cb298c70ed7 +245, 0x6602005330cebd95 +246, 0xf71cb803aa61f722 +247, 0x4683fb07fc70ae8a +248, 0xc6db9f0c4de3ed88 +249, 0x3e8dfae2a593cef9 +250, 0x615f7c38e3862b33 +251, 0x676c7996550d857 +252, 0xc6d520d54a5c266a +253, 0x202b1e8eef14aa2e +254, 0xa3a84891a27a582 +255, 0x84dbee451658d47f +256, 0x254c7cd97e777e3a +257, 0xf50b6e977f0eba50 +258, 0x2898b1d3062a4798 +259, 0x4096f7cbbb019773 +260, 0x9fb8e75548062c50 +261, 0x4647071e5ca318ec +262, 0x2b4750bdb3b3b01 +263, 0x88ac41cc69a39786 +264, 0x705e25476ef46fa3 +265, 0xc0c1db19884a48a6 +266, 0x1364c0afdbb465e5 +267, 0x58e98534701272a6 +268, 0x746a5ea9701517c0 +269, 0x523a70bc6b300b67 +270, 0x9b1c098eda8564ad +271, 0xfbaeb28d3637067f +272, 0xddd9a13551fdba65 +273, 0x56461a670559e832 +274, 0xab4fd79be85570ad +275, 0xd4b691ecaff8ca55 +276, 0x11a4495939e7f004 +277, 0x40d069d19477eb47 +278, 0xe790783d285cd81e +279, 0xde8218b16d935bc7 +280, 0x2635e8c65cd4182d +281, 0xeae402623e3454 +282, 0x9f99c833184e0279 +283, 0x3d0f79a0d52d84e7 +284, 0xc1f8edb10c625b90 +285, 0x9b4546363d1f0489 +286, 0x98d86d0b1212a282 +287, 0x386b53863161200d +288, 0xbe1165c7fe48a135 +289, 0xb9658b04dbbfdc8c +290, 0xcea14eddfe84d71a +291, 0x55d03298be74abe7 +292, 0x5be3b50d961ffd7e +293, 0xc76b1045dc4b78e1 +294, 0x7830e3ff3f6c3d4c +295, 0xb617adb36ca3729 +296, 0x4a51bdb194f14aa9 +297, 0x246024e54e6b682a +298, 0x33d42fc9c6d33083 +299, 0xadccba149f31e1d +300, 0x5183e66b9002f8b +301, 0x70eb2416404d51b7 +302, 0x26c25eb225535351 +303, 0xbc2d5b0d23076561 +304, 0x5823019ddead1da +305, 0x85cfa109fca69f62 +306, 0x26017933e7e1efd9 +307, 0x3ec7be9a32212753 +308, 0x697e8a0697cd6f60 +309, 0x44735f6cca03920f +310, 0x8cc655eb94ee212e +311, 0x8b8b74eba84929a0 +312, 0x7708ccedd0c98c80 +313, 0x1b6f21f19777cbe1 +314, 0x363e564bd5fadedb +315, 0x5921543a641591fe +316, 0xc390786d68ea8a1b +317, 0x9b293138dc033fca +318, 0x45447ca8dc843345 +319, 0xee6ef6755bc49c5e +320, 0x70a3a1f5163c3be5 +321, 0xf05e25448b6343b0 +322, 0x4739f4f8717b7e69 +323, 0xb006141975bf957 +324, 0x31874a91b707f452 +325, 0x3a07f2c90bae2869 +326, 0xb73dae5499a55c5e +327, 0x489070893bb51575 +328, 0x7129acf423940575 +329, 0x38c41f4b90130972 +330, 0xc5260ca65f5a84a1 +331, 0x6e76194f39563932 +332, 0x62ca1f9ca3de3ca6 +333, 0xb4a97874e640853f +334, 0x38ed0f71e311cc02 +335, 0xde183b81099e8f47 +336, 0x9bb8bf8e6694346 +337, 0xd15497b6bf81e0f2 +338, 0xaaae52536c00111 +339, 0x4e4e60d1435aaafd +340, 0x5a15512e5d6ea721 +341, 0xff0f1ffabfc6664f +342, 0xba3ffcedc5f97fec +343, 0xef87f391c0c6bfb6 +344, 0x4a888c5d31eb0f98 +345, 0x559a3fbfd7946e95 +346, 0xe45b44a0db5a9bad +347, 0x9457898964190af1 +348, 0xd9357dfaab76cd9e +349, 0xa60e907178d965a1 +350, 0x76b2dc3032dc2f4a +351, 0x13549b9c2802120 +352, 0x8656b965a66a1800 +353, 0x16802e6e22456a23 +354, 0x23b62edc60efaa9 +355, 0x6832a366e1e4ea3b +356, 0x46b1b41093ff2b1e +357, 0x55c857128143f219 +358, 0x7fc35ddf5e138200 +359, 0x790abe78be67467e +360, 0xa4446fc08babd466 +361, 0xc23d70327999b855 +362, 0x2e019d1597148196 +363, 0xfefd98e560403ab8 +364, 0xbe5f0a33da330d58 +365, 0x3078a4e9d43ca395 +366, 0x511bfedd6f12f2b3 +367, 0x8bc138e335be987c +368, 0x24640f803465716d +369, 0xf6530b04d0bd618f +370, 0x9b7833e5aa782716 +371, 0x778cd35aea5841b1 +372, 0xecea3c458cefbc60 +373, 0x5107ae83fc527f46 +374, 0x278ad83d44bd2d1a +375, 0x7014a382295aeb16 +376, 0xf326dd762048743f +377, 0x858633d56279e553 +378, 0x76408154085f01bc +379, 0x3e77d3364d02e746 +380, 0x2f26cea26cadd50b +381, 0x6d6846a4ecb84273 +382, 0x4847e96f2df5f76 +383, 0x5a8610f46e13ff61 +384, 0x4e7a7cac403e10dd +385, 0x754bdf2e20c7bc90 +386, 0x8bdd80e6c51bd0be +387, 0x61c655fae2b4bc52 +388, 0x60873ef48e3d2f03 +389, 0x9d7d8d3698a0b4a4 +390, 0xdf48e9c355cd5d4b +391, 0x69ecf03e20be99ac +392, 0xc1a0c5a339bd1815 +393, 0x2e3263a6a3adccb +394, 0x23557459719adbdc +395, 0xd1b709a3b330e5a +396, 0xade5ab00a5d88b9d +397, 0x69a6bd644120cfad +398, 0x40187ecceee92342 +399, 0x1c41964ba1ac78da +400, 0x9ac5c51cbecabe67 +401, 0xbdc075781cf36d55 +402, 0xeaf5a32246ded56 +403, 0xcda0b67e39c0fb71 +404, 0x4839ee456ef7cc95 +405, 0xf17092fdd41d5658 +406, 0x2b5d422e60ae3253 +407, 0x3effe71102008551 +408, 0x20a47108e83934b7 +409, 0xd02da65fe768a88f +410, 0xeb046bd56afa4026 +411, 0x70c0509c08e0fbe0 +412, 0x1d35c38d4f8bac6c +413, 0x9aa8eb6466f392e0 +414, 0x587bd4a430740f30 +415, 0x82978fe4bad4195 +416, 0xdc4ebc4c0feb50ab +417, 0xd3b7164d0240c06f +418, 0x6e2ad6e5a5003a63 +419, 0xa24b430e2ee6b59c +420, 0x2905f49fd5073094 +421, 0x5f209e4de03aa941 +422, 0x57b7da3e0bedb1dc +423, 0x5e054018875b01f5 +424, 0xb2f2da6145658db3 +425, 0xbd9c94a69a8eb651 +426, 0x9c5f9a07cd6ac749 +427, 0x2296c4af4d529c38 +428, 0x522ed800fafdefab +429, 0xe2a447ced0c66791 +430, 0x937f10d45e455fef +431, 0xc882987d9e29a24 +432, 0x4610bfd6a247ee1a +433, 0x562ba3e50870059 +434, 0x59d8d58793602189 +435, 0xfe9a606e3e34abe +436, 0x6825f7932a5e9282 +437, 0xe77f7061bab476ad +438, 0xbf42001da340ace3 +439, 0x9c3e9230f5e47960 +440, 0x2c0f700d96d5ad58 +441, 0x330048b7cd18f1f9 +442, 0xffc08785eca5cca9 +443, 0xb5879046915f07a5 +444, 0xef51fe26f83c988e +445, 0xfa4c2968e7881a9a +446, 0xc0a9744455a4aad +447, 0xbd2ad686d6313928 +448, 0x6b9f0984c127682a +449, 0xc9aaa00a5da59ed8 +450, 0x762a0c4b98980dbf +451, 0x52d1a2393d3ca2d1 +452, 0x1e9308f2861db15c +453, 0xe7b3c74fe4b4a844 +454, 0x485e15704a7fc594 +455, 0x9e7f67ea44c221f6 +456, 0xbab9ad47fde916e0 +457, 0x50e383912b7fc1f4 +458, 0xaad63db8abcef62d +459, 0xc2f0c5699f47f013 +460, 0xee15b36ada826812 +461, 0x2a1b1cf1e1777142 +462, 0x8adb03ede79e937d +463, 0xf14105ef65643bf3 +464, 0x752bbaefc374a3c7 +465, 0xa4980a08a5a21d23 +466, 0x418a1c05194b2db7 +467, 0xdd6ff32efe1c3cd6 +468, 0x272473ed1f0d3aa2 +469, 0x1e7fdebadabe6c06 +470, 0xd1baa90c17b3842f +471, 0xd3d3a778e9c8404a +472, 0x781ae7fda49fa1a0 +473, 0x61c44fdbdacc672d +474, 0x6d447d0a1404f257 +475, 0x9303e8bdfbfb894d +476, 0x3b3482cdec016244 +477, 0xb149bf245d062e7b +478, 0x96f8d54b14cf992d +479, 0x4741549a01f8c3d0 +480, 0x48270811b2992af +481, 0x7b58f175cd25d147 +482, 0x8f19a840b56f4be9 +483, 0x84a77f43c0951a93 +484, 0x34e1a69381f0c374 +485, 0xb158383c9b4040f +486, 0x372f1abc7cf3a9fa +487, 0x5439819a84571763 +488, 0xabf8515e9084e2fa +489, 0xb02312b9387ff99 +490, 0x238a85bb47a68b12 +491, 0x2068cb83857c49bb +492, 0xc6170e743083664c +493, 0x745cf8470bcb8467 +494, 0xe3a759a301670300 +495, 0x292c7686ad3e67da +496, 0x359efedaff192a45 +497, 0x511f2c31a2d8c475 +498, 0x97fd041bf21c20b3 +499, 0x25ef1fe841b7b3f6 +500, 0xbb71739e656f262d +501, 0x2729b0e989b6b7b8 +502, 0xd2142702ec7dbabf +503, 0x7008decd2488ee3f +504, 0x69daa95e303298d7 +505, 0xc35eca4efb8baa5a +506, 0xf3f16d261cec3b6c +507, 0x22371c1d75396bd3 +508, 0x7aefa08eccae857e +509, 0x255b493c5e3c2a2f +510, 0x779474a077d34241 +511, 0x5199c42686bea241 +512, 0x16c83931e293b8d3 +513, 0xa57fe8db8c0302c7 +514, 0xd7ace619e5312eb1 +515, 0x8740f013306d217c +516, 0xb6a1ad5e29f4d453 +517, 0x31abf7c964688597 +518, 0xbc3d791daed71e7 +519, 0x31ee4ca67b7056ed +520, 0x1ab5416bfe290ea3 +521, 0x93db416f6d3b843a +522, 0xed83bbe5b1dd2fed +523, 0xece38271470d9b6d +524, 0x3a620f42663cd8ae +525, 0x50c87e02acafee5d +526, 0xcabeb8bedbc6dab5 +527, 0x2880a6d09970c729 +528, 0x4aba5dd3bfc81bc +529, 0xaba54edf41080cec +530, 0xb86bb916fc85a169 +531, 0x4c41de87bc79d8ca +532, 0xcce2a202622945fe +533, 0x513f086fad94c107 +534, 0x18b3960c11f8cc96 +535, 0x2f0d1cfd1896e236 +536, 0x1702ae3880d79b15 +537, 0x88923749029ae81 +538, 0x84810d4bdec668eb +539, 0xf85b0a123f4fc68d +540, 0x93efd68974b6e4d1 +541, 0x5d16d6d993a071c9 +542, 0x94436858f94ca43b +543, 0xb3dbb9ed0cb180b6 +544, 0x6447030a010b8c99 +545, 0xd7224897c62925d8 +546, 0xb0c13c1d50605d3a +547, 0xdff02c7cb9d45f30 +548, 0xe8103179f983570d +549, 0xbc552037d6d0a24e +550, 0x775e500b01486b0d +551, 0x2050ac632c694dd6 +552, 0x218910387c4d7ae7 +553, 0xf83e8b68ff885d5d +554, 0xe3374ec25fca51a3 +555, 0xfa750ffa3a60f3af +556, 0x29ee40ba6df5592e +557, 0x70e21a68f48260d2 +558, 0x3805ca72cd40886e +559, 0x2f23e73f8eabf062 +560, 0x2296f80cdf6531ae +561, 0x903099ed968db43a +562, 0xf044445cf9f2929f +563, 0xcd47fdc2de1b7a1 +564, 0xaab1cbd4f849da99 +565, 0x5fc990688da01acb +566, 0xa9cee52ea7dab392 +567, 0xecefc3a4349283a8 +568, 0xdd6b572972e3fafc +569, 0xc1f0b1a2ffb155da +570, 0xc30d53fc17bd25c8 +571, 0x8afa89c77834db28 +572, 0x5569a596fb32896c +573, 0x36f207fc8df3e3d4 +574, 0x57c2bd58517d81db +575, 0xb524693e73d0061c +576, 0xb69f6eb233f5c48b +577, 0x4f0fb23cab8dc695 +578, 0x492c1ad0a48df8df +579, 0xf6dcc348ec8dec1f +580, 0xa4d8708d6eb2e262 +581, 0x4c2072c2c9766ff1 +582, 0xa9bf27c4304875f0 +583, 0xfc8fb8066d4f9ae2 +584, 0x188095f6235fec3c +585, 0x1d8227a2938c2864 +586, 0x89ea50c599010378 +587, 0xcac86df0a7c6d56d +588, 0x47a8c5df84c7d78 +589, 0xe607ae24ea228bfa +590, 0x36624a7996efe104 +591, 0x5d72881c1227d810 +592, 0x78694a6750374c8 +593, 0x7b9a217d4ab5ff45 +594, 0xd53e5d6f7504becc +595, 0x197a72d3f4889a0e +596, 0xfdc70c4755a8df36 +597, 0xd0fda83748c77f74 +598, 0x7ddc919ac9d6dcc9 +599, 0x785c810a6a2dc08b +600, 0xba4be83e7e36896c +601, 0x379d6fe80cf2bffe +602, 0x74cae2dabc429206 +603, 0x1efac32d5d34c917 +604, 0x3cb64e2f98d36e70 +605, 0xc0a7c3cdc3c60aa7 +606, 0x699dfadd38790ebe +607, 0x4861e61b3ecfbeac +608, 0x531744826c345baa +609, 0x5ec26427ad450cba +610, 0xf2c1741479abdcae +611, 0xe9328a78b2595458 +612, 0x30cd1bdf087acd7f +613, 0x7491ced4e009adbe +614, 0xdcd942df1e2e7023 +615, 0xfe63f01689fee35 +616, 0x80282dfe5eaedc42 +617, 0x6ecdea86495f8427 +618, 0xe0adfdd5e9ed31c3 +619, 0xf32bd2a7418127e +620, 0x8aabba078db6ee2 +621, 0xa8a8e60499145aca +622, 0xf76b086ac4e8a0f2 +623, 0x6e55b3c452ff27f8 +624, 0xe18fa7cd025a71bf +625, 0xeed7b685fde0fa25 +626, 0xba9b6c95867fa721 +627, 0x4c2603bc69de2df2 +628, 0xaac87eee1b58cd66 +629, 0x3c9af6656e01282c +630, 0x2dfa05ce8ff476b6 +631, 0xeae9143fcf92f23d +632, 0x3f0699f631be3bc8 +633, 0xa0f5f79f2492bd67 +634, 0x59c47722388131ed +635, 0x5f6e9d2941cef1de +636, 0xe9ad915c09788b7b +637, 0x92c6d37e4f9482f5 +638, 0x57d301b7fdadd911 +639, 0x7e952d23d2a8443 +640, 0xbb2fa5e0704b3871 +641, 0xe5642199be36e2d5 +642, 0x5020b60d54358291 +643, 0xa0b6317ec3f60343 +644, 0xb57b08b99540bc5c +645, 0x21f1890adc997a88 +646, 0xfcf824200dd9da2d +647, 0x8146293d83d425d1 +648, 0xdadfbf5fbb99d420 +649, 0x1eb9bbc5e6482b7d +650, 0xd40ff44f1bbd0f1c +651, 0xa9f948ba2d08afa5 +652, 0x638cc07c5301e601 +653, 0x1f984baa606e14e8 +654, 0x44e153671081f398 +655, 0xb17882eeb1d77a5d +656, 0x5fd8dbee995f14c +657, 0xff3533e87f81b7fe +658, 0x2f44124293c49795 +659, 0x3bf6b51e9360248 +660, 0x72d615edf1436371 +661, 0x8fc5cf4a38adab9d +662, 0xfa517e9022078374 +663, 0xf356733f3e26f4d8 +664, 0x20ea099cdc6aad40 +665, 0xe15b977deb37637d +666, 0xcc85601b89dae88d +667, 0x5768c62f8dd4905c +668, 0xa43cc632b4e56ea +669, 0xc4240cf980e82458 +670, 0xb194e8ffb4b3eeb6 +671, 0xee753cf2219c5fa1 +672, 0xfe2500192181d44d +673, 0x2d03d7d6493dd821 +674, 0xff0e787bb98e7f9b +675, 0xa05cf8d3bd810ce7 +676, 0x718d5d6dcbbdcd65 +677, 0x8d0b5343a06931c +678, 0xae3a00a932e7eaf9 +679, 0x7ed3d8f18f983e18 +680, 0x3bb778ee466dc143 +681, 0x711c685c4e9062c0 +682, 0x104c3af5d7ac9834 +683, 0x17bdbb671fb5d5cf +684, 0xabf26caead4d2292 +685, 0xa45f02866467c005 +686, 0xf3769a32dc945d2d +687, 0xe78d0007f6aabb66 +688, 0x34b60be4acbd8d4b +689, 0x58c0b04b69359084 +690, 0x3a8bb354c212b1 +691, 0x6b82a8f3d70058d5 +692, 0x405bdef80a276a4a +693, 0xe20ca40ee9195cad +694, 0xf5dd96ba2446fefd +695, 0xc1e180c55fe55e3c +696, 0xa329caf6daa952b3 +697, 0xb4809dd0c84a6b0a +698, 0xd27f82661070cee7 +699, 0xa7121f15ee2b0d8a +700, 0x4bdaea70d6b34583 +701, 0xe821dc2f310f7a49 +702, 0x4c00a5a68e76f647 +703, 0x331065b064a2d5ea +704, 0xac0c2ce3dc04fa37 +705, 0x56b32b37b8229008 +706, 0xe757cdb51534fcfa +707, 0xd3ff183576b2fad7 +708, 0x179e1f4190f197a7 +709, 0xf874c626a7c9aae5 +710, 0xd58514ffc37c80e4 +711, 0xc65de31d33fa7fd3 +712, 0x6f6637052025769b +713, 0xca1c6bdadb519cc0 +714, 0xd1f3534cde37828a +715, 0xc858c339eee4830a +716, 0x2371eacc215e02f4 +717, 0x84e5022db85bbbe9 +718, 0x5f71c50bba48610e +719, 0xe420192dad9c323f +720, 0x2889342721fca003 +721, 0x83e64f63334f501d +722, 0xac2617172953f2c +723, 0xfa1f78d8433938ff +724, 0x5578382760051462 +725, 0x375d7a2e3b90af16 +726, 0xb93ff44e6c07552d +727, 0xded1d5ad811e818c +728, 0x7cf256b3b29e3a8c +729, 0x78d581b8e7bf95e8 +730, 0x5b69192f2caa6ad3 +731, 0xa9e25855a52de3ce +732, 0x69d8e8fc45cc188d +733, 0x5dd012c139ad347d +734, 0xfcb01c07b77db606 +735, 0x56253e36ab3d1cce +736, 0x1181edbb3ea2192 +737, 0x325bef47ff19a08d +738, 0xd3e231ceb27e5f7 +739, 0x8e819dd2de7956d2 +740, 0x34a9689fe6f84a51 +741, 0x3e4eeb719a9c2927 +742, 0x5c3b3440581d0aaf +743, 0x57caf51897d7c920 +744, 0xec6a458130464b40 +745, 0xe98f044e0da40e9b +746, 0xbe38662020eeb8e7 +747, 0x7b8c407c632724ae +748, 0x16c7cfa97b33a544 +749, 0xd23359e2e978ae5a +750, 0x4fdba458250933dd +751, 0x3c9e0713cfe616ba +752, 0x6f0df87b13163b42 +753, 0xc460902cb852cc97 +754, 0x289df8fefd6b0bce +755, 0x4ac2a2a1c3fb8029 +756, 0x2fc3e24d8b68eef7 +757, 0x34564386a59aab9a +758, 0x31047391ebd67ce4 +759, 0x6c23d070a0564d41 +760, 0xba6387b2b72545f7 +761, 0xcdcf1008058387af +762, 0xc9308fa98db05192 +763, 0xdbdbb5abd01a9d84 +764, 0x937088275c7804ab +765, 0x6f6accfefe34ee81 +766, 0x5c33c74c49cfdb2c +767, 0x5e1a771edfb92bd3 +768, 0x6e89b009069ecae7 +769, 0x34d64e17ec0e8968 +770, 0x841203d0cde0c330 +771, 0x7642cc9d7eb9e9cb +772, 0xca01d2e8c128b97e +773, 0x5b8390617b3304ab +774, 0x52ec4ed10de1eb2d +775, 0xb90f288b9616f237 +776, 0x5bd43cd49617b2e2 +777, 0x1a53e21d25230596 +778, 0x36ccd15207a21cd6 +779, 0xc8263d780618fd3c +780, 0x6eb520598c6ce1cb +781, 0x493c99a3b341564f +782, 0xab999e9c5aa8764f +783, 0xab2fa4ceaba84b +784, 0xbbd2f17e5cb2331b +785, 0xc8b4d377c0cc4e81 +786, 0x31f71a6e165c4b1e +787, 0xd1011e55fb3addaa +788, 0x5f7ec34728dfa59 +789, 0x2aef59e60a84eb0f +790, 0x5dde6f09aec9ad5f +791, 0x968c6cdbc0ef0438 +792, 0x1957133afa15b13a +793, 0xbaf28f27573a64c2 +794, 0xc6f6ddd543ebf862 +795, 0xdd7534315ec9ae1e +796, 0xd2b80cd2758dd3b +797, 0xa38c3da00cc81538 +798, 0x15c95b82d3f9b0f9 +799, 0x6704930287ce2571 +800, 0x9c40cc2f6f4ecb0c +801, 0xc8de91f50b22e94e +802, 0x39272e8fddbfdf0a +803, 0x879e0aa810a117d +804, 0xa312fff4e9e5f3bd +805, 0x10dd747f2835dfec +806, 0xeb8466db7171cdae +807, 0xaa808d87b9ad040a +808, 0xab4d2229a329243a +809, 0x7c622f70d46f789c +810, 0x5d41cef5965b2a8e +811, 0xce97ec4702410d99 +812, 0x5beba2812c91211b +813, 0xf134b46c93a3fec7 +814, 0x76401d5630127226 +815, 0xc55fc9d9eacd4ec1 +816, 0xaec8cefaa12f813f +817, 0x2f845dcfd7b00722 +818, 0x3380ab4c20885921 +819, 0xdb68ad2597691b74 +820, 0x8a7e4951455f563f +821, 0x2372d007ed761c53 +822, 0xcab691907714c4f1 +823, 0x16bc31d6f3abec1a +824, 0x7dff639fbcf1824 +825, 0x6666985fbcff543d +826, 0xb618948e3d8e6d0c +827, 0x77b87837c794e068 +828, 0xcd48288d54fcb5a8 +829, 0x47a773ed6ae30dc3 +830, 0xba85ae44e203c942 +831, 0xa7a7b21791a25b2d +832, 0x4029dd92e63f19e0 +833, 0xc2ad66ab85e7d5aa +834, 0xa0f237c96fdab0db +835, 0xffefb0ab1ca18ed +836, 0x90cb4500785fd7d5 +837, 0xa7dd3120f4876435 +838, 0x53f7872624694300 +839, 0xea111326ff0040d9 +840, 0x5f83cb4cce40c83b +841, 0x918e04936c3b504d +842, 0x87a8db4c0e15e87c +843, 0x7cff39da6a0dedd0 +844, 0x36f7de2037f85381 +845, 0xd1d8d94022a1e9a7 +846, 0x2c9930127dc33ec9 +847, 0x6cb4719dcd0101c6 +848, 0xc01868cde76935f7 +849, 0x6b86f2ec1ab50143 +850, 0x68af607d8d94ae61 +851, 0xe216c5b95feedf34 +852, 0x4b866bd91efe2e4b +853, 0x4bff79df08f92c99 +854, 0x6ff664ea806acfd1 +855, 0x7fce0b3f9ece39bc +856, 0x29bc90b59cb3db97 +857, 0x833c4b419198607d +858, 0xf3573e36ca4d4768 +859, 0x50d71c0a3c2a3fa8 +860, 0xd754591aea2017e7 +861, 0x3f9126f1ee1ebf3 +862, 0xe775d7f4b1e43de8 +863, 0xe93d51628c263060 +864, 0x83e77f6fb32d6d82 +865, 0x43dd7eef823408e4 +866, 0x1c843c2c90180662 +867, 0xe924dafb9a16066b +868, 0x6af3ee96e7b7fbd9 +869, 0x94d5c4f37befcd1f +870, 0x40ffb04bedef4236 +871, 0x71c17bbc20e553e +872, 0x101f7a0a6208729f +873, 0x5ca34570cf923548 +874, 0x8e3139db2e96e814 +875, 0x3ab96d96263d048d +876, 0x97f3c0bbc6755c3c +877, 0x31fc72daedaef3dc +878, 0x71f8d7855d10789b +879, 0xce6dc97b4662333b +880, 0xfddc2aabd342bc61 +881, 0xefbd4007ff8c7d2e +882, 0xf72cd6c689ef8758 +883, 0x932c8b0c0e755137 +884, 0x94cc4dedd58ff69 +885, 0xde4dfd6890535979 +886, 0xdb00dcd2dcb4a50a +887, 0xb0466240b4548107 +888, 0x9cb9264c7b90d1a3 +889, 0x357e378e9be5766b +890, 0x6e0316ef03367bbf +891, 0x201ea18839544ca +892, 0x803ff3406be5f338 +893, 0xf9d5e82fd4144bb2 +894, 0x1b6b88ca701e9f47 +895, 0xd1fe5ab8e1f89cc0 +896, 0x14171fe176c4bece +897, 0x887948bdef78beaa +898, 0x80449ddc3eb9b977 +899, 0x5f4e1f900fb4bcf3 +900, 0xbe30f8701909f8e2 +901, 0xd1f2a2fb5503306d +902, 0x6b1c77238dc23803 +903, 0x102156a6c9860f66 +904, 0x4cd446e099edf4c1 +905, 0xc79ac6cbc911f33b +906, 0x3ee096ffe3384f1c +907, 0xb58f83b18a306dc7 +908, 0x9f76582141de56b2 +909, 0x9ddfa85e02c13866 +910, 0x4d9a19d4ce90a543 +911, 0xbf81ab39fd17d376 +912, 0x5327e5054c6a74f1 +913, 0xd5062dd31db1a9b7 +914, 0x645853735527edc +915, 0x485393967f91af08 +916, 0xeff9667dcf77ca68 +917, 0xd012313f5fbec464 +918, 0xbeae35bdfae55144 +919, 0x302c41ebac8444a0 +920, 0x9ccdb6c2fe58fba8 +921, 0x567753af68ed23f8 +922, 0xff90f790e43efec3 +923, 0x970cc756fb799696 +924, 0xe59239d1c44915 +925, 0x4d2d189fb3941f05 +926, 0x96f23085db165a9c +927, 0xa1202dec7a37b1a5 +928, 0xc0c1ee74bcd7dc1a +929, 0x9edcf2048b30333a +930, 0xd848588ba7e865fb +931, 0x8d9f0897317cab40 +932, 0x67b96f15e25924fb +933, 0xefc8d8536619ee42 +934, 0xf3f621d22bdde0c2 +935, 0x68610a0de862ae32 +936, 0xa22ca5142de24cbd +937, 0x8815452f4e6b4801 +938, 0x4e9c1b607b2750e5 +939, 0x19b3c09ba6fc9b25 +940, 0x9b2543c8836780ac +941, 0xe702b8f950e56431 +942, 0xb357cc329cac3917 +943, 0x387bf86a17a31e08 +944, 0x9940b983d331b163 +945, 0xf5d89d7fe9095e18 +946, 0x4362682329e5c4d1 +947, 0xd2132573f6ae7b42 +948, 0xc0a5849e23a61606 +949, 0xdadbddf47265bc02 +950, 0x1b96f00339a705f7 +951, 0x94e6642329288913 +952, 0x825ab3f10e6d330b +953, 0x1a1c31ac9d883ea0 +954, 0xb49076b7155c6f47 +955, 0x920cf3085dfe3ccb +956, 0x9743407c9f28e825 +957, 0x6ce8a28622402719 +958, 0xce2fe67e06baf8a6 +959, 0x3a16b34784ecf5e6 +960, 0x140467cc1d162a0c +961, 0x32d4772692ab625 +962, 0xa4f4b28562f43336 +963, 0x885b4335457bd84a +964, 0x499d3ed26c87ad8a +965, 0xc7328bcedb9a545e +966, 0xc6dd76a6cbf5d2b2 +967, 0xba9c22be404ee1aa +968, 0x70e6aee45f23521d +969, 0x61e03a798593c177 +970, 0x171671f809c68213 +971, 0x28d54872fc1d914c +972, 0x43c2fcd9bd098b53 +973, 0x172ad4c4a98b9d37 +974, 0x330860c9460f2516 +975, 0x49547f472df984f4 +976, 0x873b2436d3f0e114 +977, 0x6f99accf4ea050b6 +978, 0x5968ac874ed51613 +979, 0x4939d70d29a3c611 +980, 0x11f381ed28738d3d +981, 0xa97430d36ab3a869 +982, 0xe6fa880801129e22 +983, 0xf84decbd8f48c913 +984, 0x4425c0ed1e9a82a5 +985, 0x7a1f9485e9929d5a +986, 0xc7c51f155dfce1c6 +987, 0x9619a39501d74f2b +988, 0x7c7035955dbf4c1b +989, 0xc61ee569cf57c2c9 +990, 0x3eaf7c5b0df734e1 +991, 0xe71cb4064d1ede05 +992, 0x356e3cec80e418b2 +993, 0xca04306243a15be6 +994, 0x941cf3881fa18896 +995, 0x30dbb0e819d644e0 +996, 0xaae22c0bef02859a +997, 0x7bd30917bbaa8a94 +998, 0x2672547bc8d7d329 +999, 0x4955c92aaa231578 diff --git a/EXE version/main/numpy/random/tests/data/pcg64dxsm-testset-2.csv b/EXE version/main/numpy/random/tests/data/pcg64dxsm-testset-2.csv new file mode 100644 index 00000000..878c5ea7 --- /dev/null +++ b/EXE version/main/numpy/random/tests/data/pcg64dxsm-testset-2.csv @@ -0,0 +1,1001 @@ +seed, 0x0 +0, 0xd97e4a147f788a70 +1, 0x8dfa7bce56e3a253 +2, 0x13556ed9f53d3c10 +3, 0x55dbf1c241341e98 +4, 0xa2cd98f722eb0e0a +5, 0x83dfc407203ade8 +6, 0xeaa083df518f030d +7, 0x44968c87e432852b +8, 0x573107b9cb8d9ecc +9, 0x9eedd1da50b9daca +10, 0xb33a6735ca451e3c +11, 0x72830d2b39677262 +12, 0x9da8c512fd0207e8 +13, 0x1fc5c91954a2672b +14, 0xd33479437116e08 +15, 0x9ccdd9390cee46f3 +16, 0x1fd39bb01acd9e76 +17, 0xedc1869a42ff7fe5 +18, 0xbd68ca0b42a6e7e9 +19, 0x620b67df09621b1f +20, 0xfa11d51bd6950221 +21, 0xc8c45b36e7d28d08 +22, 0xe9c91272fbaad777 +23, 0x2dc87a143f220e90 +24, 0x6376a7c82361f49d +25, 0x552c5e434232fe75 +26, 0x468f7f872ac195bc +27, 0x32bed6858125cf89 +28, 0xe4f06111494d09d3 +29, 0xa5c166ffea248b80 +30, 0x4e26605b97064a3f +31, 0xceafd9f6fc5569d +32, 0xb772f2f9eed9e106 +33, 0x672c65e6a93534e2 +34, 0xcdc5e1a28d1bd6a0 +35, 0x1ed9c96daeebd3e3 +36, 0x4d189dcfc0c93c3f +37, 0x50df5a95c62f4b43 +38, 0xcccf4949fa65bbb8 +39, 0x19b8073d53cdc984 +40, 0x6fb40bba35483703 +41, 0xb02de4aef86b515a +42, 0x4d90c63655350310 +43, 0xea44e4089825b16c +44, 0x8d676958b1f9da2b +45, 0x6d313940917ae195 +46, 0x1b1d35a4c1dd19f4 +47, 0x117720f8397337ef +48, 0xcc073cf3ac11eeaa +49, 0x8331ec58a9ff8acb +50, 0xf3dc2a308b6b866f +51, 0x7eba1202663382b6 +52, 0x8269839debeb4e5a +53, 0x87fd3dc0f9181a8e +54, 0xabe62ddd3c925f03 +55, 0x7f56f146944fe8d4 +56, 0xc535972150852068 +57, 0x60b252d453bd3a68 +58, 0x4251f0134634490a +59, 0x338950da210dfeb2 +60, 0xcadfe932971c9471 +61, 0xfb7049457fab470e +62, 0x9bfb8145a4459dff +63, 0x4a89dda3898f9d8a +64, 0x88cc560151483929 +65, 0x277dc820f4b6796e +66, 0x3524bd07ea0afb88 +67, 0x92eb6ffb2bf14311 +68, 0xf6559be0783f3fe9 +69, 0xf0844f9af54af00d +70, 0xdd5e0b59adcef8a +71, 0x4ff7e4f2ab18554c +72, 0x3fa22c8a02634587 +73, 0x1db8e1a9442fe300 +74, 0x40cf15953ad3d3e7 +75, 0x92af15fe1a9f6f0a +76, 0xab4a0e466fb0cfd +77, 0x944f1555a06cca82 +78, 0x10cf48412f1f6066 +79, 0x7f51f9a455f9e8e1 +80, 0x47ee93530f024c7e +81, 0x36cf2f0413e0f6f2 +82, 0xa315e23731969407 +83, 0xd8e2796327cf5f87 +84, 0xa86072696a555c34 +85, 0xee3f0b8804feaab7 +86, 0x41e80dc858f8360b +87, 0x31ec2e9b78f5b29 +88, 0xd397fb9b8561344c +89, 0x28081e724e649b74 +90, 0x5c135fc3fc672348 +91, 0x9a276ca70ce9caa0 +92, 0x9216da059229050a +93, 0xcf7d375ed68007b0 +94, 0xa68ad1963724a770 +95, 0xd4350de8d3b6787c +96, 0xee7d2c2cc275b6d2 +97, 0x71645ec738749735 +98, 0x45abdf8c68d33dbb +99, 0xe71cadb692c705ea +100, 0x60af6f061fd90622 +101, 0x1eabe2072632c99d +102, 0x947dda995a402cb6 +103, 0xbb19f49a3454f3b +104, 0xe6e43e907407758c +105, 0xfe2b67016bd6873a +106, 0x7fdb4dd8ab30a722 +107, 0x39d3265b0ff1a45b +108, 0xed24c0e4fce8d0c2 +109, 0xf6e074f86faf669d +110, 0x9142040df8dc2a79 +111, 0x9682ab16bc939a9c +112, 0x6a4e80c378d971c8 +113, 0x31309c2c7fc2d3d6 +114, 0xb7237ec682993339 +115, 0x6a30c06bb83dccd9 +116, 0x21c8e9b6d8e7c382 +117, 0x258a24ae6f086a19 +118, 0xb76edb5be7df5c35 +119, 0x3c11d7d5c16e7175 +120, 0xbdfc34c31eff66e1 +121, 0x8af66e44be8bf3a2 +122, 0x3053292e193dec28 +123, 0xd0cc44545b454995 +124, 0x408ac01a9289d56 +125, 0x4e02d34318ec2e85 +126, 0x9413ff3777c6eb6b +127, 0xa3a301f8e37eb3df +128, 0x14e6306bd8d8f9f9 +129, 0xd3ea06ce16c4a653 +130, 0x170abe5429122982 +131, 0x7f9e6fddc6cacb85 +132, 0xa41b93e10a10a4c8 +133, 0x239216f9d5b6d0b5 +134, 0x985fcb6cb4190d98 +135, 0xb45e3e7c68f480c6 +136, 0xc1b2fc2e0446211c +137, 0x4596adb28858c498 +138, 0x2dd706f3458ddc75 +139, 0x29c988c86f75464 +140, 0xac33a65aa679a60 +141, 0xa28fef762d39d938 +142, 0x541e6fa48647f53 +143, 0x27838d56b2649735 +144, 0x8e143d318a796212 +145, 0xaea6097745f586b8 +146, 0x636143330f8ee2e6 +147, 0xc2d05fd8b945b172 +148, 0x6e355f9eb4353055 +149, 0xeb64ca42e8bf282e +150, 0xe8202dfd9da0fe5 +151, 0x7305689c9d790cba +152, 0xf122f8b1bef32970 +153, 0x9562887e38c32ba5 +154, 0xf9cd9be121b738d +155, 0x6238e0c398307913 +156, 0x5f2e79bb07c30f47 +157, 0x8ce8e45c465006e +158, 0x39281fe1e99e2441 +159, 0xafb10c2ca2874fea +160, 0x6e52f91633f83cf +161, 0x8ff12c1ac73c4494 +162, 0xe48608a09365af59 +163, 0xefd9bbc7e76e6a33 +164, 0xbe16a39d5c38ec92 +165, 0x6a6ffbcaf5a2330f +166, 0xdd5d6ac7d998d43d +167, 0x207bf978226d4f11 +168, 0xf8eec56bd2a0f62e +169, 0xa5bccf05dce0d975 +170, 0x93cf3ec1afe457a6 +171, 0x38651466d201f736 +172, 0x3ad21473985c9184 +173, 0xc6407a3bd38c92a6 +174, 0xb1ec42c7afa90a25 +175, 0xbdeca984df8b7dd3 +176, 0xb6926b1d00aa6c55 +177, 0x86141d0022352d49 +178, 0x169316256135ee09 +179, 0xffb1c7767af02a5c +180, 0x502af38ad19f5c91 +181, 0xfbf6cbc080086658 +182, 0x33cf9b219edae501 +183, 0x46e69bebd77b8862 +184, 0xf11e0cc91125d041 +185, 0xb4cd1649f85e078f +186, 0xb49be408db4e952 +187, 0xb0b8db46140cce3c +188, 0xba647f2174012be7 +189, 0x4f0a09e406970ac9 +190, 0xf868c7aec9890a5c +191, 0xde4c8fa7498ea090 +192, 0x872ceb197978c1d4 +193, 0x1eb5cd9c3269b258 +194, 0x3ea189f91724f014 +195, 0x41379656f7746f2c +196, 0x7bd18493aca60e51 +197, 0x5380c23b0cbbf15e +198, 0x920b72835f88246b +199, 0x24d7f734a4548b8e +200, 0x9944edb57e5aa145 +201, 0x4628e136ebb8afe1 +202, 0xb4ee6a776356e2a7 +203, 0x481cbe9744ccf7d7 +204, 0x7e8d67e8b0b995d9 +205, 0xeeacde100af7b47e +206, 0x103da08f2487dab7 +207, 0x6b9890a91d831459 +208, 0xd0c5beae37b572c7 +209, 0xfdccc371ee73fcc +210, 0x65438f0a367a2003 +211, 0x5d23b2c818a7e943 +212, 0x9a8ed45ac04b58b3 +213, 0xdaf3c3f1695dce10 +214, 0x5960eec706fa2bc0 +215, 0x98ca652facb80d40 +216, 0x72970ae5e2194143 +217, 0x18c6374d878c5c94 +218, 0x20fa51f997381900 +219, 0x3af253dba26d6e1d +220, 0x1b23d65db15c7f78 +221, 0x9f53ae976259b0e3 +222, 0x9a6addb28dc92d49 +223, 0x1e085c4accd0a7d7 +224, 0xe9d3f4cc9bad6ce5 +225, 0xe018fad78b5b1059 +226, 0x5ef7682232b4b95 +227, 0xb2242aa649f5de80 +228, 0x8f3e6d8dd99b9e4e +229, 0xb9be6cc22949d62a +230, 0xecbdc7beaa5ff1fe +231, 0xd388db43a855bdf0 +232, 0xd71ee3238852568d +233, 0x85ab3056304c04b5 +234, 0x2ed7ae7ad3cfc3cb +235, 0x781d1b03d40b6c48 +236, 0x7d3c740886657e6d +237, 0x982cfa6828daa6b0 +238, 0x278579599c529464 +239, 0x773adecfae9f0e08 +240, 0x63a243ea4b85c5d7 +241, 0x59940074fc3709e1 +242, 0xc914a2eed58a6363 +243, 0x2602b04274dd724c +244, 0xdf636eb7636c2c42 +245, 0x891a334d0d26c547 +246, 0xde8cd586d499e22d +247, 0x3ea1aa4d9b7035b6 +248, 0xd085cff6f9501523 +249, 0xe82a872f374959e +250, 0x55cb495bbd42cc53 +251, 0x5f42b3226e56ca97 +252, 0xea463f6f203493a3 +253, 0xeef3718e57731737 +254, 0x1bd4f9d62b7f9f3c +255, 0x19284f5e74817511 +256, 0xaf6e842c7450ca87 +257, 0x1d27d2b08a6b3600 +258, 0xfb4b912b396a52e3 +259, 0x30804d4c5c710121 +260, 0x4907e82564e36338 +261, 0x6441cf3b2900ddb7 +262, 0xd76de6f51988dc66 +263, 0x4f298ef96fd5e6d2 +264, 0x65432960c009f83d +265, 0x65ebed07e1d2e3df +266, 0xf83ee8078febca20 +267, 0x7bb18e9d74fc5b29 +268, 0x597b5fbc2261d91 +269, 0xea4f8ed0732b15b2 +270, 0xba2267f74f458268 +271, 0x3f304acabd746bbb +272, 0x7bd187af85659a82 +273, 0x88e20dbdb7a08ea3 +274, 0x2a2dc948c772fcb4 +275, 0x87784fec2993c867 +276, 0x89163933cd362d4e +277, 0xfd7b24f04302f957 +278, 0x9bdd544405dfb153 +279, 0xddee0fac58ffc611 +280, 0xa8e8993417e71ec1 +281, 0x55e0ab46ff7757af +282, 0x53e7645f08d3d7df +283, 0xbf78e563bc656ba2 +284, 0x1d162253b45ee2de +285, 0x15e2bfefedf29eb4 +286, 0x4e2a4584aa394702 +287, 0xa89fb12b01525897 +288, 0x825bd98f0544e4df +289, 0xfc6c50da6750700 +290, 0xc24aaabde7d28423 +291, 0x79d6f4660fcb19e5 +292, 0xee7d4fb40c8d659f +293, 0x70bc281b462e811d +294, 0x23ed4dc9636519a7 +295, 0xcb7c3f5a5711b935 +296, 0xe73090e0508c5d9d +297, 0xb25a331f375952a6 +298, 0xa64c86e0c04740f6 +299, 0xb8f3ffc8d56ac124 +300, 0x2479266fc5ee6b15 +301, 0x8d5792d27f5ffbcb +302, 0xb064298be946cd52 +303, 0xf0934a98912ffe26 +304, 0xbe805682c6634d98 +305, 0xe0e6e2c010012b4f +306, 0x58c47d475f75976 +307, 0x358c9a6e646b2b4a +308, 0x7e7c4ffca5b17ba7 +309, 0x43585c8c9a24a04c +310, 0x5154ddbcd68d5c2c +311, 0x4a2b062d3742a5e +312, 0xca5691191da2b946 +313, 0x696a542109457466 +314, 0x9eb5d658a5022ba5 +315, 0x8158cf6b599ab8dc +316, 0x1b95391eaa4af4a6 +317, 0x9953e79bd0fc3107 +318, 0x8639690086748123 +319, 0x2d35781c287c6842 +320, 0x393ef0001cd7bc8f +321, 0xe3a61be8c5f2c22a +322, 0x5e4ff21b847cc29b +323, 0x4c9c9389a370eb84 +324, 0xd43a25a8fc3635fa +325, 0xf6790e4a85385508 +326, 0x37edf0c81cb95e1d +327, 0x52db00d6e6e79af8 +328, 0x3b202bceeb7f096 +329, 0x2a164a1c776136bb +330, 0x73e03ee3fd80fd1b +331, 0xd2c58c0746b8d858 +332, 0x2ed2cb0038153d22 +333, 0x98996d0fc8ceeacc +334, 0xa4ed0589936b37f +335, 0x5f61cf41a6d2c172 +336, 0xa6d4afb538c110d7 +337, 0xe85834541baadf1a +338, 0x4c8967107fd49212 +339, 0x49bafb762ab1a8c1 +340, 0x45d540e2a834bf17 +341, 0x1c0ec8b4ed671dac +342, 0x3d503ce2c83fe883 +343, 0x437bfffd95f42022 +344, 0xc82d1e3d5c2bc8d2 +345, 0x7a0a9cbfcb0d3f24 +346, 0xc0a4f00251b7a3be +347, 0xb5be24e74bb6a1c6 +348, 0xa3104b94b57545b1 +349, 0x86de7d0c4b97b361 +350, 0x879c1483f26538a6 +351, 0xd74c87557f6accfb +352, 0x2f9be40dbf0fe8a1 +353, 0x445a93398f608d89 +354, 0x7b3cb8a7211d7fdc +355, 0xe86cc51290d031e7 +356, 0x33ef3594052ad79f +357, 0xc61911d241dbb590 +358, 0x37cccb0c0e3de461 +359, 0xb75259124080b48b +360, 0xd81e8961beb4abe5 +361, 0xf4542deb84a754e +362, 0x6ea036d00385f02e +363, 0xa7b60b0ac3b88681 +364, 0x108a6c36ca30baf5 +365, 0x4a2adc5bbfe2bf07 +366, 0x4079501f892a5342 +367, 0x55e113963c5448f0 +368, 0x8019ff4903b37242 +369, 0x109c6dcdb7ec6618 +370, 0x1239ac50944da450 +371, 0xe1399c7f94c651c1 +372, 0x5a6bbbae388d365a +373, 0x4d72be57b8810929 +374, 0x3f067df24384e1fb +375, 0x4f8b9e0f7f6c7be +376, 0x202492c342a3b08 +377, 0x250753192af93a3 +378, 0xfba1159d9de2cb8e +379, 0xba964497ab05505c +380, 0x1329ec5d8a709dca +381, 0x32927cacb6cd22bb +382, 0x6b4d7db904187d56 +383, 0xe76adccf8e841e02 +384, 0x8c4bf4b6a788202 +385, 0x3013a3b409831651 +386, 0x7427d125c475412f +387, 0x84dcc4bb2bf43202 +388, 0x117526f1101372a5 +389, 0xfe95d64b8984bd72 +390, 0x524e129934cc55c1 +391, 0xc3db4b0418c36d30 +392, 0xe1cb2047e9c19f7a +393, 0xea43d6c8d8982795 +394, 0xe80ac8a37df89ed +395, 0xfecc2104329ed306 +396, 0xa5c38aac9c1d51ea +397, 0x3abe5d1c01e4fe17 +398, 0x717a805d97fcc7ac +399, 0x94441f8207a1fb78 +400, 0x22d7869c5f002607 +401, 0x349e899f28c3a1b9 +402, 0x5639950cdea92b75 +403, 0x7e08450497c375b +404, 0x94bf898b475d211d +405, 0x75c761a402375104 +406, 0x1930920ec9d2a1e7 +407, 0xb774ba1bc6f6e4e2 +408, 0xf715602412e5d900 +409, 0x87bb995f4a13f0ba +410, 0xa3c787868dfa9c8d +411, 0xa17fd42a5a4f0987 +412, 0x4a9f7d435242b86 +413, 0x240364aff88f8aef +414, 0xe7cd4cf4bf39f144 +415, 0xd030f313ca4c2692 +416, 0xc46696f4e03ec1e9 +417, 0x22c60f1ec21060b3 +418, 0x16c88058fd68986f +419, 0x69ca448e8e6bde3f +420, 0x3466c2cdec218abd +421, 0x837ac4d05e6b117d +422, 0x911210e154690191 +423, 0x9ece851d6fa358b7 +424, 0x42f79cb0c45e7897 +425, 0xbf7583babd7c499b +426, 0x2059fe8031c6e0b9 +427, 0xabbec8fc00f7e51d +428, 0x88809d86a3a256e1 +429, 0xd36056df829fdcb5 +430, 0x515632b6cb914c64 +431, 0xba76d06c2558874 +432, 0x632c54ca4214d253 +433, 0xadec487adf2cb215 +434, 0x521e663e1940513d +435, 0xb1b638b548806694 +436, 0xbe2d5bfbe57d2c72 +437, 0x8b89e7719db02f7 +438, 0x90ba5281c1d56e63 +439, 0x899e1b92fceea102 +440, 0xf90d918e15182fa6 +441, 0x94a489ce96c948c4 +442, 0xad34db453517fcd4 +443, 0xc5264eb2de15930f +444, 0x101b4e6603a21cee +445, 0xef9b6258d6e85fff +446, 0x6075c7d6c048bd7a +447, 0x6f03232c64e438aa +448, 0x18c983d7105ee469 +449, 0x3ffc23f5c1375879 +450, 0xbc1b4a00afb1f9f +451, 0x5afa6b2bb8c6b46e +452, 0xe7fce4af2f2c152a +453, 0x5b00ab5c4b3982c7 +454, 0x2d4b0c9c0eb4bd0c +455, 0x61d926270642f1f2 +456, 0x7219c485c23a2377 +457, 0x7e471c752fecd895 +458, 0x23c4d30a4d17ba1f +459, 0x65cb277fe565ca22 +460, 0xcbb56ed9c701363b +461, 0xfd04ab3a6eba8282 +462, 0x19c9e5c8bab38500 +463, 0xea4c15227676b65b +464, 0x20f3412606c8da6f +465, 0xb06782d3bf61a239 +466, 0xf96e02d5276a9a31 +467, 0x835d256b42aa52a6 +468, 0x25b09151747f39c1 +469, 0x64507386e1103eda +470, 0x51cbc05716ef88e4 +471, 0x998cd9b7989e81cc +472, 0x9d7115416bec28d1 +473, 0xc992ca39de97906b +474, 0xd571e6f7ca598214 +475, 0xafc7fb6ccd9abbf8 +476, 0x88ef456febff7bf4 +477, 0xdbe87ccc55b157d2 +478, 0xaab95e405f8a4f6d +479, 0xad586a385e74af4f +480, 0x23cd15225c8485aa +481, 0x370940bf47900ac7 +482, 0xefd6afda1a4b0ead +483, 0x9cb1a4c90993dd7a +484, 0xff7893e8b2f70b11 +485, 0xb09e1807c0638e8e +486, 0xb10915dcb4978f74 +487, 0x88212ab0051a85eb +488, 0x7af41b76e1ec793f +489, 0x2e5c486406d3fefd +490, 0xebe54eff67f513cc +491, 0xab6c90d0876a79b8 +492, 0x224df82f93fe9089 +493, 0xc51c1ce053dc9cd2 +494, 0x5ef35a4d8a633ee7 +495, 0x4aca033459c2585f +496, 0xd066932c6eefb23d +497, 0x5309768aab9a7591 +498, 0xa2a3e33823df37f9 +499, 0xcec77ff6a359ee9 +500, 0x784dc62d999d3483 +501, 0x84e789fb8acc985d +502, 0xd590237e86aa60f +503, 0x737e2ffe1c8ad600 +504, 0xc019c3a39a99eab8 +505, 0x6a39e9836964c516 +506, 0xe0fe43129535d9da +507, 0xdfc5f603d639d4de +508, 0x7b9a7d048a9c03b6 +509, 0xbb5aa520faa27fdd +510, 0x2a09b4200f398fa2 +511, 0x38cc88107904064e +512, 0xa9a90d0b2d92bb25 +513, 0x9419762f87e987e3 +514, 0x1a52c525153dedcd +515, 0xc26d9973dd65ae99 +516, 0x8e89bd9d0dc6e6a1 +517, 0x2f30868dc01bfb53 +518, 0x20f09d99b46501c4 +519, 0x78b468a563b8f1e9 +520, 0xcccf34b0b6c380c7 +521, 0xf554e7dc815297e6 +522, 0x332a585cfb4a50ef +523, 0xa9fb64a2b6da41d7 +524, 0xdcd2a5a337391ce0 +525, 0x8a9bd3e324c6463d +526, 0x9f4487d725503bdd +527, 0xf72282d82f1d0ff +528, 0x308f4160abb72d42 +529, 0x648de1db3a601b08 +530, 0x36cab5192e7ebd39 +531, 0x7975fbe4ab6a1c66 +532, 0xd515b4d72243864e +533, 0x43a568f8b915e895 +534, 0x15fa9f2057bdb91d +535, 0x7a43858ef7a222dc +536, 0x17b4a9175ac074fe +537, 0xa932c833b8d0f8f8 +538, 0x1d2db93a9a587678 +539, 0x98abd1d146124d27 +540, 0xf0ab0431671740aa +541, 0xa9d182467540ad33 +542, 0x41c8a6cfc331b7fc +543, 0xa52c6bd0fcd1d228 +544, 0x2773c29a34dc6fa3 +545, 0x3098230746fc1f37 +546, 0xd63311bb4f23fabe +547, 0x6712bf530cd2faec +548, 0x342e8f342e42c4dd +549, 0xfbd83331851cdcad +550, 0xe903be1361bbc34d +551, 0xd94372e5077e3ef9 +552, 0x95aaa234f194bd8 +553, 0x20c0c8fb11e27538 +554, 0xfaf47dc90462b30b +555, 0x8ddc6d144147682a +556, 0xf626833fd926af55 +557, 0x5df93c34290d1793 +558, 0xb06a903e6e9fca5e +559, 0x10c792dc851d77ca +560, 0xd9b1b817b18e56cb +561, 0x3a81730c408eb408 +562, 0x65052c04a8d4b63c +563, 0x3328546598e33742 +564, 0xeca44a13f62d156d +565, 0x69f83d1d86b20170 +566, 0x937764200412027d +567, 0xc57eb1b58df0f191 +568, 0xa1c7d67dce81bc41 +569, 0x8e709c59a6a579ce +570, 0x776a2f5155d46c70 +571, 0xd92906fbbc373aa5 +572, 0xe97ad478a2a98bf6 +573, 0xc296c8819ac815f +574, 0x613ede67ba70e93e +575, 0xe145222498f99cde +576, 0xafcdfa7a3c1cf9bf +577, 0x1c89252176db670d +578, 0xad245eda5c0865ff +579, 0x249463d3053eb917 +580, 0xc9be16d337517c0b +581, 0xefcc82bf67b8f731 +582, 0x1e01577d029e0d00 +583, 0xad9c24b2a4f3d418 +584, 0xed2cceb510db4d0f +585, 0xbddadcdb92400c70 +586, 0x67d6b0476ef82186 +587, 0xbc7662ff7bf19f73 +588, 0x9d94452a729e6e92 +589, 0x6b278d8594f55428 +590, 0x6c4b31cceb1b2109 +591, 0xccc6c3a726701e9 +592, 0x6bc28ece07df8925 +593, 0xc0422b7bf150ccc4 +594, 0xab7158f044e73479 +595, 0xdf3347546d9ed83f +596, 0x3b3235a02c70dff4 +597, 0x2551c49c14ea8d77 +598, 0xee2f7f5bb3cc228e +599, 0x39b87bfe8c882d39 +600, 0x7dd420fad380b51c +601, 0xffe64976af093f96 +602, 0x4a4f48dc6e7eaa5f +603, 0x85f2514d32fdc8cc +604, 0x1ab1215fd7f94801 +605, 0x4cd1200fc795b774 +606, 0xcf8af463a38942ee +607, 0x319caa7ce3022721 +608, 0x8cd9798a76d1aea4 +609, 0x2bd3933ac7afd34e +610, 0x85d4c323403cf811 +611, 0xd7b956d3064efa30 +612, 0x67a078dbf1f13068 +613, 0x665fa6c83e87c290 +614, 0x9333ac2416d2469b +615, 0xdfb1fd21a0094977 +616, 0xa1962a6e2c25f8ff +617, 0x1f3b10a7ed5287cf +618, 0x70641efb3d362713 +619, 0xe527a2cf85d00918 +620, 0x9741e45d3f9890a3 +621, 0x6cb74b5d4d36db4b +622, 0xf24734d622bd2209 +623, 0xadd6d94f78e9d378 +624, 0xc3bbdb59225cca7f +625, 0x5ad36614275b30cd +626, 0x495568dd74eea434 +627, 0xf35de47e0ffe1f2d +628, 0xefa209dca719ab18 +629, 0x844ddcaeb5b99ae8 +630, 0x37449670a1dc7b19 +631, 0x5a4612c166f845c1 +632, 0xe70f7782f2087947 +633, 0x98d484deac365721 +634, 0x705302198cf52457 +635, 0x7135ae0f5b77df41 +636, 0x342ac6e44a9b6fc3 +637, 0x2713fd2a59af5826 +638, 0x6e1a3f90f84efa75 +639, 0x9fb3b4dd446ca040 +640, 0x530044ae91e6bd49 +641, 0xe984c4183974dc3e +642, 0x40c1fa961997d066 +643, 0xb7868250d8c21559 +644, 0x8bc929fa085fd1de +645, 0x7bdb63288dc8733e +646, 0xac4faad24326a468 +647, 0x1c6e799833aea0b1 +648, 0xcc8a749e94f20f36 +649, 0x4e7abfd0443547c5 +650, 0xb661c73bb8caa358 +651, 0x4a800f5728ff2351 +652, 0x8c15e15189b9f7ed +653, 0xab367846b811362c +654, 0x4ba7508f0851ca2a +655, 0xe9af891acbafc356 +656, 0xbdebe183989601f8 +657, 0x4c665ea496afc061 +658, 0x3ca1d14a5f2ed7c +659, 0xfbdff10a1027dd21 +660, 0xdfd28f77c8cff968 +661, 0xc4fbaadf8a3e9c77 +662, 0xdac7e448b218c589 +663, 0xb26390b5befd19e2 +664, 0xd2ef14916c66dba9 +665, 0xfab600284b0ff86b +666, 0xf04a1c229b58dabb +667, 0xc21c45637e452476 +668, 0xd1435966f75e0791 +669, 0xc1f28522eda4a2d0 +670, 0x52332ae8f1222185 +671, 0x81c6c0790c0bf47e +672, 0xfebd215e7d8ffb86 +673, 0x68c5dce55dbe962b +674, 0x231d09cb0d2531d1 +675, 0x3218fba199dbbc6b +676, 0x8f23c535f8ea0bf6 +677, 0x6c228963e1df8bd9 +678, 0x9843c7722ed153e3 +679, 0xd032d99e419bddec +680, 0xe2dca88aa7814cab +681, 0x4d53fb8c6a59cdc2 +682, 0x8fb3abc46157b68b +683, 0xa3e733087e09b8e +684, 0x6bdc1aee029d6b96 +685, 0x4089667a8906d65b +686, 0x8f3026a52d39dd03 +687, 0x6d2e0ccb567bae84 +688, 0x74bad450199e464 +689, 0xf114fb68a8f300d5 +690, 0xc7a5cc7b374c7d10 +691, 0xf0e93da639b279d1 +692, 0xb9943841ad493166 +693, 0x77a69290455a3664 +694, 0x41530da2ebea054b +695, 0xe8f9fab03ea24abf +696, 0xaa931f0c9f55a57a +697, 0xb4d68a75d56f97ae +698, 0x3d58ff898b6ba297 +699, 0x49d81e08faf5a3f5 +700, 0xfc5207b9f3697f3b +701, 0xa25911abb3cf19b7 +702, 0x6b8908eb67c3a41 +703, 0xd63ef402e2e3fa33 +704, 0x728e75d3f33b14c5 +705, 0x248cb1b8bc6f379a +706, 0x3aa3d6d2b8c72996 +707, 0x49cc50bd2d3d2860 +708, 0xb4e1387647c72075 +709, 0x435a1630a4a81ed3 +710, 0xa5ea13005d2460cf +711, 0xc7a613df37d159ec +712, 0x95721ccc218b857e +713, 0xd4b70d8c86b124d3 +714, 0x2b82bcc4b612d494 +715, 0xaf13062885276050 +716, 0xcbd8fcf571a33d9c +717, 0x3f7f67ca1125fc15 +718, 0xddf4bb45aac81b4c +719, 0x23606da62de9c040 +720, 0xa3a172375666b636 +721, 0x292f87387a6c6c3c +722, 0xd1d10d00c5496fe1 +723, 0x86b0411ce8a25550 +724, 0x38e0487872e33976 +725, 0x363e49f88ddfd42c +726, 0x45bdf1e9f6b66b0a +727, 0x8a6fff3de394f9b5 +728, 0x8502158bb03f6209 +729, 0x22e24d16dba42907 +730, 0x3fe3ba427cc2b779 +731, 0x77144793f66b3d7e +732, 0xcf8912ccb29b8af9 +733, 0xdc856caff2abd670 +734, 0xe6d3ae0b0d9d4c8b +735, 0xb8f5d40e454c539f +736, 0x79ca953114fbc6b7 +737, 0x478d6f4bbfa38837 +738, 0x9babae1a3ffdc340 +739, 0x40edd56802bae613 +740, 0x97a56c2dcccf0641 +741, 0xafc250257f027f8e +742, 0x8da41ef1edf69125 +743, 0x6574b0280ff9d309 +744, 0x197c776151b8f820 +745, 0x6b03e077c9dac3b6 +746, 0x24a40ebbc5c341c5 +747, 0x50e585169a6a1c4b +748, 0x37783a5a6a3e4e02 +749, 0xb3de81ee6fbad647 +750, 0xf4f292f57ca4591e +751, 0x6214e9e7d44d30a +752, 0x5920190c56d21c12 +753, 0x9ac163419b5e0c9b +754, 0xfc2328761ae8ed93 +755, 0xc68f945b545508c6 +756, 0x687c49a17ce0a5e2 +757, 0x276d8f53d30d4ab4 +758, 0x8201804970343ce1 +759, 0x1b5d323cc2e7fb7e +760, 0x6f351ef04fd904b +761, 0x6c793a7d455d5198 +762, 0x46f5d108430ae91f +763, 0xac16a15b2a0cf77f +764, 0xa0d479d9e4122b9d +765, 0x3afd94604307f19 +766, 0x2573ed6d39d38dbf +767, 0xa58e14ba60b4294b +768, 0xe69c1aed5840d156 +769, 0x4cf6fda7f04855c2 +770, 0x2fb65a56ef5f22da +771, 0xf95819434d5dc220 +772, 0x29c65133623dafba +773, 0x8e997bd018467523 +774, 0xfd08ba9d498461a7 +775, 0xdd52243bc78a5592 +776, 0x39c30108f6db88b3 +777, 0x38af8e1894f259b9 +778, 0x97eedf3b4ae5f6de +779, 0x757825add80c5ece +780, 0xf0fdd90ac14edb14 +781, 0xbbb19d4cc8cac6d4 +782, 0x9a82234edfae05e3 +783, 0x704401c61d1edf1c +784, 0x8b0eb481fb3a1fb2 +785, 0xef6f36e7cc06c002 +786, 0x7a208b17e04b8cd7 +787, 0xf20e33d498838fe9 +788, 0xc2bdb22117058326 +789, 0x6ec31939eb4ca543 +790, 0x6f1654838f507a21 +791, 0xc65ab81a955d2b93 +792, 0x40b1420fdd9531b8 +793, 0xe31f221cab9f4f40 +794, 0x798cdd414c1deb7a +795, 0x9c84e9c7d41cd983 +796, 0x63d6b1ae3b60b7fa +797, 0xb42bfdd1a2f78ffa +798, 0x37e431eaccaaa8e9 +799, 0x7508142a0f73eac9 +800, 0x91662a023df5893a +801, 0x59782070e2fe3031 +802, 0xb2acd589a8ce7961 +803, 0xa224743fa877b292 +804, 0xaa5362aa27e6ed9e +805, 0xa394a4e520c0c1c7 +806, 0xe49b16d2018ffb6f +807, 0xb8074b9f2f1e762b +808, 0xcf5f86143d5c23a7 +809, 0xfd838785db987087 +810, 0x31b1889df389aff8 +811, 0x30aaca876a4383b +812, 0x1731bb71c4c38d4f +813, 0x9a83a65395e05458 +814, 0x99cd0c8d67c8f4fc +815, 0xfbd9fdc849b761a5 +816, 0x82c04834fc466889 +817, 0xdeef9d6e715e8c97 +818, 0x549c281c16da6078 +819, 0x2d70661254ad599d +820, 0x57995793a72acac +821, 0xf1727005116183ba +822, 0xa22bb38945285de3 +823, 0x4f2d687fe45131ff +824, 0x5666c87ddbbc981f +825, 0xbcb4b2d4e7a517d0 +826, 0x5e794dd2e20b785d +827, 0x449ad020149e093c +828, 0x7704ee0412d106f5 +829, 0x83cbdf257b072ac1 +830, 0xae5c4fc9f638b0da +831, 0x7b9e5a64e372ed47 +832, 0x7eddbbb22c2cdf57 +833, 0x3f19ebfa155b08e +834, 0x91d991154dfd7177 +835, 0x611ae74b952d387f +836, 0x3fdf7a335bda36ee +837, 0xdf182433fc7a7c05 +838, 0x62c78598d1f8db0a +839, 0xc3750c69d2c5c1f0 +840, 0xf1318024709efdee +841, 0xaa3fd360d224dc29 +842, 0x62af53b2f307c19 +843, 0xdf527683c58120c2 +844, 0x3281deecc496f93d +845, 0x4f704ad31527ef08 +846, 0x127a14a5e07cfdfc +847, 0x90d0b1f549255c92 +848, 0xbc3406b212c5e1fc +849, 0x4e89f39379dba91d +850, 0x1290ef43c4998e6e +851, 0xecfeb1a1cb1c6e1b +852, 0x2067e90403003bf1 +853, 0x38ae04be30bdbeba +854, 0x8a3537f298baedda +855, 0xd07f3b825cdb2936 +856, 0xea020b5aebae8b45 +857, 0xfcd614ab031132b0 +858, 0x5fb682a4ff2268f5 +859, 0xd1c4662ce65596f4 +860, 0x7026b8270dd0b8dc +861, 0x8101ec4b4beae45a +862, 0xa0e9dc87940610a6 +863, 0x83ec33679d83165b +864, 0x981847ca82e86d41 +865, 0xda84c188a304a0b7 +866, 0x3c37529c5a5bbbb8 +867, 0x34a8491ce3e19a5a +868, 0xd36ad716a2fa6cb8 +869, 0xfd1d1d6a5189a15c +870, 0x9716eb47851e8d8d +871, 0x7dfb13ea3b15c5aa +872, 0xbdf6e707f45113a5 +873, 0xb8118261b04bd097 +874, 0x6191f9895881bec6 +875, 0x7aac257ae11acf9b +876, 0x35a491e1537ff120 +877, 0xe078943432efa71c +878, 0xb3338485dd3dc2b9 +879, 0x456060975d2bb3b5 +880, 0xaddc4c451bdfc44c +881, 0x18bfa7beacf96430 +882, 0x8802ebcaf0f67498 +883, 0xad922a5a825bd780 +884, 0x9fb4587d748f4efa +885, 0xdb2a445136cd5e7 +886, 0xb98b3676ea8e96ac +887, 0xb02d8d244d784878 +888, 0xa1a8442b18860abb +889, 0x6a3029ba1361e5d1 +890, 0xf426d5fac161eb1 +891, 0xfa5ac2b87acecb23 +892, 0xaa659896e50535df +893, 0xf40dd7a3d3c5c8ed +894, 0x3f8367abecb705bc +895, 0x2d60e7525873358f +896, 0xc4a9d3948a0c3937 +897, 0x5ecc04fef6003909 +898, 0x7a865004918cba2 +899, 0x47ae110a678ec10b +900, 0xa0f02f629d91aa67 +901, 0x4848b99e7fac9347 +902, 0xaa858346d63b80ac +903, 0xeb5bf42ee161eeef +904, 0x4d35d723d3c6ba37 +905, 0xdf22ca6ca93b64a7 +906, 0x9d198520f97b25b1 +907, 0x3068415350778efe +908, 0xf3709f2e8793c2fe +909, 0xd1517bac8dd9f16f +910, 0xfb99bccaa15861dc +911, 0xa9ad607d796a2521 +912, 0x55d3793d36bd22e4 +913, 0xf99270d891ff7401 +914, 0x401750a5c4aa8238 +915, 0xd84b3003e6f28309 +916, 0x8a23798b5fa7c98b +917, 0xadd58bbc8f43e399 +918, 0xbd8c741ada62c6a8 +919, 0xbdc6937bc55b49fa +920, 0x4aefa82201b8502 +921, 0x17adf29a717b303 +922, 0xa6ed2197be168f6c +923, 0x1ba47543f4359a95 +924, 0xe34299949ac01ae9 +925, 0x711c76cffc9b62f3 +926, 0xbac259895508a4b7 +927, 0x3c8b3b3626b0d900 +928, 0x1a8d23fbe2ae71bf +929, 0xca984fa3b5a5c3a1 +930, 0xb1986ab7521a9c93 +931, 0xd6b5b2c8d47a75b5 +932, 0xc7f1c4a88afb4957 +933, 0xdeb58033a3acd6cc +934, 0xabe49ddfe1167e67 +935, 0x8d559c10205c06e3 +936, 0xea07a1a7de67a651 +937, 0xcbef60db15b6fef8 +938, 0xbfca142cff280e7 +939, 0x362693eba0732221 +940, 0x7463237e134db103 +941, 0x45574ddb5035e17a +942, 0xfc65e0cb9b94a1aa +943, 0x3154c55f1d86b36d +944, 0x2d93a96dd6ab2d8b +945, 0xbe3bc1d1f2542a25 +946, 0xdd4b541f7385bdaa +947, 0x3b56b919d914e3f8 +948, 0x82fd51468a21895f +949, 0x8988cf120731b916 +950, 0xa06a61db5fb93e32 +951, 0x6ed66c1b36f68623 +952, 0x875ae844d2f01c59 +953, 0x17ccd7ac912e5925 +954, 0x12fe2a66b8e40cb1 +955, 0xf843e5e3923ad791 +956, 0xa17560f2fd4ef48 +957, 0x27a2968191a8ee07 +958, 0xa9aab4d22ff44a3c +959, 0x63cd0dcc3bb083ae +960, 0x7a30b48c6160bf85 +961, 0x956160fb572503b3 +962, 0xc47f6b7546640257 +963, 0xaf4b625f7f49153 +964, 0x2f5c86a790e0c7e8 +965, 0xb52e0610ae07f0b8 +966, 0x38a589292c3d849e +967, 0xc3e9ef655d30b4ef +968, 0xb5695f765cda998a +969, 0xde5d5e692a028e91 +970, 0x839476721555f72e +971, 0x48b20679b17d9ebf +972, 0xe3d4c6b2c26fb0df +973, 0xce5a9834f0b4e71f +974, 0x533abb253d5d420e +975, 0x9eac5ad9aed34627 +976, 0xc0f2a01ab3c90dbb +977, 0x6528eda93f6a066c +978, 0xc16a1b625e467ade +979, 0x1a4a320fb5e8b098 +980, 0x8819cccd8b4ab32f +981, 0x42daa88531fd0bfd +982, 0xcf732226409be17c +983, 0xfddcdb25ccbf378c +984, 0x9b15b603bf589fc1 +985, 0x2436066b95d366fe +986, 0x8d42eff2e9cbda90 +987, 0x694b2fc8a4e8303c +988, 0x8e207f98aaea3ccd +989, 0x4730d7a620f822d9 +990, 0x468dc9ca30fe2fd4 +991, 0x74b36d8a1c0f031b +992, 0x3c1aac1c488c1a94 +993, 0x19d0101042444585 +994, 0x8ec50c56d0c8adf4 +995, 0x721ec629e4d66394 +996, 0x3ca5ad93abeac4a4 +997, 0xaaebc76e71592623 +998, 0x969cc319e3ed6058 +999, 0xc0a277e3b2bfc3de diff --git a/EXE version/main/numpy/random/tests/data/philox-testset-1.csv b/EXE version/main/numpy/random/tests/data/philox-testset-1.csv new file mode 100644 index 00000000..e448cbf7 --- /dev/null +++ b/EXE version/main/numpy/random/tests/data/philox-testset-1.csv @@ -0,0 +1,1001 @@ +seed, 0xdeadbeaf +0, 0xedc95200e2bd66a5 +1, 0x581d4e43b7682352 +2, 0x4be7278f5e373eab +3, 0xee47f17991a9e7ea +4, 0x38a7d2ae422f2e2c +5, 0xe2a6730a3b4a8a15 +6, 0x1588b7a841486442 +7, 0x13ad777246700504 +8, 0x14d157e0f5e18204 +9, 0xd87c22a7ee8c13f1 +10, 0x30cc389ce3542ba1 +11, 0xb8a53348955bb2e9 +12, 0xc08802e3c454f74f +13, 0xb444f627671a5780 +14, 0x4b6dd42b29cbf567 +15, 0x6109c7dc0bc5f7d5 +16, 0x85c954715d6b5b1e +17, 0x646178d3d9a3a5d5 +18, 0xebbde42b1cd83465 +19, 0x3d015102f6bc9c1a +20, 0x720fe2ec3798d5fd +21, 0x93120961289ceb2e +22, 0xc9207e960a56fae2 +23, 0xa7f042f31d991b98 +24, 0x5fac117415fae74b +25, 0xd0a970ba8dddc287 +26, 0x84b4e7e51b43106 +27, 0x6ad02bf525ea265f +28, 0xcdc7e5992b36ef8f +29, 0x44d4985209261d60 +30, 0x628c02d50f4b902e +31, 0xc7b1914922d1e76d +32, 0xfde99ff895cba51d +33, 0x175a0be050fa985f +34, 0x47297d3699e03228 +35, 0xccf1e9aeaa3339cd +36, 0x9fdd18ebeeaf15b1 +37, 0x7c94c9ab68747011 +38, 0x612d8ef22c1fa80f +39, 0x13f52b860de89ab5 +40, 0x81f264b8c139c43b +41, 0x8d017ba4ef1e85ba +42, 0x6d0556f46219951e +43, 0x8ee7b85663cf67b6 +44, 0x2432fc707645fe67 +45, 0xaf814046051e5941 +46, 0x4d432a83739ac76f +47, 0x59e5060d0983ccdd +48, 0xdd20e828b83d9b53 +49, 0x1b891800d7385f4c +50, 0x10e86a026c52ff5e +51, 0xb932f11723f7b90c +52, 0xb2413d0a1f3582d0 +53, 0xe7cd4edda65fc6b5 +54, 0x6d3808848d56593b +55, 0x192a727c3c7f47d9 +56, 0x9659d8aea5db8c16 +57, 0x4242c79fe2c77c16 +58, 0x605f90c913827cea +59, 0x53e153c8bfc2138a +60, 0xed2158fbdef5910e +61, 0xae9e6e29d4cb5060 +62, 0x7dd51afaad3b11ce +63, 0x2b9ba533d01a5453 +64, 0x7e0e9cf2b6c72c8 +65, 0x1cc8b3c7747ed147 +66, 0x9b102651e2e11b48 +67, 0x30b0b53cbaac33ea +68, 0x70c28aec39b99b85 +69, 0x5f1417ff536fdb75 +70, 0x3a1d91abd53acf58 +71, 0xba116a1772168259 +72, 0xf5369bc9bd284151 +73, 0x67bf11373bf183ca +74, 0xef0b2d44dbd33dc7 +75, 0xbfd567ee1a2953ed +76, 0x7d373f2579b5e5c6 +77, 0x756eeae7bcdd99be +78, 0x75f16eb9faa56f3b +79, 0x96d55ded2b54b9a5 +80, 0x94495191db692c24 +81, 0x32358bdd56bab38c +82, 0x3f6b64078576579 +83, 0x7177e7948bc064c9 +84, 0x2cbf23f09ba9bc91 +85, 0x9b97cc31c26645f5 +86, 0x5af2d239ff9028b1 +87, 0x316fa920e0332abe +88, 0x46535b7d1cae10a0 +89, 0x21f0a6869298022c +90, 0xf395c623b12deb14 +91, 0x8573995180675aa7 +92, 0xc3076509f4dc42d5 +93, 0x15e11e49760c6066 +94, 0xe8a6d311e67a021d +95, 0x7482f389c883339b +96, 0xda6f881573cba403 +97, 0xb110ffb847e42f07 +98, 0x2c3393140605ccf9 +99, 0xba1c8ba37d8bdc33 +100, 0x59adf43db7a86fe0 +101, 0xb4fcbf6aa585ca85 +102, 0xd794a93c18033fa6 +103, 0x6e839c01985f9d4 +104, 0x64065bf28222b2c7 +105, 0x6a6359b293fa0640 +106, 0x5ff610969e383e44 +107, 0xa8172c263f05c7f7 +108, 0x62a0172e8bd75d07 +109, 0x7be66e3c453b65ac +110, 0x6a3b8d5a14014292 +111, 0xa2583e6087450020 +112, 0xd5d3ecc480c627d2 +113, 0xa24e83f1eec8a27c +114, 0xa23febd2a99ee75a +115, 0x9a5fbf91c7310366 +116, 0x5b63156932e039b +117, 0x942af3c569908505 +118, 0x89a850f71ab6a912 +119, 0xfeadc803ac132fe9 +120, 0x67bf60e758250f3 +121, 0x533c25103466a697 +122, 0xb7deede3482f9769 +123, 0x325e043b53bba915 +124, 0x9e8d9e7fde132006 +125, 0x6bacc6860bbc436e +126, 0xb3ea0534c42b1c53 +127, 0xb2389334db583172 +128, 0xa74b1bfbf5242ee4 +129, 0x53a487e2dc51d15c +130, 0xe5a3b538d2c7a82e +131, 0x7b6c70bb0c4cadaf +132, 0xae20791b2081df1 +133, 0xc685c12e3c61d32c +134, 0x60110e6b0286e882 +135, 0x49682119c774045c +136, 0x53dc11a3bbd072e +137, 0xbdc87c6e732d9c2d +138, 0xcc4620861ebac8fd +139, 0x7e9c3558759350cc +140, 0x157408dee34891ba +141, 0x9bcad1855b80651b +142, 0xd81b29141d636908 +143, 0x1ed041a9f319c69d +144, 0x805b2f541208b490 +145, 0x484ef3bba2eb7c66 +146, 0xb6b5e37d50a99691 +147, 0xabc26a7d9e97e85f +148, 0xcba2a3cce0417c2f +149, 0xa030dfffd701993c +150, 0x2bf2dc50582ebf33 +151, 0xd9df13dd3eb9993e +152, 0x31ca28b757232ae5 +153, 0x614562a0ccf37263 +154, 0x44d635b01725afbb +155, 0x5ae230bc9ca9cd +156, 0xb23a124eb98705c6 +157, 0x6395675444981b11 +158, 0xd97314c34119f9ca +159, 0x9de61048327dd980 +160, 0x16bac6bded819707 +161, 0xcea3700e3e84b8c7 +162, 0xaa96955e2ee9c408 +163, 0x95361dcc93b5bc99 +164, 0x306921aed3713287 +165, 0x4df87f3130cd302a +166, 0x37c451daeb6a4af5 +167, 0x8dbbe35f911d5cc1 +168, 0x518157ce61cb10f9 +169, 0x669f577aebc7b35b +170, 0x4b0a5824a8786040 +171, 0x519bc3528de379f5 +172, 0x6128012516b54e02 +173, 0x98e4f165e5e6a6dd +174, 0x6404d03618a9b882 +175, 0x15b6aeb3d9cd8dc5 +176, 0x87ed2c1bae83c35b +177, 0x8377fc0252d41278 +178, 0x843f89d257a9ba02 +179, 0xcdda696ea95d0180 +180, 0xcfc4b23a50a89def +181, 0xf37fd270d5e29902 +182, 0xafe14418f76b7efa +183, 0xf984b81577076842 +184, 0xe8c60649ccb5458d +185, 0x3b7be8e50f8ff27b +186, 0xaa7506f25cef1464 +187, 0x5e513da59f106688 +188, 0x3c585e1f21a90d91 +189, 0x1df0e2075af292a +190, 0x29fdd36d4f72795f +191, 0xb162fe6c24cb4741 +192, 0x45073a8c02bd12c4 +193, 0xcbaaa395c2106f34 +194, 0x5db3c4c6011bc21c +195, 0x1b02aac4f752e377 +196, 0xa2dfb583eb7bec5 +197, 0xfe1d728805d34bb1 +198, 0xf647fb78bb4601ec +199, 0xd17be06f0d1f51ef +200, 0x39ec97c26e3d18a0 +201, 0xb7117c6037e142c8 +202, 0xe3a6ce6e6c71a028 +203, 0xe70a265e5db90bb2 +204, 0x24da4480530def1e +205, 0xfd82b28ce11d9a90 +206, 0x5bf61ead55074a1d +207, 0xbe9899c61dec480d +208, 0xae7d66d21e51ec9e +209, 0x384ee62c26a08419 +210, 0x6648dccb7c2f4abf +211, 0xc72aa0c2c708bdc9 +212, 0x205c5946b2b5ba71 +213, 0xd4d8d0b01890a812 +214, 0x56f185493625378d +215, 0x92f8072c81d39bd0 +216, 0xa60b3ceecb3e4979 +217, 0xfcf41d88b63b5896 +218, 0xf5a49aa845c14003 +219, 0xffcc7e99eee1e705 +220, 0xdd98312a7a43b32d +221, 0xa6339bd7730b004 +222, 0xdac7874ba7e30386 +223, 0xadf6f0b0d321c8 +224, 0x126a173ae4ffa39f +225, 0x5c854b137385c1e7 +226, 0x8173d471b1e69c00 +227, 0x23fa34de43581e27 +228, 0x343b373aef4507b1 +229, 0xa482d262b4ea919c +230, 0xf7fbef1b6f7fbba +231, 0xd8ce559487976613 +232, 0xbf3c8dd1e6ebc654 +233, 0xda41ed375451e988 +234, 0xf54906371fd4b9b3 +235, 0x5b6bb41231a04230 +236, 0x866d816482b29c17 +237, 0x11315b96941f27dc +238, 0xff95c79205c47d50 +239, 0x19c4fff96fbdac98 +240, 0xbfb1ae6e4131d0f4 +241, 0x9d20923f3cdb82c9 +242, 0x282175507c865dff +243, 0xdfd5e58a40fe29be +244, 0xedbd906ff40c8e4f +245, 0x11b04fc82614ccb3 +246, 0xeceb8afda76ae49f +247, 0xa4856913847c2cdf +248, 0x6f1425f15a627f2a +249, 0xdf144ffedf60349e +250, 0x392d7ecfd77cc65f +251, 0x72b8e2531049b2c6 +252, 0x5a7eb2bdb0ec9529 +253, 0xdcfd4306443e78c1 +254, 0x89ad67ed86cd7583 +255, 0x276b06c0779a6c8f +256, 0xb2dbb723196a0ac3 +257, 0x66c86a3b65906016 +258, 0x938348768a730b47 +259, 0x5f5282de938d1a96 +260, 0xa4d4588c4b473b1f +261, 0x8daed5962be4796f +262, 0x9dde8d796985a56e +263, 0x46be06dbd9ed9543 +264, 0xdf98286ceb9c5955 +265, 0xa1da1f52d7a7ca2b +266, 0x5a7f1449f24bbd62 +267, 0x3aedc4e324e525fd +268, 0xced62464cd0154e1 +269, 0x148fc035e7d88ce3 +270, 0x82f8878948f40d4c +271, 0x4c04d9cdd6135c17 +272, 0xdf046948d86b3b93 +273, 0x2f0dec84f403fe40 +274, 0xa61954fb71e63c0d +275, 0x616d8496f00382e8 +276, 0x162c622472746e27 +277, 0x43bcfe48731d2ceb +278, 0xff22432f9ff16d85 +279, 0xc033ed32bb0ad5a4 +280, 0x5d3717cc91c0ce09 +281, 0x7a39a4852d251075 +282, 0x61cd73d71d6e6a6 +283, 0xe37e2ea4783ab1a5 +284, 0x60e1882162579ea8 +285, 0x9258ec33f1a88e00 +286, 0x24b32acf029f0407 +287, 0x1410fc9aea6d3fac +288, 0x6054cf2a3c71d8f7 +289, 0x82f7605157a66183 +290, 0x3b34c1c0dff9eac5 +291, 0xfebe01b6d5c61819 +292, 0x7372187c68b777f2 +293, 0xc6923812cda479f0 +294, 0x386613be41b45156 +295, 0x92cfebe8cc4014b +296, 0x8e13c4595849828b +297, 0x90e47390d412291f +298, 0x6b21a1d93d285138 +299, 0xbf5b1f5922f04b12 +300, 0x21e65d1643b3cb69 +301, 0xf7683b131948ac3c +302, 0xe5d99fc926196ed2 +303, 0x7b138debbec90116 +304, 0x8a2650a75c2c2a5c +305, 0x20689a768f9b347b +306, 0xdfa2900cfb72dc6e +307, 0x98959c3855611cc2 +308, 0x5fdb71b89596cc7c +309, 0x1c14ac5c49568c7b +310, 0x958c4293016091fe +311, 0x7484522eb0087243 +312, 0xc4018dfb34fc190f +313, 0xca638567e9888860 +314, 0x102cd4805f0c0e89 +315, 0xcc3bc438e04548f8 +316, 0xb808944bb56ea5be +317, 0xffd4778dbf945c57 +318, 0xfe42617784c0233b +319, 0x3eccbfeae9b42d3c +320, 0xd9f1b585fd0bfa60 +321, 0x5c063d1b2705d5dd +322, 0x8e8bec3519941b64 +323, 0x9e94c36cbec2a42 +324, 0x1cd19f5b64ffd3ad +325, 0x9632e3aebfc68e66 +326, 0x98960c2d9da4ae45 +327, 0xb76994b1f2bbfc1f +328, 0xca184a737d3971cc +329, 0x964d31b07183adfb +330, 0xe9e0ff351cd276d4 +331, 0xb5747c860b05bbe4 +332, 0x5549ddc3bd3862e2 +333, 0x495496677b27873b +334, 0x53910baa26e3ea18 +335, 0xaa07a07ad0a688d3 +336, 0xbb43bd1f09ecdb1e +337, 0xe2ebc105699dd84 +338, 0x6e815a2729584035 +339, 0x2caab1713b17948a +340, 0x43d39d209fa41c90 +341, 0xfe3e71089d5d1c3a +342, 0xa778646c32f81177 +343, 0x8d42bfb86e6e92d5 +344, 0x175571f70b4fcfbe +345, 0x2a66a6fe10dc3b5b +346, 0xd9545e85235ca709 +347, 0x5642781c77ced48a +348, 0x24facc40b72ccd09 +349, 0xa800fbacce33f6f8 +350, 0x675f58a0ff19fba +351, 0x35aedf57bb5cde1b +352, 0xe5535a6b63f6d068 +353, 0x84dffd0102aaa85d +354, 0x621faad65467aaa7 +355, 0x596ad85b556b112f +356, 0x837545fff8894c7a +357, 0x3d9a4ae1356bc6a6 +358, 0xcd8b7153205d4ad0 +359, 0x98afdd40f1ed09a6 +360, 0xa38b2dc55a5cf87f +361, 0x484aecce2b6838bc +362, 0x6af05c26bdab18d9 +363, 0xf418b7399dcf2e4b +364, 0x1cfa38789b0d2445 +365, 0xfbed23c34166ee67 +366, 0x38e6820039e4912a +367, 0x1fe94911e963591e +368, 0x1291c79aee29ad70 +369, 0x65eccfc89506f963 +370, 0x7d14de3b2f55b1f6 +371, 0x82eb79c36cd2a739 +372, 0x41ffe3b75ea0def5 +373, 0x9eba9156470a51d9 +374, 0xd17c00b981db37d1 +375, 0xf688769a75601aa7 +376, 0xbcf738e9e03d571e +377, 0x14712e56df8f919b +378, 0xab14e227d156e310 +379, 0xf53d193e993e351e +380, 0x857fae46bd312141 +381, 0xc2dd71e41b639966 +382, 0x74f8b987a3d00ad1 +383, 0x5bce8526dc527981 +384, 0x94910926c172a379 +385, 0x503c45557688a9d5 +386, 0x244d03834e05807f +387, 0x6e014cbab9c7a31f +388, 0xae544c638530facf +389, 0x9b853aaaf9cbc22d +390, 0xfb42ab7024d060ed +391, 0x74cc3fba0dfd7ff2 +392, 0x24ec9e8f62144ad5 +393, 0x72f082954307bbe7 +394, 0x36feda21bbf67577 +395, 0x3222191611b832f1 +396, 0xd0584e81bcac8b0b +397, 0xdce8d793ef75e771 +398, 0x978824c6c2578fc +399, 0x6e8f77503b3c2ee4 +400, 0xc85d2d86fecf5d03 +401, 0x3d35b4a5d4d723c4 +402, 0xd3987dfd4727fff3 +403, 0xd3cde63fb6a31add +404, 0xf6699e86165bdaeb +405, 0x9d60ba158ec364c4 +406, 0x920c3c18b346bfc9 +407, 0x770fd1fdfbc236ca +408, 0x45998cfc5fc12ddd +409, 0xd74a3454e888834b +410, 0xbf2aa68081a4a28f +411, 0xea41b26a6f1da1b3 +412, 0x5560a2d24b9d5903 +413, 0xe3791f652a228d8b +414, 0x365116d3b5a8520c +415, 0xb1b2bd46528f8969 +416, 0xfcfe14943ef16ae7 +417, 0xf4d43425e8a535dc +418, 0xe6cf10a78782a7e0 +419, 0x9c7ac0de46556e3e +420, 0xc667ae0856eed9ef +421, 0x47dbb532e16f9c7e +422, 0xdf4785a5d89ee82e +423, 0xbd014925ce79dbcf +424, 0xea0d663fb58fa5be +425, 0x51af07d5cc3821fb +426, 0x27a1bdcdc4159a9d +427, 0x520c986c59b1e140 +428, 0x50b73fd9bacd5b39 +429, 0xae5240641f51e4f3 +430, 0x71faecc164ed9681 +431, 0xda95aa35529a7ee +432, 0xe25ba29b853c1c6d +433, 0x9871a925cda53735 +434, 0xde481ad8540e114d +435, 0xa2997f540e8abca0 +436, 0xc9683c5035e28185 +437, 0x1082471b57182bac +438, 0xbd3ecf0f0b788988 +439, 0xf479760776fbb342 +440, 0x3730929200d91f44 +441, 0xc1762d79ae72809c +442, 0xfaa0a4c7b1686cb3 +443, 0xd581e6d55afdafcd +444, 0x6cf57bdfba2dcf6d +445, 0xdef79d9fe6a5bcef +446, 0x13ed376e18132bd3 +447, 0xbe67efd72defa2a +448, 0x5acc176c468966ea +449, 0x8b35b626af139187 +450, 0x446de3fac0d973ac +451, 0xe1d49e06dc890317 +452, 0x817bc3fd21fc09b7 +453, 0xb71c3958a13d5579 +454, 0x8746e010f73d7148 +455, 0x1b61c06009922e83 +456, 0xba17e62e6b092316 +457, 0x1375fa23c4db8290 +458, 0x3f071230f51245a6 +459, 0x51c99a086a61cd13 +460, 0x5f0f2ae78589e1fd +461, 0x604834e114bbbc27 +462, 0x5eb2a7a34814e9a9 +463, 0x77a6907f386bf11e +464, 0x99525de2bd407eeb +465, 0xb818348c57b3b98f +466, 0x25f5f9e702fbe78d +467, 0x8f66669e6f884473 +468, 0x1e47d46e2af4f919 +469, 0xf6a19df846476833 +470, 0xff00c67bcd06621f +471, 0xe3dfe069795d72d8 +472, 0x8affc88b2fea4d73 +473, 0x66df747e5f827168 +474, 0xf368ec338d898a0e +475, 0x9e1f1a739c5984a2 +476, 0x46a1c90e1ca32cbc +477, 0xc261bc305ed8d762 +478, 0x754d7949f7da9e72 +479, 0x4c8fbbb14ef47b17 +480, 0xccbdc67a3848d80d +481, 0x3c25e6f58bae751d +482, 0x7078b163b936d9b6 +483, 0x440e27463c134ecf +484, 0x6c83ee39f324db0f +485, 0x27cf901b22aea535 +486, 0x57262dec79a3f366 +487, 0x91db09f1dbb524fb +488, 0xd7436eefba865df2 +489, 0x16c86b0a275a3f43 +490, 0x689493e6681deaa9 +491, 0x7e1dc536c1a9ac42 +492, 0x1145beac3ac7f5cc +493, 0x3d05e211a104b2b0 +494, 0x4f9e77ced3c52f44 +495, 0x53de1369354add72 +496, 0x1fb60f835f47cdeb +497, 0x6ab36f089e40c106 +498, 0xaabffcb0d3d04c7 +499, 0xaa399686d921bd25 +500, 0x2bf8dd8b6d6fa7f0 +501, 0x1ddbf4e124329613 +502, 0x466a740241466a72 +503, 0x98d7381eb68a761 +504, 0x817691510bc4857a +505, 0x8837622c0171fe33 +506, 0xcba078873179ee16 +507, 0x13adad1ab7b75af4 +508, 0x3bac3f502428840c +509, 0xbeb3cce138de9a91 +510, 0x30ef556e40b5f0b4 +511, 0x19c22abdf3bbb108 +512, 0x977e66ea4ddc7cf +513, 0x9f4a505f223d3bf3 +514, 0x6bc3f42ac79ec87b +515, 0x31e77712158d6c23 +516, 0x6d8de4295a28af0d +517, 0xee1807dbda72adb7 +518, 0xda54140179cd038f +519, 0x715aa5cdac38e062 +520, 0x5a7e55e99a22fa16 +521, 0xf190c36aa8edbe4f +522, 0xccadd93a82c1d044 +523, 0x7070e6d5012c3f15 +524, 0x50a83341a26c1ba5 +525, 0x11bca7cc634142e5 +526, 0x623a0d27867d8b04 +527, 0x75c18acff54fbf6e +528, 0x455ae7d933497a6f +529, 0xf624cf27d030c3d3 +530, 0x7a852716f8758bac +531, 0xe7a497ac1fa2b5b4 +532, 0xf84f097498f57562 +533, 0xc4bb392f87f65943 +534, 0x618e79a5d499fbfb +535, 0xb3c0b61d82b48b8 +536, 0x4750a10815c78ea7 +537, 0x9cf09cca3ddece69 +538, 0x2a69f1c94cc901a2 +539, 0x347a0e446e1ce86d +540, 0xb06f3a5a5ab37bb1 +541, 0x8035bd0713d591db +542, 0x539c9637042c3a1f +543, 0xd7ba4dc6b273cbd7 +544, 0x12f3f99933444f85 +545, 0x4a9517b9783fb9a4 +546, 0x6422b2ea95093bc5 +547, 0x3a5ecff0f996c2a6 +548, 0x31de504efc76a723 +549, 0x7ccb7c5233c21a9f +550, 0xc687d9e6ce4186e8 +551, 0x6e40769d6940376a +552, 0xf51207314f1f7528 +553, 0x67ee3acb190865e3 +554, 0xe08d586270588761 +555, 0xe387fa489af1a75c +556, 0x73414a52d29d8375 +557, 0x671a38191cf2a357 +558, 0xe00fb25b1aa54008 +559, 0x11a0610e22cf549b +560, 0xc90cc865d57c75be +561, 0x90d0863cc15f2b79 +562, 0x8b3e60d32ebcb856 +563, 0xb28cc55af621e04a +564, 0xcf60bd3cb2a5ab1d +565, 0x212cb5d421948f86 +566, 0xee297b96e0a3363f +567, 0x4e9392ff998760d1 +568, 0x61940c8d0105ba3e +569, 0x14ebcbae72a59a16 +570, 0xdf0f39a3d10c02af +571, 0xfc047b2b3c1c549d +572, 0x91718b5b98e3b286 +573, 0x9ea9539b1547d326 +574, 0x7a5a624a89a165e6 +575, 0x145b37dcaa8c4166 +576, 0x63814bbb90e5616c +577, 0xc4bc3ca6c38bb739 +578, 0x853c3a61ddc6626c +579, 0xa7ce8481c433829a +580, 0x8aff426941cc07b +581, 0x2dc3347ca68d8b95 +582, 0xce69f44f349e9917 +583, 0x2fa5cb8aca009b11 +584, 0xf26bb012115d9aca +585, 0xafa01c2f2d27235a +586, 0xabcba21f1b40305e +587, 0xfec20c896c0c1128 +588, 0xc5f7a71ebacadfa0 +589, 0xc8479ad14bab4eef +590, 0xad86ec9a3e7d3dc +591, 0xbbecd65292b915c5 +592, 0xb1f9e28149e67446 +593, 0x708d081c03dad352 +594, 0xaa8a84dbd1de916c +595, 0x9aa3efb29ba9480b +596, 0xd3c63969ff11443e +597, 0x1e9e9ac861315919 +598, 0x4fe227f91e66b41d +599, 0xefc0212d43d253ab +600, 0x98341437727c42d1 +601, 0x5ea85c0fe9008adc +602, 0x7891b15faa808613 +603, 0x32db2d63989aacfd +604, 0xc92f7f28e88fd7bc +605, 0x3513545eb6549475 +606, 0x49abe0082906fbf8 +607, 0xcee1e1a6551e729c +608, 0x38556672b592a28e +609, 0xc3e61409c4ec2d45 +610, 0x96c67ce2995a0fd4 +611, 0x9b9b0cada870293 +612, 0x82d6dd5dada48037 +613, 0xeea4f415299f1706 +614, 0x371107895f152ab3 +615, 0x2f6686159f4396bb +616, 0x61005a2ff3680089 +617, 0x9d2f2cafb595e6b6 +618, 0x4a812a920f011672 +619, 0x317554d3a77385d7 +620, 0x24c01086727eb74b +621, 0xa15ff76d618a3a9e +622, 0x2121bfd983859940 +623, 0x384d11577eea8114 +624, 0xab0f4299f3c44d88 +625, 0x136fd4b07cfa14d9 +626, 0x665fe45cbfaa972a +627, 0x76c5a23398a314e9 +628, 0x5507036357ccda98 +629, 0xd9b8c5ac9dce632b +630, 0x366bc71781da6e27 +631, 0xdd2b2ba1d6be6d15 +632, 0xf33ed0d50ea6f1a6 +633, 0xf05a9b1900174c18 +634, 0x3947e1419e2787cf +635, 0x6c742b1e029637d0 +636, 0x32aba12196a0d2e8 +637, 0x1b94aab2e82e7df +638, 0x68b617db19229d6 +639, 0x6c88a95ac0a33f98 +640, 0xdc9b95fd60c2d23e +641, 0x999e6971d3afc8b3 +642, 0x7071fc6ad8b60129 +643, 0x41a8184ef62485f6 +644, 0xb68e0605c7d5e713 +645, 0x272b961a1d1bbee +646, 0x23f04e76446187b0 +647, 0x999a7a8f6d33f260 +648, 0xdbd6318df4f168d +649, 0x8f5e74c84c40711e +650, 0x8ccc6b04393a19d6 +651, 0xadcd24b782dd8d3d +652, 0x1a966b4f80ef9499 +653, 0xcb6d4f9ff5a280f0 +654, 0x8095ff2b8484018a +655, 0xbfd3389611b8e771 +656, 0x278eb670b7d12d51 +657, 0x31df54ca8d65c20f +658, 0x121c7fb38af6985e +659, 0x84fb94f38fe1d0a +660, 0x15ae8af1a6d48f02 +661, 0x8d51e4a62cba1a28 +662, 0x58e6b6b3ae0f9e42 +663, 0x9365a0a85669cc99 +664, 0xe56e92f65a2106df +665, 0x68fa299c66b428fc +666, 0x55e51bb0b0a832c6 +667, 0x48b565293f9bc494 +668, 0x73d8132b1cbabb57 +669, 0x9178ac3926c36cbc +670, 0xe2f22c7b28ea5e0f +671, 0x6af45322a99afb12 +672, 0x59072fcb486a46f4 +673, 0x166b717b08d3d8e +674, 0xd4e627a2dfacc4ab +675, 0x33dad6f2921dedaa +676, 0x4b13b806834a6704 +677, 0xe5f7971b398ed54d +678, 0x20bfae65e3e6899b +679, 0x881dab45d2b4fc98 +680, 0x6f248126b5b885be +681, 0x7aeb39e986f9deee +682, 0xf819f9574b8c3a03 +683, 0xff3d93ed6bd9781a +684, 0x3a31e2e24a2f6385 +685, 0x7888a88f8944a5e +686, 0x4faee12f5de95537 +687, 0x7f3e4efccdb2ed67 +688, 0x91e0f2fc12593af5 +689, 0xb5be8a4b886a40d3 +690, 0x998e8288ac3a9b1b +691, 0x85c48fc8b1349e7b +692, 0xf03af25222d8fae5 +693, 0x45467e805b242c2e +694, 0xa2350db793dbebdc +695, 0xfebe5b61d2174553 +696, 0xa9a331f02c54ad0b +697, 0xe94e49a0f905aef3 +698, 0xe54b4c812b55e3da +699, 0xdc454114c6bc0278 +700, 0x99c7765ab476baa2 +701, 0xccd9590e47fdff7c +702, 0xfa2bcae7afd6cb71 +703, 0x2c1bf1a433a6f0f7 +704, 0x53882c62ff0aab28 +705, 0x80ac900f844dacc +706, 0x27ba8eb5c4a44d54 +707, 0x78f3dfb072a46004 +708, 0x34e00e6ec629edce +709, 0x5b88d19b552d1fbd +710, 0xe4df375dc79df432 +711, 0x37446312ff79c3b4 +712, 0xb72256900a95fa6d +713, 0x89f3171fbdff0bfc +714, 0xd37885b048687eba +715, 0xbb033213b283b60e +716, 0xcf10b523ee769030 +717, 0xbf8070b6cfd7bafb +718, 0xb7194da81fd1763b +719, 0xbfc303de88e68d24 +720, 0xb949c7a5aea8a072 +721, 0x844216e7bae90455 +722, 0xf1e7f20840049a33 +723, 0x96e3263ad0cae794 +724, 0x10772d51f6e9ba49 +725, 0xcea24fccae9d23b3 +726, 0xefd378add9dde040 +727, 0xba0c7c5275805976 +728, 0x2e2a04608f64fa8c +729, 0xafb42ec43aa0fa7 +730, 0x30444b84241ac465 +731, 0x19ef384bac4493ab +732, 0xfd1ac615d3ba5ab9 +733, 0x6cc781ba38643aff +734, 0x30ff27ebed875cfd +735, 0xee1a261aca97ae62 +736, 0xc5a92715202bc940 +737, 0x9e6ec76f93c657ff +738, 0x9b9fd55f55191ca5 +739, 0x654b13af008d8f03 +740, 0x1b7f030d9bd0719f +741, 0x6d622e277550cb7f +742, 0x3f8ee6b8830d0538 +743, 0x475462bcd0de190f +744, 0x21380e8a513bdbcd +745, 0x629bf3771b1bd7a4 +746, 0x3b5fd0b62c353709 +747, 0xf95634006ec3867e +748, 0x1be8bb584a6653c2 +749, 0x2e2d3cfa85320ce8 +750, 0x5b904b692252d11d +751, 0x4bfd76631d527990 +752, 0xc019571ca2bec4a0 +753, 0xf2eb730cea4cd751 +754, 0xd4571d709530191a +755, 0x3b5bd947061f5a7d +756, 0x56e2322cd2d1d1c0 +757, 0xa8830a5f62019f83 +758, 0x901d130c1b873cf3 +759, 0xb5dd29b363c61299 +760, 0xbb710bec3a17b26d +761, 0xc0c464daca0f2328 +762, 0x4dc8055df02650f5 +763, 0x3d3cd9bbe8b957af +764, 0xdb79612c2635b828 +765, 0xe25b3a8ad8fa3040 +766, 0xd5875c563cbf236b +767, 0x46861c1c3849c9bc +768, 0xf84bf1a2814dff43 +769, 0x6d8103902e0ad5e6 +770, 0x99f51c9be8af79e5 +771, 0xb0bfa8540ff94a96 +772, 0xaf45109a4e06f7d0 +773, 0x281df3e55aea9bfc +774, 0x6a1155ca8aa40e60 +775, 0x754d32c5de1f5da +776, 0xce1eafb1c6ca916f +777, 0xc4f2185fa8577bd1 +778, 0x4a188e9bdb5501d9 +779, 0xbb14107e99bd5550 +780, 0xf0381d8425ec2962 +781, 0x213dbfffc16ec4f6 +782, 0x7a999c5a28ea65bc +783, 0x23758c2aba7709ff +784, 0xea7e4bb205e93b44 +785, 0x9c5a31e53911c658 +786, 0x7f04d0bbdc689ddc +787, 0xe3ed89ab8d78dcb3 +788, 0x73c38bfb43986210 +789, 0x740c7d787eb8e158 +790, 0x5284fafdfb3fb9ec +791, 0x2e91a58ac1fb1409 +792, 0xb94a600bf0a09af3 +793, 0x533ea4dbe07d81dd +794, 0x48c3f1a736b3c5fd +795, 0x56ae3499fa8720ce +796, 0x526f2def663ca818 +797, 0x2f085759c65665c4 +798, 0xf715f042c69e0db4 +799, 0x110889c399231e60 +800, 0x64584a244866f3a0 +801, 0xf02ec101a39405d3 +802, 0xe73cd5e9a7f17283 +803, 0xfea64869e7028234 +804, 0x97559974ad877891 +805, 0xc8695aba1dc9f2e5 +806, 0x7b62b76ffc2264ec +807, 0xf5e1df172ec5ccd +808, 0xafaeb68765e443bd +809, 0xd3870eb2e8337623 +810, 0x4f944d684138fb39 +811, 0x6977c575038916ad +812, 0x8ada1a225df95a56 +813, 0xe4044c6c58d15e54 +814, 0x4e5121366681cf2 +815, 0xcf8640b079357b0d +816, 0xcd5b157d44106fa3 +817, 0x9d7a5481279e25a1 +818, 0xe10e9db41fb4b34f +819, 0x1052607be1eadff9 +820, 0x3403d67232fe2265 +821, 0xac9358f498c34afc +822, 0x820172da0dc39c9 +823, 0xe186e91a3b826b6a +824, 0x1a838e2a40284445 +825, 0x1870b617ebd7bce6 +826, 0xcb7cba4424be1ed7 +827, 0x6a2e56e40fdf9041 +828, 0xace93bbe108f97ee +829, 0xfeb9bc74ac41ca08 +830, 0x8cb2d05b0f6a1f51 +831, 0x73792309f3fac0a9 +832, 0x2507343d431308ca +833, 0xd0ea1197be615412 +834, 0xb1870812f1d2fa94 +835, 0x6d067b6935dcd23e +836, 0xaf161014e5492c31 +837, 0xd4be0dce97064be4 +838, 0xf8edfe3fc75c20f1 +839, 0x894751dc442d2d9c +840, 0xb4a95f6a6663456c +841, 0x74e93162e2d805db +842, 0x784bc5f3a7a2f645 +843, 0xd234d7c5b0582ea9 +844, 0x491f28d0ab6cb97c +845, 0xa79419e5cf4336c3 +846, 0x66b00141978c849 +847, 0xa7ddbd64698d563f +848, 0xefc33a4a5d97d4b2 +849, 0x95075514a65aebdc +850, 0x40eca5b3e28cd25e +851, 0x90ec7d00e9c9e35d +852, 0x63e84104d5af417a +853, 0xdaca0ea32df5744 +854, 0x7ed54f2587795881 +855, 0x5a73931760af4ee0 +856, 0x857d1a185a3081ec +857, 0x6eac2aabe67fb463 +858, 0xd1f86155d8bfc55f +859, 0x6d56398f3e7877ef +860, 0x7642f61dfc62bc17 +861, 0x1d76b12843246ffa +862, 0xde7817809b8a31d0 +863, 0xbcca9cd091198f9d +864, 0xf71ca566dddcdfd4 +865, 0xea4386ee8b61d082 +866, 0xe351729d6010bac4 +867, 0xfd685d8a49910dd6 +868, 0xa7a20ea6c686bd3 +869, 0x1cdaf82f4dbd5536 +870, 0xa3da1d1e77dda3e0 +871, 0x4f723b3818ff8b2a +872, 0x1290669eca152469 +873, 0xb54158b52d30651b +874, 0xc06b74f2c7f0fee +875, 0x7d5840bcbf702379 +876, 0x19fa4c1254a82ed +877, 0xcf5ce090ad0b38ea +878, 0xd4edd6ac9437e16d +879, 0xc6ebf25eb623b426 +880, 0xd2b6dbdf00d8fea2 +881, 0x949cf98391cc59e1 +882, 0x380a0c7d0356f7b3 +883, 0x8ffefe32465473bf +884, 0x637b6542d27c861e +885, 0x347d12ffc664ecd9 +886, 0xea66e3a0c75a6b37 +887, 0xc3aff6f34fb537a1 +888, 0x67bdf3579959bf49 +889, 0xa17a348e3a74b723 +890, 0x93c9ef26ddadd569 +891, 0x483909059a5ac0b2 +892, 0x26ec9074b56d5a0d +893, 0x6216000d9a48403a +894, 0x79b43909eab1ec05 +895, 0xe4a8e8d03649e0de +896, 0x1435d666f3ccdc08 +897, 0xb9e22ba902650a0e +898, 0x44dffcccc68b41f8 +899, 0x23e60dcc7a559a17 +900, 0x6fd1735eacd81266 +901, 0xf6bda0745ea20c8e +902, 0x85efcaefe271e07c +903, 0x9be996ee931cef42 +904, 0xe78b41c158611d64 +905, 0xd6201df605839830 +906, 0x702e8e47d2769fd3 +907, 0xb8dcf70e18cf14c +908, 0xac2690bab1bf5c17 +909, 0x92b166b71205d696 +910, 0xb0e73c795fc6df28 +911, 0x4bf2322c8b6b6f0d +912, 0xa842fbe67918cea0 +913, 0xb01a8675d9294e54 +914, 0xfbe3c94f03ca5af2 +915, 0x51a5c089600c441f +916, 0x60f0fd7512d85ded +917, 0xef3113d3bc2cadb0 +918, 0xe1ea128ade300d60 +919, 0xde413b7f8d92d746 +920, 0xfc32c6d43f47c5d8 +921, 0x69d551d8c2b54c68 +922, 0xb9bc68c175777943 +923, 0xb9c79c687f0dae90 +924, 0xd799421ef883c06e +925, 0xbff553ca95a29a3e +926, 0xfc9ffac46bd0aca1 +927, 0x4f6c3a30c80c3e5a +928, 0x8b7245bc6dc4a0a +929, 0xaf4e191a4575ff60 +930, 0x41218c4a76b90f0b +931, 0x986052aa51b8e89b +932, 0x284b464ed5622f9 +933, 0xba6bded912626b40 +934, 0x43cad3ed7443cb5c +935, 0x21641fa95725f328 +936, 0x6d99d6d09d755822 +937, 0x8246dfa2d4838492 +938, 0xd2ee70b9056f4726 +939, 0x87db515a786fbb8b +940, 0x7c63e4c1d7786e7d +941, 0xd1a9d548f10b3e88 +942, 0xa00856475f3b74c9 +943, 0x7f1964ce67148bf4 +944, 0x446650ec71e6018c +945, 0xb1805ca07d1b6345 +946, 0x869c0a1625b7271b +947, 0x79d6da06ce2ecfe2 +948, 0xec7b3cafc5e3c85f +949, 0x1745ce21e39f2c3d +950, 0xd9a0a7af6ee97825 +951, 0x680e0e52a6e11d5c +952, 0xd86b3f344ff7f4cd +953, 0xab56af117c840b9c +954, 0x5c5404c7e333a10e +955, 0x4f1eb462f35d990d +956, 0xf857605a5644458e +957, 0x3bb87cdf09262f86 +958, 0xd57295baf6da64b +959, 0xb5993f48472f2894 +960, 0x7d1a501608c060b2 +961, 0x45fabe2d0e54adf0 +962, 0xbb41c3806afb4efe +963, 0xbfbc506049424c8 +964, 0xb7dd6b67f2203344 +965, 0x389ce52eff883b81 +966, 0xe259c55c0cf6d000 +967, 0x70fb3e3824f7d213 +968, 0x9f36d5599ed55f4b +969, 0xd14cf6f12f83c4f7 +970, 0x570a09d56aaa0b66 +971, 0x8accafd527f4598 +972, 0xa42d64c62175adfd +973, 0xddb9c6a87b6e1558 +974, 0xd80b6c69fa1cde2a +975, 0x44ebaac10082207b +976, 0xf99be8889552fa1a +977, 0x38253cd4b38b5dc5 +978, 0x85356c8b02675791 +979, 0xbf91677b2ecdcf55 +980, 0x2316cb85e93f366e +981, 0x9abf35954db6b053 +982, 0xf49f7425e086b45a +983, 0x8f5b625e074afde2 +984, 0xe0d614559791b080 +985, 0xbf7b866afab2a525 +986, 0xde89d7e1641a6412 +987, 0x1d10687d8ae5b86f +988, 0x1f034caa0e904cbd +989, 0x2086357aec8a7a2c +990, 0x22dc476b80c56e1e +991, 0xbef5a73cc0e3a493 +992, 0xddfa3829b26ed797 +993, 0x8917a87ec3d4dc78 +994, 0xfeabe390628c365e +995, 0x581b0c4f6fb2d642 +996, 0x1ef8c590adbf5b9a +997, 0x4d8e13aac0cce879 +998, 0xfe38f71e5977fad0 +999, 0x1f83a32d4adfd2ed diff --git a/EXE version/main/numpy/random/tests/data/philox-testset-2.csv b/EXE version/main/numpy/random/tests/data/philox-testset-2.csv new file mode 100644 index 00000000..69d24c38 --- /dev/null +++ b/EXE version/main/numpy/random/tests/data/philox-testset-2.csv @@ -0,0 +1,1001 @@ +seed, 0x0 +0, 0x399e5b222b82fa9 +1, 0x41fd08c1f00f3bc5 +2, 0x78b8824162ee4d04 +3, 0x176747919e02739d +4, 0xfaa88f002a8d3596 +5, 0x418eb6f592e6c227 +6, 0xef83020b8344dd45 +7, 0x30a74a1a6eaa064b +8, 0x93d43bf97a490c3 +9, 0xe4ba28b442194cc +10, 0xc829083a168a8656 +11, 0x73f45d50f8e22849 +12, 0xf912db57352824cc +13, 0xf524216927b12ada +14, 0x22b7697473b1dfda +15, 0x311e2a936414b39f +16, 0xb905abfdcc425be6 +17, 0x4b14630d031eac9c +18, 0x1cf0c4ae01222bc8 +19, 0xa6c33efc6e82ef3 +20, 0x43b3576937ba0948 +21, 0x1e483d17cdde108a +22, 0x6722784cac11ac88 +23, 0xee87569a48fc45d7 +24, 0xb821dcbe74d18661 +25, 0xa5d1876ef3da1a81 +26, 0xe4121c2af72a483 +27, 0x2d747e355a52cf43 +28, 0x609059957bd03725 +29, 0xc3327244b49e16c5 +30, 0xb5ae6cb000dde769 +31, 0x774315003209017 +32, 0xa2013397ba8db605 +33, 0x73b228945dbcd957 +34, 0x801af7190375d3c0 +35, 0xae6dca29f24c9c67 +36, 0xd1cc0bcb1ca26249 +37, 0x1defa62a5bd853be +38, 0x67c2f5557fa89462 +39, 0xf1729b58122fab02 +40, 0xb67eb71949ec6c42 +41, 0x5456366ec1f8f7d7 +42, 0x44492b32eb7966f5 +43, 0xa801804159f175f1 +44, 0x5a416f23cac70d84 +45, 0x186f55293302303d +46, 0x7339d5d7b6a43639 +47, 0xfc6df38d6a566121 +48, 0xed2fe018f150b39e +49, 0x508e0b04a781fa1b +50, 0x8bee9d50f32eaf50 +51, 0x9870015d37e63cc +52, 0x93c6b12309c14f2d +53, 0xb571cf798abe93ff +54, 0x85c35a297a88ae6e +55, 0x9b1b79afe497a2ae +56, 0x1ca02e5b95d96b8d +57, 0x5bb695a666c0a94a +58, 0x4e3caf9bbab0b208 +59, 0x44a44be1a89f2dc1 +60, 0x4ff37c33445758d1 +61, 0xd0e02875322f35da +62, 0xfd449a91fb92646b +63, 0xbe0b49096b95db4d +64, 0xffa3647cad13ef5d +65, 0x75c127a61acd10c8 +66, 0xd65f697756f5f98e +67, 0x3ced84be93d94434 +68, 0x4da3095c2fc46d68 +69, 0x67564e2a771ee9ac +70, 0x36944775180644a9 +71, 0xf458db1c177cdb60 +72, 0x5b58406dcd034c8 +73, 0x793301a3fdab2a73 +74, 0x1c2a1a16d6db6128 +75, 0xc2dacd4ddddbe56c +76, 0x2e7d15be2301a111 +77, 0xd4f4a6341b3bcd18 +78, 0x3622996bbe6a9e3b +79, 0xaf29aa9a7d6d47da +80, 0x6d7dbb74a4cd68ae +81, 0xc260a17e0f39f841 +82, 0xdee0170f2af66f0d +83, 0xf84ae780d7b5a06e +84, 0x8326247b73f43c3a +85, 0xd44eef44b4f98b84 +86, 0x3d10aee62ec895e3 +87, 0x4f23fef01bf703b3 +88, 0xf8e50aa57d888df6 +89, 0x7da67411e3bef261 +90, 0x1d00f2769b2f96d7 +91, 0x7ef9a15b7444b84e +92, 0xcfa16436cc2b7e21 +93, 0x29ab8cfac00460ff +94, 0x23613de8608b0e70 +95, 0xb1aa0980625798a8 +96, 0xb9256fd29db7df99 +97, 0xdacf311bf3e7fa18 +98, 0xa013c8f9fada20d8 +99, 0xaf5fd4fe8230fe3e +100, 0xd3d59ca55102bc5c +101, 0x9d08e2aa5242767f +102, 0x40278fe131e83b53 +103, 0x56397d03c7c14c98 +104, 0xe874b77b119359b3 +105, 0x926a1ba4304ab19f +106, 0x1e115d5aa695a91d +107, 0xc6a459df441f2fe3 +108, 0x2ca842bc1b0b3c6a +109, 0x24c804cf8e5eed16 +110, 0x7ca00fc4a4c3ebd3 +111, 0x546af7cecc4a4ba6 +112, 0x8faae1fa18fd6e3 +113, 0x40420b0089641a6a +114, 0x88175a35d9abcb83 +115, 0xf7d746d1b8b1357c +116, 0x7dae771a651be970 +117, 0x2f6485247ee4df84 +118, 0x6883702fab2d8ec5 +119, 0xeb7eea829a67f9a6 +120, 0x60d5880b485562ed +121, 0x7d4ca3d7e41a4e7e +122, 0xbb7fef961ab8de18 +123, 0x3b92452fb810c164 +124, 0x5f4b4755348b338 +125, 0xca45a715a7539806 +126, 0xc33efd9da5399dd +127, 0x593d665a51d4aedd +128, 0x75d6b8636563036b +129, 0x7b57caa55e262082 +130, 0x4ede7427969e0dd5 +131, 0xc3f19b6f78ea00b +132, 0xeea7bab9be2181ea +133, 0x652c45fe9c420c04 +134, 0x14ba9e3d175670ee +135, 0xd2ad156ba6490474 +136, 0x4d65ae41065f614 +137, 0x6ff911c8afa28eb1 +138, 0xedc2b33588f3cb68 +139, 0x437c8bc324666a2f +140, 0x828cee25457a3f0 +141, 0x530c986091f31b9b +142, 0x2f34671e8326ade7 +143, 0x4f686a8f4d77f6da +144, 0xa4c1987083498895 +145, 0xbce5a88b672b0fb1 +146, 0x8476115a9e6a00cc +147, 0x16de18a55dd2c238 +148, 0xdf38cf4c416232bc +149, 0x2cb837924e7559f3 +150, 0xfad4727484e982ed +151, 0x32a55d4b7801e4f +152, 0x8b9ef96804bd10a5 +153, 0xa1fd422c9b5cf2a9 +154, 0xf46ddb122eb7e442 +155, 0x6e3842547afa3b33 +156, 0x863dee1c34afe5c4 +157, 0x6a43a1935b6db171 +158, 0x1060a5c2f8145821 +159, 0xf783ec9ed34c4607 +160, 0x1da4a86bf5f8c0b0 +161, 0x4c7714041ba12af8 +162, 0x580da7010be2f192 +163, 0xad682fe795a7ea7a +164, 0x6687b6cb88a9ed2c +165, 0x3c8d4b175517cd18 +166, 0xe9247c3a524a6b6b +167, 0x337ca9cfaa02658 +168, 0xed95399481c6feec +169, 0x58726a088e606062 +170, 0xfe7588a5b4ee342a +171, 0xee434c7ed146fdee +172, 0xe2ade8b60fdc4ba5 +173, 0xd57e4c155de4eaab +174, 0xdefeae12de1137cb +175, 0xb7a276a241316ac1 +176, 0xeb838b1b1df4ca15 +177, 0x6f78965edea32f6f +178, 0x18bebd264d7a5d53 +179, 0x3641c691d77005ec +180, 0xbe70ed7efea8c24c +181, 0x33047fa8d03ca560 +182, 0x3bed0d2221ff0f87 +183, 0x23083a6ffbcf38a2 +184, 0xc23eb827073d3fa5 +185, 0xc873bb3415e9fb9b +186, 0xa4645179e54147fe +187, 0x2c72fb443f66e207 +188, 0x98084915dd89d8f4 +189, 0x88baa2de12c99037 +190, 0x85c74ab238cb795f +191, 0xe122186469ea3a26 +192, 0x4c3bba99b3249292 +193, 0x85d6845d9a015234 +194, 0x147ddd69c13e6a31 +195, 0x255f4d678c9a570b +196, 0x2d7c0c410bf962b4 +197, 0x58eb7649e0aa16ca +198, 0x9d240bf662fe0783 +199, 0x5f74f6fa32d293cc +200, 0x4928e52f0f79d9b9 +201, 0xe61c2b87146b706d +202, 0xcfcd90d100cf5431 +203, 0xf15ea8138e6aa178 +204, 0x6ab8287024f9a819 +205, 0xed8942593db74e01 +206, 0xefc00e4ec2ae36dd +207, 0xc21429fb9387f334 +208, 0xf9a3389e285a9bce +209, 0xacdee8c43aae49b3 +210, 0xefc382f02ad55c25 +211, 0x1153b50e8d406b72 +212, 0xb00d39ebcc2f89d8 +213, 0xde62f0b9831c8850 +214, 0xc076994662eef6c7 +215, 0x66f08f4752f1e3ef +216, 0x283b90619796249a +217, 0x4e4869bc4227499e +218, 0xb45ad78a49efd7ed +219, 0xffe19aa77abf5f4b +220, 0xfce11a0daf913aef +221, 0x7e4e64450d5cdceb +222, 0xe9621997cfd62762 +223, 0x4d2c9e156868081 +224, 0x4e2d96eb7cc9a08 +225, 0xda74849bba6e3bd3 +226, 0x6f4621da935e7fde +227, 0xb94b914aa0497259 +228, 0xd50d03e8b8db1563 +229, 0x1a45c1ce5dca422e +230, 0xc8d30d33276f843f +231, 0xb57245774e4176b4 +232, 0x8d36342c05abbbb1 +233, 0x3591ad893ecf9e78 +234, 0x62f4717239ee0ac8 +235, 0x9b71148a1a1d4200 +236, 0x65f8e0f56dd94463 +237, 0x453b1fcfd4fac8c2 +238, 0x4c25e48e54a55865 +239, 0xa866baa05112ace2 +240, 0x7741d3c69c6e79c5 +241, 0x7deb375e8f4f7a8a +242, 0xc242087ede42abd8 +243, 0x2fa9d1d488750c4b +244, 0xe8940137a935d3d3 +245, 0x1dab4918ca24b2f2 +246, 0xe2368c782168fe3e +247, 0x6e8b2d1d73695909 +248, 0x70455ebea268b33e +249, 0x656a919202e28da1 +250, 0x5a5a8935647da999 +251, 0x428c6f77e118c13c +252, 0xa87aee2b675bb083 +253, 0x3873a6412b239969 +254, 0x5f72c1e91cb8a2ee +255, 0xa25af80a1beb5679 +256, 0x1af65d27c7b4abc3 +257, 0x133437060670e067 +258, 0xb1990fa39a97d32e +259, 0x724adc89ae10ed17 +260, 0x3f682a3f2363a240 +261, 0x29198f8dbd343499 +262, 0xdfaeeaa42bc51105 +263, 0x5baff3901b9480c2 +264, 0x3f760a67043e77f5 +265, 0x610fa7aa355a43ba +266, 0x394856ac09c4f7a7 +267, 0x1d9229d058aee82e +268, 0x19c674804c41aeec +269, 0x74cf12372012f4aa +270, 0xa5d89b353fa2f6ca +271, 0x697e4f672ac363dd +272, 0xde6f55ba73df5af9 +273, 0x679cf537510bd68f +274, 0x3dc916114ae9ef7e +275, 0xd7e31a66ec2ee7ba +276, 0xc21bebb968728495 +277, 0xc5e0781414e2adfd +278, 0x71147b5412ddd4bd +279, 0x3b864b410625cca9 +280, 0x433d67c0036cdc6 +281, 0x48083afa0ae20b1b +282, 0x2d80beecd64ac4e8 +283, 0x2a753c27c3a3ee3e +284, 0xb2c5e6afd1fe051a +285, 0xea677930cd66c46b +286, 0x4c3960932f92810a +287, 0xf1b367a9e527eaba +288, 0xb7d92a8a9a69a98e +289, 0x9f9ad3210bd6b453 +290, 0x817f2889db2dcbd8 +291, 0x4270a665ac15813c +292, 0x90b85353bd2be4dd +293, 0x10c0460f7b2d68d +294, 0x11cef32b94f947f5 +295, 0x3cf29ed8e7d477e8 +296, 0x793aaa9bd50599ef +297, 0xbac15d1190014aad +298, 0x987944ae80b5cb13 +299, 0x460aa51f8d57c484 +300, 0xc77df0385f97c2d3 +301, 0x92e743b7293a3822 +302, 0xbc3458bcfbcbb8c0 +303, 0xe277bcf3d04b4ed7 +304, 0xa537ae5cf1c9a31c +305, 0x95eb00d30bd8cfb2 +306, 0x6376361c24e4f2dd +307, 0x374477fe87b9ea8e +308, 0x8210f1a9a039902e +309, 0xe7628f7031321f68 +310, 0x8b8e9c0888fc1d3d +311, 0x306be461fdc9e0ed +312, 0x510009372f9b56f5 +313, 0xa6e6fa486b7a027a +314, 0x9d3f002025203b5a +315, 0x7a46e0e81ecbef86 +316, 0x41e280c611d04df0 +317, 0xedcec10418a99e8a +318, 0x5c27b6327e0b9dbd +319, 0xa81ed2035b509f07 +320, 0x3581e855983a4cc4 +321, 0x4744594b25e9809d +322, 0xc737ac7c27fbd0ed +323, 0x1b523a307045433a +324, 0x8b4ce9171076f1d9 +325, 0x2db02d817cd5eec0 +326, 0x24a1f1229af50288 +327, 0x5550c0dcf583ff16 +328, 0x3587baaa122ec422 +329, 0xf9d3dc894229e510 +330, 0xf3100430d5cf8e87 +331, 0xc31af79862f8e2fb +332, 0xd20582063b9f3537 +333, 0xac5e90ac95fcc7ad +334, 0x107c4c704d5109d4 +335, 0xebc8628906dbfd70 +336, 0x215242776da8c531 +337, 0xa98002f1dcf08b51 +338, 0xbc3bdc07f3b09718 +339, 0x238677062495b512 +340, 0x53b4796f2a3c49e8 +341, 0x6424286467e22f0e +342, 0x14d0952a11a71bac +343, 0x2f97098149b82514 +344, 0x3777f2fdc425ad2 +345, 0xa32f2382938876d4 +346, 0xda8a39a021f20ae3 +347, 0x364361ef0a6ac32c +348, 0x4413eede008ff05a +349, 0x8dda8ace851aa327 +350, 0x4303cabbdcecd1ee +351, 0x2e69f06d74aa549f +352, 0x4797079cd4d9275c +353, 0xc7b1890917e98307 +354, 0x34031b0e822a4b4c +355, 0xfc79f76b566303ea +356, 0x77014adbe255a930 +357, 0xab6c43dd162f3be5 +358, 0xa430041f3463f6b9 +359, 0x5c191a32ada3f84a +360, 0xe8674a0781645a31 +361, 0x3a11cb667b8d0916 +362, 0xaedc73e80c39fd8a +363, 0xfde12c1b42328765 +364, 0x97abb7dcccdc1a0b +365, 0x52475c14d2167bc8 +366, 0x540e8811196d5aff +367, 0xa867e4ccdb2b4b77 +368, 0x2be04af61e5bcfb9 +369, 0x81b645102bfc5dfd +370, 0x96a52c9a66c6450f +371, 0x632ec2d136889234 +372, 0x4ed530c0b36a6c25 +373, 0x6f4851225546b75 +374, 0x2c065d6ba46a1144 +375, 0xf8a3613ff416551d +376, 0xb5f0fd60e9c971a9 +377, 0x339011a03bb4be65 +378, 0x9439f72b6995ded6 +379, 0xc1b03f3ef3b2292d +380, 0xad12fd221daab3ae +381, 0xf615b770f2cf996f +382, 0x269d0fdcb764172 +383, 0x67837025e8039256 +384, 0x6402831fc823fafa +385, 0x22854146a4abb964 +386, 0x7b5ad9b5a1bad7a8 +387, 0x67170e7beb6ac935 +388, 0xfc2d1e8e24adfaaa +389, 0x7ded4395345ff40d +390, 0x418981760a80dd07 +391, 0xc03bef38022c1d2 +392, 0x3a11850b26eade29 +393, 0xaa56d02c7175c5f4 +394, 0xd83b7917b9bfbff5 +395, 0x3c1df2f8fa6fced3 +396, 0xf3d6e2999c0bb760 +397, 0xc66d683a59a950e3 +398, 0x8e3972a9d73ffabf +399, 0x97720a0443edffd9 +400, 0xa85f5d2fe198444a +401, 0xfc5f0458e1b0de5e +402, 0xe3973f03df632b87 +403, 0xe151073c84c594b3 +404, 0x68eb4e22e7ff8ecf +405, 0x274f36eaed7cae27 +406, 0x3b87b1eb60896b13 +407, 0xbe0b2f831442d70a +408, 0x2782ed7a48a1b328 +409, 0xb3619d890310f704 +410, 0xb03926b11b55921a +411, 0xdb46fc44aa6a0ce4 +412, 0x4b063e2ef2e9453a +413, 0xe1584f1aeec60fb5 +414, 0x7092bd6a879c5a49 +415, 0xb84e1e7c7d52b0e6 +416, 0x29d09ca48db64dfb +417, 0x8f6c4a402066e905 +418, 0x77390795eabc36b +419, 0xcc2dc2e4141cc69f +420, 0x2727f83beb9e3c7c +421, 0x1b29868619331de0 +422, 0xd38c571e192c246f +423, 0x535327479fe37b6f +424, 0xaff9ce5758617eb3 +425, 0x5658539e9288a4e4 +426, 0x8df91d87126c4c6d +427, 0xe931cf8fdba6e255 +428, 0x815dfdf25fbee9e8 +429, 0x5c61f4c7cba91697 +430, 0xdd5f5512fe2313a1 +431, 0x499dd918a92a53cd +432, 0xa7e969d007c97dfd +433, 0xb8d39c6fc81ac0bb +434, 0x1d646983def5746c +435, 0x44d4b3b17432a60c +436, 0x65664232a14db1e3 +437, 0xda8fae6433e7500b +438, 0xbe51b94ff2a3fe94 +439, 0xe9b1bd9a9098ef9f +440, 0xfe47d54176297ef5 +441, 0xb8ab99bc03bb7135 +442, 0xcfad97f608565b38 +443, 0xf05da71f6760d9c1 +444, 0xef8da40a7c70e7b +445, 0xe0465d58dbd5d138 +446, 0xb54a2d70eb1a938 +447, 0xfdd50c905958f2d8 +448, 0x3c41933c90a57d43 +449, 0x678f6d894c6ad0bb +450, 0x403e8f4582274e8 +451, 0x5cbbe975668df6b0 +452, 0x297e6520a7902f03 +453, 0x8f6dded33cd1efd7 +454, 0x8e903c97be8d783b +455, 0x10bd015577e30f77 +456, 0x3fcd69d1c36eab0c +457, 0xb45989f3ca198d3 +458, 0x507655ce02b491a9 +459, 0xa92cf99bb78602ce +460, 0xebfb82055fbc2f0f +461, 0x3334256279289b7a +462, 0xc19d2a0f740ee0ac +463, 0x8bb070dea3934905 +464, 0xa4ab57d3a8d1b3eb +465, 0xfee1b09bcacf7ff4 +466, 0xccc7fb41ceec41fa +467, 0xd4da49094eb5a74d +468, 0xed5c693770af02ed +469, 0x369dabc9bbfaa8e4 +470, 0x7eab9f360d054199 +471, 0xe36dbebf5ee94076 +472, 0xd30840e499b23d7 +473, 0x8678e6cb545015ff +474, 0x3a47932ca0b336e +475, 0xeb7c742b6e93d6fe +476, 0x1404ea51fe5a62a9 +477, 0xa72cd49db978e288 +478, 0xfd7bada020173dcf +479, 0xc9e74fc7abe50054 +480, 0x93197847bb66808d +481, 0x25fd5f053dce5698 +482, 0xe198a9b18cc21f4 +483, 0x5cc27b1689452d5d +484, 0x8b3657af955a98dc +485, 0xc17f7584f54aa1c0 +486, 0xe821b088246b1427 +487, 0x32b5a9f6b45b6fa0 +488, 0x2aef7c315c2bae0c +489, 0xe1af8129846b705a +490, 0x4123b4c091b34614 +491, 0x6999d61ec341c073 +492, 0x14b9a8fcf86831ea +493, 0xfd4cff6548f46c9f +494, 0x350c3b7e6cc8d7d6 +495, 0x202a5047fecafcd5 +496, 0xa82509fe496bb57d +497, 0x835e4b2608b575fe +498, 0xf3abe3da919f54ec +499, 0x8705a21e2c9b8796 +500, 0xfd02d1427005c314 +501, 0xa38458faa637f49b +502, 0x61622f2360e7622a +503, 0xe89335a773c2963b +504, 0x481264b659b0e0d0 +505, 0x1e82ae94ebf62f15 +506, 0x8ea7812de49209d4 +507, 0xff963d764680584 +508, 0x418a68bef717f4af +509, 0x581f0e7621a8ab91 +510, 0x840337e9a0ec4150 +511, 0x951ef61b344be505 +512, 0xc8b1b899feb61ec2 +513, 0x8b78ca13c56f6ed9 +514, 0x3d2fd793715a946f +515, 0xf1c04fabcd0f4084 +516, 0x92b602614a9a9fcc +517, 0x7991bd7a94a65be7 +518, 0x5dead10b06cad2d7 +519, 0xda7719b33f722f06 +520, 0x9d87a722b7bff71e +521, 0xb038e479071409e9 +522, 0xf4e8bbec48054775 +523, 0x4fec2cd7a28a88ea +524, 0x839e28526aad3e56 +525, 0xd37ec57852a98bf0 +526, 0xdef2cbbe00f3a02d +527, 0x1aecfe01a9e4d801 +528, 0x59018d3c8beaf067 +529, 0x892753e6ac8bf3cd +530, 0xefdd3437023d2d1c +531, 0x447bfbd148c8cb88 +532, 0x282380221bd442b8 +533, 0xfce8658d1347384a +534, 0x60b211a7ec6bfa8 +535, 0xd21729cfcc692974 +536, 0x162087ecd5038a47 +537, 0x2b17000c4bce39d2 +538, 0x3a1f75ff6adcdce0 +539, 0x721a411d312f1a2c +540, 0x9c13b6133f66934d +541, 0xaa975d14978980e5 +542, 0x9403dbd4754203fa +543, 0x588c15762fdd643 +544, 0xdd1290f8d0ada73a +545, 0xd9b77380936103f4 +546, 0xb2e2047a356eb829 +547, 0x7019e5e7f76f7a47 +548, 0x3c29a461f62b001d +549, 0xa07dc6cfab59c116 +550, 0x9b97e278433f8eb +551, 0x6affc714e7236588 +552, 0x36170aeb32911a73 +553, 0x4a665104d364a789 +554, 0x4be01464ec276c9c +555, 0x71bb10271a8b4ecf +556, 0xbf62e1d068bc018 +557, 0xc9ada5db2cbbb413 +558, 0x2bded75e726650e5 +559, 0x33d5a7af2f34385d +560, 0x8179c46661d85657 +561, 0x324ebcfd29267359 +562, 0xac4c9311dc9f9110 +563, 0xc14bb6a52f9f9c0 +564, 0xc430abe15e7fb9db +565, 0xf1cce5c14df91c38 +566, 0x651e3efa2c0750d3 +567, 0x38a33604a8be5c75 +568, 0x7aaf77fe7ff56a49 +569, 0xc0d1cc56bbf27706 +570, 0x887aa47324e156c6 +571, 0x12547c004b085e8d +572, 0xd86a8d6fbbbfd011 +573, 0x57c860188c92d7b4 +574, 0xcd5d3843d361b8ca +575, 0x8f586ef05a9cb3ef +576, 0x174456e1ba6267d5 +577, 0xf5dc302c62fe583c +578, 0xa349442fabcdb71 +579, 0xe5123c1a8b6fd08e +580, 0x80681552aa318593 +581, 0xb295396deaef1e31 +582, 0xabb626e0b900e32b +583, 0xf024db8d3f19c15e +584, 0x1d04bb9548e2fb6c +585, 0xd8ed2b2214936c2b +586, 0x618ca1e430a52bc9 +587, 0xccbca44a6088136b +588, 0xd0481855c8b9ccbe +589, 0x3c92a2fade28bdf7 +590, 0x855e9fefc38c0816 +591, 0x1269bbfe55a7b27c +592, 0x1d6c853d83726d43 +593, 0xc8655511cc7fcafc +594, 0x301503eb125a9b0e +595, 0xb3108e4532016b11 +596, 0xbb7ab6245da9cb3d +597, 0x18004c49116d85eb +598, 0x3480849c20f61129 +599, 0xe28f45157463937b +600, 0x8e85e61060f2ce1 +601, 0x1673da4ec589ba5e +602, 0x74b9a6bd1b194712 +603, 0xed39e147fa8b7601 +604, 0x28ce54019102ca77 +605, 0x42e0347f6d7a2f30 +606, 0xb6a908d1c4814731 +607, 0x16c3435e4e9a126d +608, 0x8880190514c1ad54 +609, 0xfffd86229a6f773c +610, 0x4f2420cdb0aa1a93 +611, 0xf8e1acb4120fc1fa +612, 0x63a8c553ab36a2f2 +613, 0x86b88cf3c0a6a190 +614, 0x44d8b2801622c792 +615, 0xf6eae14e93082ff1 +616, 0xd9ed4f5d1b8fac61 +617, 0x1808ce17f4e1f70 +618, 0x446e83ea336f262f +619, 0xc7c802b04c0917b7 +620, 0x626f45fd64968b73 +621, 0x9ffa540edc9b2c5c +622, 0xa96a1e219e486af8 +623, 0x2bb8963884e887a1 +624, 0xba7f68a5d029e3c4 +625, 0xefc45f44392d9ca0 +626, 0x98d77762503c5eab +627, 0xd89bcf62f2da627c +628, 0xa3cab8347f833151 +629, 0xa095b7595907d5c7 +630, 0x3b3041274286181 +631, 0xb518db8919eb71fa +632, 0x187036c14fdc9a36 +633, 0xd06e28301e696f5d +634, 0xdbc71184e0c56492 +635, 0xfe51e9cae6125bfd +636, 0x3b12d17cd014df24 +637, 0x3b95e4e2c986ac1a +638, 0x29c1cce59fb2dea2 +639, 0x58c05793182a49d6 +640, 0xc016477e330d8c00 +641, 0x79ef335133ada5d +642, 0x168e2cad941203f3 +643, 0xf99d0f219d702ef0 +644, 0x655628068f8f135b +645, 0xdcdea51910ae3f92 +646, 0x8e4505039c567892 +647, 0x91a9ec7e947c89ae +648, 0x8717172530f93949 +649, 0x1c80aba9a440171a +650, 0x9c8f83f6ebe7441e +651, 0x6c05e1efea4aa7f9 +652, 0x10af696b777c01b +653, 0x5892e9d9a92fc309 +654, 0xd2ba7da71e709432 +655, 0x46378c7c3269a466 +656, 0x942c63dfe18e772c +657, 0x6245cf02ef2476f +658, 0x6f265b2759ea2aea +659, 0x5aa757f17d17f4a6 +660, 0x1ad6a3c44fa09be6 +661, 0xe861af14e7015fb8 +662, 0x86be2e7db388c77 +663, 0x5c7bba32b519e9a0 +664, 0x3feb314850c4437b +665, 0x97955add60cfb45b +666, 0xfdb536230a540bdc +667, 0xdac9d7bf6e58512e +668, 0x4894c00e474e8120 +669, 0xa1918a37739da366 +670, 0xa8097f2096532807 +671, 0x592afe50e6c5e643 +672, 0xd69050ee6dcb33dc +673, 0xa6956b262dd3c561 +674, 0x1a55c815555e63f7 +675, 0x2ec7fd37516de2bb +676, 0x8ec251d9c70e76ba +677, 0x9b76e4abafd2689 +678, 0x9ce3f5c751a57df1 +679, 0x915c4818bf287bc7 +680, 0x2293a0d1fe07c735 +681, 0x7627dcd5d5a66d3d +682, 0xb5e4f92cc49c7138 +683, 0x6fc51298731d268c +684, 0xd19800aa95441f87 +685, 0x14f70f31162fa115 +686, 0x41a3da3752936f59 +687, 0xbec0652be95652ee +688, 0x7aa4bdb1020a290f +689, 0x4382d0d9bee899ef +690, 0xe6d988ae4277d6ff +691, 0xe618088ccb2a32d1 +692, 0x411669dfaa899e90 +693, 0x234e2bf4ba76d9f +694, 0xe109fe4cb7828687 +695, 0x1fb96b5022b0b360 +696, 0x6b24ad76c061a716 +697, 0x7e1781d4d7ecee15 +698, 0xf20c2dbe82ba38ba +699, 0xeda8e8ae1d943655 +700, 0xa58d196e2a77eaec +701, 0x44564765a5995a0b +702, 0x11902fe871ecae21 +703, 0x2ea60279900e675d +704, 0x38427227c18a9a96 +705, 0xe0af01490a1b1b48 +706, 0x826f91997e057824 +707, 0x1e57308e6e50451 +708, 0xb42d469bbbfdc350 +709, 0xb9734cff1109c49b +710, 0x98967559bb9d364f +711, 0xd6be360041907c12 +712, 0xa86a1279122a1e21 +713, 0x26f99a8527bfc698 +714, 0xfa8b85758f28f5d6 +715, 0xe3057429940806ae +716, 0x4bee2d7e84f93b2b +717, 0x948350a76ea506f4 +718, 0xa139154488045e74 +719, 0x8893579ba5e78085 +720, 0x5f21c215c6a9e397 +721, 0x456134f3a59641dc +722, 0x92c0273f8e97a9c6 +723, 0xd2936c9c3f0c6936 +724, 0xcfa4221e752c4735 +725, 0x28cd5a7457355dca +726, 0xecdfdde23d90999f +727, 0x60631b2d494d032b +728, 0xf67289df269a827f +729, 0xcbe8011ef0f5b7ef +730, 0x20eea973c70a84f5 +731, 0xbe1fd200398557ce +732, 0xd2279ee030191bba +733, 0xf2bd4291dedaf819 +734, 0xfc6d167dbe8c402 +735, 0x39ac298da5d0044b +736, 0xceac026f5f561ce +737, 0x10a5b0bdd8ad60e6 +738, 0xdeb3c626df6d4bcb +739, 0x3c128962e77ff6ca +740, 0xc786262e9c67a0e5 +741, 0x4332855b3febcdc0 +742, 0x7bda9724d1c0e020 +743, 0x6a8c93399bc4df22 +744, 0xa9b20100ac707396 +745, 0xa11a3458502c4eb5 +746, 0xb185461c60478941 +747, 0x13131d56195b7ff6 +748, 0x8d55875ddbd4aa1c +749, 0xc09b67425f469aa5 +750, 0x39e33786cc7594c4 +751, 0x75e96db8e4b08b93 +752, 0xda01cd12a3275d1e +753, 0x2c49e7822344fab5 +754, 0x9bd5f10612514ca7 +755, 0x1c801a5c828e7332 +756, 0x29797d3f4f6c7b4c +757, 0xac992715e21e4e53 +758, 0xe40e89ee887ddb37 +759, 0x15189a2b265a783b +760, 0xa854159a52af5c5 +761, 0xb9d8a5a81c12bead +762, 0x3240cdc9d59e2a58 +763, 0x1d0b872234cf8e23 +764, 0xc01224cf6ce12cff +765, 0x2601e9f3905c8663 +766, 0xd4ecf9890168d6b4 +767, 0xa45db796d89bfdd5 +768, 0x9f389406dad64ab4 +769, 0xa5a851adce43ffe3 +770, 0xd0962c41c26e5aa9 +771, 0x8a671679e48510a4 +772, 0xc196dc0924a6bfeb +773, 0x3ead661043b549cb +774, 0x51af4ca737d405ac +775, 0xf4425b5c62275fb6 +776, 0x71e69d1f818c10f5 +777, 0xacaf4af2d3c70162 +778, 0x2e1f1d4fd7524244 +779, 0xe54fdd8f388890e8 +780, 0xfda0d33e84eb2b83 +781, 0x53965c5e392b81da +782, 0x5c92288267263097 +783, 0xcac1b431c878c66c +784, 0x36c0e1cf417241c6 +785, 0x5cc4d9cd1a36bf2c +786, 0x32e4257bb5d3e470 +787, 0x4aecff904adb44fb +788, 0x4d91a8e0d1d60cac +789, 0xa3b478388385b038 +790, 0x48d955f24eba70be +791, 0x310e4deb07f24f68 +792, 0x8853e73b1f30a5a +793, 0x278aee45c2a65c5 +794, 0xf6932eedbd62fb0b +795, 0xafb95958c82fafad +796, 0x78e807c18616c16c +797, 0xd7abadda7488ed9f +798, 0x2dd72e2572aa2ae6 +799, 0x6ec3791982c2be09 +800, 0x6865bb314fac478f +801, 0xa14dc0ce09000d1a +802, 0xb8081ad134da10f2 +803, 0xc4ac1534aa825ef5 +804, 0xd83aeb48ae2d538f +805, 0x38052027e3074be4 +806, 0xa9833e06ef136582 +807, 0x4f02d790ec9fd78 +808, 0xec2f60bc711c5bdc +809, 0x9253b0d12268e561 +810, 0xa8ac607fdd62c206 +811, 0x895e28ebc920289f +812, 0xe2fd42b154243ac7 +813, 0xc69cac2f776eee19 +814, 0xf4d4ac11db56d0dc +815, 0xa8d37049b9f39833 +816, 0x75abbf8a196c337c +817, 0xb115bb76750d27b8 +818, 0x39426d187839154 +819, 0xd488423e7f38bf83 +820, 0xbb92e0c76ecb6a62 +821, 0x3055a018ce39f4e3 +822, 0xc93fe0e907729bfb +823, 0x65985d17c5863340 +824, 0x2088ae081b2028e1 +825, 0x6e628de873314057 +826, 0x864377cccf573f0e +827, 0xae03f4c9aa63d132 +828, 0xb1db766d6404c66d +829, 0xdce5a22414a374b +830, 0x622155b777819997 +831, 0x69fe96e620371f3c +832, 0xa9c67dbc326d94fc +833, 0x932a84ae5dd43bab +834, 0xe2301a20f6c48c3f +835, 0x795d2e79c6477300 +836, 0xd8e3e631289521e7 +837, 0xae2684979002dfd6 +838, 0xc9c2392377550f89 +839, 0xa1b0c99d508ef7ec +840, 0x593aef3c5a5272ec +841, 0xe32e511a4b7162cd +842, 0xab3b81655f5a2857 +843, 0x1b535e1a0aaf053e +844, 0x5b33f56c1b6a07e2 +845, 0x782dc8cfcac4ef36 +846, 0xb3d4f256eecfd202 +847, 0xf73a6598f58c4f7e +848, 0xd5722189524870ae +849, 0x707878de6b995fc0 +850, 0xc3eb6ba73e3d7e8a +851, 0xca75c017655b75a7 +852, 0x1b29369ea3541e5f +853, 0x352e98858bdb58a3 +854, 0x1e4412d184b6b27d +855, 0x2d375ba0304b2d17 +856, 0x56c30fce69a5d08e +857, 0x6b8c2b0c06584bda +858, 0xde4dfff228c8c91f +859, 0xb7c9edd574e6287f +860, 0xf6078281c9fca2b2 +861, 0xb9b9a51de02a2f1e +862, 0xa411bef31c0103b0 +863, 0xc5facd8fc5e1d7a3 +864, 0x54e631c05ddf7359 +865, 0x815b42b3fd06c474 +866, 0xc9ac07566fda18ec +867, 0xd84ea62957bd8e15 +868, 0x5575f74b5cfd8803 +869, 0x5779a8d460c2e304 +870, 0xfd6e87e264a85587 +871, 0xa1d674daa320b26d +872, 0x2c3c3ec64b35afc4 +873, 0x393a274ff03e6935 +874, 0x1f40ecbac52c50ea +875, 0xc3de64fa324ffc0c +876, 0x56ae828b7f9deb04 +877, 0xe7c1a77b5c1f2cb3 +878, 0xa4c4aab19ea921cc +879, 0xec164c238825822c +880, 0xa6a3304770c03b03 +881, 0x3a63641d5b1e8123 +882, 0x42677be3a54617ef +883, 0xa2680423e3a200c0 +884, 0x8b17cf75f3f37277 +885, 0xe7ce65a49242be3d +886, 0x7f85934271323e4b +887, 0xcfb0f431f79a4fab +888, 0x392e4041a8505b65 +889, 0xd3e5daf0d8b25ea6 +890, 0x9447eff675d80f53 +891, 0xea27a9d53cfaeea8 +892, 0xe3f2335945a83ba +893, 0x8875a43ce216413b +894, 0xe49941f9eabce33e +895, 0x9357c1296683a5b1 +896, 0xf0f16439e81ee701 +897, 0x3181515295ffd79a +898, 0x9d7150fffd169ed8 +899, 0x2d6a1d281e255a72 +900, 0x81bf1286fb3a92b6 +901, 0x566d3079b499e279 +902, 0xc7939ca8f047341 +903, 0xb1f8050e7c2d59f6 +904, 0x605701045e7be192 +905, 0x51b73360e8e31a1c +906, 0x9f4ad54483ba9fe0 +907, 0xd3085b8fcf69d1c8 +908, 0xc3e7475026dc5f0b +909, 0x5800f8554b157354 +910, 0x37dfdf858cfcd963 +911, 0x3a1fce05ce385072 +912, 0xf495c062645c20c3 +913, 0xdcbeec2c3492c773 +914, 0xc38f427589d1d0b4 +915, 0x681ead60216a8184 +916, 0x4bd569c40cc88c41 +917, 0x49b0d442e130b7a2 +918, 0xee349156b7d1fa3f +919, 0x2bde2d2db055135b +920, 0xc6a460d2fbcb2378 +921, 0xd0f170494ff3dbb +922, 0xb294422492528a23 +923, 0xfc95873c854e7b86 +924, 0x6c9c3ad1797bb19c +925, 0xe0c06f2aab65062d +926, 0x58e32ce0f11e3a81 +927, 0xa745fcd729ff5036 +928, 0x599b249b2fc2cdb2 +929, 0x78f23b5b0dd5b082 +930, 0x6de3e957f549ecfc +931, 0x9d0712fa6d878756 +932, 0x9076e8554e4a413a +933, 0xf3185818c0294de8 +934, 0x5de7cdf4b455b9b6 +935, 0xb15f6908ed703f7d +936, 0x98c654dfedc6818 +937, 0x120502ab0e93ae42 +938, 0x67966a98a58dc120 +939, 0x1caa0fc628989482 +940, 0xd8b2c3cd480a8625 +941, 0x85c70071b3aed671 +942, 0xff385f8473714662 +943, 0xe2868e4bf3773b63 +944, 0x96cf8019b279298e +945, 0x8511cc930bd74800 +946, 0x5312e48fdd55f5ab +947, 0xfcdae564b52df78d +948, 0x9eee48373e652176 +949, 0x953788f6bcbc56b0 +950, 0xd1a3855dbd2f6b37 +951, 0x3ad32acf77f4d1e9 +952, 0x917c7be81b003e30 +953, 0x9ce817da1e2e9dfb +954, 0x2968983db162d44d +955, 0x1e005decef5828ad +956, 0xc38fe59d1aa4f3d5 +957, 0xf357f1710dc02f1d +958, 0x2613912a4c83ec67 +959, 0x832a11470b9a17cb +960, 0x5e85508a611f0dad +961, 0x2781131677f59d56 +962, 0xa82358d7d4b0237f +963, 0xfbf8b3cc030c3af6 +964, 0x68b2f68ac8a55adb +965, 0x3b6fcf353add0ada +966, 0xd1956049bcd15bd5 +967, 0x95b76f31c7f98b6d +968, 0x814b6690df971a84 +969, 0xdcf7959cddd819e4 +970, 0xcf8c72c5d804fc88 +971, 0x56883769c8945a22 +972, 0x1f034652f658cf46 +973, 0x41df1324cda235a1 +974, 0xeccd32524504a054 +975, 0x974e0910a04ec02c +976, 0x72104507b821f6db +977, 0x791f8d089f273044 +978, 0xe0f79a4f567f73c3 +979, 0x52fe5bea3997f024 +980, 0x5f8b9b446494f78 +981, 0xfd9f511947059190 +982, 0x3aea9dac6063bce3 +983, 0xbfdae4dfc24aee60 +984, 0xa82cdbbf0a280318 +985, 0xf460aae18d70aa9d +986, 0x997367cb204a57c4 +987, 0x616e21ab95ba05ef +988, 0x9bfc93bec116769f +989, 0x2b2ee27c37a3fa5b +990, 0xb25c6ed54006ee38 +991, 0xab04d4a5c69e69a5 +992, 0x6d2f6b45f2d8438f +993, 0x4ad2f32afc82f092 +994, 0x513d718908f709c0 +995, 0x5272aadc4fffca51 +996, 0xeb3f87e66156ef5d +997, 0xf8a3d5a46a86ba85 +998, 0xdb4548a86f27abfd +999, 0x57c05f47ff62380d diff --git a/EXE version/main/numpy/random/tests/data/sfc64-testset-1.csv b/EXE version/main/numpy/random/tests/data/sfc64-testset-1.csv new file mode 100644 index 00000000..4fffe695 --- /dev/null +++ b/EXE version/main/numpy/random/tests/data/sfc64-testset-1.csv @@ -0,0 +1,1001 @@ +seed, 0xdeadbeaf +0, 0xa475f55fbb6bc638 +1, 0xb2d594b6c29d971c +2, 0x275bc4ece4484fb1 +3, 0x569be72d9b3492fb +4, 0x89a5bb9b206a670c +5, 0xd951bfa06afdc3f9 +6, 0x7ee2e1029d52a265 +7, 0x12ef1d4de0cb4d4c +8, 0x41658ba8f0ef0280 +9, 0x5b650c82e4fe09c5 +10, 0x638a9f3e30ec4e94 +11, 0x147487fb2ba9233e +12, 0x89ef035603d2d1fb +13, 0xe66ca57a190e6cbe +14, 0x330f673740dd61fc +15, 0xc71d3dce2f8bb34e +16, 0x3c07c39ff150b185 +17, 0x5df952b6cae8f099 +18, 0x9f09f2b1f0ceac80 +19, 0x19598eee2d0c4c67 +20, 0x64e06483702e0ebd +21, 0xda04d1fdb545f7fa +22, 0xf2cf53b61a0c4f9b +23, 0xf0bb724ce196f66e +24, 0x71cefde55d9cf0f +25, 0x6323f62824a20048 +26, 0x1e93604680f14b4e +27, 0xd9d8fad1d4654025 +28, 0xf4ee25af2e76ca08 +29, 0x6af3325896befa98 +30, 0xad9e43abf5e04053 +31, 0xbf930e318ce09de3 +32, 0x61f9583b4f9ffe76 +33, 0x9b69d0b3d5ec8958 +34, 0xa608f250f9b2ca41 +35, 0x6fdba7073dc2bb5d +36, 0xa9d57601efea6d26 +37, 0xc24a88a994954105 +38, 0xc728b1f78d88fe5b +39, 0x88da88c2b083b3b2 +40, 0xa9e27f7303c76cfd +41, 0xc4c24608c29176eb +42, 0x5420b58466b972fd +43, 0xd2018a661b6756c8 +44, 0x7caed83d9573fc7 +45, 0x562a3d81b849a06a +46, 0x16588af120c21f2c +47, 0x658109a7e0eb4837 +48, 0x877aabb14d3822e1 +49, 0x95704c342c3745fe +50, 0xeeb8a0dc81603616 +51, 0x431bf94889290419 +52, 0xe4a9410ab92a5863 +53, 0xbc6be64ea60f12ba +54, 0x328a2da920015063 +55, 0x40f6b3bf8271ae07 +56, 0x4068ff00a0e854f8 +57, 0x1b287572ca13fa78 +58, 0xa11624a600490b99 +59, 0x4a04ef29eb7150fa +60, 0xcc9469ab5ffb739 +61, 0x99a6a9f8d95e782 +62, 0x8e90356573e7a070 +63, 0xa740b8fb415c81c4 +64, 0x47eccef67447f3da +65, 0x2c720afe3a62a49b +66, 0xe2a747f0a43eacf4 +67, 0xba063a87ab165576 +68, 0xbc1c78ed27feb5a3 +69, 0x285a19fa3974f9d +70, 0x489c61e704f5f0e3 +71, 0xf5ab04f6b03f238b +72, 0x7e25f88138a110dd +73, 0xc3d1cef3d7c1f1d1 +74, 0xc3de6ec64d0d8e00 +75, 0x73682a15b6cc5088 +76, 0x6fecbeb319163dc5 +77, 0x7e100d5defe570a1 +78, 0xad2af9af076dce57 +79, 0x3c65100e23cd3a9a +80, 0x4b442cc6cfe521bb +81, 0xe89dc50f8ab1ef75 +82, 0x8b3c6fdc2496566 +83, 0xdfc50042bc2c308c +84, 0xe39c5f158b33d2b2 +85, 0x92f6adefdfeb0ac +86, 0xdf5808a949c85b3e +87, 0x437384021c9dace9 +88, 0xa7b5ed0d3d67d8f +89, 0xe1408f8b21da3c34 +90, 0xa1bba125c1e80522 +91, 0x7611dc4710385264 +92, 0xb00a46ea84082917 +93, 0x51bf8002ffa87cef +94, 0x9bb81013e9810adc +95, 0xd28f6600013541cd +96, 0xc2ca3b1fa7791c1f +97, 0x47f9ad58f099c82c +98, 0x4d1bb9458469caf9 +99, 0xca0b165b2844257 +100, 0xc3b2e667d075dc66 +101, 0xde22f71136a3dbb1 +102, 0x23b4e3b6f219e4c3 +103, 0x327e0db4c9782f66 +104, 0x9365506a6c7a1807 +105, 0x3e868382dedd3be7 +106, 0xff04fa6534bcaa99 +107, 0x96621a8862995305 +108, 0x81bf39cb5f8e1df7 +109, 0x79b684bb8c37af7a +110, 0xae3bc073c3cde33c +111, 0x7805674112c899ac +112, 0xd95a27995abb20f2 +113, 0x71a503c57b105c40 +114, 0x5ff00d6a73ec8acc +115, 0x12f96391d91e47c2 +116, 0xd55ca097b3bd4947 +117, 0x794d79d20468b04 +118, 0x35d814efb0d7a07d +119, 0xfa9ac9bd0aae76d3 +120, 0xa77b8a3711e175cd +121, 0xe6694fbf421f9489 +122, 0xd8f1756525a1a0aa +123, 0xe38dfa8426277433 +124, 0x16b640c269bbcd44 +125, 0x2a7a5a67ca24cfeb +126, 0x669039c28d5344b4 +127, 0x2a445ee81fd596bb +128, 0x600df94cf25607e0 +129, 0x9358561a7579abff +130, 0xee1d52ea179fc274 +131, 0x21a8b325e89d31be +132, 0x36fc0917486eec0a +133, 0x3d99f40717a6be9f +134, 0x39ac140051ca55ff +135, 0xcef7447c26711575 +136, 0xf22666870eff441d +137, 0x4a53c6134e1c7268 +138, 0xd26de518ad6bdb1b +139, 0x1a736bf75b8b0e55 +140, 0xef1523f4e6bd0219 +141, 0xb287b32fd615ad92 +142, 0x2583d6af5e841dd5 +143, 0x4b9294aae7ca670c +144, 0xf5aa4a84174f3ca9 +145, 0x886300f9e0dc6376 +146, 0x3611401e475ef130 +147, 0x69b56432b367e1ac +148, 0x30c330e9ab36b7c4 +149, 0x1e0e73079a85b8d5 +150, 0x40fdfc7a5bfaecf +151, 0xd7760f3e8e75a085 +152, 0x1cc1891f7f625313 +153, 0xeece1fe6165b4272 +154, 0xe61111b0c166a3c1 +155, 0x2f1201563312f185 +156, 0xfd10e8ecdd2a57cb +157, 0x51cdc8c9dd3a89bf +158, 0xed13cc93938b5496 +159, 0x843816129750526b +160, 0xd09995cd6819ada +161, 0x4601e778d40607df +162, 0xef9df06bd66c2ea0 +163, 0xae0bdecd3db65d69 +164, 0xbb921a3c65a4ae9a +165, 0xd66698ce8e9361be +166, 0xacdc91647b6068f4 +167, 0xe505ef68f2a5c1c0 +168, 0xd6e62fd27c6ab137 +169, 0x6a2ba2c6a4641d86 +170, 0x9c89143715c3b81 +171, 0xe408c4e00362601a +172, 0x986155cbf5d4bd9d +173, 0xb9e6831728c893a7 +174, 0xb985497c3bf88d8c +175, 0xd0d729214b727bec +176, 0x4e557f75fece38a +177, 0x6572067fdfd623ca +178, 0x178d49bb4d5cd794 +179, 0xe6baf59f60445d82 +180, 0x5607d53518e3a8d2 +181, 0xba7931adb6ebbd61 +182, 0xe853576172611329 +183, 0xe945daff96000c44 +184, 0x565b9ba3d952a176 +185, 0xcdb54d4f88c584c8 +186, 0x482a7499bee9b5e5 +187, 0x76560dd0affe825b +188, 0x2a56221faa5ca22c +189, 0x7729be5b361f5a25 +190, 0xd6f2195795764876 +191, 0x59ef7f8f423f18c5 +192, 0x7ebefed6d02adde1 +193, 0xcfec7265329c73e5 +194, 0x4fd8606a5e59881c +195, 0x95860982ae370b73 +196, 0xdecfa33b1f902acc +197, 0xf9b8a57400b7c0a6 +198, 0xd20b822672ec857b +199, 0x4eb81084096c7364 +200, 0xe535c29a44d9b6ad +201, 0xdef8b48ebacb2e29 +202, 0x1063bc2b8ba0e915 +203, 0xe4e837fb53d76d02 +204, 0x4df935db53579fb8 +205, 0xa30a0c8053869a89 +206, 0xe891ee58a388a7b5 +207, 0x17931a0c64b8a985 +208, 0xaf2d350b494ce1b3 +209, 0x2ab9345ffbcfed82 +210, 0x7de3fe628a2592f0 +211, 0x85cf54fab8b7e79d +212, 0x42d221520edab71b +213, 0x17b695b3af36c233 +214, 0xa4ffe50fe53eb485 +215, 0x1102d242db800e4d +216, 0xc8dc01f0233b3b6 +217, 0x984a030321053d36 +218, 0x27fa8dc7b7112c0e +219, 0xba634dd8294e177f +220, 0xe67ce34b36332eb +221, 0x8f1351e1894fb41a +222, 0xb522a3048761fd30 +223, 0xc350ad9bc6729edc +224, 0xe0ed105bd3c805e1 +225, 0xa14043d2b0825aa7 +226, 0xee7779ce7fc11fdf +227, 0xc0fa8ba23a60ab25 +228, 0xb596d1ce259afbad +229, 0xaa9b8445537fdf62 +230, 0x770ab2c700762e13 +231, 0xe812f1183e40cc1 +232, 0x44bc898e57aefbbd +233, 0xdd8a871df785c996 +234, 0x88836a5e371eb36b +235, 0xb6081c9152623f27 +236, 0x895acbcd6528ca96 +237, 0xfb67e33ddfbed435 +238, 0xaf7af47d323ce26 +239, 0xe354a510c3c39b2d +240, 0x5cacdedda0672ba3 +241, 0xa440d9a2c6c22b09 +242, 0x6395099f48d64304 +243, 0xc11cf04c75f655b5 +244, 0x1c4e054d144ddb30 +245, 0x3e0c2db89d336636 +246, 0x127ecf18a5b0b9a7 +247, 0x3b50551a88ea7a73 +248, 0xbd27003e47f1f684 +249, 0xf32d657782baac9b +250, 0x727f5cabf020bc9 +251, 0x39c1c1c226197dc7 +252, 0x5552c87b35deeb69 +253, 0x64d54067b5ce493f +254, 0x3494b091fe28dda0 +255, 0xdf0278bc85ee2965 +256, 0xdef16fec25efbd66 +257, 0xe2be09f578c4ce28 +258, 0xd27a9271979d3019 +259, 0x427f6fcd71845e3 +260, 0x26b52c5f81ec142b +261, 0x98267efc3986ad46 +262, 0x7bf4165ddb7e4374 +263, 0xd05f7996d7941010 +264, 0x3b3991de97b45f14 +265, 0x9068217fb4f27a30 +266, 0xd8fe295160afc7f3 +267, 0x8a159fab4c3bc06f +268, 0x57855506d19080b6 +269, 0x7636df6b3f2367a4 +270, 0x2844ee3abd1d5ec9 +271, 0xe5788de061f51c16 +272, 0x69e78cc9132a164 +273, 0xacd53cde6d8cd421 +274, 0xb23f3100068e91da +275, 0x4140070a47f53891 +276, 0xe4a422225a96e53a +277, 0xb82a8925a272a2ac +278, 0x7c2f9573590fe3b7 +279, 0xbaf80764db170575 +280, 0x955abffa54358368 +281, 0x355ce7460614a869 +282, 0x3700ede779a4afbf +283, 0x10a6ec01d92d68cd +284, 0x3308f5a0a4c0afef +285, 0x97b892d7601136c9 +286, 0x4955c3b941b8552e +287, 0xca85aa67e941961d +288, 0xb1859ae5db28e9d2 +289, 0x305d072ac1521fbd +290, 0xed52a868996085bb +291, 0x723bfa6a76358852 +292, 0x78d946ecd97c5fb3 +293, 0x39205b30a8e23e79 +294, 0xb927e3d086baadbe +295, 0xa18d6946136e1ff5 +296, 0xdab6f0b51c1eb5ff +297, 0xf0a640bf7a1af60c +298, 0xf0e81db09004d0d4 +299, 0xfe76cebdbe5a4dde +300, 0x2dafe9cc3decc376 +301, 0x4c871fdf1af34205 +302, 0xe79617d0c8fa893b +303, 0xee658aaad3a141f7 +304, 0xfd91aa74863e19f1 +305, 0x841b8f55c103cc22 +306, 0x22766ed65444ad5d +307, 0x56d03d1beca6c17a +308, 0x5fd4c112c92036ae +309, 0x75466ae58a5616dc +310, 0xfbf98b1081e802a9 +311, 0xdc325e957bf6d8f5 +312, 0xb08da7015ebd19b7 +313, 0xf25a9c0944f0c073 +314, 0xf4625bafa0ced718 +315, 0x4349c9e093a9e692 +316, 0x75a9ccd4dd8935cb +317, 0x7e6cf9e539361e91 +318, 0x20fdd22fb6edd475 +319, 0x5973021b57c2311f +320, 0x75392403667edc15 +321, 0xed9b2156ea70d9f1 +322, 0xf40c114db50b64a0 +323, 0xe26bb2c9eef20c62 +324, 0x409c1e3037869f03 +325, 0xcdfd71fdda3b7f91 +326, 0xa0dfae46816777d6 +327, 0xde060a8f61a8deb8 +328, 0x890e082a8b0ca4fc +329, 0xb9f2958eddf2d0db +330, 0xd17c148020d20e30 +331, 0xffdc9cc176fe7201 +332, 0xffb83d925b764c1 +333, 0x817ea639e313da8d +334, 0xa4dd335dd891ca91 +335, 0x1342d25a5e81f488 +336, 0xfa7eb9c3cf466b03 +337, 0xfe0a423d44b185d0 +338, 0x101cfd430ab96049 +339, 0x7b5d3eda9c4504b +340, 0xe20ccc006e0193f1 +341, 0xf54ccddedebc5df0 +342, 0xc0edd142bd58f1db +343, 0x3831f40d378d2430 +344, 0x80132353f0a88289 +345, 0x688f23c419d03ef8 +346, 0x4c6837e697884066 +347, 0x699387bb2e9a3a8f +348, 0x8996f860342448d8 +349, 0xb0f80dff99bfa5cc +350, 0x3e927a7f9ea12c8e +351, 0xd7e498d1e5f9dff3 +352, 0x78ecb97bb3f864cc +353, 0x3c4ffd069a014d38 +354, 0xf8d5073a1e09b4d4 +355, 0x8717e854f9faef23 +356, 0xfbcc5478d8d0ad7 +357, 0xd3cd8b233ca274ff +358, 0x8bd8f11f79beb265 +359, 0xf64498a832d8fd0e +360, 0xb01bba75112131ec +361, 0x55572445a7869781 +362, 0x7b56622f18cb3d7a +363, 0x7f192c9e075bdb83 +364, 0xd9a112f836b83ff3 +365, 0x68673b37269653dc +366, 0xe46a9433fb6a0879 +367, 0x127d756ca4779001 +368, 0xc1378e8b1e8eab94 +369, 0x1006edb0f51d078c +370, 0xc6dd53961232d926 +371, 0x9a4aeef44038256d +372, 0xd357f4fa652d4f5f +373, 0x59f3d2cc3378598 +374, 0xe76e6207a824a7fc +375, 0x5fc5e33712ceffef +376, 0x77d24aeb0ccb1adc +377, 0x5be4b2826805659e +378, 0x257c69d787e64634 +379, 0x58dd52ca6bc727b1 +380, 0x3ab997767235ea33 +381, 0x986a2a7a966fad14 +382, 0xc900f8b27761dcc4 +383, 0x44991bdb13795700 +384, 0xe5c145a4fe733b2 +385, 0x56f041b56bffe0d3 +386, 0x5779c4fef8067996 +387, 0xa0fe8748e829532d +388, 0x840c1277d78d9dd4 +389, 0x37ebcb315432acbc +390, 0xf4bc8738433ba3be +391, 0x8b122993f2e10062 +392, 0xe1fe8481f2681ed5 +393, 0x8e23f1630d9f494a +394, 0xda24661a01b7d0b3 +395, 0x7a02942a179cee36 +396, 0xf1e08a3c09b71ac +397, 0x3dec2cc7ee0bd8fd +398, 0x1f3e480113d805d4 +399, 0xc061b973ad4e3f2c +400, 0x6bea750f17a66836 +401, 0xbc2add72eac84c25 +402, 0xcff058d3f97934ca +403, 0x54ccc30987778ec2 +404, 0x93449ec1e1469558 +405, 0xe2ff369eb0c6836 +406, 0x41c2df2d63bf8e55 +407, 0xf9302629b6c71be2 +408, 0xdd30376b8e5ab29a +409, 0x12db9e04f911d754 +410, 0x8d03d6cd359f1b97 +411, 0xe15956511abf1cee +412, 0x9b68e10e2c2fd940 +413, 0x2e28de6491c1ce53 +414, 0x52b329b72d0c109d +415, 0xc2c0b115f9da2a60 +416, 0x6ca084105271bbff +417, 0x49b92b8676058c1e +418, 0x767fc92a70f7e5a3 +419, 0x87ba4ed4b65a6aa0 +420, 0xf70b052e0a3975e9 +421, 0x3e925c3306db9eec +422, 0x43253f1d96ac9513 +423, 0xe3e04f1a1ea454c4 +424, 0x763e3f4cc81ba0c8 +425, 0x2a2721ac69265705 +426, 0xdf3b0ac6416ea214 +427, 0xa6a6b57450f3e000 +428, 0xc3d3b1ac7dbfe6ac +429, 0xb66e5e6f7d2e4ec0 +430, 0x43c65296f98f0f04 +431, 0xdb0f6e3ff974d842 +432, 0x3d6b48e02ebb203b +433, 0xd74674ebf09d8f27 +434, 0xbe65243c58fc1200 +435, 0x55eb210a68d42625 +436, 0x87badab097dbe883 +437, 0xada3fda85a53824f +438, 0xef2791e8f48cd37a +439, 0x3fe7fceb927a641a +440, 0xd3bffd3ff031ac78 +441, 0xb94efe03da4d18fb +442, 0x162a0ad8da65ea68 +443, 0x300f234ef5b7e4a6 +444, 0xa2a8b4c77024e4fb +445, 0x5950f095ddd7b109 +446, 0xded66dd2b1bb02ba +447, 0x8ec24b7fa509bcb6 +448, 0x9bede53d924bdad6 +449, 0xa9c3f46423be1930 +450, 0x6dfc90597f8de8b4 +451, 0xb7419ebc65b434f0 +452, 0xa6596949238f58b9 +453, 0x966cbade640829b8 +454, 0x58c74877bdcbf65e +455, 0xaa103b8f89b0c453 +456, 0x219f0a86e41179a4 +457, 0x90f534fc06ddc57f +458, 0x8db7cdd644f1affa +459, 0x38f91de0167127ac +460, 0xdcd2a65e4df43daa +461, 0x3e04f34a7e01f834 +462, 0x5b237eea68007768 +463, 0x7ff4d2b015921768 +464, 0xf786b286549d3d51 +465, 0xaefa053fc2c3884c +466, 0x8e6a8ff381515d36 +467, 0x35b94f3d0a1fce3c +468, 0x165266d19e9abb64 +469, 0x1deb5caa5f9d8076 +470, 0x13ab91290c7cfe9d +471, 0x3651ca9856be3e05 +472, 0xe7b705f6e9cccc19 +473, 0xd6e7f79668c127ed +474, 0xa9faf37154896f92 +475, 0x89fbf190603e0ab1 +476, 0xb34d155a86f942d0 +477, 0xb2d4400a78bfdd76 +478, 0x7c0946aca8cfb3f0 +479, 0x7492771591c9d0e8 +480, 0xd084d95c5ca2eb28 +481, 0xb18d12bd3a6023e +482, 0xea217ed7b864d80b +483, 0xe52f69a755dd5c6f +484, 0x127133993d81c4aa +485, 0xe07188fcf1670bfb +486, 0x178fbfe668e4661d +487, 0x1c9ee14bb0cda154 +488, 0x8d043b96b6668f98 +489, 0xbc858986ec96ca2b +490, 0x7660f779d528b6b7 +491, 0xd448c6a1f74ae1d3 +492, 0x178e122cfc2a6862 +493, 0x236f000abaf2d23b +494, 0x171b27f3f0921915 +495, 0x4c3ff07652f50a70 +496, 0x18663e5e7d3a66ca +497, 0xb38c97946c750cc9 +498, 0xc5031aae6f78f909 +499, 0x4d1514e2925e95c1 +500, 0x4c2184a741dabfbb +501, 0xfd410364edf77182 +502, 0xc228157f863ee873 +503, 0x9856fdc735cc09fc +504, 0x660496cd1e41d60e +505, 0x2edf1d7e01954c32 +506, 0xd32e94639bdd98cf +507, 0x8e153f48709a77d +508, 0x89357f332d2d6561 +509, 0x1840d512c97085e6 +510, 0x2f18d035c9e26a85 +511, 0x77b88b1448b26d5b +512, 0xc1ca6ef4cdae0799 +513, 0xcc203f9e4508165f +514, 0xeaf762fbc9e0cbbe +515, 0xc070c687f3c4a290 +516, 0xd49ed321068d5c15 +517, 0x84a55eec17ee64ee +518, 0x4d8ee685298a8871 +519, 0x9ff5f17d7e029793 +520, 0x791d7d0d62e46302 +521, 0xab218b9114e22bc6 +522, 0x4902b7ab3f7119a7 +523, 0x694930f2e29b049e +524, 0x1a3c90650848999f +525, 0x79f1b9d8499c932b +526, 0xfacb6d3d55e3c92f +527, 0x8fd8b4f25a5da9f5 +528, 0xd037dcc3a7e62ae7 +529, 0xfecf57300d8f84f4 +530, 0x32079b1e1dc12d48 +531, 0xe5f8f1e62b288f54 +532, 0x97feba3a9c108894 +533, 0xd279a51e1899a9a0 +534, 0xd68eea8e8e363fa8 +535, 0x7394cf2deeca9386 +536, 0x5f70b0c80f1dbf10 +537, 0x8d646916ed40462 +538, 0xd253bb1c8a12bbb6 +539, 0x38f399a821fbd73e +540, 0x947523a26333ac90 +541, 0xb52e90affbc52a37 +542, 0xcf899cd964654da4 +543, 0xdf66ae9cca8d99e7 +544, 0x6051478e57c21b6a +545, 0xffa7dc975af3c1da +546, 0x195c7bff2d1a8f5 +547, 0x64f12b6575cf984d +548, 0x536034cb842cf9e1 +549, 0x180f247ce5bbfad +550, 0x8ced45081b134867 +551, 0x532bbfdf426710f3 +552, 0x4747933e74c4f54d +553, 0x197a890dc4793401 +554, 0x76c7cc2bd42fae2 +555, 0xdabfd67f69675dd0 +556, 0x85c690a68cdb3197 +557, 0xe482cec89ce8f92 +558, 0x20bc9fb7797011b1 +559, 0x76dc85a2185782ad +560, 0x3df37c164422117a +561, 0x99211f5d231e0ab0 +562, 0xef7fd794a0a91f4 +563, 0x419577151915f5fe +564, 0x3ce14a0a7135dae3 +565, 0x389b57598a075d6a +566, 0x8cc2a9d51b5af9aa +567, 0xe80a9beffbd13f13 +568, 0x65e96b22ea8a54d8 +569, 0x79f38c4164138ede +570, 0xd1955846cba03d81 +571, 0x60359fe58e4f26d6 +572, 0x4ea724f585f8d13e +573, 0x316dfdbadc801a3c +574, 0x20aa29b7c6dd66fe +575, 0x65eaf83a6a008caa +576, 0x407000aff1b9e8cb +577, 0xb4d49bfb2b268c40 +578, 0xd4e6fe8a7a0f14a9 +579, 0xe34afef924e8f58e +580, 0xe377b0c891844824 +581, 0x29c2e20c112d30c8 +582, 0x906aad1fe0c18a95 +583, 0x308385f0efbb6474 +584, 0xf23900481bf70445 +585, 0xfdfe3ade7f937a55 +586, 0xf37aae71c33c4f97 +587, 0x1c81e3775a8bed85 +588, 0x7eb5013882ce35ea +589, 0x37a1c1692495818d +590, 0x3f90ae118622a0ba +591, 0x58e4fe6fea29b037 +592, 0xd10ff1d269808825 +593, 0xbce30edb60c21bba +594, 0x123732329afd6fee +595, 0x429b4059f797d840 +596, 0x421166568a8c4be1 +597, 0x88f895c424c1bd7f +598, 0x2adaf7a7b9f781cb +599, 0xa425644b26cb698 +600, 0x8cc44d2486cc5743 +601, 0xdb9f357a33abf6ba +602, 0x1a57c4ea77a4d70c +603, 0x1dea29be75239e44 +604, 0x463141a137121a06 +605, 0x8fecfbbe0b8a9517 +606, 0x92c83984b3566123 +607, 0x3b1c69180ed28665 +608, 0x14a6073425ea8717 +609, 0x71f4c2b3283238d7 +610, 0xb3d491e3152f19f +611, 0x3a0ba3a11ebac5d2 +612, 0xddb4d1dd4c0f54ac +613, 0xdb8f36fe02414035 +614, 0x1cf5df5031b1902c +615, 0x23a20ed12ef95870 +616, 0xf113e573b2dedcbb +617, 0x308e2395cde0a9fa +618, 0xd377a22581c3a7da +619, 0xe0ced97a947a66fb +620, 0xe44f4de9cd754b00 +621, 0x2344943337d9d1bf +622, 0x4b5ae5e2ea6e749c +623, 0x9b8d2e3ef41d1c01 +624, 0x59a5a53ebbd24c6b +625, 0x4f7611bf9e8a06fb +626, 0xea38c7b61361cd06 +627, 0xf125a2bfdd2c0c7 +628, 0x2df8dcb5926b9ebb +629, 0x233e18720cc56988 +630, 0x974c61379b4aa95e +631, 0xc7fe24c1c868910b +632, 0x818fd1affc82a842 +633, 0xcee92a952a26d38e +634, 0x8962f575ebcbf43 +635, 0x7770687e3678c460 +636, 0xdfb1db4ed1298117 +637, 0xb9db54cb03d434d3 +638, 0x34aebbf2244257ad +639, 0xd836db0cb210c490 +640, 0x935daed7138957cd +641, 0x3cd914b14e7948fd +642, 0xd0472e9ed0a0f7f0 +643, 0xa9df33dca697f75e +644, 0x15e9ea259398721a +645, 0x23eeba0f970abd60 +646, 0x2217fdf8bbe99a12 +647, 0x5ea490a95717b198 +648, 0xf4e2bfc28280b639 +649, 0x9d19916072d6f05c +650, 0x5e0387cab1734c6a +651, 0x93c2c8ac26e5f01e +652, 0xb0d934354d957eb1 +653, 0xee5099a1eef3188c +654, 0x8be0abca8edc1115 +655, 0x989a60845dbf5aa3 +656, 0x181c7ed964eee892 +657, 0x49838ea07481288d +658, 0x17dbc75d66116b2e +659, 0xa4cafb7a87c0117e +660, 0xab2d0ae44cdc2e6e +661, 0xdf802f2457e7da6 +662, 0x4b966c4b9187e124 +663, 0x62de9db6f4811e1a +664, 0x1e20485968bc62 +665, 0xe9ac288265caca94 +666, 0xc5c694d349aa8c1a +667, 0x3d67f2083d9bdf10 +668, 0x9a2468e503085486 +669, 0x9d6acd3dc152d1a3 +670, 0xca951e2aeee8df77 +671, 0x2707371af9cdd7b0 +672, 0x2347ae6a4eb5ecbd +673, 0x16abe5582cb426f +674, 0x523af4ff980bbccb +675, 0xb07a0f043e3694aa +676, 0x14d7c3da81b2de7 +677, 0xf471f1b8ac22305b +678, 0xdb087ffff9e18520 +679, 0x1a352db3574359e8 +680, 0x48d5431502cc7476 +681, 0x7c9b7e7003dfd1bf +682, 0x4f43a48aae987169 +683, 0x9a5d3eb66dedb3e9 +684, 0xa7b331af76a9f817 +685, 0xba440154b118ab2d +686, 0x64d22344ce24c9c6 +687, 0xa22377bd52bd043 +688, 0x9dfa1bb18ca6c5f7 +689, 0xdccf44a92f644c8b +690, 0xf623d0a49fd18145 +691, 0x556d5c37978e28b3 +692, 0xad96e32ce9d2bb8b +693, 0x2e479c120be52798 +694, 0x7501cf871af7b2f7 +695, 0xd02536a5d026a5b8 +696, 0x4b37ff53e76ab5a4 +697, 0xdb3a4039caaeab13 +698, 0x6cbd65e3b700c7be +699, 0x7367abd98761a147 +700, 0xf4f9ba216a35aa77 +701, 0xf88ca25ce921eb86 +702, 0xb211de082ec2cbf2 +703, 0xdd94aa46ec57e12e +704, 0xa967d74ad8210240 +705, 0xdaa1fada8cfa887 +706, 0x85901d081c4488ee +707, 0xcf67f79a699ef06 +708, 0x7f2f1f0de921ee14 +709, 0x28bc61e9d3f2328b +710, 0x3332f2963faf18e5 +711, 0x4167ac71fcf43a6 +712, 0x843c1746b0160b74 +713, 0xd9be80070c578a5e +714, 0xbd7250c9af1473e7 +715, 0x43f78afaa3647899 +716, 0x91c6b5dd715a75a5 +717, 0x29cc66c8a07bfef3 +718, 0x3f5c667311dc22be +719, 0x4f49cd47958260cd +720, 0xbef8be43d920b64e +721, 0x7a892a5f13061d8b +722, 0x9532f40125c819b1 +723, 0x924fca3045f8a564 +724, 0x9b2c6442453b0c20 +725, 0x7e21009085b8e793 +726, 0x9b98c17e17af59d2 +727, 0xba61acb73e3ae89a +728, 0xb9d61a710555c138 +729, 0xc2a425d80978974b +730, 0xa275e13592da7d67 +731, 0xe962103202d9ad0f +732, 0xbdf8367a4d6f33fd +733, 0xe59beb2f8648bdc8 +734, 0xb4c387d8fbc4ac1c +735, 0x5e3f276b63054b75 +736, 0xf27e616aa54d8464 +737, 0x3f271661d1cd7426 +738, 0x43a69dbee7502c78 +739, 0x8066fcea6df059a1 +740, 0x3c10f19409bdc993 +741, 0x6ba6f43fb21f23e0 +742, 0x9e182d70a5bccf09 +743, 0x1520783d2a63a199 +744, 0xba1dcc0c70b9cace +745, 0x1009e1e9b1032d8 +746, 0xf632f6a95fb0315 +747, 0x48e711c7114cbfff +748, 0xef281dcec67debf7 +749, 0x33789894d6abf59b +750, 0x6c8e541fffbe7f9c +751, 0x85417f13b08e0a88 +752, 0x9a581e36d589608f +753, 0x461dca50b1befd35 +754, 0x5a3231680dde6462 +755, 0xcc57acf729780b97 +756, 0x50301efef62e1054 +757, 0x675d042cd4f6bbc9 +758, 0x1652fdd3794384c9 +759, 0x1c93bbeeb763cd4d +760, 0x44b7240c4b105242 +761, 0x4c6af2a1b606ccfb +762, 0x18fc43ece2ec1a40 +763, 0x859a5511aeae8acb +764, 0x2f56826f1996ad2f +765, 0xa8e95ce8bb363bdf +766, 0xf4da396054e50e4b +767, 0x5493865e9895883c +768, 0x768e4c8b332ac0e3 +769, 0x32195d2aa583fca5 +770, 0xf2f353f21266bc15 +771, 0x43cddf1d021307d +772, 0x6031e3aa30300e4a +773, 0x4f1298469ac6088f +774, 0x4b4d450bafac574e +775, 0x23e1cf9c0582a22b +776, 0x2e9036980db49cd0 +777, 0xe4e228b113c411b2 +778, 0x8bddcdb82b51706 +779, 0xd2a7ea8288593629 +780, 0x67fe90e98fdda61 +781, 0x7b63494dba95717b +782, 0x105625904510d782 +783, 0xdf4aa2242454e50a +784, 0x32541d6cd7d6c7e3 +785, 0x5661fb432591cf3b +786, 0xce920a5ed047bce7 +787, 0xed4178a3c96eea8f +788, 0xe378cd996e39863b +789, 0x169e1fdc8e2b05e1 +790, 0xaee1812ef7149a96 +791, 0x648571c7453d12c5 +792, 0xb7b6bc9328573c43 +793, 0xe7fb969078e270d7 +794, 0xdfc2b1b8985f6e6f +795, 0x862b6527ee39a1aa +796, 0x1ee329aea91d7882 +797, 0x20d25324f2fe704 +798, 0xbfcc47401fc3bbfd +799, 0x1515cdc8d48b2904 +800, 0xbd6eefe86284261c +801, 0x9b1f28e3b35f22ee +802, 0x842a29d35e5aecda +803, 0xf2346109ad370765 +804, 0x24d68add5a71afd9 +805, 0x4a691421613d91e2 +806, 0x60e3058b3c244051 +807, 0x79194905cdaa5de8 +808, 0xe0e2df35c01e8987 +809, 0xe29b78beffbb5e4a +810, 0xcdcdbc020218c19e +811, 0x5ae0af8c16feae43 +812, 0x8109292feeaf14fa +813, 0x34113f7508dfa521 +814, 0xc062ac163f56730a +815, 0xf1660e66ec6d4c4c +816, 0x5966c55f60151c80 +817, 0x3865ae8ec934b17 +818, 0x472a7314afb055ec +819, 0x7a24277309a44a44 +820, 0x556e02dd35d38baa +821, 0x9849611a1bc96ec1 +822, 0xd176f5d5a8eb0843 +823, 0x44db12ec60510030 +824, 0x272e3a06a0030078 +825, 0x7c4764dbefc075ea +826, 0x910712f3735c1183 +827, 0xd49a2da74ae7aff6 +828, 0xcf9b3e6e8f776d71 +829, 0x27789fe3ec481a02 +830, 0x86659f82c6b5912b +831, 0xe044b3dbf339158c +832, 0x99d81f6bb62a37b0 +833, 0x5f5830c246fada9a +834, 0xe68abab1eeb432cb +835, 0x49c5c5ace04e104 +836, 0x1ac3871b3fc6771b +837, 0x773b39f32d070652 +838, 0x9c4138c2ae58b1f3 +839, 0xac41c63d7452ac60 +840, 0x9248826b245359e1 +841, 0x99bba1c7a64f1670 +842, 0xe0dc99ff4ebb92f2 +843, 0x113638652740f87c +844, 0xebf51e94da88cfc +845, 0x5441c344b81b2585 +846, 0xe1e69e0bc2de652a +847, 0xe9ab6d64ae42ed1e +848, 0x879af8730e305f31 +849, 0x36b9ad912c7e00d6 +850, 0x83ef5e9fca853886 +851, 0xda54d48bb20ea974 +852, 0x32c6d93aefa92aa2 +853, 0x4e887b2c3391847d +854, 0x50966e815f42b1b8 +855, 0x53411ac087832837 +856, 0x46f64fef79df4f29 +857, 0xb34aae3924cd272c +858, 0xf5ad455869a0adbe +859, 0x8351ded7144edac8 +860, 0xeb558af089677494 +861, 0x36ed71d69293a8d6 +862, 0x659f90bf5431b254 +863, 0x53349102b7519949 +864, 0x3db83e20b1713610 +865, 0x6d63f96090556254 +866, 0x4cc0467e8f45c645 +867, 0xb8840c4bd5cd4091 +868, 0xbd381463cc93d584 +869, 0x203410d878c2066d +870, 0x2ebea06213cf71c8 +871, 0x598e8fb75e3fceb4 +872, 0xdcca41ceba0fce02 +873, 0x61bf69212b56aae5 +874, 0x97eed7f70c9114fa +875, 0xf46f37a8b7a063f9 +876, 0x66c8f4ffe5bd6efa +877, 0xe43fd6efda2d4e32 +878, 0x12d6c799e5ad01de +879, 0x9ac83e7f8b709360 +880, 0xbbb7bb3c1957513d +881, 0x7f87c08d4b3796b0 +882, 0x9a7d1d74b6aa4a5c +883, 0xa4314530ff741b6f +884, 0x99a80c6b6f15fca8 +885, 0xd2fec81d6d5fc3ce +886, 0x15a98be1cc40cea +887, 0x98693eb7719366f3 +888, 0x36ccdc2a9e9d4de8 +889, 0x3c8208f63d77df25 +890, 0xca2e376e2343df6 +891, 0xcc9b17cbb54420c6 +892, 0x8724c44a64d7dcb8 +893, 0x9d00c6949ff33869 +894, 0xf4f8e584d2699372 +895, 0x88f4748cdd5a2d53 +896, 0xe215072a1205bc6d +897, 0x190934fe6d740442 +898, 0x7fac5c0ab2af106d +899, 0x1b86633a0bd84fa1 +900, 0x1293e54318492dfb +901, 0x433324fd390f34b9 +902, 0x4c5eb2c67a44643b +903, 0x59a6e281c388b0dd +904, 0xe78e03f9c44623b7 +905, 0x91307a93c768fc3d +906, 0xde8867b004d8e3ff +907, 0xdf52c3f57b7c5862 +908, 0x993f3e1d10358a92 +909, 0x9ccb10bc3e18662d +910, 0x45093ce48a114c73 +911, 0xd59d05979d26330a +912, 0x417c0e03300119a9 +913, 0x1c336500f90cde81 +914, 0x1c8ccd29ead9b85b +915, 0xb76baf3e55d4d950 +916, 0x133ad6196c75fd7e +917, 0x34200b0cde7ed560 +918, 0x9c7c3dacb213c8d9 +919, 0xd97563c4fd9bf1b6 +920, 0x5d910e871835b6cb +921, 0x7d46c4733a16bdf9 +922, 0xe41d73194ddc87b2 +923, 0x7d3d8a0855a465a9 +924, 0x70c2a8b5d3f90c0f +925, 0x9e7565ca5dccfe12 +926, 0x2c0acb4577aa51b1 +927, 0x3d2cd211145b79c7 +928, 0x15a7b17aa6da7732 +929, 0xab44a3730c27d780 +930, 0xf008bd6c802bde3a +931, 0x82ed86ddf3619f77 +932, 0xaabe982ab15c49f9 +933, 0x9bcad8fa6d8e58a4 +934, 0x8f39ed8243718aa1 +935, 0xe9489340e03e3cb6 +936, 0xc722314f5eefb8d0 +937, 0x870e8869a436df59 +938, 0x4dae75b8087a8204 +939, 0xe1d790f6ec6e425b +940, 0xafd39ea1b1d0ed09 +941, 0xdf2c99e464ddf08f +942, 0x74936d859ab9644d +943, 0x3871302164250e73 +944, 0x764b68921e911886 +945, 0x2a1d024b26bb9d66 +946, 0x797fba43918e75b4 +947, 0x62ec6d24ccca335b +948, 0xf4bd8b951762b520 +949, 0x9d450dede9119397 +950, 0x5393a26d10f8c124 +951, 0x6b74769392896b57 +952, 0x7f61dbcc0e328581 +953, 0x64e1df3884d0d94 +954, 0xba77dcdf23738c37 +955, 0xf8e288bc0a177475 +956, 0x4a8abfd1702ecb7d +957, 0x53f22886694736a7 +958, 0x8fc982597ced3e3 +959, 0x1bc46090f820fff7 +960, 0x8bd31f965d02229f +961, 0x65cd0cb29996ee53 +962, 0x702e0f4fcf8c2e9f +963, 0x293b77bff307a9a0 +964, 0x125a986b8b305788 +965, 0x416b0eea428ebf3c +966, 0xeac85421ab0e8469 +967, 0x7f5496095019aa68 +968, 0x1a96d7afbc708e0 +969, 0xb91262e6766e01e1 +970, 0xd0a549cc4ccc6954 +971, 0x75a9a073f50c8a0d +972, 0xae275d2c1c6cd23c +973, 0xcf159b5ec5d28fd4 +974, 0x75d0838ce9b92b +975, 0xd4eddcee6dc4677f +976, 0x6a0a8ad5df6b75b8 +977, 0x6f3fd0ef0f13ecc4 +978, 0xb75a5826c1a8f8a8 +979, 0xd47098bbc7943766 +980, 0x3d4ddd62d5f23dd1 +981, 0x760a904e4583841c +982, 0x2afeb5022b4cf1f +983, 0x66d5f653729f0a13 +984, 0x9a6a5ab62980d30f +985, 0xc332f5643bbf8d5b +986, 0x848fb702e4056a90 +987, 0xa057beaf3f9e8c5f +988, 0x6cc603e4560a6c6a +989, 0xec761811a7b23211 +990, 0xb14aa4090a82aaa5 +991, 0xe29d9d028a5b2dbb +992, 0x5564e53738d68f97 +993, 0xfabca36542eaaf3b +994, 0xb9912fcb782020a2 +995, 0xe865e01b349284fd +996, 0x540b5ff11c5f9274 +997, 0x3463f64e1e7451dc +998, 0xe15d3e2f33b735f8 +999, 0xf5433336eadef6e diff --git a/EXE version/main/numpy/random/tests/data/sfc64-testset-2.csv b/EXE version/main/numpy/random/tests/data/sfc64-testset-2.csv new file mode 100644 index 00000000..70aebd5d --- /dev/null +++ b/EXE version/main/numpy/random/tests/data/sfc64-testset-2.csv @@ -0,0 +1,1001 @@ +seed, 0x0 +0, 0x91959e5fb96a6332 +1, 0x3c1dd8a25a7e9f21 +2, 0x657bdffc99798d9e +3, 0x1a04de320b19e022 +4, 0x65b92af0e5f3c61c +5, 0x9c84070ce8f743c0 +6, 0xbb10e573693cdb25 +7, 0xd65ea9e76b37fb6b +8, 0x503efd0e76c8ae66 +9, 0xd711dcd04c26d0f +10, 0x12f53f435814ac8c +11, 0xb392cd402cfc82bd +12, 0x461764550e06c889 +13, 0x716a48b3514e6979 +14, 0xdd0a322213c18ad7 +15, 0x6673a8ca0a05c4d7 +16, 0x2992ef333437f844 +17, 0xc4aaf7e8240b2aad +18, 0x6ab0a1af1f41474f +19, 0xb0bae400c226941d +20, 0xe5f80c2eeeab48c6 +21, 0x3832c6a93a4024bf +22, 0x280bd824fabe8368 +23, 0x66b626228321e5ff +24, 0xe0bdfba5325a307e +25, 0x3a5f65c6ef254e05 +26, 0x99ea12503cb02f94 +27, 0x5d01fd2db77d420b +28, 0x6959bf5f36b2368d +29, 0xd856e30c62b5f5be +30, 0xe33233e1d8140e66 +31, 0xb78be619d415fa8d +32, 0x4f943bb2cc63d3b +33, 0x9b1460b290952d81 +34, 0x19205d794826740e +35, 0x64617bd9d7a6a1ff +36, 0x30442124b55ea76a +37, 0xebbbc3b29d0333fc +38, 0x39235a0fe359751c +39, 0xf9629768891121aa +40, 0x32052f53f366e05a +41, 0x60cc5b412c925bc8 +42, 0xf8b7ecda1c0e5a9 +43, 0x195f036e170a2568 +44, 0xfe06d0381a9ca782 +45, 0x919d89e8b88eebbf +46, 0xa47fb30148cf0d43 +47, 0x5c983e99d5f9fd56 +48, 0xe7492cdb6a1d42cd +49, 0xf9cfe5c865b0cfd8 +50, 0x35b653367bbc3b99 +51, 0xb1d92f6f4d4e440b +52, 0x737e1d5bd87ed9c0 +53, 0x7a880ca1498f8e17 +54, 0x687dae8494f9a3f7 +55, 0x6bae1989f441d5d7 +56, 0x71ad3fa5a9195c2e +57, 0x16b3969779f5d03 +58, 0xd1bce2ac973f15b3 +59, 0xa114b1ee2ce0dcdd +60, 0x270d75c11eb1b8d5 +61, 0xc48ffa087c0a7bc +62, 0xaaf9dc48cda9848d +63, 0x8111cf10ef6e584d +64, 0x6736df6af40ee6f4 +65, 0x1a1a111682fbf98d +66, 0xeb217658e1cb3b5d +67, 0xcaf58a8b79de9dec +68, 0x25d0ffd63c88d7a1 +69, 0x4c498cd871b7f176 +70, 0x4069a6156eb0cf3c +71, 0xdf012f12edcdd867 +72, 0x7734c0ac8edb1689 +73, 0xed6960ac53dbc245 +74, 0x305e20da8868c661 +75, 0x5f0c7a3719956f95 +76, 0x66842bbe3b28895 +77, 0xb608bc9a31eac410 +78, 0xfcb17d5529503abd +79, 0x829ae5cbc29b92ee +80, 0x17f2f0027bc24f3a +81, 0x435926c33d8f44cc +82, 0x3ab899327098dbec +83, 0xaf78573b27f8ead8 +84, 0xa8b334fabcf8dc60 +85, 0xcdf3b366a6a303db +86, 0x8da9379dd62b34c8 +87, 0xb0ba511955f264a7 +88, 0x9d72e21a644f961d +89, 0xfac28382e2e7e710 +90, 0xd457065f048410aa +91, 0x1cae57d952563969 +92, 0x5a160a6223253e03 +93, 0x2c45df736d73c8bd +94, 0x7f651ebc6ad9cec5 +95, 0x77a6be96c7d2e7e7 +96, 0x1721fb1dbfd6546a +97, 0xf73f433ecff3c997 +98, 0xed1e80f680965bfe +99, 0x6705ad67a3003b30 +100, 0xac21134efcadb9f7 +101, 0x4d2ba0a91d456ac +102, 0x59da7b59434eb52b +103, 0x26c1d070fd414b5f +104, 0xed7079ddfce83d9a +105, 0x9277d21f88e0fb7a +106, 0xfae16b9a8d53d282 +107, 0xb08a0e2e405fdf7d +108, 0x2ea20df44229d6ec +109, 0x80e4634cd3612825 +110, 0xbe62e8aeba8f8a1a +111, 0x4981209769c190fb +112, 0xcec96ef14c7e1f65 +113, 0x73fe4457b47e7b53 +114, 0x1d66300677315c31 +115, 0xe26821290498c4cc +116, 0xf6110248fd8fb1c5 +117, 0x30fd7fe32dbd8be3 +118, 0x534ec9b910a2bd72 +119, 0x8f9bfe878bbf7382 +120, 0x4f4eb5295c0c2193 +121, 0xdeb22f03a913be9e +122, 0x40f716f8e2a8886c +123, 0xc65007d0e386cdb1 +124, 0x9bdd26d92b143a14 +125, 0xf644b0b77ea44625 +126, 0x75f5a53f6b01993a +127, 0xfe803e347bf41010 +128, 0x594bff5fa17bc360 +129, 0x3551edfb450373c7 +130, 0x898f9dad433615db +131, 0x923d2406daa26d49 +132, 0x99e07faccbc33426 +133, 0x7389f9ff4470f807 +134, 0xdc2a25957c6df90b +135, 0x33c6d8965ef3053f +136, 0x51a8f07e838f1ab +137, 0x91c5db369380274f +138, 0xc37de65ac56b207e +139, 0xfcc6d2375dde7f14 +140, 0xa4e6418bff505958 +141, 0x4b8b9f78e46953c4 +142, 0x255ab2e0f93cf278 +143, 0xdf650717af3d96ef +144, 0x2caa21cba3aae2b2 +145, 0xce7e46c6f393daa4 +146, 0x1d5b3573f9997ac7 +147, 0x5280c556e850847d +148, 0x32edc31bef920ad7 +149, 0xefaa6b0b08cf2c6 +150, 0x5151c99d97b111c5 +151, 0x35ccf4bf53d17590 +152, 0xa210d7bd8697b385 +153, 0xa9419f95738fbe61 +154, 0xdeccf93a1a4fdc90 +155, 0xd0ea3365b18e7a05 +156, 0x84122df6dcd31b9a +157, 0x33040a2125cea5f5 +158, 0xfe18306a862f6d86 +159, 0xdb97c8392e5c4457 +160, 0xc3e0fa735e80e422 +161, 0x7d106ff36467a0c1 +162, 0xb9825eecc720a76d +163, 0x7fefc6f771647081 +164, 0xf5df3f5b3977bf13 +165, 0x18fb22736d36f1e0 +166, 0xadc4637b4953abfc +167, 0x174e66d3e17974bd +168, 0xf1614c51df4db5db +169, 0x6664ecde5717b293 +170, 0xd5bc5b6839265c26 +171, 0xf6ca9ce1af3f1832 +172, 0xca696789a9d506ea +173, 0x7399c246c8f9d53 +174, 0xadf49049626417e2 +175, 0xbcd84af37d09ab91 +176, 0xbb41c177f3a3fa45 +177, 0x592becc814d55302 +178, 0xa88b4e65f6cfe5f7 +179, 0xa0a55e34ff879426 +180, 0x3c2ea6aa725b42b7 +181, 0x65ac4a407b1f9521 +182, 0xde63d53f7e88b556 +183, 0x18bc76696d015f40 +184, 0xd1363f2cd4c116a8 +185, 0x2fe859be19a48e4a +186, 0x83d6099b1415e656 +187, 0x43f2cbc1a4ee6410 +188, 0xb2eca3d3421c533d +189, 0xc52b98ea3f031f5d +190, 0xfe57eb01da07e9d1 +191, 0xf9377883537a6031 +192, 0x364030c05dac7add +193, 0x6815cb06b35d4404 +194, 0xceae2d4ce31894be +195, 0xc602bcdf6062bf6a +196, 0xc8e4bd8dcc6062e3 +197, 0x9c29e87b92a1a791 +198, 0x41e626b871ca9651 +199, 0x325c3d1fb8efbcd8 +200, 0x7dbbacf8e3419fb3 +201, 0x3602e72516bb7319 +202, 0x537a008ebd94d24b +203, 0xda7714fc9d4d161d +204, 0x1c8c73700e1b621b +205, 0x2749b80937d6c939 +206, 0x76ee6abac5b14d33 +207, 0xf18d1e92cb6a8b5c +208, 0x6ce9579d9291c721 +209, 0x60523c745a40e58 +210, 0x637f837fcc901757 +211, 0x2ff71b19661dc5b3 +212, 0x393ab586326ad16f +213, 0xa0970ea30fe742b7 +214, 0x570222d7f27fe5ae +215, 0x3b5806d43fd38629 +216, 0x129a0ad7420180c5 +217, 0x1c4726355778d52c +218, 0x7c1459cf77656499 +219, 0xfe038a0932132069 +220, 0x4c4cc317a937483a +221, 0xa333d24067e926ba +222, 0x401d9b6ab37f6ef2 +223, 0x87ad0e491ebe4a2a +224, 0xfc02f312e72d121d +225, 0xfde715b3b99767b2 +226, 0xd111c342ba521c92 +227, 0x83b221b10879c617 +228, 0x6a1bf5c01fdf4277 +229, 0x166bfc0c3f5892ee +230, 0x4608d556d7c57856 +231, 0x8d786857c95ece49 +232, 0x2d357445a1aca4ac +233, 0x79620dae28ecd796 +234, 0x90e715dc0f2201c4 +235, 0x173b68b4c9f4b665 +236, 0x4e14d040ebac4eef +237, 0xbd25960b4b892e +238, 0x911a199db6f1989d +239, 0xfe822d7c601fd2e0 +240, 0x9b4c1d58d8223a69 +241, 0x907c1891283843b0 +242, 0xf4868bf54061c4b2 +243, 0x17f8cd1fc24efd85 +244, 0xd44253f9af14c3aa +245, 0x16d0da0cb911d43c +246, 0x3c6a46615828e79a +247, 0x498591c1138e11a5 +248, 0xcc0f26336d0d6141 +249, 0x4d3ebc873212309a +250, 0x16bad7792d5c2c6a +251, 0x474215a80b2bbd11 +252, 0x7159848abd8492fc +253, 0x359341c50973685f +254, 0x27512ee7bf784a4a +255, 0x45228ea080f70447 +256, 0x880cab616500d50e +257, 0x12fae93f9830d56e +258, 0x6744ee64348d9acd +259, 0x484dada28cd2a828 +260, 0x98491d0729e41863 +261, 0x2f15aac43c2863b0 +262, 0x5727a34d77a1da0f +263, 0xa435cebef6a62eed +264, 0xd211697d57b053b0 +265, 0x65aa757b68bd557 +266, 0xe3a1b7a2d8a3e06a +267, 0x2adf64e67252a7a9 +268, 0xadadcb75cadee276 +269, 0x7934bc57ac8d97bf +270, 0xccff0d0f412e0606 +271, 0x101a82aa3e8f3db9 +272, 0xb0f2498094b4575c +273, 0xba2561d9ef26ed8a +274, 0xfbcd1268fc3febe1 +275, 0x9aa10bb19eb152e0 +276, 0xf496217a601a6d72 +277, 0xe4be1e4f2fa91363 +278, 0x473a602bf3dd68eb +279, 0xfe8ed2a48c26f4b5 +280, 0x20e94b1a00159476 +281, 0x93e1cb1c6af86ec7 +282, 0x4fcba3898f7442ba +283, 0x5150c3a3d94891df +284, 0x91cfce6c85b033ea +285, 0x625e8a832a806491 +286, 0x28c97ba72e3ec0b2 +287, 0x8e172de217c71ea1 +288, 0x926b80216c732639 +289, 0x28b19431a649ae3d +290, 0x57c039a6e95a3795 +291, 0xfbc354182fe52718 +292, 0x819dfd7c7d534cef +293, 0xabb4093a619ed44f +294, 0xe785b7ac6f656745 +295, 0xb647b4588b2f942f +296, 0x64cf870a14c72d27 +297, 0x6d4a4a2a0ba9b37e +298, 0x78bfb0427d7ce6b0 +299, 0x8dcc72b8bfc79ac6 +300, 0x1c14d915d5e76c99 +301, 0xaf48ddea6f096d79 +302, 0x51b39b67aa130d8 +303, 0x1aeeb39d4def06de +304, 0xd678092ffedfdd27 +305, 0x8f54787f325111d3 +306, 0xf2ca2e827beaa6bc +307, 0x339d134099e98545 +308, 0x1f6a8a7b33942e43 +309, 0x952c8065dbef669a +310, 0xe066aeb6690147f7 +311, 0xed25aa92cf58ebb6 +312, 0x7601edce215ef521 +313, 0xed1c5b396abd9434 +314, 0x4fd1e407535de9d5 +315, 0xccc8315a0d4d1441 +316, 0x85753e250bb86976 +317, 0xf232e469378761c3 +318, 0x81d691b8e9aef3c6 +319, 0x224a2f9cab0ad0e +320, 0x978f3d3e50007f4e +321, 0xd3713e6a6c0cbe60 +322, 0xcce8f1eadd41f80d +323, 0x34bda028a97d469 +324, 0x90e242fdf0f59183 +325, 0x4d749754fbc5f092 +326, 0x4399f5b7851cc87b +327, 0xcb921a5f25f6c5d7 +328, 0x120bf5d0162101 +329, 0x1304cc2aa352735a +330, 0xf7236c5d0d5d417b +331, 0xc31b320fc1654306 +332, 0xb468c6b23f3fb4e7 +333, 0xb5985b5bfaca4166 +334, 0x898285a1cd2f8375 +335, 0xa13493da372aa7c9 +336, 0x15c80c09c12634e7 +337, 0x9b765c5cc9d438bd +338, 0xee7da816a9201dcb +339, 0x92e269f73b5a248e +340, 0xa8086c5de81400ce +341, 0xe0053901853d42be +342, 0x821df32c012f433e +343, 0x17a6d69ca37387c7 +344, 0x2b10044bfba3501f +345, 0x8dfd262afc2e8515 +346, 0xd68c2c7b60226371 +347, 0xe81ac114e4416774 +348, 0x5896d60061ebc471 +349, 0xa996e3147811dbd1 +350, 0xa819c7b80ecb3661 +351, 0x982ad71b38afbc01 +352, 0xab152b65aa17b7fe +353, 0x4582bc282ef187ef +354, 0xab5a17fe8d9bc669 +355, 0x83664fa9cb0284b7 +356, 0x234c4b0091968f52 +357, 0x8ab5f51805688d37 +358, 0xe9e11186e0c53eda +359, 0x10df37ef1de2eccf +360, 0x780f1b0d52db968f +361, 0x50bd4ff292872cd5 +362, 0x51e681c265f5ad0 +363, 0x842c49660a527566 +364, 0x6e56ee026e9eda87 +365, 0x4cf39e40d8c80393 +366, 0x13e466df371f7e1f +367, 0xf2ce1799f38e028e +368, 0x833c8db7adc6ff0e +369, 0xc6e189abc2ec98f +370, 0xafebb3721283fec5 +371, 0xb49bc1eb5cc17bdc +372, 0xf1d02e818f5e4488 +373, 0xe5e9d5b41a1dd815 +374, 0xce8aca6573b1bfe5 +375, 0x9b0a5d70e268b1d5 +376, 0xf3c0503a8358f4de +377, 0x2681605dd755669d +378, 0xea265ca7601efc70 +379, 0xa93747f0a159439f +380, 0x62a86ede78a23e50 +381, 0xac8a18935c3d063c +382, 0x729c0a298f5059f5 +383, 0xbbf195e5b54399f4 +384, 0x38aa9d551f968900 +385, 0x3b3e700c58778caa +386, 0x68e6e33c4443957a +387, 0x7c56fc13eb269815 +388, 0xaf7daca39711804a +389, 0x50fde6d10f9544b3 +390, 0xf3d37159f6f6c03d +391, 0x82d298f5c1a71685 +392, 0x478661ac54c5002c +393, 0x6053768e1a324ae0 +394, 0xde8fb4a7e56707ea +395, 0xaa2809301faa8cf4 +396, 0x690a8d49fedd0722 +397, 0xe17c481b9c217de9 +398, 0x60d1d8a2b57288e3 +399, 0x149adfaadc6b0886 +400, 0xa3c18b6eb79cd5fa +401, 0x5774e3a091af5f58 +402, 0x2acca57ff30e5712 +403, 0x94454d67367c4b0c +404, 0x581b2985ac2df5ca +405, 0x71618e50744f3e70 +406, 0x270a7f3bd9a94ae6 +407, 0x3ef81af9bb36cd7b +408, 0x8a4a2592875254aa +409, 0x704ac6086fbb414a +410, 0xda774d5d3f57414d +411, 0xe20d3358b918ae9e +412, 0x934a6b9f7b91e247 +413, 0xf91649cde87ec42c +414, 0x248cec5f9b6ced30 +415, 0x56791809fd8d64ba +416, 0xf502b2765c1395f +417, 0x6b04ec973d75aa7f +418, 0xb0339f2794bb26f +419, 0x4c524636efbaea49 +420, 0x6bbf3876e9738748 +421, 0xf686524e754e9e24 +422, 0x8dafa05a42d19cd3 +423, 0xc5f069ab2434008e +424, 0x4fd64cc713cba76 +425, 0xdbf93450c881ed5f +426, 0x492e278ebabb59a2 +427, 0x993fddfde4542642 +428, 0xecde68a72c8d4e52 +429, 0xe0760b3074c311fd +430, 0x68dc0e7e06528707 +431, 0x52b50edf49c0fdc7 +432, 0xb2bd4185c138f412 +433, 0x431496d7e1d86f3 +434, 0xa4e605b037e26c44 +435, 0x58236ae1f0aca2b5 +436, 0x26c72c420fc314d8 +437, 0x20134e982ab99a2b +438, 0x544b59b8b211374b +439, 0x1301c42f3a14d993 +440, 0x52a6ea740f763b0f +441, 0xf209d70c2bebf119 +442, 0xac66a4ebc2aa1be +443, 0x683713ed35878788 +444, 0x2b5578acec06b80c +445, 0x86428efa11c45b36 +446, 0xb49010adb17d291e +447, 0x73b686bd8664b6be +448, 0x6d28ebf57b6884cc +449, 0x9712091230ff58d9 +450, 0xc9c91f74c38b286 +451, 0x776310ac41dc008e +452, 0x2f3739df0bf6a88e +453, 0x5792dc62b94db675 +454, 0x5715910d024b06af +455, 0xeb1dd745458da08 +456, 0xfce7b07ccfa851a7 +457, 0xc305f1e983ac368 +458, 0x485aa9519ac00bb0 +459, 0xa5354f6589fb0ea0 +460, 0x32fee02dfdbf4454 +461, 0x4d1ddc304bbefaaa +462, 0x789a270a1737e57e +463, 0x9f3072f4b1ed8156 +464, 0x4de3c00e89058120 +465, 0xb00a02529e0a86fa +466, 0x539f6f0edd845d9a +467, 0x85e578fe15a8c001 +468, 0xa12c8e1a72cce7d8 +469, 0xc6908abbc2b1828 +470, 0xcf70090774cbb38c +471, 0x3b636a6977b45d4a +472, 0xf0a731b220680b57 +473, 0x18973929f51443a8 +474, 0xe93e1fbe7eadabe +475, 0x8233730f0a6dfa02 +476, 0x66e50b6919b0ab74 +477, 0xb1aba87c97fd08a2 +478, 0xd4dffc1fbc117ad6 +479, 0x6f7fa65724b96e6a +480, 0x4bd5800dee92e0fa +481, 0xe18a959db6256da +482, 0xe53a291bc66df487 +483, 0xb7ec306a08651806 +484, 0x1847a6b80d2821e1 +485, 0xda50391283b14d39 +486, 0xacc4d3cd7cceb97a +487, 0x57f70185165b7bc6 +488, 0x302b6d597c3aaba7 +489, 0xa47f32d037eab51e +490, 0xe1509b4408abc559 +491, 0x4f30a1d7c2934157 +492, 0x2ad03e6c60b650b2 +493, 0x334d9c337b0a9064 +494, 0xc7f442821e7aac12 +495, 0xbcdeb09298694cdd +496, 0xe42402389f8f0fb4 +497, 0xe5de56af539df727 +498, 0x7017f9b2101ee240 +499, 0x1ee5e68d5b10001d +500, 0x436229051836387a +501, 0xcd532d6d6ec38fb7 +502, 0x30a66606fdf38272 +503, 0xfdaa2ab9cf798496 +504, 0x4277b4adec70e7df +505, 0x72cfc30256e0eaef +506, 0x3c3359fd9bd34917 +507, 0xb7aa89598856efb0 +508, 0xf72226f8bf299ef5 +509, 0x258c499275a4356f +510, 0x999a56bfc7f20d76 +511, 0x2b3e7432e20c18b +512, 0x2d1251332f760cb5 +513, 0x7420e0eea62157c5 +514, 0xe85c895aa27cec3d +515, 0x27a0545c7020d57c +516, 0xc68638a65b4fff0d +517, 0xfda473983a4ea747 +518, 0xd19fe65fb4c06062 +519, 0x6b1374e050ee15e4 +520, 0x80065ecd49bc4bef +521, 0x4ee655954bc838de +522, 0xe8fb777504a72299 +523, 0x86b652ea70f4bdde +524, 0xcdc9e0fbde7e4f33 +525, 0x352c0a50cd3ac56 +526, 0x4b8605d368be75dc +527, 0x1ac9ea8129efbc37 +528, 0x470325faa99f39c5 +529, 0x25dd7ef9adccf7a1 +530, 0x5ae2c7a03e965816 +531, 0xf733d2df59dacc7d +532, 0xa05bbf0a8a1a7a70 +533, 0xe8aa3f102846ef5f +534, 0xc9b85ec49ae71789 +535, 0xb904c14ed1cb1936 +536, 0x5ae618230b5f0444 +537, 0x97987fe47b5d7467 +538, 0xabb3aca8865ca761 +539, 0x38bfdf29d4508228 +540, 0x353654f408353330 +541, 0xeb7e92930ae4ef0d +542, 0xec50f1a7ca526b96 +543, 0xd5e2dc08b5697544 +544, 0x24c7fd69d5ec32df +545, 0x6f7e1095568b8620 +546, 0x6ed9c16ca13b3c8 +547, 0xe676ef460002130f +548, 0xa3a01a3992c4b430 +549, 0xe2130406c3b1f202 +550, 0xa8f7263e2aedcd20 +551, 0xc45d71ef2e35f507 +552, 0x37155594021da7ba +553, 0x22dc94f19de73159 +554, 0x7969fc6bffc5443f +555, 0x97def7e44faa6bfe +556, 0x8b940f5e8931d71f +557, 0xd95b1dd3f1a3fdd5 +558, 0x1c83bfdca615701a +559, 0xb7fcb56279ceca6b +560, 0xd84f8950f20dcd0 +561, 0xb03343698de3cbe0 +562, 0xf64565d448d71f71 +563, 0xda52b4676e0ae662 +564, 0xda39c2c05b4ffb91 +565, 0xb35e2560421f6a85 +566, 0x1a7b108d48ac3646 +567, 0xc4e264dc390d79ed +568, 0xa10727dfd9813256 +569, 0x40d23154e720e4f7 +570, 0xd9fa7cd7e313e119 +571, 0xcbf29107859e6013 +572, 0xc357338553d940b7 +573, 0x2641b7ab0bdfcbaa +574, 0xd12f2b6060533ae7 +575, 0xd0435aa626411c56 +576, 0x44af4a488a9cec72 +577, 0xb934232ea8fa5696 +578, 0x760a8b12072b572d +579, 0xfab18f9942cfa9b3 +580, 0x5676834c1fe84d16 +581, 0x9c54e4fddb353236 +582, 0xab49edfc9551f293 +583, 0x567f1fb45a871d +584, 0x32a967c873998834 +585, 0x99240aad380ef8d1 +586, 0x7f66cbd432859a64 +587, 0x4cdc8a4658166822 +588, 0x984e3984a5766492 +589, 0xa3b2d0a3d64d3d94 +590, 0x177f667172f2affc +591, 0xb1a90607a73a303f +592, 0xe600b6c36427f878 +593, 0xf758f9834cb7f466 +594, 0x8ee9fce4a3f36449 +595, 0xcb8f11533e7da347 +596, 0xe7cf647794dabd7c +597, 0xc9d92cfe6110806 +598, 0xea1335fa9145a1ec +599, 0xbc6c29821d094552 +600, 0x37b9d6a858cc8bc3 +601, 0xf24e4c694929893e +602, 0x55d025ce2d7d0004 +603, 0xccdc69acccf4267b +604, 0xc491c04340c222eb +605, 0xba50f75ecec9befb +606, 0x1ec7bd85b8fe3bb9 +607, 0xe4de66498c59ae8a +608, 0x38aa9e912712c889 +609, 0xcee0e43c5cc31566 +610, 0x72b69aa708fc7ed +611, 0xdff70b7f6fa96679 +612, 0xd6d71d82112aadc3 +613, 0x365177892cb78531 +614, 0xa54852b39de4f72c +615, 0x11dd5832bf16dd59 +616, 0x248a0f3369c97097 +617, 0xa14cec0260e26792 +618, 0x3517616ff142bed1 +619, 0x9b693ad39dab7636 +620, 0x739dff825e994434 +621, 0x67711e7356098c9 +622, 0xa81f8515d2fdf458 +623, 0xdac2908113fe568e +624, 0xe99944ebc6e2806a +625, 0x671728ca5b030975 +626, 0xfdad20edb2b4a789 +627, 0xedc6e466bd0369d2 +628, 0x88b5d469821f7e1b +629, 0x2eabf94049a522a5 +630, 0x247794b7a2f5a8e3 +631, 0x278942bdbe02c649 +632, 0xbe5a9a9196ab99c1 +633, 0x75955060866da1b5 +634, 0xdedcfa149273c0b5 +635, 0xdbeb7a57758f3867 +636, 0x7b9053347a2c8d5a +637, 0xa059b3f2eed338a5 +638, 0x59401a46ded3b79f +639, 0x38044ba56a6d19fb +640, 0x72c7221b4e77e779 +641, 0x526df3491a3a34da +642, 0xc3b31184ba16c0c2 +643, 0xd94c7144488624af +644, 0xcf966ee4dc373f91 +645, 0x62049e65dd416266 +646, 0x7c2adccb925bf8f +647, 0xd5fa5c22ed4ef8e1 +648, 0xd00134ebd11f2cd1 +649, 0xfbdf81767bed3634 +650, 0x62e8cc8ff66b6e26 +651, 0x3a72d6bcd4f2dcf7 +652, 0xf1cd45b1b46a86ed +653, 0x1271f98e0938bb9a +654, 0x82e6927e83dc31fa +655, 0x7b9b0e0acb67b92d +656, 0x6df503e397b2e701 +657, 0x93888f6fb561e0c3 +658, 0x393fb6069a40291 +659, 0x967a7d894cc0754d +660, 0x6e298996ad866333 +661, 0x5ff3cf5559d6ab46 +662, 0xd0d70508c40349f5 +663, 0xc64c66c0dd426b33 +664, 0x8fea340ee35c64dd +665, 0xf9cd381eb3060005 +666, 0xfcc37c2799fc0b11 +667, 0x6a37c91d65b489fa +668, 0x57231000fa0a0c9d +669, 0x55f6e292c6703f9a +670, 0xd0508ffbfa55a7a6 +671, 0x885db543276bdac8 +672, 0xc26dbe6a26b0e704 +673, 0x21f884874ebd709e +674, 0x711f0b6c8f732220 +675, 0x354d0a361eaee195 +676, 0x721344d8d30b006a +677, 0xa0e090a0d3a56f07 +678, 0x16b3d5d823a4952b +679, 0x59d7874bc9eae7b6 +680, 0x9bbb32710076455f +681, 0xd4fb22242ffabafd +682, 0xe1d4ac6770be1d89 +683, 0xb259cedebc73dc8a +684, 0x35faaa3b4246ab69 +685, 0x5d26addefdaee89 +686, 0x8e7ec350da0f3545 +687, 0xd0f316eed9f8fc79 +688, 0x98b2a52c9bf291b2 +689, 0xe4d294a8aca6a314 +690, 0x25bd554e6aa7673c +691, 0xcfde5dcba5be2a6c +692, 0xb5e01fb48d2d2107 +693, 0xe1caf28948028536 +694, 0xd434aa0a26f3ee9b +695, 0xd17723381641b8f6 +696, 0xfe73bd1f3f3768a2 +697, 0x1cc6b1abd08d67e9 +698, 0x247e328371a28de0 +699, 0x502e7942e5a9104a +700, 0x6a030fd242eb4502 +701, 0xa2ffe02744014ce8 +702, 0x59290763b18fe04e +703, 0xcf14241564271436 +704, 0xb0fb73c3c1503aff +705, 0x94e27c622f82137a +706, 0x747a5b406ac3e1f0 +707, 0x9a914e96a732031d +708, 0x59f68c6c8f078835 +709, 0x809d012c73eb4724 +710, 0x5b3c3b73e1b37d74 +711, 0xdde60ef3ba49cdf7 +712, 0x87a14e1f9c761986 +713, 0x4109b960604522af +714, 0x122d0e1ed0eb6bb9 +715, 0xadc0d29e80bfe33 +716, 0xa25b1b44f5fc8e4e +717, 0xbab85d8a9b793f20 +718, 0x825f4cbced0e7d1e +719, 0x2d6ae8807acb37ea +720, 0x8234420adce2e39 +721, 0x4a8ad4da6b804807 +722, 0x1e19f9bc215e5245 +723, 0x1d6f4848a916dd5e +724, 0x9ac40dfcdc2d39cc +725, 0x9f3524e3086155ec +726, 0x861fffc43124b2ef +727, 0xe640e3b756396372 +728, 0x41cb0f0c5e149669 +729, 0xe0bd37e1192e4205 +730, 0x62917d3858f4ce47 +731, 0xa36e7eb4d855820a +732, 0x204b90255a3bf724 +733, 0x66ee83a0175535bc +734, 0x2c14ce7c6b0c1423 +735, 0x85d9495fa514f70d +736, 0x5a4fe45ead874dbc +737, 0xe72248dcb8cfc863 +738, 0xfc21ff2932ed98cd +739, 0xcbba1edd735b5cad +740, 0x91ddc32809679bf5 +741, 0x192cdf2c7631ea1f +742, 0xbbc451ddf2ea286f +743, 0xad9e80cae2397a64 +744, 0x6918f0119b95d0e5 +745, 0xa40379017a27d70a +746, 0x1aaeddb600e61e1 +747, 0x15afd93cbd7adda9 +748, 0x156719bc2b757ff4 +749, 0x13d9a59e2b2df49d +750, 0x9a490986eaddf0a +751, 0xef9a350f0b3eb6b4 +752, 0x5de7f6295ba4fa4d +753, 0x7f37fd087c3fdb49 +754, 0xa9fe3749d6f3f209 +755, 0x50912ac036d9bfb +756, 0x982cb4d726a441f8 +757, 0x8ca8d8af59b872d0 +758, 0x7f8adfb0ceeade8a +759, 0xdad390ec742be44 +760, 0xa637944d0045be5b +761, 0x3569a3b3af807061 +762, 0x9599da8eae14511d +763, 0xc333e8d19589b01a +764, 0xfb9b524a20b571e1 +765, 0xbd9dc8b37ce5c3e1 +766, 0x142333005fa389ac +767, 0x1368bc37cd5bcce1 +768, 0x16094907ad6ecf73 +769, 0xb32c90dbba4c1130 +770, 0x82761d97c1747dd0 +771, 0x599f9f267ae3444d +772, 0x79ad3382994852e1 +773, 0x2511f06d9ef06e54 +774, 0xb35e6ab7d5bbddae +775, 0xfca9fa83a2988732 +776, 0x7d4350f0394ac3ba +777, 0xa52a9527bb176ea3 +778, 0xb49fa0ceb2aa8353 +779, 0x1f62e504d1468cc0 +780, 0xe1a77bfccce6efc3 +781, 0x776cdff4dc0d6797 +782, 0x56612e39b652c1f2 +783, 0x5f096a29294eda04 +784, 0x7978abc3aabd8b23 +785, 0x79dd875e0485b979 +786, 0x8a98aa4d5735d778 +787, 0xcca43940f69d2388 +788, 0xb2d4b156f144f93a +789, 0xbd528a676e9a862 +790, 0x2a394939c8e7ec5e +791, 0xb1da900c6efe4abc +792, 0x9869af479de4c034 +793, 0x78dbdfb88ac7c1db +794, 0x18cb169143088041 +795, 0xe69e5461c51a3e13 +796, 0x5389fa16ea98183c +797, 0xed7c80d1be1ea520 +798, 0x87246fc359758ced +799, 0xab323eba95fae4ed +800, 0xbc4c0dde7f8a1828 +801, 0xdb739f7955610b1a +802, 0xecd8c68c3434cc +803, 0x138c2eb88c477f44 +804, 0x28a65f96727aae41 +805, 0xdee879f2cf5629d +806, 0x684f0c90ef20070f +807, 0xa24a819ef5621800 +808, 0x8d0054f870e4fdcb +809, 0x99e8c6e695b600b +810, 0x50b705245891f7c3 +811, 0xc02eed3a6e58e51a +812, 0x443d64e95443606c +813, 0xca24959cfbd2d120 +814, 0xe072609ea48815bc +815, 0xbcc715026590315b +816, 0x3e76df24d7aa5938 +817, 0xd8ff04940d9b79ae +818, 0x54474ce790059bcd +819, 0x278390dd6aa70e81 +820, 0xf4df619fe35414e4 +821, 0x757d71270264e615 +822, 0x1e8a373699c11b23 +823, 0xef68c82046e67dd6 +824, 0xe280006599972620 +825, 0x234e095183b0f4d6 +826, 0xe3b7560ed9839749 +827, 0xcd5ec4086572332e +828, 0xc41c0d4aaa279108 +829, 0x4b9cd6126bc16a6d +830, 0x4a7252734f3e3dd0 +831, 0xb3132df156cc103a +832, 0xf9e4abbf7b64464a +833, 0xf936df27fb3c47b7 +834, 0x9142960873f6d71a +835, 0x4ba6aa3235cdb10d +836, 0x3237a2e765ba7766 +837, 0xd62f0b94c8e99e54 +838, 0x26b682f90a3ae41b +839, 0x40ad5e82072b6f81 +840, 0xd0198101f5484000 +841, 0xe4fac60ba11c332 +842, 0x472d0b0a95ef9d38 +843, 0x8512557aec5a3d8f +844, 0xef83169d3efd4de9 +845, 0x53fe89283e7a7676 +846, 0x2f50933053d69fc4 +847, 0x76f5e4362e2e53a2 +848, 0x8676fdccce28874a +849, 0x2737764c1fb1f821 +850, 0x4a6f70afc066ab55 +851, 0x27f8e151e310fca4 +852, 0xd606960ccbe85161 +853, 0xcce51d7ddd270a32 +854, 0xb4235999794875c2 +855, 0x580084e358e884 +856, 0x2159d5e6dc8586d7 +857, 0x87bd54d8599b3ba4 +858, 0x3e9ade6a2181664 +859, 0x5e6e140406d97623 +860, 0x511545d5aa0080a2 +861, 0xf49d78ed219aac57 +862, 0xbece1f9c90b8ea87 +863, 0x1c741cac36a2c514 +864, 0x7453c141047db967 +865, 0xd751832a5037eba2 +866, 0x71370a3f30ada1f7 +867, 0x7c01cf2dcb408631 +868, 0x1052a4fbdccc0fa1 +869, 0x13d525c9df3fb6c +870, 0xa3aa8dbfee760c55 +871, 0xc0288d200f5155cf +872, 0x79f4bcd12af567c3 +873, 0x8160d163bb548755 +874, 0x5cf2995fb69fd2df +875, 0xcc98ed01396639df +876, 0xad95f1d9cfc8256e +877, 0xa3df27d9fbdbfb9d +878, 0x83e5f5dda4d52929 +879, 0x9adc05043009f55b +880, 0xdfe8329dfde1c001 +881, 0x9980ccdd5298e6a2 +882, 0x636a7bd134f6ef56 +883, 0xef5ff780c4be6ba4 +884, 0x290d71dc77a56d16 +885, 0x6d65db9ff58de1e6 +886, 0x944b063b3805a696 +887, 0xce468ca2cce33008 +888, 0x5ba1ccb840f80f48 +889, 0x28ddce36fc9ad268 +890, 0x4f77ef254d507a21 +891, 0xce9b4057fadf3ab +892, 0xb518bc68298730e6 +893, 0xd2eb5b8e2ec665b0 +894, 0xe1583303a4f87344 +895, 0x9d5a0df4fbe1bed5 +896, 0x2ba9bc03ec8cfd07 +897, 0x479ed880a96ca669 +898, 0xcedf96338324771a +899, 0x312f4fc2da41ffaa +900, 0xa0eb9cf23b5e1ed8 +901, 0xf8f88f975dc3f539 +902, 0x4a37e185d0e96e0f +903, 0xf829654a5c0b46f9 +904, 0x3909cca7a7f8c7fb +905, 0x4c2e1d66ceb45105 +906, 0xaffaa19e1db8af87 +907, 0x9ec498246bd18c76 +908, 0x21d51558edc089da +909, 0xe8984112cd1b1561 +910, 0x7de1d2cf54b0c0e1 +911, 0xa06729aed50bfb9d +912, 0xcf19f733e5db19e1 +913, 0x70edf2624ab777cd +914, 0x46685becad10e078 +915, 0x825e0f6add46785 +916, 0x66d4af3b15f70de4 +917, 0xc676614b0666b21 +918, 0x282a916c864f5cb7 +919, 0x2707283a3f512167 +920, 0x37ff3afda7461623 +921, 0xc767eb1205e4ca86 +922, 0x46b359aecc4ea25b +923, 0x67fbbb797a16dbb1 +924, 0x64fd4ba57122290e +925, 0x8acc2a8ae59d8fac +926, 0x64a49298599acc67 +927, 0xedf00de67177ce30 +928, 0x1ea9d8d7e76d2d2c +929, 0x363fcac323f70eb2 +930, 0x19e6e3ec8a9712eb +931, 0xca541e96b0961f09 +932, 0x4d8fd34c2822ec46 +933, 0x2fdd56a50b32f705 +934, 0xaac2fcf251e3fd3 +935, 0xb0c600299e57045c +936, 0xd951ec589e909e38 +937, 0x4dc8414390cae508 +938, 0x537ef9d5e2321344 +939, 0xa57bc21fd31aa2dc +940, 0xa3a60df564183750 +941, 0xbe69a5ce2e369fb6 +942, 0x7744601f4c053ec8 +943, 0x3838452af42f2612 +944, 0xd4f0dad7115a54e9 +945, 0x629cf68d8009a624 +946, 0x2211c8fa34cb98cb +947, 0x8040b19e2213db83 +948, 0xb2a86d3ba2384fd +949, 0x4b85cec4f93f0dab +950, 0xc8d212d21ea6845d +951, 0x5b271a03a4fe2be0 +952, 0xff4f671319ad8434 +953, 0x8e615a919d5afa96 +954, 0xea7f47c53161160a +955, 0x33273930b13c6efc +956, 0x98eedda27fb59c3c +957, 0x188dc5e92e939677 +958, 0x9dbd0fa0911430f1 +959, 0x5b3dcf3fa75dfd2b +960, 0x3f03846febdb275d +961, 0x20cc24faea9e9cf6 +962, 0x854f3ac66199ff5d +963, 0x31169ac99d341e6f +964, 0xa85daed3c0bc1bbe +965, 0x64633711e71ba5dd +966, 0x530e79978dc73334 +967, 0x636f2ee6e20aef13 +968, 0xf6220f8b6d9a58fb +969, 0x425db8fa32141a7b +970, 0xac7c210f4b02be95 +971, 0x5fe8cfbe197a7754 +972, 0xfff7d40c79420ea +973, 0x5f8bab9ef4697b77 +974, 0xaf6fe54e45b23fe8 +975, 0xce79456ccc70bbce +976, 0x645ef680f48f1c00 +977, 0xa4dfac46e2028595 +978, 0x6bece4c41effc5df +979, 0xd316df886442641f +980, 0xa4f6ff994edd2a6 +981, 0x30281ae3cc49abe4 +982, 0x39acb7b663dea974 +983, 0x5e8829b01a7c06fb +984, 0x87bdb08cf027f13e +985, 0xdfa5ede784e802f6 +986, 0x46d03d55711c38cc +987, 0xa55a961fc9788306 +988, 0xbf09ded495a2e57a +989, 0xcd601b29a639cc16 +990, 0x2193ce026bfd1085 +991, 0x25ba27f3f225be13 +992, 0x6f685be82f64f2fe +993, 0xec8454108229c450 +994, 0x6e79d8d205447a44 +995, 0x9ed7b6a96b9ccd68 +996, 0xae7134b3b7f8ee37 +997, 0x66963de0e5ebcc02 +998, 0x29c8dcd0d17c423f +999, 0xfb8482c827eb90bc diff --git a/EXE version/main/numpy/rec.pyi b/EXE version/main/numpy/rec.pyi new file mode 100644 index 00000000..19863605 --- /dev/null +++ b/EXE version/main/numpy/rec.pyi @@ -0,0 +1,65 @@ +from typing import List + +from numpy import ( + format_parser as format_parser, + record as record, + recarray as recarray, +) + +__all__: List[str] + +def fromarrays( + arrayList, + dtype=..., + shape=..., + formats=..., + names=..., + titles=..., + aligned=..., + byteorder=..., +): ... +def fromrecords( + recList, + dtype=..., + shape=..., + formats=..., + names=..., + titles=..., + aligned=..., + byteorder=..., +): ... +def fromstring( + datastring, + dtype=..., + shape=..., + offset=..., + formats=..., + names=..., + titles=..., + aligned=..., + byteorder=..., +): ... +def fromfile( + fd, + dtype=..., + shape=..., + offset=..., + formats=..., + names=..., + titles=..., + aligned=..., + byteorder=..., +): ... +def array( + obj, + dtype=..., + shape=..., + offset=..., + strides=..., + formats=..., + names=..., + titles=..., + aligned=..., + byteorder=..., + copy=..., +): ... diff --git a/EXE version/main/numpy/testing/__init__.pyi b/EXE version/main/numpy/testing/__init__.pyi new file mode 100644 index 00000000..395626f6 --- /dev/null +++ b/EXE version/main/numpy/testing/__init__.pyi @@ -0,0 +1,113 @@ +import sys +import warnings +from typing import Any, List, ClassVar, Tuple, Set + +if sys.version_info >= (3, 8): + from typing import Final +else: + from typing_extensions import Final + +from unittest import ( + TestCase as TestCase, +) + +from unittest.case import ( + SkipTest as SkipTest, +) + +__all__: List[str] + +def run_module_suite(file_to_run=..., argv=...): ... + +class KnownFailureException(Exception): ... +class IgnoreException(Exception): ... + +class clear_and_catch_warnings(warnings.catch_warnings): + class_modules: ClassVar[Tuple[str, ...]] + modules: Set[str] + def __init__(self, record=..., modules=...): ... + def __enter__(self): ... + def __exit__(self, *exc_info): ... + +class suppress_warnings: + log: List[warnings.WarningMessage] + def __init__(self, forwarding_rule=...): ... + def filter(self, category=..., message=..., module=...): ... + def record(self, category=..., message=..., module=...): ... + def __enter__(self): ... + def __exit__(self, *exc_info): ... + def __call__(self, func): ... + +verbose: int +IS_PYPY: Final[bool] +HAS_REFCOUNT: Final[bool] +HAS_LAPACK64: Final[bool] + +def assert_(val, msg=...): ... +def memusage(processName=..., instance=...): ... +def jiffies(_proc_pid_stat=..., _load_time=...): ... +def build_err_msg( + arrays, + err_msg, + header=..., + verbose=..., + names=..., + precision=..., +): ... +def assert_equal(actual, desired, err_msg=..., verbose=...): ... +def print_assert_equal(test_string, actual, desired): ... +def assert_almost_equal( + actual, + desired, + decimal=..., + err_msg=..., + verbose=..., +): ... +def assert_approx_equal( + actual, + desired, + significant=..., + err_msg=..., + verbose=..., +): ... +def assert_array_compare( + comparison, + x, + y, + err_msg=..., + verbose=..., + header=..., + precision=..., + equal_nan=..., + equal_inf=..., +): ... +def assert_array_equal(x, y, err_msg=..., verbose=...): ... +def assert_array_almost_equal(x, y, decimal=..., err_msg=..., verbose=...): ... +def assert_array_less(x, y, err_msg=..., verbose=...): ... +def runstring(astr, dict): ... +def assert_string_equal(actual, desired): ... +def rundocs(filename=..., raise_on_error=...): ... +def raises(*args): ... +def assert_raises(*args, **kwargs): ... +def assert_raises_regex(exception_class, expected_regexp, *args, **kwargs): ... +def decorate_methods(cls, decorator, testmatch=...): ... +def measure(code_str, times=..., label=...): ... +def assert_allclose( + actual, + desired, + rtol=..., + atol=..., + equal_nan=..., + err_msg=..., + verbose=..., +): ... +def assert_array_almost_equal_nulp(x, y, nulp=...): ... +def assert_array_max_ulp(a, b, maxulp=..., dtype=...): ... +def assert_warns(warning_class, *args, **kwargs): ... +def assert_no_warnings(*args, **kwargs): ... +def tempdir(*args, **kwargs): ... +def temppath(*args, **kwargs): ... +def assert_no_gc_cycles(*args, **kwargs): ... +def break_cycles(): ... +def _assert_valid_refcount(op): ... +def _gen_alignment_data(dtype=..., type=..., max_size=...): ... diff --git a/EXE version/main/numpy/typing/_ufunc.pyi b/EXE version/main/numpy/typing/_ufunc.pyi new file mode 100644 index 00000000..b3b9fa95 --- /dev/null +++ b/EXE version/main/numpy/typing/_ufunc.pyi @@ -0,0 +1,405 @@ +"""A module with private type-check-only `numpy.ufunc` subclasses. + +The signatures of the ufuncs are too varied to reasonably type +with a single class. So instead, `ufunc` has been expanded into +four private subclasses, one for each combination of +`~ufunc.nin` and `~ufunc.nout`. + +""" + +from typing import ( + Any, + Generic, + List, + Optional, + overload, + Tuple, + TypeVar, + Union, +) + +from numpy import ufunc, _Casting, _OrderKACF +from numpy.typing import NDArray + +from ._shape import _ShapeLike +from ._scalars import _ScalarLike_co +from ._array_like import ArrayLike, _ArrayLikeBool_co, _ArrayLikeInt_co +from ._dtype_like import DTypeLike + +from typing_extensions import Literal, SupportsIndex + +_T = TypeVar("_T") +_2Tuple = Tuple[_T, _T] +_3Tuple = Tuple[_T, _T, _T] +_4Tuple = Tuple[_T, _T, _T, _T] + +_NTypes = TypeVar("_NTypes", bound=int) +_IDType = TypeVar("_IDType", bound=Any) +_NameType = TypeVar("_NameType", bound=str) + +# NOTE: In reality `extobj` should be a length of list 3 containing an +# int, an int, and a callable, but there's no way to properly express +# non-homogenous lists. +# Use `Any` over `Union` to avoid issues related to lists invariance. + +# NOTE: `reduce`, `accumulate`, `reduceat` and `outer` raise a ValueError for +# ufuncs that don't accept two input arguments and return one output argument. +# In such cases the respective methods are simply typed as `None`. + +# NOTE: Similarly, `at` won't be defined for ufuncs that return +# multiple outputs; in such cases `at` is typed as `None` + +# NOTE: If 2 output types are returned then `out` must be a +# 2-tuple of arrays. Otherwise `None` or a plain array are also acceptable + +class _UFunc_Nin1_Nout1(ufunc, Generic[_NameType, _NTypes, _IDType]): + @property + def __name__(self) -> _NameType: ... + @property + def ntypes(self) -> _NTypes: ... + @property + def identity(self) -> _IDType: ... + @property + def nin(self) -> Literal[1]: ... + @property + def nout(self) -> Literal[1]: ... + @property + def nargs(self) -> Literal[2]: ... + @property + def signature(self) -> None: ... + @property + def reduce(self) -> None: ... + @property + def accumulate(self) -> None: ... + @property + def reduceat(self) -> None: ... + @property + def outer(self) -> None: ... + + @overload + def __call__( + self, + __x1: _ScalarLike_co, + out: None = ..., + *, + where: Optional[_ArrayLikeBool_co] = ..., + casting: _Casting = ..., + order: _OrderKACF = ..., + dtype: DTypeLike = ..., + subok: bool = ..., + signature: Union[str, _2Tuple[Optional[str]]] = ..., + extobj: List[Any] = ..., + ) -> Any: ... + @overload + def __call__( + self, + __x1: ArrayLike, + out: Union[None, NDArray[Any], Tuple[NDArray[Any]]] = ..., + *, + where: Optional[_ArrayLikeBool_co] = ..., + casting: _Casting = ..., + order: _OrderKACF = ..., + dtype: DTypeLike = ..., + subok: bool = ..., + signature: Union[str, _2Tuple[Optional[str]]] = ..., + extobj: List[Any] = ..., + ) -> NDArray[Any]: ... + + def at( + self, + __a: NDArray[Any], + __indices: _ArrayLikeInt_co, + ) -> None: ... + +class _UFunc_Nin2_Nout1(ufunc, Generic[_NameType, _NTypes, _IDType]): + @property + def __name__(self) -> _NameType: ... + @property + def ntypes(self) -> _NTypes: ... + @property + def identity(self) -> _IDType: ... + @property + def nin(self) -> Literal[2]: ... + @property + def nout(self) -> Literal[1]: ... + @property + def nargs(self) -> Literal[3]: ... + @property + def signature(self) -> None: ... + + @overload + def __call__( + self, + __x1: _ScalarLike_co, + __x2: _ScalarLike_co, + out: None = ..., + *, + where: Optional[_ArrayLikeBool_co] = ..., + casting: _Casting = ..., + order: _OrderKACF = ..., + dtype: DTypeLike = ..., + subok: bool = ..., + signature: Union[str, _3Tuple[Optional[str]]] = ..., + extobj: List[Any] = ..., + ) -> Any: ... + @overload + def __call__( + self, + __x1: ArrayLike, + __x2: ArrayLike, + out: Union[None, NDArray[Any], Tuple[NDArray[Any]]] = ..., + *, + where: Optional[_ArrayLikeBool_co] = ..., + casting: _Casting = ..., + order: _OrderKACF = ..., + dtype: DTypeLike = ..., + subok: bool = ..., + signature: Union[str, _3Tuple[Optional[str]]] = ..., + extobj: List[Any] = ..., + ) -> NDArray[Any]: ... + + def at( + self, + __a: NDArray[Any], + __indices: _ArrayLikeInt_co, + __b: ArrayLike, + ) -> None: ... + + def reduce( + self, + array: ArrayLike, + axis: Optional[_ShapeLike] = ..., + dtype: DTypeLike = ..., + out: Optional[NDArray[Any]] = ..., + keepdims: bool = ..., + initial: Any = ..., + where: _ArrayLikeBool_co = ..., + ) -> Any: ... + + def accumulate( + self, + array: ArrayLike, + axis: SupportsIndex = ..., + dtype: DTypeLike = ..., + out: Optional[NDArray[Any]] = ..., + ) -> NDArray[Any]: ... + + def reduceat( + self, + array: ArrayLike, + indices: _ArrayLikeInt_co, + axis: SupportsIndex = ..., + dtype: DTypeLike = ..., + out: Optional[NDArray[Any]] = ..., + ) -> NDArray[Any]: ... + + # Expand `**kwargs` into explicit keyword-only arguments + @overload + def outer( + self, + __A: _ScalarLike_co, + __B: _ScalarLike_co, + *, + out: None = ..., + where: Optional[_ArrayLikeBool_co] = ..., + casting: _Casting = ..., + order: _OrderKACF = ..., + dtype: DTypeLike = ..., + subok: bool = ..., + signature: Union[str, _3Tuple[Optional[str]]] = ..., + extobj: List[Any] = ..., + ) -> Any: ... + @overload + def outer( # type: ignore[misc] + self, + __A: ArrayLike, + __B: ArrayLike, + *, + out: Union[None, NDArray[Any], Tuple[NDArray[Any]]] = ..., + where: Optional[_ArrayLikeBool_co] = ..., + casting: _Casting = ..., + order: _OrderKACF = ..., + dtype: DTypeLike = ..., + subok: bool = ..., + signature: Union[str, _3Tuple[Optional[str]]] = ..., + extobj: List[Any] = ..., + ) -> NDArray[Any]: ... + +class _UFunc_Nin1_Nout2(ufunc, Generic[_NameType, _NTypes, _IDType]): + @property + def __name__(self) -> _NameType: ... + @property + def ntypes(self) -> _NTypes: ... + @property + def identity(self) -> _IDType: ... + @property + def nin(self) -> Literal[1]: ... + @property + def nout(self) -> Literal[2]: ... + @property + def nargs(self) -> Literal[3]: ... + @property + def signature(self) -> None: ... + @property + def at(self) -> None: ... + @property + def reduce(self) -> None: ... + @property + def accumulate(self) -> None: ... + @property + def reduceat(self) -> None: ... + @property + def outer(self) -> None: ... + + @overload + def __call__( + self, + __x1: _ScalarLike_co, + __out1: None = ..., + __out2: None = ..., + *, + where: Optional[_ArrayLikeBool_co] = ..., + casting: _Casting = ..., + order: _OrderKACF = ..., + dtype: DTypeLike = ..., + subok: bool = ..., + signature: Union[str, _3Tuple[Optional[str]]] = ..., + extobj: List[Any] = ..., + ) -> _2Tuple[Any]: ... + @overload + def __call__( + self, + __x1: ArrayLike, + __out1: Optional[NDArray[Any]] = ..., + __out2: Optional[NDArray[Any]] = ..., + *, + out: _2Tuple[NDArray[Any]] = ..., + where: Optional[_ArrayLikeBool_co] = ..., + casting: _Casting = ..., + order: _OrderKACF = ..., + dtype: DTypeLike = ..., + subok: bool = ..., + signature: Union[str, _3Tuple[Optional[str]]] = ..., + extobj: List[Any] = ..., + ) -> _2Tuple[NDArray[Any]]: ... + +class _UFunc_Nin2_Nout2(ufunc, Generic[_NameType, _NTypes, _IDType]): + @property + def __name__(self) -> _NameType: ... + @property + def ntypes(self) -> _NTypes: ... + @property + def identity(self) -> _IDType: ... + @property + def nin(self) -> Literal[2]: ... + @property + def nout(self) -> Literal[2]: ... + @property + def nargs(self) -> Literal[4]: ... + @property + def signature(self) -> None: ... + @property + def at(self) -> None: ... + @property + def reduce(self) -> None: ... + @property + def accumulate(self) -> None: ... + @property + def reduceat(self) -> None: ... + @property + def outer(self) -> None: ... + + @overload + def __call__( + self, + __x1: _ScalarLike_co, + __x2: _ScalarLike_co, + __out1: None = ..., + __out2: None = ..., + *, + where: Optional[_ArrayLikeBool_co] = ..., + casting: _Casting = ..., + order: _OrderKACF = ..., + dtype: DTypeLike = ..., + subok: bool = ..., + signature: Union[str, _4Tuple[Optional[str]]] = ..., + extobj: List[Any] = ..., + ) -> _2Tuple[Any]: ... + @overload + def __call__( + self, + __x1: ArrayLike, + __x2: ArrayLike, + __out1: Optional[NDArray[Any]] = ..., + __out2: Optional[NDArray[Any]] = ..., + *, + out: _2Tuple[NDArray[Any]] = ..., + where: Optional[_ArrayLikeBool_co] = ..., + casting: _Casting = ..., + order: _OrderKACF = ..., + dtype: DTypeLike = ..., + subok: bool = ..., + signature: Union[str, _4Tuple[Optional[str]]] = ..., + extobj: List[Any] = ..., + ) -> _2Tuple[NDArray[Any]]: ... + +class _GUFunc_Nin2_Nout1(ufunc, Generic[_NameType, _NTypes, _IDType]): + @property + def __name__(self) -> _NameType: ... + @property + def ntypes(self) -> _NTypes: ... + @property + def identity(self) -> _IDType: ... + @property + def nin(self) -> Literal[2]: ... + @property + def nout(self) -> Literal[1]: ... + @property + def nargs(self) -> Literal[3]: ... + + # NOTE: In practice the only gufunc in the main name is `matmul`, + # so we can use its signature here + @property + def signature(self) -> Literal["(n?,k),(k,m?)->(n?,m?)"]: ... + @property + def reduce(self) -> None: ... + @property + def accumulate(self) -> None: ... + @property + def reduceat(self) -> None: ... + @property + def outer(self) -> None: ... + @property + def at(self) -> None: ... + + # Scalar for 1D array-likes; ndarray otherwise + @overload + def __call__( + self, + __x1: ArrayLike, + __x2: ArrayLike, + out: None = ..., + *, + casting: _Casting = ..., + order: _OrderKACF = ..., + dtype: DTypeLike = ..., + subok: bool = ..., + signature: Union[str, _3Tuple[Optional[str]]] = ..., + extobj: List[Any] = ..., + axes: List[_2Tuple[SupportsIndex]] = ..., + ) -> Any: ... + @overload + def __call__( + self, + __x1: ArrayLike, + __x2: ArrayLike, + out: Union[NDArray[Any], Tuple[NDArray[Any]]], + *, + casting: _Casting = ..., + order: _OrderKACF = ..., + dtype: DTypeLike = ..., + subok: bool = ..., + signature: Union[str, _3Tuple[Optional[str]]] = ..., + extobj: List[Any] = ..., + axes: List[_2Tuple[SupportsIndex]] = ..., + ) -> NDArray[Any]: ... diff --git a/EXE version/main/numpy/typing/tests/data/mypy.ini b/EXE version/main/numpy/typing/tests/data/mypy.ini new file mode 100644 index 00000000..548f7626 --- /dev/null +++ b/EXE version/main/numpy/typing/tests/data/mypy.ini @@ -0,0 +1,9 @@ +[mypy] +plugins = numpy.typing.mypy_plugin +show_absolute_path = True + +[mypy-numpy] +ignore_errors = True + +[mypy-numpy.*] +ignore_errors = True diff --git a/EXE version/main/palette.h b/EXE version/main/palette.h new file mode 100644 index 00000000..1ae4cf6d --- /dev/null +++ b/EXE version/main/palette.h @@ -0,0 +1,123 @@ +/* + pygame - Python Game Library + Copyright (C) 2000-2001 Pete Shinners + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this library; if not, write to the Free + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Pete Shinners + pete@shinners.org +*/ + +#ifndef PALETTE_H +#define PALETTE_H + +#include + +/* SDL 2 does not assign a default palette color scheme to a new 8 bit + * surface. Instead, the palette is set all white. This defines the SDL 1.2 + * default palette. + */ +static const SDL_Color default_palette_colors[] = { + {0, 0, 0, 255}, {0, 0, 85, 255}, {0, 0, 170, 255}, + {0, 0, 255, 255}, {0, 36, 0, 255}, {0, 36, 85, 255}, + {0, 36, 170, 255}, {0, 36, 255, 255}, {0, 73, 0, 255}, + {0, 73, 85, 255}, {0, 73, 170, 255}, {0, 73, 255, 255}, + {0, 109, 0, 255}, {0, 109, 85, 255}, {0, 109, 170, 255}, + {0, 109, 255, 255}, {0, 146, 0, 255}, {0, 146, 85, 255}, + {0, 146, 170, 255}, {0, 146, 255, 255}, {0, 182, 0, 255}, + {0, 182, 85, 255}, {0, 182, 170, 255}, {0, 182, 255, 255}, + {0, 219, 0, 255}, {0, 219, 85, 255}, {0, 219, 170, 255}, + {0, 219, 255, 255}, {0, 255, 0, 255}, {0, 255, 85, 255}, + {0, 255, 170, 255}, {0, 255, 255, 255}, {85, 0, 0, 255}, + {85, 0, 85, 255}, {85, 0, 170, 255}, {85, 0, 255, 255}, + {85, 36, 0, 255}, {85, 36, 85, 255}, {85, 36, 170, 255}, + {85, 36, 255, 255}, {85, 73, 0, 255}, {85, 73, 85, 255}, + {85, 73, 170, 255}, {85, 73, 255, 255}, {85, 109, 0, 255}, + {85, 109, 85, 255}, {85, 109, 170, 255}, {85, 109, 255, 255}, + {85, 146, 0, 255}, {85, 146, 85, 255}, {85, 146, 170, 255}, + {85, 146, 255, 255}, {85, 182, 0, 255}, {85, 182, 85, 255}, + {85, 182, 170, 255}, {85, 182, 255, 255}, {85, 219, 0, 255}, + {85, 219, 85, 255}, {85, 219, 170, 255}, {85, 219, 255, 255}, + {85, 255, 0, 255}, {85, 255, 85, 255}, {85, 255, 170, 255}, + {85, 255, 255, 255}, {170, 0, 0, 255}, {170, 0, 85, 255}, + {170, 0, 170, 255}, {170, 0, 255, 255}, {170, 36, 0, 255}, + {170, 36, 85, 255}, {170, 36, 170, 255}, {170, 36, 255, 255}, + {170, 73, 0, 255}, {170, 73, 85, 255}, {170, 73, 170, 255}, + {170, 73, 255, 255}, {170, 109, 0, 255}, {170, 109, 85, 255}, + {170, 109, 170, 255}, {170, 109, 255, 255}, {170, 146, 0, 255}, + {170, 146, 85, 255}, {170, 146, 170, 255}, {170, 146, 255, 255}, + {170, 182, 0, 255}, {170, 182, 85, 255}, {170, 182, 170, 255}, + {170, 182, 255, 255}, {170, 219, 0, 255}, {170, 219, 85, 255}, + {170, 219, 170, 255}, {170, 219, 255, 255}, {170, 255, 0, 255}, + {170, 255, 85, 255}, {170, 255, 170, 255}, {170, 255, 255, 255}, + {255, 0, 0, 255}, {255, 0, 85, 255}, {255, 0, 170, 255}, + {255, 0, 255, 255}, {255, 36, 0, 255}, {255, 36, 85, 255}, + {255, 36, 170, 255}, {255, 36, 255, 255}, {255, 73, 0, 255}, + {255, 73, 85, 255}, {255, 73, 170, 255}, {255, 73, 255, 255}, + {255, 109, 0, 255}, {255, 109, 85, 255}, {255, 109, 170, 255}, + {255, 109, 255, 255}, {255, 146, 0, 255}, {255, 146, 85, 255}, + {255, 146, 170, 255}, {255, 146, 255, 255}, {255, 182, 0, 255}, + {255, 182, 85, 255}, {255, 182, 170, 255}, {255, 182, 255, 255}, + {255, 219, 0, 255}, {255, 219, 85, 255}, {255, 219, 170, 255}, + {255, 219, 255, 255}, {255, 255, 0, 255}, {255, 255, 85, 255}, + {255, 255, 170, 255}, {255, 255, 255, 255}, {0, 0, 0, 255}, + {0, 0, 85, 255}, {0, 0, 170, 255}, {0, 0, 255, 255}, + {0, 36, 0, 255}, {0, 36, 85, 255}, {0, 36, 170, 255}, + {0, 36, 255, 255}, {0, 73, 0, 255}, {0, 73, 85, 255}, + {0, 73, 170, 255}, {0, 73, 255, 255}, {0, 109, 0, 255}, + {0, 109, 85, 255}, {0, 109, 170, 255}, {0, 109, 255, 255}, + {0, 146, 0, 255}, {0, 146, 85, 255}, {0, 146, 170, 255}, + {0, 146, 255, 255}, {0, 182, 0, 255}, {0, 182, 85, 255}, + {0, 182, 170, 255}, {0, 182, 255, 255}, {0, 219, 0, 255}, + {0, 219, 85, 255}, {0, 219, 170, 255}, {0, 219, 255, 255}, + {0, 255, 0, 255}, {0, 255, 85, 255}, {0, 255, 170, 255}, + {0, 255, 255, 255}, {85, 0, 0, 255}, {85, 0, 85, 255}, + {85, 0, 170, 255}, {85, 0, 255, 255}, {85, 36, 0, 255}, + {85, 36, 85, 255}, {85, 36, 170, 255}, {85, 36, 255, 255}, + {85, 73, 0, 255}, {85, 73, 85, 255}, {85, 73, 170, 255}, + {85, 73, 255, 255}, {85, 109, 0, 255}, {85, 109, 85, 255}, + {85, 109, 170, 255}, {85, 109, 255, 255}, {85, 146, 0, 255}, + {85, 146, 85, 255}, {85, 146, 170, 255}, {85, 146, 255, 255}, + {85, 182, 0, 255}, {85, 182, 85, 255}, {85, 182, 170, 255}, + {85, 182, 255, 255}, {85, 219, 0, 255}, {85, 219, 85, 255}, + {85, 219, 170, 255}, {85, 219, 255, 255}, {85, 255, 0, 255}, + {85, 255, 85, 255}, {85, 255, 170, 255}, {85, 255, 255, 255}, + {170, 0, 0, 255}, {170, 0, 85, 255}, {170, 0, 170, 255}, + {170, 0, 255, 255}, {170, 36, 0, 255}, {170, 36, 85, 255}, + {170, 36, 170, 255}, {170, 36, 255, 255}, {170, 73, 0, 255}, + {170, 73, 85, 255}, {170, 73, 170, 255}, {170, 73, 255, 255}, + {170, 109, 0, 255}, {170, 109, 85, 255}, {170, 109, 170, 255}, + {170, 109, 255, 255}, {170, 146, 0, 255}, {170, 146, 85, 255}, + {170, 146, 170, 255}, {170, 146, 255, 255}, {170, 182, 0, 255}, + {170, 182, 85, 255}, {170, 182, 170, 255}, {170, 182, 255, 255}, + {170, 219, 0, 255}, {170, 219, 85, 255}, {170, 219, 170, 255}, + {170, 219, 255, 255}, {170, 255, 0, 255}, {170, 255, 85, 255}, + {170, 255, 170, 255}, {170, 255, 255, 255}, {255, 0, 0, 255}, + {255, 0, 85, 255}, {255, 0, 170, 255}, {255, 0, 255, 255}, + {255, 36, 0, 255}, {255, 36, 85, 255}, {255, 36, 170, 255}, + {255, 36, 255, 255}, {255, 73, 0, 255}, {255, 73, 85, 255}, + {255, 73, 170, 255}, {255, 73, 255, 255}, {255, 109, 0, 255}, + {255, 109, 85, 255}, {255, 109, 170, 255}, {255, 109, 255, 255}, + {255, 146, 0, 255}, {255, 146, 85, 255}, {255, 146, 170, 255}, + {255, 146, 255, 255}, {255, 182, 0, 255}, {255, 182, 85, 255}, + {255, 182, 170, 255}, {255, 182, 255, 255}, {255, 219, 0, 255}, + {255, 219, 85, 255}, {255, 219, 170, 255}, {255, 219, 255, 255}, + {255, 255, 0, 255}, {255, 255, 85, 255}, {255, 255, 170, 255}, + {255, 255, 255, 255}}; + +static const int default_palette_size = + (int)(sizeof(default_palette_colors) / sizeof(SDL_Color)); + +#endif diff --git a/EXE version/main/pgarrinter.h b/EXE version/main/pgarrinter.h new file mode 100644 index 00000000..5ba096be --- /dev/null +++ b/EXE version/main/pgarrinter.h @@ -0,0 +1,26 @@ +/* array structure interface version 3 declarations */ + +#if !defined(PG_ARRAYINTER_HEADER) +#define PG_ARRAYINTER_HEADER + +static const int PAI_CONTIGUOUS = 0x01; +static const int PAI_FORTRAN = 0x02; +static const int PAI_ALIGNED = 0x100; +static const int PAI_NOTSWAPPED = 0x200; +static const int PAI_WRITEABLE = 0x400; +static const int PAI_ARR_HAS_DESCR = 0x800; + +typedef struct { + int two; /* contains the integer 2 -- simple sanity check */ + int nd; /* number of dimensions */ + char typekind; /* kind in array -- character code of typestr */ + int itemsize; /* size of each element */ + int flags; /* flags indicating how the data should be */ + /* interpreted */ + Py_intptr_t *shape; /* A length-nd array of shape information */ + Py_intptr_t *strides; /* A length-nd array of stride information */ + void *data; /* A pointer to the first element of the array */ + PyObject *descr; /* NULL or a data-description */ +} PyArrayInterface; + +#endif diff --git a/EXE version/main/pgbufferproxy.h b/EXE version/main/pgbufferproxy.h new file mode 100644 index 00000000..15076086 --- /dev/null +++ b/EXE version/main/pgbufferproxy.h @@ -0,0 +1,7 @@ +#ifndef PG_BUFPROXY_INTERNAL_H +#define PG_BUFPROXY_INTERNAL_H + +#include "include/pygame_bufferproxy.h" +#define PYGAMEAPI_BUFPROXY_NUMSLOTS 4 + +#endif /* ~PG_BUFPROXY_INTERNAL_H */ diff --git a/EXE version/main/pgcompat.h b/EXE version/main/pgcompat.h new file mode 100644 index 00000000..74139b96 --- /dev/null +++ b/EXE version/main/pgcompat.h @@ -0,0 +1,207 @@ +/* Python 2.x/3.x compatibility tools (internal) + */ +#ifndef PGCOMPAT_INTERNAL_H +#define PGCOMPAT_INTERNAL_H + +#include "include/pgcompat.h" + +#if PY_MAJOR_VERSION >= 3 + +#define PY3 1 + +/* Define some aliases for the removed PyInt_* functions */ +#define PyInt_Check(op) PyLong_Check(op) +#define PyInt_FromString PyLong_FromString +#define PyInt_FromLong PyLong_FromLong +#define PyInt_FromSize_t PyLong_FromSize_t +#define PyInt_FromSsize_t PyLong_FromSsize_t +#define PyInt_AsLong PyLong_AsLong +#define PyInt_AsSsize_t PyLong_AsSsize_t +#define PyInt_AsUnsignedLongMask PyLong_AsUnsignedLongMask +#define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask +#define PyInt_AS_LONG PyLong_AS_LONG +#define PyNumber_Int PyNumber_Long +/* Int and Long are identical in Py3 so only check one */ +#define INT_CHECK(op) PyLong_Check(op) + +/* Weakrefs flags changed in 3.x */ +#define Py_TPFLAGS_HAVE_WEAKREFS 0 + +/* Module init function returns new module instance. */ +#define MODINIT_RETURN(x) return x +#define MODINIT_DEFINE(mod_name) PyMODINIT_FUNC PyInit_##mod_name (void) +#define DECREF_MOD(mod) Py_DECREF (mod) + +/* Text interface. Use unicode strings. */ +#define Text_Type PyUnicode_Type +#define Text_Check PyUnicode_Check + +#ifndef PYPY_VERSION +#define Text_FromLocale(s) PyUnicode_DecodeLocale((s), "strict") +#else /* PYPY_VERSION */ +/* workaround: missing function for pypy */ +#define Text_FromLocale PyUnicode_FromString +#endif /* PYPY_VERSION */ + +#define Text_FromUTF8 PyUnicode_FromString +#define Text_FromUTF8AndSize PyUnicode_FromStringAndSize +#define Text_FromFormat PyUnicode_FromFormat +#define Text_GetSize PyUnicode_GetSize +#define Text_GET_SIZE PyUnicode_GET_SIZE + +/* Binary interface. Use bytes. */ +#define Bytes_Type PyBytes_Type +#define Bytes_Check PyBytes_Check +#define Bytes_Size PyBytes_Size +#define Bytes_AsString PyBytes_AsString +#define Bytes_AsStringAndSize PyBytes_AsStringAndSize +#define Bytes_FromStringAndSize PyBytes_FromStringAndSize +#define Bytes_FromFormat PyBytes_FromFormat +#define Bytes_AS_STRING PyBytes_AS_STRING +#define Bytes_GET_SIZE PyBytes_GET_SIZE +#define Bytes_AsDecodeObject PyBytes_AsDecodedObject + +#define Object_Unicode PyObject_Str + +#define IsTextObj(x) (PyUnicode_Check(x) || PyBytes_Check(x)) + +/* Renamed builtins */ +#define BUILTINS_MODULE "builtins" +#define BUILTINS_UNICODE "str" +#define BUILTINS_UNICHR "chr" + +/* Defaults for unicode file path encoding */ +#define UNICODE_DEF_FS_CODEC Py_FileSystemDefaultEncoding +#if defined(MS_WIN32) +#define UNICODE_DEF_FS_ERROR "replace" +#else +#define UNICODE_DEF_FS_ERROR "surrogateescape" +#endif + +#else /* #if PY_MAJOR_VERSION >= 3 */ + +#define PY3 0 + +/* Check both Int and Long in PY2 */ +#define INT_CHECK(op) (PyInt_Check(op) || PyLong_Check(op)) + +/* Module init function returns nothing. */ +#define MODINIT_RETURN(x) return +#define MODINIT_DEFINE(mod_name) PyMODINIT_FUNC init##mod_name (void) +#define DECREF_MOD(mod) + +/* Text interface. Use ascii strings. */ +#define Text_Type PyString_Type +#define Text_Check PyString_Check +#define Text_FromLocale PyString_FromString +#define Text_FromUTF8 PyString_FromString +#define Text_FromUTF8AndSize PyString_FromStringAndSize +#define Text_FromFormat PyString_FromFormat +#define Text_GetSize PyString_GetSize +#define Text_GET_SIZE PyString_GET_SIZE + +/* Binary interface. Use ascii strings. */ +#define Bytes_Type PyString_Type +#define Bytes_Check PyString_Check +#define Bytes_Size PyString_Size +#define Bytes_AsString PyString_AsString +#define Bytes_AsStringAndSize PyString_AsStringAndSize +#define Bytes_FromStringAndSize PyString_FromStringAndSize +#define Bytes_FromFormat PyString_FromFormat +#define Bytes_AS_STRING PyString_AS_STRING +#define Bytes_GET_SIZE PyString_GET_SIZE +#define Bytes_AsDecodedObject PyString_AsDecodedObject + +#define Object_Unicode PyObject_Unicode + +/* Renamed builtins */ +#define BUILTINS_MODULE "__builtin__" +#define BUILTINS_UNICODE "unicode" +#define BUILTINS_UNICHR "unichr" + +/* Defaults for unicode file path encoding */ +#define UNICODE_DEF_FS_CODEC Py_FileSystemDefaultEncoding +#define UNICODE_DEF_FS_ERROR "strict" + +#endif /* #if PY_MAJOR_VERSION >= 3 */ + +#define PY2 (!PY3) + +#define MODINIT_ERROR MODINIT_RETURN (NULL) + +/* Module state. These macros are used to define per-module macros. + * v - global state variable (Python 2.x) + * s - global state structure (Python 3.x) + */ +#define PY2_GETSTATE(v) (&(v)) +#define PY3_GETSTATE(s, m) ((struct s *) PyModule_GetState (m)) + +/* Pep 3123: Making PyObject_HEAD conform to standard C */ +#if !defined(Py_TYPE) +#define Py_TYPE(o) (((PyObject *)(o))->ob_type) +#define Py_REFCNT(o) (((PyObject *)(o))->ob_refcnt) +#define Py_SIZE(o) (((PyVarObject *)(o))->ob_size) +#endif + +/* Encode a unicode file path */ +#define Unicode_AsEncodedPath(u) \ + PyUnicode_AsEncodedString ((u), UNICODE_DEF_FS_CODEC, UNICODE_DEF_FS_ERROR) + +#define RELATIVE_MODULE(m) ("." m) + +#define HAVE_OLD_BUFPROTO PY2 + +#if !defined(PG_ENABLE_OLDBUF) /* allow for command line override */ +#if HAVE_OLD_BUFPROTO +#define PG_ENABLE_OLDBUF 1 +#else +#define PG_ENABLE_OLDBUF 0 +#endif +#endif + +#ifndef Py_TPFLAGS_HAVE_NEWBUFFER +#define Py_TPFLAGS_HAVE_NEWBUFFER 0 +#endif + +#ifndef Py_TPFLAGS_HAVE_CLASS +#define Py_TPFLAGS_HAVE_CLASS 0 +#endif + +#ifndef Py_TPFLAGS_CHECKTYPES +#define Py_TPFLAGS_CHECKTYPES 0 +#endif + +#if PY_VERSION_HEX >= 0x03020000 +#define Slice_GET_INDICES_EX(slice, length, start, stop, step, slicelength) \ + PySlice_GetIndicesEx(slice, length, start, stop, step, slicelength) +#else +#define Slice_GET_INDICES_EX(slice, length, start, stop, step, slicelength) \ + PySlice_GetIndicesEx((PySliceObject *)(slice), length, \ + start, stop, step, slicelength) +#endif + +#if defined(SDL_VERSION_ATLEAST) +#if (SDL_VERSION_ATLEAST(2, 0, 0)) && !(SDL_VERSION_ATLEAST(2, 0, 5)) +/* These functions require SDL 2.0.5 or greater. + + https://wiki.libsdl.org/SDL_SetWindowResizable +*/ +void SDL_SetWindowResizable(SDL_Window *window, SDL_bool resizable); +int SDL_GetWindowOpacity(SDL_Window *window, float *opacity); +int SDL_SetWindowOpacity(SDL_Window *window, float opacity); +int SDL_SetWindowModalFor(SDL_Window *modal_window, SDL_Window *parent_window); +int SDL_SetWindowInputFocus(SDL_Window *window); +SDL_Surface * SDL_CreateRGBSurfaceWithFormat(Uint32 flags, int width, int height, int depth, + Uint32 format); +#endif +#endif /* defined(SDL_VERSION_ATLEAST) */ + +// Currently needed to build scrap.c, event.c, display.c +// with Windows SDK 10.0.18362.0 and SDL1 build +#ifdef _MSC_VER + #ifndef WINDOWS_IGNORE_PACKING_MISMATCH + #define WINDOWS_IGNORE_PACKING_MISMATCH + #endif +#endif + +#endif /* ~PGCOMPAT_INTERNAL_H */ diff --git a/EXE version/main/pgimport.h b/EXE version/main/pgimport.h new file mode 100644 index 00000000..34654c9e --- /dev/null +++ b/EXE version/main/pgimport.h @@ -0,0 +1,13 @@ +#ifndef PGIMPORT_INTERNAL_H +#define PGIMPORT_INTERNAL_H + +#include "include/pgimport.h" + +#if PG_HAVE_CAPSULE +#define encapsulate_api(ptr, module) \ + PyCapsule_New(ptr, PG_CAPSULE_NAME(module), NULL) +#else /* ~PG_HAVE_CAPSULE */ +#define encapsulate_api(ptr, module) PyCObject_FromVoidPtr(ptr, NULL) +#endif /* ~PG_HAVE_CAPSULE */ + +#endif /* PGIMPORT_INTERNAL_H */ diff --git a/EXE version/main/pgopengl.h b/EXE version/main/pgopengl.h new file mode 100644 index 00000000..6440f324 --- /dev/null +++ b/EXE version/main/pgopengl.h @@ -0,0 +1,18 @@ +#if !defined(PGOPENGL_H) +#define PGOPENGL_H + +/** This header includes definitions of Opengl functions as pointer types for + ** use with the SDL function SDL_GL_GetProcAddress. + **/ + +#if defined(_WIN32) +#define GL_APIENTRY __stdcall +#else +#define GL_APIENTRY +#endif + +typedef void (GL_APIENTRY *GL_glReadPixels_Func)(int, int, int, int, unsigned int, unsigned int, void*); + +typedef void (GL_APIENTRY *GL_glViewport_Func)(int, int, unsigned int, unsigned int); +#endif + diff --git a/EXE version/main/pgplatform.h b/EXE version/main/pgplatform.h new file mode 100644 index 00000000..2d5ed868 --- /dev/null +++ b/EXE version/main/pgplatform.h @@ -0,0 +1,38 @@ +/* platform/compiler adjustments (internal) */ +#ifndef PG_PLATFORM_INTERNAL_H +#define PG_PLATFORM_INTERNAL_H + +/* This must be before all else */ +#if defined(__SYMBIAN32__) && defined(OPENC) +#include +#if defined(__WINS__) +void * +_alloca(size_t size); +#define alloca _alloca +#endif /* __WINS__ */ +#endif /* defined(__SYMBIAN32__) && defined(OPENC) */ + +#include "include/pgplatform.h" + +#ifndef MIN +#define MIN(a, b) ((a) < (b) ? (a) : (b)) +#endif +#ifndef MAX +#define MAX(a, b) ((a) > (b) ? (a) : (b)) +#endif +#ifndef ABS +#define ABS(a) (((a) < 0) ? -(a) : (a)) +#endif + +#if defined(macintosh) && defined(__MWERKS__) || defined(__SYMBIAN32__) +#define PYGAME_EXPORT __declspec(export) +#else +#define PYGAME_EXPORT +#endif + +/* warnings */ +#define PG_STRINGIZE_HELPER(x) #x +#define PG_STRINGIZE(x) PG_STRINGIZE_HELPER(x) +#define PG_WARN(desc) message(__FILE__ "(" PG_STRINGIZE(__LINE__) "): WARNING: " #desc) + +#endif /* ~PG_PLATFORM_INTERNAL_H */ diff --git a/EXE version/main/portmidi.dll b/EXE version/main/portmidi.dll new file mode 100644 index 00000000..cc4361c3 Binary files /dev/null and b/EXE version/main/portmidi.dll differ diff --git a/EXE version/main/pyexpat.pyd b/EXE version/main/pyexpat.pyd new file mode 100644 index 00000000..5b9f301f Binary files /dev/null and b/EXE version/main/pyexpat.pyd differ diff --git a/EXE version/main/pygame.h b/EXE version/main/pygame.h new file mode 100644 index 00000000..d7eaf739 --- /dev/null +++ b/EXE version/main/pygame.h @@ -0,0 +1,32 @@ +/* + pygame - Python Game Library + Copyright (C) 2000-2001 Pete Shinners + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this library; if not, write to the Free + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Pete Shinners + pete@shinners.org +*/ + +/* This will use PYGAMEAPI_DEFINE_SLOTS instead + * of PYGAMEAPI_EXTERN_SLOTS for base modules. + */ +#ifndef PYGAME_INTERNAL_H +#define PYGAME_INTERNAL_H + +#define PYGAME_H +#include "_pygame.h" + +#endif /* ~PYGAME_INTERNAL_H */ diff --git a/EXE version/main/pygame/SDL2.dll b/EXE version/main/pygame/SDL2.dll new file mode 100644 index 00000000..4553fa95 Binary files /dev/null and b/EXE version/main/pygame/SDL2.dll differ diff --git a/EXE version/main/pygame/SDL2_image.dll b/EXE version/main/pygame/SDL2_image.dll new file mode 100644 index 00000000..d7016555 Binary files /dev/null and b/EXE version/main/pygame/SDL2_image.dll differ diff --git a/EXE version/main/pygame/SDL2_mixer.dll b/EXE version/main/pygame/SDL2_mixer.dll new file mode 100644 index 00000000..40bb1c14 Binary files /dev/null and b/EXE version/main/pygame/SDL2_mixer.dll differ diff --git a/EXE version/main/pygame/SDL2_ttf.dll b/EXE version/main/pygame/SDL2_ttf.dll new file mode 100644 index 00000000..575636a9 Binary files /dev/null and b/EXE version/main/pygame/SDL2_ttf.dll differ diff --git a/EXE version/main/pygame/__init__.pyi b/EXE version/main/pygame/__init__.pyi new file mode 100644 index 00000000..7de23fbc --- /dev/null +++ b/EXE version/main/pygame/__init__.pyi @@ -0,0 +1,72 @@ +from typing import Any, Tuple, Callable, Union, Optional, overload, Type + +# Re-export modules as members; see PEP 484 for stub export rules. + +# Most useful stuff +from pygame.constants import * +from pygame import surface as surface +from pygame import rect as rect +from pygame import color as color +from pygame import event as event +from pygame import draw as draw +from pygame import display as display +from pygame import font as font +from pygame import image as image +from pygame import key as key +from pygame import mixer as mixer +from pygame import mouse as mouse +from pygame import time as time +from pygame import version as version + +# Advanced stuff +from pygame import cursors as cursors +from pygame import joystick as joystick +from pygame import mask as mask +from pygame import sprite as sprite +from pygame import transform as transform +from pygame import bufferproxy as bufferproxy +from pygame import pixelarray as pixelarray +from pygame import pixelcopy as pixelcopy +from pygame import sndarray as sndarray +from pygame import surfarray as surfarray +from pygame import math as math +from pygame import fastevent as fastevent + +# Other +from pygame import scrap as scrap + +# These classes are auto imported with pygame, so I put their declaration here +class Rect(rect.Rect): ... +class Surface(surface.Surface): ... +class Color(color.Color): ... +class PixelArray(pixelarray.PixelArray): ... +class Vector2(math.Vector2): ... +class Vector3(math.Vector3): ... +class Cursor(cursors.Cursor): ... + +def init() -> Tuple[int, int]: ... +def quit() -> None: ... +def get_init() -> bool: ... + +class error(RuntimeError): ... + +def get_error() -> str: ... +def set_error(error_msg: str) -> None: ... +def get_sdl_version() -> Tuple[int, int, int]: ... +def get_sdl_byteorder() -> int: ... +def encode_string( + obj: Union[str, bytes], + encoding: Optional[str] = "unicode_escape", + errors: Optional[str] = "backslashreplace", + etype: Optional[Type[Exception]] = UnicodeEncodeError, +) -> bytes: ... +@overload +def encode_file_path( + obj: Union[str, bytes], etype: Optional[Type[Exception]] = UnicodeEncodeError +) -> bytes: ... +@overload +def encode_file_path( + obj: Any, etype: Optional[Type[Exception]] = UnicodeEncodeError +) -> bytes: ... +def register_quit(callable: Callable[[], Any]) -> None: ... +def __getattr__(name: str) -> Any: ... # don't error on missing stubs diff --git a/EXE version/main/pygame/_freetype.cp39-win_amd64.pyd b/EXE version/main/pygame/_freetype.cp39-win_amd64.pyd new file mode 100644 index 00000000..c5f41fc6 Binary files /dev/null and b/EXE version/main/pygame/_freetype.cp39-win_amd64.pyd differ diff --git a/EXE version/main/pygame/_sdl2/__init__.pyi b/EXE version/main/pygame/_sdl2/__init__.pyi new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/EXE version/main/pygame/_sdl2/__init__.pyi @@ -0,0 +1 @@ + diff --git a/EXE version/main/pygame/_sdl2/controller.pyi b/EXE version/main/pygame/_sdl2/controller.pyi new file mode 100644 index 00000000..a0416d8a --- /dev/null +++ b/EXE version/main/pygame/_sdl2/controller.pyi @@ -0,0 +1,28 @@ +from pygame.joystick import Joystick +from typing import Dict, Mapping, Optional + +def init() -> None: ... +def get_init() -> bool: ... +def quit() -> None: ... + +def set_eventstate(state: bool) -> None: ... +def get_eventstate() -> bool: ... + +def get_count() -> int: ... +def is_controller(index: int) -> bool: ... +def name_forindex(index: int) -> Optional[str]: ... + +class Controller: + def __init__(self, index: int) -> None: ... + def init(self) -> None: ... + def get_init(self) -> bool: ... + def quit(self) -> None: ... + @staticmethod + def from_joystick(joy: Joystick) -> Controller: ... + + def attached(self) -> bool: ... + def as_joystick(self) -> Joystick: ... + def get_axis(self, axis: int) -> int: ... + def get_button(self, button: int) -> bool: ... + def get_mapping(self) -> Dict[str, str]: ... + def set_mapping(self, mapping: Mapping[str, str]) -> int: ... diff --git a/EXE version/main/pygame/_sdl2/touch.pyi b/EXE version/main/pygame/_sdl2/touch.pyi new file mode 100644 index 00000000..93e27457 --- /dev/null +++ b/EXE version/main/pygame/_sdl2/touch.pyi @@ -0,0 +1,6 @@ +from typing import Dict, Union + +def get_num_devices() -> int: ... +def get_device(index: int) -> int: ... +def get_num_fingers(device_id: int) -> int: ... +def get_finger(touchid: int, index: int) -> Dict[str, Union[int, float]]: ... diff --git a/EXE version/main/pygame/base.cp39-win_amd64.pyd b/EXE version/main/pygame/base.cp39-win_amd64.pyd new file mode 100644 index 00000000..d5f89a3e Binary files /dev/null and b/EXE version/main/pygame/base.cp39-win_amd64.pyd differ diff --git a/EXE version/main/pygame/bufferproxy.cp39-win_amd64.pyd b/EXE version/main/pygame/bufferproxy.cp39-win_amd64.pyd new file mode 100644 index 00000000..711073c6 Binary files /dev/null and b/EXE version/main/pygame/bufferproxy.cp39-win_amd64.pyd differ diff --git a/EXE version/main/pygame/bufferproxy.pyi b/EXE version/main/pygame/bufferproxy.pyi new file mode 100644 index 00000000..8b0baba4 --- /dev/null +++ b/EXE version/main/pygame/bufferproxy.pyi @@ -0,0 +1,16 @@ +import sys +from typing import Any, overload, Optional + +class BufferProxy(object): + parent: Any + length: int + + if sys.version_info > (3,): + raw: bytes + else: + raw: str + @overload + def __init__(self) -> None: ... + @overload + def __init__(self, parent: Any) -> None: ... + def write(self, buffer: bytes, offset: int = 0) -> None: ... diff --git a/EXE version/main/pygame/camera.pyi b/EXE version/main/pygame/camera.pyi new file mode 100644 index 00000000..d8fe9dbf --- /dev/null +++ b/EXE version/main/pygame/camera.pyi @@ -0,0 +1,27 @@ +from typing import List, Optional, Union, Tuple +from pygame.surface import Surface + +def init() -> None: ... +def quit() -> None: ... +def list_cameras() -> List[str]: ... + +class Camera: + def __init__( + self, + device: str, + size: Union[Tuple[int, int], List[int]] = (640, 480), + format: str = "RGB", + ) -> None: ... + def start(self) -> None: ... + def stop(self) -> None: ... + def get_controls(self) -> Tuple[bool, bool, int]: ... + def set_controls( + self, + hflip: bool = ..., + vflip: bool = ..., + brightness: int = ..., + ) -> Tuple[bool, bool, int]: ... + def get_size(self) -> Tuple[int, int]: ... + def query_image(self) -> bool: ... + def get_image(self, surface: Optional[Surface] = None) -> Surface: ... + def get_raw(self) -> str: ... diff --git a/EXE version/main/pygame/color.cp39-win_amd64.pyd b/EXE version/main/pygame/color.cp39-win_amd64.pyd new file mode 100644 index 00000000..f40b84d1 Binary files /dev/null and b/EXE version/main/pygame/color.cp39-win_amd64.pyd differ diff --git a/EXE version/main/pygame/color.pyi b/EXE version/main/pygame/color.pyi new file mode 100644 index 00000000..004eed55 --- /dev/null +++ b/EXE version/main/pygame/color.pyi @@ -0,0 +1,39 @@ +from typing import Tuple, Union, overload, List, Optional + +_ColorValue = Union[ + "Color", str, Tuple[int, int, int], List[int], int, Tuple[int, int, int, int] +] + +class Color: + r: int + g: int + b: int + a: int + cmy: Tuple[float, float, float] + hsva: Tuple[float, float, float, float] + hsla: Tuple[float, float, float, float] + i1i2i3: Tuple[float, float, float] + __hash__: None # type: ignore + @overload + def __init__(self, r: int, g: int, b: int, a: int = 255) -> None: ... + @overload + def __init__(self, rgbvalue: _ColorValue) -> None: ... + @overload + def __getitem__(self, i: int) -> int: ... + @overload + def __getitem__(self, s: slice) -> Tuple[int]: ... + def __setitem__(self, key: int, value: int) -> None: ... + def __add__(self, other: Color) -> Color: ... + def __sub__(self, other: Color) -> Color: ... + def __mul__(self, other: Color) -> Color: ... + def __floordiv__(self, other: Color) -> Color: ... + def __mod__(self, other: Color) -> Color: ... + def normalize(self) -> Tuple[float, float, float, float]: ... + def correct_gamma(self, gamma: float) -> Color: ... + def set_length(self, length: int) -> None: ... + def lerp(self, color: _ColorValue, amount: float) -> Color: ... + def premul_alpha(self) -> Color: ... + @overload + def update(self, r: int, g: int, b: int, a: int = 255) -> None: ... + @overload + def update(self, rgbvalue: _ColorValue) -> None: ... diff --git a/EXE version/main/pygame/constants.cp39-win_amd64.pyd b/EXE version/main/pygame/constants.cp39-win_amd64.pyd new file mode 100644 index 00000000..eeada72e Binary files /dev/null and b/EXE version/main/pygame/constants.cp39-win_amd64.pyd differ diff --git a/EXE version/main/pygame/constants.pyi b/EXE version/main/pygame/constants.pyi new file mode 100644 index 00000000..db6ab10e --- /dev/null +++ b/EXE version/main/pygame/constants.pyi @@ -0,0 +1,558 @@ +""" +Script used to generate this file (if we change something in the constants in the future): +import pygame.constants +const = [] +for element in dir(pygame.constants): + constant_type = getattr(pygame.constants, element) + if not element.startswith("_"): + const.append("{}: {}\n".format(element, constant_type.__class__.__name__)) +with open("constants.pyi", "w") as f: + f.write("from typing import List\n\n\n") + for line in const: + f.write(str(line)) + f.write("__all__: List[str]\n") +""" + +from typing import List + + +ACTIVEEVENT: int +ANYFORMAT: int +APPACTIVE: int +APPFOCUSMOUSE: int +APPINPUTFOCUS: int +ASYNCBLIT: int +AUDIODEVICEADDED: int +AUDIODEVICEREMOVED: int +AUDIO_ALLOW_ANY_CHANGE: int +AUDIO_ALLOW_CHANNELS_CHANGE: int +AUDIO_ALLOW_FORMAT_CHANGE: int +AUDIO_ALLOW_FREQUENCY_CHANGE: int +AUDIO_S16: int +AUDIO_S16LSB: int +AUDIO_S16MSB: int +AUDIO_S16SYS: int +AUDIO_S8: int +AUDIO_U16: int +AUDIO_U16LSB: int +AUDIO_U16MSB: int +AUDIO_U16SYS: int +AUDIO_U8: int +BIG_ENDIAN: int +BLENDMODE_ADD: int +BLENDMODE_BLEND: int +BLENDMODE_MOD: int +BLENDMODE_NONE: int +BLEND_ADD: int +BLEND_ALPHA_SDL2: int +BLEND_MAX: int +BLEND_MIN: int +BLEND_MULT: int +BLEND_PREMULTIPLIED: int +BLEND_RGBA_ADD: int +BLEND_RGBA_MAX: int +BLEND_RGBA_MIN: int +BLEND_RGBA_MULT: int +BLEND_RGBA_SUB: int +BLEND_RGB_ADD: int +BLEND_RGB_MAX: int +BLEND_RGB_MIN: int +BLEND_RGB_MULT: int +BLEND_RGB_SUB: int +BLEND_SUB: int +BUTTON_LEFT: int +BUTTON_MIDDLE: int +BUTTON_RIGHT: int +BUTTON_WHEELDOWN: int +BUTTON_WHEELUP: int +BUTTON_X1: int +BUTTON_X2: int +CONTROLLERAXISMOTION: int +CONTROLLERBUTTONDOWN: int +CONTROLLERBUTTONUP: int +CONTROLLERDEVICEADDED: int +CONTROLLERDEVICEREMAPPED: int +CONTROLLERDEVICEREMOVED: int +CONTROLLER_AXIS_INVALID: int +CONTROLLER_AXIS_LEFTX: int +CONTROLLER_AXIS_LEFTY: int +CONTROLLER_AXIS_MAX: int +CONTROLLER_AXIS_RIGHTX: int +CONTROLLER_AXIS_RIGHTY: int +CONTROLLER_AXIS_TRIGGERLEFT: int +CONTROLLER_AXIS_TRIGGERRIGHT: int +CONTROLLER_BUTTON_A: int +CONTROLLER_BUTTON_B: int +CONTROLLER_BUTTON_BACK: int +CONTROLLER_BUTTON_DPAD_DOWN: int +CONTROLLER_BUTTON_DPAD_LEFT: int +CONTROLLER_BUTTON_DPAD_RIGHT: int +CONTROLLER_BUTTON_DPAD_UP: int +CONTROLLER_BUTTON_GUIDE: int +CONTROLLER_BUTTON_INVALID: int +CONTROLLER_BUTTON_LEFTSHOULDER: int +CONTROLLER_BUTTON_LEFTSTICK: int +CONTROLLER_BUTTON_MAX: int +CONTROLLER_BUTTON_RIGHTSHOULDER: int +CONTROLLER_BUTTON_RIGHTSTICK: int +CONTROLLER_BUTTON_START: int +CONTROLLER_BUTTON_X: int +CONTROLLER_BUTTON_Y: int +DOUBLEBUF: int +DROPBEGIN: int +DROPCOMPLETE: int +DROPFILE: int +DROPTEXT: int +FINGERDOWN: int +FINGERMOTION: int +FINGERUP: int +FULLSCREEN: int +GL_ACCELERATED_VISUAL: int +GL_ACCUM_ALPHA_SIZE: int +GL_ACCUM_BLUE_SIZE: int +GL_ACCUM_GREEN_SIZE: int +GL_ACCUM_RED_SIZE: int +GL_ALPHA_SIZE: int +GL_BLUE_SIZE: int +GL_BUFFER_SIZE: int +GL_CONTEXT_DEBUG_FLAG: int +GL_CONTEXT_FLAGS: int +GL_CONTEXT_FORWARD_COMPATIBLE_FLAG: int +GL_CONTEXT_MAJOR_VERSION: int +GL_CONTEXT_MINOR_VERSION: int +GL_CONTEXT_PROFILE_COMPATIBILITY: int +GL_CONTEXT_PROFILE_CORE: int +GL_CONTEXT_PROFILE_ES: int +GL_CONTEXT_PROFILE_MASK: int +GL_CONTEXT_RELEASE_BEHAVIOR: int +GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH: int +GL_CONTEXT_RELEASE_BEHAVIOR_NONE: int +GL_CONTEXT_RESET_ISOLATION_FLAG: int +GL_CONTEXT_ROBUST_ACCESS_FLAG: int +GL_DEPTH_SIZE: int +GL_DOUBLEBUFFER: int +GL_FRAMEBUFFER_SRGB_CAPABLE: int +GL_GREEN_SIZE: int +GL_MULTISAMPLEBUFFERS: int +GL_MULTISAMPLESAMPLES: int +GL_RED_SIZE: int +GL_SHARE_WITH_CURRENT_CONTEXT: int +GL_STENCIL_SIZE: int +GL_STEREO: int +GL_SWAP_CONTROL: int +HAT_CENTERED: int +HAT_DOWN: int +HAT_LEFT: int +HAT_LEFTDOWN: int +HAT_LEFTUP: int +HAT_RIGHT: int +HAT_RIGHTDOWN: int +HAT_RIGHTUP: int +HAT_UP: int +HIDDEN: int +HWACCEL: int +HWPALETTE: int +HWSURFACE: int +JOYAXISMOTION: int +JOYBALLMOTION: int +JOYBUTTONDOWN: int +JOYBUTTONUP: int +JOYDEVICEADDED: int +JOYDEVICEREMOVED: int +JOYHATMOTION: int +KEYDOWN: int +KEYUP: int +KMOD_ALT: int +KMOD_CAPS: int +KMOD_CTRL: int +KMOD_GUI: int +KMOD_LALT: int +KMOD_LCTRL: int +KMOD_LGUI: int +KMOD_LMETA: int +KMOD_LSHIFT: int +KMOD_META: int +KMOD_MODE: int +KMOD_NONE: int +KMOD_NUM: int +KMOD_RALT: int +KMOD_RCTRL: int +KMOD_RGUI: int +KMOD_RMETA: int +KMOD_RSHIFT: int +KMOD_SHIFT: int +KSCAN_0: int +KSCAN_1: int +KSCAN_2: int +KSCAN_3: int +KSCAN_4: int +KSCAN_5: int +KSCAN_6: int +KSCAN_7: int +KSCAN_8: int +KSCAN_9: int +KSCAN_A: int +KSCAN_APOSTROPHE: int +KSCAN_B: int +KSCAN_BACKSLASH: int +KSCAN_BACKSPACE: int +KSCAN_BREAK: int +KSCAN_C: int +KSCAN_CAPSLOCK: int +KSCAN_CLEAR: int +KSCAN_COMMA: int +KSCAN_CURRENCYSUBUNIT: int +KSCAN_CURRENCYUNIT: int +KSCAN_D: int +KSCAN_DELETE: int +KSCAN_DOWN: int +KSCAN_E: int +KSCAN_END: int +KSCAN_EQUALS: int +KSCAN_ESCAPE: int +KSCAN_EURO: int +KSCAN_F: int +KSCAN_F1: int +KSCAN_F10: int +KSCAN_F11: int +KSCAN_F12: int +KSCAN_F13: int +KSCAN_F14: int +KSCAN_F15: int +KSCAN_F2: int +KSCAN_F3: int +KSCAN_F4: int +KSCAN_F5: int +KSCAN_F6: int +KSCAN_F7: int +KSCAN_F8: int +KSCAN_F9: int +KSCAN_G: int +KSCAN_GRAVE: int +KSCAN_H: int +KSCAN_HELP: int +KSCAN_HOME: int +KSCAN_I: int +KSCAN_INSERT: int +KSCAN_INTERNATIONAL1: int +KSCAN_INTERNATIONAL2: int +KSCAN_INTERNATIONAL3: int +KSCAN_INTERNATIONAL4: int +KSCAN_INTERNATIONAL5: int +KSCAN_INTERNATIONAL6: int +KSCAN_INTERNATIONAL7: int +KSCAN_INTERNATIONAL8: int +KSCAN_INTERNATIONAL9: int +KSCAN_J: int +KSCAN_K: int +KSCAN_KP0: int +KSCAN_KP1: int +KSCAN_KP2: int +KSCAN_KP3: int +KSCAN_KP4: int +KSCAN_KP5: int +KSCAN_KP6: int +KSCAN_KP7: int +KSCAN_KP8: int +KSCAN_KP9: int +KSCAN_KP_0: int +KSCAN_KP_1: int +KSCAN_KP_2: int +KSCAN_KP_3: int +KSCAN_KP_4: int +KSCAN_KP_5: int +KSCAN_KP_6: int +KSCAN_KP_7: int +KSCAN_KP_8: int +KSCAN_KP_9: int +KSCAN_KP_DIVIDE: int +KSCAN_KP_ENTER: int +KSCAN_KP_EQUALS: int +KSCAN_KP_MINUS: int +KSCAN_KP_MULTIPLY: int +KSCAN_KP_PERIOD: int +KSCAN_KP_PLUS: int +KSCAN_L: int +KSCAN_LALT: int +KSCAN_LANG1: int +KSCAN_LANG2: int +KSCAN_LANG3: int +KSCAN_LANG4: int +KSCAN_LANG5: int +KSCAN_LANG6: int +KSCAN_LANG7: int +KSCAN_LANG8: int +KSCAN_LANG9: int +KSCAN_LCTRL: int +KSCAN_LEFT: int +KSCAN_LEFTBRACKET: int +KSCAN_LGUI: int +KSCAN_LMETA: int +KSCAN_LSHIFT: int +KSCAN_LSUPER: int +KSCAN_M: int +KSCAN_MENU: int +KSCAN_MINUS: int +KSCAN_MODE: int +KSCAN_N: int +KSCAN_NONUSBACKSLASH: int +KSCAN_NONUSHASH: int +KSCAN_NUMLOCK: int +KSCAN_NUMLOCKCLEAR: int +KSCAN_O: int +KSCAN_P: int +KSCAN_PAGEDOWN: int +KSCAN_PAGEUP: int +KSCAN_PAUSE: int +KSCAN_PERIOD: int +KSCAN_POWER: int +KSCAN_PRINT: int +KSCAN_PRINTSCREEN: int +KSCAN_Q: int +KSCAN_R: int +KSCAN_RALT: int +KSCAN_RCTRL: int +KSCAN_RETURN: int +KSCAN_RGUI: int +KSCAN_RIGHT: int +KSCAN_RIGHTBRACKET: int +KSCAN_RMETA: int +KSCAN_RSHIFT: int +KSCAN_RSUPER: int +KSCAN_S: int +KSCAN_SCROLLLOCK: int +KSCAN_SCROLLOCK: int +KSCAN_SEMICOLON: int +KSCAN_SLASH: int +KSCAN_SPACE: int +KSCAN_SYSREQ: int +KSCAN_T: int +KSCAN_TAB: int +KSCAN_U: int +KSCAN_UNKNOWN: int +KSCAN_UP: int +KSCAN_V: int +KSCAN_W: int +KSCAN_X: int +KSCAN_Y: int +KSCAN_Z: int +K_0: int +K_1: int +K_2: int +K_3: int +K_4: int +K_5: int +K_6: int +K_7: int +K_8: int +K_9: int +K_AC_BACK: int +K_AMPERSAND: int +K_ASTERISK: int +K_AT: int +K_BACKQUOTE: int +K_BACKSLASH: int +K_BACKSPACE: int +K_BREAK: int +K_CAPSLOCK: int +K_CARET: int +K_CLEAR: int +K_COLON: int +K_COMMA: int +K_CURRENCYSUBUNIT: int +K_CURRENCYUNIT: int +K_DELETE: int +K_DOLLAR: int +K_DOWN: int +K_END: int +K_EQUALS: int +K_ESCAPE: int +K_EURO: int +K_EXCLAIM: int +K_F1: int +K_F10: int +K_F11: int +K_F12: int +K_F13: int +K_F14: int +K_F15: int +K_F2: int +K_F3: int +K_F4: int +K_F5: int +K_F6: int +K_F7: int +K_F8: int +K_F9: int +K_GREATER: int +K_HASH: int +K_HELP: int +K_HOME: int +K_INSERT: int +K_KP0: int +K_KP1: int +K_KP2: int +K_KP3: int +K_KP4: int +K_KP5: int +K_KP6: int +K_KP7: int +K_KP8: int +K_KP9: int +K_KP_0: int +K_KP_1: int +K_KP_2: int +K_KP_3: int +K_KP_4: int +K_KP_5: int +K_KP_6: int +K_KP_7: int +K_KP_8: int +K_KP_9: int +K_KP_DIVIDE: int +K_KP_ENTER: int +K_KP_EQUALS: int +K_KP_MINUS: int +K_KP_MULTIPLY: int +K_KP_PERIOD: int +K_KP_PLUS: int +K_LALT: int +K_LCTRL: int +K_LEFT: int +K_LEFTBRACKET: int +K_LEFTPAREN: int +K_LESS: int +K_LGUI: int +K_LMETA: int +K_LSHIFT: int +K_LSUPER: int +K_MENU: int +K_MINUS: int +K_MODE: int +K_NUMLOCK: int +K_NUMLOCKCLEAR: int +K_PAGEDOWN: int +K_PAGEUP: int +K_PAUSE: int +K_PERCENT: int +K_PERIOD: int +K_PLUS: int +K_POWER: int +K_PRINT: int +K_PRINTSCREEN: int +K_QUESTION: int +K_QUOTE: int +K_QUOTEDBL: int +K_RALT: int +K_RCTRL: int +K_RETURN: int +K_RGUI: int +K_RIGHT: int +K_RIGHTBRACKET: int +K_RIGHTPAREN: int +K_RMETA: int +K_RSHIFT: int +K_RSUPER: int +K_SCROLLLOCK: int +K_SCROLLOCK: int +K_SEMICOLON: int +K_SLASH: int +K_SPACE: int +K_SYSREQ: int +K_TAB: int +K_UNDERSCORE: int +K_UNKNOWN: int +K_UP: int +K_a: int +K_b: int +K_c: int +K_d: int +K_e: int +K_f: int +K_g: int +K_h: int +K_i: int +K_j: int +K_k: int +K_l: int +K_m: int +K_n: int +K_o: int +K_p: int +K_q: int +K_r: int +K_s: int +K_t: int +K_u: int +K_v: int +K_w: int +K_x: int +K_y: int +K_z: int +LIL_ENDIAN: int +MIDIIN: int +MIDIOUT: int +MOUSEBUTTONDOWN: int +MOUSEBUTTONUP: int +MOUSEMOTION: int +MOUSEWHEEL: int +MULTIGESTURE: int +NOEVENT: int +NOFRAME: int +NUMEVENTS: int +OPENGL: int +OPENGLBLIT: int +PREALLOC: int +QUIT: int +RESIZABLE: int +RLEACCEL: int +RLEACCELOK: int +SCALED: int +SCRAP_BMP: str +SCRAP_CLIPBOARD: int +SCRAP_PBM: str +SCRAP_PPM: str +SCRAP_SELECTION: int +SCRAP_TEXT: str +SHOWN: int +SRCALPHA: int +SRCCOLORKEY: int +SWSURFACE: int +SYSTEM_CURSOR_ARROW: int +SYSTEM_CURSOR_CROSSHAIR: int +SYSTEM_CURSOR_HAND: int +SYSTEM_CURSOR_IBEAM: int +SYSTEM_CURSOR_NO: int +SYSTEM_CURSOR_SIZEALL: int +SYSTEM_CURSOR_SIZENESW: int +SYSTEM_CURSOR_SIZENS: int +SYSTEM_CURSOR_SIZENWSE: int +SYSTEM_CURSOR_SIZEWE: int +SYSTEM_CURSOR_WAIT: int +SYSTEM_CURSOR_WAITARROW: int +SYSWMEVENT: int +TEXTEDITING: int +TEXTINPUT: int +TIMER_RESOLUTION: int +USEREVENT: int +USEREVENT_DROPFILE: int +VIDEOEXPOSE: int +VIDEORESIZE: int +WINDOWCLOSE: int +WINDOWENTER: int +WINDOWEXPOSED: int +WINDOWFOCUSGAINED: int +WINDOWFOCUSLOST: int +WINDOWHIDDEN: int +WINDOWHITTEST: int +WINDOWLEAVE: int +WINDOWMAXIMIZED: int +WINDOWMINIMIZED: int +WINDOWMOVED: int +WINDOWRESIZED: int +WINDOWRESTORED: int +WINDOWSHOWN: int +WINDOWSIZECHANGED: int +WINDOWTAKEFOCUS: int + +__all__: List[str] diff --git a/EXE version/main/pygame/cursors.pyi b/EXE version/main/pygame/cursors.pyi new file mode 100644 index 00000000..a83acbfa --- /dev/null +++ b/EXE version/main/pygame/cursors.pyi @@ -0,0 +1,83 @@ +from typing import Iterator, List, Tuple, Sequence, Optional, Iterable, Union, overload + +from pygame.surface import Surface + +_Small_string = Tuple[ + str, str, str, str, str, str, str, str, str, str, str, str, str, str, str, str +] +_Big_string = Tuple[ + str, + str, + str, + str, + str, + str, + str, + str, + str, + str, + str, + str, + str, + str, + str, + str, + str, + str, + str, + str, + str, + str, + str, + str, +] + +arrow: Cursor +diamond: Cursor +broken_x: Cursor +tri_left: Cursor +tri_right: Cursor +thickarrow_strings: _Big_string +sizer_x_strings: _Small_string +sizer_y_strings: _Big_string +sizer_xy_strings: _Small_string + +def compile( + strings: Sequence[str], + black: str = "X", + white: str = ".", + xor: str = "o", +) -> Tuple[Sequence[int], Sequence[int]]: ... +def load_xbm( + cursorfile: str, maskfile: str +) -> Tuple[List[int], List[int], Tuple[int, ...], Tuple[int, ...]]: ... + +class Cursor(Iterable[object]): + @overload + def __init__(self, constant: int) -> None: ... + @overload + def __init__( + self, + size: Union[Tuple[int, int], List[int]], + hotspot: Union[Tuple[int, int], List[int]], + xormasks: Sequence[int], + andmasks: Sequence[int], + ) -> None: ... + @overload + def __init__( + self, + hotspot: Union[Tuple[int, int], List[int]], + surface: Surface, + ) -> None: ... + def __iter__(self) -> Iterator[object]: ... + type: str + data: Union[ + Tuple[int], + Tuple[ + Union[Tuple[int, int], List[int]], + Union[Tuple[int, int], List[int]], + Sequence[int], + Sequence[int], + ], + Tuple[int, Surface], + ] diff --git a/EXE version/main/pygame/display.cp39-win_amd64.pyd b/EXE version/main/pygame/display.cp39-win_amd64.pyd new file mode 100644 index 00000000..9c62615a Binary files /dev/null and b/EXE version/main/pygame/display.cp39-win_amd64.pyd differ diff --git a/EXE version/main/pygame/display.pyi b/EXE version/main/pygame/display.pyi new file mode 100644 index 00000000..601e9289 --- /dev/null +++ b/EXE version/main/pygame/display.pyi @@ -0,0 +1,88 @@ +from typing import Union, Tuple, List, Optional, Dict, Sequence +from typing_extensions import Protocol + +from pygame.color import Color +from pygame.surface import Surface +from pygame.rect import Rect +from pygame.math import Vector2 +from pygame.constants import FULLSCREEN + +_Coordinate = Union[Tuple[float, float], List[float], Vector2] +_CanBeRect = Union[ + Rect, + Tuple[int, int, int, int], + List[int], + Tuple[_Coordinate, _Coordinate], + List[_Coordinate], +] + +class _HasRectAttribute(Protocol): + rect: _CanBeRect + +_RectValue = Union[_CanBeRect, _HasRectAttribute] +_ColorValue = Union[ + Color, int, Tuple[int, int, int], Tuple[int, int, int, int], List[int] +] + +class _VidInfo: + hw: int + wm: int + video_mem: int + bitsize: int + bytesize: int + masks: Tuple[int, int, int, int] + shifts: Tuple[int, int, int, int] + losses: Tuple[int, int, int, int] + blit_hw: int + blit_hw_CC: int + blit_hw_A: int + blit_sw: int + blit_sw_CC: int + blit_sw_A: int + current_h: int + current_w: int + +def init() -> None: ... +def quit() -> None: ... +def get_init() -> bool: ... +def set_mode( + size: _Coordinate = (0, 0), + flags: int = 0, + depth: int = 0, + display: int = 0, + vsync: int = 0, +) -> Surface: ... +def get_surface() -> Surface: ... +def flip() -> None: ... +def update(rectangle: Optional[Union[_RectValue, List[_RectValue]]] = None) -> None: ... +def get_driver() -> str: ... +def Info() -> _VidInfo: ... +def get_wm_info() -> Dict[str, int]: ... +def list_modes( + depth: int = 0, + flags: int = FULLSCREEN, + display: int = 0, +) -> List[Tuple[int, int]]: ... +def mode_ok( + size: Union[Sequence[int], Tuple[int, int]], + flags: int = 0, + depth: int = 0, + display: int = 0, +) -> int: ... +def gl_get_attribute(flag: int) -> int: ... +def gl_set_attribute(flag: int, value: int) -> None: ... +def get_active() -> bool: ... +def iconify() -> bool: ... +def toggle_fullscreen() -> int: ... +def set_gamma(red: float, green: float = ..., blue: float = ...) -> int: ... +def set_gamma_ramp( + red: Sequence[int], green: Sequence[int], blue: Sequence[int] +) -> int: ... +def set_icon(surface: Surface) -> None: ... +def set_caption(title: str, icontitle: Optional[str] = None) -> None: ... +def get_caption() -> Tuple[str, str]: ... +def set_palette(palette: Sequence[_ColorValue]) -> None: ... +def get_num_displays() -> int: ... +def get_window_size() -> Tuple[int, int]: ... +def get_allow_screensaver() -> bool: ... +def set_allow_screensaver(value: bool) -> None: ... diff --git a/EXE version/main/pygame/draw.cp39-win_amd64.pyd b/EXE version/main/pygame/draw.cp39-win_amd64.pyd new file mode 100644 index 00000000..cf4ed49a Binary files /dev/null and b/EXE version/main/pygame/draw.cp39-win_amd64.pyd differ diff --git a/EXE version/main/pygame/draw.pyi b/EXE version/main/pygame/draw.pyi new file mode 100644 index 00000000..b59fb4f9 --- /dev/null +++ b/EXE version/main/pygame/draw.pyi @@ -0,0 +1,92 @@ +from typing import Union, Optional, Tuple, List, Sequence +from typing_extensions import Protocol + +from pygame.color import Color +from pygame.rect import Rect +from pygame.surface import Surface +from pygame.math import Vector2 + +_Coordinate = Union[Tuple[float, float], List[float], Vector2] +_ColorValue = Union[ + Color, str, Tuple[int, int, int], List[int], int, Tuple[int, int, int, int] +] +_CanBeRect = Union[ + Rect, + Tuple[int, int, int, int], + List[int], + Tuple[_Coordinate, _Coordinate], + List[_Coordinate], +] + +class _HasRectAttribute(Protocol): + rect: _CanBeRect + +_RectValue = Union[_CanBeRect, _HasRectAttribute] + +def rect( + surface: Surface, + color: _ColorValue, + rect: _RectValue, + width: int = 0, + border_radius: int = -1, + border_top_left_radius: int = -1, + border_top_right_radius: int = -1, + border_bottom_left_radius: int = -1, + border_bottom_right_radius: int = -1, +) -> Rect: ... +def polygon( + surface: Surface, + color: _ColorValue, + points: Sequence[_Coordinate], + width: int = 0, +) -> Rect: ... +def circle( + surface: Surface, + color: _ColorValue, + center: _Coordinate, + radius: float, + width: int = 0, + draw_top_right: Optional[bool] = None, + draw_top_left: Optional[bool] = None, + draw_bottom_left: Optional[bool] = None, + draw_bottom_right: Optional[bool] = None, +) -> Rect: ... +def ellipse( + surface: Surface, color: _ColorValue, rect: _RectValue, width: int = 0 +) -> Rect: ... +def arc( + surface: Surface, + color: _ColorValue, + rect: _RectValue, + start_angle: float, + stop_angle: float, + width: int = 1, +) -> Rect: ... +def line( + surface: Surface, + color: _ColorValue, + start_pos: _Coordinate, + end_pos: _Coordinate, + width: int = 1, +) -> Rect: ... +def lines( + surface: Surface, + color: _ColorValue, + closed: bool, + points: Sequence[_Coordinate], + width: int = 1, +) -> Rect: ... +def aaline( + surface: Surface, + color: _ColorValue, + start_pos: _Coordinate, + end_pos: _Coordinate, + blend: int = 1, +) -> Rect: ... +def aalines( + surface: Surface, + color: _ColorValue, + closed: bool, + points: Sequence[_Coordinate], + blend: int = 1, +) -> Rect: ... diff --git a/EXE version/main/pygame/event.cp39-win_amd64.pyd b/EXE version/main/pygame/event.cp39-win_amd64.pyd new file mode 100644 index 00000000..390ac574 Binary files /dev/null and b/EXE version/main/pygame/event.cp39-win_amd64.pyd differ diff --git a/EXE version/main/pygame/event.pyi b/EXE version/main/pygame/event.pyi new file mode 100644 index 00000000..57b5f3f0 --- /dev/null +++ b/EXE version/main/pygame/event.pyi @@ -0,0 +1,28 @@ +from typing import Any, Dict, List, Optional, Union, overload, Tuple, SupportsInt + +class Event: + type: int + __dict__: Dict[str, Any] + __hash__: None # type: ignore + @overload + def __init__(self, type: int, dict: Dict[str, Any]) -> None: ... + @overload + def __init__(self, type: int, **attributes: Any) -> None: ... + def __getattr__(self, name: str) -> Any: ... + +_EventTypes = Union[SupportsInt, Tuple[SupportsInt, ...], List[SupportsInt]] + +def pump() -> None: ... +def get(eventtype: Optional[_EventTypes] = None, pump: Any = True, exclude: Optional[_EventTypes] = None) -> List[Event]: ... +def poll() -> Event: ... +def wait(timeout: int = 0) -> Event: ... +def peek(eventtype: Optional[_EventTypes] = None, pump: Any = True) -> bool: ... +def clear(eventtype: Optional[_EventTypes] = None, pump: Any = True) -> None: ... +def event_name(type: int) -> str: ... +def set_blocked(type: Optional[_EventTypes]) -> None: ... +def set_allowed(type: Optional[_EventTypes]) -> None: ... +def get_blocked(type: _EventTypes) -> bool: ... +def set_grab(grab: bool) -> None: ... +def get_grab() -> bool: ... +def post(event: Event) -> bool: ... +def custom_type() -> int: ... diff --git a/EXE version/main/pygame/examples/README.rst b/EXE version/main/pygame/examples/README.rst new file mode 100644 index 00000000..43503cce --- /dev/null +++ b/EXE version/main/pygame/examples/README.rst @@ -0,0 +1,145 @@ +These examples should help get you started with pygame. Here is a +brief rundown of what you get. The source code for all examples +is in the public domain. Feel free to use for your own projects. + +aliens.py + This started off as a port of the SDL demonstration, Aliens. + Now it has evolved into something sort of resembling fun. + This demonstrates a lot of different uses of sprites and + optimized blitting. Also transparancy, colorkeys, fonts, sound, + music, joystick, and more. (PS, my high score is 117! goodluck) + +arraydemo.py + Another example filled with various surfarray effects. + It requires the surfarray and image modules to be installed. + This little demo can also make a good starting point for any of + your own tests with surfarray + +audiocapture.py + Record sound from a microphone, and play back the recorded sound. + +blend_fill.py + BLEND_ing colors in different ways with Surface.fill(). + +blit_blends.py + BLEND_ing colors Surface.blit(). + +camera.py + Basic image capturing and display using pygame.camera + +cursors.py + Make custom cursors :) + +dropevent.py + Drag and drop files. Using the following events. + DROPBEGIN, DROPCOMPLETE, DROPTEXT, DROPFILE + +eventlist.py + Learn about pygame events and input. + Watch the events fly by. Click the mouse, and see the mouse + event come up. Press a keyboard key, and see the key up event. + +fastevents.py + Posting events from other threads? Check this out. + +font_viewer.py + Display all available fonts in a scrolling window. + +fonty.py + Super quick, super simple application demonstrating + the different ways to render fonts with the font module + +freetype_misc.py + FreeType is a world famous font project. + +glcube.py + Using PyOpenGL and Pygame, this creates a spinning 3D multicolored cube. + +headless_no_windows_needed.py + For using pygame in scripts. + +liquid.py + This example was created in a quick comparison with the + BlitzBasic gaming language. Nonetheless, it demonstrates a quick + 8-bit setup (with colormap). + +mask.py + Single bit pixel manipulation. Fast for collision detection, + and also good for computer vision. + +midi.py + For connecting pygame to musical equipment. + +moveit.py + A very simple example of moving stuff. + +music_drop_fade.py + Fade in and play music from a list while observing + several events. Uses fade_ms added in pygame2, as well as set_endevent, + set_volume, drag and drop events, and the scrap module. + +overlay.py + An old way of displaying video content. + +pixelarray.py + Process whole arrays of pixels at a time. + Like numpy, but for pixels, and also built into pygame. + +playmus.py + Simple music playing example. + +prevent_display_stretching.py + A windows specific example. + +scaletest.py + Showing how to scale Surfaces. + +scrap_clipboard.py + A simple demonstration example for the clipboard support. + +setmodescale.py + SCALED allows you to work in 320x200 and have it show up big. + It handles mouse scaling and selection of a good sized window depending + on the display. + +sound.py + Extremely basic testing of the mixer module. Load a + sound and play it. All from the command shell, no graphics. + +sound_array_demos.py + Echo, delay and other array based processing of sounds. + +sprite_texture.py + Shows how to use hardware Image Textures with pygame.sprite. + +stars.py + A simple starfield example. You can change the center of + perspective by leftclicking the mouse on the screen. + +testsprite.py + More of a test example. If you're interested in how to use sprites, + then check out the aliens.py example instead. + +textinput.py + A little "console" where you can write in text. + Shows how to use the TEXTEDITING and TEXTINPUT events. + +vgrade.py + Demonstrates creating a vertical gradient with + Numpy. The app will create a new gradient every half + second and report the time needed to create and display the + image. If you're not prepared to start working with the + Numpy arrays, don't worry about the source for this one :] + +video.py + It explores some new video APIs in pygame 2. + Including multiple windows, Textures, and such. + +data/ + Directory with the resources for the examples. + +There's LOTS of examples on the pygame website, and on places like github. + +We're always on the lookout for more examples and/or example +requests. Code like this is probably the best way to start +getting involved with Python gaming. diff --git a/EXE version/main/pygame/examples/data/BGR.png b/EXE version/main/pygame/examples/data/BGR.png new file mode 100644 index 00000000..f5dba748 Binary files /dev/null and b/EXE version/main/pygame/examples/data/BGR.png differ diff --git a/EXE version/main/pygame/examples/data/alien1.gif b/EXE version/main/pygame/examples/data/alien1.gif new file mode 100644 index 00000000..c4497e08 Binary files /dev/null and b/EXE version/main/pygame/examples/data/alien1.gif differ diff --git a/EXE version/main/pygame/examples/data/alien1.jpg b/EXE version/main/pygame/examples/data/alien1.jpg new file mode 100644 index 00000000..6d110a45 Binary files /dev/null and b/EXE version/main/pygame/examples/data/alien1.jpg differ diff --git a/EXE version/main/pygame/examples/data/alien1.png b/EXE version/main/pygame/examples/data/alien1.png new file mode 100644 index 00000000..471d6a44 Binary files /dev/null and b/EXE version/main/pygame/examples/data/alien1.png differ diff --git a/EXE version/main/pygame/examples/data/alien2.gif b/EXE version/main/pygame/examples/data/alien2.gif new file mode 100644 index 00000000..8df05a34 Binary files /dev/null and b/EXE version/main/pygame/examples/data/alien2.gif differ diff --git a/EXE version/main/pygame/examples/data/alien2.png b/EXE version/main/pygame/examples/data/alien2.png new file mode 100644 index 00000000..aef5ace8 Binary files /dev/null and b/EXE version/main/pygame/examples/data/alien2.png differ diff --git a/EXE version/main/pygame/examples/data/alien3.gif b/EXE version/main/pygame/examples/data/alien3.gif new file mode 100644 index 00000000..5305d419 Binary files /dev/null and b/EXE version/main/pygame/examples/data/alien3.gif differ diff --git a/EXE version/main/pygame/examples/data/alien3.png b/EXE version/main/pygame/examples/data/alien3.png new file mode 100644 index 00000000..90d0f7ce Binary files /dev/null and b/EXE version/main/pygame/examples/data/alien3.png differ diff --git a/EXE version/main/pygame/examples/data/arraydemo.bmp b/EXE version/main/pygame/examples/data/arraydemo.bmp new file mode 100644 index 00000000..ad96338e Binary files /dev/null and b/EXE version/main/pygame/examples/data/arraydemo.bmp differ diff --git a/EXE version/main/pygame/examples/data/asprite.bmp b/EXE version/main/pygame/examples/data/asprite.bmp new file mode 100644 index 00000000..cc96356a Binary files /dev/null and b/EXE version/main/pygame/examples/data/asprite.bmp differ diff --git a/EXE version/main/pygame/examples/data/background.gif b/EXE version/main/pygame/examples/data/background.gif new file mode 100644 index 00000000..5041ce66 Binary files /dev/null and b/EXE version/main/pygame/examples/data/background.gif differ diff --git a/EXE version/main/pygame/examples/data/black.ppm b/EXE version/main/pygame/examples/data/black.ppm new file mode 100644 index 00000000..698a52c1 --- /dev/null +++ b/EXE version/main/pygame/examples/data/black.ppm @@ -0,0 +1,3076 @@ +P3 +# Created by GIMP version 2.10.20 PNM plug-in +32 32 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 diff --git a/EXE version/main/pygame/examples/data/blue.gif b/EXE version/main/pygame/examples/data/blue.gif new file mode 100644 index 00000000..98c6fd65 Binary files /dev/null and b/EXE version/main/pygame/examples/data/blue.gif differ diff --git a/EXE version/main/pygame/examples/data/blue.mpg b/EXE version/main/pygame/examples/data/blue.mpg new file mode 100644 index 00000000..60dcecaf Binary files /dev/null and b/EXE version/main/pygame/examples/data/blue.mpg differ diff --git a/EXE version/main/pygame/examples/data/bomb.gif b/EXE version/main/pygame/examples/data/bomb.gif new file mode 100644 index 00000000..f885cbb7 Binary files /dev/null and b/EXE version/main/pygame/examples/data/bomb.gif differ diff --git a/EXE version/main/pygame/examples/data/boom.wav b/EXE version/main/pygame/examples/data/boom.wav new file mode 100644 index 00000000..f19126a0 Binary files /dev/null and b/EXE version/main/pygame/examples/data/boom.wav differ diff --git a/EXE version/main/pygame/examples/data/brick.png b/EXE version/main/pygame/examples/data/brick.png new file mode 100644 index 00000000..cfe37a39 Binary files /dev/null and b/EXE version/main/pygame/examples/data/brick.png differ diff --git a/EXE version/main/pygame/examples/data/car_door.wav b/EXE version/main/pygame/examples/data/car_door.wav new file mode 100644 index 00000000..60acf9e9 Binary files /dev/null and b/EXE version/main/pygame/examples/data/car_door.wav differ diff --git a/EXE version/main/pygame/examples/data/chimp.bmp b/EXE version/main/pygame/examples/data/chimp.bmp new file mode 100644 index 00000000..6a81eed1 Binary files /dev/null and b/EXE version/main/pygame/examples/data/chimp.bmp differ diff --git a/EXE version/main/pygame/examples/data/city.png b/EXE version/main/pygame/examples/data/city.png new file mode 100644 index 00000000..202da5cf Binary files /dev/null and b/EXE version/main/pygame/examples/data/city.png differ diff --git a/EXE version/main/pygame/examples/data/crimson.pnm b/EXE version/main/pygame/examples/data/crimson.pnm new file mode 100644 index 00000000..28501e94 --- /dev/null +++ b/EXE version/main/pygame/examples/data/crimson.pnm @@ -0,0 +1,5 @@ +P6 +# CREATOR: GIMP PNM Filter Version 1.1 +32 32 +255 +Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü<Ü< \ No newline at end of file diff --git a/EXE version/main/pygame/examples/data/danger.gif b/EXE version/main/pygame/examples/data/danger.gif new file mode 100644 index 00000000..106d69c0 Binary files /dev/null and b/EXE version/main/pygame/examples/data/danger.gif differ diff --git a/EXE version/main/pygame/examples/data/explosion1.gif b/EXE version/main/pygame/examples/data/explosion1.gif new file mode 100644 index 00000000..fabec160 Binary files /dev/null and b/EXE version/main/pygame/examples/data/explosion1.gif differ diff --git a/EXE version/main/pygame/examples/data/fist.bmp b/EXE version/main/pygame/examples/data/fist.bmp new file mode 100644 index 00000000..eab5a9ca Binary files /dev/null and b/EXE version/main/pygame/examples/data/fist.bmp differ diff --git a/EXE version/main/pygame/examples/data/green.pcx b/EXE version/main/pygame/examples/data/green.pcx new file mode 100644 index 00000000..c0aea8de Binary files /dev/null and b/EXE version/main/pygame/examples/data/green.pcx differ diff --git a/EXE version/main/pygame/examples/data/grey.pgm b/EXE version/main/pygame/examples/data/grey.pgm new file mode 100644 index 00000000..b181a5df --- /dev/null +++ b/EXE version/main/pygame/examples/data/grey.pgm @@ -0,0 +1,1028 @@ +P2 +# Created by GIMP version 2.10.20 PNM plug-in +32 32 +255 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 +120 diff --git a/EXE version/main/pygame/examples/data/house_lo.mp3 b/EXE version/main/pygame/examples/data/house_lo.mp3 new file mode 100644 index 00000000..4c26994a Binary files /dev/null and b/EXE version/main/pygame/examples/data/house_lo.mp3 differ diff --git a/EXE version/main/pygame/examples/data/house_lo.ogg b/EXE version/main/pygame/examples/data/house_lo.ogg new file mode 100644 index 00000000..e050848e Binary files /dev/null and b/EXE version/main/pygame/examples/data/house_lo.ogg differ diff --git a/EXE version/main/pygame/examples/data/house_lo.wav b/EXE version/main/pygame/examples/data/house_lo.wav new file mode 100644 index 00000000..68a96b86 Binary files /dev/null and b/EXE version/main/pygame/examples/data/house_lo.wav differ diff --git a/EXE version/main/pygame/examples/data/laplacian.png b/EXE version/main/pygame/examples/data/laplacian.png new file mode 100644 index 00000000..8d064f57 Binary files /dev/null and b/EXE version/main/pygame/examples/data/laplacian.png differ diff --git a/EXE version/main/pygame/examples/data/liquid.bmp b/EXE version/main/pygame/examples/data/liquid.bmp new file mode 100644 index 00000000..c4f12ebb Binary files /dev/null and b/EXE version/main/pygame/examples/data/liquid.bmp differ diff --git a/EXE version/main/pygame/examples/data/midikeys.png b/EXE version/main/pygame/examples/data/midikeys.png new file mode 100644 index 00000000..74ecb86b Binary files /dev/null and b/EXE version/main/pygame/examples/data/midikeys.png differ diff --git a/EXE version/main/pygame/examples/data/oldplayer.gif b/EXE version/main/pygame/examples/data/oldplayer.gif new file mode 100644 index 00000000..93906aba Binary files /dev/null and b/EXE version/main/pygame/examples/data/oldplayer.gif differ diff --git a/EXE version/main/pygame/examples/data/player1.gif b/EXE version/main/pygame/examples/data/player1.gif new file mode 100644 index 00000000..6c4eda74 Binary files /dev/null and b/EXE version/main/pygame/examples/data/player1.gif differ diff --git a/EXE version/main/pygame/examples/data/punch.wav b/EXE version/main/pygame/examples/data/punch.wav new file mode 100644 index 00000000..aa3f56cb Binary files /dev/null and b/EXE version/main/pygame/examples/data/punch.wav differ diff --git a/EXE version/main/pygame/examples/data/purple.xpm b/EXE version/main/pygame/examples/data/purple.xpm new file mode 100644 index 00000000..7798cc16 --- /dev/null +++ b/EXE version/main/pygame/examples/data/purple.xpm @@ -0,0 +1,36 @@ +/* XPM */ +static char * C:\Users\Kristof\Documents\purple_xpm[] = { +"32 32 1 1", +" c #FF00FF", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" "}; diff --git a/EXE version/main/pygame/examples/data/red.jpg b/EXE version/main/pygame/examples/data/red.jpg new file mode 100644 index 00000000..11a9aa0c Binary files /dev/null and b/EXE version/main/pygame/examples/data/red.jpg differ diff --git a/EXE version/main/pygame/examples/data/sans.ttf b/EXE version/main/pygame/examples/data/sans.ttf new file mode 100644 index 00000000..09fac2ff Binary files /dev/null and b/EXE version/main/pygame/examples/data/sans.ttf differ diff --git a/EXE version/main/pygame/examples/data/scarlet.webp b/EXE version/main/pygame/examples/data/scarlet.webp new file mode 100644 index 00000000..cd0a15cd Binary files /dev/null and b/EXE version/main/pygame/examples/data/scarlet.webp differ diff --git a/EXE version/main/pygame/examples/data/secosmic_lo.wav b/EXE version/main/pygame/examples/data/secosmic_lo.wav new file mode 100644 index 00000000..867f802b Binary files /dev/null and b/EXE version/main/pygame/examples/data/secosmic_lo.wav differ diff --git a/EXE version/main/pygame/examples/data/shot.gif b/EXE version/main/pygame/examples/data/shot.gif new file mode 100644 index 00000000..18de5280 Binary files /dev/null and b/EXE version/main/pygame/examples/data/shot.gif differ diff --git a/EXE version/main/pygame/examples/data/static.png b/EXE version/main/pygame/examples/data/static.png new file mode 100644 index 00000000..fb3b0572 Binary files /dev/null and b/EXE version/main/pygame/examples/data/static.png differ diff --git a/EXE version/main/pygame/examples/data/teal.svg b/EXE version/main/pygame/examples/data/teal.svg new file mode 100644 index 00000000..85f41492 --- /dev/null +++ b/EXE version/main/pygame/examples/data/teal.svg @@ -0,0 +1,9 @@ + + teal + + + Layer 1 + + + + diff --git a/EXE version/main/pygame/examples/data/turquoise.tif b/EXE version/main/pygame/examples/data/turquoise.tif new file mode 100644 index 00000000..afec9c8b Binary files /dev/null and b/EXE version/main/pygame/examples/data/turquoise.tif differ diff --git a/EXE version/main/pygame/examples/data/whiff.wav b/EXE version/main/pygame/examples/data/whiff.wav new file mode 100644 index 00000000..3954efac Binary files /dev/null and b/EXE version/main/pygame/examples/data/whiff.wav differ diff --git a/EXE version/main/pygame/examples/data/yellow.tga b/EXE version/main/pygame/examples/data/yellow.tga new file mode 100644 index 00000000..d0124fe5 Binary files /dev/null and b/EXE version/main/pygame/examples/data/yellow.tga differ diff --git a/EXE version/main/pygame/examples/data/yuv_1.pgm b/EXE version/main/pygame/examples/data/yuv_1.pgm new file mode 100644 index 00000000..a59b3839 --- /dev/null +++ b/EXE version/main/pygame/examples/data/yuv_1.pgm @@ -0,0 +1,6 @@ +P5 +752 864 +255 +€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€                                   €€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€     +              €€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€                             €€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€                                 €€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€>Zideigcgffedcbbeeeeeeeedddddddd_adglortsuy~„ˆŒŽ’”˜£¨¬®º¹º¾ÄÇÉÈÏÙÁ§¸ÏÒÒÈÇÇÅÄÃÂÁ¼¹µ®¨¢ž›˜˜•І…‡xwyy{|w}~‚ytvtvrxuw{vwvvwwusrtutnnoligdgkkhhlnnoopppoononkjjd_crxqnrqqlihmnkkmklmnnnmlkghiiigfegggghhhhkgeedbdgeeeeeeeecegfeddeefilpsuwuw|ƒŒ’—™£¥©®³¸¼¾ÂÄÈÊÌÊÉÇÉÆÀ¸±«§¤ ˜”‘‰†€‚€|xvvxwwwz{{y~~|{yxwv{{{{{{{{vvuvvvvvxvuuwwvsstwyyuvwsoorsoquuttrponmusrmhlojflppnlifgmpqrlhioqrokhikstsniegisqmigiospqkcckqqnkd`hrnbQJC3,.,-OU>0444.&0>FO[T<3FRPMTZ[MKILQLDDMLIHHGDCFXZEBY_IAYeO8@Wa]][ZZZ[\^XRK<,*00259=98666=<>=97EW<%$#.@DSgkVKs¥©dC{ªˆ[_eQ<555512369;=?BEABDFHIIIHIJKLLLLPPQQRSSTTTUUVWWXZ[\]_`bbcccddeeegggffeeegghhiijjmmkjiiiikkllnnopnooppqqrpqrqpnljja`aWUcrvnmpxqN25=<<==?79521/--0**+++,,,)07;:89;CCDDGIKLNNNNNMMMRRRRRRRR€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€=ctkhmjekkjigfddddddddddcccbbbbaeeddddcceeddddccbcdgilmnnoqvz‚Š”„{‘ŸŸ¦¬®²¸½ÃÇÉÐÐÐÐÏÏÏÏÊËËÇÂÁÄǰƒjrxtrrtvvnuƒ}}}‚wx{wz{~{yxurtzspmmonifflnjglpqqrrsrrqponihjd`gnypntsrjgfkmhjononmlklmnkklmlkihjjkkklllokggfegkiiiiiiiigffgiigeggffeeddfecdefedhjloruwx~†•ž¥©ººº¼¿ÃÇÉÌÊÆÆÆÆÅÄÂÁ¿¸¯¦¡ž—•’ŽŠ‡„‚}}}}||||{{zzyxxx|{zz||{z|yvvxxurtwyzxwxzuppuursxuututttttstoinqidiorojfdgloqqjehorsohefimoolfdgksqmhehotqsmaakqomlc]fso`RKD2+1-0NY<0940(&1?GOaX60HUNIR[[ZVTVXSNPKIQQDDLJ?JPHFW\NL\d^M?DV]_\XZ\ZYbWNH9))41258;=>>?><:89;><9;?:5?QA''% /=CXacWJo¥¨fIv¡‹`[hT;534;89;>ABCDGJGHIJJIIIJKLNOPPPRRSTVWXXZZ[\]__`abbccddeccddeeffhhhhggggeffhijkkkkjjklmnoooooppplkkjiihh`_\ZVRONH??A;A]vrptswrM//5//.,0*.,*+0588579;>ACDDIOQONOQTSRRQRRRVVWXYZ[[`abcdefg€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€Bgvlkpnmqqponmlliiiiiiiiiihhggffhggggfffffghiijjiiiiiiiieffedcddcd_ahecknprtwz|}‡‰Ž“™Ÿ£¦­±µ¸º¿Èϼ[emhioomgd‡¦œ•œ•yrxvywxqr||vuvwyslopgilkgipspuuuuutssrogeg`\expntqsnjeilhmtrponmlmnnmmoonljimmmmnnnnplkkkkmplllllllljihjkkihllllllllonmllljigghijklljhebbcfhhimqw|€‚Ž’™£¬²µÈÌÒÖרÚÛÐÒÑÊÀ¹¸º­«§¢œ—“‘ˆ‡…ƒ~}|~|z{|}{y}yyzzuqu…‚€‚|urrtutuxuuvvwwxxpptrmrtkfhnsogcfjmnnmgflnpqmhdegmookecgkppokhinrqsnfekolmnhafqpfQJH5/601PV;/61-(&4CHR`T12HTMGQ[^TILSOPWXY[b^QMTWKOPE?LSHGZ_SJGHLN[^XY[[Z_SJE9**302479::9<==<;;=>=77;95?OC*'##187BAAILMLIHJLMMMMMLKJPQSUVWWWWWXYZZ[[^^_``abbeeddcbbbcccdeeffffghiijjiijjklmmllkkllmnkjihfedcZYVSOLIHHGEBAABCB@LMJPPQVTOY`XSdeNBPQ>>Wc]Y[^bXSPI9((12358998748<>=:9999<=73@SD#() 2@CVgdSLq¤¤fG}¦‰b_fY??=9ADNOQSQMKLOKMNQRTTTSTVXYZ[[\]]]]^^^````aaaabbbbbcccccddefggdefhjlmnjjjkkkllgec`][YYUTROLJHFDDCBA@@?=>?AABAAFEIH@Ldojp{svvL)'.6R[QVVTgwvqqrqtttsssrrtojilnljmmlmmopqssrqponnlmnopqqr€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€Gnxptuqsxusttsrroqsuurrwtrssqsurtqqsuwuqrqqsrppsqpsusmjkppqrolmphmnkhhjjmigihghliffhgdbcdeeeddegc_cgccgecbcfjors|pgghgjo\PKNPNJC<<=>?CFENQQLLJ5.B^`[\\`^TPI8)*0/14789:;<;9:<:9<9=<=;8DU@'&%!.:FTefSLq©¡cEz¦Ša]cVHB=:@GOTTTUTSSTRQSWZZYYWUZ_]\^^]]^_^^`cba`abcefdccdedegeeghhmojjihijhebfb][ZXSOOMJHHHGFBBAAA??DC@ACCDEDJKKMOPRSXX[ZTVesopurwuQ01:I_hghc]ntqstsvvwwwy{{z|xpkjjkmrnlnppprppqponpsqrqpopqr€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€Gmyrvxutqtvtssttvxwtttrrutrrtwusstvvtttuurrtussusttrqpoorqstspquusqqpnnpsolllknrljjnqnjhnljiiihggjmjdgigfedcbcdedddddcddcdec^``[YVUVUSOKOKMNMX^UG@IVXEAb}ZOplKd“˜Œzvzvszpfiw~}yttsswxusqxwvwxxuqwtqqtspmqtqruttvrssrtvvtprsrqrrrquvwxut{vuuvsqtyvqsvtrsuvvvwvuuuwtqqsusqpqqpqsrnqoooommmjiikkjknhgeddfgigghmnnrw€…‹Ž“𢱬®²·À¹¤Š––‘˜ž|‹ž”–’Ž˜‹~w{~y{zz|yx||vpmkknleipsqoidgoqpomfdjrrplfdioprphdhmnpoibdlonlke_enj^UNK8-411IWA141.)'7DGVaM67MRNIM[W64MJ?ORLJV?1HJ79SD;745996;78;?@816IW]]XZ`TLE3(+213566777:=<8789;;:8=<4@UA%%&#,9GWhjXPtª dEz¥Šb]cVJIHHNRW\ZY[[ZYYYYXYZ]^^[\[\]^^^`a``^^^__`a`_beggfgiihghggif``b^`\VRPNMKLJHHHHFD??@CEDCDCCCEGFGJNMORSTVWXZ]`aa_^c`_\VXgvvppqywS39JXfklnjhqvy{{{~‚„‚…„€wljomknolmqspnoroorqoostrqrqprv€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€Dn~wwvtwxwvxyyxvyxvwxutwxytrvvsrsuvtropruqortrqquvtpqvxwuttutqqtvtstvvtrpoqttrqqpnnrtspnrpnlllkinmmnnljgklkjhgijkfeggefhdefc``a_ec``c_[]^[\[UQPLQOQNONIOVPL]WHhŒˆzyyzup~x\Yv—£‰_YqŒ|}‰zjpuvtttsxwponqotvwwxwsurrrrsttssssssqsusvvxzvsvywwxwtuwxtvxvz{uvvwxwuwztvxwwwuqswxuuvrlwurprtsptpnqtrnmsqpooprsolklnmmnljjklijmqmoqt{~uyƒƒ{~…€u¨¯±»·´Ä“rrxy‡Ž‘‹‹™•ylonlmheoropiekopoonhflqopmeelpqtpgdflrsphaclrrmnh`frn_WMK9/312IWA141-)(6DJY_I4:NPNNS]V53KB:RTMUR46[Q7FWKLQNKLHDFHHGKPJ906IZ^Z\^QJC3(+0025677889:98:<96=;9<<6@SC$$'$+7HXggSLr¬¤dEz¦Ša]cXOQSW\\\a^\\]]]]Z\]ZZ[\[\^[Y]^\\aa`^_bca`figdddc`__`^ZWVTQQOMLJDFEDDEEDCCCCBBAAAFGIJKKLLNOOSWWWZVY__YX`hcdfgiijie\WUUZemrlnpwrT?AB@@@@BBCBBEGHJJKLNQUWVUYZX]]]`dcabhgihb_beggeddefgbUKMQ[ekqmpqtoS?J]]dnmnngceijjhdfghiijlnlmoomnompoooonmlpnlmqspknqrrstsq€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€F{…wŠƒ~‡€i^gnkquwxz||}|z{zz|~{w{{{€}xxwrpsvurqurqruuuuyvvxxvvwwwvtuvwvsttttuuuuvvtrrstsstsssuwnstpnorutsrrsssrlpqpnnoplmliiknogejh`bif_`^\^\Z\[\ZY`^Y]XY`[\^[ckpppnmrk\UUUQU\YWY_[X`_UTWYZZYTNNQ[ƒ¡žœ ua_bagjjlkknqrrrstvwxyz{{‚€~~€y€ywz|yz|~~|{{}{~{wvx{~}{yz|ys{{{yyxxxw{{xx{}|}xvvvuvxvwz{{xvtuvvtssuutomoqqpqqnossqokroquxyzyodadaacbafijmllqst|tm|„€zoknmiijmopnnjhhoomnledlprqkfchqpqqkehqsqrlcagnpqme`gpnfWMK;1302NW>/64.%(;GJ[`E.9LRNHT`M7HVPQ>)F\B>ZdMEYWIFU^OEKGNbV;EO6,32/5?LW\NIB1)./13678899789;=:9;=74<=5?SA''%",9EUegUPv±©_F©‡\\h`WWWZa_\^`a_`a_Y\]^__^_a^]__][\[XVVVVRNKKKIECEFECAAA@>>?=@BA@?BFGHJLMNPPTVYZZ[^_]`ddcba`cbacfdabgdegecb`cddeffggcWNLP[myuoqpxuV/64-$)>HIZ_C.ATWRMW_K/;>8<2*EMFBFLOKEFNLHJIFKDN[N>KK4162112CXZMIC0*///136789:9<;89:::;85;<7ASA)'%!-9DVggTMt­¥_F€©‡[\h`XXUXacaaca^_bb^[[]_^[XYVRRRKJLMJGEFEDDFA@?>>>>>=<=@CDFIIKLNPOPTXY[\\]^`bccb```a`^_cb^]`]]]_cbadfcceefhhghhhhgffcWONR^nytpppxxX<[{mcnmljhkonknnilmlkmpoljpnknmjonoonnpqpopqqppppppprrsrr€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€<^ihrsmnsvshacjmlijpvutw}~„ˆ‘‘“Ÿ«ºÏÕÒÕÕÑÎÌÈ¿¿¸³¯­¬¨¢›•‘‡ƒ‚~~|z{|ysstspqw{{vxxvuvuswvttuuutuqtyxuusssstttttwrosvtpotrpqtoknlonnpmhfedcbacdb`agh`]ccgeabfa]blponprql_[^bb_`acaddaacfbaced_^`ba^^_^\Za]^`^^b__bb_]]]\\^]ZY[\\[\\`hjlqtsuy‚~y}€€€€€€„€}|||~€y|~}}}}z|~€|yy}{zzxvw{yyzzzyxxzzyvwzzv|xuuvuvxvyzwsrstns{|tsy{pollnlikplospmoqurkhjnk_ajqqpkffkprolgdfnpppnfgsqqokfdhnspolggmrqoicempomkfbirncTMK8.410LYA141,'->GJ[\@/EXTRX\]QC?=<8655:9416>=5=FA7;CDBAHLBAH@1.7/,6DU]XLJC/)//.036789:6;=;9878;<9;;9CRC(&&"+8DVeeQJpª¢aF}§ˆ^]f^YYTV`ccgfd_XTVXTRPNMLKJDCBA@ACDBBBA@?@@EBADDDGLMLNQSSUW\VOQZ^]`___^^_cf]^^^]]]^_\\_a`bdabcehhimogcefggehhgghijkaUMOV_krsruqusW=Y{i_rrnjjjjhikkhgklkjkmnmrnilonoqppqpoooprqopsspmopprtsq€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€<[d\]bcb````dfc^abcdhjjllrttwy|€„Ž™®ÊÔÎÎ×Ö×ÙØÖÖÙÛÚ×ÔÖØÕÏÎÉÆÅÄÀ¼»·¸ª•” Ÿ’“ˆ…†…‚}€zvvxyttutsstvwuxxtx|yprttttuvwxwuuvursxvqrsqqlmlmnjilmigeabee]__bcacffijfhf^boxqoqqsl][ckfacfgjbdiedfhcaeea`bb^`b`^^`^c^^`aeb^``^_bb_acdbabba]_ba`bddcdfhmqrqqkmsrtxyxy{~~|wx…“‘†šŸŸœ”Œ‰„€~€€{z{~|{z{}~{zww{€ztux||xuuvxvuwwsonrxxty~zqooqstronsqnrusqopoldjsfajqpmihjlsqmmhdimoookbdppopmdbjptvqhejnptupfcinpmme]dqpcXPI1'244IYE22-+)0>EJ\Z>1ATJK]]WT\ZSRPLOMOKHECBBB?:9;845;87726=3/153CX[[[YLH@+'0224677888:868;:77<;8<;6@RD&%(#*6FQdgVPu¬£cEz¦Ša]c^ZZTS]a`cee^K;9@EECAABA>BDA?BC@@ADEEEIKLKKOUUQSZVVX\]\[\`\WZba]^[^`a`^__`abccdefcfeceiieefeddbcggfhjfddeihhgghij_VQSV_ltsrurvvZCc„mapljmoooonlkkonmnmkmqpnpqpqqmprpllrutoqsqnnqttrpqqppq€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€:]hcgdcjeadeadf^_db_cc_`cffghecffhnx…•—š™œ¡¥¨¬°¼»¾ÃÅÄÇÌÌÐÕ××ÖÖרÝ͸¿ÕÚÏÎÊÆÄÄÁº´¹±ª¤ŸŸž˜‹‰‡ƒ‚~zyywz|vuywuvutvyusuvvywvrvutrmqurnnppooieeefgbbcbbfgfgjkecijg^epsoppqthabcegecddjnhchkhfgededaaa`bb]_cca``begfd_`aaabceedbcfdbedda`cc``a^`eeabhghgfgggklmkknllqhja]ÔÚ»²ÌãæáÝÙÓËÇÀ¸°ª¥£—Œ‹‰…‚|wx}{w}~~}€{z{}~|yw|||}zsnuzyvvxzpsusprtrutuwvssukrytjlogckoopmijiptqojdgpproifillophabjnqppmfhnnrsmcckpqole`emleVQM;*.20IWD166,$,FHI^X;0JWOHPVWUSWYUPQSUUSRSUUUUUVOLRPIIGBGFAA8-16JYa`Y[YOK=+(-/-25589:;988::9:;;;=>;5>RI)&+$)9BVbhVPz±§dFz£ˆa^c`XZZZ]^afeg_E25=?@BDDCB@CEGGGHKNNOQRSTTUWVXZ[XWX^]\Z\_`__^^`_]^baabcddb`fffeeeefdgiihghjffgggfedfiheeiiffghhggggcUPTV^ksxttnszbDe‹t`rrlmkmnmlmmmopqpnnpqqqonooonlqsoorrotqprrqqttrsuurpp€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€=`jfigcfdadd`dheghdbdcbcdfedecabdcbcefedkiimnnpsyz}ƒ…†ŠŽ“™ž¢¦ª­´¹®¢¬ÄÍÊÎÎÏÒÖØØ×ÚßÝØØÕÏËÌÃÀÄÁ¶°³ª‡vƒz||}zwyzwwvxxvstzusrrusoroknolpnbkecjied]afiigcclgjlmjjcenqppsvsk`behgeeihgjllkihbdedcb``_ac`_egabbcdddddbdda`dghhgghhfghffccffccic`dfecddcegedffefdcdefg`ca_xœ¦œžÁåñíëííëììììêéçãßÚÖÑÊÁº´ª”Їƒ‚€}{{}€{wvy}~|x{|{{|yup{‚~|}wzsrutuwuxxwvvvussvwpjqulfmqtvphgjnqpqnghpoqrlegpnonhbcjmrpkedhloqpjechnspmfbgongUQP=*,22IWD166,%4EHQeX:5K_]UX[YSFOVTONOPQPQUVUVYYWV\^XQOVVWVZWB19V_Z\[Y]YOK=,*.013349;87:<<::<<:<::<86BUD%"(")9CUbiWOx¯§dH}¦‡_^g`XYZZ_adhcgeN98?GHIJLMNOTTTRPRUXXWUUWXYYXWVVY\^^\^_]\^``acdcabcecdeeddgigeeigcdjgeccdfghefghgfeehhhigdfidefgghijcXQQS_mstrtrxx]Fb|mdomlmnmmppnnqlkoroopmoonooqqqtpnqsqpprootvtqpssssrssr€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€?hpejlhgjhhgddfghdadhifddfecdedccbbceffeheeffdegfefgfcdfdeffghkmswsnv††Ž‘”™¢§ªª¹¿»ÀÇÈÄËÐÔØÙÒÐÙË”zˆ’’––Œˆ…¢³¡”œ—ƒ‡~uv€z{xvwsttvwsmielhecbfd`chjgehigkkhdd`dsxrptrokgbdmoheijkoljlikfefgfeff`efa_dgbdfgecaabafhfdffdhgiifjnmijklomihlihikjjjljklkkookkjhfhhfonifedgf]sŠ”™Ÿ¥¦©¬²¹ÀÆÉËÖØÝäìîíêðèÝÒÉÿ¼´µ³¯¨¡œ™˜”††‡x‚ƒ}}}wyŠ’‹†‰„yupsxusx~vy{ywv{z{zqiosmcjqqmljdinsqpmhlpssplfgopnongcgmrroiefkorojdejpsqngbgong[QJ;/33-IWE166-'2CGPcW90I`bYY[\WRX\YVUVUSRUXWSTX[TV\ZSSWRUPLYZD9Pc\X`]\]YNJ<,*/004558989789;<<;;878:73=NH)%)$)8BVcjVNv®¥fH}§‰__i`WYZ[`cfgdgaQFGITUVVXXYYWXXWVUWY\YWWY[[Z[]\YZ`dd[_dddddbaeggfgfceffffeddfffffeefeffeddgiegihgefffgihggikffhggghheXQOR_ntuuuqyx^N^fahpjoqlnonnnnnmlnnnoonooppqponpoqsrmmpppqtsqqsttrpqtus€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€Amvlqpjorpoppnmosmjlnonmmmkijjiglkihgfddhfegfefheffgeeegjkkkhgedfigfgfdgjjjiijlnmryzy€†ƒ„–˜œ™š¤ }o}†‹’ޕнÜÀ­Â¡šŸ}[pŽ—““’““Œ¢ž{r}piozrcbbfiljhjjhmlefih_i†ˆpouqsnebbgijkkolpmlqnomiggfffdffgedfiifhiifffgjfgmldchkhkonkkmmmlmnonmmnnnnqqqmponoooqrpppnookopknnlrsllkjmpmgmmmnprtvwy}†Ž–™š¢ žž §®³·½ÅËÍÌÊÉÎÏËÿ½´¨€u{ƒƒ}zƒ’›š™˜‰uqttw|{wy||{||}{y{z|xqtvpijmoonkiiosqojflruqnlgeloopmfdksnoqmfgoqoqlcblsroleafnmf[QM>/12/JXF256.).>FRbV9-L^`[[\_\\][YYZVQVWX[YVTUWVY^YPPWZ\TLTWMN^^X[\WY^WMH;*+/0.36689:<779<<978;;:<;4;OI,&*%*7BWciVMv¬£hGy¥‰a_g_WZ]]bceffe^QPTUZZZZYYXXWYZ[ZZ[\_^^_bcb`befecdfgcdcbdgfdeecbcffeffggfeb`bbbbfihedfhheefidgiigffgfeeffghhefggghijaYSQSanqswvoyz`Q^YXkrmprmpqolmllptpnpnjmomlmnopqlnqrqoprpopstsrrrqruwvrp€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€Dnynrutxsrqrusrttqqqonpsvsrrrqpooopoonnnpmmnnmnpmnnkigggjhgefghhffffhddkgeccdefge`cigcdfgjhiokgnofbgkkllnirqo¨•„— ŽŠ‡iSt—–𛡧¢«äÔz~½¼˜io¤‹¡¤l`Œ¡—r^etsmpnftŒroxqplb`ejjhlpooplntpmnhfghgfejhfgjkjiggghihhglihkkihiloooqqnmonnnopppnopoqsqmtwvqrsstpnpttttqpususptrrpnnpqpnmmkjjklljhgfghihhhhhhkorkpw~„‰Ž‘—¡ £¬¯­selokx£Ÿ™•™™Šw‰š•‡‰‡‚ˆ„‚||}|y|z€„{yrimlntqiijmppplehsqooodbkprrkcdkppmmicgmnkqoc^hsrpmfafnmf[QM?001.JYG256/+*+-9E:+,CMQVZZ\\\^_`dd`YZ[\Z[ZWSTY[[\SNRSUVRUWW_]Y^\VX\`VLG8)*/.02249;988:;99:978:8;=4:QC'"&$)7DVdkWLs¬¤fFx¢‡_^e^X]_`bbbgdfcWQW[\[ZYZZ\]^^^^_`bd__``aaaababdca`aedcabcb_dcbbbbdfffffeefgfbaegfedfeeegggfegjihfghlhgjjeeihhhggghiaZTORbpprurmyx]QaXXktklomllmmjijkpomqnmrqonorrsuppqqqpswpoprssrrusqrssst€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€Djzusuutssqrrqqrrrrtuuuvvssutsssstttrrrttqpqpnnqpstsrtutsqmlkllljllmoljopnlkjjigijiiljghhkgcffcehfccefgjddhhcioifhkhiiablrpptsv~w„²ªit°¼¤s`–¨«ÎÄgT¦×Äœ`QŒ¯œsƒ°£„„ƒztvrnx~|||~xkotru{tloojdfifbcgjjjkkjkgfegikigfjljlomhmrokosrpppqsrsrpmqrrrtrnuvvtrvywsqswxwvutuuwxutsvuuuspqsppqqqpnnqqqrqrqqjmprrponjjigeegiejmklrwxmkmqlfm{†‡‰‹wŒ­·¯°®®»­‘yx||†‡‡‹‰}…‰ƒrjmomjfgkpqqkeimnoroeckqonkebhnpqngcdinoold`irqrohchpoh]PJ>210,JYG3560-+'#&,*(../.6;:==AFIKMQSRWZZZ\a_Z^b][`_Z\XX]]ZXX]]Z^]\`^cVLE6'*.-/3336765987679:;6869<5:PE*#'%*6DTenYKr¬§bFz ‚\]e_X\__babfdfcWTZ^_____```_`_``aaaccb`__`afa_beecc]befddca_bgieabfhdacgieaefggffedeghihhgfegijhhghjjjjhfgjkkjhffgheWQSU_mtusqq{v\T^YYjrjioomkmopnllmopmmnpqporromnorrrpqrsoprrqprtsttrqrtv€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€Chxttrsyvuuuwxxuxxuswxvwutvvtssrvwwurpqrvssssqqtpsussuwvstvyzvplpttqsrnmoqrrpoopptpikmjfinnhfhjiigggffhjdgjhghhefbbdfgfhfcbcec^bbciib_gmigZhoqƒ|[T{’ŒiGa™¥Žn|¢žwvxqqqs‡±¼½±µ¾œbw²¬{dbo~ŽˆŠƒtorpllmjimjhghlmkhmlnqpmnppnostpnqtqrrpqtsnrutuvwurrvxwvwuwwuvxxutzuttwyxyxvvyyuttuuvvvussqsuvvutssrrqqpooopqponoppqqomllkknpoqsngjqxzwrqrt{{{‚†Œ——|kmnjvŠ˜™š… ªžxhqqkjiflrsqidimnpqmggkpmlkedkskppjefmttnkfciqqrohchpohWPOB.*-0JZH3561/)--**,+)-+&()&(&'*+)*/477:=>CHKJSWVTY\[[__ddbb_ba_`a`\\bWLF6'*.,.3655667:767879<<:9:==DRI.&('*5CVdkWNu®¦`H{ž€]_d`WZ[\acfhff`UU]```bcb`_]``abba`_eca`````da_`bdddadecceghcegfdcfigc`ciic\_fifeiigdhlligghfgiijihhchiedgihiiihhhjldTPWZ^jsusuw~v]U^YZjrlkqmmmlnqplkkprooqnronopnmooopqsrokppqrrsrptrrssrtw€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€I‡™‡‡†{vxwxz}€}uw~}xxvtvtuyyvwxutvwwutuwwttvvuvytwxtrstrsrrsvvusswsnrxwuotxxtqsuuprusqrrsopssrsuomqsmmqqnklljlkehgfgecedcbfcdfcfc`bc_^aa[[\[]]Y]ZZZZZWTWWXUTU[Zapnllomku„–•¤³ŽNu»¤\BO±ÑÍÅÏáÖ»®±ŸŽ“Š‚„„€}{ywrolqspmmoolptsqvwrxuutrswvssrtx{yvyz{}~xuyyzvtxyvvvx~{yytuzusvxwy|}|zwvuuuwxyywvuusstuvusprsutsrrronmopponoopqonqtnrwxxwtrl`]db\]bdbejjgkttx}yt|‚}wroqrkgijmrtskcftmmqmfglntuldglmnmnkfjrtonng_dorqmfbgongYOMA/+,-JZH356201/.-*')/%((,,++%)*(%$&&$#$&%%&)*,04559?ACGMNRVTW]^[__]a^XMF6'*/,03449;986899:=>>DADIKPX\C*"%&*5D[cfUR|°¢bHyœ€a`a`WWXYaekogebWRY`cccccba`aa`aabbab`_`bba_`deb`adegfcaaccaffedfiheceffffhiefggfedchgfffggggghijjihiiihhijijjjihijldZSOQaptuuwswt`WbZ[jsnlpnmnpommoonnooqrrpmlopoorpmovumlqrrronortrmox{vrs€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€U¤À°©‘y|}tkimqrttvwwwwvwx||vvzvuzxuspsuqptwvuvvxzwqswuqx|xttuuxvwtrxynssttttuurqswywuvwtutqsvsprssroptvsppqnnrpmonjmqmkjmmfehheggdege_a_``]]^[\Z\ZWZ[TWUVSRSRYlvuomoqhWRWZZZVVceaWP\w™šš°É½­»½¨®¸£ž¸º³·¾ºµ±«¢   š””˜†‚…ƒ|xuvuqpsspnquwwtrqx|€€ysx€xy{}yx~|}{}xyxr~wwwy||ywz{zyyyxwxxxyyxvt}xtsuwwvwttvvttvupsqqvtsrvwtruvolt{zwuuskjkljjkijkkjjkkjkfgiedaW[nsrqjhhknrurjfioqommjhkprpkhgioromicelpknldaipnqqfadkpi[QN@0,.1CVI799425332//0,-/.)(+..&)*((*)&'))&%''$(%$')'&'()+-0468??@CHLMLFA92-,-.34579:<93.+("),('0DXdiVNt¬¡fNu“‚c_ibWZ][addggheZT[da``a`_`bbabb``a^bcddddeggbaeeddebdffeffcgdcfgeefghfeghggfigfgihfhghijjhghhefkkggiigghiiijjjjihij`TRXZ`lrtttszt^Y^\Zktmmojnnlnonnpmmnnonkpqnntspqqsqoooorqqqrutrqvwussqqs€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€[¢Â¹°œˆƒ€‚wc[diejijjmnonvuutwz‡†……½Á·µ±¯°¯¬ªª¥Ÿž˜”‹‹‰…€~{yuvxxxywvuuttsssvvvspouzwqtyxrrttwywuuwxvvvuwwurxtyvstsutpqtrpppplklmkkmfiligkldccegha\^_[YVXWT\ormkouvlXQTVUWUVZZZYZ[_a]_]\a_ZZ\^^``VVe]^cdbehekmry~‡ŒŽ’•˜ ª­ª¤¦ž•™”œŸž©³¦“”——’Ž’™’†ˆ„ƒ‡~yƒ‹‡€€‚yy{}|zxxyy{}}{yy{~~~zxwy{sux{}|zxwwwx{|yuztwzxwstvwurqsuwttvxyx{snnpmmopompuuolmlpphejkfmmnstmjiioqomiggqssqmeemsrpjcdkpsspieejpqrlefknonldcinpfXQN>,,/-GYI3689;9458423311475/-./..//-,-*(''('()'++'%&'%'(+-..,,--.,+,15149?EKOR[\^_^\YVNLHB;4/,***)(%$"&!'*)*3GWfkVOx±¤hJq–…a]i`W\_^cgikgfd\W\aaaaa`^_bcabca`a`fcabdccddbddbacdfgecefghfdceffefgfggeegggghijhffghjihgggkhijgiljfikhefhhggilljkmdVQST_nuussqys_Y`]\lvopqtpnnopommllnqqpnrorsoqtsmqsrsporqoortutqotvuusru€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€?n~~wqqqqlc^cillmmmmoqrsvyyxz„‰ˆ…„ŸÆÐÉÊÈÉÌÍÌÍÏÈÈÍÐÉÃÄÆÀ¾¹´°®ª¨§¤¡—•‘ŽŠ‰‡…‚€~}xwwxuqsyvssxvqoquuwwtstvyrrwwyzwppzvpwvsstsqnpssnlkoolkmqllmighgbedef`Z^b[USYXSZosomoqodZRUUUWWYTUVY[\ZYWXZYY]_]^`_bfc_ccgiebehfddefffghcegfhklkmqokksurt€ˆ‰˜“…‹‹•“–¬Æ±œœ›£®•­Õȳ½ºª›˜“Œ‰ƒ€~~{yy{}}|{z{|}z|~}{{}z~~{yzzy~vuxvux|zw{{utuwmtyywwz{qmosrqrssrrtspopsurkfglnnossmhhgkmosqkhmnmkmojgnupmhcfmootrkgekupnmhdhlkmkcekpofXRP?+.1-GYJ67;;><57<946869842331-,-12/.0/-,/.+*,,,*))+)&,,,-./0125:?BFJLVY]a`]YVPNJE>70-))*))'&%%%%&&&&&%#$#(3F[gjUNx³©gIs™…_\i_X]a`filjhhe[V[bebaaa`_`cbbceb`cdccddcdfeddddedddfdcfffheddeffefedfgeefdgigghhghijjjgfffjhklffhehilkfhmnggikkklocWQQUborvtsrws^Xga[kvrstpjnrlmrpjsrpsolssqlloqppqoruqpqrpquupptupswxssvw€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€>^gacdee^aefdaabcdedcdgikiknqpruvwz}’±¾¿ÃÂÅÉÌÌÏÒËÎ×ÛÔÏÔÙØØØ×ÕÑÐÐÏÓÑÊÉÊÈÅÿ»¸´±°¥¨©¥¡ž˜‘ˆƒ€‚ƒvsyzvuvurprwxuswuyuqsrqsvwuutsrtnnrsmlorjjkigkmekicda^`a_ZWZVRajnkjmoqj[TXZYZXYZ[\\\[\\[Z^_[\^]b`_bhfa`aggbadggjjihggfelklmkhikjjkkljjibgifeggdgeeghkwƒs|z~ˆ€€ª×ɹÒÕüÁ¿½½¿¿¾¼¸²¯±°§—•‘ŽŒŒ‰„‚|yxxxyz}}xx|‚€zy}|{…zxzuwzusqvywwyzxsprutsuuxrrwxstzwxvleiqtqjkonmidimonmjiklmmnmffonmooihihoqmhhilromjebgmmpmgiprrjZRR@,/4.DYM:<==??89?<8:<;<:535766323424784221-.030.00.,,57;@EKORTVZ^`]XSROKE@952.,*'&%%%)*))'&$#(''&&%%%% $%%+4DZbeTMt¯¨fLzž†a`l`Z]_`cdgfilgYRZeecbccbbbcbbdeb`dacddddedcddbdedcaddeggegfccghddgeeggfhiefiifhjihjiihhhgggjhglkgijffhhjljkllihiklcUPUZdnpvrsqwr_Ye`\lwpppnkpqmqunrtnmutnpttrrssqrtnptspsutnnqswvrqsxxtsvv€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€:`kbdjkgcfgecefecefecdehgcbeeccfabfgny}ƒˆ”—¢¤¦®´´·¼¿ÂÄÈÎÐÐÑÔÓÝÜÖØÜÜÚ×××××ØØØÙØÖÒÐÍÉÅÈÇÀº¸·µ·¥†v}‚~~|‚…{uwyu|{wuvy{vursvtpotqlnsvqjolkiehkihmlfcbaa`]WUZUQbornnoopiYT[_^]YXW[]^[[^aZX\`_^`a_`aeggffeiigjlmpklkkmpommkloollpnkknmllomifimmkifjjedhhdb]fdafdgt‚up„{y„ˆ–œ  ¢«¶¹·¶¹·´²µ¸¹´¯²¬¥£¤¢œ–””‘‰†}}{{|x{{{vy~srw|‚ƒ~|zsqqrruxxxvvyxwvwsxxlbmyuojpsnheghoqoljhgllikmiflppplechkoolhfgjosqg_bimpomgjmook\RRC-/4/AYO>?@?@@;=A?=?@><<=;78<;99997788533358;77;BDEIOUWY[[[YXUQLID?7242.+(''(+)%"!!#$&''&%#"!&%$$$%%&&!"!#+6EYbgYRu­¦cL}Ÿ„``ja[\_chfhiijfZT[dcbcddcdgd`becabbabbbcedaaefdcedeedddffgjfdeggedffggeeijggggjkhgjihghijihcgffjihkjghkjjiijlkhfjlleYQRWeqrtprswubZca^owonournnpsropqqonorupqwvonrroootwtrwsrtvwxxvostuwvuw€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€9cm`affccghedgfcccdeffgfffggfdfigdfeddadbbdffegjiimprx{yƒ„Œ’•—šŸ©«ª¯´¶º¼¾ÂÆËÏÓÕÚÖÕ××ÖÚàÝÞÝÝßÜÙÝÆœƒ‰Ž‘•’™{oŠ‘Œys‚ƒ‚ƒ|uy}|yux}€{plmkjlmkkmjgikib__^`[TRZUPbvunnqqqj_WY[Z\\]d^YX\`a_ba`ab`^``cfedfgfkmjkpnknnonmotrnpooppppprpooooqsonooljntqrpkijmormoolllijdfhhgdecddcbcfhljmpomu€ƒƒ†—ž Ÿ¦©®°±³¶¸¸¹º¼»¶³²¯­¦£š”˜–ˆ…ƒ~|ttw‰•“’’ˆxttutsy|z|}wuxwsy{}rfsykhnrqmghglppnhdelsuqkdfqnomjihhjlmnjeelrssjadjlkmkfgihki]OPD--4/AYQ?AAACA>@B@ACB@?ACA==@8:<=>>=;>@BCEHJITUWWWVXZRQNJD=841-)%$$%&%'+--*'$$#""#$'(&&'''&%$(&%###$$#!,7F\gkZRw¯¥bHzŸ„_^gb[[_hmjkmjif^Y]ccccdcbcfdabdbaaabdeeddeffcbehdbdfdefffgheggffffdikjhijjkkgfijfgmihghjjjighmnighgdgjjihikfghhijmncZVTVertsostyucZhc_nwprurqonnmovrqrqnosspsqpsrqtqsssusruutssvurpuvssvwvw€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€?hsijigfkjhffgggigefhgdadefgfggglfffghehgghifcdhhggedhidib^bffdefmmmqqqxz|„‰Ž’”˜Ÿ¤¦§«°²¼¼¼ÃÊÈÈÑ¿•‰’“—›žž¡š‹‹—ž¥¤ª¦zm“ž™£›‰‹˜™’š¡¸Å¤wxš–Ž…ysqolrtkddc^_[X[TSj…uqstun^VY[Z\[\X[_`^]]_ab^]bb`caefcagiclkhltpkpuvtrtxvpprqprvvrqsrqqstsmoqtsrsurjkvxolqppqsonspqlwtijmurollmoonsjehhc_`fdbabcccadinrw{~ƒ†Œ“—›¥¯°²°³²´¿¾šsx‚z}‚‡–›œžœŒy{~|zyx{}~~~{{zƒ€qw€uiinoqqgchmppnjghlrrolggnprnhedfmppqmeelqlmjcblqnnmhhgfkk]MOD,,2/BYQ@ABBEA@BCACECAEECACCB@CDDFLONPV[]]]XRTRME@=71,,*('&%%%&&%##$'%%%$$$$$$$$$$$$$%%&%$"! $#"!!#$%$"(+09AL[hjSKt®£fHy¡ˆb`hd[Z^gkeellmi]W]fgdcccbaaddccdb`cfdcddccdehgfffdegdegeeffffghgedeehihhfehhjjhiihikjiiiiihiijkjiihhlkijjikffhkjijmdXVYY`oytptvyubXea_r}urqosusnoqroqrstttuooprqstsprutqsvtturrwwtuzvuvwxxt€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€Ehrospnqpsromjlroliknnlnjijjjijmhglngfhe_dhhffghgfddffdcehkiecfieeffgghhdfhhggikehmqolmrtvx|€„‡‰snsy{{{„ƒ‡‡…Š’—”žœ‚yŽ¢¡ª¤”™¥ ºÆàúÙ‚|ÍÜÊÇÌÉ’s‘t\œº¡¡ž˜‘‰Œ„e]w tqzurv]XYWX\YY[W^\^_Wb^fe\`ecgejhcefgiiknorsrpuqqutprxttssuvusxsquvssvtuwwuvvronquursvnqrrsrqsppttpmopklnpqqrrrnggopljlmmmmnmlhjiffijhghijjihgjoprx{…yploqry„ŽŒ‰ˆŽ”‹x€œ©¤¢Ÿž¤Š~~€‚€}‚‚yy€vpmmrqiigpolmiekpsnkmgbgopolgcgoromjeelrolgcdjnklpkbcghg]UQE/+32>SQBDGCDABCDEEDDCFJMNOQRWY\^^][YUQKGC>950***'((#"$&'&%%%%$##$#"!%#$'%"#'&% !&"&##$%%$$#''(*+-27<>BCNTLJZghYNz°¨fG{¦‹c_ebZZ^gmihghkh[TYbkhbaffb_cddcbbcfddcbbeghcadgdcffgefiifefhffggghgeefggfgieghijhhjdiljgilogikiikllmmmlmlllhjkjhinr`WRU\fptwwwrvvd]he`n|utxsqsvsrsrrwwvvspsutvuprwwtuutttsptvuuwwvxwuvzzvuw€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€Ao|ruzwsstttutrqsqprurprvplotvtrlloommppoomkijlmiklkihikjkkjihhieeeeeeeefeeeefeehecdgjifffeeefghgghfceihhffhgfhlklrvrmpw{uˆ|u~‡Š¢ÅßÀxu¹ÌÁÃÙÂ}‡¹kT¶îÓÎÏ×ÚÎÏàÌŽu‘ž‡rtwsrnRHq„\gstttnid]`]]bfe`febdhfdhmmosssuyrqstsqtyutstwxxvsvwtsuvttopvtpqvwvtssuvutuvutrppsqqstvwvwutuuuroqsppsropmpstsqnmlorqonoomnonmmnojkllkjkjlorpmlmlnrutu{~xx€…‰Œ›ž…mjorx˜ž’€‡›¢•|mmnkecgnnnojehqrokjgionknnfekoponlghmsokgffjmlpmdbilhd^TOD0-30;NOILJDGCDFIKMMNUTTX\\WRSQNID@<://-+)'%%%"#&%'(#&'''&%$# !"#$%$#" "! $!!$! &#$%),1578=??BIOQSZ^WWYNIXgj[Mw¯ªhK¦†]^j`XY_gmjlljkh[SYdgdegfffbcecbddcfgcadeeddebdgdcdcgfeeefggdeggehidfiiffiiegilifkmgghjljhiljjjkjiikmknplkmkgjlkhgilf\VTV_ltuutputc]jhcpzuuvrpruttutwtqquwtrtyxqovyutstvwttusuwyyxyxvwwvvwy{€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€Enyqtutxwwyxvuwvwutwzxtuuvxyxutvuwustuwzwuuttsssqstsrqstrqpoponmooooonnnqnllnnliikjhjlidijjjjiiiiilkgfhghgghiiiicedceedecbdddhkhhs~…~ee€………“…b{ŽiZ’±£¡£³¹´»ÎÁŽx‚pmyxvwj55~´¶Î·]o½Ä¸¼¨•ˆ{xŒxlzupvxxyupomptsqptxtuusrstuwuuvxyxwrwyusvyxqtvvxyyxy{yutwxuttvwwwuszxwvxywuyustxxtouyyxxurtstvusqrtnqturnpsrollnppoqlmnlnspoqrpmlmnls{ytt{}og`_aadhfigfhgiq{…~qx‰qnssmggklnppkghrqpmjgjntmljddlppmliefnsqpkeelqmnhbfppga_RMC1.2.ADHMMMNPSX[^\baYV\^[[fk^XWMJYhk[Lv®ªgH{§d`e`[^afjimkjkh\RW_efcbddcefaeiddhhabdefeefccefbcgjehhffhighgghhihgikjggjifiihjlhgllmljjklkkmmllnnmmmkjkkihljgggjklf[TUYdoussvtzwd]hfervswvsstsqquwtruusuxwywtuxwvzwussy}ztwwyxuuwwxwy{zxxz€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€]ŸµŸ†~|zsnottpwzxvy|{{zvvy}}{y{~zx{yux|zzzyuwzxvuvxxwvuuvvuuuvtttuuvvvtuwvutuvyvstttuvstuvwwxxqqsspoqqonoqpmkmrqqpnlkikkjlnljmifhllhghhfmdffdebfbb_Z^\\[WWYRR\koonknqdRMRNPdbK`€uvsuw‰¢°…k‹”¤¼ÊÉÊÍÉÄÊʳyBAÀËÀº½Á¾¹·±«¦¦£˜˜’Œ…ƒ„…„€~xw~|ww{zz|{wuvytuxvxytu{xtxzxxuvwwwvutwywuvvuyuuwzyvvzytruvuuwoswuroqtrrpossqrqstsrrpmlnuyxw|~zlhligjlnjjlkjkjjlof^egY]hqnooiemknqniijmplijgfmqnljhehopoojegmqpkheehmnnnf_elmmZRPE0+1/;KMBBA92/..,+(&%"&)'%#%'$#####$$"!!"%%&% "###! #""!!!! "#$%',2678:??AHMNRUVTUWZW`ea]\]]^`daY\b```____``ahg]Zac^dfeZYZPL\ikZMw®§hH|¨Žfaec[\`hmjkkkkf]Z`eedghffgfecaeiebfeddfedfihhfeghhffgijiggighjhhjkfjmmjjmmkhkkmplimljkmnnmmmkkmonnoomsvpkmmkkigfgkmgYPT_jpovuww|wc]nkfr{tstsvvsssrswwvuvutusvywvywqtwwuuxzywxxxyzz|yzzwx{yu€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€U–°¤™…wz}}kalspsxtsy}xvz}{y{||||zttwx€‡…‡‡œ°¶³°°®«««ª¨¦©¥¡ ¡¡˜•”’ŒŠ‡†„‚~|y|yuruyyustwxxwtsvxzyvwywwwutwzyu{swztx|tuvwvsuwtxuqquututpnrxqrlloopgbhceZSVWPPYjklqpnmdRPSRRUUWSPQYUT\[\W\\Y]acbgfdgjloklmnnlheijihhijkmggoroosqqppt{}{…Œ›¶¹¢’š¬½ÂÃÌÚåÏÄÅËÏÝéååòïéîêÚÓÐËÄÀ½¸¯©ŸŸ›™š–Ž…€…‡‚~xzxuuxzxuwxvssvzwuwwrswvrxytswunptyxtv{|yojotrqsvsorwtptpnqmdhplfimnpmhjlnmmomiglnookggjmllmmihjkmnkfhmnqokfekqqslcclojg]SOF4/3-#$$&'%$(##$%%%$$"'('$#"!!"""### "%&&'*-7;::>BFNNSVTPPV\VZ_^ZWUVQ\db\\^^`bgbY\b_`_]\\^acblk^[eh`cjj\Z[PIZjm\Lt­©eH}§Šbdng^]ahmhhhgih_[_eggccfgefdggffhgehgfeffedghgefhgfgijjihjkkhlnikpmmmmklnmknkmomlmnpnllnqpmooonorqoomptrjiokhfhlonlaYTUXbnuvtvv{ub\kkdo{vttyxrpvyvtrtsswwvxtqtywvwvvwxxusvzwuxzxyzwuvwxyz{{€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€8_oggf_^^]]]_bdfdghghlljonnqtvvuqv|}}~ƒˆ‚……Š ¹¿µ·¹ºº¹¹»¼»»¼¼¼½½½¾½»¹·µ´³¹µ³²®¨¦§£¢Ÿ›˜”‘Їƒ|{}{zyxwuvvxzzyx}|{zyy{|{uwvqtzxrquvsnp}xrqtrprvqommkjkf`_^ZXOKYloppntveUNQQSYWSS[WQYa\UYY\__`eldgiihhknponorsrqrolmrtspppmijnnjkmlhffebeegmrsmgmpux{€†Š‰ˆ‰™¤­²ÎߨÓáßÔÝÛ×ÖÙÞàÝÙÏÖÝÜÔÎÍÏÇÆÃ¾¹³®¬£¢™™™‘…ˆ†ƒ~~z{{{zywvr‚y{|qsuƒ…€~yxprpnruuvmprrssroqrwobkwpflsrmkkiiklnnjhilqrmigimnrojhfhmlmokeflmpmjcakrmmohdgnrkZRNH:-)) &(#"! ""$$! !!!$$"$  %&&)+/51AABFMRUUSTVWUX\^[VVY[[]^[WY^Z\bb\[][ZbicY]cbfklbXZ`^dd]]^^eechf][cgebifZ\[NMYijXKy±ªdH|«Ž^`na\`bfkinkkni]ZdkiigikifhjgimlhhjiffjihhhfghijiihggfgihgjlljimomjkllknqpknqonolkpqjinponlomnonlmnmnnoppnmqkggfjmkcXRU[dovvuuvxu`^nkfrxqswssrsvutuzvstutuwuqquvwwutxzwuxzw}yzzutx{zxvy}zx}€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€<`j^_cadabcdca`^c__bb^^a\[[\_``_^^____``dbbcdekqlosuwy}€~…‰‰Ž˜œ™—šŸ¥¬²·¹½¼¾ÄÇÇÊÎÏÏÐÒÓÔÕÕ×ÒÒÙÚÕÕÛÔ¬Š†Œ‹‘’‹‰‰ŠŽ‹†„…„……‚„‚}{wyy|vuutzwtyvqtpqxsomghga[XYTNZkqmkmmniSQWWTWX[ZYXUVZ\Y]]_ccbdhhjllmortvtssuutrutrrrssspoosutrrorrpqstrusqoopqqtqoortsrmllmooom`gfchifgje`_cghgmoqtx|€‚‡Š—Ÿ¥©«µ»ÀÀÁÇÍÐÚÜÞáâââáåâßÚ×ÕÔÔ®x‚{v€Ž˜—’–”ˆt{}yxzzxyxvvy|zwxvytimuphlopomkiiloonigjmonjigilrrolhehorqkfhjmrsohcdimmmngehmqk_UVK/#&$! "%&$""%(***/56@@CJKQTVYWTW\Y\baZW[Z\bdaZXZ]]_`\XZ_\afd]_a]]ekd[]dbcgicZ^dbcb[[\^fgeki\Y`c^fnl][XJJ\klYKw¯§bH~«]`ob\`bgjinjknj^\ekjjhhkighggigeilffhiilkiggikkjihigjifjmlikoollkkmrljlnnmmnpnmonmportpmnpnmmmnnmmojnpnlkkjpnlihhklf[UW\dntxzyy~ybajihu{ruxtsrtutsussuxwttvtrtwvuwyxvxzyxz|{yxwtvzz{{ywzzy|€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€9_mcdd_`cdefeecc`__bbabda``acdcb__^^__^^a`aec^\]abca^]]^_]^bdcdghjlorvxy…„†‘’•™¢¤¦©¬¯²³¼º»ÀÂÁÂÆÈ¦‰†ŒŽŽ‘”˜œ˜–—š£Ÿ›šœœ˜”𛕖žž—˜˜‰‹‰ž†|Ÿ–|Š™Œ„vjtwttihgb]YZSKUmnlmlmrnZQSTUYXW\WVYXZ[W][\_``cghkosttrrxwuvxywvvvuutuvwxsqtvttwuxwutwvtuusrqrtvvsqpqqqpuspqqsrqlnpnnqrntpkijkjijhfghigd\]`cegghkmnptz‚‘”š¢ª°´½½¿ÄÊÒØÝ¯|wŠt„¡®§ž••ž˜‹°·¦¥£›œŠxuz~€€~xrv}€xqoonnmgimoolfdhnpomjhginmmmjfhoopkggjklppjeeikmmnfehlpk[SSK1!% '3AJQOG=97?GHGLNTWXYVSVWZ[^a]Z]_YZbaYUYZ]ad`[Z]^_aa^Z\a^bgf__a^ainf[]bacfid^afehha``_dddmk_\egaflh\]\NL]mmYJv®¦bI}ªŒ_and\\ahnjklgjkb^elihjlhikkgfhjihfcfjigjkhhijkjhhhihhhjkllmjmmmmnnpopopqrplnonmooopmrsnlopmmrpmqqoqsqnmmpppikjhggild\UTYgswswuruwc_olgt{ttuusstussuuvxxvstwvwvuxzxxusuxyyxvvxwvxyyzz|~~z{zu€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€8`qjlmgggggfghjkdffefghfb`_`bcb``___aaa`Z_b_[Z]`\]__^^_a_[\ab_`d`_`__^_^[Y[_a`behhhijkklpuwx{„ƒshhnpsu}€‚~„‰Œ‰ˆŒ‘”’››•• £¡£¬²¹¯™¬t¼¸¯ÙÌ´yKFT[[RQLMKEEFJ]ojloilujWMPUX[WUXTVZ[\`ca]\^abeiginrvvusvttuwxwvxxyxxy{|{uswyxy{uwwtuvvtrsuuuuvwrsssrsuwvtttusqoqqsqosvqrppprrqookijmomkpppnmjhghfedccehfecbbcefkknry€‡‹qv}z{‚‘ŒŠ‰›—‚•ÀÒÊÏÐÎÕÑ£}tqlwžŸ¤–€ƒœªšxjrphhigknnlgfiplkoohgnomlkfcgnrnmlhgjmloleehlonmeehkol`UNMC2+0>Qkvw|‚k\MP\[UVUXY\b`[Y[[Z]a\Y^]YY^^YWZ[\`a_[]b``bc_[]b``eg`\^_`hnf\]cadehf`bfefgcdb`b`ipna]bb\^^WNWZKEYikXKx±ªdI|¨Žabkd[]`imjkpiii`]emghlmkkliljhiljjljjiikhgkiijjjjjkhgiklkmojlnllklooonllmnnpponoooonoooommomrplnnlmqnmnoonmkkjjnnllf]VTZfrvvvvstwg`smfpyuuuuttutttvvwvttuussxwtvzxtuuuuuyzvvvw{{uu}zvwxxx{|€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€>eskmojllkjjjmoqilkgfhgdhgefghfebcdedeffdgd^\ab``ab`][[\^_^\[[ZXYYYYYYYY][Z]\ZY\YYYYYYYYZ`_XW[[TXXWX[^\XY[]\ZZ\_]]]afihfkjfhotuw“¬¥|x…db““…¡±¡d41LQD784/.//,=drjlqhnud=5;@DINTgtpbeu~xsppponputrsuvvuxwvwxywvyxvvvxxxvtuy{{yxvyyxx{{yrsuxyywvuwxwuuwzwvtvwyyxtuusquwtttuuutrqzupnprrqoppqqqoooopplilqkkmmmkihkjhgghijinslozvqrx~|z}}vy‚ŠŒŒ— ¦…jfeev¦¥±§‡®´žwhtshfijmoomifiopppjdfpomlkffkqpmljdejlnpnfaflonleehjnlbYOPRKLYox††y|†‡†x`U^`ZYYYVY``ZY^\Z_c^[_[Z[^]ZY[]^ac`^`f`acc`\^cb`eha[]_]ekdZ\b`jikjdcecce``^XXTRUQG??=953./HYOJ[kkYKx°¨dI{§ccia\`cfkinolmi]\dikmkjlmiifkihkljiklkkkjikjjlllkkjhjkjgijijigjmnlmmlnpollnnnnljjjjnooopnnqqopqomookmprokikjjkllllkbXRV\fqxyuvxvud_omgrzuuuutuustvvuwwuuwwttuxywwwuwuwxwvy{wuwzyxzzxywwz{{}€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€In{qrtprponmljjjpppnmllkonllmmljfhjiggikefd`bhf`cdeca_`a^^^^_____^][ZXWW[XWYXTTVTTTTTTTSX[[VUYXTPRSQRRPKKMOPPNMLJKLMNNMKOLMNNQTSPQ^bSQXOQVWal]R^YECPSGBGD97;9/9\hcehfnr^2)+,+4BQu’‹¢¾Åü¸µ¶´®¨¦¨£™—–“‘‹‰‡ˆ‡…ƒ‚{z{{ywz{zyyyvrxzzwwyywywvwywsnxxwvvvwxxvutvwwvwzwstwxwwwwwwwxyuvwxxvsprstttsrqsqrusnmprssrqnkipppooooosqqkntomqtttxxttte_`^\dkecbdfhnsxvzkt‚ysjjstkedjlmmlgdfhqtohehnooqohfikopnhehmollmidfmnnkdehjnla[VUY^l{}x}|nkv|ƒ‡rYYa^Z\^\\a`ZY^[[bha[__`dgd^]`^_ceb^_c`acc`\^cbcgha^_^gnsj^_daea`]SNMIGG@=70/+%'&# #=TNJ]mmYKv®¦bJ~§Œbcjb\`bgjinmkmi^]dhmokhklkkljhggefiikmkikljjlmmkjjjojknlijljlnmlijnkmmkknpnoqqolmnnmnlkpqonqmormmpnnnnnonmlljlkginodYSU[cnuxvwwyvc`pojsxrsrtuvtsvxwuvussuvuxstyzyyxstyzwvwvxwwvx~~vy|ytx}}|€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€Bhwnqtprpqstutsrtqqttqqtusrrrrqonqtrnlorjopkfhmnjkljhfghhbagf__e``______]ZY\[XXZ\[ZXVTRQRRRQQQQPOQQONOPOLKJJLMNNHJLNMLKKMIMOIJLHIJLIHHDEGHJJHHFCFMGCIKIIFFDADB::7/*(%$$ "!!%,' >TOLZjkXKx±©`K€©Š`cld\]ahnjkogfg`]emjkmliloliklifkokjgikhhklhjlkihjmjhikkmnlnnmnnlknqoopponnmoqomnqqprrqpkkpoopoklmjmoqqppmjidgjhkmic[SRWdpttywtyyeasofntrvwtuwtrwzwtsrtwywtuxvsuz{|wwxwvwyxx|zwy{yvxw{…ŠŒŠ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€3JRLORSVSSUVXZ[\^]\^`bbaccdfhijkgijlmmmmllmnopqqoqsuuutsqppoonnnkkjhgeddgfdba_]\^^]]]\\\[ZYXVUTSTTTTTTTTLLLLLLMLNMLLKJIIJJJJKKKKHHIIIIIIGGGGGGGGGFEEEDB@F>?AA<9EV]Z^^^g\F=FGBFDAEIQZbimowx~…Š’˜ ¦¬²¶¸¹Â¾ÁËÏÍÐØÝÕÍÐÛáÞÙÐÑÓÐÊÃÀÀ·Àº¢–œ•“—”ª®—…Š‹‡Šˆƒˆ‰ƒz{~~xz~|y{wqqrtw{}{upwwwwwxxxursvwtsvutsqqrtutuuronqtosvtqopsprrttvwlmlv~vrw{tifkkiihgjlkkklkhjle^cg`^hopomhflpnjljfgqmmnkhhjlpqlfekpmkjigimnpnlhffjmrpe]dnolh`X`nppzyku‚sejp{…ƒt]X`Y^`^`iia`d]]fid___]diaXZ_adikhda`bcefaYUVQOJD=73032-$!  !"##&(# (+)*-1%:VPJ]mjVLx­¥dI}ªbbje[cecmqnnpmg_^glklliijlmlmiinnjkkkjjkmmlkljgkpoijljhlnllnjlppoolkmopnlkkpmmpqnmnpmopmmqtonqromnlnsrnopnmjeglkjlng[WXZanuuuupuvf_rlct{vsttuuwyvsvuuuuuuuusvz{{vuxwvuwzyvwyzxuuuwyw‚‹Œ…|xt€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€+AF===;=>>>??@@ACBACEFFECCDEFGHIIJKLMMMMPQQRSTUUWY[^_``_ccdefghhgghijkklonnmmllkkkjigfeeccbba`__\\\]\\\\VVUTSRQQRRQPOONNLLKJIHGGIHGGEEDDFFFFFFFFDCCDEFDCA>>??:9HfkcgigleP>BEAFFD@ACEFFFEFFGJIHINRSW[^acdompy}~‡™–”𣫮®©´»¼¿ÇÊÇÅÊÁ­¦°¸·¾Á½Æáäʳ´¸¹¼¹¶¿Å³¦¨¦ £Ÿ—¥¼¹ž•›—ŠŒŠˆ‡‰‰ˆ‡~|xutvz|urqrsqrvtuwxxwvtruwxvuttvtrsuvspuysnrvqhft|xtuxyunptpmnnrpmlmmlkmmkc[enjelommkgfjnooogcisojmogcjnnmjffimpopmiilnkmlggknlnogagnmjpfYd|{mmsmvwfdkm€‡{gbf]]_]`hg`^_\_gha\]b`gnia_^]^^\UNIGB@?>7/**&%$" !!!!"#$&&'**)(&%$$%%!$,,)+,0$8UNH[ljWN{±ªdI|ªcbje]`dgklqpooma^hkmnlkkljgjjhgjmjghjighkkhmhgkmkkmlmkilooqojjmnoomkmmmnqpnqnmqqnmpmooqtropqoopnmnnrqnmnmklnkkljjmme[WY[erxvtvw{uddrlct|xuvuutuvttvsvyxvttuutvyxxvtvxxy{yutwz{yvvx{…‰upcXV€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€&@???>==<<:98:<==;::;;<<<<9:;<<;;:9::;<<==;<<==<;:DDDEEEFFHIJKMNPPSTTUVVWWUUVWYZ[[^^^^^^^^________``_^^\\[XXXWVUUUTTSRQPPOONNLLJJIJJKJKJJJGFFFFECA??>;<65HflacjeggV<=@AAABCCBAAEDEEC?@DAAABCDFGGFFFFEEFNNOOQTXZZcigjqsow{zrqzƒ…•—¦Âɵ£¥¯¶¿ÂÅ×äÊÆÏÍÅÉÎÑçëåÛ×ÕÐÏÇÈÊÏÒÒÐͽ·­£šš›’ŽŒ‡…†}zwuyxwutqmjsrrrrqqqtwtszwoniuvruvtwuopqmmpnnoprsromlori_grmgjmmjjkiiljhlkghoqpnkedmomljgehlpoomijnpmmlhcchojmjfjmkioibj}shmou}xf_ik{†„tee^[]]ahga_b_agf^WVXTUUNGA:6773/*('!  !!"#%&&'))',++*)(('(((''&&&%$#%)&&++/#7SMG\mkXP|²«dI|ªcbke^_cjjhrsmml^[hkkkkklnmkigikigikjgghihhijmmihlkglmlklmnpnmoqommmjknpnjloooomnppnrrpostqprqppqpoqqomoqnllmkjihjnmd[XWYdquytvw{ufgqjarzwvwvttuutuursuuttuwwwyywvvttvwwyzyxxw{{wy€„|ndb_]^_€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€$8=79<9:==<<;::9;:9:<=<;<<;;;;;;<==>=<;;;;<<===>@@?>=<::99999999:;::9:997889:;;;???@@@AA?@@AABBCFFFGFGFFHIIJJJJKNNMMLLKKKLLLMMNNMNMNNNNNMMMMMMMMMLKJJHFDFFB=>85G]jb`hfglY=9D@<@D@@@@@@@?@?@CA?AECB@??@ACEFEDCDCBDEEDBCEHABCEEDCDDGHIGHIKIORXfkb[[dkvz’Ÿ‘Ž™ž¢°¹¾ÞçâÙßéèãåääçêííëêéçãÞØÒÎÊÈÈȶ­ª°®ª¦£ ŸŸœ—‘ŽŒ‹ˆ…|}}{yxy{xwz|{wmlu€ƒ€€~}tpmlmsvtostqoopppswn`htqbfqtljjbjqqnnkggnoqojhjmknqne`hsrolifhlmlmkedimnimkgjljjikpomxzjjmrwreajoz‚ugebaa`aa^WSRMJKH@851-,*$#""% !#$$&'''(()))++)(()++((''&&&&&&%%$$###&''((+.,1$7TMG_olYNz®§cH|ªccke^_cgjipolmm`\fimnmkiklmlkmnjfhmlhhllhimijjjjlljjmnnnmmnmmnonnopkjlqqonqosqlmssnqomlkproqqooqpnpqqpqrqnlkjiihkmnb[WVXervwutryxhdpkdtzvtwvtvxvwwuvtrruvvtvxvuxywvvxwwwxyzxyww~„~ul_[adhsƒ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€&:=69;7788889899:878:;:988877666:;;<;;:9<<<=====:::999::6789:<==A@@>=<;:<<<<<;<;9999::;;7889:;<<99:9:9996677889988777766566788999999:9::>>?>?>?>BBAACB@>?>9573/@DBA@>>?@A>?@?ABCB?>>>>????>?@BAAAFCBBA>?C?DDBCCBBADBDB?GLGDKLOX]bz‘€•‘šª¿ÒàçéÝÜÚÙÙÚÛÝÞÞâççàÛÚàßÞÝÞàâãØÒÍÉÉÇÅ¿º´°¯­©¥‹y{zx~}zzŽ›”••‡nusoswvwsuurqrrppovqditofiopkijhjnopqjfjnmopjegnolkkigiopmlighlmllgabimmkmjfikjllowshpwmgiqumeehiu|~q[USKHEB=60+)&$#! ! !%##$%$#$')/)%&)(()++*)(''&(&%%$$$&##$$&&''##%&()*+,0348>:0/2&9UNH]mkVMx­¦cH|ªcclf\bcbjmkmookc_hllmmjjkmmkomimolknmlmlkkmkhhmomlnonljikorqommoqpnnpokklljjjiefffdhghfeinmtsqoqonqtsrqommkllkkmlmnf^ZXZesvsturyyg`qokz}utvsqsttuvsvutvxywuuwvtuvuuxwwxwwxyzyv{ƒ|njc^n~‚}{€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€(;?:@DA@;;<==???=;:;==<;==<<<<<<99:;;;:98899999965433334333333440000000033210/../012345623344556::::::::;;::9:99;;;;;;::==<<<<;;;;:9876655555555320100-+.+*)*)'.GdldfgfkmN018789:::;=?AB?>@CA?AEHGGGFGHHEEDEEDCDECABBB@>>B@;;:=<:;?9;====>>@@=AA=BCCCGB<>>EDJIFHHINNNRZhv€†}wtty„‘‘•£¦©®¹½ÃÊÐÕØÙÞßàäæèæåææåãààâ丆|ƒ€ƒˆ’–—™“–{{–™Žˆ†Š~tvyxvvuqxxjmxvqnmqtmfgmolkmicdjpqnhbdnlmmkfcholmnmiimosoicbeknmmgeikklpopruwupdhqtlfeeejw‰s>%)&###"#"%&$(*&&)(+++)&%&(*&$&&&&)%%%%%%%%!!#'(%$$)**,-./0:;>BEIKMPPQSY^N504&9UNHYjhVLy¯¨bG{©ddlf\cd`jnilpmia`hmmnlkklkhjolimnklpnmnliillmmmnomkonopmkkjikjhhgeebfgebdefjjiijlkjnpmkkjhhmnopqpoqqopqnkjkijjkmllnaYVX[guzutvuyvfdnlgw{wx~utsstwxvtuwvuuwystwwsuxxvstwwx{|yqy…~pig`^v‡Œ“Šu€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€&8;59=87667899::=;:;<=<:==>>>>>>:;<>>>>>=========<:87778<<;976545566778833210//.00/.,+**//000000000000005444444488888888;;;;;;;;>==;;:98:9:9:9:9;986630.)&,,(((,>ZjgiifjoZ4(.++-210../010025536:78899887=::>?;<@AAABCDCBDGE@BHG@BACEEA>=>==>>>?>@@=BA;<;>9:9?C=>CC>>A@?AEGHGCCDEFFFFKHHLOOSWY\bhnrtv„‰—¢¦©¯·ÀÂÂÇÔàµz…ˆˆ£¬ ”‘”’ƒpŸÊÐÄʾ¯¼¾˜xrsqzŠ˜•ŽttŽ˜{iosleffproolggkqpkigfknookfdhmmnomigijmniackmholfekljkpnjn{‚zpgorojdadgcmˆy<#'"" " '&%%'*-.,$#(&$$$)*+)'%&'(&&''$&*"#$&(*+,//4:=;;>>>========<<::;<>@>>=<<;::========;;;:9998777666556666555511111111.//12344222223330123456756666666555555556544431/+(22(')+4MbfijehnfA03.0675310011101320151234420/5006612713454445;758;<<;::=AB@=;FCCCABEF@BAGF@A?CBCACD>@:@BA?96==<;=?@?=B@>;;<>@?=>BCAACA@???ACDEHJIHJOTTY^`bgqymVXX[ddrt~|z‚ƒte‘ÃÊÁÓͽÎÞ©|spk º·¿²‰ƒ§Ã¶€eoqlkgknmnqkfhmnrqjfjpprrlfehllkjiffggjkjedinookefmnjiqqnktƒklxrhhb^gedctx^LHUKE;-()%(&(4GVZW@0),+(()%'((&$$$$%(++),1568;>ACDEBBED@@B\\\[ZZYYYZZ[\]^^`ZY[[\R?.2$7RKE_pmYOz¯¨aG{©ddmf^_bggenplnna]hklnmjhikkkjjkijjjijkkjkmnnmmmidbcfaacbbdcdda`gjgeghhgffhigcdkliilmdahqvvqikqtpnnnppponqpjkolfhllleZVZ\es{wtutywe`rmfv|vrsuwtruvsrvvvuuuvvvusuwustvvwxxywr|qrŽyqt{¤¾Ì·¢€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€&:@::;;>==>==<::9;;::==;===<<<;;;><;=:79=;99;;97<::<<::<988:967;<:89;<;9;;::9988987666667655557777777777766799758998544555656565887766657996688535899642022//.*%+BelggeiqfD,48103467876586568987;88;:88:876667895555666643333333332124422235668<;<>?@AAADEFEDEGIEEGIHFFIDEEDBABD@A@>>@?>?==?>;<@@=<=@A?<==<;>AA?=?@?><<<;;=:79:7ACDEEBBBA?;8621.-.&&=VZ[]YVYWW]]UKEFLY^ZZ_ZL9*2*6SOEVplVLx®]Hƒ¬‹bcnc_dd`ciqpnqpb\gmlnonllmnmkikolhjljmolkljkliddeef`acefhihgcdjllmnps{{€‹ƒŠ“™ššœŸ ¢¤—‚wtrmlppkmuoqqopqmgpkhjljijfXSSZhryzzvxxtefmofsyutwtuwyxuvywvvvvxxvtuwwvuuuwqyxxysx„ukšÕÇ ›¨ž±ÕèìèÛ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€!3:6764645678888;77<<99=;==::<<9;><;=;8:>>===>=<;<;;:;:::;<;::;;9888999899::;;<<;;:999::98776789666666668886558:5677667966666666877766654664355245676532455322.)'AakijhdphI./5211233443334555556655665567899987644567899888999::8::99;<;;9997457;9754689986557:=88888:<=:>??=<::>?><=:;;83550:UjhbgnooW?>>=====<;::;==>:<<:;<<9<:88:;:9;879:9:<<:;==:;>@AA?BFEADEEDCCCBB>?DFCCEBBCEJMF6:VkibekmiN<:<:84:987764224/WqoXLx³©`G«Žfdji]^_chijmkmne^gkomllnnmkkjjiiknnllmkikopk`]baXTWg~– ¤©«©³»¶´½À½À¾Â¾ÂÉÉÃÇÆÅÅÅÅÅÆÈÆÉÌÊÈÈÈ·}nprrprnnqrnllkmlikopmfXUU[gpvwytuyzicttjuzsqtuvvttuwvrqsvvvvsuvwwwxz{{{y{|vwzy|žÆàÍ´ËÊ©®Õèèê퀀€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€%48676268887643247644774799768867889998835775579688779977::979998:;;989;:::998887777789:::9:9:::;;;;;;;;:99;<<:79:;;99:;::9:9:::777666666766565565332334232001.*06Jhldjkin\;)063432223562344334658866997;:876677899::;;;99::;<<=<>=:89:9667888:=999:9::;?>=>@A@>?@@@BCB?EDCCCCBA>?AB@>?B@>>>=;=?=<::;><9::::;;9798:>?=>CAADJRWH11RkmjkmlhYQTUMFEHB?CDBBGE?9@\Y@Onlkopkedkkhkokfjmlllhbelpomkedhonkjjfcgnmlhcaglklnjeji\Z`^^XJED>4@NV[][XYY\bdaWPMEFPZepw‚„wikpx„…‹‹ˆa:$#&%&'''%%&''&&%+)'&%&'(((&'+%&?USJMRKOZN3).)&)(*':W[XQ<)1)0MKB\rkVLz²¦bIªŒeend]accimsmjmpc]fjikllkklnmkjhglokhklkloniefjfUSnޤ®¹¿ÂÆÅÃÇÈÄÆÌÈÃÈÈÿÀÃÅÅÅÆÂÀÂÆÈÆÄÄÆÉÇÁÂÉÍÔ¾—{trptpnossplkklkjknnmg\YXZfoxwxuuyxgcrtjvzutywvuwwvwyuvwutwvqvwwvtsrrxvzyqrxx„œª¿æà¼Ç˪­Ôéìí퀀€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€&594665966766543623562254223310243566554458765797679:9:;8899967:79;:879;8877665598889:;;99999999;;;;;;;;><:9;<=<;<==;;<=<<<<<<<<99::::::87777666764223452320120,05Ihleljhpb?-17365433568765689878;;9:==:<;:998:::::;<<==;;;;;;;;9::9<;;;:9:=;;;::::::86679:9=:99;;<<:<>??=<<>BDCBBDEDDEFECBCBBCA@????>>??>=<;;<;97898:;:@G?+3WpoihjniVKMPLIGDCBBFJMMPNPM[aLIQconomhbfjmmmfdkpnopkefjknpme`emnjijjgjnomidbgkjjjecojUMRNMPOF=:INXekkhfnlntvroneZVZ_ehdkx~{unp|…‰†ƒ€e?"''"$,+$''(((('&('%$$%&'*)((+$%>\SHKNMQQ?35<6+))+&,EZ]P8'1+1NOJ^rkVKv®£`Jƒ«‹cepb]cdbfmtrokje_ellkjkmmmkmmmjgklgikjimpkbaghZUr£ÂÌÆÂÄÇÇÉÌËÆÃÄÅÄÅÈÏÉÇÊÉÃÀÁÅÂÀÀÃÅÅÄÇÅÄÂÀÅËËË˼—wrwsrqomoqqnljjkkikmeWTTZfouttrtuq``tsht|xvytsuwwuvxxwwvuvvspswyzyxx{xztzxx±¬¿ëÙ¹ÊΨªÓëìëꀀ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€2FLFEGGJEEEDCBA@==<=<<;<:6599448546755645666566753377669:89;:78<::;;:9:;7778899:887778997889998899999999:<<<::;=9;<<<<=?<<<<<<<<<<<<<===<;:<;:9;<;98899:67644752+8Sjjkmdhq_>/45254444566:878:<:89::::<=<;<=>>><<==<<<<;;<<<<<;;;=<:9:=<:<;;<;9;=<<;<;<<=<<;;<<<<=;:<;:9::;<;99:;;<;89<<;;;<=<<<====>>??@=>?@?=>@==<=@CDCCILNU[J.0SjkkmmphPEF@=<688646<=<<;>DZ^B/?^qolmkgjpqqnfcjolnojdfkmoolgegjmnlhdgikpmjechkjloe`szaNMKJPUPOZedefdchorljotuw{sup^VemcY`kw|xuy‚‹‹…‹†pB(")$$)$&&())*))%&%&')**''%'*$&>YWRTURL=/457;8-'+)$8WbO3(2,2PRM\snZJr«¤]I…¯ddne^ab`ehmqnllc]ekmnonkkkmlnnifhkilmkjmlf_f\\gyœ¾ËÅÀ¿ÆÇÃÄÉËÊÈÅÃÆÇÁÃÃÄÅÄÄÃÄÆÆÄÂÂÄÈÌÈÄÃÃÄÈËÉÀÅÒ½…ounoqpopsqmljiljhingVPS^msvyzx{{veeyufs|zuuquwvtvvvwvvutwwtwxyyyyz{tx|qryxˆ«®¤ÂéѸÎש§Õîêè뀀€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€6Q\SRTTTUUUUTRQPORRNNQQMNKKNMJJLHFHIFEGCA@??@@?>:999:99988998789876778764455667788766677889::9888888888869;<:8898:;;::;<;;;;;;;;99::;;;;=;:<<99;;;:9999977645774);^lhmmbjoX6/4423455665588889999878::::<:;<>>>>=::;<=>>????@@@@@>?><=??>@???><=?><:99;>@?ABCBA@@?@BCCBBB>??@????>=<<=<:7??><;;<=;:99;=<:89:;:9;>:88;>@ACKLJISZF%1RgilmiifTNPKEDB@=:9<@DFKD^WKMRI9+'+,,2=:-%)&2N[P9-2)3SRJ[ro]Nt¬¥bKƒ«‹dfqjbccdhjnolqrc]hlpnlkmlkhglmkjjjjiklnnhcefZo—©°¿ÌÅÁÁþÀÄÄÇÅÂÄÅ¿ÆÇÆÃÃÄÄÂÄÃÂÁÂÄÈËÍÇÃÁ¿ÂÆÇÅ¿ÐÏ¢yponoqrtspljjkkjjlohZWZblprvxvxzwebzvgs{xttswzwttvwwwxwvxxtwwvuttvxp{}rpt„¦¶§ž½ç×·ÁÓ¤¡Ïëè忀€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€1Q`WTWUSSTUWXYYYZXWYXVVWXXXXWWVWWTVWSSTPVTRRTTRPNPPLKMLIGJKHGIJICA@ACCB@A@@@?>>><<;:999:89:;;:988888888897557887:;;976669999999955666777854763363333221144312541-<<<<<===;<<=>??@=@@?>?AB>==>=<=@AAA@?=<;>@@?>=?@ACCA?@AAEDCDDDB@CA@AA??@>@A@@???=@@=<=>=?====<=?;99==;>DCHJJSYE$+Qhhfgipl^NKNF>A>>;8;CGFFHBI\^I3@aurnlhgonjlplgkmkopgaekhnqlgillklkfdfikmkheejnlplcdshI?BDO\bcefbdfhjmnmmmmnqtvwwy||iaX]dfrƒˆƒ‡‰†„†‹c;-*)&!''())(('&'()('%$((&'*#$=\YQVT9(*(#,+ /?4&*!(F_V812%4TPE]qm^Sz¯¥bI‚¬Žgfmf^abbgjnllllc]dlpnmmnnlkdijjmmjkommmi`bn_Z}¯¾¹¿ÈÃÁÀÀÀÁÂÃÈÈÁ¿ÅÁ½ÄÄÄÅÇÈÆÁ½ÆÃÀÁÅÇÆÄĽ¼ÀÃÆÇÆÈÂÅÊ·wvsomqrqpqgkmkjmpqfZWVXdoyuwuvzzgavvjtyutxwxyxtpsxuprxyvuwruxzzzyy{|uty|ª²©«ÃåÖ´ÅÍ¥¤Ïìïë倀€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€-GNGJLIKKKLLMMNNRQPPPQSTRTUSPPSVVYYVVYYVUXWUUYZXWYZXX[\ZXXXXXXXXSSTTUUUVSSRRQPPPOONMLKKJDIKHEEECFCBCB>=?DA?>??>=<;=>=?AA?=<<==;;=<;??<>A><;:<:;>><;<9;=>?>=?AAABEAADFDBABBAACDC@BCCA>=>@A@@A?==?GBFLPSD'(Ihjeeejj]OPMA@@;7349?BBA=9AZ`C,:arnqndclommmieiljmngchmkoqkdchklmkfeikkpkgecgmoloedgTBALW_dd^^gd_`fjpsnnkmstrtzw{‚z|‚‚zi[\ckv‚‡‡†Š„…‘‡pQ9.& (')+)%&,#')(''('%(('*%&?:<@=;;;::::987623553346,/Qllkkjfm^B56786679<=<:9;;88;;9;;;;<<<<>>===<<<>==<;:98;:9:<=<;<:9;>?><>=;:<::=<8:<;;<=>>;77:=<9:;<;;99AA?=;;<=;;<=><<><97:<=<==<;;<=<9>??=;;>=<>B@DKMQ[N-)Hkrkkjml_QROEDD=;9:Y\^X?((+#(++4;8<4(%%9ZS6-6+5QLE^qkZPy±¨_H«Žgfli\^caflrpomld_gnikmnnlllmjjmmkjlgknkbiug[­ÂÅÅÃŽ¿ÃÆÄÂÂÄÐÊÀ¼ÀÃÁÀÆÃ¾¼ÁÈÈÄÆÅÄÄÅÅÄÂÂÇÉÆÁÁÄÆÉÉÂÈά~mvrprrommpmlnopopdZWZ^frx}ttu{yifrpgt{yxwsuvwtuwxvvwwwwxx|uotzxtuvzrq{‰ž«¥ªªÁçÙ¹ÃÅ¥¦Óíééꀀ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€7QXQUVSUUTSRPONNMNOQQPONLKJJKKKLLJIIIIJLGHJLLIGFHFFHHFEHJKKKJJKKMMMMNNNNMNOPRSTUUUVWYYZ[\YX[]][Y[[[[\^^\]^_]Z[]`_]^__[YZ^[ZZYWVXWWXVUSTTTOQRPOQQKKKKKIHGFFGECABB34SnmggkemnW;362333577647898899788888999:::99988<<<<<;;;<::;<=<;===<<;==>=::;:9=;8:<;;<==>=::=>=<<<<<<<<=;:<>>;8=<<<;;>A@=;<====<;;;<>=;;=?><999;:<>?>@DEJOLN[R4$=dogfijobSQMA?>:999;>DHEC@E[^C.:[ponmhclonllgchpoopkcckmmomfcinnmiddgjjliihegigjgcs|eU\fdca_bffcgd^ajqrrolmswuquuxyz€{{„ywoc_q€†…††…ˆ†ƒ†…r[3%$*)'*'&*+'&()(#&'&(#$><<<;;;::;;;;<<<<;=>=;:;=8:;<::;><<:;=;9=:8:><;;:878<<:9:::9::;<=<<;<>>=;99:;;9:<;;;=>>=>??=;<<<;;<=::=@@@ADGINMOWM1';aoegmoqdUSNECB;::;=AEHEECI\`E29]spmkgfiljkmjgjkpqnjeekllmkdchmmoniefjnlqkabhkloiap|m_b[_ggbdgcbb]^cflwsnmswuqotx{{|€‚€‚„‡…€{lYXn€ƒ{vy€ƒ…ˆ‹Œf='*(&()")+(&))'%&%%*%%:X`XE/&*(*),3?;,,<0*&5XZ9%0&6URM_rkZPy±§hK¬eeoi_cd`ekoqsqmdaimlmljknmihlmjhilmkqp`cqjb£¶ÃÇ¿ÂÅÆÁÂÉÆÀÄÏËÂÁÄÃÅÇÄÂÃÄÅÅÄÀ½¼ÁÅÇÇÈľÅÃÂÁÃÄÄÃÅÈÂÃÏÇ¡}usrssqnlnlmonkmrd\YZ^htyxy|wyvgf|vgrwuuvtrsuuwvsssuwxwuryzxwyxvv~qly‡’¡«¹´ªÀæÑ±ÆÍ¨¢Íìîíꀀ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€6PXQUUPQRRSTUVVWSSRRRSTURUWVTRTVTTVZZVTTYVUWWTTVUXXUUXXUUUUUUTUUTTTSTSTSTTTSSRRRQQQOONMMPNOPNJKOLQSOLMOPLKKMOONMNLLNPPRUSSSRRTUUVX[ZYX[]_\]\Z\_]``aaa`_^```abbccdWT[hpjejfgfefhdfeca`_``Z[\^^\[ZYYYXXWWWQQQPPPPOOONMLKJJGHIGECDEA@@BDCA>>?>?@=:<:7:=;998:7687669::989:;<8;?>;:<;:;;:=ABCHHKVL/*=cqijprqeUQMDCA<:8:@DGGLJHL_`E2:atonkegjkijnkgikmlkjfdimnnicchkjjifeeghinh`djjipj^h}zk_X_ikedeabeb^dintqnmoponosxzz|€€‚‡‰‚ƒx^GRk„{{‚{€…ˆˆŠŽ’‹l=&,+&+*$#()$$()(&&-*(;X`T=-)*#',79:920:3*%6[^8(2(6SOJ`rlZOx°§_E}©‹bdqh`ed`eloqpnkc`gkmlkjlmkiojilonkigliZjtgyž§³ÆÅºÂÆÇÃÂÄÆÃÆÌÑÅÂÃÁÂÆÅ¼ÀÅÇÅÃÂÃÃÇÅÀÁÇÈÃÁÃÃÂÆÊÉÄÈÌŽÅÈ«„wurpqqpnnlmnnknrc]ZZ]iuxvy{tyyifxpdu|vsuxxwvwvuuzwtrsuwwuxxwxvssymm|™¡§µ¶®ÁèÙ¶ÁĦ¦Ñëêê耀€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€6QYTWYTUTTTUUUUVTSRQQSUVTTTUUUTSVUTTTTUVVTSSSRSUXVUXWTTWWTQSVXURVVUVUUUUVVVVWWWWWXWXWXWWZZZYVTUXSWYVRQSTVSQQTVVURQQSROMNPQPNMNOMNOOOMMMNPOPPMQSPSTTUUUTSUTSUVWVUWSQSbngbabehe_\_`bddcbbbfdeggedfccdeffggddddcccba```__^^`^\\]][ZZZZ[ZYVTSSRSSOLNPLLLIFGFEFC?=?@?@@>=<<<<;<>??>==A=;;<;;AFILILZR3&>bpjkllodSMHA?<<97:@FGFGEBH\`C/;/**/63'%<]\6'2(6TPK`slZOx°¦]F‚¬cdnb^egbhnprpmleagmpnllkjijmnppnlkkqme`pnj”¯­ºÉÀ»ÇÈÄÂÀÁÂÄÅÆÆÁÂÈÇÅÅÆÂÃÅÆÃÁÃÇÉÊľ¿ÅľÁÆÇÃÂÄÿÀÆÄ¼Âʲˆwvroorqomljjlnmlb]ZY\iuwvxytywjozobu|uru~|uruvsuwwvvvuttrtwzzuu|{lp…–𫳲±ÉëØ³¼Å¦¤Íéëêæ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€3NXTYZVWVVVVVVVVTTTTTUUVWWWXYXWVZYVSSVYZUVWVWXWVZWVXWTSUWUTTVWVTWWWVVVUUUUVVWXXYXXXXYYZZ^^][Z[\\[YXYYWVWZ[\]^]\Z^\]``]\]\]\YY[[Y[ZZZ[[ZYWX[ZX[]XTTUUUUTTWUSSTSQOUOFDWgc_imsrcPMTRTWWVUUVXUTVVTUXZZ[\\]^^a```____bbbcccddfdcdffedbdggedeggfdcebbehdcd`^^]_`_\[\[YWVUSRQQPTPLKLMKIIGGGFDBBBCB@?@A@>><9899998655677668;;:;=BFMLMVK-(DfolmkklbRLIDDA<;;>CGIJDA>E^bG1<^oknmeclomlmieijmpmgeimnnmiddilgkmjecioklojcinjongrŠ~f]`djnmkljhheabionrqljnqotzzy|~}~‚€ƒ†„‡rZTey…‡‚ƒ‚„‡ˆ……‡‰‚U*")%)+)'3A=-$''&)$%<[cQ7+*+$*8>/&))*63$(E_W4&0'6TQLaslZOx¯¦bL…®hgme`ec^gpspnmld_gnmllnoljipmhhmrpjoma`mgr£·°ÁËÁÀÇÈÀÁÂÁÁÂÄÆÈ¿ÅËÇÂÃÉÅÄÅÄÂÂÅÆÃÀÀÅÇÅÀ¿ÂÃÁÀÁ¼ÃÄ¿ÅѺŒvvtpqsrmnpnkmrrma]YW[iuvzwur{yjnscrytsvyvrswxusyywvuvwx{wtx{xuy|ls‹—¨¶®®ÈâδÃɦ Éèíì倀€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€7R[VYZUVVVVWWXXYUVWXYXWVSVYYVUUWSWYXXYWSSWZYY[ZVTVWUUXXVVY\ZWVX[XXXWWWVVWWWXXXXXYYYYYYYY[[YWX]]Y^XUY\[XWYZ[ZXXY[_\[\[Z[^[^^[\`a_^]\^acb`Y[^^\_`Z_`aaaa```_]]__]\`_XQ\iimplpqcVW]WXXVSSUWXTSUTSTXQQQQQQQQSSSSRRRRTTTSRQQQTVWXWXY[\[YZ[\\[b`]]``bhb`dhgfgfiggiighjjjjihgffdddcaaabca`_\ZZ]Z\\ZXWVTWWTQOOONLLKJHGEDGEDCA?@CHHNQPSJ5,IgkkmkmkaPIE@@<78:<>BEHGB>E]bD-:[nlkkgckppnlgekqlmoiehlomkicbgklkjihilomihgegkkqg]p“œ‡k^_^aggipvssndclrlmmmlklmq{~{zz{€{ƒ‡€ˆ‡‰r_\ey†…†‡„…Œ‹…‰‹‡rO3)*/',L`N.&,.,,%)C\eR6)(,)5:5+,+%-95#-N`T5*4)5RNHaslZOx¯¥bJ¨kkpebhf`fmnppome`ipqnlmnmjgjijlnlkjon^gtez´º®ÀÊÄÄÃÅ¿ÂÅÆÃÁÄÉÁÄÅÈÉÀ¾ÉÇÂÁÆÉÈÅÄÉ¿ÄÊÊÇÅÃÂÁÁÂÃÄÅÇÉÇÀÆÔ¿tvusstqkiopjinpm`\YWZhtux{|vzvfk{rcrzxwxvtvwuvwuuvwwvuvwyyvsuvvymix–‚y‘¡š˜¨¾·¬¾Ã§¦Îéëëæ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€9TUOTUUTTUWTXXRVURRVWUTURWXUSVYYUUVVVVVVXVUVXYXUYYXXWWVVVVWWXYZZ]WUVWUUWXVVXXVW[ZVY[Y[\WTWYYWVWX[^_ZVY[VY[\[XWXYZ^_\ZZYV[\]]]]\[`_]]][_ha`_]]]]][afe`]`dZ[]^`bcd`i_RZfikjmnkgeeg``````aaaaa`_^^^^^^^^^^^[[[ZZZZZ[TQRTUUSQQQSUUSQQRRSRRQPSRQQQQRRUUUUUUUUYZZ[\]]^aaaaaaaaedcbbcdejjiihggglllkkkjjiihhggffeedcbbaa_^][YXWVZVTY_^VM@MfmjolimaVPLFBA=>@BDFHHHICFY`K0:Wmolmjcmprsphdfnmmlhfhlrokhhhgflnkffhkoiffc_dlmtk^o— ˆxiebadhjksutohfkpkkmpnhjprz{vw{‚‚ƒ„……‰‚wojjz…„„†‰‹ˆ………ˆˆe7'',*"4YcF 'AC0 "?]bN8.)+,;<.#*)&.;1$6X`O715)4TTL\poZP}°¥aJ¨‹gipibfeaiprrqokc]cnkomknqmhkimpmllgplZlznŠ´¶­ÂÌÆ¼¾ÅÂÀÃÆÄ¾ÀÆÇÂÃÊÌÆÂÄÄÁÁÄÆÄÃÃÈÆÃÂÄÆÆÄÄÇÿÄÇÆÅÆÆÃÂÍб†sqppqqpnmmkimstqeWW]WWktv{wxvijyqew€{xyuwywvyzuvvustwwvutquurz~rn}”™„s~„‰‡‹’Žš¼¿œ Éâèë耀€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€Bjwplgin_\`]WTQYWYZZXVW[XWUTUXWUXWWWVVVVWVVWXYYXVVVUUUTTWWWWVVVUTUUWXZXU]YVWY[]_ZWWXUY__]YUUVXXWY_a]XZ[YZZ[[Z[[\Y]^\[]\Y_````__^Z[\]][[]\[[[[\]][_ba]Z[]baaa``__[c^Yaknrkhfec`adccccccccccccbbbbaabcdeef\\]_`bcdba`ce`^edcbbbba`cb`_]\\\WXZ\[[YXTTTTTTTTRRRRRRQQSSSSSSSSXWVUUVWXUVWXYZ[\[\]^`abcfffeedddddeffghhggghijjkjigffgffZWfnmmjmqg__`_^^XXWVVUTTYWMJX`O;AUlrlklhiiijkhdfponnlhgilnlgdfiigkmhchnlkjhecgklokbr—¥•‰nicbdinpkorqmlossrsvrljltyzwy~|€‚ƒ„………ƒ„~ohp|‡ƒƒ‰‡ˆŒ‡ƒ‹zG'#) ;[Z@, )E@*$)9XdX?*'4;=0#%,+*0@,(CZ]Q715)4USK]qpZP}¯¤bI€©‹ghqg`ed`gnpopqmcbilomjjnonookkkhknmpi]otm’¹¶·ÇÆÄÇÇÅÇÅÆÊÈÂÃÈÉÁÄÊÅÁÅÈÀÁÅÆÄÄÅÃÄÅÄÂÄÈÇÂÁÉÅÀÆÉÅÈÆÁÂÅÈͶwusrrqomonlhjnnkcXX[V]p}sx{w|vfj~vhw|vuxtvvuutsruvvwxxwvvvswwt{mh}’’Œ†ˆ“І‘Žu±½ž¨Òèëì退€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€Z¢›“Ž•¡‡stxspmnsqmkmpolfgigc`chdcba``abccba^\\\^^^^]]]]YYXVUTSRWXVRUZ[XSUVUSUWYRS[]XVXVWWXZ\[XUV[\ZZ\^_[[[[^^^^[^_]^`_\___^^]]\^___``_\^^_`abbc]^```^^^aa`^]\[[\_[Yafinsnkkhb`a________\\]]]]^^`aabbccc``abdeff^ea]ega_`abccbccacefgfedccccdeffffffffffgffedcba````````]\[ZZ[\]YYYXXXXXQQRTUWXXZZZYYXXWTUVVWXYYXYZ[]_``ba`][\_b[Wellnnsnf`bfgghhggggfffdh`V[cd`\^jqljkelnnpqlhhnnmjhhjjmlkidbfmolifchlkllhdfikmijeoœ’ˆyohghklgmuxvssssrtxzwutvxyyz}~}€€‚ƒ„„…‰…ƒviis‚ˆŽŒƒ…ŽŽˆ‚Œ†`<))/=5)'*))06:&2U\XR904)5TSJ]qpZP|¯¤bH€©Œfhrg`ec_gnpspqlbdmnomiilllnmjkkjlonoi^nrr›¿¼·ÂÃÄÂÁÃÃÀÁÆÆÃÃÇÈÄ¿ÃÆÁ¿ÇÉÄÁÀÁÃÅÂÉÄÁÅÊÉÄÀ¿ÁÅÆÅÃÇËÆÁÆÄÁË»tsrrttsrrqnkknnlb[YWVcu{uxxwydj|sgw~xuwsvuuwurtvuvwxurpwxuxxu|nj…–˜•—”•¡¢“¼¼ ¬Öêëìꀀ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€Z¡—’š©”tt~{{z‚€{x{}||z|{yy|zywvvx{|}€~}{{{{zzzzxxvvtsrrlmmllnkgdfgfipvxnt~wpnjghhfbabec`VQUYXY[YXYZ\ZYY\[ZZ]ZVXXYZ[]_`a_^]\ab\``abbbaa[\]_aba_______^_e`[^ekmpmopnhb^]aaaa```__``aabbb``__^]]\ccba``__X_^]__]a`bddddegeeedca_]`_^^_acdbbbbbbbbgffeedddgggggggghgfeefghffedcbaabbaaa`````__^^]][ZYYXWVVVVVWWWWWVUSSTUTSCMbebjkkh_YZ[ZXXZZ[\]^__[b_X\dgheagpmjgchmoolhdejlnmiegjqmjjgdfkqoifhiilomhbbfiighcgzƒvilf_[[]_`hmqutuvywusvyyvsyxy{|||~€€‚ƒ„„ˆ„…‰s`fy‚‰‰…„…‡‰ˆ‡ˆva<*4GW^V@3+CP6%%(@\a[H21>:*+-+&*14.,D`\VS;/4)4TRI]qp[P|¯£bHªŒfgrhafdahoqtpqofcilmpomoqomjjkmmnnnmj\kwz Á»ºÄÂÄÆÄÅÄÁÁÅÆÄÃÅÉÃÁÄÆÅÅÆÅÄÅÈÈÄÂÄ¿ÂÈÊÆÄÇÃÅÉÇÂÈÊÁÄÈÉÁ¿ÍºŠwusrsrpnonmlmoqqe]XWXgwyzwvwzeizpcu€|xwvwwwxvst}ywxxvuuuxuxwu{|poŒš’¥œ’–—¢°«¬Á½ž¨Òæéê耀€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€]’ ’‹“¡mtƒ{vzƒ…‚}z}~|{}}z{~}|{}†‰‡ŠŒŒŒŽ‘ŽŽŽŽŽŽŽŽŒ‘Ž‹‰’ˆ‹—©¸À¾¾ÃÀ¶³··±±°«§£¤¥¥“xltuomponmmlkjhhgdefb\a`_^^_ab]Z`d`ab[``aa`][Y\[[\]\ZX^^^^^^^^b\[`gjjfhnqjb__^``__^]]]bbbbcccc``______aa`_^]\\_ab```bbccc`]\\^_acdc`[YXY[]^]\[___________``aab````````cba``abcabcdeffghggggfffiiihhggfihhgfeeddddccbaaa_^^````KUjlhljhd\VWXVSSVVVVUUUTTTOO\aWLSZgpqkggimnkkhgjpnprkcckmomhfiifjomhghkmmkhc_ekijhcdmjXF?<::Z_]P916/(*('+-.06CT^ZZU;.3)5TRH^rp[P|®£bI€©Œfhqhaed`hoqrqpmgdglnqqpqpljkkkkmnopli^oy~¥Â¹½ÉÃÅÈÇÆÆÂÂÅÇÆÄÅÇÆÅÃÂÁÂÄÄÄÁÂÆÂ¿Å¿ÀÄÈÈÆÄÂÇÉÄÄÇÆ¿ÃÈÇ¿ÆÏ¶Šusqqqqomkjjjkmorj]XXZgvw|www|wgktds|xvwuuwwvvvswttwxwutswuvvtzyip™–›Ÿœ§ š©¼³°Ä¾¥Ðæéé䀀€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€\–¦—’Ž“¡‹kp{uw{‚{y{|{x|~€€{z}‚zyvvy…‰‰Š‹Œ‹ŒŽŠŠ‹‹‹ŒŒŒŠŠ‹ŒŒŽŽ’‘“‘’”’“•›©ÁÖÛØØÕÎÑÙÛÔÔÔÖØ×ÓÐÚÀ™Œ—š‘››–””–šš–”•–‘ŠŒŠˆ††‡‰Š~~Ÿ–Œ…€|xuxyywsolklkjihgfeabimjljcknmicaacddcba``____^^]]]]]^^_`aa]]^^^__`ba_]_hkfbdeda]ZXTVY\`cde]]]^]^]]]]]]]]]]ZZ[\]^__________a`_^^_`a^^____``[[\^_`abccbbaaa`bbbddeffaabccdeeffecbdgj_\jsqqnqleadhgeedddcbbaaa^VVaf]UV^gpsngflonllkhgmoolhfgihlmighihkjkjfgkjihheaiolnifgf[G81/,**(&#.5@MXaehwyyy|€€}z{{{{}}}€‚‚ƒƒ„„‡†„„yeep~†…„‡Œ„‹ˆ†‡‡{a<5_dA"*68WY7!%>Z^\WE50*''&*+).=P[\XX^V:-2(5TQG_rq[P|®¢aJ¨‹hipf_db^fmonsqhdfjnnmlopkilillmoolnmecvu{ªÃº¸ÅÇÅÁÁÆÃÀÁÄÆÅÄÅÆÊÆÄÉÄ¿ÃÃÅÂÂÇÆÀ¿ÄÄÆÈÆÃÄÇÇÄÅÉÉÈÇÅÁÃÁÁËϵ‘rpopqrqonmlmlknrl]WY[gtxzw{xxshm}uhvzttxtsuvtvxutssvywtqrwvvutyvdrŽœ›œ ¨ŸžµÅ³¬Ã¿Ÿ§Óêíê €€€€€€€€€€€€€€€€€€€€€€€€€€€€€€X•¦—•‘“ Žps„„~{~‚ƒ„„€}‚€~|}~~{~|ywz€ˆ………‡ŠŒ‰ŠŠŠ‹‹ŒŒ‹‹ŒŽŽ‹Œ“–“Œ”–’–¯ÍÕÑÒÑÎÐÕÔÏÌÊËÏÓÔÔ×¼•‰™”•œ¡¤ š—šž­¬©§ª¬§Ÿžžž¡¦ª­««ÇÝÑÁ¿½¿ÀÂþº·º½¿½·²²´§¦¦¥¥¤¤¤¤¨¨“uihaidk~‰†„ˆ‚‚€~}}|vutrqonnjjihgfedaabbbbcc]]`fg`\_fgijkiebd`ZVW\dhba_]\\^^^^^^^^^^^^______________dcbaabcdba`_^]\\[\]^`abb___^^]]]]]^_`aab[\]_`bcda```abcc[Vdkkmmrib_beca`ddefghhijjd_chjldaempmhcmqpnomifekokhiigjkmlhdgmnhhkjiihlkidcjnjnhgh_M>72.+)(('%*(')2?LS`hpswz{wy}~zz{~€‚ƒƒˆ‡ˆ‡t\_m€‰†ƒ„„‡‡‰‡ƒ}l9(FcY7$9<-N];!'AV^`_P714*',/),AT`aZWY^T9,1)6TPF_sq[P{­¢_Kƒ¦‰ikof_cb^fmokqslefjklkloqnmrjnnnqoklrfcwsz«Ä·µÅÆÃÃÆÆÅÃÃÅÅÿÀÆÉÆÂÁÀÁÃÃÃÃÄÃÆÂÂÈÊÇÅÇÇÃÃÃÄÉǼÁÃÄÀÄͺ“wurrqqnlqooomknsj\WX[gvywy{vxtfkysiwzstyxvuutttuywtsuwvsryxwvvzvfv”žœžž¡žœ¥ÄÔ½±ÆÁ¡©Ôéëë瀀€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€^™¦––’’œ…px‡„|{„ƒ€‚ƒ~~~‚‚}yz|{~{wux~…ŠŒŠ‰‰Œ‹‰‰‰‰Š‹‹‹ŒŠŠ‹‹ŒŽ‘ˆ”ŒŠ”ªÅ×ÒÑÑÍÏÑÎÒÔÕÔÑÏÏÐØ¿™Ÿ—š˜Ÿ¤¡™–𡧦£¢¦©¤œ¤¢ žž £¥¨¦ÃÝμ¾ÁÁÄÇÉÈÅ¿ÇÍÒÑÌÊÍÑÁÂÃÅÇÉÊËÍÔϪ|owwkcy«ÊÊÆÍÉÉÈÇÅÄÃÿ¿½»¸¶µ´³±®©¥ ›™™˜–”“’‘”‰rba_^dliggilmnmliea^[Zffffdb`_^^^^^^^^^^]\[ZZY________`_^]]^_`^^^_``aa`____^^^\\\[[ZZZa``_^]\\^^_`abcdea`fmng^V]nmhoqrslfggc^\]]^_`bcc`b\Y]`_``ZbmliieioolkllmjjnpkdfonoolgfimlmhehjlonmgacjlkleefV@67/+&$%')))&#"%)-/4DU`hpspxyy€€z~~€‚ƒƒ‡ƒ…†ƒ…†~rd^k}‡Š‹ƒƒ‰Œ~~„s=-LcQ/#?7&G^E%#@\\W^\E772+./*=X_`ZVZZYQ9+1(6TPF_sq[P{­¢^L„¦ˆjlng`ec`gnpqptodbjmoqpoolijoqlilllqwi_ru{¨Å¹µÅÅÁÃÆÄÂÂÂÃÃÂÂÂÁÂÁÅɽÅÈÀÂÇÄÄÇÄÁÂÃÅÆÆÄ½ÆÈÃÀÀÁÄÁÉ;¸Ì¿Žutrrstrpmllmlimrg\WWYhwyw{ys|xeh|tgtxsuzwussurqwxwuuwzxts{yyww{whx•œ•š›§Ÿ¨Íݾ¯ÉãªÐãçì쀀€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€bž¯ š”—¢‡ou†ƒzxˆ‚€†‰ƒ~~€€€~y~z{{y}†‰‰‡‰Ž‘Š‹’”’ŽŠ‹ŽŠ…‰‘Љ‰‘“Ž‘’‘¢ÁÌÏÐÏÎÎÌÈÑÔÔÒÒÔÐÉÔ½–Ž˜•˜ –ž¤¡š—œ¡¥¥£¡£¦¤Ÿ¤¦¡ŸŸ §­©¿ÓÊÀ¼±¹Âü¼Ã¹¿¾ÁÆÈÇĽ¹¼¿¾ÄÌËÈÐȨ†vvzuj~³Ø×ÍÌÖØØÖÙÝÚÓÓÖÖÒÒÖÕÒ×ÙÒÏÕÔÏÓËÈÍÏÌÐØÙÛ©lZbbdggffimlloonkhfdccYe¦³£‘y‰ˆ‰Š‚‡˜‘wmx|wzz|Š‹„‚‚qhtljj_\cad```__^^]^^^^^^^^\\\\\\\\\]]]]\]^Z`c_bb\^fchkgqsZ]flqmlvty€|qlg_\Z_^X\gh_cib`b`aaZXgnkjghikifhjiinmlkiffhkooifhjhjnkeehhjlhgebgmkpmh]J;52**)((())''(('%$##.9FUcmpuz}}~€„„‚‚„‡…ƒƒ†ˆ‡…‚vd_rˆŒ„‰ˆŽ‘‚{wN8LeH%-B0!IcF'&=Z^UV\WK>46516IWT[^YSY\P?03-2RMGatqZNz­¢cI§‹hipi]bd_aisrqsocalsplknpmigknlkmlkmqe]u|}¥Â¸¸ÃÆÆÁÃÈÇÀÁÇÅÁÃÉÄ»ÁÇÀÀÅÄȾÂÈÅÂÅÈÅÂÁÃÇÇÃÁÆÅÀÁÅÇÆÂ¿ÂĿƽ’uyururnqklllmmnnd][Z[ivutzywytclviuyvvuvvvussvyyyyzxutuvxwxuv{thrŽ™—Ÿ§©­¦§Çܹ¥ÄĤ¦Ìåêêꀀ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€^žµ©£š˜¡st…‡~„ˆ…ƒ‚‚ƒ~ƒ‚€}}€€}|||z‡Š†ŠŠ†„‡ˆ‡‰ŒŽŽŒŠŠ’އ†Œ‘ŽŠ‡‰“ŒŠ‹‘¦ÇÓÐÏÓÓÐÐÔÍÏÑÔÖ×ÔÏÔ½–˜—›¤›œŸ¡š ª©©§¤¥§¥ £¦£Ÿ ¡£«ª¦½ÕÊ»¹¸¹Á¼¼ÂÁ¹»¿ÂÃÁÂÅÉÀ¼¿ÂÁÇÏÎÆÌʽ­Ÿ’ˆzl´ÕÐÊÒÒÐÐÓÕÔÑÐÍÌÌÍÍÌÌÍÎÐËÊÒÓÐÔÌÑÓÏÎÕØÕ«vW]c`afgjijlnmopnligfeeg\vÅöÞ½¹ÁÏØÖÊÐàÔ±§²··¿ÄÊÝÞÕÑÍ»¯»¾·ªˆwŠ–—‹ˆ†„„€}yuqnmkkjiggeeeb``bb`]]_`]]aaadiilokd\eqsqiemntxtnnlea[]_``chlcljie_cd\_iloqjffloonhdelmnnjfgjnolgcfijqkghiffkhhjidgllnleWF:40*)(((()*(((('&$#$!)9EUgw}~€~{…„ƒ†…‡†„…‰‰†‰€rgl}†…„ˆŠŒ…|bET`<-AF)'K_G($C]\VWW[\M:8997=BBOV][Z_V?.1,3TOI^qoYO|°¥`K„«Œgfjg^df`cjqqpspc_hprnlmpolilnlknmkmud]y€}¤Æ¸·ÅÈÆÅÈÈǾ¿ÉÈÀ¿ÄȾ½ÄÅÄÅÈÇ¿ÁÁÀÁÃËÄÁÀÂÉÌÈÂÊÆÀÄÅÅÊÂÆÈþËÁtwtqsqmpoonmlkkkd\XWYiy{tzzz|wckƒtduzuvxxvuvxwutyvtuvvvvswx{xwzqiw”œ–ž¨®·®¬ËÞ»§Æ¾¢¦Êãêë退€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€c£¸«¦žž©˜uq‡…„…„„‚ƒƒƒ‚‚~zz~}||zy~ˆŠ‹‹‡ˆ‰ŒŽŠ‡Š‰ŠŒ‘‹‹ŽŽ‹Œ‘’–’”‘ ÀÎÕÔÊËÖÙÒÊÊÍÓ×ÕÑÏÕ¾–‹–—œ¤¤ž ŸšŸ©«¬©¦¦§¥ ¢¥¡ž ¡¤«®ªÂØÉ²²¹¸¿À»»À¿¸µ¼Â¿¾ÅËÀ¼¿ÂÁÇÏÎÆÈËÌÐÏȾ´¤§¿ÎËÌ×ÑËËÑÓÎÌÍÒÎÎÒÓÎÎÓÏÏÊÉÎÎÌÍÔÍÖÔËÜÖ¤bV`b]bffhlkikmllqomkihggo`[Ýà·²¾ËÙÞÖÛê߯¼ÅÊÏÚáéçêçêïãÞììéâ·žÀÛÕÐÐÏÏÎÍÍÍÉÈÆÃÀ½»º»¹·²¯«¨§§¡œ¡¢—“ŽŽˆ~vjjgfmrnikojhknuqxysmold`^_`acfkomlgjjee_XbmlmojhjlmnmhgljknnkggjqqojgegiljjheejnkklidejjlkaOA:3-*)(((()*))))(&$#!1ARar‚„}†ƒ~{~„……†€€…‡„ƒƒzg^pƒ…ˆ…ˆŠ„ƒ‚jOXX33PR#+SaE!B]][\ZYVC:3582.49:EW\Y`X=-0+3UPK`sqZN{®£_L„§‡fjqjbeb\dnsrqure`hoqssqnoppmomlonlntc\x|¤Åº¸ÆÅ¿ÀÇÄþÀÿÁÄÄÁÀÃÆÁÀÆÄÁÂÄÄÅÃ»ÃÆÁÀÇÅÂÈÈÂÂÆÈÇÅ¿ÄÇÉľÊÀtusqrpnooonmmlkkc\\[]jvvw{yx|xfm~shy{suzruursxyuttuuuvz~uxwxvv{tlz–œ– ¬²´´°ÃÖ¾¬Á¾¥ªÍäêë瀀€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€h¨¹©¦ £´¢{r€†„€„‰††Š‡€}€‚‚}}€}~|zƒŒŽ‹” ¤šŒ‘‹‹Ž–žž•‹Š’˜’ŒŒ‘Ž”Œ“™¸ËÍÌÉÊÎÏÎÕÎÉÍÏÎÐÕ×Á—‰‘’–œ ™—œ›£¦§¦£¢¤£Ÿž——¡¡¥©¬ÄØÈ³µÀ·¼½ºº½¼·´¸¼¾½¿Ãǽ¹»¾¾ÄËËÒÒÏÌÊËÊÊÈÈÈÉËÍÍÍÒÏÎÒÓÑÎÍÉÇÇÊÊÈÈËÒÐËÊÍÎÌÌÐÒÊÎÞÍštUZdc^`aedfeflonnqpnmkjjjmsdwÈè¿°»ºÄרÜéäÀ¸¿ÅËÕ×àìîéëíߨæãâ亘¿àÖØØØÙÙÙÙÚÝÝÜÜÜÛÛÛÜÝÜÝÜÝÜÝÚÖÒÓÖ×ÔÐÑÍÑÑÂÅÈ´ƒw~}zq]dffdy𢛗’Œ†††rcbfgmvysrzwoogfhptpkfcjlkmnkhjkkkkigfhjkkjgfhjkllheilhjiifbeiikl_J@<4,)(('()*+***)(&$#'5Nhy{…ƒ‚‚‚€€ƒ„‚‚„…‡ƒiUhƒˆ‚‡…‰Œˆˆ†r_ZM6BXS24W`?$%CQXUZ^RC6-*1:3)*/.6FRX_S8.2,3UPKbuqZNz¬¡`L‚¢„hntebie`hnopptpc`gnjopmijlmmonmonlotiay€‚ªÇ·¸ÇÆ¿½ÂÀ¾½¾¿»»ÀÄÄÅÁÂÆÅÀÁÇÃÁÂÀÁÄÆÈÁ¾ÄÈÆÅÇÈÆÄÈÈÃÁÆÆÃÅſŻtussrqppkllmnnoog_[ZZivwy{wv{yfn~wkvwtwysrsvvssvwvvwxyyzwxvwtv|uny’™—¦±³³·²ÁÕÄ´ÆÆ«¯Òçéèæ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€d©¾¯­¥¥·ªƒx‚ƒ€~„†ƒ…‰ˆ€~‚……ƒ€€ƒƒ€ƒ‚‚~ˆ”•—¢°²§–‘”“’— «¬§Ÿ¢¡«·¹¬š’’“£¤Ÿ›“ˆ–¸ÏÑÒÑÐÐÏÍÊÈÍÕØÑÌÊØÃ—†ŒŒŽ‘Ž•›žŸ œŸ Ÿ ž¤ ™›ª±°±®´ÈÓų±¸µ¹º¸¸º¹µ²¶º»»¼Àû·º½¼ÂÊÉÈÉÌÌÉÇÉÍÅÌÏÊÇÊÍÌÒÓÒÐÒÔÑËÌÎÏÍÎÑÒÏËÇÇÉËÏÑÏÏÍÊÓË”b]``^ce]^cifdfmmkkqpommlllfuna•Òм¸¸ÂÔÖÛçÞ½ÄÊÕÛÙàëíéêíߨæêä库·àÛÙØ×ÖÔÓÒÑÝÜÚÙ×ÕÔÓÓÓÕÖØÙÚÛØØØÙÚÚÛÛØÕÚÞÓÙãÉ“|‰‹‚™ž„nnpkb…ÀÐÄÉÊÇÇÄÅÌÆhhi`oŽœ›¡¢‹€• œzjonijgknnlmkfenlkjhfgiiiigfehknkkiegklmllhghkklm]HC@5,((''()++***)'%#"" '6Pf‚…†ƒ…„…†…‚…‰…‰‰rTXs‚†‡†‹‹‰Œ‡uf]OCOQ90CbU2!(C\a\[T?40,+4:3)(*-05CW_O804.3TOI^qoYO|°¥_Lƒ§Šjjjjeha[gqspptnb`iooponnpolmonmonlosg`w©Æº»ÇÅÄÁÄÆÂ½ÂÈÄ»½ÅÃÃÁÁÃÃÂÃÆ½ºÂÊÅÁÄÅÄÆÅÁÄÈÈÃÃÃÃÅÅÆÈÇÄÅÆ¿Å»vtutsrsqjklmnpqqd\ZY[jz{vyww|yel„wgtzxwtvssvwuuwwvtstvxxswx{xwzrjv‘——§³´¶°¬Ãؾ¯Ì˪¬Ôêèæé€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€d¬Â´³©©»­†z€{y€€‚ƒ††††…}~‚€||Š–—›£¨¨¦£œ•˜šž¤©¬­®°®°±²¾À³¢Ÿ™•”“™¤³»º¯Œ—µÈÎÐÌËÍÊÄÐÍÊÍÐÒÔÖÓÀ—…‹‹‹ŒŒŽ‘”˜œœ›–›š™œž¦£œ¡²»»»ÁÆÑØÎ½´¶´¶····¶´°¶»»¶µ»Á»¸º½¼ÃÊÊÊÉÉÍÌÉÇÉÌËÍÎÉÅËÔÏÓÑÎÏÓÏÇÊÏÐÍÍÓÓÏÉÄÄÇÇËÎÊÊÊÔÈa[X[^]ed_egigdhnolmqponmmmnipxin©Í¿¶ÇÔÙÔßéÔ¿¼ÃÌÛâÝåèêåçéÜÔâèáẔ¶ßá×××ÖÖÖÕÕÛÚÙØÖÔÓÒÙÙØ×ÖÕÔÔÔÖØÙÙÚÜÞÚØÕÖÌÔàÅ’y„ˆ‚”›™”Šyi‰¾ËÃÊÍÎÎÌÑÞÙœojg^už¸·ÂÀ‘³Ê¸‚fssjkgkpojhhhjponlgeglmmlieeghjiihcbipmmjfdfhkmlZIHB3,('''(*+,)))(&$! !(:ewƒ†…~†‚‚†…ƒ‰…ƒˆ_M_z…††‹‰‡Œˆ~e`]HBG?>Zb>'$&?]^\V>,.-/.371/12-/.7Q`S>25.4TNI`spZO{®¤]I‚©Žljjfcie_hooqqtpcajqooonnnmkmomlonlnq`Xv}{¢Å¼»À¾¿¿ÁÄÿÃËÉÂÁÄÂÀÁÆÃ¾¿ÅÂÁ¿ÃÈÆÂÅÇÀ¿ÆÈÀ¾ÄÂÅËÉÄÊÌÃÅÈÊÅ¿ËÂusturrsqmmnnnnnoc]\\]kxwvzwvzxfn…vgy}vstrvvrrwywoswxwwvuuxwyww{sdw”™•¥²µ³®ªÁÕ»¬ÇÊ£¤Ïéçç뀀€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€h±Åµµ­®Ä±‰}„ƒ~|‚ˆ†„ƒ…†…ƒ„„~‚|}~z|‹™š‘œ¤£  £¤¥¦¨ª«­°²¬®¶´«®µ°¦¯®§§©¬±µ¿À¹°¤§ºÃ¹¹Ãù¸ÂÂÂÀ¿ÂÆÆÄɺ”†Ž—•–˜˜—™œ˜Ÿœšœžž—˜£¨©¬­«´ÅÉ»²µ³´µ¶¶µ´³²¶¹¸µ´·º¹µ¸»ºÀÈÇÇÂÂÆÇÃÃÅ¿ÁÉÐÎÇÉÑÑÐÏÎÐÏÌÇÊËÌÌÍÏÐÐÍÆÆÈÅÉÌÆÆÓ·cZW]bYZbbafgiihilkjlpoonmnnooclsg~´Ì½ÑÜÛ×èóÙ¿»¾ÆÙáÝçéìèëïãÝëåãã¹—µ××ÑÑÒÔÕÖרÕÖ×רÙÚÚÕÕÕÖÖ××ר×רÚÛÛÚÚÝÕÕÏÔàÅ”€‰‹‰†ƒ™·Ç옡ÂÐÂÆÇÈÊÆË×Ëšrje`xž³¯¾Ã¡“±Âº„eqrgjkjnomljikooomifimkmlfdehhijigffghlkheehkmliWJLB0+''''(*+-((('%" +Rwƒ‚‚€ƒ~‚€„…‡ŒvYZo}…„†‡„ˆŠŽo^R:.AY][G'(/+=Y\VG0&.+-+3;:9::@ED@K^X?04.4UPJburZNz¬¡^G§‹jlricgb]forrosre^fonoonkijmlnlknmkmsb[x€}¦È»¼ÇÅÃÂÃÀ¿¾ÀÂÃÂÃÁÇÁÁÇÊÃÀÃÄÃÁÂÇÈÄ¿ÀÂÇÆÁÄÈÅËËÇÃÈËżÄÇÊÅÀÌÃ’sprsoproppoonmmmi`\YZixyx{xuywgr„wjxyrtzsuwxusstyxwuwxxuwyvwtv|ufy˜›—¥±±°²¯Â×óÉË£¡Ëçêê뀀€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€j´È¸¹°±Èº‘„Œˆ…Ї†ŒŽ‰„„…‡ˆ‡‡ˆ„€‚~’ ¡ £©¯®«®µµµµ¶··µ´¶³º¼±±·´±¿¼±´¾ÁÀÈËÅÁÄÁ¿ÇÆ¿¾ÃÄÀÂÊÈÊÇÃÄÈÆÀÁ´’‡’–—•——››—œ¦¢£ŸœŸžŸ¡›—™™šŸ¦¤¿Ë¾´¹³²´¶¶´²³¸µ²´·¸¶²µ±³¶¶¼ÃÃÄÃÇÎÌÅÄÈÃÉÌÉÇÉÎÒÕÏÎÒÓÎÊËÌÈÉÎÐÍÎÒËÄÆÊÉÏÔÎÚ¿…YXb]WZW]]_ecaaghgikloponnmnoohlnrfl™»»ÃÇËÏãðÙÀ»º¿ÒÛØäçêæèìàÙçäæâ´–¸ØØÖÖÕÕÔÔÔÓÒÒÓÕÖØÙÚØØ××××ÖÖ×ÓÏÑÖØÔÏÕÝÔÕÐÒØ»•€ƒ€€…‚–³ÑÓÉÆÅËÏÄÄÃÆÊÇÊÔΙrnh]tœ¶¬·»˜Ž±Æ¶‡gruiggoooqqlghnmlljhikrrmeafklknlhggjqmlhgikjikfTJNA,)''''(*,-(('&$!#&Bp‰…‡„€‚„ƒ‚ƒ„Œ‚eV\v…€€‡‚ƒ‡vS5(%0EI:2)(%":YbS@7,%&&&''())*'((&!2\ƒ„„ƒ‚ƒƒ€zƒƒ€ƒ„u`byw{„‡ˆˆp_l`2#($(*$*,'9Z\EIhnhljjllmmmmknoYCV^A,4- 6SQK_trZP~²¦eL‚¨jjngaec^fnruqrrf_hopnoomnnmjkmnnnmlsg]t€€¦Æ¶µÄü»Ãþ¿ÂÃÁ¿ÁÅÈÀ¼ÃÈÅÂÅÉÂÃÊÉ¿¾ÆÉÁÁÇÈÆÅÁÃÌÈÀÅÈÅÆÄÃÂÁÂÌ¿utsssrqprnmopnkkh_[[^kvvx|zvxyhmƒweqxuuwzwuuvvwwwuuvxwwwvyyzwx|uiy•™˜¦®¬±±­ÀÒº«Äɨ¨Ìçìêæ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€n¸Å²º»¹Ë¾x€ƒ‚}zz|}||}~}yyyx}}}}Ž–•››—–™œ¡¤¢¤©«ª«®³±¯®«ª®³³³´±³º¼¿ÁÅÇÆÄÄÄÃÆÄÅÅÃÄÈÈÉÉÊÊÏÒËËÍ»“‡—–’™¥˜ž¡šš¤£žŸ¦§£Ÿ ¦Ÿ—˜Ÿ¡¡¤¥«ÀÙѺ·¿»º·±­´¸µ¨°º·¯¯¬ª«²´´··¶»º¸»ÂÁ»¼ÃÁÇÊÉÉÍÎÌÍÑÕÔÑÎÍÍÓÔÑÎÍÏÍÇÅÇÊÇÌÞÀuRac[aic^_\YXX[^`dghikomijsqlmkd`ik\TUOO\S„®À·»ÓÒ¿·¾ÄÉÏÎÎãìæëìÙÔáççÜ®”·ÙÙÔØ×ÒÒÕÕÓÖÕÕÖÔÑÒÖÔÒÓÓÑÓÔÐÒÓÕØØ×ÕÕÖÚØÏÍÓßÁ”}„Љ‹ˆ¯ÍÊÊÊÆÃÇÎÊÅÂËÊÁÎÍšond`uŸ¶«ÃÌ—‘±Ã¹ˆgqwokggoomnhcghknnjhillihhegjjnmkggjkknoheggjng[I<3*%*%%&'())*))('#0_~ˆˆ…ˆ…€€~‚€‚}d\r}xtyƒ‹r\bQ0(&(#+&)1.:W]KPnodgeda^ZWTSRLMA8R\=.4."7RPJ`vsXL{® _J€¦Škkogaec^fnrvsstg`jqonopnopoppppomkjsg]vƒ†ªÇ¹¶ÀÁ¾¿Á¾ÀÄÆÃÃÅÄÀÉÁ½ÂÅÀ½ÀÃÂÂÃÅÅÄÄÂÄÂÁÃÃÁÁÂÊÌÇÂÂÃÄÂÂÂÃÁÍ“wurrttropkjnommqj`[Y[hvywwvzyfn~uhu{xvttuwxtrtyuvsqt{|xwwtwwy{phz”˜˜¦­¬¬°°ÁÒ¹§½Ë¨§Íèíê瀀€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€m¸É·¿½»ÌÄ‘z‚~{}~~}|zz|y}€}zxyzzvvw~—”—˜•”˜—•–ŸžŸ¤¦¥¦©®¬«««ª®³°²´¬®¹¼¼Ã¿¾ÀÂÃÄÆÃÃÈÊÇÈÉÈÉÈÉÉÎÍÇÉÎÁšœ•˜¥ ŸŸ—™¥£¢¢¢¤¤ œ¡Ÿš™¡¤¨©°ÄÚз´º½¹µ¯°¹¹¯¥«¸·°¬©§§©°·¸´³¶¹º½¾¹µ¹ÁÂÄÈÈÆÄÅÇÏÍÌÍÐÐÍÉÒÓÑÌËÍËžÅÐÊÉ׳iMcbZdlf\[[ZYYZ\]ceedhlmjiolb[RNR^ZNLRNOVMV‡ÀÂÁÝܽ¸¸»ÄÇÂÉãëçëì×ÓáèåÚ°•²ÑÒÍÑÓÐÌÐÖØÒ×ÚÕÔÖÖÒÑÒÕÓÐÓÙØÒÔ×ØÙØ×Ö×ÚÛÖÒÔâÉ’}„‰‡‰…‹©ÈÈÉÌÈÃÄÅÇÊÉÍÆ¾ÑÏ›omd`v¡»°ÆÌ—‘±Á¹‡fouljehnlknjcekjijljihllnlgfjlpkgehlkholfffflogXC3.(%($%%'())**(''$ 4h…‰‡Š‚‚‚~~‚„ƒkVhzypqz€yr[?,2D>/(@IFLED[`G>@A>:AAAWY8/4.$9QOJ`vsXL{® ]Jƒ§‰hkqhbfd_gosrqrqd\hqrqqqooonmnnooonnrh^v†‹«Àµ¶ÂÂÄÂÄÄÅÂÂÆÆÂÀÂÈÂÁÄÿ¿ÄÄÃÀÀÄÉÇÁÆÈÃÁÈÉÄÄÈÃÄÅÃÂÄÄÇÅÇÆÁËÂ’wurrttrolmmlkmopf\WX\ix}zxtx~wdrˆudx€zururqtwwuuttuvxwwvxwtwxy{qh{”—™¦¬­±®®È×¶¥ÅЪ¨Ïëîêæ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€f¯Å·»º»Ì¿’{~}zy€‚€{y{y~{{}~€zvtyœ™“™–“–š˜––—› ¢££¤§¤¤©­­«ª¥­²©ª·º¹º¶¶¼ÁÂÂÄÅÁÂÅÇÊÊÆÇÄÄÆÎÐÊÍÒÜ›Ÿ››¦©¦¡ž¡£¥¦¥¢ŸœšžŸ ¢¢£«¯À×Ò½¹»¹···µ¶¶°®©®³±¬§¨¯©«´µ²³¶º¸³¯²¹º¶¶¿ÄÁ¼¿ÅÊÄÄÅÈËÍÏÏÌÌÉÇÆÇÄÁËÈÊÂÈÕ¦\Lba[`caWVWXYZ[^`defgilkimh`ZQIN\SEHNMWZMSJk´ÏÎÝÛÀ½¼¼ÄÄÂÐåìçìêÕÒãçãÛ±“±ÑÏÉÈÊÌÊÈÈÉÉËËÌÍÎËÇÊËËÊËÐÑÎÍÎÏÑÓÕÔÓÔÑÓØÕÏÜÊ‘‡Šˆ‰‹«ËÊÉËËÅÅÈÈÉÈÌžÓÔnj`^w¤¶®ÁÄ•–·È»‡dmrigempkimjegknonidejlnlihfgknlighjkkkihidemm\O:..-%!#$%&')***'&'$8l‡‚„†ƒ€€„„‡uW_qyonywr[?>ACFJLNMMPR[ZV`Y;.4.&:ROJ_trZP~²¦aM…«Šgiqicge`hptsrtsd]ispnoommmlkkklmmnnsi^u†‹¨¹°¸ÇÅÁ¼ÀÆÅ¾¾Äü½ÆÊÆÆÉÅÁÂÅÈ¿ÃÈÉÆÂÉÆÂÃÈÆÂÁÃÆÅÃÁÂÅÇÅÃÇÇÀÌÅ”utsssrqpnoppmjjle[X[_jwyz|wuzuco†sbrxvwuutrtvwwwyyyzwvx}wzz{xy}vh}•˜›¨¬®¶³²È׸«ËÒª§Ðìïê瀀€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€Y–«¢¨«¯¼¦ˆ|~}{{€€~|{|~z}}{{||}}~y{ šœ˜““’‘‘’•—˜›žŸž Ÿ¥ª¨¤¢ ¦«£¦³´±µ¶¹½ÀÁÁÁ¾¾ÁÁ¾ÀÆÈÂÄÈÇÇÆÆÑÓ½—‹—œžŸ ª«£ ¡¤¨¨¤£¥©¨£ž Ÿ¢£¥¨«³ÇÛÓÀÀƶ¹½º³³¶µª¬±®«®­¬¯«­µ¸²¯²·¶²°´¼½¹·¿Â¿ÁÈÈÁÇÊÎÎÌËÎÒËÇÅÆÆÄÂÁÎÈĺËÙ¡VL\\^cdf]UVWWXZ_cecdgjjkkgZRSUVWVRHFJW[T\SJXœÒØÜÜÁ¹º¼ÁÆÊ×çíçëêÔÒæêæà³’¸ÜÓÏÑÓÔÒÎÍÒÒÌËÏÐËÇÇÌÌÉÆÊÍÊÆÆÉÌÌÊÈÍÓÎÊËÏÎÊÑ·ƒ–“‘ªÎÐËÌÌÈÆÆÅÅÅÍÊÃÕÖŸoj`^v£·µÂÀ˜žÁÔ¿‡cmqfefkplilhdhrmijmjhkookghhhkikkiddinjghgahrjOJ<00/&##$&')**-)')(" !!# Cq†‡|~ƒ€„…|`Xerliv}wlXPc\DXkLOgnl_IT`ZUY\[SORUVTOJFRZ_\X\R=-2-'AHOMKHQbkmpxonihhchqbU•ÖÜÝØÃ¼ÅÍÐÓÔÚèîèíëÖÕééÝ×­‹µÞÒÍÖ×ÑÏÒÒÑÑÑÒÑÐËÃÅÏÒÒÎÌÏÐÌÑÒÕ×ÖØÙ×ÒÖØÕÐÐÚ¾†gu{u}z{ÇÊÄÅÅÁÁÌËĽÅÈÊÚÔ™mhb]xŸ¼½Ã½ ·É¾ˆcmskkknpmlmkghjoomifihgkpmdflnjiihghllmkefhijeidL=B:% &+-(%*'&&''%" !>wŽ„‚€€€}{~‚x\UmyvmWVf`[lM&LqaYi\, <[_[WYVOLPMJKNNJERZ]WY`U=,50$9VSK`tr[P{­¡`J£†glsg`ca_iruwqttg^gsrpnmnpomopommpoktmav†®Â¹ÀÊÆÃÀÁÄÁÀÄÈÁ»ÁÈÅÁÂÉÉÃÁÅÆÃÂÆÈÄÂÅÆÄÂÃÇÉÆÃÂÆÇÈÆÃÁÂÁÂÅüƿ“urtpornqqmqrljordZVW\l{|wwy{{ufq…ufw|urrvuuutvvrtyxtrvwuvxvwuw{tn€™œš¤­²³¶¸È×·Ÿ¾Ë©¦Ëéìéꀀ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€U…’†‡‰†ƒ„}~€}}|}~€€~||v|~}}}}~~y}–«©¤¦¢Ÿ ž™˜˜œ›–”“’”™•”™œš™ž“’¡¨¨ª®¯«¬±³¯²µ¹»¼»»»¼¼ÂÄÇÈ¿ʻ˜‰‘’“™œ ¡œœ¡¤§«ª§©¬ª£¢Ÿ˜š¤¨¥¦³½ÓèÞÆÄÊÂÀÂÁ½½¾º°´¹´°¯©¦®±³²¯®²µ²®­°µµ°ª´·µ±³º¾½½¾¼½ÂÄÅÈÈÇÇÊËÀ°¦˜–‘’’\FW][[gmjh]VW\]Y\bj^H;@FEDPY`juwsprlmlllhji[W˜ÕÛÝÚÀ½ÄÇÊÓ×ÙèíçëëÖÕèåߨ¦„µàÏÈÑÔÑÓÖÕÒÏÒÐÍÔÔÊÇÎÔÕÏËÎÒÒÐÐÐÑÓÒÓÕÖÓÓÓÒÑÙ½ˆkz€}‡…†¤ÌÎÆÅÈÆÃÈÍÌÉÊÃÂÚÑ—nic]w¿Äɾœ ´À²„gorhhfnpmlmkghjllljgijigkkgfijjiihfgjklnjgeet‚€\:=M7#+0,(**+++*'$!!#T€‰‚~€~|}~~x]Rj€gBKibXpO%NsSShY)>[``^`]UONUOHLMHISW\\\^O5+51%;VSJ_sq[P|®£^J¤…ektidga]hpqtrtpd`ktmopononmmpqnlnomqiax…‰«Ã¸ºÅÃÂÄÉÊÂÂÈÆ¼»ÃÅ¿ÀÀÄÉÅÂÅÈÉÄÁÇÅÁÃÁÄÃÁÃÈÈÄÅÆÄÁÃÄÅÅÄÁÄÆÃÊÀ“qpvttsmlpkjopmmpk^YZ^jwzwxz|zseqƒufv|vvxvuussvxvxttxzwuvyxuwwy|sl|•šš¥¬°¸¹µÀÓ»¤ÁÏ©¡Ääêéꀀ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€Y‹–‰Ž–•“’І„€‚„‚€€€€}{{|}zx}{wy{—®­¤§£Ÿ ¡œšš›˜”’“–˜™”‘•™ššš”——• ¤¢ £¦¨¬±±®µ¶¸¹¸·µ´¿½ÂÃÁ¿»ÀÁ¶˜Œ““’–ššš›œŸ¡ ¤§©¨§¨¤ ¥¥žœ¥«««°½ÓæÝÍÌÎÇÁ¿ÂÁ¿¾¿·ºº´±±«¨¯¯±³±¯²¸µ¯©«°³³³³²µµ²µ¹¸À½¹º¿ÃÄÄǼ¾Æ°b`YYY\ZMGOXUXaimhabXW`^XZaaOHNQSUU\hpqrrpqsrttqpon`TZœÓÛà߯ÀÁ¾ÃÒ×׿êäèéÔÒåâÞØ¦ƒ´ÞÎÉÏÑÒÒÑÐÐÏÓÑÍÐÓËÉÐÕÖÒÏÏÐÑÓÓÐÑÓÐÎÖØÒÐÓÕÔÛÀˆnz~{…ƒ¨ÍÎÅÀÇÊÆÉÊÇÉÑÉÃÖИpld]wž¸ÀŹ— µ¿µ„epvnnmjooljfeiljimjcfjllomdbirlkjjghkknnjgaew†mH14:5&'01*(*)'&&&#0h‹}€€}|~~{{bOh…uL(Ko^Ig`A\hBRt`.=W[\\]\VPCNMGHIIMU\`_aaSA-60$9USK]qp[P}¯¤aK‚¥‡hmugaeb]hqtsvyp`_jpnprqonnonnoqnklqngay…ЬÀ·¶ÇÇ¿ÃÎ̾¾ÄÈÀ¾ÄÉÉļ¿ÆÅÂÇÈÇÀÂÊÇÁÅÆÆÄÂÃÇÆÃÈÆÄÅÇÇÅÆÄÄÆÆÂÍÕppuutslloqpllnrvk^Z]ajuxy{vv|t`n‹wdtzwvwzwvwuuvxuwxxuvy~zyuwx{}shx‘˜›§®°º¸²¿Ô¾§ÃϨžÂâéç耀€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€T‰”„ˆŽ‹ˆ‡ƒ}€}|„|yz|yv{€}z}„ƒ}~𴳩¬¨£¥¥¢  –“——“”šš•““”’”––˜œ“‘£¢  £¨ª§¤£®¯°±´¶¸¸ºµ··¸¸»ÃÀµ–Š“”’’”—™™š £¡¤§¨¦£¡ ©¨§±ÂËÍÒÍØåéÚÇÅÃÄÁÂÃÄ¿º·¹»¹º·­ªµµ¶¶´²±²¬®³··³±²°°µ¸µ³·»¾¿¿½º»ÀÄ´ý…\[[WWTROHKXXQUaili`b\\]Z\aaTLIJOYcdinnmqsrqttwyurqj_Q`¦ÛãäÝÊÀ¿¿ÆÖÚÚæêãèéÕÒäå×Ô¯‹®×ÒÎÒÓÑÑÒÓÖÓÐÓÒÎÊÉÏÐÐÏÑÓÏÌÎÑÐÒÕÓÎÎÓÒÐÓÔÑÏÜÆŠs€Š†‡§ÉËÅÄÊÊÅÃÇÄÃÎÏÌÛÖœqja\{¤¶¾Ã³“ž·Á¶€`nvkiijooljfeikmoqj`bhmmomheilkjjjhjmnkjhgbar€]1$%)@?##,.+(*)&$$&%!!Q……~€||{}cG_}_2#Tr\8NcZ^M6E\P, <^^][Z[XRTXZVRONONTNEEB9418/ 6STM`sr[P{­¡bK¤‰jnsh`dd_fpvtqute]gtvqnpqonpnmopokmqskbwƒŽ²Â¸¸ÊËÂÃÉÄýÁÉǼ½ÈÏÆ¾¿Ä¾½ÆËÇÁÁÆÄÁÀÊÅÀÁÅÇÄÀÌÌÈÄÃÃÆÉÀÅÇ¿ºËÅ”vrsonqorospihknph\X[_iuxyztu}wbo‚wjvtms|vstutrttwvusvyzyzyuwx{}sj{”œžª°²¶´³ÅÜÁ§ÀЪ¡Åæëè瀀€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€`˜£‘Œ~~€zz~€}{{{yy‚€ƒ~›¶´­®©¥§¦££¢š˜›š—–•–”’“’–œ›šŒ™Ÿ›š¥¥ ž¢¦¦§«°µ¸¹³®±µ¹»¹½Æ¸•…“’‘”––—œž¢¥¤££¢¡£§¨§¤¬¿ÊËËÊÓÞæØÈÊÏÃÅÆÁ¾Åĸº¹¸¶¸µ®°µ¸¶±°´µ²±¯°µµ±®®ª¯°±´±³¾¹·¹»»¾ÄÄ»¾¼—d\g`]]WUXVTXWQR\ellg_Z\]VVWSKJDH[jjgfknptsnkonpwvwvh[H]¦ÝêèÝɼ¿ÈÑÚÝáêíåêìØÕæäØÖ²Œ¯ØÓÊÓÕÐÑÖØØÓÎÐÑÏÎÍÐÍÎÏÒÔÎËÑÓÍÑ×ÑÐÔÔÑÏÎÏÍÏÚÁ„o{}~‹†ˆ³ÒÎÈÉËľÀÄÈÈÌÊÍàÖslb]{¦¼ÃŶ”ž¶Á¹„dsvhegnpmlmkghjoonidgiflqogcejljjjghkljkhhd_fqS$IP*"""&))++-+'')(%7mŽ‚}{|~d@OfD#(CNA-1=@A0/.14-+@VSPLHIIC>=:6433311-+*'&)39/4SSNdwt\Oy©bI}¢ˆilqjafe^cmusloti_ixtoorrmlolopmmopnvk`r}´Äµ¸ÅÆÇÇÈÅÂÁÀÅÄ¿¿ÇÈÈÅÿ¿ÅÅÿ½ÀÆÆÂÆÃÁÃÄÄÃÃÆËÊÅÄÈÇÄÀÈÉ¿¹ÍÈ–urspnqnqrpnmmooni]XY]jwzyvux{whrƒscu{wuvtuvvvxyvtuuwvuuuyxuwwy|sl}—œ¥ª¬¶´²ÅÛ©ÄÒ®§Ëêîêꀀ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€_š§•‘‰~}}†Œ‡€~~}}~}}~{}€‚}‚~š¶³±°«©ª§¤¦ ŸŸ™œ˜–””””’•™•–š”’›™’——šžž›ž£¥¤¥§«­­¬±¯´·ºº´´Å¸•„Ž““”šš˜› ž¥¥£¢£¤£¢¢ž¤¡ž¤«¬­¬±ÆàÝÉÉÐÏÄÅÈÀ½À¼»½½º¹³ª®¶¹¹µ²²²°·²°µ·²­««²±±·¶´¹´¯²¸»ÁÄ¿·Ã§q\ee[Z[WV\]Z\YYW[eigcd[ZXNIJF9AJXgkjkiorturqvxtqtsvzlSB_©ÛééÞǸ¿ÎÓÕÙçëíåêíÚÖæäÞÜ®‰²ÞÔÊÒÔÐÑÓÑÎÐÎÎÌÐÓÌÈÒÔÓÔÕÍÊÒÑËÌÏÏÏÒÑÕÒÍËÍÑÙº†s}|}‰‚„®ÎÊÅÈÇÄÆÊÅÇËÌÉÍßÒ›tmc\z£»Áƹ™¡¹Å¹„akpfilnpmlmkghjmjhgfiimnmkihjmnlkiffiilkfdfd_R2! U[2$%!#&(+*,+(()& N…‡{{|~€‚„hEIS;+30/37328;@FEHNQSO610,(+,%(5628=?D@-.8.%(*290 5SSMcvt\Oyªž`I£‡hlre`fd^fqxvqsre`jupopspllpmnnlnqqmrg_t|ˆ²Ä´¼ÉÅÃÀÅÊÃÃÄÿ¿ÂÄÇÇÆÃÃÄÅÅÇÀ½ÀÃÃÄÅÅÇÇÅÅÆÆÄÄÉÇÁÅËÊÅÃÇÈÂÀÒÊ–qpusssmmokmmghorg]XY^n|}ywwyzugs…vhx|ustuuuuvxxtwxuqtyxqvxvwuw{tj}˜™¡¦ª··³¿Ö®ÊÒ¯©Ëèìê쀀€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€aœ©—’‰‚†„€‚€ƒ€|}€€~}~}ƒ€~…ƒ€¸µ¸µ¯®¯«¨«ª¤£¡š—›š™™˜•–˜““–›š“•—™˜—™Ÿ¤žŸ¡¥©«©§§¨®¯±¶¶»¾µ•…•––”™™’–¦¨§¦§©©£¡¦¥¤¦¥¥©­©¼áãËÅËÇ¿ÇËÂÃÇ¿»¿À¼º¶²¹¸·¹»·±²··´³µ²¬¬±µ¶²®±·¸´´²¸»¶·»¹¸¸—hXbcZ[^[VUTU\QXY]imgdc]WLCMWQAK^ihhkkgjkorqs{qrswrqteOEm·àæäÛÈ·¿ÎÎÊÒéêìãéìÙÕäéÞÚ°‰±ÞÙÑÔÓÒÔÔÑÐÎÒÓÑÔÒÊÍ×ÔÎÐ×ÔÍÏÑÑÌÍÕÔÎÏÖØÖÎÊÍØ¼…t~}އЫÏÍÆÆÁ¿ÉÇÇÍÍÊËÑÞÔ›qi^Yz¦¿Äɾ›ž²¾¼‰fnskkhjooljfeihkjjeadfkllmljjmmkkjggjjikhb`mkO(6hW,$#!$(()--+*-.&8mŠzz}}€„|dILSKKOLOUYTYaY\TWc]_cJ+(((%*,%8[fahhdmU./?,((080"7TRK^rq[P|®£`K‚¦‡gmvfcic\fptvsvrc^jwtpmmnnprplknqonopfd}ƒ‰±Å¹¾ËÈÁ¾ÂÂýÁÈÁ¼ÃÉÉ¿¼ÃÅÁ¾¾ÆÃÀÂÆÆÄÅÄÆÄÂÇÍÊÁÂÇÉÇÇÉÈÇÂÂÃÂÂÒÆ‘rqusrrmnqlnoikojg_[Z]kvtz|vuzsaothwxpsxwttxyzzywwwvvwxxuxwxtuztj~› œ£ª¯³¹¶¿ÔİÉÏ­§Èäèç뀀€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€_œ«•Œ„~€ƒ‡…€~~~~~~|||‚‡…€~{¡»¹µ¹¶­­³°§­¥¦¨¤¡££š—–—•’‘’—–’“˜š›•–•“•šžžžž£¤ ¢¨©¦¡¦¬°±²ºÀ²•Š’˜››–›œœ›”˜©­«¨§©¨£Ÿ ££¡¡£¥©ª«ÈëãËËÐÅÄÇÅ»½ÄÂÂÇÉÉǽ¶¹¼½¼»¹¶´³°·²´Âº­´À¹µ··³²µ¹»¿½¸¹»¶¿¯‘q]]`^ZXY\\XVXZTT\fljdaWLA=DKHMallnponklkjmrtswttttwtiIHÎâÝäÝØÎÔÝÝÙÚëéñêëêØ×èåÝܱ‰®ÙÒËÓÑÍÒÔÓÕÏÒÑÒ×ÕÎÎÕÐÒÔÒÔÕÑËÎÏÍÏÔÕÓËÓÔËÈÏÛµ…v}†…ˆ¨ÌÊÃÃÅÆÈÇÅÏÕÏÉÎÞÒ›qjbZyª½¼Å¼š ²Á¸†empjlfnopnjgffijllifhkklolfjmijmmgegklmnedcmoJ$ A`>&($#'('+,..-*&# !Y…ƒxy€ƒ~sYOPPNEOR[YZ`[Z[ZY[X]_K*'+%")'&KjogfjroC0A@').*06-6TQKaws[P{­ bL§Šhoriagd^gqvrsutfanvspllorrrrponoonlte^w„‰«Ã·¿ÏÉÂÁÅ¿ÂÇÄÀÁÅ¿¿ÁÆÇÃÂÃÅÆÅÂÀÃÆÅÇÅÅÆÄÄÄÂÁÅÈÈÉÇÅÇÂÅľ»ÊĘqturqrpmnnknolopg^XY^juyzxwwvsiw‰wftyxywyxursutqtuuwyutyvwvxwx|soz–¡ž£ª²±¶´¿ÙÆ«Àи«Æåíî뀀€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€d¤°“‹Š„ƒƒŠ…|z{~‚ƒƒ‚†„~…ƒ‚…€‚ž··´º¹²°¶¶°¨§ª«¦¤£Ÿžžž™••˜“•–‹”œš••““––žž£¤ ¡§¨¡£§¥¨°±²º¯–Ž”–š˜š¡”›®«¦¦©§¦¥££§§¦£¢¦¯¬²ÌèàÎÎÏÅÄÇÅ¿ÂÆÁÁÉÈÂÁ¾¹·À½¼¾¼¶³µµ·³´º³«±°®®²¶¶¶·ºº´²·»º·±¶œoX\ba][[]]ZYZ^UNXikfg`RKMMMSYhkllonifhklklprrsovvox{hIU‰ÈÐÅÔàÉÇÍÎÑÕÑÕâêåèèÖÕæåÜÚ¯†¬ØÒÃÌÐÏÓÖÕÖÏÔÓÔÕÐÌÐÒÍÍÑÒÑÎËÓÓÑÐÐÒÒÑÙÖÑÌÌÒÞ»‚t‚„€‡ƒ„¨ÊÊÆÇÆÄÆÅÉÎÎÌÇÇÖÖ›nid]y¨··Ãº–Ÿ¸ËÊgoskjfmnonjhggklmmifgjnpnhddhkimmiehjknjcc^joJ#!"*;+  !"&(*--..+*)$ H„zruw{€€y_ORUTQJ?IXXXZ\[[Y\X]_L+(*'(+)0TpjkmhnbEGVB"%,*06,5SPKaws[P{¬ bK§Šhoqiagd^gqvxwvsd^lunnnpqqpopnmnpqpnsf`xƒˆ«Äº»ÇÅÁÁÇÈÀ¿ÃÄÀ½ÂÇÄÃÅÊÊÆÄÅÇÃÃÅÄÀÁÃÆÅÄÇÉÄ¿ÁÀÇÆÂÅÌÊÅÅÅÀ¼¾ÎÅ”quurqrpmllimnkopf^YY_lx|r{yvzwgt‡uewzuvxpquwurswsvwtrvyuvwvxwx{rh{™¡ ¨­®±²¯¾ØÄ¨¼Î¶©Åãìí退€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€g¡ª’Œ†‡€ˆ†€€„…„‚‚‚ƒƒ„€ƒ‚€~~‚Š…ƒ·¹´¼½¶³·¸´ª®³°ªª¨¢¡¡¢ ›•–š—•–Š–Ÿ•–—˜••–•’ššž›¡¢§¥©§©­­¯»®–Ž”–šŸ£œž¢— ®«¥©®«©ª¨¥©©¦¤£¨°²¸ÏæÞÌÉÇÄÃÿ¿ÈÏÊÃÈÅÁ¿º¹À¿ÀÁ¿¸·¹¸¶¶·µ°°´´µµµ·¸µ±´·±­µ·³²³¼¨vUXc`_]\\[ZZ[Y[U[noc]UNMQSWaijijjjlmkdimkkmpppuysqxtcRV„»¾¸ÎÖµµºº¿ÆÀ½ÜæãçèÖÕææÜØ«„ªØÓÅÌÐÏÐÓÕÕÖÙØÔÓÍËÐÒÎÍÐÔÑÍÍÏÒÔÒÎÌÑÖÝÖÑÏÏÑܽˆv~|…„‡®ÓÑÇÈËÇÂÆÌÎÉËÍÎÚÓ™mie_|«µµÃ»™¢»ÌÆ‹cmtiihkmnmkihiijlkhegjkmmjfdhmilmifgjkmkif_mnD # $%(-.,-,)+,(  3r†{stknrzmWIT][^XCBX]WZ^ZZZ\X\_L-*)'+)&9awhjmhmVJGH7$%*1/5,5RPJaws[P{­ aK€§Šhoqiagd^gqvvtspb[jsqqqpnmllnmmnpqqprfbyƒ†«Æ·¶ÄÇý¿Á¿¾Á¾½ÃÇÇÂÀÁÁÀÃÈËÀ»ÁÆÃ¾¾Èý¿ÈÉÅÃÂÆÆÃÈËÇÀÅÅÁ½¿ÎÅ”qturqrpmkjhlnkopd]Z\bny{u~}y{ucq†wgrtuzyqsvvwwwvvsrrqsxzwxvxwx{rh€ž¡ «®¬µ²«ºÕÅ®Ä͵¨Ãâêë耀€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€e¥‹„z|xv{|}€}}}}}|{{„€€}{|~€‚‡Žˆƒ›µ¸¯µµ¯¬¯®ª¦«­©¤¤£  Ÿž™”“–—“‹ˆ”™’’‘‘’‘“““•˜šŸž¡¡£¨§«²¨’Œ•™›œ¡ž ¢›”š¨©¥©®­««¨ª¬©¥¥§©¬°µÍèàǾ»»½¼¸¸ÃÆ¿½Á¿½¾»µ´¸¼½¹´´¶¸³°¶º³°µ¶²µ´°²µ³­³¸¹¶´·¹»¸£šŠdU^`_][ZYXYZTZX[ee\YNKINT]ejejpoikkdbimmjlmnmvvrtvj[YSg›¾ÑÞØºµº¾ÃÇÄÈÝèæëìÙ×çèÝת‚ªÙÖÉÎÓÒÏÑÒÐÒÖÓÒÓÏÉÊÓÔÑÐÓÑÏÔÓÓÒÑÏÏÑÔÔÓÔÒÍË×¹…u‡‚‚¨ÎËÃÆÏÌÈÄÇÉÅÆÎÔÜΗojd]~°º¶ÄÀž§ºÃ¸…amshhjjlmmkiijhiklighlomolcdkllmkhdfjnjoohdl_1"##*""&#&--+,+++-)%! &_…|rm`fmgOBKURW]N?N^YYZY[[]W[_M/*&&,#"@cqgimkiSF=2,,)(1/5+4RPJaxs[P{¬ aK€¦‰gnqiagd^gqvrqrrc\irusqommllonmnpqporgc{‚†«ÇµµÄÈÄ¿ÃȽ»¾ÄÄÂÂÂÇÃÁÿ¿ÃÄÀ¼¾ÃÄÄÅÉÈÅÀ¾ÅÉÆÉÉÿÁÅÆÇÂÆÅÁ¾ËÅ—quurqrpmllinnlope]YZ`mx|wwxzwqevƒwhuxwyvqssruzysuwxxyxvywxvxwxzqj‚  «®¯®±±¿×È­»Íµ¨Ãâêë耀€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€e¦¯“‹|wzwyy{|utxxyyxux{{yz|zvx}{}|{–²µ°²²®¯°®¨¥¨¨¦£¢¡¡¥ ˜–•‘“’‹‰‹‘‡‡‰Œ‹‡‰Š‹‘”‘–‘• ¡Ÿ¡Ÿ‹•›š–Ÿ£žŽ’©«ª©«®®«¨«ª¨§«¬®²¸»ÏèãÌÅÿ¼¾ÆÉúÂÀº¼¾¹´·»½¹µ´µ³±­·½´±µ²¬®­ª¬±°«°¯³®¤ª¸¸ ut‰wWWb^][YXYZZXV[`ZKGLH@BTdfgkggjklpofbinlkkmnmipvtqhTUXPg¦ØäÔ´±·¹½ÃÆÑâìéííÙÖæêßÙ«ƒ«ÛØËÐÓÑÏÒÔÑרÔÏÒÐËÉÒ×ÓÍÐÎËÏÚØÖÓÒÒÒÑÐÒÓÏÊË×·†t~€†€®ÌÉÆÈÈÄÆÆÇÈÅÇÌÏØÑšqkd\|®½¶Ã¾›¤¸¾¼hmtjhgjlnmkiijjkmmjhjmllnkehmjnmjfcdkpjmjgf]C!"! (3)#%!%+-.---,(&&%##%%!"P‚}i`Xgpj\SILWXZZSEP]ZYYY[\]WZ_N-'$'-$(Nh[TRPMHH@C4*/+%'05,5SPJaws[Q{­ aJ€¦‰gnpiagd^gqvwtvug]jssqooqrqoqpnnppnmrgd{ƒ†¬Ç¼»ÈÈþÃÇú»ÃÆÃÃÅÇÅÅÇÆÀ¾¿Êļ¾ÇÊÆÃÈÉÉÄÁÅÉÅÂÇÆÂÅÈÆÂÁÆÆÂ¿ÌÅ—qturqrplpoloolopi_WV[iw||yy{ztj|‡qcy~tsuruvuuvvtxzxwwvuyxxwxwwzqf|˜ ¢¥¤©°¸·¼ÎƲ¿Î¶©Åãìí退€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€i¬¸¡“‚‚„‚yy|{}}||~~zx{~~{zz{~z}œ»¿µ¶¶¶¸¼¹´­°°¯°®«ª®¨¤¥¦£Ÿ™›˜””””•––“‹ŒŒ‹‡‰‰‰Ž’’’•“•›šœ ¢•”šš•š¢¥¦¡•˜­°¯ªª®¯¬«©¦¦¬®ª­¸½ÀÎâÞÌÆÅÃÅ¿ÁÈÊÇÂÈÆÂÄÄÁÁÅÄÄÃÀ½ºº¼¹ÀÆ¿¹¹µ³´´µ·¹·³®¥¥ – ˜vaZfg[U[\^]ZZ\\[XZ_^PCAC<>I^ifbgiddiklkifkmlkmnnnjlsqgZPPSOPq»èÒ±³¹¶ºÆÍÕåîêìë×ÔäëàÚ¬„¬ÛØÏÒÒÏÏÓÔÓÐÓÐÎÐÎÊÌÍÓÏËÐÑÍÍÒÓÓÒÓÔÕÕ×ÓÏÊËÐܺ‹v||{†‚§ÉÊÈÊÊÆÆÈÎÎËÑÐÌÚÚŸqke]x¦½µÀ¹’ž¸ÃÃ’fismigkmnmkihiklmlhefiejlhhjkioligddjqrkeieJ-"%"""$ "#"&+.+)*.-**-('##-5/ F~ƒhXW_\T]^RP[acd^[`]USQX[]^VY_O,#%*.)5][><@:.&3HF.$+'#%17-6TQKaws[P{¬ `J¦ˆgmpiagd^gqvxttte]kwvrooprrprpoooonlshc{ƒˆ¬Ç¸¸ÅÈÆÃÅÅÆ¼»ÃÄÀÃÊÆÃÁÃÃÁÂÆÇÿÂÇÃÀÄÈÆÃÅÊÉÅÄÈÈÄÂÄÇÄÂÄÅÃÁÂÑÆ“quurqrpmrqmpplooe]YZ_juwuyutxsctŠsbv{sruwyyusuvtsruwttutxywyvwypf{™¤¢—Œ‘—«µ¸ÅÀ±¾Î¶ªÅãìí退€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€m¯¼¦¡}ƒƒ„ƒ‡†}~†„‡‡ˆŠ……ƒ‚ƒ……ƒ‚‚„}}š¸¼³¶¸¸¹º¹¶²·³¯µ¸´±´¯¬­®«¨§¥¤£  £ ˜—™™–”’‹ŒŽŒŒ’œ•˜š›™—ž¥¥–Ž”™›™œ¥©¥Ÿš ¬°¬«¬­¬«©©ª¬¯®¨«µÁÂÑæäÎÄÃÄÅÃÂÆÉÅ¿ÄÇÇÇÉÃÁÆÌËÉÅÂÀÂÅÇÂÄÉÇÂÀ½ºº¼ÁÀº²­—‹†~rsuj[a[OQWWSY[\[[]]ZX]WIDHKIJYcfigee`bflnjghjlmkloqpookkj[NQOJVWQØÙ¸¶¼½ÃÌÐÙçïéëéÖÕåèÞÙ¬„«ÚÖÎÓÒÐÔÕÑÏÐÒÓÕ×ÎÇËÔÖÓÎÐÏËÊÏËËÏÕ×ÕÓØÑÍÍÎÑÝÀ‡t}€€‡{ŸÈÊÃÅÊÇÃÅÎÍÉÐÏÌÛÛŸrke]x¦Â¶À¸‘žºÅÀagtlhimnomkhggkklkgcdgkmlgdehklkjjgehntigl_=%()$'(! !#'*,/1.-.-)''''#"%!'26#:s…fV]WBO\RIT\clhcb]WQJIW[^^VX_O.#(,*);`hZ`f\J5*IK3''$')28. 7USMaws[P{­ `J¥ˆfmpiagd^gqvwrrrd\jvwtpnoopoqonnppomugbz…Š­Æ¹·ÄÇÇÅÈÈÁ»¿ÇÆÀÁÆÄÁÁÄÅÄÆÉŽ·¿ÊÇÁÅÆÆÅÇÉÅÁÄËÉÅÃÄÃÂÂÄÅÄÂÃÑÆ“qturqrpmpploolopc\Z]bluwtvsszudsŠxhwzuutvvtqrvxvsvvsqvzwyywxwwypj€œ¦¡}€…𤣫ª©Á͵¨Ãâêë耀€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€k´Â¨£˜‡†„‚€‰‰}{ЇˆŒŒ‰‡‰Œ…‚…‰ˆ……††‰~™¶º³·º¹·¶µ´¶»³«²¼ºµ´²°±°¬«¬¤§­¨ž¤¦š™››™˜˜—”‘“‘‘Ž‘’““•™˜œ Ž‹•š›šŸ ¤¤›•¨¯ª®³¯¬«¨¥¬¯¯¯¯²¸ÆÁÌæåÌÄÊÆÃ¿ÁÈËÆÁ½ÅÇÆÇÿÁÂËÎÉÃÃÆÇÄ¿½ÁÅÃÁÁ¿¼½¿¶£’‰€vk`Y\^YQZa[PPUUTXZYZ\[X[]M=@DBBWde_biiediihlmjkmnlklqrqnjkj^TQSQNRUHZ›ÉĶ»ÈÐÐÏÜéñêëê××èæÜØ«ƒªØÓÍÓÐÎÕÖÑÏÓÐÏÔÖÌÈÐÔÕÓÐÎÎÏÒÒÏÐÔÔÐÎÐÑÌÎÔÒÌÙŠu{}}†€~§ÌÌÅÅÆÄÄÇÌÌÆÈËÍÚÔsld\{­ÉºÂ¼—¤¼Á¼ŒenwidknopnjgfflmnmifgklknlddkmiikmjfgllejkU5$'("##!" ##%,.-0/-+,--*(()'!"#&#!$6,.d|^Sg]>IP>Ea^Wa_aZNTZOQW[^^VX^O2%*,$#8Y[bgkjk`A:\U9'&.(39/!8VSMaws[P{¬ `I¥ˆfmoiagd^gqvzuvwf[grpqrrqonnommnpqqovg`y†‹­Åº¹ÅÇþÀÃÁ½¿ÄÃ¿ÂÆÄÂÂÅÅÃÃÅɺ¿ÉÈÃÇÃÀÃÇÈÉÆÀÂËËÄÃÆÅÁÁÆÈÄÂÎÅ–qturqrpmnnknoloph^XX^lz}vsy{sdq’}kyztw}wttwwtuyxwvwwsrwyzwyvwypi€œ¥¡‚ˆ›§¤¥Ÿ¢Á˳§Âàéêæ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€l¸È­§š…„‡ƒŠ†{ˆ‡‡‹‹‡‰……‰Š†„†‡‚†‡„‚•³»³´¶···¶µ¸·³²··µ¶¹µ¯¯µ´­«¨««¥¡¡¡  Ÿ›™š™–”˜•Š‹’Š˜›—•›š‹•››žŸ¡¦§ ›¡­««®®ªª®®­­­®¯³µ´¼ÂÕëáÆÂËÊÃÃÆÄÅÇÃÃÈÈÇÍǺ»ÄÈÆÃÆÇÅÆ¾ÃÌÊÀÁÉÈÇÈȵš€pula^^XX_a\[ZYWVTT\WW[\[\\WWIBNTRVakkeeedddfikkjjjfkokhnpijmj^SPSUUWRV[Se’¿µ¹ÈÑØÜØæêëîçÔÒçäÛØ±…¨ÜÕËÐÎËÐÏÌÍÎÏÎÓÔËÉÓÓÏÐÑÌÏרÒÑÑÓÒÑÑÓÐÐÔ×ÔÑÜÁ‹w}{y„„†¨ÍÐÆÅÄÈÉÁÄÌÍÊÇÏãјokcYy®À­»¾™¡ºÈÁˆbowgdhlikpnggmlhlnihjgnlkjkkllkjlkefjkhiplN."%$! &&!%'%##'+--.1-,.,)*.(*(""(*)& #% *.*^u^MPK'!"!! %)'')'%$'*,.0-//-++*))*)%#'+,)&  '& '/+\t]A766@YYXa[TWda`^ZVPINONLFMWJ0.2*%.-)-)&?fpjo\:'(''++09/5VSJ]wu]Pz¬¡`L¦ˆhopgcgc^dmvyrquiYdurqppqponrrqpooppsic|ЬĹ¾ÄÀ»¾ÁžÁÅÆÂ½ÀÈÈÃÂÃÁÂÆÅÅÁ¾ÂÆÃ¿ÀÄÄÁ¿ÂÇÈÆÃÄÄÄÄÆÅÿÆËļÌÇ•ossqprpmnpllkkqsc[XZ`jstwxxx{ucwŒ|hu{tpruwvvxuqtswutwvsrxwtwwy{qi ©¥£¡¦¬±¯²¼»¸¿ÆÂ»¿Õêî退€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€r¶Ä¯­ ‰„€…ˆˆŠˆ†ˆ‰…ƒ…‡‹Œ‡‹‰†…†‚ˆ‡‡‡‰ˆ˜²¸´³³²³³´µ³µ´²´³³¶»·³´µ°¯¶µ²±²²­¨¤«©¦£££Ÿ››œ›™™“Œ‰‘‹‰Ž‘‘–™”‘‘“˜š™œœ›Ÿ§¨«ª¨«©¦¨£¨¬«®³µ´³½ÕëãËÈÌÇÁÆÏÌÇÇÅÁ½ÄÇÆÊÉÆÉÈÆÄÄÆÉÈÎÈÅÈÈÃÆÏâ‹ur…€fTYZZ]^\\[ZYWVTSRWUXXTWZUNAN_^Y^aSIS]VOUY\^W[`P.$',5@7+(+#.SlljhD&&-'$.09/5VSJ`xt]Q{«ž]O„£…krmfdib]enuvxvsg]huvsppponnmnoppomlqi`wŽ›´¿¼½ÂÆÈ»Âż»ÃÅÂÂÆÆÂÀÄÆÂÃÊÅÀ¼ÀÃÀ½ÁÅÂÄÉÉÅÅÈÈÇÄÁÁÄÅÅÂÆÉ»ÊÄqttrqsrnlnlnnmqpg`\\_kywxyz|tbv‘}ivywvtzsqrrtvsvssxzxwxvxvxtv{tl{‘˜™›˜šž™—š™˜œ  œ«Ñìë倀€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€tÁί©¡Ž…‰…‚†Œˆ‚ƒ…‰ˆ‡‹Š††‡ˆˆ‰…„††††˜°²²±°®¯¯±±®´¶µ¶³°³¶¹·µ¹¹µ²²¯¯±¯­¯´³°­¬«¨¥£¦¦§¥¢ž›”‘ŽŽ‘Œ”‘ŽŽŽ’’•–—œ¢£Ÿ¤£¥£¢¥¨¦®«¤¦¶ÄÆÄÄÈØèßÍÊÇÆÄÇÉÇÊÎ˽ÅÈÆÊÈÃÊÉÇÉÇÂÂÄÂÁÁÈÇÆÏ̵ˆ~|z‚‚jWS[ZW]_\\]]\ZYWVUVVZZXXRD?8=P[]`e_ababdfecehiiiiinmkjnrfOMQTTTUUSVOSWQUZUS‰ÃÕÏÕàßêéæéçØÙîèÙÔ¯‚¢ÖÔËÒÙØÓÑÑÏÓÓÎÌÑÓÔØÛÐÑØÙÕÔÑØÔÓÔÓÐÐÓÒÐÓÕÔÐ×¶€nyzy€|{¡ÊÊÂÍÉÂÂÃÇÌÌÎÎÏØÌ•opg[~¹Ä·¹¬¬ÇÅÃŒckshgillnnlhhjoljiffilmhfgjhhijikiddjkfyŽ…Z2',+%%()**&)))+,+,.-/.,*)))((),-.--$&#%/03,&FZQ=,%'8SYQQSOCT]UMXZPIRUYZTX_O-+..Hi\8+.&/TlliiJ-(,'%.09/5VSJaxt\R{«_M‚¤‡ipoeeia\fouytvxg[hvqrrrsutrlmopponmpjbxŽœ¶À»¿ÆÆÅ¿¿ÌÆ¿ÀÆÃ½ÀÅÇÁ¾ÂÆÃÃÈÆÄÂÃÆÃÁÃÄÅÆÄÄÅÅÃÆÅÄÄÈÉÇÃÃÆÈ»ËÄŽqturrsrnnolnnmpnc^\]`itxqz~xwrbuyizysvtquvvvsqvwuxwrtxvtwxzwvzrk~–˜“’“›ž–‘•›™—š§¢›¬Ôëé瀀€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€s¾Î´®¢Œ‰ˆ†ˆŠ†‚……‚†ŒŠ‡ˆ‰ˆ…ƒ‰‹…‚‡†‡ˆ‡‡™²·°°¯®®®®¯«°²³´±­®µ¹µ±µ¹·³¹¸¶´±¯²¶­««¬«©¨ª«©©§ ŸŸœ›•‘ŽŒ’Œ““”•—šœ››ž¢¦¦¨§£¦©¥£§¤¢¥©¬±²³ÈãÝÌÊÊÇ¿ÁÈÉËËÆ½ÁÅÆÉÉÄÇÍÅÃÇÇÂÀÁÆÅÆÅÆÊ¸—€~x^RW[ZY[]\^\[ZYWUTSUVTX[NAC;;JYZZ`ca]^cbacffggfffghgglpi_VNNRTSTVTQHGRXPNSUHn­ÕÑÉÕãëêçêéÙØëãÕÓ²‡§ÚÙÔÕÔÒÑÑÑÑÐÓÑÐÕÒÒÙÖÑÔØÕרÒÓÑÑÐÐÐÑÔÓÒÖØÓÎÚ¿Šw€~‡„…¦ÌÌÄÍËÇÆÄÆÊÊÊÌÏÜЖopfY~½Ë·¼·™°ÈÈÀ‹cjrigilmnnkihilkkljihjkkhhhjjiijnoihjjjwsS8*#) */*+*))+,,*+-+,./.*()))*--++,'&**+,6*5?6,'&(6R\P?=FIJOMQZUIHNONMHQ]Q1)*6ZlE/0"/[ngkjF)&*(),09/5VSJcys\R|ªœaK€¦‰hnpeeja[gotwuwwe[juqrpnorrooopqqqqppjczœµÀ¸¾ÄÂÁÂÂÇÂÀÄÇ¿ÂÄÅÂÁÃÅÄÃÁÆÄÁÁÃÂÁÄÇÆÄÄÅÆÄÂÁÀ¿ÁÅÈÄ¿ÃÆÇÂ½ÍÆpstrqsqnrqkkllpoc\YZ_jvyzyy|vbvŽvfxwsxyxsoptvvvvrpruwwvuvuyyzzor’”‘“‘–¡š˜œ›•”™¡¦¢±Øíè倀€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€tÀÑ·³¨’Š‡ŠŠ‰‰†„‰‡ƒƒ†††ˆ‡„…†‰‡†ˆ‡‡ˆˆ‡—³½²²³²²±°°³±«¨«­¯³²·µ±´¶µ´¸¸¶²°°°°¯®¯°¬¨©­°««ª¦¥¥¡ž¢”“’ޑޑ˜œ™ŸžŸ žœ¢ª§ª¬©¨©¨¥¤¦¤¥«ª©®¯¬ÆçßÅÄÊÅÃÊÎÊÈËʼ½ÃÅÇÈÅÅÍÆÂÄÈÄÁÃÉÊÅÄÈ·šŒ…tyƒnVNXUX[[[]]\[ZYWUTTYYYZUG@C=KY[Y\`_b[]ba`cecddddfhjcdlkWFHRSRPNOQSSMPXXLBBEEW™ÚàÐÙììêèìêÚÖèáÒѲ‰©ÞßËÓÓÏÐÓÕÙÑÏÍÒ×ÔÏÐÎÐÓÓÑÓÖÕÑÓÑÎÎÒÒÏÍÎÑÏËÊÙ½Šw€€‡……©ÍÎÄÉÉÊËÈÇËÌÌÊÌØÔ™qncW€¿ÏÀ¹›­ÆÍÅdiphijlnomkhhhjlnomighlljijjkkiilkffiikkeQ8*$&K\6%,-+))''+0,*-20*(,**+-*''*&$+)(+2*$($&)$ :OOA;@PZMKJRZTKLGGDC?JYO5!":bzeE)&$=epjpb8"),()*09/5VSJdys[R|ªšaK€¦‰hopdfj`[gpttxytd]jtutsrrqnlppoopqrrskc|’´¿»¿ÅÃÀÂÀ½Á½ÂÇÃÂÆÇÄÁÄÇÅÄÄÀÇÃÀÀÁ¾½ÁÊÃÂÈÉÄÂÅÃÂÁÂÇËÉÅÃÅÆÂ¾ÐÈ‘orspprpmqpjjlmqpj`YY_kwz|tsyu^r{gu{utwyuvvrsxxsstxxsquwwtwxy{phuŠ’Ž’•’Ž•–Ÿ ´Þñç €€€€€€€€€€€€€€€€€€€€€€€€€€€€€€wÄЯ­¨’„„‡†…‡…„‡‡‰‰‰Œ‹ˆˆŒ„„Љ†„ƒ~†‡€~•³¸²²´´´²°¯²±¬ª¯°¯°­´¶¶¶³±´³´³²µ¸·³³³¶·³®±·°©©««¬«¤žŸžœ•’“ŽŽ‘”™Ÿ¢œŸ£¥«­©¨®®¥©©¥¥ª©¨°­¯ÉçÚÂÂÆÁÂÈÊÇÌÏÉ¿ÁÅÆÇÇÄÆÊÊÄÁÅÇÅÅÆÍÅÆÈ¤…kx…wdWSUPV][Z]\^^\[YXVVSRZU@=A8,#2UijiiV+1/%&)09/5VSJdys[R|ªš`L¦ˆhopdfj`[gpttxwtgZewwsoonmmoonmlmnprvja|”ž³½¹¼ÇÆ¿ÀÃÇĽÂÉþÅËÆ¿ÂÈÄÂÆÇÀ½¾ÄÇÃÁÆÆÃÂÅÄÂÂÆÄÄÄÄÆÇÄÀÂÄÆÂ¿ÒÊ“orrpoqplmmjmoorod[WZboxytz{xzuaqou~xsxyupqwxvwxxwvuttuvxvwtu{uiŸ¡–”““•—”œœš³âòç䀀€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€uÅÔ³°¬•†ƒŠ‹‰‹Š‡‡Ž‹‰Žˆ†Œˆƒ€‚…ƒ‡††˜²¹··¶µ´´³²°¯®°³³±­¬³³­°º¹¯·¶²°²¶·µ··¸¶°¯³¶¯°®­¯«¦§¥¡¡¢œ—˜œš–Š”››˜™œ¥£™¨°¬ª«©¦§«¦¨§§ª««­­µËá×½»ÄÂÅËÈÄÎÓǼÇÉÄÇÌËÊÌÂÃÊÌÈÆÅÃÊÆÕŘwiyˆqYXZXYZYWWY[Z[[YZZVQW[XF8=HJHS\^[[]^^bb`aeebfeddegfehjWCDGFKKJKNPQPNKYZQKC3/*))()*&+..--..,1/0+$(+#%)&"&-+' "DJFEEMTA4;@>>GKDEGBJZQGUTMMWWY`V1(*4QkT-1:Xnigjb?+&-+'*,9<0!9XUMdxs]Rw§œ]L€¤Šjoqgcib[frwqswtb[hptqopqonnlpqlilppxi`~•›²Á¼ÀÇž¼½Ä¼¼¿ÃÂÀÃÉÇÂÁÆÇÂÁÃÄÀÁÄÃÃÅÃÂÄÅÄÃÃÅÈÃÂÃÃÂÂÅÅÄÃÃÁ½ÎÈ–rqrsspoovkgnrnnse\[VXn{zuyxtyu_s¡˜qr{xustssuwwtrtuvuuvvvryxwsw}qbÑß¿ÈÄ»¼Ãø´¶´²°¶Íåîêæ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€sÇÚºµ­–ˆ‹Œˆ‰Š‰Š‰‹‹ŒŒ‰ˆˆ‡‚€„†…ƒ„‡„„›·¿²´³²±³³±¯²´²°°¯­°¯®®±´µ´³µ¶µ¶¸¸¶µ´²²³²°¯®°¯¯²±­®®¨¦¦¤¢ œ›“Š—ššž £œŸ¥ž¢¯®«©«¬¬ªªª«¨¦«±²²³µÉåÚ½»ÇÁÁÇÇÃÈËÁ»ÅÊÊÉÈÆÈÉÃÆÎÌÉÈÈÆËÎÒ´Šˆqr‡oVRXYXXY[[YWZ\]\[XTQWZSFCGNUYXVVVWYZZ]^\]`a^``acb`djkT=9BGFFLOSSPNNORUPKJC78605=1-6?AGPE?FX^PJQYQOXZ[\H/+/*.HbrmlmmiZB-.0/,)&&+58,6URKdxt]Rw§œ`Oƒ¥Œkqsgcib[frwywwtd[gnmqsommmkjnqpoonltkbz‘´¾¸¿ÈÆÃÅÅÆÁÀÂÄÃÁÃÈÇÆÆÄÄÂÀ¿ÀÁ¿ÀÄ¿ÂÁÅÁ¿ÇÊÅÂÃÄÆÄ¿ÀÄÇÄÆÈ·þŽotuppsrmopokjlnmd[[X\oyxzytqzy`qª ojxsqyusstvwwvutstwxwuwutzxuysdÕçÒÙåàßÜßáàááÝâáåëíëé耀€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€tÇØ¸°¨•†Šˆ†ŠŒŠŠ‘’†‰Šƒ„ƒ„‡‰†‚€‚Ї—´½·µµ¶¶´´µ³²±³³³²²¯¯¯¯°±±±´³²°¯¯°¯´¸³¯´¶µ¹¹µ´µ´®ªª«««¨¢¡¥§¢Ÿ••››š¡«§¥¢›Ÿª°³³¯¯°®©©ª¦¤©°²´·µÀÕÓÁº¹ÂÀÂÿÁÿÂÂÀÃÉÈÄÅÈÃÄÈÅÅÉÌÇÃÁ¥‹‰„~ŽŒdNUXVXZ[YWVWVWY[ZXY[YOGDDMVYXWWYZZ[]\]^^_`aa`bbbfi_Q02>C=CLJFGJNRQNJQMGCAAFNNNi¦ÐǾÑàéäêíßÜäß×Щ‚§Ú×ÎÓÔÓÓÒÒÖÔÔÔÖÖÔÐÍÏÒÖØÖÔÒÒÚ×ÓÑÑÓÐÍÓÕÒÔÊÐÙ½}…„‡ƒ…¥ËÏÊÊÆÈÊÊÉËÉËÍÓâÓ™mjfYw±ÉÇÑÈš£ÆÕÇ`hpgfihlllkggnjlnmhdfjmjjkjfefikkieehlmgi_m“x2"(>jP%#+)**%%(''*-,,-//.//("! )-+)+)$''#!'86;7/IBFMIHKHIDP_[QLHMJLVX[]K/(.,'/9FV\ZSG4'(-.)&)((/48,6URLdxs^Qx§œ`O¤‰josgcib[frwywwtc[jtwsqtqmnsmnppoonmrldxžµ¼´¾ÇÅÃÆÄ¾¾ÀÆÉÈÆÅÉ¿ÄÄ¿¾ÁÁÀ¿ÀÂÁÀÃÆÆÄÅÈÆÂÂÍËÊÇÅÆÇÅÁÁÂÀ»ÊÃnuvootsllljikppmd\ZY^owwwyvt|z_p”lo|wtxstuwxwspruuttvwvtvwzvsztg“ÖãËÒáÝààâäääãàââæëëëìꀀ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€uÃÓ¸µ¬“…Š‹†‚‡‹‹ŒŠŒ‡ƒˆŒ†„ƒƒ‚†‰ˆ†}~ˆ‡‚š¼Ã¾¸·»º³³·±´»¼´ª¬´²±°®¯¯²´°²´²¯®°´¶·°«±´³µ¸²²·µ®«­¨§«¯¬¨¨ª¦¢˜•™š™›¢¦¨¢œ¥«¯²±­®²±««ª¨¨ª«¯·º¸ÂÔÑÀ»¹ÀÀÁ½¼ÁÅÁÁÃÂÃÊÌÉÇÀ¾ÄÊËËËÈÊκŒ†’~w~Œ~ZMWXXYZXWVWXUUVUWWZ[YKA@FQYWXZZXVX[][[[\^]^_`_^ac\J918@>=BHGIMQRPMLLOKF@AIOPNJV‘ÌŸÓâèäêíÝÚãÛÒ̦¤ØÖÈÌÑÕ×ÑÐÓÓÒÓÓÕÕÖÖÐÒÕÕÔÒÒÒÕØÙÕÒÒÕ×Ö×ÔÕÍÒÚ½Ž}‡…€‡„†©ÐÓÊËÆÇÇÍËÉÃÃÈÎÛÓšmjfYw°ÒËÍà´ÒÔÊelthgihkllkfgnmmmmifgjmkjlkhggijkhedhlmkk`n„c+!'/UM/&,(('&&($'+-,+,--/0.(!"$&)*+(&%(($$IFY^D=NTJKX^XVSGHKQXVZ_P1%*+('(/,75-.-*,,,))-'$-58-8WTNdxt]Rw§œ`M€¡‡gmqgcib[frwvwzxeZhtvspnnnnnqonnnoopqmdwŽžµ»¶¿ÇÃÀÄÂÀÂÁÂÄÈÇÅÄÈÇÆÃÁ¿ÂÅ¿ÁÄÃÂÁÀÅÂÃÄÂÄÈÉÇÄÂÁÃÇÆÀ¾¿ÂÁ¾ÎÆ“nuvootslkiikmnnoe\ZX`ouwuyyv|w_r•ˆjt~xwtvusrsssspwyvuy||wwsuw{}maÓÝÄÍàßààßÝÝÞàâäáæêêìíæ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€sÅÙ»²¦“Š‹†ƒ†ˆ…ƒ‹ŠˆŒŠ‚‚†‡†…‡‡‡„ЉƒŸÁÈÀ»º½ºµ³·µ¶¸¸±«°º¹²¯±¯­±º³±°±±°°°®³°­°³´¶µ®¯µ´¯­®±¯²µ®§§©¬¥š—››œ¢¡¡¤©¡ž¨¬³³¯¬°µ±©¬­­¯¯¬¯·¸µ¿Ó˶´»¾À¿½½ÃÅüÄÈÊÌËÉÊÄÂÅÉÈÇÆÁÉÒ²|„ƒfoŒnVTWZ[YVVWXWVRTRQSXXUJ@59JVVUVXXUTWZY\[[^_^^ac^^bZG848<<>BEFJIJLNNMLLQIB?DPRIENMj«ÍËÍãéåëëØÖâØÍÈ¥£××ËÏÓÖÕÑÏÓÔÓÑÑÑÔÖ×ÒÓÒÒÑÒÓÔÍÒÖÖÔÕÖÖÔ×ÕÙÒÖÛ»‹|‡‡ˆ†‰§ÍÎÆÈÇÊËÉÊÍÊËÎÏÙÔšmjfYv°ËÄź¹ØÖÊdlshfgikjmojehnlmnlgfhjnokggiijjjhefhkpljmtg@!''&+47/()%$&&))&#)-,*+.0-.,'! "$&),+)''"!&7?4;=+!/GRR\Q58KLIOZ[V\]RPUZ]VZaR/#(-**)/),)(,*&*))*,+&'/48,8XUNdxs^Qx§œ`M~ …flpgcib[frwtuzyeZjxutrppqolsolmoopqqlcwŽžµ»·¿ÆÀ¾ÃÅÆÂÃÃÄÄÄÄÅÃÅÆÆÅÅÄÃÁ¾ÀÄÃÄÅÃÂÁľÄÊÅÁÄÈÆÃÅÈÆ½ÁÇŽÉÄ“otuppsrmlklolhjpg]XW`otxw{ytyv`u™ˆiuzuvrrtuwwvtswxusuxvptyvuuz}nd”ÙãÊÔãÝÕØØ×ÚÛÝâáÞâèçëê߀€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€yÆÕ¸³©•ŠŠˆŒ‹…€ŠŒ‹‰Š‡ƒ€‹ŽŒ‰ˆ‡†‹„Љƒ ÄÈÀÀ¿½¼»º¹½ºµ±°²´µ¸´´µ³¯²¸³¯­°´²­©ª°³±°³¶·´±³¶µ´´±®­°±­ª®±­¥š–™˜š ¥¤¥¨¢›¥®³±®­°²­¥®®¬¬®­°·¸³»ÍDz±¶·¹º»½½½¼ºÁÆÉÉÄÃÉÌÊÌÊÆÅÈÆÊÆ ~Šsd†›ˆ`UWTWZXWWXXVTUXUPRUOD>86ATZY[TUVVVWYZ][[_`^^ada^WG849368@CEKLLKJJMOSEDIGECDC?AFKJOQMMD204)5URLdxs^Qw§œcP¡†gnrgcib[frwtsxzi\hsxusrolnsqmmrtqnnrjayœ³¼¸ÁÉÅ¿¾¾ÀÀÁÁÂÃÄÄÃÂÂÃÅÃÁÀÂÃÃÂÂÅÁ¾¿ÂÄÅÅÂÀÂÅÃÅÇÇÆÈÆ¾»¼ÀÀ¼ÊÁŒrqrsspoojijnonnqk^VT`nszzzvt|zar¦•kpyqqwoqrtuvvvuttwyxy{yuqxyxzqbÖèØÞÛ½¾»ÁÒÜÞãÝÜæêäçæØ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€tÄÖ¼¸¬”Š‡Šˆ…‡ˆ„‚€…ŠŠ‰ŠŒŒˆˆ‰ˆ‡ŒŒ‰Ž…|›ÄÌÇÀÂÆÂ¿¾º»»µ²¹¹°¬¯µ»º³­«­³«­³±­®¯±®¬­±´²®®°³³³¸·­°´µ±­°°­°®¡’–› šž§¨¢¢©ª¬²²®³µ¬£«¨¥ª¬­³µ¸ÅÌÀ²¬ª©·¾¹·¼½·µ¸ÂÇÇÀ¼ÆÆÆÂÂÆÅÇÏ˪‡„Œ‚y„‘‡nXVYXWXWXYWSRTURRTPE>>>=FU]YVXYSSYZVW^YY\`a^^adZF1,47457:>ADEEJIJMMKLQOFCBBDD?HHGLLZ•ÔìèçëìÜÑÝÎÊÅ } ÔÚÑÒÔÒÎÓÙØÒÕÓÐÒÓÔÕÕÓÓÕÕÖÖÒÒÔÐÌÏÓÓÓÍÓÔÕÊÏÙ½‡yƒƒƒŒŠ¢ÌÏÇËÊÌËÎÇÈËÌÌÒãØšlkfVr®ÎÌÔɨ°ÆÝÌŒakpghfglmlmigiqmjkkeelnljigefhnnheihgjpkdtzU>IC,&(&(+-)*'%'$"%&)+,++-.1+&#! ## !)+)+,)##/DW^^]\\[ZZ]^`^\Z\]Y\__][\^__]\\\\]KKKJJJJJHGFEDCBB??=:62.,,/'5XXNcws]Qw¦›`N}œ„ipqichaZfsxnwzsa[ittrrqpqqnlnprrqomxqf|’˜­»º¿ÅÃÂÄÁÀýÀÆÅÀÂÇÅ¿ÀÃÃÃÿ¾ÁÃÄÄÁÁÅÄÃÿ½ÂÅÁ¾ÅÃÂÈÆÀÁ¼ÁÄÃÃÏÃousoqqmlnnmklnood[[[`muyy{yv{u^t«žpnyursvpqvwuuwwyvruwvvxvu{yuxpd—×äÝÚÍÎIJ§¸ÉÒßãßÞäæâèçÖ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€n¼Î²®¥ˆ„…‚‚„}~€~€…‡……„„ˆŠ‰…‚†}¤ÍÏü»»µ¶¸¶µ·´°°®¨£¨®¯ª§©©§©¨¦§«®®­§§¨ª«««ª¨®¯­®²­¦«®µ¯ ¤°¯¬¦›”•—•“˜—™››£«¨©ª­­©¦§©¬¨¦¬¯®¯´²¹ÂÀ¶­¨¨°´±²¹ºµµ¹ÁÃÃÀ¹¾ÁÄÅÅÅÂÃÊÊ¡||ˆ}Š•‚hVQX[VZWVWWTSTSSWXL<6;DLUXXXVUWYWSTYZY]\]^][\`RB30368;569<@CFGIHHJIFHKFCDB<>DEJJEDNNg®âïêêç×ÔÔÌľœ}¡ÔØÎÏÑÒÓÖ×ÓÏÐÒÖ×ÒÏÓÒÐÒÕÓÑÒÒÒÒÕÔÏÑÔÏÎÒÒÕÌÑÚ½‰{………‘Ž‹¥ËÐÌÌÆÉÏÌÊÌÍÍËÍÜØ›mjeUt²ÑËÔа³ÃÖÎŽbjphiginonoliknmllkgeilmmjfefhmnifhggkihimqW8;D7 &&)#&)(()&!"'),-,-./.+&! #&'#%&+/+)/0*"+CX]]\\\\\\^\Z[\]ZXRTUTOLKLGFEDDDDE;;:87543....----.-+*)+,-11) 7UTLdxt^Rx§œaM~¡‰jorhchaYfsxxvuse\jwtomnoqrpmoqrrqnmrkay˜®½¸¹ÂÅÀÀÁÄÃÀ¿À¾¿ÃÆÃÃÂÂÅÅýÁÂÁÂÁÀÁÁÁÅÉÃÀÄÉÇÆÁ¿ÄÉĽÀÃÃÁÀÍ‘ousoqqmlmnopppoofZXYapuvtwut}{`o¦™lkwutvsvywqqsuuwxvsstuwutzxuwod˜Øâ×ÔËÑ׸¦¼ÏÍÖäãáåæâæâÑ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€lºÌ°ª¡„„‚€ƒ}y|‚‚}~„ƒ€‚††…„‚{¬ÓÐÂÁÁ¿º¹º·´¶¹¶±¯®«©°®¥¥¬¬¥£¨§¥«¯­«¨¨ª¬¬©©ª««ª«¯ª¦¨««°¬¡§²±²¨ž˜•“‰Ž“˜˜˜›Ÿ¡ ¡¡£¥¦§¨¯®¬«°´´±·¹½À¼®¤¤«¬­«®±²¯²¶½½À¿¸¸¿ÃÄÄÁ½¿È¿”t}Œ„|‚Œ}m[NT_`\WTUVTTTTSXWI:BGIKKMNMIHIG@@ABGKHPQOESOK‚ÒõìêëÖÓÔÎû›~¡ÒÕËÎÐÒØÚ×ÕÌÏÑÒÕÕÒÒÏÍÐÔÑÍÐÕÔÒÐÑÓÒÑÑÎÏÎÓÍÒÚ¼Š{………‘ŽŒ«ÏÒÉžÅÌÉÉÍÎÒÑÐÛ×›njcTw¸ØÌÑ˪¯Ã×БciphjjinonokiklmmkkhgiimnjfefglmkggfhmlkkcZchYC:'"%&+'%)(')&""$&()*+,-+)$#)*)').2-,3/' #:NRQPNMKJIB@>>@@?<9::840/./.-,++,,++++++++++,,----000000//11+#:XVNdyt^Sx¨bL~¥jnshchaYesxyutwj^hvyplmoopoopqrqomlpi`x˜¯¿¸»ÅÅ¿ÃÆÄ¾¿ÁÀ¿ÁÄÂÃÇÄÁÿ¿Ã¿¾ÃĽ»ÀÂÃÇÆ¿½ÃÉÈÂÃÆÄÄÅÀÄÅÄ¿¾ËÂ’ousoqqmlnlkjjknpfZWX`ouvtwtpyy`o©po{wtvqsvvvwvqmttsvtt|uusywuwnd™ÙàÒÐËÔìʰÁÓÊÑèçäæåâäÝÊ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€p¿Ó¸¯£†…ƒ„†ƒ„ŠŒ‰†‰ŒŽŒ††‰‰ˆ‰ˆˆƒ„~¬ÒÏÊÌÍÊÅÄÃÀÀÀ¿¶·¹´³º¸°­²±ª«®¬©ª­®¯®¯°±°°¯¯°­«°±­«±³·³±µ·µ¶º²§™“‘–——••˜ž¡žœ¢¦¤¤¤ž¥¤¤¦§¬®¬«±µ¸µ¥›Ÿ¤¥¦©¬¯°°«°¸»½½¶ºÀÀÀ¿¼º¿Ç¹p{Š…}{…xfXT[^\^WRSUUTTQMOPC9@MSTVYYWWXWTU[[VUYZ\YV\bYI886203675558BGIHNRRRSROQJKQUYXPQNLMUQIRPY”âìĹÆÇº³–u‘ÄÏ¿¾ÂÄÁ¿ÁÃÂÅÁºº¾ÂÅÅÂÅÌËÈÈÉÉËžÄÊÉÉÍÊÉÑÈÅÍ·ˆy„„ƒŒŠ«ËÒÏÊÄÊÉÃÇÇÆÍÊËàØ›mjeUt²ÆÌßÍŸ²ÍÑ͘gfrlgfinonokikknnllifgkkkigfgimiihfhlljsdaŽ©‹qaOBDRT>*"))%')%"&%%'))('#"%*)$%)'(,-.5:76431,#!%&(''&&%%$%#!!##!$"""%$! !"  "$%$#"$$$'@XSLdxs]Rw§œ`M}Ÿ‡jorgag_Xdqv|wvwhZgyxrppnnnkllmnprstpi_w–¬¼´ÂÉÂÂÆÂÁÂÂÃÂÀÂÅÅÀÀÂÂÂÁÂÂÄÈĽ¿ÃÁ½ÀÃÁ½ÁÄÂÀÁÁÁÂŽ½¿ÃÄÂÁÍÂousoqqmlkgimniimh[WV_nvxytpr{u]t¥˜kiwuuxtpqtwxuptvwwwxwtpvvvvz}na”ÔàÙÜ×ÞéàÔÙßÝãæèåÞÞæåÒ¼€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€uÂÜ´ª™Œ‰‰‡‰Š‡ŠˆŠŽŒˆŒŠ‹ŽŠ‰„ƒ­ÕÕÍÆÅÓÞÓÆÉÄÊÉÇÌÉ¿ÄÀ¿ÀÀ¾¹¶¸¸±¬²·¶´´´´²³µ´±±·´­­¯¯°³µ¸·²¯±´º¹ ™ž˜š¡˜–Ÿ£Ÿ¢¯ª­°®°®¦¤¬ª¦©§¤¨¦¤­³ªž™•š˜”“˜œ™š ¨ª®¯¨«´²µµ­­µº›ukvrs~}zŒ\LW^ZVUVWUQQSIA?>;;8569:84889;?CFHMPPLLPTTSPQQORXWQOXORYMSRRiºç̽¾À±«”zšÍØÆÆÍÏÈÆÍÑÒÍÇÆÉÈÅÇÊÆËÔÑÈÆÈËÄÃÇÅÃÄÅÅÃÃʾºÃ®‚t~~~Ї…¦ÌÖÍÅÄÌÈÒÏÉËÕÑËÜØšlkfVr®ÉÊÛÍ °ÈˢggslfeglmlmigilpnjiiggjmmieehjnhhhfimklkebgoqdEEYPIQ;*$*("$('$%$$%''&$$'+,&!#()$$(+397740/.*""$"!!%%%%%%%%++,-/01155568:<>E<9>R]TQfzv`Tz©žaL~¤Œjnsfaf_WdqvxxwscZhuysonnrrnrrponnnnvodz–ª¹ºÁÈÇÆÇÃÀÂÃÆÄÀ¿½ºÁÅÃÁ¿À½¾¿ÂÅÿ¿ÇÄÀÃÇÄ¿ÁÄ¿¿ÂÅÃÀÀÿ¾ÍÄ”ousoqqmlpkjnnklrg\ZX^lv|tvvuyrYn£™op}yuutrsusrtutwxvvttxqwwwv{~ob•ÕÝÓÖÕááâáäããéåéæÞÝæåϹ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€tÃ׿¹°›‡†…ˆ‹ŒŠ‡‰ŠŽŒ‹‹ŒŒŽŒ†‡‹ˆ†«×ÙοÃÎÍÍÒÐËÌÈÇËÈÃÄÄÃÃÅÆÄ¿»¼½µ±¸¼µ°´´´´³²°¯®¯²³°­®³²±²²±³¶´¸¶Ÿœ¤œ—¡¢Ÿœ›› ª²¯¬®²°ª¥¦«¬¨¦ª­®«¯±®ª£–Š“”’“˜™—™š›¢«¬©§¦ª´·³«­·µ“pnwpt~}p|nSNZ`YPOSSQQPB<=ACLVWUUVVVWWWWWSNRYXQ[WC5<=8;<=74:;8:<56<=@EDLNQQRSTTYTQQRUXWQOQURNLILQV†ÓÙ³½½³¥Žy—ÌÔÇÊËÎÏÌÌÓÕÚÛÓÐÐÊËËÐÒÒÒÎÌÑÔÑÍÏÓÑÍÎÔÎÎÑÌÈÙņr}}~„¢ÏÐÆÏÏÌÊÊÊÊËÓÎËÞ×—nodVz´ËÉØÍ¥·ÑÙÉ•bhthhfhkmmkihhllkklhefjjjiiijklnkebejlijhg_fviG^jL?H6$$$%&((&$#"""%((%',-+(##&"%),-035355/-/&!&'% " !#$$%%%%&(*+.10--279;989:;=@BA9>IMQVWUUUVVVVWUUSRRUXYXF309??>@948;859957;:=DGINQRPPRUSTWWRRVVPRTSMJGBOROj±Ð¹³µ­£z–ÈÎÌÏÎÏÐÍËÏÍÏÐÎÓÖÌÉÍÐÐÐÔÒÌËÐÏÏÔØÔÏÐÕÐÑÔÏÊÙÃy†‡Œ‡ˆ¨ÎÒÊÈÃÅÇÊËÈÆÏÏÎÞÛšmkaU{¹ÍÈ×Ѭ»ÏÓ̘cishgehkmmkihhmnnmjfgllnomjijmlnmieeghmniifgme`th:(31%%$$%''&%#$$$"#%'*.,'%$%'%$$)/3216310.-&&+-*()++*-36533369<@@@@ACEFGIIEEINPNNMMNRUVZZTW\^b`bb_]_decfgjfd^RTexv`Ry§šdP{œ‰knqhagc[epxuuxyh^jtspqpnoqoqrqpppposg_|“˜­º¸½ÆÆÄÅÃÄÄÄÄ¿ÀÀ¾ÁÀ¿¿À¿¿ÃÆ¿ÀÆÄÁÁÂÄÁ¿ÁÃÄÄÄÅÂÀÀÂÆÇ¾Ãû¶ÌÅ‹kttqrqmmikoojgjpf]XZ`mwxswwtzu]q¡gmwtvxvussuywtvtutsuxvtxwxttype‘ÉßÜ×ÖãæÜßéæÜÛàåçÛÒâãÆ³€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€sÁÕ¼·®šŒˆ‡‡‰‰‰‰ŽŠˆ‰Š‰Š‹ŒŒ‹ŒŽ‹‡‰ˆ…¤ÐÕÉÉÑÔÏÐÒËÑÍÌËÉÊÎÏÍÎÍɯľ¾¿¾³­¸Ã¿¹¹¹¸·µ´´»µ¯®­­®±³°±²°±³²´´¡’š¡žœž¡£¡š ¯­®¯ª©¯°¦¢©¬«ª¬®°¬°¶²¡”‘ŒŒ“–’˜ žœ¤¢¡¤¤¨®«¦¨¥‡lkmfr€rn{…sZU[YWXVROKB?;CQUTUVTTTTUUVVSVVQOSY\H3-6:=?9<4389556646:9KTTQPQSSSTTUUUUUXUPSVJ7&'-36:==87;91054335;@ABDHFGKNLLNONRVVWVSQUUI?CLNUaLEŒÊ¼¢¤Ÿ˜ˆv“ÆÌÃÇÆÅÌÏÍÊÎÐÒÏÎËÅÊÒÐÌÉÌÕÖÑÍÒÒÐÓÕÕÕÊÌÔ×ÔÑÝÁ‰z††ƒŒ‰‹«ÊÉÇÌÃÆÑÏÒÑÏÑËËàÙmidVxºÉÎÞÍ¥ºÏÍΘchtijjhkmmkihhhklkifeilljhfeggmklljfhllljgd`jƒn1$&&#%&$""$%&&%# !$%$'&#!$%&('$$&+./.0242140&"5N[]\a_ab`[[_Z^ca][^baa```abcege`^adecge]]ce`cc]\]^gh`hi`\`eeegf^^^RNgusaSu¤›bP~žˆimthagc[dqwuvzwdZivqqooqmkopnnoomlnti`xŽ–¬¶·ÂËÅ¿ÃÄÆÁ¼ÁÇÄÁÁÁÎÍÄ¿ÂÀ¼¿Ãľ¾¿¿½ÂÁÀ¾¼½ÁÆÃÂÀ½¼ÁľÀÃÁºÆÀktuqrqnnjhiklllmd[VW^kuvtrsuyn[y§hovquwwuuttstvrutrtwvvvuqtuvxkj”Ñå×ÍÑßãÝßããàÜÖÔÙÜâìÙ²¤€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€rÃÛÅÀ¶Ÿ‹‹Šˆ†‡‹ˆ‡‡†……†ˆˆŠŒ‹Š‹‰Ž‡„­ÚØÇÌÒÕÐÊÈÊÎÓÌÅÈÉÈËÌÎÐÐÍÊÆÅÅÍÆº¼ÄÅÅÃÂÁ¿½¼»»½»¹¶°­±··°°´±®°±´¯¡–™žŸ œœ¡£ŸŸ©­¯³³¯±®¥£«°­©­±²¸³±¶º´¥—”“••””’‘’‘‘”˜–›œž¢¦ž…hjz|zxxtxqu…€fWWUSLB@?;;MWUTTSTTTTUUVVVURSXXL6&'-07ENKGC?>>4-/6666;CCBEHDDJMLJLNNQSRTWVUYUG;BMQOD9]°Ð°¡ ›”„s’ÅÍÁÅÅÆËÎÌÍÎÍÏÏÑÏÈËÒÑÑÎÎÒÔÐÒÓÏËÍÏÏÐÇËÒÔÐÏÛ¾‹z‚ƒ„‹‡¦ÑÏÄÍÌÉÈÌÏÏÏÐÈÄÙÖœlieVv¸ËÑàϦ»ÓÔÍ—bgrikkhkmmkihhooljheeihkmlgffhkklkiikomlgjiZ\tQ%#*%%"&%#"#$%%%##" #$#$$""%%%''&%'),./3/2752/+*#)BZa]Y\\^a`\]aZ_cd`^^_bba``abcdfd_]adefhe_]ab_bb\^_ahhajkb^eihhig^_`SNeus`Rv¤šbO|ˆimrhagc[epxtuyyf[hssnpspmnnqnmppllovk_v‹—¯¹´ÀÇ¿½ÆÇÄÀ¾ÅÉÀ¼¿ÁÁ¿Ãý¼¾¹½Â¿¿ÁÂþ¿ÀÂÂÂÃÄÅÃÁÀÁÄľ·ÂÉÁ¹Ê‰jstpqplmkjjllllmd[VX^kuwvttvzoZv§—mpytqstvwxvuttttvvuwywswvwssxoc’ÓæÕÑÚåãßßáßààÛàæâãëÔ«¢€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€sÃÙþµŸ‘†ŠŠ‡††‰ˆ‡…†‡†„‹Ž‹‰‹ŽŒ‰Œ‰¨Ó×ÍÑÑÍËÌÎÐÐÒÐÏÏÌÉËÌÈÈÌÏÌÉÈÄÉÆ¼»ÁÇÉÂÃÃÂÁ¾»¹¹¹ºº¸´´·¶¯°´²¯²´¶¯ –šžŸž› ££¡¢®²±±³µ´¯¨£¨­­¯²´´´´·¼½´¤—ž˜––”•—”””’’””“—˜—–š™š¢¢‡nrxmltoqor}~qcXROI?:=>FRVTVWUWUUUUVVWWTQSWO<*#$0:DSYRKHC<:6..6;;9;ABDJGCDJMIIMMMPQOQVWQXUC8>GF2-K–ÙÑ¥¡–Ž}mŽÄοÂÃÆÊÉÉÎÍÊËÌÐÎÇÊÏÐÓÒÎÐÕÖÏÎÌÎÑÏÌÍÉÍÑÏËÊ×¹‹{ƒƒ…’ˆ¨ÐÎÂÌÔÒÇÏÏËÇÌÈÆ×ÑšljhVr´ÐÌ×̦¹ÒØÏ˜beqgiihkmmkihhllklnkggjlnlhfgjnonjghkmnmghhc]N."'("!!#"#$%%$#!#$$#"!"%%%&&%%&()(').25037511//+4L^`\[[[^a`\\__`bba```_^]]]]^_bdb^\`decca``ceffe_bfgkidlmc`hkhghf\^aUOdvu^Pw¥˜bNy›ˆilohagc[dqwuuxwf\hquopspmnopoooonnnqiby›°·´Àƽ¾ÉÈÀ¿¿ÄĽ¹½Á¿Äž¾ÄÄÀÁÃÃÀ¿ÁÁÁÀ¿¾ÂÅÅþÀÁÁÄËËÄ»ÄȽ´ÈÄirropokknnmlnpold[VX_kuwyxvw|qXp¦–loytrtvvustutqusuwuvwvtxwxttypa–ÓàÖÕÙâäáßÛØÝáÞÛßÞßæÓ²©€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€wÄÖ¼¸²¡–‰Œ‹‡„„…‹ŒŠ‡ˆŠˆƒ‡ŠŒŠŠŒŽŽŽ‡‚¦ÓÕÊÓÕÎÎÒÑÍÕÏÎÒÑÎËËÍÉÉÍÌÇÆÈÇÅľ¹ÁËËÈÇÅÃÁÀ¿¿»¹¹»»¸µµº²²¶²®¯²¸¯Ÿ—šžžŸ¢¢ Ÿ ©®ªª°´®ª­ª¨§«°²°®®²»Äø©Ÿ ž™™ ž–’“–‘‘–‘•Ž‘˜™™œ˜‡nilkotvqqtrlqyy]SMH?=DJUXTQVWUYUUVVVWWWSUVO@0('(8GMMJC>;;>@EOFCELLGHNNNPPOQTUY`YA2;C?;RÓïÑ¡••‘ŒoŽÁÇÁÃÄÆÆÂÁÈÄÄÉÎÒÎÅÇÕÐÑÑÎÑÖÖÓÍËÒ×ÒÐÕËÏÑÍÇÇÓ´‡{‡…‚‹¥ÄÌÏÑÊÊÇÍÎÊÇÏÏÈÒÔœjddTs¸ÍÁÏΫ·ËÓЙbeoegfhkmmkihhkmmlkhgkpnlifgikimnkikmlknhcm‰C%$#$#$#""#%&&$"""#%$!$(($$&&%*(&')-./64531340//;Q_`_caacea\Z]db`_`aaaeeccbcddbdc_^bfgifedddfhfd^afgidgoncailgjkg\^aUNcwu]Ox¦—bMw™‡jkmhagc[dqxxvwue\irrpmoroovoqqnnppmsjawŽ›³¼¸¾ÄÁÂÇÄÀÃÁ¾¾ÀÀ¿Á¿¾¾¿¿¼¾ÄÁ¼ÁÅÀ½ÀÀÁÁ¾½ÁÆÄ¾ÃÆÄ½¼ÅÇÁ»¿ÆÄ»Å¿hqqnonjjipqkinoke\WX_lvwwvvw~uZp¤’kqztttstsqrvvtqvurtutsxwtwwx{ndžÔÛÖÕÒÚçààãÞÜßâàÜàãäÚĸ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€qÁÙÆ¿²ž–ŒŠ‹Š‡ŠŒ‰†‚†‰‡†‡ŽŠˆŒŒŠŽŒŽŒ†…¦ÌËÄÍÕÓËËÏÒÒÏËÊÌÎÎÍÏÏÐÑÏÏÐÏÍÈÅÄÂÁÈÏÈÄÈËËžÄÀº½Â¾»º·³³³´´³°®¹µ¤—™›› š›œ ¡œ§ª««§©¯¬¢¦«¨§°²¯¯µ½ÀÅù¯¤Ÿ£¢ –’™“ŽŒ““Ž”•“”šŠm_ksnmsqhouki}ŽyVKQG@JT]RVUTWQRTXXRRXYVX]W@65-*+CLG;,*,;B>30246=?88DEEPIBEMLIJJJLNONNQTWVYC/9B?h´ÑáæÂ¢’•Œ†|nŒ¾ÇÀ¾ÁÆÄ¿Ã˾ÂÉËÊÅÂÌÖÏÏÏËÍÓÓÓÒÍÐØÓÌÒËÍÏÒÍÐѽ‹z‚€Œ‹‰ªÉÎÎÐËËÉÈÊÍÎÎÇÆ×Õ™ljeWy¹ÉÆÐ˯½ËÑǘaipifigllklifhmllkhfgjlpnihddhlnomihkolon_|·™>$#$$ # !""##$$$" !"" &')('&&')&&)++.32454477657;F`bUbdabdb]\_defedcccadgea`ejcikfbcgigikd]ekelg`]^bfheig_\__ZY_[]b[RMg{u\Qv¤›cSz™‰ijsk`b`]hqtstvwh[gutpqqooqqppqqqponvoe|‘–ª¸¸¾ÂÁÅÆ½»¿ÁÂÂÂÁ½º¾ÁÀ¿Ã½¼½¿ÁÂÂÂÁÀ¿¼½ÀÀ¿¿ÀÁÂý»¾¾ÂÄÀ¼ÌÃŒkqtqoonkjkllmmll^YZV[lysutx€tYt¥‘gmvssstvspruuuuuwsosxwwwutou}mfšÒÙרÒàáââáÝÛÝàÞààéâÌÅÄ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€wÅÚü±ž–Ž‹ŒŒˆŠŠ‰‰Š‹‡ƒ†ˆ‡Š‹ˆ‰ŒŽ‡…¥ËÌÅÑÏËÎÌÇËÑÍÌÎÎËÌÏÍÉÌÓÒÎÏÒËÄÅÇÂÁÈÌÆÈËÅÄÆÁ¾ÂÂÄÁ¾ÀÁ»´¶¶µ±¯¯°µ·§””˜—”•› ¦¡¢¨¬©§¦¥«®¬©­·¿Ã½ÄÇÍÉ»±¨­¬¦œšžž™š¢š—ŽŒ”ŽŠŽ“•“ƒjbqxmgmoktxpv‚ƒ~v_JFNTV_USOQSOUVVTSVXVR^YL835-,7DBB@1''29;88975;A@:;DKMHBEMMKLMNNLHINQQQV^M8145,+AE>BL?0./29>??;65<<9;CE>322355313003750+,3?P]\TScvr\Rv¤ePv–‡koug`fb[epwwwyyj]huokmpnlmnpooonmllti]v‘™ªµ¬¾ÌľÃ»À¿Áý½ÂÁ¾¿ÀÀÃÄ¿Á¿¾¿ÂÄ¿À¾¾ÃÀ¼¾Â½ÁÄÁÂýº½À»·Ç¿ˆkqtqoonkiijjjjkkfXVX_kt{wvsszpZx«”hnywz}yttusqrrpuuqruvvvvvupu}ldŸÚÚÒØÒ׿ßÜåìàÕÙçßáèà×н€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€rÃÜÈż§›‹‹‰‰‹Š‰……‰‹‰…‚ˆŒŠˆŒ‰Š‹‹…¢ÊÑËÐÓÐÌËËÈÐÑÐÍÊÌÏÒÍÍÍÍÌÐÑÎÇËäîѼÆÓÑËÌÊÇÈÇÈÊ¿ÂÅÃÀ¾º·´µ·º¹¸»¸£‘•œœœ—›››œ›£ªªª§¤¨«©¢¤¦§§§§§««´Çɽ¶±¬­­ªª«¨£¡¤¤™—’–’”–“ދޒ‰t`\^[^hqpqtw}}x||fHCT^ZXWUSTTRUQUXWTSUWM>4286)*>EAAEMPN79FLW`WOfws^Ssž˜`Kx›Šmpqd`hcYbq{|xvui^iuxposspppqponoprspi`y‘˜­»¶¸¿¿½Â¾¸¿ÄÂÀÁÀ¾ÄÄÁ½½¼¿ÅÀ¾À޾ÄÅÁ¿¼º¿ÅÄ»¿À½½ÁÃÁ½ÀþºÊŠkqtqoonklkkjkkmmcWTT_pwvz{wvzpZy¨foyrsvouvsqoqwvustyvsutvvwrv|ke—ÓÓÁÃÉÚáÜÞêê×ÏÚäÞæßÖçæÂ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€wÇÝÆÅÁ¬”ŒŒŒ‰ŠŒŒŒ‹ŠŠ‰††‰‰ˆˆ‰‹‹ŒŠ†¡ÉÑÇÑÏÍÓÒÍÐÎÌÌÑÑÍËÌÎËËÎÎÐÐÎÌÐéôÛÃÉÖÓÊÍÍÊÏÏÌÂÉËÈÆÄÂÁÀ¿½¼»»ººÆ½§–—›¤¤Ÿ›¡Ÿ ª¬©©¬®±¬£¡¥£§¯­©®°¬µËÍ»±®¯°°±¯«§¤©®©¢›–Ÿ£˜’–™•‰p[[`_^hojdgilu|xuzybQVXf^RRVXQTWTPSXSI6/034-'3HJ:6IYVH/47BJIGGJJIJJJKMMLJJLUYWRSSG^©ÞåÝÄŸŒ„~}xnŒ¾Æ½¾ÀÀ½¼½À»ºÂƾ³¼Ü⺰ÄÉÆÆÄÈËÑÐÊÍÏÉÏÍËÏÍÐ͵„w…‡…ˆƒ«ÎÐÇÅÆÌËÇÈÉÆÃ¾ÃÚÖšljcTuµÕÍÇ¿³ÆÐÙÍ‘]nqhhggllklhehkmmifghiiikkhgggfikjfgkooogijcr…T<8*!"&##""!! #!!##" "$%%%#&&%'.1146656897960!2i†„yW5)(%"$&')))(()-../03576?BGFAAGHDCHIGIEGJKLNNLQSVVOPTIX›ÚêÜÁ›„}{ti‰¼Å·¹¹¶·¹¼¼¿¹¼À¾¹ÆäïÀ­¿ÈÅ¿ÃÈËÊÉÍÎÉËÈÆËÊÎ̳…x†‡†Ž†¦ÌÑÈÇÆÊÇÆÁ½¸º¹À×Õ™ljeVx·×ÉÉÆ²½ÆÍË`qodhjimmlkgdfjlljgfghlmkgdcejlmmkhgjmlmihdax‘wF51$ "$#"""! "#" #$$"!!"###!"%&$(-1146656897:903k…ƒŒzZ<4;=86KDA?>@FHECEBD@?EFEGCJNMLNOMPRW[OLSIX–ÛîÚ¿„„|xqf†ºÄ¶¿À¶¯³º¼º¹À½»ËìíÈ·ÂÆÀÁȾÂÀÂÎÎÊÌÊÇÆÊËÏÍ´Š|†…‚Œ†‚£ÍÕÎÊÅĽº¹½ÃÌÌÌÜÕ™ljeWy¹ÓÅÎÔ¼ÀÆËÐ\oqhiggllklifhijllifeghkjhjgeglkjighikjmki`c}’c9.-"#$! !!""#!%&$!!"#"!!"$$#"%"#'*+/3467569977>41k„Ž‚jYW[\]^_```aadbaacdeedbbeedeicdabigcefdcdeecacabhmnkgG9JSWZPSfvscXu ›_M£†empgagbZdpwwtssf\huxmjopmoqrqpooopprh\u—¨³±¼Á½ÁÆÂÂÀÀÁÁ¿»»¾¿ÀÃþ¾¿»¾À¾»½ÂÀº¹¼ÃÀ»ÂÉĽ½À¿½Äƽ»¿Á½¹ÉÀ‰kqtqoonkkjihhjlmdWVY_jpuxytptjX{¡Šcq}tswpqqqrppswrqstvxusuwysw{inÀ¾ÒÑËÄÉÚÞÐÑÞã×ÔæäÚêèÑ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€s¼ÒÃû­ª’ƒ‡Œˆ…~…‡……„€ƒ‡}‚€ƒƒŠ‚ƒ„}—ÃÎÃÅÇÆÂÁÅËÆÂÃÆÇÇÇÅÃÄÃÄÇÈÇÆËÖèíèÞÑÎÄÄÅÃÀÃÆÂÀ¾ÁÁ¼½¿¹»»½¿»³µ¿¾À©–˜ ¤ž¦©¤¢¥žŸ°·®¨ª¬­­­¬ª¯±­¯³°³»ÄÏÎý¸´¸´°¯µ·ª«³²ª«ª¡£§¨¤¢¥¤ž›š—ƒlb[\gggie`fonpq{wx}xz™jUPQSVRQXT:)1565/)')+CHB8@OK:2+$!5F??DABDECDGBA@ADFFEJHGGJMOONRWYSPQLHŠÚíÞÈžƒ€wxte¹Åµ¸Á»µ»½º·»¸½¾¹ÌèéÎÇÄÿ¼ÌùÅÌÇÇÈÊÌÉÅÉÌÐη‹z…‰†‡…¤ÌÓËÁ¸¼¹¼ÅÇÉÒÊÃÚÖ˜lkdSyÀ×ÀÅϾ¾ÒÑ͉boqklbelnljedikmnnlgdgmiffhhijkmkikijpkmhk_e••Y0+%# ! !"#$%%$#""!"###!!##!!#&%%())-39328:648<>13h‚‡‹‹‡„s`a`_abbbccbj`dccjigfecbeghidedcdbdkcmjeeegafejonkhcKEMPY_TXewsaWx¡—dPx–…knoe`gd\epvxtqoe]gpupnmloqommmnooppjh`vœ¯¶´ÁÇ¿¼ÀÀÂÅÁº¼Ã¿¹¼ÃÄ¿¾ÀÀ½¾¿¿½¾Á¼¾¿¿¿ÀÂļÁÄ¿¼¾¾¸»ÂÇÀ¸ÆÀŒhnqonnnkmihiiklhcXUW`ouwxwprym\|ŸŒlqxutvuqnrwuqtrrssrrrswwtvtrukgš¿½ÆÚØÔÉÏÑÐÕàåâÏÚçäßëëÕ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€yÆÛÇÄ»©Ÿ’ˆ‡ˆ‰„{‡‡†Š‹…‚„‚€€ƒ„…‡†„…€ÊÔÄÊÐÒÏÌÍÏËÌÎÍËËËÉÊÌÌËÊÉÉËËÔåìêâÔÎÊËÍÌÈÌÐÍÊÆÈÉÄÃÃÀÀÇËÈÂÀÆÎÇ號£¤¡Ÿ¤£¤¤››©®­®ª¦¬²¯§§¯²¯°´²µ»ÁÌÎû³¸¹µ±°µ¹¯ª«´²¬¬ª¨­¬­©£¡¢žœŸ’ze]`irihmiacktwxvst{„’…gSRUPKV[E0-0354/(%(,AIA6?PM?4)%&087>C@>>>?ACBA@ACEDDFFGJMNNMSORWRQRJM~ÍñåÇ›€zzwmŠ½Ë·¼À¹¸¾¼½½À»¿½¯ÁèðÓÈÂÀÀ¼ÃĿȎÂÉÍÍÈÈÑËÇÈ»…{‡†ƒ†€„¬Ä½µµ¶ÃÌÌËÈÈɾÁá×–jmfQvÀáÊÐÔÀ½Î×Òbkpijeelnljfdhknmljhefkhjnkeeljjihgfglnjee_d‡Ž_/&&!# %"""! ##!!!""#%" !! "%&%&)*+/4778899889=15kƒ…‹Š€~mdadfffinmjc`bckoeeiccijhghaegfcadibiffecebeckqlhe`FBKMV_TUewsaWx —cPy—„jnpf_c_Wanvzywtf]htupnooppnoonnnnnnmj`t›¯¸±º¿¹¼À¼¸¿Â¿¿Ã¾¿ÂÄþ¼¾¿½º»¼¿À¾¼º½ÀÀ¿ÀÂÁ¿¿ÀÁ¾¾Ã¹»ÀĽµÅÁhnqonnnkliikilnl^WY[amtwtzutyo\v¨nuxrpsrrpquvroqturswwttwtustxkf”»ÄØðëáÐÔÓÐÓÝâàÏÜêåÚà䨀€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€uÆÞÈÆÂ¯¡“Œ‡„‰ƒy€„ŒŒ‹‹‰‰…„‡…„ˆ‰ˆ‰ˆ†ˆ† ÍÔÄÊÑÔÒÐÐÐÍÉËÐÏÈÉÏÏÐÑÐÍËÌÍÍÕäëëãÔÍÎÏÑÏÍÏÓÑÓÌÍÏËÇÇÈÌÐÑÉÅÇÉÆÈç”™žžœ ¢¤¥¢šœ¨®«¬­­«©§¤¦®±®¯³³·¼ÁÌͺ±µ¸·¶±²¸²«©¶¸¯­­ª­¯±®¦¥§¤¡¤ ˆkaiqnebjka^hhiloqpv€x‡ŽuZRSNOWM5-1.033.'#'-;HE7;JOJ9)*00.2>@AA??@A@A@@ABCCBFEEFJMOPSOSTNPRJPÒêܺ”†Š…}vnƒ­¹°µ´­±¶²µ¹¼µ¸¶£µæðØÎÆ¿¾»»ÃÁÅÉÐÏÇÏÎÊÍɼÌÕ®||ˆ…„ƒ“Ä´½È¾¿Ç¾ÄÎν¾ÝØ•hngQu¿àÖáØÃÄËÔÖ•bfohhiflmlkfdhjmmijhfekjlmkgfgkiihedgjlijgefrqU,$% # "!! !""'" ! #'&%'*+,05679999988<.7o„…Šˆ€|tk[Y`ec`^][ECXlmc]hvh^]]XZaaVPWej^OQIDQQDCE@D\omhf^GCLKT_UQevs`Vw —bP{˜ƒhnrhaf`Ycpxwxzyl`ispnqrnjmopponnmmlqk`sŒ™®¸³¾Ä¿¾Â¿¾¿ÂÀ¾ÁÀ¾À¾½ÀÀ½»½¾¼¼¾¿½»»¾¼¸·¾ÆÅ¾¾¿À¿ÂÇż»¿Á¹°Á½‹hnqonnnkjikljlooaXWW]luzqwsrwn_~¦‹jtyqqxrstrpstqwvutuutqqwusqw{kb™ËÔÙåàÛÖÚÜÙÛÞÞÚÓÛåßÑÑÕЀ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€nÀÙÆÇŵª“‹†ƒ†„|€‡‰…†‰Š……‡…ƒ„††‡ˆ‡Š†¢ÏÔÉÍÏÍÌÎÐÑÐÐÎÍÎÍÌÎÍÊÊÍÎÏÏÏÐØçíêáÑÊÑÐÐÏÌÐÒÍÒËÊÏÍÇÇÌËÍÏÎËÎËÄÊÍ´—–¡£¢¥£¥§¡›Ÿ¨¬¯¨§¯°¨¦§¨«­«­±±µ½ÅÏÍÁºµ¬³¸¹²®³±¯³º¸µ²¬­¯±­©««©ª¨¥£“tgovlkfdjlij`Z_knqwzvn|މpYWSYJ3.53-.01.&"'/7DG;6FRQ?--83.16>ABA@CB?@@@AAAA@ECBDHMPQPPRQONJJ{¿âáäÊšˆˆ…{tp…©·±±°©­²¯²«¯«¯®¤½éîØÏų¯µ´½½·´³š‹¨ÅÆÁ»·ÄÄ¡tu€‚„‚«ÓÐÅÅü¼½Á»¼½¸±¿à×–ilgSu»ÓÙêÔÄÐÍËÕ˜bdrifkglmkkgdgjlkjjiedkkjhggggnklmggkmiikffii^D-*' !!! !""##!  !!"%"!#"!"%%$&)++.36449;8689;*;t‡‡ˆ†‡€kotWDBAA>;7DSO=,-:==?6;==:,'% """"""!!!!!  !"##!#&&#"#$$%()),07348=;86:9%AxˆŠŠ„„~kmyeN?4672.0+@^T99=7MU?0=81ES93LipW6-LPD85AJQP?79:;;>>==?ABA@@@A@ADHLMMQPPRTFX æëÝäìÅšŽŠƒ~x»ÈÀº¾¼¸¼¾¼¾¿½¼·½ØëçÐÈɺ¾Æ¬y\UVV``Z`—½¸¨¹Ç®„x~„…z„¼áÆÀÍÊ»³°³ÀËÎÓÒÐÜÓšlhcXw²ÑÉÓɼÈÑ×ΔbhvkehhkkjliefijjllgdfjjjjgfgjkijjggjnjgdfgfmeL1"&'%&'#"""""""  "#$"!$(($!"$$&))(*-4899;@<695"N~‡‹Œ‚w|{uz|zkYL=007,@LDHL9/BSB3>93HM34UljS7.6IWE16:1Kgohfd`G4?NV]UVcuq_UvŸ–bP{˜ƒhmribf`Wanvtwxvg\gssrroijoplmmnnoppnh_y’™«¶´¹ÁÀ½ÁÀ½ÁÅÅÁ¾¿¾½·»¿¿¿¾½º¼¿À¿¾¿¾»¼¾»¸ºÁÃÁ¾Á¾½ÁÀº±ºÃÁºÈ¿Šhnqonnnkkikkghkj`WVV\ktytxsuyl[|ƒhuwrsroqrqpsvtttrrsvtqqwusqw{ki‹·¾µ·¹¼½¿ÁÃÃÂÀ¿ÆÂÁÃÂÀÀ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€uÆÛÃÁ¾­ ‹…†„„‡€}†Šˆ‰Š‡…‚ˆ†…„ƒƒ…‡‹†ˆˆ‚žÌÕÍÑÑËÌÑÑËÏÕÐÉÎÑÎËÍÊÎÑËÊÑÔÊÔæíëã×ÓÍÌÎÌÊÍÏÌËÌÈÇËËËÑÀŸ“¢µÅÍÉªš˜——ž¢¤¤¥§§Ÿ—›§¬©ª«¬±²ª¥§¨«®°±±²·½Èɾµ­´µ±°±¸½²¬­¶¸¸»¶²±²µµ²µ¸µµ´¯ª¤‘vcf]bf_jzwiuyyzspxxffu—´¡d9,83-220*(,,)+13:BEB>CLRKCHOUVD78:=?=<<<>ABB@AACA@AEIMNPPSTUGXŸèè×âòÑ¤ŽŠƒ}rŒ¾Ë¿¾ÂÀ¼½¼Àý¾»»ÑéæÕÍÆ³¸¹ŠTObos‚~eaƒœ“¯Ð´‹~„‡†…±Öƹ³´¶¹ÀÍÒÑÎÒÍÍãÔ˜jieWu±ØÊÑ͸½ÔÝÑ”bhtidehkjjlieejlkjiffhkljghjidjjihgfhmmkfdgclmZ?+-0--+))(''&&%! !#$%#"$''#"#&&(*)'(,09=::==850")]„„ˆ‰szƒ}~u|uaL=79=;>RM2/CJ@563:RN05\oeM4<>KVC01/A_qjdehiH4@MU]URcuq_UvŸ•cPz—„jnpldhbZcpwuwxudYfssqokjnoinnnnnnooog^w‘˜¬¹±·Á¿º½¾½½¿À¼»¿Á¿½½¿ÂÄÁ¾½¿ÀÁÀ½¼½¾»¿Á¾¼¾Âý¾¾»¼Âü²ºÁ½µÃ¼‡hnqonnnkliijikmj]UXZ`lruttnqyn`˜|exzrstlqssrrrsrtvvspswtwtustxkj‹¹Ã·µ¶¸·¹¼¿À¾»¹¼¼½¿À¾¿Ã€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€qÇÞİžŠŠ‡ƒ‡‡{{‰ŠˆŠŠ…„…ƒ‡ˆ‡†ƒ„Œ‹„‡Š… ÎÚÎÒÐËÌÓÔÏÑÐÊËÒÑÊÊÏËÏÑÉÇÍÑÎÕæíìåÖÏÑÓÕÐÈÈÌËÌÏÊÆÊËÊϯ–˜Ÿ«º½¤’—œ™ž Ÿš¡§§ž’”¢ªªª¬¬«¨¤¥¦§§ª¬®±²ºÁÊÈ»´®®¶¶³°¶¼´«­¶¹¸µ®­±¶·¶¸¶²±¶»±¥¦ž…rhall^k{pgpz~{vpmz{gbcz¦¤qE6;1-3/1)&,.+,1::6?NH=ANMCFMUYM:88;<::<;>ABBAAB@@ADGJKJPNQRZNBbµäååñÔ£…Š‚~nŠÁλ¿Â¿¾¼¸ÀÈÅ¿ÃÁ¸ËëéßÔí½Ç“[^m|‹œj[pŽ¾Ô²ƒy‚€}¡±³³¹ËÏÇËÆÉÇÌÖÉÀØÖ–hjgVs±ÙÑØÓµºØÛÔ”chqgcbikjjljeejnlgffhjkjiigeefjkiggeelkojbgejoudQKKKJB642/+(&$!!!!"$%&%##%%##%(()+*((+.5==968<1,"1hˆ‚„„yz|€ƒxsz|z{|o]C>62?B44@>=;55G`H-8`jYC2:Q`U:5=29:;:<@BA@A>@ABCFKOOQKOPEBHl¡àïèΛ†ˆƒ|rŒ¾ÏÂÂÃÀ»½À½Á¾½ÀÀ¾ÏéõÚÐÈ­·Å›jqxy‡™–‘—˜tSu´Ã®~u~ƒ‚†…ƒ ÀÌÌÌÉÈÇÊËÉÌÓÇÅäÓ“eheVw¸ÒÐÜÕ¶¿ÉÌÔšdgofigglmlmigihlmlkhefkkjhgffglhfijhgjkgfggehntrlffijh[NF?:5-.,+%#!)$%&&&&%$#%()(*..,'-5:9534, "Ktƒ…Švpz€€€~y|you|y€ocN:48;9;=8>G<DHMB57AJK49P84UnjbfhdK=FMU]QMbvq]Wx šdQy–‚hnshae`Xbpxpovte^fmnqpllppmnnnnnnnnpjby“§µ³¸¿ÀÂÄ¿»ÃÃÀ¿ÁÀ¼»¾ÂÀ¹¹¿Ã¿»º¼½½¼¹¼À»ºÀÀ¿¿¾¾¾º¹½¿¼·¿ÆÁ¸Å¿‹iqplmljkkjihijklbUOVbmttsvqtxk]€œ{fusorwusrssrqpu|vouvqqsrptutuinŒ®²¬®­²µ¶³­«®®ªª§¨®¯««°€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€rÅÛÁÁÁ­š…ƒ…‰‰~{ƒ†‚‡Œ‡…ŠŠ‰‡††‚„††Œ‹ƒŸÎÙÍÎÍÊËÏÏÌÌÌÉÊÍÌÊÍÎÏÎËÊÍÐÐÎÔäíëßÐÍÓÑÍÆÄÌÐÊÅÆÈÈÄÂÆÍ­Ž–’”šœ–”–˜š›š™™š›š™™˜›¢¥¤¡žŸ¥¥¦¨¨ªµ¾½ÂÁÅÎÎĶ­­´±©«·¸¯¯³¸¶µ³¯³´·¹·¶·¹¹³³³¯­¯¨–zlbdktywtvzyvwwsw{pernW`ˆp;)-*+$10.,,-/15:;:<60+"(Tw}ƒˆwlo~†‡†„{spmsyuy|q]G:56<@;9=::G>457=E?;6:AD5E^B3MdhccggK>FMU]RNbwr`Yx–aOz™„imph`e`Xcpxxvyue_hppnmmnmmnnnnnnnnnpi`x•¨µ­´¿Á¿¾¹¹¼¿ÁÀ¿¼¹»»¾¿¿ÀÃÂÀ¾½»¼ÁÆÂ¹¹À¹¹ÃÅ¿½Åú»ÄÄ»µ½Ä¿¶Ä½‰iqplmljkiijkkkkjcYUWZcovrtqv|n\|{fvvrqsrruxuooutoqussusssquuuvia’ÂÁ·½ÀÂÂÄÃÂÄÇÅÁºÁ½»¿¿º€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€zÊÝÁÁÁ°Ÿ’‡……ˆ‡}z††„‡ˆ…ˆŠ‹‹‡„…„ƒ…‡‡Œ‹‚žÍØÉÍÎÊÇÈÌÎÎÍÍÎÏÌËÌÏÉÊÌÊÊÍÍÊ×éëèã×ÏÍÏÏÉÇÎÎÅÅÇÉÉÿÃ˶ˆ’’”•••––™žŸ™”—šž¡ž˜—™ ¢ ¡§ª¦¡¡¦¨¥¥«®¬¶°´ÂÊ·±°¶³©ª²²ª©¯¶µ´³°µµ¹»¹¶µ¶¶³µ·²­²´¬™hgtxtr{wxz~€znr|udmiTby<*,/4122/,,/28:<;99COSOHJNOVWA78:988=9>@??@AA?>?BGJJIQRRRJFNPN€ÕõêÐ¥ˆ…€{r‹»Ê¾¾ÂÃÀÁÂÀºÁÆÄ½¼ÐìéÙÎÄ»´¯±š}zu~w~€›¥|WgŠ„ƒ‚~‰’‡¡ÌÓÆÈÊÉÌÌÍËÅÌÑÓáÕ•gheUv·×ÔÔÏÁÊÆÆÈ’ahrgidfkljkhehjlkjjhhkhijigefhjmmhfhjgmliffiklnmjginqoc]^[WN=7W\D-%%&&'''%$$%*-+*,/00--4=>6-)#0^zz‰unt€ƒƒ…†xjjlnqpsx{€t_F6D=6468FLU]RObxtaZw›’eQy”gotg`e`Ycpwutyvg`ipnoolkmnmnnnnnnnnph]w‘˜ªµ­´¿¿º¹¹¿À¿º¸»»¼½ÃÂÁÀÀ¿¼¹¼¿À¾¿Á¿º¼Á¼ºÀÃÀ¸¼¿¾½À½»¾´»Â½µÃ¼‡iqplmljkmkihijmn`YWXX`mvuunrzn]} |dsurstqtutrssssqstsuvsturuvwxji¹¿¹½¾ÄÁÀ¾½ÀÅÈÇÂÃÆÈÆÃÅÈ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€vÈÞÇÇÆ²¡“‰††‡†}{‡‹‹Š……ˆ‡‹ˆ‡‡„„††……‹‰€œËÕÆÌÑÐËÊÎÑÍÌÍÐÏÏÑÒÐÇÊÐÎÍÎËÉØêëçãØÒÌÍÍÉÆÌÎÇÉÊÌÌÇÃÆË´’Œ’Ž“–”˜–˜žŸ›š£žž¥¥œ™¡¨©¦¥§ª©¦¤ªª¦¥§ª¬¬«·ÌÑõ±²³°­­°°¯©°µ²²³¯°°¶»»¹····¹»¶¯³¶²®”wuƒrq}||z}}xu{uekfYuŽ~H)++.61110//13989<:69@OKDIRWWO@6699968;=?@@@?>CA@BEJLMMMQSJJUQI€Ö÷èÉŠ‰„{p‰¹È½ÀÅÄÁÃÄ¾ÃÆÅ¿ÁÒéêßÓ¿»´™‰xoxvmumt’Ÿ~`ct†~‡‚|¤ÉÎÉÑËÅÍÎÈÇÉËÈÊÜÖ–gieUu·Ô××ÐÁÉÇÎÉ“airhieejkjjhegfmomifehjiggffgilkiihhjlmkgddgijllihjpqod]]XTM>9WjZ<* $&''''&%$)**+-/0/40,-473,'!4d|x~…yu|ƒ|€rgllfkmonps|ƒ€lWJ60887875776=>1513=<.IfM3AVfjecfM?FLU]SPbxs`Xv›“bPz—ƒimqg`eaYcowwuzwf_fmmqrmklnmnnnnnnnnpg\v’™«µ¨´Âþ»º½¾À¿¾½¼»¾¿¿¾¾½¾½¼¾½»½ÁÁ½»»»»¼º¿Â¸»ÃÀº¼¾¼¿µ¼Á½µÄ¼‡iqplmljkjjjkklll\UTY^gptvvorwl^€zcstrrtqppsusqprrrvxtqvtvsvuxyji½Ä¹µ¶Á¿À¿½ºººº¶¾Á¾¼¾À¿€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€sÄÛÆÇ‰‡…‡…}}ƒ‹ˆ…†ƒ…‡‰†‡ˆ…„…………Љ€œËÖÉËÏÐÎÎÑÕÏÌÍÎÎÎÑÓÊÇÌÏÌÐÓÎÎÔæîéÚÎÏÎËÌÌÉËÏÎÎËÊÌÌÉÈɰ’—’’’’•˜–—œŸ¤£ ¡§¦›™£®¬ª§£¢¤¦¥©«ª©©­²­¯¾ÒÔÁ³²²²°­¬­¯¯«²µ°±´­¨¯´¸¸¶¶¶µ¹·º¸³µµ®²¢ŽˆŠ~ty€~z||zwspvh[xˆsJ/*(+.0/.03565668;;989?EDFLQUN?679898:=:965<=5687BE>?EKH528:7769954:@A@@;>ACCDFILIMSMLRKUŸéòæÎ……~zqŒ½ÍÃÂÅÇÃÂÃÂÂÄÅÆÅÅÓçðáÖÀ›|uƒ€vux|vjokkminŠ‘x`v‰…†ˆ†ËÓÅÆÆÂÁÃÆÊÌÍÈÈÜÕ•gjgXxº×ÛÝË­¶ÆÚÏ—djrhjgfkkkkhehkkjjiffjkihhhigfnlihhihhljgeceimmmjhimmj_[[TPL>6QdibM1$!''((''%%(),.,+.328:3-,+(!!9fvu{xtx‚†|}|ojkfgplfqvxvw||x}ul\IIQONMQS[^RQSTZTM]hZ`ehfdeggO@FLT]TRcwp\Uu—eQy•€hote_fc[douvtxte_irupmoqpnmnnnnnnnnph]w‘˜ªµ±»Ã¾»¿¼¹ÀÀ½¾ÁÀ»¸µ»ÀÁÀÁ¿½ÁÆÂ¼¼½»¼¾»¶¸¼À¾»Á¼¶ºÁ¾¸¸½À½¸È¾‡iqplmljkkjhggilmaVRX`jsvqvtuvh\ƒ”vewvpptptuqortsuturmrvrrwtssyzhjˆ§¦£ª©¨®®®¯¬¬±¹¸°°¸¸°®µ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€tÄÝËÌŰ¡‘‰‡…††€‚‹‰‡‡…ƒ…‚‚††‡‰‰‡‰ƒ„ŠŠƒ ÐÛÐÎÌÌÊÉÎÕÑÑÍÍÑÏÍÐÑÍÌÍËÉËÑÈÕèîìæÕËÐÎÐÐÌÊÍÍÈÆÇËÌÊÈÈ«ŠŽ’““—™šŸ¢¡¥©¦¤¦¢ž¡§£§­«¦§¨¦¥¨©§ª²´¯³ÃÕÕô°¬°°ª©®°¯¦ª¯°´µ®®±±¯®°µ¶µ¶²µ¸µ´³®³·»±˜…~€‚z{~{~~„lefZ@2/+)((//136788;;<;989<77233277--587657:99=AA>;>?BCEFHIJHKRNKSSP†ÒîèÍœ……}si…ºÍÂÄÇÄÁÅÈÃËÊÈÈÅÃÒìêçÄ•vq}‚zmrz{vnphf`WS[juqz‰‡…Œ…{ ÇÓËÉÆÅÅÅËÊÈÏËÉÜÓ“fihY{¼ÏÎÔɬ·ÅÏÊ”cjsijegklklifikmlhhfcblljgffhjnmjeegiihigc`cimkkjgillh_]]VROA8TfdaaL2"'(((('&%((,.-*-32892-,*%%Agqr|x}~ƒyx|{nihdjnff{sptwvw{~ƒ‡smjcg_cfik^UPTXRQ]dcdgieabfhPAFKT]UScwq]Vtš“aO{˜„impe_fc[douvtxue^fnsronnpnlnnnnnnnnpi`x•¨µ¶¼¿¹·¾¾¾À¿»¸ºº»¾¹»¾¿À¿¾¾»¾¹µº¼¸¶¼¼··½Á½¸ÀÁ»¼Â¿µ·»¾»·Ç½„iqplmljkghijjjiiaVQW_jrsuwrrth^…ž{esspswtsrssrqrpstuwsrupvtrrxzfh¸½°ªª´¶³´¶¶²±²®°¯­°µ³«€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€o¾ÖÅÈı¥ˆ‡…††„†Œ‡ƒ…‡ˆˆ„‡‹Š†‡‰ˆ€‡ˆŸÏÚÑÐÑÑÌÈËÒÎÏËËÑÎÉÌÍËÈÈËÍÌÌÊÔæîìâÎÄÑÐÐËÅÇËÊÆÆÉÍÌÉÉÌ­”“–•’—˜™ £›¥©¨©ª¢œ£©§«­¦¢¨®§¥ª«§¬³±²ºË󯀵±²±°¯­¬®²ª«°³µ°ª®³²°°²µµ²º¶¸¸²°±®«°½¾­Ÿ’ƒ€~~€}syzu€…xfN8.-)%'0/2565568645:<;<=AEFGNMNSMGPVJfµíìǘˆ…zsj†ºÌÄÁÃÆÃÃÇÉÇÄÅÉÇÄÑéðÌy{}~jev{svunfQFHFDGJZl“ŠŒˆ‚©ÈÏÄÂÃÄÁÌÎÈÆÐÊÅÛÒ’fihZ|¾ÖË̦µÁÃÄakujidglmlmigijjjjhcaejlmkfegjjjihggikhlkdaflohihgillh_]\SON@8Sk_XlfA$'(()('&%*'(,.--0474-*-*#(Hinp~zz|ƒƒ}{|xjihfjg_k{oluulq€|z{€ƒ€||hXXYZb\RLTXOLSZeeilkfbcePAFKT]UScxs`Wt—dQy–‚hnse_fc\dotxuxte`kuqopqnijpnnnnnnnnpjby“§µ®´¼ºº½»»¿¼¶·¼¾»¹¾¼¼¿¿¼¹¸¼¿¼º½º¶º¹»º¹º¿Âº¹Àýº¿Àº¶¹¼¹µÅ»‚iqplmljkihggghjk^ROWcmqotvqsxk]£fturrttvuqorssqvtqrrprovtqqxyej•ÁºÀÂÄÇ¿¼ÁÆÇÇÇÇÃÀÁÅÆÁº€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€b¢ÁÁÄÀ¯Ÿ”‰ˆ‡ƒ‚}‰ˆ†‚‚‡ˆ„†‰‡‡Š‡ƒ…‡…‹…žÎÝÌÊÑÒÇÃËÐÎÏÐÍÌÏÏÊÌÎÍÉÉÌÍËÊØèïêÝÑÊÒÍÌÈÂÈÏÊÈÍÍÌÅÄÊĬ“Ž’”•—œ¢£ £¦¨¬®©¢¢©©ªªª«­®¬ª««©ª­¯´ÂÏÛÓ»±´µ´´°­¯¯©¤³º¯­²¯¯¶±¯³¶´³³¶¶µ´³²±°¯·Àº±°«¦•ƒ|yqljnnkm•‡j_ZK2%+,+02454248=8:<<;:;=:;:63310/036765679;:;==>AEHIJKLOQNMS\QRˆÜöÅ’„‚~{tkˆ»ËÀÅÈÆÅÇÇÅÈÃÃÊÊÃÔöášswxw{ubblvwvpcUI@><8:A7M™Š‡‰ƒ¥ÌÌ¿ÃÁÁÈÈÅÇËÐÊÇßÔ‘gmgXÂÖÍÐÁ©¿ÄÎÏŸdhqjeechjjligjhkkiheejnnmjgfhkjhfefhijkjgdehihnlhdejlkc`\SRK:8NgbYcvi3"'&'/+%)%*+,,,/0571,/.*)0Tjkr{xtƒ‡xuwrcac_^\]fnhgjf`iyurt}…‹€fLIWb]SNNSQJP_efrlgfdhkN;EPW^URdun\Xyž”gUy”ƒhkpi`eaZdotxwwqecltimrpklonmmmmmmmmth[u‘šª´³´º½½¹µ¹½¹¸¾Â¼¹¾¿½º¼À¿¼½Á¿¼º»½½¹¸¼½¹¸¼¿¾¹¹½»µºÁ½³¼Å·°È¼hppklljkkmihggie\UUV_ptruwusyi_ƒ—xcpqqrronoqqoqvtstsoqttwtswstvef•½À¶¹ÀÁ¾ÀÁÁÁÁÂÄÊÈÅÆÈÈÆÃ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€R¨¦®µ±©’†…„ƒ†„ƒ‹Š‡„…‡ˆˆŠˆƒ‚…‡……ˆ‡‹‡~œÍÙÈÆÍÒÍÌÐÒÎÐÎËËÍÎÍÍÌÌÍËÊÌÑÏÖáíîáÐÅÐÎÍÊÈÍÏÊÍÐÍËÆÇÑͨ‘’’‘–œŸ¡£¥¢§¬«¢œ ¥©«ª«­¬©¦®­©«­«¬¶ÀÌÙѹ³»µ¯­®±µµ®ª±´®°¶¯¬ª¯³²¯°´¸º¶²±±°¯¯´²³·´°²¯« ’vqnovy~‘™xRKRG1&+/-.0367557:79:;::999=<7468721475249:<;88;>@==@CCBFMKGELSSQOSLsÆóÊ“…‡‚}vk†¸ÈÃÇÇÃÁÅÈÈÅÆÌÌÄÉÖÜ¡}owxvqeecnxtnh^KB<=;537;7^ˆ‰„…¤ÎÐÄÉÇÀ¿ÆÉÊÆËÍËÜÔ‘fldTz½àÔι¨ÇËÌΟdhqkfffklkkhegglnlgbemjkkigefgkkjgdcehhhfddgjjmkgdekmkeb]VTM=:PcaY\sxP+*('&&(*$+.-*(-1351-//*(#5Wmou{ws€†…|ssr`[]\WW[fa^be`ahjmry~ƒ†„€†oYT^_WSQRRQX_bgnheebfiP=FOU^TMavq^Wv–fTx“ƒhkqi`eaZdotstvrfagnpkjosmknmmmmmmmmti[t”¥¯´ºÁ¾¸¶µ¼º¸¶¹¼»»Á¿À¾½¾½¼¼¾½¸¹½¾º¹¼¿½¹ºÀÀ¼¶»¾¼»ÀÀ¹´½Å·°Ç»hppklljkjmihhhjg_UST]ntuptsrxia†›}hvurqpoqqqqrrqrsrqrpqutpnrptyji”¹½µ·»º¸º»»¹¹»¼¾¿ÀÀ¿¿ÀÀ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€J“• ¤¢’…‚„‡ˆ„‚„ƒƒˆ‹‡‡ˆˆŠ‰†ˆ‰‹„|žÐÙÉÅÇÍÎÏÏÍÌÍËËÑÒÏÏÉÉÉÉÉÉËÌÈÑãðîÞÑÍÓÕÑÍÐÑËÇÉËÈÈÃÆÐË£Ž”‘“’‘”š  Ÿ¥­¢¤§¬ª ¤£©ª§¨¬«¦£®­©°¯«®¶µºÍн¶½¼³°±²´µ±®°±®³¶­«¬®¯­±µ¶²·±®°²±±±°±­­¯²¹²®±¯¨£ ™š¤¥¨¤zRPVO=-/430147987678899:9867=?:7985332147986:<;::;<>:;ADBDIFFHJJJNSUHX¦ëЕ†Œ…wl„µÅÀÆÊÈÇÈÈÅÄÃÆÉÊʸ›€qjmkjjhidkpgdbXE=87611489>:586324984689879:9=99=BCCEHFEGIMOQVLGˆàÕ—‡ˆ|xm†¸ËÄÇÈÄÂÆÉÉÅÆÃÄŲ’|qhggcdlic`ZVabQ@956644686<;Lx†¦ÏÏÂÆÅÆÎËÇÆÇÌÇÆàÓejbRw»ÙØÛŲÒÓÍÍždhqkfgjonlkgbegkkijighkjjihggfilmicbfkilkfbdimjjgeglmlc^[VRM?:Pba`etq]4)-(%&.*--***,,00///+(+B`sx|ztzƒ„tmoof[]]X_baS]ghhomagdjz„…†Š„‹‹ze`giaRP[abi`a`hkfggM8AMW`VPcun]Yx›‘cQv’ƒimsiaeaZdotxwytf`hqupjilooommmmmmmmnf\u”¨¶¯µ¾¼·¹¸¹»¹¶»ÁÁ»¸¿À¾½ÀÁÀ¿À»·½Á¹²ºº¹¹»ÀÀ¿Àþ¸ºÀ¾¹·½Å¹±Å¸€hppklljkhliiijnk]QRYbmpsuupoxi]~˜xevvrqswsqstrqrosxvppvyxsqsoptdhŽ«¨Ÿ¤ªª¬®®­ª©©«¬®°°®®°²€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€N~„†ˆ†„‡‚„‰‰‚‹Š†‰ˆ…‡†…‰Š……‡…„ƒ‡…~ËÓÀÃÅÉÎÐÏÍÏÒÎËÎËÈÌÑÌÊÌÏÍËÌÎÔâïïßÌÁÍÑËÅÍÏËÌÍÏÍÍÊÊÏÅ ‘•Ž“•”“–œ ¢®§£§©¢¡«¬©¦¥§ª«ª©®°­¯µ¸·¹¸ÀØØ¾¶¿¾¼¾»³¯·¾±³·µ³¯©¯²°°²³±±²´³´µ´±²µ°¸¹°ºÃÀÌãÆÃÕ§¥¦¶´W^hsucPGC=:9767788889877:<=<<==<:87348956;:96569987;><;8678986898679<>>?A@<:::77;:65899779;957<=9;ACAEHJJJNPQUXEqÑÕ—†‚|yl€±Å¿ÄÅÂÁÄÅÄÉÄÇÇ·Ÿ…nwpc\agc]SVIAXlZ832146876<9NbYbwqmpgV@/#%7J9(*,-1+*-/21,--)1Pjtzzut€‚vcdmcYXXY`ZP[gjlqlfkghlrx|‚††Šˆƒˆ‹{cg\OMNKHKPU\hifhcS?IRV[QM_ur_Wt˜cQv’‚hkqi`eaZdotvuwte]fsolstjkqmmmmmmmmmof[tŒ“¦²©¬¹¾¼¿¿½¼»º½À¼·¸»¼¼¼¼¹¹½»º¼½¸µ·º¾¼¹º½¿¿½½¿Á¾º»»·¶ºÂº³Å¸„hppklljkhkhhijnj^RQU_lqsnturud]… }fwupquqsssttsqqtsqsutsrqt{wwwdd–ÂÈ¿ÀÅÅÃÅÆÅÂÂÃÄÅ¿ÀÂÃÀ½€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€Hv„{{zxwuuwvxsko{}}{}~|€‚€€~||yy{vr•ÃÇÁÇÅÂÅÄ¿½ÆÄÂÃÉËżºÂý¼Âþ¹ÐæíêâÖÊ»¾Â¿º½ÂÁü»º½Äºœ‰ŠŒ“’—ž¢¡ž¢¥¦¨¨£¢©©§¥¤§©¨¤¦¬¬§©¬­¬£¥³Ôá̾¾ÅÂÁ¿»¼½¹º¹¸µ·µ«©¯²µ³¯­°´«¯¯¬«¯²²±±µ®¶¾µ¸Å® º²‰‚‚‡…}ƒŒ~d_o…‰vaSF?<98::8578:::99:=>?@?=:89999:;:8::878996::98=CB>DFFDEJOPUVDsÒÒ”…ˆ|xwm³ÊÉÊÈÂÀÆÌÎÄÅÉ¿¢Š~wtme_^`\SPPCJilJ0740/1577A38AEJNUŸÐÔÂÆÊÉÈÃÈËÈÌÊÅÔÒŽdjcSy½ÔÙàɳÐÐÊÌchqlhhglmlmjgjlkhhkjijkkkjhgijmlkhffhjnomhdgmqppnklnmid[]ZTQG?R_[lwccudUK=)+DY9(./+/,/0130+,.+7Ypuywrt}~rdflcYXY\]XX_cflpicfjgktvt{ˆ‡†„…ˆŠ…fWPSVUUTSZbifflfQFQRR[SK_ur`Xt˜dRw‘fjoi`eaZdotqqurcZcpsnpokorkmmmmmmmmqfZsŽ–§²¨­¼½¹½À½¸»»¼¿½»¼º½¾½¼»¼¿½¸´µº¼»º»½»¸¹¾¾º½ÂÁºº¼»¹´·Àº´Æº‡hppklljkhkhhhiliZRSV_nqprvurve\›xcvvootqpqtvtqorttutqqvustytstae”¾Ä»»¼¹¼¾¿¿¾½¿ÀÅÅÄÄÅÅÄÄ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€M{Š‚~}{|~}~{u|}yxxy{}||‚‚~yw|x{}utŸÑÓÌÎÆ¿ÅÉÇÈÅÇÇÆÅÉÈÃÃÇÇÃÃÆÅÂÃÖçëêäѼ£¯ÄÍÈÉÌÅÁ¿ÂÂÄȼ™†ŠŒ‡Œ‘–—“”šžŸž ŸŸž¢  £¦¥ ›ž¥¦¡¦§¥¨¬£ž¨¾¾ÅÛßȼ¿ÄÄÃÀ¼¾¾¸µ¶·´¸¹±¯¸·´±²´±¬­²²­­±°¬¯¯°««³°«·«’¢¤tv„|xy}†‚shpƒŠzfXJ=;:;=;729:<==<:8>><=?A@<9:<<978;998667768:<<<=@B=CEDDHKJTQAvÔÏ‘…‘ƒ|xjz©¿¹½¼¸·»¾¾¼¾¾º«z}qc]\URTVTNARuh?/7643465318>?HKEKyÀÓ¿½ÂÃÁÅÄÈÍÑÇÀÕÒŽdh`Ou¸ÏÝåÁ¢ÃÊÈÌchqlhhhmnmmjfinnoqofchjlmljhijoonkiiknttqkhjorqrollnmibY[XQOF=W^`wvV\wgKGK85L[=&+..4.-2241*,/,<`uwxupt€ˆ„widhfbWUY[WU_[Z_jolgefjmnou€‰‚…‰ˆ„ƒˆŽi`cccc_[bhkfhqkLHUPO^WLato^Yw˜‹eSw’fhni`eaZdotsrvte\ftsmospklpmmmmmmmmqfYt’›­·©±À»±¸¾¼ÀÁ¼¸»¿¾½¹¼»¸¹¹¸¸»Â¾¶¸º·¶·¿¿¸¸¿Á½ºÄÀ¸¼¿¼º³¶¿ºµÆ»‰hppklljkhkhgghkh\TSS\msrtsooyl`Ÿ{gzypnqutpmpttoqsurpstorootqsvfl–¹½·º¼¹¸º¼¼»»½¿»¾ÀÀ¾¾ÀÀ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€K‰ˆ€{ƒ†‰ƒ}…„‚}€„‚„…„€ƒ„‚x{€~{£ÓÖÈÈÊÅÂÌÒÊÆÇÉÈÄÇÊÉÊÌÌËËÍÍÌÊÚæîèÞÓ»“šÄÔÃÉÓÎÈÅÂÍÈÆÎº—„Œ“Ž‘’——˜˜–—šœžšž¦¥ ¥¤šœ¡Ÿ¥£§¤Ÿ¥š”¡¹¸ÅßÞŽÂÀÄÆÃ¿¼½À·±¶¸·¸³®¸³²´³®­±¯µ±­°±®±»¹±«­°© ®¤™›š~q„‚}}|}ˆŽ‡Š‰†‰v]^]B66<:895777:=;78<===?B@<:;<:9:<<98;:67:96779:;<===@AGIEIVJBˆäÎŒ‡ƒ|m}¥°±¯¯²¶¸µ²¹·¸³uxi_`\LISWNOK\nS3852456;=6278;DIIJ\•ÆÊÁÃÉÉÄÆÉÉÎÊÇÚÍ”jncOy·ÌÒÚÁ¬Î˽Ðflnigfiopkkomgorqnmjghjlnmiehlssojimppsurlhlruuvtolmljd[ZYYRDCSUd€rNWqgLDJA?R_>'++-..-,2..0..(::::<=<<<;>@><98:==<=<:869;;88899::;:9>@?ACLUEU¨ìÏ“‡„€~yj¯Â¹¼ÀÁ¿¾À½¼¹®“vmrc`XNJQTNPIJY\E3976/.9=72/128BHJOOu®ÌÆÃÈÄÊÉÈÅÈÄÁÕÒ˜jm`MwµÒÚÓµªËÈÉΟjqtmiemmnpomlknusnmnljonlkgegklllnoomkouxsmmtzuvuolllj`Z]ZRNKPN[pzbJVnnQ?EHLY_A(+**-/003400*&4ayyvwpty{rhdedZWY\ZZ\[VY\ahkhbafgipwupˆ‰†‡†ƒƒŠ€dECY^NDT[WZfh`SDOTV^VQcvqaYs•ŽfUy‘jnrgbdbZapttrusfahprnmmlllijlllllkjnhatŸ­µ®²¼¼º¾¼µ¼»¸»ÀÀ»¸½¸¸½½¹º½»¶µº»¹¸ºÆÄ¼¸»»·¶¾ÁÀº¹Àþ³ºÃ·¯Ã¹…homjmnkjhfhjhjml]USX`krpnrruwb_ƒŒhevxrpuoruupnqvpsqoqrrsrrutqtrimŠžŸž¡¨§¦§©¬­®­¯°°¯®®¯€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€N{‰…†ˆ„„ƒ„„ƒ†‡‚„ƒ†‰ˆƒ„‡………„„„‚…¢ÑÖÆÆÉÊÈÊÌÈÇÍËÉÍÏËÉÍÌÉÆÈÊÊÇÊÚçïêáÖ¿˜ƒœÃËÅÅÑËÌÅÉÅÄË¶šŠ“Ž•–•’•›žœ ¦¤¢¤  ««§¥££¤¦¥¤¤¨© ‘’—•¿áÖÅÇÆËËÆÃÆÇÿ¼¼¿Ä½±¶¼·¼¿µ´ºº²´··³±¯ª¯³¸°¨­«™•‹Š”r„zuy€…‰€œ¯Œ[U[TWQ;-26369::87:=<>B>::>>:;?;<:7898899999999;49?A@?ILCuÐóÀ„€€zj|¯Å¶¼ÁÀ½º¾ÂÅÀ·¤‡miqd\OL[bWIOEMWK95721)(272//--5@BFONVÃÇÀÇÅÊÈÇÄÇÄÃØÓ—gi_My¸ÖÙϱ¨ÉÉÎËhovsrropqsspnmrwwrrsrptqpnmjkmmlptustwyyuniltztwvpkklkg\]WOPNLKbypUFPgpU:;HSbc?'//.,..237..*%Hw|syxnwz|zlcaa`TUYZY[\XWXY]did]bjkfnzxju‚ˆƒ„†…ƒ…ˆsPDKNIJHO^ffglS@KVZ\RPduo_Zt–dSwhlphaba[cprxvuqgafoommnmmomkmmiimmkqi`rŸ¬±®µ½»»À½¹º¸¶¸¼¹¹½¹¼À¾¹·º¼¿½¹¸¼º¸¹ÂÁ¹¸¿À»¼·¹¿¾ºÁµ±¹Ã¸°Â¶€homjmnkjkhhhfhlj]URW`kqostrsucbˆ‰gfxxqorrutqqurlptvutsqqsrttrtriqz}|}{|ƒ„ƒ‚‚ƒ…‡ˆ‹‰ˆ‰‹ŽŽ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€R}’•”‡†„‚„†ƒ„„€„‡‡ˆ‡†‡ˆ†…„†…ƒ|~~ ÎÖÆÆÉÍÌËÊÉÉÇÆËÏÌÊÎÊÈÆÉÍÎÌÉÊÚçðëâ×À•z’Äм´ÆÍÒÉÉÄÅȲ—‹’‘‘’––”˜  šž¤¤¦ª¦£ª¯­ªª©¤žž§¢¢¢˜ŽµÛÒÀÄÊÈÊËÆÃÆÉþ½ÀÇÅ·µ¼¾¿¹´¹½¸³±¯°³µ³°´´²®­´¬˜Š‰„‡wn~su|ƒ€‚†ƒ—°Ž[V]]Z^M2*020668759==>AA><>@@:??=;>?>=>;B=9<8999:;;;;?;8@?;K{µÜëíĆ|zzn~¬À½¿ÃÂÁ¿ÀÂĹ©–nc`^CJjp]QOCGNLD=7.-/3/&)/.+&(6?86@MC_žÈƾÃÊÌÎÌÎÇÀÑÑ’ad^P}»ÐË˶¦ËÍÃϦorzuompwzwvyvnrtwyyqlnqruurmnrsvyvqmqvrwzwpnrywywqllkj\\bYQSL@PwwURQCSgW:.,AkrF(/1-+//21,+*#@wqy}rmp{|~shcVNTXY[YX[^YY]_]\\\[]fmijvzmis„ƒƒ‡Š„€|hI?IPLKSbifglT<@HRZMB_tq`Wq•eTx€imqiaa`\dpqquvriafrrmpsnhkqnkjjkjlnqf`w˜§¶¯²·¶µµ´¸¼»¹¹¼º¸¹Á¾·µº¹µ¶½¾ºµ¸»¹·º¿º¶¾ÃÀ½¿ÁÀ¶±ºÃ²ºÆ¼³Å¸‚homjmnkjfdhjijli]TRW_jqoqqnrxfaƒfcrssuuqopstrrursuurqqruqrssvsgkwwmiimtpqssrmifnmosxyws€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€b¦¿²«£ž£›Ž‹Š„‰“†‡Š‰‘‘މ…„‚€ƒ‚ÇÓÄÈÉÉËÊÆÆÂÄÈÇÅÊËÄËÎÏÍÉÉËÌÌÛèïêàÕ½xНÄÉ·£ºÌÆÃÅÊɮމŒŒŽ”‘”–—–”—ž¡ ¢¨§¦§¢¡ª³¬¨§¤¡ ¡——™–Ž’—”–¾áÒÀÊÐËËËÈÌÎɺ¾ÊÇ¿ÂÀ¹ÂÄÀÂÉÀ´¶¶»¸·¹³­²³···µ³³·°”Œu^`hw|‚‚‚œ©„\X[W_[b_F358<=<==:8=AA=:<9::;;<<=B=9;A=Jq¾çíè뾇ƒ‹|uti{«Â·½ÁÀ»¹»¿º±¢‘~jXMNDXtmWJB@CA===6/062,+)%&&#'5=74^sqaVp•‘cSv~hkohaba[cprvvvpc]ftrklqolnpnjilljjnfc_qŠš«¶¨«µ¹¹¸·»½º´³·ºº¼»º»½¼º¸¸¸½¾·µÀ÷»¾¹µºÁ¾¶º¾½¹»Á¿·²ºÅ»³Æ»…homjmnkjfehkiijg\TRV_jpopqopsaa‡…dfuqquurttppsrmqprpkkosuqqrswsgjyxkhnswwvtuurkelmquwxur€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€a¤¿®£Ÿ ¡“ŽŽŽ‹‹Œ‰‰˜“‹–‘‹Œ‹‡……‡‡ƒ~šÃÑÅÍÌÈËÍÉÇÉÉÈÆÈÎÏËÉÉËÍÊÇÉÎÍÜèïèÞÒºŒrˆ°ÁËÇÄÈÌÈ«ŠŒ‰’‘‘”—˜™›œœ¢§¥¥§¢ §®ª¨£Ÿ¥©£“•””˜™•—–š»ÙÎÂÉÏÊÌÌÆÈÎË¿ÁÇÅÆÇ¾·ÂÇÅÂÆÄ»·º»¸¶¶³³º¶±±¶º¸´°¬§±®ˆghty}|{€{|€™ŽhU\d_b^`bVA406;99@>;?D@>ADCA@:>A@?>>>>?AB@??<<<<<<<<<;9;9>V…¸Õäâæê»ŠŠƒuqshy®É¹¼¿¿¼º»½µ«›ˆveWMQVa_L@EK?:668972374020(&'%'29418>=Cq²ÆÀÉÀÃÇÉÎÉÄÖ×—eh`Ms«ÊÑœšËÌÆØ²uq{xrruwz~}yusuyzyyvrsvwwvsnorzyyzwrsvxwutqorw|ztooplfg_ZWYOER|‰iJTVF>eoJ2*,VrM'-2/-0,.100'9m„ko}tipw}‚tj[MUc`USVZYXZXYYWWZ^^Z]bliepvihq~~tt~}z„‡mMHQAWkrrrqmO=EKUaWL^ro_Wq–aPtŒ}eimgbdbZapttqrnb_jutomnmmmjkkllmkkkgb\n‰™¨±¨ª·ºµµ´µ¸¶¶ºÀ½»½½µ·Á¾º¸¸º¼ºµºº¹¶¸¿¾µ²¼À¼»¾¼·±¸Â¸°Æ¼ˆhomjmnkjigiigghf\TQV_jpnlpptwc`„†ejxrpsqpprsrqqrolmqrrsqvqqrtxsfkvuow‚„~wnhffnqtuvuvv€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€[”°¥™–—”‡„‡ˆ‰ˆ…ˆŒ’Š’—†‰Š‡ƒ}†‡‚|{“¹ÇÃÌÊÄÇËÇÅÌÏÊÆÌÑÍÈÅÇÉÊÉÉÉÇÎÝèîçÜи•s‘Ä̽¦‘©ÄÄÃÊÐÌ®Ž‹ŒˆŒ‘ŒŽ“”•–•–šž ¢ ¤¬¨¡£«««¤ž¨­ŸŽ•›•œš¢ÈÞÊ¿ËÓÄÄËÉÈËÉÂÄÆÅÊȺ¸ÈÃÁĽ½ÁÅÀ½»¸µ·¹µ¯³·³µº¹µµµ¦dgy€}uv}{w~„“x[Y_d\`d`_dYA09@;7@?:>>>>>ACA=<=>?@A><>?@<8=A=>>>=<<;;9>?5L¼Ä×äçé㽎}‚xwxgt¦Â¼¹¸º½½º¶´ª–mc^\g]J;8?BA@>?A<9@AA><<=;78?A<:>?;8@8@w²Â¸ÕåÝä縊wrsiw¨Å¼¹½¿º»¼·±§’pdfrdK:3/:C<<37=849<=?DJONHC;2151.01:>Jt«¿¼ÂÌÊÉÆËÈÇÛÒ’agbPt«ÇÒÆ™–ÆÔÂʪvpxsosyzy{zvtw||{|ytvywy}{tswxt|„{pt|z{wppyxxtnkmnld\]\SPo ›uYSYT=3[zb?0!7fa.$86++2.4-&8t˜wmyjiv€ugcfdabbOO\`ZYWVTYYVWZ[\Zhun[bshZhzzff{~|xƒ’†g\gibhplnsoW<>JW]QP`pma[s”cVx‹yfnrjbeb\clovwvnb`hnnnmmnnoommlkjihhnh_wŒ¢¯®³¿¾µµ»¿¼·µ¼Á½··»»»ºº¹¹¹º»¸¸½¾º¸»»¼¹¶º½¹½º½º³¼ÆÁ¶¹Àµ°Å¹jnnigikjilkgehkk]USV\fnnspnruec„hhwrouxoqrssrqqttprxuoqrstsrurgkwq~ž¤œœšš˜ˆm[^imruutuvv€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€S‰ž™ž¡–†€ƒ…ˆˆ…ƒˆ…‡ˆ…ˆŠ‡ƒ€‚„€€€}€›¥®´»ÃÅÆËÅÆÈÊÍÎËÇÈÏÎÈÆÌÌÆÆÕãîç×ǯx–»Ë̯—ªÃ¸¯¸ÄÃ¨Š‰Ž‹Œ‹ŒŽ–˜˜ž§¡¢£££¢¢¤­´®£¦ª¤›––™ ¡–’™¢”žËàÎÅÌÈÆÊÍÈÆÉËÁ¿ÇÉÊÊÀ¾ÆÇÄÄÇÉÉÃÄÈÃÀ»±²¼ºº¹·¸º»´´¼«|k…ž«ª¢¨±¡”§~WW_`c_ddccfhaW?58=9<@9=?ABA@@@@@?>=;=:754>@Nzª½¾ÆÌÈÅÅÍÌÆ×Ò’agbPt«ÅÇÁ ™ÁÖÐȨvr}xtv||z{ytrvyz}~wqtzy{~zsrx{|~}vsv{{|xqotz|yytmjjjhf\\VRo—«•nXVXTA6UuiF4%0]]5'/.,./.,*8]‹”vhydgy€yrfadb_``TOWZVWVVWWVVWWW[^fqpbdoi_etyhdx€urw‡ŠtcfddoytoppV>?IW^RO`pma[s”ŽbUx}gkmibe_Xanupprnc`hppnnqnhjqklnonmkjof[u•¦°¬¯»½´³·¼º¹¸º¼ºº¾º¹º¾¾»·¶º¹´·À»²³»¼ºµ¶À½¹¿Â»¶Áʱ¹Â·®Ã¹†imnjhjjighgfimlj`UOU_lqmlnqvvdc…†cfwrpuwtonrsrrttrvxsprsqrsrrvsinvpƒ¥¨š–šš–†jX\imsupnrtq€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€Ht‚x}‡‚ohmq{ˆ‰‚‚‰ˆ‡‡ˆŠŠˆ…‚…ƒ~~{|‚€„Œ‘˜Ÿ¦²¹ÀÈÉÅÉÓÕÎÈÈÄËÎÈÆËÍËÁËÝðç̸£‰v•ºÉȬ–¹É¾¸¹´°œ‡‰ˆ‰ŒŠ‹‹‘—š˜¥§¥¡¤¨¢ž¥®²®§§§ ™—˜›ž›’‘™¤–¢ÌÞÎÈÍÃÃÉÌÇÄÈËÆÄÉÆÇÈÀ¿ÆËÉÆÇÊÍÉÆÇÄÀÀ½¼¾À¹¹¼º¸¹¶·²»¬v”©³®¤±Ã¨‚}ŽiZfaZcfjjjhijihY9/;>:;:???ABBA@BCDA<<>?==?A?:9;B;785//4;9H{²Á½ÁÏàÚßâ´ˆ€upqgs£¾¹¶º½¹º¼·²œŒ}mojRB8431471,0;@93:CJMSZ`a`][QG@=AB<:Ca®·º¿ÈÆÅÆÎËÅÔÒ’agbPt«ÃÅÇ©›¾ÔËÍ«ytƒ}ytsz{z}|xww~~{|zutwx{~zsu}~{{}{ss|~xqnoruzzvolkkhf_Y[m‹¢¦‹bX[WTH:ImuR:)(Q]=+--+.,0$4Wœ‘rm‚wgp|}yoebcb`aaZTWZZZYW[\XSVXZ[dhigcdmjdalwiat{vpzˆ|d\aeoxvnklU?AHU_SNaqma[r”ŽgUv|ejnd`fbYanvqqvui_dmomlmnmnoijmopnljjaVp‹’¤¯®°¼¾¹¸·µµ¸º»º··º¾¸¶º¼»º¼»º¶¶¼½¶³¸¿½µ¸À¿¶¶¾À··À¼¬°ºÅ¸¬¿·†gloljjjgfghhjmkh]URV_jrrpmkqvge…†dhysorrqqrqpqtwqpuvqtwrnorrrwukkvw‰¤¢˜•˜†xhZZclttmmvyu€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€8[jd`b`UTY^qˆ‰‚‡‰„„ˆ‰‡‡Š†€}€€€€~€ƒˆˆ‹’š§³½ÇÃÆÑÓÍÈËÍÑÑËÈÉÉÆÂÆ×ðå뜂s—¾ËÇ©’³ÈÅÆÆ¼´ „‰Ž‡‡‘‰Ž“—š›œ§¥ ¥«¢ž«¯°­©§¤—‘•—–”•›¢ š§ÎßÎÅÌÉÅÈÌËÉÈÆÃÅËÈÇÉÂÀÇÊÉËÉÅÇÇËÉÆÃ¾¾Á»·¼À»º¼¸µ³»· ™¨±¶µ¤§¼­‡zsaZbcaehlkjkjklnmS<:B>:??@AAAAABBBFGBBC@;;<><;:;>732.,3>@;gª¾µ·ÁËÝÖÜݱ†wrsgr¡»µ³·º·¹»·®›‡}{u]C6123012..3;?:9BLSTUY]acec^WPNRN@9Ot—©´¾ÄÁÄÉÈËÆÂÖÒ’agbPt«½ÆÇ “ÇàÌΫzv|yrv}}{}{vtw}yzytswx}|ttzy{y{|xuz€ztrppswyzwroqpnf[_—œ §XW`VUM=ACB@?BEIEGJFDB<=AC>97;>=84346;BC?BDB?>BGHDDGGFC?ACC?>Q†°¸³©¥¬ÂÕÏÔÕ©ƒ‚ytugp›´«©®³±³¶²›Œ—•mTN;52/-+,++-37>EHHLPTY^aehkjihdchcVV~¡°¼ÊƸÃÃÅÅËÈÄ×Ò’agbPt«ÊÌ¿š—ÀÎÃɤut~{{rsz{z}|xwz}}~yswzy{~ztu|~ww€spz}}|wokq{yzwrnnkg^x–¥’Š™‘kPW_W\R6'Q†]7"DlT&!.,-))Nr„““wboymjyzohcdaabbacf`Y[YUWZ\ZVVWWX\cZXko``jf`cnh`m{ztx}{}{mkoqojkkkTAEKU^TRbrnaZr’ŒaRu{dkrh`b^Zclqrtwrc]dnsolmmkijspmjijkmrh[sŒ”§³©«¹¿·³´¹¼¹·»½¸¶¼ºº¹¸·¸¹º»»¶µ»¼¶°¹º¶³¶»¼»¹¿½¸ºÁ¼²­µ¿µ­Ãº‡gloljjjgjifceikiZRNT]jqpppptucb„…egtnptrprrrqrrrostqqsttrrtrrushpoz˜¢••Œ‚vso`Ycmnnorvwv€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€3]h^^]XTVU^sƒ…ƒ……†…„„„„„€‚}|€‚}|}ƒ‰„ƒ‡‰…†Šˆ‘–›£°½ÄÅËÊÊËÌËËËÉÃÑíḢ›tœ¿ÆÁ¨—µÊÆÈÎÉ¿¥‡†‹Œ‘Ž“—˜•–š¢œ›¢¢œŸª©¨§¡™˜—Œ“Ž”™•™¢­ÌâÒÆÎÒÌËÍÍÎÐÐÃÁÉËÍÌÂÀÁÅÄÄÄÅÊÊÄÅÄÃÄÁ¾½Çÿ¼»¾ÀÁ¿¿»»ÀÀ»¸¨…dZ`ba`^Z_`bgjropnjlpojpuyqW>;EABBA@@CFGIHGHFA=B@?@DGHG<77=>>HV¦®£¨«¦«¾ÒÍÑÒ¦vrrdk–­¦¥ª¯­°³°ž”žŽX?>-.+(&()((/6:?ILKNRV\`ceilkjjhfig^k–±´¼ÄÀºÄÄÅÄÉÇÆÛÒ’agbPt«Ï͸“•µÆÑÌ¥wu}z{pv||z{ytrw}}y{yuuxzƒ|rqv|z}|wvvyzzuonu|xywromjfg”¨ ŒŠšŽeSY[X`Q/!G‰•rD'>lT$%<63-Afx†–‰peonfmyqfddgecfedghbYZYSVZYZWTVX[^]NRlmWZje`coi^k{€xw|}€‚minohdhhU@DMV\STcrnaZq’ŒbRtŒ}hjjc^ca[clqssvse]guqmiinqnipolkjklmsh\t—«·®°½¿¶´¹¿¹·¶¹»·¶ºº¸·¸¸¸¸¹½Âº´¼Á¹´¼º·µµ·¸´³¿Ã¹³¹»µ¬¶Â¶«¾·‡imnjhjjihhfdfjjgZTSV]hqsronqsdd‡…fiupormnssnlnporttoottmoprrrwuklr}’•—†}sssaV^inprw}|w€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€;dmbb\WZZ\hy…‰‡ƒ„ƒ€ƒˆ†ƒ‰„ƒ†‚~…‚||‚‰„‚†ˆ„†‹‰ŒŠ‰—¥°µ¾ÁÅÉÉËÏÔÆÂÑî⸡˜}v¡ÇÍÅ©—¸ÍÅÂÉÊÀ£‰†ŒŽ‘‘““—“‹›š–—› ¤§©¨§ —˜˜‘•’’‘Ž‘–”›ª¾ÛäÏÆÎÖÍÊËÊËÌËÁÀÉËÌÊÂÅÈËËÊÆÂÅÅÆÈÇÇÊÈÃÂÂÅÅÿ¼¿ÈÆÀ¿Á¿º­›zh[YX\a_[[abjnflknmhjqrnquvzpL7BCB@@ABDECKLIKIB=@?ADEEGJC@DIBA\€©«£ «­§¦¼ÑÌÐФ€|soo`g‘©¤¢¨­«®²®œš˜}P;5)/,((,.,+5<=?INPVXZ]__afjjjlkhig`a–¸»¿¿½ÂÂÆÉÆÆÃÆàÒ’agbPt«ÁÏÄ££³µ½É£vu~}tsyzy{zvtw|}}zuvy{€xpr|y|zv{~zyvrpruxvxwsqqnk…¨›|˜bUYXYcO+@„ŸM+8lP#5P?53_v}‹‘|ninoioxria`db`ccbemdVUUQW\TTUYZVV\XNYur\\hd_cqk]i|€tkov{‡whjqjeikV?DNW[RUcsnaZq’ŒiUq†zjlhb^c_W`nwusvudX`oqljmnkkmjjjjkkkkkdZrŠ’©¹®³½º²µ¹¸¼º··º¹·¸¹µ³·º¹¹º·¹·¶»»¶³»º»¹¶º½º´¸¹³³¼¾¶¯¼É¹§¸±ƒjnnigikjgklhfffd_UPU`lrpinswtacŠdjxssupoooprtttspoqqpppstusquqgkwzy€’œ‘~}yyuaXeqsngkx}z€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€'FmsŽŒwinwmoywkeddc\ZbgfdmbSWXQXZRSWVTVYYVUXim\ZgcXbmi`dtztqpqy…{lisndecT@DKT[QQgwp`Yr…cUvŒ~gjoa]c_X_krvuwrc]eqqnllnonloljjklkjpi]rŠ”©´ª°¹»º·²¶¼·¹¿½·¶¹¸º¸¸½¿»¸¼¼¹´µ»¹¯º½¾¸´»¿¹´Â¿¶·º¼º²¹Á¶®Á´~emmikkijghikgekh[QLQ\iolqoouubdІdhyvttpuooqppqppoqsrqstrprrrsphmyrpФ¢Œ~vu{vb[fokimtxyx€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€Aiqefe_[filu€„‚‚‚‚~‚‡‹ˆ…„ƒƒz‚zz„‰‡…„……„‚‰‡‡„„Š‘›¡©±¶»ÀÃÆÔàîç̸¬~w¥ÆÉÀ ˜¼ÌÆÂÄÊÚ‚‹Œ‰ŒŽŽ“•’Œ’˜œœ¢¤¡š™•–œœ™šŽ‘’‘•Œ’¿àÓÆÍÔÏÎÍËÍÐÏÆÈÏÑÐÌÄÁÉÊÊÈÆÄÄÇÆÅÆÈż½ÆÈÂÀÃÆÈÇļÄ©…rprjjgeilf\Q\cehklnnnmoppnlntutwxdJ=AA@BA>=GIHHHEBC@ABCDIMMDOGD_”¶ª”Ž“—Ÿ—˜¹ËÄÉÊ¡~ƒvqmdk†ž¤¡¥ª«¬ª¤£ŠaC;831,''**+/17DGEB?KJIJKFCFFHEBEJKKKKKd´À©‘Œ™¢¦¡˜¿ÍÃÇÍ¥‚~€uqogm‰¡šŸž §¨¤¥™rO@:62.((')./18=?BGNSVXWY[[^beeegljfgigZn¥Â¾¾ÂÃÄÅÇÅÈÂÁ×ÐŽai`Q{±ÎÌÆŸ›ÂËÆÐ§rv€|xwr{{{~zps{}yzwtvy{€„€uquƒzw{ztsxyyysjjsy}wuumiœŸ“›™†‹ŒoUX[[Yd\0F‚€_:*PjUS|_/BkwzŒˆt`Uakmtupkif_efehhda[TLV\Y]]Z\\YVXVPNW^kmccgaX^ji]Ygu‚}uxtq{…xfflghjT=?HWaUPctn_Ys“ˆcUv~gjoa^faX^ltrtwob^hqoommlkjjoliijkkknh\r‹”©´¯°·¶²µµ´··³¶À½¶·º·¶º¾º¶¶¾¾»¹ºº¸µ·¼¸´»Á½··º·¶·»¿¸¯¹Å¸¬¾´‚emmikjijkifhffkg\RNS]ipnnonpsfeƒˆfjytqrnqpmmsrqsrprrnknqorsontqdhywjt’›…|{vyzdVblomhgpz€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€Fovilojcgiku~}‚„‚€€‚ƒ…„ƒ„†‡…„ˆ‡„€}}€ƒƒ†‡†‡ˆ‹‰‡†ˆ‡†‡‹‡‰Œ”›£©®ÆÔÒÁ»¸¤x{©ÃÈÁ –ÀÍÅ¿Áǽ‘‡ˆ†ˆŠ‰‹“—™™— ž˜œ£˜Œ˜–‘Ž‘–˜˜•”•——•–™Ÿ•ÂàÕÊÍÇÊÍËÈÍÓÐÇÈËÊÇŽ¹ÇÈÆÇÌÉÃÄÆÅÈÈÄÆÇÃÅÈÈþÂÅÂÆº’oksplmjkopnotcX\jkiiinoonllnqporvw{ypT<;GFFHAEEGLOJGKLMIGMLJOPJg›­´½¯“”žŸ ¢¡ÄÏÂÈЪƒ|tqohn‰¡™›œ¢¦¦¢_MG;20*,/,,201;AAAFLRRQWZ[[^figdgijhhii]h Ä¼¾ÅÃÂÈËÆÆÂ¾ÎÑ_h`R{¯ÂÄÈ¢‘·Å½Ó«tv}{vrqz}|~xow|yvz{tp|}€{qpx~vsz{utz~{ztkku|zrtshoŒ¢˜‡‡‰rUX]^\kf7E…`>7ZiX[}U5Xxs‚~iVCOW\fliiifbfc``]VRPLJUZWXXVWWTT[[SQW^iibcf[X^in`QUruurntƒ}jfnkhiS?@GT_SNarm_Yt“‰aTt‹|ehma`gcY`mvuvuncbhnqomkiijklkjklljhlg\rŠ•¨³¯®º¾·µ·º»»¶µ·µ²¶¸¹¹»¼¼»»º¸µ¶ºº·µ¹¿½··»»¹¸½¾¼·»Á¹­¹Å¹«½´„emmijkijjgcffhmh[SOT]ipotqmored„‡fiyrprprsqoppqupqrroqrqrturqvsgn}{lj„”„xqq€ƒi[hqrlehryy€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€Evpjjjiddit|usz~|z{|}}}}}}~€…||xtyƒ‚ƒ‚‚ƒ‡‹ƒ~€‚€„ƒ……†ˆŒ–­Â²²· uy£¸¿¹›–¸Å½¹½ÄºŽ|…†ƒ†‡‡ˆŠŠ’—™–“Ÿ š™œ’‰’Ž•™˜““––“’–™™‘—ÂàÑÅÉËÍÑÏÊËÍÊÁÆÍÊÇÆÄÄÇÆÅÇÉÅžÄÈ¿ÆÍÃÂÅÆÃÂÈË»£}hnpnqplkljhlsiXXflkmmmnnmkknpilou{xx€pLAFHJKPTSY\Z\bfffffhkjii]b™¾¹¼Ã¾ºÄÊÆÉÆÀÎÊŽfk\JyµÇÅÅ–­Ä½Ô§qxxsuuz|yy{ysw{xu|}vq}|}~{srz~~{ywwwxxutqlnv{xsvqi}œ£žž‡…‡tTUZ\]rp=?y„fFCave`oNGkyvŒnbTAILJNQRV[\]ZPHKMJHPNOWZWY\TVVST[ZRTUYce`dgXUYem]N[z{|{wmlu|qkrmgeUDGJT]SN`ql^Ys”‰aStŠ|dhma^faX_ltyqqod[ampomjihiklkjklkigke\r‹”¨²¬«¸¾¶³µ¸¶¶·¸·¶¸º¹·¹»º¸º½º¶±³¹¸²°¸ºº·µº¼¶´¸º¹¶¾Âµ¬¸Å¸«½µ…emmikjijifcfghlg[SPT]ipolfelsegŠ…eiwrpsrronmmpttopsrqpqoqpqqprofjwzpkz‰‚ys|Š€f\ejoneahoq€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€P|lhkkhigjwztw€}{|}~~~|}}ywy}€„zuyyv|ˆˆ‡‰‹ŒŒ‰ƒ~}}€~€€€‚‚–³¿°°¶žsz§ÂȽ™–¸Å½»ÂË•}…†„†ˆ‡‰ˆŒ‘–—˜——œž›˜–Œˆ’”šŽ’˜š•”™œšž”–ÀáÒÁÆÏÊÌÐÌÈÉËÃÇÌÉÆÆÂÁÇÈËÌÉÅÆÈ¾¿ÄÅÆÈÊÃÇÊÇÅÈĺ©‹mipppxruslijifocaillnqmmmnopmkirsswww{`BISTURRV\\YZ^UWXWW[XPTRS_bbffZTVelUIa}~}|wrps{ƒwkljhhXILNU_UP`ql^Xs“‰bUuŒ}fin`\a^W_jqsprqc[dsonmlkjjinkhgijjjid[s‹•¨²®¯¹ºµµµ·µ´·¼¹·µ´¹··¶´¶¸·¾¸¯¯¶¸³²º»½»·¹¹²¶»¼¹µ¼¿²­·Ã¸¬¿¶„emmijkijigfhgfidZRPT\gpoqmksub`„„dhwpossmloplorqrqsuqorvtqststqiiuxtow…‡wr‚‘|]\ljprmkpw{€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€Nynorkannnv‚‚|z€€‚……ƒ‚„…~€„†‚‚yv„—œ™–•–—–••Œ…ƒ‚ƒŠ†ƒƒ„vƒ¦½±°¹¤t|¬ÊÒÀššÀÌÃÀÇÐÆ˜€ˆ‰†Š‹ŠŒŽ‘•—˜™œž›œž˜Œ‰˜’“–“‘’‘‘˜›š›œ›•“¼ãÔÂÌÒÉÈÍÌÉÌÏÆÇÈÅÆÉÄÀÂÄÈÇÁÃÇÄ¿ÅÈÈÊÊÅÀÄËËÂÂȼ£“{kmppqprutnlmicnkhhjiimonoprqomqsroquwxzqTAFEAIFGGHKLLOKFGGBENTn‘¯½¼¾Á³©¢§ª¯±ª«ÆØÓÝ㶈|wutkn†œ›”“•š¡“u]YI941,)""(..1;BECBEJMLILPW_cdgighfhlhej`X…¶Á¿ÀÀÄÇÉÅÆÂ¿ÑÍŒ`h^Ny°ÁÈÇ™Œ¶Ã¸Â¦us~„}oqw|}}{uov||{}yst{z{~vty{xz|srwxyyslnuvw||nm“°ª‘ŠŠ’ŠhTKLQ[ƒI-Okp]TgˆxbQOntrŠˆlacdh[VY\UMNNHEHHJSYXVWVY]\XUXVVVVWZZVXUU]acf][VUbnYI^zƒ€wyysoz†|leejkWGJKUaVOarl]Xr’‡_Rr‰{cfke_c`[dnrnrvob^itrnjijklljijklkhehc[rŒ•¨²¬¯¶¶³²²·µ²±´¶²²¶¹¹¹¶²µººº·¯®·»¸¹·»¾»¹ºº·²º»·±¶½·®¶Á¶®Á·ƒemmikkijbdfjhgkgYRPT[footqoqrceŠ…eiwpmrsnpsqonnlnqsqosxxqqrqpspfpxurvz‚|w‚ŒwWWmoomnrx}~€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€Dwƒqnqmhlpor}ƒz…†‚ƒˆ‰†ˆ‡…†ˆˆ‰ˆ†‚||ˆ–›ŸŸ›œ˜Ž†„„ƒ…ˆ‰‰‰‡„„‡‰~ƒ¢»­©²Ÿy{¥Àȸ˜ ÄÎÿÄ˾‚‹Œ‰ŒŽ’’’“–šŸ™’–ž—ˆ…‹–š‡‘œ”›žœ™˜—Ÿš”¸ÞλÊÑÉÅÃÁÅÉÇÅÆÈÂÀÄÄÄÆÅǽÇÍÅ¿ÃÃÄÊËÈÈÏÐÏÊú¢‡mglokntrsmlopljkloljoomoqrrqooqttjilmtzy~~hMGHFFFJJJMMKKQNIKOKRho{¡ÆÅÁű¤¥¦Ÿ¦·±©ÂÖÔßã´…zƒyvrgh“–•Œšž†jZZH50)&.'%,2.1Xe^_bflnihmbV~¼ÇÁÄ¿ÁÅÆÂÇÈÆØËllVKw¢¿ÇÀŠƒ²¾¼Ì¦sy‚~xuq{~{}}wqrz||}xpqyzz{xrpt{}}ztsuzv{{qjpwut€{j}Ÿ¬²ª—ˆ¢›|rg_[VfŽŠV.''4Seafpvdctmoˆ‚f`cWRTLScdSKUYPSUVWYZWTZZZ[[[[[[VTUW\ZRPTTV_d_YUWPWigOPk€|~|xqqv}}qcagT?AHS\RQ_on`]r‰„cSt‹zdhlg_b]V_ksvture]ervpkiijkliijjiiijjf]t–©³®­µ¸¶·µ¶µ®®µº½»´µ¶³¶¼·²¶Á½¶µ¹¶°®´ºº³´¾¿·´ÀÀ³°¾À²³¸Àµ­À³{`ikhkkhiefdijfggWRTRYippnooto^gŠ‚dftqoppoonoruroqqppqttqoooprxsgjyz{|vtwuqqwq`\hsqoqv~‚„€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€Cnymmnopti^l„ƒz€„††ƒ‚ƒ„……††………†‡ˆ‹ˆ™•š—“”–£¦¤™››˜–‡†‡‚|{|€‘››¡œ‡nqvyƒƒ’®½¿¿Å;|†‡‡ˆˆ‡Ž‘•™š˜•˜žšŠ„‹Ž”•‘ŽŒ‡Ž–œ ž˜š˜š¾ÞÐÀÃÎÇÇÊÊËÍʽ»ÄÑÛäæßÑü¾ÀÂÅÄÀÁ¼¶¸¾ÁÂÀ¥Ž€rfdekpqmknpqooooppqqsphchopoomkknprrnoqppqtv|z}{fMDHKJHDBDKPLJMRSWh|rtytqŠ­º¬¦£¯½¸°µÎÞ×Ú廃{‚{rpde…›Ÿ”‘˜š‰seXK<30..0//**3=CFKFFGHKLIFNSH?L\[`efgkgdkdU†ÃǿľÃÅÅÁÆÆÆÙĉgjXO}§½Ê½ÁÍÁŤsu}{wrq{~{}}vps{zwxuoouvx|{rouuvy{xtuyyzysmpvwu}tj†©«§ ‘ƒž‹oincb`n–“[2$',8QdmvwZi{j{”ya\[JFSZ[caTQWWPQWWUWXX[VXYXWVX[_WTWYXTLQTV[aa\ZWZQUgkSNgyy{{wsszzh`eQ;>FS\SQanla]qˆ†bRuŒ{dhjc^c`Z`jousvrd[cntnijkihhlighkljghcZq‹•¨²¢«ºº´´·»µ±´¹ºº·³¶¹¸¹½¸³¶¹¹´´»·³¸º¹¸º¼¼¸´¸¹¹²°¸»´±¶¾³¬¿²{`ikhkkhifechkghe]QPS\imnmlkrq`e„‡hjwtopppppoprssprusoqsptrrootsjg{~{|zxtxtu{xe^hppnlr}„ƒ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€@pzjkqpkti_m‡‡zy€„„„„…„…‚„…‡††…„ŠŠ‹Š‚‹œ˜”™“’•’š¦ª¢›™›”‰……||y}ŠŒ‘xz}ux€~‚˜¨¯µ¿Ç³…„ˆŠ‰‰‡‡•—’–ššœœ›˜‹„‹‘“‘’ŽŠŽ˜ž¡¡”•™½ÜÐÁÄËÅÇÌÊÊÌÍÄÃÈËËÕãéàϼºÁÅÃÂÆ¼ÂÈÁ¾¾µ˜zgghmojopnkjklklprrpopsuslcdlpnmpqnlnqsnpppopsuptvyxeMDFGHIJKLMJGINRWdrwrz~to}‹žª®²¸´²½ÏÞØÝ纄~‚{sqef‡œ˜—–’‡{ttbJ<;630'-/*+9@@DIINPJD=515BMLHRaed_bkgdm\R˹ÂÂÅÄÃÀÅÄÄÙÊgiVP~©¾È·y~»À¯Ã¦vw~}ytq{~z||upu}|wuqnrqpptslktwvxzxwx||zwslnv{{wqq²­š‘…z‰’yeiqcehp”—i9"&..>Yo|q\ntpŽ”sa\WHJ]hcf`WTWTPU[XW^]UTXXZZURU[UQQX\\VRRSW`gaZXWZQSdoYMc~‚xvy|ywtu|zlbeR<=FS]SPaom_\q‰†aRuŽ|egic]a]Wamttosr`^ktrljmomklmjfhkmifmg^t—ªµ©­·¹³³³¶µ´·¼º´´·º·³µ·´±µ»¼µ¶½·®´¾º²±¸½»·¹¼¸´·¼»·¯¸Ã¶«½³€dmmijieeggbeffig[LKR^koqqnkstdi‡‚dfurpqrrrppqrpnmnrsortrrsrpottlly{€yvzwuw}vb[fptspvƒˆ…€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€Eu€qswtmyn^e€‡}zƒ‚„„‚…„„„††‡ˆ…ˆ‰„„˜–“¡˜—›•–£¢Ÿœ˜”𛓉†{yrszzv|†…ƒ‡}z‰€„Œ“ž¯¸§…ƒ‡‰‰‡‡‡†‘•Ž”™–™›š—•Œ†ˆ’Œ‘–ž¢”“•˜»ÜÒÄÆÉÃÆÌÌÊÍÍÆÆÊÆÀÇÜéçÝǹ¾ÁÁÆÆÈËû¾­†ibfjimrlonnppooportronqtoqpg^epppsspnopmopqpppsusryysk_PMLNRSPMMKLQUYdpurtyywqh‚™®¸¸°²¾ÒÜ×áé·‚‚{sqegˆž•›—„xx~jNAC?<4$#&'0@FDHLLPMB;96999ESPP`h`VWZUT_RO–ÌÀ¸ÁÂÅÃÃÂÆÃÂØÏggVQ‚­ºÁ³~‡º¸«Á¤vw~ztq{}z|{toovvsqjejqonpoggpuvwwursuy|{rjnwz~zuw“®¦™–†{”–i]xuehll‚tB"!/13Ksriqxhzšˆi`]WMS`caicVW]\VY\WU]\TR[WX\\VX_YXY[\XROTQS]d_YZUXQRanXG\|…}zyyuwusuyqecV>?GU^SO`qn]Ys‹…aRu|dgic\a]Xantqmtq`[flojghkklmljjijiignh]rŠ“¦±°§®¹º³°´º·¶¸¹¶´µ·²²º½´°³µ¶±³Àº¯±¾¿³¨°½½¶³¿À¶¶¾»®®·Âµ«½³€dmmijieeegeeecih\VVSWejipposp`j†ghurmnnmnpopqrqpmorsstrssurqtrhnz{}xy}{vuwq^[houvu{…ˆƒ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€Fq|tuupmrl_gƒŠ|sƒ}‚€‡†„…†ˆŠŠˆ‡††‚ˆ’’”ž¡”‘–•–’”ž ™’•Ÿ”ƒwtxqnjbi~ˆ”ƒ€‹}z~}}‡— –„€ƒ†…„…ˆŠ’”––‘“––•–”‰Š†‰Ž‹‰‡‘–”” ¥˜‰”¡®ÎãÓÃÈËÆÇÌÍÏÎËÀÃÉÉÃÉÙãë߸œ¡¨£¤Ÿ¡¤ª®¡acfjkfhkjhgjnolmpqrssqppqrqrhX\lrkqsqnoqqpqqqppru{vuz|vpqmdZVVVQMLKQWWWduuuursuuqtwˆ¤´¸ºÀÑÛ×âéµ€„{srfh‰Ÿ™ “yr‡~lVJIED>/%(.9FIHJSSSK>9<>?QMDNSU`h\PIB>DOLQ™ÉÀ¾À¿ÄÂÃÄÈÂÀÕÍŒdfWT„¯¯Å¹{„¾º§¾Ÿpv~}wrr|}z{{tntvsqrkfkonnqpihoquxzwttuxy{ulmuzyypt—¤‘—€‚—zZr‰ylmnfozsN'*2/Coto}zo“£z[VSNMYb`af_WY\ZYYZURVXTUWPOVZWUVUWY]]VNMVRS\d_YZZ[SQ]lYFZy„|yxutwsszug`W?>GU_SN`ro[XsŒ…bRt{dhjc^c`Yajonqurf`foonlklmmmjklkhghikdXm„ «¦¤±»¸²±¸¹¹·µ¸¸µ´µ°µÁ¸³·¸¶¬­¸¹°®º½·±¶¹´²ªµ¾¶¯¼Á³®´¼²«¿²{`ikhkkhi`gghedgeYPPRZhmnonjpn`h‹„fhwtrssnrsplmorsrstsppstuutqsnbk~~y{||{ztrwsc]iptvw|„„€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€Gq{qturoqi\e‰}x}}‚„ƒ†‚‚ƒ…‡ˆ‡…‡‡Š…|€Œ‹‰‘•Œ†‰Œ’“—“’Ÿ›–†wt}ofaZ_wŽ‹ƒˆ‡vozxx{…‹…€„„‚†‹‘““”••”†€€ƒ…ˆŒ‹•’ žŽ‡•¦¶ÓåÒÄÉËÊÍÍËÍÍÇÂÂÅÿÉÜèðÝ¢t{„ztuj|¡¢y_dgeacijkoljknpnmnlnprrqppwrqm_Yeskorpnoruqrsrqqsuy€wsƒ„upwrmjgaWOKINXWS^qvpswuuzsmq|‘²Â·ÎÜÙàæµ‚zsrgiŠ œ£•yt…‰{ndXLDEFB76=FIHHGORYXNGDADZYHDITdfZQG>HX\HY£ÉÁÀ½¾ÂÀÃÇ˽ÓÍfiYQ|£«É½y‚ÃÆ·ÃŸpy„€yur|}y{zsmsupllifkkkiihfipmosvsptzzwwvnkszxwnu“•‚‡Ž|wv\i—•vqqldfmmZ1%-0=Xqy{u„¥›lVPMNR\ddge\VYVRT[XTU[[QFEDGNWZYWPPT\`VMNTSV^c]VX_]TPYj\JXu€}yxwtxtt|xiaT;;DU_SNbqm\Yq‹‡cSt‹zchlg_b]V_lsuuul^Ybkjnoljkkikllkhgghng[p‡‘¥°¦ª¶·³±°²³´µ¹»¶µ»»±±¸º´´¹¼·­ª³¹´­¶¹¶¶»¸³µ¶¹¾·°»Â¶®´¼²¬À³|`ikhkkhiafffffhc]MJR]ilnrnjqtekŠ„eguqmnnpqqpqqpnqtsrsppvqpqqsvqdlz||zz|qnqxud`mxyz|€…†…€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€BoximutmldZh„‰|y€†…‚„ƒ€ƒ…ƒ‚‚„‡‰‰‡ˆŠ‰ƒ~‚‹‡‚ˆ––Š‹‰ŽŠ‰ŽŽ‘šœœš‰yzud[\Y\r‹¢•}Œ€xruxx~„}„‚„„„‰‘•–’“Œ‘Ž””‹…€‚…ƒˆ‰„œ‹–›ž¾ÝÖÉÊÈÍÒÎÆÆÈžÁÇÅ¿ÇÚæïâ¥nq€{…•vmnfedagoidnkiimswvsrtutqpprtoqvn_arvrnmoponrssrqqsv|qiowz|ssssrngaXPS_`Zbsyvv{}xv{~rsts­³ËÞÛÝã¶‚zsrgiŠ œ¦›v„†ysrdN@AINFAHOJHJHMOVYUTTRKPROICJZj\SF@VkeEa­ÌÀ¾»ÀÀ¿ÄÉͼÑŇdj[RzžºÅ´y|ª°·Â›kw„~wsr|}y{zsmltrljgehklkihefkmmszvoqz{yvpknux~zy}‡†ƒ“™”sfu”¥‹osqjefhib;'$(17>X{yu“ „^XTU[^^_^de[SY]XVWVX[\[RGINRTWZYUWRQ[`UMRQRV\^WRT[YROXi[IRp€ƒƒ|wuwytt}yjeQ88BT_TOdpk]Zp‰‰dStŠycima\a_Ybmssqwr^X`bjppjhlnlllkjihggng[p‰“¨´¨«··¯­¯¶¸±²½À²®»Àµ±·¹¶³²¹·²°·½¶«¶¿»³º½µ¯²ºº±³ÃŶ­·Â·¬¿µ‚dmmijieeegbbdgidXQQQXgmmklmsq`g‰„fhvspqqpqrppqqqtuomttoqsqporvpbf|{}~|wrsw|vgk{xwz~ƒ…€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€Gqz|wolscXd}ˆ€vƒˆƒ€€‚|„†‰Š„„‡ˆ…‚ƒˆ„‚ˆ“™—”–“‹ŽŒˆ‰Ž‘“Ÿjqpb[agit‚›£‘|†“ˆxkrv{€{xƒ…†‡†…„Ž•–”•–’‘–˜’”™˜ˆ€ƒ‚€‚‚™’Š‹•¸áÚÄÊÆÈÌÍÊÇÊоÂÇÈÍÚáëݦ|‡“Ž£§’tlqqojgfhlmiellmprsqostusomorvvqqskgounmsrqvqqpruursvkRFQ`ntrrw{{xtqokklrtjfousrrstrp~urttwˆœÌÝÜâæ´€ƒ|roce†œ¥›œ‰u|wbgk`LCFGENOIHPPIFJLS[]Z[^TPVUKFJXhZ@5.4RbQi³Ò¿¾Á¼»ÇÊÃÆ¾´ÅȆcg\Ty¬¶Æ¬|²µ¹Ê p{‚zwvr|}y{ztnorpjfdeikjhmoc`mpstsrsuvuwxsmqy|yyqyƒ…’¢²¥„Š£†vy{mjibolE)%)/3-W~~Ž¥’tZWUYYV^gcabWQ\]WXZZXW[[WVYXY\]YVVXQR]`UMLRQW^]YVTZXPMXcZIRm~‚|vzzwuuw}xgN>9BT[QO`pm\Xq‹ŠcRn‹€ehlf^a]YblprqspaWaoprjfoqllllmmlkjipc[qŒ–¤²°¬µ¹³­²¿¸¯±º¹±°³¶°®¶½ºµ¶±µ°°½½²­»¿µ®·¿º«¯¼»®±Áø¶Áų«¾¯zflieijhhgfeihgjd]TPSZenorolpo`i‹‚djwppurssplnrrnqooqrqprqrurosskn~„ƒ„|~€{{€~uty„}{~„†‚€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€Crƒ|zurssdYcz…{z„‚€€€€‚„…†‡ˆ‡†ŠŠ‡ƒ‚…ˆˆ„†Š“•—™•Ž‹‘ŒˆˆŠŽŽyfgm`Zbimv‚Žœ˜Ž}optuy€{}€‚ƒ„…„„‰”‘’—–’’••–œš‘‰…„ŠŒ††ˆ“ŽŒ‡Š•œ·ÜÚÇÈÃÆÌÏÍÈÉÍż¼ÃÇÏ×Úïá©‚“Œ–ª™rure^fhijihghqmnsuropklmoqrssqxtossnmqroqqqtsututqwvhQE@DIU_air|€}zyzqtuyzqlr{yusrrrrpptxxvw{¬ßÝÖå¸}„„|sqdf†¡ Ÿ‡og``caUF????OUQLQRIAIKQY]^afb]_YLDER\TD?98GNQwºÌ½Âļ¾ÅľÆÂºÌɈdg[Sxª¿Ì®~ˆ»º¹ÃŸqx|vtyywxvqonqpnlgcciliijeclnnquxvspwxytlmrtxuo}›¬­¤¢¡•£„m„…mlnalqR-!*/18g‹Š›¨]SUV[]Z`d_ccVQ[]UU[XRRWYVTZ[ZYZ\[WVRV^]TNOQR\e`WUXRWSOZf[FQm}€ƒxuyvutu|zoT?9BS[SP^pn^WoŠŠfTl„ybimc\`^Zdotusto_Xcrolmmgghfhijkkkjij_XoŠ•¥´®¨¯µ±­®¸¶¯±¹¸³²´·³¯±···º¶º±­¸¼´°´º¶¶¹¹¸´·¿Á¶±¾Ä¸¬¸¿¯ª¿³bjkillfeacehfdjg[SORXdmmspkom`j„fkwonroopqprtsoppnotsqssqqppushp}}‚€„€€€~{zxxw€‚€ƒ‡„€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€Dmytyyrood\g}†yƒ€ƒ€…ƒ†ˆˆ‰ŠŠˆ†ƒ€ƒ‡„‡‰ˆ‰‹”‡„ˆ‹Š‰‹‰ŽŠ„~qgjk^Zcjlw‡’–˜“†qcaovyy||}€€ƒ„†‡ˆ•‘Ž”™••’““’™•“’ŽŠ‹Šƒ…†‹Ž’’Ž—œµÙØÇÉÄÆËÎÌÈÈÌÀ¿ÄÇÂÅÓÝíæ­zˆ‚‰‹{migcbbhmkebejljlqsqprusqprsrqtusswrigouomrststpwxttjRFEFCAHUZ[cpy~}~~vz{zztpqtttsstvxsuwwzytn‚°Õç峄„}usfg‡™œœz[Z_ddWLEA@GNOYYQTWNAJLRX]_ejfa`WKDERZUIEC?CCWŽÄÅ»ÆÆ¼ÄÇþǸÈÊŠfh[Sw¦¾Ê¬{„¸¶³Âžqw|uswyz|uoonomjifegklhfhfisnpuywstyxxwpiluxyq‚“—««¡©­™–…htˆ~jjkftb5 /-.I‡—•Ÿ—gQVXY]]\ac^b`TP[]VUSVWVVTSU][XVY]]YTTY^ZRORTRZbZMMTYXPISb^MSmzz‚|vyxwtty{vZ?9DQ[WP`ol\YqЇcUo…ychie^b^Yblqqpsn`Xanpptpgjneffhijjjika[q‰’¢³«¨²·±ª¬·¼µµ¹¸´´µ¸°¯ºÂ¸­¬¼º±¯¸µ­¯´µ±´»»¹µ·¼¾´®¹¾³³¿Ã°¨»¬wekjfjjhhfghjfdheZRORYdmmonlrqah‰divoorpoonnnooopqqpqrrrmnrsuwpbm|{‚ƒ‡‡‡…‚wy~€ƒ†‰Š€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€Gmtoy{sjsg[d|…~z„‚…‡€…„„‚†ŠŒ‡…ˆ†{}‡ˆ‡†…ƒƒ†‰‰…ƒ„„‚„‰…ŽŽ†|roslbcnlhx“—†”±žgQakswyz||}€€€‚…ˆŠˆ‘Ž”•”‘‘“——–•—™’‡‚ƒ„„Š•œœ–”¶ÜÕÂÍÊÉÉÊÈÅÇÌÉÄÅÊÈÌÖÜåæ±m[htŠ~mbcec_ahmkdadikoqqqrsrqqpqrsssrtomrtkbmtpnpqsusmrzscTHFGGFCFMSSV`nz~~}z~yvvtsknqttvy{}zuux|yuov§å沇~„~vuhiˆ™˜—j=RkcVHELHEO]MWXSUZSFJNSX[_bf^\]ULEBM^YOLMKIHg§ÌÁ»ÅüÀÅÅÂÉ¿²ÃÊŒhh[Sv£·È¬x}±±°Æn{zvtqx}€€zplqsrojdchljimkcbkroquvsv{yzztmnux}xq„”Š‘ª®¢§®¡›šh_y‹vikgrm?$1(/c¡›˜—wUW\^][YZacaa_TQY[TTWWUVWUUX\VRUXZYYTVZ]XQPRRS]g`TQU_WOLS\ZPNhz‚ƒ{sy|{wtw{{]<7EQ\XOdngZ\vŠeZs…wdkje_b^W_iorrsoaZcompnjjnlggghjjjiine_tŠ’£´§§³¹±ª¬¸»µ³µ³²³´¸±°¸º°­´½º±²ºµ¬°À¿³±»Â¾±¶½º¯²¾¾´´¿Ä²ª½¯zgliehjhidbafeegb[SPT[fnollmusbf†ƒgjuomomoooponpsrnpqosuointvuunbp„Œ‡‡‡†‰’ŠŽŽŒ‹„xy}ƒšª¡€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€GtwwwtqviZc~‡}w}…„†ƒ~…„…‹ŒŠˆŒ’Œ€ˆŒ†„†‡ƒ‚„„„…††„„…†‹Œˆ‚xqpiep}sbuš‘r‰»©gSmlmrvz{zw}}}}‚…‡Œ”™—–••“‘“—˜Ÿš˜œ™ˆŒŠ”œ –•¹ßÒ¿ÌÍÊÉÈÆÃÅÈþÁÄÁÅÐÖãä±bD]~Œ…jYajhdcehjifcdfknoopsutpprtvuroqqopvsh\irtsolswurprlVINKIHIHDHQVV]jw{~€€xux{xrrrrsuxzzurtxwusrkr§×¶ƒ€ƒ}wuiiˆœš™c,>\WB7AQKAJXLQRORVRFEKRW[^`ac`[NFA>J[ZVU[ZQN»Ð¿¾À½¼¸¿ÃÂǼ³ÉÉihZSv¡ºË®x€´´°Ä›nz‚zusoz}{rjmopnkddjigilja`gllouuqrw{|{umovy|zt…’…¬©–¢²©¡œnid|“yajrqH(*$?„©œ’€_R]^^^ZW\acadaXSWTPQWWWWXUVZ_YVZ^^\[VVZ\XQNPPS[]WRTWZSOQV\YOKcz‚…ytuz}yvw|€_;5DS\WMdmgZ]v‰bYu†xejh`[`\V^jqqqtoc\dmokegnjgljjkkkiihjb]sŠ”¦¸¨¤®¶³¬¬´¶±²··¶··³µ¶¶µ±¯²»¾´¯¹»´±½Àµ¯·¿¼®´½º®²ÁÁ´¯»Á°ª¿²~cjkilkgegedhggicZRPT\fonnmlqq`gˆƒhjtpmnnqppqomorllqrmqwsoprpptqfk‡•““”–š–‘”—––—Š‚||–ÇÙÁ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€Fxˆ|wutsuiZd‚‰|u~„|‚……‚ƒƒ‚†ˆŠŒŠ‰‰ˆ†„ƒ‡…‡ƒ€ƒƒ€~€ƒ…„‚‚‡Š†}rkj``q‚u`o“”~…“yZ`unntxtqtxwwxyz|~†“˜™–˜š•Ž˜œ›–˜›““‹•–•š›ž»ÜÓ¿ÇËÉÈÉÈÄÃÄÄÅËÍÄÅÔáêêªVQ†œ‹i^]dghkkhhiihfedljikortupooruvspvqovysf]jppsrpsrqxrmk]OSPONOLFIUVX`koqw{|{wrw|zyupprvxyssuwvsqrqwiw¦§…}|vvih†š•˜˜i/-FXH8?QIAKWMNNMPVQB?GPVZ^`_he\KEB?KX[[YbdYX•ÈÏ¿À½º½½ÂÂÀø²ÌÇjh[Uv ¼Ê©u»·­¼šnw~zrp{{wxyrlrqoolfbfgiihfgimimtwsnqw|{yqjmvz{}v…“…±¤‡´¥¢¡€`j•ŒlhrpQ- *^¢ª›}`QU]aX\YY`d`]c_XUUSQSSVXZXST[YYWWZ]ZUWVY]YPLMLV`_USTTTPOPT]^RLbw{xowywvw|„gA5BT\TM`nj\[r‡€\Vt‰zdhea\a\U\homorob]birlhkljinkkkljjhgja[q‰’£´©¦±¸³­­·°¬°¸¸´²±·µ³µ¶²¯±»»²°º¹®ª½¿¶³¹¾º¯¶¾¿³°Áŵ±¼Á¯§º¬wdkjgjkggefghdaeaWQOSZfmmmmkrqag‡€ghtqoprsrrrpnoqortsstvxspnnrwrdi…‘Œ‰‹Œ‘’•”“—ž›”ˆƒzŒ½æèÚ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€Hy‰}{zuptjYaˆ}}„ƒ„„€‚‡†„ƒ…†…†ˆ‹ˆƒ€‚…„ƒ‚ƒ€€‚…}{}}}ƒ†skjjbbo~ykv•’“~WUrƒ{rtwqkpwstvwxxxxzƒŽ‘‘•™—‘”—“ŒŽ•˜–š—“›Ÿ—ŽŠ‡‘›™“œ ¡¶×ÔÂÅÉÆÅÇÈÅÅÆÈÃÆÊÉÍØÞìë¥`x§˜rc__`bjlcijjjigedqomlmosvwtrrtvvtttrosyrdhqoovurnotojpm_URSPMMHJTTV`ikhmwssxxtw|yxsoossoiepzzutvwqtrp~Ž‹|€zuuig…˜‘‘—o50LaT=CVTOUXNQSRWb[DBIPSW\__bd^PMG>F[^^Ydj`e¢Î̾Á½¼¾ÅÆÄÂǺ²ÊÅŒjh[Vx ·Æ¥qº¶«º˜nw~zrszzvxwqoopqsridgjkmkhgiioqsutstv{{zrjkruuyr”Œ—º¤‚˜¯£¥¤“ˆkcxŒˆmml]6>®¥ˆdMP[_bVZVVae`^a\UTWVTVYVSUYVUZYZYXZ[ZVXVY_ZNHJNV]YRTZZRMORT]^TK`v~‚}tpvvrqqw‚vM7@SZQN_nl][p†€`Vq„ubjle`d^U\gntsrk`]gpnllkijkihhijjihgnbZp‰’¡°¬ª¶»²ª­¹´®²»º³°±±¯²»¼²¯¶»µ¬±¾·©¨¿¾µ²¸¹µ¬³¹¹¯¬¼À±¯»À®§º¬xglidhjijefgjgejgWPOS[fmmlllsraf…‚jjtrooqlmoppnnorqmntsoprpoquyrbl…‰ŠŽŽ‘•–”˜™Ž‰~ªáèÛÞ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€J}‚€ytng[dˆ…†}}„…ƒ€‚ƒ…†…‡ŠŒ‡ƒƒƒ‚ƒ……†…ƒ€€‚„€€€€€€~vppojqmr~}‡™ŠŠ–†ZVžuiqtrpnstvxxxvuz‚Š‹•˜’’•˜—“–™—™Ÿš’–š˜•Œ…‡”™•”¦£›°ÓÔÄÈÉÅÂÃÅÆÈÌÂÃÊÌÅÈ×ãçä¨~™œtbcXX^`fmkiklkhfeflppiflsvutrqqqrsrrstxzpaautpuspqumdfqvjZWXRMOOOTUV_jlhipqqy~{||wspstm]ONg{{vwxu}lgnuƒŠƒ~ztuhg„—œ‘šr4=`cM8Daf`ZNNTYX`phKHOSRTZ]]ih\IFC>I\ac]hodj¨ÐʼÁ¿¿¿ÂÂÂÆÏöËÄ‹jh[Wy ³Æ©s}¸·¯À˜lzytquy{|}xqqmmllh`_fjggieadikqvuqpsvxxvpimw{y|q}’Œ–µ›}ޤ£¤›ŒŠ‹t^`‚˜|fhe@!P˜®™oSPXcb\XZSQ]dbbc\TTWWTUVVVYZVU[\ZY[[YXYXUZ`ZKEJRW[XRUWTWMLRTX\XPbrv{„‚wuxtnkkq}W:>SYOPani\\s†}aVr‡xckoc_d_W_ksrqqj^\fnmjjlljiidefhhhhhnaYq˜¦´¯ª²·±ªª³¶­°¹¸²±µµ°¯·¾¸±±»µª®¾½³±¸½¶²¶¼¾¹³¹´¬±¾½³°¼Á°©½¯{ckkhkkgfigfigfhaXQPU]honomjon_g‰€hitsqqtppnmnopqmprrolntrqqqrwsglƒŒ‡Œ’–”•™œš“ŒŽÄïæÒÕ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€J}{€€}tgY`|Œ„yƒ€|€ƒ‚€„‚€€†…ƒ…‡ƒ|}„„~€~|~~€€~‚|}|ulkmknkrzq}ˆxˆ‹ww‘°fjpmsloqrqrvwttx|‚…Ž”’–™—“•–•˜–—˜˜š  ™‹–š˜˜¢£¸ÚÕÆÄÈÄÄÇÈÅÅÆÂ»ÊÓÁÀÙèì๕xYV]YWZ\^bggilmhcejnqtpijrwsssrqprupusswyseamtnqvojchnopqpoebgfZWYS_WS`njcgqsutuy{yvnnxv_NOJTdtytrvwoqsoxƒƒ{wtvnj›”›ƒ?+HOB?QljTHINS[[e€wI>MQQVUV`feYKCEa_MGNNNOKHFIQVRT]\GBB42CLSfhcfkamŸÉżºº¹½ÆÅ¿¾ÇÁ¸ÆÃ„e_DEy¦¯º¡r»¾µ¸”djtolnoqsttrpnrnkklfdglmljiffjnoruspszxtspifjnnji}–”¤¨„kƒ•™­—`mŸ”hfqom{…gg›škW][[]_^\ZXZZZ^^`d\URUYXVV][WVYWVY[\^_^ZUPVYXZ^RDDPZ[URQNKLMMRUWZUO\lv{~€€}stuqv|uyƒuQJXVPcwn[Yqˆw[Ur†ybfgc`aZU`jrnkonb]ekjlmlkijjjiiiihhglaXp…©·ª¦³¹°ª®¹µ±³¸·¯¯´³°¯¶¼³¯·¾»°®¸³¨©¸·±¯¸·°°·¼¶«±Á½«­Àí©¿­xbjjfghfgkeceimj`VPPT\fmlmihpo\fŒ‚fjwplqwpqommqrqmpssqoopnnqqryugmŸš˜œ ¡¦¢¢­®œ¯åòèæëíãÛØ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€Glww„ˆƒzp\a}ˆ€€€ƒƒ€€~}~}ƒ…†‡…ƒ€€€~€‚‚~~~|~{{~||sotuliZW`_blkm‚Ÿ³¡„’®ª”yjlmnpprqpssmlqu{„‰‡ˆˆ‡‰‹‰–”ŒŽ“”’•–’‘’“‘“˜–•°ÇÆËÚÖÌÈÃÃÅÇÄÀÂÈÄÈËÉÄÇÔßÕskc]\YY[\^dh`TY]adiopmqolpskbdltzxwxvqpnouvxwi^dmjhpssvyyvuwxwrvwuu{xn`[[^[]lznxqfo{xqnwywwzzy}}xvwuruuvupqvywwtqfbuŠ‘‰†Ža0;G?SnbHTxvVFNQIEFEFKRROPVRBA=))>JT[bhce_j—Èɾ½À½»ÂÃÁÃÆ¼¶ÊÄ‚hdCCx¡±¹¡z‚²°¬µ”dkuohjjnquurnlppomjedikkjhgdejoopstppwqqpjcfkkmlhx—¦ xk‡“–°˜[m¥›phsuiowo€–~^X_Z[\\``XVWX]cece_XRUYYVXYWWYXXY[ZYY[\\XTWWV]`PAEU]\SRURLGKOUWWZTO\jrv{ƒ€rrywx|zz„aPVSO^qiZZsŠ|\Vq„xcefa_b\Xajpplnl_\emnnkjijhfiiiihhggoc[s…ާ²«§³¹°ª¬³´®®¶·±¯³·²±ºÀµ­´¼º««º¶§¨º½³®¹¿¶­¯»º­¯¾¾°¨¿Æ°«¿«sckkghighfeffehgaWQPV]hnmjmlnl`j‰|hnwonqqppoopqpmrtsqopruqprqsytdtŸž¤¢Ÿ¥žŸ®¯£¸èëéçêëçÞÖ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€Hpzu~}yxq`_v…‚}ƒ}}†…~|€€‚ƒ‚‚‡…‚~~~~‚„†„~||~~~~~|{z{{vmiiklZT[knhv—¤®¯š“¦©œ˜xhmklrnnnnqrmlrvzƒˆ…ƒ‡‰†ˆŠˆ‡”‘‹‹Œ‰‹‘’‰ˆŠ‰Š‹‹™©ªºÔÒÉÉÆÄÄÇÆÃÄÇÄ¿ÄÇÄÌÕÑ …ohaYXZVXZ]bfc\^ZY]dinsrnpxxmcaikpvwspossuyvvwmdlywoqtvywuvz|{xyxwyzvuztj_]\Zbptvkerztmr{~zzzyxwxzywwwsrptxtpu{z{xukfwˆŒ‚Œ„R1BAFdmfen†nTPNHFHAFNROKLNPGC@98@FKJTikf\k˜ÉÌÄÂÁ½¼º½ÁÄȾºÎÄkkRNxœ±·žxƒ³¯¨½›giqg^_gjnqroljlppkfabhfhijiedgmnnrvqnsvtpicfjjpngpŒš§•owŠ‘²—Ws¨™xrqvmst~–j__d[\a^\^^ZXVZbddgaXSTVVWXWTZ]VW]\[VTW_`[UVWW]`N@EY]XOQVTPFLQVVWYRP[gou|€|suzwtxzz„nYUPM^ogZZpˆ|[Vqƒvagja`b[Wajpplol`[dklljghkkhiiihhgggnb\v†¨±¤¤²¹²®¯´µ®®´µ­«¯·°®¸À´ª®¼¶¨©ºº®­¹º®¨·¿´¦®½¾®¬º¼°©ÀÅ®«Á¬pbjjfhhfgccedacd_WQPU]gnmjommlbk‰~hmvonpnmllnopqrpqqoprsrvtsqrwp_o•«¨¨°¯©²®´¾½¸ÉæêéèèìëáÔ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€Cp|pnopr{oaew€€€€}z„{~‚‚†„€}{||{„‡†ƒ€}€€~}~|y||ztnkhbca\fpn€ ›š–¤¢‚wx~oflnrrquusrpoq|zƒ„‹‡…‡Š‹‘“ŠŒ‹‰”“Œ‡‡……‰ŠŽ“‘®ÕÕÉÈÈÄÄÇÈÅÅÆÌ¾ÁÆÃËÏ¿Š{kb\VUXUY]adgfc][XZ`hlmmrutrqj_jorsvxvpptrrrsxxqqyxqqtwuuvxwtsusyww}ysw}se_b_]dupa_qyoirtuwywvxwxwvz{xtrrvzupqwwwtrjetƒ†~}ŠP;JAStnlƒ’€of]UNIAJTVPLMMSRJGJHGNKNLYgh[lÌ˼¹¼¼¼ÁÁÀÀý¹ËÈ‹kk[X| µ¾ t‚¾»­¹—acmfaeghjkllkkoolhgfccfhiihedhnmlpuqosvnhgdeiknlcjŠ ¬“q‘†’®ŽXq«œƒxfr{uuƒšYY^Z\a`[[^\ZYX[```d]TTXVWZY]ZZ[ZXXY^[Y\`_YRTYZ\]PBCSVSNORPNHMQUTUXSNXepx~}|wopvyw|„u^TNM`of[Zm„{YUrƒt_hndaaYT_ksqmom`[cilnlheghhiihhggggj^[wˆ‘ª³¢¤³¶¬©®µ±¬®¶µ­¬´·®©´¾¶¯¶º²¦§³µ­¬¹º±­¸»²¬·Àº«¯¾¹¥¯ÁÁ©¨Â®qaiieggeffdeedgf_VPOU\gmmlmlonaj‹…fgtolnplloqomnrsnlptssvsqqqsysbr§È¾ÈÌÈÉÍÖÚÒÐÞìèêìíêäÝÙ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€Bpzpspms|tbe~…|{„„ƒ‚‚€€ƒƒ~|~‚†‚€‚‚}„ˆ†‚€~†~|€yvyz|yuqf_cdiiurh|Œ’‹ˆˆ†wklnknomqppoptusppxz~ƒƒ…’މ†ŠŒ††Ž“”“’“‹‰Žˆ‘”’¤ÇÓÌËÇÈÆÄÇÌÈÁÉÁÇÉÆÒÄ–}wmc\VW\U\bdefe`a\^\`hghsuuuuqidclrrsvwtqpooqrstxvwyumpzvssuvvvwvvvuvwvtuzwkaacaopY[xwhiwxv||w||xxyyywxyrsttsqpprz{vmlx~‚}~ƒ~gSMHStoi}„“ˆ|gSDAMVSLJKLJROINUX[_YOUfebk¡É˼¿À½¿¹ÀÀ¿Ä¼¹ÑljhfVT{¢´½¤x€µ¸´»•^cqkcbhikmnmlknnlkjfdfkmkhgedfkhowunnrrlheadkonf^n«ªrŒ’„”¬Rv±¥…vz{vz{‡ˆnYX\^^]^^^][ZXV\cccg`TUZXST\_YXZXVXZWVX[[WUURRW]]M=CRVRQPNONMPQSVWUVSVemv}}yxvtvzrtziZOO_pj]ZsŒ{]Tu…uaeh_\b[T^lssnol^ZfphhkjefjlgdekmighkaZr†Œ¢®¨¨µ¹­¦©²±©®·±­±´²««·¾¸´¹º±§¯¾·¬¯»º²²¼½±ª·Â³¥°¼»±«½Éµ¨º­u`kihjfgeffefdfibTPMQ_jlghjjonakŒ„ghvtrojplnqnmqsostpnprtuuutswo]s»ãâÞÞßÝàâçêçãçíêëììêãÛÔ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€Jv}qx{xy|vedx€|€}€‚~€}|€€‚€~‚…€}~|€‚††ƒ‚ƒƒ€~}zz{~|vojdcghcrzeo”–ˆ‘š‚`qŒpsopqnnroorttrrtwz‰‰‡ŠŠ†‰Š……‘’”–•”“•““Š‹‘’‘•‘˜¯¸¶¼»ÀÄÇÉÌËÉÂÁÉÈÉɤuqzp[W_^X\[^dfdcee^YTZghjstuvxuoiigmx|wqqusqqrstvsxzwuvvuyvtuvwy|wsqsttsst{}ukea_kkW^xvmuyywyzy{|v{~|xwxzsrtvtpnozzuqhdq{{z}u`NHbtimusƒŠ|wkXEJTZRKHGCITTNQWZ^bYMN[`epœÉÍ»¼À¼»¼ÅÇÃż»ÓƈgfVU{£²½¢u~¶¶®»—`doiaaghjlmljinnljgccgghhhgddipmoqmijmpnlf^`fjlh_m’­©Ž~‡š«yU³¤‡z€‚€y~€sc_a^]^`^\ab[VWW\ddabaUTXYXVY[XX[ZXVTVVWZ]^ZV[TSZ]M;?LXVPOOPKJNTUTTURTXflrzz„}wvwxvvsw‚€r]KK`nfZWoŠ|ZRs…ucgk_\`[Valpqmmh\\hojghhghjhjhgjlljjmd[s…‹ ¬¥§´¶®¯²·±©­´¯©¬±¶¯¬³µ®¬´¸´±´¸¶°®·º¯ª¹Âµ¦±¿³¤«»»­¦¾Æ¯¦½¬q`lhhifgecdbdcehb\UMNZinmkmlom`iŠ‚hkvqosstpnonnonqsrpoqssrrssswp_zÄçâÞáäâÝßäèæäçîêëëìëåÝ×€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€Gu}ptyvsvqcbu}€}ƒ|€€~€‚€‚zv|„ƒ€ƒ~{~€~{{}}~{wpifgecWbnq}‰‹ˆ‘ “pƒ§‘ktrimpmpssssrooqvw€…‚‰‹ˆƒ…‰††Œ•–™š–“•™”˜–Ž‘”‘”‘˜›Ÿ«¯µ¾ÆÈÈËÏÄÈÎÊÐÀ†cuxjY[\YYb^^ab_dlhc]W]ikhmpstuuohegmrtrppstrmmpsruxywwxxurtxzxrqqrtxyyxvuvy{{ysg\geU]son}yxyxz|ywxz{y{|ytqprwwrpquwxxlbo~||}|tbSTTZhqkjw…~}‚mTDFO[]N<;DLRSS\c`ZaYQNU_jr—ËÕ¿¼¾¾¾ÀžÆÀ¹ÉÆffWU|£²½ p}¸µ¦´’_dojehfgikkjhgjlkieabgijjkhcdkpopokjmngjlgacgfhk_m–°§‰“‹ˆ ¥q\ˆ¶§…‚|y{€ud^a_\bbb_]`_XZYV\gd^cZRUWVVW[YVVWXZYUTVXY]_\WWTZ`ZA4AOUQQTSOHKMRSOQVUMUdlrx{€€~xtsvwtx€{dLMcmdZVm‰]Tt…uafh_Z_[Xbklooqj]\delijkkllhjjhgillii`Yr‡Ž¥±§¨µ¶®­³¸²­®´²«®·¼²¯¸¹­ªµ¼µ±´·²°¶¸¼¯§µ¿³¤³¿¶§®ÀÁ«¦Á۫ĝr`kihjfgeggefegjcWTQT`jkflmlom_iŠ„jmwokoqnnmmpqqqponmnpppporqswq`|ÉéÝÙßãàÛÝâçæäçíêêëììçàÛ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€Gu~ooqppok_bw‚~€€€~|}€~‚€€ƒ‡‘¥ ‘†…„„€x|~}||}}zwwrikkeda[]{…km†“ž¥–›«gnqghqoqrpoprsssur{ƒ‚‡Š„ƒ‰‰ˆ’“—š˜“”˜š›–‰’”Š’’Ž”Ÿ¦¨°º¾¿ÅÎÉËÏËέslƒv`Y]YSX]_cecadifba\[gj`enutrsndajqrrvupsroljlnpxyxvtvvvquyysnnrtzytszztrvxz~~rehhZ_lko~}yytv|xwu|}zwxuqsrsvvsonrwz~sen€|{~€{q`NVKSon_nxqx…†rSCFN^cP4-6AEFJVcc\`\VQScrw˜ÊÒ¿¾À½¼ÁÈÇÁÆ¿¸ÉÁ„efWV|£¶¿kzº·¥µ“`enhcgdfhiihfedgihgcbfijiigbbhmmooifgghjhdainlem`m›±¤Ž’‚ƒ  kb‹²ž‹„}}~|oebZSXecaa`]YYYXXeqg\b^TSVWXUW]ZWVTVXVRVZ\[[YXWV[^ZH8?PTOPTSOHGJQTSRSUNVcmtxyz}wtvvssvz}jPSenf]ZnŠ^Uu†tadg^[`]Xbjknmoi]]egihjkjiifhifcdjjgjaYs†Ž¤°©¨´·ª¤«·´°°µ³©«¶²ªª¶¼´¯´¹³¬³½µ¬³µ¸­¨·¼³­´»²¨®ÁÁ¨¢½¼¥ªÃ©o`lhhifgeggdecdf_VROR\hjgjkjnm`k~eivqnnmgmqtvrlmppoopqrrppqqqvo^}ÍëÜÙàáÝÞßãèçåçìêêëíìéã߀€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€Gpzomnorqndew‚‚ƒ‚€€€}}‚ƒ€€€|}Ф·¼·¬œŠ†Œ‰€|€~}}~|{{zvtmghkdcliYuxm’—˜‘‰nhnmknptrrqrtvwvvpyˆ‹ŒŠ†……ˆŒŠŠ˜––˜™š –”‘‹‹Ž‘“ŒŒŒ–š˜œ¦®´¾ÈÆÇËÌÁfy†q\V\]ZV^^befdeggab^Wcoc_lyyuvrghgiovxwtwrpqojmsswxsruwuvvwvtrv|wzyuy}xlnw{ww{yrnpebkow€{xzuw|wtrx{xxzytoqstvwtptuswtjo{~yx{iKGQ\oi\n~mjt{„|\EIS[[RD4(07=NSNNTUPFDNQSWOB@MRTams|{}{zxuuvwtx|ƒ|_I`mg[WoŠ|^Uu…t`dg_\aZS]hmilpiZ[hokhhhfghfjhgijhffkb[sˆ¦²¤¨¶¶ª¨­³¬¦­¸±¦«µ¸¬ª·º­ª¸¿³®·¾´¨§½¾¯«¾¾¬¦´Áµ¥¬¹¹¬­¾Ã¯¬Â®q`kihjfgebcbcceibUSQS]hmlpolmj^hŠ‚hkvqossolmpppqqtqpqsstusstsswp^€ÏéÜßÞÜáæäåéëèçéíëëêêçã߀€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€Is€ts}…„~|smt}|w~‚€}~ƒƒ‚‚‚€”ÀâÝǽ§Ž}}€€{|‚ƒ|y|}yyukhkjipink_gvj\Wlލ¾¦~wnrsmnnorsrtvsoxxz~‚‚‚…ˆ‹Œ‹‹Š”™œ›˜˜›˜ŒŽ‘”––’ŽŽŒˆ…Ž’Œ‡–œž¢ª¹ŠaƒgYs€`YeWW^caaeijoi\YZannaZevvpomfeejqvtqutvxuootqpoptyzxwvvvtsw|~zuruxxuztu{{tsxwuidjv|twwtyytwxyvuvyywuurpqtvvtpsqy}ss}|z}|uz{mw•›‚w……YCEOix\KKPUWXVMCGIPSSVO=?XYSf{|vœÊ͹»Á¾»»¾ÁÆË¼·ÓÁ…ghXSw›©°—q€¶²¨¹“\ania`degggecbfjlmkfeighhigcdkegjhehljkgec`bgimd^}£¦•…tea„¬Ÿ]L‚±¢……‚ƒzum_]`]_e^_le]juinypa_cWVZZVWY\XZYURUVQRY__][YW\[XUZVE=ITRNRVQDIMNQXYK=ALSdos{y||~}wrtzzsvy€iPcqiZVq[Ss…ubgjb\^XS_ilfmshXZgkllmkffjkhdeijfccg_Ys‰‘©¶¡¤µ¹«¤«·±¨±½³§«³¸²®²¶²­°Áº®±¾º¬«»º®°À¸§«¸Ä± ­¿º¨«¿Æ¯¦Â°m`lihjfgehhffdeg`VSQRZejjmmjlk_j„ghvtrojllpropqosomorsrsrqsstyra…ÑéÝàÞÞéãáâçêèèéîìêêéæâÞ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€Lwuy‡†wfdx‚{w~{‚€ƒ{€ƒ||‚ƒ…~žÕëÛź¢Œvr}„ƒ‚„„}y~~ywwtqppoljlpifyƒpX\ˆ“ƒ¨É£|vnpomllsrqqsuusrssuy~€€ƒ‡‹Ž˜˜”“••”–“”—•“™—ŒŠŒ‹Œ‰Š’”Œ•—ŸžzmƒxYl‚v\[ba_\]adddeih_[\cppeZ`kvztrfcfkmqwzttwyxurpppqrtuvvuuxyxyzwxutwzwvzxutvwvtttmcdpxxx~xx{{zyvwxxyywutquutuuw|yqs|{su~€{y}}tz’Žv~›˜yO@BAc‡iGHQSQSROMKJJQYWRRS\\XjzršÉÊÁÀÀ»»½Ã¾¹Á¾ºÎÃeeRPx›¦°—nz°¯§¾”^cmhb^cghhjfa`cghggdcejihhgdceenofbghcgfeddeginec‚¢¡yi`Y„µ¡ZH…­¢‹€‹‰wtzugab_[bdmz}mfw{gisldbZXWVXYXWVTXYVTUWWXY\_]YVUWSVZ\TB;NQNNUTLIKMSTSTOAFJQ[ht|€€{vstvrqqu{}oYbmj^\qƒy[Rqschha[a^V\dioopk_[clgknlllkhiiihhggflaZqƒª³¤£¸¿®¨¯´±¨­¸±¥©´³ª«¹¿´°¸¸³ª®¹³©¬¶·°®»½¯¤¯½³ª¸Ä¼¨ ¿Æ­©¼§s`lihjfge`dfigfg_TQQT[gmijkhmh\m„flvqpoqmmnnnqqolpqppoqurppqtyq^ÏïßÛâççåãåéêççêéììììçßÝ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€Cmwnortupphjz€~}†‚‚†‡‚|€„}€ƒƒ¥Øíßų®¤‚htˆ†|†€x{|z|xrmllgacnfl‚xmƒ“ˆ„‰ž£ˆztooqpmlrrqrtutstuuz‚|~†ŒŒŽŽ’•““•˜—””‹•—“‘“”“““‘Œ’ŽŒ‰ˆ‹‘ŽŸ“mtƒjg}zia^][`\\bfffhli^[Y^kpj`^cpyrojedimsvtuwvtsutqnquvsprvttttuyytwutvywuwwvvxxvsq{m\[l{}{wxvwzxvwzxwvustwsrtvux{{qpquwuuz}€€zx{kUUXVaŠ˜{PCE@TzlKFNPPRRPOPOKNX[WUT___uwv›ËÌ¿¿½¾ÁÅÁ¾ÅÀ½ÓÃeeRPw›¤®˜r³®¢¹[akga_bijhfbaefijjidaaggggebcegcbeebejiheb_`cfkdd†¥„rf^[ˆ³˜TJƒ«¢Žƒˆqsysgdeb]bs‚‰…o`jsiklcfgYZSPUWUUYVYZWTTTTXY]_\WTUTRUX\YJAIRPLRSKEFLRSPQROWNN\lsx€‚€|xwvvtnlov~wd^jj^Zp…`Wu„tdgg\X_\V_imolkg^]elhihhhjjjiihhggggj[Wv‰Ž§¶¥§¸¹©«²³´¬®µ¯§­¹¹«¨¸Á·®³¼´«±¼²§¬À½®§³º´¯¹Á³¨³½¸«©ÀÀª­Á§k`liijggeegghddf_ROOT\hoknnimi]p‘bhsopprlllorpnqqoqrqsuttrqqsxo\†ÐëÞÝãåãåãæìéãäìéêêêëèá߀€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€8anggdehlngfw|{€|‚ˆ‡†‡…~|‚†}€‚…¦ÔèÜݼ¹fo€|†‚x{~}|xvohhkh`cnin{jo¡¥„y‚ŠŒzyunnrmmqpqsvvtrsqu}‚ƒ‚„ˆ‰ˆ‹Œ‘‘”–˜œ™”’’––—𖑑ޑދ’’¦’sqmk„…i]a[Z[[Y\beeehkg`][\irlc]]kxtmfdfhlrxwsrtwxtsutpmqtsrswuwwvuvt{yutwxwxwvuuvxxwxj[[o~~wwzzxyxwx|wtvyyxvwtuvuvxvwwttwtsw…ƒ{olqhS<3=CF`q_LCG@DgnRCJLMPRQRQRNKSYYWd_\e}qs˜Èɾ¹º¹½ÃÄÁ¿Ä¼ºÑ‚efRPw𧝖q€¶® µŽZalhcadiifeaafeggffc`agghhecdgiihggfdbghigddgjide‰¨•vhi`a‘¶”SQ„ª¡…ngqwpghhc_qІ}kbprmoj_ei\YWWWYXXWWWWUTUUTUY^`^YXZXVXWYXK@HSTPSSKEHMQRTRPQTNNYhsxx~{xxwuumosx~l`gg]Zo…^Usrafe\Z`[T_ikfkql_Ybkkihhhgijihhhhgggmb\t†¥® ¤·¹®®²±²¬¯´®¨°¹µ¬­º¾°ª²¸²ª±¼´ª®½»°­»¿³ª¸Ãµ¨±¼¸©®Á¿©®Ã¦g`lihjfgeghffccgaVRQT[flhikiok]m‹dktqrrsqspmqolnnorqlloqvsrqswnZˆÒîâããââæãæìéàâìëìêêëåÛÖ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€4\hdc_afh_S\w„€€|}…‹‰~wz‚‡‚~€„‚žËÞÕöÆÇ”afy|‚€ƒ|}}y{u…„xi[]ceddfz˜—€su‡›’wwxnouronruwvuuuuuwz€„†‚}€†Ž‰‰Ž‘‘””Ž“‘Œ“’ޒމБ‹ŠŽœ—‡vq‰•u^`_XXZWZ^bddefhhdb_^grkb]^gvxocdfhiqwyruvwwvtqlnqrpmpuuqs{{xvw{ztsvxvvxyyxxwustj[Xhy{vstwxvz|yxvstxzwruvsrtuuxutsx|wvzg]ZYO?757=AIMJEBFB?XhTAFHINPQURWUQRUW\\Zdntxts™ÊË¿¹¹»À¼¼¼¾Ä½½Ö‚fgSQw™¬°“l}µ¯¢µ]dmidbehfefeabefedecabghjiebdgihgeddeehigb^_elideФŠjbhZ^“³ŠLRŒ«¢€r\]oumehga`|•‘‚wgfvqkom_`e[PTVVUWWVVVUUVYZZW[ad`\\_YVXVUSE8EPTUVQIINPORVRMPNQX`hryzy|vvvtypqsqz}rhhc\[pƒzZQp€qbfg^]bZS_iiknpj^[bhihhifccghhhhghggkbZp©±§¤²¸®«®´«©°·±«®´²­­µ´ª©´¹±©±¼±¦¬»¹¯¯¿Â²¥¯Ã·¦¯Á½¨«ÂĬ¬À¦k`liijggecedfceidXTRUZejfeiipl]kˆ€dirlnmmoromopmmstsqrqprurrqswn[ƒÒðååãáææâäêèâãëëìëëìãÖ΀€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€5[f``\_dbWO_{‚‰†z{„‹xtuz†„ƒ†|šËßÒÄ¿ÍÆ”hp}~†ƒ~z~‚zv~’ž©¥—‚kZ\]dffxŠŠŽƒnq’ª–oqwonuutrrvvrqtvtyrt…{z|}„Œ‰‹’‹Šˆ‰‘˜˜””‘Ž‘“”•‘‹‰†ˆŽŽ’Ž“™ˆ~“§‰``ga]UV[^`adhhfikib_]blob^`bo{tjedfjpustuvtttsrsrrsttuuvqrwzywrvwvuxwsqzz{yxvtsxp`Xev{wuuxxwz|xvyzvtwxvvwurssuzyvsuvsv€„dPPPIA;>;12BIIJCCDEDMWM@CDFJMPWZ\\[[XY_^alihrsl™Êʾ¹¹º¿½½¾ÁĽ¿ØÁ‚fhTQv˜¬°“k|´® ´^emgbabfgfie``fiihhebbghihc`addgheceghbdfdaafkidgˆš~caeYc˜®JZ—­¢‹veOUntjafd^c„—tcfvmksqcdh^SRSVWUVXXXZ[^^^^\_dfa[Z\\W[[ZVHCC@AEFKTZZYZ_]ZZZ\numghpšÉÊÁ¾¾»¼½¿Á¿¾¹¼ÐÀfiUQv—£­•nz®¨›­Š\dkeaa`figea_bcfgdb`bgjiihebbdicbfd^`hjigdcdgkfal†ƒlee^^u£¢nOv¦£ˆd[KLirh^dcf{•šŒ€k]nxgflgZ`dUJWbcdgfaabefd^\]Z\`dc_^_\W[ZWWK<>OVSUSLIOLNQTTROMOZabmzzyz~‚€xuxxyvuxz~ƒtga_\n…[Rqp_ccb]`ZS\fkonkd^agiijjihijigggghhiib[Xp„’¬² §³±©«±ºµ¬¯·±¨®º´¬¬¶¹­«¶·³¬²¼µ©ª¹¹¯ªµ¹°ª¸¾¯§µ¿·¥°ÃÁ«°Å¨i`lihjfgeefefcdhbVRRT[fkhgjhnj\lŠ|cjplrqoqsqnoqpnqmmnopqnsqqqsxp]‚È̶Ñéèâçâãçéæèíëìììíéâ߀€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€:clfmpjacjfgwƒ†ƒy~Žƒwoottw~~€‹„…¡Ç×ÒÈÁ¶ÂÛðèÁš‰‚‚~zwz”·¼¨˜•{kgejrpjxŠŒ“‘¨¬Žƒ†umprtvtwvqpturqttty€‚„‹’“މˆŒ‘š”“˜š—–•’–—‘Ž‘’ŒŒŠ…ƒŠŽŒ‰ŠŽ‹Žš‚˜¡›žlajl`[[][Y_ijfgmljife^Ziqp_[_bluqebhjimrttuxxwvwurqrrprvrsutruxvxwwxwst{wsuzysu|wtdV`v~yutx{wuxz{yyyuqsyuwvvywuvzwvrpyzlOV\UE??=A<416=>=ECFA@CB@EC?@CDISW]\Z]_^_\^nkZdss˜ÇÈ¿¾¾¹¹¿ÃÆÂÀ½ÁÒ¿giVRv—¥®”juª¨Ÿ«Š]fnheedgdcec`bdikgc__chgffebbchgfffeeejhda`chkc_o‡~igebcz§¤sV~™¡¤‰a[MKgrh^eem†–›Ži^w~zoqpb`cZR_jkd^_ccbcb^Z[_]^aeea^_]Y]YV[R@@LRSUOHIMMRSMOSRNLYfcfptzvyysuzzts{{z|j`_]oƒy[Rqrcgh_X]ZT]iqnome]^dfjkjiiie_fgghhiiii[Tp„¨·¥¨¶·¬¥¨µµ«­¶¯¥«¸¸¬ª¶·©©º¹«¤¶Á°¤±¾¹ª§¸¾²§»À¬Ÿ¯Á¼©²Åì¯Ä¦g`lihjggedeccbelgROOT\hokmmilh]o~ekojonknollpnlpnpooqqqsusrqswn[}ÊÒ»ÔìèßìâßçëèçëçêëìíèáÞ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€@ivtyytoszj_r€‚‚u}’”ƒywrls~|wy|}ƒ¯ÎÑϼ¹Øëì騳”ƒ}}ytЧ­¶´›Œ‘~a_mllnƒŠ}‰™·¯|x…qklprurrrrqonnqsoos|ƒ†‡‰‹ŒŽ—š™–”–˜•‘Œ“—˜—“‘“‹‡„Œ‹‹††‹ˆŒ“„Š£¦¢ž`hljd\X]Z[^ejebgknke_\^dmm_[_bnvrffgfghrttussvxussttsqqrusqoptxzuuwyxvuvwwwwwxxxzveV_v}wwvxzzwwx{|wv{zuwyvtwyxwxyttwsuymYUWVTMAA=>;548>BA>BDBCEBC??CC@DMVUVZaebZX\_VRkss™ÁÈ»¹ºººÁÅÁÀº¿Ö½fkUMs˜¤¯•js¨§ž©Œ_dkgdb_befedddbfgeb``cegcaeebeihhgdacfhie`_agnb_pƒ{gadlv ¤kV|œ£ €eXLKasg]_h‚’’˜zlqvushca]\^^XYcfc`^_feeb][\[[`dff_[]]^\YVYUB=HPPTRHIKHNSOLQVSKR_ehotvzƒztqquwvttx}~od]Yo…yZRrp`ef_^_YS_ljkpodZZcljiikkhgikihfffhii[Vs…Œ§¶¡¤»Â«¤²¸µ§¦¯­¥«¶»¯ª´º²­²·¬¦³¼¬£°¼¹«ª¾Â±§·¿³¥²Àµ£«ÀÆ­¯Ä¥l_jfefdfdbhhgdfh^PPQRZinggnllh_o‰}bktmpqpmoonpsropnqpjkrrrotqqxm^ƒÂÎÄØèèçáàäëëççëíìêìíæßÝ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€Cp}u{{st{j^o~}}€~ˆˆ}zzols{wtw{yxy–¾Ò̸ÊçìçìÞ»¦€xtz–­«­µ¢ˆzhZ_oron~qƒ—…«`krpikmpsqptutpnnnmnot~‰ŒŽ’““’Œ’š›™–˜œ™Ž•šš—’““’‹‡ˆŒ‹Š‹ŠŠŒŠ‰Ž“Œ–¥£¥–l]kogb`\Z\Y^cbegbjmkiheabord]^^iurhfefkmtyrptrpswrqrwvsruuttuuvwxzxwwvutuuxywvwvstviX\q{xxvuwxwxy{zutxyvw|ywvwwxyxrtwps|q[PTXWVNG==<86:>?CB?BGVVUUZ_XM^h[]dlnrÄÊ¿À½¸·½À¾Áø»ÓÁ~ciXRt•¢­”ir§¥œ§‰\djea`dghhda__defgfa_bkjdab_]bliffecdfmkd_^_bggdv‰uTRhzy† z€Ÿ¦mXNVhvokq{‰ˆ~~vjdeech`]_]^aaYYab]]]a]^ab][ZXZ^acd_\^^\Z[YZTA;GQSSMFLJKPSQPRTSLQ_ehntz{{zywuupsvvuvz~|sh]Wn…{\Tsp_cd`]^YT^kkgfki[Yenlifffehkjigfffghi^Zu„‰¥¶¥¥³¶££´·¬©±º´¬±»´¯²½»«¦±¾´«²¼±¤ª»»®«¼¿°¦´½²¢«»¹°¬¼½£§Á£i_jfegdfdafeecgkbSPSWZbiilkhni[mŽ}bkumpqppqpmmppntppronoprotqqxm^‹ÐàÓÞçåäââåëëççêíìêìíçßÝ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€Bs~pt~tsyi\n€|€Š†}‚{y{xonw{|}z†³ÔÍÂÚòíäïâ¿°‡ur†«º«¥«˜t^WUV_ie_jgl”Ÿvz£kuyoiloswvuwxtoostrsux~ˆ‘’Ž•™™—•œœœ›Ÿš””˜˜–•““—“””Ž……‰Œ‹‰‡‰ŒŠ‰‘Ž©§›}[_lpgda][\\\^cfdaeijklhbalrf\][bpric_cjlqorutsuupostppstrttvwwwvuvuvy{xutxzxsruursxn\[p}{wtstvuvvtwyxvuvxvxxwwxyyxtstos{s_PW]Y\WND?>:58=9:?>?CA=@AAAA@@BELOSUSRW^ik_a`bhnžÈ˼¿¼¸¼¾ÆÃ¾Á½ÂÔÂdjYRu–¡«“ir¥£›¨‡\fmd_`fhihd`^]edcee`^ahihhga^cihijjfdciidbccbdigwcFTtŠz‹ª™‚––•‘rii{…ˆ~trz{gd_\^_]]_d]]_^^_^WV_a]\[^\\`a^\[X__^]]YX[\]\[USTI9GSRTRHGNPOMPRTVSLQ^egmtux|}}ytqwvvuvwxxzym\Vm„}[Ssp_dea\]ZU]ilkkngYZgniijllihhiihfffggk`\v„Š¥µ¢¦¸º¨¨µ´§¨²¹³ª­²³ªª·¹­¬º¿°¦²Áµ¨¯½¼­§µ·ª¤¶¾³¥¯»´§¬¼¾¦­Å£f`kgegdfecfdcbekdUNQY\`gknjfmiYm‘~bltmoqomopnnopnspnpspoqrotpqxm^Œ×îÞáâÞßäãçêëççéíìêëíçßÝ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€Ar|nr}~vpte\rˆ‡zv†‘‰‰xurj`gw€{zx{Ÿ»¸ÆáðíçîáÀ«ŸŽysŽ·½£‘ŠsYR_`S[c]e{sk‰„Zq¿Ä‘€‚plprtwusssssvxxuwyz}‚Š’Ž•™™–‘šŸœœ  œš›™™•”—˜—˜—•’Œ„„ˆŠ‰ˆŠŒŠŠŠŠŽ¡¯¥ƒ^]cjmlh`[^^\Y^hfab`gkljfbcgog^aaervmb\afjnsssrqsvvqstsrrqqqqqrrsstyvuwyxvuwxxvuutrvyo\[p~|utsuwxwuzwwxwzzytxzwuvvuyyqpsuvsbW^_YYVRPDA?43:<>A@?BBACCC@<;?CCAMPMPY^___ab]a\d˜È̹º»»Á¾ÈÅÁÃÀÄÕ¿€gmVOt™¢«“ku¦£ªˆ]jpe`cbeggecaaeffhgb`cegfec`ahffffc`aecgheddiplSh‡jHb’’z‰¬˜w‰¦§˜†xuoix‰‰~li|jd__a`\]cd^^b`__]YV[]\\[]`^__[[\[Z]^`a[VW]\ZXRTUI;GRRSSJGNQNNSTRTRMP]dfksxz{{|{xtwtqsx{ywz~q[Wo„}WPp€qagia[[ZU\hllqpf^]chhhiiihgfhhggffffn`Ys†¨²¡¦·¸¤¤²·°ª®·²«¬°º«¨¶¹«¨´¿¯£±¿³¦­¾º¬­¼»¬¨¶À´£®½´£«½Á«¯Ç¤g`kgfgegeegeebcgaUKLW_dikjkglg\n~blulopolnonmmmllsqklstprotqqxm^‹ØðáããßáååçëêççéììêëíçßÝ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€Dq}ssspkrse^s‡ƒwx{•´»ª˜Œ‚~umt…އ„…‡š¢§ÍçéëéæÝŪ£Œ€•¹·—}r`RVebM^gcq…sdss^ŒÙБzmlruwyvtqpruxvutxwz~ƒˆ–‘“”“”—ŸŸ¡Ÿ›œ¡™™˜˜œš•”œš—‡ƒ‡Š‰ŠŒ‹‹Œ‹‹—²¯fTaekmljb]_`Y[cghf_^flmlgcdjrl^[Z]jzqb^cfjpsqtwuqqsprsrrqqpttsstvxyvtux{yvtxvvxwuuvxwm[Xl{{vuuvz|{yvsstuvwvvyzvstvwxxqptuusd^^\[XRTXJGG;05=C@AA?BFEAB@;;?A?AEL[rwhZcd^\^_Ve•ÈÏ»¼¾¼½¹½ÀÇʺºÑ¾glVNt™¥¬•ox¨¥Ÿ«ˆ]ipe`c`cffeccccffdb_`cghgc`_ciihgfcadhiiecghhjO7`uUq–z‡¤“x‹¤—’†xukdu‰Œ‚f_{…sb_\[YX[``[]bb``^ZUZ]^_\Z`]]\ZZ\[`a_^^ZX\W[[XSTUFŒËÝåêçåäääåäåääããääåæææææææææææææææææææååååååååäããáàßÞÞßÞÝÜÛÚÙÙàÞÚ×ÔÓÓÔËÐÑÌÆÄÁ¾¯§šŽ…~xupprtuvvvvtzˆŽŒŽ“š›ž œ˜—šž£¥¤¢¢¡Ÿ››š–”—˜•–š“‰‰ŽŽŠŠ‡ŒŠŠ‘¥» jVY`]_eimprof]]_\]hpmida^agllienri\W_hpul`_ackpstuurrvsssssstvtrruvwxwwsqruxywtuuuuuutuz}q[Yl}{vuvtsyyyywuy{wvxwtuyzwuxrlmqv|q^]bYV[ZTV[YSVRBEKNLMRPGEHIKKFFN[_ZUWZ^fc]OO€±¬•«Ãž¿¿ÁÁÀ¾½ÀÇÁ¾Ò¹y`nVIr”ž¨šo© ž¨^ckgc``gifefdbbdfeca``mjdig\^cjijhfjdT;41781++ &^‘•t`~¡œŽ‹Š‹—œ¤¬†cmrirxZ {X_a\`[\pve\`a]`a_XTUWWY[\Z][YZZWUTX]_[VTUUTSWWTN?6@SWQMHGJPOLNQQRSLKWcbcnqqtvwzzssqrqpuywy|zhqƒ{[Ss‚rbik\]bZRYckmkkf\Y`fhghkjgfgbehhfddeg^Xpƒ©²ª§º¸§ž¯¾®¤¬¸±¨­¶´­°ºµ¨©¸²¬¨²½µ¬²º»¯«¸¹«¥ºÂµ¦³Ãº¨¬À½¦²Æžh`lhgheecgfdgece`WONU\diikdbniZn‘cktknnlmoqollmomlkossqqrqsmpwka˜âðáÞåäìåãåéêëêìéêêìêäÝÜ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€>ŠÕîëçêïçççæçæççæææçççèèééééééééééééééééééééééééèèçæååääãââààÞÞÝÝÞßßÞÛØÖÐÒÑÊÆÈÊʼ»¸³«…|xssvxxvzy{€…‡“•–™™–‘‘”šœœ˜™œš•”–”‘•™—’”””‘ŒŒˆ†ˆŒ‹Ž’§½•bZ_`[[dhmprqjb\^ZYdnledeb_cjmlemsm`X]fovpb]\bnnqsuvrqutuvtrqqpsqrrruwuvtwwstwurvxvvxvrttxrb\l~xwxzztrvzxyxvxzxzxvvwxwvvxtlilt|w`[c]UZ^WR]]PRWJFINLKSTGEFHKIBERZ^\UX\^_`_KL‹¹©”³Éø¼¼ºººÁÇŵ¸Ó½sZmR>j“Ÿi©›”¢Œ\_kcVRYdc`db^aacdca^^_dgchfWW^daflgWC352495)##&5p˜”t_q Ž‡‘”——¦¨Ybigt‚’sV yU^c_^Y]ptaZ^]Y^^ZVXWWYWV[][XZ][XXWZ`d`UONUTRVVTO@7@TXPKGHIOONOOPSOIHS`acmpquxy}~wsqokjqwvvv~~op~x\Vv‚o]dh\Z^XU^flllnh\V\bifgjjeegdfhhfeeff]Xo‚ލ±©£¶¸¬£­µ®¥®º³¨­¶¸§§¸¹©¨¶¶±¬²º°ª²¹¸­­½»¬¦·Á³¢¯Ã»¨¬Ä¤¯Å j`lhgheechfdgebd_VNNU\chhigfmfZo€bktostpjmonoppoonponnrurqsmqwk`–Þîåãçãìæãäèëéêìèêìììæáက€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€>uºäìçæêééééééééèèèéééééêêêêêêêêéêéêéêéêççççççççêêééèçççææååäãããßáãäãáÝÛÝÝÙÕÓÓÎÇÇž¹±¨¢—Žywxyy~„…„ˆŽ“’•–—–’’——˜–“•›™“𣡗“’’•””ššŒŽŒˆ‹‘ŒŒ‘¦ºacc^Y[dimoqqkd__\[dppigea^`fkmflspcX[emwse[[blnssqrttuttpmmrtstttsrvyvuttvvxxtsvwvvxwuzuvueZe{zywuuwy{yxx{}vsxzxwyzwuuxzulfiqxxe^c_ZZ\YX\\TSTRIHMNJRUJBCINJBGUX][VX__[_cNS•¼¥—ªÈÈÀÅÁº¼¿ÃÄÄúºÔ»|_cNS…œ°§w…¯ž«^drdIB]igdkgahghjihghibnknfFFfrsmZA2*&5<=5(&.7/9l’•€df”œ‹Š˜”—¥¤xR\jjq†•qV„¡|Y^b_^X]mrd]`_\_^]\ZRLIGHOXWUWZYWXXY_fcYRTUTQUVTO@7?RXOIFIINOOPNOTNIGQ]acmqrwzz~zwurmkrywrry}qp{vXQqm\cfa]^XT^cghijg][bidcehihhifggggffgg^Xp‚©±£¦¼¹©£°¶®§°½³©­¶¸¥¢¶»®ªµ¿³«µº«¤²»µ¦«ÀÁ¯¨¸Á³¡­¾µ¡¥ÅǪ²ÈŸe`lhgheecdhfdbeg]ROOQU_higihldZp|`hslpqnonmmoqolpnprnorpqqsnqxj_ŽÛïèåèáæçæâæêêêêçëíîìæßÞ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€Bb˜ÏíëäçêêêêêêêêêêêêêêééèèèèèèèèèèèèèèèèææææææææééèèèçççèèèççæææääåååãâáßßÜØ××ÓÌÐËÆÁ¾º·´®¥—‰zxxw~„ƒ‚…Œ‘‘”–—™–—ž™œœ—–™›˜’œœ”‘’’•Ž…‰‡Œ‹‡‹”¬¼‹aff]Z_eimnooke__]\cnqlle^]_bgkkmpnbVZghuwi_^adpsroqtuvqqqpswvrtturruyvtvutxyvtxuuvwvxzxvzxfTa~|zzz{zxuxwx|~wswwvw{zvvyyxtkehqvyh`cd]YYY[[\]WQPMFKOKOSMEELRLFO^_`[SS[_[`cOU•¶ —¨ÅĹ¼¼¼ÄÁ¼¸»ÅÁÀÔ½z\`KW’¯ ª¢z‰¨™•¢Š`cphK?`khfmgajijjifefhfgcoiEEhtcK5(#*4;70,/488 +b‹“…je‹›‹˜“‘œ§£wScvsp—q[†ž‚e_^^^[]inf]_`_^\_bZQICCINUWVUWVVW_\]`_WVYTSPTUTOA7=PVOHFJIMOOQONSSNKQ\_aiprwyx{}xusrnlpursu{|tv€xZQn}n^ccZ[`YS[fnjhhc\Y`eehjihgd`ggffggggi_Zq„«³¤§¾»¬¦²¸®§±¼³¨®¸´ª¬¹·©ª¸¿¯¦±»¯§³Â¹©ª¾¾®§»Âµ§³¿´¢ªÇÆ¥®Å¡i`lhgheecbedccfi_RQPMQ`jijeeogWm“fovklmlnmmmlklmnnonnopppptosxj^Þñß×ÚÔÖáçåçêéëééììêêçã €€€€€€€€€€€€€€€€€€€€€€€€€€€€€€F_®ÞëæïêêêêêêêêëëëêêéééççççççççççççççççèèèèèèèèççççççççèèèèèèèèèçææååääåèåÞÙÚÛÛÔÐÌÉÆÄÀ½·²©ž’†}xx}‚…‡‹”“—–•–’˜  ž›š›š˜•˜˜—˜–’•”’ˆ‰‡‰‡•²¾bikc[^eimmnnlh_]\]_gnmnf_]^^cilkpqdUXdjtvl`^`brqprtsrvwuqopssrrrssqsvutzxuvvtuyutwwvx}vtuylZa{xvzyvutvvyzxyzwyxxywuw{vvsldhqw{k_dh_WX]\YZ\YSQPIJOLMPOJHLNHGUc[[ZVSZ`]_aV_–¶£”«ÈËÃþ¹¹¼º·¹¾º¼Õ¿nSfJG‹½À¾¨{¸±³¼¬‘’›¤–•›šš–‘™¦¥¢œ–‘’–œ¢’xtwJ5&-513AF6,3:6*"+i“‰od~š–™™˜œ¥tWj~wq’m\|Ži`]^`^agid[\^^[X]^WVUPQVWSWWTVYYY[YZ^]ZXZTRPSTSOB69KTNIFJINNNRROPTPKQ[`cjru{|z}€|ronnklnmrvz{uz‚y^Tp~o^ba_^`YS[cijgfd\\bgcghffjhdhfddfggfi`Zr„‘«´¥ µ¹­¤­´®¦°»±¨°»¶¯²»µ¨©¶º¯¤­ºµ«¯Á¾®¬º»­©¹¿´©µÁµ¥®ÆÂ¤­ÄŸi`lhgheeccbafedgbWRONUdmiheemgZp’}cmthijjnmmnlkmpnsojlmntpptpsxj^–åïÑ¿ÂÀÇÚèèêëéëêëíëêêéãက€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€Dgz›ØòêíêêêêêêêêëëêêééèèèèèèèèèèççèçèçççééééééééççççççççççççèçèèéèèçæäãããèêåàÞÜÙáÜÔÎÊÇ­¦œ…}|…‘‘˜š—˜’˜§¢Ÿ ¢ šš™š™”’•˜—’Ž’‹‰†…‰ŠŽ’´À’eioh^_dimnopolfabc`dmqnje_\\bgjiosgUUamruobY]dqqprtrpsqpqrrppptsuvttvwvwuswzytwvwxyyz{zuuzt`\l|uvywuutwxywvz|x|zyxwvvxvwwodepu{pa^ebYU]]XVZZWUQMKLMMOONKMMFHVaWW[ZVY_^]ddi’¸¯›«ÄÈÀ¾¼¼»Â¿¼¼Â¼¼Ó·nXgLR˜ÂÀÞ͉›æðçÉ«“—𦥧žž ¢ ™—𢠖‹ŠŠ†„Œ‹‚lG,13499;B;645/#"4mŒ”•w[x’””œ™š¤–p]p}yx–m`q|zl`^aabhhdd^^]^]Y]ZUVWUUXVRVUSVZZY]]`a`ZTQTRORTSPB56FPOJFIJNMLRUQMQNJNZ`dkrv~€~‚…‚yrqtpmoqpswzwz€wZRqo_df^Z\WV_finlmi`\bgfhgdehihhfccegfeh_Yq„ª²¢ ¶¶¥œ«¹­¥®¹¯§±¿¸­­·¸¬«´º®¤­º´©«¼½±­»¼°ª»Âµ¥±¾³¡ªÀÁ«·Æ™``lhgheeccbaedcfaWPOT[djiffdjf_s~cltlnpoqonnonnmopmkprpooptptxj]œçîʲ°´ÃÝêèêíèêééìíììæÚÑ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€@ks…ËòçäééééééééëëêééèççééééééééééééééééèèèèèèèèèèèèèèééæææçççççèèéèçäâàååâßàäãÞÜÜÛÚÖÏÆÀ»´³´®¡–‘†~‚”–•”š˜—š–•Ÿ¤¡¢¤£Ÿ ›–—™““””—ކ‹Œ‹Š‡Š‰‹‡¸Å™gekgagdimnprrpgabc]^hplnkaZ[bfmjmpdSTcknvvfWYdorqoqrqpnoqsqoqusqtwtrtvwwxuswytswyyy|{xpsywa[l{y{{wwxuyzxwxxwyxxxyzzxvwz|rbblrywdW`f]RU]YW^]UVPQMJLNNNQORQKMX__[\ZQR[^_daUp¥¶©©ÁÇ¿º¼Ãļ¼»½Á»»Ò»lUhOR’¹´Ë¾‡›ØÔÇ·_icddonknrledeaba`__bec`agX>2(72-3>;5971(  "7q†ˆ’|a~‰‰—’˜¥©•sgw~}…¡–tiqw|s``cbdmja^\[XYZVW[WX[[\\[YZWUY[ZXZ\_`a_[XTRORSSPB54COOKGIJOMKRWRKTPKNW]`fns{~}†„|squqmotprw}{|€xZSslZ`d]]`YS[dkdfjg]Y^eghhggggfhebbdffef]Xo‚Ž©±Ÿ¢ºº­§¯²­¥­·­¦²Áµ¨¨¶¹¯­·ºª¡°½±¦®»½±®½À°¦¹Â´¢®Á¸¥³Â»£°Ã›f`lhgheecbfdcaeg]SLOZ]_ejhb`lj^r“dktmpokkmnnnoonmknpnsvroptqtyi]›åíβ¬°ÆçîåçìçéçèëêêëçÜÔ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€=`s„ÁîéêéëçìèÝâãâåáÜßáÚÓÒÖÛÙÖ××ÔØÙÓÓÛÚØßâãáàåèæäåæíìäèëãééäæîéçñçéêêèçèêêäãååàÞáåàÞàÜÓÌÊÁ½·±¬©¨¨¡“ˆˆŽ‘”™™œŸœ›”–Ÿ¤¤¤¥¥£›•—™˜›š”˜™“’ˆ‰“މ‹ˆˆ„ŠŠ’¶Ã–hgmbadgdinnqtphfb]]agljomd`^]_ikptiVTblnsreVWbloppstqoqrrrqrsurvtrtustvsvyvtvuvwz|socD:Nr|xhVj{~{vxxuyyxwuv{{u{wttxzzyyuun`bqxuwiZ`h`TU\_\[\[ZVPJIJMOPROONGRdbXV^[STXaaYa^Y©¤ªÅÊÁ½»¾¿»¼¼½¿¹½Ø½kUcST›Ä·Î¸†œÌʰ„lsrhktuvz|vmmsoooooooorkuuT4.04/'4B<53*("""5n|Š™xfx‡€ƒœ™‹˜¦œ~mw}‚” •rvuja__^`v~h_`]\[Z^^WY\XTX[YW[YYZZXWY\^^]]^[WRTTSPRUJ:4CTOEGJIHOTPNOMLOIKZ]X[owx€€{„†{strsrloqqqvy|}s\Vo}j\_f][^YU]cfefjdXYceejkeeigafffeedddf_Zr‡’«´Ÿ©¼¸ª¥¶¾«¥®¸µ­®¾²¦­¶´­®¹¿«£µ¿­£°¾»®¯¿¾®§·½¯¡²Å½«®¿º£±Ä›e_jfdebcbbcbdcdg`TMLS\fjfgfgjgZs“z`lrommkjorpoppomlorpopooopmuwhcžëñˬ©¯ÂæêæçìëêêèëëêëèáÛ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€>gty·íèâÜÙÍÊÁ¶´¯²®©¨ªª¨¨¤¡¡¤¥¦©ªª®¬ª¨£ª¾ÊÀµ·¿À¿ÆÂÉ×ÝØÛâàåéåäçâàèåææåäåçêçåæêéäàáâäãÞÜÛÕÌÇýµ®ª§¦®¥ •‡‰“”˜š›—™œ••¡£¢¥§¤ —•”—˜˜š™š˜”“Œ††Œ‡‰ŠŠŠ”®µŠfhngcdghikoqpojc__^\bkmolgb\Y]fhosiWUchlqocXZbnttooqrrquupnqsssussutrttqrvvwwuvvbI60+.>f{}mXdx|wtwwwywtv{yvvxzywwwxzzwwyrccmpxzl[_hcXV^`\[]^]YQJKORTUTPJKN[g`SS^^UTV^a]^`Z_y–³ÅÉü¹¼¼½¹ºÀ¶¸Ù¸jVfUS”º·É¹Žœ½·º©yei_^ifgjmlcYUWVVUUTTSSX]b\G6,'.-&090(# 6q{‚š…p{…}…¢Ÿž¦˜uepvzŠ–“mfc]Z`g`_}„g`[\__[\\WZ^[VWZZ[YSSYZVX^[]]\]^[WQRRURQRJ;3@TQHHJLKMNKOSQIMIKWYV[qxux|y}‡…~{xuplprttwwy~wYTm|i\^dYW[WV`hmkgki]Zcjkiijjigfffeeeeddf^Yq„¨°¥¤³·¯¤®´®§²»²¦§³¹¦©·¹±®·¸±¥¬»¯£°Âºªªº¸¬¬¹½®¢´Ç¾ª°Â¾¥²Äžj`kfeecdbcdcdcdf_SMMS[eifgfhki]w–~clqnmppnlmppmkmqrqqqoorqqqntvf`êïÇ«­·ÌæêæèìêéëíìëíìåÜÚ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€Erxo«áÒ¾³°¡œ™•˜‘މ‹‘”‘‘”މ‡Š‘˜š˜•’‹‚©·¨’Š‘‘” š§­«¬³´¾ÇËÍÔÛàæâåéêèæåäêçææåââåãæäàßßÚÓÐÌÄ»³«¦£¯««¥˜—™”˜›  ¢”•©§¢£¤¢¤¢™žžšœš—šš˜‘‘‰xs…‹Œ‹‰Š˜¥ yehljfefjhipoloohddb^ckqqolh^Z^gkpriVR^hmqmbY[blpojmrsqmrtrqsspssrstrqtqprstvwtuJ,)#'456ZwzlY]t|yy}zzxvuwxvtwxzzyxwxyzuw|tfdlov{qbbjfZSZ^ZW[^\^ULJNPRRVSIIUag_MO^aYTT[]d`\`[]m©ÆÉ¾»º½¾¾½¼¼Ã¾¼Ï¹iTaPM‘·¯¼¥y¹¸ºªyktjhoijnnifgkmiihhggggckl`K4*-.2-..$ !7wzwš—}‡Ž…£–‡š¨”n]jnr„”•„j^\ZZ]l`bŠŠd\^]^\Y[]YW\\YYZYXZZYWXY[[Z\]\]^\XQPPTSPQJ<117MTOJJKIHIKNOOSOHL[a][``_WXWBozff\tÉì²sdfer|„Š‹£ÕÞ¶ÈæìÚɱ£ª›ªÍéíììææçïÂpazty“•„„ƒ‚Œ¨µ¤’€€€~}‚†‚‹’—¦ÀÚééãáãäáàâÙÚÚ×ÑÈ¿¹®¢——¡£¥¥œœ¡ •ž¡¡¦©§¦¢˜™ž›™žœ–—˜ƒv}ˆwhpo{—¨—s_e_bghkfefccikimqqojfcbbcgjopg]\[imop`T\`]`c]UXckpqoonlltqqtsopusoqsqqrqrttsqmnv}f07bzxm_]p}|zytuxrrwxwvuwxyzzzzz|wuxtjfmsu{wg_ekjUR\]\_^\^``][[][TS`aX[`]OT__XOP_d_Zeup^|ºÎ»µµ·»½ÀÂÁ¿¶¼Ú·gRaNK³©³ }–¼·¹¨i]xlWaqspqvwqnpmmmnnoookwsZA5346&!7r|b~ª«˜zˆ®¦‹¨Œh_eZ`‚¥Šj]aa`e^\]‡ŸrS^a][ZZ^^XVWYURUYUZ\\[[]][]^^[[[WRPSGBJPQMA;35CONHGKKJIEITPLIHGINOORKNORciQ=EV_ihftrotx~‚zi^p|k_aeYW[WT]cghjhbZUYcfijgefijfffeedddgYYt€®¯›£¹»­ ¬µ®§°¹´ª«¹±£¬¼¸«ª¹»´®·¾µ®´¿¹¬¯¼¶ª­¾Å¸©¶Å¹¥´Ä¾¦³Ä›e_jfdebcbbcbdcdg`TMLRZcfbfdfheXq‘z_inljllpjglppnmomopnoqrrrrntue_|²º¸¸·¸Íäèãåêèççëëêëìçá߀€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€Eiyad‹´Øåºzbku€ƒ‚Љ„°âÕºÄÛíݼ­®­  ÉêìçæìçèíÅ{cvz€˜’„…„‚‚’°·¢š–Šƒ‡†}||~~…„…“§ºËÞàÝßåçÝÞÞÙÔÔÑÊűŸ‡€•¢š›¦¨—œ•Ž™¡¢££¢¡ ¡––—˜—˜£œ—”‹‚……zgooz˜¡„dcfe`afihheccehlqqqomkhfffglrqng_\bkqq`R\bY]d\W\amopqpoqurutqorrpvspnopqrnstrqssp~k;/Wx~rf_t~{}zuvuutuvyzvtvyxwwxzywxynip{xzzna`ee_QZd\YY[X`f[W^d\SQYa`]][WX`]XWQ_aXYhurax³ÒÁ¼Â»¼Á¼µ¼Ä¹»×­hOaKK‰®§²žy¶³·¦iWljakturv|yldegdcfhcafefgVB6.2<)!7msb{ ­‰o„°§ª‘n^f]]ƒ£Šd^gb][`Vc”œmYbb_ZWX\`b[ZWTUVUTYY\][Y\a_]\\[[YSUSD@JRSOD;58>HLIJHGHKMMLPNMMICADF=AAADOiT2/<;IVTNS[\`mwk^r‚k\b`[[]UR^ehihgbZZ_bhhjhdefcbdffecdek^[p|Ž­­Ÿ¡·º«ž¬³ª¦­¹µ¨©³±«±À½§¨¿·ªª»Â²©±¼½­©¼»«©½À®£·Ã¶©°¾¾©±Ãœ`ahcehcddfdbcfea_PMMQXbgcbdfjfZw{akplhklkkklllmonmmppoopnrppotb`‰»¸·»¹¸ÅÞââêðèçëììêìîéä倀€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€Dmq[}´ÇÓç¸wduˆ†}‡‰»ÞÉ´»ÓãѲ¨¬«Ÿ¡ÊëìçæëåæêÀtZkoy—”………}„˜³µ¡—™–‰˜Œ}xxz|€„‡Ÿ·ÑàáÞàåãÞÙÖÕÕÐɧ’‚„–£ž™ž¬£––š››š›œœšš’•——••––•”…ˆ‡wqqn€ —q\igffebcfjeaacflrqonnlhgjfgkmllh`ZajooaS[\V\cYT]emprqonpqommoqrststqmnstsrvvssvsmwmA)Qt}pcV\agt|wmwvuuuvwyxutvwxyz{|zzxojqvuwyreaggXQ]aYZ_ZV[b_\`c^TPXab^\`\[a_YXQYb^[hxu`t°ÐÀº¿¹»Á¾·½Ä··ÑµmRbLMб©²¡€”²­´¢dQgcW_ipllpmd_a_dbadb_dihhR;4.69' 3gq`v˜¨Ÿw‡¬¤‘¡«‘n`f]]…£Šf`gb][\Ym™•iZb^][Z[\]^YXXXUTUUXZ\]\ZZ\a^\ZXZYSOMA@JQQKE=649FOLNJFEGKNOQRROJFGJI?;:<;8DN3!*'.48349;EXda^r|g]c_^]^UR\ceijjdYV]bbdhhdeebbdffdcdef[Zs­­¡ ³·©Ÿ°»«ž«¹®§±·¸°±¼·¤¤¹À±¤³Ä¶¥­¾·­²À»¬«½½­©¼Â³¨°¿¾©±Ã›`ahcehcddcdbadge`QNNRYchdeccig\wŽ{alpljmmpmlmoppnmomjjnponrppotb`ŒÆÉÉÎÊÅÊÝßÞçëæèìëëêìîçàà€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€Iifh§ÎÅÑë¸ue|‰Šz‡Š—ÈÞ°´ËßÔ¸©ªªž¢Ìììçæëæçê¾pTceu—•ƒƒ…‚{‚–¨©œ“‘’ˆ‚˜{vw|ƒˆ‡Šˆ…ˆ¢¼ÖäàÜåâà×ÐÖÒÀž‰†Œ•¢¦£›¡© ›š—–––˜˜˜–—š›˜˜˜—”•˜’†ŒŸŸ‰{rl†¡ˆc`fa`bb`elhdbbceinkoqoookedinnmnkb[bknodW\ZU[`WS]dinqonprqopollnppptsmnuxtsusoqvwr|rH3N_]UOSNMOVdqwxwvuuuvvxvuwzyxwsx{{zqknrtvzyiahl\TW[ZZa[Y\_^[^d_VQW`da]\YW]^ZYSUb_Xauxcr­Ñ¹½¹½À¾¹¿Æ¸·Ï³nWgRN‚¦¢·ª”·²²¨ws†pr{~|„‚zuvxtpsyxw{qccRA4)67%.`n_n¢¥˜‹©¢”¥¬nah[\‡£‹icga^\Y^}‹c[a_]ZXWY\_YUX[WTVVZ\]]\\[Y\Z\\\\ZSNTPLMORPB>935DONKIHHJLLLLPQKEDGJKEA=@@>GL7#'-+.20/233;ISSTm€o[]dZZ\UR^fhehkeXV_g`adcbfjhbdffeccddXYr€®¯£¤µ´§¡²¸§¡¬¸°¦¬¶·­«´³¥§ºÂ¯¤µÅ²£°Å´¦®¿¾±«ºÂ´¦µÁ·©°À¿©²Ã›aahcehcddced`bhe]ROOSZdieecchg\xŽzampmlookkllmnpqlmoqrpnnnrppotb`£ÞÝ×ÜàßãçããééäéééêêìíåÜÛ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€Jgj„ÈÌ­Éíºwg|‡…z~ŒŠžÒÞ½­³ÏäÖº¯­¦¤ÐíëçæêééíÁrUcdw—”ƒ‚…„…•Ÿ Ÿ™’“‹‰™}xws…ƒˆˆ‰Ž‘–ªÍÛÜÜßâ×ÎÙÑ®‰ƒ‹’‘™¢©ªš§¯–š••––––˜—–’”””“”‘Ž‘“Š„™º¸†wuŒ’t^hggd`_bhmgdbccdgjnpolnqmgeinonole^cknoi]^_WY^VU\`hnqnmrtsmqsqkhhjpuupotvtrrqppsuuvzW$ %3:FLJDFMNKOPKPevxxwvuuuuxxvxzyvvv{}}{umjrvv|~n_djf\NW_UW^^\]^[]e]WUZbea\^\W[\YWPQ_^V[owfq¬ÓÆ»¾¼À¼½ºÂɼºÑ¯kWfRLv™Ÿ¶ªƒ•º¶¹§m]{€ohipnnoi_WUZPWaXMS`G-5AB4%:;&  ,\m`hƒªŸˆ§¤™¦¬ochZ[ˆ£Œmgg`_]Xcˆž€`\^^]ZWUW[^]UU[XUVV\__]\]]\[XWWWYXSQWSQOPSO?=;76@KNIIJKLKJINRQKFHJKJHDCEEGPF.$-.*-1.26536>CMZr}l[X\\[]UQ\cffjleXT]eegiifhifceffdccdhYWq~¯²›¥¸±¥©¹¶¬¦«³«£­¾¶­ª´¶­®¿¼«¨ºÂ²¨¯»·®°»º®«¸Å¸¦¯À¹«±Â¿©³Ä™aahbehdddbccabgf^RNORYdidcdejdYw‘x`lollongjlkjloplkmpqnlmnrppotb`¤ãâØÝæååãßàëéèïîéêéëìåÜÜ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€Dk£×œÀë¼|j{„…~‰‹‰¬ÞÓ°©»Ùèϲ¯¯¢›¦ÓïëèæèçéíÃuWefx–•‡‡……††•››ž˜‘Š{…—ztq|€|‚„€ˆ’“”‹‹¨ÎáÕÔÚÛØÛÆ›xƒ“˜—–™¥¯¡ž¬­˜Œ”“˜›™——˜—‘’•˜˜“Ž‹‘„…§ÊĦހˆ’~b^gdhga^aefjfbaabfjllouumhhhgikklmj`biloj`_`XZ\UU^bkprlkorqqklplbepsuusqqrtrrsvtpqu{\)6CBIHIKKJKNNLQXTOYgxwxwvuutwxwuxxxzxyxwyxsnswwzn\[^caQQZRO_]Y\cb_c_ZX[bca_b`Y[^\ZTNZ^\]ksgo¨ÒǼ¾½Áº½ºÀÈ»¹Í²kU_MHo–™ “xŠ¡Ÿ±]AU^TPPQONNNKKMEF^b;%7J1";D4%7>' .[mbf}—« Š§¨Ÿ¥«‘qcgZ]‰£Œqkg`a^ZfŽšy_][Z[\[XWXZ_VVZYTVX[_b^\\^^`]\YXXWQMSROMNTQ@;::7;GOOLIFFHKNRSPKKLLJHDCIONNM<&'/**0..23115=EO\pwgXZa\[]TQ\cegijdXV]cefigeefccegfdbccjZXq~­±š¥¸±¥©¹·©ž¯¾¬¥µ½¶­«´·«ª¸»­¨µÀ·¬«¼»¯¯¿¹ª«º¿µ«¶¿¶§±ÄÀ¨µÄ˜bahcehcddgccdbcb[PMNQXcgcddeidYx‘v_kmjknlnonllnnllnnlmoolnrppotb`¤åäØÝçæåßÛßéèåëéëêééëåßà€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€Fp›ÃÚ±“Ãé½~l{†ŒŠ‘…‰Áçâ«ÍÛæÙ»©§¦š¨ÖðëèæçãåëÂtVcdu”—‹‡„††–›˜‘‹„u–’†|ppy~{€„‚‹’²ÉÕÌÒààЫ…z‰””™™•¡¤©¡ ®¨”•¡Ÿ›šš™•–˜›™“Ž’‡‘´Ì½¢‰‚p_ee`aa_\^chjfcbbadgmmprojjnjghkmool`^djmj`_[WZ[RTahjnoljmoongfjjdfnrtvuqnpstrrttrsv{lN;DRPHFFHLONKHOOQVUNSdvwwxwvutrwvuxyx{{yvvxwpkqvux{p]TUU`ZHKWY]]\^db_a`\Z_cc`_``WW]^\VSZ^^]itlm£Íƺ½¼¿¼¿»¿Ä¸µÈ´mXaQLl”¢‘t…›–¦˜dKXZQRWTTSTTTUVMRdX(*7%!6=3+44#!1[kbew‘¤œ‹Ž¥¬£¥©”tbe\_ˆ£uph_b_\iŽ”s_\[Z\][WVX[^YXZXST[X]aa][[\^]]\Z[WPLSSPJLTSD<9:68DNRNIDCFLQRQONOQNKJJNWWZ^U,")*&05../.-039BKSiwiZ^iYY[TQ]egefgaXW^cbcddadgedfggdbbchYXuŽ«¯ ¤¶µ¦ ³»­£±»©¢´Áµ¬«·¸©¦µ¿°¦µÁ°¤µÈ»¦­Å½©®¿¾¯§µÃ·£²ÆÁ¨µÄ—bahbehdddf`adbcc]PMMQWbgcgdbge\xv`klhjmjmppmkmnnlnopponlnrppotb`¤äâ×ÛãâáÞÝÞèéåèéìëéêëæàက€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€H}»×Éš‘Èë½}iy…Œ‹ŽƒÎé¿«½ÖÙäàÁ£Ÿ§˜©ÙñëèæçãåëÁsUaaq”˜ŒŠ‡…„Š˜¢¡›”„vƒ–‘ˆroy‚€€†„„ˆˆšÅ³‹Ÿ°ÀÅÒÜÕ»•x~‹Ž‰’–’šŸª«¢¢¬¤—Ÿ¤¢ž›—–˜››™•””‘¤Âǯšˆ…idjdeedc__eligeedbbdgmqpoomjkhhlptrkb[aini`aZVYXPSageillkjkkddfgihfensvsooqsuurqsslcUMFJMFADIMPPNMMNJRRUXML`tuwwxwvuqwvtyzwxywwz{ysmptvwzudSNOafJE]d\\]^_^_c_[]ejd]ZbbWT[[XRW[^][gunm ÊƼ¿½¾¿Â¾¿Åº¸Êµn[dUOk“›¦–r„ —›¤rU]dbbb]]]\[YWUTUWE%$% "7>201( !2[g_cs‰˜—Ž£«§¨§—xac^a‡¤Žxsh^c_]kŽŽo^Z]]^^ZVUY^]\YYZTRZ[]`a_[ZZ\YWVVXXSOOMLKORJC=;;68AIONKHEFJMQQRUWVTTQT\`Y_dK(','(11021/2655=ESmuf^a_\[]TP[bdgggaWU[_egjjgggcdfgfdbbbgVWuƒŽ¬±ž´¸¨±¿©§´½®¡¬»¶«­»¼¬«½¿­¤·Ã­¤ºÁ·¬µÅºª¯À¿¯£±Á¸¢²ÈÁ§·Ä–bahcehcdd`[_bagiaQNNRXchcgdbfe[ywbmlhjmigmplikopnkknnkkmnrppotb`£ãäÝáãÝÛåäáæèâäçììêëìåÞÞ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€@ÛØ¬Œ•Áï¾zet€†„†‡™ÐãÅÁÔÒÜâϯ¡ Ÿ˜ªÚñëèææåèíÃtU``p•—†„†‡…ˆ’Ÿ›—’zn|މ†…ylx†‚|ƒ…„žàÙ¨±´š»ÓÒÄ®‘|Š’™”—ž ª«£§¬£•œ¡ œ—‘Ž•š›˜—–”’—£½Õͱ ‘†{nceh`bfhfbbeilhdcbacfkjjmpqnklhffktskd[`kojbc^WWUOS^adglnkfddbaabcdhkirvqnqtrtyyuuqZ>6AHGGFFFKPTUTQNKOUOP[QJ\stvxxxwvvzurwyuuzvvxxuqnpswx{{lWGPgqXK_d\YWY]adfd\[chd][bcWU]_\VTZ^^[gsho ÊÈ¿ÂÀ¿ÁÅÀÂÉÀ¿ÒºpY^PNk—œ¤•zަ™žŸu[]_\[\^]YUTUVVVYXN9#&( :D42/$2Zd]ao„Ž”‘¡©¨«¥˜y`a_c†¤Žzth^c`]m‹m\X`Z]`^YVX[]^YX]WQW`__a_[Z[^\\[Z\YSJLMMLOTM@=>=9:@BMMLJGFIKJKPVVSSURV_d^hc6%&($*-(241.2965=GMgte[abZY[SQ\cfdefaVT\aeegfcefdefggdbabhVTr€Ž¯¶™ ¹¼©œ­¸© ³¿¨Ÿ²»²¦§¶¶¤¥ººª£³Áº¯¯À¶«±½»°­½º°«´»²¥²ÉÁ§·Å–cahcehcddfcec^cdWROOSYdieeeehcYx’xdnmikniknokknomnonllnnmnrppotb`¡ÚÖÌÏÓÒÖÜÝØßæãæïëìëììäÛÚ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€;–ÚÃ¢ŠˆÆí»ygw…‰€‚ˆ¦ÚáÊÒàÔäỘ˜£¢±×ïìéëèæéê¾sR]cu–†ƒ‡„ˆ”¡ –”—•‡mu‡ƒymt~~ƒ€€€¨êá±ÃÆ”œÑźͳ{{”‘‘—‘”“™¢ª­£¤“ ™™š›‘–š•”˜•Ÿ»ÄÇÖÓÀ¸©kklf_cefc__`chmlgcb__bjkgfnrrspnkhghlnk^]gkjfa[UWZUW^_aaehfcbdaabdfghjpnorspoqsslu~a?@ACECA@BEMPRRPMMOOPORRFFYuwrr{zuwwxxuty|yxyusw|wmjz{u{€p[K\plTUgb_YY[\affda_bfa]`fbXY_]ZVMU`^Ycomm—ÄÆ¸º¼½¿ÀÂý¸ÁѲlWdQKq”šŸ’v† œ¤ŸtV\`]^XZZYYYXXXPUUPN<&+$)-?E3.7% 0clY`s~~–™š¬®§§œy_e[Z„¥‘‚yk^]aft……k[b_\[[[ZZZYZ^ZWZXSS_]]\Y\^Z\^_\Y[YRMOPMJOQME@>?<7:AIJLKHFGJOQQSYXTSU^idelN)!#%')+/2110//26:EIavhY_`[Z]XT\bgjgg`TU`fgfefgfecffffeca_bVXs«¯š¤¾·¦¤´º¬ ­¾±¤¯¾·«±¿·§ª¹º§¥µÁ·«²Å»ªª»º¬ªºÀ±¦¶Áµ©±Ä¼¢´Çšd`jecdadced`aacf^ONMPYbeciccgfZv˜‚`ipmjjflomhkpngmoljorqqpnpppt^b™ÑÊÀÅËÊÌÊÍÓרÛßãëëéêêãÞက€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€E‘Ì´“ŠÎïºwcr€‡{ˆ¯âáÅËÛÛÜѲ“‘¡©ž³Øïìéêèæéê¾uU`dr’—„€ƒ}‡™¢œ•”‘‡mqŒ“Štgn|„‡„„…|¥äݲÄŠ°ž²å˃•Š‡Ž˜¡¦§¤¢¥¦›—œœ—™›™•’–ž™’›¹É¿¼ÕØÂ¹§}fcccah_fe^\_gojjfdfd``gkjjpsqrnnjghnomo`^ipne[[XURRZabcaacc`^_baabdgiknoppqqpoqrrriQBFBCDCA@BDKPTRPNJECPNHICJcvwvwwtqsvtuuvy|{tyzuruurmquvzv_]mm^S_j_[^^[]acdbeccdc``c_UV]]\YPT_b]eqsmšÆÀ«®´¶Ã¿¹¼À¼ÀϤbQcRLq”™¡”v…¢ž£ŸtV\`\^XVVVUUUTTUSSORS@0-(*;?668) "-_o]\n€}––ž®±©§›y`d\Y¤”ƒxm_\bju‚iZa^\[[[ZZZYW]\ZZVRVZZ]^[[^_]\[XVYYRRPQPNPQNFA?@=954?A4?ewquzrpuxxxvrr{}wwz{yxyvqtvrr|~tjqlTK^pm^\a^Y\cedb`_cdb_`gfWRXYZYRR[a\aknnÎÔÊÔÚÜØÝÓËȸ¸Ñ¬iUcOIr˜—¥šx‡ª¤£ sT]`Z[WWWVVUVUUUOPTSD=<>BFHIHIJJHILLNUY[`d]^th4!#$&'*-0110.-.035@WkcZ`a\WXTT_bcdejdVT^ceghhfffgbcdefedceYYtŽ®³¡¤¸³¨ª·º©£±¾°¥­¶²¦¬¾»®¯»¼¨©»Ã³§²Á¼«§¶¸¬¨½Á±§¸Ä·©­Â½¦³¿”c`jeccadcaa`cbcbXPNLOXbfdcbeidWvˆcinkjmkkmmlkmmlnmlljmonnqsmmwa_œÖÒÊÍÐÊÉÍÐÎËÎÕÓÊÏÜçêçÝÖØ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€J€®³œ}‘Öô·{qy‚ˆ}|–ÈèæÕËËÈ¿¯š”Ÿž¤Ääîìèéëèëé¾~jqluŒ}~„‘““¢­¥›”’„on…}opr|€}}…†}¥äߵürw¢Œ“˜‚xŽ“‘”Ž”•‘”˜›£©¥žž š–š™—““–—˜˜¦Èм®±ËæØ¬}jgfff`^Y`a\\`dfilkhhgcaa_dkia`elilnlgiomd]bjjbZZWNMX^^a`_]ZYZ^`aehikmlikjlopnnplrm[KB=:>=<=ADHJKLMPRRMH94402Uzyqsvqryzzttuusuuvwutw{|yqvtrzztzo[T[hmc^]^\\aedcbcedbbbdfWQY\^^UV^a^dnnh“ÇÑÈÌÖÞâåÛÙâ×ËÖ°mZfQIr˜—¦œz‹¬§¥¡rT]aXZWXXXWWVVVTOX[D!>^H5=B32;'"%!5al`\brrb~ Ÿž¥›¥œ‚gd\Zxœœ‹zuhal}zqj_X^\\[[Z[ZZYY[\YXWXYYZZY[]^]`\[ZZ]\XSQPOOTTNFA<:;<@DBGJJIJIFIMNPVYZ_og]aO$! "$$&(+.110/--/15;OfdZ`c]XYUV`deggicVT\_dfhhfdfgcdefedcbfYYsŽ®³¢¦¹°££¯®©£±½¯¤­¶²§­¼¸ª°À¹¬­º¿³§°¼¹­­¾¾²¯º¿°¦¹Æº¬²Ã¼§¸Ã”b`jebdadcabaccbbXPNLNWbfdbaehdWv…agmklpnkkkjklljlmmmomlnpnppou_a˜ÓÐÉÏÓÎÎÆÊÎÎËÉÌÐÍÝêíéÞÖÖ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€M}ªªŒ“Îí®vpw†yz—Çáçæ×ÉÁ¦’‘•™™¦Êèîëéèíéë辂qxozŒ‰˜Ž†™¬¥œœ”‰wu‰|jlr~‚€~„‡}¤äàµÁ¹u•¤˜‹u~†“’Ž“‘”˜˜¥ª£šœ™—™—š›’”˜–³ÕÌ´«®¼Ýبuhgdbe`][_^[]abbhmlgggdc_\dqqieedfhhhklmgebfmkb]XRNS\]\_]_][Z^becefdeijhjhjopmmpnscLD?;=><:<@EIJKJKNQQPPLE:5B]puwutspswwtrtwusssxwtsuyyvtuwww|}tfc__]dngZZ^a]_dfcfhe``a]dhYQZ\\]WX^a\bjim·ÄÀÄÈÌÛÝÓÒßÝÑѨhYiSJr—™¦œ~Ž®§¨¢rS^`XXVVVVVUUTTRQcZ-:[\NF?007(;dh^_akra{¡£ ¤ž¤Ÿ‰mc[[x™™Œ~ulgozkd]Y][[[[[ZZYYZ\ZWVXXXTYYXY\^ab\Y\`b^VKNQQQTQIEB???@@AAHMJGHHFFJKMU[ahsom]6 "#$&)+010/..0157F^aZ_d^YYTS_fihee_SS]abgjhb_aegfdcbcddfYXr~®³”·²££²¸ª¢¯¼®£­¹±¤¨¹¸®´ÃÁ«¦´½±§´ºµ©¯Äõ²»Âµ¨¶Àµª´Â»©ºÄ”a`jeccadcccacbbcYQOLNWbfegcceaVu‚akpjhmnljjllkklqnhhmompokmnnr\`ŸÓÐÎÑÊÁÆÇÌÏËÅÅËÒÓáëîëàÓÍ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€H}œ¨ŒÎë©rnt}‡{zœÌÝæîØ½¨‘ˆ‘™™—”¨Ïëîëèèíéìè¾…v|qv‰Žƒƒ“œ—†“§¤™‘Œ€~Š‹{npwƒƒ€~‚…§åâ¼Çº“‚§”—Œ‡Ž“–—Ž’•˜š›¡ªª£œ˜˜•“—•’“˜˜ÂÛ讬µÒÌœndf`]a]YXYZ[]Z\bfllijic^_\cnpld\_cecdillmh`cnm_USMPZ_^]\aa_\\`cdfihdeikihijmnnnornW@==:;A=:;?DGHFILLMPQQHKNPMIO]jsupqsuusuywtvxvrwzwuuvwytuxxyxqXTZiidgc[\_a^]`daceb`cc]cj[QY[YZURZ`]aikq‡¤¥Ÿ¨±¶ÄÌÌÊÒÖÑΤfYhRIr™›¥œ’­§«£rS]aVWVUUUTTSSSQNXI'!+>LRQA05=) >eg___gm_v›¤¢¥£¢¡rcY\y–•Žunor€xg_][][\[[[ZZZYZYYZZZWRUYYXZYZ^aZUWZ]]XPQSRQRRMDCAABA?=BKNHBEHIJLLMU^hrpqvT!!!"$')/010//0255?T\Y^`\XYSR\ejccf`TS]bbccdeddcedcbcdeffXWp}Œ®³˜›´¶«§³º¬ ¬º®¢®½·§ªº¹­¯»º¡ ·Ã³§¶Ã¸©®¿º«¬À±¥·Â³¤²Á¼ª¹À‘a`jecdadcfeababd[QOLMVafed__cbYyž‚blqjgjiijlllmoojjkmmklommomls]^šÍÊÈÌÇÁÇÐÎÊÇËÏÏÊÕãìíêßÐÈ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€H‰Š—Úïªqmt~Œ‚~£ÓÝãíѯ“‹Œ”™œ–¨Ñìîëèèîéì辆yrp…}’˜ˆ‚‘¢¥ž—‘Š‚‡“yjs{…}€‚†…ƒ¬æäÄϽ‘‰‡‘ª™Œ–œ„†‡ŒŽ‘––•™—–›§«˜›•”–‹••’Œ¥ÒØÏ¿³¬µÌ¿gae`[_ZTVXVTUWZ_eihfjlfa_\ajooh\^bdcachmig``ii`ZRKOY[^a___]\_dgfdhhddhhefjlklppmtgM:;>95D@;;>CEEAJMJJOPNSMORNKMM[oupqttvsstsopuwvwwvvxxwvqnt}zstiWWptbZY[]\\__`fgaadefd]]gYPY\Z[\U[da`hlb‹¶²œ˜›ž©°°¬µÅÌɪjYfOHsœœ¤œƒ”®§­£qR^`VWVUUUUTTSSNV]K2#!.A;/9A%#>dg`^\ef[o•¢¢¤¥¡£”ubX]{•“Žƒupstwd]^\]Z\[[[ZZZYZYZ[XUUUVWWY\ZX[]YYZZ[\ZPOQRONNLID>:;>@@EMOE>BILILLLQW^fksn? !!#&(/010001334;MXY^\WVZVR[cghhi`QP]ecegfdbcd_acefffffXVp{‹­³™œ¸½¬Ÿ­»­Ÿªº­¡®¿·©­½º¬­¸¸©«¹¼¬£²À·ª°¾¶ª¯·¾°¦¶Â·¬®À½«¶¼Ža`jecdadcgfaa`bd\QOLMVaffe``eeZv™€^gomklhgopjgkljlghllmnlmqsmmxb_–ÎÈ¿ÅÍÌÏËÉÌÑÑÌÎÕÔäïïêßÒÌ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€J†—„—Öè¥nr‚Šƒ§ÉÚæàÀ ›  Ÿ™°ÓéèçêéçâììÁˆwyltˆžš†€}‹¢§˜‘˜Ž‚~‰’Œ}qt|„†ƒ€‚†‚„¨áÝÈÓÈ’„މ›¦„ˆœ‘€|‡Œ”’“••”™ ¨ª¡““žœŽŠ’•‹‘¶ÓÒ¾²©³½¥|feb_[XWUKPVWUSSTcehknnjg^\_hprlcZ^ccadhgbgecgg_YQFN][Y^ab_`a`cffffeddfikgpslgimmrY@899:=?>:99=AABKLFCDFGKLLLQXYUjwZ( #&)+.--/231/26=HRX[]WW]WRY`ehde`TRZ_^gkfacff_addcdfi`RXwƒ“±°—Ÿ·º«ž®»ª¢°·¢ž±¼²¡­¿¸©¬½»°«µ¼±©­½¸°²½º¯­»¿¯¦·À²¨³Æ¼¦¸¿d`f`bfbeecdbbaad\PONPXac`fgbdfZx›€cnsnhjmjkiilmklifinlloqnssnqx`bÈÆÉÌÊËÔÉÍÔÔÌÊÎÎ×åëëëßÒЀ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€N…”Œ‡™Øîªx~‰”ƒƒ®ÑÜßØÃ±»»º²¥šš ­ÍäêëêææàêêÁ†t{xx……„•¡zoq„¡¨›“—…‚Šƒums{ƒ†ƒƒ‡{©çßÉÜÑy™²˜‚–“„‚ˆŒ‘’‘“—”‘’—££›’•Ÿ“Šˆ~гÏ̾µ­®·±jjhd_ZWTSPMKNTWURY^ejkjhha^`gmpmf__acbcefghb^ehaZKEP`^Z]^_^`cdefdcdedcejoqsqkfgkneQ=7889<:;:<@DCDLEADGKR[WOLQPJKTN^pvrqrotssssuwywruxsruuxrqvyywqlddg`ceRW\]]`_\\`bca`bcca^WR[_Y\aXX^]dnhfŒÂ;ÁĽ¼À½¸±¦°Ë­o^gPKuš ¢žŒ•¨¦²¦rTZ]VUWUUUUUUUU[LX_>(=<27>)Dfa[cbac[f” ¥¤¦£šƒm^`y–‘†€zz~uuwg]]Z[\Z]][[[YWYVUWVWURPWWTUUUX[YYYY\[VTQQRQRPKEC?;;?@@CLNGCCGMHJLNRXYYgbD! "%)+.--02320407GSV[b\Z\VQ[chb]aaTPZehfgjiecedcccddddcTYw‚®­š¦ºµ§ ®²§¢²º¥Ÿ²¿³¢«»·®¯»´©¨·Á·®±À·©¬»»¯«¼¿¯¥¶¿²¨µÈ¾©ºÁ‘edibce`aaccbcaad\RQOPX`a^dfaceYwš`ipnkkkkjjjkmmnlmnljmnjinmiksZ]šÑÍÅÆÎÍËÈÊÐÒÍÍÓ×ÜèíìèÚÊÇ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€O‡žŸ¥—£Ûë¢s{€„Œ{ƒ®ÒÚÚ×ÓÒ×ÍŽ©•—¦±Íæïìâáëäçå‹sts{}|…˜™†wlrˆ¢«Ÿ––ˆŠ”‚wsw~„†…ƒ…ˆ‹~œçâÆÝÐ’|•Ž”Ç¸}ƒŸ¤Ž€ƒˆ‹’’•˜•‹Ž’˜œŸ˜—™“‰”¶ÍÊı¥¯¸¨†mnje_ZUSQPNLLNPRSSYbhkkkkga_chmnjb_`bbceeffa_gkaUJFP]\Z^a^]`dfhgdhgd_\_hpklnomgc`SF:7878;9:==?BDABDEEHMSTTMLPPIIONWlxsnontsrrsssrutvyxtu|xrpswzulrtm^ZhjNR]_\``\[_aa^]]^^^\WS\^W[]V]ia]jkfÅϸ´»¼¾¿½Áü¿Ò¯p^hQLvšŸ£ Œ–ª¨²¦qSZ]WVYTTTTTTTTTMW[? $&#-?=16<) 4U]Z^`ec\`o„˜¡Ÿ¥£ ‰m^dy–Ž‚}z|€xsrd\\[[\[\\ZZ[ZYYYWWZYVUQUWVVVXYXXZZY[\YQOQSRPLFCB?<=@A?AJMHA?FPOLJJNS\dfM/!$')../03332657@LV[]ZWXRPY`deaecVP[efdgjgaafheccddb_fVYv€«©˜ µ·¬¢®³© ®¹«¦³¼µ¤¬¸´­¯¹º­¨µ½³ª¯Ä¹ª­¾¿²­¾À¯¦µ¿µª´Ç¿©ºÁ‘dagabfbddbcbcaac[NMMPXadacc_bcWw™|^gnmklklkjhhhjjlkkkkmmjknnjns[_ÕÐÁÀÇÆ¿ÍÆÇÌÌÌÑÒÞéîîëÜÎÌ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€L‰©°³¤®áç›mzyx†~‚¢»ÂÄÆÉÐ˹­ª Œ–™¬ÇáîèäíæêëÌ•rnqyyx‰ˆvz‡˜›“‹Š†‰…zspy}‚€€†pŽãݺÕÎ…™‹”ÜÒƒr•¥™ŒŠˆ‡ŽŽ‹„ƒ†™¦¨ šœ¡£¦¤Ÿ£²½¿ºª£²½¦mnke_YVTSQSSOJINSTV[bhllkfa`dimlga````dgfgf_[bibVBFT`_\]^`^`cehheec`[Y]goolhfb^VPD>9:9779<<@B>AB>;?B?>@>@?@BGIJIFIJFGJJGAWszssywuutsrsuv{wvrrx|vrnpttrqppgc]Yit_R]`^`^[]Z\]]_a_]_dbY\^VWWZX]^dsihŠ½Ë¾À¿µ¾À¾¿¿¸¿Ö¯o[eOKs”𩍋–³±°¦rT[^XWYUUTTSSSRVUNNUI1%+$1HC369(7ek[^c_`ZW^m}  ¢¤lbm‚…z{}€…~ojbYUTW][ZZYYYZZXUVXYXVQPPRUTSRPTVZZX[^]WTTUTSPKA?=:<@CBDJMKIGKSWSRQQPW_W@3." "&',.013344722:FQ[bZVYUT\ab`ci`PO[bcffaadgebcdcbabceUWt~­¬›¨º°¡ž±·¤¡±¼«Ÿ¬»³¡«¹²¦¬¾¶««º¾°ª¶½µ«¯¾½°«»»®§µÂº®°Ã¼§¹¾`dibce`ba`bbcaabZONMOW`b_cb_dbXy™{bmokillimmkmjhliklkkllmrrrqtw_eŸËÈÉËÈÈÐÎÊÏÕÒÎÓØÞåççæÙÐÔ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€Fˆ«««¥­ÏË¢Ž Ÿ‘˜šœ––›—”‘’–—•“””œ³Â»¶À¿¼µ§–ŒŽ””–”–š™”Ž’””˜—’Œ‡ŠŠŠ‰ˆ‡‡†ˆ‰›­“†ž›‡„Œ¡³Ÿ„|„‰’›š–š˜–•˜–•𡧬³¹¼¿ÅÌÎÆ¿ÃÌÊÇÊÈ÷¶µšxnokd^YXXYTSRSUUSPTUVWZ_fkfdcccgklf``eb_ae]``]_f^MBMZ^[\`caadfddca^]\[ZYZ[]]XSTWPF9:;<;988<:;?>=>>?>>BFIHEBGGCCGFBA_wxtvwtutrrrsssvuuvvxxxrmnttqpplc]a`chbX[[]_`^^`bb_^^_^\baZ\^Y^bf[aa_mmb‡¾É»ÀÈÅÀ¾º½Âº»Ë°nZdOKr’§¦‘𳝴¨tV\^WVXVVUUTSRRPNOQTVNAABJO=2::' 6oz`[de_YV^hq‚˜¢¨©‘tho„ryƒˆˆ|nga[XXWZ[ZZZZYXYVVXYVUTQPQSSQOOSUW[[XZ][URQRQQOKCB>;>======@FHGFECA@?>?Snystwtsuvvvutssruuvxtptrnptsqpnjg]^d_`e`\\\]^_\\^_^]^__Z[[Y\YVb†~\Ya^knh‡¹È¹»Á¾»¿ÀÁÀ¶ºÎ²pZeQLs“œ¨¨‘œ´±´«vW]^VUVWWVUUSSSQQWWQSXVTV[S:0<;& *e}eZaf_ZV\fit‡›¨ª”}opƒŒ{nz‡‹‰{ob]YZ]XY[ZZ\[XVWV[][YTRUWVQLKGGOTVYZY\^\WSSTTTRNHGC@@BB@EIGABGNTXYZYYWSN98<<4(! #%'),/1113539:8>O\^ZX[TPYageac_SQZ_fcbdfca_`abbbbcceUWt°°›¥º¸ª ¯·«¡©·¯¤¬ºª™£¶´«®¼Á¯¨¶¾±¬¸¾µ¨«»¼±­ºº°«·Á¸§°Ä¾ª»ÀŽ`_e`bfcff_aacbaaXMLKNW`c`b^^c`Wz˜z`ilkmniigjkjkkhkkjkmjhmommnrrZc£×ÒÇÆÉÇÅÑËÊÏÔØÛØÛâæêéÙÎÓ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€K…œ‘–š–›¡­¦£©ª¬ª¨©©¬¬¤£°ª¤ ¢£¢  ¨¥¤¬±§¢«²±© £¨ª©¯ª£¤§ œ£¡§©¤¢¦£œ˜ž¡žž¢¡œš™™›ž¡££ ™¤¡”“™¬ ¡›—™—–¡™Ÿ¢¤§¥§±®±¹ÃÇÇËÑ×ÜÞÜÛÝÝÚÚàØÏÖÛØ×ÓÖÒÓÆ–mlvqg^WTTUWWVUTSSRSRQUZ`celd`cinojacc`agf]\[[Y_h]CDT_^[\`dgfgd]\_aY]`^YUUWXURQOJA;88889;;;AB<9>?<;;88=@@CJQF><96:Ci}{ntwsvqtutqqtxwuvvtvyxqqstpoomlf]]\[`ba\\\Z^b_\^^^`a`]_[[]_XVh‘—nV[`mhdˆÄÕÀºÄËÆÄÀÂŽ¾Ïµr\fRNt”˜¬¬Ž™¹µ±¬wX]^VTUXXWVUTSSUSSTSPQUNNVV>1:8&*^xf`b[_[V[dekz‘¢§”ƒtpƒ‡yp|ˆŠ‰}l`\WVZY][ZZ]\XUVX^ZX]XPRRPF@DCEOQRVYZ_b_VSSUTTSNKKHDCCA>BIJDDIORX[ZXXYTL8:>B>0! #&')+/001357:;<@JV^UU[UPW^cceg_QS]_cdfhihebca`acdb`gVXt°°™§»µ©§³³ª¡«¸°¤®¿­¡®¼¶­°½½©¢µÀ´«²º¶¯²½»±°¾½µ¯ºÃ¹§­Á»¨¹¾‹]chbceabb_aadbaaXPOMOV^_\`\\b^Uy–u^jlhjmkmfjmgjnghkjhlnmlollnqqYbžÐÌÈÉËËÍËÍÐÎÉÍ×ÛÜäéïíÛÍÑ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€Fž–“”“–³ÐÛÖØÛÙÚÙÙÙÙÙÙÙÙÛØÕÔÖØ×ÕØÏÒÕËÉÓØÙÙÙÛÝÛØÕÔÔÔÔÔÔÔÔÔÔÔÔÔÔÔÔÏÏÏÏÏÏÏÏÌÌËÉÈÈËÍÍÊÌΟºÇÄÀÀÄÄÀÃÊÇÇÈÉÊÊËËÖØÚÝàãåçæåäãâáààÝÚØÙÛÜÙ×åßÕÜÆˆkusia^[WUWVXXVWZYVVUSSV]beihfcejmmifb^]ab_Y[\YZc[DCX__`bfdeb_^_`_^ca\WY\YRPWWPH?=CB=9;=88AG=:?A<:><<969AHKQJEC=9CRm}zrz{tvvutssstusqsussvxtpqpmrvrndYX^_`d_]]^]^abaa^^`__d_X]]`^Ta”¥pVbbkhgŠÄÒ¾¿ÇÃÁ¿À¿µ¸Ë¯r_fPMt’šª¨‘ ·°·¬tW^]WYXXWWVUTTSTRPNORWZTPRR?6;6$!&[wi_^YZ\[\chikƒ–§™†~ut~wr~‡ˆ†xi_XXWX\_ZYZXVXYT\[YVVWUQURDKVZ[XXQO[bceac`TRY]cfifa^adeeddccbbeVVsƒ’®¯˜ž¶µ¦¤´¯ ›°¼§®»¬ž©¼µ¤©¸º¬¥¶Ãµ«µ½¹³´¾¸ª±½Æ·©·Á°œª¾¸¦ºÁ]cfacb^a^c]]abb_XMKJMV_`\abcc_[|Žr^klikmhknjfikhghkkknnkjknomor\d¢ÒÍÉÍÑÐÑÍÌÐÔÒÎÓÜÜéìéåÙÎÏ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€C~¥¦£§¥¡¬ÎçéèìîïêêêêêêêêëèæéîîçààãåæáÚÛãéçäãåçéêééééééééééééééééêêêêêêêêíëèççèééååéëßÓ×åáßàäçæååãääååææçáâãäåæçèææåäãâáááßÜÝßßÝÛÛßàåÅ‚gswlb^[VUXVXXWVVVVRTUTSX`ghgedfjjigcba`ab`\ZYY]bXDAV_bdehfjd^\^`_]\]ZWX[WPSVSKC<:?C?::<9:AC=:==99=?<:<<>ENJMOOLKMQ`swqsurrttttsssrytrssuxzsnnmkptooja]]\[^_`a_]`a]__\\``]]\X_^a_U^Ž—kW`aloeˆÂѽ¼ÂÀÀÀ¼¾À·¹Ë¯r_fPMt’œ¬«“¢¹³¹¬tW^\WXXXWWVUTTSPQRTUTSSOPVT<099"!" %Wsg`a`caZYaedfv‹£Ÿƒwt~zwЉyi]VY[[[ZZ\ZY[YWZXYYXXXTOURE?IPNNNPTWYZ\^\TQWWRPSRPLGBBBBEHJIGINSWXZ]\WOHA8132(  !$'-,,,-/246888>JUZZXXQO[bcb`b_TQZ^ahic_bcbedddccbbbUWu„‘«ª•Ÿº·¢²¶¡ ³º£¯º¬¨½µ£©º¸¯¨³¿¶­²»²§«¿¿¬ªº½¯¦¶¿³¨±Ã»§ºÀŒ]`c_ccaecb_acaa`\MLKNV_`]_`ac_\}‘v^ikiklinkggigfjlhjnlkkjkmomor\d¥ÓÌÅÈÍÍÏÐÔÔÑÒ××ÒØèîéâÕÎÔ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€Gz¢£ §«§¢¹ÙëêçéêææææææææéåãåéäÖÊÃÅÀÅÒ˽½Ùáéìéææèççççççççççççççççççççççççéççèçá×ÎÎÍÐÓÍÄÇÑæèéæäååäããääååååéééèèççççççæåäããåäââäãâàßáãå¼zgvuj_YVRSV[[ZWTSTVSUVTQS\ddghfcdhkhcaa``cd_XUX^aTB@S^dgdeccb`\ZY[]``\XX[ZVTSKB>::>CB=9;;BS^gidb`[]_^[YZ\_^[VUVVURNC<;;CB?@@<;:<=<;:986:;;>EKMOPLEFOPLO_szrsvssttuttssrrvwuttsxojihptnficZX]be\`b^]bb\`b`^^````^^XX_]`\^Z[]`gjh‘ÇÔþ¾¿½À¿ÀÀ·¼Ð®q_fPNu”šª¨‘ ·°·¬tV]\VXWXWVVUUTSSSTTTSQPPOUT>396#!Poeaega\UW_ccfam‡—™Žztyts‚Šˆqe[WZ[YXVWVZ[VVYZYZYWWXXWQUOHIOPQMMOTWXXY_]ZWTSRRQQSL@AGDDHKJHINTWY[\\YTQK>40-07=?3&#"#&+),.-+-274578==CLPNKILNMJMYq}wsvsttssssttwvwwtvxxtmkjjprkfjf]\`bb__^\[_b`_^^__^_`]^`\[`_\a__\Y`jij—ÊÑÄ¿½¿ÃÃÀÂŽÀÒ­p^fQNu”šª¨‘ ·°·«sV][VWWXWWVUTTSRSUUUSPOSPTTA7;5" Qqh`bb\YWZaabhcez›”uzooƒ‹ynf\WYYWXXXY]\XX\[VXZYXYWUQWVNKNQSNNPTVVX[da\VTTVWWSTLA@FBBEIJKMQTXY\\[YWVQE;40<<>??;98:=@CEKHGKMLJIIXp|ursqssrqqrstwtsrruxvnjjkjopiehbZZ^__^]_a`_^]`\]aba`^]^_][_`\Z[^^Y`g`jžÌÌÁÀ»½¾ÁÀÁÀ·»Ð¬p^fQNv•œ¬«“¢¹³¹«sV\[UWWXWWVUTTSUTSRRRRRRQWWB6;7#Psja_^^[Y]a__fecrˆ˜˜„y€pn…‹}tmi]VWXXXXW]\YYZY[VXZXWWVUTVUQNOPRQLLSTRU]_\[_`[VUWSSOEDFEGIJJJKNQXZ\\[ZZ[TKHEANeoXG1#!%%$+,-,+,035579:>HQUVZSOX_adbc]OMV]dedcbedaaaabbcbc`SUt…”°°•ž´´¨ ­³¢Ÿ­¸«¡«¶³ž¢·µ©«¶¹®§²»¯©´º¶­®¾¾®­»¼¯ª¸»¯ªµÁ¶¦¸º‡^cfbddaeb_`b`^a`XNNMNT]abc_^b]Wz’vamogdhjkhikhgjnkjkkhillilmlmpZb§ØÓÐÓØÖ×ÛØ×ÚÛÙÕÔßæéêèÚÑ×€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€RµéÞâíêëãêéäåççèææææææææääåääæéìèèèåæììåççèêíìèäèèèèèèèèèèèèèèèèååååååååççèéèæâßãçêéææéìêçæéêçäãççææåäääççèèééêêèèèèèèèèçéêéæåæèäèêÏq~yYSPTVTTVOLLNPUam`YUVUSV^aceebbgmmc]^_acd^ZQR\ZH9BQTTVWXSUX[YURSUVTRTUTOKA?97<>=?BEB>?><<@@AB@??@?;65?=;=@ACC@=?DB>::;<>AHIJKID?(%**('')-145679:99BLSV[TOX^aa]^[RR\bdggcacc```aabbcc^RVu„ޤ¡”¤·®ž›¯º©¡¨²¨Ÿ§´¯¤«·¯¤«¶³ª¤®·­¨´¿»µµ½µ§®½¿¯§¸Á´©·Ã»­¿¼†]`c_bb`dabaa_`fcVLMMMR[`bb]\a]Wz”t^jnnok`chmkfhkhihehmnklhkmklpYa®ÜÒÊÌÒÓÖÌÔØÔÔÚààáèëíéÖÉ΀€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€O¼ùèÝäèìéééééééééèæååçéëçççèèèéééèèçèççææèéèæåæççèééèææççæææèèçæèèèèèèèèèèèèèèèèééèèççèèèèèèèèèèèèèçççççççèèéèèèééèèèèçççéêéçæèêëèðÊ‘ƒz_V[PLWTILMVXY_\]iifaZUTWYb_^`_\aik`V[^^ce`SOV^UHLXYTLKPQKPQRSSSSTQRRPKE?<9426;>???A?;=?@@DB>?DEA?<=CC;9@DEFIKG?;>8469::;=?@?@;:67<=:834:@>?EHFHHD>=@Dizxtttuosnmrroosvwutqqurfahnoonrgda\]]W[_`adhhfe\^aca^^^^^]^a`]\]]]^Z`eXq°Ñþ¿¿ÂÄÁÁÁººÈ¬o]fQNv–œ¨¥‘ µ®¶¬rQWYVVRRTUWWWVUTSRRRSTUSQQTE247' Kpj`eda^ZY[]ae^bfeizˆˆ‚yv~|rmg`\YXYYWUWWWXYYYYZXYZXYYVUQRUQNMLDGCEOUTS[]][[]]\VSV\\UNLOONLGFKSQXZZ[]]``^[YPSbe\WB)!%%$'()+-023568856?INWXPNY`_dba\RQ[dddddcbbc_baacb`bhTSq«¦’œ³³§¤³µ¦™«¼ªœ¬½© «¶°¦©¸¹¤ž²¾°¨²¾´«²»±§­¹»¯«»À²©¹Å¶¥»ºXad_ba^b_]ab]]ecVLLKOW`b_`_\`_Z{–x^hlhfiihhiiijjjfjljhilnlnlkppXg°ÝÍÈÊÊÍËÎÕÓÎÐÖØÚÙçëêåÛÓË€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€&|ÙôæåëäèèèèèèèèèèèççççæèèèèççççéèçççççææçèççæçèççèèèçççæçççççèèéééééééééééééééééèèçççèèèèèèèèèèèèèèèçççççèèèèèèèèèèèçèççèéèçæèéâêêÅ’n]a]YY]_agjfhbWTQVcefc]YYWTZcaYUMN\gi]TUV]b_STZZMFRSMIKLJKNNQTSNJKMJGBAAA?=7447;<;:>><;;98:<92046454138;@FHINME@CLPctxvvsrlpooqsrrswvrsuvxrgaiqrolnnh`XZ\[`he_`jmigbcff`Y[`^\_bb_^]\[\\Z`f\t²ÏÀ»À¾¿ÁÂÀÂú»Ê®n\hSLt——¤¤±¬¶®qPWYSSQQQRRSRQPYXVTTTUVPNQUE247' Hnh_fg\]]YWZaecddbdr„‰z{yqnh`]ZWXY[[XXXXYYZ[[YYZYXXVVRQRQOLGAECBMWWQW]^YUW]`WST\_ZSQONNKGFMUX\]\]\]ab`^\TUbe_YC)!"##'')*-024568965;DLUWOOY`^`^_[SRY_dcdec`adbda_ba_bhTRn{Œ«©•ž´±¦¤²±¥Ÿ¯¸¦¡³½¬¡©µ±¨¨µ·¥¢¶¿°¨²½µ®´»±¨¯½½°«º¾³­´Á´¤»ºƒ[ad`bb^b_`_`_^a_VNLKMV_b`b]Z`aZ{”v]hlhfhhhjifjnmhkjjkjhjmknljppXg¶ÝËÇÇÄÇÉËÕØÓÖÚØÔÜæéìèÙÏË€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ Y¹òéâëèçèçèçèçèèèçççççæèèèèçççæèççççççæåççèæççéçççèççççæçèèççèéêêéêééééèèèèèèèèéèèççççèèèèéèéèèèèèèèèçççççèèèèèèèçèçèçççèèçææçéäé纂ja]fqmbbddh_`\YVPPYflme]ZZX\`]WQKKS_kaTRTZ^VLQ[YLFRPNKJJKLLQSSPLHFF@ACCBA?=:7578:87>>>?>823:955873283147—çðâçêççççççççèææåçèèçèèèçççææèçæççççæææççççèèçççæççççæçèèèçééêêêéêéééèèèèèèèèèèççççççèèèèèèèèèèèèççççæççèèèèçççççèçèçççççææçèæêä°vegkwxnbbededhf`]XQLU_hie_XSXX]]SKKJUgeXSTYZNFNXVJDMNLJKLNOOSSQMGCAA>?@AAA@@87669::9;;;<=85777559:8853358:>BMKLNPOPRNYnyvoqynpssrrtvouxytqtrjgkjjnnohjwuc`g`\aaahllmhdcec]\`^`ec]]a`\[]]]``Yz¼Ò¿¿¿¿ÁÅÃÀÀ»»Æ«q_ePOw”–¦§‘±¬¸®nMVWOOOPPPQSTUVQRSRQOMLMTZVA9@8( @jiaeecbbYLN\eea_`bgtƒŽ‹}trpne^^]YWUWXYZZYWWY\YXXXZYXXVVTRRPMJG@@HQUTQWZ`aVJP_ba^WVX[ZVSPMIDEGSVYZ\[]b\[XYUT\a[R;&!$&'&'(*-0346677536A><<>AA@=;;:99975;:76889<><647:;?775588>>==<<>AA?<@?;76898<=<:;<;<@?;9:;:<;;7588;BNKJIJJJJFQmvstqrtsqnoqstttsuwyzscelljnpsxxx}r\[b__ccahlfggfebaabbccaa_]]_[][[_][ƒÅÑÁÀ¿ÁÁ»À¿¿Â¾Àͬp^eQOw•©¦Ÿ²ª±§lLQSQQMPPONOPRSSSUX\`dgdjl^@:D8!!Fqk]adg^bcRLXbbcbbbaix…Œrsupb[WUTWYYX[YWX[\ZWWYWWZXVWXWSRSQQVH9;KTSRSPVY[cljb_\\^_]]^]\[ULCDHHQWX\^_`^\UVURY`_N2 !$#!%&(*-1457422116>;88:;::=<:;<;:==979::<9978=<<@DHHDBBB?@Rswqwvvonmortrptuuurswtkhlidhoxyzx~xd^^^_bYMXlqihfdbb`^`ddcc]Y]\Y]\]a\Z‹ÆÊºÁþ¿À¾Áû½Í®n\hRMt—Ÿ©¤ž²¨­¤lLPRRSMNOPTX]bemoprssrrpqqbA8A8%! !KukY_fdZbgWNXaa`[[``eoŠrsvo`]\[ZZYVTZXWXXWURXZWVYXUV]YSRSPOUM>>NUSRPQVY]grrjj_[aaYVY]\[ZTKFFLOU]`\\bc_XXVSZb^K.!&$"%&(*-1458300016=BMRNOZ_]]_`ZRU]`adeb`aba]`abec`biSPn‘®ª‘¶µ£œ®µ­¥«²§ž©¹³¢ªºµ¥¥·¹«¦³»²¬µ»¶®³½·ª¨´µ­§±¼³£¯Àµ£´±}Ydfbddadabdd_^c`TNLJLT]_\^]^]X\Žp\iieggbcghefkljgknmihjmiljinnVe³áÐÇÉÍÐÍËÍÎËÌ×ÚÐØêéçéÛÏ΀€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€&,3qÐðáæíåäèçãåëæçèççæçèæçèèççæåèçæççååçêèçèèææèèèçæææææèèééêéééêêêéèèèçèææèèççèèèçæææåæççèèèççææçççæçèéæççæåäåæéèçæççæååååãåççåæìæ¨eo|\^``][ZZ_efcelmhnmjcYQPRPX\`bXG?JTbeZRRU@BLM@@LRQRQOMKGA==;89=?>9<=>@?=>DB;427978;=<<=?@>><99;<=@98=>:BD9@`qpuwuvusqqporwuvuvuuwrfbkkeiszyytxp]\`acWJShoiojcda^bfdedb`_\X[[\]b]^ŽÇÌÁÂÅÀ¿ÃÇÅÃý½É¨q^bQPv– ª¡ˆš°©µªkENUPMOJPJCHMPUTTVXYYZ[aYSJBGF8%! !Ryn\agddec`]]^^b`^bbbh{‚|oqzq`ZXXZYUTUYXWY\ZWYYYYYYYXXX\VQTROTSFENSRQMRLQ[akuwqrj_\aa]]ab^XRJCEQWX]`__`^ZZVOXdY=($$%$',/1479752/159;FPSMNY_^a_]WQRY\cedcec`bgd_ae`\_bUTl~˜±¡‹¡¹°Ÿž°µ¬¥¯µ¥«¸«œ¦¹´§¬µ¼©¦µ¿³¨±º¶®¯µ°©ª·¸©£µ¼®¤²¿±£½·|Zce`bcafd[_c``eaRNNIIT]`ae^Z[XY}l^kigiifhiiiiijjkiffkkjmjkijnlVj¹ßÏÈËÎÌÍ××ÑËÎØÚÖ×åìéä×ÌÌ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€"12]¾ôìâëåçèããçæåæççååææèéèææçèççççççèèééèçèèçæèççççççççèèééêêééééééèèèèèæçèèççèèèæåççåæååæçççççæçççææçèææçæååæçéèææææäãåçèæäæçèàñë©n}‹iY]ab_\YX\_dhklkimjknk_SNPSV^e]K@?I[d]TNG>CNK<=LSSSOIFFB>;>>==???==:;AA>=:=<769:959>><:;>B?<::;=@=978:<=@BC>AB@=5Dgyomvxssqqrqpqtrtttrqtqbdllntuusxzz{wi\^^`aPFYmrkehidbfgeeda_]Y[^\YYa]^ŽËÒÆÂÄÂÄÇž»¿¼¿Ë¨q]bQQv–Ÿ¬¤Ÿ³©µªkFNUPNOLR?! #! !#$&' '=>????>;@>:;AC?>:>@=<<:8558==977;88::89<:50025565:;><9BGPcsqjnsqqqstsqqrtsqrttun^bhipurrux{vsyr\]]\e`JNfojhifdfhgefeb`^[\a_[[b][‹ÈÏÁ¾¿¾ÁÄ»»¿»½Ê¨q^bQPv–š¨¢‹°¥®©kGOVPNPQXJ-"%!"!0BBLSG)" !Nxphoghdbdda^]c`_]\_fhpyzrqum\WYZYWVVUWXWXYYY\YXWVVVVWXWYVPRTNQOMPTMGINQPNR[hurvwpf``bc__bb\UREEKU[^_]a]XZXRY`Q3" ""%)('*2750/01/-/7>FPTMNX_]]ZXSMPZ`fbcc^_b_\___`]]dbORr|‡¨¬” ±¬¥¨³¯¢¡®²£ ­´®¢¦¹º¦§¼²¤¨¸¿±§²¾¹±³¼´¨§¶·¨£µ¼°¦²¿°¢½·|Yce`bb`eb\\`aab]RJLKNX_][[Y\^XX’p`mmjhgdjjjhgghikmmkhhjijkijnkVj±ÒÇÊÐÍËÓÎÇÄÈÊÈÇÉÐãææëÝÊÊ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€/+3fœ·ÅæêèååäåêèèççææååæååææåäåæççååæåãææçèçççèåæçççççèçèèéêêêêèèèèèèèèçççççææçèèææççäãæççèèèçççççæåååæåæççççèèæææçèéééçççæåååæÝìè³uekc_^[WVX^ccadlmihlhmmffmok]UOTadYLB?Qb^UNB:FMC5;IMFE@<<@A@<:8<@CA=@?<=AB??>??=<;72238<933720278547=<6015525<<<;E]mcao{urvtpqstsqqqutqstvvnbckprsrxzvxwsyvc]d_ajYGUikljgfggjiihc`^\Z^^[Z`XVŽÆÈ½¿Ä¿½¾À¾¿À¹»Ê¨q]bQQv–™¦Ÿˆ™­¢­§kHQVPNQlh\QLJFC9<;5/--,++8>=OT<% ! Rsjnehkkgcaa`b^``[_feirwsopi[TY[ZWVTRYZYXXWX[YYZZYXWVYX\ZQQURRKKOKE?9EOPMOT^lkottngfjle`ac`YTH?DS[_a``]Y[UQZbJ,! !"&''*-0013////.08@GQTNMX^][YYWSU[^cdffa_``]``_a_^beTSm{®¦’¡´®¤¦³±¤¢¯´¤Ÿ«±©¢§´²¥¦µ¬ž¡³»¯¥±º²«¶¿±¤­º¸¦¡µ¾¯£±¿¯¢¼¶{Yce`ba_daa_`a`a^WKMJLV^]\_Z\`Z[~palhejmjefffefhjggjjgikijkijmlVj¶ÖÇÇÍÎÐØ×ÏËÏÒÑÑÕÚÝßäéÝÍÊ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€+00Ebw„¾åñçéèäëèççæææååèåäååãäççæææççæääåççççèèæçèçææççèèééêêééççççèèèèççççæææææçææçæååæççèèèçççççæåäåæääåçèèèèææççççèèçççææåææÜíì¶q[cbZ[[ZYZ]`ggikkiggcba`^^dkjkbTT``UG6>GF>>=:<@A?<:9=BCA=??=>CC?=?>=;;;975359844651155226695,*02-994>C2((++,+(++(%')''-S}tjspglldafgd`]ab^_dbcksqjig\VY[XXXYXWYXVVVVYYZ[[ZYWVWX\]WRQSSPROC94/8ELMOOR]cekrtqqtvsmgda]XM?AOY\^^a\XXSQ\aB%!!"#%&&+0/+.63/-/239?GQTMNX^\[]`\SQW\cedcda_`bc`_cb_`dUSk{”¯¡‘¡·¯££³³¦¡®¶§Ÿª´­¢«·®£¨²¯¤§´·¨¢´½°¥²Ã´¤ª¹º¬¤³¹¬£±¾¯¡¼¶{Xce`aa^c`b_``_`^WKMJLV]][_Y^b[[o\komihidhljfeiojghjikmljkijnkVjÃç×ÐÖÚÜàßÚרÚÛÚÙ×ÒÐÜçÛËÊ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€.4-8Ugg…ÆìééêåæææååååääéæåææäåèåååæçèæäáåççæçèèæçèçååçèéééêééèèçççççççççèçææææåâååæççæççççççæååæææåääåæääåæççæåääåæææçèèæäåææååâçëÃzX]_YZYXXZ^beikjiifbba_\ZZZ[bjpgVORSK>BW_RC:==@?<@?ACC@<;??<>DD>;???=;;<=>625;:6363243/.02/.-,+-03,6azvstdZgzvoqrqssrqrrrsuuvssurifmnjrvstwzwsvyxe]]]htcT]jmjmjefggigb__^Y[[[[^VWŒÅǼ½Â¾¾ÂÀ½Âƽ»È¨q]bQQv– « †—¬¤±¤kJTXPOSVNKPQOG>HFEKVXG2#!(-(*0/'#')%)/..,'&*-/4-8c…{ptrmpokkmia^^ab``aa`fomdce_XYYYXYXWVXXVWXXYYYYYXXXXXXXZZSORORRQMA2,.7CLOKJP[[`jrtuxtywnc^\[O@HRTNMX]\\\]XPPV[dd^]bc^_cea^cd`_aQQn|ލ ‘¡µ®£¤²²¤ž¬µ§ ­¹¨™£¶¬Ÿ¨µ·¨¨¶»®¦µ½·©¯¿µ¤§º»«¥µ»ªž°¾¯¡»µzXde`a`^b_]]__^`[QJLKMW][YZW^cWZ…—takjffhhjgefhifcmgefghiijkijmlVj¿æ×ÐÔÙרÛÛÚÙÛÛÖÐËËÇÔæÚÈÍ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ .1*5WlheÅåêçåãæåääææåäçççæææææâãäãæèæâàäççæçèèæççæäåèëêêêêéèççèèçççæææçèèæåææåãååæèçååååæçççççååååääåçââãåççæäâãåååæçèççèèçåçêæàèÊ}TZ]YYXVVY_dbdfefggedlmgehbVWVcqkYJBB?CRZN>8;A@;;@?;@A@>?A????=>BB><=>??><<<=:77775321110.,+/*)-.++/,"-Zvqosl_fyzpqwrtusrstsvustuvwpmhjghqutwttrnouxzh\]grn]Rdmieefhffhgb``_Z]]\\a[ZÊÏÀ½¿¿Â¿½ÃǼ¸Å¨q^bQPv–© †—«¢­£jKUYPOSYRQQMIE=JHGMZ\G-*$$*,)*-(""$#'.*&)%"&,,,.Af~{uslnkhgfb_\^``_`__b_bki]]dc\YWVXWWVVYXWYZYXYYYZZZZYZYXYZUQRNOMPVN>4./;KOJILSSV^fkoqqvysi_[YSE=GV\_e_XVXTT[X4"!&($%(+-/1335/-00/4=HRUNMW][_\ZVQTZ]ca_^aaa`^ca]acaa_OSr~‹¥  µ­££²±£Ÿ«²¤Ÿ®¸¨¥µ¯¡©º¶£¢²»¯£¬¶´§©·® ¦¸·ª¨½À©–°½® »µzXde`a`]a^cca]\a`VKMJKU\[ZYU]`TW…˜nanjgihbdfiigfghigfgjkihjkijnkVj¶ÙÊÆÊËËÏÐÑÑÒÔÕÐÊËÑÎÔãÛÎÕ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ '-+2M`^b`˜ÞìâäææåååççææçèçââæçææèçååèåÞßãççæçèèæææåäåéìëëëêéèçæèèççææååçèèæåææäææåæèçãâççèèèççæääååäåæçäääåååãáäåææååæççåäæçæçèàâíÅsT^WTVY[[\^```__aehjlpmfeihbZSVagg[J;ABDHB:=9?@<<>=9AA@>?BB?B?>?@>=?>@?=?>=@==@CDB?=<;97652/11/--.//*-,(*0.&$)Vvvqmnffntwuporsrqrrpstrtssupqmnosvu{xmmtrqvx}u][bgpiW]glhehmiikic__^[_\XXa^^Êͽ¹»¹¼ÄÁ½ÀÀ¶¸Ë¨q^bQQv–ž«¤¯¤­¢jLUYQPTWMNRJDEFBEGMWZH2 $%'+($&''$&*+($&&&(,+'(3BRVSVWPRG@>;8?K_b_\__^d_`hgZZde]XVY[[YYWYXVXYVTTVXZZYXVXZ\][WRQUPONLLJB2,8KOLMNNNOSZ`egjmsxuldaVI>DSXZb`]\\SOTP1"!')$"*.+-3633..0-*1=IRUNMW][\\\VMMV\__de``cbX``]^aac_RVs€¨žŽ ¶®¡¡±²¤¢¬¯Ÿž¬´«¨¬²¬ £±¶§§µºª§º° §¼²¢©·¹«¦·¼«ž°½® ºµzWde`a`\`^^aa\[a^QONHHRZ\]]UZ]RV‚’o\hjhfhiefhijihfhifdijgfjkijnlVj¹ÖÄÂÇÇÊÔÔÓÓÕÚÜÚØ×ÜÜÛßÝÙÝ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€+303BQWRNoµæçÝáåæççæãàÞäææããææãåäåäéëãââêåãèéêåããåèèçèëéðïèêïëäéçèêçãåìëéçæåäåæçàççääâçâæèçååæçâäæççæäâìëêèæäãâåæçèèçæåãåçéêèæåäáæ³gS[XYXWX[afjjjgcekoomlklic]ZSOLLJKLJ=A@>?@AB??@CC@>>=@BA><>AA><;:;;82.0).Lab^ab^_`cchdWZeh^^]\ZXWVYXXZYVUVVWWVWYYXTTWYYZYRTUUPJNOH905BHHJLILNOPTZ_cehilmjd]PFHS[\Z^_Z^UPWJ"!###$&*-..///-0.,--3=KUTNPTVZ^\[YRPU[`^cgc__`a_`cc_]_hQSr~§¥“ž¯­¥ ¬³¡°µ§ž°º©Ÿ¥²®¤¦«°ª§´º¥›­·¯¥ª·µ©¥³¸¥¤¸¾§Ÿ°¿¬šµ´ySdd_ab`a]a]\]_a^UKKIKT[]\ZX[\RY†‘nbhhkfdkkeeiifeclkeafkkjkihkojUl½ÚÇÇÒÒÏÕÐÖÚÝáåãßÞâãáãçäÜ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€*1-0>MRPM[”Õèâéççççæåääèéèçæççæçåèäåéäâæíæâåçèãåãåéêèêîîéæçèæåèæååçåäåéèèççææææãçêãåíæâèæåææææèççææææççæåååååååæçèééèçæçèèèçæäãâêè©`V`]XWXZ^ekojkjghkjhgihc\TLGEDDCACC@C@=@DCBE?@?>==<<@?>>>?>><>AB@?@C=?>=@?=?@@@AEGC<;87886332221/-+).0,&!$&(Ajzronhgpxxtsuplnoorwwuttsrstqnrwvsplosw{|{xwzxe_fmpgY\ikhijggijf_[[\W]rqh^bˆÃͽ¾ÂÄÀ¿ÂÀ¿Â½¼Æ¥m`bOPr”Ÿ­Ÿ‰š¬¨±¢jKTVNMQYOLMJJHBIPRPQRLCGGGE@:4054333445667778887>>IH===;I^caa_Z[]`]a`WYa`\]]ZWVXZWVVXWUTTQPRUVUVYWSSXYYVSRMMPOPQOH<2:INJIHLOOLKMPW\_`befdf\KFRYYYb`X[WTT=##$!!&),...022-/.,-.4?MTRKMRVZ[\[WOOV[dbba_ab^]]^aba`abPSp}¦Ÿ‘¢³¬¢ ®´¤¡²¸­¤°¶ª §³ªž¥²±¥©¸³¡¡°·© ª¶¬ ¢¸¹©¨¸¼¦˜¯¿­›µ²yTdd_bb`a]Z^a``e_RGIJNW\ZX^Z[^SY†“h[fikifejihghihgkihimkhhkihkojTlÂßÌÍÖÕÐÕÐÓÕ×ÚÜÜÚÞàáßàâÞØ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€)0+,:HMNPNyÉìâßëêèçæåææèççèèçèéêéìæäçäæáëçæéèêçäãäçéèéëïëèèèéèçììëéêëêæåçèèèéèçÝçéßäéàâëæåæäßâèäâàÞÞàâäßßàáãäåæãäåææåäãéçåãâááááêÞ›aY[WXWXY]bgjddccecYN[]XLDDED?CGECEC>BCB@A@@A>@A??@@>B@>=???>@>?BC@?@<;76:;;=DB@CGID>8556531010/--,--4<3$%&:auqmoihowxursnntuppssrrtusrrnmswsonmvtsvz|{xy‚k]dork\V_hhgihghgd][\]Vf„{dV[‰Ãξ½¿Á¾ÀÁ¿À»ºÆ¦l]`ORq’ž¬Ÿˆš¬¨±¢iJTYPLNXQNMKJID?9447740***)&!#"! ####$$$$'(*,,,+*,330333CU`a`^X[_a[^_\]_[Y[\[XVVVWVVWWUUUKOQPQTTSWWVUUSUYTNNRQNOOMKEBEB??;:;AIOOMMRVUVZ]_bcTIQWWZ]]VWXYR3!##&))+,,-023-.-,-.6CSXUMNU[^Z\\UNPX[d`bc_[_d^_`__`_]]PUo|ަ›“§·«Ÿ ­¯¥¡¬±© ©¯­£«·­Ÿ§¸¶ª«¸¸¤ ®¹¬¤°º®£§²³ª­¸¼§–­¿¯œ³¯wVdd`ab`a]_`ba``]TMMJJS[]^_Y\`UX‚h\ikijhadhhfigefgllgfhjkkigkojTk³ÏÀÁÈÅÀÂÄÃÄÆÈÈÉËÓÒÑÏÏÐÏÌ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€+1,,9FKTVKe²èêáâáàßÝÜÛÛÝÛÚÜÜÙØÛÔÖ×ÑÒÐÎÚæçÝÜÜ×ÙÚÚÛØÕÚæîîìçääâáßÙÕ×ÔÐÐÔÏÈËÍÎËÊÊÇľįÂļ·ÎéÔÃÀ¿¹·»¼»¹¸¸¹»¼¹¹»¼¾¿ÀÁÀÁÂÄÃÃÁÁÉÇÄÁÀÁÂû¿°`[VXYXWVWY[]^[XY\WF5?ILE@BB?BDFC@CEC>CC@?@@AED@>=@BCAAA?>>?@CAAC@<=B@;986:=<@@?@AA@?:7554100-,,-048:?J: #$6[ttnokhmuxurrnotuqprnpruvtrswonnjhmqxtprvzzxyyt]aomlcWVajifihggc^\]VPhdV[‰Ãο½½¿½ÁÀ¾Áú¹Æ¨m\`QTs’ž¬žˆ™¬§°¦kJU[SOPVOLPMGBB=&""/N^a_^Z\^_[\a_^]Y][YXWVUTWVVWWUUVRPQTVVUTVYVSUVTVWWWUPLLLJJNOIFB<82.222?HFCC@:BAA@=>AACA?ADA?AGDA?>=>??AB@=<>@B@@@@>>?><=<88:98876557:32120--.3457;AEHHP?$4Xuxoplilsxvqqonopppprsstvtsvqebfhkrwssttwwwwxs|zfckhlm`S[lofkiihd_]^]SiŒ}`T[„¿ÌÀ¿¾ÁÁÁÀ¾Á¹¸Æªo^bTVu”«ž‡™«§°¨lIRYRPRXLGMK>;CH&  Mab__\ZY[X\`_ZYX\ZXWWVUTTSSTUTTUSQRUXXWVXZUOQSUYY[[XSNMNPJJLNQRNGD>969?DHJKJLNLHEQ[TLRYVT\]WSN?%"# %(%(+-.0221--,-./BBAAA@=>BAACB?<=?@@?=<==><;>BC>99<;874364211001431000037BCDEHKNOLOC&#1Rt{oqnjkrxvpnqrppsrmqrprvuruqdclqpqrstuvuvwywux{tjgiingWVfmfjiijf`]^[W_ria\`…ÀÎÂÀ¾ÀÂÀÁ¾ÀÁ¹¸ÄªqadTVv–«‡˜«¦¯¦kHPUONR\J@FD78KJ(F_b^`^[YZZ]b`ZX[UVWXXWVVUSSTUTUWQSSQRVVSTWXZWTTX[ZYZXRNRJMMOTVSTQOKE@@CFEGGHLNLGJOVRIRYQSWYWSK6! ""%&((*,-/10.-,+-/0>SVWVQPW\Y[ZXUQSXZ_abca]]b___^^_```ORnzŒ¤“§º±¦¤¯±£¤²³©¡¬³¬¤ª³ª¡©µ±¥§¶´¤£²µ¬¤­·°¤¥´µ¥¥µ»¦š¬¼®ž³©tYdd_bb`a]\\]]_c\PKKIKSZZZYZ\[QX~c`hdgiffbcfgeijdchjjkkihjgfjmhSj¢º¯µ·¹¸¶³¶»¾¾¾¿ÂÁÅÉÊÇþ»€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ -3/0=KPQXTa“¿ÇÁÄÅÇÈÊÊÊÉÈÊÌÌÎÑÒÒÍÐÕÒÑÓÐÖÛÖËÏÚØÖÓØÛÛÛâììäξ°¨®ÎèæÚÜâçéèèêîñíãâéëçéêìæèïéçåçëîìéçèèèééééèèííììëëêêèéêëëêéèëìíííìêêéöàŽRPTPPPPPPONMDC=648<<;>@ABCDC??@A@BB?;AB??@@ACBAAAABC@@AA@?=<8>A><<;89:8564243102200120...05;JKLNNONNMNJ1 *Ioznqokjqxwpptsopttonqpqurotmabntsrqsttsssvxwwwzyoijghi_TZfihhijf_\\]_[[X_\X‡ÂÐÄÁ¼¿Á¿Â¿¾Àº¹Â¨pbdRSt—ª‡˜ª¦¯£jJSVMMRYI=@A6;QI&<[b]_][[\[]baZX\VVUUVWYYUTTUVUVXURQSUTUWWTUXYWWVWZZYYTQTPPIDMWZ[VRMIGFECGJJJLOPNQSVQKRWQSRTVTF0"" "$$%&)**+-//,-++-/1@WVTRMKTZWX[\VPRXY`eb]_b`\ca`__]^_]PUn{ަ𣵬¢¤±µ§§·¸ª¢­°¦ «·¬Ÿ¥±²¨¢­´¢›®¶© ª¶®£¥±°££¯·¨›­»¬ž³ªtXdd`ab`a]a^^__^ZRJLLOW\ZX[Z\\RY‚g`kihigfehifeijhgggigcemigeimhRj¦¼°´µ·¹¶µº¾¾½¿ÃÆÊÑÔÏÊÆÀº€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€+2-/=KPQRGe¸êæÜåäããâââããææããææãââíçßèèàßêèææäæåèãßáçëêèǰ¥¥¯ÏíñÞßäêèââèÛßÛÓÕàæãàãíêæëåáèèéêíîëæêèæååæèêççççççççèéêëëêéèêëìíëèåãêîݘ[SUSPPOMJGDB9744:@>8??@CCA?><=@@@DC=BBABEC@ACCB??ACBABDDCA?>SG":]e][XWX[WX^^XUYWVTVYYXUTSRTTTUWSQOPTXYWSSUTQTWTNY\VVWVWSRNHIX_Y\[XRMJJLMPPMLOSTQXYSOSVUVRUXS@(   #'(&,,++-0/.,+*./1AZZVRLJU]ZV]aXPRYY^bb``_^ab^^``_`d[RYq}“¨˜Ÿ®¤¢°²ª¦¶·©¤³µ«¢«¸®Ÿ¦¶¯¥¥±°Ÿž°µ© ¨¶²§¦±°ª«®¶«ž­»«´ªsWdd_bb`a]]`a^]`]SHKLOW\YVZX[^TY}c[jjdeiidhhgfdcfjjhgihfgigeimhRi¯Âµ¸·¹¼¹¸½¿¼»¿ÅÇÖÜÚÑÉÆÁ»€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€&003BMLMMHÜéã×àßãæâáåèêæãäåääåæâäæäãâÝáèèåæåãäèæäêèæëæÅŸ›œ§ÕíæâÜÞÞÙÜáÞÅÂÈÏÑÚããÞèäèëæëéééêêêêëíéééèèçææììëêéçææìëëìììëêêêëëëëìíëôã›PGULIC;64321::::::::<<<<=====;=@BCDEB?@DADECAA@?B@@@A@<98<><9986.35300/.1/14630/53.1646DIJLOQQPOQRT? &>buropnkmsustsqkhouspuustrrvo\U^efdbfnqqronqox|ulhgekimo`QZqmfifca\bZ[\YX^^W…¾Ë¿Ä¼µ¾ÂÁ¿Äƺ´¿¢racPQx•¡­˜‚°¦®£jJTYQQUWFCF;3@PB$ 7Yb\]ZY\\ZY[]]ZWWSRVZYVSRPSY[WTTSMOSRUYVVWWUTTTTVTRVZTPVWVQKLSXZ[]\XUSPLTQRUVUVZZWWSKLSUOPQTQ;$ "#!#&)*,--,+++)/.-/9UZXUMIU_ZY[\XRTZ]\]ab^]__`__]`^Y_\OQhx¦—¦µ¥“¯³Ÿ§´µ§¢«²¬¢¨±°¨ª¸±¤¢²µ¤£¶º­¥¯¸±§©°±©¨µ¹ª›«Â®š·®rYfd^adcb\\`_\`c\QKLKLUZYXVW\ZOZ‚‚^aqg`ehedhjhedeeiggfehkhflhfkhSl®Â°¶¿»´¶¹¼¾ÂÁ¼¾ÊÌÑÏÊÌȾ¶€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ '--1=ILMFd»îçæååââãâäåààèèáàçéæççéèæèçÞßææãåæåççæãèèéí俤–£ÖñëíèééäæêçÞÚÞáßäêèèíåæîëçåäêëééìëæêëëëëìììææçèèéêêáâãâááãåßßßÞààÛÔÓÔ‡I=E>;8448<>?::::::::;<<<<===;=>??@?=DDCA?@BDBDCBABA??@@?<;;<7679732342//./12-0343211.224757CKLNQRSRQPQWG" %6[sqnqoklsusvrpolostmqsssrsun`X\_bb`dlpmnqtuwwk[YgolkiilgWUfmfhic^]`[[\YX]^V~½Êº¾½¶ºÃÀ¼¾Á¹¸Å¢racPQx•£®™ƒœ¯¤ª£jJTYRQUPEBB61@RG& 7S_]\[Z[XXY\^\WRUTTWWURPQSVWVSTVXVSRRVVQUVXYWTRRWUSX\WRQUVSLHLU\[_a^[ZXUQPSX[ZZ]ZVXXPLORPQSVN6  "#&&'***+,,,,)+,-63.ASVQKOVY[XYYUNOUW]aa``^[^_^^]`^Y`^PTo~’¦–ˆ¥·¬›¢­­¢¨²°¤¥®²ª¢©³°§¨´± ¡±°Ÿ °µ¨ ¬·«¡·¯£¥¶º­¡¬¶¦œ¹±vUfd^adbb\^^``_a]SOMHIRZ^`ZY\[OZƒ„hbjbbikgehjheeghhghfcfjjglhfkhSl¨Çº¶³²·À´¹½ÁÄÁ¾ÁÄÅÆÇÅÀº¸€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€#(*,3@IM>BŠáîÞåëâäçäßâåáßãäàßãåäæèêçæêéÞÝäæãæçæçæçãæèìîß¼«¦Ÿ¬ÕîìíéêêçèêèåáàÞÙØÙÖÐÖÒÉÌÉÆ×èм»ÃÃÁÁÀ¿¿¾½¼¼¼¸¸¸¶¶µµ´¸¶µ³±¯¬ª°°®«­±¯©¦¬§~J573;855:=?@::::::::::;;<<=====??===FFD@@ACBBA@>@A@>?AC@<888977996441/.01/02021.-156.455768@MNPRTTTTPPYQ,$-Pprmrqjksvqtqssrqrqpquvtrsslb\]^adaegjkotuprrgXZhoijieim`SXjffib[]][[\YW\]U€¿Ï¾Â½ÀÀ¿½¿Âº·Â¢racPQx•©—‚ž±¨¯¤jKTZRQUPE@:11BRI'!$$7J\^\[\Z[YXY[[XUWVVVUTVYVVUTUVWVYWSUYYUSVWXVUUUUTSUWWXYXQSSNGGPZ[_ca`_]ZVVY]^\[[^XWXRKMRPPRTH/ !##%%&%+))),-.-*++-82%+IYUKRXX[XYYTOOUWacb`b`^`^\^]`_[a^PVtƒ’¤”¦µª¤¯¯¦©±­ŸŸ¯ºª¢ª³®¦§³¸£¤³°¢¤°¶¨ž©·©›£¹±¥¥²´¨ ¬·ª¡¸«rUed^acab\_Z^a_a^SLKILUWWXWU[\QX~b_jdbdffcdddefecgeedeghegkgflgRl±É·¶¾Ã¾¶¶»½ÁÇÇÂÀÊÌÈÃÀ¹¶»€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€!((*:IKG.X´ëáÛæéßâæåàáææèåãäååãããäæåâçåÜÜäæåççääèéäåçííÙ¾°«ª­»ÆÇÀ¾½»¹··¶±¯®¬©¨§¦›¢§¡¡žÁÙ±“•š–›™š›žŸ¢£¤¡¡¢£¤¥¦¦²±±µ¹¹µ±ºººº»½¿Á½ÇÀI19=A=989;:9::9:9:9:9::;;<<=?<=??<;=<>>@ACBADDB@@CBA?@??<9535653464/,/241..0/0//14546645756=LNPRRSTUQOXV4$%Howltsjisvqtutpmpstsrtwrrtslb^bdfgegehmmopnlmh`^dggiieflhZQ`gddaZ\Z[[[XV[\T~¹Ê¿À¾ºÁý½¿¸¶À¢racPQx•™¦•ƒŸ´ª²¤kKUZSQURF7.*1@LG'"""*4AYaYZ\[^[YY[\ZXVWWYWVW[XWUUWYYX\WRRVVUVXUTUTSV[RRWXVXZUQPQPKGKQX\^``a]YZ[]`a`___ZXWRKLPNMPO@) % %'%%(*('),.-,.+,01-$ 7V\KMWXXXYYUPSXZa^^_]_a_^[]^__\a]NSs ’¦´«¡§¯®«¥«°§¡ª´«¢ª²¬¦ªµ³  ±²¥¤¯´ªžª¹­ž¨²±¨¦²¶©ª¾¬¸©mXdd_ab`a]]XX\^b\NKJINVZY[ZVY]QYƒ`_kggifcbcddfhhghihfcehkhkgglgQm«Ã¶¸»½º´½¿¾ÀÆÇÆÉÐ×ÓÎÍļÀ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€*((>BCC@?@AA=;989864121/020-/230.-///./245448547846>JLOONORUSNUV9#$Cn{mstkjptrsutolmrurnqsqptto`]eifebahnmihlmdgf_\`efgggefkdSTfa]`[ZYYZ[WV[[T{¶É½¾¼»ÀÀÁ¾¾À¹µ½¢racPQx•ª™…¡³¨®¤kLUZSRVTG4''.;FF&  " /07VbYX\\[ZZ[^]YVWVVUTSTVUVWXXWY\WUROPUWTSVWSSVWVQQTVUZZSSPPOLHILUWY\cfc]bbba````[\ZXTNJJJLPN;$#$&$%(('')-.,*/,,00*$!BWPJSYUXXXTPRWX`]__^_a^^Z^^__]a^MRo~ “¥³«¤©®­ª¥¬³¨Ÿ§³¨¡­³ª¥­¹³¤¡°³¢š¤¯ª¢«»®Ÿ¦µ±¦§¶¸§—ª»£’µ¯rWcd_aa_a]__]\cg^QKJILUYZ[ZUY\RY€‚`akcdihefiieacgkhggffegiijfhmfQn°Åº¼·µ¼ÀÁÂÂÅÈÅÇÑÔÎÍÍȾ»½€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€+**:@3*V¯èíêãßåçâäæâàáâäâäéçãäéâßáåããâÞåéäÝÞáãèéêæèèèçÕ·­¤¢¢·ÒÐÌÐÑÓØØ×ÚØÛÛÝááßâßÝÞßßÛÙåçÔÆÅÀµ°µ´³±°­¬ªª¤¤¢¡Ÿžœœ“›¡ Ÿ§»ÌæçççåããäÜæå©[VgR;978:;97776767776779:;<<<>=<;=<;@??AA@@B?AA><===<<;:8743310220/1231.-00.0/144348425:948BHKMMKLPUTNSW@"#>fzossnkmrtqrrsqlmsuqprqpruqa[ce`\[Zhonnkc]_fd\^ikdfehe`hiZOaa\^\YXXXYWU[\T}¾ÒÁ¿ÄÃù¾¾¿Ã»¶»¢racPQx•«™‡£¶ª°¥lLVZSRVXO>315>KE%#" 3-/PbZZZ][YWX[[YVWTRSRRTVSSUWXXXYWUTTSTTRQXXRQVUPMQUTSWZYVTQNJHILRTV[cjifhhfb_`_]\]YSQNJJILSM6! !"$%%&''*,,*),.*04*!+FRPU]ZZYXTORVV`cbbca^_`Z^_]_]`_ORn}£–¦¯§¡§®±¦©²° ›ª·¬£°°°¯¯±¥¡®³¤Ÿ­°¬¥­¸¬Ÿ¥°¨ž¤´³¦žª·£’«¨sSbd`aa]`][`^[_bZPHJJMTYVTVTX\RY}|]aj`agfeggeb`bdeihfimlgdiieinePo²¾°¸¹¸¹¶¼ÀÄÉÈÁÂÍ×À¾Å¸±¹¼€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€*-1;5.7ƒÒæáéßÛáääèçàÞáãâÞáçæßàçáàãäãåäÝâçãÝßâäèåæåêéææÚÁ«š–—·çêæêèæéåàâåêèçêçâääèèçææáί’~|xjgpdefghijjgggffeedchlidiwƒµÒèèãæéèçæë´fi~Z<:878741555555555678::<<=<<<<;;<@@?=<;=?@BB?>>=;<<=;830.1//10-.11111100/.0477544436975;CHKNMJKPVTPU[I$$8[sqqrqmjovtrpqsnmrvtrstqptpb[]\YYYZfjkm_NLcgbY^knefcdeace`SYca\[XXVWXVU[\U}¿ÔÁ¾ÄĽÀ¼º½¹·¿¢racPQx•œª›‰¦¹­³¥lLV[SSV[SHCDBDNA#!5-)I^^]X[^ZVVXZZXSSTVVUUVSSSTWYXVYTPQUUUXUTTUSPPRNTWXXVUVYXTNJIKKMRVX]cggdffcbcb^`]TONKJOIMRG0"%()&'()*))))--42" "/CMX^Z[ZYTQRWW^aa__]\_aZ_`]^]^^PTn}‘¦—¤¯¦¢¥¬¯¦¦­®¤£¬²¥«²©¦¬²®¤¤¯¬ž °²ª¦¯µ¨ ©²ª¡¤°­¡«¹©˜¬¤pTac`a`]`]]_`^^`[QILKIS\]Z\Y[ZQZ|_aichkfdedbcehgdghgfheehjieineOo°Â¹À¼½¾·¾ÆÎÒÐÈÆÍÑįɾ¹ÁÄ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€'/9?23N§ëå×äàáäããäãáäæáãããâãäâÞÞáãâàæåÛÛãäâäåäåáâãìêåçàÒ¬‘ЧÞéàæååëéäèáçååêèãæãæâãäãÆŠ^XSROLLOSTVY[^_adca_\ZXW[[[[[[ZYhªäìâäçââàðÄom|N976787414444444455689:;<:==::=>;><899752/-,.11.-.//00231.0423335774:65546?99=@=9<=;::97522441/1..120,-10/11./3368743664356558?FLKJJKMPRWROYY3!'OsrjnsnjoruttspoooottstomtobYXWZ^_^cdYH>CMZidV\eed\_a_\\`eWL\naUXXSX[TOUYQ¿Ò¿Á»ÂººÂ¼³¶ sf_KQt–¡¬˜‡¨¶¤¯©nOVVTXXQKHKJECG?#+8) 9Z]X\^\ZYY[]\[ZVUUVTRSQSUTSUWYWVSQRQPQTVTOPUTNQPPRW\^]RRTSNKIFFMMLSVUV\`^\aa[YVPOSQIFJJLG4"! !##%%'*)()**(*-))24&"  =X^XYXURRVZa`^_a][`]`^\]\\a[JQn–¥– ®ª¢¦¯²¬¥§­¨ ¦²¨ ¥­ª©¯²ª¡¤²± Ÿ®««¬®³¯¤¥´¬œ£²³¡š­·¤”®©sTbaaabb`^\^b_\c`OJNHFS[XXXVYZT[yrW\heghhdchfdjjeegeggfgigklggkfTn©½±¯µ·±µ­³¹¸½Áº¼Óâκ»¸¹Ã€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€0920)P«äâßàãâßßáäáÞàâáááààââáßÝáäåâáåâÚ×âåäååäçàááäæâÝÝݲ–’ƒˆ¶ÜéâæíéäååææææææææäããèÚŸ^BLMMOPQRRPUYZ[]__^\aio{‡Œ‰„~ytoljZi¡ÜæÙÜèèäëÚ§‚hG67887531/////02354444567876788889;;;:;<=9;;8678722220/.032/,.11.440.12138765545688878=EKLKKLLMPTWUQXX8 &Jnslnrmjosssrqrvskqrqrtsruq_VZ^`dga_TEBJMHXfbVZcbaga]]\[[\TFN^\XXTUUUSRZ^Zs³ÎÀ½¾¹¿»½º¾Åº¯´«s][PYu‘›¨šˆ¢²¤ª¤lPX\[\WYQKIFBFOA$+6(-Q_[Z\_][[[\ZYUUVXVSSUVVUUWXYXVURPPPPRTSSUVVSQNQTVVXZ[WUWWRMNNILQTRRTVSTVXZ^]XRLLPNHFJKME2! ! $('&))*+)')-+.53#":V\UVVTQRVZ\_^]``_a]`^\]\\a\JOk~•¨šŠž¯©œŸ¬±«£§°¨§¹°¦¬·­£ªµ­¢¥´²¡ ®­©¯µ³ª¦¯³°£¦¯®ž™¤²¤˜­¢nWeb_^`aaa^`a][`]NKPNLTYXWXVYZR]xa^efjhecacffcdghgeffdfhglkdcfcTo¦¶¥£®­±°´¶¯±¹¼ÅÊνµ³¬³Æ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€55//9}ÔëÛßèààåÞáäâÞÞàãèáãäãßÝßâÛßããâäâÙÜäåãåãáâãßàâååÞÑÔµ—‹‡˜ËêâåëçãããååååååååæÝãëÆwGILMNOPQRSOTVSXbgdieerƒˆ‹’˜ƒ}uppf_‰ÒïÞÛíèáä὇X=677764202231002422333445;746889:6:<99;<9898645660010123210-,055266326668955764477678 $Cftmnqmjouysonqtqlnprrpoqupd]__ade^LAFLIHKS``X\a^[[XWWYYVRIDIQQORUUTSRU\^Yn°ÖÌÂÃÁÀ¿¿º¼Àµ±¿ŸrkjTPmž¥™Œ¤®¢¬¤nPVYXYVXOIIIFIOC$+4+(Kb_Z]^][[\][ZWUUTSRUYVSPQTUTQTTPMNOPSVXXURRTUQSVVUTWZ[WX\XRQRKGLSOOSSRQUVSVWONIILKFFIKLC.  #" &*)&*+-,)'*.-380 # !7SZVVVSPPTX[`_[_a`_]`^\]\\a_NSn“¡’Šœ«¦œ¡«­¡¤­¯¤Ÿ§±¡›©¸¯¡¥®«ž¡°®Ÿ©¬¤§±¶ª¡ª´¬ ©·´¢ž¬·ªŸ± mZaaabcc`]\_^Y[a]SJLLLQWWUXQVYNW{u[akcbacdfbdfdegehfhhghihjjdafbRmž¯Ÿ˜Ÿ«§¤¡¡¡ ¬¸·ºÅµ¯¨¢²Ç€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€*5213Z¯åæÜåêÝÝåáÚàããâàÞáãäáßàããßÝÝßßÞãäÝØâäáââàâãßáäãèáÏËÁ¢‰Œƒ±ÝååáâåææååååååååèÛåë´aDVMNNPQRSSVXRLRbe^_bcrЉŒ–‰„~wtunazÀïëàèéääéÔ•U:77654200.//0/12401233333755665555:;88<;7677654331/-0463110244101//25358796677568458=AEFFLJKRTRQSY[WY[F"$=_uompmjnutpoppqqpqpprprttnhc``c_SHEFJLIGIMY]Z]^YUXYXWZ\THAHLLHFKSPTUSRURJY«ÁÉÇÂÀ¼¿¼ÀÁ´±Â¥secMOr›¥¥‘Ч«œ±£oQVWQTWaRFGJJKNB$,2*$(A[^Y]ZYY[^`_]XUSUVUUVXSPRVVTRUTPMMOQVVVUTSUWXVUTUTUX\WRUZYUPMPGEKPTSOTTVTQQPJNJIJIEEHLL>*"! $('&()*)'&(+-69,! #6S[XXWSPORV^ca]^`^]]`^\]\\a\LRo€”¡‘ž«¦£¬«ž¥¯«¥¦Ÿ›§´­¨­³¬ž¡±¯Ÿž©­¨¡©¹¯¦³©ž¬¶®›ž°¸©¢ºªoVdb``aaa`^b_[]aZRMJHKQZ]XZTYZLYuXbkcdffefeehgfefccceegijgiefidQi•¥šš ¦›”––™ž¯º²®¹¹®£›¥ÁÑ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€#84+?†×ìáãæãÞàãàâãâàáààâàßÞßâåâÝáÜÝÝÝââØÑáçàßáâåàßäæãçæ×ÂÁ®‡ÃåîàâçæêääääääääëàéÞ™Q@PNNOPQSST[\VMR`faells‰’ŽŽ’–•‰~xwvq_i§åêÚÛâããéÛ›T7875310//-,,-//000112333266433565878:;988666543332.-142/-12685/.0-.476686898679988:=AEGHHMJKQWVSQZ[XZ`M)$7YsomonikstusnjotttrqpoprqmfbaddWD>IMGEJLIIRVVXYVSZWUWZXMBCIKHJJJMMNRTPF@@HP^y¤É;¾ÂÀ¿À´³Ä¤sfcPSu™§ªŽ¥­š±¦pRY\TU[]PGIMLJK>#/0"#"0LYWYWWY[_`_]ZVUVWUUUYVTVXWWWXWTPQRUZ_VQUYVUVUSSSSSW\YTTY\[VMRNGGRVNGNSSQRRNNQMKJHEEFKJ9$ !!!%&&&((''()*),66(! 8U]WXWTQQTX_b`]__]^]`^\]\\a`MQk|’¢”‰ °¨š ¬®¥£¨¦™™¥«ž˜£¬¤œ£¬ª› °­žž©­©¤©¶ª›§³©©¶°žœ­±”²«uYdb``aaa`^ba^ab[RMIHKRZ]YWV\WL^†vX^hdifdfdbcefdefhgecddfggiggleRj–ž”—››’‘”˜™£«¤¤¡©¨¡›¥¼Â€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€6,)g¿ëçàæáÛáåßÜÛÛÚÝàßÜÞÞÛÜàáÞÞáÝØÛßßãàÔÕäçàßãâáÞàãåãææá¿´«˜Š“¥ÔîéæäãêääääääääéåìЃLGNNOPQRSTTXYUR\sƒ‰„‡w}†ŠŒš›Ž}uqov^\™ßèÔØÛßÞâÔ•O48741/...10./00/.001122235532488687789987764321252/0430/1145323203668<;779;;88;<:===>@CEHOMKMQVVTZ[X\bU1$1Rpnlonhhptuvtpprpruvurrrsmede^SJCFFFHJKJJIMPRSUVWUUY^VG?ACIKIJKKKLGJVR=5@IQPNQQMORPLIGEEFIG4  #" "')&'*))(*-,+.51$!;W^TUUSRSW\\_^]``_a]`^\]\\aaNRl}Ÿ‰ž­¤™ ªª¡¡¨¥™ž«­œ•¢°¡™¬¤–ž®¨š¨®£¤±µ¦š¤¶° ¦¶¸£˜¬±›­§s[aaabcc`]]_``ad]TJJJMRVWWTQWZP[{nU`ibfe`ahddfdegfdeefggfgjkfeieSlŽ”Šˆ‡‡ˆ‹Œ—Ÿ—•”œž šš¨®€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€(.O¥æêáàâÝÛááÜÜÞÝÛÜßÞÞáâÜÚÞàßßâߨÚÝÝáâØÕâäÞáäâàßàßàäââæÐ·§žŒˆ„ŽªÑêêããçääääääääâæîÆsKSTOOPQRTTUURUeœª­˜“Œ€uz‰‘’™–ˆ{spxc[ÜëØÛââáãÎO99730.---.../////00//0122.03676417764688564320/14211221366640021/5756:978;;;:;<===>><;<@DFLQQSVUQX][Zc]9"+Jmmlopgdmvsrrpprroqootvtsnda^PCBFGFEGKMKGKMRWXY[\[^a[L>KWXf‚¨¸½»¼±¤£‡ZPQKR\`}xlz„~‡ˆdMQWVWZ\TLG<0-10#41'% 2IUWUVX[^^[YVWZ]\XVWYUTVVRSVVWTPPPSXRVYWUUTSPMNQQNQWWOMPSVUQIIFA>=>@JOQPOONMPNKGEEFGFD/ " !! %&%%()('(**(25,! #=W\TUURPQUY[a`[^b`_]`^\]\\aYIPm€”¢’‰©¡˜¡©¥˜Ÿ¬¨™Ÿ­ª” ¬Œš°¢– ±©š ­²£¥±¶ªŸ¤­« ¤±³£ž«±¢·§mTeb_^`aaaa`a`_`\QKMKNVXWZXSW\V[vjYek`fid_defc``cddghikieehiedicQj…†Š‰Š‡…‰ˆŠ›¤™•ž˜–•–§´€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€%>‡ÒíßäßÞßáÞÙÚàááàááÛÖØÝáåäàÞàãâÛÝàÜàáØÐàæàÞÞàäáàÚÜäàÝæÞ¤£›‹’„ƒ®áêäæåääääääääÜäî¾eCQROOPQSTUUVR]‚¬À¹ª¢˜–wuˆ•Ž”—Ž~trqf[†ÕîÜÚãÞÝßÀG7973/-,,-/010.---0/.../12236752368534655642231//2430..13452012124768969===;:==<=@>ABA=!&Ejllopgbjutrompplrupknppum^SLGEGFIFEGHHJMKOX`b`__b`TCWZWWVRNMPT\ecZ\b`[]`^\]\\a^LPj|‘¢“†ž­£–©¨›ªª˜—§­™” «˜¦ž“Ÿ°¥—Ÿ­°§£¥«§¡©´«¦²¯ž°°›·§oZbaaabb`^a]^_\`^SKKEHUZX\XZYSPa~mUcmbb_`gdhdbghdeegeefdbccfdfjcNf™‘’–˜–‘”—–£Ÿ«®£›š›§±€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€)f¾ðìáæåÞÚÛÚ×ÙßáÞÜáåÞ×ÙÛâãàÞÞÞáßÚÛÝÜÛÚØÒâæÞÜÞÞßÜÚÛáâÞÜÞçÖº¡™›—Š~ƒ­Ýíæäçâßááàãçàãï¹`CNRPT[WYXPXUPÀÖÈ»À«¤™–wq„—Ž˜ŸŽ~xpxu`€ÓðÝÜßÞßäÉz;563/./110210...../////023666566663432321241/010/0.*-102773001145358:==>?@@?==>@BDEFDJOU[VSXS[eceeF#%:dqjfrlajtsswuppqrqtsmouukWFBDIHAHEDGIJMQMNYaacd_TLC><<@DKMRSH97?GHFTcS;9C=:BJFGRRU[VMME1/=A?@BEKKFFKKFEIB?AJTXYZRLHGC<9;-%&5-#$##5CMPPRVWY`[TUYYZ[WWVTSRRRROMNNKJNQSQQSTSSUVPLMLKOUTRQSVVSNFED>59EMNORURNOTSGHEEHAEK; !#" "$&''&'&%$),*+12) ## ! -DX^RUWPPRPT^b_Z]_^__``][\^_aOTn|އž«¢™œ£§ ¤¬¥—™§¬ž“¤²Ž›¦¡–¢³©—¬®¥¤­¯¤Ÿ§­­£¦¶°žœ¬±–¶§lV`ba_`ca\ba`^ae^ONLHJT[[ZZZZRH`|kXdhbficeiebadggfigeffeefjiikn^Th–Ÿ–“˜“”›žŸ›ž¦£ž¡¡¥¨¦ž˜œ¤€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ .Z–¾ÊÓàæäÞÛÝàÝ×ÝÞÚØÚÜÜÞÜÜÚÚÝÞÝàÞÛÚÛÜÝÜÚÕÝÞÜÝÞßâßãäáÜÛÝàáæÐ¨“š™Œ…„ˆªÏàåãâåçåáâæâãë°T==?BCCC=>?ACEEFHJKNUVVYX[a_`dM%!$7`oieoj_fpyvrspoqnlpusqtwgL=CEBELEDFIJKKMONS^ecVGA?@DEDCDKNOROB64<@COa\C47ADB@=@IMGHLLJ<&)7<;>ACIICAFKIC?<:=FORUVTSPKF@:7@80-+(')'&'%! !&+/1467/42&&1+!"" !&):GPQRTX\VPNPPPPOSOKKNQRQUNJKJKNNONPSUTSTWRPQOKKOTRSXYUOMH>:921?LQRSTQNMNLGF@@C>EK: !"! !"$%&&&&&'%'*).1.#"$ !0JZZVVSLNTQU\]]_`\]fa^YY\``^aNTqƒ•ŸŒ‹Ÿª¡™ž¥§ §£˜œ©¬¡š¢©™Œ˜ª¡‘˜©¡‘–¥­  ±³ š¦µ«›ž¯«›®®™™»ªjScbbccbaa^]^`abZMNMJLRUUUWY\XK`zjYdlfdfccehhdbeebbhkhccegeeehl^Ti—ž•‘”•œœ §¥ £ ©¨ žŸœ›€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€#&/;Ka~”µÒèãÚÚÞÜÝÙ×ÖØÜßÜØÛÜÝÛÖÕÛÞÛÝßÝÚÚØØÜÝÝÞßßâÚàáÚÖÚßáÛâÛÁ¨›—”‚ˆ†ƒ‰œ»ØèâßâåäãäÞãïµ[F[eNT^\_\RXg¦âñèáÜÑÆ¹«ª¥Žvo—›œ’}oqo]yÇæ×ÕØÔÖÛ½q9373102321321//.///00-/45234566544652132/.0--031.,.//14335324547998::;>?=>@@@ACEED=?ACEFFFGIJLTXWW[Y^^]eU,"3[mkeni^cruttqlnottqopopsfMCIIABHDFGGHJJJJLMPTNC<<@E?ABBDD?987;BHKOS_gmidb_ZYQKJJGGJ69>5'(-(6@FEFJJFIRSIA>7-,(!'4-$!$:NPMRXXSPLMPPOQSPNNPRQPROPOLMQTPOQRRQPQRNLMMKMPPNQVUMIID97<85<;:;?EDCCDDCB?ADGHHGGGKLLQWYXZW]b`gZ/ .Uloink`aupospjmposqnpqptiREJHB@CFGFCDHKJFMKEA;;B@>>???AFGDJNLSYS?57FWd[C7<<:66F_zq]G<<>>?DFLRTROQRQLJB>CCCOL4!##"##%&(&%&&(**/GSL0!)K]VPUVOMPPW[ZSPUXVVXUUY[[[\]OUmzŸ‘ˆœª¤›Ÿ¤¢›ž¦£šžª­—’¢ª—Ÿ§šŽ›°§”›­«›©°¢™ ­¢›¥²¯ ™¦°¢Ÿ¶ŸfYcbbb`^^a^]_^]]ZRILKKRYYXTRWYN`~t[dle`dfhcdccfifaeddggeegddein`Wm—‘’•“˜œœž¢¦¦§«­«­°ª£žœ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€!(*)*.1;Ha„¬ËÜààÙÖØÜÜÙ×ÚÞÝÙØ××ÙÝàÞØØÝàÞÎÑÚàÝÜÞÝáßßááÝÛÜÜÛÞâÝťޗ’‡‚„€†Ž¡¾ÔÛÚÞæäæë¬TBPQNT^\`^U[šèóàìçо¶»º¶º¶‘cp•£ ¤–{rgh\s¸ÜÕÒÔÌÏÒ°i;87544653122210.--/02430/021111122010/0/./--.00//0243352/152368;;89==;;:;@EDCCEEDCCDGHJJJJKNOLKS[_ZX^daf]5)Lhqjnka_msnknmnpnqpqsmmulM@@@CHPHFKLLWdXD;?OdcJ7:96=Os–•i?7?9(-7859;:;==946<91101578;@CLYafhhglfaa`]\]dabdirmXO]bYXekg`\TJB=>A8CLMJHD>@50/.,+(%#  "?PHGPPMONORMHJKLLKJKNPWVVRKJOQRRPMLLLMNMNNMIGFIKNNKIIKE?@EGHGDKT[YURPMJIB?@>GXK/ ##""#%()$%)*,+).G\eN-"'@[YOTWNMOPX^SHJPLJOQLJKLIIKRITm|¡‘‰š§‘˜¤¥—¦£—›©­•£ª”Œ›£Ÿ™¬¡•©¦œ§«Ÿ™ ®¥œ¢¯­Ÿ•ª±Ÿ˜´¢iUcdb_]_`_[]_\Z]ZQGJGENXYTWSXZQ`zmWdlffgbdfgfbadffbcfhfbchfffim^TiŽ’ŽŽ’”—”“•””—šš¢ž› ˜–¦€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€"(+*'&'/08G[z§ÌáßßÛÕØØÑÏØÛÙ×רÛÝÜÓÒÙÖÓÜÕÍÓßÞÚÜÝØÙÞâÝÖ×ÝÛÙØÜáÙ¾£˜˜€}}~ƒ}|ƒ”§µÀÇÇÔä¬WERNOT[Y\]U^¢åòêíè×»¬¶¹µ¹¿ og¥§¨—|shj^r°ÕÐÌÉÀÄɤc;:765677415433222210154/-/-.01221000-.00.-,+,/2333332331/153589;;99:9:>??ABABDGIIHHIIJKMMNLORPLPZ^[\]a_daA %Aaojjja[dopnnnomnqpnomnvjO>@DFGHCEFFGIIINPMF?:DKHRMAGRWXc^WIDU^P@KTeƒ“‰xw\9.73#/6539;87/9DD8-.60+).368;<@DL[jleb]\_a`_a`_UVdbQI^kpg`cfcT]a[WYVOHGHJJIHJSga?.43%'$ ?98<>;=>?CCBCFFFHJLLLPNLLLORTQLMPMNTXV_[__bgR$"!6]rlknf]cjkormkknmmopnothPCGFACHFCCFHHKPOKKIA@C@BBCCA@EKPLONFLXXSZ`VEIX[cghmvwomeP85;0! +3218;87748CF;.''!%,1358BGHRdjefa_aa^]^[^TWjbLHO\b\TUWV```_\[]_VMHLPMFBWiiP8001&" ""!CaSJTTICDD??CCCFIIHHKONSXUNMPPLONKIKNPLPTWXWTRUPNPPORXTUTMJNL@D<8=CDDDDECHPoŽ„E#! #$$$$%%&&)(*)))-8=H\g^M6 4RWNTVMJMQ[VB-+0,)/2--6<:7667823653441130.10/2+*.0../++****++,/2676544011357889<;9::;>A>@DEACHHGILMLNQQQRRPNPTVRNPQNQ[Z^X^^^fY- ,Yrkhnh\`kpooonmlppmmprvkPDGBADBEDCDHJJJJLJECCCACA?>@DFFLJMVUFGZQT][E@U]lld^bbZTZQ?100+()45-.6947::++(%#!!!!GjYMOOJC;8:?A@GIIFFIJHLGPYSJJKHMOMNTXYQRTQMPSQQUUQSWWUWWSNLLJGFD@=<>CGKMO\e}—„F!%!!!%&$%))%#)&%&)49>;E]^QI3 >XZSQQNINTP;1**,+)*.,**.4;?G[mp|™ ‰‚—¦ž–¤¯¨ž¥«¨¡ž¤«¢˜¥­—ž«‘‡”¨Ÿ”§ª›§«¢ž£®§•›³¨“›¬¬œ¯›mXSTTUUTRRQNOPNNNJIAFNTTQUVSVXN`zjPafba]]d[X[__^^]_`aaaabceecbg[Qg‚’˜¡¦¡ŸœŸ¢¤¦¦¦¥£« ›¡Ž€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€%&"#'&$%)++.560-4:DZ€¬ÌרÔÎÑÙÙÓÐÐÐÑÓ×ÛÞàÞÛÙØÙÚÛàààáàáááßÛÚßÞÚÚÞßßÜÕÅ­’w~ˆ…z|y~rXMRVd`b][YS]¡çîäæÐ¼°¡œ”Žƒˆ”„e}¢ÀÀ¦…qrjjv|xxrppxtS9==<98677875542221042/00.-0/12-,,*-+)((+.16300220-/255458;9;::;<<@A@BFEBBEFGILMNPSSTSRQRRRROMOPLNW[]X_^]e[0 ,Snlhok\cmrppommnpnlnpppoZMGAAFFDEEFGIJLHKJD??AB?@A@?BFJKFFS]TGELLPWOENW_aZRRQMKKH:-***+-*,028:516:FLKKJHIKKJEGIMRNJMQSSQQTSPOPQONSYZY^^XUUSOVXWRMLKIEDCCBCEFJRRVWq{A%"""$%&&('&$*()()49>;@LLPS=$+JWQUSQMLPI6##%''%&(''&&'*-/7@JQb‚”Ž…š§ž“ž¦™¡§¤œ™ ¨Ÿš§ª”‹›§“Š—ª¡Ž’£¥–”£©ž—œ¬¥”›³«—«¬˜™¯šiUUTTSSSSSSNOPNNMHA>DJRWTWVSVWM`{j[hkc^VQT[ZXXZXY^ZWX\YUYcddegjZSp•£¡£°¸¸­¸¶³±³¸½ÀÅÓÝÈ›„š€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€&% !#"!('.LhpqrO48Jg‡±ÎáÛÔØÜØÙØ×ÖרÚÛÜÛÛÚÛÝßàÛÛÜÜÞÞßßßÛÙÙ×ÑÐÑÖÖÖÓÉ·¢”Œ†ƒ€}v„yfbgVQg~pkc[WSU“Ýôìä˸­¡“Ї€‹•g~¥Á¼tieeimkkmkiiqpQ79<;97777742474211/2/+,//.,)*+,./,%'+.23339730..131477558;:;::>??AA@AABDHKKKLNOOQSTTRPRSRMRQOQSOOV\\X_`]d_7 *Hhngnn]]ionnonmimlkoqpqpdVKDCFHDFHGGGKNILLD==BEADFB=;BIGIPW\^R?DGPZREKRQPHCFF?CCLdmkjigfecbfbei`LBBCA>?IUZYPEA@@?=C^XI=;:Pm~‹”£¤–‘›£š£ª§ž›£«ž©«•Œ›¨œŒ“¤›‰‘¥¨•“§®¡˜ª¢’™²¬šœ¬®—–°šeRWVSRQRSTROPPMLKG>>DHQYWVVSVVM`{jVbfb`XQTPVY\_[X\Y]ZQPXaeddgkmYUw¢«§ª°°µ¶µ´´¸¼¿¾¼ÎáÚª€˜£€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€$#! !)/&H£Ú×ÑáÝ®a1.CWi—ÆÚ×ÓÓÔ×ÖÔÒÏÎÌÌÐÐÎÍËÊÉÉÃÃÁÀ¾½¼»À¾»º¶³±±³´±¬¥¡¡¢“‘™|y|oVT_QU~šmd[ZXQ}ÉïéÚǸª •z”qk–¾ÏÄ }tihdcejjghfdmnR75::98777775551/00*,,++-,++))**,,,*,/23432320,*+05666789::;<:;@A@ABCCCCEHJMNOPPPQSVVUUVVRNQRQSTPOT\[Y_`]bb@ %=dqejo`]hnmmmkjiopnnnnpngZOIDBEEFGHGIKNLOLD>@DH@CEC=:0*$ ,9;=979:99:>KK9%$+28?EC@?CGNZfYKFFGC>BHB5.26=IDXukJ5)/$" -Znf_XWOB7872;NRLILMKJJOMLLMPRPMNNQSUTRZZ]^^`ca]_^VNNRTQUWSNKHFFEEFGHHHOROU]xŒo2$ ###$"#((&%('++-).@G=9;EEDP\H.$!*JZVSQRQE4)&#$!!$$!$$$$$%%%))+/2=O^t‘¥šŒ™§¤•ž¤¢š˜ž§Ÿœ¨®›Ž›¬ˆŽ¤›ˆ§ª–•ª³¥› ©¢“™®«š™°²™—²œdRZWTQPQTVRPQQLJJHBAGJQXUUUTVULa}k[egdaVLMYZZXVVX]ZYVUUZ`eeefjl[Uu–›•—–Œ–™™šŸ¥¨¨¥ÄÒ¹ˆ˜œŒ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€!!"""$*.<áÛÆÎÑÌ©oD76H\…±Çú¸¹¸¸¶µ²±°²±°®­ª¨§ŸŸ  ¡¢¢¢Ÿ ¡ ¡¢£¢ª««§£¡£¥“‘¦¿¹œ„xkbSOSSmš¥‰rh_\\SgªÕÒŽ·©™—›‹}‰‡iw²ÖÓÃyrokhggfhkhfckoV:4888887767542011--++,+))*,.0-+)+/001010003/,+.1228889::;:==<'+1/2<>D^ovxywspqstovvZ;7A?=@GOVajaQKMOMKRWPD@A=EUpŠŒŒœ§Ÿ“™Ÿ˜—œ¢š•Ÿª–ª”‚«§¢¥”“¦­¡™ž«¤™›«¨™–±³œš³œhT\YVSRSUVUPOPNMKEDAFKRVSTUTVTKa~kXbedcYPSMOW[WY^\]YVVWYahggfej]Tl…xtyzzuy‡‹‹‹“¥ ‘€ŠŸ‘h€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€!#%%$&).##Y¢· «œ ©š|Z<>EUq’ª©ž£¤¦¨¨¨§¦¢££¤¢¡ž›œŸ ¡¢£    žŸ™˜–’Œ‡ox– yjic]WTd‰¨Ÿype\]XX‰·Ãº¸´¨›‘˜–Šƒui‡¾Úη”toekmhdglptpjpt[<3678888666311252+0+*-+*,.+,+,//./,.0210-+210013559;=<:9;=<>=>AA?ACDDEGJNROQRRRSTTXWUVSQRUNQQPQOMPY[Z[]]_eS'/Yrfdjd[gnoppnmkonmoqpqocXPHBBEGECEILKKMMHC@BDCFB@B@>AGOUIDV]W[cNG[[F=>53..3204-33387/*,)$!#5779<;78;85MLKKKJJLKRSWZPPebba`][^b^[[]\\]\^^b^SPTTTUUSRSPKPLGFHKLMMKL`ly{V$!#!"!###$'''&''*(%(@[\C>76BD@LM;6-,HUINXS@."!+.-(#"##! !#%!((&')-5?BYyˆ‘’‘”–—–—šœ“•ž—‰œŽ‚¤ ‘Ÿ“’ž£œ™ž¦£›œ¤¢—”©ª™›­šlW][YVUUVVXOKNQSNC?=CIPVSUTTVSJblV`ddcYSYTQY\V[b\V]YMKYcdfgdch]Rh~tu{}†ŒŒ—¢£›¡©ž‹}‡™’rV€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€#'*'$'&&# @ˆ®Ÿœ§¦œ¡ª‘fAEEKf‹›˜•–˜šš™—–˜˜—•‘Œˆ…ƒ‚€~{ywvtwuomnmhkgb`_]ZWUMR\ZWY\`[[VVo‘Ÿœ“{qj]^\Skš¸¸²®§¡‹‹‘Ž}mv•¶ÔÕ¹tkdmogcgkirngms]=156789765:40/011,-*,/.-/.,,*+22-,0010/-,++.00/16;:=?>;:;>:=>?AA@BEDHLMKLORTUSSTUTUUUTSQQRQTRPQPORW[[X[^_dZ+ +Qnlfga\hononkioqnkmnmnof_UGCFEEDEEGIKKKLKEAACCB>>AB@DLRaR?GRT][ECZX=9C>ADIKC;DIINWaf]OMQSV`t‰•›’|pv~yŠ•l7''"  >eja`UJ==@IG40BTVWTQQSTV]]_^LGZebbb`\\_\XZ^^]\ZXW]\RPTRSVVSRSSQQMIIKLKIPMM_o~yH "# !""$&%&((&%*($*Hd]H?<47BBFNB1+KTNQUF-"!"# &1:<72/+*)'%"! '%()'*,2APbz…‡……‡ŒŽŽŒ‘‘‰†‰…‚‡‰‰ŽŽ”Ž“”’”š•—”“–”Ž™˜‘–¤”oY^]\ZYWVVWOLORSOF<=CGOXVUTUVRIb€lU_ccaWT][Y]^Y]a[Y\\XWZafeedei[RmЉ‚ŠŽ‰–¨¨ª«ª¨©¬¯‡{|‘™|`\€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ %*-($&$$#-a‹„‹…ˆˆzqePCM]jyˆpqqqnjfcbccc`\XVUUVWXZ[[RVUONQPKJKLKJKOTJNXZTRUROOTSXv”› –vlk___UW€¨­§¦¨Ÿ‹ˆˆ‚rm‹ ¥Áί†rkkedklfejsogls]=====<<7<>?AAADECFLNLNTNQRQQSTSQUWWVUROORPMNMMPU[[VY^^d^."*Jkpid^\hppqqnmkonjjlnqmjh\HEICCDFFFGJLINOIBADFC??BA>BKSXTJDBHSP;B_\KPVY``XLEQfsiVLQSLFJDD@775*&&$ !,563:JG/$/84055:IOFFECA?>=;26:;A@BJPV]cVLMQQR\q…šš‰pjwzp{k3'&" AgkbTEFA>=FJ:3APVZWUX]`Z^cf_NJVb__ceb``a[[__^^^[Y^^USWUPUVROPSTTNGDFIJJNHBTlw;$$ !!%&$%)(%$+)$+Nh[K>C;2=EHJF-+MRRTM7 %/316BLLIG>>=:5/)%%'$$%+-.4:D_y‚…~‚‰‹†—”‹‹Œ…|v~ƒ}yƒ…x†……„ƒ…Š…ŠŠˆ‰ˆ†‡‹Š‰’œqZ^^^][YWUSPQRPPPL=AGGNZXSTUVRIc€lXbec^SP[XY[[[_`[^XX^^Z]fcbeikXSt‘’ŠŽ––›¤ž›¡ª©œwžy[^a€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€"$%)*''"$$ &?ZgVVVWWXYYX[SEG[jmpdRSb`UTQRSTTSRQFHLOPOLKOOOOONMLKJJLLKLMNTVPLMONVLOSUlŽ£—~rtfTW]Tcƒ•™Ÿ¥–‡{~yivš¨»¹˜{qmlhhllhhlnqjks_?26554332253223111.-,,-.--//00.,,//.-,---,3213;CEB@@>=<<<<9?A??@ACFFHLNNQUTSQOQUWWSVXWVUTRRQPOONNNPYZW[^^^b>"Eklgmb_hrojlllqmjkkijlllbUMGDHDIIDFMOLOIKLD@DFE@AFD?DPX]\ZSBATS<O[NHJLMKF<5JL30:;;;BINU[[QEGNONWlwŽš“…xsvxksc5%/" Fc^ODBFDACGC:=JZ\]YUX]^X\cbVKNX_cb`a`\Z][Z[^_]ZZ\`]USVUTRTVTUWUPJDEGHKNKMRUe|g3"" %&"'&'&'&'&&')'5XfTHRSA.-8>FE2/LNKN;&"*/:KQOKDAENVVUTSQLFA5,%%&$"#))-16BZomd_gomimwyww|~|{}xv‰‰€|‡ŽŒ‹ŽŽŠ‚‹‡€ƒ„‡†ˆv^aed`\[ZWTSWUMORL@@AISTSVTVWNIdyfYacb_UQYXZYWX[`c\[`_XZbegfbblaUkЉޑ–’”“š‹z}|‘ˆ]RbW€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€!#$)+'&#"! #1FTLLKLMOPQNW]WKELVcvoYW_ZORSSSQOMKGHKMNNMLRQONLLLMJKMPQPPPNRSOMOPNPJLOQb‚š¡œ‡uqgYU\RWj{‡ŽŽ„}xtpwŠ›ž¯¼®ulimjjmmjjmmpklsaB3444433331563/111/0110/..,,.0/-,-1/../00//5<@DEB=;<>?@?>=;??@AABFGHKOOOOQQSTTTUWWVUSRTWVSPQSTSPMKNY]XY\]`dD"=dlimc\erpkmlkljilmnnpnpk^QIFGFGHHHJLNLJLJA>CEFDDEDAGOXagibOENO?AS^^adeeinrz}ptu|ˆY:DGFEECCGB=950*''+*3?=0.7@?<@DABK@07<:98=DIS[^LBEJKLSdqx„‚rccgew„f7"&'!$$(ANJHGDBLIHHB=CPY[ZY[^\Y[^a_WPQU]ca]]]]^_^\ZYYXY[Z\[TQRQTRTUSTVTTNIIIIJLKOQTfv[+"" !%&#&'&'&'&'&(&&=_gXIU[M5-03@HQRPSTUVOIcygT^cc`TNU^XW[\[\^\[Z\]\`ifecdk]SkІ‚ƒ„~‚~{ysr}‰‘›sW]VU€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€!!#*,'$# "%->QJJKLPSWXW[_^VH=9@_tpeZTTXXXVTPMKKJHGIMRUPPOOQSVXJLOPQRRPMOOLORRMOONPRZw™›xmjd[]YY\fw~tmns}“Ÿ—ž³µœ€oihgeeggeegimikrcE42233444424530.143320.--..,*,--.0../////05>EGECA?>??@?><;===?BBCHHKNOPPQPQSTSSUVWRW[ZXVTRUTSQPOOONX\XX[^`gM!" 4\kileXaqrlmljljkmnmmloroaOGFEJFEIKIJMHJKE<<@AACGHFDEGKWafcRCCJFKXaddcbdhqywrszƒ‰œ‹ZABEFHGCDMJGEDA>=>FBAC@:>HFFEEHC?ATJGHHIKICMXD.3:;;;AFINSSJCEFHLTarŒ‘ŠtcbxqwvX4%'&%3;9@CKTVSTTSUQJbyiZbdb_VR[`YU[a`^_]YW[_ZZcgddgiYQm‰voqvvsnplht‡†uŠ˜{[\WYo€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ "*-'"# !'.AVPPNOPSVXXWTU\`UD4=UszhXW]]]\YVSQGFDDEIMOQQQQQQQQLNMKLOPONNLLPUSNMRPQTSj“—›”}kmoh^ad``o~~towˆ•œ“¢¯¦ŠwlfiffegffefdgegnbG51113344552011015//./010/.++-//..-./.,.48@FIEBABBCA?=<<=>>><>BDFJJMONNRTTQRRQSUUSWWUTSUTSTSRQOOMMPVYWY^_]iV( !.VkiieV^orlmmkmllnnljhrxxiTKJHMFDJMKIKNQOF@BDABBCDEEIMDKPRTPKLOPT[_`_]eeiu{pm{ˆŒŽŠƒd8)1455634:A>=?@ADHGGILJGHLGMOMLKOYRFAEGHF@-9[bKDB<@AGMORUSNKLKNX`jpˆ–€na_c[[YF0&##93/,,4ANSU_ipmaUJC4*"#').33K^U>9?CB?CGEDHJHJJJIJLMRRRPPQSTPSTRNNPQLNPPLLPRKNPQUXWSRKKNLOL@;>AIRTQQTPURJazjV`cb`UOW[YWZ]WWb`ZZ^][]bb_cij[Wt—„|~„xv}yxyszšŒe]ZLd…€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ !*,'""!!&+:NMKJIKOSVTUSQV]]YH?AUmwlYRSSSROMKCDFHHGFEFHLNPONMRSOHHNRPOONLQVUOIQOOSM]ƒ˜›–ƒokqrccecbo…‰’™š’‘š¨¦“}rg`dccdbccdc^`^`f`I600123344110.1440210000.-/,*,.-,-0/..07@GEHHEBB@>@?=<<>@BABA@FIKMLOQOPRUTOQSTUVTQSUWWYYXTTRPMLLMNOUYWX^`]h]1+QkhfeU[lqjlmkklnoqpnlv}{hSLMMIHIJKJKKOROJNWXTRNLLLKNTUYXWZZXX`^]]^]_ce`_gh_nŒƒeG813.1/,./--,+-00.-.-/3565567<<;@BDIC::@B=5+.+@JCCEB87;?AEJIJIIDDKMQgol`YTPPGDIJ<-$.FN@./FPJKOLGPLIB:?JOT\YV_^YZ`\[]\WVX]aa^`_ZYZYXXYZZZ\ZZ[XQPUWUWXUVXUPMMNLHGIJPO[p_5!!"#$$%&'&'&'&'&)%*6JbiZHO``M>3#!1&>L52OPLJLJLSZLBBB;7973-((,49;H\jlfdf[J6)"#)1->QPD<5915;6488:;<CDCACGHGKNRQNLPURPNPUUQNYUT]mvl]RDBIMPMC;?AGQTQQSOUSIa{kV`cb`UOWYX\[NEJTZ[\ZYZ`efbfjhZVoŒ†{tx~|tkqkflp|“ŒbgcP_{€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ !)+&#!!%,,4HRPMLLPTW[ROSSMOWQPPOP]kkbbcca_]\OLIFEFGIFHKORTUVSWTKKTWTQSRPQVUQLSRTXRYt•›˜Šxmnuriffjx†‹‡”–’“’–¤¨—tl`Z\]__]]__][[YY_^M911122223.//1231////.--.00,**++,/..05BB@DHJKNQSSRRQPQTVUUVVURUWVTTUUTQMJIKNQLT[YV[`_d`;(HhjecTXkqjklkegijlnliu€zeTLJKDJMLIILMLNJIT`b_d`^`_]^bhhgeeedcca_``]]ce\WZWWq–‡hRD=A@;9768:93//30..,**+'--,/1./1/7A@:1)05;73536--1669<:67<:BEKRNIKMFD@;BLMRZYW[\Y[^Z[_^WUX\_[WYZWVSVYYWVWX[\[[YSRVYWXYVWXVNLLLJGGJILO`mT-"!!$%$%'&'&'&'&'&%.33EVSJRcbNF>,#+%!184DQNNJABLRQG@@@>;;4542-)'&%(3FT^hrrhZJ8("$("*=>;:<>=;;:9;>><>B?CDCGIJLQZ_XOJ>>GKOLC=ACGPUTSQNVSGa}lZbdb_VR[ZY^TBGL?>OTQVYY`eaefdZVhqi_Y]cdagaWZt‘{d[[TVw‘€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€!"')%$ *2,3LTQNKKNSV^ROX]Y[blpymJ>YvŒŒŒŠˆ…‚€ƒ|rf\VRQ`\UNJHIIJRTOQZ[TSWXSRTUSRVVY^ZZf†•˜„uovzrnor~‰‰ƒ‡‰‹—›˜ƒrkc\ZZ^aa^^aa^[ZVTZ^R>222211110..11/.0,-/.-,++---//-.105>@A?CBA?>===CGHHKKMQPQSTSPPPSUVTSUWWXXWUVVSOMNPQQONLLS[YU[a_`aD!"=engaRVkrjjkhjlllmonku…j]QGHDHLKKLMMOPIFOVVUZXUUW[_bc`]\]`dh^aaad`\^b\]`\]kz[JC>;=?GCFEDEEDFFDDEEBABDBCGE=873;<:<>==627@A>:41?KA8747018>?@A=;:>FQQQXZWUVZ][Y[__ZVUZ^\XYYXYY[[YVUWZUWUTVTQSYWXYVVXUKIIIHEGLIIObgH&# !%&$%('&'&'&'&#+5/"%6@@Nc_KJI6)*1'0CLLLKEAKSPOKD>=><8@;64651-+(&*4CQZfglpeK1"'(*$6s¤§ˆƒ‘™†€Ž—ƒz|‡ƒtsufbliXPV^RKLNHA=CE@;=:694;?>>BDE9;ELMPM@<@?BKRRRONWRFbkT^cc`TNUZ][H>SYTXVSVXW]^__\htqpuz{{|‰‰–«¯˜qR\hNOo‚Œ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ "#'(%%$ )1'/Mbbdiq|‡’‘“˜ž¢¢Ÿ„T?Skffeb_ZVTX^hqvvtrkaRC:78:>KRPT\[QTZ[VRSTTQSTY^\XZvŽ–’Žszuuwut|ƒ€zz‡“‘‘ކrhe][^]Z^^ZZ^^Z]ZURX_UB3322100/32.,,//.-,,-.0001//0/038;BIJGEHLHHE@>@A@CA><<>ACBEGJKIJPQPQSRPQUSTTTUWVTUWXVTSRPLNPRRQONNRXXV]b\\`I!#4bri`QUktljjehiihjmli~‹z]SKELHFFINQNKNOIELQRSQTSPPSRNRQTWURQQOSQORPLLKFHGCFHB=?@=HQHAJLLKIDCJFDEGHFFHHDEJG=67=A>=GNNMK>8;=><607LNB>7154685563:6635=?BEOPLMOOQXUXR9$ %.;826O]UKGLUK<799DOOQTWXX[ZVYY[^_]WQRZ]ZYWVWTUWXXYYZVXTSWVQPXVWXUUWTQOMLHEGLJFOca? $ !&'$$)&'&'&'&'&/3.'$(02F`\GJO>+;A'9NNJLFBFGJPTJBA?;;@85236886;91&#+6;NKThulTA% &',U‰œ‚—ž†~“£Ž‚‹£ ‹«¢Œ‹¡¡‰ŸŒ€…ŽŠ}tŠokqgN>GD=77;946?JKHPQE>BABLTUTNOXREckYacb_UQYW_YD9?JOL[a__cdf\Z]YYZUZ``gv…𤧲¯œ_TejTO`‚‘~t€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ %#""$)"/65AUp‡ «§š’”š¨´²¨›Œjb]UHAEJEBGK@558.4?LTUPKD>758=><>KVXVWWUPTVUW[YRRSTTSRQP]}’†y~ttvy{|†‰‡Œ‘‹Šˆslkb]d_QXX\Y_c\^RWWQSa[C63+,52*/-11--00-/.'050867424;@CHMLNNHHJIGFHF?>BABA;9?BACCDFILMNNPQQRSSSRSSTUVVWYVSSUURONNPQPPPOMLRXWVX[[bhO$!2Wmh`VReqliihflojhklj}{`EFGAAKNNJIKLKPNJGNX[XQVZZXVVXTUXXURPLRONLJKJFF=9999::AGMLJNPB87855873JbRDF;9;;:;?A@C=;<>EJJMZ[]XR\\UQXQ5%%!! )' 5[`PJLTUK>98>JNNMMSVSV[YWW[ZTTUPTZ]ZXXXUWXWVWXWUXWVWYXTQTTVWUTUTMIIKIEFKJFVdO-!" !$%$$'$$&(&##'&/.'&*+-9J_\NOH5<9EPZ[YZYWSWYZ]a_YWWXXWVTSWiƒŒ‹‡zustz‚„†‹ˆ†‚ztkg`S[g^ccgbafelcee``kjY=3,-3872/.-,+,.16BIW[X_^SJEKPOPUMKMMHGIHHFCABA?>?==>>BEFEHKNOPQRQONQUVQMRTUVWWVUVSOLNRROORTRPOLJOTWVUW[]]fV,!.QljaOSfngjmkdgjkkmprl\KCA?@FEIKJJNPPOOKGHNPNPQPOQVWUXYZZXXXXWXVSRSRPQMLLFEO[bjkr~uYGPRMILKIMPJGJLKJJJHFFB>=@?ACHLJGKI=578657:6G\SJOI=>>?DJKHAAEIEEKP[hqkb_]]Thw_0%% "!5Y\NJOTSG?>; ,LSKLNHDDDITKHFCA@>;>>?@;8;A@CO\]UB..,(-B]mohV8*)'Aqwnnsronlmlpvslnx€vt~€yw~‚}v|†x{Œ}œ†UGPONLFAACKNLIJMJD;@BEOTSQQQUNHfiW`cdaTNVVWSE88:59BA==>?><>A?@CDGGEHJLMMOQTUSPQTVVUY[YTSVVSQPPSSSSUSRPMLOPOMSWYXY[^Ycc@">dpcOQdnjhggjedhihjobMGIBBHEEHJKLNOPMOMHDDDCEFJKFBISNOPUXQFBFDIMOVZT]fg_WVapt|‰‰v^LAFFFILKHIDFJLKGC@B??CDB?>@BDIMJHKD:0---/20'1SYBIUULIPUUUVTUUUVVTPUVY[[YXY\WTUXWTRYWUUVVUTWVWXUTRNJIIJIFFIGNaZ2"%$##&'&')(''(%#$(22.*(# #-M^_LFSE5C>#2RNPMNJDCGJLPHCFF?>HLLMNMKMRRPPMHKNKJH@3')9J\hnfJ*3Zjikjgkqpqssrtwuqtz{wy‚|w€zsqqrpsszpTGRNMPOKKOOQQMLPMB>@?CMRRTQMQOId|hUde]ZVRTVSPI?>@?98666:=??==A@A?>?DHIFHKJDF^|„vtldx€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€"%!"  #'6>;9:788BDBQ\PGY_[U?(!%(*$"(&$!$)))*(%')'&'-1004997?@CFGKNKHKH@8455799:>NUG>?AEGDB@>;=;>?>?BADLPW[[ef]d`B% &&"?[ZQX_]QABID;?ISXNIOVUUWVTVWUWWQTWY[[[ZYSVYXWVUUWUTSTTTSUSUWVUSOJIJJHFFHEP_P*##%#$''&')(&&'%#%*0.+*)$$,-4F_TGTL887$3QOMPOMHBBJPKNKE@95;A?ACDCFKLHKNLJKJNPOG:016>O\ikI.7SONOQWZVWXZ[\\\\_dfceikhkrvqnrtpmorxxiVNQOPRQLJKJLPMIMMD>?>CMQQTQOSNFa|lY_`a^QMXRNNKD@BA<==::;AEHEDEG9:axncYQIDBEGHOd€Šqvodv–‹\€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€$%###!!%3:5..39?B@?EFFIIINLKJJMPSTNRVVTSUXTUTPOPPNORTUVWTPRQONOQOLNQUXWX\b`adL .Xn`HUikfggghiihhkmmXHADEBDHDFIMNMOQQNKIIIFDHJJHHJHCMW\[TGBMQ@BPRUUJ^”µ°©ª¬²¯«§¬³«‘zUIJNIJKDFJKGCDHKHECFGFGIPRRTVQLOOMJIIJIHMKBCC833-4::7777448=?EJIKRQ[[Vflo|mB###C_]U[a]PCBHD=AHPVPKPWVSUYUWWSVYSPU[]\[[ZUXZVSTVWTVWVTSTUUSUWVURMMLJHEDEGCT\C!#$'%%''%$&'%%&&%(-0*$&(#%06%-RUEMPA2)$9SOINRL>>PP>7MN>::4/1//3457:;56;9:?A@CEFC=3+-9BK[f\KNIJNNOPLNOPSROOSQRSTRQRUPRVVV]^W``_``YSTQOMKJJIGEFMPJKKD;=>FPQOQRQVOEboV^bc`SLUTOOSMFB??AA@=?DIIJHEL??rœƒ~xoe`[]gxˆ~cmxiy¤]Y€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€"#!$$"" *---'-@LHFFGILMU_F&%& &#(,+(&!&&)(#$''(%%(/3310.1421>PPLKNNLMPSPQVXTQQPQSUWXXWQX]WTf{ƒ}{{{wutppqniihaYm€u^t­Ì¯‡ŠŒ™¢¦™š¡¤ £¦¢¢¢¡œ—’˜¢¡¤§§¦¦¥¤¢¦£–¦Œi\NKPMKMMJJFDFDAADBBBBCCBBFHHHHKONNNOOOQRTTUVXXVTRQONNOQRSUVUVWURMOPOPQQPPRUWWVZ__`eT)*Rk]NZjhadfhgjkjijll[IAFEBEIDEINOMNQRNKJKKKJKIIIFDHOU\]XPA?NSDBNUPJH`‡Ÿ¢§¨§­¤ª©©®¯·È£^FUNLVRUXYVVZ]]YXYZXUTVVWWXZTORQQQPQPNLKF;95*)+-4;<===;A?CGFGKKJSWUXboswfM7(!#Da`V[`[NCCIE>BHNTRLMSTRTVVYYVVVRSV[^]YXXXVTSTVWWTVXXVTTVVTUWWUQKHIJIHGFFGWS3$%'%%'&$$&%$$&&&*0/(#%% &8E3(8IHGLH4#ARNKMQB(/QR14KJ97;5.-**,.-.051354574232/39817,/7;IYY>:>EDCFIKKMONLLNONPRPLNSUQSSQSSJKOQSVQNSVSNOYaZMKDHLHHKF<<>FPQORQRVNFe€kRae_\VOQUPSWQGCBGD@<;?FKMOOFLD>f|smpz|wmlsvljv€~f¬œeO[€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ "# $-*(*#(@SHDP[XRVO+9D2)53,-0,*,-&'+)"#)*&,48854361145:Phkecghfgknjlruropmnqtvwxx|z{|}€{tngbchfabd`\[ZQ[pqgy£Ç½“ˆŒ™›—¡ ¢Ÿ›¡¤ž˜›£¡›¢©¡¢  ¤¤¡¢¥ ¨§Ž¡‹l[OJKJMOIJKFDGE@ADFCADDBEIGIJGILKLORRQPQRTUUUUTTSONOPQRSUTTTUSPQTMQSOLMPRPRWZXUW[\_gZ/(Oi\OWeifeeidgjjiikmXGADADJIFFJOOLLPQNKLMOPQPQQMHGKOLQPONDCQRHBNYNELg•¢Ÿ¤£¢§¤¤¦š˜¬¥wbiiehicddbdeb\[XVSNJLPOQQTVQMOKKIGEEDB8=86433.39>ACDA=@?DF@BTeSNTRYd_aZ[N7%$ "DaaVZ]YLCCJF?AGNUTLHNRRVVYYVUTTUWUW\^ZY[XVVXXUSRSTUVUTSRSQSVWWSMLLKHEEEFMXJ'&$$"#&'%&($##%&',2*'&)'"0IMH.!L\ih\V]\RNRRLBIC>CB@GA63985796789;;;:==@DC@CJJEINMQSLJOOQVSR[\YWc{‡sWKBFOLJIB>=?;76637?@>?==A:8CECIJIMV`b[S@?DJMOJ@9=@FPSPPPPQKHdxcU```]QNTVOQH?bZQ`jieccghhhkigkhWJGFEHGFKHHMRSOLMNKIMONMOQQRUWZ`^`bcgnrrty~ƒ†‡‡†z{xpnpnijje]WWTQRQPONMLLKJIJLNMLMKKKIFGJMEDNSOKMJKLMMKJH=93/-,*)').6989<@DJOPNLLPQX_]\hzƒlE% "I`[TZ]VHCCHH?=ELQRSOKRWTUVXWUVVTUTX[ZY[[YZZYWVVVTTSSTSRPRPPTSNJJKMJFDEEFNK3! &$&$#%&&'(($$&'.2-"#("!>YWDR`D#8PGJ:!%FOIVM18@5FWC/88422.-1//641Fbs†€y†’‡z‹™}‹œ•ƒ‹š—‹Š””…†’–~~ˆ}ry…zjemk\W`cXOPRLEEE>=>;89:<86:@B?;69AHKMI@8;>EPTRSRRSMJfzdXbaa]OLQRUVD7FQOPPQQQRUWU[[[VLPdmdYV]ebZ[aZ`pij‰ÂÏŽQ__Na€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ #"!""!)2+%-#4rŠ]t¡ŒH"2TF3/563521/-,,,,*)'$%)06987544442230J¶©›ž¡£¦©¨¥£¦«°±­¥žŸž ¢¡ž ¥­¨£¡£¢ œœœšœœ¢œŽ‰ƒ~ƒv‚¨Õíà±¼½¥‹’’‰–Ÿ£¤¢¡£¢ž•˜œœ›œž¡žŸ¢¡¡¡Ÿ¡ª¥–™ž‘bHFHGIGFHIDADECB@ADGIIHGJJLPPNOQSUUVVVURONMKMPSSRRUUQRUUVTVXTSTQPQRQOMNPNPTWVSY``X^bG8[ZTdmidcdfeffihgjfTHGFFGDCEDDHPUSNKNMLPTUVUWVVWUUY^`abdghfeeffa\Z\]YVWYXXY\]\XX[\YWVVUTTSSTUXZ[WRNTQNLHEGKQCBS^WOOPOMID?;820....--.-3@EB@B>EHGHLMISRW^`^epjO6(! $G_]U[[VLFEGF@@HMOQXSFLWTSUYYWWVRUSX^]ZZ[\\\[ZXVTWVUUTSRPPQSTTSSSNLIFFHIINA) !$$#%&$%&()'%$$(01)%&"1VfXCOfY((JID>,1LQKUA.=6RlP8:6<21./2127:6G]k{ƒyqoqk`htrgn{wim{~uu‡}|Ž“ƒŽš‘„‹š—…ˆž ‹‡–œ‘…Š•Š{{…‚oo{d@;B>977998;>DGHLMG<>?DMQPQPPRKHdxbV```]PNTQSS?7ITQ[]``^[XWYVTVWVY^pw}}ƒ…„ƒŠŒ—¹ÞÌ‚W_]L[~€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€!"!! $.5///>™a‡Ã{+WM2-4026,********)&$'-6;>:86424567706_”¤—–—š §ª§£§¥¢¢¢¢ ž–••—”‘•‘“—šš•‘ˆ‡…‡‡ŠŒƒƒ‚~yvvxryŽ»ÙÒ¹´·¬Œ†Š“𠣡Ÿ Ÿœ•˜››šš›ž™š¡¤¢¡£¢¥®¤•¢£…QEHKGHGGDFDBDEBAEDDFJMLLLJMSSPRWUUUTSRPONNMOQTSRUSPQTQPURNQSORURQQQPOONONORVWWY]_X\eP%2S\WdjhghfdcdehghjeQGFD>;5406=?DPA?OYRHFCCBA?<989876530///4<>:79)2JQQS8'@@PnlM83=3101212697DXct~xyjcc``dbbafg`bkm\^kpffpsslnwunp{|os‡‰zw„‹‹”…‹¡¥‰ˆ¤‚D8C@=9779:FGIHGMNG;<=BLQRTOOQKGcv`T__`]QOUWTRB5:BFPSX[^`bdheff__^X[fw„‰“¦ºÄÁÓÙÐÜßÀ€^[bMMrŽ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€!! ! (:/#.3 E˜‡h˜ACF-34220+(()*++*('$'-4;=<:87533467:26S~•”Œ‡Œ’”‘ŽŽŠ†ƒ„…………ƒ‚‚~xx{||~‡‹Žƒ‚‚†…ƒ†ƒ€‚€|wqlnnq†—• ´¸³´–‹“› žœœœ™™šœš™˜šœ›—𡦥¥§¦¥¬¨¢«™gCEHFFECDBFFCEDDDGHJIJKPSMPSSRSTTVUSQNMLLLOSTTSTUSSRRUTPQTSVURVZTQQQPPNOOLOTWYWXZ^Y\dX-+L]]aeilhdefggiijkdQHG?3*#"!(17AJPPNPKB?>@DADB@EHJKKNTWY\afhmoorurkjlcWZgg[^_\URPMHLLKIHGFECBA?ACGIHFFFDBCFKDCMVSMJEGIJIEA>973/,*++)-268940*++***-./6CLPOPPQRMIdv^Vaaa]PMSONMA762259=ACDFGJOVTJN]eillkjkf_[accb[X^dYNL`ƒ„d€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€!"215/+",h¢w]‚j/7>0-/0,'*+$'&$$%'*,:;=;9789777765327AdŠ–‡ƒ†|€‚€|{|zyxzzxvonquutw|wxyyyxxx{vwy}ytvtonprq^^d^ZVh ½µ¹µ–†Šˆ”žœžš›œšš›Ÿ¢¤£¡¡¥ª¬ª§§ª°¶¯„LFHC@CFEBDGEBEGHIKJJLPQPNVPNQQMMQNMNPPPRVWSRSUSRQUTTSQUWSRTVUUVURQQQPONOOPRUXYYXW^`[^_<!;UfiheecbcaddfgjjaN>70/5:>?91+).;GMLFBDFEEFDCGLHFJLJJMMJHIMGHQSOPWV^^VVbkkpsspnnkgdcb`_]\[VVUQMKKLIFDB?=?CHKNOMF?:531/.../147899;<:@JSWWWYYXY[\]aeddefkrx{uN%#!.Tc^Z_YPHDFIFBFMLIQUNFIRVUVXXVWXVSTY]\[ZYWXYYXXYZYXWVVTRQVVVTPMMNLFGFCFID1! !"&##)&%%&%%%%%$*1*#%,")')-+&%()&$#'.6;=:8788658999740.LmŠ›¡”„‚…ƒ„‡†ƒ†€€€‚ƒ‚{|{|}{wx|y{|}||}~ƒ‘ˆ‡‰€}€ytuxyncf]^]c™°¯±¹¢†Œ‹†“žŸžŸ¡¡˜š›šš¢§©©¥¡£ª¬©¥®®¦­°ˆRCA@@ACFBEHFFJLJIIKLMLMNPONMNOPOMNNPQQOPTSRSUSPORTQOSXTQTTTSSUTTUSPNOQQOLPTXYWVXZ^bZ\`@!5Plgcee``hfhghhji^I:68>EEEDDB;.',7LKC;;<<>BB?@DFFHKJLOOOU]`dmx~€…Ї‚…‰‰…€tvslfb\USRPNKIGFACEDB@ABC?:8547=><97545712468:;<>?@@@BFIHIQ^da_bbcda]^djlmkgfkqtwP."!!/We]Z`YOEAFJGBFLLHNWQCHUVTVXXVWXVUSW\[XY[\YWWYZYWUTTTUUTSRNPUSKIMIFGFCIH=-!$$%!%(#!$&$$%%$%-1' '9KH@NULIC:+,75* .J:,01;==<<85:=9844ALHDFJDHMJILJLMPQMMONRPJFMROJFMPORUTRWUZ`]_fjfmhentoknoqqpptxrttpmsskgoqwzcHEEEGIJIFCFMQMJNJ=7;>EOQNNPQSNJcu]Wbaa]PMRUUTJB>9<6654358:>;:<=<<@?<>EJLOTWZVW_\TUJGMftebw€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ " !+<3-,2)6uk_rgA4,&*(%$$#$&)''+39<:==<=<?>@GE>CNMJKPPIJOOMHLPLLOOLLJJNNLMNQPPTURQVVY^a``cljkonklqoutswnUBNOKGJIINHHKNNOKA<<=DMNMPPMPKJgu^Raa_ZNMRRPRNF?8:<;9524;BCBDC;6@MWPJIHEDE?@CFHHGECUnud\{¤€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€!$0:50.2-!%6IXe`S:$''()(%$%($)18;<:9;;;:987676;;/2Y„‘ŽŠ›¬š€‚†ƒƒ~{y{zxwurqnkkostwy}ƒ…†‡‰••‘‹…„~~}yuszysqtލ­±ÃÛ‰š¨°´¬•—šž¡¤¦¨¦¦ª°³±­±°²µ¯³±’fQCA>>BBGGHHIJJJKMNNLMPSNQSQONPQQRSSQQRSQPQQPORUUUUTSTVWXUTSQSTSSSRPOOONORVXXXYZ[^\adN'.Rnrh`acc\bfgfdllY@>FIFIHDGQRNJ7'-HJFHNLIFMMLMQSSU[XTSSUUTVUSSQMIFLKKLKIGHGEDFEBBE?ABBBCCBEDCDEFDBHGDCBCCDDDGGBBEECEFHHDBDCDFFFFGHFDM\```_```aabeikkkjgirzoA# " 5\dYX]SJIECFGACKMKLQMACOUPUXYXXWUSUXYVXYWYYXXWWWWWUSTUTRRSSSSPLKKJHFEFI@/"!"$$##$##$&&&$#%%//)/:FLNF?CFB>AB=-$.6/!&)(,/787@CD?;8/.982266215759<9<@?ADBBEFEFIKKLMMMOLNOPRSQPQQQRQOMMNNOQQQRTTWXXXVOLKMHEHGCBGGIJJKI@9;>FOPLMPMPJJgu^U`^][QMPPPVTKA8:888768>DADFKH8Bf{pfdd_WRTNGCFLQS_qt\S{­Â€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€#&7:66761,$2LQXX7!*%)'! &&!/5;<:778<:7558;==78=Kn“‘އˆ‘…„‹ˆ‡‡‡„ƒ„ƒ‚†Š…}zspqtuu|†}‚…‰‹Œ‰‘–“‘‘މ‹‡„†Š‹†ŒŠƒˆŒŽ›¯®´Ê²‰„Ž‹—§ª¥¦§žžž¡¥§¨¨ª§¦¨««§£¢¤¢£ ¡¦›ŒpUE>AFFEFGHIJKLLLMNOOPPNRUSQRRQQRTTTSUVRPPRTSQOSTTTTSTUUUTRQSVUWRNORROLQTXYXWXY\_]]dV0)Mpre[]`dc`eggfljT==?@A5&&/1'!! ##(+.114@B=>;<:69932<916844668:=?AAABFIKKLMJLMNNNNLSSSQQQQONMPPMMRTONGFT\WOGEGGGJH@9;>FPOLMOMPJIhv]U`^][QMPRRVOE=9=<=;879>BBCDKI><978968:;;9756=Tq‰˜—Œ‰‡…ƒ‚†……†‰‹ˆ„„ˆƒ‚ƒymllsz~||€†…†‡ˆ‰ŠŠŠŠŽŽ‹ŠŒŠŠ‘‰‰‰†‡‹‰‰¨«°Ê½“ŒŒŠ’šˆ’ •’‘““‘ŽŒ‰‡‡‰Š‰ˆŒ“𦩭 …`B?EDBCDFGIJKJJKNQQMJMQSSRRRQVUTTTTSRPRUVURQPRSTTSTUVSTTTTVVUSQQRQOPSQTWYXWWY\`][c`;$Ffia`b^bjc_aihgdV>=@?>5&!+)&($!&(*--7AKJ2 &$%).;RZO5+Dah|Šyqvwkbhh]R^]OGJIC=::=;>>;647;746678;=?@@@CEEEHMLJQOQSQUWSZ[W`v~lZDCFHIKIA;<OixqmlkjmrqmhghjkjladŽÄΠp€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€#"0<<787585,&%$IvW#$)(*(&*5AFB@=<=;8587555689So‹™–‹Šˆ„†…‚…ŠŒŠ„ƒ†‰ˆƒƒ|uw{‡‰ˆŒŠƒŒ‹‹ŠŠ‰‰‰ŽŒ‹‹‰†‰ŽŽŽ‹‡…Šƒ„Š„†“—ª·Á rtvmmpkflqkheeffc`achpzƒˆ‹˜š’—žœŸ¡¢ž€WCBB@ABCFGHIIJLNPOLJNORTTRRSUTSSTTTSOQSSSSTTSTTSSSUWVUUVYWUSSQQRQOORORVWXWXY]`^ZcfE >Yffghbbif^_ijfdX@<@CEIGHNHKLSK>LcQABFDGFABA@A@@ABCCCCCCDDEEDFGFCHFFFFDDEIFGIJGFFGIIGGGHGJHHIKKJHKJIFDCDEEEBBGFDCAEEDFGEBEDCBDFHIGBFTbc_][_ccfhhdhgknhcod2"!$C\^UTVQQNHDHKDCKOOKJHHKOPQQRTVVVVVTSRSVYWSTUVVUTSRPQSUTRQNQQLIIIGFCBDE;,"!$#!"&'%&')(&%%%#4QYOA@A?>=0#"*! /1& %'%)(.AWV;! %%';Yg[7Ah|”‚ƒ•›‰“…‰”ˆwŠ€sqwsgdih]VZ\QIKKDA@CA;8;<:88;<:7?<::>DFBEGFNbfXI>?EJKMI?<<=CMNMPNMQHHhv[Raa_ZNMRNTR=5BKNFKMKKMLJFDKOG>J\d]VSSU]fec`]\\^`[~¬ÜëµqX€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€#!)7::6:6244/-!#Vƒ[!$8#&+9WsviaZPKIHDA@=;>@CEGMMJOQPI?D_TGFGEFFCFGEDBCFHGEEEEFFGHFDDGFDDCCEEEFHFEDFGGFEHHFFHKKIJJJJJJIHJJIGDDFHFBBEFHHDBEDCFHHGDDEFGGECECES`b^_\^aegigdiikmihs^/#&HbaVTRNOKGCHLEBHKPPONLLORSRRTTSRRQRTURUVUUUTSRRSSSSTUUTSTOPOKHHHHEDBEB5&"###!"%''()('$$'*BtrL?AAJE==A>:=DA?;8;3"&%&0/,#!'$*3B\[; "*,(9YlZWg|Ž„uŒ–ƒyŠ”‡|„•|‰™…Œš˜‚Ž”‰‰ƒ}‚„zpowtgckd[UVVOIHMH<9><798857>A?A:=CIJKF<9;>FOPLMMMQGGhv[U`^][QMPPUP:4HSWX^`][ZUNKNNRRFPr‰wttstvpomihp~‰´¿ÒæÓŒY^€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€! !/8899798448:#,o’Z"$<,+Fxšžšœš”‹ƒ~}}~vvx|„Ž—””–šš”’—‹Ž’“’‘‘ŽŽŽŠ‰ŠŽ‹’”’‘Ž‘‰‰‰‰’‘‘‘‹Ž”˜™——˜ŽŽ’’މ…‚„zƒ˜”’¨¸·‹NFICGLJHKMKNPRTVY[cgmqsrpnsuu~†Š‰~›½º“gLDDEEFGGGJLNLJILOONOQRSTTQRSSRRSTRVXWUUUUVWWVVUUVUVTTWVTURSRONNNMNQVWXXYZ^_`^dkQ& -PjkejiaYbddffibI9C@=98>=1" 1@A%-,/EXX6'#+%+?QfnhqŠ‚~—‰€Ž–Œ„ˆ’Œ‡‘‡y~}~•‰€Œ—‹†“–‡ˆ™™ˆ‡–•‡‚‹Ž…„‡{jlt[???<8:<417=?DHIJE;9;>FPOLMLNQGFhvZU`^][QMPSTM84AJLV`impsnfZ_[[\U]w•–Ÿ­·¼¾À¶¼¾º´¸ÇÕßäçÎYQe€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€"'156;8+1<7366#1‰¦\$!/)Wˆœ™’‰“—šš—•–˜š˜—••–—˜•’”‘‰“–’Œ’ŽŒŽŽ‹‰“’•Ž’“–™ˆ‹ŒŠˆ†…†‡‡‡ŒŽ‹‰Š‹†}u|{~†oy–Žž¶½‹IIWKIQRRVYRVZ\\^bfafnv~…‹Ž–˜–—”•šbt¾¶hOHHHHHHHHIIJJJJJJLNNMORSRRQQRSTTSSSRQRVWURSUVUTTTTWVTUTQRRSQOOQQOOSVXXXYZ^^`_dkS* (Wg_Ybea^`bcede[@6=EFHKGHIPNJJGB=DOMJKHEEGJJIIHHJHFDEGHFCGDCEGGGIIGFGFEFHGFFFEDFIGHIIIJHEJIIIJJIHHFEEDC@>?BBABAADECBEGDBDCEGFDB@@CCEQ_`]a_]^eihghgiiggmu{U,!"  .R[ZUXUQQJDGOMBBKOOQQQRRPQOMNRTSQPQPQRRUURUTRQRSUVWTSTUTSSUQOMIDDGEFEE>,!%%! #$$&+('%&(*)(3k™€M;::;?<;B1  8F=$ #!(58BZM4#%,,;Yqpr‰|†–މ“™‘Œ”‘—›”‰”—‰‹–“„™‰‚‹Ž‘—˜…„˜œŠ†”˜‰¦–„•£v@8D917?95=CCFHHIF<<<=DMNMPLNQFFhvZRaa_ZNMRPOK<4866FLPQZgnmlopkdb^Z_bkx„’¤³ÂÑßàÙ×áìäàÌWYfT€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€$-/-/2-..58464,>ƒ«m-3Ddƒ—•’‹‹Ž‘’‘’”—–””–˜•’’–—“”˜¢›”’”•“–””••““•‘Œ“™“‘–”–—‹Œˆ‚„‚ƒ„ƒ„‡‘𣠄™““ˆƒ~~ymuvЇus”¤”“°¹†QIPQSRRRVXXUUXYXY^ahr{‚„ƒ‚‚‚uwwrvoSk©Ç±˜wOKMKFFIF?BEHJKKLMNLNNKMSTQQTURSWWUWVSRSUUSUSRTSQRVUSSVUVXUSPNOQPMLNTXWXZYZ]`^Zf^.)Ne][b^bc`babg`K98EGDHJHJOSOJLI?9EONLMKIGGHHIIIIIIFFGGDCEEFGHHGFECEGGFEEEFFFIKHDDGIJJIIIJHFIMJFHKGGHFBBEF@CDDEEDABBDGGGEBAACECDGFDFDK]b^`_^`effjonefmcfxsG& # $ =[]VXZTQPHCFOPFBINONQSQRRPQSUTRQRTSRRTUSTWPRUUSPOOUQPSTSSVOQNHDEGFDCFA/""# "%&&'),&!-'#)%)C~˜ŒY4>6<@?=A@=?>==8:<:A9" 3HA5! #$ +=FLC+%#!-6Hcloˆ”€•—މ˜‰‘—‘‰•’‹‹‘’ŒŽ““Œ”šˆ™–ŒŒ–•Œ‹•š‘Š’›”Šš•ˆ‘vB5@???=9:89COOMQLOSEGktXV_^^ZLJPOPKC=:859;>?@ELRV[SMXgmnnj^Yadbgv€Ž™¡©´¼°’lW[bZK€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€(-+(,0/-,48455.3„ Z@hŠ”¡¡™™š™›’”–™››››Ÿ› ¡ žš›žŸœœ ¡˜—˜˜–“’”–™™˜–•–•š–•—““–’Œˆxy|€}„Š›®¹®—™˜’ˆyyukktƒ‹‰zu¥•Ž®¾„FCOOOLIHJLNJJNPQUZijkhfgkpdebkor{uu‹´Á®œ~WKLF;35=DLIGGIKMMJIKLJMRSQRRTUVUVWWWWVUSSVRPPRTTSVVSRTUUVTSPNORQNNRVXXWWXZ]^\Ye`5%Ea_\^[`a]abbaVC7CKHCEFFKJPMHIJA9BMKHIHIJIJKJGFFFGEEGGEEFDDDEFGHHGGGGFFGHGFDEHGEFHIIJJJIIJGGIHHJJHHIGCBCBCBBBAAABA@BEDCDEDDB@@ADFDFCK[a]__aehhghiogiofj{tC% # &!#Fa[WXWRRPGDGQTGAJSNNRSQQSQQSUUUUVXVSQTVVVVSSTUUTRQRUUQPSUSQOKHGHFDDDE>,!"#!$%&(*-(")*)\‡–aC><=;B?>:;<9A:$!"0F?:5 #'/9GI;(! ,-:Xkr‡‘ƒ•”Œ‰‘—Œ‡–‘‰–“”•Ž•–ˆ…Ž•‡š–ŒŒ––ŒŒ•œ”•ž– šŒ”žvA5??@>:9AKIHHFFKG;99:BMQNOJMSGJnrUV`^^ZLJPNOH=9<:4679;=@ABCACDCKYb`fffifbea`_bfhge`Z]hfXRV€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€$.-'%)/2-*38456,F‘ƒQt¤° ¥¤¢§¦¤¦Ÿ¡£¤¤¤£¢ Ÿ £¥£¡¤¢¢¥¦¤¤¦¡Ÿ›š™˜—–••–——™š™“•š˜˜—’Ž’‹†{qosw{yvw~…³ÖÝÇ«›—І|tsqicq„ŒŒy ™Ž§¾ˆGAEFGFEFIKMKNTYZ^chlppoqy}{}††ˆˆƒ¤¾·¤—€_GGE>3.5>@@ACFGGFKKNNLJKJMQQQUTRSTPNPQOOPQORSQRUTRTUTVVTRQRRQRQNJKRTUXVTW[\\ZWdc?!<^e`^[`a^acc`RB?@BGDFDIX^]^_cghhiihmgiogm{o<# ! !% .SfYYYTPSQFEFQTH@JTPPQRPQTTRSTUVWXXSRSTUSTUUUVUUTSRVTRQSTSPPMJJJGEDEFD7' "$$%&&&&'((%'),$%EyŠ“—k7:C2).<=$ /1%'35?A6*$%(#.Pmw‡†”‘ˆˆ•‡…ޕЗ”Ž–——˜‹ˆ‘˜Š“œ•ŒŒ––ŒŒ–””ž–—Š”ŸwD;E=7;CFHIIKLGFJE58;>9;8558;<;B?BA9=EBBJPU]][]fjnnkiiknie\IDd€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€*3-'&(,4-)39567%V~dcž®›¢§¥¤¥¢ §§§¨¨§¥£¢ž¡£¢  ¢¥¤££¥¥¥¥¦£¡ž™–”•–•“”™™–”–”‘“—•••ŽŽ‹‰†~tostspmntz†µåõã¿¡•‹‡‚zpqpjao„‘ƒ|”𔡴ŽTDKMOPQTW[_^afgdceorvwvwy{xsw{tsvmp¨Â¯˜‹{dJFFHE=9::>BEFFGHHHIKIIIHKOQQRQQTRPMNNNNOPNNPQRRPVVSRSTSSTSPMLNMKKPSTUTSU[[YWVadI3Yfb_^`^___a`TFB@DCEGGHMOONMKF>:@KLJKHFEGHHHFFGHFFFFFFFFDEFGGFDCEEEFHGECIHGHIGEGHHHIJJIHEGJJFGHGGEFGEEEB>BB??CC@ACCA@EFBCEDCCBBDDFCGT]\]`dgfgkmljeglfmxf4!  $!>afX[YQOTQFFGORFBJQQOPRQSTRSSRSTUUUTUVWWVUUQSTTRSTVTUSOQWUNMLLMIDCFEF@0""%$%%&''()&('&*"-[Šˆšq43E:3('4<=A<548=;7C="&/"9?B8"(8.%-6<4$ -,5?<-###+QqzˆƒŒœ˜Œ”™Ž„Œ”‰˜•ŒŽ––ŽŽ–˜‘”š‰™•‹‹•–Œ—š‘Š’›”Š™“†“uD>B==CHHHIBGIGDIG=9;;BMQNNONOBHotVWb`^YMKOMSRH>>??@<87:=??>=?>86@MGD@AFIFEFP[a``di_ZNBEc“·€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€.2,('&'3/,59677-BSl˜³¯¥¢¦¥¥¨¢ž¡¤¤¥¥¥£¢¡ ¢¥¤¢¢¤¦¡¢¢¢£¤¤¤¤¡œ•‘“Žˆ‰Ž…„ˆŽ“•’“”’‹‰‡ƒ}wso{umebbef…¼ëóáÂ¥—‡‚xrssk_k…˜š„z“œ—¦†XFTUVTRRTVRPQVXX[_voga^\[YYUYXPMKFh¬Ã­”„yiQIFKNJED:=ADDCCBEEDDFHJKJKNOLMPQNPRQRRSSUTRQTTTTQQQRUTSSQRQOOONKOQVWTSSRZZVUU]cQ$*M`^]]\W^\ZZZOFDEEEEGGHKKNOLJHC<@MNLKHGHIGFEGGGGGGGFFEEDCDFHHHGGGGGHIIGEFGFHIHGJGHIIIHIIFFIJGEGHJGGFDDCADAADEBBFD@ACBACEDDEDBBCBCEDEQ[^]`ehggklkifhkfou\,! ! &#Pk`Y]YPPTPHGJRPECLOPNOSTUSNSRQQRSTTWSPQVWTORSTSRQSTPTURQSSRLKLLIDCFED:*"%%%%&'(((''%&'"1  /Wsy…އ™—‹†Œ•ƒŒ”‰—•‰••‹‹“—‰‘–…•”Š‹•–—š‘‹‘›“Šž•‰”qB>FA@FKJHGBEIFABEB<9:CONLOLMQELpsSVca]XMKNKOQME>>@===>@AAAC@?D=,I…ŸwcUMHCBAABFGGFGIKUt𮝀€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ .0)(&"#0117:797:.C…«¤¢ªŸ£  ¦¥›—šœž¡£¤¤¤¢Ÿž £¤£¡¡£¤¢¢¥¥£¤ ›•’‘‘‘’‹ˆ‹ˆ€…‚†ŠŠˆ‰Š‰€yibdgvoe_]^^^…ÄððÜÁ£”†~{wzvk]i…œœ‚u£›“œwMCLMLJFEFHGDDJQXaiaXMHHIHE==B?=>:>¹Â¬•‚yiOKHJMMMMBBCDFGGEDFEGKMKMMKMNMORPPSTSQTUUTVTRSRQURQOPSTTWTTQNNQSSNOTWRRTRYYUUTY`U)%E[^]_ZU]]XSOIDFEGIJKKJIIPQJEIE9:ILJHEFHJGEEGHGFGHHFEFEDFFFFGGHHHGFFGGGGEFEFGGGLFHIJHHHJJGGHFGHHHGGGDCDBEA@BB?@DAACEA>@B@>AB@BFEBDCEN[`_bfjkjigejjklhqsS&!"""&.bpZ[_XPRTPLHOWRCCLPSOMOPSTQQQQQRSUVYVRQSWVSVVTSRQQQRQRTSQQSNKHIIGEDE@2% "%('&&'('&*$#)()PˆŽ‰’qB6<;87-/=+ $2;4,83$8/+A>&9B% .IP>-&'35(")5WrvƒŠ…˜—‹„Œ–„Œ”ˆ–“‡Œ••Љ’—Ї—މ’›“ŠŠ•–Ž˜œ”•–ž•‰—ŸtFFOD=CKMIEIIKH?>@?<99DONKOMNQEInsUVca\WMJLMLNQNHDDA@??@ACDKLGIE4Q•µ²±«ž“‰€rne\USUXRf›®³§™€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€!./))% #-46::9;7.2fž¬¦¥¬¤©¡—š™–—™œ £¥¦¦¢ Ÿ £¥£¡¡¥¥¢£¦§¤¢Ÿœ›—“ŒŒŒ‰ƒ~z~€€}|~vaX^bkhdaabccˆÆðïáÇ¥‘Šƒ~~€xh`lƒ’’|rФœ˜žtE>EGGFEFIKLIIMQTY`OKHHJKJGINSNV[Vc—À¼¦Žwp`JJIGHLNMNJDACGKMEHHIOPNOPPQRSTUTYXWUTTVVXVTUWWURVWVVXVTSSTUSRRRQJMRTSRSSWXTUTV]V0#@Z^^^YWYXPGFDCEAEJLNPOJLPSMFGD9=IKJJHHHLJGFFFFEFHGEEFFDGGFFFFFFFFFFEEFGGHHHHEDHGHIIIHIIIHHGFHIGEEHHEDDCCCCBABBA?BDA>@DC?ADEDBA?ACCDM\cabeimkgedjkkkgqnJ#"$""% ?poX^_XRUTOPKPXSDAKPRONMLOSTRRRRQQTVTUURPQSSSSSSSSSSSSRQSURNNLIFFGGDE<+!"!!%%$$&)++*)$'+);iŒˆ’l:2A@13<1 ",+$3;.",)$76$)@@'%A>! )CWTF3/2)$.;9Tq{„‹‚“…‚‹•…”ˆ”‘ˆŽ˜—‹Š”™Š’š‘Œ”ž“‰Š•–ŽŽ™””ž–›’ˆ– uJLIFFHHFHLGHJGDFE><:;CNOLNMORCGltXUc`ZULIKMLNQSQOMMICABDEDBFDEE>V†¢ž ¢Ÿ£©¨©ª¨Ÿ•’˜Ÿ£«³´°­¬¬€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€#02,+%!&*5:<;:<7/L•¯¤›ˆˆ’¤©¡¡¤¢ ›Ÿ¢¤¥¥¥¦©«ª¨¨ª­¡¥¥¢¢¦§£ ŸŸ¤§¥•ŽŽˆ……ƒ…ˆ‡†ˆŠ‡‚„…‡~jbgihiiigffgÆèêæÑ­—…ƒƒxeep…„vr‹ž¡“£}G=BDEEEFILONQVWSRSVWWY[]^__edYabXjœ½´ …icUNLE?BKOMROJDABFIONGDGIHKJOQQSQPSTSSVYYYZZWXXUWXWWZZY[\ZXUWVSQQPNLRTTVSQTVWTUTSZV5:V\ZYUVQNB:>BA?BEHHJPQLNMPQKGE@FLGEIJIGHGFFFHIJEGGEEGGEBCEGGGFEEGIIHGGGBEHJLIGJHGGHIJIGEILIEHIFEFJJEBBA?>@CDA@ABBDEBABA?CCCECBD@CCDL\ecccfjjggjhiihdniB!#%" "$%LxnX``WSWSNRNOTREAIMLMRRNNQRSTTRONQSRUVUSSROPRSTRRSUTSSSSRPOKMKECEGGE9' #"!%'%$&)*)(&',*)L}‹ŠŽˆe>4999:>=, .!&6;*#" %59))>=!$F?! %9S\UG=+(;J=Qt‰…†”††‘™†Ž•‡Œ“Šš™Œ‹•›ŽŠ‘—†–’‰Š•–Ž™š‘Š’›”Š“‡•pDGGCCJNKHFGIKHGMI;:<ADFBFHILLLOOMLKKID@FIIIJHEGGEGIEDFFDFDDFFEFFFDBDHIHBEGGGHGDCDIJEBFIFFHIHFFGIHIKJGFFGGGFEDCC@?@BDDA>ABDDBCDCCACEA@CDECDEIV``fhgiookjhijegr]. # $)3iwcXd`SQROPNJQSLECHPMNOOPPPPPRRONPRSTQUUPRVTVRPQSSSSSQQSTRPOIJKJGDDF?/$  %&&%$%'('&",-"/cЉˆ†’€S936;96;;5/$,067&"",130/<<$9. ##3HTUXE4KS;Pw~ƒ††‘ކˆ’–Œ‚•…Ž–‡˜•Œ“˜‹‰—‘‹’”‰ˆ“–ŽŽ–—†ž•Š–’†•sLGG@>??@>8=A@<=@?:9;>K`“³¨£ª¤¡ ¡¡¢¢¢ž£¤¤«­¨£¥ª§¥ª­«ª¦¦¡›˜šš˜š–’•šš•’˜””—››™ž–‡}‡ƒ‡Šƒ~„Œ™µÚíݽ§¢™——•‘’††‰ŠŠˆ„Š˜ ›˜— bOTVSVXVVXYXWY[[ZY\\\\\\\\^]_Za^Zz±³¦¢ƒRGJIFFJJIJMRPPTVSOMFJJJOUSKGIJIFEFGGJJGFHJIOQSUVVUTY_a^\\ZW[UNKKLKJJPWZVRRUVUPMNLOY?!,GWWZ__mbG5;A> ".82*" 5JS\QCRN;Os~ˆŽ€‚‘’ˆ„•†•އ–‹•“Љ’›‹‘™‘†Š–’‰‰•š’ŒŽ—“”ž“ˆŽ™”†’˜oKJUOMONONGJIECGKE:<<;BLNLLJPVFInqNR__^XJJRSJHMPRRRPSSQSZ^^_^[\UEYŒœ˜”“”–˜šŸ›™™–•šŸš–˜ž¡¤©€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€!/5474.,+168::60RƒN?DD@AC@CB@BAACDCDDHUacfjihjgdgijhksf@"#"'#/Z‚{^SnjYUXURNPNMMJDFNQNNQROOSRQRSSSSTVWTTWRPWWTSSSQQRURPRSQNLJIGDCBA@3(""!#&&('&')*)(,/(+Nz‹ˆ†Š’vH449?:6<=:9,/=3 ($%-374/63,AICGF4#""!0DWVINI?<?CDBCCA@DCDDGTaeekmllhehjjdjs]3#" #&";BKKINLJKEPrqRYb\Z^ZTOMNPPHEGIJJHDFOZ`^`^`WCSƒ˜’’˜™–š¢Ÿ—¤žž¡œ ¡¢¤¡Ÿ €€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€$0436622++/5:71,7DD:9:7554?==a’©žž œ› ¡˜›š˜šžžž£ ¢¦§¤¤¨«¤ žŸŸ›ššž˜˜œœ™˜”“•”“—˜•“–‘‘––‘Ž‘’’”™›˜£««©¡ž£žœ›–’’“ދޒ”‘›žš— “eOWXTUWTUWTWZYXXZ[YYYYYYYYX\Z[]Qb˜±›†dJLMKMNNOONMNNOOQRRQRWXVVUOFFC??BGKMMMNOPPSVRRRPNKHFIFDFFDCCBDFDA>==8::7:AGHLMKMRTZfc9 JjbZ]T=3>648;BMOKJOQTRPLLLJLKIIGFGIGFDDGIEBEFEFEEIGDBDDCDEFEEEDDEEHFEFIHFEGFFGHGGHGEFGGFHJIHGEDA@?@?>>?AABAAA??CD@>@DDBCDACCEDFSbffjjhhghmjibgoR,!# "# &Nx†rZ[|y`QTRONPKKPNCERQQPPPQQRQPRRQOQUTQSSPRTPPMMPTTRQSRQQOLKLMLGCEE?7& ###''&%$%'('&/)&?l†…‚‡‘`606<<52:;7<7)+5'"-$(1334/-%!4CDEFKRXYQB2%")"?U]SCRo~‡Œ„ƒ‘‡…“‹ˆ–†‹’†‰”—Œˆ“Œ‰š•‹Œ”‡‰””‹Š“–‘Ž•›’Š–…”™nOV[WXXVWXTQVYUTRKAD>;CLKINKPQCMrqNSc`Y]`b`\YZZXVXXYYYXZ\]\X[[`ZHY‰˜’’—š—™ Ÿ£Ÿœ¡§¥¤¡š˜Ÿž€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€".1/21--+),496/+<>;79=;6;7>@9=bš¡˜œ’–Ÿššš›¢¦¡Ÿ¥£¥©¨¤¥©©¥©§ š™™™Ÿšœž™˜˜”›ž—’“—˜’‘••‘‘–ŒŒ–š›š¡¡”•Ÿ¢ššœš•—˜”’”–•’œ›–Ÿ‘bJUVQSTRSUUXYWVXWVXXXXWXXX[]\^[Rl ®ƒ~cJIOLOQPPQOLNLIJNRPMRRRSW[XRSLDABEFEEDFHHHKNOOPPPOOOQNOSRNPVQOLHFDBAIIGHLTY[^_]^badnf? :[YURC1?ADE@@EDABD@@CC?@DCCCDDESbhcggfhgeijichhI($"#"2aƒqWX}eTVTRSSOLPNEDMQQQOPQQRQQSUUUTUTPORQOOPURQSTSPOTRPPOMKKLKFCEFEKNUSQQURA0*!"'9NRBNn‹‹‚†‘†…“Š‚‹’ކŒ”’†‡‘••–Šˆ˜•‘˜–Ž‘›™‹”–‘—˜‹‡œ”‡—œnMS[XYZWXYVTWWUUVMBB?=CLLJMGORDMopTUe`X\^^Y\^`^[^^Y_[XY\^^\\^^a[HY‰Ÿ–‘–š™––•—œ¦¬­«««ª¢œ ¡¢€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€$16574-++')395-*EJB8865:<:99=5E­¤  ¡¤¥¡¤¥¦ª¬¨¥ª¨©«©¨­¯©¦©§Ÿššž££œ—š›Ÿœ  œ™™–—™™•“”ŽŽ’‘Ž•–œ¡°²¤ £—–˜˜•—–Ž’ŠŠ”•—˜•Ÿ’bHUVRTUSUWUVXXWWXXXXXXXXXXYZZ^XTv¤¯|r^KFKMQSQQSPLOMKILOOKOOQTUVWZUTTTSPJFGEDEC@AELKIHHIJKOMMNLHJNMMLKJIIHMMPQQNMMQSRSUPOW`D1P\WI60?DDKF4*.5@AA??AD@ACCBCCAECBBBCCCBCECDRcjdgggkhcbjihkcB&"!#!"Cq~~qVUu}hWYUTVRRQOMGFKRQPPPOPRQSTTTSRPSQORUSRUTSSTSQRSTRPPPNMMHHEBEE8'"" !%'('&')*)(,&8^x~€ƒ…’†Q0564:32>=597 ""(0/%+2.2>6#&>GC>Ro€‰‹ƒŠ‹’’…ˆŒ†Œ”‘“ˆ˜”ŽŽ‘’”—“Ž‘™–‹——ŽŽ——Šˆ”—Ž‚–žqNRYWYYVVXVUUSQSTK???>CMOKKHKLDQqpW^f]X]^^\WW]a]Z]aa^\]`_[WZ\[_ZI\Ÿ˜”•šš–’žž¢¨¨£¥¬ª¯®¨¦¥¥§€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€.=DEF@62+&(394,)BSG4;>68=:8;D87h¥²¨Ÿ©ª¢§ª¬©¨ªª«¯¬««ª¬´´©­¨£ š›Ÿ¡žœ ¢¡¢§¢¤¦££¥¤¤¡š™™˜–•“”•“”•“«Ê×ŪŸ™–——–—’ˆ‘”“‹ˆ›œš”’cKTUQRTRTVWY[[XUVZYYYYYYYYVUW[TT{¥¨ŽvdWROPMRTRRSQLMONJGHJJEJMMOVZZYYYYYXWVWSQPLFEICDEGGHGGHHILMLHFGIKIGGKOLJIJJKQZVWTUXX[ffP*-G[V?2:<@GH>1+,4:AHJJMNMLNOOLIIJKIFIKHDFEFGDBFFGEDFEDEEFEDDFFDFFFCCEFEFHFEHIEDJGEEFEEEJFCEFFFGJJHFDBA@@AABAABB@@AA?@BB?CDCC?AHBCECDRckllgfjhddijmo`>$ # ,QyyxrWTkxgWZVSVQQQSNEFPSPNPPNOSQTUSQRSSRQPPRSRRLORTQOPSQPPPMKKNDEB@DD4!"!%(&%$%'('&,&?iz{€…Š•‚H*486:44A?698!&.$./#-701?8%,?AFMKB5%"!$,;Zr{…Šƒƒ“”Š…Œ“…‰ˆ•‘‡š™‰Š–˜Ž‘“’–“ŒŒ“”ŒŠŽ™ŽŽšš‹…¡”„–ŸsRWYXZ[WWYXXYVSSTLA=??DMPLJLOK?QwqMVa_^^WW\Z[]ZVY^^_\[]``]Z^_]_YHZŒ—•““•–•’• ©§¢£¥¢¢£¢¤¤¢ €€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€H†¦¡špA3'.-/4'(CRK<6:A:4::1;?8L’±¥¡¬§©«¨¦¥§©¨¥£¥©§§®²°°«¤¡¤¤ŸŸ¢¢Ÿ ¢£¥¨£ £§§¥£¡¢ ›™›š–“’‘’“’‹’°Ð×Ä­ ž™–””–”†‹‘‘“‘•›š“’žbFPURQQPRRRSUVVVWXZXVWYYWUTZ[`SU„¦¤‹t\NMMRRTVUPLKKMLKKKJGEFEGLOPSV\\[[[Z[[ZZYVSPPQPMKJJJHEGIHFGKNMLKLLNQSUWWXY\_bdfhgdejmlpY,>aV80?@BJL<+**2?EJKLMQNN>MypEPc_Y]YX\[YX]c^Z\\\^^ZWX]`]\`XH\‰”Œ‹’•—•˜˜œ £¤ —›žž›œ¡¥¤€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€gªÄ»»¿µžR.%0..21FYSFA>;3;==5;=6B{®°¥°³®ª§¨ª¬ª§¥¦§ª««®³³­«¦£¤¡›—˜ žš›¡¤¤¦§  §§¡ ¤¦§¥Ÿš˜•’˜”Ž‘•µÉÉ»­§¥›š˜—˜—‘‰Ž”–––’Ž’–“˜ŠaIQSQRTRTURTUVVWWXYXWWXXWUWYX^SX‡§ ‡nYPTPMRSQNIGGIJMPOJHILFEGKMNORXXYZ[[[[YZ[[ZZ[\XWUUTRNKIKJHHJKIEGIMOQRRWWWXY[\\`cdbceebaS.E`K/3>ADJI9**+0:CHJLOONOQQNMNIHIJIGGJIIHFEFHGEEEFFFEEGFEEFFB=DBACEEB@DCDFECEIGFEFIJHDGGFGIJIEFFFHHDAA@??ACCA=@AAA@ABCDAEF@CGBAACCGWfkhgghecdhihir^4"!##"$#Ht€sxqYRZ[[[YVSQSQQRNDFPURQRRQPPTSVWQORRRNOSSQRSSTTSQPQQTQOONLJJFGFC?7+! ###$$%%%&0Uwzw‡‰“zB-437:62:<;<0$)<3-,"06/0<9("3DA," '-..16:<@PbZ<&#5]ƒŒ…†‘ŠƒŒ•Š‚‡Œƒ–†Š‘“–˜‘‹Œ“–Š’”‹–“ŠŒ”“‹Ž”•’›—‹––jMU[VX[WVWWUUUQUUJED?>ELOMMOOPAMwlBH^^X]]\\[XXYWZ\Y_\[\\[]``^^c[K^‹ŒŠŽ““”’’•—›˜“”—šššœŸ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€c¬¾©­¶º¹ _+ 'CU<=WSHG@>?<9;9;>9;\œ±¡¨®¦¢­«ªª§£¥©¡£©ª«´¸°®ª¦¡™šœ˜šœ¡¥ œ ž £¥£¢££¥¥¡š˜–”Ž‘’’œ±Äĺ°¦žŸžœššš”Ž”•”•“‘“”™—‘—‡_JRSPRURTUTUVVUTTUWXXWVUVVYWV\R[©’oZOTSOQRSQMIGGCFHHGFGIKHFFGILPSUWYZZYYXY[[ZZ[\Z[\]^\YVRTTQPPNKNNNNPRTU][XVWY]`^aa][YUPTO2>R;(4=AGJE4)*+.8CJKLPPMLORPNNNIKMGFHFEIIFFGGGFHHEDEDABCDDDEEDCEEEEECAACFFEEFFGEEHJJGEGGFGIKJGGFFGFCBBAA?>@CC@CCCBAABBBFEACDCCA@CEIXglffhihddgjfgqZ/ "#$!"(Ry}r{v^UWWWVVUUTRQQSOGFNVQNNPQRRSQSSOOTUSQRRPOPQQRSSSRSTUQNMLJIIGECA;0&  ####$$%%&:c|wv‚…‹’wA,5459529<;1" &('&%$&+/1159BQXG0! +5h–†x˜Ž†ƒ‰•Œƒ‹“Œ‚Дމ‹‘‘•™“’“——ˆš“‹Ž˜•Œ”œŽ“—‰Œš•Š–—jMW[VXZWUWWSTVSXVICC=;BKNLJHKPAOvmFB\_\a`[W_]][YZ_^_\Z\^\YX[YZ`ZJ\‰•‘‘‹‰’’’‘“•’ޕ𙙛žž€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€eµÁ§©®®µ¸¦t3@†17URJJ?;E?8;>8G‚ª£¡©¦©¬§¥§¨¦§«¤¦¨¤£«­¦££ ›––™›—›ž¡¡ž›žŸŸŸ¢¤£žš›žž›˜–“ŽŒ—¢±¾¿·®¨¤¢žœœ™”’‘’’’’’‘’“—‘Œ‘ƒZDSTPQSRRQPRSTSTTUUWYWUSUWVTTZO`—¯„si\PSSRPQSSQNKJJJJIHFFEJIHIHHHHPRTVWWVVWWVVTUVYYZ[]^_^]Z\\ZXXURSRQRTX\__]YXX\`cZ\[WTSPKa_A,:2)1/(*+-6ELLLQPIGLQROLHGIIEHKFFHGEGECEDEDBCFEAEEECBCEGHFDDHJGABEFEDFGFGFFIIGGHGGFGHIIHHFFGDDCB@BCCBCBBCCCA?>??BABCABCBA@DHLXflefhkiedglfhqV+ %!##".[~v|nWPVUTSRSTUSPPRRJGLTPMNOQRSRSSSPMLNOPTSONQSSQPQTVTRRPONKHHJIEA?7+"  #####$#$(Emzot…ˆŒwA,554741:<<;/);>%,(#45-3;2$,5.%-5692/064-,2*/335@MV9'#=|Œ~†˜’ˆˆ‡€Š“ŒƒŒ–’—œ‡“™‘ŠŽ˜šŠ˜“’–‘’š–Šˆ•‘Š”„“•jNYZVWZWUWVRTVUXWHBE?>EMPNMFJOBOvnLPa^X[\\Z]\Z]_[Y^`]Z[]_^][Z\c\L_‹™““”‘ŽŽ‘‘’’”’Ž—›˜–šžž€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€_²¿¦®¯ª¯§º²hl«~)9PNMSE:?F>@C>?@6Ap¦¨›¡¤¥ŸŸ £¢œ˜˜› –™ŸŸž £ šš™ž Ÿž£¥¥¦¢œŸ¢  ¢œ›š››˜“•““’Š“¡¤«µ¸°¦¤¨£œšžœ•’•’’”•”‘ދޑˆ‚\HRUQORSTPQRTSSRSSTVXVTRTVQQUXMg£³d\XTUTPPONNOPQQKLNMKJLNJKLKJHGEJLORTVVVWVURRSWZZZYXXYZ[Z]^\[\ZVSTUWZ\^_[[\\\[ZZTWVTUZ\ZfgL!  ./-1;FF;6;@??C>635417CNB8$H|‡„“’‚‚ކ‹”Œ…Ž˜”…Ž—„‰“’“—’Ž’˜’“—“Ž’˜˜Ž•‰”Žƒ“–hMYZUWYWUVVUUUQVUJEA=>CIKKLLORBOtmOYb^[\Z\^ZXW[a\X[[ZYXY[\[\Z\b\L_Œ•”““”“–’’•–––’“–šš˜—šŸ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€Z«¹£©­¨«¤¬µ€}¢o@NUINYODB?;;@==D<:cŸ©–𔋒™›š™›ž¢ž™œžž£¥¥¥¤¡››šŸŸž¡¤¢¢£¡Ÿž››œŸ¡ŸžŸ™–•˜””——•—š ¥°¸²¥ ¤¡œšœš“‘•’‘“•““’Ž’‰€]LOUROQUVRPQSTTUVWUUVUTSSTNPUVKp¬±uZUWPQRROOPRUWVUONMLLLLLMONMKKIGEGIMQTWYZYVROPRUTTSRRTWZY[\[[]]ZZYXXZ]_aaa_^[YWVXZYWY_cb[aO)"./.4=CJE4(%&)/;GKKLQLJJMMMNQJIGHIGEGFGFCFIHFEEDEEEEFDCCDCBCDFDAACFFDFFFGGFFFIFDEFGGHHGFFFFFGFEHHDED@B@?AA@AC@AAA@@AB?EB?DFCDDBGNQXchffhjiffjkhllH$#&! #".b~urxfXWXVTQPPPQPOQTQGFOTSSTSRQSTPPQMNSTQPQSSSRPSQPPRRQONLKMLJGFIE?9/&"" ####""!!0Zvuqw~‚‡Ž~K.562310:=<;-#0@<""&:7,7<-!$6C@9=HTMB;72-<4Y•ªž¢˜“› œ ¦¨Ÿ¡¥¨««®²°©¥¥£ Ÿ¢Ÿ Ÿž¢¢¡¢ž¤§¥£¢ žŸ  œ˜™žœ–’”š›™–¥¥ª°¯¨¤¥ŸŸ™–•”“‘‘‘”•‘Œ‹„‰|ZHNTROQSUSSSUTTSTTUTSSTTSRPQUSLy³¨kTUTJLRSPPRWZ[XURPNNOQPPNPRQPOMIFFGILQUW\[YVQNMMKLMMNOSVUWWUVZ[ZYWUTW\bfgd_ZXWWX[]]ZZ^^\ZaU1"+,/7>BIC1&%#'1?HJILPNJHJMMMNKIGHJHFHHHHGFFFCEDDEFFGHDDEDA@CGDDEDCBDGDFGFFFEAGFEDEGGGHGFGGFGIHFHFBDFA>?ABBA@@BBBBAABCCABBBDEBFDIQRWafgfgihfhlggkf? ""!!# '[€xop^TQVUTRQPPPMRSQMHHNURPQRRTVRNPROPTTNRTQPTVQOPPQQQRSOLKKJHFFDC=3)$"! ###""!!!?hxqvyx€ƒŽ„R0462200:><;- 0G@%&;6*8;)!0@A96>FKSXOA;BJTTV\^WI>56:>:&/^Ž”‘‰†ŠŒ„€’ˆ„•ˆ“šŽ„˜’’Œ“™•Œ˜•Œ”‘‹‹•Œ„Žœ“‡——eHVYTVYVTVURTVUYWHAB>=CJLLLJMNATwmQX_\]_]__^Z[\[^_\Z\\ZY]``c_]`XJ_Ž™’’–•“’Ž‘”š›“Ž’——™––šœ™€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€\«À©¢¢¢¡«ª½phQ5.*!'( !" &!$%$125UŒª£ ¤Ÿš¡£žž¤¥¡Ÿ¤«§£¥¥¨ œŸ ›™œ›•–Ÿ¡œ™ Ÿžžœš˜˜—šœ”Ž“œ•——–••–—žœœ ¢¡™¢ —”——‘Ž‹“‘’ŠŒ†‚„`KOTQPPOQQRSTTSRRSVTRRTUSQSSUPM€µ jQNNHPSMQPOQTVVTSUVRMKMQRSRPOQQOKIHHILPRY[\[WSQPHJLLJJKMNOOMNRTTSSRRTWZ\`^[WUTUUTXZYZ\ZW[aW4 "(08?BIB/%%"&3BIHILPQGAEMOKGJJIGHIGEJDEHDADFHECCEEEDFDCDDDEHEDDEDBBEECBCDDEGDFGEDFGFHFFGHGIKFEHHCEE?>BDA?@BBCCCB@?@ACB?AEA>CHEJRSW_dhgghgfindfja9!"%"#!GzzmjZSOTTSSRQQPPPPQNGGNVROOQQPPNNNOPQSVSSSRQSTPPQQQQQRSONLKHEEGAB;/%""  ###"!! Ntxkvyv‚އV2463100:><:-0I?% %;5)7:'-8<>@98GPMPWSD8578IF-;w˜‘€…Œƒ’‡ƒŒ‰…‹–—‹“—†Œ—›‘‹’›•‘“–‘Œ–•Œ•šŽ„‘˜ƒ••dHVYTVYVTUUUUURVVIDD>>88+0OA%(&*D2'89+%09<@;6EKPRPRVSL>33::AQ]Yc^HLYE*\•–ƒƒŠ~—„Œ’ˆ•’ŠŽ”‘Š‹–šŽŒ“”“š˜‹••Š‘”’”‡—”fLU\WXZVTUUTTTRVUIDB=>EKJJKJLNBVwjRY[X\`^\Y]^[Y^_]\^^_`_\[]^[ZbXHdš’“˜——˜™“Ž‘––“—‘•–’”š€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€R’Ÿ•š™š†gD0(#  !!"""#$%'(())+:g“˜ŠŠ‘ŒŽ’’“”–•‘’“’“‹Š‰‰‹Ž‘‘‘”ŒŽ–”ŠŠ”‘‹…‡Œ‹ŠŒŒˆ‡ŠŽŽ‘“‘š›š˜™™™•“”•“’އ†‹Ž‰‹`JOROPROOONOOORTSPSRQRTUTSOSSMV‘ºiPPPJKKPLLORSTX]YTUWSPRTRRSSQPQROOJFHHFJPPSW[\[Z\WROLIIKGEFIIGFHFJLLLOSVVTQONNOPTSUWWUUXRST> (49>DD8)  *7>CLPLIJ>>FFEGGHKLJHHHGCEGGFFGICEFECCEHGFDDEEDBDCBCFFDACDEFFEDEGFFFFGFEIGEGIJIGIGEEDBAA@B?=AB@@C??B@@BCBDCAACCACKPPQX`e_`ejjeejjmnU."$ ! F[N@DOXTTROOQSRQMKOOHFLQSROORRPMOPQQSVYVTRQQQRSOPPPOMMLJLJGHJHEA7+(&!  !!! "# (#:gwsrrp{‚ƒŽl:.974.0==:9*0M=#)*(=3.4-#,::;;:BMOQSUWTQSF>8.-5J€”‰…†‹Ž„€Œ•‘‡“ˆ”’Ž‹”‘•˜”ŽŽ‘މޗ˜’‰‹‹…‹”އ—”fKUZUVZVUWVRUXVXUIDC>>FLLKKJLNCVwjRY^ZZ]]]Y[[Z\__]]_\[]^^]\c`]cWE_‰‘‹’•“•”—••”•˜—“’š˜›  š˜š€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€F€‘†‹|YC2$#%# !!""!#&()(&$'/Ch††‰€„‰‰‰ˆŠŒŽŠ‰ŒŽŽŽŽ‹‰Œ‹‹‹ŠŠŒ‘Œ‹Ž‘ŠŠŽŽ‹‡ƒ†‹ˆˆŠŒ‹ˆ‰Œ——’˜£›š™™—”‘“”“‘’“‘Œ‡Š‰…bJOQNPQNNNRRQNNPQPSQPQSTSRQSRL\—ºiPNQMLJMPNNOPRTXUUZ\XWWUQRTTPLOTTSNKMLHHIHLUZZZ\b]YXWSPONLJIHEEFFEFIJLNPPLIKLKOTVQPUZYTQNOVH#(49DDGPOIJH?AGFCEDHIIHFGFDDFHHFEFHFEEDDDDDBEGGFCCDCDCCEHFCFDCDEDEFEFFFFFFGHEEHIFGHEFGFFEDBCA?@CA@BB?@A@@BBABCBBCCBGNRRQW_dhddggfhmemlN+$'!!! 0?;6ARWSRRSRPPQPPLLPLGJQOOQQNOQURPPRSSRUUPOSPMPOPPQRPNLNLKKJIGD;0(%#!  !" !"&%Jotqtuqy„†vB.77303<<<;( 6N9!)(.@4##'<=::>EMNLKILODXxjQX`]Z[\]Z\Z[]\ZZZ[\]]^_aa[[[bWIe”“”’’’‘”–•”‘”š›ž Ÿ›šœ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€It……~bC.$%  ! ! !!!!! !$&'(''())=cy|~{ƒƒ€€ƒ††…†‰ŠŠ’—’Š‹ˆŠŒŠ††‰Œ‹Ž‘ŽŒŠ‰‹‰††‰‡‰ŒŽŽ‘“›—™›–™¡Ÿ››š˜”‘‘’““““’ˆŠŠ‰dJLRONOPPMNQSSRQPPOQRRPOQRRSOJ`œµ—fPLONMIHKJJKNPSTQWXW[[VTXXWWTQQSUURQQOKJFEHOUX[]Z[[\]^\ZWURPMKJJMHGJKIHJJGFGHIKNMORSOJKPPTaX0'498BB3$'6CLHFKLEDND@ELIFDDIJJHHIGEEEEFFEEDIEBCEGDAADGHEDDECEFEDEFEFDDFGFEECEGFEDFHEEFGFEFHHIFBADC@C@@CB>?EB@ACABDC>@BBBCBBJOSSRV_fhggfegheeqhD% "" ! #%/43CTURPQUTPNPMPLLPLEIQQPOMOPQRRQRQRRRUVSRWTNORQPQRQNLIFFIIHEB7-&# !  ! #%.Ysrrwuov‚…‚‘ƒL,37324<:=<'";P7!*'1D4 ":A869CSQNLMPRSPSWXUTSP?;9.5V`UGMu‹…Ž‘„”‹†•‹–‘‰“ˆ‘˜”Ž•˜‘Œ“š•’“‘‰ˆ’Š•…•’eKUXTUYVUWWRRSSWVICE>]qutu{}€‚……†‰‹ˆ†Š‘‘Œ‹Œ‹‡ŠŒŽŽŽŽŽ’”‘‰ˆŠŠ‰‡†ˆŒŽ‹’•–™™š›š›ž¡ žœœ™–’‘‘ŒŠŠŒŽ•fJKQONPQRNNPSTRPPQOPQQONOQRRNHf ®eTLLMNKGEIMMKLOSWZWUZ^[XZZYWVVUSQRTSPNNMLKGEIPVW[_`ZZ^`^\[YVTRQOQLILMJGGGIJIIKKIDFJJEBGOZ_nh<&4::@=-%1ERJCFLIDHNAAHMKFFGHIIHHIHFEEEEEEDDDDDDEEEEECCCGGECEEFFECDFEEEDFGFCDDEEEFFGCFHFDEGGGGEBDGGC?@A?>?@@@?ABABDB=?ABBACDLORSRV_headgeefcfqc;#""" " +32?SVUQOQPNOSRPMQVLFMRSRONNPPKOSSQPSURSRRTTPNSQONNMKIFGHFEHE:3'#$"!"##""!  %$7erntxsmt„…‚”X..7324;:<;&@?@A@=>@A?BC@>?ABABDIMORSRT^hlbelfadego[5&(&$!! $17FUUSQPQPOOPPMIOTLDHRQRTQNMPNOOQQRQQTSSSSUUQTRPNMLKJKIJHDE@4)&$$#"""!""##"!! &$?kpktxpnt„…‚’”h8,6312<:98%!BQ2#/(CB?AB<=@@@BC@AABCCCHNQQRSQR[fgdii__d_lqU0&'#" ! ! -;LVRNQRRQQOLNMMORMGFNRTQOPPNNNONOPQRRPQQPQRQRSRQOMLLHCEFB@;/%)(" !  !"#$$$ !&$!Elpgrsnrv€…Š“yG/44.0<:65%&HR. .'79##'-%'/.1@A<>A@=>AAADEADCCEDEJQSRSSPOXc]abRH[jaijL*&($$!"!"+6EOQQSRMMQQNONOTSLHIOPQQONOROOMMMOQSQPQRRPPPMPQQNLJJJHIF@A:)%(&! ! "$%#! "&%#Ilpdnpnvx}…ƒ‘ƒT235,.<:43%&HP*/*#7. "$% '+(1014;BIMOVURUWPO[JAXv‚…„†|†‘…‹’’ˆ…‘•Œ‚Œ•‡‹““Š“˜’Ž’•”‘Ž–”ŒŽš’‰Š””ŠˆŽ•ƒ’ŽcKVVRTWUTVVWUTRTRE?A=>FLMMNIKL@TuiQY`]Z[]`^[\ZZ]\[_]\\_`^]]W^aaSHg—‹ŒŒŽ‘‘’—™—–¡œš››™—€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€%*)'#"& ''$'&%#(% ""(1BQO@77?atqqtuxkt}…Ž–•‘ŒŒ‘“Ž–ˆ‰“’‹‰‰‹ŽŠ†‡Œ‹†Š’”’’–œš¡¯·¶¦¢§ª§ª¯«§§§¦¦¦¥¥¡œž££—“’Œ’„\INQMNQQPNOOONNOQRPPONMMLLJRFSŠ´«†cNKQOLKPSOJHIKKKNLLNPQTW[[\]^]\ZYWTTUWXXXUTUTQQTOKIKKKNSXWXZ\[XU[XXYYWX[``acgkoqqlkopmklqa[`P% !-<85,'4JODELPNONB38ISOHDA@HJIGFFECCDEEEDEEEECCEEDECEB@BBACFFFEEDCBGFDCCDEEDCEHGEDFGFEFGHHGEDDEGFDBB??ABBBC>;=BB@?=@@BA=?DCB?=?FNUXT]X97]menj@"$#"'$ !""'7IRQORRQPRQNRMLRSIEITPMOSROONNLLNMOUSQQQQQRSQQQNLJKLFIKHB:0)$#"!!!"#"##!"%#%$(#&Mpllmoopxˆ„ƒ‹‘c(*2-//+0.!+@F' 0(#/()!" !%(,))-/4<=@IHRUSUSSZJ=YyƒŒŠz‰‘Šƒ†„†Ž”Œ…‘™…Œ’ŽˆŽ“ŽŒ“—•‘‘•˜”Ž’™•’™“Ž•”Œ‡‰•‰ƒ”fNUZYXVUSRRTRNOSPFAC=:DMMMKDJNCWufOX]Y_`\X[[_^ZYYZ]]\]^][[]a^\aTIh”ŠŽ‹‰‰Ž”˜˜–š ¤ž›žŸ˜€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€*+#"&%$!)/(#)++-+'%&+5?EKJ@:>@?^{‰ƒ€‚ƒ†ˆŠŠ‰Ž–˜•‰‰‹Ž’•œ—Ž‘’“Œ‹Œ‘‘‘Œš›¤¤£¢¢¥¨¨§£¦«­®®¬©¦¢¤¥Ÿ ¢ž™˜–”‘Œ‹Š‰‡„~}‡‡…‚‰}VDMPKKMNONNOPQONMMPOONMLLKKQDR‹µª„fPIMNPNNONMLLLMMLKKNPQSVSW[___\[\[ZZZZXWXZZXUTUWTQNMJIIJRUXZZWUS[bfffijjdfilnonnolkllife]TU_S+ ,<>5+)7LOBEPQLLE:4DNQKGECBFHIHGFECHFDEEFCAFFDCEECCDFDCDDBEDDCCCDEFEFFGFFDCFFHIEBCFHGGIHEDEGGGHHGFEC@>>=;:::898679844895687:88?ISVVYVN:=[f`lc:!$!$# ""(8IRQNQRPPRQOOQRQMIHKQMJMPPNPLQQONNMOSUTQQSROTRPOMLKKKGCA?8.&'!!#"!# "" !"#%$(#'Lollmonow‰„‰–s5&0,,-,++(*00!$-&/3&")"#*..**-049=>EOTQORUG@Yx‡Š€y†‰ƒ…ŒŽˆˆ–ˆŽ†‡‘“ŒˆŽ“”‹Ž˜˜Œ•™’˜””’ŠŒ–•Ї”Œ†–ŽbLUYXWVUTSSSSQTXTJC@<;EMLNLFJJ?VveM[^VZ][Y^]\\\\^^ZY\]]]]]]_]]bTHhŒ‘Ž‹‘‘Ž–™™›Ÿ˜˜™›œ›™˜€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€+) ('#,2.&%*,+).:FNZsŠzI0?C2:W~Ž‘‹Ž••“™šš™šœš–‘”–••™ž¡›œ›™—™œ œœŸ£¥¥¤¦£¥«®«ª­¬¬©¤¥§¦¡Ÿ›œ ”‘‹ˆˆ‡‚~~}{xusqpmmnnnprs|~}y‚wR@LOLLONOMNOPONMMMOONMMLKKMOBSµ©ƒeSMLKNOPMNPOMKLMQNKJKMQTYZZZ[\_b____^[VSSZ^[XXYXWWVRQONLKQW[[YYYU]fkorrnlkkklmoqsrmhd`YSQNQXO. *:;/#(>NKBHROJI<17KOLGFECBDHJIGFECGHIGECDEDEDDGGEFEFFDFDCCEEFFGEEDDDDDEEEEFGHHFDGJIDBDC=<>@ABA@>>>;878988936:97:=;=;:967::646?KQPLLHD9@\gejY2 %"! !")9IRQMPQPQSSPPOOSTMHJSQOQSQORQPMJNPPOURRTUQPPQOLKLKJHGCA?:1($%%#  !#! !"!#$$(%(Mnllmonow€††ƒ‡—ƒG$+*)+,''.(*')+!,?+)--.-1.2:=68:6587?:DQTTVRBB\v„І‚““ˆ‰‘ˆ“‹†‹Ž‹Š‘‘‰‰’‘“’‹’™’’”“’ŒŒ‘‰‹“”Š—^JUWWWVVUUTTTRSVQF@@>=GLJKJILL@WwhPY`Z]\YW\]\][YZ^^Y\^^]]]\[[^cSFf‘‰Ž‘’’–˜••˜š–“’”’’–˜•‘€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€%&-CU[cmnhdWKXknr‚”šœsI63Bj•¢Ÿ”“™š—–˜œŸ¡Ÿš”Ÿ££  §¬¬¥¨¬­¬««¬­­­®¯®ª¨®§¢¡Ÿ›˜˜•“ŽŠ‡‡„€ƒ|xzxrrxpooonmmllkkkjjiimjghlopoz}xwTBJOLMONNLLMNNMMMNNNMMKKJJLNBU޲¦„eSNMJMOQNPPOLJIIONMMMMNORSTWY\^```__]YTPMTY\[\ZYX[[YWXVRPSWYYXWW[UT[djmpqnjhhjnqfe`XTSOHFEBC>+ (76*.KODDMNJIF5/<667878::;:;@EHD@8?D8=[kkhO*!%! !!+8HQQLOPPQTTQPQQPPONNQQQSTPNPQPOONMMQOQRSSTRPMLJJJJIIFFE?7/)&&$""  """!"###$#)%)Lmllmomnu€ˆˆ†’ŠY'")**,&%/)+&"*')A,&)'>DFJBAKI?:<=>>;;38FMS]dJ>Wx€…y†—“……‘’ƒ†‘…ƒ‹‘“‡ŒŒˆ–‘Š’“’–‘’—’ޓޓ‰‰Ž’Œˆ—Œ_JUVVVVUVUVXWSRTOFA=;/3BIHFDDA=>HJJHGGHHFEDCEEEECDCCEDBBEEFFEDCBFFEDEDEECBB@@?>>=;978998952269;;;<<;989:9655755663588897<@@>>?@@AAB@?<;:5@I<:TeieF&#&   !,9GPPLOPPQTTQUPJKRURPNNORSPNQNNQRPMNPLORRRRRPNNNLJHIJGE>4-,)$%  "! !"#"$%###)'*Lkmlmnmmu~ˆˆƒ‹i-)-)*(%+-&!,#,6)"$+?BCH@BNWPC843;GBA=:9;PjYCVx…†ƒƒ‹ˆ…ŒŠ†’‘††‘‡Ž•ˆŽ–“‡‹––Ž—˜Ž‰–•’˜Š•‘††‘‰…•aLVVVVVVUVUUURRTPHDA=;FNKIFEKOCXvgP^bY]``[ZZ[YWYXXZ]^^\[[\\YZ^cREf‘’ŒŽŽ”“•›Ÿžš˜Œ•“€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€3>P³·¡ž«¨³¶sE¼¬©®°­µµ¥rM62;CFVjЧ·¾·§³­©ªª©©««©¤ ¡¢ ”Šˆ‡…}xvsrpnjhihgggda_d_^bdccfeggffiihfhfehgfhlllmmmnndhkjhhmqy‚x}wWEIMKJKJLLMNOOMLJJMLLKJJIIILE\Žª ‡fQKMMMLMPQQRQPPPLNPPPQPNNNORSUVV`_```]YVSLHMQTUXUWYZ[\\ZWTPPRUVVVWURSZ`bccb_[UPLOMGCBCCA=A@AD9!-,,IKFFDH@CD4-;IKIEDD@>CJKIGGHHGHIHFCCDFCDBBEEDFDCDEBCCA>???=<:9:976679:9;;::<==9<=<;<>?;;:876777447899;<9=CDCA>HOMC@CDCBCC@<99;;@H@>Qbj_?"#$  !,7ENNMPQPQSSPPNNRTQPSRQQRSQPTNOOOMPRQONOSSPNPOPOLHEEFDE>0)*)$""! !"! !""#%##"*(,Ljmlmnlls}‚†ƒ€†“z;)-)'(())#!*%($$!3@@CFAEQPWWQI916CKMMI>>BEEEEDD@>A7 ()*@@@A>;<;99:8;:999:;;:;<=>===9:;9:;:868;:7347;;::<=>?A?>?AAABDABBAABAAOPDADDABBB@><;;:@H??VgnX8 !   !,7CMMNQRPPRQOORPMQUTPURPQRPOSNQTQMMPNQRQPQSPKNMLIGFEE??8,%%%"$!!$"!! !"#$#"!)),Lhmlmnlks|ƒƒ‚“ŠR'(*(#%*,%" $(#%:@?CGDHNSONRTL@92:HX`YJ?@Rir‰z‹”‰‹†‡ŒŽ‡…’‡‚ˆ‰‡–—’Ž‘’‘’‘‘”Œ‰Ž–”’—‹Œ‘ŠˆŠŠ‡–‹]JVYXWVUTSSTVVVVPGCB>;DKJJGHMNCZyiPU`\\[\]b^XW[]^^Z]^^[[\]]_\[_QHk”š‹“”“““‘ŽŽŒŠ˜™’’€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€)&>‹Á¼«¶¶Ä¼lV£Â²²»§mC70'.31,)))''.02E^htmijhb_`[Z]`^Z[``^^`bcbaec``acdcbddb_`ceab`^aefbabcdddca^ca`gfdighhijkllgiklkigfr~t{z]LHMKJJILLLMNMLLLMLKKJIIHHMJA\‘«ž„fTKFFMOLJQWXSOOPQTTQQRQNINQOJJOUVZ_ehe_[Z[XQNLJFJGFHHEEHFHHGFEGIKJKOPPRVWUPLHGGGHFIPTPMNMH<8<8'%5JQMI>:FEEF;0<989:<;768::<:89:8:=<;;<<<<;;::::9876899:=A>9A?@C@=>DJHEDEEEDECACCCBC@BDC@BECAQQA=BDACBAAA?<96EN=0'&)'"#" !""!"#"!!#$##"!**-Lhmlmnlkr{€‚„…”f1&&'!,/')&"#+!*A@=BEDJNQNRWSPRP913G`yŠ„xБЋŒ†‹‘‹ƒŠ‡‰’‹’—‘ŠŠ’•–™’’–’’•‘Š‹”“‡ƒˆŒ‹˜‰ZHVZYXWUTRRPQPPRNGEA>;DJHJJFLMAUugQZ`WY\_[ZZ[[]^[Y\]YZ_^Z\ab]Y]QJl–˜‘‘“™•’”•”’‘ŽŽ‘ŽŽŽ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€.12e«¸•”¥®–]PŸŽ[;9>822001-'&'%%'()/6LYca[[]^W\ab_^_b_abb_]]^ba`__acddcba_^]\^`ba__accdec`^^_bbbbbcccaceecdhlghc_aca`l}swz_FFMLKKJMNLKJLNNMKJJJIIHHHKLD`•«…gVMKLNJJLTUPNSUQPSSTUQQUPPQQNKNRUZ`cfgeaYXXVQKJMKGEFEA?@=AB@>?@?BDGHIKOQUXXUUZ]]b[TYdaZ\_J=;;;/ (Hb^ME>AILA>95DQJE<:?BCDDB?==>;9;9;949=9;;9<@=;;;=>;:<;898:97:;98;9;AGHGFEEGGJMJLHHHGDAACGIIGFGEAEDBBBCCCCBCEFDDEDNNC@CB>C@@B?:8;=EE>>SlmP+"!! ,4?MHMPQPNNQUOQRPMLNQSRSTQRTSQRPPQOMPPQQPPOOONMJFEGFCF=+!')$ " $#"!!$$ #&'#&+%1Riiioqmlvˆƒ„€ˆ”u?",-!(3)"+%.1%&:B=?FFAFQPRSRQPQSUP>49`jbRGFMXZQ52100.*&!"#%%$'*1CV]\]\Z\^^]\^]\\]_bdd`\\]_abba`^^^^___`b`^^__]Z_`bb``ac]]\\\\[[UWYYXZ^abca`chhgoƒw{€dJHOMLKIKKQOLLLMMLJJJIIHHHGHB`”¨™‚hWPMLMKMLNOQRSUVRTTVUQOSVQMKJJLOPSW\bhhea^[ZVRRSROMLKGECEBACB>=>A@CGGFIOOW^beiiggc\^ffbd\K@;9<0 'IdZEA@DKF@=:>OVJGABFC=989<<;;><9<=?==;8?<:;>=<;;;989768;@CDDIKKKOOQV[][WLHMPPNLRJIJID?>AKNOKGFGIDFGFCAABCABGIGDCFNMFCDEG@ACC=78=>FE?>TllK%!" #!-0:KMLORQOOQTRQOOOONMQOOUXURSRSRSTQOPPQQONOPOMMJGFHGDE:*$((#! """ "##""$$"&)#2Tjkikoopv|€‡‚…€…“|B'4;.,+1%$-%67'#(B?===<;<<;:;9;94787679754428?<??<98>FF??VniF#!#%#" #./6HOKNRSQPQRRRRPNNPQQTSQSQQUUUTTSPNOLNOMMPOMLLJGGIHEB6)&*&!!!%$"" !"#""#%!&'!4Wmkijmopu|‚…‚†€‘‡S+0?B?/)!$.$>;% #9F<<>BCCIQRQPPRSRPUOSWOID87MdqgJHf‚Ž‘ˆ„‹‘ˆ‰Ž‹‚††‡Ž‰‹‘•–ޕ𑓖Œ‘“‰˜“‰‹“’‰„”‰ˆšŒ]LWYTVXUSTTVURQRNFCC>?GIEFLHKI?Zt`OZ]XVXX\]XZ\Z\][VY\]]`]Z\ZX\bPEgŒŒŽ’Ž–””‹Ž“‘’’——““‘‹€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€$-38COXQPTK7=NH>IVYTQUYF2/61/0)%('$#%%#$%&.BY`\WXZ\\\YWXZ\\ZXXYYXWWWYZ\WWVUUTTSPRUVTUWZ[]^_]]_afgghijkkmnnnoprtsrqoorrmtƒz„gFGLIIIJMMJJKMMMLLIIIIHHGGJGAd–¦™‰lWPOLLLMMONMPUTPPRTXYVRSNMMOOMLLNNNRX`dghd_ZXXZ\\^]ZYXUPQRQPOPMIJFDFEBDIFJMQV]bfdjhbbhifZSLBA>;;=<>CF?DGCDJB:KF9222141/;C;FG@?Yoe=##""%##"026EMJMQSRQQQSRPQQRQQQSQQSTRRSRRRROMNLNOPRRQNKLJHHJHE>1')*$!"" #"""####$&! &%!8\nfkmomlr„ƒ†€~Žc0(:FE0($#.& C; $$2CA<=?ABCIOPQRRPPQRWNPSQSRG<7BWgdUMaˆ†‰ƒ‰‹‚…ŽŒ…†’‘ˆŠ“•’”››”‘’“•“‘Ž‘–“Œ”‘‡ƒ–ЉšŒ]LXXTUXTSTTVUSTWSHAB;;EKJIKJLI@Zt_N[`\ZYZ^_\]\ZZ]^^[\[\__\[][^aPIl‘’މ‹ˆ…ˆˆ††‡ƒ€„„ƒ…‡…~€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€!).4?O[ONXL-+:9CRTOLJC?>=>@?7:>=?JSRKW`VQSK>KE4(+,,243=A69EDMTWUTSTWRPPUZ\[ZNHOQIFGIHIMOKDCFNLKLKHGIHIIHGFFGKKJGFGJLRWO@=BC??@@>=;:9>EG??[p`3" $"#263@JILPRRQQPNOQRSRQPSOQUTQPPSPOONNPQNMNQRPNMJKJHHIHD;-'*)!"#"#! !"###$%%!!&$%@amekmmnkq„†€|Š”h5-;C=.1.%%1+$F?#*6?C==>@BBBGMOQRQPOPRNOQQNPSSJ6?EFcp`N`„Ž–‚ˆ‘‚…Œ‹††••‰‹”˜•‘””Ž‘’–”’’˜ŒŽ‡„Ž–‰‡—ˆXGSWRTWTRTTRSSUYSHA>9;FNLIIIKH?Yp\L[`][[Y\\UX[[ZZ[\XY]\YZ]^[[_cRLo’•ŒŽ‡‡‰‰††ˆ…ƒ‡‚…‰‚tpu€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ .12f—¡—sTJMLMLINIJPRPPTUVW[^\XYYVTUUQNMJKLNMOU[\bggc_\ZVWWX[^_][[\]YSQRQRRQPNIE@ADIKMPT\bhgekkdbZTMHMH3:iiG8;>997=JTPJIHA<>?CD@05=ACNVUPUYRKLC9>?1(/1/7:6<=6=IIOSTTUUSSURRX]^]\TMOPNMKIFLRQKEFKIJKLJHGILIGFHIIIFIJKKMNNNRMEAB@>A?<<>@;6>]p[/ #$&% #460I@,19.(41(JG&5HE?@?>@CCBGNQPOOQRQOMPPPSRRWE=[fJAY{hQ_ƒ‘Šˆ’‚†‹ˆ…‰ˆ–˜Ž””ŽŒ”Ž’”Ž‹“œ”މ„˜‹ˆ—‡YGTVRSWTSTTORSSTNFC@<=DIHHKILJBYp\NY^ZYYWXWXZ\\ZZ\_]WVY[^_[[[]^MIm‘‹†ŠŒŒŒ‰Š…†ˆ…„††‰‹ŽŠ€zx€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€$00/8IVPKWG-6JUROKOUQLQW@028622,)'()'&%&'(&%%,3P[`\[_`]a``beggfefijkkjiklllmnnnsrqswyxwz|€‚ƒ‡‰Š‹ŒŽ’”•›˜––™šš™•““ŒŽ„p{‡€„lIFJGGJJKIGILLLKKLHHHGGFFFGAAm¢–ŽtTLOLLMKNJKQQLNTQQSW]][]ZWTSRONOKKMONLMPW]cdeeca^[YYZZZ[][]^\VSSVRPPQOMMNJIIJKQXVY`bcknhfZSPMPJ74epP77?:;7?NRJCDF?;78963)63)LL) 9KFAD@=?EEBGQQPOOQQPOSSRRROPXB=a€~eNSypOb‘‘‡‹‰’Œ‰ŒˆˆŽ“’‘—šŽ‘—˜‘‘••’’“”˜š“‘’”Œ†‘˜‹ˆ˜‰[KWVQSVTRUTPRRRRLECC;:BKLHEHLLD[p_T\_ZXZZ\ZY[][YY[\[[]]ZWZ^]\\[IEiŒ‡…ˆ†…†ƒ†‹……†‚„ƒ†ˆŠŒ‹ˆ„€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ .348BI\OQ<*>PTGNLGKMKLWF2.7:415.)))(),*'%&''')?]qkchmjmmmkiknrooopruxzxyz}ƒ„‚…‰‹ŒŽ’•”–˜™™™œžž›™—•“’•І„‚~{uoqpghg[bo}wu{eDFJGGJJKIJKKIGGIJHHGGFFFFFAFu¥§—ŽuVORLLNNNOPPMKLNMNOV^`adba^ZTPRVSPMMKIJNTWYZ^dedc^ZZYWXZWYYYYYUPZTQVXTSVXSOMKKPWWV]bfoupgXQPOQJ80asV54A=@?ENNID?@<;=@ED?6:A@BMLHHA:?F9.441;>5499=EHLTXVSQQTSTUW[]ZURMLLNMKOPTUPLJHEIMOMLLMLLKIIIJJJINPMHC>:@LMA;?BA??=;=?<6;CF==^pU&!&& -61;KJIIJMOPQRRRSTSOMNOOQSQPTPMORQPRQPNLMOOMKJKJGFFC>4)&& "%# "%$! "&'$"$#"$&5Yndcmkjokm€„€~ˆv<*;G;'2>3)51(MJ,#7DFEE?;>EFCHSOPQQONPQSMKPRONRD9\z…ŽvSUomXn“Š’‰€Š“‡Š’‹––‘–—•’‘’’Ž–™”Ž’“‰„“”‡„•‡YJWUQSVTSTTSTRSTNE@?;=>DOJ=?DB>BA:8;;77;GH?=]nH & ($ &+ )11>IHIJKLLLKLORRSTTTRKKRTOOTSNPSOLNPPNMMOOMJLJJHEEA9/+'$#""! !#&! "'$!##(#&?\ijiffijlry~‰ƒ€~„Šs;%9I;(,<-(5,,SJ" >CDAELOOPQPONNOPPPOOQSF=Yv„Œ†ecpoez„‰„‘‘…„’Œ’”’’”•“Ž”•‘Ž•“‘‘“•‰‹ˆ†“•†ƒ•‡ZLYURTURSTPQRPOROF?@;?GHEHKFLG?]u\M[`^[YX][Z\\ZYXXWY\[[^\XZ]Z[aSHa~…}|ƒ„…‚||~€|…„‚‚€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ (028D@CUS6/JWNMQTUY\YTdbA*3<:6=91)')+,-+)''()*.0ClŠˆ‚‹ŠŽ”™›ššš———˜™›ž™•’’ŽŠˆ‰ˆƒ}xwxkifc^[XVTTSRQPPOQRRSTUVVUUWURUVQQkwuw_FHJGINLJPJJJIJJHFGGFFFFFFI?Dq¡žŠŒ†_LIGLNQPPONMNNNMOPORX]_aacec_\[VWVQMLMNSPPSVXZ\___^Z[]\ZXUTVXYXY\`dgijjeilljhfdgeccinlfe]XRJHE<""Otb:2?A;FPPH@AJFKNGERSG=COPHLURLORHEMKCGO?.44/5<=<89>DGTUTTUSPQRMMU[ZVTMOOIHLNT[^XOKE??EIKKKLKHNLJJLPOLEB@A@>==CHEA@??BCA<:=<88>HF==]i>#$%%+6'#(/.9EJKLLLLKKGJLOQSRPOLMQPLMSUQRTPMNOONMMMLJIMIGGGHA6,'$&$  $ "%# ! #%#"$'$*E`hgggijiir|~‡‚}ƒ‹v=(>J;)/=@EDBHRSOLLNOOOOPPPOOQSHA^x‚‰ƒ€‘†xokrŠ”Žƒ„‘„…Ž’Ž’“’Œ”–’‘“Ž“˜“Ž……“–ˆ†–…WJWWTTROQUTOOQUUKBAC9:FMMHDELG@^u\MZ\XWXZ]ZZXX\]\YY[[YZ]]\[]]^_OHd€…|z}}~~||}~{z€„€„ƒ€|}‚„„€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€#,07B<=WZ43[dZZZXVX[[XXhU/,88<;83.)%&(+++)'(+.000M…¤¤£ŸŸ ¢¢Ÿ›˜‘‹…}{zupkhifa\TTUSPNNOOONLKIHHPPQQRRSSSSTTUUVVVUVURTVRH`urqs]DEKHDIKHIIJIGGIIGGGFEECCBI>Bt¦ž‡„bOLLNNOOONMMMNNMOQNMPW\`__abaac]YUTSPNLRMKMQUY]VY][XY\ZZ[YXZ\ZVVXYYY\aeifddefggllkiknmilf\NCA?8%!JsmF38:9ELHDBELGOVJGOKG@AJKEIOHHKPHDGB9@I;+01-4>>;78>DFLNPRUTQRUOOV[YWXIIMKHIKO[\UNMICCIHFDCCCD@BEHLKE>>=>@B@?>BKLB=@A>A@<;><76ED@=<>CEA=EPOQQOLLNQOPPOOOQSB>_z‚…}ˆ•|rozŽŠ€…“”‰‡ŽŠ‹“–“’–”‘””’‘“”Ž“˜Œ”‡‰“”‰Š˜SIWSSWVQPSSORRQQLDAA9=GLJHFFOMB[nYO]]YZ^]\VTUVVXY[[\YXYZ\]\]_a^KHjˆ†|z{{|~|ƒ‡‡„…ˆ†‰‰‰‰ŒŽŠ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€%*4@:4LR.9hjcbdfjptts~Šw>(6889765/'%'#(,+)(+/,2.1U‹œ…€zvtromfd`\WTRQNNLKHGFFJKKKKKKLLLLMMMMNNNNNMMMMQRRSSUUUVTVVRTURH[qrqs^FBJMHEJJEIJKKJHEBFDB?;8548+1k§ †ŒmSKKKKNQQPPOPPQOQQOKMQVYZ]abaadea^]YTRSQPPQQRV[VX[[XY\[[\\[[\\Z^_^[WX]bmifgjliegjkiilmkqiXF<>>9)DqtQ:99@HMHCEHECKMCAD>>>?ED@IMCEKQJFJD9=F;-22-0;;735=DFLSTQQTUUWRPV[\ZYLGNPJHIM\\TNQOJHNJECA>>?A@?@ABB@>?@BBB?>BKNE>::=;438FF==^g8!"#"$<@)!*+8FLLMNOONNMNNMLOQRRPOPQRQPMQSQMNPRPOONNLKJGGIJFE>3($"$#  ! "%%#" &&'8Wigbfgjkhiq}€zƒ‚{ƒŒp9+@D4(02,++7H6!*?FGDA9=BD@>EOSQONQSQMOPPPOOQS@=]y‡‚€„Œ„{|‡Ž‡„’’ˆŠ‹‹’”Ž‘”“Ž‘‘’‘“•’‘“•‹Ž•ŠŒ‘ˆŒ™~QJXPRYYRPRRRTQORPG@C;]u^R\[WZ\[YSVZ[ZXZ[Z[[[ZZ[]^]]a_JHq“•ŠŒ’’ŽŽ— š’’–šš–’‘“‘€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€$/?;8EF6[†€ŠŠŒ‘—š›œš “U)085:875.&$&%'))(()+0/205Nc_[WSRRQOLLKJHIHIJIIJJKKLMMLLLLLKJONNMMLLKKKLMOPQQTTTTTTTTWSUVTSUSHVmrqq]EAEIIGHIIKC=??;87321/.,,+3&)f¨¢ƒtUKMKKMONNMNNOORSSQOMNPVW[__^`ddddd^VSTOPSUVTTVYVWYXWZYXXZ\[YZ]XZ[XUTX\afihikhbehiedeedi_N@?BA>-:iu[EA=AA=7FINUURRTTTVQORY]ZVNIMMIIKNWYTSYYRPPJEDC@@B??@BCB@>??@?@?><>GLB;=@===:9=:42>0)03,*&8M9"*>EEDC;BGNQQOQSRNOPPOOOQSF?\vˆ„‚ŽŒŠ‹Œ‹†ˆŠ…†“•‰ŽŠŒ”–“ޑދޔ–“’””‘”––”ŠŒ‹…™{PLZSSWVOOSUSRQUXPEAA;>FIGHJFIE?`v^Q\[UVYY\[]ZZ\^\[[\_^\^\\_\Y]`JIw˜‘‘”•”ž˜›žŸŸš’Ž“”€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€!,<:7:5?~®¢›¥Ÿ››››œ”’e0,97:9972*%#-)&%')('73591-9IPNMMNNMLNMKKJJKKMIGIMPMJIHGIKLLJMMMMMNNNLLMOPQRSVVUUUUTTWSTWTSTSHRiqonZCCIFCHIGII8+-2312/00001115+.h¬¤~‹uULQNLNMMLLLMNOTSRSRPNOUTVXYZ^bdfiie^YWSQPSTUUWXTTWUUVWUTVYXVW[VXZYWUUV]gkd_beeadda_``^]UHBED><12`vcK@:BKSL@EKFAC99<>@BA>=?@???@?=?JKA:=?=?>:9<;54DHD=AalA  #'#!?I/ %'4DHJLNPRSSPPNMMNNMMOPOOPQPPUVRNMNPOMLLNNLIJFDDBA8+%'### !""##!$%  "'%,Daicbifeijmryƒ}z~z‚ƒb60>:3/3/,+)8K9%.AD@:677787888\y‚…}x†’„ˆ”“ŠŽŒ…‡ˆŒ‘‘ŠŠ‘•’ޑދ“•“——“–”ޓމŒ‰ƒ˜yOMYRRWXRQSRQTTUUNFC>:?IJGGIELKF`rYN^]YZZX\]\[YYXYYZWZXW[YUX]V[`JJz¡›••—“‘’’‰ˆŠŽ˜Ÿ˜œš˜™š›€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€"#*97<@4Eƒ£”†€|vmfd`]ZJ.*74466430+&+)'&')*+66541*/?OONMKKLMMLKJJKLLMIFHLMKGNLJJLMKIGGIJKLNNMMMMMNNNLMNOQSTUXRTWTRTTLRjutr_HFLIDHJHHG8-.4432100.-,++..3iª¢||{TGNKLOQQQPQRSSSQQSSQQSRQRW[\\\]bgfb_]\]XSRRQRTVUXYWWYXXUSSTVWXVXYYWTQOV_eb]]`b^``^_aa_UOFEG@9<4 *XxiJ80@IJDCHIF@??B@:=FECJOKNURIPUKFLD8;A7,.0*)4;=65=FIPRRSUTRTTQPSZ]ZUNFFMQLHPW[Z[_\PKHECBB@=;??@CC@>??@@?@AA>EKIB>;;@@>97;955CHE>>\oO$ !"$&% "AL4 "$#$1BIJLNPRRRTTROPQQPPONNOQPNRQNNSTQOONMMMMKILGCA?=5("#!!!!#"$%# $(#'%.Hbfbehfhjjjr{ƒ|{zƒ~O*(0*())+...))8D4'2>;60)+,-/13446:>AKTRJOPPOOOQS<;^z‚yt‡‹ˆŽ‘‹†‰ŽŽˆ‰‹‡’’•’‘“–”‘••’˜—’•Œ’ŽŠ’‹„˜wOMVPQWZVTRMPUTQQNGBB9;FMLHEHIDAcx]O\\Y\[WXX[^^ZWWXWY[ZZ\[Y[^W\_IL{˜”—™”‘ŽŒŠŒ–›˜š›˜˜šš™€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ &%*74400/..01368;=>>CGsªœtsŠySIQNMPMMLLMNOORPPRRQTXXSQV]a`_c`]]bgd][ZXWTQQTPTYYUVXVWVUUY[WQTTUUUSOLQUZ_`acd``_^_ba^NIBDG>:D6! OxoK4-7GIDHHBA7=IE=85;>ERSILQMEHLD@FB9?D:--.,-6>@84;CEIQUSSSPOSPPTY[XVNJFEKMHLZ\ZX\XNJKGB@AAA?=?BC@<=A>@@@@A?<>LI;:>>=?=758744;EH@9Vr]2 #%'(!'EM6&"%"$1BJKLNPQQQSTUSQPPOQRSQPPPPPRPOQPNOPPOOMLKJKHEA;83)   #%# !!#!&%/Iadafegjkhhq}„}~y{ƒzO..4,/1.-1../1;B3)14,--)+-//023374..=PVQOPPPOOQS@?`y~‚€†ŽŽ‡ˆ‘‘‰„‹ˆˆŽŠ‰‘“‹‘”’‘”“’–—“”•“Ž”–Ž’Š‹…Ž˜vNKSTRTVTTSOQPORUND?B;=FIHHILJB>aw_R]\X\]Z\\\YXYZ[[\Z[^^\\^__Z^^HM{˜’–’‰Œ’“Œ‹‘Œ“’€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€%&'--,458>21IPHJKHGJJFBAEA<:2!!"&!'0+%*2=75784/-9INLMLKNMMMKJIIJJJKKHKNMKMLKLKKNKLKJMNMPMNONMNOPSQRUVSRUSSSSTVUQHN`rvq`KAEGFDEHIFD>25FLMPQSUVWWW[WWy§¤j|ZHNLLNTLIOSPOQSQPPQUVQSRQTY_a``ca_accdb][][VSUPSQOUZYVXUVZZWVXZVRRSSPLOW[\aa__[]`_`daWHIHDFBFDJRVTUUPMQOQUXWUUMEEEEHGHUYWUVWPGFGD@>=<>=?=BD=648:71=EE?CTgqF!#'(,)EN6'$$'(%)5>IGMQMPVTQSWVQQSQMORQLKMOSQTUPNPPORQMKMLIIHFB<5-& "!#'$" &%%;)+1,..*./111.,*2)&'):MRTNMPJIPMA=\x‚ƒ|€†ŽŠŽ‹‡Œ‰‚‹”‘‹Š‘Œ‹‘•–”–‘‘”‹’•’’“’‘‘Ž’”‡Œ‘”†—vMLVOUUPOSQLRUVWTJA?@;>FIHHHINE?`rZO`_WWZXZ]Y[YWXXY]\[]YY\ZZ\[][ILw—‘Œ“”Œ‘“‘Ž‹Š‰ŠŒ‹ŽŽ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€1<-$/55892-9JNIJFFFHIIFCBBAA;+!#)0-*.0./59731.9GNJHKLHHIJJJJILJJKKIJNKLJJKKKLMLILPNLNNNNNNNOPQSUUTSTUSUVVVUQNIK^qup]E>CFFEGIJFDA;E[ba]\[Z[]_a[WWy§¥h}_KPQOORMLONIIOVXZVOQWXQPQSWZ]__cdcffdcb`\XUUUUTTSTWUTVTUVUUXZZ[XVVWUPLU\_`aa_`_]^_]ZTMHGFEHD;AA*ArzW8003:FMG=:@JJA45BE?9:;>GKIELPLCBB>EOI525..47833>GDIPROPQOMURQTXYXXLGECEHHN][XYZSHDBCCBA=<>?A@AED?;<<=9669724;?GEJJOQNOTRSLNUTQPQMMNNKLOPMPSRPRRPNPPMLMLIJHFC<1'"! "&# !'$ %=[uƒ|}Š‹ˆŽ‘Š„‹ˆƒ‹‘Œ†ˆŽ”””–•‘”•‘“—˜‘‹Ž—’‘ŠˆŒ…Ž™vLN]LRSPQUUPQSSTRJA?A6' ",0+(,)'*-.--,.CRKEIHLJIIJJJIEKIFIKKLNLKKLMMKMMLMPNLLPONNNOOOOSUSRSTTTVWUTSRPIFUion_HCEFCCEIJGD@;H[_ZYYZZZZYY[VWz§¥gnlNIILQOMNQOKMTSUYXSSUTPNORTTW\`ddcghgfbb`\YWVUUYXTUUTTRPTYYTV[[XUUUTPMQX\^```aa^_`\VOIDBDGMG>BI25j|^;.33:GMB9:FFA;44:6:9=EHFGEEJQRRRNFENH3/1,,15712?HDMSSOQSRQSOOTZZWTMKGCEFFP`]YWTI?>@AA@A?>@BB@ACB>?>=ALJ?>?=;<5378314>GF;>Tioc;#" $'"*ENC2%/-(("&;KLPROORQMPUTOMPSSQQPMLMLPPPPRQPQNNNNMLJIHHHF:*! !$!$'#!%>Zc_`cdfghjmrvx€}|{„~O)#%%&'"%#""'%"("$)')363/.,*)'&&!(&&+$';NSMKPRSN?A_v€†€}ŠŽŠŽ‹ˆ’Š„‹Œ‡Š’”Œ”””—”‘‘“‘’’Ž‘–•‘”ކВ‹„’oJMYVXVQORQNQQPQQIA?>:=FIHGFEKDCfv[M[\Y[]WVUZYZZXY\\XXZY[]\\WW\\KMv””’••–‘“˜—““™›Ÿ¢ ›™˜•€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€B?AC8.18BGDGHGMNKNQONROFBJF3,1-,05722@HDMSSOPSSRTPPW]^XUJIEBHJHSac\SNG@@CEB?????ECA@BB@?>?@?>?>=COMA>A><::96310/;FH>>UgihH"! (*#.FGB9&/0/-%);IKOQPPQQKMPQNNPRPOQQNMMLLMMPSQNPONMNMKHHGHKI:& !%(!!'A]d]^ddeghjmrv}z~}ƒuF" !"#$"$$""&&&'$"%&&.62*#$%&'&%$$)$%-'"/FTOIPRRP@B`xˆˆŠ‹‹‘”‹…Œ“Љ’ŽŽ”•‘Œ‘“’“’‘’‘“”‘Œ‘””””‘‹‰Œ‹Š“•rQOPPSTRSVVSQPNOPJB@>:?HKIHFAIEDdqWLZ[X\]ZZYYZXWYYXZZZ[ZYZZ\XX]^KLs‘ŠŠ‹”•“Œ‘‘“’“—•””“”•“€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€*56.+9B?)(>KGFIIHHIIGHJEDIKGD>3&  (,((('((&$% )>KIIKIJKKKJJJKIJLKKLLJHKLJKOMJNOKKNPMNMMMOPPPOPPPPQRQOSWVTSRPKDSimfYF>BFFGHGECBA=GY[V][YXWWXYYRVz¢¢‚jp€xWJNONOMMNMLLOSSXZXX[[UNLOQOORUZ^_egffjghjib`b`]WUWWUWUVWUSSVYVVWXYWSPOPU[`a^ZZ[\[UQKC?@HKJC=AJ;'VxjH7.3BRN82>?:GJ5'1;JPGBIMNEEOWQJIF==FE2*-*)15834@HDLRTQSTSQUQPU\]ZWNKGCJJFM`bZPOIAADDA@A@?AAA@>?BA>>?@>>??=CPN@<>=<88742100;EI>>SgfnV+#(#)==<5&(./("+;EIMPQQQRSQOPSRPNMNQRPPPPRSOKORRSQNMNMJHHHHIH;(""%& )E_c]^dceghjnsw…€||~‚n?"%%%&')(&#''$))%&&))$ !#$%%%$%!!('$&>SQJMOPQ??]v€„~~‰Œ‰‡ŽŠ†Š‘‹ƒŒ•‘ˆ„‘ŽŽ””‘““‘’•”“–•Ž“–‘”“ŽŠ‰‹Œ‘Š’•rOPVQUWWVUQMQPNOQKCA?;>GIIHGHNFCbpYR\[Z]]XXUY[YXYXWXY[][YWY\ZZ_^KJqˆ†‹‡‡‘Ž–’Ž‘ŽŽ’‘‹‹Œ’‘€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€'.:9-2B>0-=JHEJEDFJJIKPMLOPOPPO:." ".&((&&&%#(%#2GKGKFHHHGGGHHGIIGKLGIJKLJKMNMKKLKLNNLLLMOPQRPPQRPPRTQTUTRRQOJCNdkcUH?CEGGHFCDEEAIZ]ZXXWVVUUUWPWyžŸ…qky|aHINNLNOOMLORSSX[ZY[[XRNPQPOOQVWY^cdeefhijjfbhe^Y[[XWVTUYXTU[VUUUVVTSPNQY^_[V^YYYPF@=ACJJE@$$NvpM6.6GUK3.=>:JF(%59NTF;CMJAEKNICFF@7@C4*.,)24766?FEJRTSTUSQROOV[\XULIEDJLHM]^UQSL@@HB>AB>>DBBA?@DEB>?@??@?>DPNA<==>;4144004?EG=;Qfgn^4" #"4BB91%"'&$+2BHLNQPOROPPPQQPRNNPPMMNNMNMMNNKJQNLMMJIHLGDC;- )'##,I`b]_ccdfhjnswƒ†y}„f6&-+,+,1./.30))% ##&&##"$#"!!#%&%$##$'((;RSLLLNQ??]w€…~~ŠŽŒ‹ˆ†ˆŠ‰–’ˆ‰’•Ž‹‘”’”—“‹Œ’”•”‘••’’Žˆˆ„Ž˜qGL`TUTSSSSSQQPRRKCA@:;BEFHHILB@aoWO[XVZYWZX[YZZYYZXVZ\^ZWY[[[^^JKr‘‹†ˆ†…Œ‹ŠŠ‹ŠŒŽ‹ŒŒ‹‹Ž€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ *0?C0/A<23AKIGJOMJGHLU[][UNKJJLKKJD;.!'(*($"#" $%!*BMLMGGGGHIJLJGHKLJJJKLKJLKLMNJKNLJLMMNNMMMNOPPQQPPRUQRRPQRROMHPgqdOCDEEDDFECEEE@HY\YVWXYYXVUTOWw™œˆxmp~mQORNLMNNOQSUVRU\_`_[ZVSRQQPORTSRX]adbbcfjkhdilg``b^YZZXUTWYZWWXYZYVURNQX]_^ZVQQSMEBB>AGDABABFC+BptQ4+2@KB-.@;>L?',AC@>@@??@@>DNMB?><=8436427@@CF?;OdfjfB$!$$ 1FE>>0&+0+',AHKMQNKOSPNRUONUQPRRPPPOMJJMMKLLQNKKLLKKLHD?7+&/-!"0Na`^`abdfhjntx†y‚X/)300..519<;/+(#&&**')$#" !"'&&(((+/=PSOMLOP?B`v€‡~ˆŽŽˆ‡’‹‰”‘‰Ž•”••Ž‘–”‘•Žˆ˜–ŒŒ’‘“’‹‰Œ‹„“ŸyKL\VTRQQRTUOQRSRJA@A;>EHHIIHKDDdqXP^ZVXVUYWZWXZYZ[XXZY[ZW[\[Z]\JLv–“‰‹‰ˆŒŠ‹‹‹‹ˆ„†ˆ„‰†ˆ‹ŠŠ‹‹€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€!)1CI82;;16GMJIJLMJB;::9582+-.**.258@GB7*%*,*('$"$!&:HHEIIHIIIHGJLJILKHGLMIHKJHIKKNOJIKKMNNMLLMNPOOOPPQRLNPQSUSOJCH^maJ@ACDDFGFDCCB=FX[XWWVUUVWXSNWw–›Š}chvQJPPPMJKNRPLSNOV[^`_ZZWTQPQPPSRRW[]`f^\bhiijikjihd``_[XYYVUXYYXWWWWVRMOUXZ\ZUSQNF@=9?AEA?CCAGG07iuS4/4?H>,/BCED518;BGHB@@>>>@@??@@?AJHA?<9971-0;EHG>AFB>ObdkpQ%'&&!.?:9?@;<;*#2AILMPMHLMQPNQRRSSRSUTSQMOMMLILOMPMJJKMNMIJG>1%*30$ 1P`__a`bdfhjntx~}~‰yJ-*511/.612;3!%'#(*/,*.)""""""##(&$(,))0AOSQONPO;A_r|†€y…‰ˆŠ‡„’‹ƒŠ’…†’‹Š’•’‘š—Œ’›•‹‰‘˜“’‘’’‡„ˆ“nJLWQRTWVSPOMPRTQH@><9>GJHFDEJDCanYT\YX\ZXZVVWVW[[YZXYX\\YZYYX[[JNz›šŽ‹‹Œ‡…†……‰Ž‰ˆŒŒ‹‰€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€!05?J7)9>59FKJJII:,&$$%&$%&%$$&('(" &,2;H:( &))'"%#%*?MEHGGIIFEEJIHIIIHHKIJMLIJNJKLKKJKLLKNQOMNNQQRPORRLNRTQPQRPLCJ\i_JADEDDFEDGBBCEKUYSWXUPPUXVWLSzšœy\c€rMIPTPOMLMNPRLNRW[_ab\XXWUUTPSPOPRSW\_\^_`ekjgihcchhd\[XVUVWXVVTTWWVVQNKLRYYURRSLA>@==?@33@A=@948=BIF=9;:8346?GMOECBD?9G^gam`- "#$%(.6<3@=<@/!,BGKLNONJMOPPPQRROOPRRQNLKMOONOOOLMMMLKJJKJF:)+4:9'$#2Va\\]achhinpsx…~~‰qA&+*&&+.-.2/#$))&*01/14.-+(&'((&'('(,01LROKKNRL>Ebt|‚~€‡‘Žˆˆ…“Œ„Œ•‰‰‘‘Œ”“Œ”•’‘‘’‘Ž“ŽŒ‘’Œ†…Ž’Œ“•oJNZTSSRQQPPOPPRRJ@=:9?GIHIJFHAEgnUT_ZVVYZZ\ZYUVZVTZ[WX\[[]]\UYYFN –‘•——“Š‹‰‰‰ƒ€†Šˆ‡ŒŒ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€"+:F@0/=?08KLJH@) !"!**)'&%&&$(('($)8D@.%&$  # $7JFEHJIHJJIIHHIJJJJLJKLKIJLJKKLKKLMOOPPMMNMMONNQRPPSSRQRRPMMHKWfaJ=DC@AEFCCD@=@IVXQWXVTSUVU\PSx–™}^\zvSJNQUTRMJJMPSSTWZ_cf`][ZVVVTTSQOOQSUX[YZbgedbcdehhc]_^[YYWUUUVUUXVSRVLHOVVTTMLJHECABCCA?>ACCAE8)_{`<:@=:978688867=;::;;;BDAINC7GVJ;6:EC3),,&340*0@IIKSSRRSUONRVXZ^^[VNE@@GMNXYPIKH@>BCB?>=<=>??C>??FD;8:979?DKLMNF@EG=7J`dbke9!###'08>?9>AD@@A@><=A>BDAAA@=@A?9648?MOONJJNIBBE?:I_fdhlK"# ")/=936<835>FLLKKLLIJLOOMMOPOONONMLNONLMNONNKKMMKKMMH=.!'7BC:'(+!5<% 6Yc^]_baefgkmpu…ˆ„‹l6 #%'&&"#.588610674101110486596;KLNLMNNRP;A_s€†{v‰‰Š•Ž„„ˆ‘ŒƒŒ•Ž‚‰™˜’‘•”•–Ž•–‹’•Ž‘•ŠŠ‰Œˆ“nLP\TTSSRRRQQQPSTL@;97?KOLIFFIBDemSP]ZZ[\ZXW]^YTX[ZZZ[\ZXY[ZY\a[GR—’’“•”Œ’ŠŠŠ‰‡ƒƒ…‡†‰ŒŠ†€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€.2+*.4<7;AIMD.$%'(&"!#&"" #0;B7*!!'$#" 'BGFDDGIIIIKKJJJKJIHKLJIJJHJKLLLLMNKKLKJMPPPNORQRSQSRSTSOORKGEPgdI>BDDBEEDDDCBBHSZWXUVZZWVYYTWw””Œ„gTkxYIMOMOQQPOPQQQRTW\`bbaba[YYXSTRONNONKMRUTY\Yabdfecccc`b`WVXVXXVTVVUWQKIOSSSTKIA>>@EMIFCDEC@=?HD*N{f4#368;7326;ADOD4:6??4*((%'+.19AECMUSQSRTTPTTZfcUNVQDAGIFFGHFFGC??@=?A?>?=>=?BA=>BBB>99866:;95325777@KSMNKNNMQP>?]wƒ‚x{‹‘……”„†‘”ˆ•‰ŠŽ‹˜—‘”ŠŽ’Ž‹”‰‰‘˜’‰‰‹‘Œ‰”—qKOZUUTSRQQPMPQSRJBA<:?GGFGHLLCGgnTT\XTVWWTSTXYYYWVX^ZWXZ\ZW\Z^^IQ~›’ŒŽ•—ŽŒ’”‘‹ˆŽŠˆ‹Œ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€%%'.+,;59DNJ3 &*,5FI;.(&$!$-BIOD6.%# ! $>FECBEHHHHIIIIJLLJIKLJIKLKIJLLLLNOLJLMLKMNMLNOPQRORQRTROORIHENffK<@EECDEDDFB@CLY\UWTTXYXY]WTVs‹‰iVivZINONNNPRRPNQRUW\_bdabeea^][XVTTRPOOKJOSSSVVY]`aabcdcb`^ZWVTRTTSTSRTSMJLPQPOGDB@@EJIHGDBABBBAGE.Dvm<7C?8:94,6;6135/,,*+*+/5:>C@<=?@ABCBE>;>@=:9NK>>HOE=BFJEE:3AH<9@<60-,*(,)(*1:BFJRPSN?DZZVUY]aefUJ@CGC>?AJMGDDA:==>>?@;30003579;?@AC?:9<>BFJLJFEAFHKGFIC?BFA>LQLMICGHEIMF?HHA9::7@A@91;E@@@:4111005999BPYY\abdaZ[]LLS]cca_PE@DFDB@DLOGACB;?BDD>53841021-.1.12248:9:LVQJHIJGHGHEFIBA@DD?J_ichgmZ-!! "($ "&-6=ELLLMONNPQQPOOOLNPPONMMPQQOOOPOQOMMNLJHB?.(7@HI;(-GD%3O_J%"%:Zb\]`eeiiimnou~‚ƒŠ„T*(/+23(&+$'(!%(3<7+$"&,-+.5;?HKHFCJJBEflSS]XUWZZXVYXWWXZ[ZV\ZUX]\YW\`UBT„˜’–‘”‘ŽŒ‘”–—™š˜•—š€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€"&+,11.9MTI@:7-,3/&)./1112573/00-0424467640.-.)/F: " ,CKFCEGGEEEGGFGKKHIKLMLJIILMMLJIIJKLNMKMOMNJKPONOOMQRPOPPOMIFHZfWD>GJFDEEEE@=>HX^ZUZ\YXXTNYYUh~||„|aZjbLJQJJKMNOPPOPQSUY\]_^bgikjf`bdbbb`]\VUTQRTSPOQUVW_ic`dbXW[XVWVSRQPSOIGNTSJCDFGMSOFDMHFHGCDH>FXS+)_rTCDCIG<;@@,073345=9.,>B7=E:0+9GCDCBBFHIKNNURKQbjebimmlodF>BFTef]\TGAAABD@FMOF?AC>?BDDA813:<>=;::;<=<941/.4;=:>DC@HFBEIMPF>BGA98?HHFEFDJCDeoTO]ZXWWWZ]YVX\ZVVXYZYY[YX\YZ_ZFP~––’’Ž“š’Œ‡ŒŒ’˜›™——˜€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€"#!!""%&+,14-.$  !""! """!!!#$!).(&12# ,>IDEGEGIHBHIHJKKLIHJLKIIKHIKMLJKNLKMNJJJHIKNMLKMNQNMQRNLMKKIEUgX@>CDBCCBBFB?@HV][WXWTUXWRQTYgvx|Š‚gYfbMKVPMNOKLOLNJJQUWZ^^_abcfikfecbaabb]ZWVVVSPQRTW[^`_acfe`[ZZWWVRRRQMNHCHTUKEGGNWVLFGJHLMIGE@BK]\3YsN0;C6.5:=C=4>A/0HM819NM9@F:/0:A?9CBGJC<::AFKKXkplhdhqmYG@A?CGN[_VL?=BA?CFFMKFJMGA@A>:9=??<99<>==?FCBCA==@<:6322343:7?IGECAGJA=SfabecllD!'* $#+/!,;>GJ@.!";K=% ;R\J)#!5T_]``^`hljkpsp€ˆ€†K&-+(,*(.*&*% *3:?8,  $%(/8HUPJOIONKGKSNCFFFGD@KCEejSS]YXZYXYXWWXZ[ZXWZZZYY[[Z]^]RAP{†‹Ž‰‡‰‹ŽŽŒŠŠ‘”‘’•”€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€" %"$)+*! ,FJFFGDEJKHHJLJHIKHJKJIJJJIJLLJILQIJKKKLLNHKNPONNPNNOPPONOIIIESfZD/PS73CFHGMHIMGEHPOPLNI75D>22>B>>DB?CFENTVYTHB<::?EHC<@CFFCA@?@DIJE@@DCDEFEB?=68675387VjgbjgeldF..! !" +=DIMPNLONOPPQRRQTSSSSSRQRQLNSRNPRPMNMLKG<+.Ebs~„z~†ˆ‹ŽŽ‹‡Ž“އ‹‘މ‡‘‘‰Œ˜™Š“Ž’”‘Ž‘•“–˜”’‡ƒ‡Ž‹ƒŽ’jGLVSPSTPNONONNQSLA=:CECCCBCDA==ET[XWUVXVSTWWQP_mjo‚†o[^\NMTPNNNLMOMJKLMORTT^]][]`eihfeghhfchie^\]\Y\YWVW[_cfhgcbcb][ZWTSSSQKHJRXQIIKNZ`UIFFJJLLHEDAIRaa=JeJ=JRHDIHGGGDFC>ADNGA@B?86@?30=A=?BH>/18=B:9/18=B:@YgYGEKMFCGHCCFAA>@CAAGL^bb_YK>;BE>>The\ceciqoe]I+#(&!$5>DINPKKRQPOOPRRQPQRQPOPQNORRQOOOOLKLLKMH8&$1?FGC4$*?G7"(BUZF% 7V^[]_bdimkmrusw‚ƒ‰xA!)+',)(,)$&!'.2*" (.=D>1"!'0?WcZOLJNKINF:Cbu…{~Š‰ŠŽŽ‰…ˆŽŒ‡‡’“‰Š–˜’•’ŽŽŽ’‘Ž”‘ŠŠŒŒˆ†‰Ž‡‘”lJPZNOSSOPRQSQPRQF<;><@EGHGCGL@AdiQP\WWYWWXWUUXZZWVW[VUWZXXZX[^VEV‚’‰†‡ŠŠ‡‡Š‹‘ŒŠ‹Œ‹‘’‘’˜€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€2SA!$%',08<=;547=?>855-"!&)&,AFCCGGIJJFGHGGIJGIKKLKKKLIHIJKKJIJMMMMLJLMMMMLMNOOPPPNOOOLJIFN`\F=ABABB@@A@@AIVZTVWUTUXWSVTT_hel‚„r[WULKPPOONMMNNSPMMOQRRSVZ^afilkjigedddcffdccb`a^YVUVZ^adedbc_ZTXYXWXTNIGJQSMGHMR[YJEHIHMQOHDEGNWceE 8VM9BKD=DFE<@?;22<;::;=5-39B@609CC?EM;0@E98MG9BGCLJIRUMFHHFEGEEHKHEC@@CITbkikeWH<=Rechihebdo{„sE"!"=J=+(6@EIMOLLRROMPPOORPRRQPOPRORVVQSRNQOMOLLNI6#!*5BIG?-0AC1 .GWYC#7U\Y\_ebgjkmrrpyƒ†‰q;$/+'+(&,'##" ##11)&)#"-:IL4  )1BZjdOFLILTH6Bbv…{€ŠˆŽ“‘Š…ŠŽŒŽ‹‰…‡‘–“‹‘“Ž’”“ŽˆŠŽŽŠ’’Šƒ…‹†ŽgGOXKPTQOQSRMMNPNG@A<9#&)+05;>>?DHFD>3($)/+/.09954**+-,)3GFDEFHHIHGHFEHJIGFGHHHGHHGJKJHILOIILNLLNLLMNNNMMMPNNOPPPPNIGFL^^F:BEB@?@CDB?=EU[VUVUSUXWSTUU^gek{v_SQKLNPPONNNNOKLORNHEGNPTW[^bdiiiihhhhffgigdce`][ZXW[__aefea]ZRRRRRQOLJDHSSHDIOW]THGMLLOOKFDHNT[chQ%-CD;C@6=?429?EE<JMDALRMF=58FKA=D<286/1;71H^`^N>HOKFEFELNHDH>7>GEBAHQZ^d\NDFKLOC83=KOF;5;FNNGA>LLKLSZXQ=AL[gfZNLOIMURPLDCC>>Sfddie_dinv~tM2;:'$7Y`F/,6BHIINPOOPNOQQNOQTRPPRSRQNRRPQOMNNLKKJHKH8%&0:DIG<(4B?+2KYW@"&?Z^[\^efghhlpssw€‡‰k5#.*&+'&*&!$! *:2''-$"*?UN3!"&+Bay^FIMOSL9Car}ƒ~†‘Šˆ”“ˆŒ’Œ†‰‡‰Ž‡ˆ‰•”Œ‹’’ކˆŽ‰„ˆ‘‰„ŽhGMSPUVQOONMMPQPME?=>:>DHGFCBJAEegPQZVVXWWWWUZ[XY[ZTZUUZ]YXZYY]SA[Žœ‘‘ŒŒ‘Ž‘”•ŒŠŠŒŽ‘““€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€1K9$.120//149=BEGCDEFEB=:)($ !+78=>?A??CFEEECCDFIHEFKJHJIGHLKHHLIKLKJKMMJILMJLOMMMMNNOOPPNMOPQQQNGDEJ]bJ=CECCBBC>???GUXPTSTWUSTXTSQ[hhfo}{eRNMOOPQOMONMPPMMPPKKOOOPQTZafhgfhihd`gccffccffcbb_[\`bcfheb^]YRNQOKJNGFLUQHEGNY[QIJKJNNIFFGJNY^aj[06FG83?OM<:KLPUTTVOLMPTVUU[TIB;6?E<57<;0.11./*8MVO81CPMHIJHGME@GC77EHB==<50<84ALT]dbYOHYfc]XPXcJFD?>Sdcfke_dhjr‚uP7;;6>>G_^A25?DIHGMQPOPQRQPQRSRQOOPPPPSRRUSOMQNOKLLKML=,%+5?FGB7%#8C:%6NZU>!(@Y\[]^eghhkorttvŠk5$,*&*'$)% ! "5;/%*2, *DYN5 ,Aiq^KJLOM9Cbs|‚}…ŒŠŒŒˆŠ“‹ƒ’Š„„‘ˆŠ“’†’“‘‹ŽŽŽŽ‹‹ŽŒˆ‹‘…„‘”lKMPRTSQRQNMMPPNKGA?97=HJHFDDKADcfPU]YXZXXXWX]]XUY[ZUYZYWYZ[UW^UB]š‘“‘Œ‘Ž‘•“Ž‘’”””—€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€;P4(0;CGGFFFFFEEEEECDDEA8+! !  !->FCEHE@EEDDDBCEJHGHIIHJHJKJJJKJHIIJLNMJKKLLJJKLNMLKLMOPQRQNNOPNNGEFHZcL?CDCEECBCCA?FV[TTSTVURTXUQP^lf_eu{fNIJMLPROMPOMPNKKORQONNOQQSUY[``bfijgdeaadgfefdcdeb^_c`beffc]XUPOQPJGHEIRTLGGHTYSGEFHLKNKFEFKT]__ke85PXLMRUVSRNOJHINQHDDGDDA?NXLGC7146=:<<=FQTIE91154,:FLGGLJCLRNCFJ@13<=9<<50'%!%-.+,3IO=147?EOR>;DEW[RML=((67<99DJJNOJIGC?=BKIC=?DA97ANOHF@2)5859??>;- $!!"+/+,6DKBINJEFKO@:9?FHJLEA?CJMIDHMWdebbWJDB?BViid`fjdgoosrW3)/7>47VbK=?DFIJKLJMVPMMQRQQSTQONPRQPRVTOOQONLPJHLJIMH;23;EH@5- #/;B3#9Q[S;!1GZ\^`^dgeeimprrwz…ˆa.")*&*&$($3B@.&),/.%#!/LT:% !;MjrUEMG;Fdsz{†Œ‰‰Ž‘†ŽŒ‡‹‘ƒ‡ˆ†Ž’ŽŒ‹‹ŒŽ‘‘‰‰ŒŽ‡†ˆˆ…‡Ž‹‡‘gJPVTQLOVSMOMMNRRH?>>;>EDBEGHLAFhhNO[VVWVUVUTWXTRTVUTXZYZ\[XYX]R=[’œ•’’””’’’’“““’’‘‘‘‘’“–—€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€  F8/ADEKE?>ABA>@ABCCBBB<4-#!#" ,CK@AJHCGHFEGGFCIKHHJJGIHIKKJIJIJLLLLLLMKIJLMMKKNMMONLNMLNLLNPWUKDDFWbN=>DDCC@BBA@?FRUMTWSNQTUXTRTfn_ZbjoiUHJONOOMNQMKPQMNRQLKNMNNMQX]]accabffb\_a__beeda^`a]Z\`bdb`a_YSPMKLMLKEHRRHHPTUPJDCDGIMNNLJLU_`^`muM#/@BJ\R:>KSL=?J=0=D><8@F;5HTKEB+#3/0687DMEED><:7=CEQL>?D@8819EGFD<=?A@>;99;<4*$$$ !&*089579;@=BHKJEA>GLOIAAKVhndTUWNGBBD?=SihcfigcdltusM$#059;BOYMAFIIKMNMLLLSSQOQRPNOQQQRSQMRXUOQSPOSQLKNMJKIF?@ADI?4+  '1?A/&DU_U:";U\Y\_bchifdjttnv~Œ‰[*%.(()%(*  4@?0).1.,/%%9OR4$ !!(6XtgONK8Cdt{x”Š’’…Šˆ‹‹ˆˆ‰‰‹Œ‰ŒŒ‘ˆ”‡‰ˆ‡…‡‰‰ŠŒ‡‹ŽcCMURPOPQPNKRQNOPC;A;6;DGIHBAGAHdePT^VUZXTTWYWYXTWZUSUUUY\[[U[aPCf’—“—™™˜—˜˜™–’–˜’‘”“Ž—€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€*1%*BKGAFC@ACDCA@BDCA=;:.'!" !#"'9FFGIDBFHECEFFFHJJIHGGHJIFEIKKLJHHJKJILKJJKKKKKJLMKLMKRONKLMMSVJCEDR_M<>EDBB@C?<<>FQUOTURSVUQRTQRgp^TZekgUJKOOLOMMPPOQQRPLKOPOMPQPQUZ[b_`fgb_a[\[YY\_`aca^^_^_a`ab`_[UPOOOONLJLLRRKLTVUOIEEFJMOLKKMQX_b`bozX""0?BFJE@B@99EEKXM57@A@HH@>ED969:=GMC5??<=<<<2;=<91%&" !"$'&$'05:>@@ABKVUJMajdh_PFHHECDCE?=SgecfifcdlsrI''--33?BFJJJHIKMNMLLMPPOPSSQQTSRSSQOMTSTTQMOQPNLLLMMJKIDFEFG;-%%-7>>- ,DS\Q7&@X]YZ\aecilggnsst|‹ˆV% *(()%(*  3@<0)-1/.0-  ):PF."*CfkWNL=Ebu€x„’‘‹Œ‘‘ŽˆŠ‰ˆ‘“Š„‹ŽŒˆŠ‘ŽŒ“”“Žˆ†ˆ‰Ž…‡‰…‰ŽˆƒcEPVQOOPQQOMRSNMMD=A<8?FEFFBBE@JgeOSZXWUSWZXWWUWZWTVZURVYVV\Y[_O@b—ŒŽ‘•–––•˜˜–’‘–˜–“‘–˜’’—š€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€",?EBHHBBAABBA@CA?@A<0''!  #,8CHFBCGIFDEGHFIJHHIIFFGIJJIIIIJJIGGHJIIJKJJJKMKLMKLNMMLMMPPMRYJDGCM\MEC3,48;EMC3413@CBE?78@HI@EEE>>Tfcdfhfcdkr|wO)/>;5679?AFNLIKMMLLLMMORSTPQTROPTURRTUSQQQQOMMNNKINNFKLJLJGE8)!")4;?;,$5ERVJ3,I[\X[]bedijghnsst|ŒˆR&())$()"2<:0),11003''CP@$#/MfcUH8De|ˆ‚uƒ“ކД’‹ƒ‰‹ˆŽŠˆ‰‰‹‘Œ‰Ž’ŒŽŽŒ‰‰‰‰ŒŒƒˆ‰ƒŠ“‹ƒeFOVPONNPQPPNQPOOF==;8?FFEFBED=IhdNTZXWTTXZVXYVV\YTW[YWWYWWYYY^PA^‰’‰‹‘’‘‘—™•““““›–“–›™˜™€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€%6CAAHBAAA?>==>?AA;2*%$(/5@FDCCFGECDFFDHIGGJJGIHHLLJHIJJJJKJIHIJKKKJIIKMKJLLKNMMMLOOMS[MFHCL[O=?DDAB@C@==@GRXUSWY]_ZUVXQOl~hTW`ebVLKLJMQOMOQOPLMQTTQNLLMMLMQW[\`cehlkhgd^XVWUSYYZ_a]\aa`bda_ZUSQNKJLPSILSXWWXVMIECFJMNMHFMV]`agkos}m7(GVUZRQ[VNLPVLEH@7=BCOQ?9EMDFQME;$=:&.;73AALL<7D?DCFHD@?D64238A@6.'$#!#""""  #%%+7?@ADBEIFCLPEBED=@VfcdfgecekqupR;AFJNKJKMMLLLMOONQUURRTQQUTQORSRPQSMJPNNOONPOJKLKMJGF9*! %.7<@9*)@ADF;A@?><<=>><7-$ "6BBEGEEEEEDDEFFFEFHIHIJKKIFHJJGJJJKLLKJLLLLKJIHLNLKMMLOKNNLONKS\OGFBKZO@?CBBC@A??>=COUPS^eeda_b^TPo…kSU^b_UMKKJOONORONROMOSTPOQOMJHJNSW[]afjnnlhfa\ZXUPRUVW[\[[^ad`\YWQOOMLKLNPLMRWZZXTJHFEHMOMMKLS\behiourwn?!=H?@COWG;@IKD7=KB0=22;?6=B0,5/5E>746;<9>51/+)("  ! "  !"#!!##!+&+105>?=DD:6=EGGHCIG@@?>>===<;5.'##!",AJFDDDGGFDDEFGFGGFGHHHHKIGFGIHGHIJJHIJLJJJKLLLKJIJJIJLJJNOMPNJR]REDBJUOB?AABD@@@A@>BOUPU`b]Y\bjj_[|‘qST`b^TLJJIRQOPRNLPOOPQQRRSTOJHIJMPU\achnmgffd`\ZUPSRPRVXX[[_b^WWUPLLKKKKKKKLOUYWPJKIHJNPOLNOSZ`dhlkqwponH%19?AE?7=ND0:GGPOKERG4J^]MKSb\OD4*0+$,68:7=IHIJ><@A>@HD5.169779;=7=F;4''6CQQG3!,CUYY_a`defghhjnqsuy‹†J '&!+)!"(2:>4,-11/.-5<9)!0IE+%2Tl_=C`tƒ‹~}‘‰‹’މ‰‹Œˆ‡ŠŒŒ‰‹Œ’’Ž‘’‹““ŽŽ‰‰†‚‡Œ…‚‰„‹š]CPTRRQOMMNOOKMSOD=>:9AGDDFCEF?HgdNRXVWXTSVYUUWYVTTWXVUZ[VU[XX]PA_Š”ˆˆˆˆˆ‰‰‰ŠŒŠ†…‡‡‰Œ’“’€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€=EBAA=><==<==81+!#$# !!!#!(@DEBABDFEDCCCDEFFGGEGIIGIFFHHGHJKIGGIJJIGHIJJKMNJIKLJKLJOQNJNLHR`UDCFHQPB@BABC@A@@??DQXVTZYSQS\gmddˆwSS]^ZSMLNNNPOORQPSNPQPQSTRTPNLJHJMPY^^cmmfkmkfa\WRTQOQUSV\]^_[URQMLJHHHIIHGKPTUQJFMHHOSPLKLOU[_bfknpulkpR'8HNUQ99UeZBJ_]YYXY\ZVVVUPTOMRTK9//'$-//677HLJJFMJE?;;:;FB90$!0?FQOA-3NZZY^_\cfggghknqsww‰…J%$ ,* (4=>2*.20/1028;3# $;G8#!)>\fBAax‚‰‚‡Œ‘ŒˆŠŒˆ†ŠŽ‡†‹‹’‹ˆ‘ŒŽŽ‰ŠŽŒ‹Žƒ‚Œ“‰‡Ž†Š˜^BNSKOSUSOLKMKNSOE><:9AGDCFDEE?KhbLSWVWWTUWVVWWXXUTXWZZXYYYYVY^NAc‘™ŽŽŒ‘‘ŽŽ‰‰Ž€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ =A?>;:=8=<<<:1#!! !#!  (>NE@DHGECFEDDDDFHGDDGIIIJCGJJIIJKIJJJIHHHHIJIHHJMIKKKMLJKLNKIPOJSdXEEIHOQA@CBAB@B<;;>DOXXQUWWVSV`f_c‹ wOO``[RLKLNOSQNPQOOOOPQRSTUQPPPLIJNRTW\cimnjmnkgdb`QSSRSUVZZXWVRONLKHFFHHGEHNTTQMLONFFRVNHIQTZadfjnporjjtY/$NcVMWSPWSMPWSJHIF@ICBLOG<=0 +$"3.!9MJD>IOKMNHIRVWSTQGGIA:53;29M7+5.+=E?A928@>>9, ,("'/*+,+))*,&$""" !"!!$&6IL>?TdggfdcceiktrT87;9?NHD=4,"#6EIPL>*!9Ua\W\]\bechllhhpxyx‰‡M$# ,*!(4=>0)/4103334660$#-FFFHDGE>Lh`KV[UTXYWTPVXWUUVVVW[YTTY[\RX_PCh”š“’‘‘‘‘™‹“”“’–”“•—€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€(?A=9::9<;84-#!!!" "! !#$" '#"!"5FFDEFGEEFEDGGCFJFHHHHHIIIHHHIJJIGHHIKJGGHLLIIKKJMMJIKMMKKKLLJNMKSeYFFKILL=ADDBAABA<CUL>=ELE9CJA7;E?67HN@2@RM@C3 '%0'+GME>6EFKSULIRPI>55995011-/@JF@ELEFH><561/7>@A8% *&%) +, $/2.*//++(&& !&%"!!6EH>BYijceecbelqxsM*/<>@L>9@HKLQRMJLONLJNOMOUUONRSRRQQRSSQPNKKNNNLKKMNMLLOOLJJJJE>99>CB;/$ !&:JHPR>%$1@O[YZ^a``adehkoquxu€†L !(# #'2=81-/341/12873;8#$%,=>, $.AXTD^~‚€…‹‘Ї“Š‹ŒŒˆ…ˆŠ‡ƒ‰ŒˆˆŒŒˆ‘‰‘‹‹†…Ž•‡„ŠŒˆ‰ŠŠ…„“aCMSMQQMMQQLQONQPG>><=ADDEEA?C>Lg_MUVUY\ZWWVQTVVWXVSVUVZZVUV[XZLBf’›’’‘——’‘••‘‘•••™—™š˜—™š€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€*=<;=>76?95,# #"$"!#&'$!$% *;DHGGECBCDEFCBEGECCHGFEEEEFIHFFGHIHJHFHJJIIHJKHFJLHJNKFHOPKJLLKNMIPi\ECJIKJ?@BBABDF@;;=BOZYUVX]^XZei]b‰¤…XM[aWMLLMLORPPRRPRSTRPPRSSWTRQPMLNHKOSX]cgmoponnljg`XSQQU[][VSPNLJIIFFHHFGHMQOGEHLMPONOLKQSYagijmqrpmlkxm=1>34??BA7:G@/8ECHTMGQJ@L[]XPVd^HF>&"(1+,026BE:3DONLJ@2>@<2/598;ACAACHLDGRF8>>5BXhgfggdacinusT20;?BBAAFMIFMTOKLMMMNIOQOPSROPOOQTUTRQRSQLKNPNMLLMNMMMOOMKLKJLC?CC?:6-!$+:IJPS@)(6HW\ZY[]]_acfijlptwvˆP "'#"%'0:9/),1222*286497.  ''1;7#"!)>NTKa~‡†Š—ŠŠ‹Š„‡ŠŒ‰‡‹Ž‰„Š‹‰‡‰ŽŒ†‹’’Œˆ‡‰Ž‹Œˆ‡‹Ž†„‘ІˆŒˆ‚’cAKVPRQOMNMLJLORNB:<89?EEEDADI@JgcNPZVVWUTUTTWXXXWWVWVVYZWWYVY]MBg’˜‘”““–•’”˜•’‘”—šœ›˜™š——˜™€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€.@<9=?96;)&!  #%""""!"$%$#"+>JJHEFECCDDBBFDCEDBEEEGGGFFEJHFEEEFFJIHHGFGHIHIIFGJIKIIKLKLNJLNLNMHNe]GCLKKFBAA@@ABCA=;CZ_ZZ[\YRS[ZQTWOQWO@A4'(*462+-:CB2;@FMH:14=A?BJKE>JMIF?:=5>QNFX_P?IK?0*097@B<+%*"$# *'$# "$ "#!'+*.429HJ?AWfffggdbcintqW83IfcORWSSVVVWUXWWVUUVXZXWXXVVXTX]NFn˜˜‹‘’‘’“˜“‘‘““–™•”—™˜—˜˜€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€1D?87;;5.  "" "$&!"""""#$"#0BIHGFBDDDCEDCBDDEIKGBHHFEDDEFHHIIJJJJJKKKHGGHGLKGIKJHIJJJIKLNLMOMNNKOgdLBHIHD@@???@??C?;:APXUVXWRPValh\c‹¥Š^Ocj]QNJJKNOOQRSSUPQPOQRQSTSSSQONOOOOOQU[_ccgnponpomicZUX_^][YWVTSRPOQQLKRXWTNGIOQVTQOOPRVZdmqstrommkkjsoN3QYTV^bXVYRUWSRMFHEBCACNK?EJ=;FIA@:%&)+540.027??=59IJDFKJFDHKC65@A;>FHGMU`^[eaKIEA>80**29AWffbdeecfkpvoT85?B@JF53EMMPNOPQOLLNLKMMLPRNNPPONMPRRPPPOOPNOMKLMNLIOOMMMONLIKLKIG=0'!$/8CJJKRL?2-5:513/563,#&"!*>A*#" +8GR`q{s‰•‹ŠŽ‘Œ†Ž‰†‹‘Žˆ„‡ˆ‡ˆ‹ŽŒŽŠŒ‰Œ‹‰‹„…ŠŠ†‡ˆŠ††’Œ]COTPPPONNNMOMMPPF<;96;DEDDFEE>>>@@A@A>::CRZYY]]UT^jnn^`‚œ‡`MamaQMJKMMMOPQRTTQPRSSRSQSUUSQPPOONMLMPUY_^bilkknmnplcZ[`_ab^YVVWWUTUUOOUYWQLKLS\YRPSSSV[djoprttqlnnomnkQ#*L\QFIMEOMB@DIMA@ANK+'GPIMONONLILONPSQMOSRPPPQQQPOOPQPLLOPNMNNONMLLMNNPQOKLOOJIJA0(',4?JNJNRNDCIRXXY[[]_ce`gkgflrtz|†‘l)%&&,&"/A>3/6:537065&'&!#2C5&!#!'4=M`pƒ}u†Ž‹ˆŽ‹Œˆ‘Œ…†‹Š„‡’Œ‡‹Ž‹‰‘ދޓˆ†‰ˆƒˆŽ‡…†‰††’‰[BOSORRMMOOKKMOQMB;=;8=EFCEFIFA@??>?AB@=:=FPVWUZac`cecaVZ|™ŒeMbuhOIKMNPOQSRTVUSORXVSSSTWWTQRQPMMMMMPTWZ[^befhilorqi`]`cghd\WWZ[YUWYVTW^YNKNQU_[RQVXY^dlmnnopqpnqqsoliW+1A;2?G;CF@DH?7:LHOMBLSDENVWZ_a_RDFA*#*11.*&+25*-@F75@AKE?;8;EOWZbd][\VC<>C>HSF<>DOO<;JLMMMNNOMJJMONOPNMOQPQRQONNOONONLMOONPRRONMNMNMMNPPOPNLJIJC8-05LULQQLLRRMNNNOMC=>:9@HGEDCHG?@A>;=@BABCCHJHHID>@Ru’ŠiP[tjPHHIKOMOQPQTROQTTTUURSWYXUSQONNOONORTVXYZ]befikpqmedfmoojc][\YXVVYYWYUSOJKQ\g_USWY`jnmnqttpkinqpplhh^5,@=5ANM:29R`F9QZZTVa_WYWXWUSQMIPJHF4!#+0,/.%%18%0MF56@>CILKKPVVUQKFECA<:9>>I\XMW`S:;JNFLNIK]Q*#2+()"/:'(,$5DG=@WffcfhgedhksrP7ACAB@>>??<:=>9667688587.4@WuˆfQ[rhQJHLUPNPRPRTROPPRURPSXYXVRQRSMMNMKJJKSUVUX`dddgkonjjmvvtpid`^X\\Z\]]`ZTPLMYegaYUVYfruxsopommolokkfcgb<0EHKQTZ[NQW[]SMSTMHID>A?IOG?AB=>HHLB)!%#$..,1)#(>OG::3:CIKIB;HJ>3:CB>IUUX[WWPHITVHDMSLJH@IRTQQPMKMRXZVY]_\Z\^__afknoqs}~}€?($&/+#!$'$"!&7C4" &($"")67' &*.0RnxˆŽ‡‰ˆ‰Œ‘‹Ž•”‘ІˆŠ‰Š‹Š‰ŠŠ‹ŽŽŽ‰ˆ†‰ŒŠŠŒŠ…‹‹ˆ‡…†ƒ„Ž‚S>MQOOOOONNOKLLNK@:<8:?BBDEBEB:Mk_JSXUUVTTVXVWUSTVVTYXVUUVWXVWXICl“‘Š“–”‘—‘•™•”—•”“–™˜—˜˜€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€$%000.&%*/21230+!!# $%"!"$,6?HMJCHGFEEDDDAABCCCCCCCBBBDFGGFEEEEFIFFFFFGGFHHHIIGGFFGHGHJJJIIJKMNLKKKMIHKLNdmX@FQNC:?@?AAAA><:7<<;:86549BRm~xiXWloYLKHKRPNORROLOQONQSTVSUXXURQQOPOLKMLHNPOMPX^^a`dkomlmuropqng`\XVXZ[^b_WRSW`hjeZT[fnppsojiousnmngadefjG8_^WZMEMJLMH??BNIB?<55>ECLI>AC>1;PME@,!-.#$*/15+5LI@A5+4CHD7-:<=>FQY[a]ZVJ;7@UficfgebchmxnN;DG@BKC16JNJJJNPOOONLLMNQRSRQSPPOLLMLMLNRPKLQQQPNLKLMOQNJLMNQOMNMKJJIECGMMPRNKNQRRSVX\]\\^^]_fceknmnrz}}‰…J""*0'$252.*%7VI !"'# %).-%#+/+Fy‚–‹Œ’ˆŒ‹‡ŒŽŽŽŽˆ‰ŒŠ‡ŠŒ‹ŒŠ‰†Œ‘‹ˆˆ‹ŒŠˆŠ‹ƒ„‹Œ„„Šˆ†Ž€Q=MUJMPQOMMNMKMNJA=>87@FDCFDII=Lh]KP^WTTRSVVUWWUUVVTTXXVVVWYUW\L@f‘“‘”—–’‘”—’––”‘’”–”’—˜—˜€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€+#!../-"'/430.05:<83*!!!! "&)+5A@>?@@A@=<<<;:;;=@?=;<=DGMaqqgYYou[GILPPOOPPRRSPMNPQPRUUVWXYXUROPNMLLKIJLLKMSUUUVZadglrqnkklmlj_][ZXX\bd_XRTakl`[Y]ekllmmllnqplljc_a`ahM 7YI6@=4CA>SX>7EMM?7BH<2HB/0GVN;6F[WHF:',+"%+/9@07QF39B.+4=DA?CDLY`_XUEA?A?;@UfhfggeccgjtmM9GO=/::/6INLMNPPOPQOLLLMORTTTMNOPQPOONPQRPNNPMMMMMLLKOQNJKMNQQNLKIKNOLHIQTPNRQOMLOTX[[]]]__^_bdinppop|‹ŠR%#  $1AG<970.,"+T[3"''&#&..,.4/?m…‰•”„”•ˆ‰‡„Œ‹ˆ‹‹††‹Œ†ˆŽ‹‹‹ˆŒ‹‰‹‹‡††ˆŠ†‚…Іˆ‘yGLg]LRVSUXWVUSUVWXXWWWUTYZVVYXRTXJ@g“—“–•’‘’’••’“”’“——”•€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€'1!$,02. !/242248;@DC@;5.)%#$'()/:BDEIKIGGHGJHEDEECACCCCBBAACBBBCCDDDBCEFCCEGFGGGGGHFGGFFHIHKJJJIGGHLIHKKIHJKMPLLNIF`m]CDRQC>AA?@?>>A=;;=>?A?ACEEDDDHMS`jiaTQes`JHLPQRSQPOSVSQQNLQVSTUUVWXUPQOOONLKLKMNMNOPNPQUXY[biiknprqpoib\YYZ\][\\Z\dhefc_\_ejkjorqoppnnibacacmV%0TI2684BBLER]HPRFGRZZJBJVSDCD/! )+('+37=,6QA*3@@6/:>=NOQROOLD944:CHDBCBCCDHHJNOLMJIRI,#+.!$)&++/>+2;#5EI>@VghhgfdddfhtoTBHF72=?69JMKIQQPOPRQNLLLLOSSPPRQPRPMOJKNOOOPRQPOOONMKMPPNNOOPMLNONNNLPPNSYSNTPNKMRWYZZ]]^a`_`acefhmrv{~‹ŽZ '&%,,,.6B@:621=A5'FW@ &0* !072++2B`vw–…‰ˆŠŽ…ˆ‹ŽŒŠŒŽ‘Œ…ˆ‹‰‰Ž„‹ŽŒ‹‘‘ˆˆ‹ŒŒ‰Š‡†Š‰ƒƒŠ…‹šyFAPTMOQQPONNLKNQMC==;7=EFFGBCF>Mh[MVXTUWVTTSVVWYXUTUUXWVXUSYSVZK@d’›‘’’‘’‘’’“’’‘”’‘‘””•˜€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€.1&,/2+ (/2005=@??CCCCA?<977:<>BHKLHJJIFGGHHFCDEGECBBCCCCBAEDCBBCDEDEEDEFFDFGHGFHHHFHGEEHHGJIGFHLIDIJIGHKLLHFILMNJJ]l^B@PSD=AA@@?==@<9<@A@?>;9:==848HUadb_VQ\mgOFGKQSTTQQSUROOPNNPPORSSTVWUSQQSQNNQNOONNONNNPRSRRUYdgjllmnpof\YZ\\ZYWY^bgjhffa]aipqkpsqooonle_bfber_, +QU?765=II;-A_\>31:BAGE<:AD@B?>AA>;<>CEHMKIOK>85=LH4-43,(%#)/+$%%.=-+8%6EH>@WgghfdddfghwrW?=83A@2"$5<808EA* !,.)(3:2)%,4BV[`x‰‹‘Œ‰†‚‰ŒŠ‰ŠŽŠˆˆˆˆˆ‰Ž‰†ˆ‘މ‡ŠŒ‹Œ††ˆ‹‡€„ކ›vDDPTOPQQPOONNLMOKB>?86@@=>??@@;8;?>;86201441-:O]a_^a\SXhcOFJNMORTUUUUPQPQRQPRPRSRSVYZVUVWUQRVQONMMMNPLLMMNOQQTY`cddgilh`ZXY[\^XX\bjoohigehnpnkmljjkkha\Y^dadqe4"HZOGHIHQZKCNRQFNMGF>9?@?@?OQ=BD@7DJEI;!&.)$(,0<7.>M:).*(?937;@ACB?;;<43566457BIGCKMF?91-(6PJ3,3113(")*,+(#!)/&!.&7EH=AWgfedccehjkxrN.0744DA67FOQMJNPNNPSTOLJIMQQONNQSQQPMQONOMIIKOOPOONOOOONLKNQQOMMMLMONNORRRVUNNPQSTVZ]Z]^_bbabcdhlkilrv|…i+%$":73.+)./2AJRcw‡“ˆ‡ˆ„‡‹Š‰Š‹Œ†‚…††‹ŽŒŠŠŠ‹‰…‰‹‹‹Œ‰ˆ‡‰‚†††‡‡ˆ“c;EPRPPPPPONNNLMOKB=>76>ECBEBCC:Mi[LWZUTVVVYYWVTTVYXVSSVWVWYWXYZL?Z„•ˆ‰•—˜—Š‹’ŽŽ’”•”‘“”‘€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€-1)(10+ "/0/6=>@DEDBC@ACDEEEDGDDHHFFJIFEIJIEDFGGFCBCDCBBBBCCCABCDDDCCGCBEFEDFFFGHGEFIHHGGFFFGIHGHIJIHHHIJJKMOLMNIIMJHXjeKBQWG?@?@@<9;=<:977643468F\fd\Z\UMUbZHHLNLNPTUVTRQURNOPNNTTSSSUWYXYZZWUVYWTRSRQRUNNLJKOPOPV^ehikljf_YWYZZ[YXW[flionkijkkilkighkhd\[[`gefof= ?ddPMZN=GFBJC<;BOL:;DB78GBIP=>IJ@DHJRK)!/1/-013-=L7&-'%$)6<7>@@@A?:426421/147@E:-6IE3499'2SI+/3131%"'&&)*())$%$"",- 7EG=AYgfccccdgkmwnJ/4833?=49FNPMFLPOMOSURQLHJPQOQPRROOOLNONMLMMLKMOPONMNLLLJIKONJJMOOPPOOKOTSTUQNRVXWXY[\^]^`a`b`_agiinvw„€…‘p4!>?;9;NUE8BNM?<:8650146762//3.$/GI72MfYJTXTVXWUURRSRRSTVWYUWWTVYVUTUKARuŠƒ…‡‡††‰Œ‘’“’ŽŒ–˜’€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€*5/-2%)53493ABDFGGGGFHGDDGHFIGHIGDFKEEDDDDEEEDCBAAAAABDEFFFECBBEGFCBEEFHFDEIHEFJJGGIDIKFDHIGFJKHGJJHHJMJIKJKWhfOANXJ<@?=>??@@;8;??:6/.,,.4;@Vs€s^W\ZQORNIJIJJKMOQSTTSQRQNQSQXTTVUQPRV[]YVWYYZXY\ZURSSZ_\YXXVSSSTX^cfddaYTTVVSRTTRWag_cilhbdicegffe`ZW^`bfe``dH)WhH0351EH9D@:7@DVE+'0*+2002.275.()--(-'(3108EF=ADCC@BBAADEDEDEIHEEHFEDCEIIFDHHGHIIKIHIIFGIFGHKLKHIKJKLKLMJGXhiWAJ\M<=A>=@>?@<79@<1-/-.5>@EP]u…xaVSNLMMLIGIJJKMQSSTUVSOPSPNPSUUVWTRVSV[]][XV[_^ZZZYZ^\[\[ZY[YWVVXZ]^adc^YVTSRVWPNW``]`cb`bcabegfda]Y^bdcbb`\fT((GaV@=::;CH:2>7FUB*0/+)++)(+/1002.'#(+))/227FJ>=UhgddcbbfkpxoK1:A95.'&4HNLNMNNNNNNORUOJMLKNNPTTOMQSSMLNNNMKLKJJJKLMMMNNLJKNNOONNPSUWSQTZ][XXYZZZZ\^]\]`cdca`cgjlmoqu‚q1 ;E-&50$/5/'-0% +0/04@NM>@OLGF7K…sq™Ÿ„„‚ƒ†…†”Œ’ˆ‹ŠŠ“‹‹Ž‹“˜‘‰‹Ž‹‘”’„‹‰Š…Š™‹Z>@<;??A=<89<945138DTYVVe~Ž€cUQLJJJIIHIJJKMQSSTUVSQPPTVSSSSSSRRUVUX]\XX\XY]_\[]_\\]^\Z[^_\YWWXZ\_`^XSQRRTSTQLOZb_]_b``cffffc^[[\`cecbb_[eX,#E`[JHGIGDEGJNLPQKJLMPPLIIKNLILIRSKIEB6*%! "%0/86%"*-.2('-$#5D@3--.21*/-+12+&&.735HH,5;?9@L<$01/--,*+(,/.+***,,++.2317EJ>=ThgbcdddfjmuoN4:=0)$"$2GQNMLLLLMMMMURNMMKLQPNORPNOPMOSSNNOOJMNMIIJMLMNNMLKJIKLMORTTWUSUY\]\ZYXXY[]_^^^^_`abbehijmquv€ƒp/5@2++  $/:1$&)"'7842106==9CBDE14Xˆ…z‹¢£›Ž‹Œ„~†Œ†|„ŠŠ‰ŒŽŽŽŽ‹Ž‹•“ŽŽ‰”’ŽŠ“‰„š«€H?ONMSPQQOMLMNNLMNJA<=88>DDDEFCD>Sj[LV^SV[XROUTTUVVTQRWVTSTVWYVT[ZCBf†“ŠŒ‹‚„…‡Š‹‹‹‹’€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€!02 "''5604889>BBAABBCC?@BBDFCFEFGGEEFHIHGFFECDCBCDDB@CBCCABC@CCCCCCCCBDEEEEFEEFHJHEEFGFIJFDHIGIHEGIHFHGHIJHHHIJKJKKJFTek[CGYM<=A>=@>?<;99<=?DCDKTTFCNl…™ŠhUQMPNLKJIHGLLNRTUUVUQQTTTUTTUWWVVWUUWZYZZYWXZ\[[__YWY]``_`bbb`^][[Zba[SNOTWQPSTMKU^`^adbacdgec_YVZ`befcba^Zd_5>VVONID@?=;;<>E@;DMNMTNHFJJE@?FK;*+4=9.+%$,:8"%.23,-()=??/(043.&'&)12+%"1;55DE4-0;>DM?()+,+-,-/*,.-++/4.+*,.-,,8DI>=SggaceffgikupO354%#$(5JUROKLLLMMMNRQPLJMOLONPRONOPPPPOQUSLLLMLKJJIJMNKIIKKLLOSRNQWTUXZ[\\\YWVVY[\\\^`a`_`aecdfloqpx€„Žm,2?5,"$0:1##'!5C7002-'(),SlZIPUSXWWYUPVVTSWTPRTVSRUUVYTTZXH@[€‘ŠŠŠ††‰ŠŒ‹ŠŒ‘’‘“€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€"0/!&05313448>@??BCA@BBCECEFFEEFGFEDEFHHGFFEBDEEEDCBCBDB@@@?BC??BB?@DFEEFEBBEGGEBBEHHGHFGHGEHIHDFJIFGGHIKJIHJIJIIIKIFUgo`EFVL;=A?>@>><968=CJRPKIPNBAQm‡ž“nYTOKKJIIIIILLNRTTUVWTQSUSQUQSVWUWWRWUUZ][WVUXYYYXX]]\]_``abbddca`][[\ZTOOQRMOSSNMU[Z]`bbefdba_[XX]cdgfcaa^Zdg?5GLIF?<:>A<64=>64@NPFCLHAA:,')68)!"'68/00&+3'$+0104(3@@;-*2550""#*00*&!155==796IKHKK>0:Lf{†”žšŒ’«¶¦¤­ªž˜œ““••ˆ”’‘•”‹‹ŽŒŠ‰‹Ž¥§|B?QMPQLLOQPMKKMNLLNI@<=68?FFDDCGEA=<@>@?;::;=DIMPNLQTY_p†¡™u^WNGIJIHHJLJJMQSSSUVWURTTRSVUVUTVYVVRSX]\ZYX[]\\Z[ac`^]^^addfgcaa`_[\[VQPQQQOPQNOX_Z[]^_dge_^[XY^bdegfcaa_\ahI/AIE=:BAQegeeeccejmxqK'$$*&'4FKKNLLMNNOPPOOPPQNLMLJKMOQQNOSTQOOQRNNNLKKMNKLNNNLNQNOONQVVRWWYYYYWWTUWXYY[[__`aacdeabdeimswy‚†g'.B- ,92# $!!  >@>>@=<<;DS_Z[XVVUW]u† ž}fZKLMMKHGHJKLNRTTUVVTVXUUUSXVTSRUWVSUWY[][XXY[\[]^[^_`a_^_cfjkhddb``a]VQQTUTMNSQOWa_\^bccdd`]YW[beeegfbaa`^^eO!+AIB;57:7/++-117B94;.76*.02D6/.&&:?5.-3301)"!&/53%8,%9B=;3+)3:-$,0,,-,/14:CJKIHHEENL7.+/022.))$&)*,---/--01/+*8BF?>QdhgfdbadinupM)$#*&'6HMNTJJKLMNOOOSROPRPONIJPQNOQQSRRSSPPRQONNOPPMJIKMMMOOMOTSPRYWWXXYWURUVWXXY[^]^_abcdd`bcegjnqx†e&+?- '61$"&"1IJ@;4379?GKIIJIFEFF>537DRc𙦰¦šžŸ™šœ–’˜—›¡›œª§¢¥©¤¡Ÿœ•™–”›£‘g?FLPQPRQPNLMOPMJMLNQLB<<::@DCBCCFB:QgVGUTSURRYVQSQTUQPQQOQVXTSSQZXXUTHCe„‘Œ‘‘’“’‘އ„‡‹Œ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€1.,10121/2578:>@ADDDDBDDCBACEEEGGFEGIHHGFFGHG@CEDA@AC>=@CBABAACB@@DECBFFCBFGFEDFHIHHJGFHHGGIHHCDGIGHHIFEGIIHGJJIHIJJGR`ibJHYT:0'(16-%*1/*/77PchefedcehltqO,%###&4FLMPJJKLMNOORNOQPNOPMLORPMORNRRRSQPRTQNNQQPMNOOMKKOSOPPRVYYWUVXYXVSQUUVWXZ[\\_bccbcd_`bejllkv}€‡e&'7( &41&$($0JRNKMEFLMLKGIKIDDHKJ@=;0387DTbdm}Šž ŸŸ£ ˜”ž“‡ˆ‹‚}†‘‰‹“•––“™Ÿ Ÿ¦•c?ANMNQNOOLMMLKKKMMLMOJA<=88>DDDEFE@9Rm[LXXQTVTRPSRQSUUSRRSUWWUUWXWTYVXL>T‘……ŒŽ‘Œ“”‘–’”‰†……‡€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ /++22252142/39@DCA@ACEBBBACEDDEEEDCEHFEEFEDCDACEDBABC<=<>A@@CCBBDDCBCBCCCCDFGFFEDGJIFIIFGJHFHGGJIDEGFJHGGHHIKKKIHIKJHR_gaIFWR<=A>>@>><8:<:;??FC=98?Wsu™¢zjRJIIIIJJJIJLPRRSTSVUTVTST[[XX[XUXZXWXZ[ZXWVTV]^\\Z[]aba`abghdabbaab`YSRRRSTUPJNY`a``__bb]YWY`fhggdfeaaccadf^4!/%$;1&5(1?.0--?:'.2&)-0/-3=3-;<) *9/*//+-.20% "$)-/'49*,AEFHC92'!),)',.,+)*/-,.1/)')$,0/.10.8AE?>PchdeffeegivsQ-$"#'+7GPNNKLLMOPPQPNRSOQSMMNONMOOLLPPOPPPSQQPPONMLOQQNLMOORSTVXYWUVWWWVUTTWWX[]^]\_bdda`cgbdfijloqu|€‡d'"-!(84% $#!$DTKELJFINJEHLHGEHKJGHIDI;0644-887BFCFWaaf’Š˜ŸŸ ¨¢…œˆzwuw{{‘ªÁ³`9ADBAEC@CCCDEDDFIHGGGGGFDJKIGIHGHJHGGFEEFIJJGHKKHGKKHGJIESflfPFTO<;?>=@????88>4##3YtrŸ£…pTMLLKIIHFCGMPQRUWVVUTTUWYYTRTUUW[WWYXRRWYXXWVWYZYXY[\]_abefeccddbda]XUUTNWQLMQQV^ac`[^`][YZ^cddehfccffa`bacbA '3$"9/.2&9;)**.?6'10*,%//(5:.*/94%%20(+20-1442+$ "%'(4@7%(9@8..1+(.4=>><989;CHKT\ekw…Ž•¥¢•˜¤§¥¡™yQ:=IMNNMLLMNOMLLMMMLLLNMGA>?99?DCBBBHB8SkVITVRWZVWWQOOUVSSRSRRUURRUUTWWTTUK=lЇˆ‰ŠŽ‹‰‹Ž‘““˜—•””“€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€"0, .4122222333:@B@@ABCCBBDCBCEEDDEGIIIHFDCDDCACCCBA@@@>@BBAABD@BBBBDCBCBDGGFDCAFJJGFHLIKIHIHEFIFEFGGFEJIGHHHHHGJKHGJIFSaghTHTR>;?@?A?@?;46<0 &A_sq~œŸˆw]PLIIJJIGHJLMNPSVVWXXWWXZTSSVXVUUW^ZSUWWZ[YXXXWX[^\ZZ\_abefgfdcdfc_^]VSTVRUVVTPT`b^]]\\ZTUZ`cddddegihc__b_cdG  ,!1,/3(56*'-180)2*00!*5,.3%)+)%%-5.+-/-/32032*$$&("%28/-9A:48??>><999878:;;7200/+)**'$&*,*(.-*+,)(+%&--&'.0,(&&')+6AC?>LbcbbdfdcgmtpO/)$" #*9JOOQPNLKMOPPRONNNQRONMMKKMONTQOPSTRPPNQTSRQNQPPRQPQTROOTURQRSVURSTTTYXWXZ\_`_`aabdcagddhjkmmv~‡‰Z#):5&#*)4HMLLKIJJJKJKJJJJJJIIIIKKIHGFEDCBBAA@@@<;:9888958;=AFHHQ\hjiuzq^RC=@GKLMMMMLLMNLNPPNLLNGILMHA==67=CCCDDGB8SiVLZYQSVSTXVTUXTRTSQUVSSWWSTSWWTUVMASu‘†Š‘’Ž‘‹‹“Œ‰Œ‹‹’€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€!.)!06444333455:?BBB@@CCCDEEDEGDDDEFGGFEDDFGGEC@AAA@@@A@@@AAAA@@BCAACEBFEDFGFDCGGHIJJHFFGHGIGFGKHFFGFEDFEEFGHHIILMKKMMJW`ejYGPP>8=?>>=?=:6<@/ $''''0B\oq}˜šŽŒhUMGGKLJIIJKMOPRSUWYXUSSTYWUTTTSS\_XV]]Y\]ZYYYXWYZZ[^`a_]ccdedbcgfbb_WSUXUXYXUQU_ebcb]YWSV]defffdafigdcef\bhO!&#!,#0/,;9.,15;/'/+67!%5) '#43 4=3+-/,+14/0671+)(%# %,/8@A?:9::Ncdda`abbfkytT2,)%)'*.:IMKMNLJIKLMMMNPOMOSSMNMNPONPLORQONQSQSSPOTUOQPQRRPRUSSUTQTWSSTUTQRSSWVX[]\^```_^adfegbcgjkort}~‡‰Z# '43%"+-"-IULJNMIHIKLLKJHJJJJIIIIJJJIIHHHIIIIHHHHDEEEDBA@=;;<;99:8:?>9=@:=;:;AEIJLMMLLKMNNMLJKKLLKLMLF?;<66=CDCEEC@;ViRHUXPPTQPRRTRTTSUSSVVWVUUUUSVWTVWQGFd€‘ŽŽŒ‹Š‰‹ŽŽ’’‘“’€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€!-'"16534454445;?BDB??C@ACDCCDFBEFHGGGIFEDDDDCABBBA@@?????@BCBBBFDABCABGFFEDDEGGHIJIIGFHJJJIIIJIGGGGFFGGIHFGKKHGJJJJLKIWael[GNO>6;@=<;>?=7;=/&/6965:GYkn}•—Žƒm[RHGKKJKJIIJNQRSTWYYVTTTSWYVPOTXTW[\ZX[^^][Z\^\XXYZ\^___dddfggghddc^Y[][YZXVTQS[`b`\ZWSTZ`egffgghkjfdec^]biU)$('*$0)+<7*20-0,*2/3;+*80(.5=?:@:7:;;<89?EDCDDFA:UfRHUXQPRQSWXSRVVUVUTWTUVUWWTSVVUWYTN@ABB>@EABCCDDEFBDFFEDEFGFFEEEDCCCBBAA@@;>AA?>@B@CCBCDEGEDCDFGFCEHKJGEFGKJJHFEGGGEEEEDDFFGGDFIJGFHIHIJJHR`fl\IPSA8>B>=>??=67:0%)/-'):JWck{’’‘ƒmaYMHIIILJIIKNQQQRUYZXVUTXVRPQTVVTUZZX]_Y]\ZY[_^Z[[[ZY[_bcefghjjigggb\\^ZW[[XUPRXZ\XSUVVV\_cffddfjlkfdda\_biY0!*)&",3,+0,(60#&5;17A<9?>;<>=;:=A<4,-,+,.//,../372)$!!#!#.:CCBCCG@;WjVNXWSRQPQSRQUYROTSNSUTSWVUWSUVUWXVSEBgމŒ„Œ‘‹ŒŽ‹ŽŽŒ’€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€".&&2322210/269?AABBA@D@AAABCCCFGGGEEDECCDEEECBCBBBBBBA@BDCA@ABEBDE@AEE=BGFCBDGHHGHHHGFLKJHDEHIKHFGHGFEGFEGHIIIHIIJIJIIRbgj[JQR@8>B<=>=>>77>4"3ESbgxŒ‹ˆ‚me`RIIIHLJJKMPPONRUY\[ZWVQV[\XUTVWY\[X[^^^ZYY[\^a]_`^[Z\_`ehggijjmkki_XWXZ[XVUSRTY[[TNSZ[^`chhfdedikhcaab`ag]7'*&(+02,#%/A=515=@;6:;9:<;62;>9:@;.,,*+-,+0.../11.**#"%# %/881*((#  !"""%((')-.+,-,+,.,()-))//)+1-*+*()-3,(*+'$%3CE>=PfdfcbcddhmvrV5*.-*)116HNJLPNKJKMMMLMKKNPNMLOOOONLLPPOOOOOOPOONNSVSQPPRQPQTTTRRSNMRSRSUSTX[XYYXZ]\Z_``^_bdefhhedkpooz~ŠŽ_'$! (34(!!#2BNPKHLJGJLKIIHJKLJJJJIIIIJJJJJKKKHHHIIIJJKKLLKKJINLKLKIHIJEINLMLGEKPPKIMRLMMMKLLNNNLKJJKKJKMLF>::45;AAABBE>;YjVLTSSTUWWVTQTWRPUWUPTUUSSUXTUUUVWWVL?O|–‡ŽˆŒ‡ˆŠˆ‘Œ‡†‰€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€+$(5444431149>@ABCDCBCCCCBDFECCDEDDDFGGGFEDDCCDCBBBB@?@@AAAAAACADC>@EDCBABEHGDEFGGHIKLHGIHDEIIFDBDFFEEIGFFGFFFGGGHHGFFUdfi\JOQ?8?@:=?;@@86<4# &$':HUedt…‚Œ‚oheVIIJIKMLJKLOQRNORUXYYYSUX\ZWVYZWVXZ[\\^\\]^^`d`aa_[Z[]beijiijlkikjd\ZYZYTRTTQPXXXSNRZ]bbdfhhfefhjhc^^a_^ea@(33:89>:26>><=<:76:99<==<99==95331.,,**-+*/0/01/,**/-'#$%$"&'"!" $$#""#&(*,/-++-/./.+,..*,,*,330/,+)(''((! ! 1BE<;PfcaacdcbfksoX9/54.*437JQMOSQNMNOPOJNOMNNNPSQQQONNNNMMNOOOORKLSSPQTPOOPPOPSQOQWTKLTSTTVWUTWYVSSWZZYZ^```bdecdfffkqqo{‹a(%!(14' "$/;VdOIRVTRRSRRSROSTSTVYUQSUTVXTUUUUUUVXWF6TŽŒŠŠŒŽ‹Š‰‰Œ‹‹‹Œ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€+$*5321232249=BCAACDCDDDBBDFEBCEGECCFIDEEEEDCCCBAABBA@?BDB?=>@@CC@>ADDCEFEFHHGGHHHGHKMJIKJFFIIHFFFFEEFHJIFGJJGJIIJIHGGUbbg^MQSA:BB;@B<:=87;2$!()#)@NS]bqz}‹ƒrigWIJLKKKJJKMPSTPOOQUY[\USUXXTSUUWYYY]_[Z[\[]__]^__^\[[[cbdhihhijjjhec]TQUWUSPLLXTNNUZ]`ccbadgfdc`affcbe^\ddE ,>CB>888:;3<9637>;:=;??;3.41/(!#*)#+-*)-,*..,-11-,.,1/&""" & #')'&&'.+,020./00.+,//,*,.,)%%'&'&" !"!$*-2CF==Rhd^_ceb_cjoseOGJD87?99IOKNROMLLMNNLPONQQPQSNQTQNNMNOOOOOOONRRPSSPNNPPNNPQQOPTSNOSRNPQUYWSVWUVZ]\[[]ab`_`cfabfhgimnq}‚“d,&")14*'*(2AQOMJIMNKIJKLLKJIGHHIJKKLHHHGGFFEHIIJJKKLMLJHIJLMJNMIIMMILPJFMOJHLJHIKMMMMNNMLLMNNOOMKKKLIKMMG@<<;;@ECAA@@;b˜ ƒŠ‹Œ‰ˆŒ‰‡†‡Œ‡†€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€!+ *000210/26;>BBCDDCBACDEFFECBFFGFECBAEEEDDDCCCCA@AB@=>@A??ADD?@DDACFDBCDEFGHHJJIGEFIKJHHIIHHIMJHGGFGIFEGGEGIEEJKHHJJGRafj_JHM=9>=>C=7;B1#%(AOW]_nwsw‡„nlm]JFHILLKKKKOQPVPOTXVWZZ[YXZWSSVPU\ZY^`^^__][[^Z\_a`][Z\`bfkkgfohffb]YVUVVTROMLSNMV]\\a_b`_cffhiecdfea^^bdiP$(AIA85;?<:;?@@>:86510/..+'$$!"&)+&()((+./,01/153--/10-#)(%" !%(('(*.-)%-/.*,21*-/-)),+'$"  ! ##"&#)''*-3;=:@H@:Qhfbdfc__dirncZ^f_PWUKGPPHILMNPPPMJRNJLPMLQPNNQRPMKMNONNOOMNQSSRQSTLKLNNMNPOPPPQTTRPOSVVSU[YTWZUW^^^[`d__dcabdgjkkknvyq4" ""()3-'%&'0@OOKIKJIKKJIGGHIKKIHIIIHIDGJIIIJIHIIJJIIHHNMGHKJILMNMLKLMMLJKLLJHHMNJJMNLLLMNLMMJLOOMMLKMKIKLF><<77:@CCBAD?=ZjSHTSTVUQPSSQSUVTSRSRQRTVUUUVRTXWUTSTTN@;_‘ŸŒ†ŒŽ†‰Œ‡ˆŒŽ‹ŠŠ‰€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€!*+100432359=?@@@A@@@@ABDEEEDCADGGFDCCEEDDCCCC@@??@BA?>ABB@A@?AABBBDEBDCBEGIGEHHHIJKJIIJIGGHHEEFDEGFDHGGGIIGFGFGHJKJIHO_be_OMN@<@>;=;;A>89?2#$(BPUW]jrosnhi[LIJIIKNMLMLMRQSQOOTVVY[[[[YWWVSUZYX[_`^^``^\\\]^]]\]]]`beijhhieegd^YTVVUROMMMPPRY_]]a]abbefddifefggd`_bbiV*#=H@=>A?859241)&()'(&$#$%%%'%""#&&&&()(),//.00./11-120/0+"'%$%'))(.241-+++,-,+-/,'&&" "%)-)(+)(*++-1112209AG@;Qgfbdec``dirhVKOUVZdXTWQGFJMOOLLOOMMHIOOKMSUPQTQQQNONPONOPNLOPPPRTUPNMNPQPOQPPRRQQSRQRTUVWY[XTUZ^][^bbbea`fdccceiklnx{€x:!!""*4.%"#%1AMMJJNMIIIIHHHIJKHGGHJJKKLIHIIIHIIIJKJJJJMMKJKJHIJJJKJKKLLLLMMMJIIJLNLIJMKLMMLIINOLLMLKJIIHLOH?:9779=AAAAE?;VfPIVXTSTTUTPSQRUUQPRSUVSRTUUSPRWWVVUWWTMA>_Ÿ‹—–“—‹††Š€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€!)-22255679;=>EDCA@???DDEEEDCCDEGFDBABDDDCCBBB@@@?@@@?=@BBBBA@ABCCABDCCDFFFEFGKLLJGGJLLJIIIHGFHDGHEEGEEGFGJFDGMJHGIIHGTddebTPM>:?=<>>=>>96=3$ANRQVdplirwqde[MJIGGJKHJRQNSTTRONPTVWX[\ZXXVWSRV\\\_][[]`_^\]]\[YYZ[]`bdhhiklhhie_YRVVURNKIIORV[_][]]bccddcchfeegheb`a`h_34?8421,%&,)&" #$"!!$'*+#! $&'&#$$$&*,++,,,,-//--)(.1.*-*'(,/0/-.,)(('#!!!!"!"$%((*,.--.31.,,**--*# %-0.8AG??BAFNOXZQKKHMRPIGMQPOJJMMPTSNLOSRRTRQPPONPQOOOONNPQQOQRQOPQRPOPQRQRSQQPOQTVWZ[YWY\[YZ^`ac``dddddefijny}€‘€B !"!&-0,'%&&.::56:@CB@@G?;?>>>=86<20MUVWY^ceforlfg\NFFHKHMMMPPORWSPQOMOUUUX[XXXVXVTWZ[Z]^^^^^^]^__`_][ZZ^bdefffhjgghfc^XRRQOMLLMSXZ\^]ZZ]bdcbcdeeeddegea_`_ie;*0+('($!  &!"$')+,,*'##%'&%$$##&*,**+,-,+-/./,*,//1210/-+)'#&%" !"&'&((),/0/0,,-///,+-3/))++-1&(2316AG?@Hhˆ§˜œ—›¨©ŸŸ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€!'!386789;<>>>=CBBAAAAAGGFFFFFFHEBDHJHECCCBBABABBBAA@AAA@@?@@AACBAABBBCCCDEGHHHHIJKLLIHIJIGHJIFEIHFJHDFHGGEEHLKDGHHKOLDO`aefULJ@<@>;=<;><76=09RPORXY^`cjnj``YNGFGGIMONNQRQTTTQONPPQPUXYZ\YUVYYWV[]``_\[[]_[]^^][ZY[_cehgfhecefec^WVSNIGINQW[\\_^\Z\aeecdeedffdegfb]_aihB"$$#$%%""#!"$%%'*+'),/00/.3.(%&&%#%%%$'+,+&(,..,./,..--)(+$$$$" "!!"!)+,-0465224675311/,+,--,&//(),.10,'0>>QcdbbbaabfhpkI2<:2=ABEKNJIPNNOOLIMSPRPNOPQSORQPQPPTPSOKNONQQNNQRONOSSQNNPQPPRRPPQQORRTUVVWYZVW[\^_^^bdeeeegefgfggikrrzƒ“ŠS!#!" !!%2:1)-0.&!"%.:CC@AGIGHKIIHJJJJIKLLKKJHJJIFGHIGKJJIIIIIIKLIHJJIKJIIJJIHKKKJIIKMLKLLJHLRKJLMKIJJKLKJKKIILIKLE=::89<@BBBCA;=ZfQJUSQRSSTUSSUVSRTVVTVVSQRTTUSTWYVUVWXSTXVLB?LYkŠ¥«¦¢™…~“‘”€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€"&$7;9;==>@@AAADDEEDDBAGEB?<;:9989>EHGEDDCCBBBBECBCB@?@===?@@@@BBAABABDBCDFGHHIIJLKJIIIKLKJHHGFILHDFFDGFCEIGGHHFFGJLLIGRbaegVJI?;?>;>=>Qada`__`begvpL4<;-/716FNJJONLMQOJKQKOOMPPMLQRSQPPQQPSOKNNMPROMOQOOQORTTRQPPRPOQQPOPSQQTWWVUZYTU[ZVZ_`cc_`baegijhhikqox‚\*$##" (0--471*+--)$%'-6?A??CEGKLJHHIJIIHIJIIJJJIHIKJIHJHHHHHIJJLIIKKKLKJJIJJKKKIJKKKJKKGJLMMMKJJMMLNNLKLKJLMIGLMJJIB<;<58[ePKWTRRSQRRPRQQRRSTUUTSRRSTTWURSUSSWTURVWRQOL>;ETiƒ”©¨¡¡§¦žœ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€#&&:><=@@@@ABCC?ACDDA><0-*&" #)1:CHEDDDDCCCC@@ACBAA@??@A?>=@BBAA?AGCDFGGFHIJIIKNNKHMLLLJFFIHEECADHFKGFFFFHKKJIIIHHHRb^ah\RN<9>=>95<2'HVNNQSSW[^fhc`YQJJLNLLQQMMPRRQTVTRPPQQRRRTTUVZ[ZY]^[Xa_]YY[]][[\[[\^__aabedbcbchjif^TMMLKKMPSTWY[]]]`ccffegiffkkfehgb_Z_dgQ&(&),.00111.+*((+02478778:71+(*+)&&''%%'))&('$##!"!$&&(./11100025992+,33454320/45311320.//.01.(+,.,*++)*61(,,&%2BF=@Q`c_^]]_adennR9@>+ )*)3DJJMOLMPOLLOOQNKNSQKOQRPOPONRQPNMOPONNMNOQRRROLMNOOORONPRQPPUTSSVYYVX[XW\\[a__cb]afcadhijjmolmy}‰f0$$##  ""09:2/133/)00(!!&/9??=?GJHIIHHHJKJIIHHHGGHJGHIJIGJMKJJIIIJJKGHKKKLMJJKKKKKLKKJJJKLMJMLIHKMLOMJLOMJKKKMNLIJMJHJLE=::89<@@@ACC;=YbMJUWRPRVXVQTTSSSSSSRRUVTQTXTSRTWUTWWTVYTRUVRIED?@LXks~Š•šž€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€#''<@=?A@??@ABCEED@90'!!0ABB@@B@@BBA??AA??BBBFFEDFHIGFJKLNNMJHIKLJGGHIEFGFFGGEEIHEGGDEGKKHGJJGTc[[e]SL?;?>;=<<<@;4;50KTLKLPQUY]eg`[VOJGIJHMQMJPRQTUVWVUVUSRUTSUUUXRZYW[ZWY\\[XY\]]]]]\[[\]]^]_dfefeehgdaZOMLKJKMQTW[^`a^_ccchjiihbejkecfe`aY\afW* +.+)+0541241*)-0/.157778:5/*)*+($"$$! "$$"%# "''"(++,2789>@A<635940154//475453002133026620100241,)+.--44*3D=,/4,%1BF=@Q_c^][\^acdniQAC9#&$,IOGNONLMNNNNPOPQNNOLNSPLPPOQTPRQLOSNLPPNNPPMONOQPNNPSRONQSPLRTSPQVXVXXVTW[\\_fc^abaffghgfgkoinzz„’m3%%#$!-1' )6<8,-41-15./*$$(.68?CEGGHMIHHIKJHFGGJLKIHIGIJIIIHFKJIIHHHIJHJKIIKLIJJJHHHIKJJKKLMMOLIJMMLKKKKKJLNLLLMKHKKFJHJKE=;;79>BCAABD=?ZcNJUTRSTSSTRQUVSQSTSUVUSRTUVUTRUYWVYVTYZWTRWQTSKDBCACDHLOW`d€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€$'#,=>D<0%+?BEFEDDD?ACCA???BAA@??@AC@=>???ADEDDHKJHHHKMKLNLJKJHHHHFDFIGEEGFFEFHIHHIGGHJLKIHP]XWe`NLA=>?;:<=:=86:2CEFHFFIKJIHHFFGJIHGIJIFFHHHJIGHIIIJIHJMJJJJIHHHHKKLNMJKJJKKKKKJJKKJJLLJMJLNMLLLJKLLKJIHKJJLE<<:88AECA?@F=?ZbMLXUSQQRSRRTTTTTTSRSVTSTUTUUSSUVTTVRUWVVVUTUSQRTRLFEEEDCCBB€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€"$".>BB?ACDCBBC<@DC@?AEA>=?@?@CC@??@ABCBGFEHIHKLKJJLLJIIIJKJIHGDFHGDEGFDGIFDEHIGIJIHIGDM\VQ`aQJA=@CA>=<;=75;3 #@RNMRRLOSWZ[[[TQMJHHIIMNOOPQTVXURTWZYYUUTRPOTYUVXYZZXTY\^]\\[Zaa`_`ba_]cedddddgkgbdbVLJMNMMORS_b_]afd`befedehjkgeedccd_\\\ff?'00+,36323/*((*))-,)&$"!  ####"$" !&-/.0343355531147:98<>EC8146..16863203446521544332/,/230/0/,,++8AADD@9:-"'3AE?=Ma^[YY[ZY\broG()1-!'HSIHKLOPMJKPQONOOMLMROOOOPNKPTUTROMPNJJOSQMJOMMOONORPQONNOOOQRQOOTWXWYXVXZZ[\`cdbbdfbefeegjlmqxƒ‘{7'+"!%"/7.$#)485,*./04551(#$',3@EFFHGFIIIHHJKIEFIKIGHIJHHGFGHIKJHFHJJIJNLKJJJJIJKJIKKJLLKKJJJJJIIIJJKKKLLKMNLJLOLKMMKIHIIILG?<636@CBDCBA:@^cKIVSOPRORURSTTUTTSSRRTTSUUSRUWWVUSRTWURU[ZTXXWWUTTTSRPNKIGF€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ #3A@@?@<;@FA3'#2AIBCEECBBC@@@??@CDE@>@@>>@ABBCDEECEFEEGHGFJMMLLJIMKJJKJGEFEFHGEEGFEGGDEFGFDIJGGJIEK]WO`gVHC<<>===;<=64<5 +HRNNRMNOQTVWWWRPNKIGGFHJMNOOPQPTWVTSVWVVVWVUVWUUTUWYXUTX\]^_^\]_`___aa]_`agihfjkhfe^SNJLMNPUY[c`_^adc^aefddfjjia^de`]aa]__gkI%..,,00/1/+%""!!#""!#$&'''('%&'&####(.0/06643.-353248<=<7>HG2$2BE?=L_]ZXXYYW[`jpI"')(%DOLMKLOPNJKNMOQQPNPRSRQONLKLMPQQSQOOKNOLKNPOKMPNMQSMOTSQSSPPORTQRUWUXYURX^_^___acdedeghgfilmoqw|{9 #$+& /5-%$(384-.52-.0:3'"$%)3DGHGIGFIJIIJIGHJHGGGJMLIJIIIGHHHJIIJJIJKLJGGIJJIJKJIJHGGKJIIIJKLLIHKMLLLKMKHJMMNMJHKLIHILLKJF@?838ABADB@@8?^eLKZRQUXTSTPQQRRRRRQTSTSQSUSRVYVUVURUVXVSRUXTVXVTTVYUUUUUUTT€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€&9A<<=B??@9*0?DBCEFFDCDEAAA@>?AC@>;:<@B@ABA??BDCD@CFEILFIJJKMLIJJIHIHGGHFFGGDEFFGEDGHFEEFHHGILKFR`TGXgZLC;9;<<<:==44<6 3NSMOOKOPQRSTUUOPNKGEEGJLOQQPONSSVYVRSXVUVWWWUUUUTTVXYXYZ[Z[]__[^`_]]^``aaceefkfdgh_VRNIILPTX\`caaa]acaaddcdiife^]dd][__^cbclS#"&'%%&%$)(%!"#&&&'*.2589;73.'$&'#"%&&(.1003253&!,5335:>??@=95443/20,+*)''+,,/4434430--/001//0/,,-5DFA?:9?D4!1BE>>L\[XWVXWVY_mn@!*&AONNLLNQNKJMPOOPQQPOQSRPPMMRPPNOOONNOLIIJLMOQNPPLLOMMPQPRRPPPSUUUWVVVYWVZ][Z]_ababdfeffegjkkmpv|z7"++(.5/'#$1;3,085/04<8,$#"(7GJHHIHFILGEIJGGJIIHHIKIGHHJLIIIGIIJJIIJKLJIHIJJILLKJJJKKKJJIIIJJIKNNKIKPOJKNLIJKNMKLKIHKIJIIB<<969BCAB@>A9>]dLGQORUVUROORRRSSSSSQTTTVVTTTXXSPUWVTTRQTWVRQRTVUUTTWWWWWVVV€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€)<@;>@AD>."+02369;>?@AEGBBBBCBA@?@?>@B@=ABA??ABBBBGHDGLIKIKONLJHJKJIHIIHGFFFDDFFFFHHGEEGKIFGJKHDR\PBSbXJB<<@A?=9==44<6 9OOLKNOQQQRRSSSLLLIGFHIHJLOSVWXVSSTUSUWVXYXVUWYTWXXXZ[[VZ]^``^[_^^_`_^]dccdfdejcegcYTQJHGLTXWWZbbfeabfdacb`chifa_aca]\`__cabl[+$''&))*.1,(&)-01-28>=?B?74552/////.,)*++,//.0310/.-.02..20*+13$0CE>>KYYWUUVVTX]ll=!)DRNHLLNPPKJKONNMNNNLRURNPRPPPQQOMMPRNMMMMMORPKNQLLPOOMMNMNQQQQSUVVX[UXZXYXY\\^aabbdfceeegkmmimw~ƒx3#(,-4.'#$1;8..30,18>>2'&$*:IKIGJIGIGEFHJJIHHJJHGGHGIHIJGGIHIGFGIJHFIIJJJJIIJJJJJKKKJJJJJJJIJKLJJKKKLIJNMJJKMNLJKIIJIHIKD;:846?CBB@ABBB:1##'%"$((+.259>BECABCC@==<=@A@><<9<=64<5 !=NONLJMPQRSSSRRMLJIGGGGIIKNQSTSSWXURSUVTVWVUUUUVYZYYZ\][[[[\`aa]]^`_]]^`baafihfggb^[SKIJINW[ZZ\acedbefe`ccaaddb`aba_]_aaa_^an`3)/0/49;=?8.((,02.27::;;=950*&'(' $$"$+/./10044484347=?<654/*010/.-*'*,)'),-.2000/,-/2.,/0..0140%'15<;:-0DE=>JWWUTSUTSV\fl?! (BROIMLNQPLIJLOPONORSRTRQONMNONOOLMOPNOMJKOOLJKOPMOQORNOQNOQQQPQUUTUYZYUTXZ[^]]^adedcdghggilnglv~ƒw1#" '.4,$#'278/.2/,.2?C6))(,:JKHGJJHIFFGIHGHJGGFFHJIGHHHGEEGGHHGGIJIFFHJKKJJJIIKLLKKIIIJKKKJJKMMKJKKJKNMJKKJIKLIHKKHHMJHKF><:34>CCBAC>:>X^LMXTQSTPRUSSSRRRSSSQRTTSTTQTVXWUSQQXUTUUSSUWXWURRUXSSTTUVVV€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€':A@>5%!#%(,15;>AA@>??@>>>?@ABAABBAAACCGEDIJIJKGHKLKJIJKKKKKIHIEEEDCEEGFDCFIHEEFFEFHIGOYOBPaZJ@;:;98;;;=75;3 !?ONPNIIMOQSSRPOLLKJIGFEHHJNQSSRSRSVUQPRWWWVWXWUWYZYXZ\]^]\[]`a`Z\_a^[]`]bcabdefgaZYWMFIMOSX]``^bfd^`dgfbbb```_^ba`_^^`abd`]ald?)12.5>?>>7.(),0225:::9:;84/*$"$% &(%&,/-453113558657<@AA?>98;6.+,./.1330')%!'/22210.,,/1,-//,*.3.0--48@=2/DE=?ITUTRRSSRUZkg;+&# $?PNOMLNQQLIILLLJLOQQOMQTOJMRQNNNLLMJOOPPLHKQONNOMJLPOOPQQQQPRRSUUSSU\ZUTY[WUY]bdcbcedggedfhjhlu|€Žw2"$!-5-#"(262,.4310.;F<+)).;JJGFJJIJKGEGIHGHHHHGHIIGEGHGGGGIHJJIIJJHJJKKLLKJIHHHHJLLKKKJJJJJMLJKMMLJJKKLNLJLMMKJMKGHMJGGB<<946?CBB@A@>AA>@@ACCABE@DFEEFHJQPNNOKJOKJIIIGGGIEDEDCEEDCDFGFEGFKKGDGHGJVM?L_YI?<>A=:;;:=86:2$BNIMOJJKMPSSROMGILLJHGGIHHJNQSTRSTUVVUTSWYXVVVVVXYYZ[ZY]\[[]acc]]^bca`aa_]_bbbfd_]YQNMJMSXZ^b^W]hieghebe`\\^`aae_\]^__aahc__hfI+43-3==8;6/+,.//-27:99:<;4.)""%!#!%/1-2025448996459=@@>=;<<406.133330*(*&"(00+231-+,./-)*--+-35/-"&3@G5+"/EE[bMJURQPPRSRQSSRRQQRRQTSRTUTTRRRSTUUUTTUWVSRRXURTWYVSUUUUVVWW€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€-@?-(:C@=;:975/,'" """%',4;=?C>>>>>?@AB??BBBBBDEFFHIIJKLLLMLLLOMMKGHJJEFFEDEFHFECCDEGGHDFHEHIAMXK=L]YJ?;9;=;:9=?;088)FKJMKKIJMPRRPLHGHIJJIGFIIHHJNTXUVVTVYWRUUTUWUSXUYWX]\X[a^]]^ab_bb`aec````_`dd`]a]ZXSMKLKPW\]]^abegfffeba`^\\^adb`^]^`bab^^ccioN!"/3/2;=;51+)-.---0246:<<=7/'"""%!,1+.25435788315;>=;=9:91/465523411//*%#%*,-/10--..*.-.-)&,500-!$269B<%0EF<;FSUNSTPPTWVgjG((" (AQLLOKHHKMMKKLOQPOPSRPNNNNNONONLKKLLOOOPRRPNKOQPPNMPONOPRTTSTSTVWVTTZYUSVVUW]]]]`efegeeeffjnonux~ŠƒA# #,4*&4850142...2@A4*&.@KHIIEDGJFHIIGEFFFGHIHHIJHHHIJHGIIEFJJKJFIJIGJMLHIKKJLJHIKKKJIHJNJLJIKJIKJKLLKKLMLJJLKHGHCHKJA::799?BCB@BC8=_cJJSSSSRPPQSSRTTPRTOTTSTTTTSTUVWVUSQUUUUTSSURRSUTSSUTWWTSVWV€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€/:,%5>?????@@A>=83/,)%"%%%+4=>@@@A=@BA?ACCDHIGGKJGIIJLLLLKMNKHHFEGEGHFEFFECEEFEEEFEFEEGIHGNSKELZZJ@=;;<<<;9>;398 -EKMOIIKGNQQPQNIKKKJIGFEIGGIJLQWVTTWYWUVTYYUTUVVZUUZ\[\`^]^_\VYb^^_`]^``\]^_a`^`_[XWRLJLPRV]aca_^fifcdb^]_``^]_ac`aege`][`ccagoV' -313862.)'+.+),,,,.38;;:3,&!#$!" *-',12//34230/38:8775566325751123542+%$&'(*-//-,.-+(+-)%+48/3,#4F8'95"0EF<;FSTQTUQPSUTejB)BRMMOLIJMNMKNMMOPQRRMRSPNPNKKLMMMMMMOPPPPQQQMOOOPONOPQQQRTTSRTVVTSTWVZXTUXXX[\]`bcddfdeikkhfllsx‹‡H#!"+1'+784002111.3<<5-*1?KHHHGHHEIIIIJIHGGHJJIIIJHJJHIJIIMIFFFGJKIJLMKJIJIHJKJJKJJJJJHHJLLKJJJLKIJIIKKKKLLMKIILLILKIJC9:;6;A@@C@?@7<]`IJQQPPQRSSTPQSSPRSPQQQQRTUWTPSUQTWUVTRRSUTSSUVTTUUUUUVVVUSS€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€" -8;>>>=<<>@@AA@?=952-(%%&-8?BBCCABDDBCDGHJJKJJKLLLKJJMLIJKHFIGFFGFCCEDEGFDCEFDGECGGEGKLHDHW\M>>==>?=:9;92840FLLMIKMLLORRMJIKKKJHGHHHFFGHHLRVSSVWSRTVWYYUSVX\YWWWY[\Z]]ZZ^]WWZ__^`cbeb_`ca^^`][XTOMOPSX\_aa`geege`[Z]\\\]_``aeggffb^_abeebi]4).*+.-)$'''*,*(-*()09=>;3-)&'&"" !)*''+,)*-.,-)(+1578469:8448872245861*%%&%&(-/.,,./--('))*+($*07C>*#*,%0EG=;ERSQSSPNOQQ^d=$?OKJNLKLOOMJMNOOOQRSSONQRONPNNNNMKKLLMNOPOPPOMLKNNMMPPQRRRSTSRRSTSTVRWWTTWXX]\_bdcdfddgjkiijiiqw€ŒŒT #!!+4,!!*693/./144/35860,4@JIHHHKIBGHIIHHHIGHIIIHGGGIHGHIHHIHHIJHGHJHHJKIIJJIJJIJLKJIIIHGIKLJKKJMMIJJIIKKKJNMKIKLKHGGHJC:;;79@CEDAA@9?]aKMSPOOQSTSRSTTRPPRSPRTUUTTTUTTSSSTTTSRSUWUQUWWVVVVUTVUTUXWS€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€#*/168:<==>>>@AABB@=<;61.,-08ACCACDCDHHHHIKKKLLMMMKKKIGIHBGDCDCAADEFFFDDEFCFGHHHGHLOICGW[M>>=<=>>;==84831ELNOLIIJMNOPPLIIJKJHGHHHIHGEHJLQSTVVWWWVVYXUWZX[]ZWYZZ[ZY^_[]_W\a`_aeddhfddc`^a]^\XSPOORVZ]`cdd_bca\ZZ[\aed`]^a_egcadebbda``akd9(.,,-)$&&&(*)(*1.*+19>?82*('" $&%!!#'('''(+*)(*,,,-/4673498//4543/147:80+'&%##&,-.,,--,+)(-.)(..6DGFAC@9>]_JLSQQQRRRQOPRRPOOQTRRRRQRRRUVUTVVUWUTSSTUUVSSTVVTSTWVUVVUUT€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€"&&'*,/4;?A?>==<;>??>>;999:;?BC@;>?@@B?@DCEEDFHJILKKKLLMNMJJKIHFCFGFCCFGEDEFFGEEDCEGGGEEFIKHCFTXG<==<<>=::;7383%3?GMRNKMJLOONMLKHIJIHGGGFHHEEFHHMQTTVYZXVVYZWXZYZ[Z[\ZXZZTX`_^_^adb_cfdbid__b`\\\_^VRQQOTUX\bfd_^^\\]]\[\`ca][^baaaacffdccdb_^ih>'-+,,)&&''())),---.28;<95+)+##38*%('%&&&&(,00.-),,)+0547784036232-,1485,+*'%#$&*,.-,+*))+'&,,1?FILHEG>$"16/EG=;EPQMMNNNNPS_^:!& %BTOMMMNOPOMLIMPONOPQQSQKJNQQOMLLLKMPMJJKMMNORPOMMMNNLLNOPOQSPPQTUTTTVUVWVVWX\^``abeefccfjklmjkqwˆi-#! )2,#%.9:5-,14553328;3,6CNIGHGHIHGFFGIJJIHHIIIHGFIHGGIGGIKKHIKIFFEHLLJHJMKKJHIIIJJJJKJIIJIKKIIIGGIKLKJJKLIKLKJJJJFKMJ@9;917@AAC@?B:@^aJLUQRSSQPOOOQSSSQQSUSPPQRRRRPQQQSVUSRTWWTSUUSSUVUUVRRUWWVVW€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€#&%$%')*,17;==?>;99<>==;;?@<:>=:;?A??A?CA?AB@ADDDEGIKMLLKJJKKKLKIKMHEHCDDCCFECFEEFFFEEGJHGGECHKGFFDSZJ:;====;99<846745?GIIMMIJKLORMHHMGHHIIHGFFGHIHGHJLMOSUWWXXUX][VVYXW[]YZ[XU[\Z[Z\`^_ab`cc^`ca^[ZZ]\a`XRRRPPUZ]`b_ZXY\][XY]Y[_cedb``aaacfgegbacb^fiH&*)*+)(#()'),+*'*-/022130&$(!$9>,'-*'))&))).52)(++''/695862033375.-0341()*(&&'(,..,+*+,,*$%-08HMHLQJJF/"1;'/DG==AE=BabJMVPRSSQPPQPPQSRQQQTSRTVVSQRSRSSSRRURRUURRVUTSQRUVVRTUTSSTT€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€$&&&'&)((*/5<=>>?A<9<@@??=@>BKNJLOJFHLONKKLMJIHHHIHFGHJIHGHHJILQVWXYTXZZ[[XUVX\[X^b]^_ZX]ZUW_^__]^`^^`_\]^^]^`_YSPPQRY__]]\YW[\Y[``\Z]`ba`ab`cdbbdeccc_[bdjlR##,./-(%'((*,*)+*,.-+)'%,)%&'#'58.*,,+--+0.''-+!&')('(/55652002464.,0462+*)*)'&',,,+)),.)).346CPHDEJGJL9&,7*!".DG>ED>C^^HKSRRRQQQRRSOPRRSUTPOOQTUTRPTSRVSPRTRRVWTRRVVTRSVWVYUTVVTVZ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€$()))'((),06;<==<<=<9<<<=<99>=>>:;>><@BAACA?EBBCEGHIJJKMNNMKJKHIKGDEFFECCDEEEDEFFDEFHFBFJFFHF@IH@BRYK;;PIFNNMLKLNOLKLOQPPPPPQQOMLMOONKJLNOOLKMMKLPQOOOMOQQPMLOPNNOMPRSRQTYWWYXSTY[\ZZ^```aeddhjjiiklqx…•<$ !.70$"+7;5579753.1:;7409MHJMKGHIGHGEFHJJIJIGGHIIIIHGGHGGJLHIJHHIHHKLJIKJHIKJJKJHHJIJLKIHHLHJMKHHIJMMKJLLJHKKIIKJHHJIHB==837>?ADCCD@E^]ILRUSQQQRRQTNPSRSTRQPPPQRRSTTSSSSSTUTTVVTSSUSSUVTSSWUSSSSSS€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€#(*))*,-,-27>=::;<>>=88>?<;>====<=?@A?=?B@?DEEFEDGKLLMKJLKJKKIJKIEEHFFECBDEDCEEEDDFGFGFEEDEHHFFCBJZQ>9=;QIKKKMNNNMLJIIJMOOOQRTSQNLKMONNONMNNMMNOONNRRPPSRPPNQOMQQMKPPNNRSRSX]YTVWWZZYZ^___afeggfhlmnouv|‚…G!"/<." )9:83000-+++/25639FLKIHGFEEFFHHFFHHIEGIHHHFIHGHJHGIIHHJJIIJKIIJJHHIKJHGJKKKKLKIHIKKIJMKGHKKJJJJJJKLGJMKIIIHGGIH@:8858?@AA@BD:C_]KOSPPPPPPQQQRQQRSSQQRSSQOPSURSVVSSVTRRUVTSUUSQTWTQTUUVVSQTX€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€$*),.,)+/3::;<<=<<:<=;?C?>ACDB@CFDDFDDIKKNMIHKLILKHFFEDEFGFCBDFDEEDCDFHDFGGGGFGLFDDAETO9:@;8<@=:973388=CLKLOLJHKKLLJLLHHIGDDGHHJLIHKJGIKJLMIMTUSRRTX]^\[[ZYX]_\\ac`YVX[[\^`bb`_`\[_^[\`ced_ZWURONNSX[ZY[[`babcb_bbbcefffbadca``cccbebcrl>&.-*)*++*)(%$'++.21./0-*+03114-))/1..2."'1(#*,'%$!&4?<50...+&)*)'(./**)*-,'$%$$'**+/353139AEEIECCB?BHE8(/CE=;BLNKMKLMJKRW]B#=QIKKLMNNNMLMJHJNQPOSRQPOONMPNOPNOOLQOMOPONOPPPPOPONQROOPNLOOMPRQRUWWYYXXXXXX\^^]`dhfddfgkmlmosu~€Œ‡R""!3='$23-)%$$####'+1317EJIIHGGGHIGHIIIGDEEHLHDDGIHGHIHGIIHGHHHIJIIJJJJLOIIHHJKIHIIIKKKJJKJJJHIKKHJKKIHJLKLLKIIIJHFHHA;9737?ABB@AC7Aa]GKTQQPPOOOORQOOPRSSRRQQRSSQQUURSVVSSRPSYVQSRSUVUTTSXVSSUUTT€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€$%(**-00.69;<<;<====<<;<<>=<=?@@?>=AB@BFDDBEHEHLJKKMMJJLLJLLGEFFCDCDEFDEGDFHHGFGIBEFGHGFGGDDCBFTM:6?@?;=>=741588;EKKKMJJJKJLKJJLJIIHGGHIJLJJIIIIGIJJIJKMOQRWYUX]]]YUW_c_Z]``\[^]YUZ_```ab`ba]\]abgjh_WTRPOORX]]\\Z]de`]__aabbddddcbbcda___dfba`bolA$/.)**,)))'&(+-+,24/,.0-*/4/&%,,---,--,"%.+"$+0*'$!&4??951,+)%(,0,(*02++-0/($$%"$)../1110,+-/.2124435:5.&/CF=;99=<9:?@?==>???A?>??BCABEDBDHJJHIHHJIGHJIGGEDCDDCBDEDCCEDCCDDDDBDDEEEDEGEBA@FUQ:7<;:;><=96445:CILJKLJHIKNMLLLKNLGGHEEIIHHJKHHIGGIGHLMKMQRTUTW]^ZZZ\^[[c____]YXYWZ[\_cc____^\[_deeaVNKLLKMQVZ][Z]`_^__`dc_acadeb`c^[_dbacedbffbepN"/-*+*+*++'*-,+*(,330212+*22)&+*+.,)+0-.((*&#*(%##"*8B8541*)+*-.01..2621.**,,*%#&/5533010-+,-,+)(+-++++*&/CE>ABB@AB:D_ZIOXQQQQQQPPSPPRTSQPRQQSRRRSQSUUSSTUUSTUSRSTSRUVSQSURVWUSSUW€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ &(-11..4<>=::<9:;::;=>???>>>?@BA?>@@@BDEDCFGHIHJJJKJHJHEDDDABDBDEDCBCBDEEDCBCDCDDDFECDFABEDBNN88A>==>:<:7545ANPMLMOLIILNNLMKKNIDCDBDJKEIJJLIFGFFJKHIMNKOQSUUW[b[UX`_\]\^ab]VVYZ[\^`a_]a_^^`abbb]VPNMMLLOQSY^]Y[^__`__caacbbgjc`dc`dfc`aacbb^\dmW& +.--+('*,++,((*''/43144+&-0-..,++*((*+,'&)#!*%#$%'/;C;874/./.,.2311442/*(+/.*&(/5744521.))*-,*'&'*+,..-).BF>=BLMJKJJLIJP]Y@, 9RMILLLLMMNNNMLKLNPRRSSRQONMLOONOMNQQNMOQPONQPONPPOOOONLOQRQPOMOTUSSUXTOQSTWYZ]]]]affdefhjkjkmovƒ{„d)$#  !$&$(')**/=KKJIIHHIIJHGGGHIGEHHGIGFIIGIIGHJHIJJHIIIGJJIIKMKGJKJIKIHHFIKJJLKIKMKGIJJLIIJJKLMNKIIJKIHHFGJIB;9936>@AB@B@7B][HMTRRSSSRRQSOMNPQQRTPOQSSQPVSRRSRRTWSRTTUUSTTTTUTSUVSSVVSSW€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€"+43./4:=<::<:==::>?=;=???>?@>BBBB@?DE@BHFEFFIGHJJKJGHFEDDEDDCDDCCEDCBEGFDCBCDFEFGFDCJFCECBOQ>7;;;;<;;:5459GTVNLMNMKMMKLNKJKKHGFGGFGIKKIIIJHHFGIJHIJKORPNPPT[]][[^_\ZZ^``_^[WXY^dc]]a`ba][^^Z\XSPNMLLOSSTYa`[Y]de`]__^```acccddcccbbecbb`bb^ah\-(.-***&',-*(('*)',22-31+),,*-/.*%%'%"#$&$""&%%&((.7<>?=81-,.,131-142+-021.,,./14543353.*(*)'))*)('()*-*-BF?=BKMJKJJLIIPZ[>#7ROIMLLLLMNNNKIIKNNNSTSRONNNPNNOPRSRNOPPNNNNOOKKNOMMOPQRQOPRQNOQQSROPWVRUURTWXZ^_`bgebcfhlljjkpwz†h(&! """""!&'))(2CNHHHHHIJKGFGHGHHGHKHEEHGFHHIIGHIHJJIHGIIIIJKKJIGFKLJJJJIKJIJJIHILKIGIKKKNJIGIKMLKJIHHHHHJFGKJB;9858?@@B@CD8Cc^FHQPPQSSSRRRRSRPOPRQRQPQSRPURRUUSPPRRRRSRQQTVSPSUTSTTTUUUUV€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ &-1159;::;=<<;:<>???>>===>>BBB@BBA@EFDFJHDHKHHKLMLGIHFCDEEDFDBBDEDBFCABEFDBEEEEHGEECBABBAML@:>;>?>78;8425GVTKKLMLJNMJKMKIIGFGHIJIHHMIHHGILJGIGFKJHJPMKNSTTUV[_^\]^\_`bc`ZXYXX[ceb`aba`^ZVVXUTQLJJJJORTTX^_[`_ab`adccaadebbf^]`dcabc\`c__b`anh:&0+%)/)&*.+()()*+-12/31/-+(&%*%#%&$$'"%'$!"#!! "#$)25=A?:60.330.,-00,',10+(+/4201587400.+***(%'*+****(-,!-BF?=BKLJKJJLHIPXX86RPIMLLKLMNOPNMMOPPPTSQONNNNKLPRPOPNPPQQNJLPPOMMNNNNPPQQPNPRSPQRQPPMOSROQSTUWWY]acccfdeghijgiiqx}z‰Žh("! ! ! $)&&4ELJIIHGGHHEFHIGGIJIGGHHGGEGIIGHHHHJHHHHHIJFGIIHGGHHJJJKIGGJGHKKHHKIIJKKJKKJKKKKKLMLLLIHHJKLIIG?:9:69@BBB@AB8Dc^FKVOOPPPOMLTSRQRSRPORTRPQSSQUWROPSSPRTTSSTUTUTRTWURSWXTSUUS€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ !$(,05:<<;::>=;::==<=<<>??>=>@B?<@DB@ACBDIKGFIIJKIHIIFCBBBBBCAABBBDFACEEEDDEEEBBEFFGFA@CC?KOB9=>=9;<;=6325DOLEJNNKFJMLKLMJFGIFGGEFHGFHHHIIIKFEEDADIKMHJNPRTRXX[\Y\`a^bd`\[ZWX[^`bdca]]ZVUWVRWTOJLQQMPSWXZ]^^`cc`_]^c_^ac`beddaceccc`a^^_cebdmj>%2+#,.+').-(&*'*,**--%'(%$)+'&&'('&).&)'##%$%$$$$#)/2>>=<<@BA@CDADBABFHHGJIHIJGEHEEDDDEDCA@CFEDDCCDDEEEFFGHEBEFEFIECD@@JOC:9;;=:7;<7/18ISPJIMMKHGLJMPMJJJIIIIHHGFGKKJKLLLHDDEC@CJKMLKLNORSW[ZZ\_`\]``^__[X[]]_aa`X[ZVSTUUTTSQNMMNSVVW[^^]_aec__ba^^bdbbdcaababefb_acccccadjN+/---)%'-/,(++*)*'&('"#&&'))%%$%-31+'+,'&))&'''%*35/6>56A;311/-,*()+,0/)*263101111233.*+./.,)%',)##'&&%-@C=?@@C;F]UELROQPOMOUPOLNQRRSRRRQOPRTSQRUUQQSRTRRTSQQRQPQSSSTVSSUWURRU€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ !"#*0:=99;:9::;;<<=<<===>>?>?@@>?AACDDEEFHIJGHJHFFGHECCCBBCDDCDECBCDCBCEFEDECFIFDFHHFCD@@IND99>=<:;<;9117GQPJKKJJGJLLNNLMMKHHHHHHHHKLMKJJJHIHHHFDDEGIHHMRQORUYZZZ]`]\^]ZY[\Y[]`cc_YVWVTRTWXVVURNMNOPUX[_`^]^bfebbcb`acccdb^_baaega[bcdd`]^bjoT#"-0,+,,)&*32,,*))*+))(&%&$%()+%#(.10/01-'&*)#$')*.9<73:59DA6-.,)&&(**-+*-24432235652021/../,(*'&'('()+'$.AC=>=<<=?=;=?>=@CEDCDFGGGIFHJHFFEFEDCBBA@DECCEDCFFECCDDCADEGGCBEDDBABAAJOA;<;;==;969549GOMLMIMRMJKJLOMKJHJIHGGFGGIIKKIJLJKKKJJHGFGHHJKJJMQRVYYX[`ZZ^`\WWX[\^_ba[TUUVWWVXY]XSQRROLSTTV]a`^`egfdbabbffccddcababe_\baaa`aabagmX)*.--+*)(,032-*)**)($&('$%')+-(%&(*.40+)*+(&&%%',5>=35=BFB4.-,+++,---&-1004521134541.,/0-+*& #&'''(*+*".AD==<<>@A>>B@?ACDCBCEFEDGGGIIGDFBDDCCDCAEDCCDCBDDDDDDDDDEIIFGHGHDC@B@?FKB9:=:::<:56239FQLJJLNLHKKKLKKNOLKJHHGHIIJHKMIKMKJGFIIGFIIIJMLHJRQQTWYZ\^[[_a^ZYWV[_`_]ZVVVW[ZXWYZZXSNKMPPTWZ\]^`cggdca_bcggefda`_ca`b_Z[_aababba`k^2&--.*+(',550-)),+*'$'+(%&('(/+''+00.-(',+%#'%%&-7BA97@LJ5$(1/++.-(&*+.475004:840.//.595-(*($#"%*/5>==>?>;=????>ACEDCCDFFGGGIFEFFDCCCABDCBCDCBCCEEEDDDCCBDEFGDBEFDABB?DID;<=:9:<<75026CNLLKIJJJIKLNNMNMHIIHFGGHHKILMJKNLKHHJJHILJJIIMONOQQSUY]^\\\_`__\WPW_bb_][[XXZ[Z[]`YROOOMJPUZ]_^]_`cdcca`cfc^_dc`_aca_aa`_e`_becaaboh:(-,*+,,*,2543-*,-+)'%(&$(($#)++)*,-+*)(%%&'''(*,1B8)%**.)'('%)/035400:FGE@:762,043,*,,'% #.106F6(0CE>=CLLJJKLKJMQUO7''((!/PTLKNLILMLLLMNOMLNRTTSQQQPNQOMMNLKLMNOPPPOOLNQONNONNOONOPPPSRQSURPSVXVSSSRQXXWX^``abccceghgllmt~…Žk.#$#&(()+-)  &%(/56;BJHGGIIIHFFHHGFFHKIGHJKIGIGHIIFGHIGGIJJIIHHGGKJHGKKJIKIGJHGHIIHILJJIHJIHHGHKLKHHHIKKJJJHHIGJH@:8439A@?ABDB8F_UFOSOSQQRNQTQORTQNOQRQQQRRSSRTTSVSPPRSSSSTTRSRRRRQSUUUTRSVUR€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€"&'$'5=:9;;;::<>;=>?>==>==>@@BB@ACDEDEEFGFGHFFFEDDCCBBBCB@BDCCDCCBBCEFFDDDGGCBDDEEBDDBEJD??<9;<;975116JSPGGMMIGJLJKLKJLMIIHGFFFFIHJLKLOOJKKJIIIHJJHJMMJIPQRTY^_\]]^__`]WV[_abca^_^^_aaaba]WROOOOTUVZ_`]]^acdca`aa^]aec`___^`ba`aaaaca`bgfqmA$,,,-+()*-2794,*+*((''&(+,(%)&%&)*(&&%$$%''')*+-/9BE?2,(%**&..*&&+/1/1007FQVOMJGIIB9364/-.,((,/57-(0:.!0CE>=CLLHIJJIILOWR9)'($/RVNKNKHKNLKPLJORPNQTRQQQQQQQOLMONLMNOPPPOOOOOONLNPPQPNPQOPSRORWSRTTOSSSTTRRVWXZ^__`cefffhigjnnr~ƒ†Œk.  ""&'*)'% "!$+0.2;FJIEFLKEHKKIHIIGGIHFHKIDIHGHIIGFJFEGHHIHJIEEGIIJIKJGHIIHKIIJJIIJJJIIKKIIMKIHHIIIKLJHJJHFFEHG@<:72;@?A@;AC9IbWGNPOQMORQROLNRRNOQOMQSQNORSPRRSTTRQRRQRTUTRTTRQSUTRTTUVUSST€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€")'$+7<:;<<;;;<;<<=>>??=>@?=>@?AABDFFFEFEEEDDFE?BCBBDDCECCCCBBCDCBBDDCBDEFDAEHFFFBCEACHG<<>;::>:852-9^hPHQPLLHKLMPOKKLKJIJIIIIIIHIKKKMOMNNLLLIFIJKMNKJLNPRUY\]^b_^^]^^[]]^^beebddccdeeba`\UPNQTPTX\^\\__`cedaabc`aba`acee_\``\]bbba``bdekmK!*-.-*$ (24/681)**(+(&&)*)'#&')+)'')'%'**((+347:>EJI9&"$'**+(**)-44.0-0?R[XPPPLHJPQNIC:1-+(%.8;83)(57/&1DF?=CLLFGHGFHJLWQ9'!.QUKMNKIMNLLMKKNPMMQSQPQRPPQLLMNPONPNNOOOOOPPLMOOPPMNRPMNPONRQOPVUQSTTRPRSQPTWY[]^^`a`cghgjokomq„…Œn/#''##)-(!  !%)*0:BJLEEJJEGHGEGIHDFJJGGIIEHHHGHJIEHEGJJIIHIIJJJIJILIIKJIJKIIIJKJIIJJIILLIIDLNHFKLHLKIHJKIIGFIH@<:62;ABEB=EC6E_TFQUNPRQOORPPSSOMOOKPQQOOQRPTSSRQQRRSTSRSVTQRTUSSSSQVTRRSTUU€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€!&*($+;::;<<<;:==<<=>??:<>>:DA4EbWFOSOOTPLQPMNQPPSSPNMQRPMOSVURRSRSSONSUQORSQSQQTVUSSRTUTSSUV€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ !$$$%$'0<:;=>:9<=>>=>@?=????ACB?A@@CDCDEGB@DECBDDCCDEEDC@ACCDDCC@BCCCDDDDDDDDDEEEEBBA?DGE;;<:;<>;;65-;:629>=@A?DB7IbUDJOOMPQMNPMNPQPOPQPOPQOOPQQNORSSUVSTSRQRSTTRRTUTRSTTTTTTUUV€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€! !"#"! #!#&''()6=?;:99<>>>>>>>=?ABA?@??BCBACEDBEDCCAABECCBBBBBCABBCBBAABA@BDDCBCEFDBBEHADB@@CHI@9:;:;<;<=2/1:MRLKKKLKLNKLMMMMLKHJJHHJJIMKJLLJKOLMPOJILLJJLMLJIJMMMNPUY]^_adb\WUYZ\^bhkkffdbcffdfa[WUSRSQSV[_bba]difba`^_^_bcabfcbcedc`_b`^`bda^bbkf9'.*&())((,133>A3)+*$&/1)&,20..014421220.,-.0/10-374,*+--*)(,(%+59AO_RJT^VMPQOOOKKJGNHEIIEEIECA@@?:32,*#-DC>=AMJIIIGFGJMUQ/+JPMMKNOKKNMJMMMPQPPPPQRRQPQPPQQOONLLLMNMNOPOPMJLOONKLNNLNQPRRQSSQRWWWXXWWWXYYXWZ^__`aacdghjmmksƒs2$"""!%*'#'%*24:DIHHHGGGFEFHHGGHHGHHGGHFEFFGHHFGJKHHHHJHFGGHHIIIIJJIGFJGFHJIIIHHIJIHFEHIJJJJKLJJJIHIHDGGIG>973/:@=@C@A>8J_TFMPQOMMPPONNOPRRQONORSQPRRQSQQQRTUSPRTUTSRSRRRRRQRTUUTSSSRR€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€! !%&$$&&#%'$$'&1:<:;;:=@=;=??=;>>==?BCB@@??ADCA?FGB@CD@BBCA@@ABDB@??ACD@@BCCBCEABCDDCCBDEA@@BGHB;;:8::8:=3/37AKOPMMMJGIONLKKJKLGIJJJJIIKLMLJKLKLLMLJKMJIJLNMKJJLKKLOSWY_`ced_[YUZ]]aghddddcefecgd^VRRRRQSW[_aa`]^bffb``b^^bdabfg``db_``b`_]`cdbc`hjC&-+)**(%$*/654HaTFNRNROMQOMRROMNPOPQOQSRRRRQPRUSPQTTTSRRTTTSQQQSTSQQQSUTQPSU€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€!$&()*))(%$&&.8;:<<:<==>?=;;=@><>@BBBCDCBAABCCACCDBAAADCAAABBBEDCCCCA@FDBCDEEEHE@AA@EHD<;:9<=;<<9426?KLLLMMKIILLLMLLKKHGHHGFGHIHJNKJKLNNLKOPMLJIJLNNLLKLKLMQUX_`aba_\[X[\[^efcbdefdddddc]UORUTSQT\_]]`]^afhfca]`a__bca`bde`_`a``_^_ceed`hoM #++')*)$#'+787?A1&()+65)$+5.-,+((**,*''(+-/12202@D:1/-/32/,)**'0Na\VTTTPOOPLGHIFJLIGIIHGGFF@EDFJFCLLFB6*!0@B?=BLKIIIGFGJMWS0(GOLJLONJJLNLMKLPRPOOPQSRPOPMNOOMMNKNKILOLMTOPQQMOQOQPNMMPPOPOPQQTUTSTVVWWXXZ\]]\\\]ccbcdgjlijhny|‹w3'-"!#'& #)+/5@IIHGGGEEGIIIIIFGJGFFFIKIGIIHIIIIHFGHIHHHGIKJHHIIHGHIJHKKHGHIHJGFGIJIIEFGHHIJLIGGIGGGGEGKI?9855:>?@@>D@3HbSEPSPSNMTRLOQONOOPPQOOPRQPPRPQSSQSTTUSQRTUTRUSQRSSSTSTTTSSTU€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€!$$"((''++(')8=:;==<<<>>=:;==?A@??>=BABCBAACB@@CECAABBCCCBBACBAABCBBABB@CFFC@BEFEDCCGC?AA@GLF=<;:==;<98428@IPNLKLJHIMKJHHIKLJJKLKHHIKHKNKIJJOPONNLKMMKJLNONNMMMKKMU[\_bcc`\YYZ[]`dfeeeeeddfhg_ZVRQRQSPS[_[[^Y_efc```___accbbdb``cb_]`^_accccffluY#!*,''*(##')1327B;)'*-0/''26((*)(()))))),.12/0203<>3464221/10((*'4KY]_^SJIKHLOLEDILJIHFDEFGGFIFFKFBIIJNIB;0-6@B=:BLLIIIGFGJMXT1&FPLJLNLKJKNLMKKOQOMRPPPQPPQONPQONOOKKLMOKKPNNQOMNQPOQQNNPRSQOQQQRTRTUUUTTTTXZ]^\\]^`abcefhhikkq|}€Œv4'* ! "!"%$ %--4@HHGHHEFHIGFGKJFGHFEGFFIHEGGFFFGHIIGGGHGEDGJIFGHIHHHHHHJJIIKIDHGGGJKJGIIIIIIIIIKJHIIIIJIKG=7863;A>AB?A>7K_QFOQRRPORQMMNOPOOOPPOPPNOOQRRRSQOQUUSSSSSSSTSRSUVUSRTTSTUUUU€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€$'%#&'&(-59:=>=<=<;<>><;<>>??@?=?BCB@ABB@BA?@CCABBAAAABBBA@@BCCB@CC@@DDBEEDEEFFFDD@??BJOG=<=;<:8;:7117@KNNKKNLIJMMMMLKJJIIJLKHGHKKLMKLLJLJLOLLNONLKKKKKLKNOMJMSY[_bdca]YXWZ`deeghfeghhhhd`]YQQROPQTY\\\\`\]dfb^_b\[beb_`eecbb_^ba`aba``beikt`,),(()'#%)*+372:D5$(+**(+3/'(+.-.-++-.0//..)(*.3>?4362---,0.)'))*;RV^^VPNHAGMKEDIKKGBBHIDBEJGFHHHGFHHJD@A>?:?B<9AKLIIIGFGJMWT1%EQLLLJJMMKKKMMLNONMRPNOPPPQNMOQOMNNLQPKJMONONOONOPPLNNNOQQRQQQTURPTTUUUUTTUWWXZZ[\^_`abcefgills}}€t4& )2(!%"!))5CIEEHIGGGGGFFFHFFFEEFFHIIHHHGHEFFGGGFFIHGGIIHEHJIGHLKIJJIIHHHGKKJIIKJHIHHIIJJIJLJHHHFHBCGF<7625;@?AA>B>;K]SEKSQRRQNMOPNPPNMOPQNRQMLRSRQSTSOPSSRSSSRSSSTRRSSSSTSTTTSSTU€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€! ")168449<<;9:<>=<<==?><;>A@==@A??@BA@@BCB@?@@ABA@@BCCBBBCCA?CCA?BED@CBBDGGD@CDA?>AJQF::=<;::9>:206ALNMLMNLIHLLLKKKLLKIHGGGILJHHLOMMOQNNOMNNLOMKLLKJJILONLMQUY[^^^_]Z\YY^bceifdehjhgg`aaYOQVTOSVX[^^[]]_ba^]^_abaabba_bc``a`_baa_^^adfjgne5',)(+*'),)*5;45EB+&+0,'+1/))-00121-/2210/0,/8AGLC0-.)(02+((()-+$/GYRMTYPGJIEEFEDGIGBADC?BIJIHFFGFCDDE?<@>?=?C>9AHIIIIGFGJMUQ0%ERMLLIINMJKLMLKNOOOONPQRPONOPRROMNNKLOONNNMLNPPQONNQRPNQQONQQQRTRSXSTUVVVWWVWY[\\]`cccdegijfihmwx}‹s1&49/ ! &5FIEFHGDGIHFEFGGHHFGHGGHGHIHGHHHIGFHHIKIHHHGFGHKIGFGGHHHIJHGHJKKJIGGGHHKKJIHGFFJIHHGDEGGFHF>::78:?@B?=D?9J_SCKTQPOOOOPPNOPOOOPOOQQNNQSRQQRSSTSOQQSTTSRQQQRTTRRSUTSSSTSS€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ !"$# #&(19995588:<9:<=<<=>=<====?@@A?@AA??ABBBBA@??>ACCA@BDECBBCCCAABAABEFDBCDEEDDCDB?A@?JTJ<9=<:9;49844;GKQKKMJIJFLLMMLKJIGHHIIIJJKKHIMNKLKNMKMNMNRNMOQPNLKLLLKLPTX[]]^`_]][\`bbbdeddfedfijd`YOOSSPSVY\__\\]__``^]_^^`bbceebbb`abaa`^]_cdbjngmj?'-,*,+'+.**1:=9AG8+,1,(045/021//234553/-./35;@CIA/,20+-+')((),,,29FGEINJIURBAHCDJDKGAEFBEDEG@>B@@=>D@;AFFIIIGFGJMRO.%ERNIMKJLKIMNNJIMQQQQPPPONPRPRTRNNNMLIKMKKLJMONKKJKPPSQNOPPROPSTRSVVTUVVVVVWTVZ]\Z\`abcefghhmnlpy{‚’s/(162+  %5EIGIICCFHHGIIIDHGFHHFFGEGIGFGGGHFEHIHJEGJLJGGJGIIGFGHGFJKHILJEIIIIIGHIHJKJIIJKHHIHEGIGGFHG?;:65>>>>>>>????????@@@@@@@@BBBBBBBB>??@ABBC??@ABBCCAABCDDEEEA@@@BMXL=:=;=?:<74535CRMMLLKJIIMMLKKJIIJIGFFGIJKLLLLMMMNNNNNNNNNNNNNNNNNMLKLNQRVX[^___^YZ\^aceedfhjjhfdcdc\TOORQTW[\\[Z\^accb`^bbbbbbbbcccccccc__abdfggdiejpG#/0.+*+++*,)8A9FIOWHEA><=?@B@=;>BB>GGDBCBBDCHE;9@EC=;AB=@JKJHHHGGIMQS3%ESIONLKKLNOJMOOOOQTTQQSRNNPOOOOOOOOLMOPPOMLNNNOOPPPRQPOOPQRTSRQRTWXUUUUUUUUQRUX[^_`bbcdfghhmhjry|„Žt0!+53)"$)'(CKGFEFEFFGGHGFEEFHIIHFEGGGGGGGGGFGFGFGFHHHHHHHHHIJJJJIHFHIKKIHFJJIIIIJJIIJJKLMMLKJHFECCECHG=9:60C>7K\MDOTNOOOOPPPNPQPNNOPPPPPPPPPQQQQQQQQQQQQQQQQRRRRRRRRRSTUUUTT€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ !!489:;;:<::::::::<<<<<<<<>>>>>>>>????????AAAAAAAABBBBBBBB??@AABCCAABBCDDEAAABCDDDEB@@AEOYI;:A>;:5:96206CNNNMLLKJJNMMLKKJJJJIIIIJJLLMMMNNNOOOOOOOOOOOOOOOOONLLMOQRUWZ]_`__]^^_`abbcdfhhgdcffc\TQSVQSW[]^]]Z\_abb`_ccccccccaaaaaaaaaabcdffgjh_esV  -1.,+++)(0138;;@K?.,58CIA)(+12/.0,,,--/013CG>?MSM2)*2128:9525=====;:;>DHH><@B>BHGGHJJGFJPZS0$CQIMLJJIKLMJKLMMNPQSQQQPONOOOOOOOOOJLMNNMLJNNOOOPPPQQPPPPQQRQPOPRTVTTTTTTTTRSUX[\^^bbcefghimhhpv{„p0 !'-133390$#@E>9P]IESSNNNOOOPPPOMNPPONOOOOOOOOQQPQPQQQRRRRRRRRSSRSRSRSPQRTUUUU€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€!"0478:867::::::::<<<<<<<<>>>>>>>>@@@@@@@@@@@@@@@@AAAAAAAA???@AABBAABBCDDDBCCCDEEEBA?@AEOXQ>8;97<>8<920:EKLLLKKJJILLLKJJIIHHIIIIHHKKKKLLLMMMMMMMMMMMMMMMMMMLLKLMOPVWZ]_`a`]^_`cdefdeghhgedfeaZSQTWOQUX[\]\Z\^abcbadddddddd________eeffggggabafp[*3:8520,(&/316?:9FC/*-2BK?/,+./-/3421/.---3BE=BVa\B55=;7:>5/+/;BC@E9,%&+0388:;>@BCB>>AB=97=EE=88:=<778614<@??>?A=4OcNBOPOOOOPPPPQONOPQPNPPPPPPPPQQQQQQQQPPPPPPPPTTTTTTTTPPRTUUVV€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€  " #"/469::7899999999<<<<<<<>>>>>>>AAAAAAAAAAAAAAAA@@@AAABBAABBCCCDCCCDDEEEC@<:=EQZJ>9<:9;<9;7./;IOLLLLKKJJLLLKKJJJHIKLLKIHKKKLLLMMMMMMMMMMMMMMMMMMMLKLLMNOWXZ\]_^_\\]_acdeffghhhffgea[TPQRRTVYZ\[\[\^`aa``aaaaaaaabcbcbcbchhhhghggbadhm]2 4CA>:60+(-/29?=:@G<.*6HG8,**+,*+-+++,,./0>C@=GWXL>55;704:;7348;:863-%"$''++*,.379>=?CDC@?>B@:8987438EKJDBDBBA=@FIDGJJECHNRK;(%#! "-AOPKKJJIJJKNMKMOQPNPSRPOQQNPPPPPPPPMMNOONMMLLLLLLLLKLNOONLKPONOOPQRQQQQQQQQWXYZ[[[[\^`dgjlnlijpv{ƒ‹t0#%.5=@>A6'-DGDHJFGIFGHGDEFIEGHJIIFEGGGGGGGGFFFFFFFFGGGGGGGGGGHHHHGGGHIJIIHGIHGGGGHIGHHHHIIJKJIHFDCCEEHG@;836<>>ABAB<5K_RIPROOOPOPPPNPQPONOQPPPPPPPPQQPQPQQQRRRRRRRRSSRSRSRSPPRSSTTS€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€                 +    €€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€        €€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€       €€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€           €€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ƒ€€~€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€‚€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€‚‚€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€‚€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€‚‚€~~€€‚‚‚€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€‚€~€€~~~~~~~~~~~~~~~~~€€€€€€€€€€€€€€€€€€€€€€€€€€€‚€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€‚‚‚‚‚€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€~~~~~~~~€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€‚€€€€€€€€€€€€€‚‚‚€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€‚‚€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€‚‚‚‚€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€~€€€~~~~€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€~~~~~~~~€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€~~~~~~~~‚‚‚€€€€€€€€€€€~‚€€€€‚€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€~~~~€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€~~~~~~€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€}€‚€‚„ƒ‚~~€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€‚€€€€€€€€€€€€€€€€€€€€€~~~€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€~~~~~~~~€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€‚‚ƒ‚~€€€€€€€€€€~‚~€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€~~~~~~~~~~~~~~~~€€€€€€€€~~~~~€€€€€€€€}~}}€€€€€€~~~~~~~~~~€€€€€€€€~~~~~~€€€€€€€€€~~~~€€€€€€€€€€€€€€€€€€€€€€€€€€~~€€€€€€€€€€€~~~~~~~~€€€€€€€€€€€~~€‚€€€€€€€€€€€€€€€€€€€€‚‚‚‚‚‚‚‚ƒ‚‚‚€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€‚‚‚‚‚‚‚‚‚‚‚‚€€€€€€€€€€€€€€€‚‚‚€‚€€ƒ‚€€ƒƒƒ€€€€‚‚~~}‚ƒ‚ƒƒ‚‚‚€ƒ‚‚‚€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€zzzzzzzz{{{{{{{{yyyyyyyyxwxwxwxwwwwwwwwwuuuuuuuuxxxxxxxxvvvvvvvvxwxwxwxwvvvvvvvv{}}zyyyyyyyyyyyyyyyyyyzz{z{z{zzz{z{z{zxxxxxxxxvuuuttssqqrstuuvttttttttyyyyyyyyxy|}}|yxvvvvvvvv€€€€€€€€€€€€€€€€€€€€€€€€‚€~~yyzyzyyyzz{{{{zzyxyxyxyx}}}}}}}}{{{zyxxwvvvvvvvv|}~€‚ƒƒƒƒ‚‚‚‚‚‚‚‚ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ„„„„„„„„†…†…†…††ƒƒƒƒƒƒƒƒ……„ƒ‚€ƒƒƒƒƒƒƒƒ‚‚‚‚‚€€€€€€€€€€€€€€€€‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚„„„„„„„„‡‡ˆ‡ˆ‡ˆ‡ŠŠŠŠŠŠŠŠ‚‚‚‚‚‚‚‚‚‚‚ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚††††††††ˆˆˆˆˆˆˆˆŠŠŠŠŠŠŠŠ……………………„„„„„„„„ƒƒƒƒƒƒƒƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚€€‚ƒƒƒ‡‹‹ŠŽ‰……‰Œ‹ŽŽˆ‹ŒŠ…‚„†‡ŒŒ‹Ž‘‘‘‘‘Ž……„ƒ‚€‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒƒƒƒƒƒƒƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚€€€€€€€€€€€€€€€€‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚€€€€€€€€€€€€€€€€wwwwwwwwxxxxxxxxyyyyyyyyxxxxxxxxxxxxxxxxwwwwwwww||||||||{{{{{{{{xxxxxxxxwwwwwwwwy|~}zwuuxxxxxxxxxxxxxxxxwwwwwwwwwwwwwwwwyyyyyyyy||{{zyyyrsstuvwwuuuuuuuuqqqqqqqqsvy{{yvswwwwwwww€€€€€€€€€€€€€€€€€€€€€€€€‚‚€~~zzzzzzzz}}~~}}}}}}}}}}}}}}}}}}}|{zyxwwuuuuuuuu{|}‚„„„ƒƒƒ‚‚‚‚‚‚‚‚‚‚„„„„„„„„††††††††ƒƒƒƒƒƒƒƒ††††††††„„„„„„„„‡†…„ƒ‚€„„„„„„„„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚€€€€€€€€€€€€€€€€ƒƒƒƒƒƒƒƒƒƒ‚ƒ‚ƒ‚ƒ‚‚‚‚‚‚‚‚ƒƒƒƒƒƒƒƒ‚‚‚‚‚‚‚‚„„„„„„„„‚‚‚‚‚‚‚‚‚‚‚ƒƒƒ‚‚‚‚‚‚‚‚„„„„„„„„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ‰‰‰‰‰‰‰‰„„„„„„„„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚€€‚ƒƒ„„‡‹Ž‹‹Ž“”Œƒ€‚„~………††‡‡‡†‹‰‚…‡ŽŒ“’““““’‘‡†…„ƒ‚€‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒƒƒƒƒƒƒƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚€€€€€€€€€€€€€€€€‚‚‚‚‚‚‚‚ƒƒƒƒƒƒƒƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚€€€€€€€€€€€€€€€€zvtuvvuuvwxxxwwvtuvwxxxxvvvvvvvvyyyyyyyyzzyyyyzzyz{||||{{{{{{{{{zz{|}}}}~}|{zzzzy|~~{xvvuwxxwvvwwxxxxxwwwxxxxxxwvvvvvwwwvwwvvvxyyxwvwxyz{{{zzyyy{{{{{{{{yxvvvutrux{|{xvuvwwvttuv|€€€€‚‚‚‚‚€€€€~}{zyyzzyxy}~‚€€€€€~||{zywvuuvwwvuuvyz|‚ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ†…„ƒƒ„……ƒƒ„„„„ƒƒ…„„ƒƒƒƒƒ…„ƒƒƒƒ„…ƒƒ‚‚ƒ„…†‡‡…ƒ‚…†‡‡ˆˆ‡‡††……„ƒƒ‚‚ƒ„…„ƒ‚ƒ€€€€€€€€€€€€€€€€€ƒ†…ƒ‚ƒƒƒƒƒƒƒƒƒ‚€‚ƒƒ‚‚‚‚ƒƒ„„………‚‚‚‚‚‚‚‚‚ƒƒƒƒƒƒ‚‚‚‚‚€‚‚~ƒ‚‚ƒ‚€€‚ƒƒ†„‚‚ƒ„……ƒ‚‚‚‚ƒ„„„„ƒƒƒƒƒƒƒƒƒƒƒƒƒƒ‚ƒ„„ƒ‚‚‚„ƒ‚ƒƒ„ƒ‚„„ƒ‚‚‚‚‚‚‚‚‚‚‚ƒƒƒƒƒƒƒƒƒƒ„…†‡ˆ‰‰………„ƒƒ‚‚…ƒƒ…††ƒ‚€‚‚‚‚‚‚‚‚‚‚‚ƒ„…†Œ‹ˆ…ƒ~‚~~ƒ‚€‚„‚~}€…‰ŒŒ‹‘“”““““””‰ˆ…ƒ‚‚„„„ƒƒƒ‚‚„„„ƒƒ‚‚‚‚‚‚‚‚‚ƒƒƒ‚‚€€€€€€€€€€‚‚‚‚‚‚‚‚‚‚‚‚‚‚€‚„„ƒ‚‚‚‚ƒ‚‚€€‚‚‚‚‚‚‚‚€€€€€€€€€€€€€€€€}zxy{{{{xxyyyyxxxxwwwwvwwwwwwwwwwwwwwwwwvvvvvwxxwwxxxxxxxxxxxxxxwxy{|}~{{{zzz{{{}~~{zz{{|||zyyyxxxyxxxwwxxxxxxwwwwvvvvvvvvuuuvwwwwwvvuuwwwwwwwwyyyyyyyyzyxyz{zy{}~~}{{{yyxxwxxx{€€€€€€€€€~}|{yzzzyxy}~~€€~~~~~}~€{{{zyxvvtuvwvvvwyz|‚ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ‚‚‚‚‚‚‚‚„ƒ‚‚‚‚ƒ„‚‚‚ƒƒ‚‚‚ƒƒ‚ƒƒ„„„„„ƒƒƒƒ„„ƒƒ‚‚‚ƒ…†‡‡†„€ƒ……††††††……„„ƒƒ‚‚‚ƒ„„„ƒƒƒ€€€€€€€€€€€€€€€€€„‡†ƒ€€ƒƒ‚‚‚‚ƒ„††„„„„ƒƒƒ‚‚ƒƒƒ„ƒƒƒƒƒƒƒƒ‚„„„ƒƒ‚‚‚ƒƒƒƒ€ƒ„‚€€€‚‚ƒƒƒ‚‚‚„……„‚‚‚€€‚ƒ…††„‚€€‚ƒ„ƒƒƒƒ„ƒƒƒ„„„ƒ‚‚ƒƒƒƒƒƒ‚‚‚ƒƒƒƒƒ~~€‚‚‚‚€€ƒ‚‚€€€€‚ƒ„‚‚€€‚‚‚‚‚‚‚‚ƒ‚‚‚ƒ„…‡ŒŽ’‰„ƒ€€€€‚ƒƒ‚‚„‚}{}€ŠŒ‹‘“”““““•”‰ˆ…ƒ‚‚„„ƒƒƒƒ‚‚„„ƒƒƒ‚‚‚‚‚‚‚‚€‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ„ƒ‚‚‚‚‚€€€€€‚€€€€€€€€€€€€€€€€|yy{~€‚€~}|{zxvuuuvwwwwwwwwwwwwwwwwuuuuvwxxvvwwwvvuwwwwwwwwwwwxyyzzyyxxxxxy{}}|zxyz{{{|}}||zz{{|{{zz{{{{{{zzzyxxvvuvwwvuuvwvvwvwvvvuuvvwwxxvvvvvvvvwvvvxxxw||}|{z{||zxx{{{z{€‚€€€€€€~}}{zyzyxwx|~}}€€€€€~~~‚€{{zzyxwvtuvvwvwwyz|‚ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ‚‚‚‚‚‚‚‚ƒ‚‚‚‚‚ƒƒ‚‚ƒƒ‚‚‚‚‚‚ƒƒƒƒ‚ƒƒƒƒƒƒ‚ƒ‚‚‚ƒ„…†‡‡„€„„„………„„ƒ„„ƒƒƒ‚‚‚‚„„„„ƒƒ€€€€€€€€€€€€€€€€€ˆˆz{~~€‚‚ˆ‰‹‹Š‰‰Š‰ˆˆ‡‡†††„„„„…„„„„„………„ƒƒ„„„ƒƒ€‚ƒ„„„ƒ‚‚ƒ„‚‚€‚‚ƒƒƒ‚‚ƒ‚€€‚‚‚‚€€€€€€€€€€‚‚‚‚ƒƒƒƒ‚‚ƒƒƒ‚‚‚ƒ„„„ƒ‚ƒƒƒƒƒƒƒƒƒƒƒƒ„„„„…„„ƒ‚€„„ƒƒ‚€‚€‚‚€‚€‚‚‚‚‚„ƒƒ‚‚ƒ„…ˆŽŽŽ“†€€~€€€{y{ŠŽŒŽ‘“–•”“““’‰ˆ…ƒ‚‚„ƒƒƒƒ‚‚‚ƒƒ‚‚‚€‚‚‚‚€€€‚‚‚‚‚‚ƒƒƒƒƒƒƒƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ„ƒ‚‚‚€€€€‚€€€€€€€€€€€€€€€€|zy{}~~‚‚‚‚‚‚}{wuttuvuuuuuuuuvvvvvvvvuuuuuvvwvwxyxwutvvvwvwwwxxwwwwxxzyxwwwww}~~}ywvwxxxy{||z{||}|}|||}}}}}}|||{{zyxwyyyywwwxyxutrrrsuvvvvwwwwwwwwwwwyxvwwwutxz{{yxxyzyxyz{{{{ƒ€€€€€€~}}|zzzzxvx|}}|~~}~~~€€€€€€~zzzzyxxwtuvwvwwwyz|‚ƒƒƒƒƒƒ„„„„ƒƒƒƒƒƒƒƒ‚‚‚‚‚‚‚‚ƒƒƒƒƒ„„„‚ƒƒ„„ƒƒ‚ƒƒƒƒ‚‚‚ƒƒƒƒ‚‚‚‚ƒ„…†‡ˆ…„„„„„„ƒƒ‚ƒƒƒƒƒƒƒƒ‚ƒ„„„„„€€€€€€€€€€€€€€€€…‡„}~€€€ˆŠ‹‹Š‰‰ŠŠŠŠ‹‹ŒŒ‹‹‹‹‹‹‹‹ˆˆˆˆ‡†…„†…„ƒ‚ƒƒƒ‚‚‚‚‚‚‚ƒ‚‚‚ƒƒƒƒƒƒ„„„ƒƒƒ„„ƒƒ€‚€€‚„‚€~€€€€€€€€€€‚‚‚ƒ‚‚‚‚€‚†‹Ž‘‘Ž‹‰ˆ‡†……„ƒ‚€€„„„„ƒ„ƒƒ††…„„ƒƒ‚€‚‚€€€‚‚‚‚ƒƒ‚‚‚‚‚‚‚ƒ„…‰Œ•‘†ƒ„……‚‚€€|y{„‹ŽŽŒŽ’””“’’’”’މˆ…ƒ‚‚ƒƒƒƒ‚‚‚‚‚€€€‚‚‚‚„„ƒƒƒ‚‚‚‚‚‚‚‚‚‚‚ƒƒƒƒ‚ƒƒƒ‚‚‚‚‚‚‚‚‚‚‚‚€‚ƒ„„‚€ƒƒƒƒ€€€€€€€€€€€€€€€€€€|yxyyyyz{{{{{{||{ywutuwxvuvuvuvvssssssssuutssssswxz{{ywuwwwwxxxxxxxxxyz{zzyxxxxx}|xvvyxxxzzxwxyzzzzzzz{{{{{{z{{{{{zyxyzzzyxxyyxwvvvxytttttsssttttttttwvuuvvusvy||{ywvvwxwwwyz{€‚ƒ€€€€€‚€€~}}{zyzyxwx{~||}~}{{{{||}}~~~}zzzzyxxwvvvvwvvuyz|‚ƒƒƒƒƒ„„………„ƒ„ƒƒ‚ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚ƒƒƒƒ‚‚ƒƒƒƒ‚‚‚‚ƒ‚ƒ€‚ƒƒƒƒ‚‚‚‚ƒ„…†ˆˆ…‚…„„……„„ƒ‚„„„ƒƒƒƒƒ‚‚ƒ„„„„ƒ€€€€€€€€€€€€€€€€‚ƒ‚‚‚‚‚€€‚„„ƒ‚‚ƒ„„……††‡‡‰‰‰‰‰‰‰‰ŒŒŒŒŒŒ‹Š‡…„‚ƒ„†‡†…„‚‚‚‚ƒƒ…†ƒ‚€ƒƒƒ‚ƒƒƒ„„ƒ‚ƒƒƒ‚‚ƒ‚‚ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ…‡ˆˆ‡††‡ˆ‰‹ŽŒ‹Š‰ˆˆ‡‡‡††…†……„„ƒƒ‚„ƒƒƒ„„ƒ€‚€‚‚€‚‚‚‚‚‚‚ƒƒ‚ƒ„…‰ŒŽ”’ˆ„‡‰‹‹ˆˆˆˆˆ‡††††…ƒ€~€„ˆŒŽŒŽ’““’’’“””‰ˆ…ƒ‚‚ƒƒƒ‚‚‚‚‚‚‚‚‚‚‚ƒƒƒƒ„„ƒƒƒƒƒƒƒ‚ƒ‚ƒ‚ƒ‚‚‚‚‚‚‚‚‚‚‚€€‚‚„ƒ‚€‚ƒƒ‚€‚‚‚‚‚‚‚‚‚€€€€€€€€€€€€€€€€zxwwwwwyxxwwwwwwxxvvuwxyxxxxxxxxwwwwwwwwxxvvtutuz{}}{yzzz{{|||yxwvvwxxwwwwwwxx{}~{xvvxxxyyyyxwxxyyyyyxxyyyyxxxyyzyyxwwxyyxwwxxxwwvuttwwvvuutttttttttttsstvwwvtw{|zxutuwwwuuwy{€€‚€€‚€€~}{zyyz{yxx|~}{}}|{|{|||||{z{|~~~}{{zzyxwvvvvvvwuuyz|‚ƒƒƒƒƒ„……††„„ƒƒƒƒ‚‚‚‚‚‚‚‚‚‚€€‚‚‚‚€‚ƒƒƒ‚‚‚‚‚ƒƒ‚‚‚ƒ‚‚‚ƒ„…‡ˆˆ…€‚„„„„„„„ƒƒ„„„„„„„„‚‚ƒ„„„„ƒ€€€€€€€€€€€€€€€€€ƒ„„‚ƒ‚„„„„„ƒƒƒ€‚€€€€‚€€‚ƒ„…††††„ƒ€€‚„……„ƒ‚‚‚ƒƒ…ˆ‰ˆ†‡‡†„„„ƒƒ„„„†„‚‚ƒƒƒ…„ƒƒ‚‚‚‚‚‚‚‚€ƒƒƒƒƒƒƒƒƒƒƒƒ‚ƒ„ƒƒƒ„„„ƒ‚‚ƒ„„ƒ‚ƒƒƒƒƒƒƒƒ‡‡‡‡ˆˆˆˆ‹Š‰ˆ†…„„†……„ƒƒ‚‚…„‚ƒ„†„ƒ‚€‚€€‚‚€€‚‚ƒƒ„‚ƒ„…ˆŽŒŒŒ‘ކƒ†‡‰‰‡‰ŠŠŠˆˆˆ‰ŠŠ‰‡…„…‡ŒŽŒŽ‘“•““““•“‰ˆ…ƒ‚‚ƒƒ‚‚ƒƒƒƒƒƒƒƒ‚ƒƒƒƒƒƒ„‚‚‚‚‚‚‚‚‚ƒ‚ƒ‚ƒ‚‚‚€€‚ƒƒƒ€‚€€€‚‚‚‚‚‚‚‚‚‚€€€€€€€€€€€€€€€€{yxxwvvwxxwwwxyywwwwwwwwyyyyyyyyzzzzzzzzzzyxxxxx{|}}~}}|||||}}~~{ywvuuuvvvvvwwxx{|}|yvuuvvwxxwxxwwxyyyyywxxxxxxwvwxxywvuuvxxwwwwwwwxxxxxxxxxxxxx{{{{{{{{xwwxz{{{vx{{zxwvxxxwwvwx{€€€€€ƒ‚€€€‚€€~}zyxy{{{zy}}|}~|~~~~~~~}{{{|~~}{{{zyxvvvuuvwwvuyz|‚ƒƒƒƒƒ„…†††„„„ƒƒ‚‚‚‚‚‚‚‚‚‚‚~€‚‚€‚‚€€‚ƒ„ƒƒ‚ƒƒ‚‚‚‚ƒƒƒƒ‚‚‚ƒ…†ˆˆ‡„‚‚„‚ƒƒ„„„ƒƒ„„„„„ƒƒƒƒƒƒ„„„ƒ‚€€€€€€€€€€€€€€€€ƒ„„ƒ„„ƒ„„„„ƒƒ‚‚ƒ„„ƒ‚‚ƒ‚‚‚€€€‚‚‚‚‚‚‚‚€€€€€€€~~€€€‚…‡†‡ˆ‰ˆ†††……††††…„…‡‰ŠŠ‡…ƒ„†‡†……„ƒ‚‚‚ƒ„ƒƒƒƒƒƒƒƒƒƒ„ƒ‚‚„……„„„……„„‚‚ƒƒ„„„„ƒƒƒƒƒ‚‚‚€‚ƒƒ…„„‚‚€€†……„„ƒƒ‚ƒ‚‚ƒ„„‚‚€€€‚‚€€‚‚‚ƒ‚ƒ„…‡ŽŠ‰‹„ƒ…„ƒ…„„†‡†„„…†ˆ‰ˆ‡†„„„ŒŽŒŽ‘“’‘‘‘’”“‰ˆ…ƒ‚‚‚‚‚‚ƒƒƒƒƒƒƒƒ‚‚‚‚ƒƒƒƒ‚‚‚‚‚‚‚‚‚‚€€€‚ƒ‚‚€€€‚‚€€€‚‚‚‚‚‚‚‚€€€€€€€€€€€€€€€€xwvwwwxzyywvvvvvwwxxxwvuxxxxxxxxwwwwwwwwyyxxxxyyyxxxxyzzyyyzz{{{|{zyxy{|{zzyyyyy|xutuuvwvtsssuvvwwxxxwwwxxwwwwxxyywvutvwxwwwwxwuuuvwxvvvwwxxxxxxxxxxxxwvwxxwv}~}||}|zxxyyxw|€€€€„ƒ€€€‚€€~}yxxy{|{{z}}|~~}~~~}}||~~€~}||{zywvuuttvwxwvyz|‚ƒƒƒƒƒ„…††‡„„„ƒƒ‚‚‚€‚ƒƒ‚‚‚‚‚ƒƒ‚‚‚‚ƒƒ„„ƒ€„ƒ‚‚‚‚ƒ„ƒƒ‚‚ƒ„…†ˆˆ†„ƒ‚‚ƒ‚‚ƒƒƒƒƒ„„„„ƒƒ‚‚ƒƒƒ„„„ƒ€€€€€€€€€€€€€€€€†ŠŠ†€~€‚€‚‚ƒƒƒ„„ƒ‚‚ƒ‚‚ƒƒ„„‚‚‚‚‚‚‚‚‚‚ƒƒ‚€€‚ƒ„ƒ‚€€ƒ„ƒ}|€€€‚‚‚‚„ƒ„…†‡‡††„ƒ…‰ŒŒŠŠ‰ˆ‡‡‡ˆ‰††††††††ƒƒ„ƒƒ„…‡…„ƒ„„…„ƒ„„ƒƒƒƒ„„ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒƒƒƒ‚‚€€€~‚…ƒ‚€‚‚€€‚‚‚‚‚ƒ„…‡ŽŠ‡ŠŽˆˆ‰…„……‚„ƒ‚„„„ƒ‚‚‚ƒ„ŒŽŒŽ’’‘‹‰ˆ…ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒƒƒ‚‚‚‚‚‚‚‚€€ƒƒ‚€‚‚‚‚ƒƒ‚€€€€€€€€€€€€€€€€€€€xnnx}}€~}}}}zywuuuuvxwwwwvvvvvvvvvvvvvvvvvvvywuuvwxxwxxxxwwvxxxyyzzz|||{{{{{€€}zzz~}zxwwxy|{zyxwvvuuuuuuuuwwvvvuuuuuvvwwxxuuttuwz{vvvvvvvvyyxxwwwvvwwuuwvux{~~{xxxxxwwxz|~|€€‚‚€€€€€ƒƒ‚‚€~}{zxvvwxzxxyzz{||{{|}}~€~~}}zzyyxxwwzzzzzzzz{|}~€‚ƒƒ„„„„………†„„„„ƒƒ‚‚‚€€€‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ„ƒƒ‚‚‚ƒƒƒ‚‚„ƒ‚„‡†‡†ƒ‚ƒƒƒƒƒ„„ƒƒƒ‚‚‚‚ƒƒƒƒ‚ƒ…††…„„€€€€€€€€€€€€€€€€ˆ””†|{~€€€€„…†ˆ‰ˆˆ‡††††††††………„ƒ‚‚‚‚‚‚‚„ƒƒƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚€€€€€‚ƒ„‚‚ƒ„†‡ˆˆ„…†‡ˆ‰Š‹…………………………………………………„„„„„„„„„„„„„‚‚ƒƒ„„„…€‚ƒƒ„ƒƒƒ„…„‚‚‚„ƒƒ‚€€‚‚‚‚ƒ„……Š‘ŽŒŒŽŽŒ‹‹Š‰‰‰ˆ‡††††…………„„„ŠŠ‹ŒŽ‹‹Š‰‡†……ˆ‡…ƒƒ‚‚ƒ„„ƒƒ‚€‚‚€€‚‚‚‚ƒƒ‚‚ƒƒ‚‚‚‚‚‚‚‚‚‚‚‚€‚‚‚‚ƒ„‚‚‚‚€€‚‚„ƒ€‚‚‚‚€€‚‚€€€€€€€€€€€€€€€€€€€xpqy|}……„ƒƒƒƒƒ~|zwussstttsssrrttstststvvvvvvvvvuuvwwwvvvwxxxxwxxxyyyyyxxyyyzzz~|z{|}}{{{}~~~~~~~~~zzzzzzzzzzzzzzzzuuvvwwwxponnoprsssssssssyxxxwwwwwxxwwyywx{~~{yxyvvuuvxyz}ƒ‚‚‚€€€€€‚ƒ‚~}|zxvuuvwuvvwwxyywwxyyzz{yyyzzzzz||{{zzzz~~~~~~~~{|}€‚ƒ„„„………†††……††…„‚‚‚€€€‚‚‚‚‚‚ƒ‚‚ƒƒƒ‚‚‚‚‚‚ƒƒ‚„‡†‡†ƒ‚ƒƒƒƒƒ„„„ƒƒƒƒ‚‚‚ƒ„„‚‚ƒƒƒƒƒƒ€€€€€€€€€€€€€€€€„Œ‹‚}~~€€€€€€€…†ˆŠ‹‹‹‹ŒŒŒŒŒŒŒŒŠŠŠŠ‰‰‰‰‰‰ˆ‡†…„ƒƒƒƒƒƒƒƒƒ‚‚‚‚‚‚‚‚ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ‚‚€€€€€‚|}}~~€€~€‚‚„„„……†††††††††††Œ‰ˆ†…††††††††‚ƒƒƒ„„„„ƒƒ„„„ƒ‚‚ƒ„„ƒ………„„ƒƒƒ‚‚‚‚ƒ„…‡‹‘’‘‘‘ŽŽŽŽŽ‹‹Š‰ˆˆ‡‡………†††††ˆˆ‡‡†…„„‡†…ƒ‚‚‚ƒ„„ƒƒ‚‚‚€€‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ‚‚‚‚‚‚€€‚‚„ƒ€‚‚‚‚‚‚‚‚‚‚€€€€€€€€€€€€€€€€€€€}wwzzyzz~~~~~~|{zxwwwwwvvvvuuuttttttttttttttttuwy{zyxwvvwwwwvvwwwvwvvvvwwxyz{{}}~}{z{||{zyyyyzxxyyyyzz{{{{{{{{wxxyyz{{zzz{{{||vvuuuuvwrrrrrrrrtttttsssrttstuvtx{~}{xxxxwvuvwxy}€ƒ‚‚‚ƒƒ€€€€‚‚‚‚‚€~~}{zxvutuussttuuvvuuvvwxxxyzzz{|||~~~}}}}|||}‚ƒ„…………††‡‡……††…„‚‚‚‚‚‚‚‚‚‚€ƒƒƒ‚‚‚‚‚‚ƒƒ‚‚‚‚‚‚‚ƒ‚ƒ††‡†ƒ‚‚ƒƒƒƒ„„„ƒƒƒ„ƒ‚‚‚„…‚‚‚‚‚ƒƒƒ€€€€€€€€€€€€€€€€„ƒ€‚ƒ‚‚€€€€‚ƒ„…‡‡‡‡ˆˆˆˆˆˆˆˆŒŒŒŒŒŒ……………………††…„„…††ƒƒƒƒƒƒƒƒƒ‚€€‚€€€‚ƒ‚‚‚‚‚‚‚‚‚‚ƒƒ‚„„„„…„……‡‡‡‡‡‡‡‡‡‡‡‡‡ˆˆˆˆˆˆ‡†…„ƒ……†…ƒ‚ƒƒƒƒƒ‚ƒ‚‚‚‚‚‚‚ƒ„…†‹‘‘’’’’’“’““’‘‘ŽŠŠ‰ˆ‡……„………„„ƒƒƒ…„…„…„…„†…„ƒ‚‚ƒƒ„„ƒ‚‚€‚‚€€‚‚‚‚‚‚‚‚‚‚‚‚‚ƒƒ‚‚‚‚‚‚‚‚‚‚ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚€‚‚„ƒ€‚‚‚‚ƒ‚‚‚‚‚‚‚‚€€€€€€€€€€€€€€€€€€|xyzyxyxyyxxxyyyyyyyyyzz{{zzzyyyxxxxxxxxuuuuuuuuy|~~|{{||{{zywvvvuuttssuuvvwxxx{}~~|zyy}}|{zzyyzzzyxwwwxxxxxxxxuuvwxyzzxxxxxyyyzzyyxxxxyyyyyyyywwwwwwwwtvvuvxxwuxz{xutuwvttsuuv{~€‚‚€‚‚‚€~}}zywvuuuvuuuvvwwwxyyzzzz{}}}~~~~~~~~~~~}}}}}}}}|}}ƒƒ„…††††‡‡‡……„„ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒƒ‚€‚„ƒƒ‚‚ƒ‚ƒ‚ƒƒƒ‚‚ƒ††‡†ƒ‚ƒƒƒ„„„„„ƒƒƒƒ‚ƒ‚ƒ„„„ƒƒƒ„…„„€€€€€€€€€€€€€€€€ƒ…‚ƒ„‚‚‚‚€€‚‚‚‚‚‚‚‚‚‚‚‚ƒƒ„„…†††‡‡‡‡ˆˆˆ„„„…………†‡†„ƒƒ„†‡‰‰‰‰‰‰‰‰‡‡‡‡‡‡‡‡„ƒ€€‚„…€€€€‚„„„ƒ‚‚……„„ƒƒ‚‚„„ƒƒƒƒ‚‚‚ƒ‚ƒ‚ƒ‚ƒ€€€‚‚ƒ‚‚‚‚‚‚‚‚„„„„„„„„ˆˆˆ‡†…„ƒ…††…ƒƒƒ„ƒƒƒƒƒ„„„‚‚‚‚ƒ„…ˆ‹‘’‘Ž‹Šˆ‡…………„„ƒƒ‚‚††††…………ƒƒƒ„„…††……ƒƒ‚‚‚ƒ„„ƒƒ‚‚‚‚‚ƒ‚‚‚ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ‚‚‚‚‚‚‚‚ƒ‚‚‚‚„ƒ€‚‚‚‚‚‚‚‚‚‚€€€€€€€€€€€€€€€€{xxzxxxwwwwwwwxxxxxxxwwvzzzyyyxxzzzzzzzz{z{z{z{{|}~|{{{€€€}|{xwwvvuuutttttttt{}€~zwvwwxyzz{{zzzyyxxxwwwwwwwwvvwxyz{{wwwvvvvvyyyyxxwwyyyyyyyyyyyzzzzzxz{y{|}|x{~}{xxxzywvvvxxz}€€€‚‚€€€€€€‚}}|xxwwwxxxyyzzzz{z||}|}}}}~~~}}}||}}}}~}~~|||{|{|||}~ƒ„………††‡‡‡‡†…„‚‚‚‚ƒ‚‚‚€€€€‚‚‚‚‚€ƒƒ„ƒ‚‚‚ƒƒƒƒƒƒ‚‚ƒ††‡†ƒ‚‚ƒƒƒƒ„„…„„ƒ‚‚„„„„„ƒ„„„…††…ƒ€€€€€€€€€€€€€€€€„ƒ€‚‚‚ƒ‚‚‚‚ƒ‚ƒƒƒ‚‚‚‚‚‚‚ƒƒƒƒƒƒƒƒ€€‚‚ƒƒ„ƒƒ‚€€€‚‚‚ƒ‚€€‚ƒ‡‡‡‡‡‡‡‡‰‰‰‰‰‰‰‰„ƒ‚‚„‡‰ˆ‡‡†††‡ˆ†……„„‚‚‚……„ƒƒ‚…„„‚€€ƒƒƒƒƒƒƒƒ‚‚ƒƒ„„‚‚‚‚‚‚‚‚‚‚ƒƒƒƒ‚‚€‚ƒƒ‚€€‚‚‚‚‚‚ƒ‚‚‚‚‚ƒ„…‹ŒŽŽ‹ŠŠ‰ˆ‡‡†„ƒ„ƒƒƒƒƒ„„„„…„…„ƒƒƒƒ„„„„ƒƒ„„††‡‡…„ƒ‚‚‚ƒƒ„„ƒ‚‚€‚ƒ‚‚ƒ‚ƒ‚‚‚ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ‚‚‚ƒ‚‚‚‚‚‚ƒ‚ƒ‚€‚‚„ƒ€‚‚‚‚€€€€€€€€€€€€€€€€€€€€€€{vw{zyyxwwvvvvvwuuvwwwvvyyyxxxwwyyyyyyyy{{{{{{{{zzzyxxxx||}}}}||zzzzyyyyyyxxxxxx|~~zwvuvwxxyxwsttuvwxxttttttttuuvwwxxyxxwwwvvvxxyzzzyxwwwwwwwwxxxxxyyyxzzyy{{z{~€~{z{}}{zz{|}{~€‚‚‚€€€€‚€~}||xyyyzz{{}}}}}}}}}}}~}~}~~~~}||||||}}~~~}~}~}~}}}}~€ƒ„…………††††‡‡†…„ƒƒƒ„‚‚‚€€€€‚‚€€€‚‚‚‚‚‚‚ƒ€‚‚ƒ‚‚‚‚ƒ‚ƒ††‡†ƒ‚ƒƒƒ„„…„„„„‚ƒ„………ƒƒƒƒƒ…††„‚€€€€€€€€€€€€€€€€„Љƒ€€‚…‚‚ƒƒƒ„ƒ‚‚‚‚ƒƒƒƒƒƒƒƒƒƒ‚‚‚‚ƒƒƒƒƒ‚‚€€€€€€€€€€€€„ƒ‚‚ƒ…†ˆŠ‰ˆ‡‡‡ˆˆ‰‰‰ˆ‡‡††‹‹ŠŠ‰ˆˆˆ‡†……ƒƒ‚‚ƒ‚ƒ‚ƒ‚ƒƒƒƒ„ƒ„ƒ„ƒƒƒƒƒƒƒƒƒƒƒƒƒ‚‚‚‚‚‚‚ƒƒƒƒ€€€€€€€€€€‚‚‚‚ƒ„…†‡ˆˆˆ‡††ƒƒƒ„ƒ„„„„„ƒ„ƒƒƒƒƒ„„……†††ƒƒƒ„„………ƒ„„……††‡„ƒ‚‚‚‚ƒ„„ƒƒ‚‚ƒ‚‚ƒ‚‚‚‚‚‚‚‚ƒƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ‚‚‚‚‚‚‚‚‚‚€‚‚„ƒ€‚‚‚‚€€€€€€‚€€€€€€€€€€€€€€€€€€wpr{€}||{{{{{wxyzzzyyyyxxxwwwxxxwxxxxwwwwwwwwwwvwwxwwwwxyyyyxzzzz{{{{{{|||||}~€~|zzz||}~~|{zvvwxyz{{ttttttttvvvvvvvvuuuttsssrsuwwwvvxxxxxxxxwxxxyyyyxyyxxyzxxz~}{xxxzyxwxxz{|‚€€€€€€€€ƒ‚€~}||{{||||||~~~~~~~~}}}}}}}}~~~~~~}}}}~~}~€‚ƒ……„„………†††……†……„‚‚‚‚‚‚€€€‚‚€€€ƒ‚‚ƒƒ€€‚‚ƒƒ‚‚‚‚‚ƒƒ‚„‡†‡†ƒ‚ƒƒ„„„……„„„‚ƒ„„…„„ƒ„ƒ‚„…†„‚€€€€€€€€€€€€€€€€Ž”‘…~}€€€‚„…ƒƒƒƒƒƒƒƒ‚‚‚€€€€‚‚‚‚ƒƒƒƒƒƒƒƒ‚‚‚‚‚‚‚‚€€€€€€€€ƒƒƒƒƒƒƒƒ‚€€…„„„„„„„‹‹‹ŠŠŠŠŠˆˆˆˆ‰‰‰‰‡‡ˆ‡ˆ‡ˆ‡ŽŒŠˆ…„ƒ‚‚‚‚‚‚‚‚„ƒƒƒ‚‚‚‚ƒƒ„„„„ƒƒ……†„ƒ‚ƒƒ„ƒƒƒ‚‚‚‚‚‚‚ƒ„…‚‚‚ƒ„„ƒ‚‚‚ƒƒƒƒƒƒ†††……„„„„„„„„„……‡††††………ƒƒƒƒƒƒ„„ƒ‚‚‚ƒƒ„„ƒ‚‚€‚ƒƒƒƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ‚‚‚‚‚‚‚‚‚‚‚€€‚‚„ƒ€‚‚‚‚€€€€‚‚‚€€€€€€€€€€€€€€€€€€ypr}‚‚„„ƒ‚€~|zxvvvuuuttxxxxxxxxwwwwwwwwwvvwyzyxxxyyyxwwxxxyyzzzxxyyz{||€€~|zz}xy{}~~~}{{{{{{{{zzzzzzzz{{zzzzyyxxxwvvvupqtvwwvussssssssssssttuuvxxvvwwvy||yyyxwvvvwyz|€€€€€‚ƒƒ€~€~}||~~~~~}||}}}}}}}}}}}}}|||{|||}}~~~~~€€€~~~~~~~}~‚„……„„„…………†‚„…†…ƒ‚‚‚‚‚‚‚‚ƒ‚‚€€‚‚‚‚‚ƒ‚‚‚‚‚‚‚‚‚ƒ‚ƒ„„ƒƒƒ‚‚„ƒ‚„‡†‡†ƒ‚ƒƒ„„„……„„„ƒƒƒ„„„„„…ƒ‚ƒ…†…„€€€€€€€€€€€€€€€€Š’{}€‚€€€€€€€ƒ…‡‰‰‰‰‰‰‰‰‰ŠŠ‰‰ˆ‡‡†ˆˆ‡††…„„„„„ƒƒƒƒ‚‚‚‚ƒƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒƒƒƒ‚€~ƒ‚€€€€€€€~~€‚ƒ„…‡‡‡‡‡‡‡‡‹‹‹‹ŠŠŠŠŠŠ‰Š‰ŠŠŠˆˆˆ‡‡‡††ƒƒ„„„ƒ‚‚„……„‚‚‚‚„ƒƒ‚€€‚‚‚‚ƒ„…ƒƒ„…†‡‡†‡††…„ƒƒ‚‚‚ƒ„…†‡ˆ‡‡‡‡†††…ˆ‡†…„ƒ‚‚‚‚‚‚ƒ‚‚ƒƒ„„ƒƒ‚‚ƒƒƒƒ‚‚‚ƒƒ‚‚‚‚‚‚ƒƒ‚‚‚‚‚‚‚‚ƒƒƒƒ‚‚‚‚€‚‚„ƒ€‚‚‚‚‚‚‚‚‚€€€€€€€€€€€€€€€€€€wxyz{|~~~~~~~~~~€€~~}wwwwwwwwwwvusrqqsssssssswwwwwwwwwwxxxyyyyyyyxxwwyyyzzz{{}~~}}{zyzzzzzzzzyyyxxwww{{{{{{{{{|}|zyz{||||||||xy{}~~~~ttttttttrrrqqqpptrqrtutsvwyzzywvtuvvvwy{|€€€€€€€€€€€€€‚ƒ‚‚‚‚‚}|{||}}~~~}}}}}}}}}}}}}}}}~~~~~~~~~~~~~~~~~~~~~}ƒ„‚ƒƒƒ„„„„†„„……‚‚‚‚ƒƒƒƒƒƒ‚ƒƒ‚‚ƒ‚‚‚‚‚ƒƒ‚‚ƒ‚ƒ„„ƒƒ„ƒ‚‚ƒ„†††„‚‚‚„„…†…„ƒ‚„„ƒ„………„‡„……ƒƒ…ƒ€€€€€€€€€€€€€€€€„„ƒƒ‚‚€€€€€€€€……†††‡‡‡ŠŠŠŠŠŠŠŠŒŒŒŒŒŒŒŒ……………………………„„ƒƒƒ‚‚‚‚‚‚‚‚ƒƒ‚‚ƒƒ„„ƒ‚‚€„„ƒ‚€~}€€€€€€€€€€€‚‚‚€€€€€€€€……†‡‰Š‹ŒŒŒŒŒŒŒŒŒŒ‹‰‡…ƒ‚…†‡†ƒ‚ƒ„„ƒƒƒƒ„…†‚‚‚‚‚‚‚‚‚‚‚‚‚€€€‚‚ƒ„…††‡‡†„‚†††……„„ƒ††††††††„„„„„„„„…„„ƒƒ‚‚ƒƒƒƒƒ‚‚‚„…†„€‚…„„ƒ‚‚€€ƒ‚‚‚‚‚‚‚‚‚€€€ƒƒƒƒƒƒ„„‚‚€‚€‚‚‚‚‚ƒƒƒƒ‚€‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ„€€€€€€€€€€€€€€€€xyyyyyyyzzzzzzzzzzzzz{{{xxxxxxxxzzyxwwvvuuuuuuuuzzzzzzzzvwwwxxxxwwvvuuuuxxxyyyyz~~}}{{zzzzzzzz{{{zzzyyxxxxxxxxyz{zxwwyzzzzzzzzwxz||}}|{{{{{{{{{zyywvuuwvuwz|{zuvxyyxvuuvvutuvx|€€€€€€€‚‚‚‚‚‚}|zz{{{||}||||||||~~~~~~~~€€€€€€€€~~~~~~~~~~~ƒ…ƒƒƒ„„„„…†„„…„‚‚‚‚‚‚‚‚‚€€‚‚‚‚‚€€€‚ƒƒ‚‚ƒ‚€‚ƒƒƒƒƒƒ‚‚ƒ„‡‡‡…ƒ‚ƒƒ„„„„„„„„„„ƒ„„…„„‚‚„‚ƒ„‚€€€€€€€€€€€€€€€€…„„„ƒƒ‚‚‚ƒ‚ƒ‚ƒ‚ƒ‚‚‚‚€€€‚‚‚„„„„„„„„††††††††‡‡‡‡‡‡‡‡…………„„ƒƒ††††††††€€€„„ƒƒ‚ƒƒƒƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒƒƒ€€€€€€€€‚‚‚€€ˆ‡‡†…„ƒƒ„†‡‡††‡‰……„„„…†‡‚‚‚€‚€‚‚‚ƒ„…‰ŠŠŠ‰ˆ†…‡‡††……„„„„„„„„„„‚‚‚‚‚‚‚‚‚ƒƒ„……„„ƒ„ƒƒƒƒ‚ƒ‚€€‚…„„ƒƒ€€ƒ‚‚‚‚‚‚‚‚‚‚‚ƒ‚ƒƒƒƒƒƒƒƒƒƒƒ‚‚‚‚‚‚‚‚‚‚‚ƒƒƒƒ‚‚€‚‚‚‚‚‚‚‚‚€€€€€€€€€€€€€€€€zzyxwvuuvvvvvvvvttuuvwxxwwwwwwwwzyzyyyyyyyyyyyyy{{{{{{{{zzz{{|||zzzyyyxx{{{{||||~}|{vuvuvuvuwwwvvuuuyxyxyxyyyz{zxwxyyyyyyyyyxyz{}|||zzzz{zzzwxyy{|}}}|{}€€{|~~|{{||zyyz{|~€€€€‚€€€‚‚‚~}{{||}}}}~~~~~~~~~~~~~~~~{|}~€‚€€€~~‚„…ƒƒƒƒ„„……†„„……‚‚‚‚‚‚‚‚€€‚€ƒƒƒ‚‚‚‚€€‚‚ƒƒƒ‚‚‚ƒ„‡‡‡…ƒ‚ƒƒ„ƒƒƒƒ„„„„ƒƒƒ„„„„ƒ…„ƒ‚€€€€€€€€€€€€€€€€€„„„ƒƒƒƒ‚„„„ƒ„ƒ„„ƒƒƒ‚ƒ‚ƒƒ‚‚‚ƒƒ€€€€€€€€‚‚‚‚‚€€€€€€€€€€€ƒƒƒƒƒƒƒƒ€~€€„„ƒƒ‚‚…†‡‡‰‰Š‹……………………„ƒ„ƒ„ƒ„„€€‚‚‚‚‚‚‚‚‚‚‚‚‚€€‚‚‚‚‚‚‚‚€€€€€€ƒ„…ƒ€~€€€‚‚‚‚€‚‚‚ƒ‚‚ƒ„…ŠŠŠŠŠˆ‡†„„„ƒƒ‚‚‚ƒƒƒ‚ƒƒƒƒ‚‚‚‚‚‚‚‚‚‚‚€€€€€€€€€ƒ…„„ƒ‚‚€€‚‚‚‚‚‚‚‚‚‚‚‚ƒƒ‚‚‚‚‚„„„ƒƒƒƒƒ‚‚‚‚‚‚‚‚‚‚‚‚ƒƒƒ‚‚‚‚‚‚‚€‚ƒƒ€€€€€€€€€€€€€€€€{{zywwvuwwwwwwwwtuuuuvvwuuuuuuuuvvvwwxwxyyyyyyyyxyxyxyxx{{|||}}}}}}}|||{{||||}}}}~~~}}|{uututututtstssrrtttuttttuvwvtssuvvvvvvvvtuvxxxwwzzzzzzzzyyyzz{{{|zyyzzxw{|~~|{{||{yyz||€€€€€€€€€€€€€‚‚€~~€€€~~~~~~~~~~~~~~~~~~~~~€€‚‚€€€}~~€ƒ„…ƒ„ƒ„„………†…„…„ƒ‚‚‚‚‚‚‚ƒƒ‚‚ƒ‚‚€€‚‚‚‚ƒ‚‚‚‚ƒƒƒ‚‚ƒ„†††„‚‚‚‚ƒ„„……„„ƒƒƒƒƒ„„„ƒ††…„‚€€€€€€€€€€€€€€€€‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒƒƒ„„„……‚‚‚‚‚‚‚‚€€€€€€€€€€~~~‚‚€‚‚…„„ƒ‚‚††‡ˆ‰‹‹Œ‹‹‹‹‹‹‹‹ŠŠŠŠŠŠŠŠ…††††‡‡ˆ„„„„„„„„‚‚‚ƒ‚ƒ‚‚€‚‚‚‚‚‚‚‚€‚‚‚€‚‚‚€€€‚€€‚‚‚‚‚‚‚ƒ‚‚ƒ„…†‡††……„„‚‚‚‚‚‚‚‚ƒƒ‚ƒ‚ƒ‚ƒ€€€€€‚‚‚‚‚‚ƒ„„„ƒƒ€€‚‚‚‚‚‚‚‚‚‚ƒƒƒƒƒ‚‚‚‚‚‚„„ƒ„ƒƒƒƒ‚‚‚‚‚‚‚ƒƒ‚‚‚‚‚‚…„‚‚‚ƒƒƒ€€€€€€€€€€€€€€€€{{{{{zzzzzzzzzzzzzzyyxxxvvvvvvvvvvvvwwwwuuvuvuuuxxxwxwxxxxxyyyzzzzzyyxxxxxyyzyzz{||||{{zzzzyzyzzyyyxxwwwvvvvvvvvwxywvuvwttttttttopqrsrrqutututuuwwwwxxyyzxvwxxwuz{}~~}{zyzzyxyz||~€€€€€€€‚‚~‚‚€€€€€~~}}}|‚‚‚~}|{~}}||{{{||~€‚ƒ„…„„„„……†††„„……‚‚‚„ƒƒ‚‚‚ƒƒ‚‚ƒƒ‚‚€€€‚‚‚‚‚‚ƒƒƒ‚‚‚‚‚ƒ‚‚‚ƒ„†††„‚‚‚ƒ„„…………„ƒƒƒƒƒƒƒƒ‚ƒ…†‡†„ƒ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚„ƒ„ƒ„ƒ„„„„ƒƒ‚‚‚‚„ƒƒ‚‚‚ƒ„……„„ƒ‚‚‚‚‚‚ƒƒƒƒ‚‚‚‚‚‚‚‚††††††††……††‡‡‡‡‡‡‡‡‡‡‡‡ŒŒŒŒŒŒŒŒ‹Š‰‡†„ƒ‚„„„„„„„„ƒƒ‚‚€ƒ„ƒ‚‚ƒ€€€‚ƒ‚‚‚‚‚ƒ‚‚‚‚ƒ„…„„„ƒƒ‚ƒƒƒƒƒƒƒƒ„ƒ‚‚‚€‚ƒ„…†‡††‡‡ˆˆ‰‰ˆ†…ƒƒƒ‚‚„„ƒ‚‚€€‚‚‚‚‚‚‚‚‚‚„„„ƒ‚ƒƒƒƒƒƒ„„„ƒ„ƒƒƒƒƒ‚‚‚‚‚‚‚‚‚‚ƒ‚‚‚‚‚‚ƒƒƒ‚‚‚ƒƒ€€€€€€€€€€€€€€€€{||}}}~~}}}}}}}}~~}}||{{{{{{{{{{z{zzzzzzyzyzyzyzzzz{z{zzyyyzz{{{yyyxxxwwyyyzz{{{z{{|{{zz{{{{{{{{}}||{{{{}}|}|}|}}~~|{|}yyyyyyyytuvwwvuuqqpqpqqqnooqrstussstxzyyxy{||{yxxxyxwxy{|€€€‚€‚‚‚~‚€€€€€ƒƒ‚€€€€€€€€€{{zzyzyy||{{zzyyz{}€ƒƒ„„„„……††††„„…„ƒ‚„„ƒƒ‚‚‚‚€€‚ƒƒ‚‚‚‚‚€€‚ƒƒ‚‚ƒƒ‚‚‚‚‚ƒ„‡‡‡…ƒ‚ƒƒ…„„ƒƒ„…†‚ƒƒƒ‚ƒƒƒ„…„ƒƒ‚€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ƒƒƒƒ‚‚‚ƒƒƒƒƒƒƒƒƒƒ‚‚‚‚ƒ……„„ƒ‚‚‚‚‚€€€€€€€€€€€€€€€‚‚‚ƒƒƒƒƒƒƒƒ……………………ŒŒ‹‹‹Š‹‹‹‹‹‹‹‹ˆˆ‡†„ƒ‚‚…††…€€‚‚‚‚ƒ„‚‚‚‚‚ƒ‚€€‚‚ƒ„……„ƒƒ‚ƒ„…€€€‚……………………‡‡‡‰‰Š‹‹‰‰Š‹‹ŒŒ‹ˆ…„„„‚„„ƒƒ€€‚‚‚‚‚‚‚‚‚‚ƒƒ„ƒƒ€‚‚‚‚‚‚‚‚‚ƒ‚‚‚‚ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚€‚ƒƒ„„†€€€€€€€€€€€€€€€€|||}}}~~}}}}}}}}~~~}}}}}~~~~~~~~~}||{~~~~~~~~}}}}}}}}|}}}~~~}}|||{{{||||}}}}z{||||{{{{{z{z{{|||{{zzz{z{z{z{{{|}|zyz{}}}}}}}}{|}}}|{{yyyyyyyyuutsrpooooorvxyxtuwxxwutvvvutsuv|~€€€€€€€€€€~‚€€‚‚€€„ƒƒ‚€}}}}}}}}zyzyzyzzzzzzzyyyxwwvuttsxy|‚‚‚„„……†††††„„……‚‚‚‚‚‚‚‚‚‚‚‚‚€€‚ƒ‚ƒ‚‚‚‚‚„„…ƒƒ‚„…‚ƒ‚‚ƒƒ‚‚‚‚‚ƒ„‡‡‡…ƒ‚ƒƒ…„ƒ‚‚ƒ„„‚‚ƒƒ‚‚ƒƒ‡‡„‚ƒ‚‚€€€€€€€€€€€€€€€€€€€‚‚‚‚‚‚‚‚‚‚‚‚‚ƒƒƒƒ€€€€€€€€€€ƒ‚‚‚………„ƒƒ‚‚„„ƒƒƒ‚‚‚ƒƒ„ƒ„ƒƒƒ‚‚ƒƒƒƒ€€€€€€€€ƒƒƒƒƒƒƒƒ‚ƒ„†‡ˆˆ‡‡‡‡‡‡‡‡Œ‹Š‰ˆ‡†ƒ…††…„†‡………„…†‡‡‚‚‚‚€‚‚ƒ„…†…„‚ƒ„…†‚‚ƒƒ……………………‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‰‰Š‹ŒŽ‰†ƒƒ„„ƒ„„ƒ‚‚€€‚‚ƒ‚‚‚‚‚ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ‚‚‚ƒƒƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚€ƒ††…„…‡€€€€€€€€€€€€€€€€|||||}}}||||||||{{{|}}~~}}}}}}}}€}|{{{{{{{{{{}}}}}}}}|||}}}~~~~~}}}||{{{||||}{||}}}||}}}}}}}}}}||{{{{{{{{{{{{{|}|zyz{{{{{{{{{zz{|{{yy||||||||}}||{{{{yyyz~€yz|}}|zy{{{ywvwx|€€€€€€€€€€€~~~€€‚€€…„„ƒƒ‚‚‚}}|{zzyxxxxxxxxxyyyyyyyy~}{xtqomnnmmkkjjvx{~‚‚‚„………†††‡†„„…„‚‚€€€‚‚ƒƒ‚ƒƒ‚‚ƒ…„„ƒ‚‚€€~€‚€‚‚ƒ‚‚‚‚ƒ„†††„‚‚‚ƒƒƒƒ‚‚‚‚‚ƒƒ‚‚‚ƒ†…}|{z|€€€€€€€€€€€€€€€€‚‚ƒƒ„„„‚‚‚‚‚‚‚‚‚‚ƒƒƒƒƒƒƒƒƒƒƒƒ‚‚‚‚‚‚‚‚€€€€€€€€‚‚‚‚€€‚‚‚‚‚‚‚‚ƒƒ‚‚ƒƒ†……„ƒƒ‚‚‚‚‚‚‚‚‚‚ƒƒƒƒƒƒƒƒ€€€€€€€€€€€‚‚‚ƒƒƒƒƒƒƒƒ„„„„„„„„‚‚‚‚‚ƒƒƒ‚‚‚‚‚‚‚‚„ƒƒ‚€‚ƒ~~‚‚‚ƒ„‚‚‚‚‚‚‚‚‚‚‚€‚‚‚ƒ„……„‚‚ƒ„†‡ˆˆ‰‰ŠŠŠ‹‹‹‹‹‹‹‹‰‰‰‰‰‰‰‰…†‡ˆŠ‹ŒŒŒŽ‘‘‡„ƒ„ƒ„„ƒ‚‚€€‚‚ƒ‚‚‚‚‚ƒ‚€‚ƒ„ƒƒ„„„„„„†††……………‚‚‚‚‚‚‚‚‚‚‚‚ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚€„‰Šˆˆ‰Œ€€€€€€€€€€€€€€€€}}}}}}}}}}}}}}}}}}}|}}}}}}}}}}}}~~~~~~~~||||{{{{}}}}}}}}||||||||}}}}}}}}||||||||||}}}}|{{{{|||}}}}}}}}}}}}}}}}}}~~}|||}||{zyxx{{{{{{{{zzzzzzzz}}||||||~}}|||}}~~~}}~~~~~~~~~€€€€€€€~~€‚ƒ‚‚‚‚††††††††‚~|zzzzzyxxyz}~{{||}}~~‚~zpjgdgosqlghnu}‚ƒ‚ƒ…………††††„„…†…ƒ‚‚€‚‚‚ƒ‚‚‚€~|{~~}|{zyyxxyz{zxu|‚ƒ‚„‚‚‚ƒ……‡ˆ…‚†„„„„…………‚ƒƒƒ‚‚ƒ…„|xuv{~€€€€€€€€€€€€€€€€‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒƒƒƒƒƒƒƒ€€‚‚‚‚‚‚‚‚‚‚‚†‡‡†„ƒƒ„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚€‚ƒ„„„„„„„„ƒƒƒƒƒƒƒƒ‚‚‚‚‚‚‚‚‚ƒƒƒ„„„„‚€‚‚‚ƒ‚€€€€€€€€€€‚‚‚€‚€€‚‚€ƒ‚€‚„…‚‚‚‚ƒƒ†ˆŠ‹Œ‹Š‰ŽŒ‰ˆˆ‰‰ƒƒ„„„„„ƒƒ„…‡ŠŒŒ‰†‡‹Œ†ƒƒƒ‚‚ƒƒƒƒ‚‚‚‚‚‚‚‚‚‚‚‚‚ƒƒ‚‚ƒ‚‚‚„†‰‹‰‰‰‰‰‰‰‰‹ŠŠ‰‰‰Š‹‡‡†ƒ€ƒƒ‚‚‚‚‚‚ƒƒ‚‚ƒ‚‚€€‚‚‚‚ƒƒˆˆ„„€€€€€€€€€€€€€€€€||||||||||||||||}}}}}}}}}}|}|}|}}}}}}}}}}}}}||||}}}~}~}}||||||||}}}}}}}}||||||||z{|}}~}}{{|||}}}}}}}}}}}}}}~}}}}~~~}|||~~}}||{{||||||||||||||||}}|{{{||{{zzzz{{|}}~~}}|||||||||€€€€€€€€€€ƒ‚‚‚…††………………………ƒƒ‚‚€~~~}||~€~~~~~€}{wtutllv||xpkmu}‚ƒ‚ƒ…………††††…„„……ƒ‚‚‚‚‚‚ƒ„ƒ|zxwzzzzz{{{zzz{|{yw{~‚ƒ…‚‚‚ƒ…†‡†„ƒ…„„„„„„„„„‚‚ƒ……„„‚}xuw{€€€€€€€€€€€€€€€€‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒƒƒƒƒƒƒƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒƒƒƒƒƒƒƒƒ…††…ƒ‚‚ƒƒƒ‚‚‚ƒƒƒƒƒƒƒƒ€€€‚‚ƒƒƒƒƒƒƒƒ‚‚‚‚‚‚‚‚‚‚‚ƒƒƒƒƒ„„ƒƒƒƒ„„‚„…„‚€€‚‚‚‚‚‚‚€‚€€€ƒ‚‚‚‚ƒ„ƒƒ…†††„„‡‡………†‡ˆ‰‰‰‰‡…ƒ‚ƒƒƒ„„„ƒƒƒƒ„†ˆ‰‰ˆ‰‡……ˆ‹ŽŒ†ƒƒƒ‚‚ƒƒƒƒ‚‚‚‚‚‚‚‚‚‚‚‚‚ƒƒ‚‚‚‚ƒƒ…†ˆ‰‰‰‰‰‰‰‰‰‰‰ˆˆ‡ˆ‰‰‡‡†„€ƒƒ‚‚‚‚‚‚ƒ‚‚‚‚‚‚€€€€‚‚ƒƒƒ‚‚…‹‰„€€€€€€€€€€€€€€€€{{{{{{{{||||||||}}}}}}}}|||{|{||||||||||~~~}}|||~~~~~~~~}|}|}|}}}|}|}|}|||||||||yz|}~~~~||||}}}}~}~}~}~~~~~~~~~~~~}}|||~~~~~~~~}}}}}}}}}}}}}}}}}}||{{||||{{{{||{||}}}||{{{{{{{{€€€‚€€€€€„‚€‚ƒ‚ƒ€‚†‡†„€€€€‚ƒ…††…„ƒ‚€€€€€€~~}~}{ury{tx~€wpou}‚ƒ‚ƒ„„……†††††„„„„‚‚‚‚‚ƒ‚€~|{z{|yzz{||}}|||}}}{yz|‚ƒ„†‚ƒ‚ƒ…‡‡…ƒ‚‚ƒ„„„„ƒƒƒƒ‚„‚‚„…†……‚~yvw|€€€€€€€€€€€€€€€€€ƒ‚ƒ‚ƒ‚ƒƒƒ‚ƒ‚ƒ‚ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ‚‚‚‚‚‚‚‚‚‚‚‚ƒƒƒƒƒƒƒƒƒƒƒƒ„„…„‚‚‚ƒƒƒ‚‚‚‚‚‚ƒ‚ƒ‚ƒ‚€€€‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ‚‚‚‚‚‚‚‚‚‚‚ƒƒƒƒƒ‚‚‚ƒƒ‚‚‚‚ƒƒ„…††„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ‚‚€€€€€‚‚ƒƒƒƒƒ††…„……‡ˆ‡…„ƒƒƒ……„†ˆ‰‰…~ƒƒƒƒƒƒƒƒ„ƒ„…ˆˆ‡……„„ƒ„†ŠŒ†ƒƒ„‚‚ƒƒƒƒ‚‚‚ƒƒƒƒƒƒƒƒ‚‚‚ƒƒ‚‚‚‚ƒ„…†‡‡‡‡‡‡‡‡‡‡‡‡‡††††‡‡‡‡‡„‚€‚ƒƒ‚‚‚‚‚‚‚ƒ‚‚€€‚‚ƒƒƒƒŠŽŠƒ€€€€€€€€€€€€€€€€{{{{{{{{{{{{{{{{||{|{|||{{{{{{{{{{{|{|{{}}}}||{{}}|}|}}}}}}}|}}}||||||||||||||||z{|}}~}}|||}}}}~~~~~}~~~~~~~~~~~~~~~}}~~~~~~~~||||||||||||||||~}}||||}}}|||}~~{|}}~}}|{{{{{{{{€‚€€€€€…ƒ€€‚‚ƒ€ƒƒ‚€€€€€ƒ…††††€}}||~~}}|||vlowy~zrpu}‚ƒ‚ƒ„„„……††††…„„ƒ‚‚ƒ‚€‚ƒ‚~|{}~~}~}~}~~}}~~}{y{~€‚„…†‚‚‚‚ƒ…‡‡†„‚‚ƒ………„„ƒƒ‚‚‚ƒ„„ƒ„†ˆ…ƒ~yvx|€€€€€€€€€€€€€€€€€ƒƒƒƒ‚ƒƒƒƒƒƒƒ‚ƒƒƒ„„„„„„„„ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ„„„„„„„„ƒƒƒƒƒƒƒƒ‚‚‚‚‚‚‚‚ƒƒƒƒ„„„„ƒƒƒƒƒƒƒƒ„……„‚‚‚ƒ„„ƒƒƒ‚‚‚€€‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚„„„„ƒƒ‚‚‚‚…†‡†„ƒ‚ƒƒƒ‚ƒ‚ƒƒƒ‚‚‚‚‚‚‚‚€€€€‚ƒ„…„ƒ‚ƒ„„……………„…‡ˆ‡†ƒƒ…ˆ‹Š‰…„„„ƒƒ‚ƒƒƒ…„„‡‰‹ˆ†‚ƒ„ƒƒˆŒ†‚ƒƒ‚ƒƒƒƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒƒ‚‚‚‚ƒ…‡ˆ‡†…††††††††††…†…†††‡‡‡†‚ƒƒ‚‚‚‚‚‚ƒ‚‚‚€€‚‚‚‚‚‚‚‚„Љƒ€€€€€€€€€€€€€€€€€{{{{{{{{{{{{{{{{zzzzzzzz{z{z{z{z{{{{{{{{|{{{{zzz{{{{{{{{||}|}|}|{{{{{{{{{{{{{{{{||}}~}||||||}}}}}}~}~}~}~~~}~}~~~~~~~~}}}|}}}}}}}}||||||||~~}}}}}}||{{||}~|}~~~~||||||||€€€€€€€€ƒ€€€€€€€€€€€‚ƒ…†‡€€~|{{}}}}}}}}}€xihs|}~}~|snu}‚ƒ‚ƒ„„„„…………‡……„„‚‚‚€‚‚…‚|{{}~~~~~~~~~~~~~|yz|‚„…„‚ƒ‚ƒ…†‡ˆ„€ƒ†††……„„ƒƒ‚ƒ„„ƒ„†‡…ƒ~ywx}€€€€€€€€€€€€€€€€€‚‚ƒ‚ƒ‚ƒ‚‚‚ƒ‚ƒ‚ƒ‚„ƒ„ƒ„ƒ„„ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ„„„„„„„„…„…„…„……ƒƒƒƒƒƒƒƒƒƒƒ„„„„…ƒƒƒƒƒƒƒƒ„…†…„ƒ„…„„„„ƒƒƒƒ‚‚ƒƒƒ‚ƒ‚ƒ‚ƒƒ‚‚‚‚‚‚‚‚„ƒ„ƒƒ‚‚‚„ƒƒ‚‚‚‚‚„…†…„‚‚‚ƒƒƒƒƒƒƒƒ‚‚‚‚‚€€‚‚‚€‚„……„ƒ‚‚ƒ„„„„„„‚…‰‹Š‡ƒ„„†‡‰Š‹‹†…„ƒƒƒ„„„‚ƒ†‹Œ‰†„…ƒ‚ˆŽŒ†ƒƒ„‚‚ƒƒƒƒ‚‚‚ƒƒƒ‚‚ƒƒƒ„…†ˆˆ‡†„†††††††††††††††††‡ˆ†„‚‚ƒ‚‚‚‚‚‚‚ƒ‚‚€€€‚‚‚ƒƒƒ‚‚€†‹‹‡‚€€€€€€€€€€€€€€€€{{{{{{{{||||||||zzzzzzzz{{z{z{{{{{{{{{{{{{zzzzyyzzzzzzzz||{|{|{|z{z{z{z{zzzzzzzz|}}~}}|{{{{{||||}}|}|}|}}}}}}}}}~~}~}}}}~~~}}||~~~~~~~~||||||||~}}|||}}||||}}~|}~}}}}}}}}~€€€€€€€€€€€€€€€‚€€€€€€€€ƒ‚‚ƒ…‡‚ƒ‚‚€~}~~~~~~~~~~xlku~~||€|uqu}‚ƒ‚ƒƒ„„„„………‡………„‚‚€€‚}{zz{|}z{{|}~~~~~~~~~}{{|‚„ƒ‚‚‚‚‚ƒ……‡ˆ…€‚††………„„„„…ƒ‚‚„……„…‚}yvx|€€€€€€€€€€€€€€€€€‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ……………………„„„„„„„„ƒƒƒƒ„„„„„„„„„„„„„†††„„…†………„„„ƒƒƒ„ƒ„ƒ„ƒƒ‚‚‚‚‚‚‚‚‚‚‚‚‚ƒƒ„ƒƒƒƒƒƒƒƒ„„„„„„„„ƒƒƒƒƒƒƒƒƒƒƒƒ‚‚‚‚„ƒ‚‚ƒ„……ƒƒƒƒƒƒƒƒƒ‚‚‚‚‚€€‚ƒƒƒ‚‚„………ƒ‚…„ƒƒƒ„…†ƒ„…‡†…ƒ‚ƒƒ‚ƒ„‡ŠŒˆ‡…„ƒ„„…‚†ŠŒˆ„‚„…„‚ƒ‰ŽŒ†‚ƒƒ‚‚ƒƒƒƒ‚‚‚ƒƒƒ‚‚ƒƒƒ††‡‡‡†……………………………††‡†††…†ˆˆˆ„ƒ‚‚ƒ‚‚‚‚‚‚ƒ‚‚‚€€‚‚ƒƒ‚‚‚‡Œ‹†ƒƒ€€€€€€€€€€€€€€€€||||||||||||||||{{{{{{{{{{{{{{{{|||{|{||{{{{zzzzzzzzzzzz{{{{{{{{zzzzzzzzyyyyyyyy{|}}~}}|zzzz{{{|||||||||||||||||{{{{{{{{|{{{{{{{||||||||{{{{{{{{||{{{{{{||||}~~{|}~}}}}}}}}~€€€€€€€€€€€€€€€€€‚‚‚‚‚‚‚‚‚‚ƒ‚‚‚‚‚‚‚ƒƒ„„„‚€~~}}||{|}}vmpy}€}||uru}‚ƒ‚ƒƒƒ„„„„……†…………‚€€€ƒ‚yyz{|}~~{{||||}}~}}}~}||{|~‚ƒ‚€‚ƒ‚ƒ…†‡‡„€ƒ…„„„„„„„„…„‚‚ƒ„ƒ‚„}xvw{€€€€€€€€€€€€€€€€€€€€‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒƒƒƒƒƒƒƒ„„„ƒ„ƒ„„ƒƒƒƒƒƒƒƒ‚‚ƒƒƒ„„„„„„„„„„„ƒ„……„ƒ„…†…………„„„„„„„„„„„ƒƒƒƒƒƒƒƒƒƒƒƒƒƒ„…††††††††…………………………………………„„„„„„…„„„ƒ‚ƒ…†…ƒ‚‚‚‚‚‚ƒ‚‚‚ƒ‚‚‚‚€‚‚‚€€ƒƒƒ‚ƒ„……„„ƒ‚ƒ„…†…„„„„ƒƒƒ„……„ƒ‚€‚„‡‰Š‰‡…„„††…ƒƒ‡ŒŒ‡‚ƒ„„ƒ‚„‰Œ†ƒƒ„‚‚ƒƒƒƒ‚‚‚„ƒƒ‚‚ƒƒ„‰ˆ‡††…††††††††††„…†††……„†ˆ‰ˆ†ƒ‚‚ƒ‚‚‚‚‚‚‚ƒ‚‚‚‚ƒƒ‚†Œˆ„‚€€€€€€€€€€€€€€€€}}}}}}}}}}}}}}}}}}}}}}}}{{{{{{{{||||||||||||{{{{{{{{{{{{zzzzzzzzzzzzzzzzxxxxxxxxzz|}~~~~yyzzz{{{{{{{{{{{{{{{{{{{yyyyyyyyxxxyyzzzzzzzzzzzyyyyyyyy{{zzyyzzyyyyz{||yz|}~~~~||||||||}€€€~€€€€€€€€€€ƒ‚€}€€€€€€€€€‚‚€~}‚„…„ƒ€~~}|zyxxy}~ulqz{{~ƒ|qmu}‚ƒ‚ƒƒƒƒ„„„……†……†…‚€€€‚ƒƒ}}~~~}|€~||{z}||}}}|}||~‚ƒ~‚‚‚ƒ…‡‡…„‚‚ƒ„ƒƒƒƒƒ„„„„„„ƒ‚ƒ„|xuv{~€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒƒƒ„„„„„„„„„„‚ƒ„„ƒ‚ƒ„††………„„„ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ„„ƒƒƒ„…………………………††††††††‡‡‡‡‡‡‡‡††††‡‡‡ˆ‡‡†…„„„„„†‡†„‚‚ƒ‚‚‚‚‚‚‚‚ƒƒ‚‚‚‚€ƒƒ‚‚ƒ€‚ƒ‚‚ƒ„„„„„„ƒƒƒƒƒ„„…„„ƒƒ„…†‡‡…ƒ‚‚ƒ„…‹Š‡…„…†‡ˆ††‰ŽŽˆ‚ƒƒƒ‚‚…‰ŒŒ†ƒƒƒ‚‚ƒƒƒƒ‚‚‚‚‚‚‚‚‚‚‚„ƒƒ‚‚ƒƒ„‹‰‡………†‡††††††††ƒ„…†……„ƒ†ˆ‰‰†ƒ‚‚ƒ‚‚‚‚‚‚ƒƒ‚‚€‚ƒ„…„‚…‹‹…€€€€€€€€€€€€€€€€|ywwz}€}€€~~}}}}}}}|}}}}}}}}}}|{{{|}}}}}}}}}}~€}|~}}}~~€}zz|~}|||||||||x{‚‚~|zzzzzzzz}|zyxxyyzz{{{{{{{ywvvx{}zzzzzzzzzzzzzzzzyyyyyyyyzyzyzyzzuwxyyz{}yz{|}||{yyzz{{||}€€‚~€€€€€€€€‚‚€€€ƒ‚€€€ƒƒ‚‚€‚‚‚‚‚‚‚‚ƒ…‡†ƒ‚ƒ€}|~vorvzymmx~vmmu{€„…„ƒƒ„„…††‡ƒ„……„ƒ‚‚€ƒ‚||}}}}}|}}}}}~}}}~~}~~|{|~ƒƒ‚‚‚ƒ„…‰ˆ‡„‚‚ƒ…ƒƒ„……„ƒƒƒ‚ƒ…ƒ‚ƒ‚~yuvz€€€€€€€€€€€€€€€€€„‡‡‚€€€€€‚€~~‚€€€€€€€€‚‚€~~€€€€€~~~€€€€€€€€€€€€ƒƒƒƒƒƒƒƒ‚‚ƒƒƒƒƒƒ‚ƒ„„ƒ‚‚……„„…†‡ˆƒƒƒƒƒƒƒƒƒƒƒƒƒ„„„„„„„„„„„†††††††††††………„„ˆ‡†„„„„„……„„„„„„…„ƒ‚€€€‚‚€€€€€€‚‚‚‚€~‚„„ƒƒ……†††‡‡‡ƒƒ„„……††………………………Š‹‡…‰ŠŠ‰‰ŒŽŠƒ……„ƒ‚†’Œ†‚‚‚„„„ƒƒ‚ƒ‚‚‚‚‚‚ƒƒ‚ƒ‚ƒ‚ƒ‚……………„„„†††……………„……††…„ƒ‡†‡ˆ†ƒ‚‚‚‚€‚ƒ‚€ƒ‚„††ƒ…‡ŠŒŠ„€€€€€€€€€€€€€€€€€|yvvy}€~€‚€€€€€€€€~}}~~|{xxxxxxxx{}~}{{|~{|||}}~~‚|}€}}}}}}}}xz~€}{||||||||€}|{||}~~||{||}||zzzz{|zzzzzzzz}}|{yxww{{{{{{{{xxxxxxxxyyyyyxyyz{{||{zyyyyzz{{{|€€‚~€€€€€€€€~€€‚‚€~€‚‚‚‚‚‚‚‚ƒ…‡…ƒ‚‚}{yqkovx|xnmw€~|slnu{€„…„ƒƒƒ„……††„„………„‚‚‚€ƒ‚|}}~~~~~}}}~~~~~~~}}~||{~ƒƒ‚‚‚ƒ„…‡‡…„ƒ‚ƒƒ„„„ƒ‚ƒ‚ƒ…ƒƒƒ‚~yuvz€€€€€€€€€€€€€€€€„ˆ‹Š†‚‚ƒ€€€€‚€€€ƒ„‚‚‚‚‚‚‚‚€‚ƒ„ƒ„†ˆˆˆˆˆˆˆˆˆƒƒƒƒƒƒƒƒ„ƒƒ‚‚€€€€€€€€€~‚‚~€€€€€€€€€€‚ƒ„„…„ƒ†††††††††††…………………„…„………††††††††‚‚‚ƒƒƒ„„ˆ‡†…„……†††††…†……„„ƒ‚‚‚€€€€€‚‚‚€€ƒ„„„„‚ƒƒ„„…††…………„„„„……………………†‰‹‹ˆ‡‰Œˆˆ‡‡‹Š„‚ƒ„…†‰ŒŒ†‚‚‚„„„ƒƒ‚‚ƒ‚‚‚‚‚‚ƒ‚ƒ‚ƒ‚ƒ‚ƒ………………„„††…†…†…………†††…„„‡†‡ˆ†ƒ‚‚‚‚‚ƒƒƒ‚€‚ƒ€‚………ƒ„‡‹ŒŠ„€€€€€€€€€€€€€€€€€{xvvy}€€‚„ƒ‚‚‚‚ƒƒƒ„……†ƒƒƒƒƒƒƒƒƒƒ}zuuuuuuuuz{}|zy{|{{{{||}}~{yx{||{xxxxxxxxwy|~}{z{{{{{{{{~}{{{|}~~~~~~~~}|{z}}}}}}}}~}}||{{{zzzzzzzzyyyyyyyy}}|{zzyx}}~}}{zyzzzz{{|||~€€€€€€€€€€~‚€€~}}}~~~€‚ƒƒ‚‚‚‚‚‚‚‚€„†‡†ƒ€‚‚{vnlrtquvomv€€|wskiou{€€ƒ…„‚‚ƒƒ„………„……†…„ƒ‚‚ƒƒ}}~€€~~~~~}~~}}||}|{|}ƒƒ‚‚‚ƒ„…†††„ƒ‚‚‚ƒƒƒƒ‚‚ƒ‚ƒ…ƒ€„…‚}xuvz~€€€€€€€€€€€€€€€€†ŠŒ‡ƒƒ„€€€€‚€‚„„‚‚‚‚‚ƒƒƒ…‰Œ††††††††‰ˆˆ†…„ƒ‚‡‡‡‡‡‡‡‡††††††††‡…‚€€‚…‡…„…„…„…„‚‚‚‚€€€ƒ„†„ƒ‚€€„„ƒƒ‚€€……………………ƒ„„……††‡„„ƒƒƒ„…†……………………„ƒ‚‚‚‚€‚‚‚€ƒ„…………‚‚‚‚ƒƒƒ†……„„ƒ‚‚……………………‡ˆ‰‰‰‰ŠŠ‡‡††ŠŽ‹†‚…‰ŽŽŒ†‚‚‚„„„„ƒ‚ƒ‚‚‚‚‚‚ƒ‚ƒ‚ƒ‚ƒ‚…………………………†…†…††††††††……‡†‡ˆ†ƒ‚‚‚‚‚‚ƒ„„ƒ€‚‚‚‚‚‚‚‚ƒ€€ƒ„…„‚„‡‹Š…€€€€€€€€€€€€€€€€€ywtvy~‚‚„……„ƒƒ„ƒ„„……‡‡‡††††††††‡…„†‡…€{vvvvvvvvz|}}{z{}|||}}~~~|yvwxzzywwwwwwwwxy{||{zxwwwwwwwwzywvvwxyz|‚ƒ‚€~€|ywyzyzyzyytuvxyz{|{{{{{{{{zzzzzzzz~||}}|z€€€~|zy{|{|||||{~€€€‚€€€€€€€€~}|{{|}||}€‚ƒ„‚‚‚‚‚‚‚‚€€„†‡„‚‚€}vqryuprumhow~~wpjdeou{€„…„‚‚ƒ„„…………††…„ƒ‚‚€ƒ‚}}~€€€~}}}~}}}}}}~~||{~ƒƒ‚‚‚ƒ„…†‡‡‡„ƒ‚‚ƒƒƒƒƒƒƒƒ„‚ƒ„‚€…‡ƒ}wuvz~€€€€€€€€€€€€€€€€„ˆ‹Š…€€€€€€‚~~~~~~~~€€~~€„‡‹Œ‹Œ‹Œ‹‹†††‡‡‡‡ˆ‰‰ˆ‡†……„ŠŠŠŠŠŠŠŠŒŒŒŒŒŒŒŒŠ‡……‡Š‹‹‹‹‹‹‹‹ˆˆˆˆ‡‡††„ƒƒ‚ƒƒ„„ƒƒƒƒ„…‡ˆ††††††††ˆˆ‡†…ƒƒ‚„„„„„„„„€€€€€€€€‚‚€€ƒ„…‚‚‚‚ƒƒƒƒ‚‚‚‚‚‚‚‚‚„††‡††……„ƒ‚€„„ƒ„ƒƒƒƒ……………………ˆ‡†‡‰‹Š‰‡‡†‡‹ˆƒ„†Š’‘ŽŒ†‚‚‚„„„ƒƒ‚‚‚‚‚‚‚‚‚ƒ‚ƒ‚ƒ‚ƒ……………………………†…††††††††††…‡†‡ˆ†ƒ‚‚‚‚‚ƒ„…„ƒ‚‚‚‚‚‚‚ƒ€ƒ…„ƒƒ‡Œ‹…€€€€€€€€€€€€€€€€€xutty~‚ƒƒ„††…ƒ„„‚‚ƒƒ„„……††††††††ˆ‡ˆˆ‰†‚}xxxxxxxx|~~}|}~~~€€€€}zz}~~|}}}}}}}}yyz{zzyxwwwwwwwwwvuuuvwx{}€‚ƒ‚€~|xvssssssssnnpprsttrrrrrrrrwwwvwwwwzxwy|~}{~~~~|zxwzzzzzyzyz~€€€€€€€€€€~}|{zz{|z{|~€ƒ„‚‚‚‚‚‚‚‚‚€€„……„ƒ~vqtyxrstkcgn{|xrmeelu{€€ƒ…„‚‚ƒ„„………†††…„‚‚ƒƒ||~~€~}{{|}}}}~€|{|}ƒƒ‚‚‚ƒ„…†‡ˆ†…‚‚‚„„„ƒ„ƒ„„„ƒƒ„‚€ƒ‡‰ƒ|vtvz}€€€€€€€€€€€€€€€€„‡Šˆ„€€€€€€€~~~~~~~~~~~~|{}‚…ˆˆˆˆˆˆˆˆ„………‡‡‡‡††††††††…„…„…„…„†††††††††ˆŒŽŽŒˆ†ˆˆˆ‡ˆ‡ˆˆŒ‹‹ŠŠ‰‰ˆ‚ƒ„„„„ƒƒ„„„…†‡‰ŠŒŒŒŒŒŒŒŒ‘‘ŽŽŽŽŽŽŠŠŠŠŠŠŠŠˆˆ†…ƒ€€‚‚‚‚ƒ„…†‚‚ƒƒ„„ƒ‚‚‚‚‚‚‚‚ƒ„†‡ˆˆˆ‡‹Š‰†„€€‚‚„„…†……………………ˆ…„†ŠŒ‹ˆŠ‰ˆ‡Œ‹…ƒƒ‡ŒŒ†‚‚‚„„„„ƒ‚‚‚‚‚‚ƒ‚ƒ‚ƒ‚ƒ‚…………†…†……………††††‡‡‡†††††‡†‡ˆ†ƒ‚‚‚‚ƒƒ„……ƒ‚ƒ‚„„ƒ‚‚‡Œ‹…€€€€€€€€€€€€€€€€€vtrty~‚„‚„…†„ƒƒ„ƒƒƒƒƒƒƒƒ…†‡‡…ƒ€xxxxxxxx}€}}~€€€€|yz{~}|~~~~~~~~{{zzzyyy{{{{{{{{{zyyyz|}€€~€€}ywwwvwvwwwxxvusrqqoooooooorrrrrrrrsqpty||zzzzzzxwvxxwwvvvvy~€€€‚~~}|zzz{{zz{}~€‚‚‚‚‚‚‚‚‚ƒ€„…†…€~uopqqostkflsx|}}yohku{€„…„‚‚ƒƒ„…………†††…ƒ‚‚€ƒ‚|}}~~~}}~~|{{||{zz|}~~||{~ƒƒ‚‚‚ƒ„…†††…‚‚„„„„ƒ„„„…ƒƒƒ‚„‰‹„{utwz|€€€€€€€€€€€€€€€€†ŠŒŠ…€€€€€€‚€~‚‚‚‚‚‚‚‚~€€€‚†‰ˆˆˆˆˆˆˆˆƒ„„…†‡‡ˆƒƒƒ„„„……„„„„„„„„ƒƒƒƒƒƒƒƒƒ…ˆŠŠˆ…ƒ……………………‰‰ˆ‡††…„€‚ƒ„„„„†……„„…††……………………ƒƒƒƒƒƒƒƒŽŽŽŽ‘‘‘‘‘‘‘‘‘ŒŠ‡…„†……„…†‡ˆƒƒ„……††‡„ƒ‚‚‚‚‚‚‚‚‚‚„…†ˆ‰Š‰‰Ž‹ˆ…ƒ~€‚ƒ…†‡……………………†…„†‰ŒŠ‰‹‹ˆ‡‹Š„ƒ‚ƒ†‰ŒŒ†‚‚‚„„„ƒƒ‚‚‚‚‚‚‚ƒ‚ƒ‚ƒ‚ƒ………†…†††……………†††‡‡††††††‡†‡ˆ†ƒ‚‚‚‚‚ƒ„…„ƒ‚€€€‚‚ƒ„…‚~‚‡Œ…€€€€€€€€€€€€€€€€€usrsy~‚„ƒ„„ƒ‚‚ƒ‚€~~~~ƒ~|~€yyyyyyyy|}~|{}~~~€€€~{xxz||z{{{{{{{{}|{zzyzz||||||||~~}}}‚„ƒ‚€€€‚‚}{||||||||~}zxutsyyyyyyyysssssssssposz~}zyz{{{zyyyyxxwwwvy~€€‚‚€€‚€€~~}|{zz{|z{||~€€‚‚‚‚‚‚‚‚‚‚ƒ…†€€wrqnlowwnlu{y}vmmu{€„…„ƒƒƒ„……††……†…„ƒ€‚€ƒƒ}~~~~}}|}€}{}~}{zyz{{{|{|}ƒƒ‚‚‚ƒ„…‡‡†ƒ‚‚ƒ„„ƒ‚ƒƒ„„…ƒ‚ƒ‚…ŠŒ„zttwz|€€€€€€€€€€€€€€€€ˆ‹ŽŒ‡‚‚€€€€~€‚ƒ……„„‡‡‡‡‡‡‡‡‚„††††ˆŠ‰‰‰‰‰‰‰‰„„…†‡ˆ‰‰„„„„ƒƒƒƒ††††††††……………………‡†„‚‚„†‡††††††††††…„ƒ€€‚ƒ„………„„ƒ„„…†……………………‚‚ƒ„…††‰‰‰‰‰‰‰‰‡‡‡‡‡‡‡‡‹‰‡„ƒ‚†…„ƒƒƒ„„ƒ„„…†‡ˆˆ„„ƒ‚‚‚‚ƒ‚€‚‚…†ˆ‰ŠŠŠŠŒ‹Šˆ†„ƒ‚€ƒ„……………………………„…†‰ŠŠŠŒŠ‡…ˆŒ‡………„…‡ŠŒ†‚‚‚„„„„ƒ‚‚‚‚ƒ‚ƒ‚ƒ‚ƒ‚…………††††„„……††‡‡‡‡†………††‡†‡ˆ†ƒ‚‚‚‚‚ƒ„„„ƒ‚‚‚‚ƒ…„‚€}‡Œ…€€€€€€€€€€€€€€€€tsqsx~ƒ„€‚„„‚‚‚‚‚‚€~}||}}}}}}}}y}€}xw{€{{{{{{{{z|}|zz{}}}}~~‚||€€~~~~~~~~~}|{zzzzzzzzzzzz~~€‚ƒƒƒƒ‚‚€‚ƒƒƒ‚€xxxxxxxxyxwvtsrrwwwwwwwwwwwwwwwwwsrv}||}~~~|||{{zzyx~€‚‚€€€€€‚‚~}|{{{{|{{||}~‚‚‚‚‚‚‚‚„„‚‚ƒ…~€‚|wvqpv~zomvz{}}€xppu{€„…„ƒƒ„„…††‡…………„ƒ€‚€ƒ‚~~}}||~€}}~€|{|||||{{~ƒƒ‚‚‚ƒ„…‰ˆ†„‚‚ƒ…„ƒ‚‚‚‚ƒ„…ƒ‚ƒ‚…‹…zttwz|€€€€€€€€€€€€€€€€ˆ‹ŽŒ†‚€€€€}‚…ˆ‰‰‰‰‰‰‰‰‰‰‰ˆŠ‹‹ˆ‡‡‡‰‰‰‰‰‰‰‰……†‡ˆŠŠ‹‡††„ƒ‚ƒƒƒƒƒƒƒƒ……………………‡‡†……†‡‡„„ƒ„ƒ„„„†…„ƒ‚€…„ƒƒƒ„…†‚‚‚ƒ…‡‰Š……………………}~ƒ„††ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ‹‹Šˆ‡…„ƒƒ‚~‚‚ƒ„…††‡…„ƒ‚€€€‚‚ƒƒ‚‚€€‚‚†‡ˆŠ‹‹‹Šˆˆ‡††…„„‚‚ƒƒƒ……………………„„…†ˆ‰Š‹‹‰…ƒ†Š‰…‡‰Š‰ˆˆ‹ŽŒ†‚‚‚„„„ƒƒ‚‚‚‚‚ƒ‚ƒ‚ƒ‚ƒ………†††††„„……††‡‡‡‡†………††‡†‡ˆ†ƒ‚‚‚‚‚ƒ„„„ƒ€‚‚‚‚‚‚‚‚‚‚‚„…„‚}‡Ž…€€€€€€€€€€€€€€€€wursx~ƒ‡†…„ƒƒƒƒ€€€€~~}|{{{|}|{zyyz{|zzzzzyyy}}xuvwwzzzz|~~zx|€€~~~~}}~~~}|z|~~{wx{~~|{{|wz~ƒ‚€€‚ƒƒ‚€ƒƒ„„ƒ~yxwvuvxzy||wuvxwvwxyyxwvtuuuvvvwvutvz|}}}~€€}|}~}{yxy{€‚€€‚ƒ‚€€€€€€}}|{{zzy{{|}~€€€€‚ƒƒƒƒƒ‚‚ƒƒ‚‚€~€}vpqz‚€€€{smtyƒ„ƒƒƒ„„„„…………†……††ƒ€€€€€€~~}|||||}}~~~~~}}||||{{}ƒƒ‚‚…‡ˆˆ‡†„ƒ„…ƒƒƒƒƒƒƒƒ††…„…ˆ‹…}vtv{~€€€€€€€€€€€€€€€€„ˆ‹Š†‚ƒ€€~~‚ƒ„„………‡‡‡‡‡‡‡‡ˆˆˆˆˆˆˆˆ‡‡ˆˆˆ‰‰‰ˆ‡ˆ‹ŒŠŠŒ‹ŒŠ‡……„ƒ†††……„„„„„„„„„…………………………„„ƒ‚ƒ„†‡‡…„‚€€‚ƒƒ„„ƒƒ†„‚‚„†„‡‡ƒƒ…„‚‚„ƒ„‰‡‡‡‡‡‡‡‡‡‡ˆ‡ˆ‡ˆ‡ˆ‰Š‰†„ƒ„‚~{|}}~€„‚€ƒ„„„ƒƒ‚‚‚ƒ‚‚‚‚‚‚‚ƒ†††‡‡ˆˆ‰‹‰‡††…ƒ‚‚‚€€…††††…„ƒƒƒ„„…††‡~€„‰Œ‹‡„…„ƒ„†‰Œˆƒ‚ƒƒ„„ƒƒ‚€‚‚‚‚‚ƒƒƒƒ„……†‡‡‡‡†………†††††„„…††…„„…†ˆ‡…ƒƒƒ‚‚‚‚€‚‚ƒƒƒƒ‚‚€€€€€€€€‚‚‚‚‡ˆ‚}ˆŒŠ…‚€€€€€€€€€€€€€€€€wsopv†Šˆ‡†……………ƒƒƒ„ƒƒ‚‚€~}|}}~||{zz{|}||||{{{{{~~{z|}}z{}~€€€|z{~~}~€~}||}~}|z{}~|yz{|}}|zyx{~‚‚€€‚‚‚‚‚ƒƒ„„„ƒƒ}|zywxz{y||wuvxwwwxxxwwvvvvvwwwwvutvz}~~}~€€~}{}~~{yyy{€‚€€€‚‚‚€€€€€€€}}||{zzz{{|}~€€€€‚‚ƒƒƒƒ‚‚‚ƒ„„ƒ‚€~~~|wsu|‚ƒ‚€}xqmty‚ƒƒƒƒ„„„„…………†……†…‚€€€€~~||{z||}}~~~~~||}}~|{{~€ƒƒ‚‚„‡†‡†…ƒ‚ƒ„ƒƒƒƒƒƒƒƒ…†„„„€‡‹…}vtv{~€€€€€€€€€€€€€€€€†Š‹†~~~~}}‚ƒ„„„„†††††‡‡‡ˆˆˆˆˆˆˆˆ‡‡‡ˆˆ‰‰‰†…†‰ŠˆˆŠ‹‹‰…ƒƒ‚€†††……„„„„„ƒ„ƒ„……………………………„ƒƒƒ…†‡†…„‚‚‚ƒ„„„„ƒ‚‚ƒƒƒƒ‚‚ƒ††‚€‚„ƒ‚‚„ƒ„‰‡‡‡‡‡‡‡‡ˆˆˆˆˆˆˆˆˆ‰Š‰†„ƒ„~{|}}~€„‚€ƒ„„„ƒƒ‚€‚‚ƒ‚‚‚‚‚‚‚ƒ…†ˆ‰ŠŠ‰ˆ‹‰‡††…ƒ‚‚‚€€„„…††…„„ƒƒƒ„„„„…†††‰‹Š„€€„‡‰Œˆƒ‚ƒƒ„„ƒƒ‚‚‚‚‚‚‚‚‚‚ƒƒƒƒ„††‡‡‡††…………†††††…††‡‡‡†……‡ˆ‡…ƒƒƒ‚‚‚€€‚‚ƒƒƒƒ‚‚‚‚‚‚‡ˆ‚}‚‡ŒŠ…‚€€€€€€€€€€€€€€€€yvrrx€‰ˆ‡‡††††††††……„„„ƒ‚€}}||||}}{{{zzyyy{~€~€}~€€€€|{{~~|}|}}}~}}|~|zz}~}|}{z{}}zvz{‚‚€‚‚ƒ„…„„ƒ„„…†€~|yxxyzy||wuvxwxxwvvvvvwwwwwvvvvutvz}~}~€€~}{}~}{yyz{€‚€€‚‚€€€€€€€€}}||{{zz{{|}~€€€€‚‚ƒƒ‚‚‚ƒ„ƒ‚€~}}{|{wsty}xxxvspnmuy~‚ƒƒƒƒ„„„„……………„…†…‚€€€€€~~~}}||{}}}}~~~~~~}}}|{{}ƒƒ‚‚‚„†………ƒ‚‚‚ƒƒƒƒƒƒƒƒ„…ƒ‚ƒ†‹…}vtv{~€€€€€€€€€€€€€€€€„ˆ‹‹†}|~~~~~~~~€‚ƒ„„„ƒ„„„……†††‡‡‡‡‡‡‡‡‡‡‡‡ˆˆ‰‰…„…ˆ‰‡‡‰‰‰ˆ†………ƒ††…………„„„ƒƒƒ„„„……………………………„„„…†‡†…ƒ‚‚‚ƒ„„„„ƒ€‚…‡‡…‚€„‡‡ƒƒ…„‚‚„ƒ„‰ˆˆˆˆˆˆˆˆˆˆ‰ˆ‰ˆ‰ˆˆ‰Š‰‡„„„}{|}}~€„‚ƒ„„„ƒ‚‚€‚ƒ‚€‚‚‚‚‚‚ƒ„†‰‹Œ‹‰ˆ‹‰ˆ††„ƒ‚‚‚€€‚‚„…††††………„„„„„ˆ…„†‹Œ‰…ˆˆ‡‡‰‹ŽŒˆƒ€‚ƒƒ„„ƒ‚‚€ƒƒ‚‚‚‚ƒƒ‚‚‚ƒƒƒƒ„†‡‡‡††……………†††††††‡‡‡‡‡†…‡ˆ‡…ƒ‚ƒ‚‚‚€‚‚ƒƒƒƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚†ˆ‚}ˆŒŠ…‚€€€€€€€€€€€€€€€€~|yy|†Š†††††††‡†…„„ƒƒƒƒ……„ƒ‚€~~~~~~{{zzyxxx|€‚€€}~~~~€{y|~||{|~€}|~|z{|~~~~|{{|{yx{}‚‚€€ƒ…†ˆ†„ƒ‚‚ƒ~zxwwvvy||wuvxwyxvvuvvwwwwvvuuuvutwz~~€€~}z|~~{zyz{€‚€€€€€€€~}}|{{zzz{{}}€€€€€‚‚‚‚€‚‚…„„ƒ‚€€xnijmmnnmihikuy~‚‚ƒ„„„„„……………„„†…‚€€€€€€}~}~}~~~||}}}}}~}~~~~}|||{{~€ƒƒ‚‚€‚„†………„‚ƒƒ‚ƒ‚ƒƒƒƒ„‚‚‚~…‹…}vtv{~€€€€€€€€€€€€€€€€ƒ‡ˆ†~|€‚„„„ƒƒ‚‚ƒƒ„„…………††††‡‡†‡‡‡‡ˆˆˆ…„…‰‰ˆ‡‰…†…ƒƒ„…ƒ……………………„„ƒƒƒ„„„……„…„…„……………………†…„ƒ‚‚‚‚ƒƒƒƒƒ‚„‡‰‰‡„‚‡ŠŠ†„†ˆ‡‚‚„ƒ„‰ˆ‰ˆ‰ˆ‰ˆˆ‰‰‰‰‰‰‰‰ˆ‰Š‰†„ƒ„}{|}}~€„‚€ƒ„„„ƒƒ€‚‚‚‚‚‚‚‚ƒ„…‡‰ŠŠ‰‰‹Šˆ‡…„‚‚‚‚€€€‚…†‡‡‡‡‡††……„„†ƒ…‹ŒŒŒŽ‘’Œˆƒ‚ƒƒ„„ƒƒ‚ƒ‚‚‚‚‚‚ƒ‚‚‚ƒƒƒƒ„††††††……………††††††††‡†††††‡ˆˆ„ƒ‚‚‚‚ƒ‚‚‚‚ƒƒƒƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‡ˆ‚}‚‡ŒŠ…‚€€€€€€€€€€€€€€€€€}|}€„‡††‡‡‡‡‡‡…„ƒ††……„ƒ‚‚€€~~~}||{{z|€ƒ€€~~~€‚ƒƒ€{y|~}{{}}~~~~~}|{}~}~~}{z{|}~€€‚‚‚‚‚€ƒ…††„ƒ€€€‚~zwxwvuy||wuvxwyxvuuuwwxwwvvuuuvtuw{~€€~‚€~|z|~}|zz{{€‚€€€€€€€~~}}|{{zzz{|~~€€€€€€‚€€€‚‚€€€€‚xlddhmnnjgegivy~‚„…„„„„……………„„†…‚€€€€€€~~~}}}}}||||||||}}|{|{|||{{}ƒƒ‚‚‚‚„††††„ƒ‚ƒƒƒƒƒƒƒƒƒƒ‚ƒ‚‚~~„‹…}vtv{~€€€€€€€€€€€€€€€€‚†‡†‚}ƒ………ƒ‚‚‚ƒƒƒ„„„„……†††††‡‡‡‡ˆˆ…ƒ…ˆ‰†‡ˆ†‡†ƒ‚ƒƒ‚………………………„„ƒ„ƒ„„„„…„…„„„…………………„„„ƒ‚‚‚ƒ€€‚‚‚‚„…‡‡‡‡…„‡ŠŠ‡…†ˆˆ‚‚„ƒ„‰‰ˆ‰ˆ‰ˆ‰‰‰‰‰‰‰‰‰‰ˆ‰Š‰‡„„„}{{}}„‚ƒ„„„ƒ‚‚€‚‚€‚‚‚‚‚ƒ……„…†ˆ‰‹‹‹Šˆ†ƒ‚‚‚‚‚€€€‚„††‡‡†††…„ƒƒƒ†ƒ‚„‹ŽŒˆƒ€‚ƒƒ„„ƒ‚‚€‚‚‚‚‚‚‚ƒƒƒƒ„…………††††………†††††‡†††††‡††ˆ‰‡…‚‚‚‚‚ƒ‚‚‚‚ƒƒƒƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚†ˆ‚}ˆŒŠ…€€€€€€€€€€€€€€€€~}||€…‰‡ˆˆ‰ˆˆˆˆ†…‚€€€„…………„ƒƒ‚‚ƒƒ‚€~}|{zz|€‚ƒ„ƒ€ƒ„„‚€~||}|zz|}}}~~~~~}}}~~|~}{{}€€€‚‚‚‚‚‚‚ƒ„…€€€€€‚„zxyzxvy||wuvxwxwvvuvwxyxxxwwvvuutw{~‚}|y{}}{zz{{€‚€€€€€€€€~~}}|{{{zz{|}~€€€€€€€€‚€€€‚€€€xmghlmmmlkklnwz~€‚„†„„„„……………„…†…‚€€€€€~}{{zz||||||||{|{|||{{|{{~€ƒƒ‚‚‚‚€ƒ…‡‡†…ƒƒƒ„ƒƒƒ„ƒƒƒƒƒ„‚‚~~…‹…}vtv{~€€€€€€€€€€€€€€€€…†‡‡…‚}~~~~~~~~„†‡†„ƒ‚‚‚‚‚‚‚‚‚ƒƒ„„……††††‡‡‡‡ˆƒ‚ƒ†‡……‡†‡†„„……ƒ„„…………††……„„„„„„„„„„„„„„„„……„„ƒ‚„ƒ‚‚ƒƒ€€‚‚‚‚…„„„„„„……ˆˆ„‚„†…‚‚„ƒ„‰ˆ‰ˆ‰ˆ‰ˆ‰‰‰‰‰‰‰‰‰ˆ‰Š‰†„ƒ„€}z|}~„‚€ƒ„„„ƒƒ€‚‚‚€€€‚‚‚‚‚ƒ…„ƒ‚„†ŠŒŒŒ‹‰…ƒ‚‚‚‚‚€€€‚„…†††„„ƒƒ‚ƒ‚‚‚‚ƒ†ŠŽ‘ŽŽŒˆƒ‚ƒƒ„„ƒƒ‚‚‚‚‚‚ƒƒƒƒ„……………††‡………†††††ˆˆ‡‡‡‡‡ˆ‡ˆ‰ˆ„‚‚ƒƒƒ‚‚‚‚ƒƒƒƒ‚‚‚‚‚‚‡ˆ‚}‚‡ŒŠ…‚€€€€€€€€€€€€€€€€€€‚†‰‡ˆˆˆ‰ˆ‡‡†„‚€€‚ƒ„………„ƒƒ„„„ƒ‚€~~|{zzy~ƒƒ‚ƒ„…„‚~~||}|yy{{{|}~~}}~~~~}~~}}}ƒ€€€‚ƒ‚‚ƒƒ„ƒƒƒ€€€€€ƒ}xwyzyvy||wuvxwwwvvwwxyxxxxwwwwutuw|€‚‚€‚}|y{}}|z{|{€‚€€€€~~~~}||{{zz{|}~€€€€€€€€€€€†…„‚€}}}ysomlmpppruvwvwz}€‚„†„„„„…………†……†…‚€€€€~}}||{{z}}}}}}}}z{|}~|{z|{{}ƒƒ‚‚‚‚ƒ…‡‡‡…ƒ‚ƒ„„„„„„„„„ƒ„‚‚ƒ…‹…}vtv{~€€€€€€€€€€€€€€€€……„ƒ‚€~}}}~~~~€‚…‡ˆ‡…ƒƒƒƒ‚‚€‚‚ƒ„„……††††‡‡‡‡ƒ‚ƒ†‡……‡ƒ„„‚‚„„ƒ„„„……†††††…„„„……„„„„„„„„‚ƒ„„„ƒ€ƒƒ‚‚ƒ„‚ƒ„„„ƒƒ„„„„„„„„…ˆˆ„‚„……‚‚„ƒ„‰ˆˆˆˆˆˆˆˆ‰‰‰‰‰‰‰‰ˆ‰Š‰†„ƒ„€|{{}~„‚€ƒ„„„ƒ‚‚‚€€€‚‚‚‚‚ƒ„„„„…ˆŠ‹ŒŒŒ‰…ƒ‚‚‚‚‚€€€€‚ƒ…………„„…………††‚„‡ˆ‰‰ŒŽ‡ˆˆˆˆˆ‡‡Œˆƒ€‚ƒƒ„„ƒ‚‚€‚‚‚‚‚‚‚ƒƒƒƒ„†……„……††………†††††ˆ‡‡††‡‡ˆ‡ˆ‰‡„‚ƒƒƒƒ‚‚‚ƒƒƒƒ‚‚‚‚‚‚‡ˆ‚}ˆŒŠ…‚€€€€€€€€€€€€€€€€ƒ‡ˆ‡††‡†‡‡ˆ‡‡†……ƒ€~}}~€ƒ„……„„„………„ƒ€‚€~}||€‚}{}€€‚‚‚‚‚|y{}{yx|{zzz|}~€€~}|€}{|‚ƒƒ€€€‚ƒ‚ƒ„……„‚‚‚ƒ‚€~|zutwywty||wuvxwvvvwwxyywwwwvvvvutux|€‚‚€‚}{y{}}{{{|{€‚~€‚€€~~~}||{{zz{|}~€€€€€€€€|yvsqpqmikqwyy}{{}€|xz}€„†„„„„…………†……††ƒ€€€€|||}}~~~~~~~~~~~|||}}}|||{{}ƒƒ‚ƒƒ‚€ƒ…†††„ƒ‚‚ƒ„„„„„„„„„„ƒ‚ƒ†‹…}vtv{~€€€€€€€€€€€€€€€€€~~~~~~~€€€‚…ˆ‰‡…„…„ƒ‚€‚‚ƒ„………††††‡‡‡…„…ˆ‰‡‡ˆ‡‡†„ƒ„ƒ‚„„„……†††††………………„„„„„„„„‚‚ƒ„ƒ‚€ƒƒ‚‚ƒ„ƒƒ„…………„„……††……„†‰‰…ƒ…‡‡‚‚„ƒ„‰ˆˆˆˆˆˆˆˆ‰‰ˆ‰ˆ‰ˆ‰ˆ‰Š‰†„ƒ„€|z|}~‚„‚€ƒ„„„ƒƒ‚€‚€€€‚‚‚‚‚ƒƒ„…‡ˆ‰Š‹ŒŒŒ‰…‚‚ƒ‚‚‚€€€‚„„„„„‡ˆˆ‰ŠŠ‹‹‰ŒŽŒ†ƒƒ„…††††…„„Œˆƒ‚ƒƒ„„ƒƒ‚ƒƒ‚‚‚‚ƒƒ‚‚‚ƒƒƒƒ„‡†…„„„……………†††††‡†…………†‡‡‰‰ˆ„€‚ƒƒƒƒƒ‚‚ƒƒƒƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‡ˆ‚}‚‡ŒŠ…‚€€€€€€€€€€€€€€€€€€ƒˆŠˆ‡ˆˆˆˆˆ‡‡‡‡‡„~||}~€ƒ„…………………„„ƒ„‚‚ƒ‚€}‚„}|zz~~~€‚€~zy}}yxzz}}{{}€‚‚~||~€‚ƒ‚€€‚ƒ†‡‡„€~€‚€€{ttwzywz|{vsuxxyxwvvwyzvvwwxwvvvutw{~€€‚‚{x}}}|yz}€€€€€€€€€€€€€€}}}€~|||yz{|}~€€€€€€€€€€€€‚|yvqichfflu|~~€€~~}}z{~€‚ƒ„„‚ƒƒƒ„„„„†„ƒ„„‚‚„ƒ‚€‚‚~}}||{{zz{||}~~~}}~~~~}}~|{|€‚ƒƒ‚‚‚‚ƒ„„‡ˆ‡ƒ‚ƒƒ‚ƒ„„ƒ‚……}‡Š…~xwy}€€€€€€€€€€€€€€€€€‚€|{}~}~~~~~~~~~…‡‡‡††††…„ƒƒ‚‚€€€‚‚‚ƒƒ…†ˆ‰„„†Š‹‰ˆ‰Š‹Š†„ƒ‚…„ƒ„…†……†………†††………………………„„ƒƒ‚‚ƒƒƒƒƒƒƒƒ€‚„†‡‡…„…ƒ‚„††„…‡ˆ‡…„…‡ƒ‚‚„‚€ƒ‡‰ˆˆˆˆˆˆ‡ˆˆˆˆ‰‰‰‰ˆŠ‹Š‡„ƒ„€~||||~€ƒ‚€„…†…„ƒ‚€€€€ƒ…†…ƒ‚„‡Š‹‰†ƒ‚€€‚ƒ‚‚‚ƒƒƒƒ„……†‰ŽŒˆ„ƒƒƒƒ„„……††‰‡„‚‚ƒ„„„ƒƒ‚€‚ƒƒƒƒ‚‚„…„‚‚„††……††‡‡†††††‡‡‡‡††………………‡ˆ‡…‚‚ƒ‚‚‚‚‚„……ƒ‚‚ƒƒ‚‚‚ƒ„‚‚‚‚‡ˆ‚‡ŒŽŒ†‚€€€€€€€€€€€€€€€€€€ƒˆŠˆ‡ˆˆˆˆˆˆˆ‡‡‡…~||}~}~€‚ƒƒ„„…†……„„„ƒ‚‚ƒ‚}€‚~}}€€€‚‚€~zy|}zy|~}|||||}}€€~}|}}€‚ƒ€€‚ƒ„†…„‚€€€€€€€{utwyxvz|zvsvxxwvuuuvwxwwvvvvvwvutw{~€€‚‚‚€{x}€}}{y{}€€€€€€€€€€€€€€}}}~}{{|yzz|}~~~~€€€€€€€€€€~vkchfflu|~~€€~~}}z{~€‚ƒ„„ƒƒƒ„„„„……„„†…ƒ‚ƒ‚€‚‚}~}}||{{}}}}}|||}}~~~~}}~|{|€‚ƒƒ‚‚‚‚‚ƒƒ„‡ˆ†ƒ‚ƒƒ‚ƒ„„ƒ‚ƒ„…}€†Š…~xvw{~€€€€€€€€€€€€€€€€‚‚€|{}~}~~~~~~~~~…‡‡‡†‡††……„ƒƒƒ‚‚€€‚‚ƒ…†‡ƒ„†Š‹‰ˆ‰‡ˆˆ…ƒ„„ƒ…„ƒ„…†………†††………†……………………„„ƒƒ‚‚ƒƒƒƒƒƒƒƒ„„„………„„„„ƒƒ„…„„‹‹‰‡„„†‰ƒ‚‚„ƒƒ‡‰‰ˆ‰ˆˆˆˆˆˆˆ‰‰‰‰‰ˆŠ‹Š‡„ƒ„~||||~ƒ‚€ƒ††…ƒƒ‚€‚€€„†‡…„ƒ…‡‹ŒŒŒ‹ˆ…‚€„„ƒƒ‚‚‚‚‚‚‚ƒƒƒ…„ƒ‚ƒ‡‘ŽŒˆ„ƒƒƒƒ„„……††‰‡„‚‚ƒ„„„ƒƒ‚€€‚ƒƒƒƒ‚‚ƒ„„‚‚‚„††……††‡‡†††††‡‡‡‡††………………‡ˆˆ…ƒ‚ƒ‚‚‚‚‚„……ƒ‚‚‚‚„‚‚‚‚‡ˆ‚…ŠŒŠ„€€€€€€€€€€€€€€€€ƒˆŠˆ‡ˆ‰‰‰ˆˆˆˆˆ‡…‚~}|~~|}}~€€‚ƒ„…†††……„ƒƒƒ‚€~€‚€€€‚„„‚zy{}{|~|z|}|{||}~~~}|}}~€‚‚‚ƒ„……‚€€‚‚€€‚‚‚€~}zvuwyxvz|{usuxxwwwwwwxxwwvuuvwwvutw{~€€~‚ƒ‚‚€zy~€~||{y{}€€€€€€€€€€€€€€}}|}~}|{z{yz{{|}~~~}}}}~€€€€€€€€€€‚„ƒ{ofigglv|~}€€~~}}z{~€‚ƒ„„ƒƒƒƒ„„……„ƒ…‡†ƒƒ‚€‚‚}}~~~}|{~~}}|||{}}~~~~}}~|{|€‚ƒƒ‚‚‚‚‚„„†‡†‚€‚‚‚ƒ…†„‚‚‚„„}„ˆ„~xvvy{€€€€€€€€€€€€€€€€‚ƒ}{}~}~~~~~~~~~…‡ˆ‡††‡‡†……„„„„ƒ‚€€€‚ƒ„ƒƒ…‰Š‰ˆˆ†ˆ‡…„„…„…„ƒ„…†……„…‡†…„…†……………………ƒƒƒ‚ƒ‚‚‚‚‚‚‚‚‚‚‚ˆ†„‚‚‚„„„„„ƒƒ„†ˆ‘Œˆ„ƒ†‰ƒ‚„ƒƒˆ‰‰‰‰‰ˆˆˆˆˆ‰ˆ‰‰‰‰ˆŠ‹Š‡„ƒ„~||||~ƒ€„…†…„ƒ‚€‚‚‚‚…‡ˆ‡††‡‰‹Š‹ŒŒ‹ˆ…‚†‡ˆ‡‡„‚‚‚‚ƒƒƒ‚ƒƒƒ„†‹ŽŒŽŽŒˆ…ƒƒƒƒ„„……††‰‡„‚‚ƒ„„„„‚‚€‚ƒƒƒƒ‚‚ƒ„„‚‚ƒ„††………††‡†…††††‡‡‡††………††…‡‰‡…‚‚ƒ‚‚‚‚‚ƒ…„ƒ€‚€‚ƒ‚‚‚‡Š„ƒ†ŠŒ‰„€€€€€€€€€€€€€€€€~‚ˆ‰ˆ‡ˆ‰‰‰‰ˆˆˆˆ‡…}}~}}}~€€ƒ……††††††……ƒ‚€‚„‚€€}ƒ……„ƒ€|y{{{|~|zz{}||}{{{||}||}~~€‚€‚ƒ„……ƒ~€‚ƒ€‚ƒ€}{{xuuwyyxz|zvsvxxvwwyxxxwwvvvuvvwvutw{~€€}~‚ƒ‚‚yz~€}{{zy{~€€€€‚€€€€€€}}{{|{{zzzyzz{{|}}|||||}~€€€€€€€€‚‚|smjhgmu}~}€€~~}}z{~€‚ƒ„„ƒ„ƒ„„…………„„‡…ƒƒ‚€‚‚|}~~~||~}}}|}}}}~~~~}}}~|{|€‚ƒƒ‚‚‚‚ƒƒ„†‡…‚€‚‚ƒ‚‚ƒ……„ƒƒƒ„…~}ƒ€{xvwy{€€€€€€€€€€€€€€€€ƒ„}|}~}~~~~~~~~~…‡‡‡†‡‡‡‡‡††……†…„‚~€‚„ˆ‰‡†‡ˆ‰ˆ…ƒ„„„…„ƒ„…†……„…††„……†……………………ƒƒ‚ƒ‚ƒ‚‚‚‚‚‚‚‚‚‚ˆ†„‚‚ƒ„„……„‚„ˆŒ““Œ‡…†‡‚‚„ƒ„ˆ‰Š‰‰‰‰ˆˆˆ‰ˆ‰‰‰‰‰ˆŠ‹Š‡„ƒ„~|}}|~ƒ‚€ƒ††…ƒƒ€‚ƒƒ‚‚ƒ†‰‰‰ˆˆ‰ŠŒŠ‹‹Œ‹Šˆ‡‰Š‹ŒŠ‡‚€‚‚‚ƒƒƒ€ƒƒ„†‰‹ŒŽŒˆ…„„ƒƒ„„……††‰‡„‚‚ƒ„„„ƒƒ‚€€‚ƒƒƒƒ‚ƒ„„‚‚ƒ…††…………††…†…†††††‡††……†††…‡ˆˆ…ƒ‚ƒ‚‚‚‚‚„……ƒ‚‚‚‚ƒ‚‚‚‡‹‡†‡ŠŽ‹†€€€€€€€€€€€€€€€€~~‚‡‰ˆ‡ˆ‰‰‰ˆ‰ˆˆˆˆ…‚}}~€‚ƒ……†††‡‡‡†…„„……ƒ‚€€€€‚„……ƒ‚}{z{{||z|}|{|}|zzzz{{|}~~€€€‚‚ƒ„„„€€€€‚‚‚€‚~{yuttuxz{{z|{utuxxtuvwwwvuuuvvwvvuvutw{~€€}~‚‚y{~|zzzx|~€‚€€€€€€€}}{zzzzzzyzzzz{{||{{{{|}~€€€€€€€€ƒ€€{upkiimv|~}€€~~}}z{~€‚ƒ„„„„„„……††‡…„…„‚ƒ‚€‚‚|}~~~~}~~}}||}}~~~~~}}|~|{|€‚ƒƒ‚‚‚‚‚„„†‡†‚€‚‚ƒƒƒƒ„ƒƒƒ„ƒ„…‚}|~}{ywxy{|€€€€€€€€€€€€€€€€„„‚}|~~}~~~~~~~~~…‡ˆ‡‡†‡‡‡†‡†††‡†…ƒ‚‚‚‚€~€€€ƒ†ˆ†…†‡ˆ‡ƒ‚‚„ƒ…„ƒ„…†……†…„„†……„……………………‚‚ƒ‚ƒ‚ƒƒ‚‚‚‚‚‚‚‚…„„ƒƒƒ„„„…†……‡Œ’””‘Œ‡„„‚‚ƒƒ„‰Š‰‰‰‰ˆ‰ˆ‰‰‰‰‰‰ŠŠˆŠ‹Š‡„ƒ„}}}}ƒ€„…†…„ƒ‚€€‚ƒƒ‚‚„‡‰ŠŠŠŠ‹‹ŒŒ‹‹‹Š‹Š‹‹‹ŒŽŽŒ‡ƒ€‚‚‚ƒƒƒƒ‚€ƒ‰‹ŽŒˆ…„…ƒƒ„„……††‰‡„‚‚ƒ„„„„‚‚€‚ƒƒƒƒ‚‚„ƒƒ‚„…††……………†……†…†††††††††††‡…‡‰‡…‚‚ƒ‚‚‚‚‚ƒ…„ƒ‚‚ƒ‚‚‚ƒ‚ƒ‡ŒŠ‰Š‹‹…€€€€€€€€€€€€€€€€}}‡‰ˆ‡‰‰‰ˆˆˆˆˆˆˆ†‚}~~€€€€€~€‚ƒ„„„„…‡‡†………††‚€‚‚‚‚ƒ„…„€~{{{{{{{~}{{{zzyyyz|}~~€€€‚ƒƒƒ‚‚€‚‚€€€€~|yxsstvxyz{z|zvsvxxuvvwwwvvuuvwwvuuvutw{~€€~~€€€z|{xyyx|‚ƒ€€€€€€€€}}{zyxyzzyzzzzz{z{zzz{|}~€€€€€€€€€€€€|tmljinv}~}€€~~}}z{~€‚ƒ„„„„„……†††ˆ†„…ƒƒƒ‚€‚‚}}}}}~~€€~}||||~~~~~}||~|{|€‚ƒƒ‚‚‚‚ƒƒ„†‡†‚€‚‚ƒƒƒƒƒ‚ƒƒ„ƒƒ…ƒ~{{yxxxy{|}€€€€€€€€€€€€€€€€……‚~|~~|~~~~~~~~~…‡‡‡†‡†‡†‡††††‡†…„„„„„‚‚€‚€€ƒ‡ˆ†…†„†„‚€‚„„…„ƒ„…†……†…ƒ„…†…„……………………‚‚‚ƒ‚ƒƒƒ‚‚‚‚‚‚‚‚‚‚ƒ„„„„ƒ…††‡ˆ‹Ž‘‘”–”ˆ„‚€ƒƒ‚„‰‰‰‰‰ˆ‰ˆˆ‰‰‰‰‰ŠŠŠˆŠ‹Š‡„ƒ„}}}}ƒ‚€ƒ††…ƒƒ€‚‚‚‚„‡ŠŠ‹‹ŒŒŒ‹‹Œ‹ŠŠŠ‹Œ‹Ž‹ˆƒ‚‚‚ƒƒƒ‚‚ƒˆ‹ŠŒŒˆ†……ƒƒ„„……††‰‡„‚‚ƒ„„„ƒƒ‚€€‚ƒƒƒƒ‚€‚ƒ„‚ƒ„†††………………………†…†††††††††‡‡…‡ˆˆ…ƒ‚ƒ‚‚‚‚‚„……ƒ‚ƒƒƒ‚‚‚ƒƒ‚€‡ŽŠŠŠ‹‹ˆƒ€€€€€€€€€€€€€€€€|}†‰‡‡‰ˆˆˆˆˆ‡‡‡ˆ†ƒ~~€€€€~~}~€‚‚‚‚€‚„…„ƒ„†‡†€}€€‚„„ƒ~}|{{{|{z}~~}}|{zzyyyz|~€€€€‚‚ƒ‚€€€‚‚‚€€~}{yxwtuwwwwwwz|{vsuxxvwwwxwxwuuvvvvvuvutw{~€€€€~€€{|zwxyx|‚‚ƒ€€€€€€}}{zxxyzzzzzzzzzzzzzz{|}€€€€€€€€€‚‚|skmjjnw}~}€€~~}}z{~€‚ƒ„„„„……††††‡………„€ƒ‚‚‚}||||}€€~|||}}~~~~~}||~|{|€‚ƒƒ‚‚‚‚ƒ„„‡ˆ‡ƒ‚ƒƒƒ‚‚‚ƒƒƒƒ…ƒƒ…ƒ}zyxxyyz{||€€€€€€€€€€€€€€€€…†ƒ~|~~|~~~~~~~~~…‡ˆ‡††††††††††‡†…………††……„ƒ‚‚ƒƒ‚‚…ˆŠˆ‡‡†‡†‚‚„……„ƒ„…†………„„„………„……………………‚‚ƒƒ„„ƒƒƒƒƒƒƒƒ‚‚ƒ„„„ƒƒ††‡‰‘‘’”•’ˆ†…€ƒƒ‚…Љ‰‰ˆˆˆˆˆ‰‰‰‰ŠŠŠŠˆŠ‹Š‡„ƒ„‚}}}}‚ƒ‚€„…†…„ƒ‚€€‚‚„‡ŠŠ‹ŒŒ‹Š‹‹‹Š‹‹ŒŒ‹ŒŒŠ‡„‚‚‚ƒƒƒ€‚ƒƒƒ„‡‰ŠŒŒ‰†…†ƒƒ„„……††‰‡„‚‚ƒ„„„„ƒ‚€‚ƒƒƒƒ‚€ƒƒƒƒ…†††……„„………………†…†††††††‡‡ˆ…‡‰‡…‚‚ƒ‚‚‚‚‚ƒ…„ƒ‚ƒ‚‚‚‚ƒ€†ŒŒŒ‹ˆƒ€€€€€€€€€€€€€€€€||€†‰ˆ‡‰ˆˆˆˆ‡‡‡‡ˆ†ƒ€~~€€€~~}}}~€€€€|‚ƒ‚‚ƒ…‰…~z{{z{|}€ƒ…„‚€zzz{||{z}{{~}||zzyyz|~€€€€€‚‚ƒ‚~€‚ƒ‚‚}{yxwwwxyxvuttz|{vsuxxuuuvvvvvvvuutuvvvutw{~€€€~}€€||zwxyx}‚‚ƒ€€€€€€}}|zxxy{{zzzzzyyyyzzz{|~€€€€€€€€€‚|slmkjow}~}€€~~}}z{~€‚ƒ„„„………†††‡†……‡†‚€€ƒ‚€‚‚}|{{{}~~}||}~~~~~}||~|{|€‚ƒƒ‚‚‚‚‚ƒ„„‡ˆ‡ƒ‚ƒƒƒ€ƒ„„ƒ…ƒƒ…ƒ~yxyyzz{{zz€€€€€€€€€€€€€€€€††ƒ~|~~|~~~~~~~~~…‡‡‡††………†††††††………†‡‡‡‡…„„„„„„„†Š‹‰ˆ‰Š‹ˆ…‚ƒ„……„ƒ„…†……„………„ƒ„………………………‚‚ƒƒ„„ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ††‡‹“’‘””“‹ˆ‡‡€€ƒƒ‚…Љˆˆˆˆˆˆ‡‰‰‰‰ŠŠŠŠˆŠ‹Š‡„ƒ„‚}~~}‚ƒ‚€ƒ…†…ƒƒ‚€€ƒ‡‰Š‹ŽŒŠ‰ŠŠ‹ŒŒŒ‹‹‹‹‹‹‰†„‚‚‚‚ƒƒƒ„ƒ‚€€ƒˆŒŠ‹Œ‰†††ƒƒ„„……††‰‡„‚‚ƒ„„„ƒƒ‚€€‚ƒƒƒƒ‚ƒƒƒƒ…‡††……„„…………………††††††††‡‡ˆ…‡ˆˆ…ƒ‚ƒ‚‚‚‚‚„……ƒ‚‚€‚€ƒ‚‡ŽŽŠ…€€€€€€€€€€€€€€€€{}€„‡ˆ‰ˆ†ˆ‰‰‡…†‡ˆˆ„~{||z}}~~€€€€€€€‚„„€€‚‚ƒƒƒ‚~~~zy||||}}~~~{x{~~~~€€€‚ƒ„ƒ€‚€‚ƒƒ‚‚€|zxwvvwxxxxvutx{{ustvuxussuwxxwwvsstututtvz~~~€~{zwxxwy~€€€€‚|}zxxz{{zyyyxyzz{yyyz{}~‚‚€€}‚ƒ€xpkokhlt{~}|}€€}|yz}€ƒ…††„„„……†††††…„„ƒ‚‚€ƒ„‚}||~~{~~~~~~~~~}||~ƒƒ‚‚ƒƒƒ‚‚„†…††‚~}‚ƒ„„„„„…†…ƒƒ…‚{xxvyytty}~€€€€€€€€€€€€€€€€‚„ƒ|}~}~~~|„†††‡ˆ………………………†‡‡ˆ‡†…†††……„„„‚ƒ†ˆ‰‰‰ˆ‰ˆ‡…„„ƒƒ„„„……„„„……………………‡‡‡†…„ƒ‚…„ƒƒ‚ƒƒƒ‚ƒ„„………„‚‚‚ƒƒ…†‰Œ‘’“”Ž‘‘Œ‡„„…‚ƒ†Š‰‰ˆˆˆˆˆˆˆ‰ŠŠŠŠŠŠ‹‹‰†„„…€}|~~~€ƒƒ‚ƒ…‡†……ƒ€‚‚€‚‚‚‚‚‚‚‚€€ƒ‡‰ˆ‰Š‹Œ‹‹ŠŠ‹‹‹‹ŒŒŒŒŒŒ‰…‚‚……„‚ƒ‚€‚†ŠŒŒŽŽŒ‰…„„†††…„„ƒƒŠˆ†„‚‚ƒƒƒ‚‚‚‚‚ƒ„ƒƒ„‚ƒ…††……„„……ƒƒ„……†‡‡††††††††ˆ‰‹‰†ƒƒƒ‚ƒƒ‚‚„†…ƒ‚‚‚‚‚‚‚‚‚‚‚ƒ„‡‰ŠŽŽ‹†‚€€€€€€€€€€€€€€€€{}€„‡ˆ‰‰†‡ˆˆ‡‡†‡ˆˆ…}~~|€€€}}~€‚€€€€€€€€ƒƒ€€€~€‚‚‚‚~~{z|||||}}}~~yvy|}~€€€€ƒ„„ƒ‚‚‚‚€‚ƒ‚‚~}{yxwvvwxxxwwutx{zustvuxxvvuuvwutttssttuttvz~€€}}{zwxxwy~€€€€‚~|}{yyz{{zyyyyyzz{yyyz{}~|||||}}€|vokliglu}€€}~€€~}y{}ƒ……†„„„……††††‡‡‡…ƒ€~€€ƒ„‚€~}|~~~~~~~~~~~~~~~~~}||~ƒƒ‚‚ƒƒƒ‚‚„††‡†ƒ~€ƒƒƒƒƒ‚ƒ„……ƒƒ…‚|xxuyyvv{€€€€€€€€€€€€€€€€€‚„ƒ|}~}~~~|€„†††‡ˆ†††††††††††‡†††††††………„„ƒ…‡‰‰‰ˆˆ……„ƒƒƒ„„„„„„„„„„……………………‡‡‡†…„ƒ‚…„ƒ‚‚‚‚‚‚ƒ„„……„„‚‚‚ƒ„†ˆŠ‘’’“Ž‘‘Œ‡„„…ƒ„ˆ‰‰ˆˆ‡ˆˆˆˆˆ‰ŠŠŠŠŠŠ‹‹‰†„„…€~|~~~ƒƒ‚ƒ…‡†……ƒ€€‚€ƒ†‰‡ˆ‰‹‹‹‹ŠŠ‹‹‹‹ŒŒŒŒŒŒŒŒ‰…‚„„‚‡†……†ŠŽŽŒ‡ƒ‚„„„„„„„„‰ˆ†„‚‚‚ƒƒ‚‚‚‚‚‚‚ƒƒƒƒ„ƒƒ…††……„………ƒ„„……†‡‡††††††††‡‰Š‰†ƒ‚ƒ‚ƒƒ‚‚„……ƒ‚‚‚ƒ„†ˆŠ†‡ˆ‰‡„€€€€€€€€€€€€€€€€{}„‡ˆ‰‰‡‡‡ˆˆˆ‡‡‡ˆ…~€€~€€€~~€€€€€€€~‚€~€€‚ƒ„…†††~~{{|{||||}}}{wvx{|~€€€€‚‚ƒƒ‚‚ƒƒ‚€‚‚‚€€|{zxwwvvwwxxxwvuwzzusuvuwxywvtvwwuvwwttuuttvz~€€€~}|{zwxxwy~‚€€€€€~{~|{z{{{zzyyyyyz{zyzz{|~~€~€€}}}|ytpmjhhmv}~~€~}z{~€ƒ„……„„…………††‡‡†…„‚€€€ƒƒ‚€€~}|}|~}}~}~}~~~~~}}}||}ƒƒ‚‚ƒƒ‚‚‚„†‡ˆ‡„€~„ƒƒ„ƒƒ‚„……‚ƒ…ƒ|yyy||yy|€€€€€€€€€€€€€€€€€‚„ƒ|}~}~~~~~~}€„‡‡†‡‡†††††††††††…†…†††††………………†ˆ‰Š‰ˆ‡ˆ‡†„„ƒƒƒ„ƒƒƒƒƒƒ„……………………††‡‡†…ƒ‚…„ƒ‚€‚ƒ„„…„„ƒƒ‚‚‚ƒ„…‰ŠŒŽ‘’’‘ŽŒˆ„€ƒ„ƒ…‰‰‰ˆ‡‡‡ˆˆ‡ˆ‰‰Š‰‰‰Š‹‹‰†„„…~}~~}‚ƒ‚ƒ…‡†……ƒ€‚‚‚€‚‚‚‚…‡†‡ˆŠŠ‹ŠŠŠŠ‹‹‹‹ŒŒ‹‹‹Œ‹‰…ƒ‚‚„††…ƒ†…„„…ˆ‹ŒŽŽ‹†‚€€‚‚ƒƒ……††ˆ‡…ƒ‚‚‚‚ƒƒƒ‚‚‚‚‚‚‚ƒƒƒƒ„‚ƒ…††…„…„……„„……††‡‡††††††††‡‰Šˆ†ƒ‚‚‚ƒƒ‚‚„†…ƒ‚‚‚‚„†ˆ‰‚„……„‚€€€€€€€€€€€€€€€€{~…‡‰‰‰‡‡†‡‰Šˆ†…†ƒ}€€€€€€~~‚€‚‚ƒ„…………€~}|}||||||||zxwxz}‚‚‚‚‚€‚€‚€~zyxwvvwwvwwxxwvuvzzusuwvuwxxwwwxxxxyxvttuttvz~€€€€~}|{zwxxwy~€€€€€}{~}|{{{zzzzyyyzz{zzzz{|}~}zwutsqppomkjilkkpv}€€}}}~}}}}z|~‚„„…„„„……††††…„„ƒƒƒƒ€€‚ƒƒ|{}}{|~~~~~~}~€~}|}|{~ƒƒ‚‚ƒƒƒ‚‚„†ˆ‰ˆ…€€‚…„…„„ƒ„„……ƒƒ†ƒ}zz€€}{{}~€€€€€€€€€€€€€€€€‚„ƒ|}~}~~~~~~~…‡‡†‡‡††††††††‡†……„…†‡††††…†……„†‡ˆˆˆ†…‰ˆ†…ƒ‚ƒƒƒ‚‚ƒƒƒ„„„„„„„„…†‡‡‡…ƒ‚…„ƒ‚€€€€‚ƒƒ„„„ƒƒƒƒ‚‚ƒ„…†‹Œ‘‘‘ŽŠ…€ƒ„„†Š‰‰ˆ‡‡‡‡ˆ‡ˆˆ‰‰‰‰‰Š‹‹‰†„„…~}~~}‚ƒ‚ƒ…‡†……ƒ€€‚‚ƒ‚‚€‚„‡‡‡ˆ‰‰ŠŠŠŠŠŠ‹‹‹‹‹‹‹‹Œ‹‰…‚„„…‡Š‹‹‰‹Š‰‰Š‹ŽŒŽŒˆ„ƒƒ„…………††‡‡†…ƒ‚‚‚ƒƒ‚‚‚‚‚‚‚‚‚ƒ‚„„ƒƒ…††……„………„……††‡‡‡††††††††‡‰‰ˆ…ƒ‚‚ƒƒ‚‚„……ƒ‚‚‚‚ƒ…‡ˆƒ„…‡††…„€€€€€€€€€€€€€€€€|~…ˆ‰Š‰ˆ‡‡ˆ‰Šˆ†ƒ„|{}~}}}~~€€€€€~~~‚ƒ€‚ƒ‚‚ƒ„…………€€~}}||||||{{{z{~ƒ‚‚‚ƒƒ€‚€€€€~}yxwwvvwwuvwxxwwvvyyusuwwwvwwyxwvuvwvvvusuttvz~~~€~~{zwxxwy~‚€€€€€€€€|z||}|{{zz{zzyzzz{{zzz{|}~}yuqnlkmmmmnnnoqqrtx{}}{{{z{{{{{|€ƒƒ„„„„…………††ƒ„…††„ƒ‚ƒƒ}{|~||}~~}}}}}~}|}||}ƒƒ‚‚ƒƒ‚‚‚„†ˆ‰ˆ…€‚…„……„„ƒ„…„‚ƒ…„~{{€€|{|~€€€€€€€€€€€€€€€€‚„ƒ|}~}}}~}~~‚†ˆ‡††‡††††††††‡†…„……†‡††††††††ƒ„†‡‡†…„„„ƒƒƒ‚‚ƒƒ„„„„„„„„„…‡ˆˆ†„‚…„ƒ€€€ƒƒ„„„ƒƒ‚ƒƒƒƒ„…‡ˆŒŽ‘‘‘‘‘ŽŒˆƒƒ„ƒ†Š‰‰ˆ‡‡‡ˆˆˆˆ‰‰‰‰‰ˆŠ‹‹‰†„„…‚}~~}~ƒ‚ƒ…‡†……ƒ€‚‚‚€‚‚ƒ„‡ˆˆˆˆ‰‰ŠŠŠŠŠŠ‹‹‹‹‹‹‹ŒŒ‰…‚‚‚„‡‹Œ‹‹ŠŠŠ‹ŒŒ‰‹ŒŠˆˆˆ‰ˆˆ‡‡‡‡††…„‚‚‚ƒƒƒ‚‚ƒ‚‚‚‚‚ƒƒ„‚ƒ…††…„…„……„„……††††……………………†ˆ‰ˆ…‚‚ƒƒ‚‚„†…ƒ‚‚‚‚ƒ„…†‡‡ˆ‡‡††…€€€€€€€€€€€€€€€€|~…ˆŠŠŠ‰ˆˆ‰‰‰‡†ƒ„|z||{{{|}~€€€€€€€€€€~~~~€ƒƒ‚‚ƒ„…†††‚ƒƒ€‚€~~~}}}}||~}{z}‚‚‚‚ƒƒ€€€‚€€€~||zyxwvvwwuvwxxxwwuyyusvxwzyvvwwussuvuvxxvuttvz~}~€€{zwxxwy~€€€€€€€€€€|yy{||{{{{|{zzyzz{{{zzz||}}zxvuuwwxyz{{{wwwyy{{{|{zzyz{|{}‚ƒƒƒ„„„……†††††††„ƒ‚‚ƒƒ€~}}~€€}~~~}}}}||}~~~~||}|{~ƒƒ‚‚ƒƒƒ‚‚„†ˆ‰ˆ…€‚…„„„ƒ‚‚ƒ„„‚ƒ†„||||}~|}€€€€€€€€€€€€€€€€€‚„ƒ|}~}|}}~~~€ƒ‡ˆ‡††‡‡‡‡‡‡‡‡‡††…†…††††††††‡†‡‚„…‡‡‡……‡†…„‚‚ƒ‚€€‚ƒ„„„„„„„„‚„‡ˆˆ†„‚„ƒ‚‚‚‚‚ƒƒƒ„ƒƒ‚‚ƒƒƒ„…‡ˆ‰‹ŒŽ‘‘‘‘’’‘‹†ƒƒƒ‚„‰ŠŠ‰ˆˆˆˆ‰ˆ‰‰‰‰‰‰ˆŠ‹‹‰†„„…‚}~~}~ƒ‚ƒ…‡†……ƒ€€‚‚‚‚‚…‡‹Š‰‰ˆˆ‰‰‰ŠŠŠŠ‹‹‹‹‹ŒŒŠ‡„€„ˆ‹‹Šˆˆ‡‡‡‡†††‰‹‹Šˆ‰ŠŠŠ‰ˆ‡‡††…„ƒ‚‚‚ƒƒ‚‚‚‚ƒƒ‚‚‚‚‚ƒ„„ƒƒ…††……„………„„„……†…†……………………†ˆˆˆ„‚‚ƒƒ‚‚„……ƒ‚‚‚ƒ……ˆˆ‡‡……„„€€€€€€€€€€€€€€€€|~‚…ˆŠŠŠ‰ŠŠŠˆ‡††††ƒ}{||z{{||}}}}€€~~~}€€~~~‚‚~~~€‚‚‚‚ƒ……‚‚„„~~}}}{~zx{~‚‚‚‚€€€‚€}|{{zywwvvvtuwwxxxwuxyusvxxzywuutuuvvvvvwxxuttvz~€€€~}{zwxxwy~‚€€€€€€€€€€€~{yvy{|{z{||{{zzzzz{{{z{{|}~|{{{{{yz|}}|{zz{|||{{{~}|{{{}~|}‚ƒƒƒ„„…………††‡†…„ƒ‚‚‚ƒ‚‚ƒ‚€~}~€€~|||}}}~~~~~}}}}}}||}ƒƒ‚‚ƒƒ‚‚‚„†ˆˆˆ„‚„„„„ƒ‚‚ƒ„„‚ƒ†…}}yy{~}z|€€€€€€€€€€€€€€€€€‚„ƒ|}~}||}}~~„‡ˆˆ††‡‡‡‡‡‡‡‡‡††††‡†††††††‡‡‡‡ƒ„†ˆ‰‰ˆ‡‹‰‡…„ƒ‚ƒ‚€€‚ƒ„„„„„„„„„‡‰‰‡„‚ƒ‚‚‚‚ƒ„„ƒƒƒƒƒ‚‚ƒƒ„„†‡‰ŠŠ‹‘’’‘’“”“’’’‰…ƒ‚€ƒ‡‹ŠŠ‰‰‰‰‰‰‰ŠŠŠ‰‰‰Š‹‹‰†„„…ƒ~~~|~€ƒ‚ƒ…‡†……ƒ€‚‚€ƒ†‰Ž‹‰ˆˆˆˆ‰‰ŠŠŠŠ‹‹ŒŒŒŽŒˆ…€€ƒ†ˆ‡†ŠŠŠ‰‰ˆ‡†…‡‰‰‡††‡‡†‡†††††„„‚‚‚ƒƒƒ‚‚ƒƒ‚‚‚ƒƒ„‚ƒ…††…„…„……„„„„…………………………………‡ˆ‡„€‚ƒƒ‚‚„†…ƒƒ‚‚ƒ„…ˆ‡‡……„„„€€€€€€€€€€€€€€€€|‚†ˆŠŠŠ‰‹ŒŠˆ†††ˆˆ„~{||z||||{{{{}}}~~~~~€€~~~~||}{‚‚ƒƒƒƒ††ƒƒ……‚€€~~~}{~yvy||€€‚‚‚}~€€~~€~}{z|{yxwvvvtuvxxxxwtxyusvxxwwwussvxxvuutssuuttvz~€€€€~}|{zwxxwy~€€€€€€€€€~{xux{|{z{}||{zzzzz|{{zz{|}~~}|{||}}~€}zx{|~~}||}€}||}€|}‚ƒƒƒ„„„……†††ƒƒ…………ƒ‚ƒ‚‚ƒ‚€~}}}€€~{||}~€€~~}}|}}}}||~ƒƒ‚‚ƒƒƒ‚‚„†‡ˆ‡„€„………„ƒƒ„…„‚ƒ†…€}~zy{~|xx|€€€€€€€€€€€€€€€€‚„ƒ|}~}|||}~~„‡‰ˆ††‡‡‡‡‡‡‡‡‡…†‡ˆ‡‡†……†††‡‡‡‡„…‡Š‹‹ŠŠ‹Šˆ‡†………ƒ‚€€‚ƒƒƒƒƒƒƒƒƒƒ‡‰‰‡„‚‚‚‚‚ƒ„…†ƒƒƒƒƒ‚„„„„†ˆ‰‹‰ŠŒŽ‘’’‘“”•”“““‘‹†„‚‚†‹‹Š‰‰‰‰Š‰‰ŠŠŠŠ‰‰Š‹‹‰†„„…ƒ€~~~|}€ƒ‚ƒ…‡†……ƒ€€‚‚‚‚‚‚‚‚‚‚€€ƒ‡‰ŽŒŠˆˆˆˆ‰‰‰ŠŠŠŠŠŒŒŽŽŒ‰†„ƒƒ…‡‡…„††††…„‚„†ˆ‡„‚‚‚ƒƒƒ„……††„ƒ‚‚‚ƒƒƒ‚‚„ƒ‚‚‚ƒƒ„ƒƒ…††……„………ƒ„„„„„„„………………………‡ˆ‡„€‚ƒƒ‚‚„……ƒ‚‚‚‚‚‚‚‚ƒ‚‚ƒ„ˆˆ‡††††‡€€€€€€€€€€€€€€€€||„ˆŠ‰ˆŠŠŠŠŠ‰ˆˆ‰ˆ„}z{|{{{zyyyyy||~€€€~~~||~€€‚„…„ƒ…„ƒƒ…†††‚‚€|}~|zy|€‚„„‚€€‚€€}{{|||{zyyxvuttuuvvvvvvyxvvwxxxuuuuuuuvttstuutstssvz}~}€€‚}{z~€|yzzwx|€‚€€€€€€€~}{{{{{{||{{{{{{{{zzzz{{{{|}~~~~}|~~~~~~~~}|{zz{|}}}}~~€|}‚ƒ„……„„„ƒ„…††…„…‡†ƒ‚ƒ‚€~}}}}}~~~~~~~~||}~~}||€~‚ƒƒ‚‚‚‚ƒ„„ˆˆˆ„‚„ƒƒ„„„ƒ‚‚„„„„ƒ€z{{zz|‚€€€€€€€€€€€€€€€€ƒ…„|}}}}}}}}~~}†‰‰ˆ‡ˆ‡‡‡‡‡‡‡‡††††‡‡‡†††††††††…‡ˆŠŠ‰ˆ‡‰ˆ‡…„ƒƒƒ€€€€‚‚ƒƒ„„ƒ…‡‡†…„…„‚‚„†††€‚„„ƒ‚‚ƒƒ‡‰‡†ˆ‰ˆŒŒŽ‘“””••••””“•’Œ……ŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠ‰ˆˆ‡††‚~|}}|‚ƒ‚‚ƒ†‡‡†„ƒ‚€€€ƒ„ƒƒ…ŒŠ‰ˆˆ‰‰Š‰‰‰‰ŠŠ‹‹ŒŒŒŒ‹Š‰‡†…„ƒƒ„„…………………………………………†††……………†…„‚ƒƒƒ‚‚‚‚‚‚‚„ƒ‚‚ƒ…†……„………………††††……††††††††††††…„‚‚‚‚‚€€ƒ„„‚€ƒƒ‚‚€€‚‚‚ƒ„†‡††††††††€€€€€€€€€€€€€€€€||„ˆŠ‰ˆŠŠŠŠ‰‰ˆˆ‰ˆ„}z{|zzzzzzz{{{{|}~~€~€€€€€€€€ƒƒ‚‚„…†…„…„‚ƒ„††…‚ƒƒƒ‚€€€}zyz|€‚ƒƒ€€€€€~|ywxzz{zyyxvuutuuuvvvvvxwuvxyyyvvvvvuuuvuttuvutsssvz}~}}~€~|zy~|yzywy|€‚€€€€€€€€~}||{{{{{{{{{{{{{{zzzz{{{{}}~~}}||||||||~}||}~||}}~~~}~€‚ƒ„„„„„ƒƒ„…†‡…„…‡†ƒ‚€‚‚‚€~}}}~~}|}€~}}}|}~~€~~‚ƒƒ‚‚‚‚‚ƒƒ„ˆˆˆ…€‚…ƒƒ„„„ƒ‚‚ƒƒƒƒ‚~z{zzz|€€€€€€€€€€€€€€€€ƒ…„|}}}}}}}}~~~}†‰‰ˆ‡ˆ‡ˆ‡ˆ‡ˆ‡ˆ‡‡ˆ‡†††‡††††††††…†ˆ‰Š‰ˆ‡…„ƒƒ‚‚‚‚€€‚‚‚ƒƒ€‚…†††‡ˆ„ƒ‚ƒ………€‚„„‚‚ƒ„…‰ŒŒ‹Œ‹‰ŒŒŒ‘’“””•••••”—”…€€ƒ‡ŠŠŠŠŠŠŠŠ‰‰‰‰‰‰‰‰ŠŠ‰‰‡‡††ƒ}}}|~‚ƒ‚‚ƒ†‡‡†ƒƒ‚€€€ƒƒƒƒ…‹‹‰‰ˆ‰‰Š‰‰‰‰‰ŠŠ‹‹ŒŒŒ‹‹Š‰‡†„ƒƒƒ„„„„„„„„„„……………………„„„„„„„„…„ƒ‚‚ƒƒ‚‚‚‚‚‚‚‚€‚ƒƒ‚‚ƒ……………„………………†††……††………………††††…„‚‚‚‚‚‚ƒ……ƒ‚‚‚‚‚‚‚ƒ„†‡‡‡‡‡‡‡‡‡€€€€€€€€€€€€€€€€||„ˆŠ‰ˆ‰‰Š‰‰ˆˆ‡‰ˆƒ|y{|zzzzzz{{|{zzz{}}}~€€€€€‚‚‚~|}~ƒ…ˆ‰‰ˆ…ƒ‚‚„……„„„…„„‚€‚€~|||{z~€‚‚€€€€€}zvtuwyzyyxwvvuuuuuvvvvvvutvz|{zxxwwvvuuwuuuvvvutssv{}~}|}~~|{y~{yyywy|€€€€€€€€€€~}}}||{{zz{{{{{{{{zzzz{{{{}~€€~}}}}}}}}}€~~€€}}~~~~€ƒƒƒƒ„„„ƒ„„††…„…‡†ƒ‚ƒ‚€~|}~€~~|{|€}|||||}~}}‚ƒƒ‚‚‚‚‚„„ˆˆˆ„‚„ƒƒ„„„ƒƒ‚‚‚ƒ‚‚€~}zz{zz{~€€€€€€€€€€€€€€€€€ƒ…„|}}}}}}}}}~~}†‰‰ˆ‡ˆˆˆˆˆˆˆˆˆ‡‰Š‰†…†ˆ††††††††„…‡‰‰ˆ‡†‡†…ƒ‚€€€€€‚„…††‡ˆ…‚ƒ„„ƒ€‚„ƒƒ‚„…ˆ‘‘Ž‹ŒŒŒŽ’’“””•–––•˜”„~‚…‰‰‰‰‰‰‰‰ˆˆˆˆˆˆˆˆŠŠŠˆˆ†††„€~}}|~ƒ‚‚ƒ†‡‡†„ƒ‚€‚€€‚‚„†‰‰ˆˆ‰‰ŠŠ‰‰‰‰‰‰ŠŠ‹‹ŒŒŒ‹Š‰†…„ƒƒƒƒ„„ƒ„ƒ„ƒ„„„ƒ„ƒ„ƒ„„ƒƒƒƒ„ƒ„ƒ„ƒ‚‚‚ƒƒƒ‚‚‚‚‚‚‚„ƒ‚‚ƒ…………„„„………………†……………………………††††…„‚‚‚‚‚‚„†…ƒ‚‚‚‚‚‚‚ƒ„†‡‡‡‡‡‡‡‡‡€€€€€€€€€€€€€€€€||„ˆŠ‰ˆ‰‰‰‰‰‰ˆ‡ˆˆƒ|y{{zzzzyzz{{zyxxy|}}~~‚‚|{|}€‚…‡ŠŠ‰„ƒƒ„ƒƒ…†…†…„‚‚~||}{|~€€€€€€€~zxutuwxxyyxwwvuuuuuuuvvwussw|}{zyyxwvvuuuuvwwussssvz}~}|~€€~}y}{xyxvz}€€€€€€€€€€}~~}|{{zz{{{{{{{{zzzz{{{{}~€€~}~~€€~€‚‚‚‚‚„„ƒ„ƒ…†‡…„…‡†ƒ‚€‚‚‚€~~~€€€~}}||}€~|}~~~~}|~ƒƒ‚‚‚‚‚ƒƒ„ˆˆˆ…€…„„„„ƒƒƒƒ‚‚‚}}z{zzy{}€€€€€€€€€€€€€€€€€ƒ…„|}}}}}}}}}~~}†‰‰ˆ‡ˆˆˆˆˆˆˆˆˆˆŠ‹Š‡…†ˆ‡‡‡‡‡‡‡‡„…‡ˆˆˆ†…ˆ‡†ƒ‚€€‚€€‚€€€€€€€€‚„……„„…†…ƒ‚„ƒ‚‚ƒƒ‚ƒ…‡‘“’‘‘ŽŒŒŒŽ‘’’“”•––––•’‹„~~‚†ˆˆˆˆˆˆˆˆ‰‰‰‰‰‰‰‰ŠŠ‰‰‡‡††„~~}|~ƒ‚‚ƒ†‡‡†ƒƒ€ƒƒ†‡‡‡ˆˆŠŠ‹‰ˆˆˆˆ‰‰ŠŠ‹‹ŒŒ‹ŠŠ††„ƒƒƒ„„ƒƒƒ„ƒ„ƒƒ‚‚‚‚‚‚‚‚ƒ„„„„………ƒ‚‚‚ƒƒƒ‚‚‚‚‚‚‚‚€‚ƒ„‚‚ƒ………„„„……………………………„„………………††††…„‚‚‚‚‚‚‚ƒ…††„‚‚‚‚‚‚‚‚ƒ„†‡‡‡‡‡‡‡‡‡€€€€€€€€€€€€€€€€||„ˆŠ‰ˆˆˆ‰‰‰ˆˆˆˆ‡‚|yz{yzzzyyyyyzyxwx{~€~~~~~}|€€€€‚„‚‚ƒ„††…„„‚€€‚‚„…………„ƒƒ‚|}€~zy|~€€€€€~}wvvwxxwvxxxwwvvuvvuuuvwwurrw~~zzzyxwvvursuvxvsqtssv{}~}|}€€~}x}~zxxxv{}~€€€€€€€€€~~~~||{zz{{{{{{{{zzzz{{{{}~~}||}}}}}|~}~}}}}}}~€‚‚‚‚„„„ƒ„„††…„…‡†ƒ‚ƒ‚€~€€}|{}~~~~€€€€~}{|}ƒƒ‚‚‚‚‚‚„„ˆˆˆ„‚„„„ƒƒƒƒƒƒ‚‚~|{{{zzz~€€€€€€€€€€€€€€€€€ƒ…„|}}}}}|||}~~}†ˆ‰ˆˆˆˆ‡ˆ‡ˆ‡ˆˆˆ‰Š‰‡†‡ˆ‡‡‡‡‡‡‡‡„…‡ˆˆˆ†……„ƒ‚€€€‚‚‚‚€~‚ƒ„„ƒ„…‡‡…ƒ‚ƒƒƒ‚‚ƒ‚‚ƒ†‰‘””‘‘Ž‘’’’“”••••‘މ‚~„ˆˆˆˆˆˆˆˆˆŠŠŠŠŠŠŠŠŠŠŠˆˆ†††„€~~~|‚ƒ‚‚ƒ†‡‡†„ƒ‚€€ƒ€€ƒ………‡‡‰‰ŠŠˆˆˆˆˆˆ‰‰ŠŠ‹ŒŒ‹‹Š‡‡…„„„……„„„„„„„„„„„„„„„„……††‡‡‡ˆ„ƒ‚‚ƒƒƒƒ‚‚‚‚‚‚‚„ƒ‚‚ƒ……„„„„„……†……„„„…†„„„……………††††…„‚‚‚‚‚‚‚ƒ…††„‚€‚‚‚ƒ‚‚‚ƒ„†‡‡‡‡‡‡‡‡‡€€€€€€€€€€€€€€€€||„ˆŠ‰ˆˆ‰‰‰‰‰ˆˆˆ‡‚{xzzy{{zyyyyyzyyxyz|}~~~~~}{{~}~€‚€€€‚„…„ƒƒ€€€‚‚ƒ„„„ƒƒ…‚€{wwz|~~~€€€€~}|uvvxyywuxxxwwvvvvvutuvwxvssx‚~yyyxxwwvvrstvwvsqsssvz}~}{|}~~}{zx|~zwxwu{}~~€‚€€€€€€€~~~}}||{{||||||||zzzz{{{{|}}~~}}|{{{{{{{{z{{|||{z{{{{zzyy{|~€‚ƒƒƒ„„ƒ„„…†‡…„…‡†ƒ‚€‚‚‚€~€€€€€~}|{~€€~}~€~}}}}}{{z}€ƒƒ‚‚‚‚‚ƒƒ„ˆˆˆ…€…„„ƒƒƒƒƒƒ‚‚‚ƒ€~}|}|{z{~€€€€€€€€€€€€€€€€€ƒ…„|}}}}||||}}~}†‰‰ˆ‡ˆ‡‡‡‡‡‡‡‡ˆ‡‡‡ˆˆˆˆ‡‡‡‡‡‡‡‡„…‡‰‰ˆ‡†ˆ‡…„‚€ƒƒ‚‚ƒƒ‚‚€~~€‚ƒƒ…ˆŠ‰‡„ƒƒ„‚‚ƒƒ‚‚„‡Š”•”Ž‘‘ŽŽŽŽ‘’‘’“”””””Œ†}„‰‰‰‰‰‰‰‰‰‹‹‹‹‹‹‹‹ŠŠ‰‰‡‡††ƒ€}~~~€ƒƒ‚‚ƒ†‡‡†ƒƒ€‚€‚„„…†ˆˆ‰ˆˆˆˆ‡‡‡ˆˆ‰‰Š‹ŒŒŒ‹‹‰ˆ‡†……†‡……………………ˆˆ‡ˆ‡ˆ‡ˆ…††‡‡ˆ‰‰†…„ƒ‚‚‚‚ƒƒ‚‚‚‚‚‚‚‚€‚ƒ„‚‚ƒ……„„„ƒ„„…†…„„ƒ„…†„„………†††††††…„‚‚‚‚‚‚„†…ƒ‚‚‚‚‚‚‚ƒ„†‡††††††††€€€€€€€€€€€€€€€€||„ˆŠ‰ˆ‰‰‰ŠŠ‰‰‰‡‡‚{xzzy{{{zzz{{zzzzzz{{||}}}}|{~|zyz{||~€„…†…ƒ€€€~‚ƒƒ„„…ƒ{xux{}}~€€€€~|{uuuvxxwuxxwwwwvvwvuttuwxwtsy€ƒ}wwwwwwwwwutttvuustssvz}~}|}~~~|zyw|~zwxwu|}~~~€‚€€€€€€€~}}}}}|}|||||||||zzzz{{{{{{|}}|{{zzzzzzzzzz|}}|{z|||{{zzzxz}‚ƒ„…„„„ƒ„…††…„…‡†ƒ‚ƒ‚€~~~~}~~~~~}||||}{zz|€ƒƒ‚‚‚‚‚ƒ„„ˆˆˆ„‚„…„ƒƒ‚ƒƒƒƒƒ„ƒƒ~~~}|{|€€€€€€€€€€€€€€€€ƒ…„|}}}}||||}}~}†‰‰ˆ‡ˆ‡‡‡†‡†‡‡‡…„…ˆŠ‰‡‡‡‡‡‡‡‡‡…†ˆ‰Š‰ˆ‡‹‰‡„ƒ‚„ƒ‚‚‚‚ƒ„ƒƒ‚€~}€‚ƒ…ˆ‹‹ˆ†„…„ƒ‚‚ƒƒ‚‚„ˆ‹”––’‘‘’“‘’’“““’’Œ‡€|}‚‡ŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠ‰ˆˆ†††‚}~…ƒ‚‚ƒ†‡‡†„ƒ‚€€€€‚‚ƒ„…†‡ˆˆ‡‡‡‡‡‡‡ˆˆˆ‰Š‹‹ŒŒŒ‹‹Šˆ‡‡‡ˆˆ††††††††ˆ‡ˆ‡ˆ‡ˆˆ„„…†‡ˆˆ‰‰ˆ†„ƒƒƒƒ‚‚‚‚‚‚‚„ƒ‚‚ƒ……„„ƒ„„„…†…„ƒƒ„…†„„……†††‡††††…„‚‚‚‚‚‚ƒ……ƒ‚‚‚‚‚‚‚ƒ„†‡……………………€€€€€€€€€€€€€€€€||„ˆŠ‰ˆ‰‰ŠŠŠŠ‰‰‡†‚{xyzy|{{{||}}z{{|{zyyz{|}}}}}~||}}}~€ƒ……„ƒ~€~|}‚ƒ„„‚€}{tw{|}}€€€€}|{vtssuvwvxwwwwwwvwvuttuwxxutyƒ}uvvwwwwwwxvtstvvwsssvz}~}~€€}{zw|}zwwwu|}~~}~€ƒ€€€€€€€~||}}}}}}||||||||zzzz{{{{zz{||{zz||||||||z{}~~}{z€€~~}}wy|‚„…†„„ƒƒ„…†‡…„…‡†ƒ‚‚‚€~~~~~~€€€€~}~~€€~zyz|€ƒƒ‚‚‚‚‚‚ƒ„„ˆˆˆ„€‚„…„ƒ‚‚ƒƒ„„„„„ƒ‚€~~~}||€€€€€€€€€€€€€€€€ƒ…„|}}}|||||}}}}†‰‰ˆ‡ˆ††††††††‡„„‰‹‰†ˆˆˆˆˆˆˆˆ…‡ˆŠŠ‰ˆ‡Š‰‡†„ƒƒƒ„ƒƒ‚‚ƒƒ„„ƒƒ€~}‚‚‚‚ƒ†ˆŒ‰†………ƒ‚ƒƒƒ‚‚„ˆŒ”—˜”’’‘‘’“‘’’’’’‘‘‘އ€||€…ŠŠŠŠŠŠŠŠ‰‰‰‰‰‰‰‰ŠŠ‰‰‡‡††~}~€‚†ƒ‚‚ƒ†‡‡†ƒƒ‚€€€‚‚€‚„…†ˆˆ‡††‡‡‡‡‡‡ˆˆ‰Š‹ŒŒŒŒ‹Œ‹Šˆˆˆ‰‰‡‡‡‡‡‡‡‡……………………ƒƒ„…†‡‡ˆ‹Šˆ…ƒ‚ƒƒƒ‚‚‚‚‚‚‚„ƒ‚‚ƒ…„„„„ƒ„„„†…„ƒƒ„…†„………††‡‡††††…„‚‚‚‚‚€€ƒ„„‚€‚‚‚‚‚‚‚ƒ„†‡……………………€€€€€€€€€€€€€€€€~}‚‡‹ŒŒ‹‹Œ‹ŠŠŠ‹‹ˆƒ~{yzz{||yz|}|{}}zy{||}|{{}}|{}€€}{~€€„‰Šˆ†‚~}|}€~~€€……„ƒ€wwwwy|~~~}|{utsuxyywuuvvvvvvvvvvwwwwrsw{|yxxxvuvwyyywtrrsurrsw|~}|}~~~|zyz{vvxxz}€€€€‚€€€€~€€€~}{{{}}||||||||{{{zzzyyz{}~€~~~~~~~~}wy{~‚ƒ„…„…„…„…„……†…‚€€€‚ƒ‚€~~}||||~~~~}}~~€~}~€~~|{|‚ƒ‚ƒƒƒ‚ƒƒ„…†††…ƒ‚ƒ„ƒƒƒƒƒƒ‚‚ƒƒ‚‚€€€~~}}}}€€€€€€€€€€€€€€€€ƒ†…}}|{||||||}}|~ƒ‰‰‡†‰‡‡‡†‡‡ˆˆˆƒ„ˆˆ‡ˆˆ‰Š‰ˆ‡ˆ‰†…†ˆŠ‰†„†††…ƒƒƒƒƒƒƒƒ‚‚‚‚‚‚‚‚‚‚‚ƒƒ„„……‰ŠŠ‰†„ƒƒ‚ƒƒ„‡Š”–—”ޓޑ“’‘‘‘‘’“ˆƒ}{€ˆŠ‰‰Š‹Šˆ‡„†‰Š‰‰Š‹ŠŠŠŠˆ†…ƒ‡„ƒ„ƒ‚ƒ…ƒ‚‚ƒ†‡‡†ƒƒ‚‚‚€‚‚‚‚‚‚††††‡‡‡ˆ†††‡‡‡‡‡ˆ‰ŠŒŽŽŽŠ‡†‡‡†…‚‚‚‚ƒƒƒƒ€€‚„„ƒ‚‚‚ƒ„ˆ‡…„‚‚‚‚ƒƒ‚‚‚‚‚‚‚‚ƒ„„‚‚‚ƒƒƒ„‡†„„……ƒ‚„„„……††††………………†…‡ˆ‡…‚‚ƒ‚‚‚€€‚‚ƒƒ‚‚ƒ‚‚‚‚ƒ„ƒ‚‚ƒ„†‡‡‡†…„ƒ€€€€€€€€€€€€€€€€||}†‰ŠŠŠ‹‹‹Š‰ŠŠ‹ˆƒ~zzzz|}|zy{{z{~}zxz{{|zyz|}|z}€}€€ƒ„ƒƒ…†††‚€}~€~~€€€~~}}yxwxy{}€€€~|zyutstwxwvvvvvvvvvvvvvwwwwrsw{|yuwyyxwwwzxwvwxyywsqu{}zxyz{{zxwy{vvxxz}€€€€‚€€€€~€€€€~}|{|}}||||||||{{zzzzyyz{}~€~~~~~~~~~~~~~~~~~~yz}€‚„……„…„…„…„…„………‚€€‚€‚‚‚€~{|}~~~~~~~~~}}~~}~~~~}~|{|‚ƒ‚ƒƒ‚‚ƒƒ„…†††…ƒ‚ƒ„„„„„ƒƒ‚‚„ƒƒƒ‚€~~~~€€€€€€€€€€€€€€€€ƒ†…}}|{||||||}}|~ƒ‰‰‡†‰‡‡†‡†‡ˆˆˆƒ…ˆˆ‡ˆ‡‰‰‰‡†‡ˆ……†ˆŠ‰‡„…†…„‚€ƒƒƒƒƒƒƒƒ‚‚‚‚‚‚‚‚‚ƒƒ„„„……‰ŠŠ‰†„ƒ„€‚ƒƒ…ˆŠ“•—•‘‘“’“’‘‘‘‘’މ„}{‰ŠŠ‰ŠŠŠˆ‡…‡ŠŠ‰ˆˆŠ‰ŠŠŠˆ‡…„‡„‚ƒƒ‚…ƒ‚‚ƒ†‡‡†ƒƒ‚‚€‚‚‚‚‚……†††‡‡‡†††‡‡‡ˆˆˆ‰‹ŒŽŽŽŠ‡†‡ˆ†…‚€‚ƒ„€€€‚ƒˆ‡…„‚‚‚‚ƒƒ‚‚‚‚‚‚ƒƒ„‚‚‚ƒƒƒ„„„……„„……„„„……††††………………†…‡ˆˆ…ƒ‚ƒ‚‚‚€€‚‚ƒƒ‚‚‚‚€‚‚ƒ‚€‚ƒƒ„„…„ƒ‚‚€€€€€€€€€€€€€€€€{{|…ˆŠ‰‰Š‹Š‰‰‰Š‹ˆƒ~{yzz}}|zzzzy|~~zxyzzzyyz|}}{~€‚€€„…„„…†‡…‚‚‚‚~€€€}}}}}}}}zyxwyz|}}zywvuttuvutvvvvvuvvvvvvwwwwstw|€}zuwyyxwwwzwux|€€~wqsz}xvwyzzyxwy{vvwwz}€€€€‚€€€€~€€€€€~}|||}}||||||||{zzzzyyyz{}~€~~~~~~~~~~~~|}}~€€z{~€ƒ…††…„…„…„…„ƒ„…„ƒ‚‚ƒ‚€~}~€€~|{}~€€~}|}}~~}}}~~|{|‚ƒ‚ƒƒ‚‚‚ƒ„…†††…ƒ‚ƒ„………„ƒ‚‚‚„„„„ƒƒƒƒ†……„„„„ƒ€€€€€€€€€€€€€€€€ƒ†…}}|{|||{||}}|~ƒ‰‰‡†‰‡‡‡†‡‡ˆˆˆƒ‚„ˆˆ‡ˆ‡ˆ‰‡…„…†ƒ„…‡‰ˆ†„…††…ƒ‚‚‚‚‚‚ƒƒ„„„ƒƒƒƒƒƒƒƒƒƒ„„„………‰Š‹‰‡„„„€‚ƒƒ„…ˆ‹“––”’“”‘‘’““’‘‘‘‘’Š„€~}}ƒ‹Š‰‰‰‹Šˆ‡†ˆŠŠˆ††‡ˆˆ‰‰ˆ‡…„†ƒ‚‚‚€‚…ƒ‚‚ƒ†‡‡†ƒƒ‚‚‚€‚‚€…………††‡‡††‡‡ˆˆˆˆ‰Š‹ŒŽŽŽŠ‡†‡‡‡…ƒ‚‚€~€€‚ƒ€‚ˆ‡†ƒƒ‚‚‚ƒƒ‚‚‚‚‚‚‚‚ƒƒ‚‚ƒƒƒƒƒ„……„„…†„„„………†††………………†…‡‰‡…‚‚ƒ‚‚‚€€‚‚ƒƒ‚‚€€€‚€€€‚€‚‚‚€€€€€€€€€€€€€€€€|{|€…‰ŠŠŠŠ‹Š‰‰‰Š‹ˆƒ~zzzz|}|{zzzyx{{yx{}}zzy{~€€‚€€€€‚„……†‡‡ˆƒƒ‚~€€€€}}}~~~~yxwwxz|~€€}{yxvuuttttsvvvvuvuuvvvvwwwwstw|€€}zxxxwuvxzxutx€……‚ƒ}wvz}}{wyz|||{zy~€{uuwwz}€€€€€€€€€€€€€~~}}}}}}||||{{zzzzyyyyz{}~€~~~~}}}}}}}}{||~€y{}€‚„…†„…„…„…„…ƒ„……ƒ‚‚ƒ‚€‚‚‚€~€€~}|}~€~}}~~}|}~|{|‚ƒ‚ƒ‚‚‚‚ƒ„„†††…ƒ‚ƒ„„„ƒƒ‚‚‚‚……………„„„‰‰ˆˆ‡‡‡‡€€€€€€€€€€€€€€€€ƒ†…}}|{|||||}}}|~ƒ‰‰‡†‰‡‡†‡†‡ˆˆˆ„…ˆˆ‡ˆ†‡ˆ†ƒ‚‚„‚„†‡‡…„………„‚‚‚ƒ‚ƒƒ„……ƒƒƒƒƒƒƒƒƒ„„„„……†‰Š‹Š‡…„„ƒ„…„†‰ŒŽ‘•—–”””’‘’”““’‘‘‘‘’‹…€~„‹ŠŠ‰ŠŠŠˆ‡‡‰Š‰†„ƒ„†‡ˆˆˆ‡†…†ƒ€€„ƒ‚‚ƒ†‡‡†ƒƒ‚‚€‚€€€„„„……††††††‡ˆ‰‰‰ŠŠŒŽŽŽŠ‡†‡ˆ†………„ƒ€€~~~€€~~}~~€‚ˆ‡…„‚‚‚‚ƒƒ‚‚‚‚‚‚ƒ‚‚ƒ‚ƒƒ„……†…„ƒ„„„„„„…………†………………†…‡ˆˆ…ƒ‚ƒ‚‚‚€€‚‚ƒƒ‚‚€€~€‚‚‚‚‚€€€€€€€€€€€€€€€€}}~‚‡ŠŒ‹‹‹Œ‹ŠŠŠ‹‹ˆƒ~{yzz{{{{{zzz{}}yxyzy|{{}ƒ„ƒ…ƒ€~~~€ƒƒƒ…††……€‚~}~€€||||}}~~wvvvx{~}}~}}{zyvvvutssswvvvvuuuvvvvwwwwsux}€~zwwwvuuwyussx†…‚…ƒ|z{~€yz}~~}|x~€zuuwvz}€€€€€€€€€€€€€€~~}}|}}}||{{{zzzyyxxxz{}~€~~~~}}}}}}}}{|}}€xy|~‚„„…„…„…„…„ƒ„†…„‚ƒƒ‚ƒ‚€~|}~€€€~~~}€~}~~|{|‚ƒ‚‚‚‚‚ƒ„†††…ƒ‚ƒ„ƒ‚‚‚‚ƒƒ……………………†††……„„„€€€€€€€€€€€€€€€€ƒ†…}}|{|||{||}}|~ƒ‰‰‡†‰‡‡‡†‡‡ˆˆˆƒ‚„ˆˆ‡ˆ‡‡ˆ…ƒ€‚ƒ†ˆ‰ˆ‡‡„„„‚€‚‚ƒƒ„……„„„„„„„„„„„„……††Š‹‹Šˆ……„‚ƒ………‡ŠŒŽ”––•””’‘“””“’‘‘‘‘’ˆ‚€€€„‰Š‰‰‰‹Šˆ‡‡‰Šˆ…ƒ‚‚……‡‡ˆ‡‡††‚~€„ƒ‚‚ƒ†‡‡†ƒ‚ƒ‚‚€‚€€€ƒƒ„„…„……††‡‡‰‰ŠŠŠ‹ŒŽŽŽŠ‡†‡‡‡…ˆˆ‡†„ƒ‚‚~}|||}~~~~~€‚ƒˆ‡†ƒƒ‚‚‚ƒ‚ƒ‚‚‚‚‚‚‚‚‚ƒƒƒƒ†…„„……„ƒ„„„„„………†………………†…‡‰‡…‚‚ƒ‚‚‚€€‚‚ƒƒ‚‚‚‚‚‚‚‚‚‚€€€‚ƒƒƒƒ€€€€€€€€€€€€€€€€~~ƒ‡‹ŒŒ‹ŒŒ‹ŠŠŠ‹‹ˆƒ~zzzz{zz|{zyz|~}zwxyx|{|ƒ†‡‡ˆƒ~}~€€ƒ††…„€€~}~~~~~~~~{{z{zzzzvuuvx{~|}}}||zzuvwvtsttwwvvuuuuvvvvwwwwtux}~{suwwvuuuutuz„ƒ„…„€|{}z{}~~~|{x~zttvvz}€€€€€€€€€€€€€~€~}|~~}}{{zzzzyyxxxxz{}~€~~~~~~~~~~~~|}}~~€€wy{~€‚ƒƒ„…„…„…„…„…††„ƒ‚‚‚€‚‚‚€~|}~€€€~~~~€~~~~|{|‚ƒ‚‚‚‚ƒ„†††…ƒ‚ƒ„‚‚‚ƒ„„„„………††‡‡††…………€€€€€€€€€€€€€€€€ƒ†…}}|{||||||}}|~ƒ‰‰‡†‰‡‡†‡†‡ˆˆˆ„…ˆˆ‡ˆ‡ˆˆ†‚€€‚…ˆŠ‹ŠŠŠ‡‡…„‚‚ƒ„‚‚‚ƒƒ„„„„„„„„„„„„…………††‡Š‹‹‹ˆ†……ƒ„…††ˆŠŽ’”••””’‘‘’“““’‘‘‘‘’“‹ƒ€€ƒ‡ŠŠ‰ŠŠŠˆ‡…‡‰‡…‚‚‚ƒ„…‡‡ˆ‡‡…~~}}ƒƒ‚‚ƒ†‡‡†ƒƒ‚‚€‚€‚‚ƒƒƒƒ„„„…†‡ˆ‰Š‹‹‹ŒŽŽŽŽŠ‡†‡ˆ†…ˆˆˆ‡†……„€~}|}}~‚„…ˆ‡…„‚‚‚‚ƒƒ‚‚‚‚€‚‚‚‚ƒƒ„„ƒƒ„…††…„„„„„„„„†………………†…‡ˆˆ…ƒ‚ƒ‚‚‚€€‚‚ƒƒ‚‚‚‚‚ƒ‚ƒ‚‚‚€€€‚‚‚„„„ƒ‚€€€€€€€€€€€€€€€€}|~†Š‹‹Š‹‹‹Š‰ŠŠ‹ˆƒ~{yzz|{{||yxyvyzxx{}}zz{~ƒ‡ˆˆˆƒ~~}~€~}€„†……‡ƒ€€~‚}}}}}}}}}||{zyyxwvvvxz|~}}~}|zyxuvwvutuvwwwvvuutvvvvwwwwtvy}~{rtvvutttvxz~‚‚‚‚‚€}|||||~}|zw}yttvvz}€€€€€€€€€€~€€€}|~~}||{zzyyyyxxxxz{}~€~~~~~~~~~~~~~~~~~~~xy|‚ƒ„„…„…„…„…„…†‡†„‚‚‚‚ƒ‚€~~~}|~~~~~~~~~|{|‚ƒ‚‚‚ƒƒ†††…ƒ‚ƒ„„ƒ‚‚‚ƒ„…ƒƒƒ„……††‰‰‰ˆˆ‡‡‡€€€€€€€€€€€€€€€€ƒ†…}}|{||||||}}|~ƒ‰‰‡†‰‡‡‡†‡‡ˆˆˆƒ‚„ˆˆ‡ˆ‰‰‰†‚€‚…ˆŠ‹ŠŠ‹‰‰ˆ…„ƒ„…ƒƒƒƒƒƒƒƒ………………………………††‡‡Š‹ŒŠˆ†……ƒ…††‡ˆ‹Ž‘’“””‘‘‘‘‘“”’‘‘‘‘’“‰€‚…Љ‰‰‹Šˆ‡„†‡‡„‚‚ƒ‚ƒ…†ˆˆˆ‡…€}|||ƒƒ‚‚ƒ†‡‡†ƒƒ‚‚‚€‚‚‚‚‚‚‚‚‚ƒƒ„„…†‡ˆ‰Š‹ŒŒŒŽŽŽŠ‡†‡‡‡…†††††††…„ƒ‚€€€ƒ„†‡ˆ‡…ƒƒ‚‚‚ƒƒ‚‚‚ƒ‚€€‚‚‚ƒƒƒƒƒƒƒ„…†††„„„„„„„„†………………†…‡‰‡…‚‚ƒ‚‚‚€€‚‚ƒƒ‚‚‚‚ƒ‚ƒ‚€‚ƒ‚‚ƒƒƒ‚€€€€€€€€€€€€€€€€€{{|€…ˆŠ‰ŠŠ‹Š‰‰‰Š‹ˆƒ~{yzz}{{}{xww{}}ywxyxyxz}‚†‡‡‡‚~}~€ƒ††„„‡…‚€„}}}}}}||€€~|{zzxwvvwy{|}{ywvtvxwutvxwwwvuuttvvvvwwwwtvy~‚{tttsrrtvx{‚€~~}zx}~€~|{w}~yttuvz}€€€€€€€€€€€€~€€}|~~}}{{zzyyyyxxxxz{}~€~~~~~~~~}y{}€ƒ…††„…„…„…„…†‡‡†„‚‚‚‚€~€}}}}~}~€€~~}|}~~|~|{|‚ƒ‚‚‚ƒƒ†††…ƒ‚ƒ„†…„ƒƒƒ„…‚‚ƒƒ„……†ˆ‡‡‡††††€€€€€€€€€€€€€€€€ƒ†…}}|{||||||}}|~ƒ‰‰‡†‰‡‡††‡‡ˆˆˆƒ…ˆˆ‡ˆ‰Š‰†‚€€ƒ‡‰‰ˆ‰Šˆ‡†ƒ‚ƒƒƒƒƒƒƒ‚……………………………††‡‡‡Š‹Œ‹ˆ†……ƒ…†‡‡ˆ‹Ž‘‘’““‘’‘’”’‘‘‘‘’‡~}~…Љ‰ŠŠŠˆ‡‚„††„‚‚ƒ‚„†‡ˆˆˆ„€||{|ƒƒ‚‚ƒ†‡‡†ƒƒ‚‚€‚‚‚‚‚‚‚‚‚ƒƒƒƒ…†‡ˆ‰‹ŒŒŒŽŽŽŠ‡†‡‡†…„„„„…………‡†…ƒƒƒƒ„‚‚‚ƒ„†ˆ‰ˆ‡…„‚‚‚‚ƒƒ‚‚ƒ‚€€€‚‚‚ƒƒƒ„„…†…„ƒ„…„„„„„„„„†………………†…‡ˆˆ…ƒ‚ƒ‚‚‚€€‚‚ƒƒ‚‚€‚‚€„ƒ‚‚ƒ„‚‚‚‚‚€~€€€€€€€€€€€€€€€€€‚‡‹‹ŠŠ‰‰ˆˆ‡ˆ‡‚|yz{y{{{zyxxx|}}{yxy{|yxy„ˆŠ…„‚€€€‚ƒ…†‡‡ˆ‡~~‚€€|}~~}|€~}|}}}|||{{{{{{~}|{yxwvuuuuvvwxwvvuuuvvvvvvvvvvttv{‚}yuvvussux~„„~zz{{{{||{}~~|zxz{|zwuvxy~‚€€€€€€€ƒ€~€€~€€€€}{}{zyz{||{zxxwww{|}€€€€€‚‚‚€€~€{{|~ƒ…††………………………………„ƒ‚€€‚}~~~~~~~~|}~~}|~}}}~~}|}|}€ƒ„ƒ‚‚ƒ‚‚ƒ…‡‡†„‚‚ƒ‚‚‚‚‚‚‚‚€‚„…†††ˆ‡‡††……„€€€€€€€€€€€€€€€€‚ƒ‚€|z{}||||||||}„‰‰……‡‡‡‡‡ˆˆ‰‰ˆ†……‡‰‰ˆˆ‰ˆ„€ƒ„†ˆŠ‰‰ˆ†…„‚€€€‚‚ƒƒƒ„„„„„„„„„„„……„„„…††„…‡ˆˆ†„ƒ………‡‰‹‘‘‘‘‘‡}~ƒ‡‹Šˆ‰‹ŒŠ‰…„ƒ‚‚ƒ…†‡‡‡‡‡‡‡‡„‚~||~€ƒ…ƒ‚ƒ†‡†„„ƒ‚‚‚‚‚‚‚€€€€‚‚€€‚ƒ‚ƒ…„…†‡‰Š‹ŒŠ‹ŒŠ‰ˆ‡†††††…„„ƒƒ„„†…………„„„‚‚ƒ„…†ˆ‡…„‚‚‚‚„„ƒƒƒ‚‚‚‚‚‚‚‚ƒ‚ƒ………………„„„…„ƒ„………„…………††††„†ˆ‡„‚‚‚€‚‚‚‚€‚‚ƒƒ‚‚€€€‚~€‚„„„ƒ‚€€€€€€€€€€€€€€€€†††ˆŠ‹‹‹‹‹ŠŠ‰ˆˆˆ‰‰„}z||{z{{{zzzz{||{xxy{{yx{€…ˆ‰ˆ†ƒ~~~ƒ„…†††ƒ|~‚€€€€}}}}|{zz{{|||}|{zywvuuuuuuvvwxwvvuuuuvvvvvvvvvttv{‚}yuvvussux€‚‚€~zzzzyyyy{}~~}zxz{|zwuvxy~€€€€€‚€~€~€€€€}{~}{zyz{|{{yxxwwx{|}€€€€€‚‚‚‚€€€~€€{z{~‚………………………………………„ƒ‚ƒƒ‚ƒ„„|||}~€~~}}}}~~~~~}|}~}|}€ƒ„ƒ‚‚ƒ‚‚ƒ…‡‡†…‚‚ƒ„„„ƒƒƒ‚‚€ƒ„†††…ˆ‡‡††………€€€€€€€€€€€€€€€€€~|{{|||||||||}„‰‰†…‡‡‡‡‡‡ˆ‰‰ˆ†„…‡‰‰ˆˆ‰‡…€ƒ…‡ˆˆ‡†ˆ‡…ƒ‚‚ƒƒƒƒ„„„„„„„„„„„……„„„…††‡††…„………‡‡‡‰Š‘‘‘‘‘‘‘‘‘Žˆ‚}~‚‡‹Šˆ‰‹ŒŠ‰„„‚‚ƒ„†‡‰‰‰‰‰‰‰‰„‚||~€‚…ƒ‚ƒ†‡†„„ƒ‚€‚‚‚‚‚‚€€€‚‚‚‚€‚ƒ‚ƒ………†‡‰Š‹‹Š‹ŒŒŠ‰ˆ‡†††††…„„ƒ„„„„…„……………‚‚‚„…‡ˆ‡…„‚‚‚‚„„ƒƒ‚‚‚‚‚‚‚‚‚ƒ‚ƒ……………„„„„…„ƒ„………„……………†††„†ˆ‡„‚‚‚€‚‚‚‚€‚‚ƒƒ‚‚‚‚€€€~€‚ƒ„ƒ‚€€€€€€€€€€€€€€€€ˆ‰ŒŒŒ‹‹‹‹ŠŠ‰‰ˆˆˆ‹Š…~{}}|zzzzzzzzy{|zywyzyyz}‚†ˆ‡ˆ†ƒ~~~€‚„…………‚~{|~}~€‚€~~‚~~~}{yxyz{}~€{zyxwutsuuuuvvwwwvvuuuvvvvvvvvvvttv{‚~yuvvussvx€‚~}}zzzyxwww{|~}{yz{|zwuvxy~€€€€€€€€~€}{}|{zzz{{{zyxxxxx||~€€€€€€€‚‚‚€€€€zyz}„…„………………………………„ƒ‚„‚‚‚„ƒ}}~}~~~~}}~~~~}}}}~~}}€}|}€ƒ„ƒ‚‚ƒ‚ƒ…‡‡‡„ƒ‚ƒ……„„ƒƒƒ‚‚„…†††…‡‡‡††………€€€€€€€€€€€€€€€€}|}||{||||||||}„‰‰†…ˆ‡‡‡‡‡ˆ‰‰ˆ†„„‡ˆ‰ˆˆ‰ˆ„€€ƒ…†††…‡†…ƒ€€ƒƒƒƒ„„„„„„„„„„„„…„„„„…††‰‡…‚‚ƒ…†ˆˆ‰ŠŒŽ‘’‘‘‘‘‘‘‘‘‘“Š‚~~‚†‹Šˆ‰‹ŒŠ‰ƒ‚ƒƒ„†‡ˆŠŠŠŠŠŠŠŠ…ƒ}|~€‚…ƒ‚ƒ†‡†„„ƒ‚‚‚‚‚‚€‚‚‚‚‚ƒ‚ƒ………‡‡‰‰‹‹‹‹ŒŒŠ‰ˆ††…†††……ƒƒƒ„„ƒƒ„„…†††„ƒƒ†ˆˆ‡†ƒƒ‚‚‚ƒƒƒ‚‚‚‚‚‚‚‚‚ƒ‚ƒ…………„„„„ƒ…„ƒ„………„„„…„…………„†ˆ‡„‚‚‚€‚‚‚‚€‚‚ƒƒ‚‚„ƒ‚€€€€€‚ƒ‚‚€€€€€€€€€€€€€€€€…‰ŒŽŒ‹‹ŒŠŠŠŠ‰‰‰‰Š‰„~{|}{{zyyyyxwxz{{yxxzxx{„‡ˆ†…„‚€€€‚ƒ……†††|{~}{|~~}~€~zxwxy|~‚ƒ||zyxwuuuuuuuvvwwwvvuuuvvvvvvvvvttv{‚}yuvvussux€‚€}z{||{zzxxvvz|}~}{yz{|zwuvxx~€€€€~€€€~~€€€€}{||{{{{{{{zyxxxxx|}~€€€€€€€€‚‚‚‚€€€~€€yyy}€„„„………………………………„ƒ‚€‚‚}~~~~}~}}|}~~}||}}€~}}|}€ƒ„ƒ‚‚ƒ‚‚ƒ…‡‡†…‚‚‚ƒ„„„„ƒƒƒƒƒ„…††……„†††……………€€€€€€€€€€€€€€€€€}{{|}|z|||||||||~ƒ‰‰††ˆˆ‡‡‡‡ˆ‰‰‡…ƒ„†ˆˆ‡ˆ‰‡…€€ƒ…†††…†…ƒ€ƒƒƒ„„„„…„„„„„„„„„„„„„……†‡†„ƒ‚‚‚ƒˆˆˆ‰‹Ž‘‘‘‘‘‘‘‘‘Ž”‘Šƒ~~‚†‹Šˆ‰‹ŒŠ‰‚‚ƒ„†ˆ‰ŠŠŠŠŠŠŠŠŠ†„€}|~€‚…ƒ‚ƒ†‡†„„ƒ‚€‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚€ƒ…†††ˆˆŠŠŠ‹ŒŒŒŒ‰‰‡†…†…††…„„ƒ„„„‚‚ƒ„…‡‡ˆ†„€‚†ˆˆ‡…„‚‚‚‚ƒƒ‚‚‚‚‚‚‚‚‚‚€ƒ………„„„„ƒƒ…„ƒ„………„„„„…„………„‡ˆ‡„‚‚‚€‚‚‚‚€‚‚ƒƒ‚‚…„‚€€€€‚‚‚‚‚‚€€€€€€€€€€€€€€€€…ˆŽ‹‹ŒŠŠŠŠŠ‰Š‰ˆˆƒ|y{{z{zyyzyxwwy||{yyzyy{€…ˆˆ‡…„‚€€€€ƒ„……†…|{}~|{{}~~~}~~}{xvxz|‚„†~|{yyxvuuuuuvvwvvuuuvvvvvvvvvvttv{‚~xuvwussvx€~{xy{}}|{zyxxy{}~}|zz{|zwuvxx}€€~€€~~~~~€€}{{{{{|{{{zzyxxxyy|}~€€€€€€€‚‚‚€€€€yyz|ƒ„„………………………………„ƒ‚‚€€€‚}||}}~€~~}}}}~~}}~€€}}|}€ƒ„ƒ‚‚ƒ‚ƒ…‡‡‡„ƒ‚ƒ‚‚‚‚ƒƒƒƒ„„………„ƒ‚„„„„„„„„€€€€€€€€€€€€€€€€€}{z|}|z|||||||||~ƒ‰‰††‰ˆˆ‡‡‡ˆˆ‰‡…ƒƒ†‡ˆ‡ˆ‰ˆ„€‚…‡ˆ‡‡††…ƒ€ƒƒ„„…„……„„„„„„„„„„„ƒ„„……„„…„„‚€………†ˆ‹‘‘‘‘‘‘‘‘ŽŽ“‰‚}~‚†‹Šˆ‰‹ŒŠ‰‚ƒ„…ˆˆ‰Š‰‰‰ˆ‰ˆ‰‰‡…~}~€‚…ƒ‚ƒ†‡†„„ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ‚ƒ…††‡‡‰‰ŠŠŒŒŒŒ‹‰ˆ‡†…………†……ƒƒƒ„„‚‚ƒ„††‡ˆ†„‚…ˆˆ‡†ƒƒ‚‚‚ƒ‚‚‚€‚‚‚‚‚ƒ‚ƒ…………„„„„ƒ…„ƒ„………„„„„„…………„†ˆ‡„‚‚‚€‚‚‚‚€‚‚ƒƒ‚‚…„ƒ€ƒƒƒ‚‚‚‚ƒ€€€€€€€€€€€€€€€€ˆŠŒŒ‹‹‹ŠŠŠŠŠŠŠŠˆ‡‚{yz{y{zyz{}{zvz}~|{z{zz{„ˆ‰‰ˆ†ƒ~~~~€‚ƒƒƒƒ‚}z{{{{}}~€€~}~~}~~~|zwx{}€ƒ…†‚‚€}|{{vuuuuuuvwvvvuuuvvvvvvvvvttv{‚}yuvvussux€~|yxyz}}||{zyyy{}~|{z{|zwuvxw}€~€€~€~~~~~}~€€€€}{yz{|||{{zyyxxxyy}~~€€€€€€€‚‚‚‚€€€~€€zzz}„…„………………………………„ƒ‚ƒƒ‚ƒ„„}}}~~~~}}}~~~}}~}|}~€}|}€ƒ„ƒ‚‚ƒ‚‚ƒ…‡‡†…‚‚‚ƒ‚‚ƒƒƒ„„„……„‚€‚‚‚ƒƒ€€€€€€€€€€€€€€€€€~||{|{z||||||||{}ƒˆ‰‡‡Šˆˆ‡‡‡ˆˆˆ‡…‚ƒ…‡‡†ˆ‰‡…€‚ƒ…‡‰ˆˆ‡ˆ‡†„‚‚„„„„„………„„„„„„„„„„ƒƒƒ„……ƒ„……ƒ~|ƒƒƒ„†‰‹Œ‘‘‘‘‘‘’’‘‘ŽŽŽ‡}}‚‡‹Šˆ‰‹ŒŠ‰ƒ„†ˆˆ‰‰‰ˆ‰ˆ‰ˆ‰ˆˆ‰†‚~}~€‚…ƒ‚ƒ†‡†„„ƒ‚€‚€‚‚‚‚‚‚‚‚‚‚‚€ƒ…‡‡‡ˆˆ‰‰‰ŒŒ‹‹‰ˆ††…………†…„„ƒ„„„ƒƒ„……††‡†„€€‚„†ˆ‡…„‚‚‚‚‚‚‚‚€€‚‚‚‚‚‚‚€ƒ…††…………„„…„ƒ„………„„„„……………„†ˆ‡„‚‚‚€‚‚‚‚€‚‚ƒƒ‚‚ƒƒ‚‚ƒ„†…„ƒƒƒ„„€€€€€€€€€€€€€€€€†††ˆŠ‹Œ‹ŠŠŠŠŠŠ‹Š‰ˆƒ}z{|z|zyz|}|{wz~€}||}{{}‚‡Š‹ˆ†ƒ~~~~~€‚ƒƒƒ‚~{{|z{}~~~~~~~~~}}}~~}|yz|~ƒ…†ƒ‚€}|{vuutuuuuwvvuuuvvvvvvvvvvttv{‚~yuvvussux€}{yyzyyzzzzzzzzxz}~~}{z{|zwuvxw|€~~€~~}~~}~~}}€€}{yy{|}||{yyxxxxyz}~€€€€€‚‚‚€€~€{z{~‚…†…………………………………„ƒ‚„‚‚‚„ƒ~~~~}}}|}~~}|€€~|z{~€}|}€ƒ„ƒ‚‚ƒ‚ƒ…‡‡‡„‚‚ƒ‚‚‚ƒƒƒ„„ƒ„„ƒ‚~~€€€€€€€€€€€€€€€€€€€€}{zz{||||||||{}‚ˆ‰‡‡Šˆˆˆ‡‡‡ˆˆ†„‚ƒ…‡‡†ˆ‰ˆ„€‚ƒ…‡ˆˆ‡‡‰ˆ†…ƒƒ‚‚„„„„……††„„„„„„„„„ƒƒƒƒ„………„„‚~}‚‚ƒ„†ˆŠŒ‘‘‘‘‘’‘‘‘ŽŽŽŽŠ…|}ƒˆ‹Šˆ‰‹ŒŠ‰…†‡‰‰‰ˆ‡ŠŠŠŠŠŠŠŠ‰‡‚}~€‚…ƒ‚ƒ†‡†„„ƒ‚‚€€‚‚‚‚‚‚‚€€‚‚‚ƒ‚ƒ…‡‡ˆˆˆˆ‰‰ŒŒ‹Šˆ‡‡……„……†…„ƒƒƒ„„„„…………………„ƒ‚‚‚ƒ„ˆ‡…ƒƒ‚‚‚‚‚‚€€€‚‚‚‚‚ƒ‚ƒ…†††††…………„ƒ„………„………………††„†ˆ‡„‚‚‚€‚‚‚‚€‚‚ƒƒ‚‚‚‚ƒ…†‰ˆ†„„„…†€€€€€€€€€€€€€€€€€‚‡ŒŠŠŠŠŠ‹‹‹ŠŠ…~{}}|}{yz{|zxw{€~}}~|z|‡‹…„‚€€€€ƒ„„„„€}|~~|zz}|{zz{|}~}||}~~~z{|ƒ…†‚‚~}|{vuuutuuuwvvuuuuvvvvvvvvvttv{‚}yuvvussux€|yxy{zyxxxxyyyyxz|~~}{z{|zwuvxw|€~}€~~}}~}~~}}€€€€}{xy{}}}|{yyxxxyyz}~€~€€€€‚‚‚€€~€€{{{~‚…††………………………………„ƒ‚€€‚}||}}~~~}}}}~~}{|}}}}|}€ƒ„ƒ‚‚ƒ‚‚ƒ…‡‡†…‚‚ƒ„„„„„„ƒƒƒƒƒƒ~|}}~~€€€€€€€€€€€€€€€€€€€€~zyz{||||||||{}‚ˆ‰‡‡Šˆˆˆ‡‡‡ˆˆ†„‚ƒ…‡‡†ˆ‰ˆ„€‚…‡ˆˆ‡†ˆ‡†„‚‚„„„………††„„„„„„„„ƒƒƒƒƒ„„…‡…‚€~~~ƒƒƒ„†‰‹Œ‘‘‘‘‘‘‘‘ŽŽŽŠˆƒ~{}ƒˆ‹Šˆ‰‹ŒŠ‰†‡ˆŠŠ‰‡†‹‹‹Œ‹‹‹‹Š‡ƒ}~€‚…ƒ‚ƒ†‡†„„ƒ‚‚€€‚‚‚‚‚‚€€€€‚‚ƒ‚ƒ…‡‡ˆˆˆˆ‰‰Œ‹Šˆ‡†…„„„…†…„„ƒƒ„„†…………„„„„ƒƒƒƒƒƒƒˆ‡…„‚‚‚‚‚‚€€€€‚‚‚‚‚ƒ‚ƒ…‡‡††††………„ƒ„………„…………††††„†ˆ‡„‚‚‚€‚‚‚‚€‚‚ƒƒ‚‚€€€‚…‡ˆ‹‰‡…„…†‡€€€€€€€€€€€€€€€€‚„‡ŠŒŒ‹ŠŠ‹ŒŠ‰‡†„|xyyyzzzzzvux~€}}~{{}€…ˆˆ‡‡†„‚€€€€‚ƒ„…zwxzz|{{{{{|}}{||{~€}z{|}~€€xwutttvwxwvutuuvyxxwvvuuttw{€|vutsstuvzzzzzxwvttuuwwxxzyy|€€|xy~~yvwxvx{€~~}}~~}}}}~~€€€€‚ƒ}yz{}~~}{zyyxxyz{|€€‚‚‚‚‚‚‚‚‚‚‚€{z{~‚…†……„„„„…††‡…………‚‚ƒƒ‚‚‚€|}~~~~€~~€€~}~€~|{|‚ƒ‚‚‚‚€„†ˆ‡…„ƒ‚‚‚‚ƒ„„ƒƒƒ…‚ƒ„…„{www{}~€€€€€€€€€€€€€€€€‚~~}|z{{{{{{{{}}ƒ…†‡‡‡‡‡ˆˆˆˆ„„‚€ƒ‰‹ˆ‡Šˆƒ€‚ƒ…‡‡‡†…‡†…ƒ‚‚‚‚„„…………„„……………………ƒƒƒƒ„…†‡………„ƒƒ‚‚ƒƒƒ„…††‡‹’““““‘‘ŽŽŽŽŽ‡†ƒ|}‚†‰Š‹ŒŒ‹Š‰‹‰‡††ˆ‹‘’““‘‹†}|…„ƒ‚ƒ†‡†„„ƒ‚€€‚‚€€‚ƒƒ„‰ˆ‡††ˆŠ‹‹ŒŽŽ‹‡…………………………„„„„„„ƒƒƒ„…………„„…†…„ƒ„„†‡†„€ƒ‚‚‚€€ƒ‚‚‚‚‚ƒ‚„ƒ‚ƒ„………„ƒ‚ƒƒƒ„„………„„„……††††…‡‰†„‚‚‚‚‚€€‚ƒƒ‚‚‚‚‚„ˆŒŠŒ‹†„†ˆˆ€€€€€€€€€€€€€€€€‚‚‚„‡Š‹ŒŒŒŠŠŠŠŒŒ‹‰ˆ‡†ƒ|zzzzzzzzwvy~|{}{{|…ˆˆ‡‡†…ƒ‚€€€€‚ƒ„……€{xyyz{~||||||{{z{{{}€|{{|}~€€zywuttuuwwvvuuuuxxwwvuuuttw{€|vvtsstvvzzzzyxwvsstuvwwxzyz}|yy~~yvwxvx{€~~}~~~~}}}~~€€€€€‚‚}yz{}~~}{zzyyyyz|}€€‚‚‚‚‚‚‚‚‚‚€{z{~‚…………„„„„…††‡…„…„‚‚‚‚‚‚€}~€€~~~}}}~~€~~€~|{|‚ƒ‚‚ƒ‚€ƒ†ˆ‡…„ƒƒ‚‚‚ƒ„„ƒƒ„„‚ƒ„…„|xyy|‚€€€€€€€€€€€€€€€€€€‚€~~~}|z{{{{{{{{|}~€ƒ„…†††‡ˆˆ‰‰††ƒ€ƒ‰Š‡‡Šˆƒ€‚ƒ…‡ˆ‡†…‡†…„‚‚‚‚„„…………„„……………………„„„„„……†………„ƒƒƒ‚ƒƒ„„…††‡‹ŒŽ‘’“““ŽŽŽŽ‡†ƒ|}†‰Š‹ŒŒ‹Š‰‰ˆ‡†‡‰ŒŽ‘’“”“’ŽŒ†}|…„ƒ‚ƒ†‡†„ƒƒ‚€‚‚€€‚‚ƒ„„‰ˆ‡†‡ˆŠ‹‹ŒŽ‹‡…………………………„„„„„„ƒƒƒ„…………„„…†…„ƒ„„†‡†„€ƒ‚‚‚€€ƒ‚‚‚‚‚ƒƒ„ƒ‚ƒ……„„ƒƒƒƒƒƒƒ„„………„„„……††††…‡‰†„‚‚‚ƒ‚€€‚ƒƒ‚‚‚‚‚„ˆ‹Œ‹†ƒ†ˆˆ€€€€€€€€€€€€€€€€ƒƒ„…‡‰‹ŒŒ‹ŠŠŠŠ‹Œ‹Šˆˆˆ‡„}}||{zyyxwy~{z{{{}€…ˆˆ‡‡†…ƒ€€€€‚ƒ„„…|yyzyz|}}}}|{zy{||{}~||}}~€€|{ywutttvvvvvuuuvvvvuuttttw{€|wvuttuvwzz{zzxwvrrstuuvvyy{}~|yy}yvwxvx{€~~~~~}}~~€€€€€‚€}z{|}}~}|{{zzyz{|}€€‚‚‚‚€{z{~‚…†……„„„„…†††„„„„‚ƒ‚‚€~€€€~~~~}}}}}}€€€~|{|‚ƒ‚‚‚‚€„†ˆ‡†„ƒ‚‚‚‚ƒƒƒƒƒ„„‚ƒƒ„„|xzz}‚ƒ€€€€€€€€€€€€€€€€€~}~}|{|||||||||}}~€€„„…†ˆ‰ŠŠˆˆ…ƒˆ‰†‡Šˆƒ€‚„†‡†……†…„‚‚„„…………„„……………………†††…………………„„„ƒƒƒƒ„„……††‡Š‹‘’““‘‘‘ŽŒ‹Š‰ˆ‡„||…ˆ‰Š‹‹Š‰ˆ‡‡††ˆ‹Ž‘’”••“‘Œ†~|€…„ƒ‚ƒ†‡†„„ƒ‚€‚€€‚ƒƒ„„ˆ‡††‡ˆ‰ŠŠ‹ŒŒŠ‡†………………………„„„„„„ƒƒƒ„…………„„…†…„ƒ„„†‡†„€‚‚‚‚€€ƒ‚‚‚‚‚„ƒ‚‚ƒ…„ƒƒƒƒ„…ƒƒ„„„………„„…………†††…‡‰†„‚‚‚‚‚€‚ƒƒ‚‚‚‚‚„ˆ‹‹„‚„‡ˆ€€€€€€€€€€€€€€€€„„…††ˆŠŒ‹‹ŠŠŠŠ‹‹ŒŠ‰‰ŠŠˆ†„ƒ~|zxwwvy~|{}{{|…ˆˆ‡†…ƒ‚€€‚ƒƒ€|yz{z{}||}~}{zy{{z{{}}}}}}~€€~}{yvussuvvwwvutuuuuuuuuttw{€|xwvuuvwx{{{{yxvurrrssttuxy{~~~{zy~~yvxxvx{€~~€~~~~€~€€€}{|}}}}}||||{{z{|}€€€‚‚‚€{{{~‚…………„„„„…†††„ƒ„ƒ€‚‚‚‚‚€€€€~~~~~~~}}~€€~~~~|{|‚ƒ‚‚ƒ‚€ƒ†ˆ‡…„ƒƒ‚‚ƒƒƒƒƒƒ„„‚‚ƒ„ƒ}yzz}‚ƒ€€€€€€€€€€€€€€€€€€~}}}~|{|||||||||||}}}}}‚ƒ…†‰ŠŠŠ‰†‚ƒˆˆ…‡Šˆƒ€€ƒ…†…„„……ƒ‚€€€€„„…………„„……………………††††††……„„„„„„ƒƒ„„……††††‰Š‹Ž‘’“’‘Ž“’Ž‹‰‡†‰ˆ„€||€„ˆ‰Š‹‹Š‰ˆ…††ˆ‰‘’“•––”’‘†~~€„„ƒ‚ƒ†‡†„ƒƒ€€‚€€‚ƒ„„…†††‡‡ˆˆ‰‰Š‹‹Š‰‡†………………………„„„„„„ƒƒƒ„…………„„…†…„ƒ„„†‡†„€ƒ‚‚‚€€‚‚‚‚‚ƒƒƒ‚ƒ„„ƒƒ„„…†„„„„…………„…„……†…††…‡‰†„‚‚ƒ‚‚€€‚ƒƒ‚‚‚‚‚‚‚ƒˆ‹‘‹„€ƒ†ˆ€€€€€€€€€€€€€€€€…†‡‡†‡‰‹‹‹‹‹‹‹‹‹Œ‹‰‰Š‹ŠˆŠˆ…‚~{xwwvy}}{{}€…ˆˆ‡„ƒ‚€~~~~~€€{yz||}~z{}}}|{zyyyyyy{|~~~€~}{yvtstuvwwvvuuuuuvvvvttw{€|yxwvvwxy{{|zzwvurrsrssttwy|~~}|{y}yvwxvx{€~~€€€~~~~€~~~€~|~}}}}}~~~}|{{|}}€€‚‚‚‚€{z{~‚…†……„„„„…†††„ƒ„ƒ€ƒ‚‚‚€€~}}}~~~~~~~}}}~~~}}}}}~|{|‚ƒ‚‚‚‚€„†ˆ‡†„ƒ‚‚‚ƒƒƒƒƒ„„„ƒ‚‚ƒƒ}zyy|‚€€€€€€€€€€€€€€€€€€~}||~~}|||||||||||||||||€‚ƒ…†ˆˆ‰‰…ƒ‡ˆ…‡Šˆƒ€ƒ…†‡‡†…‡…„ƒ‚„„…………„„……………………„…††‡††…ƒƒ„„„„„„………†††††ˆˆŠ‹Ž’““‘‘‘‘’‘Ї…„‰ˆ…|{€ƒ‡ˆ‰ŠŠ‰ˆ‡……‡ˆ‹‘’“•––•“’Ž…~~€ƒ„ƒ‚ƒ†‡†„„ƒ‚€€€€€€€€‚‚„„………††‡‡ˆˆˆˆ‰‰‰‰ˆ‡‡………………………„„„„„„ƒƒƒ„…………„„…†…„ƒ„„†‡†„€‚‚‚‚€€‚€‚‚‚„ƒ‚‚ƒƒƒ„……………„„„…………………………………†…‡‰†„‚‚ƒ‚‚€‚ƒƒ‚‚‚‚‚‚‚‚ƒ‡Š’‘Œƒ€‚†‡€€€€€€€€€€€€€€€€†ˆ‰ˆ†…ˆ‹‹‹‹‹‹‹‹‹ŒŠˆˆ‰ŠŠ‰Œ‹ˆ…‚|{zy|}{{|…ˆˆ‡„ƒ€~~}}~~€€€~zy|}}}z{||}}|||{{|{z|~}zxutuuuvvvvvvvvwwxxxttw{€|zyxwwxyz||{{ywutsssssssswz}}|{{y~~yvxxvx{€~~~€€~~~~~~|}~~}~}}|}~}}|}}~€€€‚‚€{{{~‚…………„„„„…†††„ƒ…ƒ‚‚‚‚‚€€~}}}~~}}}}}}||}}}}}}||~|{|‚ƒ‚‚ƒ‚€ƒ†ˆ‡…„ƒƒ‚‚ƒƒ‚ƒ„„„ƒƒ‚‚ƒƒ~{yy|‚€€€€€€€€€€€€€€€€€€}|{|}~}|||||||||}}}}}~~~~‚ƒ„…‡‡ƒ€‚‡ˆ…‡Šˆƒ€ƒ…‡ˆ‰‰ˆ‡ˆˆ†…ƒƒƒƒ„„…………„„……………………ƒ„…‡††……ƒƒƒ„„„……††††††††‡‡ˆŠŒ‘“““’‘‘‘‘’Ž‹‰‡…„Љ…€{{ƒ‡ˆ‰ŠŠ‰ˆ‡…†‡ŠŒŽ‘’”––•”’Ž…}~€€‚„ƒ‚ƒ†‡†„ƒƒ€€€€€€€€€€€€‚‚ƒ„………„…†‡ˆ‡‡†ˆˆ‡ˆ‡‡‡‡………………………„„„„„„ƒƒƒ„…………„„…†…„ƒ„„†‡†„€ƒ‚‚‚€€‚€‚ƒƒƒ‚ƒƒƒ…††……„…………………………………………†…‡‰†„‚‚‚ƒ‚‚€€‚ƒƒ‚‚‚‚‚‚‚‚ƒ‡Š‹…ƒ†‡€€€€€€€€€€€€€€€€‡‰Šˆ……‡ŠŒŒŒŒŒŒŒŒŒŠ‡†‡ˆˆ‡ŠŠˆ‡†„ƒƒ€~€ƒƒ}{|{{}€…ˆˆ‡…„ƒ€~€€€€{z|~||}{{{|||}}~}}}|{}€€€€~|ywuuuuuvvwwwwxxyyzzttw{€|{zyxxyz{|||{ywuttttstsssvz~}{{|y~~yvwxvx{€~~~~~€~~~~}||~~}€}||}€€~}}}}~€€€€€€€€€€‚‚‚€{z{~‚…†……„„„„…††‡…„…„‚‚ƒ‚‚‚€}~~~~}}~~~}||}}}}}}}|~|{|‚ƒ‚‚‚‚€„†ˆ‡…„ƒ‚‚‚ƒƒ‚ƒ„„„ƒƒ‚‚‚‚~|zz}‚ƒ€€€€€€€€€€€€€€€€€|{{|}~~}{{{{{{{{}}~~€€€~~~€€„„~‡ˆ…‡Šˆƒ€‚„†‡ˆˆ‡†ˆ‡…„ƒ‚‚‚„„…………„„……………………„„†††…„‚‚ƒƒƒ„………††††††††††‡ˆ‹Ž‘““““““’’’ŽŒŠˆ‡……‹‰…€{{‚†‡ˆ‰‰ˆ‡††‡‰ŠŒŽ‘“•–•“’…}}€€€‚„ƒ‚ƒ†‡†„„ƒ‚€€€€€€€€€€€€€€€‚‚ƒƒ„……†ƒ„†‡ˆ‡†…‡‡††††‡‡………………………„„„„„„ƒƒƒ„…………„„…†…„ƒ„„†‡†„€‚‚‚‚€€‚€€‚‚„ƒ‚‚ƒ„„…………………………………………………………†…‡‰†„‚‚‚‚‚€€‚ƒƒ‚‚‚‚‚ƒƒ‚ƒ†‰ŽŒ†ƒ„††€€€€€€€€€€€€€€€€‡Š‹‰…„‡ŠŒŒŒŒŒŒŒŠ†…†‡‡†‡‡ˆˆˆ‰‰‰…ƒƒ…ƒ|yy{{|…ˆˆ‡‡†„‚€€€‚‚‚‚‚‚€}{}}|{|{{{{{|}}|zz{yxz€€€€€~~~}zxvvuutuvwxxxyyz{{|ttw{€|{{yyyy{{}||{ywusttttttttvz~}{{|y~~yvwxvx{€~~~~~~~€~~~~}{|}~~€}||}€€~}}}~€€€€€€€€€€‚‚‚€{z{~‚…†……„„„„…††‡………„‚‚ƒƒ‚‚‚€|}€‚}~~~}}~~~~~}}}~|{|‚ƒ‚‚‚‚€ƒ†ˆ‡…„ƒ‚‚‚„ƒ‚ƒ„„„ƒƒ‚‚‚‚~|{{~ƒ„‚‚€€€€€€€€€€€€€€€€|{z|}~~}{{{{{{{{}~~€‚‚}}}~~~~~‚‚€}€†ˆ†‡Šˆƒ€€ƒ…†…„ƒ…„ƒ€€€€„„…………„„…………………………†‡†„‚‚‚ƒƒ„………‡‡‡††††††…†‡Š‘““””••”’‘Œ‹Šˆ‡†…‹‰…€{{~‚†‡ˆ‰‰ˆ‡††‡‰‹ŽŽŽ‘“••”“’…}}€€€„ƒ‚ƒ†‡†„ƒƒ‚€€€€€€€€€€€€€€€‚‚ƒƒ„…††ƒ„†ˆˆ‡†…‡††……†‡ˆ………………………„„„„„„ƒƒƒ„…………„„…†…„ƒ„„†‡†„€ƒ‚‚‚€€€€€ƒ„ƒ‚ƒ†…„„„„…†…………………………………………†…‡‰†„‚‚‚ƒ‚€€‚ƒƒ‚‚‚‚‚ƒƒ‚ƒ†‰ŒŽŒ‡„…††€€€€€€€€€€€€€€€€†‡‰‰ˆˆ‰ŠŒ‹‹‹‹‹Š‹‰†…„„…ƒ…†…‡Šˆ…ƒ…†…ƒ€vvx~†ŠŠ‡‡‡…ƒ€€ƒ‚‚‚‚ƒ„……€|}~}}~~|z{}{}€€~~~€~}{yxwqsuvuvxz|{xwvwyzyxy|}|zwuuw{}~}zxvvvwwvusssstwy{}}|{yy}~zxyzyy|~~~€~~}~€~~~~~~~~~~~}}|~}}}}€‚€~|||}~€€ƒ‚‚€€‚‚‚‚‚€{z{~‚…†……………ƒƒ…†††……„‚€‚€€€y{~€€~|~|z|€|||}~~}||~|{|‚ƒ‚‚ƒƒƒ‚‚„††††„‚‚ƒ„ƒƒ‚ƒƒ„„ƒƒƒƒƒ‚€‚€„…‚‚ƒ€€€€€€€€€€€€€€€€~z{|{~}{{||||{{~~€€€€}}~~}}~‚‰ŠŠ†€‚€‚…‡†ƒ€‚‚€~€…‡…„…†…†…„ƒ„„‚‚‚‚‚††††††††††‡‡‡‡††„„…†Š‘”•””••”‘ŽŒ‹‰‡††††ˆ‡„{{ƒ†‡‰ŠŠˆ†„…‡‹ŽŽŽŽ’””’ކ~~€ƒ„‚‚ƒ…†…„ƒ‚€€€€€€€€€€€€€‚‚€€€€‚„…†‡‡‡‡‡††††„„……††‡‡‡††……„„ƒ„ƒƒ‚‚ƒ…………„„„…††……………………‡†…ƒ‚‚‚‚‚€€€€€€‚‚ƒƒƒ„„„ƒƒƒƒ‚„„„„„„„„†……„„………†ˆ‰ˆ…‚‚‚‚ƒƒ‚‚‚‚ƒ‚‚‚‚‚ƒƒ…„„ƒƒ„……€€€€€€€€€€€€€€€€‰Š‹Šˆ‡‡ˆŒ‹‹‹‹ŠŠŒ‹‰‡†…„„„††…†‡…y|~~}|~€{{}‚…ˆ‡†„„„ƒ‚‚ƒƒ……„„„…†‡„{}}||~}{|~|~‚€€€€~~€~}|{zzvvvtssvy}|{yyyyywvw{}|zwuuxz}|{ywvvvwwvuttttuxz|~~}|zx|}ywyzxy|~~~~€~~~€€€~~~~~~~~~~}}}}~}}}}~€€~}|}}~~€ƒ„‚‚ƒ‚€€€€‚‚‚‚€{z{~‚…………………ƒƒ…†ƒ„„„„„ƒ‚€€€|}~~~~}}|||}~~}|~~|{|‚ƒ‚‚ƒƒƒ‚‚„††‡†„‚‚ƒƒƒƒƒ„„ƒƒƒƒƒƒ‚€‚€„„‚€€€€€€€€€€€€€€€€~z{|{~}||{{{{||}}€€€€€~}}}}~€†††ƒ}~€€ƒ……‚€€€€€€…‡…„…†…†…„ƒƒ‚€‚‚‚‚‚……………………†††‡‡‡†††††‡ˆ‹Ž‘‘‘“••“‘Œ‹‰‡††††ˆ‡„{|ƒ‡ˆ‰‹Š‰‡††ˆ‹ŽŽŽ‘””’ކ~~~€ƒ„‚ƒ…†…„ƒƒ€€€€€€€€€€€€‚‚€€€ƒ„…†‡‡‡†‡††††„„……††‡‡††……„„ƒƒƒƒƒƒƒ„„…„„„„„……†……………………‡†„ƒ‚‚‚‚€€‚€€‚‚‚ƒƒƒ„„„„ƒƒƒƒ„„„…„„„„†……„„……††ˆ‰ˆ…‚‚‚‚ƒƒ‚‚€‚ƒ‚‚‚‚ƒƒ‚‚ƒ„…€€€€€€€€€€€€€€€€Š‹‹Šˆˆˆ‰Œ‹‹Š‹‹Š‰ŠŠŠ‰ˆ†…„…††„…„}uwxuqpuz|„†‡‡‡ˆ„„ƒƒƒ„„„……„„……†‡ƒ~{{|{{}€~||€~€‚€€€€~€~~~}}|||{zxursux~~~}|zyxttvz€€~|zxvvwz{yxwvvvvwxwvuuuvvyz}~|{x|}ywxyxy{~~~€€~€€€~~~~}}}~}}|}~€€~}}}~~€‚ƒ„€ƒƒƒ€~€€€‚‚‚€€{z{~‚…†……………ƒƒ…†………„„‚€‚€€€€~}||}~~|}~~~||}~~|}}~|{|‚ƒ‚‚ƒƒ‚‚„…†††„‚‚ƒƒƒƒƒ„„ƒƒƒƒƒƒ€ƒ‚„„€‚€€€€€€€€€€€€€€€€~{{|{}|}|{zz{|}||~€€€€~}{|€‚€}|~€€ƒƒ‚~~~€…‡…„…†…††…ƒ~~€€‚‚ƒ„„……………………††‡‡‡††…ˆ‡‡†‡ˆŠŠŒ“”“‘‹Š‰‡††‡‡ˆ‡„{{€ƒˆˆŠ‹‹ŠŠ‰ˆŠŽŽŽ‘““‘Ž…~~~€ƒ„‚‚‚…†…„ƒ‚‚€€€€€€€€€€€€€€€€‚‚„…††††††‡†‡‡…………††††………„„ƒƒƒ‚ƒƒ„„„„„„„ƒƒ„„…………………………‡†…ƒ‚‚‚‚‚€€‚‚‚‚‚‚‚‚ƒƒ………„„„„„……………………†……„………††ˆ‰ˆ…‚‚‚‚ƒƒ‚‚€€€‚‚‚‚‚‚ƒƒ‚„…€€€€€€€€€€€€€€€€‡ˆŠŠŠŠ‹‹ŠŠ‹‹Œ‹Š‰ŠŠ‹‰ˆ†…„††„ƒƒzwywogejpz€‡ŠˆˆŠŒ‡…„ƒ‚‚‚ƒƒ‚‚‚ƒƒ„‚}y{{zz|~|{}€ƒ„ƒ€‚€€€€~€€€~}}|||||ywvxz~€€|ywssuy~€~|{xwvxyzwvvvuvvvxxwvvwwxxy|~~}{zw||yvxyxy|~~~~€€€‚€€€€€~~~~}~}}~}}||}~~~}~~~‚‚€‚ƒ‚€€€‚‚‚‚€{{{~‚…………………ƒƒ…†††……ƒ‚€€€€~}||}~€€€~}}~~}}|}~~~|{|‚ƒ‚‚ƒ‚‚ƒ…†‡†„‚‚ƒ„ƒ‚ƒ„„ƒ‚ƒƒ„„„ƒƒ…ƒƒ†…‚€‚€€€€€€€€€€€€€€€€{{|{}~|}|{{z{|}{{}~€€€€€€€~~z|€ƒƒ‚€~~~}}}€€ƒƒƒ€€€€…‡…„…†…†‡…ƒ}|}€‚ƒ„…†………………………††‡††……‡‡†‡†‡‡ˆŠ‰‰‹ŽŽ‹Šˆ‡‡‡‡ˆˆ‡„{|ƒˆ‰‰‹‹ŒŒŒŠŒ‘’‘Ž‹Œ„~}~~€„„ƒƒ…†…„ƒƒ€€€€€€€€‚ƒƒ……††††‡†‡‡‡…………††††„„„„ƒƒ‚‚‚ƒ………ƒƒƒƒƒƒƒ„„………………………‡†„ƒ‚‚‚‚€€‚‚‚‚ƒ‚‚ƒƒƒ††…………„„††††††††……„„„…†††ˆ‰ˆ…‚‚‚‚ƒƒ‚‚€€€‚‚‚‚ƒƒ€„…‡€€€€€€€€€€€€€€€€†ˆ‰ŠŠŠŒ‰‰Š‹ŒŒ‹‰‰‹‹‹‰‡†„††„„ƒy{zwmc`fmz‰‹ŠˆŠŒˆ†ƒ‚‚€~ƒ‚‚‚‚|yz{yz{{yy|…††‚‚€€€€€€€‚€~}{zyz|~}}~€€}{yutvz€~|{zxxwxxuuvvvuuuxwwvwwxywx{|}|zyx|}ywxyxy{~~}€€€‚€€€€€€€€€}}~}~~~~~~||||}~}}~~~~~€€€€€€€€€‚‚‚‚{z{~‚…†……………ƒƒ…†„„„„„ƒƒ‚‚€€€||}}~~€€~}~~€~~|{|‚ƒ‚‚‚‚ƒ…†††„‚‚ƒ„ƒ‚‚‚ƒ‚‚‚„…††††‡„…††€€€€€€€€€€€€€€€€€{||{}~{{{|{|{|{z{|~~~~€€€~}y|„…ƒ€~~~}}~€€‚‚‚‚‚„…ƒ‚‚€€€…‡…„…†……†‡ƒ||}€€‚„…††…………………………††††……„„††ˆˆˆˆ‰‡†‡ˆ‰‰‡Š‰ˆ‡‡‡ˆˆˆ‡„{{€ƒ‡ˆˆ‰‹ŒŽŽ‹ŒŽ‘‘”“’’’Œˆ‹ƒ}}~~€„„‚‚‚…†…„ƒ‚‚€€€€€‚‚ƒ„„…………††‡‡ˆˆ††††…………ƒƒƒƒƒ‚ƒ‚‚‚„„…„„ƒ„ƒƒƒƒ„…………………………‡†…ƒ‚‚‚‚‚€€ƒ‚‚‚‚‚‚‚‚ƒƒ†††……………††††††††…„„„……†††ˆ‰ˆ…‚‚‚‚ƒƒ‚‚€€€‚‚‚‚ƒƒ‚‚„†ˆ‰€€€€€€€€€€€€€€€€ˆ‰ŠŠ‰ˆ‰Š‰‰ŠŒŽŒ‹‰ŠŠ‹ŠŠ‰‰†ˆˆ‡…„~yyxtledjp|ƒŠŒ‰‡‡ˆ‡…‚‚ƒƒ€…„ƒ‚‚‚ƒƒ‚}yz{zz|zxx{€„††ƒ‚€€€€€€€‚‚€~|zyxx|€‚‚€€~€~}|xxx|}{{zyxwwvvwwwvvtswwvvvwxywy{}}|{yy}~zxzzyy|~~~~€€€€‚€€€€€€€}}}~~~~~~|{{{|||}~~~~~€‚‚ƒƒ‚€€€€€€€€€‚‚‚{{{~‚…………………ƒƒ…†…………„ƒ‚€€z{}~~}}}~~~|||}~~}|~|{|‚ƒ‚‚‚ƒ„†‡†„‚‚ƒ„„ƒ‚‚ƒ‚ƒ…†‡‡‡†„„…ƒ€~€€€€€€€€€€€€€€€€€||}{}~{{{||||{{{||}}}}|}~~~~}}z}„„ƒ€~}|}~€€€‚ƒƒ‚ƒ„…„„ƒ‚€€…‡…„…†…„‡‡…}~€‚‚ƒ„……………………………………†††……‚ƒ…‡ˆ‰‰‰Šˆ……††…„‰‰ˆ‡‡‡ˆ‰ˆ‡„{|ƒ†††‡‰ŒŽ‹Œ’“”–•””“Œ‰Š‚||}~€„„ƒƒ…†…„ƒƒ€€€€€€‚‚‚ƒƒ„„…„……†‡ˆˆ‰††††…………ƒƒƒƒƒƒƒƒ‚ƒƒ„„„„„„„ƒƒƒ„…………………………‡†„ƒ‚‚‚‚€€‚‚‚‚‚‚ƒƒƒ††…………„„††††††††„„„„„††‡†ˆ‰ˆ…‚‚‚‚ƒƒ‚‚€‚‚‚‚‚ƒƒ„„„…†ˆ‰Š€€€€€€€€€€€€€€€€‡ˆ‰‰ˆˆ‰Š‹‹ŒŽŒŠ‹ŠŠ‰ŠŠ‹‹‰‹‹‰‡„~wwuqlhinsz€‡‹Š‡‡‡ˆ…ƒƒ„…„‚††…„„„„„ƒ}z{|zz||zy{~‚‚ƒ€~}~€€€€€€€€€~}|zyyx{€~~}}}~€|{|~|{{{zywvuxxyxwusrvvvuvwxyz{}€}|z~{y{|zy|~~~€€€}}}}~~~|{{{{|{|~€~}~‚‚‚‚€€€€€€‚‚‚‚{z{~‚…†……………ƒƒ…††††…„‚€‚€€€{|~~}{|~~}|}}{{|||||{~|{|‚ƒ‚‚€‚„†††„‚‚ƒƒ„„ƒ€‚‚ƒ„„…„„ƒ„‚€{zz€€€€€€€€€€€€€€€€€|||{|~{||{{{{||||}}}|{z||}}~}}||~ƒ„ƒ€}{{}}€ƒƒ‚‚ƒ„‚‚‚€€€€…‡…„…†…ƒ†ˆ…~€ƒƒƒ„„„„„„…………………………†††……„ƒ„†ˆŠŠ‰‰ŒŠ‡…†‡†…‰ˆ‡‡‡ˆ‰‰ˆ‡„{{ƒ„„„…ˆ‹Ž‘Š‹ŒŽ‘“•—””””•“Œ‰{|}}€„„‚‚‚…†…„ƒ‚‚€€€‚€€€€‚‚‚ƒƒ„„„„„„…†‡ˆ‰‰‡‡††……„„ƒƒƒƒ„ƒ„„ƒƒƒƒƒ„„…„„„„„……†……………………‡†…ƒ‚‚‚‚‚€€‚€€‚‚‚‚‚ƒƒ†…………„„„†…†…†…††„„„„……‡‡†ˆ‰ˆ…‚‚‚‚ƒƒ‚‚‚‚‚‚‚‚‚ƒƒ††……†‡ˆ‰€€€€€€€€€€€€€€€€„…‡ˆˆ‰‹ŒŒŒŽŽ‹‰‹‹‰‰‰ŠŒŒŽ‹‡„}vxupljkorv|ƒ‰ŠŠ‰‰Š‡„„††…‚‡†…„„„„„ƒ~z{|{{|~|z{}~ƒ}|}~€€€€€€€}}}|{{zzz|}~}~~}{{|~ƒ~~~|{{{zywutyyzyxusqvvuuvwxy|~€‚‚€~{€|z|}{y|~~~€€€€|}}~~~|{zz{{z|~€€€~~€€€‚‚€~€€€‚‚‚‚‚{z{~‚…†……………ƒƒ…†„„„„„ƒ‚‚‚€€€}}~~~~}|y}€}|~€~}||||}~~|{|‚ƒ‚€‚€€‚„†‡†„‚‚ƒƒ…„‚€€‚ƒƒƒƒƒ‚€~}xvw€€€€€€€€€€€€€€€€€||}{|}z}|{zz{|}}}}}|{zy{{|}}||{}~€‚ƒƒ‚|yz|~}{~€‚ƒ‚ƒ€€€€€€€€…‡…„…†…‚†ˆ†………„„„ƒƒƒ††††††††„……††……„„…‡‰ŠŠˆˆŽ‹ˆ‡ˆ‰‰ˆ‰ˆ‡‡‡ˆ‰Šˆ‡„{{ƒƒƒƒ„†ŠŽ‘ŠŠŒŽ‘”—™“’“”–•’ˆ{{}}€„„‚ƒ…†…„ƒƒ€€‚€€€€‚ƒƒƒƒƒ„„„„„…†‡ˆ‰‰‡‡††……„„ƒƒ„„„„„„„ƒƒ‚‚ƒ…………„„„…††……………………‡†…ƒ‚‚‚‚‚€€€€€€‚‚ƒƒƒ…………„„„„……………………„„„„…†‡‡†ˆ‰ˆ…‚‚‚‚ƒƒ‚‚‚‚ƒ‚‚‚‚‚ƒƒ‡†………††‡€€€€€€€€€€€€€€€€…‡ˆ‡……ˆ‹ŒŒ‹‹ŠŠ‹‹Œ‹‰ŠŒŒ‰ŒŒ‰ˆ†€ywtoljjkkn}‡‰ŠŠ‰‰‰ˆ‡…„„„ƒ†‡‡†„ƒ„†„€|z|}|zyyz{}~~~€€€€€€€€‚€~~~~~~}}}{|}~}~~}{yz|}}}}}‚~|{{|}|xvyyywtrrsuuvtsrtvw{~~}yz~zxyyxw}€€€~€€€€€€€~~€€~~~}}|||{{~~~€‚‚‚€€‚‚ƒƒƒ‚€€€€€€€‚‚ƒƒ}||~‚†‡‡……„„„„……„ƒƒ„ƒ€€‚€‚‚€~~~}}}}~~}}}~€|||||||||{{}€‚‚ƒ‚€‚„…‡†…„ƒƒƒƒ„ƒƒƒƒƒƒ‚„ƒ„„ƒ€|yz{|}}||{€€€€€€€€€€€€€€€€~{|}}~||{{zz{{|{~~zy{|{}||||{{{}~ƒ„……~||}}}||ƒƒ‚‚‚‚€~€~€ƒ…††…„‚‡Š‡€}„„„„…………………………………„„„……………‡‡‡ˆˆˆ‰‰Š‰ˆ‡††‡‡‰‰‰‰‰ˆˆˆˆ†…„~y}††…„„‡Œ‘•‹Œ“–—”•”’“•”†‚~~~}€„†‚…‡†…†„‚€€€€€€ƒ„ƒ‚‚ƒ„„„„……††††……„„ƒƒ„„„„ƒƒƒƒƒƒƒƒ„„„„„„…………„„„„„„„ƒ‚…††„‚€€‚‚‚‚‚€€‚‚‚‚€‚ƒƒ‚ƒ„……„„„„ƒƒƒƒƒ„……†††…†…†…†…†ˆ‰ˆ…‚‚‚‚‚€€‚ƒƒ‚‚‚‚‚‚‚„†‡…††„‚‚„†€€€€€€€€€€€€€€€€…‡‰ˆ†…ˆ‹ŒŒ‹‹Š‹‹‹‹ŠŠŠ‹‹‹‹‰‹Œ‰ˆ†€yxvrnjgggn|†ˆŠŠ‰‰ˆˆ†…„ƒƒƒ‡‡ˆ‡‡††‡€}zy{}}{yzz|}~€~€€€€€€€€€€€~~~~}}|{{}€}}}|{z{}}~}}~|{z{|{xuyzzxusssvwwvttvxy|~}}~{z~~zwyyxx}€€€€~€€€€€€~€€~~~}}|||||~~€€‚‚€‚‚ƒƒ‚‚€€€€€€‚ƒƒ~}}‚…††……„„„„………„„…„€‚€‚‚€~~~~~}}}}~~~~~~|||||||||{{}€‚‚ƒ‚€€‚„…‡†…„ƒƒƒƒ„ƒƒƒƒƒƒ‚‚ƒƒ„ƒ~|z{|}}}|{€€€€€€€€€€€€€€€€}z{}|~||{{zz{{|z|}}|}{z}||||{{{|}€‚ƒ…„„~||}}}|}‚‚‚‚ƒ€€€}}}~‚ƒ…†††„„ƒ‡‰†€}€„„„„…………………………………†††††‡‡‡‡‡‡‡‡ˆˆˆ‰‰ˆ‡†‡‡‡‰‰‰‰ˆˆˆˆ‰ˆ‡…y|ƒ†…„„†‹’ŽŒŠ‹“•–“”“’“–”†‚~~}}€„†‚…‡…„†„‚€€€€€€€ƒ„‚‚‚„„„„„……††††……„„ƒƒ„„„„ƒƒƒƒƒƒƒƒƒ„„„„„„………„„„„……„ƒ‚‚…††…€€‚‚‚ƒ‚€€‚‚‚‚€‚ƒƒ‚‚ƒ„……„„„„ƒƒƒƒƒ„……††…†…†…†…††ˆ‰ˆ…‚‚‚‚‚€€‚ƒƒ‚‚‚‚‚‚‚„†‡…††„‚‚ƒ†€€€€€€€€€€€€€€€€‡‰Š‰††‰ŒŒŒ‹Š‹Š‹‹‰Š‹‹ŠŠ‰Š‰‹‹‰ˆ…zyyuogccdn|†ˆ‰Š‰‰ˆ‡†„ƒ‚‚‚……†‡ˆˆ‡…}{yy{}}|zz{|}~€€€€€€€~€~~~|zy|€‚€}|||{{|~€}~~}~€~|{zz|zxv{{{yvttuvwxvuuwy{}}||~~|z~zxyyxx}€€€~~€€€€€€~~€€~~~~}}||||~~€€‚€‚‚ƒ‚‚€€€€€€€€‚‚ƒƒ~‚„…………„„„„……†„„†…‚‚‚‚‚€~}}}}}~~~~~€€~}||||||||||{{}‚‚ƒ‚€‚„…‡†…„ƒƒƒƒ„ƒƒƒƒƒƒ‚€‚ƒ„ƒ€~}yz{|}}}|€€€€€€€€€€€€€€€€}y{||}~{|{{{{{{||z{|~|{{}||||{{{z}ƒ……„ƒ~||}}}|~ƒ„€€€}}~††‡‡‡†…„ƒ†ˆ†~€„„„…„………………†…†………†††‡‡‡‡ˆ††††‡‡‡‡‰ˆˆ‡‡‡‡ˆ‰ˆ‰ˆˆ‡ˆ‡‰‡ˆ‡‚|}‚†…„ƒ…ˆŒŒŠ‰ŠŽ’””’““’”–•…~}}}€„†„‡…„…„‚€€€€€„„ƒ‚ƒƒ„„„„……†††………„„„ƒ„„„„ƒƒƒƒƒƒƒƒ„„„„„„………„„ƒ„…………„ƒƒ…††„‚€€‚‚‚‚‚€‚‚‚‚€‚ƒƒ‚ƒ„………„„„„„ƒƒ„„……†††…†…†…†…†ˆ‰ˆ…‚‚‚‚‚€€‚ƒƒ‚‚‚‚‚‚‚„†‡…††„‚ƒ…€€€€€€€€€€€€€€€€ˆŠ‹Š‡‡‰ŒŒŒ‹‹Š‹‹‹‰‹Œ‹Š‰‰Š‰ŠŠŠˆ„zzzumd`bfqˆ‰ŠŠ‰‰‡†…„‚‚‚‚‚„‡‡„‚|{zz{{{{{||}}~€€€€€€~}~€€€€}|{}€}|}}|||~~~}~€€~}{|||zx{||zwuuvuvwvtuwy{~~}}~|z~~zwyyxx~€€€ƒ‚‚€€€€€€€~€€}~~}}||}~€€€€€‚‚‚€€‚‚‚€€€€€€‚ƒƒƒ€‚„„ƒ……„„„„……†„„……‚‚‚€‚‚€~|||}}~~~}}}~}}|{|||||||||{{}€ƒ‚ƒ‚€€‚„…‡†…„ƒƒƒƒ„ƒƒƒƒƒƒ‚‚ƒƒ|zyxyz}}~~~€€€€€€€€€€€€€€€€|yz|{}~{|{{{{{{|{xz{{{~}||||{{{y|…††ƒ‚~||}}}|€€€€ƒ„ƒƒƒ€€†††‡‡‡††ƒ…‡…€„„„„……………††…†…†…†……††††‡‡††††††††ˆˆ‡‡†‡‡ˆˆˆˆˆ‡‡‡‡…†‡ˆ…€‚†…ƒƒ„†‰‹‹‰ˆ‹Ž‘““‘“““”—”…}}}}ƒ…€„†…„…„‚€€€€€€€ƒ„‚‚‚„„„„„……††…………„„„„„„„„ƒƒƒƒƒƒƒ„ƒ„„„ƒ„„…„„ƒƒ„……††…„„…††…€€‚‚ƒ‚‚€€‚‚‚‚€‚ƒƒ‚ƒ„…………„„„„„„„……†…†…†…†…†…††ˆ‰ˆ…‚‚‚‚‚€€‚ƒƒ‚‚‚‚‚‚‚„†‡„……„‚…€€€€€€€€€€€€€€€€‰ŠŒŠ‡‡‰ŒŒŒ‹Š‹Š‹‹ŠŠŠ‰‰‰‰ŠŠ‰‰Šˆƒ~z{ytjb`eju‚ŠŠŠŠ‰‰‡†…ƒ‚€ƒ……ƒ~~|{zz}}}}~~€€€€€~~~€€€}~~€€€€~€~|{|~~~~||}~~}}€}|~}|{|}}zxuuvstutssvxz}€}yz~zxxyxy~‚€€€€‚‚ƒ€€€‚€~€€}~~}}}~~€€€‚‚‚€€‚‚‚€€€€€€€€‚‚ƒƒ„‚€€ƒ„„ƒ……„„„„………„„…„€‚ƒ‚€}|||}}}~~{{{z{{|}|||||||||{{}‚‚ƒ‚€‚„…‡†…„ƒƒƒƒ„ƒƒƒƒƒƒ‚€‚„|vtsvwz|~~€€€€€€€€€€€€€€€€|yz|{|~{{||||||{{{|}zz}}||||{{{y|„‡…ƒ‚~||}}}|€€€€ƒ„„„„ƒ‚ƒƒƒ„„††ˆˆƒ„…„‚‚ƒ„„…„…………††††††††……††††‡‡†††††…†…ˆ‡‡†‡‡ˆˆˆ‡ˆ‡‡†‡†……‡ˆˆ„‚…„ƒƒ„†ˆ‰Šˆ‰ŠŽ‘’’’”•”•–“Ž…€~}}|ƒ…€€ƒ†„ƒ„„‚€€€€€„„ƒ‚ƒƒ„„„„……††………„…„„„„„„„ƒƒƒƒƒƒƒƒ„„„„ƒƒ„„„„ƒƒ„„…††……„…††„‚€€‚‚ƒ‚‚€‚‚‚‚€‚ƒƒ‚ƒ„†…………„„„………………†††…†…†…†…†ˆ‰ˆ…‚‚‚‚‚€€‚ƒƒ‚‚‚‚‚‚‚„†‡„……ƒ€‚„€€€€€€€€€€€€€€€€‰‹ŒŠ‡†‰‹ŒŒ‹‹Š‹‹‹Š‡„„…ˆŠŠŠˆˆŠˆƒ}z{xrjcbfku‚ŠŠŠŠ‰‰‡†…„‚‚€€ƒ„„ƒ‚€‚ƒ‚|||~~~~~~€€€€€~}~~€€€€~€€€€‚{y{~~€}|}~~€}|~€€‚€}}}~}||}|{wuuvrsttstvxz~€€€}xz~~zwyyxy~‚€‚€€€€€~€€€€‚€~|€€~~}}€€‚‚€€€€€€€€‚ƒƒƒ‚€ƒ……„……„„„„………„ƒ…„€‚€‚‚€~|||}}}}}{zyyy{|}|||||||||{{}€ƒ‚ƒ‚€€‚„…‡†…„ƒƒƒƒ„ƒƒƒƒƒƒ‚€ƒ…ztqquwy|~€€€€€€€€€€€€€€€€€€€}zz}{}~{{||||||{|‚…‚}zz}||||{{{z}€„……„ƒ~||}}}|~ƒ„ƒ„ƒ‚€‚‚…†ˆƒ„„ƒƒƒƒƒ„„„……………†††††††††††‡‡‡‡ˆ††††††……ˆ‡‡‡‡ˆˆ‰‡‡‡‡††††‡‡‡ˆ‡…ƒƒƒƒ„†ˆ‰‰‰‰Œ’’‘“•–••–‘‹„€}}||ƒ„€ƒ…„ƒ„„‚€€€€€€€€€€€€€€€ƒ„‚‚‚„„„„„……††……„…„…„„„„„„ƒƒƒƒƒƒƒ„ƒ„„„ƒƒƒ„„„ƒƒƒƒ„…………„…††…€€‚‚‚ƒ‚‚€€‚‚‚‚€‚ƒƒ‚ƒ„††…………„„………†…†…†…†…†…†…††ˆ‰ˆ…‚‚‚‚‚€€‚ƒƒ‚‚‚‚‚‚‚„†‡„„„ƒ€€‚„€€€€€€€€€€€€€€€€‰‹‹Š‡†ˆ‹ŒŒ‹Š‹Š‹‹‰ƒ}|†‰ˆŠˆˆŠˆ‚|z{xsmhfffs€ˆˆ‰ŠŠŠ‡†…„ƒ‚‚‚‚ƒƒƒƒ„„ƒ††ƒ€€~~€€€~~}}~~€€€€€€€€€€€€~{z|~~€~~~~€€}{}€€~{z{|{z{||zwttustuttuwz|€}zz~zxyyxy‚‚‚€€€€€€ƒ€~|€€€~~~€€‚‚€€€€€€€€€€‚‚ƒƒƒ€„…††……„„„„……†„„……‚‚‚€‚‚€~}}}||||||||{|||||||||||||{{}€‚‚ƒ‚€‚„…‡†…„ƒƒƒƒ„ƒƒƒƒƒƒ‚€„‡ƒ{usttvy{~€€€€€€€€€€€€€€€€€}z{}|~|{||}}||{~…Œ‹†€|z}||||{{{|}€‚„„…„~||}}}|}‚‚‚‚ƒ‚ƒƒ€€€~ƒ„ƒƒƒƒ„„„ƒ„„„„…………†††††††††††††‡‡‡‡‡‡††††…‡‡‡†‡ˆ‰‰‡‡‡††††…‡††‡‡†‚~‚‚ƒ„…‡‰‰‰‰ŠŒ’’‘•—˜––”ˆ„€}|||‚„€ƒ…ƒ‚„„‚€€€€€€€€€€€€€€„„ƒ‚ƒƒ„„„„……††„„…„…„……„„„„ƒƒƒƒƒƒƒƒ„„„„ƒƒ„„„ƒƒ‚‚‚ƒ„……„„…††„‚€€‚‚‚‚‚€€‚‚‚‚€‚ƒƒ‚ƒ„†††……………†††…†…†…†…†…†…†…†ˆ‰ˆ…‚‚‚‚‚€€‚ƒƒ‚‚‚‚‚‚‚„†‡ƒ„„‚€ƒ€€€€€€€€€€€€€€€€‰Š‹‰†…‡ŠŒŒ‹‹Š‹‹‹ˆ€xw~…‡‡Š‡‡Š‰‚|zzxtqmhdbp}†‡ˆ‰Š‹ˆ‡…„ƒ‚‚‚‚ƒƒƒƒ…€ƒ‡ˆ…ƒ„…~~€€€€~~}}}~€€€€‚€~€€~~€~|||}~|~€€€}{}€}yxyzzy{|{yvttutuvvuvy{~€€~}~|z~zwyyxz‚‚‚€€€€€€€ƒ}|€€€~~~‚‚~€€‚‚‚€€€€€€€€‚‚ƒƒ‚€„†‡‡……„„„„……‡……††ƒ‚ƒ‚€‚‚€~}}}}||{{}}~~~}{{|||||||||{{}€‚‚ƒ‚€‚„…‡†…„ƒƒƒƒ„ƒƒƒƒƒƒ‚€…ˆ…}wvxtux|~€‚€€€€€€€€€€€€€€€€~{|~}~|{||}}||{‹‘ކ‚€~}||||{{{}~‚„……~||}}}||ƒƒ‚‚‚ƒƒƒ€€€~}|}€„ƒ‚ƒ„…„ƒ„„„……………††††††††„„„……………‡‡‡‡††††‡‡††‡ˆ‰Š‡††††…………„„…‡ˆ„€‚ƒ„†ˆ‰Š‰‰Š‘“’‘–˜˜—•”†„€}|||~‚„€ƒ…ƒ‚„„‚€€€€€€€€€€€€€€ƒ„ƒ‚‚ƒ„„„„……††„„„„„………„„„„ƒƒƒƒƒƒƒƒ„„„„‚ƒƒ„„ƒƒ‚‚ƒ„„„„„…††„‚€€‚‚‚ƒ‚€€‚‚‚‚€‚ƒƒ‚ƒ„††††…………††††††………†…†…†…††ˆ‰ˆ…‚‚‚‚‚€€‚ƒƒ‚‚‚‚‚‚‚„†‡ƒ„„‚€ƒ€€€€€€€€€€€€€€€€‰ˆ‡…ƒ„‡Š‰ˆ†…‡ŠŠ‰Š‚xsv~†‹‰†„…ˆ…{syvtsmedfr}†‡‡†‡ŠŠ‡„ƒ„†…„ƒ‚‚ƒ„…„……†ˆ‰‡†‡‡„€~~€€€€€€€~}|~~~~~‚€€€€~€€€~€€€€~||€€€€~~~}}}~~}{yxxw{{zywvutwvutuwz|z}~~~{z€|zzzx{~‚€€€€€€€~~~€~~~}€€€€€€€€€€€‚ƒ„ƒ‚€~€}~‚‚‚ƒƒ‚‚‚ƒ„…‡ˆ‡†……„„……„………„„ƒ‚‚‚ƒ…ƒ}}}}}}}}~~}|{{{{{|||}}~~zzz|€‚‚‚‚‚‚‚ƒ„…†…‚ƒƒ‚‚‚ƒƒƒ„‚}yvuuwxz~}}€€€€€€€€€€€€€€€€||||{}€|{|ƒ‡‹Š†„‚z}|yy{€‚„…„‚€€~~}||}~€‚€ƒƒ‚‚‚~}}}~}€ƒƒ‚‚„„„„…………………††‡‡††„…††……†‡††††††††……………†‡ˆ†††……†††ˆ‡‡‡ˆˆ‡…}~„ŠŒŒŠŽŽ“•“–•˜š–‘‹…ƒ~{}~ƒ€„†…„‚€€€€€‚‚‚‚‚ƒƒ„„ƒƒ„„„………ƒƒƒƒƒƒƒƒ„„„„„„„„ƒƒƒƒƒ„……„„„„„„„„„„„„…………ƒƒƒƒƒ€€€‚‚‚‚€ƒƒ‚‚‚‚€ƒ………………………‡††……„……………†††‡‡†ˆ‰ˆ…‚‚‚ƒƒ‚‚‚€€‚‚‚ƒ„……ƒƒ‚€„€€€€€€€€€€€€€€€€ƒ„ƒ‚‚ƒ‡Š‰…‚‚„†ˆ‰ˆtoqzƒˆ‹Šˆ†ƒ€|zzwtqkeeis~†ˆ‡†‡ŠŒ‰…„„……„„ƒ‚‚ƒ„„ƒ„ƒ„‡‡†††‡ƒ~~€€€€€€€~}}~~~~~€€€€€€€~€€€€~}|€€€€~~}~~ƒƒ‚}{zzzyxwvvuvuttuxz|z}~}}~|yz€|zzzx{~‚€€€€€€€€€€~~~}€€€€€€€€€€€€‚ƒƒ€€~~€‚‚‚„„ƒƒƒ„……‡†…„„„„…„………„ƒ‚‚€€„‚~}}}}}}}}|}}~}|zy{{{||}}}zzz|€‚‚‚‚‚‚ƒ„…†…‚ƒƒ‚„ƒ‚‚‚‚‚ƒ„‚}yvuuwxz~}}€€€€€€€€€€€€€€€€~~~€‚‚}~‚…„‚€‡‰‘‘Œ„~{|}€ƒƒ}}|}€‚„‚€€~}}||}~€‚‚‚‚€€€€~~~~€}€ƒƒ‚ƒ„„„„…………………†‡‡‡††…†††………†††††††††…………†‡ˆˆ†††……†††‡‡†‡‡‡†…€~|~ƒ‰ŒŒŒŽ‘““”“–˜–“„ƒ~|}~€ƒ€„†…„‚‚€€€€€€‚‚‚‚ƒƒƒ„„ƒƒ„„„………ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ„„…„„„„„„„„„„„„…………ƒƒƒ„ƒ‚€€€‚‚‚‚€ƒƒ‚‚‚‚€ƒ………………………‡‡†…………†………†††‡‡†ˆ‰ˆ…‚‚‚ƒƒ‚‚‚‚€‚‚ƒ„……ƒ‚‚€„€€€€€€€€€€€€€€€€„„…„ƒ…ˆ‹Š}‚„Ї}rknw€†‹ŒŠƒ|x|€{wsojeglt†ˆˆ‡‡Š‹‰…ƒ‚‚‚ƒ‚€‚‚‚ƒ†‡……†…‚~€€€€€€~~~~~~~€€‚€€€~€€€€~}|€€€~~~…†‡‡„€|zxxxxwwwwttttvx{|{~}}}{xz€|zzzx{~‚€€€€~€€€€€€€~~~~}€€€€€€€€€€€€‚‚‚€€‚€€€€€„„ƒƒƒƒ„…†…„ƒƒƒ„„………„„ƒ‚€€€‚€|}}}}}}}}||~~~|zy{{{{||||zzz|€‚‚‚‚‚‚‚‚ƒ„…†…‚ƒƒ‚„„ƒ‚‚‚ƒƒƒ„‚~xvuuwxz}}€€€€€€€€€€€€€€€€~}~€€}{‡‰…ƒ…„‰‹‘—˜‘„y|{|ƒ‹Œ†||}ƒ„ƒ‚€~~}}|}~ƒ…„„ƒƒ‚‚€€€€~~~~€~€‚ƒƒ‚ƒ„„„…„………………††‡†††††‡†…„……††††††††††††‡‡ˆ‰†††……†††‡†††‡‡†„~|{}‚‡‹ŽŒŒŽ“——™˜–—’‡ƒ|}~€ƒ‚€€„……ƒ‚€€€€‚‚‚‚‚ƒƒ„„ƒƒ„„„………ƒƒ„ƒ„ƒ„ƒ„„„„„„„„„ƒƒƒƒƒ„…„„„„„„„„„„„„…………ƒ„„ƒƒ‚€€‚‚‚‚€ƒ‚‚‚‚ƒƒ………………………‡‡††††††………†††‡‡†ˆ‰ˆ…‚‚‚ƒƒ‚‚‚ƒ‚‚‚‚‚ƒ„…„ƒ‚‚…€€€€€€€€€€€€€€€€†‡‡†……ˆŠ‹y~~‚‹‰tmox†Œ‹†~uu{‚|wrnifiow€‡ˆˆˆˆŠ‰‡ƒ€~}}}~}}~€€€ƒ†††…†„~€€€€€€~}~~~~€€€€€€€~~€€€€~}}€~€€ƒ…‡ˆ†€{wwwwwwwwwtttuvy{|}€~~~|xz€|zzzx{~‚€€€€€€€€€€~~}}~~~~~~~~€€€€€€€€€€€€€€€€€€‚ƒ…†‡……„ƒƒƒƒ„…………ƒƒ€ƒ|}}}}}}}}}}||{|{{{{{{{{{{zzz|€‚‚‚‚‚ƒƒ„…†…‚ƒƒ‚‚‚‚ƒ‚ƒƒ„ƒ„‚}yvuvxx{}~€€€€€€€€€€€€€€€€€~~~|€‰Œ…‚†…~…Œ”š˜Ž€w||‡ŽŽ‡€ƒ…‡†„~}}}}}„†‡††††……ƒƒ‚‚‚~}}}~€‚ƒƒƒ„„„„„…………………†‡‡‡††…†††………†††††††††††††‡ˆˆ‰†††……†††††…†††…„}zy|„‰Ž’Ž‹ŒŒ‹’™š›–“–•‹ƒ|}~~€‚‚€„…„ƒ‚‚€€€€€€‚‚‚‚ƒƒ„ƒ„ƒƒ„„„………„„„„„„„„……………………„„ƒƒƒ„„„„„„„„„„„„„„„…………„„„„ƒ‚€€‚‚‚‚€‚‚‚‚‚‚€ƒ………………………‡‡††††‡‡………†††‡‡†ˆ‰ˆ…‚‚‚ƒƒ‚‚ƒƒƒ‚‚‚ƒ„…„‚‚€€…€€€€€€€€€€€€€€€€…†‡‡…†ˆŠ‰}x{~|€‰‹‚xrt{ƒ‡Ž‰‚zvw|€{vrojgjqx‡ˆ‰ˆˆŠˆ†ƒ€|{z{|{{|~€‚‚„†‡†…†‚€~~€€€~€€€€~~~~~~}~~~€€€~€~~}~€~€€€‚…ˆ‰†{wvvvwwwwxttuvxy{|~€}yz€|zzzx{~‚€€€€€€€€€~~~}~~~~~~~~€€€€€€€€€€€€€~€€€ƒ„†‡……„ƒƒƒƒ„………„„‚€‚ƒƒ‚„‚}}}}}}}}}}||||{||{{{{{{{{zzz|€‚‚‚‚‚‚‚‚ƒ„…†…‚ƒƒ‚‚‚‚‚‚‚ƒ„‚~xvuvxyz~~€€€€€€€€€€€€€€€€‚€~€€~ƒŒŽˆ…ˆ‡€Š–™’†}y{…‰‹‰…€ƒ†‡†ƒ~~}}}}‚…‡ˆˆˆˆˆˆ††…„„‚~}}}~€€ƒ„…„ƒ„„…„………………††‡†††„…††……†‡††††††††††††‡‡‰‰†††……††††………††…„~yxz}†’ŽŒ‹Œ”–˜“–™“„|}~~‚ƒ€„…„‚‚€€€€‚‚‚‚‚ƒƒ„„ƒƒ„„„………„„„„„„„„„„„„„„„„„„„ƒƒƒ„„„„„„„„„„„„„„…………„„…„„‚€‚‚‚‚€‚‚‚‚ƒƒ………………………‡‡††††‡‡………†††‡‡†ˆ‰ˆ…‚‚‚ƒƒ‚‚‚ƒ‚‚‚‚‚‚‚‚ƒ„…ƒ‚…€€€€€€€€€€€€€€€€‡ˆŠŠ‰‰ŠŒƒ{vy{{}ƒˆzvx|€‚‹…~yy{}~yurplikqz‚‡ˆ‰ˆˆŠ‰‡…}{{|||{}€‚ƒƒƒƒ„‡‡†…†€~€~€€€€~~~~~}}|}~~€€€~~€~}~~~€€€~ƒ†‰Š‰„{vvvvwwwwvwwxyz{{}€}zz€|zzzx{~‚€€‚€€€€€€€€~~}}~~~~~~~~~~~~~~€€€€€€€‚€€€€€ƒƒ‚‚‚ƒƒ„†…„ƒƒƒ„„……„„ƒ‚€€ƒ„„‚ƒ„‚}}}}}}}}}z|}~}}{z||||{{{{zzz|€‚‚‚‚‚ƒƒ„…†…‚ƒƒ‚‚‚‚‚‚‚€ƒ„‚}yvuvxy{€~~€€€€€€€€€€€€€€€€~|{{}~ˆ‘‰‹‰„~‰””Š€~|‚‰‹ˆ„ƒ„‚€‚ƒ„~~~~}}~€ƒ†‡ˆˆˆˆˆ‡‡…„ƒƒ€€~~~~€ƒ…†…ƒ„„„…………………†‡‡‡††„……†……†‡†††††††††††††‡ˆ‰†††……†††††…†††…„zwzz{‚ŒŽŽŽŽ‘”•– ›„€|}~~„‚‚ƒ„ƒ‚‚€€€€€€‚‚‚‚ƒƒƒ„„ƒƒ„„„……………„…„…„…‚‚‚‚‚‚‚‚…„ƒƒƒƒƒ„„„„„„„„„„„„„…………„………„ƒ‚€‚‚‚‚€‚‚‚ƒ‚‚‚€ƒ………………………††††††‡‡………†††‡‡†ˆ‰ˆ…‚‚‚ƒƒ‚‚‚ƒ‚‚‚‚ƒ„…‚€€€…€€€€€€€€€€€€€€€€‰‹‹‰†ƒƒƒ{wttwxz{{vuvxyy€|ywxyyxvtsrojlp{‚‡ˆˆˆˆ‰‡‡…€|z{|}||~€‚„„„„…†‡…„…~~~€€}~€~~~~~~~~~€€€~~}~~~~€€€~}~~„†‰Š‰†‚€wwvvvvvvxyyzzz{zz}~~~}zz€|zzzx{~‚€€€€€€€€€€€~~~}}}}}}}}}~~~~~~~~~~€€‚‚‚~~€€€€ƒ‚‚‚‚ƒ„‡†…„„„„…………„ƒ€ƒ„ƒƒ€|}}}}}}}}z{}}~}{z}}}||{{{zzz|€‚‚‚‚‚‚‚‚ƒ„…†…‚ƒƒ‚‚‚ƒƒƒ‚ƒ„‚}xvuvxy{€€~~€€€€€€€€€€€€€€€€}{z{}€‹‘Œ‰‡†ƒ‰†‚……‹‹‡„†ˆ…ƒ‚ƒ„‚€}~~~~~~}ƒ†ˆˆˆ‡ˆˆ‡†…„ƒ‚€€~~~~€‚ƒ†‡…ƒ„„„„………………††‡‡††……††……†††††††††††………†‡ˆˆ†††……†††††††‡†…„€zxyyw‰ŽŽŒ‹˜ž¢Ÿ—…€}}~~„‚‚ƒ„ƒ‚€€€€‚‚‚‚‚ƒƒ„„ƒƒ„„„……………………………ƒƒƒƒƒƒƒƒ…„„ƒƒƒƒƒ„„„„„„„„„„„„……………………„ƒ‚€‚‚‚‚€‚ƒƒ‚‚ƒ………………………†…………†‡‡………†††‡‡†ˆ‰ˆ…‚‚‚ƒƒ‚‚‚‚€‚‚‚ƒ„…‚€€€‚…€€€€€€€€€€€€€€€€ˆˆ‡‚|vsrutrqswwuxurrstsqttttttsrusstpllp{‚‡‡ˆˆ‡‰……ƒ{yz|}}|}‚‚„„„††„ƒƒ~}€}~~~~~~~~~}€€€€~~€~~~~~~€€~}}}ƒ…‡‰ˆ†ƒwwwvvvuuzz{{{{zzx{}||}|yz€|zzzx{~‚€€€€€€€~~~€~~~}}}}}}}}}~~~~~~~~~~~€€‚ƒƒ~}€~€€€€€€‚„…†‡†……„„…………„„ƒ€‚€z}}}}}}}}|||||||}~~}}|||{zzz|€‚‚‚‚‚‚‚ƒ„…†…‚ƒƒ‚‚ƒ„„„ƒƒƒ„‚}yvuvyy{€€~~€€€€€€€€€€€€€€€€ƒ€„‡‰‰ŠŒŽŽ‹†„…ˆŠŠˆ…„†ˆ‚†Š‹ˆ‡‰‹‰‡†……„~~~~~~~~}€„†‡‡‡†‰ˆ‡†…„ƒƒ‚~}}}~‚ƒ†‡…ƒ„„„…………………†‡‡‡††††‡†…„……††††††††……………†‡ˆ†††……†††‡†††‡‡…„{xywu}ˆŒ’‘Œ‰„‰•žŸ–‰…€}}~~„ƒ‚ƒ„‚‚‚€€€€€€‚‚‚‚ƒƒƒ„„ƒƒ„„„………………………………………………………„ƒƒƒƒƒ„„„„„„„„„„„„……………………„ƒ‚€‚‚‚‚€‚ƒƒ‚‚‚€ƒ……………………………„……††‡………†††‡‡†ˆ‰ˆ…‚‚‚ƒƒ‚‚‚‚€€€‚‚‚ƒ„…‚€€€‚…€€€€€€€€€€€€€€€€ˆ~rnqtsomortutsrqqrrqpontrpnmnpqopqrsuuv~‚…ˆŠ‹ŒŠˆƒ|zzz|}}~‚ƒ€ƒ†ˆ†ƒ€~~€€€€€€€€€€€~~}}}}~€€€~~}||}~~€€€€~~}…ˆˆˆˆ†‚}wsuwwwx€„…€|{yvy}~}|~|x|€€|y{{z|‚€€}‚‚~~}||~€~~~~~~~~~~~~€€€‚‚€€€€€€€€€€‚‚ƒƒ€€‚ƒƒ„…„…„…„…„ƒ„…„‚€‚ƒ‚€~}}}}}}}}{|}}}}|{}||||{{{|{z{‚ƒƒ‚‚‚‚ƒ„‡†…ƒ‚„ƒƒ‚‚ƒƒ„‚ƒƒ‚{wuvxy{€~€€€€€€€€€€€€€€€€……………………ˆ‡…„ƒƒ„„ƒƒ„„…††‡…„„…†‰‹Œ‰‰‰ˆ‡††…‚‚€~~~~}~‚…‡ˆˆˆ‡ˆˆˆ†„„„€}}}‚‚ƒ„………………………………††††††††‡‡‡‡‡†††„…………†††ƒ†‰ˆ†…†ˆ‡‡‡‡‡‡‡‡†…………†‡‡‚|xwxxy|ŠŽ‘‘‘Ž‹…|™œ–Œƒ}€‚€€€ƒ…„ƒ‚‚€€‚‚‚‚‚‚ƒƒƒ‚ƒ‚ƒ‚ƒ‚„„„„„„„„‚ƒ„……………ƒƒƒƒƒ„……„„ƒƒƒƒ„„……„„„ƒƒƒƒ„„„………†…………„„„„ƒ‚‚‚‚‚ƒ‚‚ƒ„†…†…†…†…††††††††……†††‡‡‡†ˆ‰‡„‚€€€€€‚ƒƒ‚‚‚€‚‚‚‚‚„„„‚€„€€€€€€€€€€€€€€€€‚ypnrwwuoprssrqptttttsrqrqnmlmnommnpqrstyz}€ƒ†ˆˆ‡†ƒ€~}}~}~~€‚ƒ„‚‚‚„††„‚~~€€€€€€€€€€€~~}}}}~~€€€€~~~~||~~€€~~~}…ˆˆˆˆ†‚}wstvvvw€…‡„|xty~~{{zxz~{xyzx{}€~€~‚‚~~}|}~€~~~~~~~~~~~~€€€€€‚‚€€€€€€€€€€€‚‚ƒ‚‚‚‚‚‚„…„…„…„…ƒ„…„‚€‚€‚‚‚€~||||||||{|}}}}|{}||||{{{|{z|‚ƒƒ‚‚‚ƒ„‡†…ƒ‚‚‚ƒƒ‚‚‚‚ƒƒ€€~zvtwyy{€~€€€€€€€€€€€€€€€€ƒƒƒƒƒƒƒƒ„ƒ‚€€€€‚ƒƒ„„„‚‚‚‚„†‡‡‡‡‡††††„ƒ‚€~~~€‚……†…„„…†…ƒ‚‚‚€~}}‚‚ƒ„………………………………††††††††‡‡‡‡††††……………………ƒ†ˆˆ†…†ˆ††††††‡‡†…………†‡‡‚}xxxxy|ˆ‘‘‘‘Œ„zz„‘ˆ„|~€€‚ƒ‚ƒ…‡†…ƒƒƒƒƒƒƒƒ„„ƒ‚‚ƒ„„ƒƒƒƒ‚‚‚‚‚ƒ‚ƒ‚ƒ‚ƒ„„„„„„„„‚ƒ„…………„ƒ‚‚‚‚ƒ„„„„ƒƒƒƒ„„……„„„ƒƒƒƒ„„„………†………„„„ƒƒƒ‚‚‚‚‚ƒ‚‚ƒ„…†…†…†…†††††††††……†††‡‡‡†ˆ‰‡„‚€€€‚ƒƒ‚‚‚€‚‚‚‚‚‚ƒ„ƒ‚€„€€€€€€€€€€€€€€€€„}vtx{|zvwxxxwvuwvvuuttttsqpopqqlmnopqrsrsvy}€ƒ„…„}||}zz{{}€‚‚ƒ…‡†„‚€€€€€€€€€€€~~}}}}~~~~~~~~}|~€~~}…‡‡ˆˆ‡ƒxstuuuv†Š‡ƒztz‚{yyyz}~zwxywz}€€}~€‚ƒƒ‚€~~~~}~~€€~~~~~~~~~~~~~€€€€‚€€€€€€€€ƒƒƒ‚‚‚‚‚…„…„…„…„„……„ƒ‚ƒ‚€~||||||||{|}}}}|{}||||{{{|zz{‚ƒƒ‚‚‚‚‚ƒ„‡†…ƒ‚‚‚‚ƒƒ‚‚‚‚ƒƒ‚‚|xvxzz|~~€€€€€€€€€€€€€€€€‚€€€€‚‚‚‚ƒ‚‚‚ƒ„„„………†††††„ƒ€~~ƒ…‡††…‡‡ˆ‡†„ƒ„„|}~‚‚ƒ„………………………………††††††††‡‡‡†‡†††††††………„„…‡‡††‡ˆ†††††††††…………†‡‡ƒ}yxxwy{†Œ‘‘‘‘„zw|…‡…„€||}~ƒ…ƒƒ„‡ˆˆ‡……………………†……„„„…†…„„ƒƒ‚‚ƒ‚ƒ‚ƒ‚ƒ‚„„„„„„„„ƒƒ„…………„ƒƒ‚‚ƒƒƒ„„„ƒƒƒƒ„„……„„„ƒƒƒƒƒ„„……………„„„ƒƒƒƒƒ‚‚‚‚‚€‚ƒ„†…†…†…†…††††††††……†††‡‡‡†ˆ‰‡„‚€€€€€‚‚ƒ‚‚‚‚€‚‚‚‚€‚„„ƒ‚€€‚…€€€€€€€€€€€€€€€€‡‚zwxyxwttuuuuuusrqpooppssrqpppptsrqpnmmnoqtx|„‚€}zyxxwwxyz|}~„ˆ‰‡ƒ€€€€€€€€~}}}}}~~~~~~€}}€~~~€~}€„†‡‡‰ˆ…ztsttst†Šˆ…‚~z|€~|zzz{{xyzx|‚€€€ƒ„„‚€~~~~~€€~~~~~~~~~~~~~€€€€€€‚€€€€€€€€€€€€€‚‚‚‚‚‚ƒƒ„…„…„…„…„………ƒ‚€‚‚‚€~{{{{{{{{{|}}}}|{}||||{{{|{z|ƒƒƒ‚‚ƒƒ„††„ƒ‚‚‚‚ƒƒƒƒƒƒƒƒ„………ƒ|zy{{|}~€€€€€€€€€€€€€€€€‚ƒƒ„„ƒ‚‚‚‚‚‚‚‚‚ƒ‡†„ƒ‚ƒ„…‚‚ƒ„„…††ˆ‡‡…ƒ~„‡‰‹ŠŠ‰Š‹Šˆ†††…ƒ€~}€‚‚ƒ„………………………………††††††††‡‡†‡†††††††††………„…………†‡ˆ††††††……††………††‡„~yyxwx{‚‰‘‘’‘†|y{{~‚‚‚}|}~ƒ„ƒ‚„†ˆ‡†…………………………„„ƒ„……††…„‚‚€‚ƒ‚ƒ‚ƒ‚ƒ„„„„„„„„ƒ„„………„„„„„„„„„…„„ƒƒƒƒ„„……„„„ƒƒƒƒ„„…„……†„„„„ƒƒƒƒ‚‚‚‚‚‚‚ƒ„…†…†…†…†††††††††……†††‡‡‡†ˆ‰‡„‚‚‚€€€‚ƒ‚‚‚€‚‚‚‚‚‚ƒ„ƒ‚€€€‚…€€€€€€€€€€€€€€€€ƒzwwwwvxxxxyz{{{zxvvvwxrrrqqpooqqpppooomnoquy}‚}zyxwzzz{}~€€ƒ…‡†ƒ€~}|}}}~~~€€€€€€€~}€€~~~}€ƒ†…‡‰‰†„|uttsrs€…ˆ†………ƒ}|}~~|z}‚}{{|{„„ƒ‚ƒ„‚ƒ„…„ƒ€~~€€€€~~~~~~~~~~~~~€€€€€€€‚€€~~~€€€‚‚ƒ„„…„…„…„…„„…†…ƒ‚‚ƒ‚€~{{{{{{{{{|}}}}|{}||||{{{|zz{‚„ƒ‚‚‚‚‚ƒ„†…„ƒƒ‚ƒƒ„„„„„„„„„………ƒ€}{z{{|}}€€€€€€€€€€€€€€€€ƒƒƒƒƒƒƒƒ‚„…†„ƒ‚………„„„„„‡†„ƒƒƒ„„‚‚‚ƒ„……†‡‡ˆ‡…ƒ€„‡Š‹‹‹ˆ‰Šˆ‡„„„„ƒ‚‚ƒ„………………………………††††††††‡†‡†††††……††††††…„ƒƒ…†ˆ‰†††††………†…………†‡‡…{yxwxz~‡‘‘’’‘‡~z{zz}}~~~~€‚€…†…„‚‚‚‚‚‚‚‚ƒƒ‚‚‚ƒƒ†……ƒ‚€€ƒ‚ƒ‚ƒ‚ƒ‚„„„„„„„„„„………„„ƒ……„„„„„…„„ƒƒƒƒ„„……„„„ƒƒƒƒƒ„„………………„„„ƒƒƒ‚€‚‚‚€‚ƒ„†…†…†…†…††††††††……†††‡‡‡†ˆ‰‡„‚‚‚‚€€‚‚ƒ‚‚€‚‚‚‚€‚„„ƒ€€€‚…€€€€€€€€€€€€€€€€‚‚ƒ‚€€‚‚}zz{}zz{{{yxwrrqqppoonnnprwz}~~}|||{||}~€‚ƒ‚€€ƒƒƒ€€€€~}||}}~~~€€€€€€€€€~}~€~~}€ƒ……†ŠŠˆ‡~wttrrs„‡†…ˆ‰ˆ€|z||{~‚‚~{}}|€ƒ…†„„„…ƒ„…†…ƒ}~€€~~~~~~~~~~~~}€€€€‚€}}~~€€~~~~€‚ƒƒ„„…„…„…„…„…†…ƒ‚‚‚€‚‚‚€~||||||||{|}}}}|{}||||{{{|{z|‚ƒƒ‚‚ƒƒ„……„ƒ‚ƒƒƒƒ„„„„„„ƒ‚‚ƒ~{yy{{|}}€€€€€€€€€€€€€€€€ƒƒƒƒƒƒƒƒ~€‚……„‚€†††………„„ƒƒ‚ƒ„ƒƒƒ„„„………†‡ˆ‡„‚€€‚„†‡ˆ‡†ˆ‰‰ˆ…„ƒƒ‚‚‚‚‚‚‚ƒ„………………………………††††††††††††††……………††‡‡‡…ƒ‚„‡ˆ‰‡‡‡†††……††………††‡‡{zxwwz{…Ž’’“““†}yzxxyx{~~~€€€~€‚„ƒ‚€€€€€€€€‚€€€‚„ƒƒ‚€€‚ƒ‚ƒ‚ƒ‚ƒ„„„„„„„„„…………„ƒƒ„„„ƒƒƒƒ„„„ƒƒƒƒ„„……„„„ƒƒƒƒ„„„„……††………„„„„‚€‚‚‚ƒ„…†…†…†…†††††††††……†††‡‡‡†ˆ‰‡„‚‚‚‚‚‚‚‚ƒ‚‚€‚€‚‚‚‚‚‚ƒ„‚€€€‚…€€€€€€€€€€€€€€€€………„„…‡ˆƒ~zxxxxywsqprtv€ƒ„ƒ~€|xtpmlonmmpswy~~~~~}}|z{{|}€„~|~ƒ„€€€~~€~}||||~~~~€€€€€€€€€~~~~€€€~~}‚„„†ŠŠ‰‰xutrrs~„ˆˆˆ‰‰†‚}{}}{|}‚}{||{€‚……„ƒ„…„…††…ƒ}~€‚€~~~~~~~~~~~~}‚‚€€|}}~€€~~}}|€€‚…„…„…„…„……†…„‚‚‚‚ƒ‚€~||||||||{|}}}}|{}||||{{{|zz{‚ƒƒ‚‚‚‚‚ƒ„…„„ƒƒƒƒ„‚ƒƒ„„ƒƒ‚€‚‚€~{yxzz|}~€€€€€€€€€€€€€€€€~„‡ˆ†„‚………„ƒƒ‚‚ƒ‚‚ƒ„†‡…………„„„„‚„†‡‡†ƒ‚€„†‡‡††‰ŠŠ‰‡„„ƒƒ„…ƒ‚€‚ƒ„………………………………†††††††††††††………††††††††…‚€€„‡‰‰ˆ‡‡‡††……†…………†‡‡ˆ|zywwyxƒŽ’’“”•‰}xxwwxv{|{~‚€~€ƒ„„‚€€€€€€€€‚€€€‚€€ƒ‚ƒ‚ƒ‚ƒ‚„„„„„„„„„…………„ƒ‚…„„ƒƒƒƒ„„„ƒƒƒƒ„„……„„„ƒƒƒƒ„„„…………††††…………‚€€‚‚€‚ƒ„†…†…†…†…††††††††……†††‡‡‡†ˆ‰‡„‚ƒ‚‚‚‚‚‚ƒƒ‚€‚€‚‚‚‚€‚„„‚€€€€ƒ†€€€€€€€€€€€€€€€€‚ƒ‚€}||}†ƒ~yusrr{xurqsvx}~€€~|z€€}|zyyonllmptv~~|{yx{{{|~‚‚€}}~€‚‚€€€~~€€~}||||}~~€€€€€€€€€~~}~~€€€€~~}‚„„†Š‹‰‹‚yvtrrs}„ŠŠŠ‰‡ƒ‚}~zz||€€|yz{y~ƒ„ƒ‚‚ƒ„…†‡†„}~€‚‚€~~~~~~~~~~~~}€€‚‚€||}~€€~~}}||€€€€€€€„…„…„…„……††…„‚‚‚‚‚‚€~}}}}}}}}{|}}}}|{}||||{{{|{z|‚ƒƒ‚‚‚‚ƒ„…„ƒƒƒƒƒ„‚‚ƒƒ‚‚‚ƒ„‚€}{xyz{}~€€€€€€€€€€€€€€€€~~~~~~~~‚„ˆ‹ŒŠ‡…„ƒƒ‚€€…„„…†‰‹Œ‡‡†……„ƒƒ€‚…‡ˆ†„‚~€ƒ†‰ŠŠŠ‰‰Šˆ†„ƒƒ}€ƒ†‡…‚€‚ƒ„………………………………†††††††††††††………‡‡‡††††…†‚€„‡‰‰ˆˆ‡‡†††…†…………†‡‡ˆ‚|zxwwyw‚’’“••€xxwyzx}zy~‚„€ƒ…„ƒƒ‚‚ƒ€€€‚ƒ‚ƒ‚ƒ‚ƒ„„„„„„„„……………„ƒ‚††…„„„„…„„ƒƒƒƒ„„……„„„ƒƒƒƒ„„„………†‡‡‡†††……€€€‚‚ƒ„…†…†…†…†††††††††……†††‡‡‡†ˆ‰‡„‚ƒƒ‚‚‚‚‚ƒƒ‚€€‚€‚‚‚‚‚ƒ„‚€€€€‚†€€€€€€€€€€€€€€€€„ƒ€„†„{uqrvyuxyvrrx~~€ƒƒ}tqstvy}€€~|yrnoqppq‚€~}|||{|}€‚ƒƒƒ}~~~~||}~€€€€€€€~~}}|{{{|~€€€~}}~€€}€}{yyyz~€€€€€€}}€…‡†ˆ‹ˆ„|tqrsryˆŠ‰Š‰ˆƒ€~~€}yz~€|yzzw~„†…„„„††…„ƒ‚‚€€€€€€€€€~~~€€€‚‚‚}~~~€€€€€€€€€€€€€€}}}}~€~~~€€~{~}}}~~€€‚„……„„„„……„ƒ‚‚‚€‚‚€~}||{{||}{{{z{||}{{|||}}}}||~ƒƒ‚‚ƒƒ‚‚„†…„ƒ‚‚‚‚„„ƒƒƒƒ„„‚ƒ}yxxuwz}~~}€€€€€€€€€€€€€€€€~ƒƒ€~~‚…ŠŒ‹Š‰‰…€‡„€‰“•’‘Œ‡„ƒ…†„…„…Šˆ~€ƒ…†††…‰‡„ƒ‚‚‚‡ˆ‡…ƒƒƒ…††…„……„„„………††……†††‡‡‡†††††………‡‡†………†‡„‚€€ƒ‡‰‹Œ‹‰†ƒƒ„††††††††‰ˆ„}yyxvy~‰’““••xyyvvy|}}|{|‚~‚†ˆ‡†…ƒ€‚‚‚‚‚ƒƒƒ‚€€‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒƒ„………ƒƒƒƒ„„……„„ƒƒƒƒ„„…„ƒƒ‚ƒƒƒ„„„„„„„„„„ƒƒƒ„„…‡ˆˆˆˆ‡†…‚‚‚‚€€ƒƒƒ„†…†…†…†…†††††††††††††††††‡‰‡„€‚‚‚‚€‚ƒƒƒƒ‚€‚‚‚‚‚‚‚‚ƒ‚‚ƒ„„‚‚‚…€€€€€€€€€€€€€€€€„‚€„†„{uqruxwyyuqry€ƒƒ}tqstux|€€{vsnknu„ƒ€~~}}{{|}~€‚ƒzy|~~}|}}~€€€€€€€€~~}}||{{|~€€€~~€}~~|zxxyxxz}€€€€€~}€…‡‡ˆ‹‰†~vrrsrx€ˆ‰‰Š‰ˆ€}{|~|xz€|yzzx~„†…„„„„„ƒ‚€€€€€€€€€€€~~~€€€}~~€€€€€€€€€€€€€}}}}~€€~€€~|}}}}}~‚ƒ……„„„………„ƒ‚‚‚€‚‚€~{{{{{|}~{{{{{|}}{{|||}}}}|{}ƒ‚‚ƒƒ‚‚„†…„ƒ‚‚‚‚„„ƒƒƒƒ„„ƒ„„|xvvvxz}~~}€€€€€€€€€€€€€€€€~ƒƒ€~~‚†ŠŒ‹‰‰‰…€‡„€€ˆ’•“’‰…‚ƒ„„…„…‰Œ‡}„………„‡†…„‚‚†‹‹‡…„„…††…„ƒ„„…………†††……†††‡‡‡††††…………‡‡†……††‡…„ƒ„†‰ŒŽŽŽ‹ˆ……†††††††††‡†‚|yzywx|†”•––Ž‚xxywvy|}}}|}€‚„†…„ƒ€€€‚ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚ƒƒƒ„………ƒƒƒ„„„……„„ƒƒƒƒ„„…„ƒƒ‚ƒƒƒ„„„„„„„„„ƒƒƒƒ„……ˆˆ‰‰ˆ‡††‚‚‚‚‚€€ƒƒƒ„…†…†…†…††††††††††††††††††‡‰‡„€‚‚‚‚€‚ƒƒƒ‚‚€‚‚‚‚‚‚‚‚ƒ‚‚ƒ„…†ƒ‚‚€‚†€€€€€€€€€€€€€€€€ƒ€~„†…zurrtuxyxtprz‚€„ƒ}tqsuuwz‚ƒƒ‚€}xpls~†…ƒ€{{{{}~€‚‚{tty~~}||}~€€€€€€€~~~}||{{|~€€€€€}~}{xwuutxwxz}€€~~}€„‡†ˆŠŠ‡xsssrx€‡‰‰Š‰ˆ|z{~}yz|zzzx}€„……ƒƒ„€~~~€€€€€€€€€~~~~~~€€€~~~~€€€€€€€€~}}}~€€€€€€}}||{|}~~ƒ„…„„„………„ƒƒ‚‚‚‚€~{z{{|}~|{{{{|}}|||||}}}|{z|€‚€‚ƒƒ‚ƒ„†…„ƒ‚‚‚‚„ƒƒƒƒƒƒ„…†…‚}xvuwx{}~~~}€€€€€€€€€€€€€€€€‚„ƒ~~‚†Š‹Š‰‰Š…€‚‡„ˆ’–“‘‘‹†‚€„……„ˆŠ†~|~€‚„„„ƒ‡‰Šˆ†„„……ВІ„…†‡†„‚‚‚……†…††††……†††‡‡‡†††††………‡††…††‡ˆ‡‡‰‹‘’Ї‡‡††††††††††ƒ~|||zyzƒŽ”•–•Žƒyxywvx|}~}}~ƒ€~‚ƒ‚€€~||}~}|~€ƒ‚‚‚€€€‚‚‚‚‚‚‚‚ƒƒƒ„„„……ƒƒƒƒ„„……„„ƒƒƒƒ„„…„„ƒƒ‚ƒƒ„„„„„„„„„ƒƒƒƒ„…†‰‰ŠŠŠ‰ˆ‡ƒƒ‚‚€ƒ‚‚ƒ„†…†…†…†…†††††††††††††††††‡‰‡„€‚‚‚‚€‚‚ƒƒƒ‚€‚‚‚ƒ……‡„‚€‚‡€€€€€€€€€€€€€€€€‚€~~~„†„€ytssssyyxtps|„‚ƒƒ{tqsxwwz}‚„…~~~}xv}‡‡†„‚€€||{||~€‚ypow}~||}}~~€€€€€€€€~}}||{}~€€€€€€€€}|zwutttuwwwz}€~~~}„†‡‡ˆŠˆƒztrrrw‡‰‰Š‰ˆ~{||{}z{zx}€„…„ƒƒ„€€€€~~€€€€€€€€€~~~~}}}~~~~€€€€€€~}}}}~€€€€~||{{{||}€„„„„…†……„„ƒ‚‚€‚‚€~||{{{|}~||{{{|}~||||||||{zz|€‚‚ƒ‚ƒ…†…„ƒ‚‚‚‚ƒƒƒƒƒƒƒƒ„……‚}ywwyz{}}~}}€€€€€€€€€€€€€€€€€ƒ…„~ƒ†‰ŠŠ‰Š‹…€‡ƒˆ“–”ˆƒ€…†…„…‡„~|~€ƒ„„„ƒ†‰‹Š‡……†‡Œ‘”‹…ƒ„…††„ƒ‚ƒ††††††††……†††‡‡‡††††…†……‡‡†††‡ˆ‰‰‹Ž’““’‘’‘ŽŠ‡‡‡†††††††††‡…€|zŒ“””’„zwxwwx{}~ƒ}}€~~{yyz{zy|}~‚ƒƒƒ€€€€‚‚‚‚‚‚‚‚ƒƒ„„„„„„ƒƒƒ„„…„…„„„„„„„„…„ƒƒ‚ƒƒƒ„„„„„„„„„ƒƒƒ„…†‡‰ŠŠ‹‹Š‰‰„„ƒ‚€‚ƒƒ‚„…†…†…†…††††††††††††††††††‡‰‡„€‚‚‚‚€‚‚ƒƒ‚‚‚‚‚ƒ„…†‰†ƒ‚€ƒˆ€€€€€€€€€€€€€€€€€~}~„‡ƒ~wttttswyyurt}„ƒzrpsyxxy}€ƒ„|{|€‚„ˆ‡†„‚€~~~~}~‚xoov}~|||}~€€€€€€€~~}|||}}~€€€€~{yxwuuuwxwvvy}€~~~}~ƒ‡††‡ˆˆ„{tqqrv~†ˆ‰ŠŠˆ‚~{z~~|{€}{{{y}€ƒ…„ƒƒƒ€€€€€€€€€€€€€€~~~||}}~~~~~€€€€~}}|}}€€}|{z{{||~€ƒ„„„…††……„ƒ‚‚‚ƒ‚€}~}|{{{|||||{|}}~||||||||{zz|€‚‚‚ƒ…†…„ƒ‚‚‚‚ƒƒƒƒƒƒƒƒ‚„‚{{{{{||}}}}€€€€€€€€€€€€€€€€‚„†…‚~~„†‰Š‰‰Š‹…€‚…ƒ€Š”—”މ„€…‡†‚ƒ„‚}}ƒ………„‚…ˆ‡„‚ƒ„†Š‘Žˆ„‚ƒ„†……„„„††††††††……†††‡‡‡†††††………‡†††‡‡‰‰ŒŽ’“’‘‘‰†……†††††††††‡†ƒ‚ƒƒ}y~Š’””’†{wwxxx{}€€€€‚„‚||}~~}|zxwxyyxz{~‚ƒ‚€€€€‚‚‚‚‚‚‚‚„„„„„„ƒƒƒƒƒƒ„„……„„„„„„„„…„„‚ƒ‚ƒƒ„„„„„„„„„ƒƒƒ„…‡‡ŠŠ‹‹Œ‹‹Š……ƒ‚‚€ƒ‚‚ƒ„†…†…†…†…†††††††††††††††††‡‰‡„€‚‚‚‚€‚ƒƒ‚‚‚‚‚‚ƒ…‡ˆŠ†„ƒ€ƒ‡€€€€€€€€€€€€€€€€~||~„‡€{usuvusuxyxuv}ƒxpnqxxwy|€‚ƒ{{‚‡‡……ˆ‡…ƒ€~~€€€€zsrw|}{|}}~~€€€€€€€€~}}||~}}€€€~|zxwwwwxxyvuuy|€€€~€}}ƒ†‡††‡ˆ…}tqqru~…ˆˆ‰Šˆ‚}yxz|{y{€‚~{|{y|ƒ„ƒ‚‚ƒ€€€€€€€€€~~~|}}}~~€€~~~~~~€€€€€‚~~}}|}~~€~}}|{z{{|}‚ƒ„„†‡††…„ƒƒ‚‚‚€‚‚€~~}|{{z{}||||}~~}}}||||||{z|€‚€‚‚‚„…†…„ƒ‚‚‚‚‚‚ƒƒƒƒ‚‚€‚ƒ‚}|}|}|}}}}}€€€€€€€€€€€€€€€€ƒ…‡†‚~…‡‰‰ˆˆŠŒ…€„ƒ‚…Ž—˜“ŽŒˆ„€…‡†‚€‚€}}„………„‚„……ƒ‚ƒ„…ˆ‹Š†„ƒƒ…††………†††††…†…………†††‡‡‡††††…†……‡‡††‡ˆ‰ŠŽ‘‘ŽŒˆ…„„††††††††„†…ƒ‚ƒƒ{v{ˆ‘”””‘‡|vvxxxz}€‚‚ƒ…‚{{|~~~|zwwxyxwz{}€€€€‚‚‚‚‚‚‚‚……„„„ƒƒƒƒƒƒ„„„……„„„……„„„…„ƒƒ‚ƒƒƒ„„„„„„„„ƒƒƒ„…†‡ˆ‰Š‹‹ŒŒ‹‹‡…ƒ‚‚€ƒƒ‚„…†…†…†…††††††††††††††††††‡‰‡„€‚‚‚‚€€‚ƒƒƒ‚‚‚‚‚‚„†ˆ‰‰‡……ƒ‚†€€€€€€€€€€€€€€€€~}||~…‡}xssvywtqv{{yx|€€}vnmpuuvy}ƒƒ‚|z€‡ˆ††Š‰‡„‚€~€€}xwz||{||}~€€€€€€€~~}||~}}€~}}~}{xwwxxxwwvutux|€€€€}}‚‡‡……†‰‡vrrtu}…ˆˆ‰Š‰„ywyzyw|€‚~|||z|‚„ƒ‚‚‚€€€€€€€€€€€€~~~}}}~~€€€~~}~~€€~€€€‚‚‚ƒ~}}|||}~~}~~~}|{{{|||~ƒ„„†‡††…„„ƒ‚‚‚€‚‚€~~}|{{{{{}}|||}~}}}|||{{}|{}ƒ‚€‚‚‚„††…„ƒ‚‚‚‚‚‚ƒƒƒƒ‚‚‚ƒ„‚|{|~}}}}}}}€€€€€€€€€€€€€€€€„†ˆ†‚~~…‡ˆˆ‡ˆŠ…€‚‚ƒ„‰’š˜’‘‘Œ‡ƒ€€†ˆ†||~€‚„„„ƒ„„„„„„………‡‰‰‡…†‡…†‡‡†………†††…………„……†††‡‡‡†††††………‡†††‡‰Š‹Ž‘‘‰…„„††††††††„††ƒƒ„ƒ€{vzˆ’”•‘ˆ|uvxyxz}ƒƒƒ„…~{z|€€|zxxyyyxz{}~€€€€‚‚‚‚‚‚‚‚‚‚………„ƒƒƒ‚ƒƒƒƒ„„……„„…………„„…„ƒƒƒ‚ƒƒ„„„„„„„„ƒƒƒ„…†ˆ‰‰‰Š‹ŒŒ‹‹ˆ†„‚€‚€ƒ‚‚ƒ„†…†…†…†…†††††††††††††††††‡‰‡„€‚‚‚‚€€‚‚ƒƒƒ‚‚‚‚‚‚‚‚‚‚‚‚ƒ„†ˆŠˆ‡‡ˆ†‚‚„€€€€€€€€€€€€€€€€~}{|}…‡{vqrwzxuou|}{y|€|umlorsuy~‚ƒƒ€{y~„‡‰ŒŒ‹ˆ†„‚}~€‚‚€~}|{{|{{|}}~€€€€€€€€€~~}}|~}}‚€~}}}}zxwxyyxvtrttux|€€€€€€}}‚†‡…„†‰ˆ€wssuu}…‡ˆ‰Š‰‡‚|yz{zx|‚|||z|‚„ƒ‚‚‚€€€€€€€€€€€€€~~~}~~~€€€€€~~~}~~€€~€€‚ƒƒƒ~~}|||}}}€~}}~~~}|{{|||~ƒ„…†‡††……„ƒ‚‚‚€‚‚€~}||{{||}}}|||}~}}}|||{{}||~ƒƒ‚€‚‚‚„††…„ƒ‚‚‚‚‚‚ƒƒƒƒ‚‚„……ƒ{zz~~}}|}}}€€€€€€€€€€€€€€€€„‡ˆ†‚~~†‡ˆˆ‡ˆ‹…€ƒ†Œ•›™’“’‹††ˆ†}~~|{}ƒƒ‚‚„‚‚ƒ„„…‡ˆ‡…†‡Š‡ˆˆˆ†…„…††………„„„……†††‡‡‡†††††………‡††‡‡‰‹ŒŒŽ‘’“’“‘މ†……†††††††††ˆˆ…„…„‚|w{ˆ‘’“‘‰}uuxyxz}ƒƒ„„…~zz|‚}{xxyzzx{|}~~‚‚‚‚‚‚‚‚‚‚‚‚………„ƒƒ‚‚ƒƒƒ„„„……„„…………„„…„ƒƒ‚ƒƒƒ„„„„„„„„ƒƒƒ„…‡ˆ‰ˆ‰Š‹‹‹‹‹ˆ†„€‚‚€ƒƒƒ„…†…†…†…††††††††††††††††††‡‰‡„€‚‚‚‚€€‚ƒƒƒƒ‚‚‚‚‚‚‚‚‚‚‚‚ƒ„‡‰Š‡‡ˆ‰‡ƒƒ€€€€€€€€€€€€€€€€ƒ€}{|ƒ…ywuttuwysuwwvwz}}|zwtqontux{‚„†{yx|‚†…ƒŠ†ƒ€|{{…†€{ƒ~{yyz{}}~~~~}}~~~€€€~~}}}}~~~~€€€€€€~|{zwyzywvvwuuvwz|~€}~~~~}€~~ƒ‡‡…Љ‡…‚|{|ƒ‡‰Š‰ˆ‚|x{}|{z{}€|yww|…ƒ‚‚‚€€€€€€€€€€€€€~}~€}~~~~~~~~~~~~~~~~‚€~~€~‚€€€}}|||}}~€~~~}}}|{{{{|}~€‚„…………………„ƒ‚ƒ‚€~~~}}}|||~~~~~~~~€}|||~~{zz}ƒƒ‚‚‚‚ƒ„„†…ƒƒƒƒƒ‚‚ƒ‚„…ƒ|{{zz{}|z{~€€€€€€€€€€€€€€€€€ƒ…„‚…ŠŠŠŠŠŠŠŠ‰‡„€~~€ˆ‰‹Ž‘”–—”’‹‡ƒ~‰ˆ‡…ƒ~}}~€‚‚‚‚ƒƒƒ„…††‡‡ˆˆˆ†††††††††…†…†…†………†‡ˆ‡‡‡‡‡‡‡†††…†††‡ˆŠ‹Œ‘ŽŒŒŽ‘‘‘’’‘Ž‹‡…†††††††††ˆ‡…„…„‚zzz|€„‰ŒŽˆ~wuvy{|~€‚~{{~‚‚zwxzyy{y|‚ƒ‚€€€‚‚ƒ„„ƒ‚‚„„„ƒ„ƒ„„ƒƒ„„„„……‚ƒ„„……„„„„ƒƒƒƒ„„„………††††„ƒƒ„‡ˆˆ‡ˆ‰Š‹‹ŠŠŠ‰ˆ†„‚€‚‚‚‚‚‚‚‚‚‚‚€ƒ………………………††††††††…………†††††‡‰‡„‚‚ƒƒ‚‚€‚ƒƒ‚‚‚‚„†ˆ‰ˆ‡ˆˆ…‚„ˆ€€€€€€€€€€€€€€€€~}{{{~‚yxvuuvxy{ytpot}„~~|zwvtsz{}€‚…‡ˆ‚€„†…‚ŽŒ‹‰ˆ‡‡‡‚}~€}y~|zyz{|}}~~~}}~~~€€€~~}}}}~~~~€€€€€~|{yywyzywvvwuvvxy|~€~~~~~~~~€~ƒˆˆ†‰Š‰‰ˆ‡††‚ƒ†ˆ‰‰‰ˆƒ}y{}|zy{~€€|yww|„ƒ‚ƒ‚€€€€€€€€€€€€~}~€}~~~~~~~~~~~~~~~~}}~~}‚€€€€€~}}|||}}~~~}}}}}|{{{{|}~€‚ƒ………„„„ƒƒ€€‚€‚‚‚€~~~}}}|||~~~~~~~~~~}|||||{zz}ƒƒ‚‚‚‚ƒ„„†…ƒƒƒƒƒƒ‚‚‚ƒ‚„„ƒ|{{zz{}|z{~€€€€€€€€€€€€€€€€ƒ…ƒ€~€‚‰‰‰‰‰‰‰‰‡…ƒ~~~‚ƒ†ˆŠ‹ŒŒ‹‰†‚|{„„ƒƒ€{{{||}}}‚‚‚ƒƒ„„„…††‡‡ˆˆˆ††††††††…†…†…†…†……†‡‡‡‡‡‡‡††††………††ˆ‰‹ŒŽŒ‘‘‘‘‘‘ŽŠ†„††††††††…††„ƒ„ƒwvvvwz|}€}ywwyyz|~€ƒ~{{~‚‚zwyyyy{z{}€€€€‚‚ƒ„„ƒ‚‚ƒƒƒ„ƒƒƒƒƒƒƒ„„„„…„„………„„ƒ„„ƒƒƒ„„„„…………†††…„ƒ…‡‰ˆ‡ˆ‰ŠŠ‹ŠŠŠ‰ˆ†„‚€‚‚‚‚‚‚‚‚‚€ƒ………………………††††††††…………†††††‡‰‡„‚‚ƒƒ‚‚€‚ƒƒ‚‚‚ƒ†‡‰ˆˆˆˆ…‚„ˆ€€€€€€€€€€€€€€€€‚‚‚‚ƒƒ††„„„„††}xrqw‰ŠŠŠˆˆ††…‚ƒ„†‡ˆ‰‰‡…„……ƒ‹‹‹‹ŒŒˆzvxyzxyyxxyz|}}~~~~}~~€€~~}}}}~~~~€~|{yxwwxyywvvvuuvwz|~€~}}~~~ƒˆŠˆˆˆˆˆˆ‡††ˆˆ‰‰‰‰‰‰„~z{}{yx|~€€|ywv|„ƒ‚ƒƒ€€€€€€€€€€€€€~~€€~~~~~~~~~~~€~}}}~}}€€€~}}|||}~~~}}|||}}|{{{{||}ƒ„……„„„ƒƒ‚€€‚ƒ‚€~~~}}}|||}}}}}}}}|||}|{{z{zz}ƒƒ‚‚‚‚ƒ„„†…ƒƒƒ„„ƒ‚‚ƒƒ‚„…ƒ|{{zz{}|z{~€€€€€€€€€€€€€€€€ƒƒ‚€~€€€€€€€„„„ƒ‚}|}~‚‚„ƒ‚€~|{z~}}||||{ƒƒƒ„„„…………††‡‡ˆˆ†††††††††…†…†…†………‡‡ˆ‡‡‡†††…†…………†‡‰ŠŒŽŽŽŽ‰†ƒ†††††††††‡†ƒ‚}yxxwwwwwvvwy{{yw|~€‚€}{{~ƒƒ€zwxzxy{{{||~~€€€‚‚ƒ„„ƒ‚‚ƒƒƒƒƒƒƒƒƒƒ„„„„…………††…„„ƒ„„„ƒƒƒ„„………………††…„ƒ„‡ˆˆ†ˆˆ‰Š‹ŠŠŠŠˆ‡„‚€€‚‚‚ƒƒ………………………††††††††…………†††††‡‰‡„‚‚ƒƒ‚‚‚‚‚‚‚‚„…ˆ‰ˆ‡ˆˆ…„ˆ€€€€€€€€€€€€€€€€…†††„ƒ€‚‚‚‚‚}„ˆƒƒƒ„ƒ„„„………††‡‡‡ˆ‡†…„ƒ€€€‚ƒƒ„{vpnptvvttuwy{}}~~~~~~€€~~}}}}~~~~~€|{xwvuxxxxwwuuuvvxy|~€€~}}~€~‚ˆ‹ŠŠŠŠ‰ˆ‡……‹Š‰ˆ‡ˆ‰Š…z|}zxw|€|xvv{„ƒ‚ƒƒ‚‚€€€€€€€€€€€€~€~~~~€~}}~~~€‚‚€€~}||||~~}}||{|}}|{{{{||}ƒ„„……………„ƒ‚‚€‚‚‚€~~~}}}|||}}}}}}}}{|}~~|{z{zz}ƒƒ‚‚‚‚ƒ„„†…ƒƒƒƒƒƒ‚‚ƒ‚„„ƒ|{{zz{}|z{~€€€€€€€€€€€€€€€€€€€‚‚‚‚„…†‡…ƒ€}€€~~‚‚‚‚‚‚‚‚„„ƒƒ€€ƒ„„……†††„……††‡‡‡††††††††…†…†…†…†…††‡‡ˆ‡‡………………………†ˆŠŒŽŽŽ‘Œ‰…ƒ††††††††‡ˆˆ†‚}xuxxxyxxxxuwy|}|xv|~€ƒ}z{~‚ƒƒ€{wyyyxz{{zz{}€€€‚‚ƒ„ƒƒ‚‚ƒƒƒƒ‚ƒƒƒƒ„ƒ„„…„………†††……„„„ƒƒƒ„„„……………………†„ƒ…‡ˆ‡†‡ˆ‰ŠŠŠŠŠŠ‰†…‚€€‚‚‚€ƒ………………………††††††††…………†††††‡‰‡„‚‚ƒƒ‚‚‚‚‚‚ƒ†‡‰ˆˆˆˆ…‚„ˆ€€€€€€€€€€€€€€€€ƒƒ‚€}yvtuuuvvuuuoruutrstssttvvwwtttttsssrssrqppqqqqqqqqqpnllnprrpqtwz}~~~€~~~~}}}}~~~~~~~}{xwvvuxxxwxvvuuuvwz|~€€~}}~€~‚‡‹‹ŠŠŠŠŠ‰‰ˆŠ‰‡††‡‰Š…z|}zxw}€|xvu{€„ƒ‚ƒ„‚‚‚‚€€€€€€€€€€€~€€~~~€€~~€‚‚€€~}}|||~}}|}||{}}|{{{{||}‚„„„„„…„„ƒ‚‚‚ƒ‚€~~~}}}|||}}}}}}}}|}~|{{zz}ƒƒ‚‚‚‚ƒ„„†…ƒƒ‚ƒƒ‚‚‚‚„…‚|{{zz{}|z{~€€€€€€€€€€€€€€€€~~~€‚„……ƒ‚ƒ‚ƒ‚ƒ‚†‡‰‰ˆ†ƒ†……„„ƒ‚‚‚‚ƒƒ„ƒ„„‡‡†……ƒƒ‚ˆ‡‡……„ƒƒƒƒ„„……††„„……††‡‡†††††††††…†…†…†………‡‡ˆ‡‡†……………………†‡‰ŒŒ‰…ƒ†††††††††‡ˆˆ„}uquvwxyxxxxxyz|{yw|~€‚|z{~‚„„{xxzxxz{zyyz|~€€€‚‚ƒƒ„ƒ‚‚‚‚‚‚ƒ‚‚‚ƒƒ„„„„……ƒ„……††††„„„ƒƒƒ„„………„…„…„†…„…‡‡‡…†‡ˆ‰ŠŠŠŠŠ‰‡„ƒ€€‚ƒƒ………………………††††††††…………†††††‡‰‡„‚‚ƒƒ‚‚‚€‚‚‚„…ˆ‰ˆ‡ˆˆ…„ˆ€€€€€€€€€€€€€€€€‚~{wurqqrsttsrqopqpnnpspppqrsssrrrqqqqqnoqponpqppoonmllqqpqppoonqtx{~~€€~~~}}}}~~~~~~~~}|zxvvvwxwwwwwutuvvxy|~€€~~~~€€~†Š‹ˆˆˆ‰‰‰ˆˆ‰ˆ‡††‡ˆ‰„~z{}{yx~€€|xuuz€ƒƒ‚„„‚‚‚‚‚€€€€€€€€€‚€€€€€€€€€€~~€€€~~€€€€€€€~}}}}}~~}}}}||}}|{{{{|{|~€‚ƒ„„ƒƒƒƒƒ‚‚€‚‚‚€~~~}}}|||}}}}}}}}~~~~}|{zz}ƒƒ‚‚‚‚ƒ„„†…ƒƒƒƒƒ‚‚ƒ‚„„ƒ|{{zz{}|z{~€€€€€€€€€€€€€€€€€„††…‡‡ˆˆ‡†…„……„ƒ‚‚„„„……††‡‰‰ˆ‡……„ƒ„„„„ƒƒ‚‚ƒƒƒ„„………ƒ„„……†††††††††††…†…†…†…†…††‡‡‡‡‡………†…†††ˆ‰‹ŽŽŽ‘‰†ƒ††††††††ƒ„‡‰†~wsvwwxxyxxxwvwxzzy|~€ƒ~|z{~‚„…|xyyxwyzzyyz|~€€‚‚ƒ„„ƒ‚‚‚‚‚‚‚‚‚‚ƒ„ƒ„„…„…‚‚„…††‡‡„„ƒƒƒ„„„……„…„„„„‡…„…†‡†……†‡‰ŠŠŠŠ‹Š‡…ƒ‚€€€€‚‚‚€ƒ………………………††††††††…………†††††‡‰‡„‚‚ƒƒ‚‚€‚‚€‚ƒ†‡‰ˆˆˆˆ…‚„ˆ€€€€€€€€€€€€€€€€|yusrstnoqrrqonpppmklorpppqqqrrppppqqqqmprqnmoqtsssrrqqtuusrpppoqvz}~€€€~~~}}}}~~~~~}}}|{ywvvxxxwvvxwusuuvwz|~€€€~€„‰Š‰‰ŠŠŠ‰ˆˆ‰ˆˆˆ‡ˆˆˆƒ}y{}|zy~€‚€|wutzƒ‚‚„„ƒƒ‚‚‚‚€€€€€€€€‚€‚€€€€€€€€€~~~€€}}~€~€€~}}~~~~~}}}}}|{{{{|{|~€‚ƒ„„‚ƒƒƒƒ‚‚‚ƒ‚€~~~}}}|||||||||||~}||||}{zz}ƒƒ‚‚‚‚ƒ„„†…ƒƒ„„„ƒ‚‚ƒ„‚„…ƒ|{{zz{}|z{~€€€€€€€€€€€€€€€€‡„‚ƒ…†„……………………††„ƒƒƒ„„‚‚‚€€€‚‚‚ƒƒƒ„„……………………€‚‚‚‚‚‚‚ƒƒ„„„ƒƒ„„……†††††††††††…†…†…†………†‡ˆ‡‡‡……††††‡‡‰‹ŽŽŽŽŽŽ“‘‘‘ŽŠ†„††††††††„„‡‰†ywwwwvwwwwywuuwxyy|~€‚~{z{‚……‚|yyywwyyyzz|}~~€€‚‚ƒ„„ƒ‚‚‚‚‚‚‚‚ƒƒ„„„„……‚‚„……………„„„ƒƒƒ„„………„„„„ƒ‡†……‡‡†„…†‡‰ŠŠŠŠ‹Šˆ…ƒ‚€€€€€€‚‚ƒ………………………††††††††…………†††††‡‰‡„‚‚ƒƒ‚‚€€‚‚€‚‚‚„…ˆ‰ˆ‡ˆˆ…‚„ˆ€€€€€€€€€€€€€€€€usolkmprpqsuusqpqrsqonpsuuuuuuuuppqqrrsspsusomorpppqqqqqtttsqqrsprw{~€€€€~~}}}}~~~~~}}}|zxvvwyzxwvvwwusuvvxy|~€~€€~€€~ƒˆŠˆˆˆ‰‰‰‰ˆŠŠŠ‰‰ˆ‡‡‚|x{}|{z~€‚€|wutzƒƒ‚„„ƒƒƒ‚‚‚€€€€€€€€‚€€‚€€€€€€€€€€~~~~||}~~}~€~~~}~~~~~}}}|{{{{|{|~€‚ƒƒ„ƒ„„„„„ƒƒ‚‚‚€~~~}}}|||||||||||~}|zz{|}{zz}ƒƒ‚‚‚‚ƒ„„†…ƒƒ………„ƒƒ„…‚„„ƒ|{{zz{}|z{~€€€€€€€€€€€€€€€€Œ‰…„†…‚~‚‚‚‚‚‚‚‚…ƒ€‚ƒ€€€€€€‚ƒ„…††€€‚ƒ„„‚‚ƒƒƒ„ƒƒƒ„„………††††††††…†…†…†…†……†‡‡‡‡‡…†††‡‡‡‡‹ŒŽŒŽŽŒŽ‘”‘’’‘Ž‹‡…††††††††ˆ‡‡ˆ…~zyxxwwwxxy|zwwwxxw|~€ƒ}{y{~ƒ……‚|yyywwyyyz{|}~~€€‚‚ƒ„„ƒ‚‚ƒƒ„„„„……ƒƒ„„…„„„„„ƒƒƒƒ„„………„„„ƒƒ‡†……†‡†„„…‡ˆŠŠŠŠ‹Šˆ…ƒ‚€€€€€€€€‚‚‚€ƒ………………………††††††††…………†††††‡‰‡„‚‚ƒƒ‚‚€€‚‚‚„†ˆ‰ˆˆˆˆ…‚„ˆ€€€€€€€€€€€€€€€€zwsonoqrurppsutrsrppqrrqrtspnopqqrstuuuuvurqrrrrqqqrrsstssssssrrrvz||||}~~~~~~~}~€€}}}}}}}}~~}{ywxxxxxxxxxyyxxwvuwvuuw{~€~~~~}ƒ†ŠŠˆ‡†††††‡ˆ‰ŠŠŠ‰ˆ€|z|}{{|€{wuuy~‚‚‚„„ƒƒƒƒƒƒƒƒƒ~€€~€‚‚‚‚€€€€€€€€~~~~~~~~}}}€€€}}}}}}}}}}~~~€~|{zzz}{{}„……„„„„ƒ‚€€‚€€‚‚€~}}}||{{}}}}}}}}~~~~}}}}{zz}ƒƒ‚ƒƒ‚‚ƒƒ……ƒ‚ƒ„…„ƒƒ„…€‚ƒ~{zz~|xxzz{€€€€€€€€€€€€€€€€ˆ†ƒ€‚ƒ‚‚‚‚‚‚‚‚ƒƒƒƒƒ‚‚‚‚‚‚‚‚‚‚‚ƒƒƒƒƒƒƒƒ‚‚‚ƒƒ‚‚‚‚‚ƒƒ‚‚‚„…†‡††…………††††††‡‡‡‡††ˆ‡‡‡‡‡‡‡‰ˆ‡†‡‰‹ŽŽŒŒŽŽŽ‘Œ‰‡††††††††‡‡‡†„€{wwxy{||zxzyxwwxyy~~~€‚€~{{~‚ƒ€{xyzyy{xwwwy{~€€€€ƒ„„„ƒ‚€ƒ‚‚‚‚ƒ„„„„„„„„ƒ„„„„„„…†…„‚‚ƒƒ„…„…„…„…„ˆ‡………†……~‚‡Š‹ŠŠŠŠŠŠ‡„‚‚‚‚‚‚€ƒ…„„„………††††††††††……„„„…†‡…‡ˆ‡„€‚‚ƒƒ‚‚€€€€‚„‡‰Šˆ‰Š‰„€„‹€€€€€€€€€€€€€€€€ywtrpppqsqnortrqqqpppppqqqqpnnpsuvwxxwvvtsqqrtuussssrrqqqrrrqqppruz}||}~~~~~~~}}}~€}}}}}}}}|}}|{yxvwwwwwwwwxxxxwwvuwvuvwz~€~~~€~}‚†‰ŠŠˆ‡………††‡ˆ‰‰‰ˆ‡€|z||{{|{wvvy‚‚ƒƒ‚‚‚‚‚‚‚‚‚‚€€€€€€€€€€~~~~~~~~~€€€€€€~~~~~~~~}~~~~€}|{zzz}|{}€„……„„„„ƒ‚€€‚€‚‚€}}}}||||}}}}}}}}~~~~}}}}{zz}ƒƒ‚ƒƒ‚‚ƒƒ…„ƒ‚ƒƒƒƒƒƒƒƒƒ„‚~{z{||yz|{z€€€€€€€€€€€€€€€€‰‡„‚€‚‚‚‚‚‚‚‚‚ƒƒƒƒƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒƒƒ‚‚‚‚ƒƒ‚‚‚„…†‡††………††††‡††‡ˆˆ‡††‡‡‡‡‡‡‡‡†††‡‰ŒŽŽŽŽŒŽŽ‘‘Œˆ†††††††††‡‡‡†…|xvwy{|}}|zzxwwxxy~~€‚€}{{~‚‚€{wxxwwywwwxy|~€€€€‚ƒƒ„ƒƒƒ‚‚‚‚ƒ„„„„„„„„ƒ„„„„„„…†…„ƒ‚ƒƒ„„…„…„…„…‡†……††…„‚‡Š‹ŠŠŠ‰ŠŠ‡„‚‚€‚‚‚‚€ƒ…„„„………††††††††††……„„„…†‡…‡ˆ‡„€‚‚ƒƒ‚‚€€‚„‡‰Š‡ˆŠ‰„€„Š€€€€€€€€€€€€€€€€xwusqppoqomnpqqonoqppopponooonrv}|{yxvtsrqpprsttsrqppqrsqrsrqoopquz|}|}~~~~~}~}}}}~}}}}}}}}{{zyxwwvwwwwwwwwwwxxwvvuwvvvxz}~~~~€€„‰‹Š‰†„„…†…†‡ˆˆ‡‡†€|z|}{{|‚{xvv{€ƒ‚‚‚€‚‚€‚€€€€€€€€~~~~~~~~€€~~~€}|{z{{}{{}ƒ……„„„ƒƒ€‚€€‚‚€}}}}}|||}}}}}}}}~~~~}}}}{zz}ƒƒ‚ƒƒ‚‚ƒƒ…„ƒ‚‚‚ƒ‚‚ƒ‚‚„…‚{{{z{y{}{y~€€€€€€€€€€€€€€€€Šˆ†ƒ‚€€€ƒƒƒƒƒƒƒƒƒƒƒƒƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒƒƒ‚‚‚‚‚‚ƒƒ‚‚‚‚„…†‡††……††††‡‡†‡ˆˆˆˆ‡†‡‡‡‡‡‡‡‡††ˆŠŒŽŽŽŽŽŽŽŽ‘‘‘Ž‹ˆ………………………‡‡‡‡…‚}zwxzz{|}~{zyxwwxx€~~€‚€}z{}€‚‚zwwywwyxxyz{}€€€‚ƒ„„„ƒƒƒ‚‚‚‚ƒ„„„„„„„„ƒ„„„„„„…†…„ƒƒƒ„„…„…„…„…„………†‡†…ƒ€ƒ‡ŠŠŠŠŠŠŠŠ‡„‚€‚‚‚ƒƒ…„„„……………………………………„„„……†‡…‡ˆ‡„€‚‚ƒƒ‚‚‚‚‚„‡‰Š‡ˆ‰‰„„‰€€€€€€€€€€€€€€€€zwsommnopnmnoqonnopqppopnnnooqty}{xutsssqpoooppprqommnopprsronnppuy||}}~~}~}}}}|||}~|||}|}||zzyxwwwwwwwwwwwwwwwxwwvuwwvwxz|~~~~~~€~~‚‡ŠŠ‡…ƒ…††…†‡ˆˆˆ‡†€|z||{{|€{ywx{€ƒ‚€€~€€€‚€€€€€~~€€}~}~€‚€€€€€€€€~~}|{{{{}|{}€„……„„„„‚‚€€‚€‚ƒ€}}}}}}}}}}}}}}}}~~~~}}}}{zz}ƒƒ‚ƒƒ‚‚ƒƒ„„ƒ‚‚‚‚‚‚‚‚‚‚ƒ……ƒ|zzzzxy|zy~€€€€€€€€€€€€€€€€Š‰‡…‚€ƒƒƒƒƒƒƒƒƒƒƒƒƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒƒƒƒƒ‚‚‚‚‚ƒƒ‚‚‚‚„…†‡††…††††‡‡‡‡ˆˆ‰‰ˆˆ‡‡‡‡ˆˆˆˆˆ‰Š‹ŽŽŽŽŽŽŽŽ‘‘ŒŠ‡………………………‡‡‡‡†„€}zzz{zyz}{zyxwwxx€€~~}zz}€‚~yvyzzz}}}}~~€€€€€€‚„„…„„ƒ‚‚‚‚ƒ„„„„„„„„ƒ„„„„„„………„„„„„„„…„…„…„…„„…‡ˆ‡„‚„ˆŠŠŠŠŠ‰ŠŠˆƒ‚‚‚€‚‚‚‚€ƒ…………………………………………………„„„…†‡…‡ˆ‡„€‚‚ƒƒ‚‚‚‚‚‚‚„‡‰Š‡ˆ‰‰…‚„ˆ€€€€€€€€€€€€€€€€|xqljkmponnnpppnooppqqponopoqtxyzwtqqqqqqponoonmmnnoonnmnoqpnlmnpty|}}~~~~~~}}}|||{||~~{{{{|{{{zyxxwwxxwwwwwwwwwwxwxwvvxwxxz{|}~~~~~€~}€…‰ˆ…‚ƒ†ˆ†††ˆˆ‰ˆ‡‡€|z|}{{|‚€}yxy|„‚€€€€€€€‚‚ƒ‚‚€€€€€€}}}}~‚~~~~~}{{{{|}{{}ƒ……„„„ƒƒ€‚€€‚‚€}}}}~}~~}}}}}}}}~~~~}}}}{zz}ƒƒ‚ƒƒ‚‚ƒƒ„ƒ‚‚‚‚‚ƒ‚ƒƒƒ‚‚ƒƒƒ……‚zyy{zvvxwx~€€€€€€€€€€€€€€€€‰‰ˆ†…‚‚‚‚‚‚‚‚‚ƒƒƒƒƒ‚‚‚ƒ‚ƒ‚‚‚‚‚‚‚‚‚‚‚ƒƒƒƒƒƒƒƒ‚ƒƒƒ„ƒƒ‚ƒƒƒ‚‚ƒƒƒ‚„…†‡††††††‡‡ˆ‡ˆˆ‰‰‰‰ˆˆˆˆˆˆ‰‰ŠŠŒŽŽŒŽŽŽŽŽŽŽŽŽŽ‹ˆ†………………………‡‡‡‡‡…‚€{yyzzxy{{zyxwwxx€€~~|zz|}xwy|}‚‚‚‚€€€€€‚ƒ„………„ƒ‚‚‚‚ƒ„„„„„„„„ƒ„„„„„„………………„„ƒ…„…„…„…„ƒ„…†‡‡„‚ƒ…ˆŠŠŠŠ‹ŠŠŠ‡„‚€‚‚‚ƒƒ………………………………………………„„„……†‡…‡ˆ‡„€‚‚ƒƒ‚‚‚‚‚‚‚„‡‰Šˆˆ‰Š‡ƒ„ˆ€€€€€€€€€€€€€€€€}ztommnponnopqonoonpqrqpoppqtxyywtrqqpompooooponllnoopppmoppnmmnosx|}~€~~~~}}|||{{{{|}}zzzzzzzzxxxxxxxxwwwwwwwwwxxxxxwwyyz{{}}}~~~~~~|~‚†‡„€…‡††‡ˆ‰‰‰ˆ‡€|z||{{|‚€}zyz|„ƒ‚ƒ‚‚‚€€€€€‚‚‚€‚‚€€€€€~}|||~€~~~~~~}}~~||{{||}|{}€„……„„„„ƒ‚€€‚€‚ƒ€}}}~~~~~}}}}}}}}~~~~}}}}{zz}ƒƒ‚ƒƒ‚‚ƒƒƒƒ‚‚‚‚ƒƒ‚ƒ„„ƒ‚ƒ„ƒ„„‚}ywwzxtsvuw}€€€€€€€€€€€€€€€€‡‡‡‡†„‚‚‚‚‚‚‚‚‚ƒƒƒƒƒ‚‚‚ƒƒ‚‚‚‚‚‚‚‚‚‚‚‚ƒƒƒƒƒƒƒƒ‚ƒƒ„ƒƒƒƒƒƒƒ‚‚ƒƒƒ‚„…†‡†††††‡‡ˆˆˆˆ‰ŠŠŠŠ‰ˆ‰‰‰ŠŠ‹‹ŒŒŽŽŽŽŽŽŽŽŽŽŽŽŽŒ‹‰‡††……………………‡‡‡ˆˆ‡…ƒzwvz|{z|zyxwwxyy€€€}~€~|yy|€}xvy|}‚ƒƒƒ‚€€€€‚ƒ„………„„ƒ‚‚‚‚ƒ„„„„„„„„ƒ„„„„„„……†††……„ƒ„…„…„…„…„ƒ„…††…ƒ„†ˆŠ‰‰Š‹‰ŠŠˆƒ‚‚€‚‚‚‚€ƒ………………„„„…………………………„„„…†‡…‡ˆ‡„€‚‚ƒƒ‚‚‚‚‚„‡‰Š‰‰Š‹‰……ˆ€€€€€€€€€€€€€€€€}}{zwsponnoopponnnnnopppqporvyywrpoopqpnonnopponponmmmnonnooooooosx|}~€~~~}}|||{{{z{{|}xxyxyxyxvwxyyxwvwwwwwwwwxxyyyyxxzz||}~~~~~~~~~~|}ƒ‡†€}†‡††ˆˆ‰ˆ‡‡€|z|}{{|€‚€}{zz{„„ƒ……ƒ‚‚‚‚‚‚‚‚€€~€€~‚‚‚€~~|{{}~€~~~}}}}|~}|{{{||}{{}„……„„„ƒƒ€‚€€‚‚€}}~~~~}}}}}}}}~~~~}}}}{zz}ƒƒ‚ƒƒ‚‚ƒƒƒƒ‚‚‚‚ƒƒƒƒƒƒƒƒƒƒ‚ƒƒ€|xvvwvssvtuz€€€€€€€€€€€€€€€€„…‡ˆˆ†…ƒƒƒƒƒƒƒƒƒƒƒƒƒƒ‚‚‚ƒƒƒ‚‚‚‚‚‚‚‚‚‚ƒƒƒƒƒƒƒƒƒƒƒ„„ƒƒƒ„ƒƒ‚‚ƒƒ„‚„…†‡††††‡‡ˆˆˆˆ‰‰Š‹‹Š‰‰ŠŠ‹‹ŒŒŽŽŽŽŽŽŒŒ‹Š‰ˆ‡†††††††††††‡‡‡ˆ‰ˆ‡…|ww|€}{{yyxwwxyz€~}€~{yy|€€}yvxzz{}}~€‚€€€€„…………„ƒƒƒ‚‚‚‚ƒ„„„„„„„„ƒ„„„„„„………†††…„ƒ…„…„…„…„„ƒƒ„…†…„…‡‰‰‰‰Š‹ŠŠŠ‡„‚€‚‚‚‚ƒ…††………„„„„„„„„„„„……„„„…†‡…‡ˆ‡„€‚‚ƒƒ‚‚€€‚„‡‰ŠŠŠ‹‹‡†ˆ€€€€€€€€€€€€€€€€|‚ƒ€yrmnnnopponmnnnmnoqronsxywuspmmnoomnmmnnonmnnmlllmmlmmnoonnnsx|}~~~}}}|||{{zzz{|}xxxxxxxxtuwxyxvuxxxxxxxxxxyyzyyx{|}~~~~~~~€~}~~}|~‚ˆ‰{~„‡…†‡ˆˆˆ‡†€|z|}{{|€‚~{z{{„„„††…ƒƒƒƒƒƒƒƒ‚€€‚‚€||}~~}||‚‚‚‚€~~~€~|{{|}~}}}||||~}||{||}}{{}„……„„„„ƒ‚€€‚€€‚‚€}}}~~}}}}}}}}~~~~}}}}{zz}ƒƒ‚ƒƒ‚‚ƒƒƒƒ‚‚‚‚ƒ„ƒ‚‚‚ƒƒƒ‚ƒƒ€{wuuttstwtsw€€€€€€€€€€€€€€€€‚ƒ†ˆ‰ˆ†…„„„„„„„„ƒƒƒƒƒ‚‚‚ƒƒƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒƒƒ„„ƒƒƒ„ƒƒ‚‚ƒƒ„‚„…†‡†††‡‡‡‡ˆˆˆ‰ŠŠ‹‹ŠŠ‰Š‹‹ŒŽŽŽŽŽŽŽŽŽŽŽŽŽŽŒŒŒŒŒŒŒŒŒŒ‰ˆ‡††††‡††††††††‡‡‡ˆ‰‰ˆ†€zx~‚zyyxwwxyz{€~}~€~{yy{~€€~yvwwvvxxy|€€€€€€€…†††…„ƒ‚ƒ‚‚‚‚ƒ„„„„„„„„ƒ„„„„„„……††‡†…„ƒ„…„…„…„……„ƒƒ„…†……‡‰‰‰‰ŠŒ‰ŠŠ‡„‚‚‚‚‚‚€ƒ…††………„„„„„„„„„„„……„„„…†‡…‡ˆ‡„€‚‚ƒƒ‚‚€€€€‚„‡‰Š‹Š‹Œˆ‡‰€€€€€€€€€€€€€€€€‚†…}uroooooooonmmmlllkhkpw||yvssrqppoonnnmllkkppoonmmlmmmnnnnnkqy~}|~~~}|{{{zzyyxwwwwwwwxxxxwwxxxxwwvvvwwwwwwxyyxy|~€~||~~}~~~~~~~~}}~~}}‚‡†}ƒ†…†‰ˆ„…ˆ‚|{}|{|{|€}zxx}‚…„„‡‰ˆ…„„ƒ‚€€€€€€{|||}}~~€€~~~}|||||€€€€€~}||||}||{{{{{z{}~‚„……„„ƒ‚€€‚€‚‚€~~€~}}~€~}|~}}}}|z|{{}€‚ƒ‚„ƒƒ‚‚‚ƒƒƒ„ƒ€ƒ„ƒƒƒƒƒƒƒƒ‚ƒ„|xvvwvvxxvx|€€€€€€€€€€€€€€€€‡…{{†Š…ƒƒƒƒƒƒƒƒ„„„„„„„„†„‚‚‚‚‚‚‚‚‚„„„„„„„„„„„„„„„„‚‚‚‚‚‚‚‚ƒƒ„„…†‡‡…††‡ˆˆ‰‰ŽŽŽŽŽŽŽŽŒ‹Œ‹ŠŠŠ‰…‚„ˆ‰‡………‡††††††…‡‡‡‡‡‡‡‡†€{z‚{xxyyyz{|~~~}~|yy{~}xuvxwxz}~‚„ƒƒ‚‚‚‚‚‚‚‚‚ˆ‡‡‡††……ƒ‚ƒ‚ƒ‚ƒ‚ƒ„„„„„„ƒ„„„……„„„„„…†‡‡‡‡……………………„„………………ˆ‰‰‰‰‰‰Š‹Š‰…‚€€€€‚‚‚ƒ†……„„„„„„„„„……………………††††…‡ˆ‡„‚‚€€€‚‚ƒ…„‚€‚ƒƒˆŠ‰‰‰‰‰‰‰‰‰€€€€€€€€€€€€€€€€|~†ˆxtppppppppttssrrrrpquz|{vrssrrrqqqsssssrrrtttsrrqquuuttssspv|€€~~~|{zxxwwwwwwwwwwwwxxxxwwxxxxwwvwwwwwwxxyzzyz}€~||~~~~~~~~}}~~}~€…ˆ„}}‚††‡ˆ‡…†ˆ‚|{~|{|{~ƒ‚|zy|„ƒƒ…†…ƒƒ‚€~€€€€}~~~~~~~}|||}{{|~€€~}||||||{{{{{{{|}ƒ„………„ƒ‚€‚€‚‚€~~}~€€~}||}~~}}}}|{|{{}€ƒ‚‚ƒƒ‚‚‚‚ƒ„…„€‚„„ƒƒƒƒƒƒƒƒƒ„„}xwvxwwxwvw{€€€€€€€€€€€€€€€€ˆ‡}zƒ‰‡…………………………………………‡…ƒ€ƒ„„„„„„„„„ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ……„…„…„…‚‚ƒ„…†‡‡…†‡ˆŠ‹ŒŽŽŽŽŽŽŽŽŽ‹ŠŒŠ‰‰‰ˆ„‚„‡‰‡†……††††…†……‡‡‡‡‡‡‡‡…ƒ}z}‚|zxvwz|{y~~~}~|yy{~}xuxyyz|}€‚ƒƒ‚‚‚‚‚‚‚‚‚‚……„„„„ƒƒ‚ƒ‚ƒ‚ƒ‚ƒƒ„„„„„„ƒƒƒ„„„„ƒƒƒ„…††‡††……………………„„„……†††ˆ‰‰‰‰‰‰Š‹Š‰†‚€€€€€‚‚‚ƒ†…„„ƒ„„„„„„„„……………………†††…‡ˆ‡„‚‚€‚€€‚‚ƒ„„€‚ƒƒˆŠ‰‰‰‰‰‰‰‰‰€€€€€€€€€€€€€€€€{x{…‹…zsrrrrrrrrsssrrrqqsux|~|wszzzz{{{{zzzzz{{{}||{{{{zyyyxwvvvw{€~€~}{ywvuwwxwxxxxwwwwxxxxwwxxxxwwwwwwxxxxy{|{{{~€~||~~~~~}|}~~}~‚ˆ‡|…‡‰ˆ‡‡‡†‚||~|{|{‚„ƒ€}{z{€ƒ‚ƒ„ƒ€~~}€€€€€€€€€€€€€€€€~~~~~€~}}}}zz{|~~€€~}||||}||{{{{{{|~‚ƒ…………„„ƒ‚‚€€‚‚‚€€~}~~€~|zz|~}}}}|{|{{}‚ƒ‚‚‚‚‚‚…†…‚ƒ„„‚‚‚‚ƒ‚‚‚ƒ„…‚~zxxyxxyxuwz€€€€€€€€€€€€€€€€~‡‰€{ˆ‰††††††††††††††††ˆ†„‚‚ƒ„†„„…„…„…„…„…„…„…………………………„„„„„„„„‚ƒ…†‡‡‡ˆ‰‹ŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŒ‹Š‰Š‰‡‡ˆ†ƒ€€„‡‰‡†…††††……………‡‡‡‡‡‡‡‡……€yzƒ€{xvvy{zx}~~~}}|yy{~}xvx{z|~~‚ƒƒ‚‚‚‚‚‚‚‚‚‚‚‚‚€ƒ‚ƒ‚ƒ‚ƒ‚ƒ„„„„„„ƒƒ„„„„„„ƒƒƒ„…†…†………………………„„……††††ˆ‰‰‰‰‰‰ŠŠŠ‰…‚€€€€€€‚‚‚ƒ†…„ƒ„ƒ„„„„„„…………„„…………††…‡ˆ‡„‚‚€‚€€€‚‚„ƒ‚€‚ƒƒˆ‹‰ŠŠŠŠŠŠŠŠ€€€€€€€€€€€€€€€€{wz…Š„xpmmmmmmmmoooonnmmprw}}zyzz{{|}}{{zzyyyx{|{{{{{{{{{{{{{{z|~~|{}|{zywvuuyyxyxxwwwwwwxxxxwxxyxxwwwwwxxyyz{|}}|}€ƒ€~||}~€€€~}|}~~}|~~‚‡ˆƒ~|ƒˆŠˆ‡ˆˆ†‚||~||||~ƒƒ|zzz‚‚„†…€€~~€€€€€€€€€€€€€€€€~~~~~~~€~~~~}~}}}}}}€~}||||||{{{{{|{|}€„…†………„ƒƒ‚‚‚€‚‚€}~€~~~~~~~~~}}~~}||{{}€ƒ‚‚‚‚ƒ„†…ƒ‚ƒƒ‚‚‚‚‚‚‚‚ƒ……ƒ~{yyywxyxvx|€€€€€€€€€€€€€€€€€†‡„ˆ‡††††††††…†…†…†…††…ƒ‚„†ƒƒ‚ƒ‚ƒ‚ƒƒƒƒ„ƒ„ƒƒƒƒƒƒƒƒƒƒ€€€€‚ƒ…†‡ˆ‹‹Œ‘‘ŽŽŽŽŽŽŽŽŽŽŽŽŽŒŒŒ‹Š‰ˆˆ‰ˆ††‡…‚€ƒ‡ˆ‡†††…†…………„…‡‡‡‡‡‡‡‡†…{y~‚ƒ{zyxvwxy}~~~}}€|yy{~}yvxzzz}€€€‚‚‚‚‚€€€€€€€€‚ƒ‚ƒ‚ƒ‚ƒƒ„„„„„„ƒ„………………„‚ƒ„………„„……………………„„……†‡‡‡ˆ‰‰‰‰‰‰ŠŠŠˆ†‚€€€€€‚‚‚ƒ……„„ƒƒƒ„„„„…„………„„„…………†…‡ˆ‡„‚‚‚€€€‚ƒƒ€‚‚ƒˆŠ‰ŠŠŠŠŠŠŠŠ€€€€€€€€€€€€€€€€}y{ƒ†}rknnnnnnnnpooonnnnmpv|‚ƒ~yyzz{||}~~}|{yyx{{{{{{||{{|}~~xz{{xwy{xwwwwvvvwwwvwvvvwwwwxxxxxxyyyxxwxxxyzz{{|}~~}~„€~||~~€€€€~}||}~}||€„†‡‡{†‰ˆ‡‰‰†ƒ||~}|}|}‚~zyxz‚‚ƒ†ˆˆ€€€€€€€€€€€€€€€€€€€€€€~~~~~~~€€~~~~~~~~€~}||||}||{{{{{{|}ƒ……………„„ƒ‚‚‚€€‚‚‚€~~€~}€€€€}|~}}~~}||{{}‚ƒ‚€‚ƒƒ……‚‚‚‚‚‚‚‚ƒ„…ƒ~{zzwvwyyxz~€€€€€€€€€€€€€€€€…„‚„ˆˆ„……………………„„„„„„„„„ƒƒ…ƒƒƒƒƒƒƒƒ€€€€€€€€€€€ƒ„†ˆ‰ŠŽŽŽŽŽŽŽŽŽŽŽŒ‹‹Š‰ˆˆ‡‡‰‡†††…‚‚†ˆˆ‡†‡†………………„ˆˆˆˆˆˆˆˆ†‚~|zz…}|zwvvxy}}~}|}~€|yy{~~yvwyxy{€‚‚€€€€ƒ‚ƒ‚ƒ‚ƒ‚ƒ„„„„„„ƒ„„…………„„ƒƒ„„…„„ƒ……………………„„……‡‡ˆˆˆ‰‰‰‰‰‰Š‰‰ˆ…‚€€€€‚‚‚ƒ…„„ƒƒƒƒ„„„„„…………„„„„……………‡ˆ‡„‚‚‚‚€€‚ƒ‚€‚ƒƒˆ‹‰ŠŠŠŠŠŠŠŠ€€€€€€€€€€€€€€€€~{|€~ulilllllllloonnmmmmnqv|~zxxxyyzzzzzyxxwvvuuuvvwwwstttuuvvsvyywvvwvvvvvwwwuvvwwxxxwwwwxxxxxxxyyyxxxxyzz{{||~~}~„€~||~~€€€€}|{|}~}|}ƒ†…†ˆ„}~‚†ˆˆ‰‰ˆƒ}|}|}||€}zxw{€ƒƒƒ†ˆ‡€€€€€€€~~€€€€€€€€~~~~~€~~~~~€€‚€~}||||||{{{{{{z{|~€‚„………„„ƒƒƒ‚‚€‚‚€~~}~€€€~~~~}}~~}|{{}€ƒ‚‚‚ƒ„ƒ……‚€€‚‚‚‚‚‚‚‚ƒ„‚~{zzvuvyyy{€€€€€€€€€€€€€€€€€‡ƒ€‚ˆ‹ˆ‚„„„„„„„„ƒƒƒ„ƒ„ƒƒƒ€ƒ…††††††††……………………††††††††……………………‚ƒ„†ˆŠŒŒŽŽŽŽŽŽŽŽŽŽŽŽŽŒŒ‹‹‹Š‰ˆ‡‡‡‡‰‡†††…‚~‚†ˆˆ‡‡ˆ††…†…………ˆˆˆˆˆˆˆˆ…~{|zx{ƒ‚~xwwyxv|}}}||~€|yy{~}yvxzz{}‚‚€€‚ƒ‚‚‚‚ƒ‚ƒ‚ƒ‚ƒƒ„„„„„„ƒƒƒƒ„„ƒƒƒƒ„„…„„„ƒ……………………„„…†‡ˆˆ‰ˆ‰‰‰‰‰‰Š‰‰ˆ…‚‚€€€‚‚‚ƒ…„ƒƒ‚ƒƒƒ„„„…„………„„„„„…………‡ˆ‡„‚‚‚‚€€€‚€‚€‚‚ƒˆŠ‰ŠŠŠŠŠŠŠŠ€€€€€€€€€€€€€€€€}{||vmiknnnnnnnnmlllkkkjnpu{{wqppppooolmmnnoppmnnoppqqrrqonmlknsy{zwvvwwwvvvvvvvwwxxyywwwwxxxxxxyyyyxxxyyz{||}|}~~}~ƒ€~||~~€€€}|{|}}|{„‡††‡…|~ƒˆ‰ˆˆŠƒ}}}|~|}€‚~{yy}„‚ƒƒ‚€€€€€€€€€€€~~~~€~~}~~€€€~}||||}||{{{{{yz|}€ƒ„…„„„ƒƒƒ‚‚€‚‚‚€€~}~~~~}|}~€~}~~}|{{}€‚ƒ‚‚ƒ„„ƒ…†ƒ‚€‚‚‚‚‚‚‚‚€‚‚}zyywvwyyy{€€€€€€€€€€€€€€€€†ƒ‚„ˆ‰‡„„„„„„„„„„„…„…„…„ƒ‚€€‚…†††††††††‰‰‰‰‰‰‰‰ŠŠŠŠŠŠŠŠ‡‡‡‡‡‡‡‡ƒ„†ˆŠŒŽŽŽŽŽŽŽŽŽŽŽŽŽŽŒŒ‹‹Š‹Šˆ‡††††‰ˆ‡‡‡†‚€~‚†ˆˆ‡‡ˆ†††††………ˆˆˆˆˆˆˆˆ|yzyxy}„zwxyxw|}}}||~€|yy{~|xvy}~ƒƒ‚€€€‚ƒ€‚‚‚‚ƒ‚ƒ‚ƒ‚ƒ‚ƒ„„„„„„ƒ‚‚ƒƒƒƒ‚‚„„………„„ƒ……………………„„…†‡ˆ‰‰ˆ‰‰‰‰‰‰Š‰‰ˆ…‚‚€€€‚‚‚ƒ…„ƒƒ‚‚ƒƒ„„„„…………ƒƒ„„„„………‡ˆ‡„‚‚‚‚‚‚€€‚€€‚€‚ƒƒˆ‹‰‰‰‰‰‰‰‰‰€€€€€€€€€€€€€€€€{z{zqhhnllllllllnmmmlllkkmsy~{xppponmmllmnpsuvwxxyzz{||{zxuromklry}|ywvyxxwvuttvvvvvvvvwwwwxxxxxxyyyyxxxyyz{|}}|}~~}~€ƒ€~||~~~€}|{|}}|{„‡‡††……z|ˆŠˆˆ‹ƒ}}}}~}„ƒ€|{z‚„}}}}~~~~~€€€€€€€€€~~€€~}}}~€€~~€~}|||||||{{{{{yy{}‚ƒ„„„ƒƒƒ‚‚‚€‚‚€}~€~~zz{{|~€~}~~|{{}€ƒƒ‚‚‚‚‚ƒ„…„†‡„‚‚‚‚‚‚‚‚‚‚‚‚€|zyyywxzyxz~€€€€€€€€€€€€€€€€„ƒ„‡ˆ†††……………………††††††††…„‚‚„†ˆ„„„„„„„„„„„„„„„„…………………………………………„…‡‰ŒŽ‘‹ŒŒŽŽŽŽŽŽŽŽŽŽŒŒ‹ŠŠŠ‹Šˆ‡††††Šˆ‡‡‡†ƒ€~†ˆˆ‡ˆˆ†††††††…ˆˆˆˆˆˆˆˆ~{xxxyyyƒ}ywwxy|}}|||~|yy{~{ww{€ƒ†‰ƒ‚€€‚ƒ€€€€€€€€€€€‚‚‚‚ƒ‚ƒ‚ƒ‚ƒƒ„„„„„„ƒƒƒƒ„„ƒƒƒ„„…………„„……………………„„…†‡ˆ‰Šˆ‰‰‰‰‰‰Šˆˆ‡…‚‚€€€‚‚‚ƒ„„ƒƒ‚‚ƒƒ„„„„…………ƒƒ„„„„………‡ˆ‡„‚‚‚‚ƒ‚€€‚€€‚ƒƒˆŠ‰‰‰‰‰‰‰‰‰€€€€€€€€€€€€€€€€}xtqonkhnnnmmkkjlmonmllmmqsuz}upppoonnmlnrv{‚ƒ€~|}€€~|~€|upmhmuyyyxyxxyyxxwwvvwwwwwwxxxwwxxxxxxyyyyyzzzz{{{{~~~€€€~~~~{|~~}€}}}zwwy€‡Š†…ˆ‡‚}z|…‹ˆ€zxz|}~}|{‚‚€~}|||†…zyz{~‚€~€‚~~~~~~~~~}~€€€€~~~~~~~}}}}}~}~~~~}|{{{||||{{{{{{yz|||}€‚……„„ƒ‚‚‚‚‚‚‚~~~~~~~~~~~~}~|{{}|{}€‚€‚‚€€‚ƒ……†…ƒ‚ƒƒƒƒƒ‚‚ƒ„„ƒƒ}{yyvtvwwz~€€€€€€€€€€€€€€€€†„ˆŒ‹……‹‡‡††††‡‡†††……„„„†…ƒ‚ƒ„ƒ„†††„€‚ƒƒƒƒ‚€‡†„‚‚‚‚‚}ˆˆƒ„‚„ˆŒŽŒŒŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŒŒŒ‹‹‹ŠŠ††††††††††††…„ƒ‚‚„…‡‡‡‡††………††‡†‡‡†‰ŽŽ…|x|}yvxƒˆ‡}uw‚‹‡„}||~xyz|}€€}wtw€Š‘‡ƒ€€‚ƒ‚€€€€€€€€‚ƒƒ€‚ƒ‡†„‚‚ƒ„…„„„„„„„„ƒƒƒ„„„„„†…………„„„†††……„„„„……†‡ˆˆ‰ˆˆ‰‰ŠŠ‰‰‰ˆ‡…ƒ‚€€€€€‚‚‚‚ƒ…„„„„„„„„…„…„…„…„ƒƒ„„……††…†ˆ†„€‚‚€€€‚€€‚‚‚‚‚„†‰‹ŒŒŒ‹‹ŠŠŠ€€€€€€€€€€€€€€€€|xronnmkhjklkkkkijlmlkjjloqsx~ynnmmnoppmpsx}€ƒ„ƒ}|~}vplhmtyyyxyxxxxxxwwvwwwwwwxxxxwwxxxxxxxyyyyzzz{{{||~~~€€€~}~~|}~€~~}{{yvvx|„ˆ†…ˆ‡‚{wx}‚€|yyz|}~}|{‚€~}||{†…~yy{{~~€€€€€€€€€~€€€€~~~~~~~}}}~€}~~~~~~||{{||||{{z{{{y{|||}€‚……„„ƒ‚‚€€€€~~~~€€€€|~€€~}}~}|{}€‚€€‚„„………ƒ‚‚ƒƒƒƒ‚‚‚ƒ„ƒ‚€}{xwyvuvwwz~€€€€€€€€€€€€€€€€ƒ„‡Šˆ……‰‡‡††††‡‡ˆ‡†…„„……†…ƒ‚‚ƒ„†……„ƒƒƒƒƒƒƒƒ‚€€ƒ‚€€‚‚‚|€‡ˆ„…ƒ‚„ˆŒŒŒŒŽŽŽŽŽŽŽŽŽŽŽŽŒŒŒ‹‹Š‰‰††††††††††††…„ƒ‚‚ƒ…†‡‡‡††………………†ˆ‰‰‹Žˆyzxuw}Љ‚ƒŠŠ‡ƒ€}}}~yzz{|}~~|vruˆ‹‹†ƒ€€‚ƒ‚€€€€€€€€€€‚ƒƒ€ƒ‡†„ƒ‚ƒ„…„„„„„„„„ƒƒƒ„„„„„…………„„„„†††……„„„„……†‡ˆˆ‰ˆˆ‰‰‰Š‰‰ˆˆ†…ƒ‚€€€€€‚‚‚‚€ƒ…„„„„„„„„„…„…„…„…ƒƒ„„……††…‡‡‡ƒ€‚€€€‚‚€€€‚„…ˆŠŒŒŒŒ‹‹‹ŠŠ€€€€€€€€€€€€€€€€|wpllmmlhijjiikmiikmnmkjklnov}€~sqolllmnoqv{‚„„ƒ€~~€€~||~~xpkhmuyzxyywwxxxwwvwwwwwwxxxxxwwxxxwwwxyzzzz{{{{|||~~~€€€~~~~}}~€€~{yyxuuw{‚‡…„…ƒ~yutwyxxzyz||}}||€€~~||{{€„‚}yz}|~€€‚€€~~~~€€~~~~~~~}~~€}}~~~~~}}{{{||||{{{{{{z{}||}€‚…„„ƒƒ‚€€€€€€€€~~~~€€€€€~|}}}||}‚‚€€ƒ…„……„ƒ‚‚ƒ‚ƒƒ‚‚‚ƒ„„ƒƒ€~{xwzwvwxxz~€€€€€€€€€€€€€€€€€…ˆ‡††‡‡‡‡‡†††‡‡‰ˆ†…„…†‡†…„‚‚‚ƒƒˆ†„‚‚ƒ…†„ƒƒ‚‚‚€€ƒ„‚‚|†ˆ…†„ƒ„‰ŒŒŒŒŽŽŽŽŽŒŒŒŒŽŒ‹‹Š‰ˆˆ††††††††††††…„ƒƒƒ…†‡‡‡‡†……„„„„†‰ŒŒŽŽ‰zxvv~‡Ž‘’ŒŽŽŒŠ†‚€€€zvy€†ˆ‡…ƒ€‚‚‚€‚ƒ‚€ƒ‡†…ƒƒƒ„„„„„„„„„„ƒƒ„„„„„„…„…„„„„„††…………„„„……†‡‡ˆ‰ˆˆ‰‰Š‰‰‰ˆ‡†„ƒ€€€€‚€‚€€ƒ…„„„„„„„„…„…„…„…„ƒƒ„„……††…†ˆ†„€‚€€‚ƒ€€€€€€€€‚ƒ…‡Š‹Œ‹‹‹‹ŠŠŠ€€€€€€€€€€€€€€€€}wojijiiklkiggjmiiikmnljijjmrywuqmkkklptx~„„„~}{}€~}~€‚€zqjhntyyyxywwwxwwwvwwwxwxxxxxxwwxxxvwwxyz{{{{{|||}}~~~€€€~}~~}~€€€€}yvwvutv|‚†„‚€|wxutuuuw{z{{||}|}~~}||{{z{}~}}~}~€€€€€€€€€€€‚€€}~~~~~~~~€~~~~~~}}}~~~~~~||{{||||{{z{{|{|}}|}€‚„„„ƒ‚‚‚‚‚ƒƒƒ‚‚~~~~~~~~~~~~}}}}}||~€ƒ‚€€‚„…„……„ƒ‚‚ƒ‚ƒƒƒ‚‚‚ƒ‡†…„~{z{xxyzy{~€€€€€€€€€€€€€€€€‡Š‡…‰Š‡ˆˆ‡‡†‡‡‡ˆˆ‡†††‡‡……„„ƒƒƒƒ††„ƒƒ„…†…„‚‚‡†„ƒ‚ƒƒ„‚ƒ€|~„ˆ‡‡…ƒ…‰ŒŒŒŒŒ‹‹‹‹ŒŒ‹Šˆ‡††††††††††…††††…„ƒ€ƒ…†‡††‡††……„……†‹‘‘’‘Žˆ{y{ˆ‘‘‘“ŠŒŠˆ…ƒƒƒƒ‡‡‡††………†…ƒƒ…†††„ƒ‚‚‚ƒƒƒƒƒƒƒƒ€‚ƒƒ€ƒ††……„„„„„„„…„…„„„„„„„…„…„„„„„„„„……………………„……†‡ˆˆ‰ˆ‰‰Š‰‰‰‰‡†…„ƒ‚€€€€€‚€€‚„„„„„„„„„„…„…„…„…„„„…„…………‡‡‡ƒ€‚€€ƒƒ€‚€€€€ƒ„†ˆŠŠŠŠŠŠŠ‰Š€€€€€€€€€€€€€€€€~xqkihgejkjihgikigggjjjiihhjnszzxtpnlllqtzƒ„„ƒ|{|„‡ˆ‡}~€ƒ‚|qhhmuyzxyyvwwwxwwwwwwwxxxxxxxwwxxxwxxyz{||||||}}}}~~~€€€~~~~~~€€€€}xtuvttv{‚~|xuwuuvutvz{{{{||}}}||||{{{ywvy~‚‚€€€~~}~}~}~}~~€€}~~~~~~~~~~}~~~~~}~~~||}}~~~~~}}{{{|||{{z{{|||}~}}}€‚„„ƒƒ‚‚ƒ„„ƒ‚~~~~~~~~~~~~~~}€€~}}~ƒƒ‚€‚„…„„…„‚‚‚‚ƒƒ‚‚‚ƒ†††„‚}{}{z|}{|€€€€€€€€€€€€€€€€€ˆŒˆ‡‹‰‰‰ˆ‡‡‡‡‡ˆˆ‰‰‰ˆ‡‡†††††…„„ƒ„†‡‡†…„†„‚€€€‚ƒ‹‰†ƒ~~‚„{|ƒˆ‰ˆ†……ŠŒŒŒŒŒŒŒŒŒŒŒŒŒŒ‹‹‹‹ŒŒ‹‹Š‰‡†………………………………†††…„„€ƒ„††††‡††††††‡‡’’““’Œ…ƒˆŽ’““’’•“މˆˆ‡‡‡ˆˆŠŠŠ‰‰‰ˆˆŒŽˆ„„…‚‚‚ƒ„„„„„„„„„ƒ„ƒ‚‚„†††††…„„…„…„…„……„„„„…„……„„„„…„…„……………………„……†‡‡ˆ‰‰‰‰‰Š‰‰ˆ†……ƒƒ€€€€‚€€€‚„ƒƒƒƒƒƒƒƒ…„…„…„…„„„„„……………†ˆ†„€‚€‚€ƒƒ€‚‚‚‚€€ƒ…‡ˆˆˆˆˆˆˆ‰ˆ€€€€€€€€€€€€€€€€}ytqomjggghiiihgjigghjjkhggjkmry|xrnjhptz€ƒ„‚€~}~ƒ‰Ž~~€„„~qghntyyyxyvwwxxxwwwwwxxxxxxxxwwxxxyyz{{||}||}}}~~~~~~€€€~}~~~~€€€}wstuutvwz|}{yxwvttvustw|{z{{|}~{{{{z{zzxusv|‚„ƒƒ‚‚ƒƒ~{{{{{{{{}|{}~€}}~}~}~}}~}}}}~~~~~}}}}}~|||}}~~~~~||{{||{{{{{{||}~~~}}‚„ƒƒ‚‚€€‚ƒƒ‚€~~~~€€€€~€~~}}ƒƒ‚€€‚ƒ…ƒ„„„‚‚‚ƒƒ‚‚‚ƒƒƒƒ}|}}€€~~€€€€€€€€€€€€€€€€€€†‰‰ˆŠ‹‹‹Š‰‰ˆˆˆˆ‡ˆŠ‹Š‰ˆ‡‡ˆˆ‰ˆ‡†…‚„†ˆˆ‡…„‡…‚€‚„‰‡ƒ{yww‚„‚{zˆ‹Š‡…‡ŠŒŒŒŒŒŒŒŒŒŒŒ‹‹‹‹‹‹‹‹‹‹‹‹‰‰ˆ‡†……„……………………„……††…„„€‚„…†††‡‡†††‡‡ˆˆŽ“”’“’‘‹††ŠŽŽ“”‘‘’’‡ˆˆ‰‰ŠŠ‹ˆˆˆ‰‰‰‰‰‘“‘‹…‚‚‚‚‚€ƒ………………………ƒ„……ƒƒƒ…†††‡††„„……………………„„„…„………„…„……………„„…………††„……†‡ˆˆ‰‰‰‰Š‰‰ˆˆ……„ƒ‚‚€€€€‚€€„ƒƒƒƒƒƒƒƒ„…„…„…„…„„„…„…„……‡‡‡ƒ€‚€€€ƒ‚€‚‚‚‚€€€‚„†‡………††‡‡‡€€€€€€€€€€€€€€€€|zyyzwsokiggiihfjjjiiijkighjifjq}zupmosz€ƒƒ€~}}~‚ˆŽ~~€„†rfhmuyzxxywwxxxxxxwwxxxxxxxxxwwxxx{{{||}}}}}}~~~~~~~€€€~~~~~~~~€€}wrruuuvvwyyxwwxxustuttw|{zzz|~zzzzzzzzwvvvy}‚„…„ƒ„……‚{{{{{{{{zyy{~~}}}}}}}}|||||}~~~~~~}|||}}||||}}~~~}}{{{||{{{z{{||~~~}}€‚ƒƒƒ‚€€€ƒ„„‚€~~~~€€€€€€€~{~}}‚ƒƒ‚€‚‚„ƒ„„ƒ‚‚€‚ƒƒ‚‚‚‚‚‚€‚€€ƒ‚€€€€€€€€€€€€€€€€€~€„‡‡…‡ŠŒ‹‹Š‰‰‰‰ˆ‰Š‹‹Š‰‰‰Š‹‹‹‰ˆ†„……†‡‡‡‡‡…~~‚„†„€|ywvv‚…‚{y€ˆŒŠˆ†‡ŠŒŒŒŒŒŒ‹Œ‹‹‹‹‹‹ŠŠ‹ŒŒ‹Šˆ‡‡††……………………………„……††……„€‚ƒ…………‡‡††††††‰”“‘’“’‘Œ‹ŒŽŽŽ‘’‘‘ˆˆ‰ŠŠŠŠŠ‡ˆˆ‰Š‹ŒŒ‘’Š„€‚ƒ‚€€ƒ†††††††††„…‡†„„…†…†‡‡‡†„ƒ……………………„„„„……………………††††„„„……†††„……†‡ˆˆ‰‰‰Š‰‰‰ˆˆ„„„ƒ‚€€€€‚€€ƒƒƒƒƒƒƒƒƒ…„…„…„…„………„…„„„…†ˆ†„€‚€€‚‚€€‚‚€€€€‚ƒ…†ƒƒƒ„„………€€€€€€€€€€€€€€€€{{|€€{wtngegiiggijjhghiighjgcelpty~€~}nsz€ƒ‚}{z{~„‡ˆ‡~~€…‡€rfhmuyyyxywwxxyyxxwxxxxxxyxxxwwxxx||}}}}}}}}}~~~~~~€€€~~~~~~~~€€~wqruuuvxxxwustv{vstuuvy}|zzz|~yyyyzzzzwyyxvx…‡…ƒ„††ƒ{|{|{|{|xwwz}~}}}}}}}}|{{{{|}~~~~~}|{|||||||}}}}~~||{{||{{{{{{||~}}‚ƒƒƒ‚€€‚…††…‚~~~~~~~~~~~~}}~€‚‚€}~}‚„ƒ‚‚‚€‚ƒƒ„„ƒ‚‚€ƒƒ‚‚ƒ„„…„„ƒƒ‚„„€‚€€€€€€€€€€€€€€€€|{†…‚‰Œ‹ŠŠŠŠŠŠŠŠŠŠŠŠŠŠ‹ŒŒ‹‰‡‡†„„„†‰Šˆ…~}‚……ƒ€~{zzz‚…‚{y€ˆ‹ˆ†‡ŠŒŒŒŒŒ‹‹‹‹‹‹‹ŠŠŠŠ‹ŒŒ‹Š‡‡†††……………………………„„…†††…„€‚ƒ„………‡‡†……………Š”’‘““ŽŽŽŒŒŽ’’‘–˜”‰ŠŠ‹Š‰ˆˆ‰Š‹ŒŽ‘ŽŽ’”‘ˆ‚ƒ‚€€ƒ‡‡‡‡‡‡‡‡‡…†‡‡……†‡…†‡ˆˆ†„ƒ……………………„„„…………………†††‡‡‡„„„……†††„……†‡ˆˆ‰‰‰ŠŠ‰‰ˆˆ„„ƒƒ‚€€€‚€€€~ƒƒƒƒƒƒƒƒƒ„…„…„…„……………„„„„…‡‡†„€‚‚€€€‚€€€€€€€€€€ƒ„…‚‚ƒƒ„„„€€€€€€€€€€€€€€€€}{zz{|{zyxtnhegiggggggggcddefgghbgov}€€z|}~‚†„~~|{}€ƒ„„€~}‚ƒ€}}~~|zxxzxxxxxxxxxxxxxxxxwwxxyzzz{{{{||}~~~~€€€€€~}~~~~~|yvuuuuuwxxxxwvuuuuttuvvzzzyz{|}{{zyxwvvw}xvz€‚„†‡†‚~{{zyz{{{z~xv|€|z~~}}}~€|{}~|{||||||||||||{|}€€€€~~}}~~}}||{{{|}|z{}€€~~€‚…„ƒ‚€~}}„…„ƒ‚€}}~„†€€€~~}‚‚ƒƒƒ‚‚‚‚€€‚ƒƒ„…„ƒ‚ƒƒ„ƒƒ‚ƒ„…†………„‚€~}||||}‚€€€€€€€€€€€€€€€€~~~€‚…‡„†‰ŒŒ‹ŠŠŠŠŠŠŠŠ‰‰ˆ‡†…………„„„~ˆ‚€€€€~}€~{|€ƒ‚‚ƒ‡‹ŽŒŒŒŒŒ‹‹‹‹‹‹‹‹‹‹‹‹Œ‹Š‰ˆˆ‡††††………………†……„„„„„„…………€€‚†‡†…‡‡††††‡‡ŠŒ‘’‘’’ŽŽ‘‘Ž’’‹‰‰‰ŠŠ‡……†‰‹‘Œ‡‰’Žˆƒ‚‚‚‚ƒ„…†‡‰‰‡††‡‡ˆˆ†„ƒ…‡ˆˆ‡††…„„‡††††………††††††††……††††……„„„„„„„„„…†ˆ‰‰‰‰ˆˆ‰ŠŒ‹ˆ…„„ƒ‚‚€€‚‚€~}}~~~~~~‚‚‚ƒƒ„„„……………………„„„„„„„„ƒ„…„‚‚ƒ‚‚€€€€€‚‚‚€€‚„…†‹‡„„‡‰ˆ‡€€€€€€€€€€€€€€€€~~~~|wojptwwsnkijjjjjjjjmnnoppqqrtwyzywv{}}|€…„€zyx{~‚ƒƒ~~€ƒ„‚~}zwwyxxxxxxxxxxxxxxxxwwxxyzzz{{{{|}}~~~~€€€€~}~~~~~~|yvuuvuuwwxxwwvuvvuttuuv{{{{|~€~}|zywvvvz}|wux}ƒ…†…‚~{xwvvxxwv{vu|~}~}}}}~€€~zz|}|{||}|}|}|}}}||}~€€€€~~}}~~}}||{{{|||z{}€€~~€‚‚‚€~}}~€ƒ†‡ˆƒ‚€€‚~~}}}|}~€‚ƒ„‚‚‚‚€€‚ƒƒ„…„ƒ‚ƒƒ„„ƒƒƒ„……ƒ„„„ƒ‚€}zxy}…€€€€€€€€€€€€€€€€€€€ƒ‡ŠŒ††‡ˆ‰Š‹Œ‹‹‹‹‹‹‹‹‰‰‰‰‰‰‰‰†††††‡‡‡…„…†ƒ€…††…ƒ~~~{{~€€‚†‹ŽŒŒŒŒŒŒ‹‹‹‹‹‹‹‹‹‹‹ŒŒ‹Š‰ˆˆ††††††……………†……„„„„„„…………€€€‚…‡†…‡††……††‡ŠŒ’‘‘’’ŽŒŽŽ‘’‘ދЉ‰Š‰†„ƒ…‡Š‘‘ŠŒ’Šƒƒ‚‚‚„„…‡ˆŠŠˆˆ‡ˆˆ‰‰†ƒ‚„†ˆˆ‡‡……„„‡††††………††††††††……††††……„„„„„„„„„…†ˆ‰‰‰‰‰ˆ‰ŠŒ‹ˆ…‚‚‚‚ƒ‚‚€~~}||||||||€‚‚ƒƒ„„„„„„„„………………………††…‚€€‚‚€€€€€‚‚‚€‚ƒ…†„…‡ˆˆ†……€€€€€€€€€€€€€€€€{|}~~xqkpv}€}yusyyyyyyyyyzzz{{||~{yvtr~~|z}ƒ…‚xwvx}€‚‚~~~„…„‚€€~zwvwxxxxxxxxwwwwxwwwwxxyyzz{|{|{|}~~~~~~€€~}~~~~~|zwuuvvuwwwxwwvuvvuuuuvv}}}}~‚€~|zywwvxyxvuwy‚„„ƒ€}zvuttuvutuqrz€€€~}}|}~€}zy{}{z{}}}}}}}}~~}~~€€€€€~}}~~}}||{{{{|{{{}€€~€‚€€€~~}€~€ƒ†ˆ…………ƒ‚€€€€€€€€€~~}}|{{}~€ƒƒ‚‚‚‚€€‚ƒƒ„…„ƒ‚ƒƒƒ„……………„‚‚ƒ„„ƒ‚€~{y{}‚„€€€€€€€€€€€€€€€€€€€„‡‹‡…„ƒ„†ŠŒˆˆˆˆˆˆˆˆ„„„„„„„„ƒƒ„…†‡ˆˆ„„†ˆ†€~€‰‹‹‡‚}~‚‚€}zz|~}}€„ŠŽŒŒŒŒŒŒ‹‹‹Œ‹Œ‹Œ‹ŒŒ‹Š‰ˆˆ‡†††††………………………„„„„„„…………€€…‡‡†††…………††‰Œ‘’‘’’ŽŒ‹‹ŽŽ’’‘‘’‹ˆ‡††‡†„‚ƒ†‰ŒŽ‘Ž‘„ƒƒ‚ƒ„…†ˆ‰‹‹Š‰‰Š‹Œ‹ˆ„‚ƒ…ˆˆˆ††„„„‡††††……………………………„………†……„„„„„„„„„„…†ˆ‰‰‰‰‰‰‰Š‹Š‡„~~€ƒ„……‚€€~~||||||||~€€ƒƒƒƒƒƒƒƒ…„…„…„……†‡‡„€‚‚€€€€€‚‚‚€€€ƒ„…€„ˆˆ…‚ƒ…€€€€€€€€€€€€€€€€}||}~~|z|~~€ƒƒƒƒƒƒƒƒ€€€€€€€€‚~|zzzz€€}yz……{zxz|€€}~‚„………‚‚~zwvvxxwxwxxxwwwwwwwwxxxyzz{{|||||~~~~~~~€€~}~~~~~}zwuvvvvvwwxxwvvuuuuvwxy~~}~€€~|{zyxxwxxxxx€ƒƒ‚|zvuttuutsnlnw}}}|||}€}zy|}|{|~~}~}~~~€€€€€€~~}}~~}}||{{z{||z{~€‚‚~€‚€€€€€€„ƒ€€„…‡‡†„‚‚‚‚‚‚‚‚€€}~~€€‚‚ƒ‚‚‚‚€€‚ƒƒ„…„ƒ‚ƒƒƒ„…†††„„€‚„„…„„€‚‚‚€€€€€€€€€€€€€€€€~~~€ƒ†ˆ„ƒ‚‚‚„†‡ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ„„……††ƒƒ†Šˆ}}‡‹Œˆ€}~„‚|yyz{z{~ƒ‰ŒŒŒŒŒŒ‹Œ‹Œ‹Œ‹ŒŒ‹‹Š‰ˆ‡†††††…………………………„„„„„„…………‚€„‡‡††………„……†‰Œ‘‘‘‘’Ž‹‹ŒŽŽ‘““‘‘Œ‡ƒ‚‚ƒ……ƒƒ…ˆŠ‹Œ„„ƒƒƒ„…†ˆŠŒŒ‹‹‹ŒŽŠ†„…†ˆˆ‡‡……„„‡††††……………………………„„…………„„„„„„„„„„„…†ˆ‰‰‰‰Š‰‰Š‹‰…‚}~‚„„…‚‚€€~~~}}|}}~~‚ƒ‚ƒ‚ƒ‚‚„……„€‚‚€€€€€‚‚‚€€€‚ƒ„ƒ„„‚€ƒ†€€€€€€€€€€€€€€€€ƒ€}|~€‚‚||‚~~}~~yy„†‚}|~}|~€‚„„…†‚ƒ‚zwvwxxxxxxxxxwxwxwxwxxyyz{{{}|}|}~€~~~€€~}~~~~~}zwvvvvvvwxxxxwwttuvxz{}€~||{||€€~~}}{zyz{|{z‚‚€~|zvuttttsrjhltz|}€}||{|}~~{{}~}~~~~~~~€€€€€€€€~}}~~}}||{{y{|{{{~€‚ƒƒ~€‚‚‚‚‚‚‚ƒ„…„„ƒ€‚„†ˆ‡†ƒ‚……………………„„„ƒƒ‚‚‚‚‚‚‚‚‚‚€€‚ƒƒ„…„ƒ‚ƒƒ„„†††…„ƒ€ƒ„…………‚ƒ„………„„€€€€€€€€€€€€€€€€~}|}‚€‚ƒ„ƒ‚ƒƒƒƒƒƒƒƒ……„„ƒƒ‚‚ƒ‚…ŠŠƒ}|‚…ˆ…€}€ƒ„‚~{zzz{zz}‚‰ŒŒŒŒŒŒŒŒ‹‹‹‹‹‹‹‹‹‹‹‹Š‰ˆ‡†††††…………„„…………„„ƒ„„„„…………ƒ€€„†‡‡†……„………†‰‹‘‘‘Ž‹ŠŒŽŽ‘“’Žˆ‚€ƒ‡‡‡…‚ƒ…†ˆˆˆˆŒŽŒŽƒƒƒ‚ƒƒ……ˆŠŒŒ‹‹‹Œ‘‘‰‡‡‰ˆˆˆ††„„„‡††††……………………………ƒ„„„…„„ƒ„„„„„„„„„…†ˆ‰‰‰‰‹Š‰ŠŠˆ„€€‚‚‚€€€€~~}}}{|||}~~~€€€€€€€‚ƒƒ€‚ƒ‚‚€€€€€‚‚‚€€‚ƒ…‚€ƒƒ‚€€€€€€€€€€€€€€€€€~|}~~}}€~{xyz||||||||~~~}}|||~€€€‚zy~ƒ…‡„€~||~‚‚‚ƒ„‚‚{xxyxxxyxxxxxxxxxxxxxxyzz{{|}}}}}€€€~}~~~~~}{xvvwwvwxyyzyyxvvwxy|}~~|{z{{{€€€~}}}~~~}‚‚‚€~|{vussttsqkjnuyz{||{{{}~~{{~€€€€€€€€€€~~}}~~}}||{{yz{{{|~ƒ„ƒ‚€‚„„ƒƒ‚‚€‚…ˆ‰Šˆ‡ƒ„…††…„ƒ„„„„„„„„……„„ƒƒ‚‚„„ƒƒ‚€‚‚‚‚€€‚ƒƒ„…„ƒ‚ƒƒ„……………„ƒ‚ƒ……†……‡†„„ƒ…†‡€€€€€€€€€€€€€€€€‚}}~€~€‚…„ƒ€ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ……„ƒ‚€€‚ƒ‰Š„~~ƒƒ€„…}{{|||{|~ƒˆŒŒ‹ŒŒŒ‹‹‹‹‹‹‹Š‹Š‹‹‹ŠŠ‰ˆ‡††……†…………„„„„………„„ƒ„„„„…………ƒ~€‚†‡ˆ††…………††ˆ‹Ž‘‘‹ŠŠ‹ŒŒŽŒŠŠ†ƒƒƒ†‰Š‰ˆ‚ƒ„…††……‰‰ŠŠ‰‰‰Š‚‚‚‚ƒ„…†ˆŠ‹ŠŠŠ‹Œ‰‡ˆ‰ˆˆ‡‡……„„‡††††……………………………ƒƒ„„„„ƒƒ„„„„„„„„„…†ˆ‰‰‰‰‹ŠŠŠ‰‡ƒ€€€€€€~~}|{{zz{{||}}~~~€‚‚ƒ…‚‚€€€€€‚‚‚€€€‚‚€€‚……~€€€€€€€€€€€€€€€€|{{|~~|z}€€}zxx€€€€€€€€~~}|||}ƒƒ‚€~~|z~‚„†ƒ€~}|‚‚€‚€|yz{yyyyyyyyyyyyyyyyxyyz{{||~}}}~€€€€€€€€€€€~}~~~~~}{xvvwwwxyzz{{zzyyyz{|}~|{{{{|~~€€~~ƒ‚‚€~}|xwvuvvtsppsy{z{|{{{{|}~}{z}~€€€€€€€€€~}}~~}}||{{yz{{{|„„„‚€~€…„„‚€€€ƒ…‡ˆŠŠ‡†„ƒ‚‚‚‚€€€€€€€€‚‚‚€€€‚‚‚€‚‚‚‚€€‚ƒƒ„…„ƒ‚ƒƒ……„ƒƒƒ„„ƒƒ……†…„„†…„ƒƒƒ……€€€€€€€€€€€€€€€€‚~~‚‚‚‚‚ƒƒƒƒƒƒƒƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚†‰†‚€‚‚ƒ„„}{}~~~€„‰‹ŒŠ‹‹‹‹‹‹ŠŠŠŠŠŠŠŠŠŠŠ‰‰ˆ‡†…………………„„„„„……„„ƒƒ„„„„…………„‚†ˆˆ‡††……††‡ˆ‹Ž‘‘ŽŠ‡‡ˆˆˆŠ‹‰‡‡ˆ†ƒ…„„…‡ˆ†„€ƒ„………………………………€‚ƒƒ…†‰‰‰ˆ‰Š‹Œ‹‰†…†ˆˆˆ‡††„„„‡††††………„„„„„„„„‚ƒƒ„„ƒƒ‚„„„„„„„„„…†ˆ‰‰‰‰Œ‹ŠŠ‰†‚~€€€€€€€€‚‚‚~}|{zzy|||}}~~~‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚€€ƒ‚‚€€€€€‚‚‚‚€‚ƒ„ƒ€€€€€€€€€€€€€€€€€}{{}~}|}€‚‚€}}~‚€~~}z}„…ƒ€~}‚}{~‚ƒ„~€}|‚‚~€|z{|yyyyyyyyyyyyyyyyyyyz{{||~~~~~€€€€€€€€€€€~}~~~~~~{xvwwwwyyz{||{{}||{{|}}yzz{}‚‚‚€~}}~€€~€ƒƒ‚€~}{zyxyxwvutw|}{||{{z{|}~|zy|~~}€€€€€€€€€€~€€€~~}}~~}}||{{xz{{{|‚„…„‚€„„ƒ€~}}€€‚…†‹‰…€||||||||€~~}}~~€€‚‚‚‚€€‚ƒƒ„…„ƒ‚ƒƒ†…„ƒ‚ƒƒ„„„…†……„ƒ€‚„……ƒ€€€€€€€€€€€€€€€€~}}}‚ƒ…ƒ‚„€€€€€€€€€€€€€€€€€‚‚ƒƒ‚~…‰‡„ƒ‚‚ƒ„„ƒ„€||~…‰‹‹Š‹‹‹‹ŠŠŠŠ‰‰‰‰‰‰‰‰Š‰ˆˆ††…„…………„„„„„„„…„„ƒƒ„„„„…………„~~‚†ˆ‰‡‡††††‡‡ˆ‹Ž‘‘ˆ…„…†††‡…ƒ„ˆˆ…„ƒ‚ƒ„ƒ€~€ƒ„………ƒ‚‚ƒ„‚€€€€‚ƒƒ…‡ˆˆˆˆ‰‡ˆˆ†ƒƒ„‡ˆˆ‡‡……„„‡††††………„„„„„„„„‚ƒƒ„ƒƒƒ‚„„„„„„„„„…†ˆ‰‰‰‰Œ‹Š‰‰†~€€€‚‚‚‚‚€~||{||}}~~ƒƒƒƒƒƒƒƒ„„„„„„„„‚ƒ‚€~‚‚€€€€€‚‚‚‚€€‚ƒ„‚ƒ†€€€€€€€€€€€€€€€€|}}~€„‚€~}~€ƒ}}}~~}{xvwz~€€‚ƒ€~~}}|€€€€€€€€‚‚‚‚ƒ…‡ˆ„ƒ‚~}|yz|}~~}}|{zyyyyyzzzzz{|}~}}}}~€€€€€~}}}}~‚€~|||}~|yvuvwxxxz}~~|||yzz{||}}~~~~~~~~€€€~€‚„„ƒ‚€~{{{zzyyyuwy{|}}}}}}}|||}}}}~€€€€~€~~}||||{{{{{{|||||€‚‚€€‚ƒ„„„„‚€€€€€‚‚†‡‰Šˆ…~€€}}~~€€‚‚‚‚€€‚ƒ„…†…ƒƒƒ„‚‚‚ƒ„„†††……………………‚‚…€€€€€€€€€€€€€€€€€€~}ƒƒ„……„„ƒ~~~}}}}}ƒ€}}}z€‚ƒ……ƒ‚€ƒƒ„„…†††€€‚‚‚|~€~|{|~~~„ˆ‹ŠŠ‰ˆ‡†……„†ˆ‰‰ˆˆˆ‰‰ˆ‡†……„„„„„„„„„††……„„ƒƒ„„ƒƒ„„……„‚€€ƒ†‰ˆ‡††…†††ŠŒŽŽŽŒˆ……††‡‡‡‡††………ƒƒƒƒƒƒƒƒ‚‚‚‚ƒ„††ˆ…ƒ„††ƒ~€‚‚‚„„……†‡‡ˆˆ‡†………†††‡ˆ†„‚ƒ„†††………„„ƒƒƒƒƒƒƒƒ„„„„„„„„„„„„„„„„…†‡ˆ‰‰‰‰‡ŠŒ‹ˆƒ}{}€ƒ„ƒ€€€€‚€€€€‚}|{{{|}~‚‚‚‚‚‚‚‚ƒƒƒƒƒƒƒƒ„„ƒƒ‚‚‚‚€€„†…€€€€€€€€€€€€€€€€}~~~€‚~}~€~}{zz{||||}}|zxwx{~€€‚€~}}}€€€€€€€€€„…‡„ƒ‚€}}{|}~~~}||zzyyyy{{{{|}~~~~}~~~€€€€~}}}~~‚€~||}}~{yvuvwxxxz|~}{zzyyzz{||}}}}}}}}}€€~€€‚ƒƒ‚€~~|||{{zzzz{}~}}}}|||}}}}~€€€€€€€€€€€€€~}}||||{{{{{{|||}}€‚‚€€‚ƒƒ„„ƒ‚€€€€‚‚ƒ†††…„‚‚‚ƒƒ„„„‚‚‚‚‚‚‚‚€€€‚‚‚‚€€‚ƒ„………ƒƒƒ„ƒ‚‚‚€‚‚ƒƒƒ‚€ƒ„‚€€€€€€€€€€€€€€€€€~~‚€€‚‚€€€€~|{€ƒ„„ƒ€‚ƒƒ„„………‚‚‚‚‚‚‚‚~€€}|}€€€ƒ‡‰‹‰‰ˆ‡†…„„„†ˆ‰ˆˆ‡ˆˆˆ‡‡†…„„„„„„„„„„†………„„ƒƒ„„ƒƒƒ„……„ƒ€€ƒ†‰ˆ‡††…†††‹ŽŽŽŒˆ……††‡ˆˆˆˆ‡‡††‚‚‚‚ƒ„…†‡…ƒ„††‚~~€€‚ƒ„„„„………†…„ƒƒ„„…†‡ˆ†„‚ƒ„†††………„„ƒƒƒƒƒƒƒƒ„„„„„„„„„„„„„„„„…†‡ˆ‰‰‰‰ˆŠŒ‹†‚~}|~€ƒƒƒ€€€€‚€€€€‚~|{zz{{€€€€€‚‚‚€€€€€‚„€€€€€€€€€€€€€€€€~~}}}€€~}}}~||{{{|}~z{{{zywvy|~}~~~~}}|||€€€€€€€€~~€„…ƒ‚‚€~}~€€€}|{zzyzz|||||}~~~~~€€€€€€~~~~~~‚€~||}~~{ywvwxxxxz}}|zyyzzz{||}}~}~}~}~}€€€€€‚‚€~~}}}}|||||€€‚‚‚€}}}}|||}}}}~€€€€€€€€€€€€€€~}}}||||{{{{{||}}}}€ƒ‚€‚‚ƒƒƒƒ‚€€€€€‚‚}~ƒ„……‚‚ƒƒ„„„„………………………„„ƒ‚‚‚‚‚€€‚ƒ„……„ƒ‚ƒ„„ƒ‚€~~€‚ƒ„‚‚ƒ…„€|€€€€€€€€€€€€€€€€~‚‚€€~~‚‚‚€€€~€~}~~‚ƒƒƒƒ‚ƒƒ„„„„……„„ƒƒ‚‚„‚}€‚‚„†‡‡††…„ƒƒ‚ƒ…ˆˆˆ‡‡ˆ‡‡‡†…„„ƒ„„„„„„„„………„„„ƒƒ„„ƒƒ„„……„ƒ€ƒ†ˆˆ‡‡††…††‹‘ŽŽŒˆ……††‡‰‰‰ˆˆˆˆˆ€€€€€ƒ‚‚‚ƒ„………ƒ‚ƒ…„‚€‚ƒƒƒ‚‚‚‚‚ƒ‚‚‚ƒ„†‡ˆ†„‚ƒ„†††………„„„„„„„„„„„„„„„„„„„„„„„„„„…†‡ˆ‰‰‰‰Š‹Œ‰…€}|}~€‚ƒ‚€€€€‚€€€‚ƒ‚€~}|||€€€€€€€€~~€‚‚‚‚‚€€}}€ƒ†‡€€€€€€€€€€€€€€€€€€~|{zz~}}}|}}}zz{{|}}~{{zyxvuty{}}{yyz{{z{zzzz~~~~~}}|}}€ƒ‚‚‚€€€‚€€}}{{zzzz{{{{{|}~~€€€€~~‚€~||}~~~{ywwxxxxxz}~}|{{||}}~~~~€€€€€€€€€€€€€€€€€~~}}~~~~~~~~ƒƒ„„ƒ‚€€}}}}|||}}}}~€€€€€€€€€~~||}||||{{{{{{|}~~~€‚‚€€‚‚‚ƒƒ‚€€€‚‚~€€€€€€€€€ƒƒƒƒƒƒƒƒ„„ƒƒ‚‚‚‚‚‚€€‚ƒƒ„…„‚‚‚ƒ„„‚‚‚‚ƒ‚‚ƒƒ………ƒ…‡†‚€€€€€€€€€€€€€€€€€~~~†…ƒ€~}}}~~~~~~~}z|€…„„…………„„…†…†††††…„„ƒ€€ƒ……„€‚„ƒ€‚ƒ„„ƒƒ‚‚‚„†ˆ‡‡‡‡††……„„ƒƒ„„„„„„„„……„„„„„ƒ„„ƒƒƒ„………ƒ€€ƒ…ˆˆ‡††…†††‹Ž‘ŽŒ‡…„…††ˆˆˆˆ‡ˆ‡ˆ€€€€„ƒƒ‚ƒƒ„…ƒƒƒƒƒ€€€‚‚‚„ƒƒ‚€€€ƒ„…†‡ˆ†„‚ƒ„†††………„„„„„„„„„„„„„„„„„„„„„„„„„„…†‡ˆ‰‰‰‰‹‹Šˆ‚||~€‚‚‚€€€‚‚€€€‚‡†„‚‚‚ƒ‚ƒ‚ƒ‚‚€€€€€€€€€€€€‚‚‚‚€€‚€~€„‡‡…€€€€€€€€€€€€€€€€€}|zyx{{{||||{vwwxyyzz}|zxutrrwy{zyvwwxxxxxxyx{|||}}}~||{{}~‚‚‚‚ƒ‚‚ƒ‚‚€~}|{{z{{|{{{|}~~€€€€€€€€€~‚€~|}}~~~~~{yxxyyxwxz~€€€€€€ƒ‚ƒ‚ƒ‚ƒ‚€€‚‚€€€€€€€~~}}‚‚ƒ‚‚€}}}}}|||}}}}~€€€€€€€€€~~~~}||}||||{{{{{||~~€ƒ‚€‚€‚‚ƒ‚‚€€€€‚‚ƒ‚~}}}}~~~~€€€€€€€€€€€‚‚‚‚‚‚€€‚ƒƒ„…„ƒ‚ƒ„ƒƒ‚ƒ„…………………………‚ƒ€~ƒ€€€€€€€€€€€€€€€€}~}}€ƒ‰‡„~}}xyzz|}~~~|xw{„Šˆ‡‡‡‡‡‡ˆˆˆˆˆˆˆˆˆ‡†…„ƒ‚€…†‡…‚€‚„ƒ‚€€€‚‚€€€ƒ†‡‡‡‡‡†……„„„„ƒ„„„„„„„„„„„„„„„ƒ„„„ƒ„„……†„€‚…‡ˆ‡‡…†…††‹ŽŽŽŽ‹‡„„„……††††††††ƒƒƒƒƒƒƒƒ…„ƒƒ‚ƒƒ„‚‚‚‚ƒ‚€‚‚ƒ‚ƒƒƒƒ„ƒƒ‚€ƒ„†‡†‡ˆ†„‚ƒ„†††………„„„„„„„„„„ƒƒƒƒƒƒƒƒ„„„„„„„„…†‡ˆ‰‰‰‰‹Š‰…}}}‚€€€‚€€€‚……„ƒƒ„……„„„„„„„„‚‚‚‚‚‚‚‚ƒƒƒ‚‚‚‚‚€€„ƒ„†Š‰…€€€€€€€€€€€€€€€€€~}zyxwxyz{|{{zwxyzzzyy|{yvutsswy{{ywwxwxxxxyyyz{{||}}}||{{|~€‚€‚ƒ„„„‚ƒƒƒ‚€~~||{{{{}}}}~€€€€~€€€€€~€~‚€~|}~~~~~{zxyyzxwx{‚‚‚‚‚‚‚‚‚‚‚‚ƒ„ƒ„ƒ„ƒƒ€€‚‚‚€€€€~~~~€€€€€}|}}}}|||}}}}~€€€€€€€€€€€€€~}||}||||{{{z{|}~€€€‚‚€€‚€‚‚‚€€€‚‚€€€€€€€€€€€€~~~~~~~~~~€€‚‚‚‚‚€€‚ƒƒ„„„‚‚ƒƒƒ‚ƒƒ„…†„„„„ƒƒƒƒ~{yz~‚„…€€€€€€€€€€€€€€€€}~||…Їƒ|{zzyzz||~~}yww}…Œ‰‰ˆ‡‡ˆ‰‰‰‰‰‰ˆˆˆˆˆˆ‡†…„ƒ‚†‡ˆ†‚€€ƒ‚€~~€€€€€€€€€ƒ…‡‡‡‡‡…………„„„„„„„„„„„„„„„„„„„„„„ƒƒƒ„……†„€€‚„‡ˆ‡††…†††ŠŒŽŽŠ…ƒ‚ƒ„„„„„„„…………†…†…†…………„ƒ‚‚‚ƒ‚‚ƒƒ‚ƒƒƒƒƒƒƒƒƒ‚‚€€~€€‚…‡ˆ†‡ˆ†„‚ƒ„†††………„„„„„„„„„„ƒƒƒƒƒƒƒƒ„„„„„„„„…†‡ˆ‰‰‰‰Š‰†ƒ~}~€€€€€€€€‚€€€‚€€€ƒƒ‚‚‚‚‚‚‚‚ƒƒƒƒƒƒƒƒ…„„ƒ‚‚‚‚‚€€„†ˆ‹Šˆ‚~€€€€€€€€€€€€€€€€~}|zyxwvwy{{{zyz{|}}{zyyxwuuvwxy{}}|{{|zz{{||}}{{|}}~||||}‚€‚ƒ„††‚‚ƒƒ‚€~~}||{||~~}~~€€€~~~€€€~~~~~‚€~|}~~~~}{zyyzzywy|€‚ƒ‚‚ƒƒƒƒƒƒƒ‚‚‚‚‚‚‚‚‚‚€€‚‚‚‚‚‚€€€€~~~~€€€€~€€€~}}}}}|||}}}}~€€€€€€€€~}|}||||{{{z{|}~€€‚‚€‚‚‚‚€€€€‚‚~€‚ƒ„ƒ‚„ƒƒ‚‚‚€€€€€€€€‚‚‚‚€€‚ƒƒƒ„ƒ‚‚‚ƒ‚‚‚ƒƒ‚‚‚‚ƒƒƒƒ}}~‚……ƒ€€€€€€€€€€€€€€€€|€~{|†Š…€|zz{}}}|}||||zxx}†ˆˆ‡†……†‡ˆˆˆˆ‡††……††……„ƒ‚‚†‡ˆ…€€~~~€€€€€€€€€€‚…†‡†‡‡†…………„…„„„„„„„„„ƒƒƒ„„„„„„„ƒƒ„„……†„‚€€„†ˆ‡†††…††‰‹ŽŽŒˆ„‚‚ƒƒƒƒ„„„„……†††††††††…„ƒ‚‚‚‚‚ƒƒƒ‚‚‚‚‚‚‚‚‚‚‚€€€~~}}}}~ƒ†‡†‡ˆ†„‚ƒ„†††………„„ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ„„„„„„„„…†‡ˆ‰‰‰‰ˆ‡…€}}‚€€€€€€€‚€€€€‚‚€€€€€€€€€€€‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚€€‚…ˆˆ†ƒ€€€€€€€€€€€€€€€€€~}|{zyxxuvxz{zyxyz{{zywuvuuuvx{|{}€€~€}}}~€€||}~€€}|||}‚€‚„…†‡‚‚‚‚‚~~}|||||}}|}}~€€€~~~~€€€~~~}}~~‚€~|~~~~}}{zyyzzywz}€‚‚‚‚ƒ‚‚‚‚‚‚‚€€€€€€€€€€‚ƒƒ‚‚‚€€€€€~~€€€€~€€€}}}}|||}}}}~€€€€~~}|}||||{{{z{|}~€€‚‚€€‚~€‚‚€€€‚‚€‚„‡†„„„ƒƒ‚‚„„„„„„„„ƒ‚‚€€‚‚‚‚€€‚ƒ‚ƒ„ƒ‚‚ƒ‚€€€€€‚ƒ„……„‡‰‰†ƒ‚ƒ€€€€€€€€€€€€€€€€|~€}z{‡‘ˆƒ}}}}|{zyxyww{……„‡†„ƒƒ„†‡††……„„ƒƒƒƒ‚€€€†‡‡…~~€€~}}~€€€€€€‚„††††‡††………………„„„„„„„„ƒƒƒƒ„„„„„„ƒƒƒ„……‡…‚€€„†ˆ‡††…†††‰‹ŽŒŒŒ‹ˆ„‚‚ƒƒ„„………†……………………††„ƒ‚‚‚‚‚ƒ„ƒƒ‚ƒ€€€€~~}}}}||zz{|‚„††‡ˆ†„‚ƒ„†††………„„ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ„„„„„„„„…†‡ˆ‰‰‰‰‡†ƒ}}€ƒ‚€€€€€€€€‚€€€€‚…„‚€€€€€€€€€€€€€€€€~€€‚‚‚‚€€€ƒ†…€€€€€€€€€€€€€€€€€~ysrw|tvy{}|{zzzyyxxwwttuvwxxyz{|}}}}}}}|||}~~xyz{}€€|}}{z|€ƒ€€€~~~~~}||}~~~~~~~€~€~~€€€€€~€~}€~|}~}ywvvvy|€‚‚‚‚€€€‚ƒƒ€€€€€€€~€€€€€€€€€~~~€€‚€~}}}||~}||}}~~€€€€€€€~~~~~}}}}~}|{zz{{|}‚ƒƒƒ€€~~€€ƒ€€~|‚‚‚‚‚‚‚‚„„„„„„„„ƒƒƒƒƒƒƒƒ‚‚ƒ„…ƒ„ƒ‚€€ƒ„……„ƒ‚ƒ„€€€|}~‚ƒ„ƒ†‡„€€€€€€€€€€€€€€€€€}|yw{€’•‹~{{|€~}}|{{vx{‚„†‡†††……„„„ƒƒ„………„„…†††…„‚‚„ƒ‚ƒ…„‚€‚‚‚‚€€‚„„‚€€€‚…†…ƒ…„…„…„…„††……„„ƒƒ„„„……„„„ƒ„„„„„„…‡†„~~‚…‰‡……‡ˆ‡†ˆ‹ŽŒ‡†„‚€‚………††‡ˆ‰‰‡‡‡††………‚‚€€~~~~~~~~}}}}}}}}|||{{{zz|zxy~ƒ‡ˆˆ‡…„„„…………„„„…††„ƒ„ƒ„ƒ„ƒƒƒ„„„„ƒƒ„………………†‡‡ˆ‰ŠŠ‰‰ˆ„€€}~~€‚€‚‚‚‚‚‚‚‚‚‚‚‚€€€€€€€€€‚ƒƒ€‚„€~~~€€€‚‚‚€€€€€€€€€€€€€€€€~~|wssvytuxz{{zzzzyyxxwwtuuvwxyyxyz||}||~}}|||||{|||}}~~|}}{z{‚€€~~}}~~}}}}}~~~~~~~€~~€€€€€~€~}€€~}}~|yvvvvx|€€€€€€€€‚€€€€€€€€€€€€€€€€€€€€€€‚€~}}}||~}||}}~~€€€€€€€€~~~~}}}}}}|{z{{{|}‚ƒ‚‚€€€~‚€€€€€€€€‚‚‚‚‚‚‚‚€€€‚ƒ„ƒƒƒ‚€€‚ƒ„…„ƒ‚‚„‚‚‚‚‚ƒƒƒ„„„„ƒ…†„€|{|€€€€€€€€€€€€€€€€€~|{xvx}Œˆ|z{|€||{{zyyy€‚…†‡ˆˆ………„„ƒƒƒ„„„………„„††……„ƒ‚„ƒ‚ƒ…„‚‚ƒ„„„„ƒ‚‚ƒ…††…ƒ‚€€‚„†…ƒ„…„…„…„…………„„„ƒƒ„„„……„„„ƒ„„„„„„…‡†„~‚…‰‡……‡ˆ‡†‰ŒŽ‘Œˆ‚‚‚ƒƒ€€ƒƒƒƒƒƒƒƒ€€~~~~~~~~~~~~~}}}}}}}}|||{{{zz|zxz~„‡ˆ‡‡…„„„„…†……„„„……ƒ„ƒ„ƒ„ƒ„ƒƒ„„„„ƒƒ„„…………††‡ˆˆ‰ŠŠ‰‰ˆ…€€€~~~€€€~€‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚€‚ƒƒ‚„‚‚€€€‚~‚„„…€€€€€€€€€€€€€€€€~|yvttuvstvxyyyxzyyyxwwwtuuvwxyyyy{{||||}}||{{{z~~~}}||}}}{zz~€€€€€€€€~~~}}}|}}}}}}}}~~~~~~~€~€€€€~€~|}~~~{xvuvux{~~~~~€€€€€€€€€€€€€€€€€€€€€€€€‚€~}}}||~}||}}~~€€€€€€€€€€~~~~}}}}}||{{{{||}€‚‚‚‚€€€~€ƒ„ƒ‚~~~~~~~~€€€€€€€€€€€€‚ƒ‚‚‚€‚ƒ„…„ƒ‚‚ƒƒƒƒ‚‚‚‚ƒƒ‚‚‚}ywyz€€€€€€€€€€€€€€€€}{zwtuy…Š„{z|}}}}}||{{†‡ˆˆ‰ˆ‡‡„„„„„ƒƒƒ……………………††…„ƒ‚„ƒ‚ƒ…„‚‚‚ƒ„„ƒ‚‚ƒ„…††…„ƒ‚€€„……ƒ…„…„…„…„……„„„ƒƒƒ„„„……„„„ƒ„„„„„„…††…‚„ˆ‡††‡ˆˆ‡Š‘‘މƒ€€€~}}~~~}}}}|}}}}||||}}}}~}}}}}}}}}}}|||{{{zz|zyz€„‡ˆ‡†…„ƒ„„…††…„„„„„„ƒ„ƒ„ƒ„ƒƒƒ„„„„ƒƒ„„„……†††‡ˆ‰‰Š‰‰‰ˆ…€€€€€€~~~~}~~~€€€‚‚‚‚‚‚‚‚ƒƒƒƒƒƒƒƒ‚‚‚‚‚‚‚‚ƒ„ƒ‚€‚ƒƒƒ‚‚‚ƒ„€€‚ƒ†‡‰Š€€€€€€€€€€€€€€€€|xwvwutsstuvvvvxxxwwvvvtuuvwxyyz{{|{{zzyzz|||||~~~~~~~~}{yz|€€€€€€€€~~}}|||||}}~~~}}~~~~~~~€€€€~€~{|~~~~~ywuuuuwz~~~~~~€€€€€€€€€€€€€€€€€€€€€€€‚€€~}}}||~}||}}~~€€€€€€€€€€‚~~~~}}}}||{{z{{||}~€€€€‚€ƒ„ƒ‚~~~~~~~~~~~€€€‚ƒ„„„‚‚‚ƒƒƒ‚‚‚‚‚€€€{|{ywx|€€€€€€€€€€€€€€€€}{{yutv€‡„}‚…„„„„„„„ƒ‡‡ˆˆ‡‡…„……………………‡†……„………††„ƒ€€€„ƒ‚ƒ…„‚€€‚‚‚‚‚‚‚‚ƒ€ƒ…„ƒ„…„…„…„…„„„„ƒƒƒƒ„„„……„„„ƒ„„„„„„……†…ƒ€ƒˆ‡††‡ˆˆˆŒŽ‘’’ŽŠ…‚~~}~~~||{{~~}}}}||}}}}}}}}}}}}}}}}}}}}}}}}|||{{{zz{zy|€…‡‡‡†„ƒƒƒ„„‡†…„ƒƒƒƒƒ„ƒ„ƒ„ƒ„ƒ„ƒ„ƒ„ƒƒƒ„„……†††ˆˆ‰Š‰‰ˆˆˆ†‚€€€€€€€€€€~}||}}}}}~€‚‚‚‚‚‚‚‚„„„„„„„„„„„„„„„„‚„…„‚ƒƒ‚‚„„……†‡ˆŠ‹‹€€€€€€€€€€€€€€€€€}zyzyvsrrrrssttvvvuuttssttuvwxxzzzyywvuuvy{~~||}€‚ƒ~zxx{~~~~}}|||||~~}|}}~}~~~~~~~€€€€~€~{|}~~~xvuuvuwz~~€€€€€€€€€€€€€€€€€€€€€€€€€€€‚~}}}||~}||}}~~€€€€€€€€€€‚~~~~}}}}|{{z{{|||}€€€€€„ƒƒƒ€€€€€€€€~~~~~~~~~~}~€€€‚ƒƒ„ƒ‚‚ƒ‚€€€€ƒƒƒƒ„„„„}{|„€€€€€€€€€€€€€€€€€}|}{wuvˆ‡‚…‡‡Š‰‰‰‰‰ŠŠŠ††‡‡ˆ††…††‡‡‡‡‡‡‡†…ƒƒƒ„…‡…ƒ~„ƒ‚ƒ…„‚~€€~„‚€€‚„„„…„…„…„…„„„„„ƒƒƒƒ„„„……„„„ƒ„„„„„„…………ƒ‚‡‡‡‡‡ˆ‰Š‘‘’’‹ƒ€~~~~~~~~~}~}}|||||||}}}}}}}}}}}|}|}}}}}}}}}}|||{{{zz{zz}‚…‡‡†…„ƒ‚ƒƒ„‡†…„ƒƒƒƒ„ƒ„ƒ„ƒ„ƒ„ƒ„ƒ„ƒ„„ƒƒ„……†‡‡ˆˆ‰‰Š‰ˆˆˆ†„€~}€€€€€€€€‚~}||~}|||}€‚‚‚‚‚‚‚‚„„„„„„„„„„„„„„„„ƒ…†„‚‚ƒ€€€€ƒ„‡‡‡†††††€€€€€€€€€€€€€€€€}{{{zvsrqpooprssssrrqqqrrstuuvwwwwwutrrrux|yz|„†‡}{wwy|~~}}||{|~€~|{|||}}~}~~~~}~~~€€€€€~€~|||}~}|xutvvvwz}~€€€€€€€€€€€€€€€€€€€€€€€~€€‚€€~}}}||~}||}}~~€€€€€€€€€~~~~}}}}|{{{{||}|}~€€€€€~~~€…ƒ‚‚€~‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚~}~~€€€€‚ƒ‚ƒ„ƒ‚€€€€€€‚‚‚†‡‡„€‚„€€€€€€€€€€€€€€€€€}|~~zwv‰Š‡ŠŒ‹‰‰‰‰ŠŠ‹‹‡ˆ‰ŠŠŠ‰ˆ‡‡‡ˆˆˆˆˆˆ†„‚‚ƒ„‡†‚}}~~„ƒ‚ƒ…„‚€‚ƒƒ‚€ƒ‚‚ƒ†ƒ€ƒ„„„…„…„…„…„„„„„„„„„„„……„„„ƒ„„„„„„…„…†„€€‚†‡ˆ‡‡ˆ‰‹‘‘’Œƒ€~€~}|~~~~}}}}|}|}||||}}}}}}}}}}}}}}}}}}}}|||{{{zz{z{ƒ‡‡‡†…„‚‚‚ƒƒ†…„ƒƒƒƒƒƒ„ƒ„ƒ„ƒ„„„ƒƒƒƒ„„ƒƒ„„…†‡‡‰‰‰Š‰‰ˆ‡ˆ‡„}}~€€€€‚‚€~}}}|{|}€‚‚‚‚‚‚‚‚ƒƒƒƒƒƒƒƒ„„„„„„„„„††…‚ƒ€€‚ƒ„…„„ƒ‚€€€€€€€€€€€€€€€€€€|||{zxurrpommnpqqppoonnnppqrstuuuuvvvutssuy}€‚yz|‚…‡‰€€~zwvx{~~~~~~~~€~~~}z|€€~|z{{||||}}~~}~~~~€€~€€€€~€~~}|}~~|zwuuvwvxz~~€€€€€€€€€€€€€€€~~~~~€€€€‚€~}}}||~}||}}~~€€€€€€€~~~~}}}}{{{z{|}}}}~€~~~}}}~‚€‚€‚‚‚‚€€€€€€€€~~€‚€‚€ƒ„‚ƒ„ƒ€‚‚‚‚€€~~~}}}}„†…‚€€€€€€€€€€€€€€€€€€~{|{wv~‰Œ‰‹Œˆˆˆ‰ŠŠ‹‹‰Š‹‹‹Š‰ˆ†‡‡‡ˆˆˆˆˆ†ƒ€€‚ƒˆ…‚~||}~„ƒ‚ƒ…„‚€‚‚‚‚€‚~~‚‡„€€ƒ„„…„…„…„…„„„„„„„„„„„„……„„„ƒ„„„„„„…ƒ…†…‚€€†‡ˆˆ‡ˆŠŒ‘’Œ…€}}~~}}}}~~~~~~~~~~~~~~||||}}}}}}}}}}}}}}}}}}}}|||{{{zzzz|„‡‡†…„ƒ‚‚‚‚ƒ…„„ƒƒƒ„„„ƒ„ƒ„ƒ„ƒ„„ƒƒƒƒ„„‚ƒƒ„†‡‡ˆ‰‰ŠŠ‰ˆˆ‡‡‡†}|~€‚‚‚€€€~|{|~€‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒƒƒƒƒƒƒƒ…†‡…ƒ‚ƒ€‚ƒ…†„„„ƒƒƒ‚‚€€€€€€€€€€€€€€€€z{{{yvsqqpnllmopoonnmmlloopqrsstuuvxxxxwtw{€z{}€ƒ…‡ˆ€€~zvvxz~~~~~~~~€€€~~~z|€€|z{{{{||||~~~~}~~~~€€~€€€€~€~}|}~~{ywuuwwwx{~~~~~~~~~€€€€€~€€€€€~~~~~~~~~~€€‚€~}}}||~}||}}~~€€€€€~~~~}}}}{{zz{|}~}}~~~~~}||}~~~}~‚€€€€€€€€€€€€€€€€€€€‚‚‚‚ƒ…‚ƒƒƒ€‚ƒƒƒ‚‚‚ƒƒ‚€~}|uy~€}}~€€€€€€€€€€€€€€€€|zz~{wu}‰ŒŠŠ‹ˆ‰‰Š‹‹ŒŒŠŠ‹‹Š‰‡†…†††‡‡ˆˆ‡…‚€‚ˆ…}{{|}„ƒ‚ƒ…„‚}~€€~}~|{{|~‡„€~€‚„„„…„…„…„…„„„„…………„„„……„„„ƒ„„„„„„…ƒ…†…‚€€†‡‰ˆ‡ˆŠ‘’Œ…€}}~}}|||}}}}}|}}}}}}}}}}}}~~~}}}}}}}}}}}}}}}}|||{{{zzzz|€„‡‡†…„ƒ‚‚‚ƒ„ƒƒƒƒ„„…ƒ„ƒ„ƒ„ƒ„„„ƒƒƒƒ„„‚‚ƒ„†‡‡ˆ‰‰ŠŠ‰ˆ‡‡‡ˆ†‚}{}€‚‚‚‚}{|~ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚†‡‡†ƒƒƒ‚‚ƒ„…‡ˆ…††‡‡ˆ‰‰€€€€€€€€€€€€€€€€|zwwvtpmlmpqqoljkoollnolllmnopqquuttssrrrtw{}~~~yyz|€~}}|wtx}~€€}||}}~~}}|~~}}||}}}}}}}}~~~~~~~~}}}}~‚|||{zxwvvvvuvwxx€€~~~€€€€€€€€€€€~~~~~~€~~~€€‚~}}}}~~‚‚€~}}}~~~~~~€~~€€€€€€€~}|{{zzzzz{}~|}~€€}}~~~~€€~|z}~€‚‚}€€€‚‚‚‚‚€€‚……„ƒ€€€~€€‚ƒ„ƒ„…ƒ‚€‚…ƒ‚‚ƒƒ‚„ƒƒ€~}~~€€€€€€€€€€€€€€€€€|ww{{wvz„ˆ„|€Œ…‹‰ˆŠŒ‹Š‰Œ‹Š‰‰‰‰‰ˆ‡‡††‡‡‡†…„ƒƒƒƒˆ‡…~}~€„‚€‚…†ƒ||||||||yz{{z{}€‚‚‚ƒƒƒ…………„„„„ƒƒƒ„„………††††††††„„………††††††…„‚€„‡‰ˆŠŽŽŒŽŽŽŽ‹ƒ~|~}}~~~}}~}}}}}|||}}}}}~~~~~~~~~~~~}}}}~}}|||{{{xz~‚„……„…ƒ€‚‚€„„ƒƒƒƒ„„„ƒ„ƒ„ƒ„ƒ„ƒ„ƒ„ƒ„ƒ‚‚ƒ…†‡ˆ‰ŠŠ‹Š‰ˆ†…ˆ†ƒ€€€€€€€€~€ƒ„ƒƒ‚‚‚‚ƒƒ‚ƒ„ƒ‚‚ƒ„ƒƒ‚…††…ƒ‚ƒƒ€ƒ………††††‡‡‡‡€€€€€€€€€€€€€€€€zxwwyyvtqrtutrommopmmoomoopqrsttttssrrqqqsvyz{zzxwwy{|zy}}|{wux}~€€}||}}~~~}}~~~}}}|}}}}}}}}}}}}}}}}}}}}~‚|||{zxwvvvvvvwwx~€~~~~€€€€€€€€€€€~~~~~~~~€€€‚~}}}}~~€‚€~}}}~~~~~~~~€€€€€€~}||{z{zzz{}~€|}~€€€}}~~~~€€~|{|}€€‚‚ƒ‚‚€€€€€‚ƒ„ƒ‚€~€€€€€ƒƒƒ„„„‚‚‚‚‚ƒƒ‚€€€€€€€€€€€€€€€€€€€€€}urwzywxƒz}‡‹ˆŒŠˆ‰‹Œ‹ŠŒ‹Š‰ˆˆˆˆŠŠ‰‰ˆˆ‰‰‡†…„ƒƒƒ„‰ˆ‡ƒ€ƒ„‚‚„…‚||||||||y{{{z{}€‚‚‚ƒƒƒ…………„„„„ƒƒƒ„„……………………………„„„……………†††…„‚€ƒ‡‰‰‹ŽŒŽŽŽ‘ŽŠƒ~€€~}~~}}}~~~~~~}}}}}}}}~~~~~~~~~~~~~}}}}~~}}||{{{{x{~‚„……„„‚€€ƒ‚‚„„ƒƒƒƒ„„ƒ„ƒ„ƒ„ƒ„ƒ„ƒ„ƒ„ƒ„‚ƒ„…†ˆˆ‰ŠŠŠŠ‰ˆ†…‡…‚~~€€€€€‚‚‚€‚ƒ‚‚‚‚ƒ‚ƒ„ƒ‚‚ƒ„ƒƒ‚‚‚„††…‚‚ƒƒ€ƒ…………††††‡‡‡€€€€€€€€€€€€€€€€|yxyxuswxyyxvsqnoonnoonppqrstuurrstuvwwrsvwyyxw|{{|~~|z|{{zxux}€€€~~}}}~~~}}}~~~~}}}}}}}}}}}}||||||||}}}}~‚}||zyxwvvvvuvvxx|}~~~~~€€€€€€€€€€€~~~~~~~~€€‚~}}}}~~‚‚€~}}~~~~~~~~~~~€€€€€~~}}|{{{{{z|}€|}~€}}~~~~€€€~}~}}~‚ƒ‚‚ƒ‚‚~€€‚€€‚‚€€€€€€‚ƒƒ„…ƒ‚€‚€€‚€€€€€€€€€€€€€€€€€€vqsyzxw~}zxy~…ŠŒŠ‰Š‹Œ‹‹Š‰ˆ‡‡‡‡‰‰ˆ‡‡‡ˆˆˆ‡†…„„„„‡‡†ƒƒ…„‚‚„„~||||||||z{|{{{~€‚‚ƒƒƒƒ………„„„„ƒƒƒ„„„„……„„…„…„…„ƒƒ„„„„……†††…„‚€ƒ†‰‰‹‹Ž‘‘މ‚~€~~~}}}}~~~~~}}}}}}}}}~~~~~~~~~~~~}}}}~~}}|||{{{y{‚…………‚€‚ƒ„ƒ„„ƒƒƒƒ„„„ƒ„ƒ„ƒ„ƒ„ƒ„ƒ„ƒ„ƒƒƒ„…‡‡ˆ‰‰ŠŠŠ‰‡†…†„}}~€€€€‚ƒƒ„„ƒ‚€€€‚‚‚‚‚ƒƒƒ‚‚‚ƒ„ƒƒ‚‚‚‚ƒ„…†„‚‚ƒ€€ƒ……„……†…††††€€€€€€€€€€€€€€€€|yvuvwut{{|{zwutnnmmnonmnooqqsstqqrrrrssstvwxyyy{zz|~~}{zyy{ywy}€€~~}}}~~~~}}~~~~}}}}~~~~~~~~}}}}}}}}}}}}~‚~}{zxwwwvvuvvwwx|}~~~€€€€~~~~~~~€€€€‚~}}}}~~€‚€~~~~~~~~~~~~€€€€~~~}}||{{{{{{|~€|}~€€€}}~~~€€€€€‚~~€‚ƒ€€~€‚‚‚‚ƒ€‚‚€€ƒ€€€€€€‚ƒƒ„„„‚‚‚€€ƒ€€€‚ƒƒƒ€€€€€€€€€€€€€€€€€€„~yxyzyy~zwwuv~ˆ‹‰‰Œ‹Š‰ˆ‡‡ˆˆ‰ˆ‡‡†‡‡‡ˆ‡†…„„…………„€‚…„ƒ‚ƒƒƒ€~||||||||z{||{|~‚‚ƒƒƒ……„„„„ƒƒ„„„„„„„„„„ƒ„ƒ„ƒ„ƒƒƒƒƒ„„„††††„‚€†‰ŠŒŠŽ’““މ€~~~}}}~}||}}}}}}|||}}}}}}}}}}}}}}}}~}}}}}}~}}||{{{{y{ƒ…††…~}„…„„„ƒƒƒƒ„„ƒ„ƒ„ƒ„ƒ„ƒ„ƒ„ƒ„ƒ„„„…†‡ˆˆ‰‰‰‰Šˆ‡…„†„~|}~~€€€€‚‚€€‚ƒ‚€‚‚ƒƒƒ‚‚‚ƒ„ƒƒƒ‚ƒƒƒ„……„‚‚‚€‚……„……………†††€€€€€€€€€€€€€€€€nllnswzz{{{zyxvunlkmnnmlnnooqqrsrrqqqpppqrtvwyyzxxx{~~|zxyz{y{~€€~~~~~}}~~~~}}}}}~~~~~~~~~~~~}}}}~‚€~|yxvwwvvvuvvxx|}€€€€€~~~~~~~€€€€‚~}}}}~~‚‚€~~~~~~~~~€€€~~~}}}}||||||{}~€|}~€}}~~~€‚‚‡…‚€€€€€€‚‚ƒƒ„ƒ‚€‚ƒƒ€‚ƒ‚€€€‚‚ƒ„…ƒ‚€‚‚ƒ„ƒ€‚€€ƒƒ„„‚ƒƒƒƒ‚€€€€€€€€€€€€€€€€ˆ‰‡|z|~€zwwtrxƒ‹‰‰ŒŒŒŒŠ‰‰‰‰‰‹ŠŠ‰‰‰‰‰‰ˆ‡†………………„‚€€‚…„„ƒ‚‚}||||||||z{}|||‚‚ƒƒƒƒ„„„ƒ„ƒƒƒ„„„„„„„„ƒƒƒƒƒƒƒƒƒƒƒƒ„„„„†††…„‚€€…‰Š‹Ž’’”“‰~~~}}}~}||}}}}}}|||}}}}}}}}}}}}}}}}}}}}}}}}}|}||{{{y|€ƒ††††}}~„…„„„ƒƒƒƒ„„„ƒ„ƒ„ƒ„ƒ„ƒ„ƒ„ƒ„ƒ……††‡ˆˆˆ‰‰‰‰ˆ†…„†„~|}~~€€€€‚‚~}}}}}}€„…‚€‚‚ƒƒ‚‚ƒƒƒƒ‚ƒƒƒ„ƒ„…ƒ‚€‚‚€‚„„„„„…„…………€€€€€€€€€€€€€€€€mjhjnsuvzzyyxxxxplkmoomloopqrsttsrrrrrqqpqrtuwxyvvwy}~}|yxx||||€~}~~}~~~~}}}}~~~~~~~~~~~~€€€€€€€€}}}}~‚|ywvvwvvuvvwwx}~€€€€€€€€€€€€€€€€~~~€€€‚~}}}}~~€‚€~~~~~€~€€~~}}}}|}|}||||}€|}~€€€}}~~~€€‚„…Šˆ†„‚€€‚ƒƒƒ‚‚‚ƒƒ„ƒƒ€€ƒƒ‚€€‚„ƒ‚€€€‚ƒ„„„‚„„„„‚‚‚‚‚‚ƒ„„ƒ„„……………€€€€€€€€€€€€€€€€ˆ‘Š€‚|yzwtw~ˆŽŠ‰ŒŠŒ‹Š‰‰‰‰ŠŠ‰‰ˆ‰‰‰Š‰ˆ†††††‰ˆ‡„‚‚„†„„„ƒ€}|||||||||{|}}|}‚‚ƒƒƒ„„„„ƒƒƒƒ……„„„„ƒƒƒ„ƒ„ƒ„ƒƒƒƒƒ„„………††††„‚€„ˆ‹‘‘’“”‹ƒ}~~~~~~}}}}~~~~~}}}~~}}}}}}}}}}}}}}|}}}}}}|}}||{{{{z|€„†‡‡†}|~€ƒ„„„„ƒƒƒƒ„„ƒ„ƒ„ƒ„ƒ„ƒ„ƒ„ƒ„ƒ„†††‡‡ˆˆˆˆˆˆ‰‡†„ƒ†„}}~€€€‚‚‚‚‚€}|{{zzz|~ƒ…‚‚‚‚‚ƒ‚‚ƒƒ‚‚‚‚ƒƒ„ƒ„…„€€€~„„ƒƒ„„„„………€€€€€€€€€€€€€€€€sojikmooyyxxyzz{rmkorpnnppqrstuuutsrponmrrstuvwxsssuxyxvywx|~}~€€}}}~~~~~|}}}~~~~~~~~~~~}}}}~‚‚|xvvvwvvvuvwxx}~€€€€€€€€€€€€€~~~€€‚~}}}}~~‚‚€~~~~~€€€€~~}}}}}}}}}|||}‚|}~€€}}~~~€ƒ…‡‰‰ˆ‡†ƒ€€€‚ƒƒƒƒ‚ƒƒƒƒ‚‚‚‚ƒƒ‚€ƒ„„ƒ‚€€€€ƒ„…ƒ‚€‚„ƒƒƒƒƒƒ‚‚‚‚‚ƒƒƒƒ‚ƒ„„…„„„€€€€€€€€€€€€€€€€…‘Œˆ‡…‚}{||{z{…Œ‹‰ŒŒˆŒ‹Š‰ˆˆˆ‰‰‰ˆ‡‡‡ˆˆŠ‰ˆ‡†††‡ŠŠˆ…‚ƒ………„ƒ~}|||||||||{|}}|}‚‚‚ƒƒƒƒ„„„ƒƒƒƒ‚………„„ƒƒƒ„„„„„„„„„„„„…………†††…„‚€~ƒ‰‹Ž‘‘’‘’“‘„|}}~~}~~}}}~~~~~~}}}~~~}}}}}}}}}}}}}||}~~}||}}|||{{{z}€„†‡‡†~}}€‚ƒ‚„„ƒƒƒƒ„„„ƒ„ƒ„ƒ„ƒ„ƒ„ƒ„ƒ„ƒ‡‡‡‡ˆˆˆˆˆˆˆˆ‡…„ƒ‡…‚~~€€€‚‚‚‚‚}}|yyzz|~‚ƒ‚‚‚‚ƒ‚ƒ‚‚‚‚‚ƒƒƒ„…ƒ€~ƒ„ƒƒƒ„„„„„„€€€€€€€€€€€€€€€€rnihknpqyxxyz{}~uomqtrppppqrsttuuuttsssrvvuvvwwxyxxy{{ywywx}‚€}}}€~~~~||}}~~~~~~~~~~}}}}~‚‚€|xvuvwvvvvvwxx|~~~~~€€€€€€€€€€€€€€€~~~€€€‚~}}}}~~€‚€~~~~€€€€~~|||}}}}}}}|}}‚|}~€€}}~~~€€€„†ˆ‡ˆ‰Š‰†ƒ‚~€‚‚‚‚‚‚‚‚‚€ƒƒ‚ƒ„ƒ€ƒ…„ƒ‚€€€ƒ„„ƒ‚€‚ƒ‚‚„…„‚ƒƒƒƒƒƒ‚‚€‚‚‚‚‚€€€€€€€€€€€€€€€€‰ŽŒŒ‰‚€}|}€€~{ƒ‹ŒŠŒ‹†‹Š‰ˆ‡‡‡‡‹‹Š‰‰‰‰ŠŠŠˆ‡‡†‡‡Š‰‡ƒ€€‚„……ƒ€~||||||||||{|}}|}‚‚‚‚ƒƒƒ„„ƒƒƒƒ‚‚………„„ƒƒƒ„„„„„„„„„„………††††††…„‚€}ƒ‰Œ‘‘‘‘“’Ž„~z{|}~}}~~~}}~}}}}}|||~~~}}}}}}}}}}}}}||}~~}||}}||{{{{z}„‡‡‡‡€~}~€‚‚„„ƒƒƒƒ„„ƒ„ƒ„ƒ„ƒ„ƒ„ƒ„ƒ„ƒ„‡‡‡‡ˆˆˆˆˆˆˆˆ‡…„ƒˆ†ƒ€€€‚‚‚€€€€zzzz{|~ƒƒ‚‚‚‚ƒƒ‚‚‚‚‚ƒƒƒ„„ƒ€€~ƒƒƒƒƒƒ„„„„„€€€€€€€€€€€€€€€€wrljmrvx}}}|{zzzutsrrstuqqrsuuvwxwuttuvwvvwxyz{{{{{||}}}xyz|€‚ƒ~~~~~€~~~}~~}}}~~~~~~~~~~~}}}}}}}}}}}}}}}}}}}}||{|}~€€}xuux{{wuvxxxy~~~~~€€€~€€€€€€€€€}~~}~~€€€€€€ƒ‚€~}||||}~€€~~}}}~€€€~€€€€~~~}|||||||}}€€~€€~~~~€€€€€ƒ„†ˆ‰‰ˆˆƒ€‚‚ƒƒƒƒ„ƒ‚‚‚€€‚ƒ‚€‚€€‚‚ƒ„ƒ‚€€€‚ƒƒ‚ƒ„„…„ƒ‚‚€‚ƒ‚‚‚ƒ€€€€€€€€€€€€€€€€‰‹‹‡‚{zzz|}|{ƒˆŠ‡†‰‹‹‹‹‹Š‰ˆˆˆˆˆˆ‡‡†††‡‡‡††………††……„„„ƒ…„‚€~|zy||||||||||||~‚€‚ƒ„ƒƒ„„„„„„„„„„„ƒ„ƒ„ƒ„ƒ‚‚‚ƒƒ„„„„………†††ˆ‡†…†„~ƒ‰‘‘‘…|||}~~}~}~}~}}}}}}}}}||}}}~~~}}}}}}}}||||||||{{{zyyyxw|‚†‡‡‡ˆ…‚€€‚€„„ƒ‚‚ƒ„„ƒƒƒƒƒƒƒƒ„ƒƒƒƒƒ„…„…‡ˆ‰ˆ‡‡ˆˆ‡††…„„‡†ƒ||‚‚€€}~€‚€~~}|{zyxƒ„ƒ‚‚‚‚ƒ‚‚‚‚ƒƒƒ„…ƒ€€€€‚‚‚‚‚‚€€€€ƒƒ„…………„„„€€€€€€€€€€€€€€€€~yutw{}~}||{{zzyxxxxwwvvwwxyyzz{yxwvvvxyzzzz{{{{yzzz{{{|yyz|}€€~~~~~~~~}~~}~~~€€€~~}}}}~~~~~~~~}}}}}}}}}||}}€€}yuux{{wuvwwwx}~~~€€€~€€€€€€€€€~~€€‚~|||||}~€€€~~~~~~~~~~€€~~~~}|||||||}~~€€~€~~~~€€€€ƒƒ‚‚ƒ…†ˆ‡„€€€€‚ƒ‚€€‚ƒ‚ƒƒ‚‚‚‚€‚ƒ€‚€€‚‚ƒ„„‚€ƒƒ‚‚ƒƒƒ‚‚ƒ„…„„ƒƒ‚‚ƒ‚‚€€€€€€€€€€€€€€€€ƒƒƒƒƒ€|x|{zzzzyy€„‡„„‡‰‰††††…………‡‡‡††………††………„„„†………„„ƒƒ„„‚€~|{z|||||||||||}}‚€ƒƒƒƒƒ„„„„„„„„„ƒ„ƒ„ƒ„ƒ„„„„„„„ƒƒƒƒ„„„………ˆ‡…………~‚‡ŒŒ‰‰‘‘“’†|||}~}}~}~}~}~}}}}}}}}}}}|||||}~}~}~}~}}}}}}}}||{{zzyyx}‚†‡‡‡ˆ…ƒ€€‚€„ƒƒ‚‚ƒƒ„ƒ„ƒ„ƒ„ƒ„„„ƒƒƒ„„……†‡ˆ‰ˆˆ‡ˆˆ‡‡……„„††„€}|‚€€€€€~~}|||ƒƒƒ‚ƒ‚‚ƒ‚‚‚‚ƒƒ„…„€€€€‚‚‚‚‚€€€€€€‚‚ƒƒƒ„……………€€€€€€€€€€€€€€€€~{xx{}~}~}}}|||{}~}{zyyyyyyyyyyxxxxyz|{{{{zzzyyyzz{{{||||}}~~~~~~€~~~~}€~~~~~€€€€~~}}}~~~~~~~~~}}}~€}yvvx{{xvvwvvx}~€€€€€€€€€€€€€€€~~~€€~~~}€€€‚}|||||}€€~~~~}}~~~~€~~~~}}||{||||}}€€€~~€€~~~~~€€€€€€€ƒ„‡„‚€ƒƒ‚€ƒƒƒƒ‚‚‚‚€€‚‚‚€ƒ‚€€‚ƒƒ„…„ƒ‚„„ƒƒƒƒ‚‚ƒ„………„„„ƒ€€€€€€€€€€€€€€€€€€€ƒ€}}~{w}|{{{z€ƒ…………††††‡‡†††………„„……„„„ƒƒƒ……„„ƒƒƒ‚ƒƒ‚€~|{{||||||||||||~‚‚ƒ‚‚ƒƒ„„„ƒ„ƒ„„„ƒ„ƒ„ƒ„ƒ†††…„„ƒƒ‚‚ƒƒƒ„„„ˆ†……†„‚~€…‹Žˆ„‡’’“’’†||}~~|~}~}~}~}}}}}}}}}~~~}}||}}}}}}}}~~~~~~~~|||||{{{z~ƒ‡ˆ‡‡‡…ƒ€‚‚‚„ƒƒƒƒƒƒ„„„„„„„„„„ƒƒƒ„„………†‡ˆ‰ˆˆ‡ˆˆˆ††„„„††„~}‚€€€€€€€‚‚ƒƒ‚€€€|~‚‚‚‚‚€‚‚‚‚‚‚ƒƒƒ„…ƒ€€€€€‚‚€€ƒƒ‚‚ƒ„…†††€€€€€€€€€€€€€€€€}{yz|}|z~~~~~~}}ƒ…„‚~|xxxxwwwwyyyyyzz{zzzzzzzz{{{||}}~€€€€~~~~~~~}}‚€~~~~€€€€~~}}~~~~~~~~~~~€‚€~zwwx{{xvvvuvx}~€€€€€€€€€€€€€€€€€€~}}~~~~~€€€~}|||||}~€€€€~}}~€€€}}~~€€~~~~}}||{||||||~~€€€€~}~€}}~}~~~€€€}~€€‚‚‚ƒƒƒ‚‚‚‚‚‚‚ƒƒ‚‚‚‚‚‚€‚ƒ€ƒ‚‚ƒƒ„…„ƒ‚‚‚„„ƒƒ‚‚€‚„…†……„„ƒ€‚€€€€€€€€€€€€€€€€}xx{}zw|}~}{{{|x}}}ƒ‚……††‡ˆˆˆ†††………„„„„„„ƒƒ‚‚ƒƒƒ‚‚€~}|{|||||||||||}}€‚€‚‚‚‚‚ƒƒ„ƒ„ƒ„ƒƒƒ„ƒ„ƒ„ƒ„……„„„„ƒƒƒƒƒƒ„„„…‡†……†…‚€€€ƒŒ‘އГ“‘‘އ||}~~{}~}~}~}~}}}}}}}}~~~~~}}}|}|}|}||~~~~~~~~}}|}|}||{€„ˆˆ‡‡‡…ƒ‚ƒ‚ƒƒƒƒƒƒƒƒ„„„„„„„„„ƒƒƒƒ……††‡ˆˆ‰ˆˆˆˆˆ‡‡……„„††…‚~€€€~€€~~~‚ƒƒƒ‚‚‚‚‚€‚€€€€€‚‚‚‚‚ƒ‚ƒƒ„…„€€€€€‚€€€€€€‚‚ƒ‚ƒ„…†††€€€€€€€€€€€€€€€€|{{}~}{zzzzzzzzz||zzyzyyxxxyyz{{|||{{|}}~€€‚‚†……ƒƒ€~~€~~~}‚‚~~~~~~€~~~~~~~~~~~~€€€|xwyzzwvvvtvx}~€€€€€€€€€€€€€€€€~~~~~~~~€}|}~~~~€€€€~||{|||}€€~}~€€~~~€€€€~~~~~}||{|{||||}}€€~}}~}}}~}~~€€€€€‚ƒ‚€‚ƒƒƒ‚ƒƒ‚‚ƒ‚‚‚‚‚‚ƒƒ‚€€‚‚‚€‚‚‚‚‚ƒ…„ƒ‚‚ƒƒƒƒ‚€€€€‚„……†…ƒƒ‚€ƒ„€€€€€€€€€€€€€€€€|xuuxyxvxz|{yxz}}‚„„†…‚‚ƒƒ„……††………„„„„ƒƒƒƒ‚‚‚€€~~~}}||{||||||||||||~‚€‚‚‚‚‚ƒƒƒƒƒƒƒƒƒ„ƒ„ƒ„ƒ„ƒ‚‚ƒƒƒƒ„„„„„………††‡………†…ƒ€ƒ€ƒŒ’އ„“‘ކ|}}~~{~}~}~}~}}}}}}}}}|||}}}}~}}}}}}}}~~~~~~~~}}}}}}}}}†ˆ‰‡‡‡†„‚ƒƒƒ‚ƒƒƒƒƒƒ‚„ƒ„ƒ„ƒ„„ƒƒƒƒ„…†‡ˆˆˆˆ‰‰ˆˆˆˆˆ††„„„†††ƒ€€€€€~~~}|}~€€‚‚€‚€€€‚‚‚‚‚‚ƒƒƒ„…ƒ€€€€€€€‚‚€€ƒƒƒƒ„„…„„„€€€€€€€€€€€€€€€€|xutvxwvsssttuuutuwzzzyxzzzzzzzz{|}€€€‚„……†ƒƒƒ„„………ˆˆ‡†…„ƒƒ€€~~~}}€}~~~~€€~~~~~~~~~~~~~€€€}yxyzxvvvutvy}~€€~€€€€€€€€€€€~~~~~~~~~~~~~~€€€€€~}|{||||}~€€€€€€€€~€€€€~~~~}}||{{{||||||~~€€€}|}~~|}}}~}~~~€€€€„ƒ‚‚ƒ„„„ƒ€ƒ‚„„‚€‚‚‚ƒƒ‚€‚ƒ€‚ƒ„„ƒ‚‚ƒ‚‚‚€€€‚ƒ„……„„‚ƒƒ‚‚‚„…€€€€€€€€€€€€€€€€}}~~~~~ƒ…ƒ~}‚…‰Š‡…‡‰‡ƒƒƒƒ„„„„ƒƒƒ‚‚€€€~~~}}}|||{{{{{{zz|||||||||||}}€‚‚ƒ‚‚ƒƒƒƒƒƒƒƒƒƒƒ„ƒ„ƒ„ƒ„‚ƒƒ„„„…………††††…„…††ƒƒ‚‹Œˆˆ‘Žƒ~}~}}~}}~}~}~}~}}}}}}}}~~~€€~~~~~~~~|||||||||||}}}}~ƒ‡Š‰ˆ‡‡†„‚‚‚„ƒ‚‚‚ƒƒƒƒ‚‚ƒƒƒƒƒƒƒƒƒƒƒ„„††‡ˆˆ‰‰‰‰‰‰ˆˆ‡‡……„„…†‡…€€€€€~~~~}~~€~~€€€€ƒ‚‚‚‚ƒ‚‚‚ƒ‚ƒƒ„…„€€€€€€‚€€€‚‚ƒ„„„„„„ƒƒ€€€€€€€€€€€€€€€€yuomoqssqrrssttustuwy{|}||}}~~€‚„……„„…†††‡ˆˆˆ„„……††‡‡‡‡‡†…„„ƒ€€€€~~~}€€€~~~€€€€~~~~~~~~~~~}}}~€€€}zxyzvuuvutw{}~~~~~~€€€€€€€€€€€€€€~}}{{{|||}€€€€€€€€€~~€~~~~~}}}||{{{{||||}}€€}||~~|||}}~~~~€‚‚‚„ƒ‚‚ƒ„ƒƒƒƒ‚‚ƒ„‚‚‚ƒƒ‚€€‚ƒ‚€€€‚ƒƒ‚‚‚‚‚‚‚€‚‚ƒ„„…„ƒƒ‚ƒ„„„„…†€€€€€€€€€€€€€€€€€…‹Œˆ†‡Š‰ŒŽ‰‚~ƒ‡‹‹‡„…†„ƒƒƒ‚‚‚‚~~~}}}||{{{zzz{{{zzyyyyxyyyyyy||||||||||||~‚€ƒƒƒƒƒ„ƒƒƒƒƒƒƒƒ„ƒ„ƒ„ƒ„ƒƒƒƒƒƒƒ„„„„„„…………†„„…††„}€‰ŒˆˆŒ‘‘‘’’Š~~}}~~}~}~}~}}}}}}}}}}}}}}}}}{{{{{{{{{{||}}}}„‰ŠŠˆ‡†‡„‚‚ƒ„ƒ‚‚‚ƒƒƒƒ‚‚ƒƒƒ‚ƒ‚ƒƒƒƒƒ„…†‡ˆ‰‰‰‰‰‰‰‰ˆˆ‡††„„„…†‡…‚€€€€€€~}~€€€€}}~€‚€‚‚ƒ‚‚‚‚‚‚ƒƒ‚‚‚‚ƒƒƒ„…ƒ€€€€ƒƒ„„„„„ƒƒ‚€€€€€€€€€€€€€€€€~xqnpsvwtuuvwwxxvwwy|‚ƒ‚‚ƒ„…†‡ˆƒ„†ˆ‰‰ˆ‡ˆˆ‡‡‡‡‡‡„„……†††‡††……„„ƒƒ€€€€~~~}~~€€€€€€€€€€€~}}}}}}}}~}||}}~€€€~{yyzutuvutw|~~~~~~}}~~~~~~~~~~€€‚ƒƒ‚‚€€€€€€~}|{{{|}|}~€€€€€~}~~}~~~~~}}}||{{{{||||}~~€€~}{|~}|||}}}~~~‚‚‚ƒƒ‚ƒ„„ƒ~€‚‚‚ƒƒƒƒƒ‚‚ƒ„‚€€‚ƒ€€€€€€ƒƒ‚‚‚‚ƒƒ‚‚ƒƒ„„…„ƒ‚‚‚ƒ………„„…€€€€€€€€€€€€€€€€}†ŽŠ†‡‹ˆŒŒ†|vvz„ˆˆƒ€€~~}}||{{{{zzzyyxxxwwwvvzzyyxxwwwwwxxxxy||||||||||||~‚€‚ƒ„ƒƒ„„ƒƒƒƒƒƒƒƒƒ„ƒ„ƒ„ƒ„†………„„ƒƒ‚ƒƒƒ„„„„…„„…††„‚~{~†ˆ…‡Ž““’’“’‹„€}~}|€}~}~}~}~}}}}}}}}||{{zzzzzzzzzzzzzzzzzzzzz{{||}}}…‰‹Šˆ††‡…‚‚ƒ„ƒ‚‚ƒƒƒƒ‚‚‚‚‚‚‚‚‚ƒƒƒ„…†‡ˆŠ‰‰‰‰‰‰‰ˆˆ‡‡……„„…†‡†ƒ€€€€€€~}€‚ƒƒƒ}}~€‚‚ƒƒƒ‚€€‚ƒƒ‚‚‚ƒƒ„‚‚‚‚ƒƒƒ„…ƒ€€€€€€€‚ƒƒ„„„„„ƒƒ€€€€€€€€€€€€€€€€}{yy{||{€{wuwzwy{|~€ƒ……„ƒ…ˆ‰‡„‡‡‡‡‡‡‡‡††††††††ƒƒƒƒƒƒƒƒ……††…ƒ‚‚}}~€€~~~~~€€€€€€€~~}~}}~~}||||}}~~~~~€~}€~{yyzxwvuuwz}~€€€€€~~€€€€€‚ƒƒ‚‚‚‚„‚€€€}‚ƒ}€~~€}|{{|||{}}~~€€€€€€€~~~~~€~~~}||{{{{{{{{{{{{|}~€€~||~~|||}~~‚‚ƒƒ€~€‚ƒ„ƒƒ‚ƒƒƒƒƒƒƒƒƒ‚‚‚‚‚‚ƒƒƒ‚‚‚ƒ„„ƒ‚€€‚‚€€€‚ƒƒƒ‚ƒ‚€‚‚‚ƒƒƒ„„………†…„„„…‡ˆ€€€€€€€€€€€€€€€€~~€‚€}„€~{ywvvyy{~zv{zyxxy{|yyyyyyyyyyyyyyyy{{{zzzyyyyyxwvvv{||}}||{{|zy|‚‚€‚ƒƒƒƒ„„„ƒƒ‚‚‚‚ƒƒƒƒƒƒ„ƒƒƒƒƒƒƒƒ„„„„…………††………„„„€„„„‰‘’‘‰€~~~~~~~~~~}zzzyzz{{yyyyzyxwxyyzzzyyyyzzz{{{z{|}}}||€…‰‰‰Šˆ…„‚ƒƒƒƒ„ƒƒƒƒ‚‚‚„„„ƒƒƒƒ‚ƒ„……‡‡ˆ‰‰‰‰‰‰‰‰‰Š‰ˆ†…………ƒ„††…ƒ€~€€€€€€€€ƒƒ‚‚€‚‚‚‚‚‚‚‚‚ƒ„ƒ€‚€€€€‚€‚‚€~€‚ƒ„…„„„„„„„„€€€€€€€€€€€€€€€€|{{}€€}€€}yvwxxz{||~€‚…„„………ƒƒƒƒƒƒƒƒƒ„„„„„„„„‡‡‡‡‡‡‡‡‹‹Š‰‡…ƒ€~~~€~~~~€€€€€€€~~}}~~}~}}}}}~~~}~€~~€€|z{|yxvuux|€€€€€€€€€‚ƒƒ‚‚„‚€€€€€€€€€~~€}|z{|}||}}}~€€€€€€€€€€€~~~}||{{{{{{{{{{}}~€€€~||~~||}~~€‚‚ƒ‚‚€€€‚ƒƒƒƒƒƒƒƒƒƒƒƒƒ‚‚‚‚‚‚ƒ‚‚‚ƒ„ƒ‚€‚€€€‚ƒ„ƒ‚‚ƒƒ‚‚‚‚‚ƒƒƒ‚ƒƒ„…†‡‡……†‡‡‡‡‡€€€€€€€€€€€€€€€€{{}}z|~|ywvutwwx{}~}||{zyxyz{||||||||zzzzzzzzxwwwvvuuuuuvvwww{||}|||{{|{z}‚ƒ€€‚ƒƒƒƒ„„ƒƒƒƒ‚‚‚‚‚ƒƒ„„„ƒƒƒƒƒƒƒƒƒƒƒƒ„„„„††……„„„„‚„„„‡‘’ˆ}||||{{{€€€€~}zyyyyzz{yxxyyzyxyyyzzzzz{{{{{{{|{{|}}}}|‚‡ŠŠ‰‰ˆ‡„ƒ‚„ƒƒƒƒƒƒƒƒ‚‚ƒƒƒƒƒƒƒƒƒ„……‡‡ˆ‰‰‰‰‰‰‰‰‰Š‰‡†…………ƒ„††…ƒ€~€€€€€€€€€€€‚ƒ„ƒ€‚€€€€‚€‚‚€€‚‚ƒ€€€€€€€€€€€€€€€€€€€€€€€€yz{‚‚€}‚ƒ|xvuyz{{{z|}‚„…†…„„„‡‡‡‡‡‡‡‡ˆˆˆˆˆˆˆˆ‰‰‰‰‰‰‰‰‹‹‹Šˆ†„‚€~€~~~~€€€€€€~~}}}~€€~}~~~~~~}}}~~€~}€~|}yxuuvz‚€€‚‚‚‚€€€€€‚€€‚‚ƒƒ‚„‚€€€€€~~€|{zz|}}}||}}~€€€€€€€€~~~}}|{{{{{{{{{{~~€‚‚ƒ€~||~~}}~~€€€‚‚ƒƒƒ€€€‚‚„„ƒƒƒƒƒƒƒƒƒ‚‚‚‚‚‚ƒ‚‚‚‚‚ƒƒ€€‚‚€€€‚ƒ„„‚‚ƒƒ‚‚‚‚‚‚‚ƒƒ‚‚ƒ„†‡‰‰†‡‰Š‹Š‰ˆ€€€€€€€€€€€€€€€€zy{}|y{}|{ywutswwwwxy||{zxxxxyxxxxxxxxwvwvwvwwvvvuutttuuvwwxxy{|||}||{|}|{~ƒ„€‚ƒƒƒƒ„ƒƒƒƒƒƒ‚‚‚ƒƒ„„…„ƒ„ƒ„ƒ„ƒ‚‚‚ƒƒƒƒ„††………„„„‚……ƒ„‡ŠŽ‘‘‡€€€€€€€€€~}|yyyxyyzzyxxxzzzyyyyzz{{{||||||||{|}~~~}}„ˆŒŠˆ‡ˆˆ…ƒ‚ƒƒƒƒ‚‚ƒ‚ƒƒƒƒ‚‚ƒƒ„„„„ƒ„……‡‡ˆ‰‰‰‰‰‰‰‰‰Š‰‡……„……ƒ„††…ƒ€~€€€€€€€€€€€€€€€€‚ƒ„ƒ€‚€€€€‚€‚€€€€€€€€€€€€€€€€€€€€€€€€xwx{~€€~‚ƒ„ƒzurwyzzyyyz~‚…‡†‡‰‹ŠŠŠŠŠŠŠŠ‰‰‰‰‰‰‰‰††††††††„……†…„ƒƒ~€~~€~~~€€€~~}}€€~€€€~~}}}~€~~~€€€€zxuux}„‚‚ƒƒƒ‚‚€€€‚‚‚€‚‚ƒ‚€€€ƒƒ‚‚€€‚€€‚€~~€|{z{|}}}{||}~~~€€€€€~€€~~~}||{{{{{{{{{{}~~€‚‚€~||}~}~~€‚‚‚‚‚€€€‚„…ƒƒƒƒƒƒƒƒƒ‚‚‚‚‚‚ƒ‚‚‚‚‚‚‚ƒƒ‚€‚€€€‚ƒ……ƒ‚ƒƒ‚‚ƒ…‡‰Š‹‰ŠŠŒŒŒ‹Š€€€€€€€€€€€€€€€€|z{~~{|||{zxvtsxyxwuux{zzyxwwvvttttttttvvvvvvvvyyyxxwwwzzzzyyyy{||}|||{}~}{~„…€‚ƒƒƒƒƒƒƒƒƒƒƒƒ‚ƒƒ„……„„„„„„„„‚‚ƒƒƒ„„„††……„„„„……‚ƒ‰Ž’‘‰„€}~~€‚ƒƒ€}}{zyxxxxyyzzyxyz{zzyyzz{{||}}||{{{{||}~~~~…‰Œ‹†…†ˆ†„‚‚ƒ„ƒƒ‚‚‚ƒƒƒƒ„ƒƒƒƒƒ„„„ƒ„……‡‡ˆ‰‰‰‰‰‰‰‰‰‰ˆ†…„„„„ƒ„††…ƒ€~€€€€€€€€€€€€€€‚‚ƒ„ƒ€‚€€€€€€~~€€€€€€€€€€€€€€€€|ywx{‚‚‚ƒ„„|uqtvxyyxyyz~‚„…†ˆ‹„„„„„„„„ƒƒƒƒƒƒƒƒ„„„„„„„„‚ƒƒƒ‚~~€~€~~~€€€~~~~€€€€~€€€~~~~~€~}~€€‚zxuvyƒ…‚‚ƒƒ„ƒ‚‚‚€‚‚‚‚€‚‚‚€~~‚€€€€€€~~€|{zz|}}}{||}~~~€€€€€~€€~~}}|{{{{{{{{{{{||}~€€€~||~~}~~€‚‚‚€€€‚€‚„…ƒƒƒƒƒƒƒƒƒ‚‚‚‚‚‚ƒƒƒ„ƒ„ƒƒƒƒ€€‚‚€€‚‚…†ƒ‚ƒƒƒ‚ƒ…‡‰Š‹Š‰‰ˆ‰‰‹‹€€€€€€€€€€€€€€€€}yy}~||~yzzywusruwxxvuwxzzzzzxxwyyyyyyyy{{{{{{{{{{zzzyyyzzzzyyyy{|||}||{}~}{~„…€‚ƒƒƒƒƒƒƒƒƒƒƒƒ‚‚ƒƒ„„…„„„„„„„„ƒ„„„…………†…†……„„„€€„…‚ДЅ||}~‚~~~~||{xxxxxxyy|{zy{{{{zzzzz{|}|{{{{zzz||}~~~~„‡‹‰†‚„‡‡…ƒ‚ƒ„ƒ‚‚‚‚‚ƒƒ„„„„„ƒƒƒƒƒƒ„……‡‡ˆ‰‰‰‰‰‰‰‰‰‰ˆ†„„ƒ„„ƒ„††…ƒ€~€€€€€‚‚€€€€€‚‚ƒƒ‚ƒ„ƒ€‚€€€€€€‚€~~}~~~~~~~~€€€€€€€€€€€€€€€€‚~zy|€„†‚‚‚‚}vrrtwyxxxyxz}€‚ƒ€€€€‚‚‚‚‚‚‚‚„„„…„…„„………„ƒ€~€€~~~€€€€€~‚€~€~€€€€€}~€~~~€€zwuw{€ƒ„ƒƒƒ„ƒƒ‚‚‚€€€‚‚€€€}||€‚€€‚‚€€€~~€}|z{{|||||}}~€€€€€€€~~~~~}||{{{{{{{{{{{{|}~€€~||~~}}~~€€€€€€ƒƒ„ƒƒƒƒƒƒƒƒƒ‚‚‚‚‚‚ƒ„„„…„„ƒƒƒ‚€‚€€€‚‚…†ƒ‚ƒƒƒƒ‚‚‚‚‚‚‚ƒ…†ˆ‰‰‡‡………†ˆ‰€€€€€€€€€€€€€€€€{wwz|{z{wwxxwtrppsvxxxxx{||}}}{{||{|{|{|z{z{z{zzyyyxxwwwstuvxyzz{||}|||{|}|{~ƒ„€‚ƒƒƒƒ‚ƒƒƒƒƒƒ„‚‚ƒƒƒƒ„„ƒ„ƒ„ƒ„ƒ„„„„………††††……„„„„‚ƒ…ƒ‚ƒ’”ˆƒ€~~}|xxxxxyyz}|z{{}}}{{zzz{||zzzzzzzz{|}~~~}}„†‰Š†ƒƒ†‡†ƒƒƒ„ƒ‚‚ƒ‚ƒƒƒƒƒ„„„„ƒƒ‚‚ƒ„……‡‡ˆ‰‰‰‰‰‰‰‰‰ˆ‡†„ƒƒƒ„ƒ„††…ƒ€~€€‚‚€‚‚‚€€€‚‚‚‚‚‚ƒ„ƒ€‚€€€€€€€€‚‚€€€€€€€€€€€€€€€€€‚|{}€‚ƒ€€€€}xsqtwyyxxxuuwz~€€€‚‚ƒ‚ƒ‚ƒ‚„„„„„„„„„„„„„„„„…………„‚€~~~€€~~~€€€€€~€€€€€€€€€€€~€€€€€€~~€~}€€~}€ywvx}‚‚ƒƒƒƒƒ‚‚€€€€€€€€}|{{}~€‚€€‚‚‚€€~~€~}{{{|{z}}}~€€€€€€€€€€~~~~~~}}|{{{{{{{{{{||}~€€€~||~~||}~~€€~}~~€‚ƒƒƒƒƒƒƒƒƒƒƒƒƒ‚‚‚‚‚‚ƒƒƒ„„„ƒƒ‚ƒ‚€€‚‚€€€‚„†ƒ€‚ƒƒƒƒ‚‚‚‚‚‚‚ƒ„…†‡‡…………††‡‡€€€€€€€€€€€€€€€€|xv{}|{{yz{{zxusrstwyyxwwxz|}||{yyyyyyyywwwwwwwwxxxwwvvvrstuwxyz{|||}||{{|{z}‚ƒ€€‚ƒƒƒƒ‚‚ƒƒƒƒ„„„ƒƒƒƒƒ‚‚ƒƒƒƒƒƒƒƒƒƒƒ„„„……††………„„„ƒ}„„„…’“†‚€€€€€€€€~}|{yxxxxyyz|{z{}€€|{zyyz{{zzzzzzzz{{|}}}}|„…ˆŠ‰…„…ˆ†„ƒ„„ƒ‚ƒƒƒƒƒ‚‚‚ƒƒƒƒƒƒƒƒƒ„……‡‡ˆ‰‰‰‰‰‰‰‰‰ˆ‡…„ƒ‚ƒƒƒ„††…ƒ€~€€‚‚ƒ€€‚‚€€€‚€‚ƒ„ƒ€‚€€€€€€€€€ƒƒƒƒƒƒƒƒ€€€€€€€€€€€€€€€€}{{}~}~~}yuruxyxwwwrrtyƒ„ƒ‚‚‚‚‚‚‚‚ƒƒƒƒƒƒƒƒ€‚ƒƒƒƒ‚€~}}‚€~~~€€€€€~~€€€€€€€~}~€€‚‚}~€~~€€~}}ywvy~€ƒƒƒƒƒ‚€€€€€€€€€€€}{zz{}€€€‚€‚‚€€~~€~|{{{zz}}~~€€€€€€€~€€~~~}||{{{{{{{{{{~~€‚‚€~||~~|||}~~€~}|}~~~€ƒ„ƒ‚‚ƒƒƒƒƒƒƒƒƒ‚‚‚‚‚‚ƒ‚ƒƒ„ƒƒ‚ƒ‚€€‚‚€€€‚€„†ƒ€€‚ƒ‚‚‚ƒƒƒ„„…………†‡‰‰ˆ‡‡€€€€€€€€€€€€€€€€zy}€}~}~€€}zxvuuvxyvtrtvyzzyyyyyyyyyyxxxxxxxxyyxxwwwvwwwwxxxx{||}}||{{|zy|‚‚€‚ƒƒƒƒ‚‚‚ƒƒ„„„„„„ƒƒ‚‚‚ƒƒƒƒƒƒƒƒ‚‚‚ƒƒƒ„„††……„„„„„}€„…†‡’‘‹…ƒ‚‚€€€€€€€~|{yxyyxxyyzz{zz{~€‚ƒ}|zyyyz{yzzzz{{{z{|}}}||„…ˆŒ‹‡……ˆ†„ƒ„„ƒ‚„„ƒƒƒ‚‚‚‚ƒƒƒƒ„„„ƒ„……‡‡ˆ‰‰‰‰‰‰‰‰‰ˆ‡…„ƒ‚ƒƒƒ„††…ƒ€~€€‚ƒƒ~€‚‚ƒ€€€€€‚‚‚‚‚‚‚‚‚ƒ„ƒ€‚€€€€€€€‚‚‚‚€€€€€€€€€€€€€€€€{z{|~}€€€€{||{zyxwutuvy}„‚‚‚ƒ„‚ƒƒƒƒƒ‚ƒƒƒƒƒ‚‚‚ƒƒ„„„ƒ‚‚€„ƒ„……„‚}€€€~~~€€€~~€€}}}}~~€€€€~~~~€‚‚€}{{zvwƒ‚€€€‚ƒƒƒƒ‚€€€€€€€~‚}zyz~€€‚‚€€€~~~}}}|||||z{|}~€€€€€€}~~~}}}}}}}}{{{{{{{{|}~€€€€~{z|~~~~}||~~|~~~~~~~~‚ƒ„…‚ƒƒƒƒ‚‚ƒ„„‚‚ƒƒ‚€‚ƒƒƒ‚‚‚‚‚€€€€€‚„„‚‚ƒ‚ƒ‚‚‚ƒ‚‚ƒ†‰ŠŠˆ††ˆ‰ˆŠ‰…€€€€€€€€€€€€€€€€{ywwy{||{zyxxyyy{zzzzyyyxvtuwyyxwxyyyyxwwwwwwwwwwwwwwwwwwvvvwxyy{}~|{{ywwuttvz~€‚ƒƒƒ‚‚‚‚ƒƒ„„„††…„„ƒ‚‚ƒƒƒ„„„„„‚‚‚‚ƒƒ„…………„„ƒƒƒ‚€~‚…‡‡”’‰‚€€€~~}~~~~}|yyxxwwwxz{{{ƒ……}zzzzyy{{{zzzzzz{||}}||€…‹Œ‰†…Љ‡„ƒƒƒƒƒƒ‚‚‚„„…„ƒ‚‚ƒ††††††††ŠŠŠŠŠŠŠŠˆ‡†„ƒƒƒ„‚…ˆ‡ƒ|{~~ƒƒ~€€€€€€€‚‚‚‚‚‚‚‚ƒƒ‚€‚‚‚‚‚‚ƒ‚€‚‚‚€€~€€€€€€€€€€€€€€€€€€€€€{zyz{}}}€€€€€€€€~~~~|{zyvvvwz}€‚‚ƒ‚‚‚ƒ‚ƒƒƒƒƒ‚ƒƒƒƒƒƒ‚‚ƒƒ„„ƒƒ‚‚€€„„„……„‚}€€€~~~€€~€€‚€~€€€€€~~~~~€‚‚€}||{wx„‚‚‚‚ƒƒƒƒƒ‚‚‚‚‚‚€|zz{~€‚‚€€‚‚€€€~~}}}}||||z{|}~€€€€€€~~~~~}}}}}}}}{{{{{{{{|}~€€€€€~{{|~~~}|}~}|~~~~~~~~‚ƒ„…ƒƒ„„„ƒƒ‚ƒ…„ƒ‚„ƒ‚‚‚ƒƒƒƒ‚‚‚‚‚€€€‚‚‚„…ƒ‚‚‚‚‚‚‚‚‚‚‚‚ƒ†‰ŠŠˆ‹‰‰ˆ‡ˆˆ…€€€€€€€€€€€€€€€€}{xxy{||zyxxwxxxzzzzzzzzyxvwyzzyvwwxxxwvwwwwwwwwwwwwwwwwvvvvwxyy{}~|{{ywwvttvz~€‚ƒƒƒ‚ƒƒƒƒƒƒƒƒ………„„ƒƒƒ‚‚‚‚ƒƒƒƒ‚‚‚‚ƒƒ„……………„„„„ƒ‚…‡‡”‘ˆ‚€€ƒ‚€~~}€€€€~}zyxwwxyyz{{|~ƒƒ‚|{yxyyyx{{{{{{{{z{{}}}||~ƒˆ‹Šˆ…„Љ‡…„ƒ‚ƒƒƒƒƒƒ‚‚‚ƒ„„„ƒ‚ƒƒ††††††††‰‰‰‰‰‰‰‰ˆ‡…„ƒƒƒ„ƒ…‡‡ƒ||~}~€}€€€€€€€€‚‚‚‚‚‚€‚ƒƒ‚€‚€‚€‚‚ƒ‚€€‚‚€€€€~€€€€€€€€€€€€€€€€€€€€€€€€|yxz{}}€€€€€€€€€€€}|{xxxxz|€ƒƒƒ‚€‚‚‚ƒƒƒƒ‚ƒƒƒƒƒƒƒƒƒƒ„„„ƒ‚‚€~„„…††„‚~€€€~~~~€€€€€€‚‚‚‚€€€€€€€€~~~~~}}}}€‚‚€}||{xyƒ‚ƒƒ„ƒ„ƒ‚‚‚‚‚€€€€€|z{}€‚‚‚€‚‚‚€€€~~~~}}||{z{|}~€€€€€€€€€~~~}}}}}}}}||||||||||~€€€€€}{{}~~}~}}}~~~}‚ƒ„…„„„„„„ƒƒ„……ƒƒ„„ƒƒ‚‚‚‚ƒƒ„‚‚‚‚€‚‚ƒ……‚€‚‚‚‚ƒ‚‚‚‚‚ƒ…‰ŠŠˆ‹ŠŠ‰ˆ‹‹ˆ€€€€€€€€€€€€€€€€~|yxzz{{zzyxwwxxyyzz{{||{yxxz{{zwwxxxwwwwwwwwwwwwwwwwwwwwvvvwxyy{}~|{{ywwuttvz~€‚ƒƒƒ‚ƒƒƒƒƒƒƒƒ„„„„„„„„‚‚‚‚ƒ‚‚‚ƒƒ„„……………„„„ƒ‚…†‡Œ‘‡‚€€€€~|{z|zyxxy{|y{{|~~{zyyyzyyzz{{{{||z{||}||||†‰ˆ†„„‰ˆ‡…„„„„ƒƒƒƒƒƒ‚‚‚ƒ„ƒƒƒ„„††††††††ˆˆˆˆˆˆˆˆˆ‡†„„ƒƒ„ƒ…‡†‚}|€€€~|~~~~~~~~€€€€€€€€€€‚‚‚‚€€‚ƒƒ‚€‚€€€€‚ƒ‚€€‚€€€~€€~~€€€€€€€€€€€€€€€€ƒ{yz}€~~}}||}~~~~}|{zzz{|~~‚ƒƒƒ‚‚‚‚ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ„ƒƒ‚‚€€„„…††…‚€~€€€~~~~€€€€€‚‚‚€€€€€~~}}}}||}‚‚€}|||zz~€€€‚ƒƒƒ‚‚€€€€€€€|{}€€‚‚€€€€~~||{{z{|}~€€€€€€€€€€~~}~~}}}}}}}}|||||||||}~€€€€}{|}~||}|~~€€€€€€€€‚ƒ„…„„„„„„ƒƒ„……„ƒ……„„ƒ‚‚‚ƒ„…‚‚‚‚€‚‚ƒƒ……ƒ€€€‚ƒƒƒ‚‚‚‚ƒ†‰‹Šˆ‰‰‹ŒŒŽŽŠ€€€€€€€€€€€€€€€€~|yxxyyy{{zxxxxxxxyz{|}~{zyyyz{{xxxyxyxxwwwwwwwwwwwwwwwvvvvwwxyy{}~|{{ywwvttvz~€‚ƒƒƒ‚„„„ƒƒ‚‚‚‚ƒƒƒ„„„„‚‚‚‚‚ƒƒ‚‚ƒƒ„„………………„…„‚…††ŠŽ‹…‚€‚~€‚ƒ~~}{yxzywvvxz{yz{|}~{{zzz{{{{yzzzz{{{z{{}|}|||€…ˆ‡†……‡†…„ƒ„„„ƒƒƒƒƒƒƒƒ‚ƒ„ƒƒ„…††††††††‡‡‡ˆ‡ˆ‡‡ˆ‡…„ƒƒƒ„„†‡…‚~}}€~}}}}}}}}}€€€€€€€€€€‚€€‚ƒƒ‚€‚€€€‚ƒ‚€€‚€€€€~€~~~~~~}}€€€€€€€€€€€€€€€€„€{xz|~}}{zyxxzz||~}}}|||{||}}ƒ‚‚‚ƒ‚‚‚‚‚ƒƒƒƒƒƒƒ„ƒ„ƒƒƒ„„„ƒ‚‚€~„……††…ƒ€~€€€~~~~~~€€€€€€€€€~€€}}}}}||||‚€~}}|{{}~~~€€‚‚‚‚‚‚€€€€€~~€||~€ƒ‚‚€‚‚‚€€€~}||{z{|}~€€€€€€€~~~~}}}}}}}}||||||||||~€€€€~}|}~{{{}}€‚€€€€€€€€‚ƒ„…ƒƒ„„„ƒƒ‚„……„„……„„ƒ‚‚‚ƒ„…‚‚‚‚€‚‚ƒ……‚€€€‚‚ƒƒ‚‚‚‚ƒ…‰ŠŠˆŠŠ‹Œ‹Œˆ€€€€€€€€€€€€€€€€}zxvwxyx{zywwvvwwxxz{|}~zzzyxyzzxxxxxxxxwwwwwwwwwwwwvvvvwvvvwxyy{}~|{{ywwuttvz~€‚ƒƒƒ‚„„„ƒƒ‚‚‚‚‚‚ƒƒ„„„‚‚ƒƒƒƒ„„ƒƒƒ‚ƒƒ„„„„…„…„……„‚‚„……†ˆ†‚ƒ‚‚†„‚~~€~|{zyxwwxz{yz{{}~}zyyzzzzzzyyyyzzzzz{||}||||€…‡ˆ‡ˆˆ…„„‚‚‚‚ƒƒƒƒƒƒƒƒƒ‚ƒƒƒƒ……††††††††‡‡‡‡‡‡‡‡ˆ‡†„„ƒ„„…†‡…~}~‚‚€~~}}}}}}}}€€€€€€€€€€€€€€€€€‚ƒƒ‚€‚€€€‚ƒ‚€‚‚€€€~€€~~~~~}}}€€€€€€€€€€€€€€€€~yxy|€~~}|{zyyz{|}~~~~}}}}}}}}€‚ƒ‚‚‚ƒ‚‚‚‚‚ƒƒ„ƒƒƒ„ƒ„„„ƒƒƒ„ƒƒ‚‚€€„…†‡‡†ƒ€€€~~~€€€€€€€€€€~~~€}~}}|}|||~‚€~}~}|}}~~~|}~€‚‚‚ƒƒƒ‚‚‚‚‚€€€‚€~}„ƒ‚ƒƒ‚€€€}|{{z{|}~€€€€€€€~~~~}}}}}}}}|||||||||}~€€€€€}}|~}{z|}~~€ƒ€€€€€€€€‚ƒ„…ƒƒ„„ƒƒ‚‚ƒ……„„……„ƒ‚‚‚‚ƒƒ„‚‚‚‚€€€€€‚‚„„‚€€€‚‚ƒƒƒ‚‚ƒ†‰‹Šˆ‰ˆˆˆˆ‹Œ‰€€€€€€€€€€€€€€€€|zwwwyyyzywvuuuuwwxyz{|}z{{zxxy{xxwwwwwxwwwwwwwwwwwwvvvvvvvwwxyy{}~|{{ywwvttvz~€‚ƒƒƒ‚ƒƒƒƒƒƒƒƒ‚‚‚ƒƒƒ„„ƒƒ„„„„……ƒƒƒ‚ƒƒƒ„ƒ„ƒ„„„„„…‚€€‚„……ƒ„ƒƒ‚ƒ…„‚€€€~}|zzyyxxyyyzzz{}|zwxyyyxxyzzyzyzyzz{{}}}||{„‡‡ˆˆ‰†…„ƒ‚‚‚ƒƒƒƒƒƒ‚ƒ„ƒƒ„…††††††††‡‡‡‡‡‡‡‡ˆ‡…„ƒƒƒ„†††„€~~~€€€~}}~~~~~~~~~€€€€€€€€€€€€€€€€‚‚ƒƒ‚€‚€€€€‚ƒ‚€‚‚‚€€€€~€€~~~~~€€€€€€€€€€€€€€€€}zy{}€€€€€€€}}}~~}}}€‚ƒƒƒ‚‚‚ƒ‚‚‚‚‚ƒ„ƒƒƒƒ„„„„ƒƒ„„„ƒ‚‚€~„…†‡‡†ƒ€€€~~€€€€€€€€€€€€€€~~~€€~~~}}}}|{~‚€~~~~~€}}€‚‚€€€€€€€€~€‚‚~€€ƒ‚‚‚€€€€€~|{{z{|}~€€€€~}}}}}}}}}}}}}}}}}}||~€€€€}|}~€}z|}~~€‚€€€€€€€€‚ƒ„…„„„„„„ƒƒƒ„…ƒ„……„‚‚ƒƒƒƒ‚‚‚‚‚€€ƒ„€€‚‚ƒƒ‚‚ƒ…‰ŠŠˆ‰ˆˆˆˆŠ‹ˆ€€€€€€€€€€€€€€€€|zxwy{||{{yxwvvvvwwxyz{{||}{yyz|xwwvwwxxwwwwwwwwwwwwvvuuwvvvwxyy{}~|{{ywwuttvz~€‚ƒƒƒ‚ƒƒƒƒƒƒƒƒ‚‚‚ƒƒƒƒƒƒƒ„„„„……„ƒƒƒ‚ƒƒƒ‚‚ƒƒƒƒ„„…ƒ€€‚„……ƒ‚ƒƒ‚~}|zz{zzxwvzzzyz}}{z|}}|{{{|{{{zzzzz{||}|||z}„…†ˆ‰Šˆ‡…ƒ‚‚‚‚‚‚ƒƒƒƒƒ‚ƒ„ƒƒƒ„…††††††††ˆˆˆ‡ˆ‡ˆˆˆ‡†„ƒƒƒ„†‡†ƒ€}~€~}~€€€€€€€€€€€€€€‚‚‚‚‚ƒƒ‚€‚€‚€‚‚ƒ‚€€‚‚€€€€€~€€€~€€€€€€€€€€€€€€€€}{{}€‚‚‚‚ƒ„„……………„ƒ‚€}}}~~~~}‚ƒ„‚ƒ‚‚‚‚ƒ„ƒƒƒ„„„„„ƒƒ„„ƒƒ‚‚€€„††‡‡†„€€€~~€€‚€€€€€€€~~~~€€~~~~}}}}{~‚€~~~€€€€‚~~~}}}||{{|||}}}}€ƒƒ€€}|{|~€€€‚‚ƒƒ€€€€‚€~|{{z{|}~€€€€€~}|}}}}}}}}}}}}}}}}|}~€€€€}||~€€}z}€€~}€‚ƒ„…………………„„ƒ„„ƒƒ……„€‚ƒƒƒ‚‚‚‚‚~~€€€‚ƒ€‚‚‚ƒ„‚‚ƒ†‰ŠŠˆ‹‹Œ‹ŠŠ‰…€€€€€€€€€€€€€€€€}{yy{}~~~|{zyyywwwxxyyz}~~}zz{}yyxwwxyywwwwwwwwwwwvvvuuvvvvwxyy{}~|{{ywwuttvz~€‚ƒƒƒ‚‚‚‚ƒƒ„„„ƒƒƒƒƒ‚‚‚ƒƒƒƒ„„„„„ƒƒƒ‚ƒƒƒ‚‚‚‚ƒƒƒ„…ƒ€€‚„„„ƒ‚~ƒƒ€‚‚‚‚‚€€‚‚€€‚‚ƒƒ‚€}|zzyxz}~}‚‚€}}||{{zzz{||}}||x{‚ƒ„†ˆŒ‰‡…„ƒƒ‚‚‚ƒƒƒƒƒ‚ƒ„„ƒƒƒ„††††††††ˆˆˆˆˆˆˆˆˆ‡…„ƒƒƒ„†‡†ƒ}~€‚~€€€€€€€€€€€€€ƒƒƒ‚‚€€‚ƒƒ‚€‚‚‚‚‚‚ƒ‚€€‚€€€~€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€~~~}}|}}~€‚‚‚‚ƒ„‚‚‚ƒƒƒ„„„ƒƒƒƒƒ„…„ƒƒƒƒƒƒ‚€~€€€‚†††‡‡†„‚‚€~~~~€€€€€€€€€€~~~~}}~~~~}~~€€€€€€€~~~~~~~xxy|~}zwxyz||}}}~€‚|{{}}}}}}}|||}~€‚‚‚‚‚‚€€€€~~}||}}}~~~€€€€€€€€~}}}||||||||{|||}}}~€€€€€|{~€~}~~~~~~~~~‚€€ƒ„‚€ƒ…†„„………………ƒƒƒ„„„„„ƒƒ‚‚‚‚ƒƒ‚‚€€‚‚€€€‚ƒ„…ƒ‚ƒƒ‚‚‚‚‚‚„†ˆ‰‰‰ŠŒŽŽ‹‰‰Š€€€€€€€€€€€€€€€€~~~~}}}}||}|}||||||||||||||}|{{zzxxxyyxwxxxwwwwwwvvvwwwvvvvvwwxxz|}|}}zvutstvy}€‚ƒƒƒƒ‚‚‚ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ„„ƒ‚…€€‚‚‚„…†‡‡‡†…††…„‚€}{z{~€‚‚…„‚€€€~}}||{z{{||{zz{{|~€ƒ…‡††…„„ƒ‚‚ƒ‚ƒ‚ƒ‚ƒ‚‚‚‚ƒƒ„„„……††‡‡‡‡…‡‰ˆ…„†ˆ††………„„„„††~€€~~}|}}~‚‚€~}€€€€€€€€€‚‚‚€‚„…‚€€‚‚‚€€€~}~~€€€€€€€€€€€€€€€€€€€€€€€€€€€~~~}}}}~~‚ƒ‚‚‚ƒ‚‚‚ƒƒƒƒƒƒƒ‚‚‚ƒ„„„ƒ‚‚ƒƒ‚‚€€€€‚††‡‡‡†„‚‚€~~~~€€€€€€€€€€~~~~~~~~}~€€€€€€~~€€~~~~{zz|}}zxyz{|}}||}~~~{zyz}~~€‚‚‚‚€€€€~~€€€€}}}~~~~~€€€€€~~}||||||||{|||}}}~€€€€€|{~€~}~~~~~~~~~€€‚ƒ‚ƒ…†„„………………ƒƒƒ„„„„„ƒƒ‚‚‚‚ƒƒ‚‚€€‚‚€€€€‚‚„…ƒ‚‚‚‚‚‚‚‚„…ˆ‰ŠŠ‹‹ŠŠ‹ŒŒŠˆ€€€€€€€€€€€€€€€€~~~~}}}}|||||||||||||||||||||{zzyyxxxyxwxxxwwwwwwvvvwwwvvvvvvwxxz||||}zvutstvy}€‚ƒƒƒƒ‚‚‚ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ„„ƒ‚„€€‚‚‚ƒ„…†††…………„ƒ‚€~}}‚………€€€‚ƒ€€€€~~}|{{{}~ƒ„……„„ƒƒ‚‚‚ƒ‚ƒ‚ƒ‚ƒ‚‚‚ƒƒ„„„………††‡‡‡…‡ˆˆ……†ˆ††……„„„„„††~€€€€€€€€€€~}|||}}~‚€~~€€€€€€€€€€€€€€€€€€‚„…‚€€‚‚‚€€€€€~~€~~~~~€€€€€€€€€€€€€€€€€€€€€€€€€€€~~~~}}}}~€‚‚ƒ‚‚‚ƒƒƒƒƒ‚ƒ‚ƒƒƒ‚ƒƒ„„„ƒ‚‚ƒƒ‚€€€‚…††‡‡†„‚‚€~~~€€€€€€€€€~~~}~~~~~~€€€€€€€€€€€~~~~}||}}{z{||}}}||z{{{zz|~€€‚‚ƒƒ„ƒƒ‚€€~~~~}€€€€€€}}~~~~~€€€~~||}|}|}|{{||}}}}€€€€€|{~€~}~~~~~~~~~€‚‚‚ƒ…†„„„……………ƒƒ„„„„„„ƒƒƒ‚‚‚ƒƒ‚‚€€‚‚€€€€€‚ƒ„ƒ‚‚‚‚‚ƒ…‡‰‰ŠŠ‹‰‰‹Ž‹ˆ€€€€€€€€€€€€€€€€~~~}}}|{{{{{{{{||||||||{||||{zzyxxxxxxwxxxwwwwwwvvvwwwvvvvvwwxxz|}|}}zvutttvz}€€‚ƒƒƒƒ‚‚ƒ‚ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ„„ƒ‚„‚‚‚ƒ„…………ƒƒƒƒ‚‚‚‚„…„ƒ€€€€€€€€€€€‚‚‚€}|zzz{|~€ƒƒƒƒƒƒƒƒƒ‚ƒ‚ƒ‚ƒ‚‚‚ƒƒƒƒ„„…………††‡‡…‡ˆ‡†…†ˆ………„„„„„„††~€€€€€€€€€€}}|{{{|}€€~€€€€€€€€€€€€€‚€€€‚„…€€‚‚‚€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€~~~~}}}}~€€‚‚‚‚‚‚‚‚„„ƒƒ‚‚‚‚ƒƒƒ„ƒ„„„„„‚ƒƒ„ƒ‚€€…†‡‡ˆ†„‚€~~€€€€€€€€€€}~~~~~€€€€€€€€€€€€€~~€~}}}||}}~~~}||yz{||‚…€€€€€€€€€€€€€€€€€‚‚~~~€~€€€€~~}}}}}}}}{||}|}}~€€€€€|{~€~}~~~~~~~~~}‚ƒ‚€‚‚„„…ƒ„„…………„„„„„„„„„ƒƒ‚ƒ‚ƒƒƒ‚‚€€‚‚€€€€€ƒ„‚€‚ƒ‚‚€‚„†‡‡‡‡ˆ‰ŠŠ‰‰ˆ€€€€€€€€€€€€€€€€~~}}||z{z{z{z{||||||||{{|||{zyxxxxxxwwxxxwwwwwwvvvwwvvvvvvvwxxz||||}zvuuttvz~€€‚ƒƒƒƒ‚‚‚ƒƒƒƒƒ„„ƒ„ƒƒƒƒ„„„„„„„„ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ……„ƒ€€‚ƒ„……‚‚‚‚‚‚‚‚„ƒ‚ƒƒ~{€€€€€€€€‚‚‚}{zyyyyz|}~‚‚‚ƒ‚ƒƒƒ‚ƒ‚ƒ‚ƒ‚ƒ‚‚‚ƒƒ„„„„…………††‡†‡‡‡†††‡……„…„„ƒƒ„††~€€}}{{z{{|~€€€€€€€€€€€€€€€€€€‚€€€‚‚……‚€€€‚‚€€‚€€€€€€€€ƒƒ‚€€€€€€€€€€€€€€€€€€€€€€€€~~}}}}}}}~€‚‚ƒƒƒ„ƒƒƒƒ‚‚‚„„„„……………„„ƒ„„„ƒ€€€…††‡‡†„‚€~€€€€€€€€€}}~~~~~€€€€€€€€€€€€€€€€‚€}}}~~~~~}|}~}~ƒ…€€€€€€€€€€€€‚€€€€€€~~~€€€€€€€~~~~}}}}}}}}{{||}}}}€€€€€|{~€~}~}~€‚‚€€€‚‚ƒ„„„ƒƒ„………„„„„„„„„„„„ƒƒ‚ƒƒƒ„‚‚€€‚‚€€€€€€ƒ„‚€‚‚ƒ‚€‚„†‡‡‡„†ˆˆ†……†€€€€€€€€€€€€€€€€€~}||{{z{z{z{z||||||||{{{|{zyyxxxxxwwwxxxwwwwwwvvvwwwvvvvvwwxxz|}|}}zvvutuwz~€€‚ƒƒƒƒ‚‚ƒ‚ƒƒƒƒ„„„ƒƒƒƒ‚„„„„„„„„ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ……„~ƒ~€‚ƒ„„‚‚‚‚ƒƒ‚‚‚‚|z{|}~€‚ƒƒƒ„‚‚‚}{zyyyyz{}~‚‚‚‚ƒƒƒƒƒ‚ƒ‚ƒ‚ƒ‚‚‚ƒƒƒƒ„„„„…………††‡†††‡‡‡†…„„„„ƒƒƒ„††~€€~}|{{z{{|}€€€€€€€€€€€€€‚€€€‚‚„…€€€‚€‚€€€€€€€€€€€ƒ‚‚€€€€€€€€€€€€€€€€€€€€€€€€€€€€€~~}}}}}}}}~€‚ƒƒƒƒƒƒƒƒ‚ƒ‚‚ƒ„„…………„…„ƒ„„„ƒƒ€€„†‡‡ˆ†„‚€€~~€~€€€€€€€€~~~|}~~€€€€€€€€€€€€~~~€€€€€€||}~€‚ƒƒ……„ƒ‚€€€€€}~~~~€€€€€~~~~~~~}~}~}~{||||}}~€€€€€|{~€~}~~~€€€€‚ƒ„„„„ƒƒ„„…„„„„„„„„„ƒƒ„„ƒƒƒƒƒ„‚‚€€‚‚€€€€ƒ„ƒ‚‚‚‚‚ƒ„‡ˆŠŠŠ‡ˆ‰‰‰ˆ‡†€€€€€€€€€€€€€€€€€€~}|{{{{{{{{{{||||||||z{{{{zyywxxxwwwwxxxwwwwwwvvvwwwvvvvvvwxxz||||}zvvuuuw{~€‚ƒƒƒƒ‚‚‚ƒƒƒƒƒ„„„„ƒƒ‚‚ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ††„~€‚‚‚‚€€‚ƒ„‚‚‚‚€€‚‚||}~~~~~{|}€‚ƒ„‚‚‚€}|yyyz{}€ƒƒƒƒƒƒƒƒ‚ƒ‚ƒ‚ƒ‚ƒ‚‚‚ƒƒ„„„„„„…………†ˆ†…†‡ˆ‡…„„„„ƒƒƒƒ„††~€€€€€€€€€€~}|{{{{{|}€€€€€€€€€€€€€€‚‚……‚€€€‚€‚€€€€€€€€€€€‚€€€€€€€€€€€€€€€€€€€€€€€€~~~~}}}}}}}~€‚ƒ‚ƒƒƒ‚‚‚ƒƒƒƒƒƒ‚ƒ„„„„„ƒ„ƒƒ‚ƒƒƒ‚€€€€~„††‡‡†„‚€~~€€~~€€€€€€€€~~~~|}~~~~€€€€€€€€‚‚€€€€}‚‚€~~~~€€}{{{}~~€‚„„ƒƒƒ‚‚‚‚‚€€€‚‚€~}|}}}}~~~~€€€~~~~~~~~~~{|||}}}}€€€€€|{~€~}~~~€€‚ƒ…„„ƒƒƒ„„„„„„„„„„„ƒƒƒ„„ƒƒƒƒ„„‚‚€€‚‚€„…ƒ‚‚‚‚‚‚‚‚ƒ†‡‰Š‹‹‰‰Š‹‹‹Š‰€€€€€€€€€€€€€€€€€~}{{z||||||||||||||||zz{{{zyxwxyxwvwwxxxwwwwwwvvvwwwvvvvvwwxxz|}|}}zvvvuuw{~€‚ƒƒƒƒ‚‚‚‚ƒƒƒƒ…„„ƒƒ‚‚‚ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ††„~~€‚‚‚‚€€€€€‚ƒ‚‚€~ƒƒƒ‚€}|z{{{||}}~~}|yyz{}ƒ……„„ƒƒ‚‚ƒ‚ƒ‚ƒ‚ƒ‚‚‚ƒƒƒƒ„„ƒƒ„„…………ˆ†……ˆˆ‡…„„„ƒƒƒƒ‚„††~€€€€€€€€€€€~||{{|z{}€€€€€€€€€€€€€€€€€‚„…‚€€€‚ƒ€€€€€€€€€~~€€~€€€€€€€€€€€€€€€€€€€€€€€€€~~~~}}}}}}}~€‚ƒƒ‚‚‚ƒ‚‚‚‚ƒƒƒƒ„‚‚ƒƒƒ‚‚ƒ‚‚‚‚‚‚€€€„††‡‡†„‚€~~€€~~~€€€€€€}}~~~~|}~~~€€€€€€‚‚‚€€€{~‚ƒ~}~‚‚‚‚|~€~}}}}}}}}||~~€‚ƒ„„…„„„ƒƒƒ‚ƒ‚€~|{z||}}}~~~~~€€€€€€~~~~~~~~{|||}}}~€€€€€|{~€~}~€~}}‚€‚„…„ƒƒƒƒ„„„„„„„„„„„ƒƒƒ„„ƒƒƒƒ„„‚‚€€‚‚€„…ƒ‚ƒƒ‚‚‚‚‚‚„†ˆ‰‰‰†‡ˆŠŠŠŠ‰€€€€€€€€€€€€€€€€€~}|zz|||}|}||||||||||zz{{{zyxwxxxwvwxxxxwwwwwwvvvwwwvvvvvvwxxz|}|}}zvwvuux{€‚ƒƒƒƒ‚‚‚ƒƒƒƒƒ……„„ƒ‚‚‚ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ††„~~€‚‚‚‚€€‚€€‚‚‚‚‚€€}}‚‚‚ƒ„……„ƒ‚‚€~|zxxz{{||{zzyyz|~ƒ…††……„ƒ‚‚‚ƒ‚ƒ‚ƒ‚ƒ‚‚‚ƒƒ„„„ƒƒ„„„………ˆ†„…ˆ‰‡…„„„ƒƒƒ‚‚„††~€€€~}||||yz|~€€€€€€€€€€€€€€€€€€‚‚‚€‚„…‚€€€‚ƒ€€€€€€€€~~}~‚€€€€€€€€€€€€€€€€€€€€€€€€€~~}}}~€€€}{{z{{{}€‚‚‚ƒƒƒ‚‚‚ƒƒ‚ƒƒƒ„ƒƒ‚‚„…†…„ƒƒ„„ƒƒ„„ƒ‚‚€€€€ƒ‰ˆ‡…ƒ€~~~€€€€~~~~~‚€~}}~~~~~~~~~~~~€€€€€‚‚‚‚€}}~~€~~~€€~}|||~~~|||~~}~~€‚‚€€€~|zy{|}~€€€€€}~€€€€~~~~}|}}}}~~~~~~€€€~}}€}~~~€€€ƒ~~ƒ†ƒ‚„ƒƒƒ„„……†…„„„„„„„ƒƒ„…†………ƒ€€€€„…ƒ‚€ƒƒƒƒ‚‚‚‚€ƒ„„„ƒ†„ƒƒ„……„€€€€€€€€€€€€€€€€€€~}}|}}}}}}}}}}{{|{|{|{yyxxxxxxyxxwwwwwxxwwwwwwvwwxxwvuwvuvwwxzz}~}}|zxuttvy}€‚‚‚‚ƒ„„ƒ‚‚‚„„„„„„„„‚‚ƒƒ„„ƒ„ƒ‚‚„ƒƒ„……„ƒƒƒ……„€ƒƒƒ‚‚€€€€€€€€‚ƒ……ƒ€€€€€€‚‚‚ƒƒ„„ƒƒ‚}~~~~}|{zzz{~…‡†††…„„ƒƒƒƒƒƒƒƒƒƒ„ƒƒ‚ƒƒ„…„„„„„„……††††††††„ƒ„ƒ„ƒ„ƒ‡†„€||‚€~~€€~}|{~}||}ƒ€€€€€€~~€€‚€€€‚ƒ€‚ƒ‚€‚‚€‚€€€€€€€‚‚‚‚ƒƒƒƒƒƒƒƒ€€€€€€€€€€€€€€€€€€€~~}~~~~~}|{{{|}~€ƒƒ‚‚‚ƒ‚ƒ‚ƒ‚‚‚ƒƒƒƒƒ‚‚‚„……„ƒƒƒ„„ƒƒ„„ƒ‚‚€€€€ƒˆ‡†„‚€~~~~~~€€~~~~~~~~~~~€€€€€€‚€~~~~~~~~€€€€€€€€€€}~~~}|}}|}|}}}}~~€‚€€€~|zz{|}€€€~€€€€€€~~~~}}}}}}~~~~~€€€€~}}€}~~~€€€~~€ƒ~ƒ†…ƒ„„„„ƒƒƒ„„…„„„„„……ƒ‚‚ƒ„„„„…ƒ€€€€„…ƒ‚€‚ƒ„ƒ‚‚ƒ€‚ƒ„„„„…„„„……„„€€€€€€€€€€€€€€€€€~}|||}|}|}|}|}{{{{{{{{yyxxxxxxxxwwwwwwxxwwvwwwvwwxwwvuwvuwwwxzz}~}}}{xvvuwz~€€‚‚ƒ‚‚ƒ„„„‚‚‚„„„„„„„„‚‚‚ƒƒƒƒƒƒ„ƒ‚‚ƒƒƒ„……„ƒƒƒ……„€ƒƒƒ‚‚€€€€€€€€ƒ……ƒ‚‚ƒƒƒ……„ƒƒƒƒƒ€~}|zzz{~…‡………„ƒƒƒ‚ƒƒƒƒƒƒƒƒƒƒ‚‚‚ƒƒ„„„ƒƒ„„……††…†…†…†ƒ„ƒ„ƒ„ƒ„††„€}}‚€~€€€€~}||||{{|~€€€€€€€€€‚€€€ƒƒ€‚‚‚€‚‚€‚€€€€€€€€‚‚‚ƒƒƒƒƒƒƒƒ€€€€€€€€€€€€€€€€€€€~~~~}}}~}}|||}}€‚ƒƒƒƒ‚ƒƒƒƒ‚‚‚‚ƒƒƒ‚‚‚ƒƒ„ƒ‚‚ƒ„„„ƒƒ„„ƒ‚‚€€€€ƒ††„ƒ€~~~~~~~~€€€€€~~~~€€€€€€€€€€~~~~~~~~~~ƒ‚‚‚€€‚€~~}{~}|{{{}}|}}~€€€€€~|{z||~~€~~}€€€€€~~~}}~}}}}~~€€€€€~}}€}~~~€€~}}~~~‚†…†‡……„ƒƒƒƒƒ„„ƒ„„……†‚‚‚ƒ„„ƒ„ƒ€€€€€„…ƒ‚€‚ƒƒ‚‚„€‚ƒ…„…„…„……‡†…„€€€€€€€€€€€€€€€€€~|||||||||||||{{{{{{{{yyxxxxxxyxxwwwwwxxwwwwwwwwwwwwvvwvvwwwwyz|~}}|{xxwwy|€€€‚‚ƒƒƒƒƒ„„ƒ‚‚‚‚„„„„„„„„„ƒƒƒƒƒƒ‚‚ƒ‚‚‚ƒƒƒ„……„ƒƒƒ……„€ƒƒ‚‚‚‚€€‚„…„ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒƒƒƒ„„………„„„„„„ƒ}|zzz{}„†„„„ƒƒ‚‚‚ƒƒƒƒƒƒƒƒ‚‚‚‚‚ƒƒ„ƒƒƒƒ„„…………„…„……„ƒ„ƒ„ƒ„ƒ†…„€~|€~~}}}|{{{|}€€€€€€€€€‚€€€€ƒ„€‚€‚‚€‚€€€‚€€€€€€€‚‚ƒƒƒƒƒƒƒƒ€€€€€€€€€€€€€€€€€€}}||}}}}}~~€€‚ƒƒƒƒ€‚„ƒƒ‚‚‚ƒ‚‚‚‚ƒƒƒ‚‚ƒ…„„ƒƒ„„ƒ‚‚€€€€ƒ„„ƒ‚€~~~€}}~~€€~~~€€€€€€€€~~~€€€€€€€€‚€€~~}}~~~~~~~~ƒ‚‚€€€}~~~|{~}||{||}{||}~€€€€~}{z|}}€€€€}|~~~~~€}}}}}}~~€€€€€~}}€}~~~€€~}|||~~~€‚…†‡„„ƒƒƒƒƒƒ„„„„„„……ƒ‚‚ƒ„……„„‚€€€€€€€„…ƒ‚€‚‚‚ƒƒƒ‚ƒ……†……„……‡‡‡…„€€€€€€€€€€€€€€€€~}|{{{{{{{{{{{{zzzzzzzzyyxxwxxxxxwwwwwxxxwwvwwxwwwwwwvvwvvwxwwxz|}}|}{yzyy{~€€€‚ƒƒ„„„ƒƒƒƒ‚‚‚‚ƒƒƒƒƒƒƒƒ…„„„ƒƒ‚‚‚‚‚‚‚‚‚‚ƒƒ„……„ƒƒƒ……„€‚‚‚‚‚‚‚‚€€‚ƒ„„„‚‚‚‚‚‚‚‚„„„ƒƒƒƒƒ‚‚‚ƒƒƒƒƒ‚ƒ„†……ƒ‚……„ƒ|{zzzz}€ƒ…ƒƒ‚ƒ‚‚ƒƒƒƒƒƒƒƒ‚‚‚ƒ‚ƒƒƒƒƒƒƒƒƒ„„„„„„„„„„ƒ„ƒ„ƒ„ƒ„……„‚~}~€€€~~~~~}}}|}|}}~€€€€€€‚€€€€ƒ„€‚€‚‚€‚€€‚€€€€€€€€‚‚ƒƒƒƒƒ‚‚‚‚€€€€€€€€€€€€€€€€€€~~}}}~€€€€€‚‚‚‚‚€‚ƒ„ƒ‚‚‚‚‚ƒ‚‚ƒƒ‚ƒ…„„ƒƒ„„ƒ‚‚€€€€ƒƒƒ‚€~~~}|€~~€€€~~€€€€€€€€€€€€€€€€€‚‚‚‚‚€€~~}}}~~~~~}~~€€€~}|{{}}}{}}~~~}}|{{||~~€}|{|}~~€€~}~~~~~~~€~}~~~~~€€€€€~}}€}~~~€€~}||||}~~€‚…‡„ƒƒƒƒ„„………„„„„„„ƒ‚‚ƒ„……„„‚€€‚€€„…ƒ‚€‚‚‚ƒƒ‚‚„…††††……†‡‰ˆ‡…€€€€€€€€€€€€€€€€~}|{zz{{zz{z{zzzyyzyzyzyyyyxxxxxyxxwwwwwxwwvwwxxwwwwvvvvwvvxxwwx{|}||||z{{{}€€€ƒƒ„„„„ƒƒƒ‚ƒƒƒ‚ƒƒƒƒƒƒƒƒ……„„ƒƒƒ‚ƒ‚‚‚ƒ‚‚‚ƒƒ„……„ƒƒƒ……„€‚‚‚‚‚‚‚‚€€‚‚ƒ„‚‚‚‚‚‚‚‚„„„„ƒƒ‚‚‚‚ƒ‚ƒƒ„„ƒƒƒ‚ƒ‚‚‚ƒƒƒ€}{yzzzz|‚„‚‚‚‚ƒƒƒƒƒƒƒƒƒƒ„„„„„„ƒƒƒƒƒƒ„„„ƒ„ƒ„ƒ„ƒ„ƒ„ƒ„ƒ„ƒ„……‚}~€€€‚}~~~}}}}}}~~€€€€€€€€€€€‚€€€„„€€€‚‚€‚€€€‚‚‚€€€€€€ƒƒƒ‚‚‚‚‚€€€€€€€€€€€€€€€€€€€€€€€€‚€ƒƒƒ‚‚‚‚‚ƒƒƒ‚‚‚‚‚‚„…„„ƒƒ„„ƒ‚‚€€€€ƒ‚‚‚€€€~~||€€€~}}}~€€€€€€€€€€€€€€€€€€€‚‚‚‚€~~~~~~~~~}}}}~~~~~~~~|{z{|}|{|}~~}{||}}~|{}}~~€€~~~~~€€~~~~~~~€€€€€€~}}€}~~~€€~}}~~|}}…†„ƒƒƒ„„…††……„„ƒ„„‚‚‚ƒ„„ƒƒ‚€€‚‚€€€€„…ƒ‚€€‚ƒ‚‚ƒ‚ƒ„†‡‡‡‡†††ˆˆ‰‡†€€€€€€€€€€€€€€€€~}|{zzzzzzyzyzyzyyyyyyyyyyxxwxxxxxwwwwwwwwwwwwxxxwwvvvvwwvwxxwvw{|}||}|z|||~€€‚‚ƒ„„„„ƒƒ‚ƒƒƒƒ‚ƒƒƒƒƒƒƒƒ…„„„„„„ƒ„ƒ‚ƒƒ„ƒ‚ƒƒ„……„ƒƒƒ……„€‚‚‚‚ƒƒ€€‚„‚‚‚‚‚‚‚‚„„ƒƒ‚‚ƒƒƒƒ„„„…ƒ~‚€~}zy{zzz|~ƒ‚‚‚‚ƒƒƒƒƒƒƒƒƒ„„………„„„ƒƒƒƒ„„…„„ƒ„ƒ„„„ƒ„ƒ„ƒ„ƒ„„……ƒ~~€€€‚}~~~}}|||}~~~}~€€‚€€€„„‚€€‚‚€‚€€€‚‚‚€€€€‚ƒ„‚‚€€€€€€€€€€€€€€€€€€€~~€€€‚‚‚‚ƒƒ„ƒ‚‚‚‚€€‚‚ƒƒ‚‚ƒƒƒƒƒ‚‚‚‚‚‚‚„…„„ƒƒ„„ƒ‚‚€€€€ƒ‚‚‚‚€~}}|}}~~€€~}}}~€‚€€€€€€€€€€€€€€€€€€~~~~~~~~~~~}}}||}}}~€€~|{{}}|{{{|}~~||}}~€€‚‚‚€~|{}}~~€€€€~~~~€~~€€€€€€€~}}€}~~~€€€~~€ƒƒ~‚†‡……„„„……………„„„„„…ƒ‚‚ƒ„„„„ƒ€€‚‚€€„…ƒ‚€‚ƒ‚€‚ƒ„…†ˆ‡‡‡‡††‡ˆ‰‰ˆ€€€€€€€€€€€€€€€€}|{zyyyzyyyyyyyyxxxxxxxxyyxxxxxxyxxwwwwwwwwvwwxxxwwvvvwwwvwxxwvw{|}{|||{}|}~‚ƒ„ƒ„ƒƒ‚‚‚ƒƒƒ‚ƒƒƒƒƒƒƒƒ„„„„„…………ƒ‚ƒ„…„ƒƒƒ„……„ƒƒƒ……„€‚‚ƒƒƒ‚‚‚‚‚‚‚‚‚‚‚ƒƒƒƒƒƒƒƒƒƒ‚‚€€ƒƒƒƒ„„„„…„‚€€€€€}|{{zyz{~ƒ‚‚‚‚‚ƒƒƒƒƒƒƒƒƒƒ„„…„„„„„ƒƒ„„……„„„„„„„„„ƒ„ƒ„ƒ„ƒƒ„…ƒ€~~~€€€‚~|~}|{{z{{}}~|{z‚~€€€€€‚€€€‚„…€€€‚‚€‚€‚ƒ‚€€€€‚~€ƒ…€€€€€€€€€€€€€€€€€€~~€€€‚ƒ„„„‚ƒ„……„ƒ‚ƒ‚‚‚‚‚‚ƒƒ‚ƒƒ„ƒƒƒ‚‚‚ƒƒ‚ƒ„…„„ƒƒ„„ƒ‚‚€€€€ƒ‚‚‚‚‚‚‚‚€€~}||}}}}€€€~€€€€€€€€~~~~~}|}}}~~€~~~}}||||}}~€€}}}}{z{zz{|}€||}~€€‚‚‚€~|{}~~~~~~~~}}}}~€~~€€~~~€€€€€€€€~}}€}~~~€€€‚††ƒˆ‰††……„„„…„„„„„„…†„ƒƒ„…†……ƒ€€‚‚€€„…ƒ‚€‚‚‚‚ƒ„†‡ˆˆˆ‡ˆ‡†‡ˆ‰‰‰€€€€€€€€€€€€€€€€}|{zyyyyyyyyyyyyxxxxxxxxyyxxxxxxxxxwwwwwwwwwwwxxxxwvvvwwwvwyxwvw{||{{}|{}}}€}€‚ƒƒƒƒƒƒ‚‚‚ƒ„ƒ‚‚‚‚‚‚‚‚‚ƒƒ„„……††…„ƒƒ…†„ƒƒƒ„……„ƒƒƒ……„€‚‚ƒƒƒ‚‚‚‚‚‚‚‚‚ƒƒ~~€‚ƒƒƒƒƒƒƒƒ‚€~~ƒƒƒƒ„„„„‚ƒ„„ƒ€}|€€€~}{zyz{~‚‚‚‚‚‚‚‚ƒƒƒƒƒƒƒƒ‚‚ƒ„„„ƒƒ„„„„„„……„„„„„„„„ƒ„ƒ„ƒ„ƒ„ƒ„…„€~}~€€€‚‚~{€~}|{zzxy{|{zyx‚~€‚‚€€€‚„…‚€€€‚‚€‚€‚ƒ‚€€€€ƒ~~€ƒ…€€~~€€€€€€€€€€€€€€€€~€€€€‚ƒ„„„ƒƒƒ‚‚‚‚‚‚‚‚ƒƒ„„‚‚‚‚ƒƒƒƒƒƒƒƒƒƒ…„‚ƒ„„ƒ~~†‡‰Š†€}€ƒ~~}}}~~~}}~~€€€€€€€‚‚‚€€€€€‚}||||{{|}}}}|zz{}€ƒƒƒ}||}~|{|}~~~}}}}~~~~}}}}|{zzyy||||}~€€€€~~€€~€}}~~}~~~~~~€€€€}}€€~€€€~~~€‚‚‚‚‚‚‚‚…………„„„ƒ„„„„„„„„…†‡‡†…„ƒ|}€ƒƒ‚‚€~€‚ƒ††„‚‚€€€‚ƒ‚‚…ˆŠ‰ˆ‹Š‰‰‰ŠŠŠ€€€€€€€€€€€€€€€€{{{zzzyyzzzyyyyyyyyyyyyywwxxxxyyxxxxxxxxxxxxwwwwwwwvvvuuwuvxyxxz{|}}|{{{vwy|€€~‚ƒƒƒƒ„„„„ƒƒƒƒƒ„ƒƒ‚ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ……„„„„ƒƒ„„„„ƒ‚€€ƒ…†††††…ƒ‚ƒ„†ˆ‚ƒƒ~||}ƒ‚‚ƒ…†…ƒ‚‚‚ƒƒƒƒƒ†…„‚‚‚‚‚‚„…„„„„‚„„ƒ€}}}{ywx{}~~|~€‚ƒƒ‚‚ƒ‚‚‚ƒƒ„„„ƒƒƒƒ„„„„„„„„„„ƒ„„………„„ƒ„„ƒƒ‚‚ƒ„†„~~~€€€€~}}~}|{zz{{|}~~}}~~€€‚‚‚‚‚‚‚‚„ƒ‚€~†„€€€‚‚ƒ‚€~~€€€~€€€€€€€€€€€€€€€€~~€€‚‚‚‚‚‚‚‚ƒƒƒƒƒ‚‚ƒ‚‚‚‚‚‚‚‚‚‚‚ƒƒƒ‚‚‚‚‚ƒƒƒƒƒƒƒƒƒƒƒ„„ƒƒƒƒƒ‚€€~…†ˆ‰…}‚~~}}}~~~|}~~€€~€€€€€€€€€€€~|zyyxxzz{||||{{{{}€‚‚‚€€~|{{{|}}~}}|{~~}}{{{{~~}||{{{||||}~€€€€~€~~~~~~}}}~~~~~~~€€€€€€}}~€~€€€€~~~€‚‚‚‚‚‚‚‚……„ƒ€ƒƒ‚ƒ‚ƒ‚ƒ„„……„ƒ‚~€‚‚‚‚€~€‚‚……ƒ€‚€‚‚‚‚„‡‰‰ˆ‹ŠŠŠ‹‹‹Š€€€€€€€€€€€€€€€€{{{zzzyyzzzyyyyyyyyyyyyyxxxxxxxxxxxxxxxxwwwxwxxxwwwwvvuuwuvxxxxzz|}}||||xxz~‚€~‚ƒƒƒƒ„„„ƒƒƒƒƒƒƒƒ‚‚ƒƒ„„ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ……„„„„ƒƒ„„„„ƒ‚€€„‡ŠŒŽŽŒŠ‡…ƒƒƒ„‡ˆ‡„~}~ƒ……„‚ƒƒƒƒƒƒƒƒ…………ƒƒ€€„…†††‚„„ƒ€}|}{yxx{}~~|~€‚ƒƒ‚‚ƒ‚‚‚‚ƒƒ„„„ƒƒƒƒ„„„„„„„„„„ƒ„„………„„„„„„ƒƒ‚ƒ„†„~~~€€€€~}}~}||{{||}~~€€€€‚‚‚€€€€€€€€€€€†„€€€€€‚ƒ‚€~€€€€€~€€€€€€€€€€€€€€€€~~~~€€€€‚‚ƒƒƒƒƒƒƒƒƒƒƒ‚‚ƒ‚‚‚‚‚‚‚‚‚‚ƒ‚ƒ‚‚‚ƒ‚ƒƒƒƒƒƒƒƒƒƒƒƒƒ„„ƒƒ‚ƒƒ€€€~€ƒ„††ƒ}~~~}~~~~}}~€€€~~~€€€€€€~~~€€~}{yxwxxyyz{|{{z|||}€€€~|z{|}}}}}{{z~}}|||||~~}}||||||}~€€€~€~}}~~~~~~~~€€}}€€~€€€€~~~€„ƒ‚€}|{€€€€€€€€‚‚‚~€€€‚‚‚€~€‚„…‚€€‚‚‚‚ƒ‡‰‰ˆŠ‰ŠŠŒ‹Šˆ€€€€€€€€€€€€€€€€{{{zzzyyzzzyyyyyyyyyyyyyxxxxxxxxxxxxxxxxwwwwxxxxwwwwvvvvwuvwxwxyz{}}}|}~{{}‚‚€}‚ƒƒƒƒ„„ƒƒ‚‚‚ƒƒ‚‚‚‚ƒƒ„…ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ„„„„„ƒ„ƒ„„„„„‚€€…ˆ‹ŽŒ‰†„‚‚‚ƒ„„‚€~€ƒ„ƒ‚„„„„„„„„„„……„‚€~€€„†††ƒ„…ƒ€}||{yxy{}}}|~€‚ƒƒ‚‚ƒ‚‚‚‚ƒƒƒ„ƒƒƒƒƒƒ„ƒƒƒƒƒƒƒƒƒƒ„„……„„„„„„„ƒƒ‚ƒ„†„~~~€~}}~~}}|||~~~€€‚‚‚ƒƒ„„„~€ƒ…††„ƒ€€€€€€€‚€€€€€€€€€€€€€€€€€€€€€€~~}~€€‚ƒ‚ƒƒƒƒƒƒƒƒƒ‚‚‚‚ƒ‚‚‚‚‚‚‚ƒ‚‚‚‚‚‚ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ‚„…„‚‚ƒ„‚€~ƒƒƒ~}~€~~}~~~~~€‚‚€€€€€~€~~~€€€€~}{{z{yz{|||{{}||}€€~}}||}}}}|{{}~‚~~}}|||||}~€€€€€€€€€~~~€€€€€€€€~~~~}}~€~€€€~~~€€€€€€€€€‚€€~~||~~~~~~~€€~}|€€‚‚€~€‚„„ƒ€‚‚€‚€ƒ…ˆ‰ˆ‡‡ˆ‰Š‰‡†€€€€€€€€€€€€€€€€{{{zzzyyzzzyyyyyyyyyyyyyyyxxxxwwxxxxxxxxwwwxwxxxwwwwvvvvwvuxxwwyy{|~}}~~~~ƒ‚€}‚ƒƒƒƒ„„ƒƒ‚‚‚‚‚ƒƒ‚ƒ‚ƒ„„ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ„„ƒ„ƒ„ƒƒ„„„„ƒ‚€€‚„†‡ˆˆˆ‰ˆ†…„„„„€~~~~}~‚ƒ„„„„ƒƒƒƒƒƒ‚‚€}}€}~€‚ƒ„ƒ……ƒ}||{zyz{}|||~€‚ƒƒ‚‚ƒ‚‚‚‚ƒƒƒƒƒƒƒƒƒƒƒƒƒ‚ƒ‚ƒ‚ƒƒƒ„„„„„„„„„…„„ƒƒƒ„†„~~~~}}~~~~~~}}€€€ƒƒƒƒƒƒƒƒ„„„„„„„„‚ƒ…‡ˆŠŠƒ‚€€€€€€€€€€€ƒ‚€€€‚€€€€€€€€€€€€€€€€~}~~€€€‚‚‚‚‚‚ƒƒ‚‚‚‚‚‚ƒƒƒ‚‚‚‚‚‚‚‚‚‚‚‚ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ‚ƒ…„ƒ‚ƒ…ƒ€€€€~~€~}€€~~~~~}~~~€€€€€€€€€€€€€~~~€€€€€€€ƒ‚€~}|}}z{||}}}|}||}~~‚‚ƒƒ„}z{|}~}€„†ˆ‡…ƒ~~~~~}||||||}~€€€€€€€€€€€~~~€€€€€€€€~~‚‚}|€€€€€~~~~€€€€€€€€€€€€€€~~~~~~~~~~~}|{€‚€~€‚‚„…ƒ‚‚‚‚‚‚€ƒ€…‡‰‰††‡ˆ‰ˆ†…€€€€€€€€€€€€€€€€{{{zzzyyzzzyyyyyyyyyyyyyyyyxxwwwxxxxxxxxxxxwxwwwwwwwwwwvwuvwxvvxyz}}}|}~€€‚„ƒ€}‚ƒƒƒƒ„„ƒƒ‚‚‚‚‚„„ƒ‚ƒ‚ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ„ƒ„ƒ„ƒ„„…„„‚€‚‚ƒ„„ƒ‚‚„„ƒƒ„„……………‚€}}}}|{|~„ƒƒƒ‚‚‚€~{{z||~~~}~‚„„…†ƒ€|{{{zzz}}|z|~€‚ƒƒ‚‚ƒƒƒƒ‚‚‚ƒƒƒƒƒƒƒƒ‚‚ƒ‚ƒ‚ƒ‚ƒƒ„„„„„„„„„„„„ƒƒƒ„†„~~~~~~~}~~~€€‚‚‚„„„„„„„„„„……†‡ˆˆ‚€€€€‚‚‚€€€€€€€ƒ‚€€€‚€€€€€€€€€€€€€€€€~~}€€‚‚‚‚‚‚‚ƒƒƒ‚‚‚‚‚‚‚‚‚‚‚‚‚ƒƒƒƒ‚ƒ‚‚ƒƒƒƒƒƒƒƒ‚ƒƒ„ƒƒƒ„‚€€~€~€€€~~~~~}}||}~~€€€€€€€€€€€€€~~~€€€€€€€€€€€‚~||{|{||}}~}}}|{|~~€€ƒ…„~|}~€‚‚‚ƒ…‡‰‰‡„‚}~~~}||||||}~€€€~€~~~~~~€€}}~€€~~~~~€€€€€€€€€€€‚ƒƒ~~}|€€€€€~€‚‚……„‚ƒƒ‚‚€ƒ€ƒ‡ˆ‰ˆˆˆ‰‰‰ˆ‡€€€€€€€€€€€€€€€€{{{zzzyyzzzyyyyyyyyyyyyyxxxxxxxxxxxxxxxxxxxxwwwwwwwwwwwwwvuwwvvwy{|}|||}€‚„ƒ~‚ƒƒƒƒ„„ƒƒ‚‚‚ƒƒ…„ƒƒ‚‚‚‚ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ„ƒ„„„„„ƒ‚€€€‚ƒ„„ƒƒƒƒƒƒƒƒƒƒ……„‚}|}~~|zz|‚€~~€~zxwy{}}~~~~€ƒ…„††„|{{{zz{}}{y|~€‚ƒƒ‚‚‚ƒƒƒƒ‚‚‚‚‚ƒƒƒƒ‚‚‚ƒ‚ƒ‚ƒ‚ƒ‚ƒƒ„„„„ƒƒƒ„„„„ƒƒƒ„†„~~~}~~~~}}~~~€€€€€‚‚‚‚‚‚‚‚€€€€‚‚‚‚‚‚€€€€€€€€€€~€€€€€€€€€€€€€€€€€€€~~€€‚‚‚‚‚‚‚‚ƒƒ‚‚‚‚‚‚‚‚‚‚ƒƒƒ‚‚‚‚‚ƒƒƒƒƒƒƒƒƒ‚‚ƒ„„„„‚~€‚€€~€€€€~~~~~~}}||}~~€€€€€€€€€€~~}€€€€€€€€€€€~|{{{{z{||}||||{{|~~||~€ƒ„……€‚ƒ„„„„†††……„ƒ‚}~~}|||||}~€€€~€~€€€~~~~~€€€€€€€€}}€€~~}~~~€€€€€€€€€€€€€€€€€€€€~}~€€€€€~€‚ƒ…ƒ‚‚‚€‚‚‚ƒƒ†‰‰Š‰‰‰ŠŠŠ‰€€€€€€€€€€€€€€€€{{{zzzyyzzzyyyyyyyyyyyyyxxxxxxxxxxxxxxxxxxxwxwwwwwwwwwwwwuvwwuuwy{||{z{{~~‚„„‚ƒƒƒƒ„„„ƒƒƒƒƒƒ„„ƒƒ‚‚ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ‚‚ƒƒƒƒ„„„„„„ƒ‚€€ƒƒƒƒƒƒƒ„„„„„„„„„‚}}~}}~|{{}~~}||{}{yxxy{|~~~~€‚ƒ…††ƒ€|zz{zz|}}{x|~€‚ƒƒ‚‚‚ƒƒƒƒ‚‚‚‚ƒƒƒƒ‚‚ƒƒƒƒƒƒƒƒ‚ƒƒ„„„„ƒ‚ƒƒƒ„ƒƒƒƒ„†„~~~}}~~~~~}~~€‚‚‚€€€€€€€€€€€€€€€€€€€‚‚€€‚‚‚‚‚‚‚‚€€€€€€€€€€‚€}€€€€~€€€€€€€€€€€€€€€€~€€‚‚‚‚‚‚ƒƒƒƒ‚‚ƒ‚‚‚‚‚‚€€‚‚ƒƒƒƒ‚‚‚‚ƒƒƒƒƒƒƒƒƒ‚‚„…„ƒ~€‚~~€€€~~~~€~~~~~~~€~€€€€€€~~}€€€€€€€€€‚}|{{{yzz{|{{{{zz|~|}~~~„‡‚ƒ„………„„…ƒ€€ƒ…~~€€~}||||}~€€€~€€~~€€€€~~€€€€€~~€€€€}}~€~}}~~~€€€~~‚‚‚‚‚‚‚‚‚‚€~|~€€~€‚€ƒ„‚€€‚‚‚‚ƒ~‚†ˆ‰‹Š‰‰‰ŠŠŠ€€€€€€€€€€€€€€€€{{{zzzyyzzzyyyyyyyyyyyyywwwxxyyyxxxxxxxxwwwwxxxxwwwwwwwwwvuwwuuwy{||zzzz}}~„„‚‚ƒƒƒƒ„„„„ƒƒƒƒƒƒƒƒƒ‚ƒƒ„ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ‚‚ƒƒƒƒ„„„„„„ƒ‚€€€€‚ƒ…†‡‡‡ŒŒŠ‡‚~}|}~|{{}~}}|{{zzzzzzz{{|€~}}~~…††„|zz{z{|}}zx|~€‚ƒƒ‚‚‚ƒƒ„ƒ‚‚‚ƒƒƒƒ‚‚ƒƒƒƒƒƒƒƒ‚ƒƒ„„„ƒƒ‚‚ƒƒƒƒƒ‚ƒ„†„~~~}}~~~~}}~~€€‚‚€€€ƒƒ‚€€‚‚‚‚‚‚‚‚€€€‚‚€ƒ‚€€‚‚‚‚‚‚‚‚€€€€€€€€€‚‚€~}€€~€€€€€€€€€€€€€€€€~~€€ƒƒ‚‚‚ƒƒƒ‚‚‚‚‚€€€‚‚‚‚ƒ„„ƒƒ‚‚ƒƒƒƒƒƒ„‚‚ƒ„„ƒ‚‚€€€€ƒ~~‚ƒ€~~}~~~€€~~}}€€€€€~}€€€€€€€~|zyyyxxz{{zzyyyz|~€€€~~~€„†‡‡…ƒ‚€€€€{||}~€€}|{{|}~~€€~}}~~€€~~~}€€€€€€€€€€€€€€€€€~}}~~~~~€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ƒ„ƒ‚‚‚‚€€€ƒ†‡‡‰‰ŠŠ‰‰€€€€€€€€€€€€€€€€|{zzyzz{yyyyyyyyxxxxyyyywxxxxxxxzyxwwwxxyyxwwwwxwwwwvuttvvvvwwwwz{||{{|}~€ƒƒ‚€€€‚ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ„ƒ„ƒ„ƒ„ƒƒ‚‚‚‚ƒ„ƒ„ƒ„ƒ„ƒ„ƒ‚ƒ„„‚€|~„†‡‡‡ˆˆ‰ŠŒŽŽˆ‚}|}~~€€~~|zxxy{|}}}}}}|||~|{{{}~ƒ‡Šˆ{yzzyz{~‚…ˆ…„ƒ‚‚‚‚ƒƒƒƒƒƒƒƒƒ„„„„„„„ƒƒƒƒƒƒƒƒƒƒƒƒƒ„„„ƒƒƒƒƒ‚„…„€}}}||}}}~~~~~~~€‚€€€€€€€€€€‚‚€€€‚‚‚€€€€€ƒ€€€~€€€€€€€€€€€€€€€€~~€€‚ƒ‚‚‚€‚‚‚‚‚‚‚‚€‚€€‚‚‚ƒ‚‚ƒ„„ƒƒ‚ƒƒƒƒƒƒ„ƒƒ„…„„ƒƒ€€€€‚€~~‚‚€~~~}~€€€€~~€€€€~~€€€€€€€€€~|{zyywxyzzzyx{{|~€€€€€€~~€‚ƒ„‚€€€€~‚€€€€{||}~€~|{{|}~~€€~}~~~~~~~~~~~}~~~~€€€€€€€€~}}~~~~~€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ƒ„ƒ‚‚€‚ƒƒ‚„‰‰‰‰ˆ‡†…€€€€€€€€€€€€€€€€||zzyyyzyzyzyzyzyyyyyyyyyxxwwxxyyyxwwwxxxxwwwxxyvwwwvvuuvvvvvwwwz{||{{|}~€ƒƒ‚€€€€‚ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ„ƒ„ƒ„ƒ„ƒ‚‚‚‚‚ƒƒ„ƒ„ƒ„ƒ„„ƒƒƒ„„‚€„ˆŠŒŒŒŽŽŽŽŽŽŒ‰„~zz|~~~~~~~~}{z{}~~~~}}}}}}{{{{{||}€„ˆ†|{|zzz{}€„†……ƒ‚‚‚‚‚ƒƒƒƒƒƒƒƒƒ„„„„„„„ƒƒƒƒƒƒƒƒƒƒƒƒƒ„„„ƒƒƒƒƒ‚„…„€~}}}}}~~~~~~€‚€€‚‚‚‚€€€€€‚€€€€€€€€€€€€€€€€€€€€€‚‚‚‚‚€€€€€‚‚ƒƒ‚‚‚‚€€€‚ƒƒƒ‚‚ƒƒ„ƒƒƒ‚ƒƒƒƒƒƒ„„„………„„„€€€€‚€~~‚‚€~~}~}~€€€€€€€€€€€€€€€~~€€€€€€€€€€€€€}|{{{z{{|||||~~~€€€~}~€~~~~~~~}}|‚€€€~||}}€€€~|{{|}~€~~~~~}}~~~~}~~€€€€€€€€€}}}~~~~~€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ƒ„‚‚‚‚‚‚‚‚‚ƒ‚€‚ƒ……†‡‡†††€€€€€€€€€€€€€€€€}|{yyxxxzzzzzzzz{{{zyxxxzyxwwwyyyyxxwxxxwwwwxxyywwxwxwwvvvvvwwwwz{||{{|}~€‚ƒ‚€€€€‚‚ƒƒƒƒ„„ƒƒƒƒƒƒƒƒƒƒƒƒƒƒ„ƒ„ƒ„ƒ„ƒƒƒ‚‚‚ƒƒ„ƒ„ƒ„ƒ„ƒ„ƒƒƒ„„‚€€‚†‰ŽŽŒŒŠˆ‡†…………‚~|||~}||}~€~|||}~~~~~~~}}}yz{{|||{}„ƒ€}}~{zzz|‚„†…„ƒ‚‚‚‚‚‚‚ƒƒƒƒƒƒƒƒƒ„„„„„„„ƒƒƒƒƒƒƒƒƒƒƒƒƒ„„„ƒƒƒƒƒ‚„…„~~~~~€€~~~~€‚‚‚‚‚‚‚‚‚€‚‚‚€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€‚‚‚€€~~€‚ƒ„‚‚‚‚‚€‚‚ƒƒ„„„ƒ‚‚‚ƒƒƒƒƒƒ„„„„„„„„„€€€€~~€}~~~}~~~€€€€€€€€€€€€€€€€€€€€€€€~|}|}}~~~€€€€€€€€~~€€~~~}}}~}}}|}}}~}||}}~~€€€‚‚‚€~|{{|}€€€~~~~~~€€€€€€€€€€€€€€€€€€€~}~~~~~~€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ƒƒ‚‚‚ƒƒƒ‚€‚‚ƒ„……†……€€€€€€€€€€€€€€€€~}{zxxxx{{{{{{{{}}|{zyxxzyxxwxxyxxxxxxxxwwwxwxxywxxyyyxxvvvwvwwwz{||{{|}€‚‚€€€‚ƒƒ„ƒƒ„„„„„„ƒƒƒƒƒƒƒƒƒƒƒ„ƒ„ƒ„ƒ„ƒƒ‚‚‚ƒƒƒƒ„ƒ„ƒ„ƒ„„„ƒ„…„‚ƒ‡ˆŠ‰‰ˆˆ‡†„ƒ‚‚‚~|{{}}||{|}}}{zz|}}}~~}}||}}}}}}}€‚}}~{{zz{~€‚††„„‚ƒƒƒ‚‚‚ƒƒƒƒƒƒƒƒƒ„„„„„„„ƒƒƒƒƒƒƒƒƒƒƒƒƒ„„„ƒƒƒƒƒ‚„……~€€€€~~~~€‚€‚‚‚‚‚‚€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€~€‚‚€€€~}}~‚ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚…„„ƒ‚‚‚‚ƒƒƒƒƒƒ„ƒƒƒƒƒƒƒƒ€€€€€~~€€~}}~~~|}~~~}~~~~~€€€€€€€€€€€€€€€€€€€€€€~~~~~~~~€€€€€~~‚‚}}}||}~~~~{{|~~|yv}}~~€‚‚‚~}|||~€€€~~}€~~€€€€€€€€€€€€€}}}~~~~~€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ƒ„‚‚‚‚ƒ‚€€€€€€‚ƒ„„„„„‚€€€€€€€€€€€€€€€€€~|zzxyx|||{|{||~}}{{yyxyyyyyxxxxxxxxxxxxxxxxwwwwwxxxxxxvvvvwwwwz{||{{|}‚‚€€‚ƒ„ƒƒƒ„„„„„ƒƒƒƒƒƒƒƒƒƒƒ„ƒ„ƒ„ƒ„ƒ„ƒƒ‚‚‚ƒƒ„ƒ„ƒ„ƒ„ƒ…„ƒ„……ƒ~‚ƒƒ‚‚€‚‚‚~}~~~}|{|}{{||}||{zyyz}~€~~}}}~~~‚„€€~|{{{{zz{~€‚†……ƒƒ‚ƒƒ‚‚‚ƒƒƒƒƒƒƒƒƒ„„„„„„„ƒƒƒƒƒƒƒƒƒƒƒƒƒ„„„ƒƒƒƒƒ‚„†„‚€€€€€€‚‚~~~~€‚‚‚‚‚‚‚€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€~~~€€€~~~~}~~€€‚‚‚‚ƒƒƒ‚‚‚ƒƒ‚‚‚ƒƒ„‚ƒƒƒƒƒƒ„ƒƒ‚‚‚ƒƒƒ€€€€~~~€€~}}~~~|}~~~}~~~~~~~~~~€€€~~€€€€€€€€€€€€€€€€€‚‚ƒƒƒ‚‚ƒ‚€€~~~€}{z{|}~€€€}}}~~{xu}}~€‚ƒ‚‚€}||}~€€€€~}}~~~~}}~~~€€~~~~€€€€€€€~}}~~~~~€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ƒƒ‚€€‚€€€‚„ƒƒƒ‚‚‚ƒƒƒ‚€€€€€€€€€€€€€€€€~}|zzzz|}|}|}||~~}|{{zzyzyzyyxwwwxxyxxxxxxyxxwvvvvwwwvvvvvwvwwwz{||{{|}€‚€€‚‚‚ƒƒ„ƒƒ„„„„ƒƒƒƒƒƒƒƒƒƒƒƒƒ„ƒ„ƒ„ƒ„„„ƒƒ‚ƒƒ„ƒ„ƒ„ƒ„ƒ„…„„„……ƒ€€€~|z{|||zywvxyz{||}}z{|}}|{zzz{}‚‚€€~}}}~~~~€ƒ†ˆ„ƒ‚€}{zy{zzz|‚„†…„ƒ‚‚‚‚‚‚‚ƒƒƒƒƒƒƒƒƒ„„„„„„„ƒƒƒƒƒƒƒƒƒƒƒƒƒ„„„ƒƒƒƒƒ‚„……‚€€€‚‚‚~~~~€‚‚‚‚‚€€€€€‚‚€€€€€€€€€€€€€€€€€€€€€€€€€}}~~€€~~}}}~~~~‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ„…‚ƒƒƒƒƒƒ„„„ƒ‚‚ƒ„„€€€€~~€€~}}~~~~}~~€€~~~€€€~~€€€€€€€€€€€€€‚„„ƒƒƒ„…†„ƒ‚ƒƒƒ€€€€€€~|zz{}}~€€€}|}~~€€ƒƒƒ‚~||}~€€€€~}}~~~~~~~~~}}~€~~~~€€€€€€€€}}}~~~~~€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€‚ƒ‚€€‚€€€‚‚ƒ„…„‚€‚ƒƒƒƒ€€€€€€€€€€€€€€€€~}||||}}}}}}}}}}}}|}|||zzzyyxxxwwxyyyxxwxxxyxwwwwwwwvvuvvvvwwwwz{||{{|}€‚€€‚‚‚ƒƒ„ƒƒƒ„„„ƒƒ‚‚‚ƒƒƒƒƒƒƒƒ„ƒ„ƒ„ƒ„ƒ„„ƒƒƒƒ„„„ƒ„ƒ„ƒ„ƒ…„„………ƒ‚€€€|yxz{||{ywvwxz|}|{y||||||||||}ƒƒƒ€~~}}|~}~~ƒ„…„~|{zzzz{}€„†…„ƒ‚‚‚‚‚‚‚ƒƒƒƒƒƒƒƒƒ„„„„„„„ƒƒƒƒƒƒƒƒƒƒƒƒƒ„„„ƒƒƒƒƒ‚„†…ƒ‚€€€‚‚~~~~€‚€€‚‚‚‚‚€€€€€€‚€€€€€€€€€€€€€€€€€€€||}}~€~~}}}}~~~}}€€€‚‚‚‚‚ƒƒƒƒƒ‚‚‚ƒƒ„‚ƒƒƒƒƒƒ„……„ƒƒ„……€€€€~~~€€~~}}~~~~~€€€€€€€~~€€€~~€‚€€€€€€€€€‚ƒ„ƒƒ‚‚ƒ……‚‚‚‚‚€€~}~|{||~~~~‚€ƒ……}~~€‚ƒƒƒ‚~}}}~€€€€€€~}}~~~€€~~€€~€€€€~}}~~~~~€€€€€€€€€€€€€€€€€€€€€€€€€€€‚‚‚‚€€€€€€€‚ƒ‚€‚ƒƒ‚ƒƒƒƒƒ‚‚‚‚ƒƒ‚‚€€€€€€€€€€€€€€€€€~~}}}~~}}}}}}}}|||}}}}~{{yxwxxyvwxyyyxxvwxyyyxxyyyyxxwvvvvvwwwwz{||{{|}€‚€‚‚‚ƒƒ„„ƒƒ„„ƒƒ‚‚‚‚ƒƒƒƒƒƒƒƒƒ„ƒ„ƒ„ƒ„„„ƒƒƒƒ„„ƒ„ƒ„ƒ„ƒ„……„…†…ƒ‚€€~{xvyz{}}|zyxxy{|~~~}}{{{||}}}~‚ƒƒ‚€~}}||~~~~~}}|…ƒ~}|{zyz{~‚…ˆ…„ƒ‚‚‚‚ƒƒƒƒƒƒƒƒƒ„„„„„„„ƒƒƒƒƒƒƒƒƒƒƒƒƒ„„„ƒƒƒƒƒ„†…ƒ‚‚ƒ€€€‚~~~~€‚‚‚‚‚‚‚‚‚€€‚‚€€€‚‚‚€€€€€€€€‚€€€€€€€€€€€€€€€€€~€~~~€€€€€~€€€€€‚‚‚ƒ„„†…„ƒ‚‚ƒƒƒ‚ƒ‚ƒ‚ƒ‚ƒ„……„„‚€€~}~€€}~~~~~~}€€€~€€€~~~~~~€}~€€€€€€€€‚‚‚‚‚ƒ„…†„ƒƒƒ‚‚~~€€€~€|z{|€€€€€€~~~€ƒƒ„‚}}~~~~€€~~~~~~~}~€€€~~~‚€~}|}~€~~~}}}}}€€€€~€€€€€€€€€€€€€€€€€€€€ƒ„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚€€€€€€€€€€€€€€€€~~}}|}}|||}}}}|zzzzzzzz{||{yxxywwxxxyyywwwwwwwwwwxxxxwvxwwwvwwwxz||{zz{ƒƒ€‚‚ƒƒƒƒƒ„‚‚‚ƒƒ‚‚ƒƒƒƒ„„ƒƒ„„„………ƒƒƒ‚‚ƒƒƒƒ„„„ƒ‚ƒƒ‚ƒƒƒ‚‚ƒƒ€~~€€}zyz{{zyxxywxyz{|||}}}~~}}}~~€€€€€~~}|{{{}~|zz~‚ƒƒƒƒ‚}|zzz{~‚†ˆ†…„ƒ‚‚‚‚‚‚‚ƒƒƒƒ„„ƒ„ƒ„ƒ„ƒ„ƒƒƒƒƒƒ„„ƒ„ƒ„ƒ„ƒƒƒƒƒƒƒƒƒ€ƒ„ƒ‚€~€‚‚‚~€‚‚‚‚‚€€‚€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€‚‚‚ƒƒ„ƒƒƒ‚‚‚‚ƒ‚ƒ‚ƒ‚ƒ‚ƒƒƒƒƒƒƒ„„‚€~}~€€€~~}}}~~~€€€€€€~~~~€€~~€€€€€€€€€€€€€‚‚‚ƒƒ‚‚‚‚ƒ„ƒ‚‚‚€€~~€}{{|~€€€~|zy~~~€‚ƒƒ‚}}~~~~€€~~~~~~~~~}~~~€€€€€€‚€~}|}~€€€€€€€€€€€€€€€€€€€€€€€€€€~ƒ„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚€€€€€€€€€€€€€€€€~~}~~~|}}}}}||{{z{{{{{zz{zxwwxxxxxxyxyyxxxxwwwwxxxxxwwxwwwvwwwxz|}||||ƒƒ€€€‚ƒƒƒƒƒ„ƒƒƒƒƒƒƒƒ‚‚ƒƒƒƒ„„„„„„„„„„ƒƒƒ‚‚ƒƒƒƒ„„„ƒ‚‚ƒ‚ƒƒƒ‚‚ƒƒ€~~€€}zyyzzzyyzzyyz{|}}}}~~~~~~}}~~€€€€~~}|{||||}€‚„ƒƒƒ‚}|||{|~„††…„ƒ‚‚‚‚‚‚‚ƒƒƒƒ„ƒ„ƒ„ƒ„ƒ„„ƒƒƒƒƒƒ„ƒ„ƒ„ƒ„ƒ„ƒƒƒƒƒƒƒƒ‚ƒ„„‚€~€€‚‚‚~~€‚‚‚‚€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€‚‚‚‚‚ƒ„‚‚‚‚‚‚‚ƒ‚ƒ‚ƒ‚ƒ‚…„ƒ‚‚‚ƒ„‚€~~~~€€€~}|}}~~~~~~~~~~~€€€€€~€€€€€€€€€€‚‚€€‚ƒ‚„ƒ‚€€€~~~~~€€€~~|||~~~~~€~|{~~~€‚ƒƒ}~~~~~€€~~~~}}}~~~€~~€€€€‚‚€~}|}~€€€€€€€€€€€€~‚€€€€€€€€€€€€€€€€€€€€€€€€~~€ƒ„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚€€€€€€€€€€€€€€€€~€€~~~~~}}|{{{{{{{{yyzyxxxyyxyxxxxxzzyyxxwwxxxwwwwwwwwvwwwxyz|}}}}}ƒƒ€€‚ƒƒƒƒƒƒ……„„„ƒƒƒƒƒƒƒƒƒƒƒ„„„„„„ƒƒƒƒƒ‚‚ƒƒƒ„„…„ƒ‚‚‚‚ƒ„ƒƒ‚ƒ„€€}zzyz{{{{}~{||}~~~~€€}~€€€€€€~}|{~{{|€ƒƒ‚‚‚‚€~|{~}||}‚„†…„ƒ‚‚‚‚‚‚ƒ‚ƒƒƒƒ„ƒ„ƒ„ƒ„ƒ„ƒƒƒƒƒƒ„„ƒ„ƒ„ƒ„ƒƒƒƒƒƒƒƒƒ‚ƒ„„‚€‚€€‚‚~~~€‚‚‚‚€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€~€~€€~~€€€‚‚‚‚‚€€‚‚‚‚‚ƒƒƒ‚ƒƒƒƒ‚‚‚ƒ‚ƒ‚ƒ‚ƒƒ„ƒ„ƒƒƒƒ€€€~€~~€€~}}}~~~~~~~~~~~~€€€€€€€€€€€€€€€€€‚‚€ƒƒƒƒƒ‚€€~~~~~}}~€€}}}}||}}}~~~€€‚‚€~~~€ƒƒ‚~~~~~€€~~~}}}~~€€€€~€€€€€€‚€~}|}~€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€~~€ƒ„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒƒ€€€€€€€€€€€€€€€€~€€~}||{{{{z{zzyyzzzzzzyyyyxxwwyyyxxxwwyxwwvwwxwwwvwwxxyz{}}}||}‚€€€‚‚ƒƒƒƒƒƒ„„„„„„ƒƒƒƒƒƒƒƒƒƒ„„„„ƒƒƒƒƒƒƒ‚‚ƒƒƒ„……„‚‚‚‚ƒƒ„„ƒ‚ƒ„‚€€}zz{|}~~}~€€€€€€€€€€€}||~}{~€ƒ‚‚€€~}{{}|{{}‚„†…„ƒ‚‚‚‚‚‚‚ƒƒƒƒƒƒ„ƒ„ƒ„ƒ„„ƒƒƒƒƒƒ„ƒ„ƒ„ƒ„ƒ„ƒƒƒƒƒƒƒƒ‚„…„ƒ‚€€‚‚~}~€‚‚€€‚‚‚€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€~~€~€€€~~~€€‚‚‚ƒ‚‚€‚‚‚‚ƒ‚ƒ‚ƒ„„„„ƒ‚ƒ‚ƒ‚ƒ‚ƒ‚‚ƒƒƒ„ƒ„ƒ€€€~€~~~~~~~~~}}}~~~~€~~~€€€€€€€€€€€~€~‚‚€ƒ„‚€€~~~~~~~~~~}}~€~}{{}}}||}}}~~€}}|}}~~~€‚ƒ~€~~~€€~~~~~€€€€~~~~~}~€€€€‚€~}|}~€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€~~~€ƒ„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒƒ€€€€€€€€€€€€€€€€~~~}~~€}}|{z{zzyzyyyyyzzzzyyyxxxxwwwwwwwwwyxxvwwxxwwvvwwxxzz{||{zy{€€€€‚‚ƒƒƒ‚ƒƒƒƒƒƒƒƒ„„ƒƒƒƒƒƒƒƒ„„„„ƒƒƒ‚ƒƒƒ‚‚ƒƒƒ„„…„ƒ‚‚ƒƒƒ„„ƒƒƒ„ƒ€€€|{z}}€€€€€€€€€€‚‚ƒ‚‚€€}||}}€‚‚‚‚€~~||{{zz{}€ƒ…†…„ƒ‚‚‚‚ƒ‚ƒ‚ƒƒƒƒ„ƒ„ƒ„ƒ„ƒ„ƒƒƒƒƒƒ„„ƒ„ƒ„ƒ„ƒƒƒƒƒƒƒƒƒ‚ƒ„……ƒ€‚€€~}~€‚€€‚‚‚€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€‚‚ƒ‚€€‚‚‚‚ƒƒƒ‚‚……„„ƒƒ‚‚‚ƒ‚ƒ‚ƒ‚ƒƒƒƒƒƒ„„„€€€~}‚€~~}~~~~}}}}~~~€~~}~€€€€€€€€€€~€~‚€€ƒƒ‚€€€€€~~~~~~~~~~~~~~}{{|}}}|}}}~}{zz{|~~~€€‚‚~€~~~€€~~€€€~~}~~~}}~}}}~€€€‚€~}|}~€~~€€€~€€€€€€€€€€€€€€€€€€€€€€€€€€~~~€ƒ„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ€€€€€€€€€€€€€€€€~~}}}~~~~~}}{{z{zzyyxxwxyyyxyyxyxxxxwwwwwwwwxxwwwwwxwvvvwwxx{{{|{{yxz€‚‚ƒƒƒƒ‚ƒƒ‚‚‚‚ƒƒƒƒƒƒƒƒƒƒƒƒ„„ƒƒƒƒƒƒƒƒƒ‚‚ƒƒƒƒ„„„ƒ‚ƒƒƒ„„„ƒƒƒ„„€}{{}~~~~€€€€€€€€ƒƒƒƒ‚‚€€}|{z}„………†ƒ‚€}|||zzzz|ƒ…†…„ƒ‚‚‚‚ƒƒƒƒƒƒƒƒƒ„ƒ„ƒ„ƒ„„ƒƒƒƒƒƒ„ƒ„ƒ„ƒ„ƒ„ƒƒƒƒƒƒƒƒ‚ƒ………ƒ€€~€~}}~‚€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€‚€€€‚ƒ‚‚ƒƒƒ‚‚„„ƒƒ‚‚‚ƒƒ‚ƒ‚ƒ‚ƒ‚ƒƒ„„„ƒƒ‚€€€~}‚€~~~~~~}~~~~~~~~€€~~~}~€€€€€€€€~€€€€€€€€‚ƒ‚€€€~~~~~~€}||}}}|}}~~€~}{{{|}~~~€€‚~~~~€€~€€~~~}}~~~~~~€€‚€~}|}~€~~€€€€€€€€€€€€€€€€€€€€€~~~€€ƒ„‚‚‚‚‚‚‚‚‚‚‚ƒ‚‚ƒ€€€€€€€€€€€€€€€€~~}}}~~}~~~~~}}|||{{zzzyxwxxyxwxxxxxxyyxxxxxwwwxxxxxwwwvvvvwwxy{{{|}|{yz€‚ƒƒƒƒ‚‚ƒ‚‚ƒƒƒƒƒƒ„„ƒƒƒƒ‚‚ƒƒƒƒƒƒƒƒƒƒƒ‚‚ƒƒƒ‚ƒ„ƒƒƒ„„ƒ„„„ƒƒ„„…‚€|{{|}~~~~€€€€€€€€‚‚‚€~}|{z}‚…††††ƒ‚€~}||}|{zz|~ƒ†…„ƒ‚‚‚‚ƒƒƒƒƒƒƒƒ„ƒ„ƒ„ƒ„ƒ„ƒƒƒƒƒƒ„„ƒ„ƒ„ƒ„ƒƒƒƒƒƒƒƒƒ‚ƒ…†…„‚€~~~~~~}}}‚€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€~€~~~~€€€€€€€€€€€‚ƒ‚‚ƒƒƒƒ‚ƒ‚‚‚ƒƒ‚ƒ‚ƒ‚ƒ‚ƒ‚ƒ…††„€€€~}‚‚€~~}~}}}}~~~~€€€~~}~€}~€€€€€€~€€€‚€€~~~€€€ƒ~}}}}|}}~€€||||{{zz~~~€€‚~~~€€~~~~}~€€€~~€€€€‚€~}|}~€€‚‚€€€‚‚‚€€€€€€€€€€€€€€€~}~€€ƒ„‚‚‚€€€€€€€€‚‚‚‚‚‚‚‚ƒ‚‚‚€€€€€€€€€€€€€€€€€~~~~~}}}~~~~}~}}}||{{zyxyyzywwwxxxyyyzyyyxxwwwwxxxxwvvvvvwwxy{{{|}~|{{€‚‚‚€‚ƒƒƒƒ‚‚ƒ„„„ƒƒƒ‚‚„„ƒƒƒƒ‚‚‚‚‚ƒƒƒ„„ƒƒƒ‚‚ƒƒƒ‚‚ƒƒƒƒ„…ƒ„„„ƒƒ„„…‚€€|{{}~€€€~€€€€~€‚‚€~}{z{~‚…†…„‚„ƒ}}}}~}{{{}€†…„ƒ‚‚‚‚ƒƒƒƒƒƒƒƒƒ„ƒ„ƒ„ƒ„„ƒƒƒƒƒƒ„ƒ„ƒ„ƒ„ƒ„ƒƒƒƒƒƒƒƒ‚„…†…„‚€€}}~~~}~}|}‚‚€€‚€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€~€€€€‚‚‚‚‚‚‚‚‚‚ƒƒ‚‚‚ƒƒƒƒƒƒƒƒƒƒ„„„„ƒ‚€~}€€€€~}}~~}}}~~~~~€€€~~~€~€€‚€€‚€€€€€€€€€€€‚ƒ‚€€~€€€€~~~~~~~~}}}~~~€€}|{{{|~~~€€€€~~~€€~~~~~~~~~€€€~~~~~€‚€€€€||€~€€€€€€€€€€€€€€€€€€€€€~~€ƒƒ‚‚ƒƒƒ€€€~‚‚‚‚‚‚€€€€€€€€€€€€€€€€~~~~~~~~}}}}~~~~|||{{zzzzyxyyyyxyxyxyxyxxxxxxxxxwwwwwwwwwwwwwwxx{{|||{{{~€€€‚‚‚‚ƒƒƒƒƒƒƒ‚‚ƒƒƒ„„„ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ‚‚‚‚‚‚‚‚„„„„„„„„ƒ€}|{|€€€€€€€€€€€€€€€~~€€}|{|}~}„……„„‚ƒƒ‚}||||{{}€ƒ…†…„ƒ‚‚‚‚‚ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ„„„„ƒƒƒƒ†„‚‚ƒƒƒƒ‚„‡†‚€~~}~~}~€‚‚‚‚€€‚‚‚‚€€‚‚‚€‚‚‚‚‚€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€‚‚‚‚‚ƒƒƒ‚‚ƒƒ‚‚‚ƒƒƒƒƒƒƒƒƒƒƒ„„„ƒ‚‚€€€€~~}}~~~}}}}~~~~~€€€~~€~€€~~~€€€€€€€€€€€€€€€‚ƒ‚€€~€€~~~~~~~~€€€~~}}}€€€€€~}|}}}€€€€€~~~€€€€€~~~~~~~~~~~€€€‚€}|€€€~€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€~}~€€€ƒƒ‚‚‚‚‚‚‚‚~€‚‚‚‚‚‚‚‚‚€€€€€€€€€€€€€€€€~~~~~~~~}}}}}|||{{zzzyxyyyyxxyxyxyxyxxxxxxxxwwwwwwwwwwwwwwxxz{||{|||€€€€‚‚‚‚ƒƒƒƒƒƒƒ‚‚ƒƒƒ„„„ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ‚ƒ‚ƒ‚ƒ„„„„„„„„ƒ‚€€}|{|~€€€€€€€€€€€€€€€€€€~}|{{||}|}€‚ƒƒ‚‚}||||{{}€ƒ…††„ƒ‚‚‚‚ƒ‚ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ„„„„ƒƒƒƒ…„‚‚‚ƒƒƒƒ‚„‡†‚~~~~~~}}}~€€‚‚‚€€‚‚‚‚‚‚€‚‚‚‚‚€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€‚‚ƒƒ„„‚‚ƒ‚‚‚‚ƒƒƒƒ‚ƒƒƒƒƒƒ„„„ƒ‚ƒ‚€~~}}}}|}}~~~~~~€€€€€€~€~~~~€€€‚‚€€€€€€€€€‚ƒ‚€€€€€€~~~~~~~~~€~~~~~€€€€€€€€€€~€€€€€€€~~~€€€€~~~~~~~~~~~~}}€€€€€€€€||€~~€€€€€€€€€€€€€€€€€€€€€€€}}~€€ƒƒ‚‚‚‚€‚‚‚‚‚‚‚‚‚‚‚‚€€€€€€€€€€€€€€€€€€~~}~~~~}}}}}|||{{{zzyxyyyyxyxyxyxyxyyxxxxwwwwwwwwwwwwwvwwxxyz||||}~€€€€‚‚‚‚ƒƒƒƒ„ƒƒƒƒƒƒ„„„ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ„„„„„„„„ƒ‚€€~|{|~~~~€€€€€€€€€€€€€€€€€€€€{{{{||||{|~€~}€€~}||||{{}€ƒ…‡†„ƒ‚‚‚‚‚ƒƒƒƒ„„„„„„„„„„„„„„„„„„„ƒ„ƒƒƒ…„‚‚ƒƒƒƒ‚„††‚}}~~~}}~~€‚‚‚€‚‚‚‚‚€‚€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€‚‚€€€€€€€‚‚‚‚‚‚‚‚‚‚‚ƒƒ‚ƒ‚ƒ‚ƒ‚ƒƒ„ƒƒ‚‚‚€€€€€€€€~}}}}}}~~~~~~~€€€€€€€€€€€€€€€€€€€€€€€€€€‚‚‚€€€€€€€~~~~~~€~~~~~€€€€€€€€€€€€€€€€€€€~~~€€€€€€~~~~~~~~€~~~}€€€€€‚€}|€~€€€€€€€€€€€€€€€€€€€€~}}~ƒƒ€€€€€€€€€‚€‚‚‚‚‚‚‚‚‚‚€€€€€€€€€€€€€€€€€€€€~~~}~~}}||||{{zzzzzyxyyyyxxyxyxyxyyyyxxwwwwwwwwwwwwwwwwxxxyz{|{|~€€€€€€€€‚‚‚‚‚ƒƒƒ„„ƒƒƒƒ„„ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ„„„„„„„„ƒ‚€€€€~}|}}~}~€~€€€€€€€€€€~~z{{}}}}}|}~~~}|}€€~}|}||{{}€ƒ…‡†…ƒ‚‚‚‚‚‚‚ƒ‚ƒƒƒƒƒƒƒƒƒƒƒ„„„„„„„„„„ƒ„ƒ„ƒƒ…„‚‚‚ƒƒƒƒ‚„‡†‚~~~}~~~€‚‚‚€‚‚‚‚‚€‚‚‚€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€‚ƒ‚ƒ‚‚€€€‚‚‚‚‚‚‚‚‚‚ƒ‚ƒ‚ƒ‚‚‚ƒƒƒƒ‚‚€€€€~€€€€€€~}~}}}~~~~~~~~~€€€€€€€€€€€€€€‚€€€‚€€€€€€€€‚‚‚€€~~~~~~~~~~~~~~€€€€€€€€€€€€€€€€€€€€~~~€€~~€‚‚~~~€€€||€~~~~~~€€€€€€€€€€€€€€€€~}~ƒƒ€€€€€€€€€‚‚‚‚‚‚‚‚‚‚€€€€€€€€€€€€€€€€€€~~~~~}}||{{{zzyyyzyxyyyyxyxyxyxyxyyyxxwwwwwwwwwwwwwwvwwxxyz||{|~€€€€€€€‚‚‚ƒƒƒ„ƒƒƒƒƒƒ„ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ„ƒ„ƒ„ƒƒƒƒƒƒƒƒƒ„‚€€}|}~}~~€€€€€€€€€~~||}~~~~~~}}€€~}|}||{{}€ƒ…‡†…„ƒ‚‚‚‚‚‚‚ƒ‚ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ„ƒ„ƒ„„„ƒƒ‚ƒƒƒ‚ƒ‚„††‚~~~~~~}}~~€‚‚‚€€‚‚‚‚‚€‚‚‚‚€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€~~€‚‚ƒƒƒ‚€€€€€‚‚‚‚‚ƒ‚‚‚‚ƒ‚‚‚‚‚‚‚‚‚‚‚ƒƒƒƒ‚€€€~€€€}~}~}}~~~~~~~€€€€€€€€€€€€€€€€€€€€€‚‚€‚‚‚~~~}}}}~~~~~€~~~~~€€€€€€~~~~€€€€€~~~€€€€€€€€€€€~~~~€€‚‚‚€}|€~~~~€€€€€€€€€€€€€€€€~~€€€€€~~~€‚ƒ€€€‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚€€€€€€€€€€€€€€€€€€€€~~~~~~}}}}{{{{zzyyzyxyyyyxxyxyxyxyyyxxxxwwwwwwwwwwwwwwwwxxy{||z{~€€€€€‚‚ƒƒƒƒƒ‚‚‚‚ƒƒƒƒƒƒƒƒ„„ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ„ƒƒƒƒƒƒƒƒƒƒƒƒ„ƒ€}|}~~~€‚‚€€€€€€€~~€€€€€€€€€€~}||||{{}€ƒ…ˆ‡…„ƒ‚‚‚‚‚‚ƒ‚ƒƒƒ‚‚‚‚‚‚‚‚ƒƒƒƒƒƒƒƒƒƒƒ„ƒ„„„„ƒ‚ƒƒ„ƒ‚ƒ‚„‡†‚€~}}}~~}}}}~€€‚‚‚‚‚€‚‚‚‚‚€€‚€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€~~~~~~€‚‚‚‚€‚‚‚‚ƒ‚‚‚ƒƒ‚‚‚‚‚‚‚‚‚‚‚‚ƒƒƒ‚€€€€~~€€~~~~}}~~~~~~~~~~}€€€€€€€€€€€€€€€€€€€‚€‚‚‚‚€~~~~~~~~~~~~~~~}~~~€€~~}|{{||}~€€€€~~~€€€€€€€~~~€~€‚‚‚€||€}}~~€€€€€€€€€€€€€€€€€€€€€€€€€€€€€~~€€€€‚ƒ€‚‚‚‚‚€€‚‚‚‚‚‚‚‚‚‚€€€€€€€€€€€€€€€€€~~~~~~~}}}}|||{{zzzzyxyyyyxyxyxyxyxxxxxxxxxwwwwwwwwwwwwwwxxz|}|z{~‚€€€€€‚‚ƒƒƒƒ‚‚‚‚‚‚ƒƒƒƒƒƒ„„„ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ‚‚‚‚‚‚‚‚„ƒ‚€}|}‚€€€€€€€€‚‚€€€~~~€€€€‚‚}||||{{}€ƒ…ˆ‡†„ƒƒƒƒ‚‚‚‚ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ„„„„„ƒƒƒ„ƒƒ‚ƒ‚„‡†‚ƒ‚€~~~}}|}~€€‚‚€‚‚€‚‚‚‚‚€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€}~~~~~~~}~€€€‚‚‚€€€‚‚ƒ‚‚‚ƒƒ‚‚‚‚‚‚‚‚‚‚‚ƒƒ‚‚‚€€€€~€€€~}}}~~~~~~~}}€€€€€€€€€‚‚€€€€‚‚€€€€€€€‚€‚ƒ‚‚‚€€€€~~~~~€€~~~~~|}}~~€€~~~~|zyzz{|~€€€€~~~€€€€€€~~~~~~~~~~~~~€€€€~~€‚‚‚€||€{|}~€~~~‚‚€€€~~€€€€€€€€€€€€€€€€€€€€€€‚‚‚‚€€€‚€€‚‚‚‚‚‚‚‚€€€€€€€€€€€€€€€€}}}}~~~~}}}||{{{zyxyyyyxxyxyxyxyxxxxxxxxwwwwwwwwwwwwwwxx{|}|zz~‚€€€€‚‚ƒƒƒ‚‚‚‚‚‚ƒƒƒƒƒ„„„ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ‚‚‚‚‚‚‚‚…ƒ~|~€€€€~~~}€€€€‚‚‚€‚}}}€€€€€€‚‚‚ƒƒ‚}||||{{}€ƒ…ˆ‡†„ƒƒƒƒ‚‚‚‚ƒƒƒƒƒƒƒƒƒƒƒƒ„„„„„„„„ƒƒƒƒ„„„„„ƒƒƒ„„‚ƒ‚„‡†‚………„ƒ~~}|||~€€‚‚€‚‚‚€‚‚‚‚‚€€‚€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€~}}~€€€€€€€€€‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚€€€€€€€€€€€€€€€€~~~~~~~~€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€~~}}~~||||||||~~~}}}}xxwxz|€~~|}}~€€€€€€€€€€€€€€€€€€€€€€€€€€~~~~~~~~€€€€€€€€‚€~~}}}}}}}}~~~~~~~~€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€‚‚‚‚‚‚‚‚€€€€€€€€‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚€€€€€€€€€€€€€€€€€~~}}}}}}}}}}}}}}||{{{yyyyyyyyyyyyyyyyxxxxxxxxvvvvvvvvxxxxxxxxz{{|}~~~€€€€€€€€‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ‚‚€~~~~~~~~~~~~~~~~€€€€€€€€‚‚‚‚‚‚‚‚ƒƒƒ‚‚‚€‚‚ƒ†††…‚|z||{|}‚„‡‡†…„ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚„„„„„„„„‚‚‚‚‚‚‚‚‚„…†„‚ƒ„…††…„ƒƒ}}ƒ‚‚‚‚‚‚‚‚€€€€€€€€‚‚‚‚‚‚‚‚€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€~~€€€€€€€€€€‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚€€€€€€€€€€€€€€€€~~~~~~€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€~}}||}}~}}}}}}}}~~}}}|||{{z{|~€‚€€~~}}~~€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€‚€~~||||||||€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€‚‚‚‚‚€€€€€€€€‚‚‚‚‚‚‚‚‚‚€€€€€€€€€€€€€€€€€€€~~~}}}}}}}}|||{{{zzyyyyyyyyyyyyyyyywxwxwxwxxxxxxxxxwwwwwwww{||}~~€€€€€€€€‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒƒ‚€€€€€€€€€ƒ‚‚‚€€‚‚‚………„‚|z}}|}}€‚ƒ…„„ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒƒƒƒƒƒƒƒ‚‚‚‚‚‚‚‚‚ƒ…„ƒ‚„…†‡‡†…„‚~~‚€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€~€€~~~~~~~~€€€€€~~}€‚ƒ~~~€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€~€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€}}}~€€€€€€€€€€€€‚‚‚€€€€€€€€€€€€€€€€€€€€€€€€€€€€€‚‚€‚‚€~~‚€€€€€€€‚‚‚‚‚‚‚‚€‚ƒƒ‚€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€‚€€€~€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€~€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€‚€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€~€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€‚€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€~~€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€~‚€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€‚‚‚€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€‚‚‚‚‚‚‚‚€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€‚‚‚‚€€€€€€€€~~€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€‚€€€€€€‚ƒ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ \ No newline at end of file diff --git a/EXE version/main/pygame/fastevent.cp39-win_amd64.pyd b/EXE version/main/pygame/fastevent.cp39-win_amd64.pyd new file mode 100644 index 00000000..641a1897 Binary files /dev/null and b/EXE version/main/pygame/fastevent.cp39-win_amd64.pyd differ diff --git a/EXE version/main/pygame/fastevent.pyi b/EXE version/main/pygame/fastevent.pyi new file mode 100644 index 00000000..c42cbe84 --- /dev/null +++ b/EXE version/main/pygame/fastevent.pyi @@ -0,0 +1,10 @@ +from typing import List +from pygame.event import Event + +def init() -> None: ... +def get_init() -> bool: ... +def pump() -> None: ... +def wait() -> Event: ... +def pool() -> Event: ... +def get() -> List[Event]: ... +def post(event: Event) -> None: ... diff --git a/EXE version/main/pygame/font.cp39-win_amd64.pyd b/EXE version/main/pygame/font.cp39-win_amd64.pyd new file mode 100644 index 00000000..e2af60cd Binary files /dev/null and b/EXE version/main/pygame/font.cp39-win_amd64.pyd differ diff --git a/EXE version/main/pygame/font.pyi b/EXE version/main/pygame/font.pyi new file mode 100644 index 00000000..11d2fdbe --- /dev/null +++ b/EXE version/main/pygame/font.pyi @@ -0,0 +1,59 @@ +import sys +from typing import Any, List, Optional, Union, Tuple, IO, Hashable, Iterable + +if sys.version_info >= (3, 6): + from os import PathLike + + AnyPath = Union[str, bytes, PathLike[str], PathLike[bytes]] +else: + AnyPath = Union[Text, bytes] + +from pygame.color import Color +from pygame.surface import Surface + +_ColorValue = Union[ + Color, str, Tuple[int, int, int], List[int], int, Tuple[int, int, int, int] +] + +def init() -> None: ... +def quit() -> None: ... +def get_init() -> bool: ... +def get_default_font() -> str: ... +def get_fonts() -> List[str]: ... +def match_font( + name: Union[str, bytes, Iterable[Union[str, bytes]]], + bold: Hashable = False, + italic: Hashable = False, +) -> str: ... +def SysFont( + name: Union[str, bytes, Iterable[Union[str, bytes]]], + size: int, + bold: Hashable = False, + italic: Hashable = False, +) -> Font: ... + +class Font(object): + + bold: bool + italic: bool + underline: bool + def __init__(self, name: Union[AnyPath, IO[Any], None], size: int) -> None: ... + def render( + self, + text: str, + antialias: bool, + color: _ColorValue, + background: Optional[_ColorValue] = None, + ) -> Surface: ... + def size(self, text: str) -> Tuple[int, int]: ... + def set_underline(self, value: bool) -> None: ... + def get_underline(self) -> bool: ... + def set_bold(self, value: bool) -> None: ... + def get_bold(self) -> bool: ... + def set_italic(self, value: bool) -> None: ... + def metrics(self, text: str) -> List[Tuple[int, int, int, int, int]]: ... + def get_italic(self) -> bool: ... + def get_linesize(self) -> int: ... + def get_height(self) -> int: ... + def get_ascent(self) -> int: ... + def get_descent(self) -> int: ... diff --git a/EXE version/main/pygame/freesansbold.ttf b/EXE version/main/pygame/freesansbold.ttf new file mode 100644 index 00000000..a98562fc Binary files /dev/null and b/EXE version/main/pygame/freesansbold.ttf differ diff --git a/EXE version/main/pygame/freetype.pyi b/EXE version/main/pygame/freetype.pyi new file mode 100644 index 00000000..4b3ce1f9 --- /dev/null +++ b/EXE version/main/pygame/freetype.pyi @@ -0,0 +1,132 @@ +import sys +from typing import Tuple, Optional, Union, List, Text, IO, Sequence, Any, Iterable + +if sys.version_info >= (3, 6): + from os import PathLike + + AnyPath = Union[str, bytes, PathLike[str], PathLike[bytes]] +else: + AnyPath = Union[Text, bytes] + +from pygame.surface import Surface +from pygame.color import Color +from pygame.rect import Rect +from pygame.font import Font + +_ColorValue = Union[ + Color, str, Tuple[int, int, int], List[int], int, Tuple[int, int, int, int] +] + +def get_error() -> str: ... +def get_version() -> Tuple[int, int, int]: ... +def init(cache_size: int = 64, resolution: int = 72) -> None: ... +def quit() -> None: ... +def get_init() -> bool: ... +def was_init() -> bool: ... +def get_cache_size() -> int: ... +def get_default_resolution() -> int: ... +def set_default_resolution(resolution: int) -> None: ... +def SysFont( + name: Union[str, bytes, Iterable[Union[str, bytes]]], + size: int, + bold: int = False, + italic: int = False, +) -> Font: ... +def get_default_font() -> str: ... + +STYLE_NORMAL: int +STYLE_UNDERLINE: int +STYLE_OBLIQUE: int +STYLE_STRONG: int +STYLE_WIDE: int +STYLE_DEFAULT: int + +class Font: + name: str + path: Text + size: Union[float, Tuple[float, float]] + height: int + ascender: int + descender: int + style: int + underline: bool + strong: bool + oblique: bool + wide: bool + strength: float + underline_adjustment: float + fixed_width: bool + fixed_sizes: int + scalable: bool + use_bitmap_strikes: bool + antialiased: bool + kerning: bool + vertical: bool + rotation: int + fgcolor: Color + bgcolor: Color + origin: bool + pad: bool + ucs4: bool + resolution: int + def __init__( + self, + file: Union[AnyPath, IO[Any], None], + size: float = 0, + font_index: int = 0, + resolution: int = 0, + ucs4: int = False, + ) -> None: ... + def get_rect( + self, + text: str, + style: int = STYLE_DEFAULT, + rotation: int = 0, + size: float = 0, + ) -> Rect: ... + def get_metrics( + self, text: str, size: float = 0 + ) -> List[Tuple[int, int, int, int, float, float]]: ... + def get_sized_ascender(self, size: float) -> int: ... + def get_sized_descender(self, size: float) -> int: ... + def get_sized_height(self, size: float) -> int: ... + def get_sized_glyph_height(self, size: float) -> int: ... + def get_sizes(self) -> List[Tuple[int, int, int, float, float]]: ... + def render( + self, + text: str, + fgcolor: Optional[_ColorValue] = None, + bgcolor: Optional[_ColorValue] = None, + style: int = STYLE_DEFAULT, + rotation: int = 0, + size: float = 0, + ) -> Tuple[Surface, Rect]: ... + def render_to( + self, + surf: Surface, + dest: Union[Tuple[int, int], Sequence[int], Rect], + text: str, + fgcolor: Optional[_ColorValue] = None, + bgcolor: Optional[_ColorValue] = None, + style: int = STYLE_DEFAULT, + rotation: int = 0, + size: float = 0, + ) -> Rect: ... + def render_raw( + self, + text: str, + style: int = STYLE_DEFAULT, + rotation: int = 0, + size: float = 0, + invert: bool = False, + ) -> Tuple[bytes, Tuple[int, int]]: ... + def render_raw_to( + self, + array: Any, + text: str, + dest: Optional[Union[Tuple[int, int], List[int]]] = None, + style: int = STYLE_DEFAULT, + rotation: int = 0, + size: float = 0, + invert: bool = False, + ) -> Rect: ... diff --git a/EXE version/main/pygame/gfxdraw.pyi b/EXE version/main/pygame/gfxdraw.pyi new file mode 100644 index 00000000..027e3b30 --- /dev/null +++ b/EXE version/main/pygame/gfxdraw.pyi @@ -0,0 +1,108 @@ +from typing import Union, Tuple, List, Sequence +from typing_extensions import Protocol + +from pygame.surface import Surface +from pygame.math import Vector2 +from pygame.color import Color +from pygame.rect import Rect + +_ColorValue = Union[ + Color, Tuple[int, int, int], List[int], int, Tuple[int, int, int, int] +] +_Coordinate = Union[Tuple[float, float], List[float], Vector2] +_CanBeRect = Union[ + Rect, + Tuple[int, int, int, int], List[int], + Tuple[_Coordinate, _Coordinate], List[_Coordinate] +] +class _HasRectAttribute(Protocol): + rect: _CanBeRect +_RectValue = Union[ + _CanBeRect, _HasRectAttribute +] + +def pixel(surface: Surface, x: int, y: int, color: _ColorValue) -> None: ... +def hline(surface: Surface, x1: int, x2: int, y: int, color: _ColorValue) -> None: ... +def vline(surface: Surface, x: int, y1: int, y2: int, color: _ColorValue) -> None: ... +def line( + surface: Surface, x1: int, y1: int, x2: int, y2: int, color: _ColorValue +) -> None: ... +def rectangle(surface: Surface, rect: _RectValue, color: _ColorValue) -> None: ... +def box(surface: Surface, rect: _RectValue, color: _ColorValue) -> None: ... +def circle(surface: Surface, x: int, y: int, r: int, color: _ColorValue) -> None: ... +def aacircle(surface: Surface, x: int, y: int, r: int, color: _ColorValue) -> None: ... +def filled_circle( + surface: Surface, x: int, y: int, r: int, color: _ColorValue +) -> None: ... +def ellipse( + surface: Surface, x: int, y: int, rx: int, ry: int, color: _ColorValue +) -> None: ... +def aaellipse( + surface: Surface, x: int, y: int, rx: int, ry: int, color: _ColorValue +) -> None: ... +def filled_ellipse( + surface: Surface, x: int, y: int, rx: int, ry: int, color: _ColorValue +) -> None: ... +def arc( + surface: Surface, + x: int, + y: int, + r: int, + start_angle: int, + atp_angle: int, + color: _ColorValue, +) -> None: ... +def pie( + surface: Surface, + x: int, + y: int, + r: int, + start_angle: int, + atp_angle: int, + color: _ColorValue, +) -> None: ... +def trigon( + surface: Surface, + x1: int, + y1: int, + x2: int, + y2: int, + x3: int, + y3: int, + color: _ColorValue, +) -> None: ... +def aatrigon( + surface: Surface, + x1: int, + y1: int, + x2: int, + y2: int, + x3: int, + y3: int, + color: _ColorValue, +) -> None: ... +def filled_trigon( + surface: Surface, + x1: int, + y1: int, + x2: int, + y2: int, + x3: int, + y3: int, + color: _ColorValue, +) -> None: ... +def polygon( + surface: Surface, points: Sequence[_Coordinate], color: _ColorValue +) -> None: ... +def aapolygon( + surface: Surface, points: Sequence[_Coordinate], color: _ColorValue +) -> None: ... +def filled_polygon( + surface: Surface, points: Sequence[_Coordinate], color: _ColorValue +) -> None: ... +def textured_polygon( + surface: Surface, points: Sequence[_Coordinate], texture: Surface, tx: int, ty: int +) -> None: ... +def bezier( + surface: Surface, points: Sequence[_Coordinate], steps: int, color: _ColorValue +) -> None: ... diff --git a/EXE version/main/pygame/image.cp39-win_amd64.pyd b/EXE version/main/pygame/image.cp39-win_amd64.pyd new file mode 100644 index 00000000..54cadd6d Binary files /dev/null and b/EXE version/main/pygame/image.cp39-win_amd64.pyd differ diff --git a/EXE version/main/pygame/image.pyi b/EXE version/main/pygame/image.pyi new file mode 100644 index 00000000..7c2a623a --- /dev/null +++ b/EXE version/main/pygame/image.pyi @@ -0,0 +1,40 @@ +import sys +from typing import Any, Optional, Tuple, List, Union, IO, Literal + +from pygame.surface import Surface +from pygame.bufferproxy import BufferProxy + +if sys.version_info >= (3, 6): + from os import PathLike + + AnyPath = Union[str, bytes, PathLike[str], PathLike[bytes]] +else: + AnyPath = Union[Text, bytes] + +_BufferStyle = Union[BufferProxy, bytes, bytearray, memoryview] +_to_string_format = Literal[ + "p", "RGB", "RGBX", "RGBA", "ARGB", "RGBA_PREMULT", "ARGB_PREMULT" +] +_from_buffer_format = Literal["p", "RGB", "BGR", "RGBX", "RGBA", "ARGB"] +_from_string_format = Literal["p", "RGB", "RGBX", "RGBA", "ARGB"] + +def load(filename: Union[AnyPath, IO[Any]], namehint: str = "") -> Surface: ... +def save( + surface: Surface, filename: Union[AnyPath, IO[Any]], namehint: str = "" +) -> None: ... +def get_sdl_image_version() -> Union[None, Tuple[int, int, int]]: ... +def get_extended() -> bool: ... +def tostring( + surface: Surface, format: _to_string_format, flipped: bool = False +) -> str: ... +def fromstring( + string: str, + size: Union[List[int], Tuple[int, int]], + format: _from_string_format, + flipped: bool = False, +) -> Surface: ... +def frombuffer( + bytes: _BufferStyle, + size: Union[List[int], Tuple[int, int]], + format: _from_buffer_format, +) -> Surface: ... diff --git a/EXE version/main/pygame/imageext.cp39-win_amd64.pyd b/EXE version/main/pygame/imageext.cp39-win_amd64.pyd new file mode 100644 index 00000000..d1952f77 Binary files /dev/null and b/EXE version/main/pygame/imageext.cp39-win_amd64.pyd differ diff --git a/EXE version/main/pygame/joystick.cp39-win_amd64.pyd b/EXE version/main/pygame/joystick.cp39-win_amd64.pyd new file mode 100644 index 00000000..3c036252 Binary files /dev/null and b/EXE version/main/pygame/joystick.cp39-win_amd64.pyd differ diff --git a/EXE version/main/pygame/joystick.pyi b/EXE version/main/pygame/joystick.pyi new file mode 100644 index 00000000..489ffc05 --- /dev/null +++ b/EXE version/main/pygame/joystick.pyi @@ -0,0 +1,25 @@ +from typing import Tuple + +def init() -> None: ... +def quit() -> None: ... +def get_init() -> bool: ... +def get_count() -> int: ... + +class Joystick(object): + def __init__(self, id: int) -> None: ... + def init(self) -> None: ... + def quit(self) -> None: ... + def get_init(self) -> bool: ... + def get_id(self) -> int: ... + def get_instance_id(self) -> int: ... + def get_guid(self) -> str: ... + def get_power_level(self) -> str: ... + def get_name(self) -> str: ... + def get_numaxes(self) -> int: ... + def get_axis(self, axis_number: int) -> float: ... + def get_numballs(self) -> int: ... + def get_ball(self, ball_number: int) -> Tuple[float, float]: ... + def get_numbuttons(self) -> int: ... + def get_button(self, button: int) -> bool: ... + def get_numhats(self) -> int: ... + def get_hat(self, hat_number: int) -> Tuple[float, float]: ... diff --git a/EXE version/main/pygame/key.cp39-win_amd64.pyd b/EXE version/main/pygame/key.cp39-win_amd64.pyd new file mode 100644 index 00000000..c3dc84ec Binary files /dev/null and b/EXE version/main/pygame/key.cp39-win_amd64.pyd differ diff --git a/EXE version/main/pygame/key.pyi b/EXE version/main/pygame/key.pyi new file mode 100644 index 00000000..992fa8c7 --- /dev/null +++ b/EXE version/main/pygame/key.pyi @@ -0,0 +1,30 @@ +from typing import Sequence, Optional, Tuple, Union, List +from typing_extensions import Protocol +from pygame.math import Vector2 +from pygame.rect import Rect + +_Coordinate = Union[Tuple[float, float], List[float], Vector2] +_CanBeRect = Union[ + Rect, + Tuple[int, int, int, int], + List[int], + Tuple[_Coordinate, _Coordinate], + List[_Coordinate], +] + +class _HasRectAttribute(Protocol): + rect: _CanBeRect + +_RectValue = Union[_CanBeRect, _HasRectAttribute] + +def get_focused() -> bool: ... +def get_pressed() -> Sequence[bool]: ... +def get_mods() -> int: ... +def set_mods(mods: int) -> None: ... +def set_repeat(delay: int = 0, interval: int = 0) -> None: ... +def get_repeat() -> Tuple[int, int]: ... +def name(key: int) -> str: ... +def key_code(name: str) -> int: ... +def start_text_input() -> None: ... +def stop_text_input() -> None: ... +def set_text_input_rect(rect: _RectValue) -> None: ... diff --git a/EXE version/main/pygame/libFLAC-8.dll b/EXE version/main/pygame/libFLAC-8.dll new file mode 100644 index 00000000..71f2e19d Binary files /dev/null and b/EXE version/main/pygame/libFLAC-8.dll differ diff --git a/EXE version/main/pygame/libfreetype-6.dll b/EXE version/main/pygame/libfreetype-6.dll new file mode 100644 index 00000000..16ef7771 Binary files /dev/null and b/EXE version/main/pygame/libfreetype-6.dll differ diff --git a/EXE version/main/pygame/libjpeg-9.dll b/EXE version/main/pygame/libjpeg-9.dll new file mode 100644 index 00000000..9a05528e Binary files /dev/null and b/EXE version/main/pygame/libjpeg-9.dll differ diff --git a/EXE version/main/pygame/libmodplug-1.dll b/EXE version/main/pygame/libmodplug-1.dll new file mode 100644 index 00000000..7c051267 Binary files /dev/null and b/EXE version/main/pygame/libmodplug-1.dll differ diff --git a/EXE version/main/pygame/libmpg123-0.dll b/EXE version/main/pygame/libmpg123-0.dll new file mode 100644 index 00000000..c7809b16 Binary files /dev/null and b/EXE version/main/pygame/libmpg123-0.dll differ diff --git a/EXE version/main/pygame/libogg-0.dll b/EXE version/main/pygame/libogg-0.dll new file mode 100644 index 00000000..51334815 Binary files /dev/null and b/EXE version/main/pygame/libogg-0.dll differ diff --git a/EXE version/main/pygame/libopus-0.dll b/EXE version/main/pygame/libopus-0.dll new file mode 100644 index 00000000..9ba6c386 Binary files /dev/null and b/EXE version/main/pygame/libopus-0.dll differ diff --git a/EXE version/main/pygame/libopusfile-0.dll b/EXE version/main/pygame/libopusfile-0.dll new file mode 100644 index 00000000..97a88b61 Binary files /dev/null and b/EXE version/main/pygame/libopusfile-0.dll differ diff --git a/EXE version/main/pygame/libpng16-16.dll b/EXE version/main/pygame/libpng16-16.dll new file mode 100644 index 00000000..709f7244 Binary files /dev/null and b/EXE version/main/pygame/libpng16-16.dll differ diff --git a/EXE version/main/pygame/libtiff-5.dll b/EXE version/main/pygame/libtiff-5.dll new file mode 100644 index 00000000..fc8a7c0c Binary files /dev/null and b/EXE version/main/pygame/libtiff-5.dll differ diff --git a/EXE version/main/pygame/libvorbis-0.dll b/EXE version/main/pygame/libvorbis-0.dll new file mode 100644 index 00000000..f5ae1bf7 Binary files /dev/null and b/EXE version/main/pygame/libvorbis-0.dll differ diff --git a/EXE version/main/pygame/libvorbisfile-3.dll b/EXE version/main/pygame/libvorbisfile-3.dll new file mode 100644 index 00000000..d0787368 Binary files /dev/null and b/EXE version/main/pygame/libvorbisfile-3.dll differ diff --git a/EXE version/main/pygame/libwebp-7.dll b/EXE version/main/pygame/libwebp-7.dll new file mode 100644 index 00000000..fad57b22 Binary files /dev/null and b/EXE version/main/pygame/libwebp-7.dll differ diff --git a/EXE version/main/pygame/mask.cp39-win_amd64.pyd b/EXE version/main/pygame/mask.cp39-win_amd64.pyd new file mode 100644 index 00000000..c20977ff Binary files /dev/null and b/EXE version/main/pygame/mask.cp39-win_amd64.pyd differ diff --git a/EXE version/main/pygame/mask.pyi b/EXE version/main/pygame/mask.pyi new file mode 100644 index 00000000..8128efae --- /dev/null +++ b/EXE version/main/pygame/mask.pyi @@ -0,0 +1,78 @@ +from typing import Any, Optional, Union, Text, Tuple, List, TypeVar, Sequence +from typing_extensions import Protocol + +from pygame.math import Vector2 +from pygame.surface import Surface +from pygame.rect import Rect +from pygame.color import Color + +_ColorValue = Union[ + Color, Tuple[int, int, int], List[int], int, Tuple[int, int, int, int] +] +_ToSurfaceColorValue = Union[ + Color, Tuple[int, int, int], List[int], int, Text, Tuple[int, int, int, int] +] +_Coordinate = Union[Tuple[float, float], List[float], Vector2] +_CanBeRect = Union[ + Rect, + Tuple[int, int, int, int], + List[int], + Tuple[_Coordinate, _Coordinate], + List[_Coordinate], +] + +class _HasRectAttribute(Protocol): + rect: _CanBeRect + +_RectValue = Union[_CanBeRect, _HasRectAttribute] +_Offset = TypeVar("_Offset", Tuple[int, int], Sequence[int]) + +def from_surface(surface: Surface, threshold: int = 127) -> Mask: ... +def from_threshold( + surface: Surface, + color: _ColorValue, + threshold: _ColorValue = (0, 0, 0, 255), + other_surface: Optional[Surface] = None, + palette_colors: int = 1, +) -> Mask: ... + +class Mask: + def __init__(self, size: _Coordinate, fill: bool = False) -> None: ... + def copy(self) -> Mask: ... + def get_size(self) -> Tuple[int, int]: ... + def get_rect(self, **kwargs: Any) -> Rect: ... # Dict type needs to be completed + def get_at(self, pos: _Coordinate) -> int: ... + def set_at(self, pos: _Coordinate, value: int = 1) -> None: ... + def overlap(self, other: Mask, offset: _Offset) -> Union[Tuple[int, int], None]: ... + def overlap_area(self, other: Mask, offset: _Coordinate) -> int: ... + def overlap_mask(self, other: Mask, offset: _Coordinate) -> Mask: ... + def fill(self) -> None: ... + def clear(self) -> None: ... + def invert(self) -> None: ... + def scale(self, size: _Coordinate) -> Mask: ... + def draw(self, other: Mask, offset: _Coordinate) -> None: ... + def erase(self, other: Mask, offset: _Coordinate) -> None: ... + def count(self) -> int: ... + def centroid(self) -> Tuple[int, int]: ... + def angle(self) -> float: ... + def outline(self, every: int = 1) -> List[Tuple[int, int]]: ... + def convolve( + self, + other: Mask, + output: Optional[Mask] = None, + offset: _Coordinate = (0, 0), + ) -> Mask: ... + def connected_component( + self, pos: Union[List[int], Tuple[int, int]] = ... + ) -> Mask: ... + def connected_components(self, minimum: int = 0) -> List[Mask]: ... + def get_bounding_rects(self) -> Rect: ... + def to_surface( + self, + surface: Optional[Surface] = None, + setsurface: Optional[Surface] = None, + unsetsurface: Optional[Surface] = None, + setcolor: _ToSurfaceColorValue = (255, 255, 255, 255), + unsetcolor: _ToSurfaceColorValue = (0, 0, 0, 255), + dest: Union[_RectValue, _Coordinate] = (0, 0), + ) -> Surface: ... diff --git a/EXE version/main/pygame/math.cp39-win_amd64.pyd b/EXE version/main/pygame/math.cp39-win_amd64.pyd new file mode 100644 index 00000000..a3cec530 Binary files /dev/null and b/EXE version/main/pygame/math.cp39-win_amd64.pyd differ diff --git a/EXE version/main/pygame/math.pyi b/EXE version/main/pygame/math.pyi new file mode 100644 index 00000000..07fc4ee9 --- /dev/null +++ b/EXE version/main/pygame/math.pyi @@ -0,0 +1,268 @@ +from typing import Optional, Union, Tuple, List, overload, Sequence + +class _VectorElementwiseProxy2: + def __add__( + self, other: Union[float, Vector2, _VectorElementwiseProxy2] + ) -> Vector2: ... + def __radd__( + self, other: Union[float, Vector2, _VectorElementwiseProxy2] + ) -> Vector2: ... + def __sub__( + self, other: Union[float, Vector2, _VectorElementwiseProxy2] + ) -> Vector2: ... + def __rsub__( + self, other: Union[float, Vector2, _VectorElementwiseProxy2] + ) -> Vector2: ... + def __mul__( + self, other: Union[float, Vector2, _VectorElementwiseProxy2] + ) -> Vector2: ... + def __rmul__( + self, other: Union[float, Vector2, _VectorElementwiseProxy2] + ) -> Vector2: ... + def __truediv__( + self, other: Union[float, Vector2, _VectorElementwiseProxy2] + ) -> Vector2: ... + def __rtruediv__( + self, other: Union[float, Vector2, _VectorElementwiseProxy2] + ) -> Vector2: ... + def __floordiv__( + self, other: Union[float, Vector2, _VectorElementwiseProxy2] + ) -> Vector2: ... + def __rfloordiv__( + self, other: Union[float, Vector2, _VectorElementwiseProxy2] + ) -> Vector2: ... + def __mod__( + self, other: Union[float, Vector2, _VectorElementwiseProxy2] + ) -> Vector2: ... + def __rmod__( + self, other: Union[float, Vector2, _VectorElementwiseProxy2] + ) -> Vector2: ... + def __pow__( + self, power: Union[float, Vector2, _VectorElementwiseProxy2] + ) -> Vector2: ... + def __rpow__( + self, power: Union[float, Vector2, _VectorElementwiseProxy2] + ) -> Vector2: ... + +class _VectorElementwiseProxy3: + def __add__( + self, other: Union[float, Vector3, _VectorElementwiseProxy3] + ) -> Vector3: ... + def __radd__( + self, other: Union[float, Vector3, _VectorElementwiseProxy3] + ) -> Vector3: ... + def __sub__( + self, other: Union[float, Vector3, _VectorElementwiseProxy3] + ) -> Vector3: ... + def __rsub__( + self, other: Union[float, Vector3, _VectorElementwiseProxy3] + ) -> Vector3: ... + def __mul__( + self, other: Union[float, Vector3, _VectorElementwiseProxy3] + ) -> Vector3: ... + def __rmul__( + self, other: Union[float, Vector3, _VectorElementwiseProxy3] + ) -> Vector3: ... + def __truediv__( + self, other: Union[float, Vector3, _VectorElementwiseProxy3] + ) -> Vector3: ... + def __rtruediv__( + self, other: Union[float, Vector3, _VectorElementwiseProxy3] + ) -> Vector3: ... + def __floordiv__( + self, other: Union[float, Vector3, _VectorElementwiseProxy3] + ) -> Vector3: ... + def __rfloordiv__( + self, other: Union[float, Vector3, _VectorElementwiseProxy3] + ) -> Vector3: ... + def __mod__( + self, other: Union[float, Vector3, _VectorElementwiseProxy3] + ) -> Vector3: ... + def __rmod__( + self, other: Union[float, Vector3, _VectorElementwiseProxy3] + ) -> Vector3: ... + def __pow__( + self, power: Union[float, Vector3, _VectorElementwiseProxy3] + ) -> Vector3: ... + def __rpow__( + self, power: Union[float, Vector3, _VectorElementwiseProxy3] + ) -> Vector3: ... + +def enable_swizzling() -> None: ... +def disable_swizzling() -> None: ... + +class Vector2: + x: float + y: float + xx: Vector2 + xy: Vector2 + yx: Vector2 + yy: Vector2 + __hash__: None # type: ignore + @overload + def __init__( + self, + x: Union[float, Tuple[float, float, float], List[float], Vector2] = 0, + ) -> None: ... + @overload + def __init__( + self, + x: float, + y: float, + ) -> None: ... + def __setitem__(self, key: int, value: float) -> None: ... + @overload + def __getitem__(self, i: int) -> float: ... + @overload + def __getitem__(self, s: slice) -> List[float]: ... + def __add__(self, other: Vector2) -> Vector2: ... + def __sub__(self, other: Vector2) -> Vector2: ... + @overload + def __mul__(self, other: Vector2) -> float: ... + @overload + def __mul__(self, other: float) -> Vector2: ... + def __rmul__(self, other: float) -> Vector2: ... + def __truediv__(self, other: float) -> Vector2: ... + def __floordiv__(self, other: float) -> Vector2: ... + def dot(self, other: Vector2) -> float: ... + def cross(self, other: Vector2) -> Vector2: ... + def magnitude(self) -> float: ... + def magnitude_squared(self) -> float: ... + def length(self) -> float: ... + def length_squared(self) -> float: ... + def normalize(self) -> Vector2: ... + def normalize_ip(self) -> None: ... + def is_normalized(self) -> bool: ... + def scale_to_length(self, value: float) -> None: ... + def reflect(self, other: Vector2) -> Vector2: ... + def reflect_ip(self, other: Vector2) -> None: ... + def distance_to(self, other: Union[Vector2, Sequence[float]]) -> float: ... + def distance_squared_to(self, other: Vector2) -> float: ... + def lerp(self, other: Vector2, value: float) -> Vector2: ... + def slerp(self, other: Vector2, value: float) -> Vector2: ... + def elementwise(self) -> _VectorElementwiseProxy2: ... + def rotate(self, angle: float) -> Vector2: ... + def rotate_rad(self, angle: float) -> Vector2: ... + def rotate_ip(self, angle: float) -> None: ... + def rotate_ip_rad(self, angle: float) -> None: ... + def angle_to(self, other: Vector2) -> float: ... + def as_polar(self) -> Tuple[float, float]: ... + def from_polar( + self, polar_value: Union[List[float], Tuple[float, float]] + ) -> None: ... + def update( + self, + x: Union[float, Vector2, Tuple[float, float], List[float]] = 0, + y: float = 0, + ) -> None: ... + +class Vector3: + x: float + y: float + z: float + xx: Vector2 + xy: Vector2 + xz: Vector2 + yx: Vector2 + yy: Vector2 + yz: Vector2 + zx: Vector2 + zy: Vector2 + zz: Vector2 + xxx: Vector3 + xxy: Vector3 + xxz: Vector3 + xyx: Vector3 + xyy: Vector3 + xyz: Vector3 + xzx: Vector3 + xzy: Vector3 + xzz: Vector3 + yxx: Vector3 + yxy: Vector3 + yxz: Vector3 + yyx: Vector3 + yyy: Vector3 + yyz: Vector3 + yzx: Vector3 + yzy: Vector3 + yzz: Vector3 + zxx: Vector3 + zxy: Vector3 + zxz: Vector3 + zyx: Vector3 + zyy: Vector3 + zyz: Vector3 + zzx: Vector3 + zzy: Vector3 + zzz: Vector3 + __hash__: None # type: ignore + @overload + def __init__( + self, + xyz: Union[float, Tuple[float, float, float], List[float], Vector3] = 0, + ) -> None: ... + @overload + def __init__( + self, + x: float, + y: float, + z: float, + ) -> None: ... + def __setitem__(self, key: int, value: float) -> None: ... + @overload + def __getitem__(self, i: int) -> float: ... + @overload + def __getitem__(self, s: slice) -> List[float]: ... + def __add__(self, other: Vector3) -> Vector3: ... + def __sub__(self, other: Vector3) -> Vector3: ... + @overload + def __mul__(self, other: Vector3) -> float: ... + @overload + def __mul__(self, other: float) -> Vector3: ... + def __rmul__(self, other: float) -> Vector3: ... + def __truediv__(self, other: float) -> Vector3: ... + def __floordiv__(self, other: float) -> Vector3: ... + def dot(self, other: Vector3) -> float: ... + def cross(self, other: Vector3) -> Vector3: ... + def magnitude(self) -> float: ... + def magnitude_squared(self) -> float: ... + def length(self) -> float: ... + def length_squared(self) -> float: ... + def normalize(self) -> Vector3: ... + def normalize_ip(self) -> None: ... + def is_normalized(self) -> bool: ... + def scale_to_length(self, value: float) -> None: ... + def reflect(self, other: Vector3) -> Vector3: ... + def reflect_ip(self, other: Vector3) -> None: ... + def distance_to(self, other: Vector3) -> float: ... + def distance_squared_to(self, other: Vector3) -> float: ... + def lerp(self, other: Vector3, value: float) -> Vector3: ... + def slerp(self, other: Vector3, value: float) -> Vector3: ... + def elementwise(self) -> _VectorElementwiseProxy3: ... + def rotate(self, angle: float, axis: Vector3) -> Vector3: ... + def rotate_rad(self, angle: float, axis: Vector3) -> Vector3: ... + def rotate_ip(self, angle: float, axis: Vector3) -> None: ... + def rotate_ip_rad(self, angle: float, axis: Vector3) -> None: ... + def rotate_x(self, angle: float) -> Vector3: ... + def rotate_x_rad(self, angle: float) -> Vector3: ... + def rotate_x_ip(self, angle: float) -> None: ... + def rotate_x_ip_rad(self, angle: float) -> None: ... + def rotate_y(self, angle: float) -> Vector3: ... + def rotate_y_rad(self, angle: float) -> Vector3: ... + def rotate_y_ip(self, angle: float) -> None: ... + def rotate_y_ip_rad(self, angle: float) -> None: ... + def rotate_z(self, angle: float) -> Vector3: ... + def rotate_z_rad(self, angle: float) -> Vector3: ... + def rotate_z_ip(self, angle: float) -> None: ... + def rotate_z_ip_rad(self, angle: float) -> None: ... + def angle_to(self, other: Vector3) -> float: ... + def as_spherical(self) -> Tuple[float, float, float]: ... + def from_spherical(self, spherical: Tuple[float, float, float]) -> None: ... + @overload + def update( + self, + xyz: Union[float, Tuple[float, float, float], List[float], Vector3] = 0, + ) -> None: ... + @overload + def update(self, x: int, y: int, z: int) -> None: ... diff --git a/EXE version/main/pygame/midi.pyi b/EXE version/main/pygame/midi.pyi new file mode 100644 index 00000000..1d1f503e --- /dev/null +++ b/EXE version/main/pygame/midi.pyi @@ -0,0 +1,49 @@ +from typing import Optional, List, Tuple, Union, Sequence + +from pygame.event import Event + +MIDIIN: int +MIDIOUT: int + +class MidiException(Exception): + def __init__(self, errno: str) -> None: ... + +def init() -> None: ... +def quit() -> None: ... +def get_init() -> bool: ... +def get_count() -> int: ... +def get_default_input_id() -> int: ... +def get_default_output_id() -> int: ... +def get_device_info(an_id: int) -> Tuple[str, str, int, int, int]: ... +def midis2events( + midi_events: Sequence[Sequence[Union[Sequence[int], int]]], device_id: int +) -> List[Event]: ... +def time() -> int: ... +def frequency_to_midi(frequency: float) -> int: ... +def midi_to_frequency(midi_note: int) -> float: ... +def midi_to_ansi_note(midi_note: int) -> str: ... + +class Input: + device_id: int + def __init__(self, device_id: int, buffer_size: int = 4096) -> None: ... + def close(self) -> None: ... + def pool(self) -> bool: ... + def read(self, num_events: int) -> List[List[Union[List[int], int]]]: ... + +class Output: + device_id: int + def __init__( + self, + device_id: int, + latency: int = 0, + buffersize: int = 4096, + ) -> None: ... + def abort(self) -> None: ... + def close(self) -> None: ... + def note_off(self, note: int, velocity: int = 0, channel: int = 0) -> None: ... + def note_on(self, note: int, velocity: int = 0, channel: int = 0) -> None: ... + def set_instrument(self, instrument_id: int, channel: int = 0) -> None: ... + def pitch_bend(self, value: int = 0, channel: int = 0) -> None: ... + def write(self, data: List[List[Union[List[int], int]]]) -> None: ... + def write_short(self, status: int, data1: int = 0, data2: int = 0) -> None: ... + def write_sys_ex(self, msg: Union[List[int], str], when: int) -> None: ... diff --git a/EXE version/main/pygame/mixer.cp39-win_amd64.pyd b/EXE version/main/pygame/mixer.cp39-win_amd64.pyd new file mode 100644 index 00000000..20440c9c Binary files /dev/null and b/EXE version/main/pygame/mixer.cp39-win_amd64.pyd differ diff --git a/EXE version/main/pygame/mixer.pyi b/EXE version/main/pygame/mixer.pyi new file mode 100644 index 00000000..537ad4c0 --- /dev/null +++ b/EXE version/main/pygame/mixer.pyi @@ -0,0 +1,91 @@ +import sys +from typing import Optional, Union, Tuple, Any, overload, IO + +if sys.version_info >= (3, 6): + from os import PathLike + + AnyPath = Union[str, bytes, PathLike[str], PathLike[bytes]] +else: + AnyPath = Union[Text, bytes] + +from pygame.event import Event +from . import music as music +import numpy + +def init( + frequency: int = 44100, + size: int = -16, + channels: int = 2, + buffer: int = 512, + devicename: Optional[str] = None, + allowedchanges: int = 5, +) -> None: ... +def pre_init( + frequency: int = 44100, + size: int = -16, + channels: int = 2, + buffer: int = 512, + devicename: Optional[str] = None, + allowedchanges: int = 5, +) -> None: ... +def quit() -> None: ... +def get_init() -> Tuple[int, int, int]: ... +def stop() -> None: ... +def pause() -> None: ... +def unpause() -> None: ... +def fadeout(time: int) -> None: ... +def set_num_channels(count: int) -> None: ... +def get_num_channels() -> int: ... +def set_reserved() -> int: ... +def find_channel(force: bool) -> Channel: ... +def get_busy() -> bool: ... +def get_sdl_mixer_version(linked: bool) -> Tuple[int, int, int]: ... + +class Sound: + @overload + def __init__(self, file: Union[AnyPath, IO[Any]]) -> None: ... + @overload + def __init__( + self, buffer: Any + ) -> None: ... # Buffer protocol is still not implemented in typing + @overload + def __init__( + self, array: numpy.ndarray + ) -> None: ... # Buffer protocol is still not implemented in typing + def play( + self, + loops: int = 0, + maxtime: int = 0, + fade_ms: int = 0, + ) -> Channel: ... + def stop(self) -> None: ... + def fadeout(self, time: int) -> None: ... + def set_volume(self, value: float) -> None: ... + def get_volume(self) -> float: ... + def get_num_channels(self) -> int: ... + def get_length(self) -> float: ... + def get_raw(self) -> bytes: ... + +class Channel: + def __init__(self, id: int) -> None: ... + def play( + self, + sound: Sound, + loops: int = 0, + maxtime: int = 0, + fade_ms: int = 0, + ) -> None: ... + def stop(self) -> None: ... + def pause(self) -> None: ... + def unpause(self) -> None: ... + def fadeout(self, time: int) -> None: ... + @overload + def set_volume(self, value: float) -> None: ... + @overload + def set_volume(self, left: float, right: float) -> None: ... + def get_volume(self) -> float: ... + def get_busy(self) -> bool: ... + def get_sound(self) -> Sound: ... + def get_queue(self) -> Sound: ... + def set_endevent(self, type: Union[int, Event] = 0) -> None: ... + def get_endevent(self) -> int: ... diff --git a/EXE version/main/pygame/mixer_music.cp39-win_amd64.pyd b/EXE version/main/pygame/mixer_music.cp39-win_amd64.pyd new file mode 100644 index 00000000..e0dc5584 Binary files /dev/null and b/EXE version/main/pygame/mixer_music.cp39-win_amd64.pyd differ diff --git a/EXE version/main/pygame/mouse.cp39-win_amd64.pyd b/EXE version/main/pygame/mouse.cp39-win_amd64.pyd new file mode 100644 index 00000000..da546a15 Binary files /dev/null and b/EXE version/main/pygame/mouse.cp39-win_amd64.pyd differ diff --git a/EXE version/main/pygame/mouse.pyi b/EXE version/main/pygame/mouse.pyi new file mode 100644 index 00000000..8f9a4a40 --- /dev/null +++ b/EXE version/main/pygame/mouse.pyi @@ -0,0 +1,35 @@ +from typing import Tuple, Union, List, overload, Sequence + +from pygame.cursors import Cursor +from pygame.surface import Surface + +def get_pressed(num_buttons: int = 3) -> Union[Tuple[bool, bool, bool], Tuple[bool, bool, bool, bool, bool]]: ... +def get_pos() -> Tuple[int, int]: ... +def get_rel() -> Tuple[int, int]: ... +@overload +def set_pos(pos: Union[List[float], Tuple[float, float]]) -> None: ... +@overload +def set_pos(x: float, y: float) -> None: ... +def set_visible(value: bool) -> int: ... +def get_visible() -> bool: ... +def get_focused() -> bool: ... + + +@overload +def set_cursor(cursor: Cursor) -> None: ... +@overload +def set_cursor(constant: int) -> None: ... +@overload +def set_cursor( + size: Union[Tuple[int, int], List[int]], + hotspot: Union[Tuple[int, int], List[int]], + xormasks: Sequence[int], + andmasks: Sequence[int], + ) -> None: ... +@overload +def set_cursor(hotspot: Union[Tuple[int, int], List[int]], + surface: Surface, + ) -> None: ... + +def get_cursor() -> Cursor: ... +def set_system_cursor(cursor: int) -> None: ... diff --git a/EXE version/main/pygame/music.pyi b/EXE version/main/pygame/music.pyi new file mode 100644 index 00000000..16b6172a --- /dev/null +++ b/EXE version/main/pygame/music.pyi @@ -0,0 +1,18 @@ +from typing import Optional + +def load(filename: str) -> None: ... +def unload() -> None: ... +def play(loops: int = 0, start: float = 0.0, fade_ms: int = 0) -> None: ... +def rewind() -> None: ... +def stop() -> None: ... +def pause() -> None: ... +def unpause() -> None: ... +def fadeout(time: int) -> None: ... +def set_volume(volume: float) -> None: ... +def get_volume() -> float: ... +def get_busy() -> bool: ... +def set_pos(pos: float) -> None: ... +def get_pos() -> int: ... +def queue(filename: str) -> None: ... +def set_endevent(event_type: int) -> None: ... +def get_endevent() -> int: ... diff --git a/EXE version/main/pygame/pixelarray.cp39-win_amd64.pyd b/EXE version/main/pygame/pixelarray.cp39-win_amd64.pyd new file mode 100644 index 00000000..27c759a5 Binary files /dev/null and b/EXE version/main/pygame/pixelarray.cp39-win_amd64.pyd differ diff --git a/EXE version/main/pygame/pixelarray.pyi b/EXE version/main/pygame/pixelarray.pyi new file mode 100644 index 00000000..a10dbd20 --- /dev/null +++ b/EXE version/main/pygame/pixelarray.pyi @@ -0,0 +1,38 @@ +from typing import Tuple, Union, List, Optional, Sequence + +from pygame.color import Color +from pygame.surface import Surface + +_ColorValue = Union[ + Color, Tuple[int, int, int], List[int], int, Tuple[int, int, int, int] +] + +class PixelArray: + surface: Surface + itemsize: int + ndim: int + shape: Tuple[int, ...] + strides: Tuple[int, ...] + def __init__(self, surface: Surface) -> None: ... + def make_surface(self) -> Surface: ... + def replace( + self, + color: _ColorValue, + repcolor: _ColorValue, + distance: float = 0, + weights: Sequence[float] = (0.299, 0.587, 0.114), + ) -> None: ... + def extract( + self, + color: _ColorValue, + distance: float = 0, + weights: Sequence[float] = (0.299, 0.587, 0.114), + ) -> PixelArray: ... + def compare( + self, + array: PixelArray, + distance: float = 0, + weights: Sequence[float] = (0.299, 0.587, 0.114), + ) -> PixelArray: ... + def transpose(self) -> PixelArray: ... + def close(self) -> PixelArray: ... diff --git a/EXE version/main/pygame/pixelcopy.cp39-win_amd64.pyd b/EXE version/main/pygame/pixelcopy.cp39-win_amd64.pyd new file mode 100644 index 00000000..5ebe0430 Binary files /dev/null and b/EXE version/main/pygame/pixelcopy.cp39-win_amd64.pyd differ diff --git a/EXE version/main/pygame/pixelcopy.pyi b/EXE version/main/pygame/pixelcopy.pyi new file mode 100644 index 00000000..bf7dc315 --- /dev/null +++ b/EXE version/main/pygame/pixelcopy.pyi @@ -0,0 +1,24 @@ +from typing import Optional +import sys + +if sys.version_info >= (3, 8): + from typing import Literal +else: + from typing_extensions import Literal +import numpy +from pygame.surface import Surface + +_kind = Literal["P", "p", "R", "r", "G", "g", "B", "b", "A", "a", "C", "c"] + +def surface_to_array( + array: numpy.ndarray, + surface: Surface, + kind: _kind = "P", + opaque: int = 255, + clear: int = 0, +) -> None: ... +def array_to_surface(surface: Surface, array: numpy.ndarray) -> None: ... +def map_to_array( + array1: numpy.ndarray, array2: numpy.ndarray, surface: Surface +) -> None: ... +def make_surface(array: numpy.ndarray) -> Surface: ... diff --git a/EXE version/main/pygame/portmidi.dll b/EXE version/main/pygame/portmidi.dll new file mode 100644 index 00000000..cc4361c3 Binary files /dev/null and b/EXE version/main/pygame/portmidi.dll differ diff --git a/EXE version/main/pygame/py.typed b/EXE version/main/pygame/py.typed new file mode 100644 index 00000000..e69de29b diff --git a/EXE version/main/pygame/pygame.ico b/EXE version/main/pygame/pygame.ico new file mode 100644 index 00000000..06f699e0 Binary files /dev/null and b/EXE version/main/pygame/pygame.ico differ diff --git a/EXE version/main/pygame/pygame_icon.bmp b/EXE version/main/pygame/pygame_icon.bmp new file mode 100644 index 00000000..74aea77d Binary files /dev/null and b/EXE version/main/pygame/pygame_icon.bmp differ diff --git a/EXE version/main/pygame/pygame_icon.icns b/EXE version/main/pygame/pygame_icon.icns new file mode 100644 index 00000000..2610a8d7 Binary files /dev/null and b/EXE version/main/pygame/pygame_icon.icns differ diff --git a/EXE version/main/pygame/pygame_icon.svg b/EXE version/main/pygame/pygame_icon.svg new file mode 100644 index 00000000..bbee79db --- /dev/null +++ b/EXE version/main/pygame/pygame_icon.svg @@ -0,0 +1,259 @@ + + +image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/EXE version/main/pygame/pygame_icon.tiff b/EXE version/main/pygame/pygame_icon.tiff new file mode 100644 index 00000000..e7791433 Binary files /dev/null and b/EXE version/main/pygame/pygame_icon.tiff differ diff --git a/EXE version/main/pygame/rect.cp39-win_amd64.pyd b/EXE version/main/pygame/rect.cp39-win_amd64.pyd new file mode 100644 index 00000000..5da75a0b Binary files /dev/null and b/EXE version/main/pygame/rect.cp39-win_amd64.pyd differ diff --git a/EXE version/main/pygame/rect.pyi b/EXE version/main/pygame/rect.pyi new file mode 100644 index 00000000..2f6689cb --- /dev/null +++ b/EXE version/main/pygame/rect.pyi @@ -0,0 +1,231 @@ +from typing import Dict, List, Sequence, Tuple, TypeVar, Union, overload, Iterable +from typing_extensions import Protocol +from pygame.math import Vector2 +from pygame.sprite import _RectStyle + +_K = TypeVar("_K") +_V = TypeVar("_V") + +_Coordinate = Union[Tuple[float, float], List[float], Vector2] +_CanBeRect = Union[ + "Rect", + Tuple[float, float, float, float], + Tuple[Tuple[float, float], Tuple[float, float]], + List[float], + List[Vector2], + Tuple[Vector2, Vector2], + Iterable[Vector2], +] +class _HasRectAttribute(Protocol): + rect: _CanBeRect +_RectValue = Union[ + _CanBeRect, _HasRectAttribute +] + +class Rect(object): + x: int + y: int + top: int + left: int + bottom: int + right: int + topleft: Tuple[int, int] + bottomleft: Tuple[int, int] + topright: Tuple[int, int] + bottomright: Tuple[int, int] + midtop: Tuple[int, int] + midleft: Tuple[int, int] + midbottom: Tuple[int, int] + midright: Tuple[int, int] + center: Tuple[int, int] + centerx: int + centery: int + size: Tuple[int, int] + width: int + height: int + w: int + h: int + __hash__: None # type: ignore + @overload + def __init__( + self, left: float, top: float, width: float, height: float + ) -> None: ... + @overload + def __init__( + self, + left_top: Union[List[float], Tuple[float, float], Vector2], + width_height: Union[List[float], Tuple[float, float], Vector2], + ) -> None: ... + @overload + def __init__( + self, + left_top_width_height: Union[Rect, Tuple[float, float, float, float], List[float]] + ) -> None: ... + @overload + def __getitem__(self, i: int) -> int: ... + @overload + def __getitem__(self, s: slice) -> List[int]: ... + def copy(self) -> Rect: ... + @overload + def move(self, x: float, y: float) -> Rect: ... + @overload + def move(self, move_by: _Coordinate) -> Rect: ... + @overload + def move_ip(self, x: float, y: float) -> None: ... + @overload + def move_ip(self, move_by: _Coordinate) -> None: ... + @overload + def inflate(self, x: float, y: float) -> Rect: ... + @overload + def inflate(self, inflate_by: _Coordinate) -> Rect: ... + @overload + def inflate_ip(self, x: float, y: float) -> None: ... + @overload + def inflate_ip(self, inflate_by: _Coordinate) -> None: ... + @overload + def update( + self, left: float, top: float, width: float, height: float + ) -> None: ... + @overload + def update( + self, + left_top: Union[List[float], Tuple[float, float], Vector2], + width_height: Union[List[float], Tuple[float, float], Vector2], + ) -> None: ... + @overload + def update( + self, + left_top_width_height: Union[Rect, Tuple[float, float, float, float], List[float]] + ) -> None: ... + @overload + def clamp(self, rect: Union[_RectStyle, Rect]) -> Rect: ... + @overload + def clamp( + self, + left_top: Union[List[float], Tuple[float, float], Vector2], + width_height: Union[List[float], Tuple[float, float], Vector2], + ) -> Rect: ... + @overload + def clamp(self, left: float, top: float, width: float, height: float) -> Rect: ... + @overload + def clamp_ip(self, rect: Union[_RectStyle, Rect]) -> None: ... + @overload + def clamp_ip( + self, + left_top: Union[List[float], Tuple[float, float], Vector2], + width_height: Union[List[float], Tuple[float, float], Vector2], + ) -> None: ... + @overload + def clamp_ip( + self, left: float, top: float, width: float, height: float + ) -> None: ... + @overload + def clip(self, rect: Union[_RectStyle, Rect]) -> Rect: ... + @overload + def clip( + self, + left_top: Union[List[float], Tuple[float, float], Vector2], + width_height: Union[List[float], Tuple[float, float], Vector2], + ) -> Rect: ... + @overload + def clip(self, left: float, top: float, width: float, height: float) -> Rect: ... + @overload + def clipline( + self, x1: float, x2: float, x3: float, x4: float + ) -> Union[Tuple[Tuple[int, int], Tuple[int, int]], Tuple[()]]: ... + @overload + def clipline( + self, first_coordinate: _Coordinate, second_coordinate: _Coordinate + ) -> Union[Tuple[Tuple[int, int], Tuple[int, int]], Tuple[()]]: ... + @overload + def clipline( + self, values: Union[Tuple[float, float, float, float], List[float]] + ) -> Union[Tuple[Tuple[int, int], Tuple[int, int]], Tuple[()]]: ... + @overload + def clipline( + self, coordinates: Union[Tuple[_Coordinate, _Coordinate], List[_Coordinate]] + ) -> Union[Tuple[Tuple[int, int], Tuple[int, int]], Tuple[()]]: ... + @overload + def union(self, rect: Union[_RectStyle, Rect]) -> Rect: ... + @overload + def union( + self, + left_top: Union[List[float], Tuple[float, float], Vector2], + width_height: Union[List[float], Tuple[float, float], Vector2], + ) -> Rect: ... + @overload + def union(self, left: float, top: float, width: float, height: float) -> Rect: ... + @overload + def union_ip(self, rect: Union[_RectStyle, Rect]) -> None: ... + @overload + def union_ip( + self, + left_top: Union[List[float], Tuple[float, float], Vector2], + width_height: Union[List[float], Tuple[float, float], Vector2], + ) -> None: ... + @overload + def union_ip( + self, left: float, top: float, width: float, height: float + ) -> None: ... + def unionall(self, rect: Sequence[Union[_RectStyle, Rect]]) -> Rect: ... + def unionall_ip(self, rect_sequence: Sequence[Union[_RectStyle, Rect]]) -> None: ... + @overload + def fit(self, rect: Union[_RectStyle, Rect]) -> Rect: ... + @overload + def fit( + self, + left_top: Union[List[float], Tuple[float, float], Vector2], + width_height: Union[List[float], Tuple[float, float], Vector2], + ) -> Rect: ... + @overload + def fit(self, left: float, top: float, width: float, height: float) -> Rect: ... + def normalize(self) -> None: ... + @overload + def contains(self, rect: Union[_RectStyle, Rect]) -> bool: ... + @overload + def contains( + self, + left_top: Union[List[float], Tuple[float, float], Vector2], + width_height: Union[List[float], Tuple[float, float], Vector2], + ) -> bool: ... + @overload + def contains(self, left: float, top: float, width: float, height: float) -> bool: ... + @overload + def collidepoint(self, x: float, y: float) -> bool: ... + @overload + def collidepoint(self, x_y: Union[List[float], Tuple[float, float]]) -> bool: ... + @overload + def colliderect(self, rect: Union[_RectStyle, Rect]) -> bool: ... + @overload + def colliderect( + self, + left_top: Union[List[float], Tuple[float, float], Vector2], + width_height: Union[List[float], Tuple[float, float], Vector2], + ) -> bool: ... + @overload + def colliderect( + self, left: float, top: float, width: float, height: float + ) -> bool: ... + def collidelist(self, rect_list: Sequence[Union[Rect, _RectStyle]]) -> int: ... + def collidelistall( + self, rect_list: Sequence[Union[Rect, _RectStyle]] + ) -> List[int]: ... + # Also undocumented: the dict collision methods take a 'values' argument + # that defaults to False. If it is False, the keys in rect_dict must be + # Rect-like; otherwise, the values must be Rects. + @overload + def collidedict( + self, rect_dict: Dict[_RectStyle, _V], values: bool = ... + ) -> Tuple[_RectStyle, _V]: ... + @overload + def collidedict( + self, rect_dict: Dict[_K, "Rect"], values: bool + ) -> Tuple[_K, "Rect"]: ... + @overload + def collidedictall( + self, rect_dict: Dict[_RectStyle, _V], values: bool = ... + ) -> List[Tuple[_RectStyle, _V]]: ... + @overload + def collidedictall( + self, rect_dict: Dict[_K, "Rect"], values: bool + ) -> List[Tuple[_K, "Rect"]]: ... diff --git a/EXE version/main/pygame/rwobject.cp39-win_amd64.pyd b/EXE version/main/pygame/rwobject.cp39-win_amd64.pyd new file mode 100644 index 00000000..8ad53f2d Binary files /dev/null and b/EXE version/main/pygame/rwobject.cp39-win_amd64.pyd differ diff --git a/EXE version/main/pygame/scrap.cp39-win_amd64.pyd b/EXE version/main/pygame/scrap.cp39-win_amd64.pyd new file mode 100644 index 00000000..4b0a16eb Binary files /dev/null and b/EXE version/main/pygame/scrap.cp39-win_amd64.pyd differ diff --git a/EXE version/main/pygame/scrap.pyi b/EXE version/main/pygame/scrap.pyi new file mode 100644 index 00000000..7905ce60 --- /dev/null +++ b/EXE version/main/pygame/scrap.pyi @@ -0,0 +1,10 @@ +from typing import AnyStr, List + +def init() -> None: ... +def get_init() -> bool: ... +def get(data_type: str) -> AnyStr: ... +def get_types() -> List[str]: ... +def put(data_type: str, data: AnyStr) -> None: ... +def contains(data_type: str) -> bool: ... +def lost() -> bool: ... +def set_mode(mode: int) -> None: ... diff --git a/EXE version/main/pygame/sndarray.pyi b/EXE version/main/pygame/sndarray.pyi new file mode 100644 index 00000000..789ab733 --- /dev/null +++ b/EXE version/main/pygame/sndarray.pyi @@ -0,0 +1,10 @@ +from typing import Tuple +from pygame.mixer import Sound +import numpy + +def array(sound: Sound) -> numpy.ndarray: ... +def samples(sound: Sound) -> numpy.ndarray: ... +def make_sound(array: numpy.ndarray) -> Sound: ... +def use_arraytype(arraytype: str) -> Sound: ... +def get_arraytype() -> str: ... +def get_arraytypes() -> Tuple[str]: ... diff --git a/EXE version/main/pygame/sprite.pyi b/EXE version/main/pygame/sprite.pyi new file mode 100644 index 00000000..caa890d6 --- /dev/null +++ b/EXE version/main/pygame/sprite.pyi @@ -0,0 +1,154 @@ +from typing import ( + List, + Dict, + Any, + Union, + Tuple, + Optional, + Callable, + SupportsFloat, + Iterator, + Sequence, + Iterable, +) + +from pygame.rect import Rect +from pygame.surface import Surface + +_RectStyle = Union[ + Tuple[float, float, float, float], + Tuple[Tuple[float, float], Tuple[float, float]], + List[float], + Rect, +] + +# Some functions violate Liskov substitution principle so mypy will throw errors for this file, but this are the +# best type hints I could do + +class Sprite: + image: Optional[Surface] = None + rect: Optional[Rect] = None + def __init__(self, *groups: AbstractGroup) -> None: ... + def update(self, *args: Any, **kwargs: Any) -> None: ... + def add(self, *groups: AbstractGroup) -> None: ... + def remove(self, *groups: AbstractGroup) -> None: ... + def kill(self) -> None: ... + def alive(self) -> bool: ... + def groups(self) -> List[AbstractGroup]: ... + +class DirtySprite(Sprite): + dirty: int + blendmode: int + source_rect: Rect + visible: int + _layer: int + def _set_visible(self, value: int) -> None: ... + def _get_visible(self) -> int: ... + +class AbstractGroup: + spritedict: Dict[Sprite, int] + lostsprites: List[int] # I think + def __init__(self) -> None: ... + def __len__(self) -> int: ... + def __iter__(self) -> Iterator[Sprite]: ... + def copy(self) -> AbstractGroup: ... + def sprites(self) -> List[Sprite]: ... + def add( + self, + *sprites: Union[Sprite, AbstractGroup, Iterable[Union[Sprite, AbstractGroup]]] + ) -> None: ... + def remove(self, *sprites: Sprite) -> None: ... + def has(self, *sprites: Sprite) -> bool: ... + def update(self, *args: Any, **kwargs: Any) -> None: ... + def draw(self, surface: Surface) -> None: ... + def clear(self, surface_dest: Surface, background: Surface) -> None: ... + def empty(self) -> None: ... + +class Group(AbstractGroup): + def __init__(self, *sprites: Union[Sprite, Sequence[Sprite]]) -> None: ... + def copy(self) -> Group: ... + +class RenderPlain(Group): + def copy(self) -> RenderPlain: ... + +class RenderClear(Group): + def copy(self) -> RenderClear: ... + +class RenderUpdates(Group): + def copy(self) -> RenderUpdates: ... + def draw(self, surface: Surface) -> List[Rect]: ... + +class OrderedUpdates(RenderUpdates): + def copy(self) -> OrderedUpdates: ... + +class LayeredUpdates(AbstractGroup): + def __init__(self, *sprites: Sprite, **kwargs: Any) -> None: ... + def copy(self) -> LayeredUpdates: ... + def add(self, *sprites: Sprite, **kwargs: Any) -> None: ... + def draw(self, surface: Surface) -> List[Rect]: ... + def get_sprites_at( + self, pos: Union[Tuple[int, int], List[int]] + ) -> List[Sprite]: ... + def get_sprite(self, idx: int) -> Sprite: ... + def remove_sprites_of_layer(self, layer_nr: int) -> List[Sprite]: ... + def layers(self) -> List[int]: ... + def change_layer(self, sprite: Sprite, new_layer: int) -> None: ... + def get_layer_of_sprite(self, sprite: Sprite) -> int: ... + def get_top_layer(self) -> int: ... + def get_bottom_layer(self) -> int: ... + def move_to_front(self, sprite: Sprite) -> None: ... + def move_to_back(self, sprite: Sprite) -> None: ... + def get_top_sprite(self) -> Sprite: ... + def get_sprites_from_layer(self, layer: int) -> List[Sprite]: ... + def switch_layer(self, layer1_nr: int, layer2_nr: int) -> None: ... + +class LayeredDirty(LayeredUpdates): + def __init__(self, *sprites: DirtySprite, **kwargs: Any) -> None: ... + def copy(self) -> LayeredDirty: ... + def draw(self, surface: Surface, bgd: Optional[Surface] = None) -> List[Rect]: ... + def clear(self, surface: Surface, bgd: Surface) -> None: ... + def repaint_rect(self, screen_rect: _RectStyle) -> None: ... + def set_clip(self, screen_rect: Optional[_RectStyle] = None) -> None: ... + def get_clip(self) -> Rect: ... + def set_timing_treshold( + self, time_ms: SupportsFloat + ) -> None: ... # This actually accept any value + +class GroupSingle(AbstractGroup): + sprite: Sprite + def __init__(self, sprite: Optional[Sprite] = None) -> None: ... + def copy(self) -> GroupSingle: ... + +def spritecollide( + sprite: Sprite, + group: AbstractGroup, + dokill: bool, + collided: Optional[Callable[[Sprite, Sprite], bool]] = None, +) -> List[Sprite]: ... +def collide_rect(left: Sprite, right: Sprite) -> bool: ... + +class collide_rect_ratio: + ratio: float + def __init__(self, ratio: float) -> None: ... + def __call__(self, left: Sprite, right: Sprite) -> bool: ... + +def collide_circle(left: Sprite, right: Sprite) -> bool: ... + +class collide_circle_ratio: + ratio: float + def __init__(self, ratio: float) -> None: ... + def __call__(self, left: Sprite, right: Sprite) -> bool: ... + +def collide_mask(sprite1: Sprite, sprite2: Sprite) -> Tuple[int, int]: ... +def groupcollide( + group1: AbstractGroup, + group2: AbstractGroup, + dokill: bool, + dokill2: bool, + collided: Optional[Callable[[Sprite, Sprite], bool]] = None, +) -> Dict[Sprite, Sprite]: ... +def spritecollideany( + sprite: Sprite, + group: AbstractGroup, + collided: Optional[Callable[[Sprite, Sprite], bool]] = None, +) -> Sprite: ... diff --git a/EXE version/main/pygame/surface.cp39-win_amd64.pyd b/EXE version/main/pygame/surface.cp39-win_amd64.pyd new file mode 100644 index 00000000..c3dd389b Binary files /dev/null and b/EXE version/main/pygame/surface.cp39-win_amd64.pyd differ diff --git a/EXE version/main/pygame/surface.pyi b/EXE version/main/pygame/surface.pyi new file mode 100644 index 00000000..8c930b33 --- /dev/null +++ b/EXE version/main/pygame/surface.pyi @@ -0,0 +1,136 @@ +from typing import Any, List, Optional, Sequence, Text, Tuple, Union, overload, Iterable +from typing_extensions import Protocol +from pygame.bufferproxy import BufferProxy +from pygame.color import Color +from pygame.rect import Rect + +from pygame.math import Vector2 +from pygame.sprite import _RectStyle + +_ColorInput = Union[ + Color, str, List[int], Tuple[int, int, int], Tuple[int, int, int, int] +] +_RgbaOutput = Tuple[int, int, int, int] +_CanBeRect = Union[ + Rect, + Tuple[float, float, float, float], + Tuple[Tuple[float, float], Tuple[float, float]], + List[float], + List[Vector2], + Tuple[Vector2, Vector2], + Iterable[Vector2], +] +class _HasRectAttribute(Protocol): + rect: _CanBeRect +_RectValue = Union[ + _CanBeRect, _HasRectAttribute +] +_Coordinate = Union[Tuple[float, float], List[float], Vector2] + +class Surface(object): + _pixels_address: int + @overload + def __init__( + self, + size: _Coordinate, + flags: int = ..., + depth: int = ..., + masks: Optional[_ColorInput] = ..., + ) -> None: ... + @overload + def __init__( + self, size: _Coordinate, flags: int = ..., surface: Surface = ..., + ) -> None: ... + def blit( + self, + source: Surface, + dest: Union[Sequence[float], Rect], + area: Optional[Rect] = ..., + special_flags: int = ..., + ) -> Rect: ... + def blits( + self, + sequence: Sequence[Union[Tuple[Surface, Rect], + Tuple[Surface, Rect, Rect], + Tuple[Surface, Rect, int], + Tuple[Surface, Rect, Rect, int]]], + doreturn: Union[int, bool] + ) -> Union[List[Rect], None]: ... + @overload + def convert(self, surface: Surface) -> Surface: ... + @overload + def convert(self, depth: int, flags: int = ...) -> Surface: ... + @overload + def convert(self, masks: _ColorInput, flags: int = ...) -> Surface: ... + @overload + def convert(self) -> Surface: ... + @overload + def convert_alpha(self, surface: Surface) -> Surface: ... + @overload + def convert_alpha(self) -> Surface: ... + def copy(self) -> Surface: ... + def fill( + self, + color: _ColorInput, + rect: Optional[_RectStyle] = ..., + special_flags: int = ..., + ) -> Rect: ... + def scroll(self, dx: int = ..., dy: int = ...) -> None: ... + @overload + def set_colorkey(self, color: _ColorInput, flags: int = ...) -> None: ... + @overload + def set_colorkey(self, color: None) -> None: ... + def get_colorkey(self) -> Optional[_RgbaOutput]: ... + @overload + def set_alpha(self, value: int, flags: int = ...) -> None: ... + @overload + def set_alpha(self, value: None) -> None: ... + def get_alpha(self) -> Optional[int]: ... + def lock(self) -> None: ... + def unlock(self) -> None: ... + def mustlock(self) -> bool: ... + def get_locked(self) -> bool: ... + def get_locks(self) -> Tuple[Any, ...]: ... + def get_at(self, x_y: Sequence[int]) -> _RgbaOutput: ... + def set_at(self, x_y: Sequence[int], color: _ColorInput) -> None: ... + def get_at_mapped(self, x_y: Sequence[int]) -> int: ... + def get_palette(self) -> List[_RgbaOutput]: ... + def get_palette_at(self, index: int) -> _RgbaOutput: ... + def set_palette(self, palette: List[_ColorInput]) -> None: ... + def set_palette_at(self, index: int, color: _ColorInput) -> None: ... + def map_rgb(self, color: _ColorInput) -> int: ... + def unmap_rgb(self, mapped_int: int) -> _RgbaOutput: ... + def set_clip(self, rect: Optional[Rect]) -> None: ... + def get_clip(self) -> Rect: ... + @overload + def subsurface(self, rect: Union[_RectStyle, Rect]) -> Surface: ... + @overload + def subsurface( + self, + left_top: Union[List[float], Tuple[float, float], Vector2], + width_height: Union[List[float], Tuple[float, float], Vector2], + ) -> Surface: ... + @overload + def subsurface( + self, left: float, top: float, width: float, height: float + ) -> Surface: ... + def get_parent(self) -> Surface: ... + def get_abs_parent(self) -> Surface: ... + def get_offset(self) -> Tuple[int, int]: ... + def get_abs_offset(self) -> Tuple[int, int]: ... + def get_size(self) -> Tuple[int, int]: ... + def get_width(self) -> int: ... + def get_height(self) -> int: ... + def get_rect(self, **kwargs: Any) -> Rect: ... + def get_bitsize(self) -> int: ... + def get_bytesize(self) -> int: ... + def get_flags(self) -> int: ... + def get_pitch(self) -> int: ... + def get_masks(self) -> _RgbaOutput: ... + def set_masks(self, color: _ColorInput) -> None: ... + def get_shifts(self) -> _RgbaOutput: ... + def set_shifts(self, color: _ColorInput) -> None: ... + def get_losses(self) -> _RgbaOutput: ... + def get_bounding_rect(self, min_alpha: int = ...) -> Rect: ... + def get_view(self, kind: Text = ...) -> BufferProxy: ... + def get_buffer(self) -> BufferProxy: ... diff --git a/EXE version/main/pygame/surfarray.pyi b/EXE version/main/pygame/surfarray.pyi new file mode 100644 index 00000000..85c33538 --- /dev/null +++ b/EXE version/main/pygame/surfarray.pyi @@ -0,0 +1,20 @@ +from typing import Tuple +from pygame.surface import Surface +import numpy + +def array2d(surface: Surface) -> numpy.ndarray: ... +def pixels2d(surface: Surface) -> numpy.ndarray: ... +def array3d(surface: Surface) -> numpy.ndarray: ... +def pixels3d(surface: Surface) -> numpy.ndarray: ... +def array_alpha(surface: Surface) -> numpy.ndarray: ... +def pixels_alpha(surface: Surface) -> numpy.ndarray: ... +def pixels_red(surface: Surface) -> numpy.ndarray: ... +def pixels_green(surface: Surface) -> numpy.ndarray: ... +def pixels_blue(surface: Surface) -> numpy.ndarray: ... +def array_colorkey(surface: Surface) -> numpy.ndarray: ... +def make_surface(array: numpy.ndarray) -> Surface: ... +def blit_array(surface: Surface, array: numpy.ndarray) -> None: ... +def map_array(surface: Surface, array3d: numpy.ndarray) -> numpy.ndarray: ... +def use_arraytype(arraytype: str) -> None: ... +def get_arraytype() -> str: ... +def get_arraytypes() -> Tuple[str]: ... diff --git a/EXE version/main/pygame/surflock.cp39-win_amd64.pyd b/EXE version/main/pygame/surflock.cp39-win_amd64.pyd new file mode 100644 index 00000000..f0edffca Binary files /dev/null and b/EXE version/main/pygame/surflock.cp39-win_amd64.pyd differ diff --git a/EXE version/main/pygame/tests/fixtures/fonts/A_PyGameMono-8.png b/EXE version/main/pygame/tests/fixtures/fonts/A_PyGameMono-8.png new file mode 100644 index 00000000..b15961f0 Binary files /dev/null and b/EXE version/main/pygame/tests/fixtures/fonts/A_PyGameMono-8.png differ diff --git a/EXE version/main/pygame/tests/fixtures/fonts/PyGameMono-18-100dpi.bdf b/EXE version/main/pygame/tests/fixtures/fonts/PyGameMono-18-100dpi.bdf new file mode 100644 index 00000000..a88f083e --- /dev/null +++ b/EXE version/main/pygame/tests/fixtures/fonts/PyGameMono-18-100dpi.bdf @@ -0,0 +1,165 @@ +STARTFONT 2.1 +FONT -FontForge-PyGameMono-Medium-R-Normal--25-180-100-100-M-250-ISO10646-1 +SIZE 18 100 100 +FONTBOUNDINGBOX 21 22 0 0 +COMMENT "Generated by fontforge, http://fontforge.sourceforge.net" +COMMENT "Created by Lenard Lindstrom,,, with FontForge 2.0 (http://fontforge.sf.net)" +STARTPROPERTIES 29 +FOUNDRY "FontForge" +FAMILY_NAME "PyGameMono" +WEIGHT_NAME "Medium" +SLANT "R" +SETWIDTH_NAME "Normal" +ADD_STYLE_NAME "" +PIXEL_SIZE 25 +POINT_SIZE 180 +RESOLUTION_X 100 +RESOLUTION_Y 100 +SPACING "M" +AVERAGE_WIDTH 250 +CHARSET_REGISTRY "ISO10646" +CHARSET_ENCODING "1" +FONTNAME_REGISTRY "" +CHARSET_COLLECTIONS "ISO10646-1" +FONT_NAME "PyGameMono" +FACE_NAME "PyGame Mono" +FONT_VERSION "001.000" +FONT_ASCENT 20 +FONT_DESCENT 5 +UNDERLINE_POSITION -2 +UNDERLINE_THICKNESS 2 +RAW_ASCENT 800 +RAW_DESCENT 200 +RELATIVE_WEIGHT 50 +RELATIVE_SETWIDTH 50 +FIGURE_WIDTH -1 +AVG_UPPERCASE_WIDTH 250 +ENDPROPERTIES +CHARS 5 +STARTCHAR .notdef +ENCODING 0 +SWIDTH 1000 0 +DWIDTH 25 0 +BBX 20 20 0 0 +BITMAP +FFFFF0 +FFFFF0 +FE07F0 +F801F0 +F000F0 +E00070 +E00070 +C00030 +C00030 +C00030 +C00030 +C00030 +C00030 +E00070 +E00070 +F000F0 +F801F0 +FE07F0 +FFFFF0 +FFFFF0 +ENDCHAR +STARTCHAR A +ENCODING 65 +SWIDTH 1000 0 +DWIDTH 25 0 +BBX 20 21 0 1 +BITMAP +03FC00 +1FFF80 +3FFFC0 +7C03E0 +F000F0 +E00070 +E00070 +F000F0 +FC03F0 +FFFFF0 +FFFFF0 +FFFFF0 +FF0FF0 +7C03F0 +7801E0 +7800E0 +7000E0 +700060 +600060 +200040 +200040 +ENDCHAR +STARTCHAR B +ENCODING 66 +SWIDTH 1000 0 +DWIDTH 25 0 +BBX 18 20 1 0 +BITMAP +FFFE00 +FFFF80 +7E0780 +7801C0 +7000C0 +3000C0 +3000C0 +3801C0 +3E0780 +3FFF00 +3FFF00 +3E0780 +380180 +3000C0 +3000C0 +3000C0 +7801C0 +7E07C0 +FFFF80 +FFFE00 +ENDCHAR +STARTCHAR C +ENCODING 67 +SWIDTH 1000 0 +DWIDTH 25 0 +BBX 20 20 0 0 +BITMAP +00FC00 +03FF00 +0FFF80 +1F03E0 +3E0070 +7C0010 +780000 +F80000 +F00000 +F00000 +F00000 +F00000 +F80000 +780000 +7C0010 +3E0070 +1F01E0 +0FFFC0 +03FF80 +00FE00 +ENDCHAR +STARTCHAR u13079 +ENCODING 77945 +SWIDTH 1000 0 +DWIDTH 25 0 +BBX 21 10 0 5 +BITMAP +03FC00 +0FFF80 +1E73C0 +78F8F0 +F0F878 +70F870 +3870E0 +1E03C0 +0FFF80 +03FC00 +ENDCHAR +ENDFONT diff --git a/EXE version/main/pygame/tests/fixtures/fonts/PyGameMono-18-75dpi.bdf b/EXE version/main/pygame/tests/fixtures/fonts/PyGameMono-18-75dpi.bdf new file mode 100644 index 00000000..127f7043 --- /dev/null +++ b/EXE version/main/pygame/tests/fixtures/fonts/PyGameMono-18-75dpi.bdf @@ -0,0 +1,143 @@ +STARTFONT 2.1 +FONT -FontForge-PyGameMono-Medium-R-Normal--19-180-75-75-M-190-ISO10646-1 +SIZE 18 75 75 +FONTBOUNDINGBOX 15 17 0 0 +COMMENT "Generated by fontforge, http://fontforge.sourceforge.net" +COMMENT "Created by Lenard Lindstrom,,, with FontForge 2.0 (http://fontforge.sf.net)" +STARTPROPERTIES 29 +FOUNDRY "FontForge" +FAMILY_NAME "PyGameMono" +WEIGHT_NAME "Medium" +SLANT "R" +SETWIDTH_NAME "Normal" +ADD_STYLE_NAME "" +PIXEL_SIZE 19 +POINT_SIZE 180 +RESOLUTION_X 75 +RESOLUTION_Y 75 +SPACING "M" +AVERAGE_WIDTH 190 +CHARSET_REGISTRY "ISO10646" +CHARSET_ENCODING "1" +FONTNAME_REGISTRY "" +CHARSET_COLLECTIONS "ISO10646-1" +FONT_NAME "PyGameMono" +FACE_NAME "PyGame Mono" +FONT_VERSION "001.000" +FONT_ASCENT 15 +FONT_DESCENT 4 +UNDERLINE_POSITION -2 +UNDERLINE_THICKNESS 1 +RAW_ASCENT 800 +RAW_DESCENT 200 +RELATIVE_WEIGHT 50 +RELATIVE_SETWIDTH 50 +FIGURE_WIDTH -1 +AVG_UPPERCASE_WIDTH 190 +ENDPROPERTIES +CHARS 5 +STARTCHAR .notdef +ENCODING 0 +SWIDTH 1000 0 +DWIDTH 19 0 +BBX 15 15 0 0 +BITMAP +FFFE +FFFE +FC7E +F01E +E00E +C006 +C006 +C006 +C006 +C006 +E00E +F01E +FC7E +FFFE +FFFE +ENDCHAR +STARTCHAR A +ENCODING 65 +SWIDTH 1000 0 +DWIDTH 19 0 +BBX 15 17 0 0 +BITMAP +0FE0 +3FF8 +783C +F01E +E00E +E00E +F01E +F83E +FFFE +FFFE +FC7E +701C +701C +600C +600C +4004 +4004 +ENDCHAR +STARTCHAR B +ENCODING 66 +SWIDTH 1000 0 +DWIDTH 19 0 +BBX 15 15 0 0 +BITMAP +FFF8 +7FFC +780E +3006 +3006 +380E +3FF8 +3FF8 +3FF8 +380E +3006 +3006 +7C1E +7FFC +FFF8 +ENDCHAR +STARTCHAR C +ENCODING 67 +SWIDTH 1000 0 +DWIDTH 19 0 +BBX 15 15 0 0 +BITMAP +03E0 +0FF8 +3C1C +7806 +7000 +E000 +E000 +E000 +E000 +E000 +7000 +7806 +3C1C +0FF8 +03E0 +ENDCHAR +STARTCHAR u13079 +ENCODING 77945 +SWIDTH 1000 0 +DWIDTH 19 0 +BBX 15 7 0 4 +BITMAP +0FE0 +3838 +638C +E38E +638C +3838 +0FE0 +ENDCHAR +ENDFONT diff --git a/EXE version/main/pygame/tests/fixtures/fonts/PyGameMono-8.bdf b/EXE version/main/pygame/tests/fixtures/fonts/PyGameMono-8.bdf new file mode 100644 index 00000000..17bef064 --- /dev/null +++ b/EXE version/main/pygame/tests/fixtures/fonts/PyGameMono-8.bdf @@ -0,0 +1,103 @@ +STARTFONT 2.1 +FONT -FontForge-PyGameMono-Medium-R-Normal--8-80-75-75-C-80-ISO10646-1 +SIZE 8 75 75 +FONTBOUNDINGBOX 6 7 0 0 +COMMENT "Generated by fontforge, http://fontforge.sourceforge.net" +COMMENT "Created by Lenard Lindstrom,,, with FontForge 2.0 (http://fontforge.sf.net)" +STARTPROPERTIES 29 +FOUNDRY "FontForge" +FAMILY_NAME "PyGameMono" +WEIGHT_NAME "Medium" +SLANT "R" +SETWIDTH_NAME "Normal" +ADD_STYLE_NAME "" +PIXEL_SIZE 8 +POINT_SIZE 80 +RESOLUTION_X 75 +RESOLUTION_Y 75 +SPACING "C" +AVERAGE_WIDTH 80 +CHARSET_REGISTRY "ISO10646" +CHARSET_ENCODING "1" +FONTNAME_REGISTRY "" +CHARSET_COLLECTIONS "ISO10646-1" +FONT_NAME "PyGameMono" +FACE_NAME "PyGame Mono" +FONT_VERSION "001.000" +FONT_ASCENT 6 +FONT_DESCENT 2 +UNDERLINE_POSITION -1 +UNDERLINE_THICKNESS 1 +RAW_ASCENT 800 +RAW_DESCENT 200 +RELATIVE_WEIGHT 50 +RELATIVE_SETWIDTH 50 +FIGURE_WIDTH -1 +AVG_UPPERCASE_WIDTH 80 +ENDPROPERTIES +CHARS 5 +STARTCHAR .notdef +ENCODING 0 +SWIDTH 1000 0 +DWIDTH 8 0 +BBX 6 6 0 0 +BITMAP +FC +84 +84 +84 +84 +FC +ENDCHAR +STARTCHAR A +ENCODING 65 +SWIDTH 1000 0 +DWIDTH 8 0 +BBX 6 7 0 0 +BITMAP +78 +84 +84 +FC +84 +84 +84 +ENDCHAR +STARTCHAR B +ENCODING 66 +SWIDTH 1000 0 +DWIDTH 8 0 +BBX 6 6 0 0 +BITMAP +FC +44 +78 +4C +44 +FC +ENDCHAR +STARTCHAR C +ENCODING 67 +SWIDTH 1000 0 +DWIDTH 8 0 +BBX 6 6 0 0 +BITMAP +78 +C4 +C0 +C0 +C4 +78 +ENDCHAR +STARTCHAR u13079 +ENCODING 77945 +SWIDTH 1000 0 +DWIDTH 8 0 +BBX 6 4 0 1 +BITMAP +78 +B4 +B4 +78 +ENDCHAR +ENDFONT diff --git a/EXE version/main/pygame/tests/fixtures/fonts/PyGameMono.otf b/EXE version/main/pygame/tests/fixtures/fonts/PyGameMono.otf new file mode 100644 index 00000000..5e9b66cc Binary files /dev/null and b/EXE version/main/pygame/tests/fixtures/fonts/PyGameMono.otf differ diff --git a/EXE version/main/pygame/tests/fixtures/fonts/test_fixed.otf b/EXE version/main/pygame/tests/fixtures/fonts/test_fixed.otf new file mode 100644 index 00000000..34888982 Binary files /dev/null and b/EXE version/main/pygame/tests/fixtures/fonts/test_fixed.otf differ diff --git a/EXE version/main/pygame/tests/fixtures/fonts/test_sans.ttf b/EXE version/main/pygame/tests/fixtures/fonts/test_sans.ttf new file mode 100644 index 00000000..09fac2ff Binary files /dev/null and b/EXE version/main/pygame/tests/fixtures/fonts/test_sans.ttf differ diff --git a/EXE version/main/pygame/tests/fixtures/fonts/u13079_PyGameMono-8.png b/EXE version/main/pygame/tests/fixtures/fonts/u13079_PyGameMono-8.png new file mode 100644 index 00000000..911da8a6 Binary files /dev/null and b/EXE version/main/pygame/tests/fixtures/fonts/u13079_PyGameMono-8.png differ diff --git a/EXE version/main/pygame/tests/fixtures/xbm_cursors/white_sizing.xbm b/EXE version/main/pygame/tests/fixtures/xbm_cursors/white_sizing.xbm new file mode 100644 index 00000000..d334d8dc --- /dev/null +++ b/EXE version/main/pygame/tests/fixtures/xbm_cursors/white_sizing.xbm @@ -0,0 +1,8 @@ +#define resize_white_width 16 +#define resize_white_height 16 +#define resize_white_x_hot 7 +#define resize_white_y_hot 7 +static unsigned char resize_white_bits[] = { + 0xff, 0x03, 0x01, 0x02, 0xfd, 0x03, 0x05, 0x00, 0xf5, 0x0f, 0x15, 0x08, + 0xd5, 0xeb, 0x55, 0xaa, 0x55, 0xaa, 0xd7, 0xab, 0x10, 0xa8, 0xf0, 0xb7, + 0x00, 0xa8, 0xc0, 0x9f, 0x40, 0x80, 0xc0, 0xff}; diff --git a/EXE version/main/pygame/tests/fixtures/xbm_cursors/white_sizing_mask.xbm b/EXE version/main/pygame/tests/fixtures/xbm_cursors/white_sizing_mask.xbm new file mode 100644 index 00000000..f00bc46a --- /dev/null +++ b/EXE version/main/pygame/tests/fixtures/xbm_cursors/white_sizing_mask.xbm @@ -0,0 +1,8 @@ +#define resize_white_mask_width 16 +#define resize_white_mask_height 16 +#define resize_white_mask_x_hot 7 +#define resize_white_mask_y_hot 7 +static unsigned char resize_white_mask_bits[] = { + 0xff, 0x03, 0xff, 0x03, 0xff, 0x03, 0x07, 0x00, 0xf7, 0x0f, 0xf7, 0x0f, + 0xf7, 0xef, 0x77, 0xee, 0x77, 0xee, 0xf7, 0xef, 0xf0, 0xef, 0xf0, 0xff, + 0x00, 0xf8, 0xc0, 0xff, 0xc0, 0xff, 0xc0, 0xff}; diff --git a/EXE version/main/pygame/time.cp39-win_amd64.pyd b/EXE version/main/pygame/time.cp39-win_amd64.pyd new file mode 100644 index 00000000..4136c2c1 Binary files /dev/null and b/EXE version/main/pygame/time.cp39-win_amd64.pyd differ diff --git a/EXE version/main/pygame/time.pyi b/EXE version/main/pygame/time.pyi new file mode 100644 index 00000000..5669a6fc --- /dev/null +++ b/EXE version/main/pygame/time.pyi @@ -0,0 +1,14 @@ +from typing import Optional, Union +from pygame.event import Event + +def get_ticks() -> int: ... +def wait(milliseconds: int) -> int: ... +def delay(milliseconds: int) -> int: ... +def set_timer(event: Union[int, Event], millis: int, loops: int = 0) -> None: ... + +class Clock: + def tick(self, framerate: int = 0) -> int: ... + def tick_busy_loop(self, framerate: int = 0) -> int: ... + def get_time(self) -> int: ... + def get_rawtime(self) -> int: ... + def get_fps(self) -> float: ... diff --git a/EXE version/main/pygame/transform.cp39-win_amd64.pyd b/EXE version/main/pygame/transform.cp39-win_amd64.pyd new file mode 100644 index 00000000..64243483 Binary files /dev/null and b/EXE version/main/pygame/transform.cp39-win_amd64.pyd differ diff --git a/EXE version/main/pygame/transform.pyi b/EXE version/main/pygame/transform.pyi new file mode 100644 index 00000000..ae5786f6 --- /dev/null +++ b/EXE version/main/pygame/transform.pyi @@ -0,0 +1,50 @@ +from typing import Tuple, List, Union, Optional, Sequence +from pygame.surface import Surface +from pygame.math import Vector2 +from pygame.color import Color +from pygame.rect import Rect + +_Coordinate = Union[Tuple[float, float], List[float], Vector2] +_ColorValue = Union[ + Color, Tuple[int, int, int], List[int], int, Tuple[int, int, int, int] +] +_RectValue = Union[ + Rect, + Union[Tuple[int, int, int, int], List[int]], + Union[Tuple[_Coordinate, _Coordinate], List[_Coordinate]], +] + +def flip(surface: Surface, flip_x: bool, flip_y: bool) -> Surface: ... +def scale( + surface: Surface, + size: _Coordinate, + dest_surface: Optional[Surface] = None, +) -> Surface: ... +def rotate(surface: Surface, angle: float) -> Surface: ... +def rotozoom(surface: Surface, angle: float, scale: float) -> Surface: ... +def scale2x(surface: Surface, dest_surface: Optional[Surface] = None) -> Surface: ... +def smoothscale( + surface: Surface, + size: _Coordinate, + dest_surface: Optional[Surface] = None, +) -> Surface: ... +def get_smoothscale_backend() -> str: ... +def set_smoothscale_backend(backend: str) -> None: ... +def chop(surface: Surface, rect: _RectValue) -> Surface: ... +def laplacian(surface: Surface, dest_surface: Surface) -> Surface: ... +def average_surfaces( + surfaces: Sequence[Surface], + dest_surface: Optional[Surface] = None, + palette_colors: Union[bool, int] = 1, +) -> Surface: ... +def average_color(surface: Surface, rect: Optional[_RectValue]) -> Color: ... +def threshold( + dest_surface: Surface, + surface: Surface, + search_color: _ColorValue, + threshold: Optional[_ColorValue] = (0, 0, 0, 0), + set_color: Optional[_ColorValue] = (0, 0, 0, 0), + set_behavior: Optional[int] = 1, + search_surf: Optional[Surface] = None, + inverse_set: Optional[bool] = False, +) -> int: ... diff --git a/EXE version/main/pygame/version.pyi b/EXE version/main/pygame/version.pyi new file mode 100644 index 00000000..41f21324 --- /dev/null +++ b/EXE version/main/pygame/version.pyi @@ -0,0 +1,17 @@ +from typing import Tuple + +class SoftwareVersion(Tuple[int, int, int]): + def __new__(cls, major: int, minor: int, patch: int) -> PygameVersion: ... + def __repr__(self) -> str: ... + def __str__(self) -> str: ... + major: int + minor: int + patch: int + +class PygameVersion(SoftwareVersion): ... +class SDLVersion(SoftwareVersion): ... + +SDL: SDLVersion +ver: str +vernum: PygameVersion +rev: str diff --git a/EXE version/main/pygame/zlib1.dll b/EXE version/main/pygame/zlib1.dll new file mode 100644 index 00000000..e7493de3 Binary files /dev/null and b/EXE version/main/pygame/zlib1.dll differ diff --git a/EXE version/main/pyinstaller-4.5.1.dist-info/COPYING.txt b/EXE version/main/pyinstaller-4.5.1.dist-info/COPYING.txt new file mode 100644 index 00000000..1e655346 --- /dev/null +++ b/EXE version/main/pyinstaller-4.5.1.dist-info/COPYING.txt @@ -0,0 +1,602 @@ +================================ + The PyInstaller licensing terms +================================ + + +Copyright (c) 2010-2021, PyInstaller Development Team +Copyright (c) 2005-2009, Giovanni Bajo +Based on previous work under copyright (c) 2002 McMillan Enterprises, Inc. + + +PyInstaller is licensed under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 of the License, +or (at your option) any later version. + + +Bootloader Exception +-------------------- + +In addition to the permissions in the GNU General Public License, the +authors give you unlimited permission to link or embed compiled bootloader +and related files into combinations with other programs, and to distribute +those combinations without any restriction coming from the use of those +files. (The General Public License restrictions do apply in other respects; +for example, they cover modification of the files, and distribution when +not linked into a combined executable.) + + +Bootloader and Related Files +---------------------------- + +Bootloader and related files are files which are embedded within the +final executable. This includes files in directories: + +./bootloader/ +./PyInstaller/loader + + +Run-time Hooks +---------------------------- + +Run-time Hooks are a different kind of files embedded within the final +executable. To ease moving them into a separate repository, or into the +respective project, these file are now licensed under the Apache License, +Version 2.0. + +Run-time Hooks are in the directory +./PyInstaller/hooks/rthooks + + +About the PyInstaller Development Team +-------------------------------------- + +The PyInstaller Development Team is the set of contributors +to the PyInstaller project. A full list with details is kept +in the documentation directory, in the file +``doc/CREDITS.rst``. + +The core team that coordinates development on GitHub can be found here: +https://github.com/pyinstaller/pyinstaller. As of 2021, it consists of: + +* Hartmut Goebel +* Jasper Harrison +* Bryan Jones +* Brenainn Woodsend +* Rok Mandeljc + +Our Copyright Policy +-------------------- + +PyInstaller uses a shared copyright model. Each contributor maintains copyright +over their contributions to PyInstaller. But, it is important to note that these +contributions are typically only changes to the repositories. Thus, +the PyInstaller source code, in its entirety is not the copyright of any single +person or institution. Instead, it is the collective copyright of the entire +PyInstaller Development Team. If individual contributors want to maintain +a record of what changes/contributions they have specific copyright on, they +should indicate their copyright in the commit message of the change, when they +commit the change to the PyInstaller repository. + +With this in mind, the following banner should be used in any source code file +to indicate the copyright and license terms: + + +#----------------------------------------------------------------------------- +# Copyright (c) 2005-2021, PyInstaller Development Team. +# +# Distributed under the terms of the GNU General Public License (version 2 +# or later) with exception for distributing the bootloader. +# +# The full license is in the file COPYING.txt, distributed with this software. +# +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception) +#----------------------------------------------------------------------------- + + +For run-time hooks, the following banner should be used: + +#----------------------------------------------------------------------------- +# Copyright (c) 2005-2021, PyInstaller Development Team. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# +# The full license is in the file COPYING.txt, distributed with this software. +# +# SPDX-License-Identifier: Apache-2.0 +#----------------------------------------------------------------------------- + + +================================ +GNU General Public License +================================ + +https://gnu.org/licenses/gpl-2.0.html + + + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + +================================ +Apache License 2.0 +================================ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/EXE version/main/pyinstaller-4.5.1.dist-info/INSTALLER b/EXE version/main/pyinstaller-4.5.1.dist-info/INSTALLER new file mode 100644 index 00000000..a1b589e3 --- /dev/null +++ b/EXE version/main/pyinstaller-4.5.1.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/EXE version/main/pyinstaller-4.5.1.dist-info/METADATA b/EXE version/main/pyinstaller-4.5.1.dist-info/METADATA new file mode 100644 index 00000000..1c6511b8 --- /dev/null +++ b/EXE version/main/pyinstaller-4.5.1.dist-info/METADATA @@ -0,0 +1,207 @@ +Metadata-Version: 2.1 +Name: pyinstaller +Version: 4.5.1 +Summary: PyInstaller bundles a Python application and all its dependencies into a single package. +Home-page: http://www.pyinstaller.org/ +Author: Hartmut Goebel, Giovanni Bajo, David Vierra, David Cortesi, Martin Zibricky +License: GPLv2-or-later with a special exception which allows to use PyInstaller to build and distribute non-free programs (including commercial ones) +Keywords: packaging, app, apps, bundle, convert, standalone, executable,pyinstaller, cxfreeze, freeze, py2exe, py2app, bbfreeze +Platform: UNKNOWN +Classifier: Development Status :: 6 - Mature +Classifier: Environment :: Console +Classifier: Intended Audience :: Developers +Classifier: Intended Audience :: Other Audience +Classifier: Intended Audience :: System Administrators +Classifier: License :: OSI Approved :: GNU General Public License v2 (GPLv2) +Classifier: Natural Language :: English +Classifier: Operating System :: MacOS :: MacOS X +Classifier: Operating System :: Microsoft :: Windows +Classifier: Operating System :: POSIX +Classifier: Operating System :: POSIX :: AIX +Classifier: Operating System :: POSIX :: BSD +Classifier: Operating System :: POSIX :: Linux +Classifier: Operating System :: POSIX :: SunOS/Solaris +Classifier: Programming Language :: C +Classifier: Programming Language :: Python +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3 :: Only +Classifier: Programming Language :: Python :: 3.6 +Classifier: Programming Language :: Python :: 3.7 +Classifier: Programming Language :: Python :: 3.8 +Classifier: Programming Language :: Python :: 3.9 +Classifier: Programming Language :: Python :: Implementation :: CPython +Classifier: Topic :: Software Development +Classifier: Topic :: Software Development :: Build Tools +Classifier: Topic :: Software Development :: Interpreters +Classifier: Topic :: Software Development :: Libraries :: Python Modules +Classifier: Topic :: System :: Installation/Setup +Classifier: Topic :: System :: Software Distribution +Classifier: Topic :: Utilities +Requires-Python: >=3.6 +Description-Content-Type: text/x-rst +License-File: COPYING.txt +Requires-Dist: setuptools +Requires-Dist: altgraph +Requires-Dist: pyinstaller-hooks-contrib (>=2020.6) +Requires-Dist: importlib-metadata ; python_version < "3.8" +Requires-Dist: macholib (>=1.8) ; sys_platform == "darwin" +Requires-Dist: pefile (>=2017.8.1) ; sys_platform == "win32" +Requires-Dist: pywin32-ctypes (>=0.2.0) ; sys_platform == "win32" +Provides-Extra: encryption +Requires-Dist: tinyaes (>=1.0.0) ; extra == 'encryption' +Provides-Extra: hook_testing +Requires-Dist: pytest (>=2.7.3) ; extra == 'hook_testing' +Requires-Dist: execnet (>=1.5.0) ; extra == 'hook_testing' +Requires-Dist: psutil ; extra == 'hook_testing' + +PyInstaller Overview +==================== + +PyInstaller bundles a Python application and all its dependencies into a single +package. The user can run the packaged app without installing a Python +interpreter or any modules. + +:Documentation: https://pyinstaller.readthedocs.io/ +:Website: http://www.pyinstaller.org/ +:Code: https://github.com/pyinstaller/pyinstaller + +PyInstaller reads a Python script written by you. It analyzes your code +to discover every other module and library your script needs in order to +execute. Then it collects copies of all those files -- including the active +Python interpreter! -- and puts them with your script in a single folder, or +optionally in a single executable file. + + +PyInstaller is tested against Windows, Mac OS X, and GNU/Linux. +However, it is not a cross-compiler: +to make a Windows app you run PyInstaller in Windows; to make +a GNU/Linux app you run it in GNU/Linux, etc. +PyInstaller has been used successfully +with AIX, Solaris, FreeBSD and OpenBSD, +but is not tested against them as part of the continuous integration tests. + + +Main Advantages +--------------- + +- Works out-of-the-box with any Python version 3.6-3.9. +- Fully multi-platform, and uses the OS support to load the dynamic libraries, + thus ensuring full compatibility. +- Correctly bundles the major Python packages such as numpy, PyQt5, + PySide2, Django, wxPython, matplotlib and others out-of-the-box. +- Compatible with many 3rd-party packages out-of-the-box. (All the required + tricks to make external packages work are already integrated.) +- Libraries like PyQt5, PySide2, wxPython, matplotlib or Django are fully + supported, without having to handle plugins or external data files manually. +- Works with code signing on OS X. +- Bundles MS Visual C++ DLLs on Windows. + + +Installation +------------ + +PyInstaller is available on PyPI. You can install it through `pip`:: + + pip install pyinstaller + + +Requirements and Tested Platforms +--------------------------------- + +- Python: + + - 3.6-3.9 + - tinyaes_ 1.0+ (only if using bytecode encryption). + Instead of installing tinyaes, ``pip install pyinstaller[encryption]`` instead. + +- Windows (32bit/64bit): + + - PyInstaller should work on Windows 7 or newer, but we only officially support Windows 8+. + + - Support for Python installed from the Windows store without using virtual + environments requires PyInstaller 4.4 or later. + +- GNU/Linux (32bit/64bit) + + - ldd: Console application to print the shared libraries required + by each program or shared library. This typically can be found in + the distribution-package `glibc` or `libc-bin`. + - objdump: Console application to display information from + object files. This typically can be found in the + distribution-package `binutils`. + - objcopy: Console application to copy and translate object files. + This typically can be found in the distribution-package `binutils`, + too. + +- Mac OS X (64bit): + + - Mac OS X 10.13 (High Sierra) or newer. + + +Usage +----- + +Basic usage is very simple, just run it against your main script:: + + pyinstaller /path/to/yourscript.py + +For more details, see the `manual`_. + + +Untested Platforms +------------------ + +The following platforms have been contributed and any feedback or +enhancements on these are welcome. + +- FreeBSD + + - ldd + +- Solaris + + - ldd + - objdump + +- AIX + + - AIX 6.1 or newer. PyInstaller will not work with statically + linked Python libraries. + - ldd + +- PowerPC GNU/Linux (Debian) + + +Before using any contributed platform, you need to build the PyInstaller +bootloader, as we do not ship binary packages. Download PyInstaller +source, and build the bootloader:: + + cd bootloader + python ./waf all + +Then install PyInstaller:: + + python setup.py install + +or simply use it directly from the source (pyinstaller.py). + + +Support +------- + +See http://www.pyinstaller.org/support.html for how to find help as well as +for commercial support. + + +Changes in this Release +----------------------- + +You can find a detailed list of changes in this release +in the `Changelog`_ section of the manual. + + +.. _tinyaes: https://github.com/naufraghi/tinyaes-py +.. _`manual`: https://pyinstaller.readthedocs.io/en/v4.5.1/ +.. _`Changelog`: https://pyinstaller.readthedocs.io/en/v4.5.1/CHANGES.html + + diff --git a/EXE version/main/pyinstaller-4.5.1.dist-info/RECORD b/EXE version/main/pyinstaller-4.5.1.dist-info/RECORD new file mode 100644 index 00000000..48fd5e2c --- /dev/null +++ b/EXE version/main/pyinstaller-4.5.1.dist-info/RECORD @@ -0,0 +1,644 @@ +../../Scripts/pyi-archive_viewer.exe,sha256=VgqKPStLx76HOfElFdhyzKjR20fG_R99xXtCaX1wUtg,106394 +../../Scripts/pyi-bindepend.exe,sha256=8Uyfmu1lzRMqg6NXOoivS2UUi61jrMm8_o9lLbjMm_Q,106389 +../../Scripts/pyi-grab_version.exe,sha256=5wVmvyorTUWXG82-Ij79dUxOZhJpfiqvHb35SBMrImw,106392 +../../Scripts/pyi-makespec.exe,sha256=OJVHWFYNgm02YJBJRbBjbVPmzYBjNH9tTcGASHslX5w,106388 +../../Scripts/pyi-set_version.exe,sha256=NfZ9c4RQTfK5anwSIUZI6Lel6PuWCgnUDT93BA69WWc,106391 +../../Scripts/pyinstaller.exe,sha256=3WsqXQpjoSoqyrl34rOEZUa67ZIEjMZ9NJFWSGiXG_s,106373 +PyInstaller/__init__.py,sha256=yUrIv4M4p-kB8-mZZVq3EFCzaxVdP4Q9J71WWsBaz7k,2853 +PyInstaller/__main__.py,sha256=HnNlY8o5fwZtxAL1DEgXUmCu1n9gpe3UwCTBIfLdBJo,4595 +PyInstaller/__pycache__/__init__.cpython-39.pyc,, +PyInstaller/__pycache__/__main__.cpython-39.pyc,, +PyInstaller/__pycache__/_recursion_to_deep_message.cpython-39.pyc,, +PyInstaller/__pycache__/_shared_with_waf.cpython-39.pyc,, +PyInstaller/__pycache__/compat.cpython-39.pyc,, +PyInstaller/__pycache__/config.cpython-39.pyc,, +PyInstaller/__pycache__/configure.cpython-39.pyc,, +PyInstaller/__pycache__/exceptions.cpython-39.pyc,, +PyInstaller/__pycache__/log.cpython-39.pyc,, +PyInstaller/_recursion_to_deep_message.py,sha256=uPV_pJT4H-pfsn8Otkp34-DY12QCFK0t-yKLX6mF7Uo,1822 +PyInstaller/_shared_with_waf.py,sha256=887ZSctYGwbeUqwBwUd1fEASglm9aAji4IdMnneV6q8,3618 +PyInstaller/archive/__init__.py,sha256=fNGhsx0m5s9iq4yMvH6J1tI0vzUKWd62lIQNSnKTGCE,22 +PyInstaller/archive/__pycache__/__init__.cpython-39.pyc,, +PyInstaller/archive/__pycache__/pyz_crypto.cpython-39.pyc,, +PyInstaller/archive/__pycache__/readers.cpython-39.pyc,, +PyInstaller/archive/__pycache__/writers.cpython-39.pyc,, +PyInstaller/archive/pyz_crypto.py,sha256=wWtC_gFJlpw9FWXGd_jUS-A-7LfX2PEbobF5j5H6d8o,1307 +PyInstaller/archive/readers.py,sha256=GbDmleDA46fNeJgiktI_9HLg44VTup1V607FoDzeheY,8437 +PyInstaller/archive/writers.py,sha256=6nlH06b6U1KbcOvkRbPORSfhcYJ1HD8SM9Daa7kvl34,24199 +PyInstaller/bootloader/Windows-64bit/run.exe,sha256=tlfNrajk_2o4qbwQjQrmJOAtxvW-fmpDaRT76aPx51M,231424 +PyInstaller/bootloader/Windows-64bit/run_d.exe,sha256=mL5wUT7R8vuG4_h2CcGt-oRApDGAvFA496K74oLg1uA,236544 +PyInstaller/bootloader/Windows-64bit/runw.exe,sha256=PErgT7yUcRwhF0HpEVdWzNe2gITCkAnhDpDs0vFxBOM,231936 +PyInstaller/bootloader/Windows-64bit/runw_d.exe,sha256=v_psVL3VavfLxExgnk99ho4wlgHZ9b0SCwGTKKGxPB4,237568 +PyInstaller/bootloader/images/github_logo.png,sha256=imO7TMwvLWqjXQOv6VYGyQ5AIMOoGN4HG_uXPrKR5fo,266950 +PyInstaller/bootloader/images/icon-console.icns,sha256=TrztrfQbL3yp6yZbQm1p-IV8XXZSOjTtl8sH-cXybpI,106001 +PyInstaller/bootloader/images/icon-console.ico,sha256=aALW1IOexhlTRN7sYcLc9gIWH52Xsk9ic3kEaehHets,59521 +PyInstaller/bootloader/images/icon-console.svg,sha256=ch-48QSGSm6Z0g0dPbFLAHqeoIBY8lQ5fvPFYBSrTC4,339276 +PyInstaller/bootloader/images/icon-windowed.icns,sha256=uQo7VuWRab4Phv4EEGmfQsyqFqDIXZgO8OtgaAMvCzY,110199 +PyInstaller/bootloader/images/icon-windowed.ico,sha256=Fo2xuKfGL6KrksEhAYXRRZI_McG-I_3tQtlCD0i5g5I,60690 +PyInstaller/bootloader/images/icon-windowed.svg,sha256=Djj2Zv-uqNbITnV31bkBgtK_nTP_16rWSMJesH_l7K0,339293 +PyInstaller/building/__init__.py,sha256=MsSFjiLMLJZ7QhUPpVBWKiyDnCzryquRyr329NoCACI,2 +PyInstaller/building/__pycache__/__init__.cpython-39.pyc,, +PyInstaller/building/__pycache__/api.cpython-39.pyc,, +PyInstaller/building/__pycache__/build_main.cpython-39.pyc,, +PyInstaller/building/__pycache__/datastruct.cpython-39.pyc,, +PyInstaller/building/__pycache__/makespec.cpython-39.pyc,, +PyInstaller/building/__pycache__/osx.cpython-39.pyc,, +PyInstaller/building/__pycache__/splash.cpython-39.pyc,, +PyInstaller/building/__pycache__/splash_templates.cpython-39.pyc,, +PyInstaller/building/__pycache__/templates.cpython-39.pyc,, +PyInstaller/building/__pycache__/toc_conversion.cpython-39.pyc,, +PyInstaller/building/__pycache__/utils.cpython-39.pyc,, +PyInstaller/building/api.py,sha256=7ZeftJ3Jip-QPdew14jAuxzlArBv4x73SBNdN8WMuYg,46746 +PyInstaller/building/build_main.py,sha256=9z9NheXJN_wx3VR6ZMrwNX9I7p0zKxvjC3KNcN6SyRA,35914 +PyInstaller/building/datastruct.py,sha256=WkLPDa2sPJwYa2cuDXSUMlTMtDN5W2DAw-YMVWuRYk4,10342 +PyInstaller/building/makespec.py,sha256=AKqXBZ-vrNsW0FuHZSSJdniIF24Zbo_1TChcIMnIzGk,32784 +PyInstaller/building/osx.py,sha256=k7EceSqREO9O_R3KVvDr-EKuv30fcpFM7-iDpG3IC-k,12244 +PyInstaller/building/splash.py,sha256=cWRgOIty7jxyRtSkU1jEmwGg5j269uIr79ntmvL3VrA,22449 +PyInstaller/building/splash_templates.py,sha256=nzjfn3GhRCgYcoBW9V-apBRbMMFYo3skZ8QDqPdxqqo,6309 +PyInstaller/building/templates.py,sha256=uoASpn2w4W6WOAW0U7PwKtLYnjw9iJS2DQWtZFQHf0w,4105 +PyInstaller/building/toc_conversion.py,sha256=XMP0VUkxEh1d5eoqVevRUH558rOwc4WtxpsvjqveRnE,7047 +PyInstaller/building/utils.py,sha256=xITh4NUMMtFq825ipr7gCWkp86yvNjdxqBHuJs2P7Sc,31125 +PyInstaller/compat.py,sha256=kgaeVSDHfWBgHyo-pBEfx-sEj4YrxZTvf_UGPJJOICc,27827 +PyInstaller/config.py,sha256=7Dl4rDiyMetCAy1GlVuGa2HkS-mdopp7dmoemZ_ZJWk,1729 +PyInstaller/configure.py,sha256=hBrHnCF84KLa1Yzd8Un9lk214UJU1-YMusArJjRsoCk,3368 +PyInstaller/depend/__init__.py,sha256=MsSFjiLMLJZ7QhUPpVBWKiyDnCzryquRyr329NoCACI,2 +PyInstaller/depend/__pycache__/__init__.cpython-39.pyc,, +PyInstaller/depend/__pycache__/analysis.cpython-39.pyc,, +PyInstaller/depend/__pycache__/bindepend.cpython-39.pyc,, +PyInstaller/depend/__pycache__/bytecode.cpython-39.pyc,, +PyInstaller/depend/__pycache__/dylib.cpython-39.pyc,, +PyInstaller/depend/__pycache__/imphook.cpython-39.pyc,, +PyInstaller/depend/__pycache__/imphookapi.cpython-39.pyc,, +PyInstaller/depend/__pycache__/utils.cpython-39.pyc,, +PyInstaller/depend/analysis.py,sha256=Ie0tblYkR-SVDkysORJa0RbU_dlRzQxU0EqMpdr5QYo,41844 +PyInstaller/depend/bindepend.py,sha256=p_eMW2T141EkOTeNIy7b3xjyIg-RzRi9Kp-pQEhhBqY,38275 +PyInstaller/depend/bytecode.py,sha256=3NiOLGlu2YbYHPDPieBxyXLYXSDJC28J_M1qXnybGrU,8286 +PyInstaller/depend/dylib.py,sha256=FryBwOuW-B9_zowowRzIiXZCl-ntStTTEgCviB1nRa4,12438 +PyInstaller/depend/imphook.py,sha256=mHPW3eyQqqoWIlOHk0kXhIy1yxuHrzUomiZ81HUnBx0,27349 +PyInstaller/depend/imphookapi.py,sha256=UQpTQYk2BuuwAgAvQJEfyEMoBbLazvhLV9IDk2ZyElA,19652 +PyInstaller/depend/utils.py,sha256=hLFkAyUqKRaufAyBEjnY60Q5HvjLX0Z6Fle5SUmkyM8,17721 +PyInstaller/exceptions.py,sha256=kOEusH4TKt_X7pErlId-ikP0uT9hNlkUWMEOajN2Za0,1136 +PyInstaller/fake-modules/__pycache__/pyi_splash.cpython-39.pyc,, +PyInstaller/fake-modules/__pycache__/site.cpython-39.pyc,, +PyInstaller/fake-modules/pyi_splash.py,sha256=D0hm8wViZLk0aF-pOVhIGky_Pv3Qu2UPZIkOAA-G5yU,8680 +PyInstaller/fake-modules/site.py,sha256=XU5CGaIfAa0sJMQyT5Npzrh3aP65LYIBzk_sfKWQ2_Q,2249 +PyInstaller/hooks/__init__.py,sha256=MsSFjiLMLJZ7QhUPpVBWKiyDnCzryquRyr329NoCACI,2 +PyInstaller/hooks/__pycache__/__init__.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-PIL.Image.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-PIL.ImageFilter.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-PIL.SpiderImagePlugin.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-PIL.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-PyQt5.Qt.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-PyQt5.QtCore.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-PyQt5.QtGui.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-PyQt5.QtHelp.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-PyQt5.QtMultimedia.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-PyQt5.QtNetwork.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-PyQt5.QtOpenGL.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-PyQt5.QtPrintSupport.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-PyQt5.QtQml.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-PyQt5.QtQuick.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-PyQt5.QtQuickWidgets.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-PyQt5.QtScript.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-PyQt5.QtSensors.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-PyQt5.QtSerialPort.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-PyQt5.QtSql.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-PyQt5.QtSvg.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-PyQt5.QtTest.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-PyQt5.QtWebEngineWidgets.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-PyQt5.QtWebKit.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-PyQt5.QtWebKitWidgets.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-PyQt5.QtWidgets.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-PyQt5.QtXml.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-PyQt5.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-PyQt5.uic.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-PyQt6.QtCore.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-PyQt6.QtGui.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-PyQt6.QtHelp.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-PyQt6.QtNetwork.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-PyQt6.QtOpenGL.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-PyQt6.QtPrintSupport.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-PyQt6.QtQml.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-PyQt6.QtQuick.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-PyQt6.QtQuickWidgets.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-PyQt6.QtSql.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-PyQt6.QtSvg.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-PyQt6.QtTest.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-PyQt6.QtWidgets.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-PyQt6.QtXml.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-PyQt6.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-PyQt6.uic.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-PySide2.QtCore.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-PySide2.QtGui.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-PySide2.QtHelp.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-PySide2.QtMultimedia.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-PySide2.QtNetwork.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-PySide2.QtOpenGL.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-PySide2.QtPrintSupport.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-PySide2.QtQml.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-PySide2.QtQuick.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-PySide2.QtQuickWidgets.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-PySide2.QtScript.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-PySide2.QtSensors.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-PySide2.QtSerialPort.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-PySide2.QtSql.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-PySide2.QtSvg.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-PySide2.QtTest.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-PySide2.QtUiTools.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-PySide2.QtWebEngineWidgets.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-PySide2.QtWebKit.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-PySide2.QtWebKitWidgets.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-PySide2.QtWidgets.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-PySide2.QtXml.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-PySide2.Qwt5.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-PySide2.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-PySide6.QtCore.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-PySide6.QtGui.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-PySide6.QtHelp.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-PySide6.QtNetwork.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-PySide6.QtOpenGL.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-PySide6.QtPrintSupport.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-PySide6.QtQml.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-PySide6.QtQuick.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-PySide6.QtQuickWidgets.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-PySide6.QtSql.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-PySide6.QtSvg.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-PySide6.QtTest.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-PySide6.QtUiTools.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-PySide6.QtWidgets.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-PySide6.QtXml.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-PySide6.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-_tkinter.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-babel.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-difflib.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-distutils.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-distutils.util.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-django.contrib.sessions.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-django.core.cache.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-django.core.mail.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-django.core.management.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-django.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-django.db.backends.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-django.db.backends.mysql.base.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-django.db.backends.oracle.base.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-django.template.loaders.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-encodings.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-gevent.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-gi.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-gi.repository.Atk.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-gi.repository.Champlain.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-gi.repository.Clutter.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-gi.repository.GIRepository.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-gi.repository.GLib.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-gi.repository.GModule.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-gi.repository.GObject.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-gi.repository.Gdk.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-gi.repository.GdkPixbuf.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-gi.repository.Gio.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-gi.repository.Gst.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-gi.repository.GstAudio.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-gi.repository.GstBase.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-gi.repository.GstPbutils.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-gi.repository.GstTag.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-gi.repository.GstVideo.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-gi.repository.Gtk.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-gi.repository.GtkChamplain.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-gi.repository.GtkClutter.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-gi.repository.GtkSource.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-gi.repository.GtkosxApplication.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-gi.repository.HarfBuzz.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-gi.repository.Pango.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-gi.repository.PangoCairo.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-gi.repository.cairo.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-gi.repository.xlib.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-heapq.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-idlelib.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-importlib_metadata.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-importlib_resources.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-keyring.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-kivy.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-lib2to3.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-matplotlib.backends.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-matplotlib.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-matplotlib.numerix.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-multiprocessing.util.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-numpy._pytesttester.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-numpy.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-packaging.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-pandas.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-pandas.io.formats.style.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-pickle.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-pkg_resources.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-pygments.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-pytz.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-pytzdata.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-qtawesome.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-scapy.layers.all.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-scipy.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-scipy.io.matlab.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-scipy.linalg.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-scipy.sparse.csgraph.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-scipy.spatial.transform.rotation.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-scipy.special._ellip_harm_2.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-scipy.special._ufuncs.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-scipy.stats._stats.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-scrapy.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-setuptools.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-setuptools.msvc.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-shelve.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-sphinx.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-sqlalchemy.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-sqlite3.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-sysconfig.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-wcwidth.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-win32ctypes.core.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-xml.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-xml.dom.domreg.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-xml.etree.cElementTree.cpython-39.pyc,, +PyInstaller/hooks/__pycache__/hook-zope.interface.cpython-39.pyc,, +PyInstaller/hooks/hook-PIL.Image.py,sha256=HQiplFhXOWCjFPOXBiBs_Skz54aQXbUJD2AEN6-4J9o,850 +PyInstaller/hooks/hook-PIL.ImageFilter.py,sha256=2QksTYzvBXENvZyr94EJP8MO4jFc1-2cYj1GEBzK1Qw,589 +PyInstaller/hooks/hook-PIL.SpiderImagePlugin.py,sha256=IwHKqht5eEbGmPPuXUESK2XXiYRM4gKxmFIKinjegO0,777 +PyInstaller/hooks/hook-PIL.py,sha256=Vlka23GDw6qzND4VP6q3EnxLzAW7pIUnA_CNx_7t5QM,929 +PyInstaller/hooks/hook-PyQt5.Qt.py,sha256=Y8SM5gNxWTOSasOjvJXlL3YChccSEmbGGcjRS0t6FYc,1274 +PyInstaller/hooks/hook-PyQt5.QtCore.py,sha256=kECtqXU5XzAOHufF6WbrpfAjbFB872dVxFeMNvjhZiI,632 +PyInstaller/hooks/hook-PyQt5.QtGui.py,sha256=kECtqXU5XzAOHufF6WbrpfAjbFB872dVxFeMNvjhZiI,632 +PyInstaller/hooks/hook-PyQt5.QtHelp.py,sha256=kECtqXU5XzAOHufF6WbrpfAjbFB872dVxFeMNvjhZiI,632 +PyInstaller/hooks/hook-PyQt5.QtMultimedia.py,sha256=kECtqXU5XzAOHufF6WbrpfAjbFB872dVxFeMNvjhZiI,632 +PyInstaller/hooks/hook-PyQt5.QtNetwork.py,sha256=eaMVC5y8wyaEzUKNbzubv5h_nRbv-OAPJrz9ChrwrCE,747 +PyInstaller/hooks/hook-PyQt5.QtOpenGL.py,sha256=kECtqXU5XzAOHufF6WbrpfAjbFB872dVxFeMNvjhZiI,632 +PyInstaller/hooks/hook-PyQt5.QtPrintSupport.py,sha256=kECtqXU5XzAOHufF6WbrpfAjbFB872dVxFeMNvjhZiI,632 +PyInstaller/hooks/hook-PyQt5.QtQml.py,sha256=OY_MVGb0cJWdvIsTZLf2VFWdjWxeP7TooPzRm1gJCmM,783 +PyInstaller/hooks/hook-PyQt5.QtQuick.py,sha256=kECtqXU5XzAOHufF6WbrpfAjbFB872dVxFeMNvjhZiI,632 +PyInstaller/hooks/hook-PyQt5.QtQuickWidgets.py,sha256=kECtqXU5XzAOHufF6WbrpfAjbFB872dVxFeMNvjhZiI,632 +PyInstaller/hooks/hook-PyQt5.QtScript.py,sha256=kECtqXU5XzAOHufF6WbrpfAjbFB872dVxFeMNvjhZiI,632 +PyInstaller/hooks/hook-PyQt5.QtSensors.py,sha256=kECtqXU5XzAOHufF6WbrpfAjbFB872dVxFeMNvjhZiI,632 +PyInstaller/hooks/hook-PyQt5.QtSerialPort.py,sha256=kECtqXU5XzAOHufF6WbrpfAjbFB872dVxFeMNvjhZiI,632 +PyInstaller/hooks/hook-PyQt5.QtSql.py,sha256=kECtqXU5XzAOHufF6WbrpfAjbFB872dVxFeMNvjhZiI,632 +PyInstaller/hooks/hook-PyQt5.QtSvg.py,sha256=kECtqXU5XzAOHufF6WbrpfAjbFB872dVxFeMNvjhZiI,632 +PyInstaller/hooks/hook-PyQt5.QtTest.py,sha256=kECtqXU5XzAOHufF6WbrpfAjbFB872dVxFeMNvjhZiI,632 +PyInstaller/hooks/hook-PyQt5.QtWebEngineWidgets.py,sha256=tjEOSl9PPxhW8oQACTlLTe2knvReeH5BgrYhwK3xnw4,1062 +PyInstaller/hooks/hook-PyQt5.QtWebKit.py,sha256=kECtqXU5XzAOHufF6WbrpfAjbFB872dVxFeMNvjhZiI,632 +PyInstaller/hooks/hook-PyQt5.QtWebKitWidgets.py,sha256=cV29MJ8QZ8iOGjs-PZoTddn5WfOpO5LhhdZvNXm2M34,632 +PyInstaller/hooks/hook-PyQt5.QtWidgets.py,sha256=kECtqXU5XzAOHufF6WbrpfAjbFB872dVxFeMNvjhZiI,632 +PyInstaller/hooks/hook-PyQt5.QtXml.py,sha256=kECtqXU5XzAOHufF6WbrpfAjbFB872dVxFeMNvjhZiI,632 +PyInstaller/hooks/hook-PyQt5.py,sha256=tRnEY7gOtlEkTCLd_xOhjuNLklc7ZFPuJlyahpeS_20,1070 +PyInstaller/hooks/hook-PyQt5.uic.py,sha256=mC5P7sX5xuP1eibRIWn55WULDlAW8K3r650hX6Z97No,981 +PyInstaller/hooks/hook-PyQt6.QtCore.py,sha256=mn--ee8IYdfGDclU6Xb39j5JTaJf-pXgI6ov-rRO4dc,627 +PyInstaller/hooks/hook-PyQt6.QtGui.py,sha256=mn--ee8IYdfGDclU6Xb39j5JTaJf-pXgI6ov-rRO4dc,627 +PyInstaller/hooks/hook-PyQt6.QtHelp.py,sha256=mn--ee8IYdfGDclU6Xb39j5JTaJf-pXgI6ov-rRO4dc,627 +PyInstaller/hooks/hook-PyQt6.QtNetwork.py,sha256=_Sb3fodz6OaNaDL4QSRDi2jnceLDK4V_C9lGi-HWNps,742 +PyInstaller/hooks/hook-PyQt6.QtOpenGL.py,sha256=mn--ee8IYdfGDclU6Xb39j5JTaJf-pXgI6ov-rRO4dc,627 +PyInstaller/hooks/hook-PyQt6.QtPrintSupport.py,sha256=mn--ee8IYdfGDclU6Xb39j5JTaJf-pXgI6ov-rRO4dc,627 +PyInstaller/hooks/hook-PyQt6.QtQml.py,sha256=JJI_UObAOUOoIi-2Ck2RB1PnJk2nCrRo4TuVFhgYLW8,778 +PyInstaller/hooks/hook-PyQt6.QtQuick.py,sha256=mn--ee8IYdfGDclU6Xb39j5JTaJf-pXgI6ov-rRO4dc,627 +PyInstaller/hooks/hook-PyQt6.QtQuickWidgets.py,sha256=mn--ee8IYdfGDclU6Xb39j5JTaJf-pXgI6ov-rRO4dc,627 +PyInstaller/hooks/hook-PyQt6.QtSql.py,sha256=mn--ee8IYdfGDclU6Xb39j5JTaJf-pXgI6ov-rRO4dc,627 +PyInstaller/hooks/hook-PyQt6.QtSvg.py,sha256=mn--ee8IYdfGDclU6Xb39j5JTaJf-pXgI6ov-rRO4dc,627 +PyInstaller/hooks/hook-PyQt6.QtTest.py,sha256=mn--ee8IYdfGDclU6Xb39j5JTaJf-pXgI6ov-rRO4dc,627 +PyInstaller/hooks/hook-PyQt6.QtWidgets.py,sha256=mn--ee8IYdfGDclU6Xb39j5JTaJf-pXgI6ov-rRO4dc,627 +PyInstaller/hooks/hook-PyQt6.QtXml.py,sha256=mn--ee8IYdfGDclU6Xb39j5JTaJf-pXgI6ov-rRO4dc,627 +PyInstaller/hooks/hook-PyQt6.py,sha256=WpVltmM8a0vt70GVk96Fw4AsrUT_SzllZbMwT2dhTC4,894 +PyInstaller/hooks/hook-PyQt6.uic.py,sha256=_-CgE6VIZr6eHidXNBZr3IZaTuvXc9F4ib4i0bocmYk,976 +PyInstaller/hooks/hook-PySide2.QtCore.py,sha256=kECtqXU5XzAOHufF6WbrpfAjbFB872dVxFeMNvjhZiI,632 +PyInstaller/hooks/hook-PySide2.QtGui.py,sha256=kECtqXU5XzAOHufF6WbrpfAjbFB872dVxFeMNvjhZiI,632 +PyInstaller/hooks/hook-PySide2.QtHelp.py,sha256=kECtqXU5XzAOHufF6WbrpfAjbFB872dVxFeMNvjhZiI,632 +PyInstaller/hooks/hook-PySide2.QtMultimedia.py,sha256=kECtqXU5XzAOHufF6WbrpfAjbFB872dVxFeMNvjhZiI,632 +PyInstaller/hooks/hook-PySide2.QtNetwork.py,sha256=-tcD6fS8Vj0VzjgieIv_zSPExIgJhXb99bKrfqdv2ps,751 +PyInstaller/hooks/hook-PySide2.QtOpenGL.py,sha256=kECtqXU5XzAOHufF6WbrpfAjbFB872dVxFeMNvjhZiI,632 +PyInstaller/hooks/hook-PySide2.QtPrintSupport.py,sha256=kECtqXU5XzAOHufF6WbrpfAjbFB872dVxFeMNvjhZiI,632 +PyInstaller/hooks/hook-PySide2.QtQml.py,sha256=osetQtAg2Mg4xiwt2TslqHiJyDhv7QY5758fOuDTwdI,787 +PyInstaller/hooks/hook-PySide2.QtQuick.py,sha256=kECtqXU5XzAOHufF6WbrpfAjbFB872dVxFeMNvjhZiI,632 +PyInstaller/hooks/hook-PySide2.QtQuickWidgets.py,sha256=kECtqXU5XzAOHufF6WbrpfAjbFB872dVxFeMNvjhZiI,632 +PyInstaller/hooks/hook-PySide2.QtScript.py,sha256=kECtqXU5XzAOHufF6WbrpfAjbFB872dVxFeMNvjhZiI,632 +PyInstaller/hooks/hook-PySide2.QtSensors.py,sha256=kECtqXU5XzAOHufF6WbrpfAjbFB872dVxFeMNvjhZiI,632 +PyInstaller/hooks/hook-PySide2.QtSerialPort.py,sha256=kECtqXU5XzAOHufF6WbrpfAjbFB872dVxFeMNvjhZiI,632 +PyInstaller/hooks/hook-PySide2.QtSql.py,sha256=kECtqXU5XzAOHufF6WbrpfAjbFB872dVxFeMNvjhZiI,632 +PyInstaller/hooks/hook-PySide2.QtSvg.py,sha256=kECtqXU5XzAOHufF6WbrpfAjbFB872dVxFeMNvjhZiI,632 +PyInstaller/hooks/hook-PySide2.QtTest.py,sha256=kECtqXU5XzAOHufF6WbrpfAjbFB872dVxFeMNvjhZiI,632 +PyInstaller/hooks/hook-PySide2.QtUiTools.py,sha256=TI3L-BZ_ysavfZyxfywlUG1pmzVxugsTh4mhcEGg4OM,704 +PyInstaller/hooks/hook-PySide2.QtWebEngineWidgets.py,sha256=Tri-bY14ERoF-fe3ddfTJLmog6P0qNuLc_9hU92fL3g,1070 +PyInstaller/hooks/hook-PySide2.QtWebKit.py,sha256=kECtqXU5XzAOHufF6WbrpfAjbFB872dVxFeMNvjhZiI,632 +PyInstaller/hooks/hook-PySide2.QtWebKitWidgets.py,sha256=cV29MJ8QZ8iOGjs-PZoTddn5WfOpO5LhhdZvNXm2M34,632 +PyInstaller/hooks/hook-PySide2.QtWidgets.py,sha256=kECtqXU5XzAOHufF6WbrpfAjbFB872dVxFeMNvjhZiI,632 +PyInstaller/hooks/hook-PySide2.QtXml.py,sha256=Ao_UCFL_0soshLvqHQ4GpoxMM8-2N8ed7kw3Wc49jPc,633 +PyInstaller/hooks/hook-PySide2.Qwt5.py,sha256=ZYW3dyGz-NvG3HAdYDZOKiP2JoymZu4kBpnFAXISunI,1054 +PyInstaller/hooks/hook-PySide2.py,sha256=qeyjcimiVyCHmRilNa5kGi85ne1c5z_cjdsP_W9lg28,909 +PyInstaller/hooks/hook-PySide6.QtCore.py,sha256=mn--ee8IYdfGDclU6Xb39j5JTaJf-pXgI6ov-rRO4dc,627 +PyInstaller/hooks/hook-PySide6.QtGui.py,sha256=mn--ee8IYdfGDclU6Xb39j5JTaJf-pXgI6ov-rRO4dc,627 +PyInstaller/hooks/hook-PySide6.QtHelp.py,sha256=mn--ee8IYdfGDclU6Xb39j5JTaJf-pXgI6ov-rRO4dc,627 +PyInstaller/hooks/hook-PySide6.QtNetwork.py,sha256=W7nRz7rbwKdbo9f3RzztSUco05FYqtywU113qrsEb1M,746 +PyInstaller/hooks/hook-PySide6.QtOpenGL.py,sha256=mn--ee8IYdfGDclU6Xb39j5JTaJf-pXgI6ov-rRO4dc,627 +PyInstaller/hooks/hook-PySide6.QtPrintSupport.py,sha256=mn--ee8IYdfGDclU6Xb39j5JTaJf-pXgI6ov-rRO4dc,627 +PyInstaller/hooks/hook-PySide6.QtQml.py,sha256=BGRWWD_MHRVkNz--ji--2srMLNcMJd_6Dm6Pg7CvLqQ,782 +PyInstaller/hooks/hook-PySide6.QtQuick.py,sha256=mn--ee8IYdfGDclU6Xb39j5JTaJf-pXgI6ov-rRO4dc,627 +PyInstaller/hooks/hook-PySide6.QtQuickWidgets.py,sha256=mn--ee8IYdfGDclU6Xb39j5JTaJf-pXgI6ov-rRO4dc,627 +PyInstaller/hooks/hook-PySide6.QtSql.py,sha256=mn--ee8IYdfGDclU6Xb39j5JTaJf-pXgI6ov-rRO4dc,627 +PyInstaller/hooks/hook-PySide6.QtSvg.py,sha256=mn--ee8IYdfGDclU6Xb39j5JTaJf-pXgI6ov-rRO4dc,627 +PyInstaller/hooks/hook-PySide6.QtTest.py,sha256=mn--ee8IYdfGDclU6Xb39j5JTaJf-pXgI6ov-rRO4dc,627 +PyInstaller/hooks/hook-PySide6.QtUiTools.py,sha256=mn--ee8IYdfGDclU6Xb39j5JTaJf-pXgI6ov-rRO4dc,627 +PyInstaller/hooks/hook-PySide6.QtWidgets.py,sha256=mn--ee8IYdfGDclU6Xb39j5JTaJf-pXgI6ov-rRO4dc,627 +PyInstaller/hooks/hook-PySide6.QtXml.py,sha256=GLVPwOhw7r--8Hg-6hB6MlGY9nFBZzdXNBeINhoKcIM,628 +PyInstaller/hooks/hook-PySide6.py,sha256=d5ZQVfRKcV49GE8WsWVPEzJWAkmrtPXEqt2sFTInDRI,904 +PyInstaller/hooks/hook-_tkinter.py,sha256=9pYUpo9wjYnt-XNsseYvX8r7AIOAeOg8CYlBNRagsb8,1352 +PyInstaller/hooks/hook-babel.py,sha256=In-_SAUNhjKqM3iAZ6J5xVnOafuskBzCwrn0j-ynr7E,634 +PyInstaller/hooks/hook-difflib.py,sha256=r8JhmNaF3sploe60NHevgbztPRoDwc8CU0mKaGZlMcM,577 +PyInstaller/hooks/hook-distutils.py,sha256=csxjSERJUczw2_zNWyrXJfw_ym3xXGGaJ2vO9up9Snk,1338 +PyInstaller/hooks/hook-distutils.util.py,sha256=dH0jHEA0t8Xobjm1YeOxJgjWnCTxlQ9nB2Jke35ooQA,659 +PyInstaller/hooks/hook-django.contrib.sessions.py,sha256=YkpEcMhL_f6qZOcrUQR8PrJyQFMiDaOgt_NIJskod2M,635 +PyInstaller/hooks/hook-django.core.cache.py,sha256=_H9rfL4S_wWAy06EWRxVn_ycCGh_4g3hnqWcffGm-58,629 +PyInstaller/hooks/hook-django.core.mail.py,sha256=ACR_8ZmaX4Y58Wt4vkPuGl09gdky27n5J4GLiANGySI,1078 +PyInstaller/hooks/hook-django.core.management.py,sha256=t41jrIVD1MutzmzfEn9cqyAOjkU87bk7EBBFQIKii8c,942 +PyInstaller/hooks/hook-django.db.backends.mysql.base.py,sha256=QSTBD6o557Ibq0Tt3PU2UnRohHgQHvGLjkreR9gI-tk,612 +PyInstaller/hooks/hook-django.db.backends.oracle.base.py,sha256=CdBfQRsw2I2mJVU2sBrI90mtLJw0G0Fk5ZHgaQnXZsM,564 +PyInstaller/hooks/hook-django.db.backends.py,sha256=PhO4_Qwa0Y98gXaih6pvvLdmScRnhhF1peT9FhlsZfg,984 +PyInstaller/hooks/hook-django.py,sha256=-1vjY0a94PVt6pN9zvqthIOWfqVMdRx4w0t55-pKIog,3867 +PyInstaller/hooks/hook-django.template.loaders.py,sha256=UusTEtPDaY1YvIXOnflOve6nFv3GyLAfsnwuLpbuDuY,626 +PyInstaller/hooks/hook-encodings.py,sha256=rGWodGiOmwc_IxnlaJAyyZ001WyMUIsHnq01R1bs7fY,613 +PyInstaller/hooks/hook-gevent.py,sha256=csKc2IkmlHAnb7u6L3bR2rJyxc4ASmsmVcA552rOgC0,1020 +PyInstaller/hooks/hook-gi.py,sha256=bfGL2i6vOb2wO2PXBGvXflHz1Nw7Sjhxx7wRguQNmog,715 +PyInstaller/hooks/hook-gi.repository.Atk.py,sha256=AKQcqywQH9YEDsBdkN9hPJLXEKyQsIpMGOhJ_zmZ0P4,985 +PyInstaller/hooks/hook-gi.repository.Champlain.py,sha256=AYuu3hdei_b65SCs9N0pYnpMu62apRgKitHBDBFEXYg,705 +PyInstaller/hooks/hook-gi.repository.Clutter.py,sha256=-oCSRdy3MWUt_DC0eBm5jtkx5zAzjGLaadgngoQQ480,700 +PyInstaller/hooks/hook-gi.repository.GIRepository.py,sha256=THTkq4c8VnFt9PRMqyQ-tsvalXbtv7S7iH5B-DZI6mw,703 +PyInstaller/hooks/hook-gi.repository.GLib.py,sha256=DUQv91niJu_6jjPx9Kcbxocssp_NNwd4f6O1H_MpozQ,1730 +PyInstaller/hooks/hook-gi.repository.GModule.py,sha256=c_Pa6NLmpU_3IN6OjvVokmJWrpqWGaKa3DhIjSJoheg,1137 +PyInstaller/hooks/hook-gi.repository.GObject.py,sha256=Wmjvoi8VawbjzyaHi5TUu7mSK4IiOo5a_sDPuvbZKgQ,1138 +PyInstaller/hooks/hook-gi.repository.Gdk.py,sha256=VJGqNsV-n-A33pwtmtgCW5H0asub77425PMMdhZcmDY,750 +PyInstaller/hooks/hook-gi.repository.GdkPixbuf.py,sha256=sphP-115QdRaOm8oYDAZ_TU7IUqztkvv7wryS9k5_II,6682 +PyInstaller/hooks/hook-gi.repository.Gio.py,sha256=6A-gJxLeLHCt1riVQPUQT4u1Zl4VK71-6rV7T8I4A4c,2770 +PyInstaller/hooks/hook-gi.repository.Gst.py,sha256=p5LdObRQc0xXlNN4wEm0V80XSD-Q8l0wJJHym0Xh-UQ,2549 +PyInstaller/hooks/hook-gi.repository.GstAudio.py,sha256=EedqQBE8FAnO3BhmzByy2Vkhl_U0T4bLvSxyZ1iLKQg,868 +PyInstaller/hooks/hook-gi.repository.GstBase.py,sha256=JEjBGjx11LNt4ReV1rSgAEHhTFvQwTe2iHaEPrlDbZg,867 +PyInstaller/hooks/hook-gi.repository.GstPbutils.py,sha256=mdHZdO6BzrNX93g-J7h7lszL9UzD8B95uFX698NZ_dg,870 +PyInstaller/hooks/hook-gi.repository.GstTag.py,sha256=d-2S1jDeKe68YI1vFqQlumfE2m1NnKto6XhrWFwP2sQ,866 +PyInstaller/hooks/hook-gi.repository.GstVideo.py,sha256=MzvN2a9w0BobMRYXcC2MFlg10FpkvAeCWIvb_qJ2hIY,868 +PyInstaller/hooks/hook-gi.repository.Gtk.py,sha256=32uQulgqNd7gcDt0AY9hgn4rxnaQXLICZvRSnJxAN2c,1915 +PyInstaller/hooks/hook-gi.repository.GtkChamplain.py,sha256=w8oLdP76_0mTQVff-L2lFThGtBumc3U6wNhs-xX-xIE,711 +PyInstaller/hooks/hook-gi.repository.GtkClutter.py,sha256=0RuJ_Sr66iDb_n3R4xqRAS-aILpX8kznbj8BJ2YBm6s,706 +PyInstaller/hooks/hook-gi.repository.GtkSource.py,sha256=jSbrIeGPjYW5pKnksMht7P_LcORUgt_T1vsKxDGNetU,726 +PyInstaller/hooks/hook-gi.repository.GtkosxApplication.py,sha256=M2IXHHJKI35jPiHFcFRUnEXmBLtburgMKYh5JfrVvH0,782 +PyInstaller/hooks/hook-gi.repository.HarfBuzz.py,sha256=a9AQMKgq89Hn45gzGuRM5bxYlKpiSFPCWpVHme822U0,700 +PyInstaller/hooks/hook-gi.repository.Pango.py,sha256=Qsgz0j5fJ8v-h76vpW4Nbd9PxFXpdKJMeZdLLKh8W9I,696 +PyInstaller/hooks/hook-gi.repository.PangoCairo.py,sha256=iZGv1kFCUbNRnJt2lL1LGzllZRwWVbYn_I5g7Lk-qKQ,701 +PyInstaller/hooks/hook-gi.repository.cairo.py,sha256=NaWKoEHeXevu5iy4FNDvE6JGVUyIy16B7NLUbvRdGS4,696 +PyInstaller/hooks/hook-gi.repository.xlib.py,sha256=eFlohi2qwlf_vZdlWzWrLXhA2-pwBkZPo4ZZvCGH-bI,695 +PyInstaller/hooks/hook-heapq.py,sha256=r8JhmNaF3sploe60NHevgbztPRoDwc8CU0mKaGZlMcM,577 +PyInstaller/hooks/hook-idlelib.py,sha256=VtnZVoQNbEEOf9uYEAhHR6fj4wW7DEB0JKIeDeR9jgM,602 +PyInstaller/hooks/hook-importlib_metadata.py,sha256=nMaobo0IYXakAooJTjvdy307d2h7y3-YABBOL3HGmpU,1357 +PyInstaller/hooks/hook-importlib_resources.py,sha256=3896L6DdPzjl8RiyVgNogRn-J4NuTezra08ZU1Phj84,1284 +PyInstaller/hooks/hook-keyring.py,sha256=69WYY3qPyiCxECxzLjI8binUJPP2LA5RIUZJfKNDRwY,890 +PyInstaller/hooks/hook-kivy.py,sha256=8wOqfEnLE_sA7JDuLAnulIsPIZahNGngEcmivonSZB8,1108 +PyInstaller/hooks/hook-lib2to3.py,sha256=9s722XzW-5h8Yx0qEaXWqaQePdmKSeaIUNetiNRuV0w,653 +PyInstaller/hooks/hook-matplotlib.backends.py,sha256=4ylwsLnmy9Yy3PidTwxF10KnjKALZ_jVo4gmiBmn_ko,3224 +PyInstaller/hooks/hook-matplotlib.numerix.py,sha256=P9bYOknk6njeRxheOx0G4NpoVAOUxAgiL6UIt7CgoDE,687 +PyInstaller/hooks/hook-matplotlib.py,sha256=jZZ84WN_NChxD2SM5W7vUZP9AqlRCnmD1iV4_CdrZMo,780 +PyInstaller/hooks/hook-multiprocessing.util.py,sha256=UdiWtDPz__flbZzSfZx22LBAZGM6_Wb0Ul9G7sU3WWo,792 +PyInstaller/hooks/hook-numpy._pytesttester.py,sha256=keHmjNbOKwnrQgyJmIVNgB4lW2G2EAGMdJgunYmsjAs,799 +PyInstaller/hooks/hook-numpy.py,sha256=3MB6ri5ZpfSNFhyMsYANBqj-0QUr5sTVAYPOyjk1oKA,2082 +PyInstaller/hooks/hook-packaging.py,sha256=f7Y21Os6G6FcKMcDpKDpdaknMpVuXZxGY_TZ3C1j_Xg,577 +PyInstaller/hooks/hook-pandas.io.formats.style.py,sha256=nhk9Yb_U1dzaU_Ge1d82VJ9hoy_3M7YRGhynxUFUfqs,746 +PyInstaller/hooks/hook-pandas.py,sha256=nLkGceUzq2rgiDrD_wMjPlw-jJ9ad6b9ja5slyl2hSQ,961 +PyInstaller/hooks/hook-pickle.py,sha256=czaF0if-dpqDnPdaq9wGt74Bj5rl_lHngRSCg_tgoPc,814 +PyInstaller/hooks/hook-pkg_resources.py,sha256=N6I4GBfeBwwPNMHTfI9xU0VRYA3wW66zQCCvrJCSEw0,1391 +PyInstaller/hooks/hook-pygments.py,sha256=PTEE7LimRqXDDdkpFkBEygXb3CtMrDl6zIronn2xebM,1188 +PyInstaller/hooks/hook-pytz.py,sha256=Yhq0pI5tC-cc8JxC6J7i7bJ83Bs1AgPf1GRL5jwQmh8,736 +PyInstaller/hooks/hook-pytzdata.py,sha256=WArMlWu_SGVu1sg6D9wzD2P99JtrTyly34koHc6Q8aM,604 +PyInstaller/hooks/hook-qtawesome.py,sha256=ty4VpxVscI8fOGHgSdil9_zKzBor9tqgcs3P4vXaD9s,793 +PyInstaller/hooks/hook-scapy.layers.all.py,sha256=3WnSRGfSRqr2an5OQj_j6MiCs_MugFUJqx7RFv0R-wo,932 +PyInstaller/hooks/hook-scipy.io.matlab.py,sha256=VO5AMR3ZauRp96l-g1DapqArFmpMcfpg2h3ZE9UCog0,658 +PyInstaller/hooks/hook-scipy.linalg.py,sha256=mBzRp79On3IPgokE81YSJv7nPi8U6xMPHpR73PlCtfA,635 +PyInstaller/hooks/hook-scipy.py,sha256=iN7_EHRiQPHTBGh6ZwXSIhzAKwPyJx8H3DL9oEFRQHw,1311 +PyInstaller/hooks/hook-scipy.sparse.csgraph.py,sha256=3ftrpChKn7FE96XhYdKzQ5VqXaDYnpwGkeGjmlRoVIY,612 +PyInstaller/hooks/hook-scipy.spatial.transform.rotation.py,sha256=VgqMIa6TsgQq6C__r_OYvnv_F7CDBoZ6A3EvqJnabhI,791 +PyInstaller/hooks/hook-scipy.special._ellip_harm_2.py,sha256=F1BEH627j4WuAtJsS5wsZvdomfputbp0B98XM1rRNmc,1320 +PyInstaller/hooks/hook-scipy.special._ufuncs.py,sha256=beTfsHhpQW-b_3aAOeh8VOCN5hs6Tfc6dUlImSYndQs,699 +PyInstaller/hooks/hook-scipy.stats._stats.py,sha256=zQsigdYEeuTPYtXiC2Su211D_11DdDyO49vu3W7xcAw,660 +PyInstaller/hooks/hook-scrapy.py,sha256=0RGJVI454eiS66vbO5ng5qFEvMQxuMxvobJVnjgIGb8,960 +PyInstaller/hooks/hook-setuptools.msvc.py,sha256=gOz3IAoVkeMX1ZS3yUXcFvTWwucE5cb6zaoulfDfgQc,602 +PyInstaller/hooks/hook-setuptools.py,sha256=O_Yq6_CvHW-2elW_xJGJC1SlS7j7u728lW7_oIM34Pg,1256 +PyInstaller/hooks/hook-shelve.py,sha256=svAxavMGyfYjv28capLRkWz1OE2T6Gypy5SSQNYu1l8,602 +PyInstaller/hooks/hook-sphinx.py,sha256=Q1RnnC3GcNOt-Rkuwy0vCX1ccOm-VCKuFp0VEFwbDIY,2410 +PyInstaller/hooks/hook-sqlalchemy.py,sha256=yeoX5il3YKQQkzuyRlMkcabAeOMnFVE1e-vrgHqHK7c,3286 +PyInstaller/hooks/hook-sqlite3.py,sha256=usL630aj9v5XB6Rr3Hgt08qZ2wl0Uyw3RJful7PJZxM,829 +PyInstaller/hooks/hook-sysconfig.py,sha256=YXk8z97ReOvBopEhkrO1Ag98YjDBMLdXdDXAtTH3NTA,956 +PyInstaller/hooks/hook-wcwidth.py,sha256=7yJb-PPNn1T7tK2dVWkx04M6FGx8vN_4V53R8NPZyk8,601 +PyInstaller/hooks/hook-win32ctypes.core.py,sha256=wtVKR-j5rAt3aiSFrin6h3HGH0SYhgT9WuCTK-oC2EE,995 +PyInstaller/hooks/hook-xml.dom.domreg.py,sha256=Q9iqh9YE-m4FlEzg1rZajfmCdg25CiGdg7AeADzTNWM,570 +PyInstaller/hooks/hook-xml.etree.cElementTree.py,sha256=a7pZ24YFWEXPjtq1VBwTBOtALNZI3IOUWX4IRwkAwGU,616 +PyInstaller/hooks/hook-xml.py,sha256=iqdbTZZs47xGMgf-1jZlj8YYr4lAAkVH1nQXEdPyKr4,569 +PyInstaller/hooks/hook-zope.interface.py,sha256=joOkKUgWXSK3XaPOaxbhgUV6X2mQq5t45Uj5awPMkhw,539 +PyInstaller/hooks/pre_find_module_path/__init__.py,sha256=MsSFjiLMLJZ7QhUPpVBWKiyDnCzryquRyr329NoCACI,2 +PyInstaller/hooks/pre_find_module_path/__pycache__/__init__.cpython-39.pyc,, +PyInstaller/hooks/pre_find_module_path/__pycache__/hook-PyQt5.uic.port_v2.cpython-39.pyc,, +PyInstaller/hooks/pre_find_module_path/__pycache__/hook-distutils.cpython-39.pyc,, +PyInstaller/hooks/pre_find_module_path/__pycache__/hook-pyi_splash.cpython-39.pyc,, +PyInstaller/hooks/pre_find_module_path/__pycache__/hook-site.cpython-39.pyc,, +PyInstaller/hooks/pre_find_module_path/hook-PyQt5.uic.port_v2.py,sha256=cILYrkQD3-zAL7f__47xPKC5D9ngNbWtUzcnmds0TG4,716 +PyInstaller/hooks/pre_find_module_path/hook-distutils.py,sha256=pXoMJFX0SPc2dFFuUrevUInEhld3y9rsARJApR8IJyw,1744 +PyInstaller/hooks/pre_find_module_path/hook-pyi_splash.py,sha256=KvhNaxyk3S8tz05U63aXnFVMkchArwWcdZGZefgjkKo,1446 +PyInstaller/hooks/pre_find_module_path/hook-site.py,sha256=ld5CBJMIkTVMndVRBele_VJKbCmUFQ8f3dv-DlD0KQ0,1256 +PyInstaller/hooks/pre_safe_import_module/__init__.py,sha256=MsSFjiLMLJZ7QhUPpVBWKiyDnCzryquRyr329NoCACI,2 +PyInstaller/hooks/pre_safe_import_module/__pycache__/__init__.cpython-39.pyc,, +PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.Atk.cpython-39.pyc,, +PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.Champlain.cpython-39.pyc,, +PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.Clutter.cpython-39.pyc,, +PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GIRepository.cpython-39.pyc,, +PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GLib.cpython-39.pyc,, +PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GModule.cpython-39.pyc,, +PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GObject.cpython-39.pyc,, +PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.Gdk.cpython-39.pyc,, +PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GdkPixbuf.cpython-39.pyc,, +PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.Gio.cpython-39.pyc,, +PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.Gst.cpython-39.pyc,, +PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GstAudio.cpython-39.pyc,, +PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GstBase.cpython-39.pyc,, +PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GstPbutils.cpython-39.pyc,, +PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GstTag.cpython-39.pyc,, +PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GstVideo.cpython-39.pyc,, +PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.Gtk.cpython-39.pyc,, +PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GtkChamplain.cpython-39.pyc,, +PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GtkClutter.cpython-39.pyc,, +PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GtkSource.cpython-39.pyc,, +PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GtkosxApplication.cpython-39.pyc,, +PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.HarfBuzz.cpython-39.pyc,, +PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.Pango.cpython-39.pyc,, +PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.PangoCairo.cpython-39.pyc,, +PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.cairo.cpython-39.pyc,, +PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.xlib.cpython-39.pyc,, +PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-setuptools.extern.six.moves.cpython-39.pyc,, +PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-six.moves.cpython-39.pyc,, +PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-urllib3.packages.six.moves.cpython-39.pyc,, +PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.Atk.py,sha256=jms_txq40PboDb63opNsDxcJOatTKYoEh2EpBwXId2E,771 +PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.Champlain.py,sha256=jms_txq40PboDb63opNsDxcJOatTKYoEh2EpBwXId2E,771 +PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.Clutter.py,sha256=jms_txq40PboDb63opNsDxcJOatTKYoEh2EpBwXId2E,771 +PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GIRepository.py,sha256=jms_txq40PboDb63opNsDxcJOatTKYoEh2EpBwXId2E,771 +PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GLib.py,sha256=jms_txq40PboDb63opNsDxcJOatTKYoEh2EpBwXId2E,771 +PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GModule.py,sha256=jms_txq40PboDb63opNsDxcJOatTKYoEh2EpBwXId2E,771 +PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GObject.py,sha256=jms_txq40PboDb63opNsDxcJOatTKYoEh2EpBwXId2E,771 +PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.Gdk.py,sha256=jms_txq40PboDb63opNsDxcJOatTKYoEh2EpBwXId2E,771 +PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GdkPixbuf.py,sha256=jms_txq40PboDb63opNsDxcJOatTKYoEh2EpBwXId2E,771 +PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.Gio.py,sha256=jms_txq40PboDb63opNsDxcJOatTKYoEh2EpBwXId2E,771 +PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.Gst.py,sha256=jms_txq40PboDb63opNsDxcJOatTKYoEh2EpBwXId2E,771 +PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GstAudio.py,sha256=jms_txq40PboDb63opNsDxcJOatTKYoEh2EpBwXId2E,771 +PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GstBase.py,sha256=jms_txq40PboDb63opNsDxcJOatTKYoEh2EpBwXId2E,771 +PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GstPbutils.py,sha256=jms_txq40PboDb63opNsDxcJOatTKYoEh2EpBwXId2E,771 +PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GstTag.py,sha256=jms_txq40PboDb63opNsDxcJOatTKYoEh2EpBwXId2E,771 +PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GstVideo.py,sha256=jms_txq40PboDb63opNsDxcJOatTKYoEh2EpBwXId2E,771 +PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.Gtk.py,sha256=jms_txq40PboDb63opNsDxcJOatTKYoEh2EpBwXId2E,771 +PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GtkChamplain.py,sha256=jms_txq40PboDb63opNsDxcJOatTKYoEh2EpBwXId2E,771 +PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GtkClutter.py,sha256=jms_txq40PboDb63opNsDxcJOatTKYoEh2EpBwXId2E,771 +PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GtkSource.py,sha256=jms_txq40PboDb63opNsDxcJOatTKYoEh2EpBwXId2E,771 +PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GtkosxApplication.py,sha256=Pa4JA4VssfvE6UfSVlPtbJiINsKHqlsYpwaJGy6Y0FY,770 +PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.HarfBuzz.py,sha256=Pa4JA4VssfvE6UfSVlPtbJiINsKHqlsYpwaJGy6Y0FY,770 +PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.Pango.py,sha256=jms_txq40PboDb63opNsDxcJOatTKYoEh2EpBwXId2E,771 +PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.PangoCairo.py,sha256=jms_txq40PboDb63opNsDxcJOatTKYoEh2EpBwXId2E,771 +PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.cairo.py,sha256=jms_txq40PboDb63opNsDxcJOatTKYoEh2EpBwXId2E,771 +PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.xlib.py,sha256=jms_txq40PboDb63opNsDxcJOatTKYoEh2EpBwXId2E,771 +PyInstaller/hooks/pre_safe_import_module/hook-setuptools.extern.six.moves.py,sha256=MyAiwtouXHR3-M4ZMqm03I5yOozsIyHo7kq6pRiwqoU,1634 +PyInstaller/hooks/pre_safe_import_module/hook-six.moves.py,sha256=xxhvepTvcDdHYXCrbTnP1-ow0NbPd-zlkFSiK4CUQRM,3790 +PyInstaller/hooks/pre_safe_import_module/hook-urllib3.packages.six.moves.py,sha256=6dWCMqyiRuXRWrVh0t0uBrvPTqhXPCiDj5pQ3pWd6Bc,1418 +PyInstaller/hooks/rthooks.dat,sha256=iXDwVgfCx6o-wVljpLr0-dLaMg4zRYmiP1LN3Q5tDZ0,1132 +PyInstaller/hooks/rthooks/__init__.py,sha256=MsSFjiLMLJZ7QhUPpVBWKiyDnCzryquRyr329NoCACI,2 +PyInstaller/hooks/rthooks/__pycache__/__init__.cpython-39.pyc,, +PyInstaller/hooks/rthooks/__pycache__/pyi_rth__tkinter.cpython-39.pyc,, +PyInstaller/hooks/rthooks/__pycache__/pyi_rth_django.cpython-39.pyc,, +PyInstaller/hooks/rthooks/__pycache__/pyi_rth_gdkpixbuf.cpython-39.pyc,, +PyInstaller/hooks/rthooks/__pycache__/pyi_rth_gi.cpython-39.pyc,, +PyInstaller/hooks/rthooks/__pycache__/pyi_rth_gio.cpython-39.pyc,, +PyInstaller/hooks/rthooks/__pycache__/pyi_rth_glib.cpython-39.pyc,, +PyInstaller/hooks/rthooks/__pycache__/pyi_rth_gstreamer.cpython-39.pyc,, +PyInstaller/hooks/rthooks/__pycache__/pyi_rth_gtk.cpython-39.pyc,, +PyInstaller/hooks/rthooks/__pycache__/pyi_rth_inspect.cpython-39.pyc,, +PyInstaller/hooks/rthooks/__pycache__/pyi_rth_kivy.cpython-39.pyc,, +PyInstaller/hooks/rthooks/__pycache__/pyi_rth_mplconfig.cpython-39.pyc,, +PyInstaller/hooks/rthooks/__pycache__/pyi_rth_multiprocessing.cpython-39.pyc,, +PyInstaller/hooks/rthooks/__pycache__/pyi_rth_pkgres.cpython-39.pyc,, +PyInstaller/hooks/rthooks/__pycache__/pyi_rth_pkgutil.cpython-39.pyc,, +PyInstaller/hooks/rthooks/__pycache__/pyi_rth_pyqt5.cpython-39.pyc,, +PyInstaller/hooks/rthooks/__pycache__/pyi_rth_pyqt5webengine.cpython-39.pyc,, +PyInstaller/hooks/rthooks/__pycache__/pyi_rth_pyqt6.cpython-39.pyc,, +PyInstaller/hooks/rthooks/__pycache__/pyi_rth_pyside2.cpython-39.pyc,, +PyInstaller/hooks/rthooks/__pycache__/pyi_rth_pyside2webengine.cpython-39.pyc,, +PyInstaller/hooks/rthooks/__pycache__/pyi_rth_pyside6.cpython-39.pyc,, +PyInstaller/hooks/rthooks/__pycache__/pyi_rth_win32api.cpython-39.pyc,, +PyInstaller/hooks/rthooks/__pycache__/pyi_rth_win32comgenpy.cpython-39.pyc,, +PyInstaller/hooks/rthooks/pyi_rth__tkinter.py,sha256=9MgIv_OdwlXcx0Jlp5g6d7wES0v8vaNih3bi4OXf1rI,1145 +PyInstaller/hooks/rthooks/pyi_rth_django.py,sha256=V05NPvyvt58x8gywr6N80ApdQIo2-zUkxjBMLd0clNc,2838 +PyInstaller/hooks/rthooks/pyi_rth_gdkpixbuf.py,sha256=4ipCQG4HKHDxPg40BsfCAqnB0Lu6bHGJV2Txu6VStm4,1313 +PyInstaller/hooks/rthooks/pyi_rth_gi.py,sha256=5E6vLg0gMWzqD1UBdfr_KqTZG5mHPIFdTgr4_N7luWY,568 +PyInstaller/hooks/rthooks/pyi_rth_gio.py,sha256=Nh9mwZBm1Io0q6ZsUpZ_e-8t3lFMMmtNrKnJVuFflCM,567 +PyInstaller/hooks/rthooks/pyi_rth_glib.py,sha256=du49kSMhn5fe1CHmmEh4mNmkVQJ_5ka-H8miQtDCqLU,560 +PyInstaller/hooks/rthooks/pyi_rth_gstreamer.py,sha256=a1XVLDQzw76P88kKhOAgxYWMLDAy0vbBHvxolLqEEF0,1080 +PyInstaller/hooks/rthooks/pyi_rth_gtk.py,sha256=x14qTuugohUUfUhFgaQAg_2Orh3lcOgrrH2UMQdGyD4,800 +PyInstaller/hooks/rthooks/pyi_rth_inspect.py,sha256=LCZBbooVdPv5nvuzcHfuzEr20d8ED6jGf9xPTeUuGrg,1950 +PyInstaller/hooks/rthooks/pyi_rth_kivy.py,sha256=MCXvflBa2ziDeOArYGyN5e1XbhsB3p5O8Xy3Uc7lfe4,665 +PyInstaller/hooks/rthooks/pyi_rth_mplconfig.py,sha256=VvAQKIAKHIxwGname--FqyWUjm15bJIk6ik5eMMJIls,1498 +PyInstaller/hooks/rthooks/pyi_rth_multiprocessing.py,sha256=Obsma49bVICieIvVr5KRC9rFuYF4agVFsvsZKpZ1Hz0,3866 +PyInstaller/hooks/rthooks/pyi_rth_pkgres.py,sha256=gx43nTB_NWCiWv7nfu7J2EPz_HZ5qjK2tbuXlVcaW3g,8607 +PyInstaller/hooks/rthooks/pyi_rth_pkgutil.py,sha256=HA0AhPU6ZXECJtpk3y800W6DQH-lN7zVuiErbc7iAFA,3664 +PyInstaller/hooks/rthooks/pyi_rth_pyqt5.py,sha256=dzKcZwzhUng5YDiakGQdumEi0c2RRJ_Kch1W_okh5oI,1237 +PyInstaller/hooks/rthooks/pyi_rth_pyqt5webengine.py,sha256=nrBgcioQfgQz2dgrvnR-BMsC1YyYsJfcubfwXxm0rb0,1048 +PyInstaller/hooks/rthooks/pyi_rth_pyqt6.py,sha256=YE0jWomKsRPP5kVOS97KMWiOn8eOAcfef5X9waNeCNc,1315 +PyInstaller/hooks/rthooks/pyi_rth_pyside2.py,sha256=MGMgIcjktMuTUfvtSkxSd3q41rfg6uSQrQ3yTwPIRL4,1297 +PyInstaller/hooks/rthooks/pyi_rth_pyside2webengine.py,sha256=8eVrloifMmcJfbefnABeYEMZ4CzGlcnIJQiz8BUwToE,775 +PyInstaller/hooks/rthooks/pyi_rth_pyside6.py,sha256=nSPRRH51EJ7uneVXiE88J__1cqGbLe6q6XMbxWCgWqU,1292 +PyInstaller/hooks/rthooks/pyi_rth_win32api.py,sha256=WW_WFuWN-9TpoCCZTcFc78qOfrZ7aWNIcOoCE0X2ohs,923 +PyInstaller/hooks/rthooks/pyi_rth_win32comgenpy.py,sha256=au5oG8zz6Eg1VdCOIJnopkgqrKbbbrTz1EndqQ-TtMM,2195 +PyInstaller/lib/README.rst,sha256=VdkvnJUKg6D2bv3nfb-bJoWQ00jTf-pLbvv7KbsSaTA,1333 +PyInstaller/lib/__init__.py,sha256=MsSFjiLMLJZ7QhUPpVBWKiyDnCzryquRyr329NoCACI,2 +PyInstaller/lib/__pycache__/__init__.cpython-39.pyc,, +PyInstaller/lib/modulegraph/__init__.py,sha256=q1XQN2YGfSINUSLuBsTs7uhMArf62AFQxdSrq3fS4-o,21 +PyInstaller/lib/modulegraph/__main__.py,sha256=hiwjxxmiY3QfLQ7f0Pd_eSDQYL8MXQyQtkRoJSHe3hU,2653 +PyInstaller/lib/modulegraph/__pycache__/__init__.cpython-39.pyc,, +PyInstaller/lib/modulegraph/__pycache__/__main__.cpython-39.pyc,, +PyInstaller/lib/modulegraph/__pycache__/_compat.cpython-39.pyc,, +PyInstaller/lib/modulegraph/__pycache__/find_modules.cpython-39.pyc,, +PyInstaller/lib/modulegraph/__pycache__/modulegraph.cpython-39.pyc,, +PyInstaller/lib/modulegraph/__pycache__/util.cpython-39.pyc,, +PyInstaller/lib/modulegraph/__pycache__/zipio.cpython-39.pyc,, +PyInstaller/lib/modulegraph/_compat.py,sha256=e_cIW00svLpuuc-1xIMUnMsT11mmWSJlm3R7F4jefdk,494 +PyInstaller/lib/modulegraph/find_modules.py,sha256=Rdzmty604KYGxs1XCm8rJUcWPEGshcwh3vpXDJywG7k,10313 +PyInstaller/lib/modulegraph/modulegraph.py,sha256=r2_GGXKLGd4QcsQmJtTmNUKsQizha_N7JGgcxvGAyEI,139161 +PyInstaller/lib/modulegraph/util.py,sha256=Z0P6DCTaUYh2VHGl4y-gKg0JD81iPUQL_GNYSuouz-g,4108 +PyInstaller/lib/modulegraph/zipio.py,sha256=wi5VHVDSagrPkQQ53Ajeqw0iQa26ZFEcwC7mFXyhZOg,9917 +PyInstaller/loader/__init__.py,sha256=MsSFjiLMLJZ7QhUPpVBWKiyDnCzryquRyr329NoCACI,2 +PyInstaller/loader/__pycache__/__init__.cpython-39.pyc,, +PyInstaller/loader/__pycache__/pyiboot01_bootstrap.cpython-39.pyc,, +PyInstaller/loader/__pycache__/pyimod01_os_path.cpython-39.pyc,, +PyInstaller/loader/__pycache__/pyimod02_archive.cpython-39.pyc,, +PyInstaller/loader/__pycache__/pyimod03_importers.cpython-39.pyc,, +PyInstaller/loader/__pycache__/pyimod04_ctypes.cpython-39.pyc,, +PyInstaller/loader/pyiboot01_bootstrap.py,sha256=j0YQK99h-nypRO55843AlOW5pINiA7_x8_tC5eytwtA,4318 +PyInstaller/loader/pyimod01_os_path.py,sha256=XYMuPdS40NfqTRerGTiRXQhKaVopRIEk6-ydQOGTsp4,3161 +PyInstaller/loader/pyimod02_archive.py,sha256=ZP3u6WEk6seRyz135O0tVLMFlNo9Pc6-D-EHGNzHgLs,11089 +PyInstaller/loader/pyimod03_importers.py,sha256=bdVBya1Gg25VrtYJX-fbkU6LMn_qadL9nWhSlH12cdI,26105 +PyInstaller/loader/pyimod04_ctypes.py,sha256=rtRjDwmQz9QPrWEfRSIQx4XPt3U6YtW_IBGAdo-7yKI,3956 +PyInstaller/log.py,sha256=Y36VwIZM89rYYV7hsixHE-Q9125ik9KNoWrx0eDWLp4,1653 +PyInstaller/utils/__init__.py,sha256=MsSFjiLMLJZ7QhUPpVBWKiyDnCzryquRyr329NoCACI,2 +PyInstaller/utils/__pycache__/__init__.cpython-39.pyc,, +PyInstaller/utils/__pycache__/_gitrevision.cpython-39.pyc,, +PyInstaller/utils/__pycache__/conftest.cpython-39.pyc,, +PyInstaller/utils/__pycache__/git.cpython-39.pyc,, +PyInstaller/utils/__pycache__/misc.cpython-39.pyc,, +PyInstaller/utils/__pycache__/osx.cpython-39.pyc,, +PyInstaller/utils/__pycache__/release.cpython-39.pyc,, +PyInstaller/utils/__pycache__/run_tests.cpython-39.pyc,, +PyInstaller/utils/__pycache__/tests.cpython-39.pyc,, +PyInstaller/utils/_gitrevision.py,sha256=3LXA6yofMFmWiLIeOmdcwGtH2M6WFtptrqkQwfxeMz8,456 +PyInstaller/utils/cliutils/__init__.py,sha256=MsSFjiLMLJZ7QhUPpVBWKiyDnCzryquRyr329NoCACI,2 +PyInstaller/utils/cliutils/__pycache__/__init__.cpython-39.pyc,, +PyInstaller/utils/cliutils/__pycache__/archive_viewer.cpython-39.pyc,, +PyInstaller/utils/cliutils/__pycache__/bindepend.cpython-39.pyc,, +PyInstaller/utils/cliutils/__pycache__/grab_version.cpython-39.pyc,, +PyInstaller/utils/cliutils/__pycache__/makespec.cpython-39.pyc,, +PyInstaller/utils/cliutils/__pycache__/set_version.cpython-39.pyc,, +PyInstaller/utils/cliutils/archive_viewer.py,sha256=4Lb2bnmpGYmMPiK5iJO1qFh-8tHEaxn7syqAHzfOlI8,8067 +PyInstaller/utils/cliutils/bindepend.py,sha256=urur9wYSuFApQSKUoZxdZr3B8vK2S-pQy-Y4syEGga0,1801 +PyInstaller/utils/cliutils/grab_version.py,sha256=96eR1tLZgH_eDyJkHs_55SCaC3HFrWORNF0GDjdNKP8,1735 +PyInstaller/utils/cliutils/makespec.py,sha256=-c_XnWAAf1n49rd-ZonntxjeKGDYgs38B9LkaLc6EY0,1473 +PyInstaller/utils/cliutils/set_version.py,sha256=fwQZbVfyzfOnF-mcpdDr4b8OPBJIzLnYolz-zvhIyK4,1279 +PyInstaller/utils/conftest.py,sha256=WpUifzNY48QQe7-59MfOVnNSrzbLWEr3WlJGWlIagyc,22936 +PyInstaller/utils/git.py,sha256=7woEedlKDk2cZsxymSm4TV9vt0f9QSphM1Lj8cBc2Lc,2041 +PyInstaller/utils/hooks/__init__.py,sha256=nWeaCYQzezaixOii6zUApLHpEw0ghiL6Ne3mQzJrEP8,46047 +PyInstaller/utils/hooks/__pycache__/__init__.cpython-39.pyc,, +PyInstaller/utils/hooks/__pycache__/conda.cpython-39.pyc,, +PyInstaller/utils/hooks/__pycache__/django.cpython-39.pyc,, +PyInstaller/utils/hooks/__pycache__/gi.cpython-39.pyc,, +PyInstaller/utils/hooks/__pycache__/qt.cpython-39.pyc,, +PyInstaller/utils/hooks/__pycache__/tcl_tk.cpython-39.pyc,, +PyInstaller/utils/hooks/__pycache__/win32.cpython-39.pyc,, +PyInstaller/utils/hooks/conda.py,sha256=3s0NASGc7vBpRN1VThCFVmLPtx7uC5UIUfMs9yppWv4,14505 +PyInstaller/utils/hooks/django.py,sha256=GVSwXOKFu1Tj4ZdoOSjopdTnTEPCSInVus_yscPSDnY,3128 +PyInstaller/utils/hooks/gi.py,sha256=KQwGEeMwo2nJ5eJqJKBWZGAbyxbB5Frs9bfVZ1t8QkU,10033 +PyInstaller/utils/hooks/qt.py,sha256=Jc6naAJpPbQ5-_UalQRUcERbgIKkydUq3zxDGCp0RG0,40168 +PyInstaller/utils/hooks/subproc/__init__.py,sha256=fNGhsx0m5s9iq4yMvH6J1tI0vzUKWd62lIQNSnKTGCE,22 +PyInstaller/utils/hooks/subproc/__pycache__/__init__.cpython-39.pyc,, +PyInstaller/utils/hooks/subproc/__pycache__/django_import_finder.cpython-39.pyc,, +PyInstaller/utils/hooks/subproc/django_import_finder.py,sha256=s6Jh_ifNks48_LzHtjCTgknWvZHGTnE2LZElVjxx7Lc,3418 +PyInstaller/utils/hooks/tcl_tk.py,sha256=KnnGJxQ7CfTrx2PGw0R4DYju672FVsfkicy4KMNs6Ow,10105 +PyInstaller/utils/hooks/win32.py,sha256=oGMXGYrYWzR5cS7Qcq87WE91TS34EueHpJR_O8WvIxY,1716 +PyInstaller/utils/misc.py,sha256=CsyylCrXCvuulpq-dVbx3AzQKSJm_0uN7LyogQvafHs,10729 +PyInstaller/utils/osx.py,sha256=3JNZMOM5UxDZ2Rbv3BOKJf9Zv_UoG5C-WGzzY5KitjY,14370 +PyInstaller/utils/release.py,sha256=Yv97d-CdKS6bWM0RmYrL1RquEayy160BRmXZ3yZtxwo,1719 +PyInstaller/utils/run_tests.py,sha256=ehTQBXueYgNqN5eb67XvpoPp28QJTBdIcAJViVIsRds,2952 +PyInstaller/utils/tests.py,sha256=4Ah70XD68zn4Y9gY0AE1C7z6johrZRooPgEU5wbn8oU,5887 +PyInstaller/utils/win32/__init__.py,sha256=fNGhsx0m5s9iq4yMvH6J1tI0vzUKWd62lIQNSnKTGCE,22 +PyInstaller/utils/win32/__pycache__/__init__.cpython-39.pyc,, +PyInstaller/utils/win32/__pycache__/icon.cpython-39.pyc,, +PyInstaller/utils/win32/__pycache__/versioninfo.cpython-39.pyc,, +PyInstaller/utils/win32/__pycache__/winmanifest.cpython-39.pyc,, +PyInstaller/utils/win32/__pycache__/winresource.cpython-39.pyc,, +PyInstaller/utils/win32/__pycache__/winutils.cpython-39.pyc,, +PyInstaller/utils/win32/icon.py,sha256=ikjp6bAaSW-urhgcyU_el5iUGCT3zuYCSpB_8ZXsBfY,10010 +PyInstaller/utils/win32/versioninfo.py,sha256=JrwolHkNBCjSGe_E0oANSfIKJZMv6E60wpdGTyjbSn0,22730 +PyInstaller/utils/win32/winmanifest.py,sha256=bUoFrLDr3iqT3__0d5uajfEUrcWYfwZX-ei_8x4SnBw,47300 +PyInstaller/utils/win32/winresource.py,sha256=CF6tTQTXlFCT9wapdwWIlhaQA_JhqC8GZsyaeLl8MzA,10210 +PyInstaller/utils/win32/winutils.py,sha256=yelMMeZliFPubdKJCOcUt00DG9Dqs3vgWau3_5U90mU,5620 +pyinstaller-4.5.1.dist-info/COPYING.txt,sha256=9yTxr7pAqMw3TLs-IElb_hQrmYuX2PFvQg-jB9Kk1AI,30633 +pyinstaller-4.5.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +pyinstaller-4.5.1.dist-info/METADATA,sha256=Yo9QDBCkuI1WV_M1bXpXYiv7MBlu2Qpt5s3DLQHQGjI,7075 +pyinstaller-4.5.1.dist-info/RECORD,, +pyinstaller-4.5.1.dist-info/WHEEL,sha256=0fLXBYOHpbowylH7oYvwh5ioYbCn9KEKxbTAHL5RBj8,98 +pyinstaller-4.5.1.dist-info/entry_points.txt,sha256=HvUkY2YCPxcJQjENngRlDEtmYlf_qWegG1_wv_J99GM,361 +pyinstaller-4.5.1.dist-info/top_level.txt,sha256=GuRmvWXGTRJNYmK5iWGOglNv4L3by7YKaEiKycNZ4XQ,12 diff --git a/EXE version/main/pyinstaller-4.5.1.dist-info/WHEEL b/EXE version/main/pyinstaller-4.5.1.dist-info/WHEEL new file mode 100644 index 00000000..a0f51c42 --- /dev/null +++ b/EXE version/main/pyinstaller-4.5.1.dist-info/WHEEL @@ -0,0 +1,5 @@ +Wheel-Version: 1.0 +Generator: bdist_wheel (0.36.2) +Root-Is-Purelib: true +Tag: py3-none-win_amd64 + diff --git a/EXE version/main/pyinstaller-4.5.1.dist-info/entry_points.txt b/EXE version/main/pyinstaller-4.5.1.dist-info/entry_points.txt new file mode 100644 index 00000000..cbc87257 --- /dev/null +++ b/EXE version/main/pyinstaller-4.5.1.dist-info/entry_points.txt @@ -0,0 +1,8 @@ +[console_scripts] +pyi-archive_viewer = PyInstaller.utils.cliutils.archive_viewer:run +pyi-bindepend = PyInstaller.utils.cliutils.bindepend:run +pyi-grab_version = PyInstaller.utils.cliutils.grab_version:run +pyi-makespec = PyInstaller.utils.cliutils.makespec:run +pyi-set_version = PyInstaller.utils.cliutils.set_version:run +pyinstaller = PyInstaller.__main__:run + diff --git a/EXE version/main/pyinstaller-4.5.1.dist-info/top_level.txt b/EXE version/main/pyinstaller-4.5.1.dist-info/top_level.txt new file mode 100644 index 00000000..c313980b --- /dev/null +++ b/EXE version/main/pyinstaller-4.5.1.dist-info/top_level.txt @@ -0,0 +1 @@ +PyInstaller diff --git a/EXE version/main/python39.dll b/EXE version/main/python39.dll new file mode 100644 index 00000000..62dfdecb Binary files /dev/null and b/EXE version/main/python39.dll differ diff --git a/EXE version/main/resources/graphics/Bullets/BulletMushRoom/BulletMushRoom_0.png b/EXE version/main/resources/graphics/Bullets/BulletMushRoom/BulletMushRoom_0.png new file mode 100644 index 00000000..cc300989 Binary files /dev/null and b/EXE version/main/resources/graphics/Bullets/BulletMushRoom/BulletMushRoom_0.png differ diff --git a/EXE version/main/resources/graphics/Bullets/BulletMushRoom/BulletMushRoom_1.png b/EXE version/main/resources/graphics/Bullets/BulletMushRoom/BulletMushRoom_1.png new file mode 100644 index 00000000..7be281ea Binary files /dev/null and b/EXE version/main/resources/graphics/Bullets/BulletMushRoom/BulletMushRoom_1.png differ diff --git a/EXE version/main/resources/graphics/Bullets/BulletMushRoom/BulletMushRoom_2.png b/EXE version/main/resources/graphics/Bullets/BulletMushRoom/BulletMushRoom_2.png new file mode 100644 index 00000000..bde311eb Binary files /dev/null and b/EXE version/main/resources/graphics/Bullets/BulletMushRoom/BulletMushRoom_2.png differ diff --git a/EXE version/main/resources/graphics/Bullets/BulletMushRoom/BulletMushRoom_3.png b/EXE version/main/resources/graphics/Bullets/BulletMushRoom/BulletMushRoom_3.png new file mode 100644 index 00000000..e354eee6 Binary files /dev/null and b/EXE version/main/resources/graphics/Bullets/BulletMushRoom/BulletMushRoom_3.png differ diff --git a/EXE version/main/resources/graphics/Bullets/BulletMushRoom/BulletMushRoom_4.png b/EXE version/main/resources/graphics/Bullets/BulletMushRoom/BulletMushRoom_4.png new file mode 100644 index 00000000..b3355bcf Binary files /dev/null and b/EXE version/main/resources/graphics/Bullets/BulletMushRoom/BulletMushRoom_4.png differ diff --git a/EXE version/main/resources/graphics/Bullets/BulletMushRoomExplode/BulletMushRoomExplode_0.gif b/EXE version/main/resources/graphics/Bullets/BulletMushRoomExplode/BulletMushRoomExplode_0.gif new file mode 100644 index 00000000..0d6a7b40 Binary files /dev/null and b/EXE version/main/resources/graphics/Bullets/BulletMushRoomExplode/BulletMushRoomExplode_0.gif differ diff --git a/EXE version/main/resources/graphics/Bullets/PeaIce/PeaIce_0.png b/EXE version/main/resources/graphics/Bullets/PeaIce/PeaIce_0.png new file mode 100644 index 00000000..462659de Binary files /dev/null and b/EXE version/main/resources/graphics/Bullets/PeaIce/PeaIce_0.png differ diff --git a/EXE version/main/resources/graphics/Bullets/PeaNormal/PeaNormal_0.png b/EXE version/main/resources/graphics/Bullets/PeaNormal/PeaNormal_0.png new file mode 100644 index 00000000..13506b3f Binary files /dev/null and b/EXE version/main/resources/graphics/Bullets/PeaNormal/PeaNormal_0.png differ diff --git a/EXE version/main/resources/graphics/Bullets/PeaNormalExplode/PeaNormalExplode_0.png b/EXE version/main/resources/graphics/Bullets/PeaNormalExplode/PeaNormalExplode_0.png new file mode 100644 index 00000000..865c43f0 Binary files /dev/null and b/EXE version/main/resources/graphics/Bullets/PeaNormalExplode/PeaNormalExplode_0.png differ diff --git a/EXE version/main/resources/graphics/Cards/card_cherrybomb.png b/EXE version/main/resources/graphics/Cards/card_cherrybomb.png new file mode 100644 index 00000000..fba0aaea Binary files /dev/null and b/EXE version/main/resources/graphics/Cards/card_cherrybomb.png differ diff --git a/EXE version/main/resources/graphics/Cards/card_cherrybomb_move.png b/EXE version/main/resources/graphics/Cards/card_cherrybomb_move.png new file mode 100644 index 00000000..03561e0b Binary files /dev/null and b/EXE version/main/resources/graphics/Cards/card_cherrybomb_move.png differ diff --git a/EXE version/main/resources/graphics/Cards/card_chomper.png b/EXE version/main/resources/graphics/Cards/card_chomper.png new file mode 100644 index 00000000..658cd5f8 Binary files /dev/null and b/EXE version/main/resources/graphics/Cards/card_chomper.png differ diff --git a/EXE version/main/resources/graphics/Cards/card_chomper_move.png b/EXE version/main/resources/graphics/Cards/card_chomper_move.png new file mode 100644 index 00000000..8a308848 Binary files /dev/null and b/EXE version/main/resources/graphics/Cards/card_chomper_move.png differ diff --git a/EXE version/main/resources/graphics/Cards/card_hypnoshroom.png b/EXE version/main/resources/graphics/Cards/card_hypnoshroom.png new file mode 100644 index 00000000..e605f48f Binary files /dev/null and b/EXE version/main/resources/graphics/Cards/card_hypnoshroom.png differ diff --git a/EXE version/main/resources/graphics/Cards/card_iceshroom.png b/EXE version/main/resources/graphics/Cards/card_iceshroom.png new file mode 100644 index 00000000..6ab9c793 Binary files /dev/null and b/EXE version/main/resources/graphics/Cards/card_iceshroom.png differ diff --git a/EXE version/main/resources/graphics/Cards/card_jalapeno.png b/EXE version/main/resources/graphics/Cards/card_jalapeno.png new file mode 100644 index 00000000..5f9486a5 Binary files /dev/null and b/EXE version/main/resources/graphics/Cards/card_jalapeno.png differ diff --git a/EXE version/main/resources/graphics/Cards/card_peashooter.png b/EXE version/main/resources/graphics/Cards/card_peashooter.png new file mode 100644 index 00000000..5b4f3dfa Binary files /dev/null and b/EXE version/main/resources/graphics/Cards/card_peashooter.png differ diff --git a/EXE version/main/resources/graphics/Cards/card_peashooter_move.png b/EXE version/main/resources/graphics/Cards/card_peashooter_move.png new file mode 100644 index 00000000..d8427305 Binary files /dev/null and b/EXE version/main/resources/graphics/Cards/card_peashooter_move.png differ diff --git a/EXE version/main/resources/graphics/Cards/card_potatomine.png b/EXE version/main/resources/graphics/Cards/card_potatomine.png new file mode 100644 index 00000000..192fe4b8 Binary files /dev/null and b/EXE version/main/resources/graphics/Cards/card_potatomine.png differ diff --git a/EXE version/main/resources/graphics/Cards/card_potatomine_move.png b/EXE version/main/resources/graphics/Cards/card_potatomine_move.png new file mode 100644 index 00000000..ab9a7e69 Binary files /dev/null and b/EXE version/main/resources/graphics/Cards/card_potatomine_move.png differ diff --git a/EXE version/main/resources/graphics/Cards/card_puffshroom.png b/EXE version/main/resources/graphics/Cards/card_puffshroom.png new file mode 100644 index 00000000..6a52f76c Binary files /dev/null and b/EXE version/main/resources/graphics/Cards/card_puffshroom.png differ diff --git a/EXE version/main/resources/graphics/Cards/card_redwallnut_move.png b/EXE version/main/resources/graphics/Cards/card_redwallnut_move.png new file mode 100644 index 00000000..11a6a1fb Binary files /dev/null and b/EXE version/main/resources/graphics/Cards/card_redwallnut_move.png differ diff --git a/EXE version/main/resources/graphics/Cards/card_repeaterpea.png b/EXE version/main/resources/graphics/Cards/card_repeaterpea.png new file mode 100644 index 00000000..f595c091 Binary files /dev/null and b/EXE version/main/resources/graphics/Cards/card_repeaterpea.png differ diff --git a/EXE version/main/resources/graphics/Cards/card_repeaterpea_move.png b/EXE version/main/resources/graphics/Cards/card_repeaterpea_move.png new file mode 100644 index 00000000..d6ead864 Binary files /dev/null and b/EXE version/main/resources/graphics/Cards/card_repeaterpea_move.png differ diff --git a/EXE version/main/resources/graphics/Cards/card_scaredyshroom.png b/EXE version/main/resources/graphics/Cards/card_scaredyshroom.png new file mode 100644 index 00000000..b8ebf82c Binary files /dev/null and b/EXE version/main/resources/graphics/Cards/card_scaredyshroom.png differ diff --git a/EXE version/main/resources/graphics/Cards/card_snowpea.png b/EXE version/main/resources/graphics/Cards/card_snowpea.png new file mode 100644 index 00000000..57fb8836 Binary files /dev/null and b/EXE version/main/resources/graphics/Cards/card_snowpea.png differ diff --git a/EXE version/main/resources/graphics/Cards/card_snowpea_move.png b/EXE version/main/resources/graphics/Cards/card_snowpea_move.png new file mode 100644 index 00000000..31f716ee Binary files /dev/null and b/EXE version/main/resources/graphics/Cards/card_snowpea_move.png differ diff --git a/EXE version/main/resources/graphics/Cards/card_spikeweed.png b/EXE version/main/resources/graphics/Cards/card_spikeweed.png new file mode 100644 index 00000000..704a8713 Binary files /dev/null and b/EXE version/main/resources/graphics/Cards/card_spikeweed.png differ diff --git a/EXE version/main/resources/graphics/Cards/card_squash.png b/EXE version/main/resources/graphics/Cards/card_squash.png new file mode 100644 index 00000000..7474a8b6 Binary files /dev/null and b/EXE version/main/resources/graphics/Cards/card_squash.png differ diff --git a/EXE version/main/resources/graphics/Cards/card_sunflower.png b/EXE version/main/resources/graphics/Cards/card_sunflower.png new file mode 100644 index 00000000..200a3d8e Binary files /dev/null and b/EXE version/main/resources/graphics/Cards/card_sunflower.png differ diff --git a/EXE version/main/resources/graphics/Cards/card_sunshroom.png b/EXE version/main/resources/graphics/Cards/card_sunshroom.png new file mode 100644 index 00000000..d869b388 Binary files /dev/null and b/EXE version/main/resources/graphics/Cards/card_sunshroom.png differ diff --git a/EXE version/main/resources/graphics/Cards/card_threepeashooter.png b/EXE version/main/resources/graphics/Cards/card_threepeashooter.png new file mode 100644 index 00000000..e71fc31f Binary files /dev/null and b/EXE version/main/resources/graphics/Cards/card_threepeashooter.png differ diff --git a/EXE version/main/resources/graphics/Cards/card_wallnut.png b/EXE version/main/resources/graphics/Cards/card_wallnut.png new file mode 100644 index 00000000..2b7752d5 Binary files /dev/null and b/EXE version/main/resources/graphics/Cards/card_wallnut.png differ diff --git a/EXE version/main/resources/graphics/Cards/card_wallnut_move.png b/EXE version/main/resources/graphics/Cards/card_wallnut_move.png new file mode 100644 index 00000000..f9bc6e8b Binary files /dev/null and b/EXE version/main/resources/graphics/Cards/card_wallnut_move.png differ diff --git a/EXE version/main/resources/graphics/Items/Background/Background_0.jpg b/EXE version/main/resources/graphics/Items/Background/Background_0.jpg new file mode 100644 index 00000000..22631146 Binary files /dev/null and b/EXE version/main/resources/graphics/Items/Background/Background_0.jpg differ diff --git a/EXE version/main/resources/graphics/Items/Background/Background_1.jpg b/EXE version/main/resources/graphics/Items/Background/Background_1.jpg new file mode 100644 index 00000000..8b8fc26d Binary files /dev/null and b/EXE version/main/resources/graphics/Items/Background/Background_1.jpg differ diff --git a/EXE version/main/resources/graphics/Items/Background/Background_2.jpg b/EXE version/main/resources/graphics/Items/Background/Background_2.jpg new file mode 100644 index 00000000..2c2e704f Binary files /dev/null and b/EXE version/main/resources/graphics/Items/Background/Background_2.jpg differ diff --git a/EXE version/main/resources/graphics/Items/Background/Background_3.jpg b/EXE version/main/resources/graphics/Items/Background/Background_3.jpg new file mode 100644 index 00000000..cc8dd2ea Binary files /dev/null and b/EXE version/main/resources/graphics/Items/Background/Background_3.jpg differ diff --git a/EXE version/main/resources/graphics/Items/Background/Background_4.jpg b/EXE version/main/resources/graphics/Items/Background/Background_4.jpg new file mode 100644 index 00000000..d4743ad9 Binary files /dev/null and b/EXE version/main/resources/graphics/Items/Background/Background_4.jpg differ diff --git a/EXE version/main/resources/graphics/Plants/CherryBomb/CherryBomb_0.png b/EXE version/main/resources/graphics/Plants/CherryBomb/CherryBomb_0.png new file mode 100644 index 00000000..ede961a7 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/CherryBomb/CherryBomb_0.png differ diff --git a/EXE version/main/resources/graphics/Plants/CherryBomb/CherryBomb_1.png b/EXE version/main/resources/graphics/Plants/CherryBomb/CherryBomb_1.png new file mode 100644 index 00000000..827bc878 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/CherryBomb/CherryBomb_1.png differ diff --git a/EXE version/main/resources/graphics/Plants/CherryBomb/CherryBomb_2.png b/EXE version/main/resources/graphics/Plants/CherryBomb/CherryBomb_2.png new file mode 100644 index 00000000..0706f249 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/CherryBomb/CherryBomb_2.png differ diff --git a/EXE version/main/resources/graphics/Plants/CherryBomb/CherryBomb_3.png b/EXE version/main/resources/graphics/Plants/CherryBomb/CherryBomb_3.png new file mode 100644 index 00000000..485a336b Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/CherryBomb/CherryBomb_3.png differ diff --git a/EXE version/main/resources/graphics/Plants/CherryBomb/CherryBomb_4.png b/EXE version/main/resources/graphics/Plants/CherryBomb/CherryBomb_4.png new file mode 100644 index 00000000..b8193e06 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/CherryBomb/CherryBomb_4.png differ diff --git a/EXE version/main/resources/graphics/Plants/CherryBomb/CherryBomb_5.png b/EXE version/main/resources/graphics/Plants/CherryBomb/CherryBomb_5.png new file mode 100644 index 00000000..de76a6f6 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/CherryBomb/CherryBomb_5.png differ diff --git a/EXE version/main/resources/graphics/Plants/CherryBomb/CherryBomb_6.png b/EXE version/main/resources/graphics/Plants/CherryBomb/CherryBomb_6.png new file mode 100644 index 00000000..c391161f Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/CherryBomb/CherryBomb_6.png differ diff --git a/EXE version/main/resources/graphics/Plants/Chomper/Chomper/Chomper_0.png b/EXE version/main/resources/graphics/Plants/Chomper/Chomper/Chomper_0.png new file mode 100644 index 00000000..14a19a27 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Chomper/Chomper/Chomper_0.png differ diff --git a/EXE version/main/resources/graphics/Plants/Chomper/Chomper/Chomper_1.png b/EXE version/main/resources/graphics/Plants/Chomper/Chomper/Chomper_1.png new file mode 100644 index 00000000..bc33dfe5 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Chomper/Chomper/Chomper_1.png differ diff --git a/EXE version/main/resources/graphics/Plants/Chomper/Chomper/Chomper_10.png b/EXE version/main/resources/graphics/Plants/Chomper/Chomper/Chomper_10.png new file mode 100644 index 00000000..121ce998 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Chomper/Chomper/Chomper_10.png differ diff --git a/EXE version/main/resources/graphics/Plants/Chomper/Chomper/Chomper_11.png b/EXE version/main/resources/graphics/Plants/Chomper/Chomper/Chomper_11.png new file mode 100644 index 00000000..0e03d7eb Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Chomper/Chomper/Chomper_11.png differ diff --git a/EXE version/main/resources/graphics/Plants/Chomper/Chomper/Chomper_12.png b/EXE version/main/resources/graphics/Plants/Chomper/Chomper/Chomper_12.png new file mode 100644 index 00000000..91caa918 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Chomper/Chomper/Chomper_12.png differ diff --git a/EXE version/main/resources/graphics/Plants/Chomper/Chomper/Chomper_2.png b/EXE version/main/resources/graphics/Plants/Chomper/Chomper/Chomper_2.png new file mode 100644 index 00000000..654943fb Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Chomper/Chomper/Chomper_2.png differ diff --git a/EXE version/main/resources/graphics/Plants/Chomper/Chomper/Chomper_3.png b/EXE version/main/resources/graphics/Plants/Chomper/Chomper/Chomper_3.png new file mode 100644 index 00000000..e45066e6 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Chomper/Chomper/Chomper_3.png differ diff --git a/EXE version/main/resources/graphics/Plants/Chomper/Chomper/Chomper_4.png b/EXE version/main/resources/graphics/Plants/Chomper/Chomper/Chomper_4.png new file mode 100644 index 00000000..74424463 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Chomper/Chomper/Chomper_4.png differ diff --git a/EXE version/main/resources/graphics/Plants/Chomper/Chomper/Chomper_5.png b/EXE version/main/resources/graphics/Plants/Chomper/Chomper/Chomper_5.png new file mode 100644 index 00000000..58adb6ef Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Chomper/Chomper/Chomper_5.png differ diff --git a/EXE version/main/resources/graphics/Plants/Chomper/Chomper/Chomper_6.png b/EXE version/main/resources/graphics/Plants/Chomper/Chomper/Chomper_6.png new file mode 100644 index 00000000..c864d657 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Chomper/Chomper/Chomper_6.png differ diff --git a/EXE version/main/resources/graphics/Plants/Chomper/Chomper/Chomper_7.png b/EXE version/main/resources/graphics/Plants/Chomper/Chomper/Chomper_7.png new file mode 100644 index 00000000..c4a732cf Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Chomper/Chomper/Chomper_7.png differ diff --git a/EXE version/main/resources/graphics/Plants/Chomper/Chomper/Chomper_8.png b/EXE version/main/resources/graphics/Plants/Chomper/Chomper/Chomper_8.png new file mode 100644 index 00000000..6c22fada Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Chomper/Chomper/Chomper_8.png differ diff --git a/EXE version/main/resources/graphics/Plants/Chomper/Chomper/Chomper_9.png b/EXE version/main/resources/graphics/Plants/Chomper/Chomper/Chomper_9.png new file mode 100644 index 00000000..81c78b96 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Chomper/Chomper/Chomper_9.png differ diff --git a/EXE version/main/resources/graphics/Plants/Chomper/ChomperAttack/ChomperAttack_0.png b/EXE version/main/resources/graphics/Plants/Chomper/ChomperAttack/ChomperAttack_0.png new file mode 100644 index 00000000..c0d8ac4f Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Chomper/ChomperAttack/ChomperAttack_0.png differ diff --git a/EXE version/main/resources/graphics/Plants/Chomper/ChomperAttack/ChomperAttack_1.png b/EXE version/main/resources/graphics/Plants/Chomper/ChomperAttack/ChomperAttack_1.png new file mode 100644 index 00000000..b4d5bbd6 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Chomper/ChomperAttack/ChomperAttack_1.png differ diff --git a/EXE version/main/resources/graphics/Plants/Chomper/ChomperAttack/ChomperAttack_2.png b/EXE version/main/resources/graphics/Plants/Chomper/ChomperAttack/ChomperAttack_2.png new file mode 100644 index 00000000..088d5425 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Chomper/ChomperAttack/ChomperAttack_2.png differ diff --git a/EXE version/main/resources/graphics/Plants/Chomper/ChomperAttack/ChomperAttack_3.png b/EXE version/main/resources/graphics/Plants/Chomper/ChomperAttack/ChomperAttack_3.png new file mode 100644 index 00000000..1a407812 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Chomper/ChomperAttack/ChomperAttack_3.png differ diff --git a/EXE version/main/resources/graphics/Plants/Chomper/ChomperAttack/ChomperAttack_4.png b/EXE version/main/resources/graphics/Plants/Chomper/ChomperAttack/ChomperAttack_4.png new file mode 100644 index 00000000..136517d9 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Chomper/ChomperAttack/ChomperAttack_4.png differ diff --git a/EXE version/main/resources/graphics/Plants/Chomper/ChomperAttack/ChomperAttack_5.png b/EXE version/main/resources/graphics/Plants/Chomper/ChomperAttack/ChomperAttack_5.png new file mode 100644 index 00000000..61b0deba Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Chomper/ChomperAttack/ChomperAttack_5.png differ diff --git a/EXE version/main/resources/graphics/Plants/Chomper/ChomperAttack/ChomperAttack_6.png b/EXE version/main/resources/graphics/Plants/Chomper/ChomperAttack/ChomperAttack_6.png new file mode 100644 index 00000000..a18bf03d Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Chomper/ChomperAttack/ChomperAttack_6.png differ diff --git a/EXE version/main/resources/graphics/Plants/Chomper/ChomperAttack/ChomperAttack_7.png b/EXE version/main/resources/graphics/Plants/Chomper/ChomperAttack/ChomperAttack_7.png new file mode 100644 index 00000000..bf0afa74 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Chomper/ChomperAttack/ChomperAttack_7.png differ diff --git a/EXE version/main/resources/graphics/Plants/Chomper/ChomperAttack/ChomperAttack_8.png b/EXE version/main/resources/graphics/Plants/Chomper/ChomperAttack/ChomperAttack_8.png new file mode 100644 index 00000000..efcb7ca7 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Chomper/ChomperAttack/ChomperAttack_8.png differ diff --git a/EXE version/main/resources/graphics/Plants/Chomper/ChomperDigest/ChomperDigest_0.png b/EXE version/main/resources/graphics/Plants/Chomper/ChomperDigest/ChomperDigest_0.png new file mode 100644 index 00000000..988088ad Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Chomper/ChomperDigest/ChomperDigest_0.png differ diff --git a/EXE version/main/resources/graphics/Plants/Chomper/ChomperDigest/ChomperDigest_1.png b/EXE version/main/resources/graphics/Plants/Chomper/ChomperDigest/ChomperDigest_1.png new file mode 100644 index 00000000..6e92ff0c Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Chomper/ChomperDigest/ChomperDigest_1.png differ diff --git a/EXE version/main/resources/graphics/Plants/Chomper/ChomperDigest/ChomperDigest_2.png b/EXE version/main/resources/graphics/Plants/Chomper/ChomperDigest/ChomperDigest_2.png new file mode 100644 index 00000000..804bee6b Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Chomper/ChomperDigest/ChomperDigest_2.png differ diff --git a/EXE version/main/resources/graphics/Plants/Chomper/ChomperDigest/ChomperDigest_3.png b/EXE version/main/resources/graphics/Plants/Chomper/ChomperDigest/ChomperDigest_3.png new file mode 100644 index 00000000..2c91e5ab Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Chomper/ChomperDigest/ChomperDigest_3.png differ diff --git a/EXE version/main/resources/graphics/Plants/Chomper/ChomperDigest/ChomperDigest_4.png b/EXE version/main/resources/graphics/Plants/Chomper/ChomperDigest/ChomperDigest_4.png new file mode 100644 index 00000000..95b838ba Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Chomper/ChomperDigest/ChomperDigest_4.png differ diff --git a/EXE version/main/resources/graphics/Plants/Chomper/ChomperDigest/ChomperDigest_5.png b/EXE version/main/resources/graphics/Plants/Chomper/ChomperDigest/ChomperDigest_5.png new file mode 100644 index 00000000..fb7ee7bb Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Chomper/ChomperDigest/ChomperDigest_5.png differ diff --git a/EXE version/main/resources/graphics/Plants/HypnoShroom/HypnoShroom/HypnoShroom_0.png b/EXE version/main/resources/graphics/Plants/HypnoShroom/HypnoShroom/HypnoShroom_0.png new file mode 100644 index 00000000..0a79f9bd Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/HypnoShroom/HypnoShroom/HypnoShroom_0.png differ diff --git a/EXE version/main/resources/graphics/Plants/HypnoShroom/HypnoShroom/HypnoShroom_1.png b/EXE version/main/resources/graphics/Plants/HypnoShroom/HypnoShroom/HypnoShroom_1.png new file mode 100644 index 00000000..e5a9a14e Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/HypnoShroom/HypnoShroom/HypnoShroom_1.png differ diff --git a/EXE version/main/resources/graphics/Plants/HypnoShroom/HypnoShroom/HypnoShroom_10.png b/EXE version/main/resources/graphics/Plants/HypnoShroom/HypnoShroom/HypnoShroom_10.png new file mode 100644 index 00000000..a42062e7 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/HypnoShroom/HypnoShroom/HypnoShroom_10.png differ diff --git a/EXE version/main/resources/graphics/Plants/HypnoShroom/HypnoShroom/HypnoShroom_11.png b/EXE version/main/resources/graphics/Plants/HypnoShroom/HypnoShroom/HypnoShroom_11.png new file mode 100644 index 00000000..ac92a54a Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/HypnoShroom/HypnoShroom/HypnoShroom_11.png differ diff --git a/EXE version/main/resources/graphics/Plants/HypnoShroom/HypnoShroom/HypnoShroom_12.png b/EXE version/main/resources/graphics/Plants/HypnoShroom/HypnoShroom/HypnoShroom_12.png new file mode 100644 index 00000000..776cc9e9 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/HypnoShroom/HypnoShroom/HypnoShroom_12.png differ diff --git a/EXE version/main/resources/graphics/Plants/HypnoShroom/HypnoShroom/HypnoShroom_13.png b/EXE version/main/resources/graphics/Plants/HypnoShroom/HypnoShroom/HypnoShroom_13.png new file mode 100644 index 00000000..a4b0064a Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/HypnoShroom/HypnoShroom/HypnoShroom_13.png differ diff --git a/EXE version/main/resources/graphics/Plants/HypnoShroom/HypnoShroom/HypnoShroom_14.png b/EXE version/main/resources/graphics/Plants/HypnoShroom/HypnoShroom/HypnoShroom_14.png new file mode 100644 index 00000000..c86f0124 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/HypnoShroom/HypnoShroom/HypnoShroom_14.png differ diff --git a/EXE version/main/resources/graphics/Plants/HypnoShroom/HypnoShroom/HypnoShroom_2.png b/EXE version/main/resources/graphics/Plants/HypnoShroom/HypnoShroom/HypnoShroom_2.png new file mode 100644 index 00000000..15db637d Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/HypnoShroom/HypnoShroom/HypnoShroom_2.png differ diff --git a/EXE version/main/resources/graphics/Plants/HypnoShroom/HypnoShroom/HypnoShroom_3.png b/EXE version/main/resources/graphics/Plants/HypnoShroom/HypnoShroom/HypnoShroom_3.png new file mode 100644 index 00000000..4d1a2f74 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/HypnoShroom/HypnoShroom/HypnoShroom_3.png differ diff --git a/EXE version/main/resources/graphics/Plants/HypnoShroom/HypnoShroom/HypnoShroom_4.png b/EXE version/main/resources/graphics/Plants/HypnoShroom/HypnoShroom/HypnoShroom_4.png new file mode 100644 index 00000000..f42a16ba Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/HypnoShroom/HypnoShroom/HypnoShroom_4.png differ diff --git a/EXE version/main/resources/graphics/Plants/HypnoShroom/HypnoShroom/HypnoShroom_5.png b/EXE version/main/resources/graphics/Plants/HypnoShroom/HypnoShroom/HypnoShroom_5.png new file mode 100644 index 00000000..c267773c Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/HypnoShroom/HypnoShroom/HypnoShroom_5.png differ diff --git a/EXE version/main/resources/graphics/Plants/HypnoShroom/HypnoShroom/HypnoShroom_6.png b/EXE version/main/resources/graphics/Plants/HypnoShroom/HypnoShroom/HypnoShroom_6.png new file mode 100644 index 00000000..2e668384 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/HypnoShroom/HypnoShroom/HypnoShroom_6.png differ diff --git a/EXE version/main/resources/graphics/Plants/HypnoShroom/HypnoShroom/HypnoShroom_7.png b/EXE version/main/resources/graphics/Plants/HypnoShroom/HypnoShroom/HypnoShroom_7.png new file mode 100644 index 00000000..50de883f Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/HypnoShroom/HypnoShroom/HypnoShroom_7.png differ diff --git a/EXE version/main/resources/graphics/Plants/HypnoShroom/HypnoShroom/HypnoShroom_8.png b/EXE version/main/resources/graphics/Plants/HypnoShroom/HypnoShroom/HypnoShroom_8.png new file mode 100644 index 00000000..9d0dae8b Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/HypnoShroom/HypnoShroom/HypnoShroom_8.png differ diff --git a/EXE version/main/resources/graphics/Plants/HypnoShroom/HypnoShroom/HypnoShroom_9.png b/EXE version/main/resources/graphics/Plants/HypnoShroom/HypnoShroom/HypnoShroom_9.png new file mode 100644 index 00000000..a42062e7 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/HypnoShroom/HypnoShroom/HypnoShroom_9.png differ diff --git a/EXE version/main/resources/graphics/Plants/HypnoShroom/HypnoShroomSleep/HypnoShroomSleep_0.png b/EXE version/main/resources/graphics/Plants/HypnoShroom/HypnoShroomSleep/HypnoShroomSleep_0.png new file mode 100644 index 00000000..10931708 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/HypnoShroom/HypnoShroomSleep/HypnoShroomSleep_0.png differ diff --git a/EXE version/main/resources/graphics/Plants/HypnoShroom/HypnoShroomSleep/HypnoShroomSleep_1.png b/EXE version/main/resources/graphics/Plants/HypnoShroom/HypnoShroomSleep/HypnoShroomSleep_1.png new file mode 100644 index 00000000..af4dbdc8 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/HypnoShroom/HypnoShroomSleep/HypnoShroomSleep_1.png differ diff --git a/EXE version/main/resources/graphics/Plants/HypnoShroom/HypnoShroomSleep/HypnoShroomSleep_10.png b/EXE version/main/resources/graphics/Plants/HypnoShroom/HypnoShroomSleep/HypnoShroomSleep_10.png new file mode 100644 index 00000000..d54e2bd1 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/HypnoShroom/HypnoShroomSleep/HypnoShroomSleep_10.png differ diff --git a/EXE version/main/resources/graphics/Plants/HypnoShroom/HypnoShroomSleep/HypnoShroomSleep_11.png b/EXE version/main/resources/graphics/Plants/HypnoShroom/HypnoShroomSleep/HypnoShroomSleep_11.png new file mode 100644 index 00000000..9d2809f3 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/HypnoShroom/HypnoShroomSleep/HypnoShroomSleep_11.png differ diff --git a/EXE version/main/resources/graphics/Plants/HypnoShroom/HypnoShroomSleep/HypnoShroomSleep_12.png b/EXE version/main/resources/graphics/Plants/HypnoShroom/HypnoShroomSleep/HypnoShroomSleep_12.png new file mode 100644 index 00000000..cf87ac31 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/HypnoShroom/HypnoShroomSleep/HypnoShroomSleep_12.png differ diff --git a/EXE version/main/resources/graphics/Plants/HypnoShroom/HypnoShroomSleep/HypnoShroomSleep_2.png b/EXE version/main/resources/graphics/Plants/HypnoShroom/HypnoShroomSleep/HypnoShroomSleep_2.png new file mode 100644 index 00000000..8ed7d4f8 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/HypnoShroom/HypnoShroomSleep/HypnoShroomSleep_2.png differ diff --git a/EXE version/main/resources/graphics/Plants/HypnoShroom/HypnoShroomSleep/HypnoShroomSleep_3.png b/EXE version/main/resources/graphics/Plants/HypnoShroom/HypnoShroomSleep/HypnoShroomSleep_3.png new file mode 100644 index 00000000..3c8b3c78 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/HypnoShroom/HypnoShroomSleep/HypnoShroomSleep_3.png differ diff --git a/EXE version/main/resources/graphics/Plants/HypnoShroom/HypnoShroomSleep/HypnoShroomSleep_4.png b/EXE version/main/resources/graphics/Plants/HypnoShroom/HypnoShroomSleep/HypnoShroomSleep_4.png new file mode 100644 index 00000000..d7a883a7 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/HypnoShroom/HypnoShroomSleep/HypnoShroomSleep_4.png differ diff --git a/EXE version/main/resources/graphics/Plants/HypnoShroom/HypnoShroomSleep/HypnoShroomSleep_5.png b/EXE version/main/resources/graphics/Plants/HypnoShroom/HypnoShroomSleep/HypnoShroomSleep_5.png new file mode 100644 index 00000000..465ae9b5 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/HypnoShroom/HypnoShroomSleep/HypnoShroomSleep_5.png differ diff --git a/EXE version/main/resources/graphics/Plants/HypnoShroom/HypnoShroomSleep/HypnoShroomSleep_6.png b/EXE version/main/resources/graphics/Plants/HypnoShroom/HypnoShroomSleep/HypnoShroomSleep_6.png new file mode 100644 index 00000000..dc46cbb0 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/HypnoShroom/HypnoShroomSleep/HypnoShroomSleep_6.png differ diff --git a/EXE version/main/resources/graphics/Plants/HypnoShroom/HypnoShroomSleep/HypnoShroomSleep_7.png b/EXE version/main/resources/graphics/Plants/HypnoShroom/HypnoShroomSleep/HypnoShroomSleep_7.png new file mode 100644 index 00000000..e490c34f Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/HypnoShroom/HypnoShroomSleep/HypnoShroomSleep_7.png differ diff --git a/EXE version/main/resources/graphics/Plants/HypnoShroom/HypnoShroomSleep/HypnoShroomSleep_8.png b/EXE version/main/resources/graphics/Plants/HypnoShroom/HypnoShroomSleep/HypnoShroomSleep_8.png new file mode 100644 index 00000000..ed304df2 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/HypnoShroom/HypnoShroomSleep/HypnoShroomSleep_8.png differ diff --git a/EXE version/main/resources/graphics/Plants/HypnoShroom/HypnoShroomSleep/HypnoShroomSleep_9.png b/EXE version/main/resources/graphics/Plants/HypnoShroom/HypnoShroomSleep/HypnoShroomSleep_9.png new file mode 100644 index 00000000..5ef4994a Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/HypnoShroom/HypnoShroomSleep/HypnoShroomSleep_9.png differ diff --git a/EXE version/main/resources/graphics/Plants/IceShroom/IceShroom/IceShroom_0.png b/EXE version/main/resources/graphics/Plants/IceShroom/IceShroom/IceShroom_0.png new file mode 100644 index 00000000..1722a552 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/IceShroom/IceShroom/IceShroom_0.png differ diff --git a/EXE version/main/resources/graphics/Plants/IceShroom/IceShroom/IceShroom_1.png b/EXE version/main/resources/graphics/Plants/IceShroom/IceShroom/IceShroom_1.png new file mode 100644 index 00000000..2fc5009c Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/IceShroom/IceShroom/IceShroom_1.png differ diff --git a/EXE version/main/resources/graphics/Plants/IceShroom/IceShroom/IceShroom_10.png b/EXE version/main/resources/graphics/Plants/IceShroom/IceShroom/IceShroom_10.png new file mode 100644 index 00000000..5e9d71c0 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/IceShroom/IceShroom/IceShroom_10.png differ diff --git a/EXE version/main/resources/graphics/Plants/IceShroom/IceShroom/IceShroom_2.png b/EXE version/main/resources/graphics/Plants/IceShroom/IceShroom/IceShroom_2.png new file mode 100644 index 00000000..98e43055 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/IceShroom/IceShroom/IceShroom_2.png differ diff --git a/EXE version/main/resources/graphics/Plants/IceShroom/IceShroom/IceShroom_3.png b/EXE version/main/resources/graphics/Plants/IceShroom/IceShroom/IceShroom_3.png new file mode 100644 index 00000000..37122a89 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/IceShroom/IceShroom/IceShroom_3.png differ diff --git a/EXE version/main/resources/graphics/Plants/IceShroom/IceShroom/IceShroom_4.png b/EXE version/main/resources/graphics/Plants/IceShroom/IceShroom/IceShroom_4.png new file mode 100644 index 00000000..42cb3e38 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/IceShroom/IceShroom/IceShroom_4.png differ diff --git a/EXE version/main/resources/graphics/Plants/IceShroom/IceShroom/IceShroom_5.png b/EXE version/main/resources/graphics/Plants/IceShroom/IceShroom/IceShroom_5.png new file mode 100644 index 00000000..21550593 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/IceShroom/IceShroom/IceShroom_5.png differ diff --git a/EXE version/main/resources/graphics/Plants/IceShroom/IceShroom/IceShroom_6.png b/EXE version/main/resources/graphics/Plants/IceShroom/IceShroom/IceShroom_6.png new file mode 100644 index 00000000..4369cac0 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/IceShroom/IceShroom/IceShroom_6.png differ diff --git a/EXE version/main/resources/graphics/Plants/IceShroom/IceShroom/IceShroom_7.png b/EXE version/main/resources/graphics/Plants/IceShroom/IceShroom/IceShroom_7.png new file mode 100644 index 00000000..b1d45088 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/IceShroom/IceShroom/IceShroom_7.png differ diff --git a/EXE version/main/resources/graphics/Plants/IceShroom/IceShroom/IceShroom_8.png b/EXE version/main/resources/graphics/Plants/IceShroom/IceShroom/IceShroom_8.png new file mode 100644 index 00000000..b1d45088 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/IceShroom/IceShroom/IceShroom_8.png differ diff --git a/EXE version/main/resources/graphics/Plants/IceShroom/IceShroom/IceShroom_9.png b/EXE version/main/resources/graphics/Plants/IceShroom/IceShroom/IceShroom_9.png new file mode 100644 index 00000000..5e9d71c0 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/IceShroom/IceShroom/IceShroom_9.png differ diff --git a/EXE version/main/resources/graphics/Plants/IceShroom/IceShroomSleep/IceShroomSleep_0.png b/EXE version/main/resources/graphics/Plants/IceShroom/IceShroomSleep/IceShroomSleep_0.png new file mode 100644 index 00000000..1b40432e Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/IceShroom/IceShroomSleep/IceShroomSleep_0.png differ diff --git a/EXE version/main/resources/graphics/Plants/IceShroom/IceShroomSleep/IceShroomSleep_1.png b/EXE version/main/resources/graphics/Plants/IceShroom/IceShroomSleep/IceShroomSleep_1.png new file mode 100644 index 00000000..04becb5f Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/IceShroom/IceShroomSleep/IceShroomSleep_1.png differ diff --git a/EXE version/main/resources/graphics/Plants/IceShroom/IceShroomSleep/IceShroomSleep_10.png b/EXE version/main/resources/graphics/Plants/IceShroom/IceShroomSleep/IceShroomSleep_10.png new file mode 100644 index 00000000..278d0765 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/IceShroom/IceShroomSleep/IceShroomSleep_10.png differ diff --git a/EXE version/main/resources/graphics/Plants/IceShroom/IceShroomSleep/IceShroomSleep_11.png b/EXE version/main/resources/graphics/Plants/IceShroom/IceShroomSleep/IceShroomSleep_11.png new file mode 100644 index 00000000..85b76fcd Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/IceShroom/IceShroomSleep/IceShroomSleep_11.png differ diff --git a/EXE version/main/resources/graphics/Plants/IceShroom/IceShroomSleep/IceShroomSleep_2.png b/EXE version/main/resources/graphics/Plants/IceShroom/IceShroomSleep/IceShroomSleep_2.png new file mode 100644 index 00000000..7c8d140b Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/IceShroom/IceShroomSleep/IceShroomSleep_2.png differ diff --git a/EXE version/main/resources/graphics/Plants/IceShroom/IceShroomSleep/IceShroomSleep_3.png b/EXE version/main/resources/graphics/Plants/IceShroom/IceShroomSleep/IceShroomSleep_3.png new file mode 100644 index 00000000..c0411dbc Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/IceShroom/IceShroomSleep/IceShroomSleep_3.png differ diff --git a/EXE version/main/resources/graphics/Plants/IceShroom/IceShroomSleep/IceShroomSleep_4.png b/EXE version/main/resources/graphics/Plants/IceShroom/IceShroomSleep/IceShroomSleep_4.png new file mode 100644 index 00000000..577e092d Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/IceShroom/IceShroomSleep/IceShroomSleep_4.png differ diff --git a/EXE version/main/resources/graphics/Plants/IceShroom/IceShroomSleep/IceShroomSleep_5.png b/EXE version/main/resources/graphics/Plants/IceShroom/IceShroomSleep/IceShroomSleep_5.png new file mode 100644 index 00000000..1af9abd2 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/IceShroom/IceShroomSleep/IceShroomSleep_5.png differ diff --git a/EXE version/main/resources/graphics/Plants/IceShroom/IceShroomSleep/IceShroomSleep_6.png b/EXE version/main/resources/graphics/Plants/IceShroom/IceShroomSleep/IceShroomSleep_6.png new file mode 100644 index 00000000..a205a008 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/IceShroom/IceShroomSleep/IceShroomSleep_6.png differ diff --git a/EXE version/main/resources/graphics/Plants/IceShroom/IceShroomSleep/IceShroomSleep_7.png b/EXE version/main/resources/graphics/Plants/IceShroom/IceShroomSleep/IceShroomSleep_7.png new file mode 100644 index 00000000..5cd83816 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/IceShroom/IceShroomSleep/IceShroomSleep_7.png differ diff --git a/EXE version/main/resources/graphics/Plants/IceShroom/IceShroomSleep/IceShroomSleep_8.png b/EXE version/main/resources/graphics/Plants/IceShroom/IceShroomSleep/IceShroomSleep_8.png new file mode 100644 index 00000000..b774f405 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/IceShroom/IceShroomSleep/IceShroomSleep_8.png differ diff --git a/EXE version/main/resources/graphics/Plants/IceShroom/IceShroomSleep/IceShroomSleep_9.png b/EXE version/main/resources/graphics/Plants/IceShroom/IceShroomSleep/IceShroomSleep_9.png new file mode 100644 index 00000000..616f45c1 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/IceShroom/IceShroomSleep/IceShroomSleep_9.png differ diff --git a/EXE version/main/resources/graphics/Plants/IceShroom/IceShroomSnow/IceShroomSnow_0.png b/EXE version/main/resources/graphics/Plants/IceShroom/IceShroomSnow/IceShroomSnow_0.png new file mode 100644 index 00000000..1706ff18 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/IceShroom/IceShroomSnow/IceShroomSnow_0.png differ diff --git a/EXE version/main/resources/graphics/Plants/IceShroom/IceShroomTrap/IceShroomTrap_0.png b/EXE version/main/resources/graphics/Plants/IceShroom/IceShroomTrap/IceShroomTrap_0.png new file mode 100644 index 00000000..c7ccfa7b Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/IceShroom/IceShroomTrap/IceShroomTrap_0.png differ diff --git a/EXE version/main/resources/graphics/Plants/Jalapeno/Jalapeno/Jalapeno_0.png b/EXE version/main/resources/graphics/Plants/Jalapeno/Jalapeno/Jalapeno_0.png new file mode 100644 index 00000000..1ca68e10 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Jalapeno/Jalapeno/Jalapeno_0.png differ diff --git a/EXE version/main/resources/graphics/Plants/Jalapeno/Jalapeno/Jalapeno_1.png b/EXE version/main/resources/graphics/Plants/Jalapeno/Jalapeno/Jalapeno_1.png new file mode 100644 index 00000000..7d3ff8f2 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Jalapeno/Jalapeno/Jalapeno_1.png differ diff --git a/EXE version/main/resources/graphics/Plants/Jalapeno/Jalapeno/Jalapeno_2.png b/EXE version/main/resources/graphics/Plants/Jalapeno/Jalapeno/Jalapeno_2.png new file mode 100644 index 00000000..7bab3fd3 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Jalapeno/Jalapeno/Jalapeno_2.png differ diff --git a/EXE version/main/resources/graphics/Plants/Jalapeno/Jalapeno/Jalapeno_3.png b/EXE version/main/resources/graphics/Plants/Jalapeno/Jalapeno/Jalapeno_3.png new file mode 100644 index 00000000..1ec8d137 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Jalapeno/Jalapeno/Jalapeno_3.png differ diff --git a/EXE version/main/resources/graphics/Plants/Jalapeno/Jalapeno/Jalapeno_4.png b/EXE version/main/resources/graphics/Plants/Jalapeno/Jalapeno/Jalapeno_4.png new file mode 100644 index 00000000..9da902bf Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Jalapeno/Jalapeno/Jalapeno_4.png differ diff --git a/EXE version/main/resources/graphics/Plants/Jalapeno/Jalapeno/Jalapeno_5.png b/EXE version/main/resources/graphics/Plants/Jalapeno/Jalapeno/Jalapeno_5.png new file mode 100644 index 00000000..6569ebd0 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Jalapeno/Jalapeno/Jalapeno_5.png differ diff --git a/EXE version/main/resources/graphics/Plants/Jalapeno/Jalapeno/Jalapeno_6.png b/EXE version/main/resources/graphics/Plants/Jalapeno/Jalapeno/Jalapeno_6.png new file mode 100644 index 00000000..92825b90 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Jalapeno/Jalapeno/Jalapeno_6.png differ diff --git a/EXE version/main/resources/graphics/Plants/Jalapeno/Jalapeno/Jalapeno_7.png b/EXE version/main/resources/graphics/Plants/Jalapeno/Jalapeno/Jalapeno_7.png new file mode 100644 index 00000000..1c975507 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Jalapeno/Jalapeno/Jalapeno_7.png differ diff --git a/EXE version/main/resources/graphics/Plants/Jalapeno/JalapenoExplode/JalapenoExplode_0.png b/EXE version/main/resources/graphics/Plants/Jalapeno/JalapenoExplode/JalapenoExplode_0.png new file mode 100644 index 00000000..519f6aa9 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Jalapeno/JalapenoExplode/JalapenoExplode_0.png differ diff --git a/EXE version/main/resources/graphics/Plants/Jalapeno/JalapenoExplode/JalapenoExplode_1.png b/EXE version/main/resources/graphics/Plants/Jalapeno/JalapenoExplode/JalapenoExplode_1.png new file mode 100644 index 00000000..31388a2a Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Jalapeno/JalapenoExplode/JalapenoExplode_1.png differ diff --git a/EXE version/main/resources/graphics/Plants/Jalapeno/JalapenoExplode/JalapenoExplode_2.png b/EXE version/main/resources/graphics/Plants/Jalapeno/JalapenoExplode/JalapenoExplode_2.png new file mode 100644 index 00000000..6c94c57e Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Jalapeno/JalapenoExplode/JalapenoExplode_2.png differ diff --git a/EXE version/main/resources/graphics/Plants/Jalapeno/JalapenoExplode/JalapenoExplode_3.png b/EXE version/main/resources/graphics/Plants/Jalapeno/JalapenoExplode/JalapenoExplode_3.png new file mode 100644 index 00000000..c34e9fd8 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Jalapeno/JalapenoExplode/JalapenoExplode_3.png differ diff --git a/EXE version/main/resources/graphics/Plants/Jalapeno/JalapenoExplode/JalapenoExplode_4.png b/EXE version/main/resources/graphics/Plants/Jalapeno/JalapenoExplode/JalapenoExplode_4.png new file mode 100644 index 00000000..20d21af8 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Jalapeno/JalapenoExplode/JalapenoExplode_4.png differ diff --git a/EXE version/main/resources/graphics/Plants/Jalapeno/JalapenoExplode/JalapenoExplode_5.png b/EXE version/main/resources/graphics/Plants/Jalapeno/JalapenoExplode/JalapenoExplode_5.png new file mode 100644 index 00000000..10308a3c Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Jalapeno/JalapenoExplode/JalapenoExplode_5.png differ diff --git a/EXE version/main/resources/graphics/Plants/Jalapeno/JalapenoExplode/JalapenoExplode_6.png b/EXE version/main/resources/graphics/Plants/Jalapeno/JalapenoExplode/JalapenoExplode_6.png new file mode 100644 index 00000000..ee8a4eba Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Jalapeno/JalapenoExplode/JalapenoExplode_6.png differ diff --git a/EXE version/main/resources/graphics/Plants/Jalapeno/JalapenoExplode/JalapenoExplode_7.png b/EXE version/main/resources/graphics/Plants/Jalapeno/JalapenoExplode/JalapenoExplode_7.png new file mode 100644 index 00000000..45701edd Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Jalapeno/JalapenoExplode/JalapenoExplode_7.png differ diff --git a/EXE version/main/resources/graphics/Plants/Peashooter/Peashooter_0.png b/EXE version/main/resources/graphics/Plants/Peashooter/Peashooter_0.png new file mode 100644 index 00000000..4e6c221f Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Peashooter/Peashooter_0.png differ diff --git a/EXE version/main/resources/graphics/Plants/Peashooter/Peashooter_1.png b/EXE version/main/resources/graphics/Plants/Peashooter/Peashooter_1.png new file mode 100644 index 00000000..3eb1e3b2 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Peashooter/Peashooter_1.png differ diff --git a/EXE version/main/resources/graphics/Plants/Peashooter/Peashooter_10.png b/EXE version/main/resources/graphics/Plants/Peashooter/Peashooter_10.png new file mode 100644 index 00000000..76d66002 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Peashooter/Peashooter_10.png differ diff --git a/EXE version/main/resources/graphics/Plants/Peashooter/Peashooter_11.png b/EXE version/main/resources/graphics/Plants/Peashooter/Peashooter_11.png new file mode 100644 index 00000000..12ed0e30 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Peashooter/Peashooter_11.png differ diff --git a/EXE version/main/resources/graphics/Plants/Peashooter/Peashooter_12.png b/EXE version/main/resources/graphics/Plants/Peashooter/Peashooter_12.png new file mode 100644 index 00000000..31ed7395 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Peashooter/Peashooter_12.png differ diff --git a/EXE version/main/resources/graphics/Plants/Peashooter/Peashooter_2.png b/EXE version/main/resources/graphics/Plants/Peashooter/Peashooter_2.png new file mode 100644 index 00000000..1e4d802a Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Peashooter/Peashooter_2.png differ diff --git a/EXE version/main/resources/graphics/Plants/Peashooter/Peashooter_3.png b/EXE version/main/resources/graphics/Plants/Peashooter/Peashooter_3.png new file mode 100644 index 00000000..ca8e12c5 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Peashooter/Peashooter_3.png differ diff --git a/EXE version/main/resources/graphics/Plants/Peashooter/Peashooter_4.png b/EXE version/main/resources/graphics/Plants/Peashooter/Peashooter_4.png new file mode 100644 index 00000000..48189b7e Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Peashooter/Peashooter_4.png differ diff --git a/EXE version/main/resources/graphics/Plants/Peashooter/Peashooter_5.png b/EXE version/main/resources/graphics/Plants/Peashooter/Peashooter_5.png new file mode 100644 index 00000000..8a8d9ca9 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Peashooter/Peashooter_5.png differ diff --git a/EXE version/main/resources/graphics/Plants/Peashooter/Peashooter_6.png b/EXE version/main/resources/graphics/Plants/Peashooter/Peashooter_6.png new file mode 100644 index 00000000..4a856517 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Peashooter/Peashooter_6.png differ diff --git a/EXE version/main/resources/graphics/Plants/Peashooter/Peashooter_7.png b/EXE version/main/resources/graphics/Plants/Peashooter/Peashooter_7.png new file mode 100644 index 00000000..d5e13bfb Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Peashooter/Peashooter_7.png differ diff --git a/EXE version/main/resources/graphics/Plants/Peashooter/Peashooter_8.png b/EXE version/main/resources/graphics/Plants/Peashooter/Peashooter_8.png new file mode 100644 index 00000000..01ca5384 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Peashooter/Peashooter_8.png differ diff --git a/EXE version/main/resources/graphics/Plants/Peashooter/Peashooter_9.png b/EXE version/main/resources/graphics/Plants/Peashooter/Peashooter_9.png new file mode 100644 index 00000000..823e5539 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Peashooter/Peashooter_9.png differ diff --git a/EXE version/main/resources/graphics/Plants/PotatoMine/PotatoMine/PotatoMine_0.png b/EXE version/main/resources/graphics/Plants/PotatoMine/PotatoMine/PotatoMine_0.png new file mode 100644 index 00000000..96efb6ee Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/PotatoMine/PotatoMine/PotatoMine_0.png differ diff --git a/EXE version/main/resources/graphics/Plants/PotatoMine/PotatoMine/PotatoMine_1.png b/EXE version/main/resources/graphics/Plants/PotatoMine/PotatoMine/PotatoMine_1.png new file mode 100644 index 00000000..b8c37ee6 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/PotatoMine/PotatoMine/PotatoMine_1.png differ diff --git a/EXE version/main/resources/graphics/Plants/PotatoMine/PotatoMine/PotatoMine_2.png b/EXE version/main/resources/graphics/Plants/PotatoMine/PotatoMine/PotatoMine_2.png new file mode 100644 index 00000000..9e741e36 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/PotatoMine/PotatoMine/PotatoMine_2.png differ diff --git a/EXE version/main/resources/graphics/Plants/PotatoMine/PotatoMine/PotatoMine_3.png b/EXE version/main/resources/graphics/Plants/PotatoMine/PotatoMine/PotatoMine_3.png new file mode 100644 index 00000000..be35b0b1 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/PotatoMine/PotatoMine/PotatoMine_3.png differ diff --git a/EXE version/main/resources/graphics/Plants/PotatoMine/PotatoMine/PotatoMine_4.png b/EXE version/main/resources/graphics/Plants/PotatoMine/PotatoMine/PotatoMine_4.png new file mode 100644 index 00000000..23e4eff2 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/PotatoMine/PotatoMine/PotatoMine_4.png differ diff --git a/EXE version/main/resources/graphics/Plants/PotatoMine/PotatoMine/PotatoMine_5.png b/EXE version/main/resources/graphics/Plants/PotatoMine/PotatoMine/PotatoMine_5.png new file mode 100644 index 00000000..b8c37ee6 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/PotatoMine/PotatoMine/PotatoMine_5.png differ diff --git a/EXE version/main/resources/graphics/Plants/PotatoMine/PotatoMine/PotatoMine_6.png b/EXE version/main/resources/graphics/Plants/PotatoMine/PotatoMine/PotatoMine_6.png new file mode 100644 index 00000000..9e741e36 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/PotatoMine/PotatoMine/PotatoMine_6.png differ diff --git a/EXE version/main/resources/graphics/Plants/PotatoMine/PotatoMine/PotatoMine_7.png b/EXE version/main/resources/graphics/Plants/PotatoMine/PotatoMine/PotatoMine_7.png new file mode 100644 index 00000000..be35b0b1 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/PotatoMine/PotatoMine/PotatoMine_7.png differ diff --git a/EXE version/main/resources/graphics/Plants/PotatoMine/PotatoMineExplode/PotatoMineExplode_0.png b/EXE version/main/resources/graphics/Plants/PotatoMine/PotatoMineExplode/PotatoMineExplode_0.png new file mode 100644 index 00000000..f12ca5ff Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/PotatoMine/PotatoMineExplode/PotatoMineExplode_0.png differ diff --git a/EXE version/main/resources/graphics/Plants/PotatoMine/PotatoMineInit/PotatoMineInit_0.png b/EXE version/main/resources/graphics/Plants/PotatoMine/PotatoMineInit/PotatoMineInit_0.png new file mode 100644 index 00000000..72c1fcaf Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/PotatoMine/PotatoMineInit/PotatoMineInit_0.png differ diff --git a/EXE version/main/resources/graphics/Plants/PuffShroom/PuffShroom/PuffShroom_0.png b/EXE version/main/resources/graphics/Plants/PuffShroom/PuffShroom/PuffShroom_0.png new file mode 100644 index 00000000..a15e8fa4 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/PuffShroom/PuffShroom/PuffShroom_0.png differ diff --git a/EXE version/main/resources/graphics/Plants/PuffShroom/PuffShroom/PuffShroom_1.png b/EXE version/main/resources/graphics/Plants/PuffShroom/PuffShroom/PuffShroom_1.png new file mode 100644 index 00000000..69b3d33f Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/PuffShroom/PuffShroom/PuffShroom_1.png differ diff --git a/EXE version/main/resources/graphics/Plants/PuffShroom/PuffShroom/PuffShroom_10.png b/EXE version/main/resources/graphics/Plants/PuffShroom/PuffShroom/PuffShroom_10.png new file mode 100644 index 00000000..4d2f35a6 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/PuffShroom/PuffShroom/PuffShroom_10.png differ diff --git a/EXE version/main/resources/graphics/Plants/PuffShroom/PuffShroom/PuffShroom_11.png b/EXE version/main/resources/graphics/Plants/PuffShroom/PuffShroom/PuffShroom_11.png new file mode 100644 index 00000000..ab68e0b8 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/PuffShroom/PuffShroom/PuffShroom_11.png differ diff --git a/EXE version/main/resources/graphics/Plants/PuffShroom/PuffShroom/PuffShroom_12.png b/EXE version/main/resources/graphics/Plants/PuffShroom/PuffShroom/PuffShroom_12.png new file mode 100644 index 00000000..aad893a7 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/PuffShroom/PuffShroom/PuffShroom_12.png differ diff --git a/EXE version/main/resources/graphics/Plants/PuffShroom/PuffShroom/PuffShroom_13.png b/EXE version/main/resources/graphics/Plants/PuffShroom/PuffShroom/PuffShroom_13.png new file mode 100644 index 00000000..bc28b53a Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/PuffShroom/PuffShroom/PuffShroom_13.png differ diff --git a/EXE version/main/resources/graphics/Plants/PuffShroom/PuffShroom/PuffShroom_2.png b/EXE version/main/resources/graphics/Plants/PuffShroom/PuffShroom/PuffShroom_2.png new file mode 100644 index 00000000..35ae8ef1 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/PuffShroom/PuffShroom/PuffShroom_2.png differ diff --git a/EXE version/main/resources/graphics/Plants/PuffShroom/PuffShroom/PuffShroom_3.png b/EXE version/main/resources/graphics/Plants/PuffShroom/PuffShroom/PuffShroom_3.png new file mode 100644 index 00000000..33a971d9 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/PuffShroom/PuffShroom/PuffShroom_3.png differ diff --git a/EXE version/main/resources/graphics/Plants/PuffShroom/PuffShroom/PuffShroom_4.png b/EXE version/main/resources/graphics/Plants/PuffShroom/PuffShroom/PuffShroom_4.png new file mode 100644 index 00000000..01f44661 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/PuffShroom/PuffShroom/PuffShroom_4.png differ diff --git a/EXE version/main/resources/graphics/Plants/PuffShroom/PuffShroom/PuffShroom_5.png b/EXE version/main/resources/graphics/Plants/PuffShroom/PuffShroom/PuffShroom_5.png new file mode 100644 index 00000000..0abcb46e Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/PuffShroom/PuffShroom/PuffShroom_5.png differ diff --git a/EXE version/main/resources/graphics/Plants/PuffShroom/PuffShroom/PuffShroom_6.png b/EXE version/main/resources/graphics/Plants/PuffShroom/PuffShroom/PuffShroom_6.png new file mode 100644 index 00000000..2651435c Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/PuffShroom/PuffShroom/PuffShroom_6.png differ diff --git a/EXE version/main/resources/graphics/Plants/PuffShroom/PuffShroom/PuffShroom_7.png b/EXE version/main/resources/graphics/Plants/PuffShroom/PuffShroom/PuffShroom_7.png new file mode 100644 index 00000000..d4151950 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/PuffShroom/PuffShroom/PuffShroom_7.png differ diff --git a/EXE version/main/resources/graphics/Plants/PuffShroom/PuffShroom/PuffShroom_8.png b/EXE version/main/resources/graphics/Plants/PuffShroom/PuffShroom/PuffShroom_8.png new file mode 100644 index 00000000..d4151950 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/PuffShroom/PuffShroom/PuffShroom_8.png differ diff --git a/EXE version/main/resources/graphics/Plants/PuffShroom/PuffShroom/PuffShroom_9.png b/EXE version/main/resources/graphics/Plants/PuffShroom/PuffShroom/PuffShroom_9.png new file mode 100644 index 00000000..512436d4 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/PuffShroom/PuffShroom/PuffShroom_9.png differ diff --git a/EXE version/main/resources/graphics/Plants/PuffShroom/PuffShroomSleep/PuffShroomSleep_0.png b/EXE version/main/resources/graphics/Plants/PuffShroom/PuffShroomSleep/PuffShroomSleep_0.png new file mode 100644 index 00000000..bfc9b03f Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/PuffShroom/PuffShroomSleep/PuffShroomSleep_0.png differ diff --git a/EXE version/main/resources/graphics/Plants/PuffShroom/PuffShroomSleep/PuffShroomSleep_1.png b/EXE version/main/resources/graphics/Plants/PuffShroom/PuffShroomSleep/PuffShroomSleep_1.png new file mode 100644 index 00000000..a71fee3f Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/PuffShroom/PuffShroomSleep/PuffShroomSleep_1.png differ diff --git a/EXE version/main/resources/graphics/Plants/PuffShroom/PuffShroomSleep/PuffShroomSleep_10.png b/EXE version/main/resources/graphics/Plants/PuffShroom/PuffShroomSleep/PuffShroomSleep_10.png new file mode 100644 index 00000000..76fd171e Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/PuffShroom/PuffShroomSleep/PuffShroomSleep_10.png differ diff --git a/EXE version/main/resources/graphics/Plants/PuffShroom/PuffShroomSleep/PuffShroomSleep_11.png b/EXE version/main/resources/graphics/Plants/PuffShroom/PuffShroomSleep/PuffShroomSleep_11.png new file mode 100644 index 00000000..38fb04ea Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/PuffShroom/PuffShroomSleep/PuffShroomSleep_11.png differ diff --git a/EXE version/main/resources/graphics/Plants/PuffShroom/PuffShroomSleep/PuffShroomSleep_12.png b/EXE version/main/resources/graphics/Plants/PuffShroom/PuffShroomSleep/PuffShroomSleep_12.png new file mode 100644 index 00000000..dfee1efe Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/PuffShroom/PuffShroomSleep/PuffShroomSleep_12.png differ diff --git a/EXE version/main/resources/graphics/Plants/PuffShroom/PuffShroomSleep/PuffShroomSleep_13.png b/EXE version/main/resources/graphics/Plants/PuffShroom/PuffShroomSleep/PuffShroomSleep_13.png new file mode 100644 index 00000000..337fe98c Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/PuffShroom/PuffShroomSleep/PuffShroomSleep_13.png differ diff --git a/EXE version/main/resources/graphics/Plants/PuffShroom/PuffShroomSleep/PuffShroomSleep_14.png b/EXE version/main/resources/graphics/Plants/PuffShroom/PuffShroomSleep/PuffShroomSleep_14.png new file mode 100644 index 00000000..bb26f294 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/PuffShroom/PuffShroomSleep/PuffShroomSleep_14.png differ diff --git a/EXE version/main/resources/graphics/Plants/PuffShroom/PuffShroomSleep/PuffShroomSleep_15.png b/EXE version/main/resources/graphics/Plants/PuffShroom/PuffShroomSleep/PuffShroomSleep_15.png new file mode 100644 index 00000000..1906e3b0 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/PuffShroom/PuffShroomSleep/PuffShroomSleep_15.png differ diff --git a/EXE version/main/resources/graphics/Plants/PuffShroom/PuffShroomSleep/PuffShroomSleep_16.png b/EXE version/main/resources/graphics/Plants/PuffShroom/PuffShroomSleep/PuffShroomSleep_16.png new file mode 100644 index 00000000..3e78a67f Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/PuffShroom/PuffShroomSleep/PuffShroomSleep_16.png differ diff --git a/EXE version/main/resources/graphics/Plants/PuffShroom/PuffShroomSleep/PuffShroomSleep_2.png b/EXE version/main/resources/graphics/Plants/PuffShroom/PuffShroomSleep/PuffShroomSleep_2.png new file mode 100644 index 00000000..282bb0f9 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/PuffShroom/PuffShroomSleep/PuffShroomSleep_2.png differ diff --git a/EXE version/main/resources/graphics/Plants/PuffShroom/PuffShroomSleep/PuffShroomSleep_3.png b/EXE version/main/resources/graphics/Plants/PuffShroom/PuffShroomSleep/PuffShroomSleep_3.png new file mode 100644 index 00000000..dd6f99eb Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/PuffShroom/PuffShroomSleep/PuffShroomSleep_3.png differ diff --git a/EXE version/main/resources/graphics/Plants/PuffShroom/PuffShroomSleep/PuffShroomSleep_4.png b/EXE version/main/resources/graphics/Plants/PuffShroom/PuffShroomSleep/PuffShroomSleep_4.png new file mode 100644 index 00000000..3ede1b27 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/PuffShroom/PuffShroomSleep/PuffShroomSleep_4.png differ diff --git a/EXE version/main/resources/graphics/Plants/PuffShroom/PuffShroomSleep/PuffShroomSleep_5.png b/EXE version/main/resources/graphics/Plants/PuffShroom/PuffShroomSleep/PuffShroomSleep_5.png new file mode 100644 index 00000000..e87584da Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/PuffShroom/PuffShroomSleep/PuffShroomSleep_5.png differ diff --git a/EXE version/main/resources/graphics/Plants/PuffShroom/PuffShroomSleep/PuffShroomSleep_6.png b/EXE version/main/resources/graphics/Plants/PuffShroom/PuffShroomSleep/PuffShroomSleep_6.png new file mode 100644 index 00000000..027d77a1 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/PuffShroom/PuffShroomSleep/PuffShroomSleep_6.png differ diff --git a/EXE version/main/resources/graphics/Plants/PuffShroom/PuffShroomSleep/PuffShroomSleep_7.png b/EXE version/main/resources/graphics/Plants/PuffShroom/PuffShroomSleep/PuffShroomSleep_7.png new file mode 100644 index 00000000..3839a88a Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/PuffShroom/PuffShroomSleep/PuffShroomSleep_7.png differ diff --git a/EXE version/main/resources/graphics/Plants/PuffShroom/PuffShroomSleep/PuffShroomSleep_8.png b/EXE version/main/resources/graphics/Plants/PuffShroom/PuffShroomSleep/PuffShroomSleep_8.png new file mode 100644 index 00000000..1e6030f3 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/PuffShroom/PuffShroomSleep/PuffShroomSleep_8.png differ diff --git a/EXE version/main/resources/graphics/Plants/PuffShroom/PuffShroomSleep/PuffShroomSleep_9.png b/EXE version/main/resources/graphics/Plants/PuffShroom/PuffShroomSleep/PuffShroomSleep_9.png new file mode 100644 index 00000000..313d792d Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/PuffShroom/PuffShroomSleep/PuffShroomSleep_9.png differ diff --git a/EXE version/main/resources/graphics/Plants/RepeaterPea/RepeaterPea_0.png b/EXE version/main/resources/graphics/Plants/RepeaterPea/RepeaterPea_0.png new file mode 100644 index 00000000..c376653f Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/RepeaterPea/RepeaterPea_0.png differ diff --git a/EXE version/main/resources/graphics/Plants/RepeaterPea/RepeaterPea_1.png b/EXE version/main/resources/graphics/Plants/RepeaterPea/RepeaterPea_1.png new file mode 100644 index 00000000..aa8b38ab Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/RepeaterPea/RepeaterPea_1.png differ diff --git a/EXE version/main/resources/graphics/Plants/RepeaterPea/RepeaterPea_10.png b/EXE version/main/resources/graphics/Plants/RepeaterPea/RepeaterPea_10.png new file mode 100644 index 00000000..749d9aa8 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/RepeaterPea/RepeaterPea_10.png differ diff --git a/EXE version/main/resources/graphics/Plants/RepeaterPea/RepeaterPea_11.png b/EXE version/main/resources/graphics/Plants/RepeaterPea/RepeaterPea_11.png new file mode 100644 index 00000000..752d75f2 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/RepeaterPea/RepeaterPea_11.png differ diff --git a/EXE version/main/resources/graphics/Plants/RepeaterPea/RepeaterPea_12.png b/EXE version/main/resources/graphics/Plants/RepeaterPea/RepeaterPea_12.png new file mode 100644 index 00000000..a89d8d82 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/RepeaterPea/RepeaterPea_12.png differ diff --git a/EXE version/main/resources/graphics/Plants/RepeaterPea/RepeaterPea_13.png b/EXE version/main/resources/graphics/Plants/RepeaterPea/RepeaterPea_13.png new file mode 100644 index 00000000..af71e756 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/RepeaterPea/RepeaterPea_13.png differ diff --git a/EXE version/main/resources/graphics/Plants/RepeaterPea/RepeaterPea_14.png b/EXE version/main/resources/graphics/Plants/RepeaterPea/RepeaterPea_14.png new file mode 100644 index 00000000..a851368f Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/RepeaterPea/RepeaterPea_14.png differ diff --git a/EXE version/main/resources/graphics/Plants/RepeaterPea/RepeaterPea_2.png b/EXE version/main/resources/graphics/Plants/RepeaterPea/RepeaterPea_2.png new file mode 100644 index 00000000..ef88c162 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/RepeaterPea/RepeaterPea_2.png differ diff --git a/EXE version/main/resources/graphics/Plants/RepeaterPea/RepeaterPea_3.png b/EXE version/main/resources/graphics/Plants/RepeaterPea/RepeaterPea_3.png new file mode 100644 index 00000000..3389119f Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/RepeaterPea/RepeaterPea_3.png differ diff --git a/EXE version/main/resources/graphics/Plants/RepeaterPea/RepeaterPea_4.png b/EXE version/main/resources/graphics/Plants/RepeaterPea/RepeaterPea_4.png new file mode 100644 index 00000000..59a82d95 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/RepeaterPea/RepeaterPea_4.png differ diff --git a/EXE version/main/resources/graphics/Plants/RepeaterPea/RepeaterPea_5.png b/EXE version/main/resources/graphics/Plants/RepeaterPea/RepeaterPea_5.png new file mode 100644 index 00000000..80dd8ae0 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/RepeaterPea/RepeaterPea_5.png differ diff --git a/EXE version/main/resources/graphics/Plants/RepeaterPea/RepeaterPea_6.png b/EXE version/main/resources/graphics/Plants/RepeaterPea/RepeaterPea_6.png new file mode 100644 index 00000000..319a72fe Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/RepeaterPea/RepeaterPea_6.png differ diff --git a/EXE version/main/resources/graphics/Plants/RepeaterPea/RepeaterPea_7.png b/EXE version/main/resources/graphics/Plants/RepeaterPea/RepeaterPea_7.png new file mode 100644 index 00000000..b2dc5417 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/RepeaterPea/RepeaterPea_7.png differ diff --git a/EXE version/main/resources/graphics/Plants/RepeaterPea/RepeaterPea_8.png b/EXE version/main/resources/graphics/Plants/RepeaterPea/RepeaterPea_8.png new file mode 100644 index 00000000..e47a9b71 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/RepeaterPea/RepeaterPea_8.png differ diff --git a/EXE version/main/resources/graphics/Plants/RepeaterPea/RepeaterPea_9.png b/EXE version/main/resources/graphics/Plants/RepeaterPea/RepeaterPea_9.png new file mode 100644 index 00000000..f247a7bb Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/RepeaterPea/RepeaterPea_9.png differ diff --git a/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroom/ScaredyShroom_0.png b/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroom/ScaredyShroom_0.png new file mode 100644 index 00000000..ba733a35 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroom/ScaredyShroom_0.png differ diff --git a/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroom/ScaredyShroom_1.png b/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroom/ScaredyShroom_1.png new file mode 100644 index 00000000..9e5d0671 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroom/ScaredyShroom_1.png differ diff --git a/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroom/ScaredyShroom_10.png b/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroom/ScaredyShroom_10.png new file mode 100644 index 00000000..291b293e Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroom/ScaredyShroom_10.png differ diff --git a/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroom/ScaredyShroom_11.png b/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroom/ScaredyShroom_11.png new file mode 100644 index 00000000..877af5a0 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroom/ScaredyShroom_11.png differ diff --git a/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroom/ScaredyShroom_12.png b/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroom/ScaredyShroom_12.png new file mode 100644 index 00000000..26ca1573 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroom/ScaredyShroom_12.png differ diff --git a/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroom/ScaredyShroom_13.png b/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroom/ScaredyShroom_13.png new file mode 100644 index 00000000..d575b3f7 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroom/ScaredyShroom_13.png differ diff --git a/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroom/ScaredyShroom_14.png b/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroom/ScaredyShroom_14.png new file mode 100644 index 00000000..fff8380c Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroom/ScaredyShroom_14.png differ diff --git a/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroom/ScaredyShroom_15.png b/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroom/ScaredyShroom_15.png new file mode 100644 index 00000000..fff8380c Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroom/ScaredyShroom_15.png differ diff --git a/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroom/ScaredyShroom_16.png b/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroom/ScaredyShroom_16.png new file mode 100644 index 00000000..dcc4818c Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroom/ScaredyShroom_16.png differ diff --git a/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroom/ScaredyShroom_2.png b/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroom/ScaredyShroom_2.png new file mode 100644 index 00000000..f6c03794 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroom/ScaredyShroom_2.png differ diff --git a/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroom/ScaredyShroom_3.png b/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroom/ScaredyShroom_3.png new file mode 100644 index 00000000..49c0462a Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroom/ScaredyShroom_3.png differ diff --git a/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroom/ScaredyShroom_4.png b/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroom/ScaredyShroom_4.png new file mode 100644 index 00000000..260ea2d9 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroom/ScaredyShroom_4.png differ diff --git a/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroom/ScaredyShroom_5.png b/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroom/ScaredyShroom_5.png new file mode 100644 index 00000000..cb956610 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroom/ScaredyShroom_5.png differ diff --git a/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroom/ScaredyShroom_6.png b/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroom/ScaredyShroom_6.png new file mode 100644 index 00000000..43648212 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroom/ScaredyShroom_6.png differ diff --git a/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroom/ScaredyShroom_7.png b/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroom/ScaredyShroom_7.png new file mode 100644 index 00000000..6844992c Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroom/ScaredyShroom_7.png differ diff --git a/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroom/ScaredyShroom_8.png b/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroom/ScaredyShroom_8.png new file mode 100644 index 00000000..026a120b Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroom/ScaredyShroom_8.png differ diff --git a/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroom/ScaredyShroom_9.png b/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroom/ScaredyShroom_9.png new file mode 100644 index 00000000..12473659 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroom/ScaredyShroom_9.png differ diff --git a/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroomCry/ScaredyShroomCry_0.png b/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroomCry/ScaredyShroomCry_0.png new file mode 100644 index 00000000..01291fb0 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroomCry/ScaredyShroomCry_0.png differ diff --git a/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroomCry/ScaredyShroomCry_1.png b/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroomCry/ScaredyShroomCry_1.png new file mode 100644 index 00000000..74905bd1 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroomCry/ScaredyShroomCry_1.png differ diff --git a/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroomCry/ScaredyShroomCry_10.png b/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroomCry/ScaredyShroomCry_10.png new file mode 100644 index 00000000..010a1ecb Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroomCry/ScaredyShroomCry_10.png differ diff --git a/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroomCry/ScaredyShroomCry_2.png b/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroomCry/ScaredyShroomCry_2.png new file mode 100644 index 00000000..6c95fa76 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroomCry/ScaredyShroomCry_2.png differ diff --git a/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroomCry/ScaredyShroomCry_3.png b/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroomCry/ScaredyShroomCry_3.png new file mode 100644 index 00000000..5056db38 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroomCry/ScaredyShroomCry_3.png differ diff --git a/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroomCry/ScaredyShroomCry_4.png b/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroomCry/ScaredyShroomCry_4.png new file mode 100644 index 00000000..fe0a875f Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroomCry/ScaredyShroomCry_4.png differ diff --git a/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroomCry/ScaredyShroomCry_5.png b/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroomCry/ScaredyShroomCry_5.png new file mode 100644 index 00000000..7038061a Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroomCry/ScaredyShroomCry_5.png differ diff --git a/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroomCry/ScaredyShroomCry_6.png b/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroomCry/ScaredyShroomCry_6.png new file mode 100644 index 00000000..9e82862b Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroomCry/ScaredyShroomCry_6.png differ diff --git a/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroomCry/ScaredyShroomCry_7.png b/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroomCry/ScaredyShroomCry_7.png new file mode 100644 index 00000000..7d48bac5 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroomCry/ScaredyShroomCry_7.png differ diff --git a/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroomCry/ScaredyShroomCry_8.png b/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroomCry/ScaredyShroomCry_8.png new file mode 100644 index 00000000..90927941 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroomCry/ScaredyShroomCry_8.png differ diff --git a/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroomCry/ScaredyShroomCry_9.png b/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroomCry/ScaredyShroomCry_9.png new file mode 100644 index 00000000..559ed0b0 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroomCry/ScaredyShroomCry_9.png differ diff --git a/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroomSleep/ScaredyShroomSleep_0.png b/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroomSleep/ScaredyShroomSleep_0.png new file mode 100644 index 00000000..6e398909 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroomSleep/ScaredyShroomSleep_0.png differ diff --git a/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroomSleep/ScaredyShroomSleep_1.png b/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroomSleep/ScaredyShroomSleep_1.png new file mode 100644 index 00000000..ba8158c7 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroomSleep/ScaredyShroomSleep_1.png differ diff --git a/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroomSleep/ScaredyShroomSleep_10.png b/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroomSleep/ScaredyShroomSleep_10.png new file mode 100644 index 00000000..17b5e26a Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroomSleep/ScaredyShroomSleep_10.png differ diff --git a/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroomSleep/ScaredyShroomSleep_11.png b/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroomSleep/ScaredyShroomSleep_11.png new file mode 100644 index 00000000..7a0d8a7d Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroomSleep/ScaredyShroomSleep_11.png differ diff --git a/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroomSleep/ScaredyShroomSleep_12.png b/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroomSleep/ScaredyShroomSleep_12.png new file mode 100644 index 00000000..4a22fa48 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroomSleep/ScaredyShroomSleep_12.png differ diff --git a/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroomSleep/ScaredyShroomSleep_13.png b/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroomSleep/ScaredyShroomSleep_13.png new file mode 100644 index 00000000..0dfe78cd Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroomSleep/ScaredyShroomSleep_13.png differ diff --git a/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroomSleep/ScaredyShroomSleep_14.png b/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroomSleep/ScaredyShroomSleep_14.png new file mode 100644 index 00000000..0dfe78cd Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroomSleep/ScaredyShroomSleep_14.png differ diff --git a/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroomSleep/ScaredyShroomSleep_15.png b/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroomSleep/ScaredyShroomSleep_15.png new file mode 100644 index 00000000..a5fdf456 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroomSleep/ScaredyShroomSleep_15.png differ diff --git a/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroomSleep/ScaredyShroomSleep_2.png b/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroomSleep/ScaredyShroomSleep_2.png new file mode 100644 index 00000000..3a58f4de Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroomSleep/ScaredyShroomSleep_2.png differ diff --git a/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroomSleep/ScaredyShroomSleep_3.png b/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroomSleep/ScaredyShroomSleep_3.png new file mode 100644 index 00000000..b64c287c Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroomSleep/ScaredyShroomSleep_3.png differ diff --git a/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroomSleep/ScaredyShroomSleep_4.png b/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroomSleep/ScaredyShroomSleep_4.png new file mode 100644 index 00000000..a694ff1c Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroomSleep/ScaredyShroomSleep_4.png differ diff --git a/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroomSleep/ScaredyShroomSleep_5.png b/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroomSleep/ScaredyShroomSleep_5.png new file mode 100644 index 00000000..23faef2d Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroomSleep/ScaredyShroomSleep_5.png differ diff --git a/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroomSleep/ScaredyShroomSleep_6.png b/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroomSleep/ScaredyShroomSleep_6.png new file mode 100644 index 00000000..6d07b15c Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroomSleep/ScaredyShroomSleep_6.png differ diff --git a/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroomSleep/ScaredyShroomSleep_7.png b/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroomSleep/ScaredyShroomSleep_7.png new file mode 100644 index 00000000..ed7680ba Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroomSleep/ScaredyShroomSleep_7.png differ diff --git a/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroomSleep/ScaredyShroomSleep_8.png b/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroomSleep/ScaredyShroomSleep_8.png new file mode 100644 index 00000000..88a3aac1 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroomSleep/ScaredyShroomSleep_8.png differ diff --git a/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroomSleep/ScaredyShroomSleep_9.png b/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroomSleep/ScaredyShroomSleep_9.png new file mode 100644 index 00000000..17b5e26a Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/ScaredyShroom/ScaredyShroomSleep/ScaredyShroomSleep_9.png differ diff --git a/EXE version/main/resources/graphics/Plants/SnowPea/SnowPea_0.png b/EXE version/main/resources/graphics/Plants/SnowPea/SnowPea_0.png new file mode 100644 index 00000000..883e3b8b Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/SnowPea/SnowPea_0.png differ diff --git a/EXE version/main/resources/graphics/Plants/SnowPea/SnowPea_1.png b/EXE version/main/resources/graphics/Plants/SnowPea/SnowPea_1.png new file mode 100644 index 00000000..528a5dee Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/SnowPea/SnowPea_1.png differ diff --git a/EXE version/main/resources/graphics/Plants/SnowPea/SnowPea_10.png b/EXE version/main/resources/graphics/Plants/SnowPea/SnowPea_10.png new file mode 100644 index 00000000..f5f3f804 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/SnowPea/SnowPea_10.png differ diff --git a/EXE version/main/resources/graphics/Plants/SnowPea/SnowPea_11.png b/EXE version/main/resources/graphics/Plants/SnowPea/SnowPea_11.png new file mode 100644 index 00000000..c3afa8a3 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/SnowPea/SnowPea_11.png differ diff --git a/EXE version/main/resources/graphics/Plants/SnowPea/SnowPea_12.png b/EXE version/main/resources/graphics/Plants/SnowPea/SnowPea_12.png new file mode 100644 index 00000000..8683329f Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/SnowPea/SnowPea_12.png differ diff --git a/EXE version/main/resources/graphics/Plants/SnowPea/SnowPea_13.png b/EXE version/main/resources/graphics/Plants/SnowPea/SnowPea_13.png new file mode 100644 index 00000000..89b582c5 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/SnowPea/SnowPea_13.png differ diff --git a/EXE version/main/resources/graphics/Plants/SnowPea/SnowPea_14.png b/EXE version/main/resources/graphics/Plants/SnowPea/SnowPea_14.png new file mode 100644 index 00000000..feec31f6 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/SnowPea/SnowPea_14.png differ diff --git a/EXE version/main/resources/graphics/Plants/SnowPea/SnowPea_2.png b/EXE version/main/resources/graphics/Plants/SnowPea/SnowPea_2.png new file mode 100644 index 00000000..09ad5050 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/SnowPea/SnowPea_2.png differ diff --git a/EXE version/main/resources/graphics/Plants/SnowPea/SnowPea_3.png b/EXE version/main/resources/graphics/Plants/SnowPea/SnowPea_3.png new file mode 100644 index 00000000..35e70cd9 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/SnowPea/SnowPea_3.png differ diff --git a/EXE version/main/resources/graphics/Plants/SnowPea/SnowPea_4.png b/EXE version/main/resources/graphics/Plants/SnowPea/SnowPea_4.png new file mode 100644 index 00000000..e3dc09bd Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/SnowPea/SnowPea_4.png differ diff --git a/EXE version/main/resources/graphics/Plants/SnowPea/SnowPea_5.png b/EXE version/main/resources/graphics/Plants/SnowPea/SnowPea_5.png new file mode 100644 index 00000000..c527948b Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/SnowPea/SnowPea_5.png differ diff --git a/EXE version/main/resources/graphics/Plants/SnowPea/SnowPea_6.png b/EXE version/main/resources/graphics/Plants/SnowPea/SnowPea_6.png new file mode 100644 index 00000000..c527948b Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/SnowPea/SnowPea_6.png differ diff --git a/EXE version/main/resources/graphics/Plants/SnowPea/SnowPea_7.png b/EXE version/main/resources/graphics/Plants/SnowPea/SnowPea_7.png new file mode 100644 index 00000000..a814f7f6 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/SnowPea/SnowPea_7.png differ diff --git a/EXE version/main/resources/graphics/Plants/SnowPea/SnowPea_8.png b/EXE version/main/resources/graphics/Plants/SnowPea/SnowPea_8.png new file mode 100644 index 00000000..37577dd5 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/SnowPea/SnowPea_8.png differ diff --git a/EXE version/main/resources/graphics/Plants/SnowPea/SnowPea_9.png b/EXE version/main/resources/graphics/Plants/SnowPea/SnowPea_9.png new file mode 100644 index 00000000..a38b89fd Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/SnowPea/SnowPea_9.png differ diff --git a/EXE version/main/resources/graphics/Plants/Spikeweed/Spikeweed/Spikeweed_0.png b/EXE version/main/resources/graphics/Plants/Spikeweed/Spikeweed/Spikeweed_0.png new file mode 100644 index 00000000..5dcf98b9 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Spikeweed/Spikeweed/Spikeweed_0.png differ diff --git a/EXE version/main/resources/graphics/Plants/Spikeweed/Spikeweed/Spikeweed_1.png b/EXE version/main/resources/graphics/Plants/Spikeweed/Spikeweed/Spikeweed_1.png new file mode 100644 index 00000000..5dcf98b9 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Spikeweed/Spikeweed/Spikeweed_1.png differ diff --git a/EXE version/main/resources/graphics/Plants/Spikeweed/Spikeweed/Spikeweed_10.png b/EXE version/main/resources/graphics/Plants/Spikeweed/Spikeweed/Spikeweed_10.png new file mode 100644 index 00000000..6b4e4048 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Spikeweed/Spikeweed/Spikeweed_10.png differ diff --git a/EXE version/main/resources/graphics/Plants/Spikeweed/Spikeweed/Spikeweed_11.png b/EXE version/main/resources/graphics/Plants/Spikeweed/Spikeweed/Spikeweed_11.png new file mode 100644 index 00000000..4a0d0a2d Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Spikeweed/Spikeweed/Spikeweed_11.png differ diff --git a/EXE version/main/resources/graphics/Plants/Spikeweed/Spikeweed/Spikeweed_12.png b/EXE version/main/resources/graphics/Plants/Spikeweed/Spikeweed/Spikeweed_12.png new file mode 100644 index 00000000..68af8f12 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Spikeweed/Spikeweed/Spikeweed_12.png differ diff --git a/EXE version/main/resources/graphics/Plants/Spikeweed/Spikeweed/Spikeweed_13.png b/EXE version/main/resources/graphics/Plants/Spikeweed/Spikeweed/Spikeweed_13.png new file mode 100644 index 00000000..dcd5057d Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Spikeweed/Spikeweed/Spikeweed_13.png differ diff --git a/EXE version/main/resources/graphics/Plants/Spikeweed/Spikeweed/Spikeweed_14.png b/EXE version/main/resources/graphics/Plants/Spikeweed/Spikeweed/Spikeweed_14.png new file mode 100644 index 00000000..faa36dd1 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Spikeweed/Spikeweed/Spikeweed_14.png differ diff --git a/EXE version/main/resources/graphics/Plants/Spikeweed/Spikeweed/Spikeweed_15.png b/EXE version/main/resources/graphics/Plants/Spikeweed/Spikeweed/Spikeweed_15.png new file mode 100644 index 00000000..09baa217 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Spikeweed/Spikeweed/Spikeweed_15.png differ diff --git a/EXE version/main/resources/graphics/Plants/Spikeweed/Spikeweed/Spikeweed_16.png b/EXE version/main/resources/graphics/Plants/Spikeweed/Spikeweed/Spikeweed_16.png new file mode 100644 index 00000000..abb3c8cd Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Spikeweed/Spikeweed/Spikeweed_16.png differ diff --git a/EXE version/main/resources/graphics/Plants/Spikeweed/Spikeweed/Spikeweed_17.png b/EXE version/main/resources/graphics/Plants/Spikeweed/Spikeweed/Spikeweed_17.png new file mode 100644 index 00000000..bc2817ae Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Spikeweed/Spikeweed/Spikeweed_17.png differ diff --git a/EXE version/main/resources/graphics/Plants/Spikeweed/Spikeweed/Spikeweed_18.png b/EXE version/main/resources/graphics/Plants/Spikeweed/Spikeweed/Spikeweed_18.png new file mode 100644 index 00000000..20e391d2 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Spikeweed/Spikeweed/Spikeweed_18.png differ diff --git a/EXE version/main/resources/graphics/Plants/Spikeweed/Spikeweed/Spikeweed_2.png b/EXE version/main/resources/graphics/Plants/Spikeweed/Spikeweed/Spikeweed_2.png new file mode 100644 index 00000000..a2fa02e8 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Spikeweed/Spikeweed/Spikeweed_2.png differ diff --git a/EXE version/main/resources/graphics/Plants/Spikeweed/Spikeweed/Spikeweed_3.png b/EXE version/main/resources/graphics/Plants/Spikeweed/Spikeweed/Spikeweed_3.png new file mode 100644 index 00000000..a2fa02e8 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Spikeweed/Spikeweed/Spikeweed_3.png differ diff --git a/EXE version/main/resources/graphics/Plants/Spikeweed/Spikeweed/Spikeweed_4.png b/EXE version/main/resources/graphics/Plants/Spikeweed/Spikeweed/Spikeweed_4.png new file mode 100644 index 00000000..afbbf65b Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Spikeweed/Spikeweed/Spikeweed_4.png differ diff --git a/EXE version/main/resources/graphics/Plants/Spikeweed/Spikeweed/Spikeweed_5.png b/EXE version/main/resources/graphics/Plants/Spikeweed/Spikeweed/Spikeweed_5.png new file mode 100644 index 00000000..88e5770e Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Spikeweed/Spikeweed/Spikeweed_5.png differ diff --git a/EXE version/main/resources/graphics/Plants/Spikeweed/Spikeweed/Spikeweed_6.png b/EXE version/main/resources/graphics/Plants/Spikeweed/Spikeweed/Spikeweed_6.png new file mode 100644 index 00000000..eed8160e Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Spikeweed/Spikeweed/Spikeweed_6.png differ diff --git a/EXE version/main/resources/graphics/Plants/Spikeweed/Spikeweed/Spikeweed_7.png b/EXE version/main/resources/graphics/Plants/Spikeweed/Spikeweed/Spikeweed_7.png new file mode 100644 index 00000000..acd491f3 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Spikeweed/Spikeweed/Spikeweed_7.png differ diff --git a/EXE version/main/resources/graphics/Plants/Spikeweed/Spikeweed/Spikeweed_8.png b/EXE version/main/resources/graphics/Plants/Spikeweed/Spikeweed/Spikeweed_8.png new file mode 100644 index 00000000..acd491f3 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Spikeweed/Spikeweed/Spikeweed_8.png differ diff --git a/EXE version/main/resources/graphics/Plants/Spikeweed/Spikeweed/Spikeweed_9.png b/EXE version/main/resources/graphics/Plants/Spikeweed/Spikeweed/Spikeweed_9.png new file mode 100644 index 00000000..6b4e4048 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Spikeweed/Spikeweed/Spikeweed_9.png differ diff --git a/EXE version/main/resources/graphics/Plants/Squash/Squash/Squash_0.png b/EXE version/main/resources/graphics/Plants/Squash/Squash/Squash_0.png new file mode 100644 index 00000000..b6284ae1 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Squash/Squash/Squash_0.png differ diff --git a/EXE version/main/resources/graphics/Plants/Squash/Squash/Squash_1.png b/EXE version/main/resources/graphics/Plants/Squash/Squash/Squash_1.png new file mode 100644 index 00000000..c5346a1a Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Squash/Squash/Squash_1.png differ diff --git a/EXE version/main/resources/graphics/Plants/Squash/Squash/Squash_10.png b/EXE version/main/resources/graphics/Plants/Squash/Squash/Squash_10.png new file mode 100644 index 00000000..d3881dc8 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Squash/Squash/Squash_10.png differ diff --git a/EXE version/main/resources/graphics/Plants/Squash/Squash/Squash_11.png b/EXE version/main/resources/graphics/Plants/Squash/Squash/Squash_11.png new file mode 100644 index 00000000..e6d91038 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Squash/Squash/Squash_11.png differ diff --git a/EXE version/main/resources/graphics/Plants/Squash/Squash/Squash_12.png b/EXE version/main/resources/graphics/Plants/Squash/Squash/Squash_12.png new file mode 100644 index 00000000..854f27f6 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Squash/Squash/Squash_12.png differ diff --git a/EXE version/main/resources/graphics/Plants/Squash/Squash/Squash_13.png b/EXE version/main/resources/graphics/Plants/Squash/Squash/Squash_13.png new file mode 100644 index 00000000..3abfc6c8 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Squash/Squash/Squash_13.png differ diff --git a/EXE version/main/resources/graphics/Plants/Squash/Squash/Squash_14.png b/EXE version/main/resources/graphics/Plants/Squash/Squash/Squash_14.png new file mode 100644 index 00000000..ad3e95e2 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Squash/Squash/Squash_14.png differ diff --git a/EXE version/main/resources/graphics/Plants/Squash/Squash/Squash_15.png b/EXE version/main/resources/graphics/Plants/Squash/Squash/Squash_15.png new file mode 100644 index 00000000..81327a63 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Squash/Squash/Squash_15.png differ diff --git a/EXE version/main/resources/graphics/Plants/Squash/Squash/Squash_16.png b/EXE version/main/resources/graphics/Plants/Squash/Squash/Squash_16.png new file mode 100644 index 00000000..85c87e0c Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Squash/Squash/Squash_16.png differ diff --git a/EXE version/main/resources/graphics/Plants/Squash/Squash/Squash_2.png b/EXE version/main/resources/graphics/Plants/Squash/Squash/Squash_2.png new file mode 100644 index 00000000..99328cd1 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Squash/Squash/Squash_2.png differ diff --git a/EXE version/main/resources/graphics/Plants/Squash/Squash/Squash_3.png b/EXE version/main/resources/graphics/Plants/Squash/Squash/Squash_3.png new file mode 100644 index 00000000..f797bc92 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Squash/Squash/Squash_3.png differ diff --git a/EXE version/main/resources/graphics/Plants/Squash/Squash/Squash_4.png b/EXE version/main/resources/graphics/Plants/Squash/Squash/Squash_4.png new file mode 100644 index 00000000..d2975c29 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Squash/Squash/Squash_4.png differ diff --git a/EXE version/main/resources/graphics/Plants/Squash/Squash/Squash_5.png b/EXE version/main/resources/graphics/Plants/Squash/Squash/Squash_5.png new file mode 100644 index 00000000..6ffc0c34 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Squash/Squash/Squash_5.png differ diff --git a/EXE version/main/resources/graphics/Plants/Squash/Squash/Squash_6.png b/EXE version/main/resources/graphics/Plants/Squash/Squash/Squash_6.png new file mode 100644 index 00000000..818cc5ff Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Squash/Squash/Squash_6.png differ diff --git a/EXE version/main/resources/graphics/Plants/Squash/Squash/Squash_7.png b/EXE version/main/resources/graphics/Plants/Squash/Squash/Squash_7.png new file mode 100644 index 00000000..3a198037 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Squash/Squash/Squash_7.png differ diff --git a/EXE version/main/resources/graphics/Plants/Squash/Squash/Squash_8.png b/EXE version/main/resources/graphics/Plants/Squash/Squash/Squash_8.png new file mode 100644 index 00000000..8a0291fc Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Squash/Squash/Squash_8.png differ diff --git a/EXE version/main/resources/graphics/Plants/Squash/Squash/Squash_9.png b/EXE version/main/resources/graphics/Plants/Squash/Squash/Squash_9.png new file mode 100644 index 00000000..395cb965 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Squash/Squash/Squash_9.png differ diff --git a/EXE version/main/resources/graphics/Plants/Squash/SquashAim/SquashAim_0.png b/EXE version/main/resources/graphics/Plants/Squash/SquashAim/SquashAim_0.png new file mode 100644 index 00000000..bf052083 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Squash/SquashAim/SquashAim_0.png differ diff --git a/EXE version/main/resources/graphics/Plants/Squash/SquashAttack/SquashAttack_0.png b/EXE version/main/resources/graphics/Plants/Squash/SquashAttack/SquashAttack_0.png new file mode 100644 index 00000000..6997d2a5 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Squash/SquashAttack/SquashAttack_0.png differ diff --git a/EXE version/main/resources/graphics/Plants/Squash/SquashAttack/SquashAttack_1.png b/EXE version/main/resources/graphics/Plants/Squash/SquashAttack/SquashAttack_1.png new file mode 100644 index 00000000..31fe4c7e Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Squash/SquashAttack/SquashAttack_1.png differ diff --git a/EXE version/main/resources/graphics/Plants/Squash/SquashAttack/SquashAttack_2.png b/EXE version/main/resources/graphics/Plants/Squash/SquashAttack/SquashAttack_2.png new file mode 100644 index 00000000..02bef9d4 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Squash/SquashAttack/SquashAttack_2.png differ diff --git a/EXE version/main/resources/graphics/Plants/Squash/SquashAttack/SquashAttack_3.png b/EXE version/main/resources/graphics/Plants/Squash/SquashAttack/SquashAttack_3.png new file mode 100644 index 00000000..41a93d82 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Squash/SquashAttack/SquashAttack_3.png differ diff --git a/EXE version/main/resources/graphics/Plants/Sun/Sun_0.png b/EXE version/main/resources/graphics/Plants/Sun/Sun_0.png new file mode 100644 index 00000000..00fe109f Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Sun/Sun_0.png differ diff --git a/EXE version/main/resources/graphics/Plants/Sun/Sun_1.png b/EXE version/main/resources/graphics/Plants/Sun/Sun_1.png new file mode 100644 index 00000000..0660f29d Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Sun/Sun_1.png differ diff --git a/EXE version/main/resources/graphics/Plants/Sun/Sun_10.png b/EXE version/main/resources/graphics/Plants/Sun/Sun_10.png new file mode 100644 index 00000000..3a8dea1f Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Sun/Sun_10.png differ diff --git a/EXE version/main/resources/graphics/Plants/Sun/Sun_11.png b/EXE version/main/resources/graphics/Plants/Sun/Sun_11.png new file mode 100644 index 00000000..0ab3e8c9 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Sun/Sun_11.png differ diff --git a/EXE version/main/resources/graphics/Plants/Sun/Sun_12.png b/EXE version/main/resources/graphics/Plants/Sun/Sun_12.png new file mode 100644 index 00000000..d2715827 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Sun/Sun_12.png differ diff --git a/EXE version/main/resources/graphics/Plants/Sun/Sun_13.png b/EXE version/main/resources/graphics/Plants/Sun/Sun_13.png new file mode 100644 index 00000000..6091215d Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Sun/Sun_13.png differ diff --git a/EXE version/main/resources/graphics/Plants/Sun/Sun_14.png b/EXE version/main/resources/graphics/Plants/Sun/Sun_14.png new file mode 100644 index 00000000..ff024700 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Sun/Sun_14.png differ diff --git a/EXE version/main/resources/graphics/Plants/Sun/Sun_15.png b/EXE version/main/resources/graphics/Plants/Sun/Sun_15.png new file mode 100644 index 00000000..33cae343 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Sun/Sun_15.png differ diff --git a/EXE version/main/resources/graphics/Plants/Sun/Sun_16.png b/EXE version/main/resources/graphics/Plants/Sun/Sun_16.png new file mode 100644 index 00000000..b4873d52 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Sun/Sun_16.png differ diff --git a/EXE version/main/resources/graphics/Plants/Sun/Sun_17.png b/EXE version/main/resources/graphics/Plants/Sun/Sun_17.png new file mode 100644 index 00000000..b4873d52 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Sun/Sun_17.png differ diff --git a/EXE version/main/resources/graphics/Plants/Sun/Sun_18.png b/EXE version/main/resources/graphics/Plants/Sun/Sun_18.png new file mode 100644 index 00000000..aa685c2f Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Sun/Sun_18.png differ diff --git a/EXE version/main/resources/graphics/Plants/Sun/Sun_19.png b/EXE version/main/resources/graphics/Plants/Sun/Sun_19.png new file mode 100644 index 00000000..a1109380 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Sun/Sun_19.png differ diff --git a/EXE version/main/resources/graphics/Plants/Sun/Sun_2.png b/EXE version/main/resources/graphics/Plants/Sun/Sun_2.png new file mode 100644 index 00000000..ec65b137 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Sun/Sun_2.png differ diff --git a/EXE version/main/resources/graphics/Plants/Sun/Sun_20.png b/EXE version/main/resources/graphics/Plants/Sun/Sun_20.png new file mode 100644 index 00000000..2a2e6c56 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Sun/Sun_20.png differ diff --git a/EXE version/main/resources/graphics/Plants/Sun/Sun_21.png b/EXE version/main/resources/graphics/Plants/Sun/Sun_21.png new file mode 100644 index 00000000..3df20e1c Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Sun/Sun_21.png differ diff --git a/EXE version/main/resources/graphics/Plants/Sun/Sun_3.png b/EXE version/main/resources/graphics/Plants/Sun/Sun_3.png new file mode 100644 index 00000000..8dfe6edc Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Sun/Sun_3.png differ diff --git a/EXE version/main/resources/graphics/Plants/Sun/Sun_4.png b/EXE version/main/resources/graphics/Plants/Sun/Sun_4.png new file mode 100644 index 00000000..7642083a Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Sun/Sun_4.png differ diff --git a/EXE version/main/resources/graphics/Plants/Sun/Sun_5.png b/EXE version/main/resources/graphics/Plants/Sun/Sun_5.png new file mode 100644 index 00000000..18896b79 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Sun/Sun_5.png differ diff --git a/EXE version/main/resources/graphics/Plants/Sun/Sun_6.png b/EXE version/main/resources/graphics/Plants/Sun/Sun_6.png new file mode 100644 index 00000000..2a903269 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Sun/Sun_6.png differ diff --git a/EXE version/main/resources/graphics/Plants/Sun/Sun_7.png b/EXE version/main/resources/graphics/Plants/Sun/Sun_7.png new file mode 100644 index 00000000..8131491a Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Sun/Sun_7.png differ diff --git a/EXE version/main/resources/graphics/Plants/Sun/Sun_8.png b/EXE version/main/resources/graphics/Plants/Sun/Sun_8.png new file mode 100644 index 00000000..c8106799 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Sun/Sun_8.png differ diff --git a/EXE version/main/resources/graphics/Plants/Sun/Sun_9.png b/EXE version/main/resources/graphics/Plants/Sun/Sun_9.png new file mode 100644 index 00000000..893f511f Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Sun/Sun_9.png differ diff --git a/EXE version/main/resources/graphics/Plants/SunFlower/SunFlower_0.png b/EXE version/main/resources/graphics/Plants/SunFlower/SunFlower_0.png new file mode 100644 index 00000000..b3637f22 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/SunFlower/SunFlower_0.png differ diff --git a/EXE version/main/resources/graphics/Plants/SunFlower/SunFlower_1.png b/EXE version/main/resources/graphics/Plants/SunFlower/SunFlower_1.png new file mode 100644 index 00000000..bbeddaba Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/SunFlower/SunFlower_1.png differ diff --git a/EXE version/main/resources/graphics/Plants/SunFlower/SunFlower_10.png b/EXE version/main/resources/graphics/Plants/SunFlower/SunFlower_10.png new file mode 100644 index 00000000..740e116b Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/SunFlower/SunFlower_10.png differ diff --git a/EXE version/main/resources/graphics/Plants/SunFlower/SunFlower_11.png b/EXE version/main/resources/graphics/Plants/SunFlower/SunFlower_11.png new file mode 100644 index 00000000..4cba8a98 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/SunFlower/SunFlower_11.png differ diff --git a/EXE version/main/resources/graphics/Plants/SunFlower/SunFlower_12.png b/EXE version/main/resources/graphics/Plants/SunFlower/SunFlower_12.png new file mode 100644 index 00000000..27097954 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/SunFlower/SunFlower_12.png differ diff --git a/EXE version/main/resources/graphics/Plants/SunFlower/SunFlower_13.png b/EXE version/main/resources/graphics/Plants/SunFlower/SunFlower_13.png new file mode 100644 index 00000000..0d088166 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/SunFlower/SunFlower_13.png differ diff --git a/EXE version/main/resources/graphics/Plants/SunFlower/SunFlower_14.png b/EXE version/main/resources/graphics/Plants/SunFlower/SunFlower_14.png new file mode 100644 index 00000000..ff4c48c4 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/SunFlower/SunFlower_14.png differ diff --git a/EXE version/main/resources/graphics/Plants/SunFlower/SunFlower_15.png b/EXE version/main/resources/graphics/Plants/SunFlower/SunFlower_15.png new file mode 100644 index 00000000..c8d541de Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/SunFlower/SunFlower_15.png differ diff --git a/EXE version/main/resources/graphics/Plants/SunFlower/SunFlower_16.png b/EXE version/main/resources/graphics/Plants/SunFlower/SunFlower_16.png new file mode 100644 index 00000000..188e2a33 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/SunFlower/SunFlower_16.png differ diff --git a/EXE version/main/resources/graphics/Plants/SunFlower/SunFlower_17.png b/EXE version/main/resources/graphics/Plants/SunFlower/SunFlower_17.png new file mode 100644 index 00000000..7dca8d9c Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/SunFlower/SunFlower_17.png differ diff --git a/EXE version/main/resources/graphics/Plants/SunFlower/SunFlower_2.png b/EXE version/main/resources/graphics/Plants/SunFlower/SunFlower_2.png new file mode 100644 index 00000000..16bae15a Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/SunFlower/SunFlower_2.png differ diff --git a/EXE version/main/resources/graphics/Plants/SunFlower/SunFlower_3.png b/EXE version/main/resources/graphics/Plants/SunFlower/SunFlower_3.png new file mode 100644 index 00000000..59a5c497 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/SunFlower/SunFlower_3.png differ diff --git a/EXE version/main/resources/graphics/Plants/SunFlower/SunFlower_4.png b/EXE version/main/resources/graphics/Plants/SunFlower/SunFlower_4.png new file mode 100644 index 00000000..ba1c554d Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/SunFlower/SunFlower_4.png differ diff --git a/EXE version/main/resources/graphics/Plants/SunFlower/SunFlower_5.png b/EXE version/main/resources/graphics/Plants/SunFlower/SunFlower_5.png new file mode 100644 index 00000000..edf68cb7 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/SunFlower/SunFlower_5.png differ diff --git a/EXE version/main/resources/graphics/Plants/SunFlower/SunFlower_6.png b/EXE version/main/resources/graphics/Plants/SunFlower/SunFlower_6.png new file mode 100644 index 00000000..945fc810 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/SunFlower/SunFlower_6.png differ diff --git a/EXE version/main/resources/graphics/Plants/SunFlower/SunFlower_7.png b/EXE version/main/resources/graphics/Plants/SunFlower/SunFlower_7.png new file mode 100644 index 00000000..73c3c104 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/SunFlower/SunFlower_7.png differ diff --git a/EXE version/main/resources/graphics/Plants/SunFlower/SunFlower_8.png b/EXE version/main/resources/graphics/Plants/SunFlower/SunFlower_8.png new file mode 100644 index 00000000..7e24f978 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/SunFlower/SunFlower_8.png differ diff --git a/EXE version/main/resources/graphics/Plants/SunFlower/SunFlower_9.png b/EXE version/main/resources/graphics/Plants/SunFlower/SunFlower_9.png new file mode 100644 index 00000000..afec52ec Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/SunFlower/SunFlower_9.png differ diff --git a/EXE version/main/resources/graphics/Plants/SunShroom/SunShroom/SunShroom_0.png b/EXE version/main/resources/graphics/Plants/SunShroom/SunShroom/SunShroom_0.png new file mode 100644 index 00000000..fe25d948 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/SunShroom/SunShroom/SunShroom_0.png differ diff --git a/EXE version/main/resources/graphics/Plants/SunShroom/SunShroom/SunShroom_1.png b/EXE version/main/resources/graphics/Plants/SunShroom/SunShroom/SunShroom_1.png new file mode 100644 index 00000000..28fb9040 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/SunShroom/SunShroom/SunShroom_1.png differ diff --git a/EXE version/main/resources/graphics/Plants/SunShroom/SunShroom/SunShroom_2.png b/EXE version/main/resources/graphics/Plants/SunShroom/SunShroom/SunShroom_2.png new file mode 100644 index 00000000..f6fbc61c Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/SunShroom/SunShroom/SunShroom_2.png differ diff --git a/EXE version/main/resources/graphics/Plants/SunShroom/SunShroom/SunShroom_3.png b/EXE version/main/resources/graphics/Plants/SunShroom/SunShroom/SunShroom_3.png new file mode 100644 index 00000000..0245c040 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/SunShroom/SunShroom/SunShroom_3.png differ diff --git a/EXE version/main/resources/graphics/Plants/SunShroom/SunShroom/SunShroom_4.png b/EXE version/main/resources/graphics/Plants/SunShroom/SunShroom/SunShroom_4.png new file mode 100644 index 00000000..28f49f73 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/SunShroom/SunShroom/SunShroom_4.png differ diff --git a/EXE version/main/resources/graphics/Plants/SunShroom/SunShroom/SunShroom_5.png b/EXE version/main/resources/graphics/Plants/SunShroom/SunShroom/SunShroom_5.png new file mode 100644 index 00000000..4eaca99a Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/SunShroom/SunShroom/SunShroom_5.png differ diff --git a/EXE version/main/resources/graphics/Plants/SunShroom/SunShroom/SunShroom_6.png b/EXE version/main/resources/graphics/Plants/SunShroom/SunShroom/SunShroom_6.png new file mode 100644 index 00000000..818348bf Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/SunShroom/SunShroom/SunShroom_6.png differ diff --git a/EXE version/main/resources/graphics/Plants/SunShroom/SunShroom/SunShroom_7.png b/EXE version/main/resources/graphics/Plants/SunShroom/SunShroom/SunShroom_7.png new file mode 100644 index 00000000..871bc626 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/SunShroom/SunShroom/SunShroom_7.png differ diff --git a/EXE version/main/resources/graphics/Plants/SunShroom/SunShroom/SunShroom_8.png b/EXE version/main/resources/graphics/Plants/SunShroom/SunShroom/SunShroom_8.png new file mode 100644 index 00000000..dfcea90e Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/SunShroom/SunShroom/SunShroom_8.png differ diff --git a/EXE version/main/resources/graphics/Plants/SunShroom/SunShroom/SunShroom_9.png b/EXE version/main/resources/graphics/Plants/SunShroom/SunShroom/SunShroom_9.png new file mode 100644 index 00000000..be9ba3fa Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/SunShroom/SunShroom/SunShroom_9.png differ diff --git a/EXE version/main/resources/graphics/Plants/SunShroom/SunShroomBig/SunShroomBig_0.png b/EXE version/main/resources/graphics/Plants/SunShroom/SunShroomBig/SunShroomBig_0.png new file mode 100644 index 00000000..77cd7375 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/SunShroom/SunShroomBig/SunShroomBig_0.png differ diff --git a/EXE version/main/resources/graphics/Plants/SunShroom/SunShroomBig/SunShroomBig_1.png b/EXE version/main/resources/graphics/Plants/SunShroom/SunShroomBig/SunShroomBig_1.png new file mode 100644 index 00000000..220a0e5e Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/SunShroom/SunShroomBig/SunShroomBig_1.png differ diff --git a/EXE version/main/resources/graphics/Plants/SunShroom/SunShroomBig/SunShroomBig_2.png b/EXE version/main/resources/graphics/Plants/SunShroom/SunShroomBig/SunShroomBig_2.png new file mode 100644 index 00000000..0d57e917 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/SunShroom/SunShroomBig/SunShroomBig_2.png differ diff --git a/EXE version/main/resources/graphics/Plants/SunShroom/SunShroomBig/SunShroomBig_3.png b/EXE version/main/resources/graphics/Plants/SunShroom/SunShroomBig/SunShroomBig_3.png new file mode 100644 index 00000000..6fbb5e75 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/SunShroom/SunShroomBig/SunShroomBig_3.png differ diff --git a/EXE version/main/resources/graphics/Plants/SunShroom/SunShroomBig/SunShroomBig_4.png b/EXE version/main/resources/graphics/Plants/SunShroom/SunShroomBig/SunShroomBig_4.png new file mode 100644 index 00000000..948089a6 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/SunShroom/SunShroomBig/SunShroomBig_4.png differ diff --git a/EXE version/main/resources/graphics/Plants/SunShroom/SunShroomBig/SunShroomBig_5.png b/EXE version/main/resources/graphics/Plants/SunShroom/SunShroomBig/SunShroomBig_5.png new file mode 100644 index 00000000..b7efcd16 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/SunShroom/SunShroomBig/SunShroomBig_5.png differ diff --git a/EXE version/main/resources/graphics/Plants/SunShroom/SunShroomBig/SunShroomBig_6.png b/EXE version/main/resources/graphics/Plants/SunShroom/SunShroomBig/SunShroomBig_6.png new file mode 100644 index 00000000..b98ef3b4 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/SunShroom/SunShroomBig/SunShroomBig_6.png differ diff --git a/EXE version/main/resources/graphics/Plants/SunShroom/SunShroomBig/SunShroomBig_7.png b/EXE version/main/resources/graphics/Plants/SunShroom/SunShroomBig/SunShroomBig_7.png new file mode 100644 index 00000000..e103723a Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/SunShroom/SunShroomBig/SunShroomBig_7.png differ diff --git a/EXE version/main/resources/graphics/Plants/SunShroom/SunShroomBig/SunShroomBig_8.png b/EXE version/main/resources/graphics/Plants/SunShroom/SunShroomBig/SunShroomBig_8.png new file mode 100644 index 00000000..15acadc6 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/SunShroom/SunShroomBig/SunShroomBig_8.png differ diff --git a/EXE version/main/resources/graphics/Plants/SunShroom/SunShroomBig/SunShroomBig_9.png b/EXE version/main/resources/graphics/Plants/SunShroom/SunShroomBig/SunShroomBig_9.png new file mode 100644 index 00000000..40e4e280 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/SunShroom/SunShroomBig/SunShroomBig_9.png differ diff --git a/EXE version/main/resources/graphics/Plants/SunShroom/SunShroomSleep/SunShroomSleep_0.png b/EXE version/main/resources/graphics/Plants/SunShroom/SunShroomSleep/SunShroomSleep_0.png new file mode 100644 index 00000000..1c0ac5c8 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/SunShroom/SunShroomSleep/SunShroomSleep_0.png differ diff --git a/EXE version/main/resources/graphics/Plants/SunShroom/SunShroomSleep/SunShroomSleep_1.png b/EXE version/main/resources/graphics/Plants/SunShroom/SunShroomSleep/SunShroomSleep_1.png new file mode 100644 index 00000000..4de6109c Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/SunShroom/SunShroomSleep/SunShroomSleep_1.png differ diff --git a/EXE version/main/resources/graphics/Plants/SunShroom/SunShroomSleep/SunShroomSleep_10.png b/EXE version/main/resources/graphics/Plants/SunShroom/SunShroomSleep/SunShroomSleep_10.png new file mode 100644 index 00000000..30e3a414 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/SunShroom/SunShroomSleep/SunShroomSleep_10.png differ diff --git a/EXE version/main/resources/graphics/Plants/SunShroom/SunShroomSleep/SunShroomSleep_11.png b/EXE version/main/resources/graphics/Plants/SunShroom/SunShroomSleep/SunShroomSleep_11.png new file mode 100644 index 00000000..955f934f Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/SunShroom/SunShroomSleep/SunShroomSleep_11.png differ diff --git a/EXE version/main/resources/graphics/Plants/SunShroom/SunShroomSleep/SunShroomSleep_12.png b/EXE version/main/resources/graphics/Plants/SunShroom/SunShroomSleep/SunShroomSleep_12.png new file mode 100644 index 00000000..bff51d83 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/SunShroom/SunShroomSleep/SunShroomSleep_12.png differ diff --git a/EXE version/main/resources/graphics/Plants/SunShroom/SunShroomSleep/SunShroomSleep_13.png b/EXE version/main/resources/graphics/Plants/SunShroom/SunShroomSleep/SunShroomSleep_13.png new file mode 100644 index 00000000..7b8f6848 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/SunShroom/SunShroomSleep/SunShroomSleep_13.png differ diff --git a/EXE version/main/resources/graphics/Plants/SunShroom/SunShroomSleep/SunShroomSleep_2.png b/EXE version/main/resources/graphics/Plants/SunShroom/SunShroomSleep/SunShroomSleep_2.png new file mode 100644 index 00000000..00644b02 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/SunShroom/SunShroomSleep/SunShroomSleep_2.png differ diff --git a/EXE version/main/resources/graphics/Plants/SunShroom/SunShroomSleep/SunShroomSleep_3.png b/EXE version/main/resources/graphics/Plants/SunShroom/SunShroomSleep/SunShroomSleep_3.png new file mode 100644 index 00000000..99896d6e Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/SunShroom/SunShroomSleep/SunShroomSleep_3.png differ diff --git a/EXE version/main/resources/graphics/Plants/SunShroom/SunShroomSleep/SunShroomSleep_4.png b/EXE version/main/resources/graphics/Plants/SunShroom/SunShroomSleep/SunShroomSleep_4.png new file mode 100644 index 00000000..99896d6e Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/SunShroom/SunShroomSleep/SunShroomSleep_4.png differ diff --git a/EXE version/main/resources/graphics/Plants/SunShroom/SunShroomSleep/SunShroomSleep_5.png b/EXE version/main/resources/graphics/Plants/SunShroom/SunShroomSleep/SunShroomSleep_5.png new file mode 100644 index 00000000..bbee2f5c Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/SunShroom/SunShroomSleep/SunShroomSleep_5.png differ diff --git a/EXE version/main/resources/graphics/Plants/SunShroom/SunShroomSleep/SunShroomSleep_6.png b/EXE version/main/resources/graphics/Plants/SunShroom/SunShroomSleep/SunShroomSleep_6.png new file mode 100644 index 00000000..c7e8f733 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/SunShroom/SunShroomSleep/SunShroomSleep_6.png differ diff --git a/EXE version/main/resources/graphics/Plants/SunShroom/SunShroomSleep/SunShroomSleep_7.png b/EXE version/main/resources/graphics/Plants/SunShroom/SunShroomSleep/SunShroomSleep_7.png new file mode 100644 index 00000000..ccb7854f Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/SunShroom/SunShroomSleep/SunShroomSleep_7.png differ diff --git a/EXE version/main/resources/graphics/Plants/SunShroom/SunShroomSleep/SunShroomSleep_8.png b/EXE version/main/resources/graphics/Plants/SunShroom/SunShroomSleep/SunShroomSleep_8.png new file mode 100644 index 00000000..70ab7e0a Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/SunShroom/SunShroomSleep/SunShroomSleep_8.png differ diff --git a/EXE version/main/resources/graphics/Plants/SunShroom/SunShroomSleep/SunShroomSleep_9.png b/EXE version/main/resources/graphics/Plants/SunShroom/SunShroomSleep/SunShroomSleep_9.png new file mode 100644 index 00000000..d07c0794 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/SunShroom/SunShroomSleep/SunShroomSleep_9.png differ diff --git a/EXE version/main/resources/graphics/Plants/Threepeater/Threepeater_0.png b/EXE version/main/resources/graphics/Plants/Threepeater/Threepeater_0.png new file mode 100644 index 00000000..da1721f2 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Threepeater/Threepeater_0.png differ diff --git a/EXE version/main/resources/graphics/Plants/Threepeater/Threepeater_1.png b/EXE version/main/resources/graphics/Plants/Threepeater/Threepeater_1.png new file mode 100644 index 00000000..e3f78e45 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Threepeater/Threepeater_1.png differ diff --git a/EXE version/main/resources/graphics/Plants/Threepeater/Threepeater_10.png b/EXE version/main/resources/graphics/Plants/Threepeater/Threepeater_10.png new file mode 100644 index 00000000..919624bf Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Threepeater/Threepeater_10.png differ diff --git a/EXE version/main/resources/graphics/Plants/Threepeater/Threepeater_11.png b/EXE version/main/resources/graphics/Plants/Threepeater/Threepeater_11.png new file mode 100644 index 00000000..e8ca050f Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Threepeater/Threepeater_11.png differ diff --git a/EXE version/main/resources/graphics/Plants/Threepeater/Threepeater_12.png b/EXE version/main/resources/graphics/Plants/Threepeater/Threepeater_12.png new file mode 100644 index 00000000..838511ff Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Threepeater/Threepeater_12.png differ diff --git a/EXE version/main/resources/graphics/Plants/Threepeater/Threepeater_13.png b/EXE version/main/resources/graphics/Plants/Threepeater/Threepeater_13.png new file mode 100644 index 00000000..9fe10656 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Threepeater/Threepeater_13.png differ diff --git a/EXE version/main/resources/graphics/Plants/Threepeater/Threepeater_14.png b/EXE version/main/resources/graphics/Plants/Threepeater/Threepeater_14.png new file mode 100644 index 00000000..b7f4bc11 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Threepeater/Threepeater_14.png differ diff --git a/EXE version/main/resources/graphics/Plants/Threepeater/Threepeater_15.png b/EXE version/main/resources/graphics/Plants/Threepeater/Threepeater_15.png new file mode 100644 index 00000000..ff07c455 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Threepeater/Threepeater_15.png differ diff --git a/EXE version/main/resources/graphics/Plants/Threepeater/Threepeater_2.png b/EXE version/main/resources/graphics/Plants/Threepeater/Threepeater_2.png new file mode 100644 index 00000000..0c07431c Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Threepeater/Threepeater_2.png differ diff --git a/EXE version/main/resources/graphics/Plants/Threepeater/Threepeater_3.png b/EXE version/main/resources/graphics/Plants/Threepeater/Threepeater_3.png new file mode 100644 index 00000000..712177cd Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Threepeater/Threepeater_3.png differ diff --git a/EXE version/main/resources/graphics/Plants/Threepeater/Threepeater_4.png b/EXE version/main/resources/graphics/Plants/Threepeater/Threepeater_4.png new file mode 100644 index 00000000..fd8c69b7 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Threepeater/Threepeater_4.png differ diff --git a/EXE version/main/resources/graphics/Plants/Threepeater/Threepeater_5.png b/EXE version/main/resources/graphics/Plants/Threepeater/Threepeater_5.png new file mode 100644 index 00000000..938c59c2 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Threepeater/Threepeater_5.png differ diff --git a/EXE version/main/resources/graphics/Plants/Threepeater/Threepeater_6.png b/EXE version/main/resources/graphics/Plants/Threepeater/Threepeater_6.png new file mode 100644 index 00000000..a22ef84a Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Threepeater/Threepeater_6.png differ diff --git a/EXE version/main/resources/graphics/Plants/Threepeater/Threepeater_7.png b/EXE version/main/resources/graphics/Plants/Threepeater/Threepeater_7.png new file mode 100644 index 00000000..1715efe3 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Threepeater/Threepeater_7.png differ diff --git a/EXE version/main/resources/graphics/Plants/Threepeater/Threepeater_8.png b/EXE version/main/resources/graphics/Plants/Threepeater/Threepeater_8.png new file mode 100644 index 00000000..20d6e841 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Threepeater/Threepeater_8.png differ diff --git a/EXE version/main/resources/graphics/Plants/Threepeater/Threepeater_9.png b/EXE version/main/resources/graphics/Plants/Threepeater/Threepeater_9.png new file mode 100644 index 00000000..a3931085 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/Threepeater/Threepeater_9.png differ diff --git a/EXE version/main/resources/graphics/Plants/WallNut/RedWallNutBowling/RedWallNutBowling_0.png b/EXE version/main/resources/graphics/Plants/WallNut/RedWallNutBowling/RedWallNutBowling_0.png new file mode 100644 index 00000000..f9f5a275 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/WallNut/RedWallNutBowling/RedWallNutBowling_0.png differ diff --git a/EXE version/main/resources/graphics/Plants/WallNut/RedWallNutBowlingExplode/RedWallNutBowlingExplode_0.png b/EXE version/main/resources/graphics/Plants/WallNut/RedWallNutBowlingExplode/RedWallNutBowlingExplode_0.png new file mode 100644 index 00000000..02866746 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/WallNut/RedWallNutBowlingExplode/RedWallNutBowlingExplode_0.png differ diff --git a/EXE version/main/resources/graphics/Plants/WallNut/WallNut/WallNut_0.png b/EXE version/main/resources/graphics/Plants/WallNut/WallNut/WallNut_0.png new file mode 100644 index 00000000..2e3e7735 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/WallNut/WallNut/WallNut_0.png differ diff --git a/EXE version/main/resources/graphics/Plants/WallNut/WallNut/WallNut_1.png b/EXE version/main/resources/graphics/Plants/WallNut/WallNut/WallNut_1.png new file mode 100644 index 00000000..629af2bb Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/WallNut/WallNut/WallNut_1.png differ diff --git a/EXE version/main/resources/graphics/Plants/WallNut/WallNut/WallNut_10.png b/EXE version/main/resources/graphics/Plants/WallNut/WallNut/WallNut_10.png new file mode 100644 index 00000000..2003f818 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/WallNut/WallNut/WallNut_10.png differ diff --git a/EXE version/main/resources/graphics/Plants/WallNut/WallNut/WallNut_11.png b/EXE version/main/resources/graphics/Plants/WallNut/WallNut/WallNut_11.png new file mode 100644 index 00000000..2f25f81e Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/WallNut/WallNut/WallNut_11.png differ diff --git a/EXE version/main/resources/graphics/Plants/WallNut/WallNut/WallNut_12.png b/EXE version/main/resources/graphics/Plants/WallNut/WallNut/WallNut_12.png new file mode 100644 index 00000000..c0b773c8 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/WallNut/WallNut/WallNut_12.png differ diff --git a/EXE version/main/resources/graphics/Plants/WallNut/WallNut/WallNut_13.png b/EXE version/main/resources/graphics/Plants/WallNut/WallNut/WallNut_13.png new file mode 100644 index 00000000..cb023965 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/WallNut/WallNut/WallNut_13.png differ diff --git a/EXE version/main/resources/graphics/Plants/WallNut/WallNut/WallNut_14.png b/EXE version/main/resources/graphics/Plants/WallNut/WallNut/WallNut_14.png new file mode 100644 index 00000000..696b86ec Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/WallNut/WallNut/WallNut_14.png differ diff --git a/EXE version/main/resources/graphics/Plants/WallNut/WallNut/WallNut_15.png b/EXE version/main/resources/graphics/Plants/WallNut/WallNut/WallNut_15.png new file mode 100644 index 00000000..ed307c75 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/WallNut/WallNut/WallNut_15.png differ diff --git a/EXE version/main/resources/graphics/Plants/WallNut/WallNut/WallNut_2.png b/EXE version/main/resources/graphics/Plants/WallNut/WallNut/WallNut_2.png new file mode 100644 index 00000000..b74243a7 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/WallNut/WallNut/WallNut_2.png differ diff --git a/EXE version/main/resources/graphics/Plants/WallNut/WallNut/WallNut_3.png b/EXE version/main/resources/graphics/Plants/WallNut/WallNut/WallNut_3.png new file mode 100644 index 00000000..de4b2aaf Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/WallNut/WallNut/WallNut_3.png differ diff --git a/EXE version/main/resources/graphics/Plants/WallNut/WallNut/WallNut_4.png b/EXE version/main/resources/graphics/Plants/WallNut/WallNut/WallNut_4.png new file mode 100644 index 00000000..f6415ee6 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/WallNut/WallNut/WallNut_4.png differ diff --git a/EXE version/main/resources/graphics/Plants/WallNut/WallNut/WallNut_5.png b/EXE version/main/resources/graphics/Plants/WallNut/WallNut/WallNut_5.png new file mode 100644 index 00000000..bbad911f Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/WallNut/WallNut/WallNut_5.png differ diff --git a/EXE version/main/resources/graphics/Plants/WallNut/WallNut/WallNut_6.png b/EXE version/main/resources/graphics/Plants/WallNut/WallNut/WallNut_6.png new file mode 100644 index 00000000..9e6485d2 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/WallNut/WallNut/WallNut_6.png differ diff --git a/EXE version/main/resources/graphics/Plants/WallNut/WallNut/WallNut_7.png b/EXE version/main/resources/graphics/Plants/WallNut/WallNut/WallNut_7.png new file mode 100644 index 00000000..b32ec065 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/WallNut/WallNut/WallNut_7.png differ diff --git a/EXE version/main/resources/graphics/Plants/WallNut/WallNut/WallNut_8.png b/EXE version/main/resources/graphics/Plants/WallNut/WallNut/WallNut_8.png new file mode 100644 index 00000000..76c92583 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/WallNut/WallNut/WallNut_8.png differ diff --git a/EXE version/main/resources/graphics/Plants/WallNut/WallNut/WallNut_9.png b/EXE version/main/resources/graphics/Plants/WallNut/WallNut/WallNut_9.png new file mode 100644 index 00000000..23d82bd8 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/WallNut/WallNut/WallNut_9.png differ diff --git a/EXE version/main/resources/graphics/Plants/WallNut/WallNutBowling/WallNutBowling_0.png b/EXE version/main/resources/graphics/Plants/WallNut/WallNutBowling/WallNutBowling_0.png new file mode 100644 index 00000000..673f40f2 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/WallNut/WallNutBowling/WallNutBowling_0.png differ diff --git a/EXE version/main/resources/graphics/Plants/WallNut/WallNut_cracked1/WallNut_cracked1_0.png b/EXE version/main/resources/graphics/Plants/WallNut/WallNut_cracked1/WallNut_cracked1_0.png new file mode 100644 index 00000000..7b05e805 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/WallNut/WallNut_cracked1/WallNut_cracked1_0.png differ diff --git a/EXE version/main/resources/graphics/Plants/WallNut/WallNut_cracked1/WallNut_cracked1_1.png b/EXE version/main/resources/graphics/Plants/WallNut/WallNut_cracked1/WallNut_cracked1_1.png new file mode 100644 index 00000000..c0653529 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/WallNut/WallNut_cracked1/WallNut_cracked1_1.png differ diff --git a/EXE version/main/resources/graphics/Plants/WallNut/WallNut_cracked1/WallNut_cracked1_10.png b/EXE version/main/resources/graphics/Plants/WallNut/WallNut_cracked1/WallNut_cracked1_10.png new file mode 100644 index 00000000..acfb94ae Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/WallNut/WallNut_cracked1/WallNut_cracked1_10.png differ diff --git a/EXE version/main/resources/graphics/Plants/WallNut/WallNut_cracked1/WallNut_cracked1_2.png b/EXE version/main/resources/graphics/Plants/WallNut/WallNut_cracked1/WallNut_cracked1_2.png new file mode 100644 index 00000000..9ec165d2 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/WallNut/WallNut_cracked1/WallNut_cracked1_2.png differ diff --git a/EXE version/main/resources/graphics/Plants/WallNut/WallNut_cracked1/WallNut_cracked1_3.png b/EXE version/main/resources/graphics/Plants/WallNut/WallNut_cracked1/WallNut_cracked1_3.png new file mode 100644 index 00000000..5a4da300 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/WallNut/WallNut_cracked1/WallNut_cracked1_3.png differ diff --git a/EXE version/main/resources/graphics/Plants/WallNut/WallNut_cracked1/WallNut_cracked1_4.png b/EXE version/main/resources/graphics/Plants/WallNut/WallNut_cracked1/WallNut_cracked1_4.png new file mode 100644 index 00000000..91e8b924 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/WallNut/WallNut_cracked1/WallNut_cracked1_4.png differ diff --git a/EXE version/main/resources/graphics/Plants/WallNut/WallNut_cracked1/WallNut_cracked1_5.png b/EXE version/main/resources/graphics/Plants/WallNut/WallNut_cracked1/WallNut_cracked1_5.png new file mode 100644 index 00000000..f0437666 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/WallNut/WallNut_cracked1/WallNut_cracked1_5.png differ diff --git a/EXE version/main/resources/graphics/Plants/WallNut/WallNut_cracked1/WallNut_cracked1_6.png b/EXE version/main/resources/graphics/Plants/WallNut/WallNut_cracked1/WallNut_cracked1_6.png new file mode 100644 index 00000000..0cdb4228 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/WallNut/WallNut_cracked1/WallNut_cracked1_6.png differ diff --git a/EXE version/main/resources/graphics/Plants/WallNut/WallNut_cracked1/WallNut_cracked1_7.png b/EXE version/main/resources/graphics/Plants/WallNut/WallNut_cracked1/WallNut_cracked1_7.png new file mode 100644 index 00000000..f8dfc233 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/WallNut/WallNut_cracked1/WallNut_cracked1_7.png differ diff --git a/EXE version/main/resources/graphics/Plants/WallNut/WallNut_cracked1/WallNut_cracked1_8.png b/EXE version/main/resources/graphics/Plants/WallNut/WallNut_cracked1/WallNut_cracked1_8.png new file mode 100644 index 00000000..5c2c2f0a Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/WallNut/WallNut_cracked1/WallNut_cracked1_8.png differ diff --git a/EXE version/main/resources/graphics/Plants/WallNut/WallNut_cracked1/WallNut_cracked1_9.png b/EXE version/main/resources/graphics/Plants/WallNut/WallNut_cracked1/WallNut_cracked1_9.png new file mode 100644 index 00000000..757435a5 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/WallNut/WallNut_cracked1/WallNut_cracked1_9.png differ diff --git a/EXE version/main/resources/graphics/Plants/WallNut/WallNut_cracked2/WallNut_cracked2_0.png b/EXE version/main/resources/graphics/Plants/WallNut/WallNut_cracked2/WallNut_cracked2_0.png new file mode 100644 index 00000000..0f57fa2c Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/WallNut/WallNut_cracked2/WallNut_cracked2_0.png differ diff --git a/EXE version/main/resources/graphics/Plants/WallNut/WallNut_cracked2/WallNut_cracked2_1.png b/EXE version/main/resources/graphics/Plants/WallNut/WallNut_cracked2/WallNut_cracked2_1.png new file mode 100644 index 00000000..77834547 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/WallNut/WallNut_cracked2/WallNut_cracked2_1.png differ diff --git a/EXE version/main/resources/graphics/Plants/WallNut/WallNut_cracked2/WallNut_cracked2_10.png b/EXE version/main/resources/graphics/Plants/WallNut/WallNut_cracked2/WallNut_cracked2_10.png new file mode 100644 index 00000000..3aaecd73 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/WallNut/WallNut_cracked2/WallNut_cracked2_10.png differ diff --git a/EXE version/main/resources/graphics/Plants/WallNut/WallNut_cracked2/WallNut_cracked2_11.png b/EXE version/main/resources/graphics/Plants/WallNut/WallNut_cracked2/WallNut_cracked2_11.png new file mode 100644 index 00000000..ba221d87 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/WallNut/WallNut_cracked2/WallNut_cracked2_11.png differ diff --git a/EXE version/main/resources/graphics/Plants/WallNut/WallNut_cracked2/WallNut_cracked2_12.png b/EXE version/main/resources/graphics/Plants/WallNut/WallNut_cracked2/WallNut_cracked2_12.png new file mode 100644 index 00000000..902aad95 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/WallNut/WallNut_cracked2/WallNut_cracked2_12.png differ diff --git a/EXE version/main/resources/graphics/Plants/WallNut/WallNut_cracked2/WallNut_cracked2_13.png b/EXE version/main/resources/graphics/Plants/WallNut/WallNut_cracked2/WallNut_cracked2_13.png new file mode 100644 index 00000000..58a70aa6 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/WallNut/WallNut_cracked2/WallNut_cracked2_13.png differ diff --git a/EXE version/main/resources/graphics/Plants/WallNut/WallNut_cracked2/WallNut_cracked2_14.png b/EXE version/main/resources/graphics/Plants/WallNut/WallNut_cracked2/WallNut_cracked2_14.png new file mode 100644 index 00000000..acd16127 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/WallNut/WallNut_cracked2/WallNut_cracked2_14.png differ diff --git a/EXE version/main/resources/graphics/Plants/WallNut/WallNut_cracked2/WallNut_cracked2_2.png b/EXE version/main/resources/graphics/Plants/WallNut/WallNut_cracked2/WallNut_cracked2_2.png new file mode 100644 index 00000000..32e7df60 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/WallNut/WallNut_cracked2/WallNut_cracked2_2.png differ diff --git a/EXE version/main/resources/graphics/Plants/WallNut/WallNut_cracked2/WallNut_cracked2_3.png b/EXE version/main/resources/graphics/Plants/WallNut/WallNut_cracked2/WallNut_cracked2_3.png new file mode 100644 index 00000000..1462a5fd Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/WallNut/WallNut_cracked2/WallNut_cracked2_3.png differ diff --git a/EXE version/main/resources/graphics/Plants/WallNut/WallNut_cracked2/WallNut_cracked2_4.png b/EXE version/main/resources/graphics/Plants/WallNut/WallNut_cracked2/WallNut_cracked2_4.png new file mode 100644 index 00000000..4aa08ce7 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/WallNut/WallNut_cracked2/WallNut_cracked2_4.png differ diff --git a/EXE version/main/resources/graphics/Plants/WallNut/WallNut_cracked2/WallNut_cracked2_5.png b/EXE version/main/resources/graphics/Plants/WallNut/WallNut_cracked2/WallNut_cracked2_5.png new file mode 100644 index 00000000..c56b855c Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/WallNut/WallNut_cracked2/WallNut_cracked2_5.png differ diff --git a/EXE version/main/resources/graphics/Plants/WallNut/WallNut_cracked2/WallNut_cracked2_6.png b/EXE version/main/resources/graphics/Plants/WallNut/WallNut_cracked2/WallNut_cracked2_6.png new file mode 100644 index 00000000..5ea8219c Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/WallNut/WallNut_cracked2/WallNut_cracked2_6.png differ diff --git a/EXE version/main/resources/graphics/Plants/WallNut/WallNut_cracked2/WallNut_cracked2_7.png b/EXE version/main/resources/graphics/Plants/WallNut/WallNut_cracked2/WallNut_cracked2_7.png new file mode 100644 index 00000000..6c5bd678 Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/WallNut/WallNut_cracked2/WallNut_cracked2_7.png differ diff --git a/EXE version/main/resources/graphics/Plants/WallNut/WallNut_cracked2/WallNut_cracked2_8.png b/EXE version/main/resources/graphics/Plants/WallNut/WallNut_cracked2/WallNut_cracked2_8.png new file mode 100644 index 00000000..d68d405f Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/WallNut/WallNut_cracked2/WallNut_cracked2_8.png differ diff --git a/EXE version/main/resources/graphics/Plants/WallNut/WallNut_cracked2/WallNut_cracked2_9.png b/EXE version/main/resources/graphics/Plants/WallNut/WallNut_cracked2/WallNut_cracked2_9.png new file mode 100644 index 00000000..cf18d79a Binary files /dev/null and b/EXE version/main/resources/graphics/Plants/WallNut/WallNut_cracked2/WallNut_cracked2_9.png differ diff --git a/EXE version/main/resources/graphics/Screen/Adventure_0.png b/EXE version/main/resources/graphics/Screen/Adventure_0.png new file mode 100644 index 00000000..78c12fc1 Binary files /dev/null and b/EXE version/main/resources/graphics/Screen/Adventure_0.png differ diff --git a/EXE version/main/resources/graphics/Screen/Adventure_1.png b/EXE version/main/resources/graphics/Screen/Adventure_1.png new file mode 100644 index 00000000..f2825cb2 Binary files /dev/null and b/EXE version/main/resources/graphics/Screen/Adventure_1.png differ diff --git a/EXE version/main/resources/graphics/Screen/Boom.png b/EXE version/main/resources/graphics/Screen/Boom.png new file mode 100644 index 00000000..5ac54a45 Binary files /dev/null and b/EXE version/main/resources/graphics/Screen/Boom.png differ diff --git a/EXE version/main/resources/graphics/Screen/ChooserBackground.png b/EXE version/main/resources/graphics/Screen/ChooserBackground.png new file mode 100644 index 00000000..c1127274 Binary files /dev/null and b/EXE version/main/resources/graphics/Screen/ChooserBackground.png differ diff --git a/EXE version/main/resources/graphics/Screen/GameLoose.png b/EXE version/main/resources/graphics/Screen/GameLoose.png new file mode 100644 index 00000000..2ed83f12 Binary files /dev/null and b/EXE version/main/resources/graphics/Screen/GameLoose.png differ diff --git a/EXE version/main/resources/graphics/Screen/GameVictory.png b/EXE version/main/resources/graphics/Screen/GameVictory.png new file mode 100644 index 00000000..978d292f Binary files /dev/null and b/EXE version/main/resources/graphics/Screen/GameVictory.png differ diff --git a/EXE version/main/resources/graphics/Screen/MainMenu.png b/EXE version/main/resources/graphics/Screen/MainMenu.png new file mode 100644 index 00000000..fe2a7808 Binary files /dev/null and b/EXE version/main/resources/graphics/Screen/MainMenu.png differ diff --git a/EXE version/main/resources/graphics/Screen/MoveBackground.png b/EXE version/main/resources/graphics/Screen/MoveBackground.png new file mode 100644 index 00000000..d6dd1c24 Binary files /dev/null and b/EXE version/main/resources/graphics/Screen/MoveBackground.png differ diff --git a/EXE version/main/resources/graphics/Screen/PanelBackground.png b/EXE version/main/resources/graphics/Screen/PanelBackground.png new file mode 100644 index 00000000..56fbb93b Binary files /dev/null and b/EXE version/main/resources/graphics/Screen/PanelBackground.png differ diff --git a/EXE version/main/resources/graphics/Screen/StartButton.png b/EXE version/main/resources/graphics/Screen/StartButton.png new file mode 100644 index 00000000..29268cab Binary files /dev/null and b/EXE version/main/resources/graphics/Screen/StartButton.png differ diff --git a/EXE version/main/resources/graphics/Screen/car.png b/EXE version/main/resources/graphics/Screen/car.png new file mode 100644 index 00000000..037e6415 Binary files /dev/null and b/EXE version/main/resources/graphics/Screen/car.png differ diff --git a/EXE version/main/resources/graphics/Zombies/BucketheadZombie/BucketheadZombie/BucketheadZombie_0.png b/EXE version/main/resources/graphics/Zombies/BucketheadZombie/BucketheadZombie/BucketheadZombie_0.png new file mode 100644 index 00000000..b5e44f9f Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/BucketheadZombie/BucketheadZombie/BucketheadZombie_0.png differ diff --git a/EXE version/main/resources/graphics/Zombies/BucketheadZombie/BucketheadZombie/BucketheadZombie_1.png b/EXE version/main/resources/graphics/Zombies/BucketheadZombie/BucketheadZombie/BucketheadZombie_1.png new file mode 100644 index 00000000..e3dec19b Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/BucketheadZombie/BucketheadZombie/BucketheadZombie_1.png differ diff --git a/EXE version/main/resources/graphics/Zombies/BucketheadZombie/BucketheadZombie/BucketheadZombie_10.png b/EXE version/main/resources/graphics/Zombies/BucketheadZombie/BucketheadZombie/BucketheadZombie_10.png new file mode 100644 index 00000000..c50bdfc7 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/BucketheadZombie/BucketheadZombie/BucketheadZombie_10.png differ diff --git a/EXE version/main/resources/graphics/Zombies/BucketheadZombie/BucketheadZombie/BucketheadZombie_11.png b/EXE version/main/resources/graphics/Zombies/BucketheadZombie/BucketheadZombie/BucketheadZombie_11.png new file mode 100644 index 00000000..d663d9da Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/BucketheadZombie/BucketheadZombie/BucketheadZombie_11.png differ diff --git a/EXE version/main/resources/graphics/Zombies/BucketheadZombie/BucketheadZombie/BucketheadZombie_12.png b/EXE version/main/resources/graphics/Zombies/BucketheadZombie/BucketheadZombie/BucketheadZombie_12.png new file mode 100644 index 00000000..2e9c62ed Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/BucketheadZombie/BucketheadZombie/BucketheadZombie_12.png differ diff --git a/EXE version/main/resources/graphics/Zombies/BucketheadZombie/BucketheadZombie/BucketheadZombie_13.png b/EXE version/main/resources/graphics/Zombies/BucketheadZombie/BucketheadZombie/BucketheadZombie_13.png new file mode 100644 index 00000000..9eadc664 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/BucketheadZombie/BucketheadZombie/BucketheadZombie_13.png differ diff --git a/EXE version/main/resources/graphics/Zombies/BucketheadZombie/BucketheadZombie/BucketheadZombie_14.png b/EXE version/main/resources/graphics/Zombies/BucketheadZombie/BucketheadZombie/BucketheadZombie_14.png new file mode 100644 index 00000000..cfd9bde2 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/BucketheadZombie/BucketheadZombie/BucketheadZombie_14.png differ diff --git a/EXE version/main/resources/graphics/Zombies/BucketheadZombie/BucketheadZombie/BucketheadZombie_2.png b/EXE version/main/resources/graphics/Zombies/BucketheadZombie/BucketheadZombie/BucketheadZombie_2.png new file mode 100644 index 00000000..f12a3d26 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/BucketheadZombie/BucketheadZombie/BucketheadZombie_2.png differ diff --git a/EXE version/main/resources/graphics/Zombies/BucketheadZombie/BucketheadZombie/BucketheadZombie_3.png b/EXE version/main/resources/graphics/Zombies/BucketheadZombie/BucketheadZombie/BucketheadZombie_3.png new file mode 100644 index 00000000..77fdf253 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/BucketheadZombie/BucketheadZombie/BucketheadZombie_3.png differ diff --git a/EXE version/main/resources/graphics/Zombies/BucketheadZombie/BucketheadZombie/BucketheadZombie_4.png b/EXE version/main/resources/graphics/Zombies/BucketheadZombie/BucketheadZombie/BucketheadZombie_4.png new file mode 100644 index 00000000..da624e3e Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/BucketheadZombie/BucketheadZombie/BucketheadZombie_4.png differ diff --git a/EXE version/main/resources/graphics/Zombies/BucketheadZombie/BucketheadZombie/BucketheadZombie_5.png b/EXE version/main/resources/graphics/Zombies/BucketheadZombie/BucketheadZombie/BucketheadZombie_5.png new file mode 100644 index 00000000..a852b517 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/BucketheadZombie/BucketheadZombie/BucketheadZombie_5.png differ diff --git a/EXE version/main/resources/graphics/Zombies/BucketheadZombie/BucketheadZombie/BucketheadZombie_6.png b/EXE version/main/resources/graphics/Zombies/BucketheadZombie/BucketheadZombie/BucketheadZombie_6.png new file mode 100644 index 00000000..6217474e Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/BucketheadZombie/BucketheadZombie/BucketheadZombie_6.png differ diff --git a/EXE version/main/resources/graphics/Zombies/BucketheadZombie/BucketheadZombie/BucketheadZombie_7.png b/EXE version/main/resources/graphics/Zombies/BucketheadZombie/BucketheadZombie/BucketheadZombie_7.png new file mode 100644 index 00000000..6a2572c6 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/BucketheadZombie/BucketheadZombie/BucketheadZombie_7.png differ diff --git a/EXE version/main/resources/graphics/Zombies/BucketheadZombie/BucketheadZombie/BucketheadZombie_8.png b/EXE version/main/resources/graphics/Zombies/BucketheadZombie/BucketheadZombie/BucketheadZombie_8.png new file mode 100644 index 00000000..7060549c Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/BucketheadZombie/BucketheadZombie/BucketheadZombie_8.png differ diff --git a/EXE version/main/resources/graphics/Zombies/BucketheadZombie/BucketheadZombie/BucketheadZombie_9.png b/EXE version/main/resources/graphics/Zombies/BucketheadZombie/BucketheadZombie/BucketheadZombie_9.png new file mode 100644 index 00000000..a2c89cc9 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/BucketheadZombie/BucketheadZombie/BucketheadZombie_9.png differ diff --git a/EXE version/main/resources/graphics/Zombies/BucketheadZombie/BucketheadZombieAttack/BucketheadZombieAttack_0.png b/EXE version/main/resources/graphics/Zombies/BucketheadZombie/BucketheadZombieAttack/BucketheadZombieAttack_0.png new file mode 100644 index 00000000..0e44e7b1 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/BucketheadZombie/BucketheadZombieAttack/BucketheadZombieAttack_0.png differ diff --git a/EXE version/main/resources/graphics/Zombies/BucketheadZombie/BucketheadZombieAttack/BucketheadZombieAttack_1.png b/EXE version/main/resources/graphics/Zombies/BucketheadZombie/BucketheadZombieAttack/BucketheadZombieAttack_1.png new file mode 100644 index 00000000..c617bfe6 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/BucketheadZombie/BucketheadZombieAttack/BucketheadZombieAttack_1.png differ diff --git a/EXE version/main/resources/graphics/Zombies/BucketheadZombie/BucketheadZombieAttack/BucketheadZombieAttack_10.png b/EXE version/main/resources/graphics/Zombies/BucketheadZombie/BucketheadZombieAttack/BucketheadZombieAttack_10.png new file mode 100644 index 00000000..6396d387 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/BucketheadZombie/BucketheadZombieAttack/BucketheadZombieAttack_10.png differ diff --git a/EXE version/main/resources/graphics/Zombies/BucketheadZombie/BucketheadZombieAttack/BucketheadZombieAttack_2.png b/EXE version/main/resources/graphics/Zombies/BucketheadZombie/BucketheadZombieAttack/BucketheadZombieAttack_2.png new file mode 100644 index 00000000..8bb876af Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/BucketheadZombie/BucketheadZombieAttack/BucketheadZombieAttack_2.png differ diff --git a/EXE version/main/resources/graphics/Zombies/BucketheadZombie/BucketheadZombieAttack/BucketheadZombieAttack_3.png b/EXE version/main/resources/graphics/Zombies/BucketheadZombie/BucketheadZombieAttack/BucketheadZombieAttack_3.png new file mode 100644 index 00000000..1b2dd04a Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/BucketheadZombie/BucketheadZombieAttack/BucketheadZombieAttack_3.png differ diff --git a/EXE version/main/resources/graphics/Zombies/BucketheadZombie/BucketheadZombieAttack/BucketheadZombieAttack_4.png b/EXE version/main/resources/graphics/Zombies/BucketheadZombie/BucketheadZombieAttack/BucketheadZombieAttack_4.png new file mode 100644 index 00000000..d4f5d2eb Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/BucketheadZombie/BucketheadZombieAttack/BucketheadZombieAttack_4.png differ diff --git a/EXE version/main/resources/graphics/Zombies/BucketheadZombie/BucketheadZombieAttack/BucketheadZombieAttack_5.png b/EXE version/main/resources/graphics/Zombies/BucketheadZombie/BucketheadZombieAttack/BucketheadZombieAttack_5.png new file mode 100644 index 00000000..16040120 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/BucketheadZombie/BucketheadZombieAttack/BucketheadZombieAttack_5.png differ diff --git a/EXE version/main/resources/graphics/Zombies/BucketheadZombie/BucketheadZombieAttack/BucketheadZombieAttack_6.png b/EXE version/main/resources/graphics/Zombies/BucketheadZombie/BucketheadZombieAttack/BucketheadZombieAttack_6.png new file mode 100644 index 00000000..e2e11552 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/BucketheadZombie/BucketheadZombieAttack/BucketheadZombieAttack_6.png differ diff --git a/EXE version/main/resources/graphics/Zombies/BucketheadZombie/BucketheadZombieAttack/BucketheadZombieAttack_7.png b/EXE version/main/resources/graphics/Zombies/BucketheadZombie/BucketheadZombieAttack/BucketheadZombieAttack_7.png new file mode 100644 index 00000000..dfebc74e Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/BucketheadZombie/BucketheadZombieAttack/BucketheadZombieAttack_7.png differ diff --git a/EXE version/main/resources/graphics/Zombies/BucketheadZombie/BucketheadZombieAttack/BucketheadZombieAttack_8.png b/EXE version/main/resources/graphics/Zombies/BucketheadZombie/BucketheadZombieAttack/BucketheadZombieAttack_8.png new file mode 100644 index 00000000..96f73070 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/BucketheadZombie/BucketheadZombieAttack/BucketheadZombieAttack_8.png differ diff --git a/EXE version/main/resources/graphics/Zombies/BucketheadZombie/BucketheadZombieAttack/BucketheadZombieAttack_9.png b/EXE version/main/resources/graphics/Zombies/BucketheadZombie/BucketheadZombieAttack/BucketheadZombieAttack_9.png new file mode 100644 index 00000000..e2cf2468 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/BucketheadZombie/BucketheadZombieAttack/BucketheadZombieAttack_9.png differ diff --git a/EXE version/main/resources/graphics/Zombies/ConeheadZombie/ConeheadZombie/ConeheadZombie_0.png b/EXE version/main/resources/graphics/Zombies/ConeheadZombie/ConeheadZombie/ConeheadZombie_0.png new file mode 100644 index 00000000..50d53da8 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/ConeheadZombie/ConeheadZombie/ConeheadZombie_0.png differ diff --git a/EXE version/main/resources/graphics/Zombies/ConeheadZombie/ConeheadZombie/ConeheadZombie_1.png b/EXE version/main/resources/graphics/Zombies/ConeheadZombie/ConeheadZombie/ConeheadZombie_1.png new file mode 100644 index 00000000..ac1e5969 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/ConeheadZombie/ConeheadZombie/ConeheadZombie_1.png differ diff --git a/EXE version/main/resources/graphics/Zombies/ConeheadZombie/ConeheadZombie/ConeheadZombie_10.png b/EXE version/main/resources/graphics/Zombies/ConeheadZombie/ConeheadZombie/ConeheadZombie_10.png new file mode 100644 index 00000000..b3144aba Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/ConeheadZombie/ConeheadZombie/ConeheadZombie_10.png differ diff --git a/EXE version/main/resources/graphics/Zombies/ConeheadZombie/ConeheadZombie/ConeheadZombie_11.png b/EXE version/main/resources/graphics/Zombies/ConeheadZombie/ConeheadZombie/ConeheadZombie_11.png new file mode 100644 index 00000000..392d84b6 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/ConeheadZombie/ConeheadZombie/ConeheadZombie_11.png differ diff --git a/EXE version/main/resources/graphics/Zombies/ConeheadZombie/ConeheadZombie/ConeheadZombie_12.png b/EXE version/main/resources/graphics/Zombies/ConeheadZombie/ConeheadZombie/ConeheadZombie_12.png new file mode 100644 index 00000000..9be9e34b Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/ConeheadZombie/ConeheadZombie/ConeheadZombie_12.png differ diff --git a/EXE version/main/resources/graphics/Zombies/ConeheadZombie/ConeheadZombie/ConeheadZombie_13.png b/EXE version/main/resources/graphics/Zombies/ConeheadZombie/ConeheadZombie/ConeheadZombie_13.png new file mode 100644 index 00000000..9a57287e Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/ConeheadZombie/ConeheadZombie/ConeheadZombie_13.png differ diff --git a/EXE version/main/resources/graphics/Zombies/ConeheadZombie/ConeheadZombie/ConeheadZombie_14.png b/EXE version/main/resources/graphics/Zombies/ConeheadZombie/ConeheadZombie/ConeheadZombie_14.png new file mode 100644 index 00000000..3c755d4a Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/ConeheadZombie/ConeheadZombie/ConeheadZombie_14.png differ diff --git a/EXE version/main/resources/graphics/Zombies/ConeheadZombie/ConeheadZombie/ConeheadZombie_15.png b/EXE version/main/resources/graphics/Zombies/ConeheadZombie/ConeheadZombie/ConeheadZombie_15.png new file mode 100644 index 00000000..6009edd2 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/ConeheadZombie/ConeheadZombie/ConeheadZombie_15.png differ diff --git a/EXE version/main/resources/graphics/Zombies/ConeheadZombie/ConeheadZombie/ConeheadZombie_16.png b/EXE version/main/resources/graphics/Zombies/ConeheadZombie/ConeheadZombie/ConeheadZombie_16.png new file mode 100644 index 00000000..ab140fef Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/ConeheadZombie/ConeheadZombie/ConeheadZombie_16.png differ diff --git a/EXE version/main/resources/graphics/Zombies/ConeheadZombie/ConeheadZombie/ConeheadZombie_17.png b/EXE version/main/resources/graphics/Zombies/ConeheadZombie/ConeheadZombie/ConeheadZombie_17.png new file mode 100644 index 00000000..3fa7ce58 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/ConeheadZombie/ConeheadZombie/ConeheadZombie_17.png differ diff --git a/EXE version/main/resources/graphics/Zombies/ConeheadZombie/ConeheadZombie/ConeheadZombie_18.png b/EXE version/main/resources/graphics/Zombies/ConeheadZombie/ConeheadZombie/ConeheadZombie_18.png new file mode 100644 index 00000000..7ed06b73 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/ConeheadZombie/ConeheadZombie/ConeheadZombie_18.png differ diff --git a/EXE version/main/resources/graphics/Zombies/ConeheadZombie/ConeheadZombie/ConeheadZombie_19.png b/EXE version/main/resources/graphics/Zombies/ConeheadZombie/ConeheadZombie/ConeheadZombie_19.png new file mode 100644 index 00000000..08a44cac Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/ConeheadZombie/ConeheadZombie/ConeheadZombie_19.png differ diff --git a/EXE version/main/resources/graphics/Zombies/ConeheadZombie/ConeheadZombie/ConeheadZombie_2.png b/EXE version/main/resources/graphics/Zombies/ConeheadZombie/ConeheadZombie/ConeheadZombie_2.png new file mode 100644 index 00000000..4272d89e Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/ConeheadZombie/ConeheadZombie/ConeheadZombie_2.png differ diff --git a/EXE version/main/resources/graphics/Zombies/ConeheadZombie/ConeheadZombie/ConeheadZombie_20.png b/EXE version/main/resources/graphics/Zombies/ConeheadZombie/ConeheadZombie/ConeheadZombie_20.png new file mode 100644 index 00000000..c84bd948 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/ConeheadZombie/ConeheadZombie/ConeheadZombie_20.png differ diff --git a/EXE version/main/resources/graphics/Zombies/ConeheadZombie/ConeheadZombie/ConeheadZombie_3.png b/EXE version/main/resources/graphics/Zombies/ConeheadZombie/ConeheadZombie/ConeheadZombie_3.png new file mode 100644 index 00000000..81a6104e Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/ConeheadZombie/ConeheadZombie/ConeheadZombie_3.png differ diff --git a/EXE version/main/resources/graphics/Zombies/ConeheadZombie/ConeheadZombie/ConeheadZombie_4.png b/EXE version/main/resources/graphics/Zombies/ConeheadZombie/ConeheadZombie/ConeheadZombie_4.png new file mode 100644 index 00000000..34dfa04c Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/ConeheadZombie/ConeheadZombie/ConeheadZombie_4.png differ diff --git a/EXE version/main/resources/graphics/Zombies/ConeheadZombie/ConeheadZombie/ConeheadZombie_5.png b/EXE version/main/resources/graphics/Zombies/ConeheadZombie/ConeheadZombie/ConeheadZombie_5.png new file mode 100644 index 00000000..81fee659 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/ConeheadZombie/ConeheadZombie/ConeheadZombie_5.png differ diff --git a/EXE version/main/resources/graphics/Zombies/ConeheadZombie/ConeheadZombie/ConeheadZombie_6.png b/EXE version/main/resources/graphics/Zombies/ConeheadZombie/ConeheadZombie/ConeheadZombie_6.png new file mode 100644 index 00000000..2e6a766f Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/ConeheadZombie/ConeheadZombie/ConeheadZombie_6.png differ diff --git a/EXE version/main/resources/graphics/Zombies/ConeheadZombie/ConeheadZombie/ConeheadZombie_7.png b/EXE version/main/resources/graphics/Zombies/ConeheadZombie/ConeheadZombie/ConeheadZombie_7.png new file mode 100644 index 00000000..d4d9300a Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/ConeheadZombie/ConeheadZombie/ConeheadZombie_7.png differ diff --git a/EXE version/main/resources/graphics/Zombies/ConeheadZombie/ConeheadZombie/ConeheadZombie_8.png b/EXE version/main/resources/graphics/Zombies/ConeheadZombie/ConeheadZombie/ConeheadZombie_8.png new file mode 100644 index 00000000..55af494c Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/ConeheadZombie/ConeheadZombie/ConeheadZombie_8.png differ diff --git a/EXE version/main/resources/graphics/Zombies/ConeheadZombie/ConeheadZombie/ConeheadZombie_9.png b/EXE version/main/resources/graphics/Zombies/ConeheadZombie/ConeheadZombie/ConeheadZombie_9.png new file mode 100644 index 00000000..16fb9efe Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/ConeheadZombie/ConeheadZombie/ConeheadZombie_9.png differ diff --git a/EXE version/main/resources/graphics/Zombies/ConeheadZombie/ConeheadZombieAttack/ConeheadZombieAttack_0.png b/EXE version/main/resources/graphics/Zombies/ConeheadZombie/ConeheadZombieAttack/ConeheadZombieAttack_0.png new file mode 100644 index 00000000..f82d4cf2 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/ConeheadZombie/ConeheadZombieAttack/ConeheadZombieAttack_0.png differ diff --git a/EXE version/main/resources/graphics/Zombies/ConeheadZombie/ConeheadZombieAttack/ConeheadZombieAttack_1.png b/EXE version/main/resources/graphics/Zombies/ConeheadZombie/ConeheadZombieAttack/ConeheadZombieAttack_1.png new file mode 100644 index 00000000..c120c224 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/ConeheadZombie/ConeheadZombieAttack/ConeheadZombieAttack_1.png differ diff --git a/EXE version/main/resources/graphics/Zombies/ConeheadZombie/ConeheadZombieAttack/ConeheadZombieAttack_10.png b/EXE version/main/resources/graphics/Zombies/ConeheadZombie/ConeheadZombieAttack/ConeheadZombieAttack_10.png new file mode 100644 index 00000000..94c122b7 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/ConeheadZombie/ConeheadZombieAttack/ConeheadZombieAttack_10.png differ diff --git a/EXE version/main/resources/graphics/Zombies/ConeheadZombie/ConeheadZombieAttack/ConeheadZombieAttack_2.png b/EXE version/main/resources/graphics/Zombies/ConeheadZombie/ConeheadZombieAttack/ConeheadZombieAttack_2.png new file mode 100644 index 00000000..962feee2 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/ConeheadZombie/ConeheadZombieAttack/ConeheadZombieAttack_2.png differ diff --git a/EXE version/main/resources/graphics/Zombies/ConeheadZombie/ConeheadZombieAttack/ConeheadZombieAttack_3.png b/EXE version/main/resources/graphics/Zombies/ConeheadZombie/ConeheadZombieAttack/ConeheadZombieAttack_3.png new file mode 100644 index 00000000..d8c09fa3 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/ConeheadZombie/ConeheadZombieAttack/ConeheadZombieAttack_3.png differ diff --git a/EXE version/main/resources/graphics/Zombies/ConeheadZombie/ConeheadZombieAttack/ConeheadZombieAttack_4.png b/EXE version/main/resources/graphics/Zombies/ConeheadZombie/ConeheadZombieAttack/ConeheadZombieAttack_4.png new file mode 100644 index 00000000..0f357aa6 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/ConeheadZombie/ConeheadZombieAttack/ConeheadZombieAttack_4.png differ diff --git a/EXE version/main/resources/graphics/Zombies/ConeheadZombie/ConeheadZombieAttack/ConeheadZombieAttack_5.png b/EXE version/main/resources/graphics/Zombies/ConeheadZombie/ConeheadZombieAttack/ConeheadZombieAttack_5.png new file mode 100644 index 00000000..3ed7f36b Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/ConeheadZombie/ConeheadZombieAttack/ConeheadZombieAttack_5.png differ diff --git a/EXE version/main/resources/graphics/Zombies/ConeheadZombie/ConeheadZombieAttack/ConeheadZombieAttack_6.png b/EXE version/main/resources/graphics/Zombies/ConeheadZombie/ConeheadZombieAttack/ConeheadZombieAttack_6.png new file mode 100644 index 00000000..fb9f8278 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/ConeheadZombie/ConeheadZombieAttack/ConeheadZombieAttack_6.png differ diff --git a/EXE version/main/resources/graphics/Zombies/ConeheadZombie/ConeheadZombieAttack/ConeheadZombieAttack_7.png b/EXE version/main/resources/graphics/Zombies/ConeheadZombie/ConeheadZombieAttack/ConeheadZombieAttack_7.png new file mode 100644 index 00000000..eb8f4984 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/ConeheadZombie/ConeheadZombieAttack/ConeheadZombieAttack_7.png differ diff --git a/EXE version/main/resources/graphics/Zombies/ConeheadZombie/ConeheadZombieAttack/ConeheadZombieAttack_8.png b/EXE version/main/resources/graphics/Zombies/ConeheadZombie/ConeheadZombieAttack/ConeheadZombieAttack_8.png new file mode 100644 index 00000000..d0e87cab Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/ConeheadZombie/ConeheadZombieAttack/ConeheadZombieAttack_8.png differ diff --git a/EXE version/main/resources/graphics/Zombies/ConeheadZombie/ConeheadZombieAttack/ConeheadZombieAttack_9.png b/EXE version/main/resources/graphics/Zombies/ConeheadZombie/ConeheadZombieAttack/ConeheadZombieAttack_9.png new file mode 100644 index 00000000..8321a061 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/ConeheadZombie/ConeheadZombieAttack/ConeheadZombieAttack_9.png differ diff --git a/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombie/FlagZombie_0.png b/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombie/FlagZombie_0.png new file mode 100644 index 00000000..4c9c9066 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombie/FlagZombie_0.png differ diff --git a/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombie/FlagZombie_1.png b/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombie/FlagZombie_1.png new file mode 100644 index 00000000..2e9ee099 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombie/FlagZombie_1.png differ diff --git a/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombie/FlagZombie_10.png b/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombie/FlagZombie_10.png new file mode 100644 index 00000000..2bffc8c2 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombie/FlagZombie_10.png differ diff --git a/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombie/FlagZombie_11.png b/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombie/FlagZombie_11.png new file mode 100644 index 00000000..b0e2656e Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombie/FlagZombie_11.png differ diff --git a/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombie/FlagZombie_2.png b/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombie/FlagZombie_2.png new file mode 100644 index 00000000..0d14f702 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombie/FlagZombie_2.png differ diff --git a/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombie/FlagZombie_3.png b/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombie/FlagZombie_3.png new file mode 100644 index 00000000..123498bb Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombie/FlagZombie_3.png differ diff --git a/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombie/FlagZombie_4.png b/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombie/FlagZombie_4.png new file mode 100644 index 00000000..6fd048e2 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombie/FlagZombie_4.png differ diff --git a/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombie/FlagZombie_5.png b/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombie/FlagZombie_5.png new file mode 100644 index 00000000..cfcc9933 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombie/FlagZombie_5.png differ diff --git a/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombie/FlagZombie_6.png b/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombie/FlagZombie_6.png new file mode 100644 index 00000000..57190e45 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombie/FlagZombie_6.png differ diff --git a/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombie/FlagZombie_7.png b/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombie/FlagZombie_7.png new file mode 100644 index 00000000..56cdffb0 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombie/FlagZombie_7.png differ diff --git a/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombie/FlagZombie_8.png b/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombie/FlagZombie_8.png new file mode 100644 index 00000000..fd72dcb3 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombie/FlagZombie_8.png differ diff --git a/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombie/FlagZombie_9.png b/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombie/FlagZombie_9.png new file mode 100644 index 00000000..725e120d Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombie/FlagZombie_9.png differ diff --git a/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombieAttack/FlagZombieAttack_0.png b/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombieAttack/FlagZombieAttack_0.png new file mode 100644 index 00000000..9d6b4a18 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombieAttack/FlagZombieAttack_0.png differ diff --git a/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombieAttack/FlagZombieAttack_1.png b/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombieAttack/FlagZombieAttack_1.png new file mode 100644 index 00000000..8c8e8617 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombieAttack/FlagZombieAttack_1.png differ diff --git a/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombieAttack/FlagZombieAttack_10.png b/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombieAttack/FlagZombieAttack_10.png new file mode 100644 index 00000000..4002b07c Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombieAttack/FlagZombieAttack_10.png differ diff --git a/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombieAttack/FlagZombieAttack_2.png b/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombieAttack/FlagZombieAttack_2.png new file mode 100644 index 00000000..06785236 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombieAttack/FlagZombieAttack_2.png differ diff --git a/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombieAttack/FlagZombieAttack_3.png b/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombieAttack/FlagZombieAttack_3.png new file mode 100644 index 00000000..6288f9c1 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombieAttack/FlagZombieAttack_3.png differ diff --git a/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombieAttack/FlagZombieAttack_4.png b/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombieAttack/FlagZombieAttack_4.png new file mode 100644 index 00000000..484a2277 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombieAttack/FlagZombieAttack_4.png differ diff --git a/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombieAttack/FlagZombieAttack_5.png b/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombieAttack/FlagZombieAttack_5.png new file mode 100644 index 00000000..d7d59363 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombieAttack/FlagZombieAttack_5.png differ diff --git a/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombieAttack/FlagZombieAttack_6.png b/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombieAttack/FlagZombieAttack_6.png new file mode 100644 index 00000000..c2c68df7 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombieAttack/FlagZombieAttack_6.png differ diff --git a/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombieAttack/FlagZombieAttack_7.png b/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombieAttack/FlagZombieAttack_7.png new file mode 100644 index 00000000..5a855559 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombieAttack/FlagZombieAttack_7.png differ diff --git a/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombieAttack/FlagZombieAttack_8.png b/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombieAttack/FlagZombieAttack_8.png new file mode 100644 index 00000000..88cbc5fe Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombieAttack/FlagZombieAttack_8.png differ diff --git a/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombieAttack/FlagZombieAttack_9.png b/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombieAttack/FlagZombieAttack_9.png new file mode 100644 index 00000000..77297548 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombieAttack/FlagZombieAttack_9.png differ diff --git a/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombieLostHead/FlagZombieLostHead_0.png b/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombieLostHead/FlagZombieLostHead_0.png new file mode 100644 index 00000000..29460ea9 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombieLostHead/FlagZombieLostHead_0.png differ diff --git a/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombieLostHead/FlagZombieLostHead_1.png b/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombieLostHead/FlagZombieLostHead_1.png new file mode 100644 index 00000000..379a8dc7 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombieLostHead/FlagZombieLostHead_1.png differ diff --git a/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombieLostHead/FlagZombieLostHead_10.png b/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombieLostHead/FlagZombieLostHead_10.png new file mode 100644 index 00000000..be1fe97f Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombieLostHead/FlagZombieLostHead_10.png differ diff --git a/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombieLostHead/FlagZombieLostHead_11.png b/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombieLostHead/FlagZombieLostHead_11.png new file mode 100644 index 00000000..16f4fc87 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombieLostHead/FlagZombieLostHead_11.png differ diff --git a/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombieLostHead/FlagZombieLostHead_2.png b/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombieLostHead/FlagZombieLostHead_2.png new file mode 100644 index 00000000..2d314872 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombieLostHead/FlagZombieLostHead_2.png differ diff --git a/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombieLostHead/FlagZombieLostHead_3.png b/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombieLostHead/FlagZombieLostHead_3.png new file mode 100644 index 00000000..6990d217 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombieLostHead/FlagZombieLostHead_3.png differ diff --git a/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombieLostHead/FlagZombieLostHead_4.png b/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombieLostHead/FlagZombieLostHead_4.png new file mode 100644 index 00000000..f155716f Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombieLostHead/FlagZombieLostHead_4.png differ diff --git a/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombieLostHead/FlagZombieLostHead_5.png b/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombieLostHead/FlagZombieLostHead_5.png new file mode 100644 index 00000000..d0baab76 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombieLostHead/FlagZombieLostHead_5.png differ diff --git a/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombieLostHead/FlagZombieLostHead_6.png b/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombieLostHead/FlagZombieLostHead_6.png new file mode 100644 index 00000000..e651c6fb Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombieLostHead/FlagZombieLostHead_6.png differ diff --git a/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombieLostHead/FlagZombieLostHead_7.png b/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombieLostHead/FlagZombieLostHead_7.png new file mode 100644 index 00000000..8877a74c Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombieLostHead/FlagZombieLostHead_7.png differ diff --git a/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombieLostHead/FlagZombieLostHead_8.png b/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombieLostHead/FlagZombieLostHead_8.png new file mode 100644 index 00000000..2e2f475c Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombieLostHead/FlagZombieLostHead_8.png differ diff --git a/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombieLostHead/FlagZombieLostHead_9.png b/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombieLostHead/FlagZombieLostHead_9.png new file mode 100644 index 00000000..19652e35 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombieLostHead/FlagZombieLostHead_9.png differ diff --git a/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombieLostHeadAttack/FlagZombieLostHeadAttack_0.png b/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombieLostHeadAttack/FlagZombieLostHeadAttack_0.png new file mode 100644 index 00000000..494a4647 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombieLostHeadAttack/FlagZombieLostHeadAttack_0.png differ diff --git a/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombieLostHeadAttack/FlagZombieLostHeadAttack_1.png b/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombieLostHeadAttack/FlagZombieLostHeadAttack_1.png new file mode 100644 index 00000000..fe2cb322 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombieLostHeadAttack/FlagZombieLostHeadAttack_1.png differ diff --git a/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombieLostHeadAttack/FlagZombieLostHeadAttack_10.png b/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombieLostHeadAttack/FlagZombieLostHeadAttack_10.png new file mode 100644 index 00000000..0556bb88 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombieLostHeadAttack/FlagZombieLostHeadAttack_10.png differ diff --git a/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombieLostHeadAttack/FlagZombieLostHeadAttack_2.png b/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombieLostHeadAttack/FlagZombieLostHeadAttack_2.png new file mode 100644 index 00000000..14b26aaf Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombieLostHeadAttack/FlagZombieLostHeadAttack_2.png differ diff --git a/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombieLostHeadAttack/FlagZombieLostHeadAttack_3.png b/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombieLostHeadAttack/FlagZombieLostHeadAttack_3.png new file mode 100644 index 00000000..a19f5caf Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombieLostHeadAttack/FlagZombieLostHeadAttack_3.png differ diff --git a/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombieLostHeadAttack/FlagZombieLostHeadAttack_4.png b/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombieLostHeadAttack/FlagZombieLostHeadAttack_4.png new file mode 100644 index 00000000..9b8d2aed Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombieLostHeadAttack/FlagZombieLostHeadAttack_4.png differ diff --git a/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombieLostHeadAttack/FlagZombieLostHeadAttack_5.png b/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombieLostHeadAttack/FlagZombieLostHeadAttack_5.png new file mode 100644 index 00000000..98f8376e Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombieLostHeadAttack/FlagZombieLostHeadAttack_5.png differ diff --git a/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombieLostHeadAttack/FlagZombieLostHeadAttack_6.png b/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombieLostHeadAttack/FlagZombieLostHeadAttack_6.png new file mode 100644 index 00000000..18935e06 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombieLostHeadAttack/FlagZombieLostHeadAttack_6.png differ diff --git a/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombieLostHeadAttack/FlagZombieLostHeadAttack_7.png b/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombieLostHeadAttack/FlagZombieLostHeadAttack_7.png new file mode 100644 index 00000000..b7324674 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombieLostHeadAttack/FlagZombieLostHeadAttack_7.png differ diff --git a/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombieLostHeadAttack/FlagZombieLostHeadAttack_8.png b/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombieLostHeadAttack/FlagZombieLostHeadAttack_8.png new file mode 100644 index 00000000..58fd7cc7 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombieLostHeadAttack/FlagZombieLostHeadAttack_8.png differ diff --git a/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombieLostHeadAttack/FlagZombieLostHeadAttack_9.png b/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombieLostHeadAttack/FlagZombieLostHeadAttack_9.png new file mode 100644 index 00000000..619ebd12 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/FlagZombie/FlagZombieLostHeadAttack/FlagZombieLostHeadAttack_9.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombie/NewspaperZombie_0.png b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombie/NewspaperZombie_0.png new file mode 100644 index 00000000..5c4a0d77 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombie/NewspaperZombie_0.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombie/NewspaperZombie_1.png b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombie/NewspaperZombie_1.png new file mode 100644 index 00000000..87284994 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombie/NewspaperZombie_1.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombie/NewspaperZombie_10.png b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombie/NewspaperZombie_10.png new file mode 100644 index 00000000..036e17d7 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombie/NewspaperZombie_10.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombie/NewspaperZombie_11.png b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombie/NewspaperZombie_11.png new file mode 100644 index 00000000..eca85e6b Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombie/NewspaperZombie_11.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombie/NewspaperZombie_12.png b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombie/NewspaperZombie_12.png new file mode 100644 index 00000000..b2fc8b46 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombie/NewspaperZombie_12.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombie/NewspaperZombie_13.png b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombie/NewspaperZombie_13.png new file mode 100644 index 00000000..3c135ec1 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombie/NewspaperZombie_13.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombie/NewspaperZombie_14.png b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombie/NewspaperZombie_14.png new file mode 100644 index 00000000..76762ed0 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombie/NewspaperZombie_14.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombie/NewspaperZombie_15.png b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombie/NewspaperZombie_15.png new file mode 100644 index 00000000..881f5ea3 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombie/NewspaperZombie_15.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombie/NewspaperZombie_16.png b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombie/NewspaperZombie_16.png new file mode 100644 index 00000000..f32cf63c Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombie/NewspaperZombie_16.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombie/NewspaperZombie_17.png b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombie/NewspaperZombie_17.png new file mode 100644 index 00000000..928c72e9 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombie/NewspaperZombie_17.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombie/NewspaperZombie_18.png b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombie/NewspaperZombie_18.png new file mode 100644 index 00000000..2cdc9924 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombie/NewspaperZombie_18.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombie/NewspaperZombie_2.png b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombie/NewspaperZombie_2.png new file mode 100644 index 00000000..f14938c2 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombie/NewspaperZombie_2.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombie/NewspaperZombie_3.png b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombie/NewspaperZombie_3.png new file mode 100644 index 00000000..5b430a22 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombie/NewspaperZombie_3.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombie/NewspaperZombie_4.png b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombie/NewspaperZombie_4.png new file mode 100644 index 00000000..a5c8a0a3 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombie/NewspaperZombie_4.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombie/NewspaperZombie_5.png b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombie/NewspaperZombie_5.png new file mode 100644 index 00000000..985c91e7 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombie/NewspaperZombie_5.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombie/NewspaperZombie_6.png b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombie/NewspaperZombie_6.png new file mode 100644 index 00000000..c75546ee Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombie/NewspaperZombie_6.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombie/NewspaperZombie_7.png b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombie/NewspaperZombie_7.png new file mode 100644 index 00000000..e3b7359f Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombie/NewspaperZombie_7.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombie/NewspaperZombie_8.png b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombie/NewspaperZombie_8.png new file mode 100644 index 00000000..70a66aaa Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombie/NewspaperZombie_8.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombie/NewspaperZombie_9.png b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombie/NewspaperZombie_9.png new file mode 100644 index 00000000..b75e2b7a Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombie/NewspaperZombie_9.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieAttack/NewspaperZombieAttack_0.png b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieAttack/NewspaperZombieAttack_0.png new file mode 100644 index 00000000..2d1f097c Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieAttack/NewspaperZombieAttack_0.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieAttack/NewspaperZombieAttack_1.png b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieAttack/NewspaperZombieAttack_1.png new file mode 100644 index 00000000..495bd200 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieAttack/NewspaperZombieAttack_1.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieAttack/NewspaperZombieAttack_2.png b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieAttack/NewspaperZombieAttack_2.png new file mode 100644 index 00000000..9f92ddee Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieAttack/NewspaperZombieAttack_2.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieAttack/NewspaperZombieAttack_3.png b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieAttack/NewspaperZombieAttack_3.png new file mode 100644 index 00000000..eee0cfdb Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieAttack/NewspaperZombieAttack_3.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieAttack/NewspaperZombieAttack_4.png b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieAttack/NewspaperZombieAttack_4.png new file mode 100644 index 00000000..05928f77 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieAttack/NewspaperZombieAttack_4.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieAttack/NewspaperZombieAttack_5.png b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieAttack/NewspaperZombieAttack_5.png new file mode 100644 index 00000000..84a381e3 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieAttack/NewspaperZombieAttack_5.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieAttack/NewspaperZombieAttack_6.png b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieAttack/NewspaperZombieAttack_6.png new file mode 100644 index 00000000..19459701 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieAttack/NewspaperZombieAttack_6.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieAttack/NewspaperZombieAttack_7.png b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieAttack/NewspaperZombieAttack_7.png new file mode 100644 index 00000000..7c2e88cf Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieAttack/NewspaperZombieAttack_7.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieDie/NewspaperZombieDie_0.png b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieDie/NewspaperZombieDie_0.png new file mode 100644 index 00000000..4a033e76 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieDie/NewspaperZombieDie_0.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieDie/NewspaperZombieDie_1.png b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieDie/NewspaperZombieDie_1.png new file mode 100644 index 00000000..df80a354 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieDie/NewspaperZombieDie_1.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieDie/NewspaperZombieDie_10.png b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieDie/NewspaperZombieDie_10.png new file mode 100644 index 00000000..e5c7583c Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieDie/NewspaperZombieDie_10.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieDie/NewspaperZombieDie_2.png b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieDie/NewspaperZombieDie_2.png new file mode 100644 index 00000000..5269fdff Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieDie/NewspaperZombieDie_2.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieDie/NewspaperZombieDie_3.png b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieDie/NewspaperZombieDie_3.png new file mode 100644 index 00000000..033ecc64 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieDie/NewspaperZombieDie_3.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieDie/NewspaperZombieDie_4.png b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieDie/NewspaperZombieDie_4.png new file mode 100644 index 00000000..033ecc64 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieDie/NewspaperZombieDie_4.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieDie/NewspaperZombieDie_5.png b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieDie/NewspaperZombieDie_5.png new file mode 100644 index 00000000..09f6f392 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieDie/NewspaperZombieDie_5.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieDie/NewspaperZombieDie_6.png b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieDie/NewspaperZombieDie_6.png new file mode 100644 index 00000000..21374ddd Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieDie/NewspaperZombieDie_6.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieDie/NewspaperZombieDie_7.png b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieDie/NewspaperZombieDie_7.png new file mode 100644 index 00000000..a486ee6f Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieDie/NewspaperZombieDie_7.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieDie/NewspaperZombieDie_8.png b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieDie/NewspaperZombieDie_8.png new file mode 100644 index 00000000..a486ee6f Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieDie/NewspaperZombieDie_8.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieDie/NewspaperZombieDie_9.png b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieDie/NewspaperZombieDie_9.png new file mode 100644 index 00000000..0dbe4f48 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieDie/NewspaperZombieDie_9.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieLostHead/NewspaperZombieLostHead_0.png b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieLostHead/NewspaperZombieLostHead_0.png new file mode 100644 index 00000000..f6414a99 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieLostHead/NewspaperZombieLostHead_0.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieLostHead/NewspaperZombieLostHead_1.png b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieLostHead/NewspaperZombieLostHead_1.png new file mode 100644 index 00000000..f6414a99 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieLostHead/NewspaperZombieLostHead_1.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieLostHead/NewspaperZombieLostHead_10.png b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieLostHead/NewspaperZombieLostHead_10.png new file mode 100644 index 00000000..0669d43c Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieLostHead/NewspaperZombieLostHead_10.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieLostHead/NewspaperZombieLostHead_11.png b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieLostHead/NewspaperZombieLostHead_11.png new file mode 100644 index 00000000..bcca03be Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieLostHead/NewspaperZombieLostHead_11.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieLostHead/NewspaperZombieLostHead_12.png b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieLostHead/NewspaperZombieLostHead_12.png new file mode 100644 index 00000000..4c12286a Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieLostHead/NewspaperZombieLostHead_12.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieLostHead/NewspaperZombieLostHead_13.png b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieLostHead/NewspaperZombieLostHead_13.png new file mode 100644 index 00000000..c550703f Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieLostHead/NewspaperZombieLostHead_13.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieLostHead/NewspaperZombieLostHead_14.png b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieLostHead/NewspaperZombieLostHead_14.png new file mode 100644 index 00000000..b24872b7 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieLostHead/NewspaperZombieLostHead_14.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieLostHead/NewspaperZombieLostHead_15.png b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieLostHead/NewspaperZombieLostHead_15.png new file mode 100644 index 00000000..c64ab012 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieLostHead/NewspaperZombieLostHead_15.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieLostHead/NewspaperZombieLostHead_2.png b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieLostHead/NewspaperZombieLostHead_2.png new file mode 100644 index 00000000..a149ca98 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieLostHead/NewspaperZombieLostHead_2.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieLostHead/NewspaperZombieLostHead_3.png b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieLostHead/NewspaperZombieLostHead_3.png new file mode 100644 index 00000000..185d297c Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieLostHead/NewspaperZombieLostHead_3.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieLostHead/NewspaperZombieLostHead_4.png b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieLostHead/NewspaperZombieLostHead_4.png new file mode 100644 index 00000000..ba475400 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieLostHead/NewspaperZombieLostHead_4.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieLostHead/NewspaperZombieLostHead_5.png b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieLostHead/NewspaperZombieLostHead_5.png new file mode 100644 index 00000000..3a86a12e Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieLostHead/NewspaperZombieLostHead_5.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieLostHead/NewspaperZombieLostHead_6.png b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieLostHead/NewspaperZombieLostHead_6.png new file mode 100644 index 00000000..e3beb84e Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieLostHead/NewspaperZombieLostHead_6.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieLostHead/NewspaperZombieLostHead_7.png b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieLostHead/NewspaperZombieLostHead_7.png new file mode 100644 index 00000000..2f85a781 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieLostHead/NewspaperZombieLostHead_7.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieLostHead/NewspaperZombieLostHead_8.png b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieLostHead/NewspaperZombieLostHead_8.png new file mode 100644 index 00000000..e24c1046 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieLostHead/NewspaperZombieLostHead_8.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieLostHead/NewspaperZombieLostHead_9.png b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieLostHead/NewspaperZombieLostHead_9.png new file mode 100644 index 00000000..87429e18 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieLostHead/NewspaperZombieLostHead_9.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieLostHeadAttack/NewspaperZombieLostHeadAttack_0.png b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieLostHeadAttack/NewspaperZombieLostHeadAttack_0.png new file mode 100644 index 00000000..1720cd91 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieLostHeadAttack/NewspaperZombieLostHeadAttack_0.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieLostHeadAttack/NewspaperZombieLostHeadAttack_1.png b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieLostHeadAttack/NewspaperZombieLostHeadAttack_1.png new file mode 100644 index 00000000..3689fab5 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieLostHeadAttack/NewspaperZombieLostHeadAttack_1.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieLostHeadAttack/NewspaperZombieLostHeadAttack_2.png b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieLostHeadAttack/NewspaperZombieLostHeadAttack_2.png new file mode 100644 index 00000000..ed0303f2 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieLostHeadAttack/NewspaperZombieLostHeadAttack_2.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieLostHeadAttack/NewspaperZombieLostHeadAttack_3.png b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieLostHeadAttack/NewspaperZombieLostHeadAttack_3.png new file mode 100644 index 00000000..795e932c Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieLostHeadAttack/NewspaperZombieLostHeadAttack_3.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieLostHeadAttack/NewspaperZombieLostHeadAttack_4.png b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieLostHeadAttack/NewspaperZombieLostHeadAttack_4.png new file mode 100644 index 00000000..deafa998 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieLostHeadAttack/NewspaperZombieLostHeadAttack_4.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieLostHeadAttack/NewspaperZombieLostHeadAttack_5.png b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieLostHeadAttack/NewspaperZombieLostHeadAttack_5.png new file mode 100644 index 00000000..280c177b Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieLostHeadAttack/NewspaperZombieLostHeadAttack_5.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieLostHeadAttack/NewspaperZombieLostHeadAttack_6.png b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieLostHeadAttack/NewspaperZombieLostHeadAttack_6.png new file mode 100644 index 00000000..f2b9a313 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieLostHeadAttack/NewspaperZombieLostHeadAttack_6.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieNoPaper/NewspaperZombieNoPaper_0.png b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieNoPaper/NewspaperZombieNoPaper_0.png new file mode 100644 index 00000000..c7e638ae Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieNoPaper/NewspaperZombieNoPaper_0.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieNoPaper/NewspaperZombieNoPaper_1.png b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieNoPaper/NewspaperZombieNoPaper_1.png new file mode 100644 index 00000000..492e1472 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieNoPaper/NewspaperZombieNoPaper_1.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieNoPaper/NewspaperZombieNoPaper_10.png b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieNoPaper/NewspaperZombieNoPaper_10.png new file mode 100644 index 00000000..e00f9618 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieNoPaper/NewspaperZombieNoPaper_10.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieNoPaper/NewspaperZombieNoPaper_11.png b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieNoPaper/NewspaperZombieNoPaper_11.png new file mode 100644 index 00000000..31e0e52f Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieNoPaper/NewspaperZombieNoPaper_11.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieNoPaper/NewspaperZombieNoPaper_12.png b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieNoPaper/NewspaperZombieNoPaper_12.png new file mode 100644 index 00000000..a25e90e8 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieNoPaper/NewspaperZombieNoPaper_12.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieNoPaper/NewspaperZombieNoPaper_13.png b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieNoPaper/NewspaperZombieNoPaper_13.png new file mode 100644 index 00000000..7776e8ad Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieNoPaper/NewspaperZombieNoPaper_13.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieNoPaper/NewspaperZombieNoPaper_2.png b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieNoPaper/NewspaperZombieNoPaper_2.png new file mode 100644 index 00000000..c2584a68 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieNoPaper/NewspaperZombieNoPaper_2.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieNoPaper/NewspaperZombieNoPaper_3.png b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieNoPaper/NewspaperZombieNoPaper_3.png new file mode 100644 index 00000000..b274f755 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieNoPaper/NewspaperZombieNoPaper_3.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieNoPaper/NewspaperZombieNoPaper_4.png b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieNoPaper/NewspaperZombieNoPaper_4.png new file mode 100644 index 00000000..a3a36f0a Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieNoPaper/NewspaperZombieNoPaper_4.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieNoPaper/NewspaperZombieNoPaper_5.png b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieNoPaper/NewspaperZombieNoPaper_5.png new file mode 100644 index 00000000..1c997069 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieNoPaper/NewspaperZombieNoPaper_5.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieNoPaper/NewspaperZombieNoPaper_6.png b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieNoPaper/NewspaperZombieNoPaper_6.png new file mode 100644 index 00000000..efcc4936 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieNoPaper/NewspaperZombieNoPaper_6.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieNoPaper/NewspaperZombieNoPaper_7.png b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieNoPaper/NewspaperZombieNoPaper_7.png new file mode 100644 index 00000000..3496cf57 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieNoPaper/NewspaperZombieNoPaper_7.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieNoPaper/NewspaperZombieNoPaper_8.png b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieNoPaper/NewspaperZombieNoPaper_8.png new file mode 100644 index 00000000..666b106a Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieNoPaper/NewspaperZombieNoPaper_8.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieNoPaper/NewspaperZombieNoPaper_9.png b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieNoPaper/NewspaperZombieNoPaper_9.png new file mode 100644 index 00000000..252c33da Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieNoPaper/NewspaperZombieNoPaper_9.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieNoPaperAttack/NewspaperZombieNoPaperAttack_0.png b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieNoPaperAttack/NewspaperZombieNoPaperAttack_0.png new file mode 100644 index 00000000..60d92987 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieNoPaperAttack/NewspaperZombieNoPaperAttack_0.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieNoPaperAttack/NewspaperZombieNoPaperAttack_1.png b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieNoPaperAttack/NewspaperZombieNoPaperAttack_1.png new file mode 100644 index 00000000..30203872 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieNoPaperAttack/NewspaperZombieNoPaperAttack_1.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieNoPaperAttack/NewspaperZombieNoPaperAttack_2.png b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieNoPaperAttack/NewspaperZombieNoPaperAttack_2.png new file mode 100644 index 00000000..71516813 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieNoPaperAttack/NewspaperZombieNoPaperAttack_2.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieNoPaperAttack/NewspaperZombieNoPaperAttack_3.png b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieNoPaperAttack/NewspaperZombieNoPaperAttack_3.png new file mode 100644 index 00000000..0ab9bfe2 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieNoPaperAttack/NewspaperZombieNoPaperAttack_3.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieNoPaperAttack/NewspaperZombieNoPaperAttack_4.png b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieNoPaperAttack/NewspaperZombieNoPaperAttack_4.png new file mode 100644 index 00000000..e4b8ff55 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieNoPaperAttack/NewspaperZombieNoPaperAttack_4.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieNoPaperAttack/NewspaperZombieNoPaperAttack_5.png b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieNoPaperAttack/NewspaperZombieNoPaperAttack_5.png new file mode 100644 index 00000000..f603e86b Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieNoPaperAttack/NewspaperZombieNoPaperAttack_5.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieNoPaperAttack/NewspaperZombieNoPaperAttack_6.png b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieNoPaperAttack/NewspaperZombieNoPaperAttack_6.png new file mode 100644 index 00000000..d3c28b43 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NewspaperZombie/NewspaperZombieNoPaperAttack/NewspaperZombieNoPaperAttack_6.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/BoomDie/BoomDie_0.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/BoomDie/BoomDie_0.png new file mode 100644 index 00000000..7fce7366 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/BoomDie/BoomDie_0.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/BoomDie/BoomDie_1.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/BoomDie/BoomDie_1.png new file mode 100644 index 00000000..71aed22c Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/BoomDie/BoomDie_1.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/BoomDie/BoomDie_10.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/BoomDie/BoomDie_10.png new file mode 100644 index 00000000..34135925 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/BoomDie/BoomDie_10.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/BoomDie/BoomDie_11.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/BoomDie/BoomDie_11.png new file mode 100644 index 00000000..3b316cea Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/BoomDie/BoomDie_11.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/BoomDie/BoomDie_12.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/BoomDie/BoomDie_12.png new file mode 100644 index 00000000..17d2eee3 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/BoomDie/BoomDie_12.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/BoomDie/BoomDie_13.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/BoomDie/BoomDie_13.png new file mode 100644 index 00000000..bd913423 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/BoomDie/BoomDie_13.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/BoomDie/BoomDie_14.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/BoomDie/BoomDie_14.png new file mode 100644 index 00000000..34e07db8 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/BoomDie/BoomDie_14.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/BoomDie/BoomDie_15.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/BoomDie/BoomDie_15.png new file mode 100644 index 00000000..ef229398 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/BoomDie/BoomDie_15.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/BoomDie/BoomDie_16.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/BoomDie/BoomDie_16.png new file mode 100644 index 00000000..db716a58 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/BoomDie/BoomDie_16.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/BoomDie/BoomDie_17.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/BoomDie/BoomDie_17.png new file mode 100644 index 00000000..67d885af Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/BoomDie/BoomDie_17.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/BoomDie/BoomDie_18.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/BoomDie/BoomDie_18.png new file mode 100644 index 00000000..9715aaa7 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/BoomDie/BoomDie_18.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/BoomDie/BoomDie_19.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/BoomDie/BoomDie_19.png new file mode 100644 index 00000000..f7371506 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/BoomDie/BoomDie_19.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/BoomDie/BoomDie_2.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/BoomDie/BoomDie_2.png new file mode 100644 index 00000000..141893bb Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/BoomDie/BoomDie_2.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/BoomDie/BoomDie_3.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/BoomDie/BoomDie_3.png new file mode 100644 index 00000000..7fce7366 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/BoomDie/BoomDie_3.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/BoomDie/BoomDie_4.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/BoomDie/BoomDie_4.png new file mode 100644 index 00000000..0e054dc4 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/BoomDie/BoomDie_4.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/BoomDie/BoomDie_5.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/BoomDie/BoomDie_5.png new file mode 100644 index 00000000..7fce7366 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/BoomDie/BoomDie_5.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/BoomDie/BoomDie_6.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/BoomDie/BoomDie_6.png new file mode 100644 index 00000000..86598676 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/BoomDie/BoomDie_6.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/BoomDie/BoomDie_7.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/BoomDie/BoomDie_7.png new file mode 100644 index 00000000..e6d85dee Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/BoomDie/BoomDie_7.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/BoomDie/BoomDie_8.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/BoomDie/BoomDie_8.png new file mode 100644 index 00000000..47265ea9 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/BoomDie/BoomDie_8.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/BoomDie/BoomDie_9.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/BoomDie/BoomDie_9.png new file mode 100644 index 00000000..1d428480 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/BoomDie/BoomDie_9.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/Zombie/Zombie_0.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/Zombie/Zombie_0.png new file mode 100644 index 00000000..7374d07d Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/Zombie/Zombie_0.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/Zombie/Zombie_1.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/Zombie/Zombie_1.png new file mode 100644 index 00000000..33f6a2aa Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/Zombie/Zombie_1.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/Zombie/Zombie_10.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/Zombie/Zombie_10.png new file mode 100644 index 00000000..2a824fcd Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/Zombie/Zombie_10.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/Zombie/Zombie_11.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/Zombie/Zombie_11.png new file mode 100644 index 00000000..230036e3 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/Zombie/Zombie_11.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/Zombie/Zombie_12.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/Zombie/Zombie_12.png new file mode 100644 index 00000000..0b7e9805 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/Zombie/Zombie_12.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/Zombie/Zombie_13.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/Zombie/Zombie_13.png new file mode 100644 index 00000000..f92fca2c Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/Zombie/Zombie_13.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/Zombie/Zombie_14.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/Zombie/Zombie_14.png new file mode 100644 index 00000000..4d28e18d Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/Zombie/Zombie_14.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/Zombie/Zombie_15.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/Zombie/Zombie_15.png new file mode 100644 index 00000000..4d28e18d Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/Zombie/Zombie_15.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/Zombie/Zombie_16.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/Zombie/Zombie_16.png new file mode 100644 index 00000000..465c8d89 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/Zombie/Zombie_16.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/Zombie/Zombie_17.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/Zombie/Zombie_17.png new file mode 100644 index 00000000..a91f9b2f Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/Zombie/Zombie_17.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/Zombie/Zombie_18.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/Zombie/Zombie_18.png new file mode 100644 index 00000000..ab1fd300 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/Zombie/Zombie_18.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/Zombie/Zombie_19.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/Zombie/Zombie_19.png new file mode 100644 index 00000000..ddbb66a0 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/Zombie/Zombie_19.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/Zombie/Zombie_2.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/Zombie/Zombie_2.png new file mode 100644 index 00000000..6ca00cbd Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/Zombie/Zombie_2.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/Zombie/Zombie_20.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/Zombie/Zombie_20.png new file mode 100644 index 00000000..b3b5df4d Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/Zombie/Zombie_20.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/Zombie/Zombie_21.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/Zombie/Zombie_21.png new file mode 100644 index 00000000..112043c7 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/Zombie/Zombie_21.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/Zombie/Zombie_3.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/Zombie/Zombie_3.png new file mode 100644 index 00000000..e8588a0f Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/Zombie/Zombie_3.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/Zombie/Zombie_4.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/Zombie/Zombie_4.png new file mode 100644 index 00000000..e10945a1 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/Zombie/Zombie_4.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/Zombie/Zombie_5.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/Zombie/Zombie_5.png new file mode 100644 index 00000000..6965abe0 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/Zombie/Zombie_5.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/Zombie/Zombie_6.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/Zombie/Zombie_6.png new file mode 100644 index 00000000..3d4914f6 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/Zombie/Zombie_6.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/Zombie/Zombie_7.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/Zombie/Zombie_7.png new file mode 100644 index 00000000..8fc2f8ab Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/Zombie/Zombie_7.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/Zombie/Zombie_8.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/Zombie/Zombie_8.png new file mode 100644 index 00000000..7f8a3ad0 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/Zombie/Zombie_8.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/Zombie/Zombie_9.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/Zombie/Zombie_9.png new file mode 100644 index 00000000..ac88d77e Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/Zombie/Zombie_9.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieAttack/ZombieAttack_0.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieAttack/ZombieAttack_0.png new file mode 100644 index 00000000..7d8a7099 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieAttack/ZombieAttack_0.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieAttack/ZombieAttack_1.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieAttack/ZombieAttack_1.png new file mode 100644 index 00000000..39b2e9cb Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieAttack/ZombieAttack_1.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieAttack/ZombieAttack_10.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieAttack/ZombieAttack_10.png new file mode 100644 index 00000000..e8cd3482 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieAttack/ZombieAttack_10.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieAttack/ZombieAttack_11.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieAttack/ZombieAttack_11.png new file mode 100644 index 00000000..6cf81b59 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieAttack/ZombieAttack_11.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieAttack/ZombieAttack_12.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieAttack/ZombieAttack_12.png new file mode 100644 index 00000000..a88abe26 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieAttack/ZombieAttack_12.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieAttack/ZombieAttack_13.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieAttack/ZombieAttack_13.png new file mode 100644 index 00000000..4b14e05f Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieAttack/ZombieAttack_13.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieAttack/ZombieAttack_14.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieAttack/ZombieAttack_14.png new file mode 100644 index 00000000..8d534db0 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieAttack/ZombieAttack_14.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieAttack/ZombieAttack_15.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieAttack/ZombieAttack_15.png new file mode 100644 index 00000000..7ef5ecea Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieAttack/ZombieAttack_15.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieAttack/ZombieAttack_16.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieAttack/ZombieAttack_16.png new file mode 100644 index 00000000..f865ce8a Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieAttack/ZombieAttack_16.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieAttack/ZombieAttack_17.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieAttack/ZombieAttack_17.png new file mode 100644 index 00000000..bf862d68 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieAttack/ZombieAttack_17.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieAttack/ZombieAttack_18.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieAttack/ZombieAttack_18.png new file mode 100644 index 00000000..2c79f7ae Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieAttack/ZombieAttack_18.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieAttack/ZombieAttack_19.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieAttack/ZombieAttack_19.png new file mode 100644 index 00000000..ba51fb4d Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieAttack/ZombieAttack_19.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieAttack/ZombieAttack_2.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieAttack/ZombieAttack_2.png new file mode 100644 index 00000000..28b7c67f Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieAttack/ZombieAttack_2.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieAttack/ZombieAttack_20.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieAttack/ZombieAttack_20.png new file mode 100644 index 00000000..c85832f7 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieAttack/ZombieAttack_20.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieAttack/ZombieAttack_3.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieAttack/ZombieAttack_3.png new file mode 100644 index 00000000..0285bdd2 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieAttack/ZombieAttack_3.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieAttack/ZombieAttack_4.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieAttack/ZombieAttack_4.png new file mode 100644 index 00000000..ca725ee2 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieAttack/ZombieAttack_4.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieAttack/ZombieAttack_5.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieAttack/ZombieAttack_5.png new file mode 100644 index 00000000..65dad052 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieAttack/ZombieAttack_5.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieAttack/ZombieAttack_6.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieAttack/ZombieAttack_6.png new file mode 100644 index 00000000..9e6aaf15 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieAttack/ZombieAttack_6.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieAttack/ZombieAttack_7.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieAttack/ZombieAttack_7.png new file mode 100644 index 00000000..ce237f86 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieAttack/ZombieAttack_7.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieAttack/ZombieAttack_8.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieAttack/ZombieAttack_8.png new file mode 100644 index 00000000..cbbf419a Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieAttack/ZombieAttack_8.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieAttack/ZombieAttack_9.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieAttack/ZombieAttack_9.png new file mode 100644 index 00000000..1f11a2f1 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieAttack/ZombieAttack_9.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieDie/ZombieDie_0.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieDie/ZombieDie_0.png new file mode 100644 index 00000000..9d10e8ff Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieDie/ZombieDie_0.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieDie/ZombieDie_1.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieDie/ZombieDie_1.png new file mode 100644 index 00000000..60286af4 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieDie/ZombieDie_1.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieDie/ZombieDie_2.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieDie/ZombieDie_2.png new file mode 100644 index 00000000..4b539475 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieDie/ZombieDie_2.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieDie/ZombieDie_3.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieDie/ZombieDie_3.png new file mode 100644 index 00000000..13667b5a Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieDie/ZombieDie_3.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieDie/ZombieDie_4.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieDie/ZombieDie_4.png new file mode 100644 index 00000000..0ec7ebf0 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieDie/ZombieDie_4.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieDie/ZombieDie_5.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieDie/ZombieDie_5.png new file mode 100644 index 00000000..2434fd64 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieDie/ZombieDie_5.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieDie/ZombieDie_6.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieDie/ZombieDie_6.png new file mode 100644 index 00000000..10ab817c Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieDie/ZombieDie_6.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieDie/ZombieDie_7.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieDie/ZombieDie_7.png new file mode 100644 index 00000000..89f00b33 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieDie/ZombieDie_7.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieDie/ZombieDie_8.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieDie/ZombieDie_8.png new file mode 100644 index 00000000..41a53562 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieDie/ZombieDie_8.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieDie/ZombieDie_9.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieDie/ZombieDie_9.png new file mode 100644 index 00000000..34a36c1f Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieDie/ZombieDie_9.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieHead/ZombieHead_0.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieHead/ZombieHead_0.png new file mode 100644 index 00000000..b871e6ac Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieHead/ZombieHead_0.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieHead/ZombieHead_1.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieHead/ZombieHead_1.png new file mode 100644 index 00000000..89c3b364 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieHead/ZombieHead_1.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieHead/ZombieHead_10.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieHead/ZombieHead_10.png new file mode 100644 index 00000000..5090327a Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieHead/ZombieHead_10.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieHead/ZombieHead_11.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieHead/ZombieHead_11.png new file mode 100644 index 00000000..9c128dac Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieHead/ZombieHead_11.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieHead/ZombieHead_2.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieHead/ZombieHead_2.png new file mode 100644 index 00000000..706aac54 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieHead/ZombieHead_2.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieHead/ZombieHead_3.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieHead/ZombieHead_3.png new file mode 100644 index 00000000..e96f3b02 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieHead/ZombieHead_3.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieHead/ZombieHead_4.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieHead/ZombieHead_4.png new file mode 100644 index 00000000..83bf0dc2 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieHead/ZombieHead_4.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieHead/ZombieHead_5.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieHead/ZombieHead_5.png new file mode 100644 index 00000000..9b922357 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieHead/ZombieHead_5.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieHead/ZombieHead_6.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieHead/ZombieHead_6.png new file mode 100644 index 00000000..de63f7c5 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieHead/ZombieHead_6.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieHead/ZombieHead_7.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieHead/ZombieHead_7.png new file mode 100644 index 00000000..7e5f719f Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieHead/ZombieHead_7.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieHead/ZombieHead_8.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieHead/ZombieHead_8.png new file mode 100644 index 00000000..a5263001 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieHead/ZombieHead_8.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieHead/ZombieHead_9.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieHead/ZombieHead_9.png new file mode 100644 index 00000000..6c74f029 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieHead/ZombieHead_9.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieLostHead/ZombieLostHead_0.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieLostHead/ZombieLostHead_0.png new file mode 100644 index 00000000..176d97a9 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieLostHead/ZombieLostHead_0.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieLostHead/ZombieLostHead_1.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieLostHead/ZombieLostHead_1.png new file mode 100644 index 00000000..262e2ac4 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieLostHead/ZombieLostHead_1.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieLostHead/ZombieLostHead_10.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieLostHead/ZombieLostHead_10.png new file mode 100644 index 00000000..8cfab4ed Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieLostHead/ZombieLostHead_10.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieLostHead/ZombieLostHead_11.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieLostHead/ZombieLostHead_11.png new file mode 100644 index 00000000..c9fbb02d Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieLostHead/ZombieLostHead_11.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieLostHead/ZombieLostHead_12.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieLostHead/ZombieLostHead_12.png new file mode 100644 index 00000000..e06a07a4 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieLostHead/ZombieLostHead_12.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieLostHead/ZombieLostHead_13.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieLostHead/ZombieLostHead_13.png new file mode 100644 index 00000000..d89db620 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieLostHead/ZombieLostHead_13.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieLostHead/ZombieLostHead_14.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieLostHead/ZombieLostHead_14.png new file mode 100644 index 00000000..35ca03cc Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieLostHead/ZombieLostHead_14.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieLostHead/ZombieLostHead_15.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieLostHead/ZombieLostHead_15.png new file mode 100644 index 00000000..be3447cb Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieLostHead/ZombieLostHead_15.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieLostHead/ZombieLostHead_16.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieLostHead/ZombieLostHead_16.png new file mode 100644 index 00000000..4731685b Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieLostHead/ZombieLostHead_16.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieLostHead/ZombieLostHead_17.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieLostHead/ZombieLostHead_17.png new file mode 100644 index 00000000..d9b2be0b Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieLostHead/ZombieLostHead_17.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieLostHead/ZombieLostHead_2.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieLostHead/ZombieLostHead_2.png new file mode 100644 index 00000000..012ddf41 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieLostHead/ZombieLostHead_2.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieLostHead/ZombieLostHead_3.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieLostHead/ZombieLostHead_3.png new file mode 100644 index 00000000..c31c8fe7 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieLostHead/ZombieLostHead_3.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieLostHead/ZombieLostHead_4.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieLostHead/ZombieLostHead_4.png new file mode 100644 index 00000000..939ee2d8 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieLostHead/ZombieLostHead_4.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieLostHead/ZombieLostHead_5.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieLostHead/ZombieLostHead_5.png new file mode 100644 index 00000000..92e09760 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieLostHead/ZombieLostHead_5.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieLostHead/ZombieLostHead_6.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieLostHead/ZombieLostHead_6.png new file mode 100644 index 00000000..84ed1990 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieLostHead/ZombieLostHead_6.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieLostHead/ZombieLostHead_7.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieLostHead/ZombieLostHead_7.png new file mode 100644 index 00000000..40844f6a Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieLostHead/ZombieLostHead_7.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieLostHead/ZombieLostHead_8.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieLostHead/ZombieLostHead_8.png new file mode 100644 index 00000000..c89e47a6 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieLostHead/ZombieLostHead_8.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieLostHead/ZombieLostHead_9.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieLostHead/ZombieLostHead_9.png new file mode 100644 index 00000000..123b6e45 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieLostHead/ZombieLostHead_9.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieLostHeadAttack/ZombieLostHeadAttack_0.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieLostHeadAttack/ZombieLostHeadAttack_0.png new file mode 100644 index 00000000..796970b0 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieLostHeadAttack/ZombieLostHeadAttack_0.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieLostHeadAttack/ZombieLostHeadAttack_1.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieLostHeadAttack/ZombieLostHeadAttack_1.png new file mode 100644 index 00000000..b5df6731 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieLostHeadAttack/ZombieLostHeadAttack_1.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieLostHeadAttack/ZombieLostHeadAttack_10.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieLostHeadAttack/ZombieLostHeadAttack_10.png new file mode 100644 index 00000000..669f6128 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieLostHeadAttack/ZombieLostHeadAttack_10.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieLostHeadAttack/ZombieLostHeadAttack_2.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieLostHeadAttack/ZombieLostHeadAttack_2.png new file mode 100644 index 00000000..f8cadf6b Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieLostHeadAttack/ZombieLostHeadAttack_2.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieLostHeadAttack/ZombieLostHeadAttack_3.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieLostHeadAttack/ZombieLostHeadAttack_3.png new file mode 100644 index 00000000..1b9f3f38 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieLostHeadAttack/ZombieLostHeadAttack_3.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieLostHeadAttack/ZombieLostHeadAttack_4.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieLostHeadAttack/ZombieLostHeadAttack_4.png new file mode 100644 index 00000000..bed1cf4e Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieLostHeadAttack/ZombieLostHeadAttack_4.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieLostHeadAttack/ZombieLostHeadAttack_5.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieLostHeadAttack/ZombieLostHeadAttack_5.png new file mode 100644 index 00000000..3feba6bb Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieLostHeadAttack/ZombieLostHeadAttack_5.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieLostHeadAttack/ZombieLostHeadAttack_6.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieLostHeadAttack/ZombieLostHeadAttack_6.png new file mode 100644 index 00000000..81c18a4e Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieLostHeadAttack/ZombieLostHeadAttack_6.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieLostHeadAttack/ZombieLostHeadAttack_7.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieLostHeadAttack/ZombieLostHeadAttack_7.png new file mode 100644 index 00000000..90c3138c Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieLostHeadAttack/ZombieLostHeadAttack_7.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieLostHeadAttack/ZombieLostHeadAttack_8.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieLostHeadAttack/ZombieLostHeadAttack_8.png new file mode 100644 index 00000000..ac82e386 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieLostHeadAttack/ZombieLostHeadAttack_8.png differ diff --git a/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieLostHeadAttack/ZombieLostHeadAttack_9.png b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieLostHeadAttack/ZombieLostHeadAttack_9.png new file mode 100644 index 00000000..b47ed7d9 Binary files /dev/null and b/EXE version/main/resources/graphics/Zombies/NormalZombie/ZombieLostHeadAttack/ZombieLostHeadAttack_9.png differ diff --git a/EXE version/main/scrap.h b/EXE version/main/scrap.h new file mode 100644 index 00000000..725f22ff --- /dev/null +++ b/EXE version/main/scrap.h @@ -0,0 +1,148 @@ +/* + pygame - Python Game Library + Copyright (C) 2006, 2007 Rene Dudfield, Marcus von Appen + + Originally put in the public domain by Sam Lantinga. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this library; if not, write to the Free + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#ifndef SCRAP_H +#define SCRAP_H + +/* This is unconditionally defined in Python.h */ +#if defined(_POSIX_C_SOURCE) +#undef _POSIX_C_SOURCE +#endif + +#include + +/* Handle clipboard text and data in arbitrary formats */ + +/** + * Predefined supported pygame scrap types. + */ +#define PYGAME_SCRAP_TEXT "text/plain" +#define PYGAME_SCRAP_BMP "image/bmp" +#define PYGAME_SCRAP_PPM "image/ppm" +#define PYGAME_SCRAP_PBM "image/pbm" + +/** + * The supported scrap clipboard types. + * + * This is only relevant in a X11 environment, which supports mouse + * selections as well. For Win32 and MacOS environments the default + * clipboard is used, no matter what value is passed. + */ +typedef enum +{ + SCRAP_CLIPBOARD, + SCRAP_SELECTION /* only supported in X11 environments. */ +} ScrapClipType; + +/** + * Macro for initialization checks. + */ +#define PYGAME_SCRAP_INIT_CHECK() \ + if(!pygame_scrap_initialized()) \ + return (PyErr_SetString (pgExc_SDLError, \ + "scrap system not initialized."), NULL) + +/** + * \brief Checks, whether the pygame scrap module was initialized. + * + * \return 1 if the modules was initialized, 0 otherwise. + */ +extern int +pygame_scrap_initialized (void); + +/** + * \brief Initializes the pygame scrap module internals. Call this before any + * other method. + * + * \return 1 on successful initialization, 0 otherwise. + */ +extern int +pygame_scrap_init (void); + +/** + * \brief Checks, whether the pygame window lost the clipboard focus or not. + * + * \return 1 if the window lost the focus, 0 otherwise. + */ +extern int +pygame_scrap_lost (void); + +/** + * \brief Places content of a specific type into the clipboard. + * + * \note For X11 the following notes are important: The following types + * are reserved for internal usage and thus will throw an error on + * setting them: "TIMESTAMP", "TARGETS", "SDL_SELECTION". + * Setting PYGAME_SCRAP_TEXT ("text/plain") will also automatically + * set the X11 types "STRING" (XA_STRING), "TEXT" and "UTF8_STRING". + * + * For Win32 the following notes are important: Setting + * PYGAME_SCRAP_TEXT ("text/plain") will also automatically set + * the Win32 type "TEXT" (CF_TEXT). + * + * For QNX the following notes are important: Setting + * PYGAME_SCRAP_TEXT ("text/plain") will also automatically set + * the QNX type "TEXT" (Ph_CL_TEXT). + * + * \param type The type of the content. + * \param srclen The length of the content. + * \param src The NULL terminated content. + * \return 1, if the content could be successfully pasted into the clipboard, + * 0 otherwise. + */ +extern int +pygame_scrap_put (char *type, int srclen, char *src); + +/** + * \brief Gets the current content from the clipboard. + * + * \note The received content does not need to be the content previously + * placed in the clipboard using pygame_put_scrap(). See the + * pygame_put_scrap() notes for more details. + * + * \param type The type of the content to receive. + * \param count The size of the returned content. + * \return The content or NULL in case of an error or if no content of the + * specified type was available. + */ +extern char* +pygame_scrap_get (char *type, unsigned long *count); + +/** + * \brief Gets the currently available content types from the clipboard. + * + * \return The different available content types or NULL in case of an + * error or if no content type is available. + */ +extern char** +pygame_scrap_get_types (void); + +/** + * \brief Checks whether content for the specified scrap type is currently + * available in the clipboard. + * + * \param type The type to check for. + * \return 1, if there is content and 0 otherwise. + */ +extern int +pygame_scrap_contains (char *type); + +#endif /* SCRAP_H */ diff --git a/EXE version/main/select.pyd b/EXE version/main/select.pyd new file mode 100644 index 00000000..d4281d47 Binary files /dev/null and b/EXE version/main/select.pyd differ diff --git a/EXE version/main/setuptools-56.0.0.dist-info/INSTALLER b/EXE version/main/setuptools-56.0.0.dist-info/INSTALLER new file mode 100644 index 00000000..a1b589e3 --- /dev/null +++ b/EXE version/main/setuptools-56.0.0.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/EXE version/main/setuptools-56.0.0.dist-info/LICENSE b/EXE version/main/setuptools-56.0.0.dist-info/LICENSE new file mode 100644 index 00000000..353924be --- /dev/null +++ b/EXE version/main/setuptools-56.0.0.dist-info/LICENSE @@ -0,0 +1,19 @@ +Copyright Jason R. Coombs + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to +deal in the Software without restriction, including without limitation the +rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +sell copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +IN THE SOFTWARE. diff --git a/EXE version/main/setuptools-56.0.0.dist-info/METADATA b/EXE version/main/setuptools-56.0.0.dist-info/METADATA new file mode 100644 index 00000000..0212d70b --- /dev/null +++ b/EXE version/main/setuptools-56.0.0.dist-info/METADATA @@ -0,0 +1,114 @@ +Metadata-Version: 2.1 +Name: setuptools +Version: 56.0.0 +Summary: Easily download, build, install, upgrade, and uninstall Python packages +Home-page: https://github.com/pypa/setuptools +Author: Python Packaging Authority +Author-email: distutils-sig@python.org +License: UNKNOWN +Project-URL: Documentation, https://setuptools.readthedocs.io/ +Keywords: CPAN PyPI distutils eggs package management +Platform: UNKNOWN +Classifier: Development Status :: 5 - Production/Stable +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: MIT License +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3 :: Only +Classifier: Topic :: Software Development :: Libraries :: Python Modules +Classifier: Topic :: System :: Archiving :: Packaging +Classifier: Topic :: System :: Systems Administration +Classifier: Topic :: Utilities +Requires-Python: >=3.6 +Provides-Extra: certs +Requires-Dist: certifi (==2016.9.26) ; extra == 'certs' +Provides-Extra: docs +Requires-Dist: sphinx ; extra == 'docs' +Requires-Dist: jaraco.packaging (>=8.2) ; extra == 'docs' +Requires-Dist: rst.linker (>=1.9) ; extra == 'docs' +Requires-Dist: pygments-github-lexers (==0.0.5) ; extra == 'docs' +Requires-Dist: sphinx-inline-tabs ; extra == 'docs' +Provides-Extra: ssl +Requires-Dist: wincertstore (==0.2) ; (sys_platform == "win32") and extra == 'ssl' +Provides-Extra: testing +Requires-Dist: pytest (>=4.6) ; extra == 'testing' +Requires-Dist: pytest-checkdocs (>=2.4) ; extra == 'testing' +Requires-Dist: pytest-flake8 ; extra == 'testing' +Requires-Dist: pytest-cov ; extra == 'testing' +Requires-Dist: pytest-enabler (>=1.0.1) ; extra == 'testing' +Requires-Dist: mock ; extra == 'testing' +Requires-Dist: flake8-2020 ; extra == 'testing' +Requires-Dist: virtualenv (>=13.0.0) ; extra == 'testing' +Requires-Dist: pytest-virtualenv (>=1.2.7) ; extra == 'testing' +Requires-Dist: wheel ; extra == 'testing' +Requires-Dist: paver ; extra == 'testing' +Requires-Dist: pip (>=19.1) ; extra == 'testing' +Requires-Dist: jaraco.envs ; extra == 'testing' +Requires-Dist: pytest-xdist ; extra == 'testing' +Requires-Dist: sphinx ; extra == 'testing' +Requires-Dist: jaraco.path (>=3.2.0) ; extra == 'testing' +Requires-Dist: pytest-black (>=0.3.7) ; (platform_python_implementation != "PyPy" and python_version < "3.10") and extra == 'testing' +Requires-Dist: pytest-mypy ; (platform_python_implementation != "PyPy" and python_version < "3.10") and extra == 'testing' + +.. image:: https://img.shields.io/pypi/v/setuptools.svg + :target: `PyPI link`_ + +.. image:: https://img.shields.io/pypi/pyversions/setuptools.svg + :target: `PyPI link`_ + +.. _PyPI link: https://pypi.org/project/setuptools + +.. image:: https://github.com/pypa/setuptools/workflows/tests/badge.svg + :target: https://github.com/pypa/setuptools/actions?query=workflow%3A%22tests%22 + :alt: tests + +.. image:: https://img.shields.io/badge/code%20style-black-000000.svg + :target: https://github.com/psf/black + :alt: Code style: Black + +.. image:: https://img.shields.io/readthedocs/setuptools/latest.svg + :target: https://setuptools.readthedocs.io + +.. image:: https://img.shields.io/codecov/c/github/pypa/setuptools/master.svg?logo=codecov&logoColor=white + :target: https://codecov.io/gh/pypa/setuptools + +.. image:: https://tidelift.com/badges/github/pypa/setuptools?style=flat + :target: https://tidelift.com/subscription/pkg/pypi-setuptools?utm_source=pypi-setuptools&utm_medium=readme + +See the `Installation Instructions +`_ in the Python Packaging +User's Guide for instructions on installing, upgrading, and uninstalling +Setuptools. + +Questions and comments should be directed to the `distutils-sig +mailing list `_. +Bug reports and especially tested patches may be +submitted directly to the `bug tracker +`_. + + +Code of Conduct +=============== + +Everyone interacting in the setuptools project's codebases, issue trackers, +chat rooms, and mailing lists is expected to follow the +`PSF Code of Conduct `_. + + +For Enterprise +============== + +Available as part of the Tidelift Subscription. + +Setuptools and the maintainers of thousands of other packages are working with Tidelift to deliver one enterprise subscription that covers all of the open source you use. + +`Learn more `_. + + +Security Contact +================ + +To report a security vulnerability, please use the +`Tidelift security contact `_. +Tidelift will coordinate the fix and disclosure. + + diff --git a/EXE version/main/setuptools-56.0.0.dist-info/RECORD b/EXE version/main/setuptools-56.0.0.dist-info/RECORD new file mode 100644 index 00000000..76de6db3 --- /dev/null +++ b/EXE version/main/setuptools-56.0.0.dist-info/RECORD @@ -0,0 +1,295 @@ +_distutils_hack/__init__.py,sha256=Mi-TvyOnuMzUIc_utoEp5m3M_DY6QLLSkXqg6e8whI8,3686 +_distutils_hack/__pycache__/__init__.cpython-39.pyc,, +_distutils_hack/__pycache__/override.cpython-39.pyc,, +_distutils_hack/override.py,sha256=Eu_s-NF6VIZ4Cqd0tbbA5wtWky2IZPNd8et6GLt1mzo,44 +distutils-precedence.pth,sha256=fqf_7z_ioRfuEsaO1lU2F_DX_S8FkCV8JcSElZo7c3M,152 +pkg_resources/__init__.py,sha256=P3PNN3_m8JJrYMp-i-Sq-3rhK5vuViqqjn1UXKHfe7Q,108202 +pkg_resources/__pycache__/__init__.cpython-39.pyc,, +pkg_resources/_vendor/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +pkg_resources/_vendor/__pycache__/__init__.cpython-39.pyc,, +pkg_resources/_vendor/__pycache__/appdirs.cpython-39.pyc,, +pkg_resources/_vendor/__pycache__/pyparsing.cpython-39.pyc,, +pkg_resources/_vendor/appdirs.py,sha256=MievUEuv3l_mQISH5SF0shDk_BNhHHzYiAPrT3ITN4I,24701 +pkg_resources/_vendor/packaging/__about__.py,sha256=PNMsaZn4UcCHyubgROH1bl6CluduPjI5kFrSp_Zgklo,736 +pkg_resources/_vendor/packaging/__init__.py,sha256=6enbp5XgRfjBjsI9-bn00HjHf5TH21PDMOKkJW8xw-w,562 +pkg_resources/_vendor/packaging/__pycache__/__about__.cpython-39.pyc,, +pkg_resources/_vendor/packaging/__pycache__/__init__.cpython-39.pyc,, +pkg_resources/_vendor/packaging/__pycache__/_compat.cpython-39.pyc,, +pkg_resources/_vendor/packaging/__pycache__/_structures.cpython-39.pyc,, +pkg_resources/_vendor/packaging/__pycache__/_typing.cpython-39.pyc,, +pkg_resources/_vendor/packaging/__pycache__/markers.cpython-39.pyc,, +pkg_resources/_vendor/packaging/__pycache__/requirements.cpython-39.pyc,, +pkg_resources/_vendor/packaging/__pycache__/specifiers.cpython-39.pyc,, +pkg_resources/_vendor/packaging/__pycache__/tags.cpython-39.pyc,, +pkg_resources/_vendor/packaging/__pycache__/utils.cpython-39.pyc,, +pkg_resources/_vendor/packaging/__pycache__/version.cpython-39.pyc,, +pkg_resources/_vendor/packaging/_compat.py,sha256=MXdsGpSE_W-ZrHoC87andI4LV2FAwU7HLL-eHe_CjhU,1128 +pkg_resources/_vendor/packaging/_structures.py,sha256=ozkCX8Q8f2qE1Eic3YiQ4buDVfgz2iYevY9e7R2y3iY,2022 +pkg_resources/_vendor/packaging/_typing.py,sha256=x59EhQ57TMT-kTRyLZV25HZvYGGwbucTo6iKh_O0tMw,1812 +pkg_resources/_vendor/packaging/markers.py,sha256=YSntQkMnKyw1_FG6oRNNnGxLL6bAxcGXOtuFE-YTS3k,9518 +pkg_resources/_vendor/packaging/requirements.py,sha256=R8K4H4xX_iD4LvpGw1U3ouuPbGN-wzsFgD7brhAM71Y,4929 +pkg_resources/_vendor/packaging/specifiers.py,sha256=uYp9l13F0LcknS6d4N60ytiBgFmIhKideOq9AnsxTco,31944 +pkg_resources/_vendor/packaging/tags.py,sha256=NKMS37Zo_nWrZxgsD6zbXsXgc9edn9m160cBiLmHJdE,24067 +pkg_resources/_vendor/packaging/utils.py,sha256=RShlvnjO2CtYSD8uri32frMMFMTmB-3ihsq1-ghzLEw,1811 +pkg_resources/_vendor/packaging/version.py,sha256=Cnbm-OO9D_qd8ZTFxzFcjSavexSYFZmyeaoPvMsjgPc,15470 +pkg_resources/_vendor/pyparsing.py,sha256=tmrp-lu-qO1i75ZzIN5A12nKRRD1Cm4Vpk-5LR9rims,232055 +pkg_resources/extern/__init__.py,sha256=3PixaT9Tzzd4NoyV6CVhGd7S_9Z-U5yvMWAftZKvC6k,2362 +pkg_resources/extern/__pycache__/__init__.cpython-39.pyc,, +pkg_resources/tests/data/my-test-package-source/__pycache__/setup.cpython-39.pyc,, +pkg_resources/tests/data/my-test-package-source/setup.py,sha256=Mrezl3nqxkYkjCYpIxmjhhg4AR8hgi4QZdEYmk-I7R8,104 +setuptools-56.0.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +setuptools-56.0.0.dist-info/LICENSE,sha256=2z8CRrH5J48VhFuZ_sR4uLUG63ZIeZNyL4xuJUKF-vg,1050 +setuptools-56.0.0.dist-info/METADATA,sha256=_aCRpMCUGooEBJ9frK3qo-ZvRMWpdZWSWt_y07PjBfM,4759 +setuptools-56.0.0.dist-info/RECORD,, +setuptools-56.0.0.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +setuptools-56.0.0.dist-info/WHEEL,sha256=OqRkF0eY5GHssMorFjlbTIq072vpHpF60fIQA6lS9xA,92 +setuptools-56.0.0.dist-info/dependency_links.txt,sha256=HlkCFkoK5TbZ5EMLbLKYhLcY_E31kBWD8TqW2EgmatQ,239 +setuptools-56.0.0.dist-info/entry_points.txt,sha256=lkeJaK21vluS2y7MfmO_tbLYjh8vaZDgZswzU4JD9gg,2869 +setuptools-56.0.0.dist-info/top_level.txt,sha256=d9yL39v_W7qmKDDSH6sT4bE0j_Ls1M3P161OGgdsm4g,41 +setuptools/__init__.py,sha256=0c232LRyOLGdL-Ywmgk8uMubx7I21w-ixJWiT0jQK-c,7681 +setuptools/__pycache__/__init__.cpython-39.pyc,, +setuptools/__pycache__/_deprecation_warning.cpython-39.pyc,, +setuptools/__pycache__/_imp.cpython-39.pyc,, +setuptools/__pycache__/archive_util.cpython-39.pyc,, +setuptools/__pycache__/build_meta.cpython-39.pyc,, +setuptools/__pycache__/config.cpython-39.pyc,, +setuptools/__pycache__/dep_util.cpython-39.pyc,, +setuptools/__pycache__/depends.cpython-39.pyc,, +setuptools/__pycache__/dist.cpython-39.pyc,, +setuptools/__pycache__/errors.cpython-39.pyc,, +setuptools/__pycache__/extension.cpython-39.pyc,, +setuptools/__pycache__/glob.cpython-39.pyc,, +setuptools/__pycache__/installer.cpython-39.pyc,, +setuptools/__pycache__/launch.cpython-39.pyc,, +setuptools/__pycache__/lib2to3_ex.cpython-39.pyc,, +setuptools/__pycache__/monkey.cpython-39.pyc,, +setuptools/__pycache__/msvc.cpython-39.pyc,, +setuptools/__pycache__/namespaces.cpython-39.pyc,, +setuptools/__pycache__/package_index.cpython-39.pyc,, +setuptools/__pycache__/py34compat.cpython-39.pyc,, +setuptools/__pycache__/sandbox.cpython-39.pyc,, +setuptools/__pycache__/ssl_support.cpython-39.pyc,, +setuptools/__pycache__/unicode_utils.cpython-39.pyc,, +setuptools/__pycache__/version.cpython-39.pyc,, +setuptools/__pycache__/wheel.cpython-39.pyc,, +setuptools/__pycache__/windows_support.cpython-39.pyc,, +setuptools/_deprecation_warning.py,sha256=jU9-dtfv6cKmtQJOXN8nP1mm7gONw5kKEtiPtbwnZyI,218 +setuptools/_distutils/__init__.py,sha256=lpQAphR_7uhWC2fbSEps4Ja9W4YwezN_IX_LJEt3khU,250 +setuptools/_distutils/__pycache__/__init__.cpython-39.pyc,, +setuptools/_distutils/__pycache__/_msvccompiler.cpython-39.pyc,, +setuptools/_distutils/__pycache__/archive_util.cpython-39.pyc,, +setuptools/_distutils/__pycache__/bcppcompiler.cpython-39.pyc,, +setuptools/_distutils/__pycache__/ccompiler.cpython-39.pyc,, +setuptools/_distutils/__pycache__/cmd.cpython-39.pyc,, +setuptools/_distutils/__pycache__/config.cpython-39.pyc,, +setuptools/_distutils/__pycache__/core.cpython-39.pyc,, +setuptools/_distutils/__pycache__/cygwinccompiler.cpython-39.pyc,, +setuptools/_distutils/__pycache__/debug.cpython-39.pyc,, +setuptools/_distutils/__pycache__/dep_util.cpython-39.pyc,, +setuptools/_distutils/__pycache__/dir_util.cpython-39.pyc,, +setuptools/_distutils/__pycache__/dist.cpython-39.pyc,, +setuptools/_distutils/__pycache__/errors.cpython-39.pyc,, +setuptools/_distutils/__pycache__/extension.cpython-39.pyc,, +setuptools/_distutils/__pycache__/fancy_getopt.cpython-39.pyc,, +setuptools/_distutils/__pycache__/file_util.cpython-39.pyc,, +setuptools/_distutils/__pycache__/filelist.cpython-39.pyc,, +setuptools/_distutils/__pycache__/log.cpython-39.pyc,, +setuptools/_distutils/__pycache__/msvc9compiler.cpython-39.pyc,, +setuptools/_distutils/__pycache__/msvccompiler.cpython-39.pyc,, +setuptools/_distutils/__pycache__/py35compat.cpython-39.pyc,, +setuptools/_distutils/__pycache__/py38compat.cpython-39.pyc,, +setuptools/_distutils/__pycache__/spawn.cpython-39.pyc,, +setuptools/_distutils/__pycache__/sysconfig.cpython-39.pyc,, +setuptools/_distutils/__pycache__/text_file.cpython-39.pyc,, +setuptools/_distutils/__pycache__/unixccompiler.cpython-39.pyc,, +setuptools/_distutils/__pycache__/util.cpython-39.pyc,, +setuptools/_distutils/__pycache__/version.cpython-39.pyc,, +setuptools/_distutils/__pycache__/versionpredicate.cpython-39.pyc,, +setuptools/_distutils/_msvccompiler.py,sha256=JQcHez50UA3BQKK9fOKANI_GzNFx3_qnZdyHyHNAghA,20813 +setuptools/_distutils/archive_util.py,sha256=qW-uiGwYexTvK5e-iSel_31Dshx-CqTanNPK6snwf98,8572 +setuptools/_distutils/bcppcompiler.py,sha256=OJDVpCUmX6H8v_7lV1zifV1fcx92Cr2dhiUh6989UJI,14894 +setuptools/_distutils/ccompiler.py,sha256=4cqQgq06NbGo0vazGMT2aPZ6K2Z-HcuRn9Pfz_bQUPw,47437 +setuptools/_distutils/cmd.py,sha256=eco6LAGUtobLuPafuhmgKgkwRRL_WY8KJ4YeDCHpcls,18079 +setuptools/_distutils/command/__init__.py,sha256=2TA-rlNDlzeI-csbWHXFjGD8uOYqALMfyWOhT49nC6g,799 +setuptools/_distutils/command/__pycache__/__init__.cpython-39.pyc,, +setuptools/_distutils/command/__pycache__/bdist.cpython-39.pyc,, +setuptools/_distutils/command/__pycache__/bdist_dumb.cpython-39.pyc,, +setuptools/_distutils/command/__pycache__/bdist_msi.cpython-39.pyc,, +setuptools/_distutils/command/__pycache__/bdist_rpm.cpython-39.pyc,, +setuptools/_distutils/command/__pycache__/bdist_wininst.cpython-39.pyc,, +setuptools/_distutils/command/__pycache__/build.cpython-39.pyc,, +setuptools/_distutils/command/__pycache__/build_clib.cpython-39.pyc,, +setuptools/_distutils/command/__pycache__/build_ext.cpython-39.pyc,, +setuptools/_distutils/command/__pycache__/build_py.cpython-39.pyc,, +setuptools/_distutils/command/__pycache__/build_scripts.cpython-39.pyc,, +setuptools/_distutils/command/__pycache__/check.cpython-39.pyc,, +setuptools/_distutils/command/__pycache__/clean.cpython-39.pyc,, +setuptools/_distutils/command/__pycache__/config.cpython-39.pyc,, +setuptools/_distutils/command/__pycache__/install.cpython-39.pyc,, +setuptools/_distutils/command/__pycache__/install_data.cpython-39.pyc,, +setuptools/_distutils/command/__pycache__/install_egg_info.cpython-39.pyc,, +setuptools/_distutils/command/__pycache__/install_headers.cpython-39.pyc,, +setuptools/_distutils/command/__pycache__/install_lib.cpython-39.pyc,, +setuptools/_distutils/command/__pycache__/install_scripts.cpython-39.pyc,, +setuptools/_distutils/command/__pycache__/py37compat.cpython-39.pyc,, +setuptools/_distutils/command/__pycache__/register.cpython-39.pyc,, +setuptools/_distutils/command/__pycache__/sdist.cpython-39.pyc,, +setuptools/_distutils/command/__pycache__/upload.cpython-39.pyc,, +setuptools/_distutils/command/bdist.py,sha256=2z4eudRl_n7m3lG9leL0IYqes4bsm8c0fxfZuiafjMg,5562 +setuptools/_distutils/command/bdist_dumb.py,sha256=BTur9jcIppyP7Piavjfsk7YjElqvxeYO2npUyPPOekc,4913 +setuptools/_distutils/command/bdist_msi.py,sha256=EVFQYN_X-ExeeP8gmdV9JcINsuUGsLJUz9afMU0Rt8c,35579 +setuptools/_distutils/command/bdist_rpm.py,sha256=gjOw22GhDSbcq0bdq25cTb-n6HWWm0bShLQad_mkJ4k,21537 +setuptools/_distutils/command/bdist_wininst.py,sha256=iGlaI-VfElHOneeczKHWnSN5a10-7IMcJaXuR1mdS3c,16030 +setuptools/_distutils/command/build.py,sha256=11NyR2UAUzalrkTZ2ph0BAHFWFC2jtSsN7gIaF-NC08,5767 +setuptools/_distutils/command/build_clib.py,sha256=bgVTHh28eLQA2Gkw68amApd_j7qQBX4MTI-zTvAK_J4,8022 +setuptools/_distutils/command/build_ext.py,sha256=Y_SYbd8SHcpgNPfv3ifVniZljYs1cLAFleBSi2_O3CY,31685 +setuptools/_distutils/command/build_py.py,sha256=S_Nlw4hZE8PnIgqX5OFMdmt-GSmOhPQQ4f2jr1uBnoU,17190 +setuptools/_distutils/command/build_scripts.py,sha256=aKycJJPx3LfZ1cvZgSJaxnD2LnvRM5WJ-8xkpdgcLsI,6232 +setuptools/_distutils/command/check.py,sha256=5qDtI75ccZg3sAItQWeaIu8y3FR314O4rr9Smz4HsEo,5637 +setuptools/_distutils/command/clean.py,sha256=2TCt47ru4hZZM0RfVfUYj5bbpicpGLP4Qhw5jBtvp9k,2776 +setuptools/_distutils/command/config.py,sha256=2aTjww3PwjMB8-ZibCe4P7B-qG1hM1gn_rJXYyxRz6c,13117 +setuptools/_distutils/command/install.py,sha256=oOM2rD7l_SglARNVDmiZn8u6DAfidXRF_yE5QS328B4,27482 +setuptools/_distutils/command/install_data.py,sha256=YhGOAwh3gJPqF7em5XA0rmpR42z1bLh80ooElzDyUvk,2822 +setuptools/_distutils/command/install_egg_info.py,sha256=0kW0liVMeadkjX0ZcRfMptKFen07Gw6gyw1VHT5KIwc,2603 +setuptools/_distutils/command/install_headers.py,sha256=XQ6idkbIDfr1ljXCOznuVUMvOFpHBn6cK0Wz9gIM2b4,1298 +setuptools/_distutils/command/install_lib.py,sha256=9AofR-MO9lAtjwwuukCptepOaJEKMZW2VHiyR5hU7HA,8397 +setuptools/_distutils/command/install_scripts.py,sha256=_CLUeQwGJRcY2kik7azPMn5IdtDCrjWdUvZ1khlG6ck,2017 +setuptools/_distutils/command/py37compat.py,sha256=qzRhhvTihqx_PZZt2ZYECxh1X3Oj255VqatzelYFAKw,671 +setuptools/_distutils/command/register.py,sha256=2jaq9968rt2puRVDBx1HbNiXv27uOk8idE_4lPf_3VM,11712 +setuptools/_distutils/command/sdist.py,sha256=qotJjAOzyhJjq2-oDImjNFrOtaSneEFDJTB-sEk1wnU,19005 +setuptools/_distutils/command/upload.py,sha256=BLO1w7eSAqsCjCLXtf_CRVSjwF1WmyOByGVGNdcQ8oY,7597 +setuptools/_distutils/config.py,sha256=dtHgblx9JhfyrKx1-J7Jlxw_f7s8ZbPFQii2UWMTZpY,4827 +setuptools/_distutils/core.py,sha256=jbdOkpOK09xi-56vhhwvn3fYdhLb5DJO8q3K1fnQz0Q,8876 +setuptools/_distutils/cygwinccompiler.py,sha256=9U4JAusUzlAGJl0Y5nToPkQ3ldzseAtiye434mwJ0ow,16380 +setuptools/_distutils/debug.py,sha256=N6MrTAqK6l9SVk6tWweR108PM8Ol7qNlfyV-nHcLhsY,139 +setuptools/_distutils/dep_util.py,sha256=GuR9Iw_jzZRkyemJ5HX8rB_wRGxkIBcBm1qh54r7zhk,3491 +setuptools/_distutils/dir_util.py,sha256=UwhBOUTcV65GTwce4SPuTXR8Z8q3LYEcmttqcGb0bYo,7778 +setuptools/_distutils/dist.py,sha256=Biuf6ca8uiFfMScRFsYUKtb5neMPtxKxRtXn50_1f3U,50421 +setuptools/_distutils/errors.py,sha256=Yr6tKZGdzBoNi53vBtiq0UJ__X05CmxSdQJqOWaw6SY,3577 +setuptools/_distutils/extension.py,sha256=bTb3Q0CoevGKYv5dX1ls--Ln8tlB0-UEOsi9BwzlZ-s,10515 +setuptools/_distutils/fancy_getopt.py,sha256=OPxp2CxHi1Yp_d1D8JxW4Ueq9fC71tegQFaafh58GGU,17784 +setuptools/_distutils/file_util.py,sha256=0hUqfItN_x2DVihR0MHdA4KCMVCOO8VoByaFp_a6MDg,8148 +setuptools/_distutils/filelist.py,sha256=8bRxhzp2FsaoHT7TuKD4Qjcuh_B9Ow_xTt_htZJvN2Q,12832 +setuptools/_distutils/log.py,sha256=hWBmdUC2K927QcVv3REMW3HMPclxccPQngxLSuUXQl0,1969 +setuptools/_distutils/msvc9compiler.py,sha256=uv0TAfoWrxEBOQL-Z2uws5g4AXoTPahUEMuq6FLkCYY,30453 +setuptools/_distutils/msvccompiler.py,sha256=ZYsnUgIC4tZT2WkJbTkTUyVSCAc2nFM9DVKIuIfPBU0,23540 +setuptools/_distutils/py35compat.py,sha256=-sk1vBIsOgH-AobjIYbK_OEjdJF_54Ul_D1EiE9XM_c,455 +setuptools/_distutils/py38compat.py,sha256=II7ddBxOijC7uNN4z_46HYUjwYTJYMNiLJoGTormZm0,212 +setuptools/_distutils/spawn.py,sha256=XBmUqzhxXfay_JE18RkaalHf9kgi7NvXeBPW9BfTqmw,4408 +setuptools/_distutils/sysconfig.py,sha256=5z55MU7gXeceL_G9FK6ex-2OvdeIXJRZJafrtthJcfU,21349 +setuptools/_distutils/text_file.py,sha256=PsuAJeWdKJoLSV_6N6IpB5-0Pa84KzLUucJMFRazw3I,12483 +setuptools/_distutils/unixccompiler.py,sha256=E65edChYLoHY8wi4OxFu_wKt3hJe3GySF6v51G_ZzL0,14696 +setuptools/_distutils/util.py,sha256=Wlz9noChJjzem9mfgOu-KaN8soB4aNhRfe4VGltXd8w,20985 +setuptools/_distutils/version.py,sha256=8NogP6NPPQpp3EUMZcT9czEHia-ehqPo8spo_e7AgUU,12514 +setuptools/_distutils/versionpredicate.py,sha256=ZxpEA-TQv88mUWc6hetUO4qSqA2sa7ipjZ3QEK5evDk,5133 +setuptools/_imp.py,sha256=Qx0LJzEBaWk_6PfICamJtfBN2rh5K9sJq1wXvtZW-mc,2388 +setuptools/_vendor/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +setuptools/_vendor/__pycache__/__init__.cpython-39.pyc,, +setuptools/_vendor/__pycache__/ordered_set.cpython-39.pyc,, +setuptools/_vendor/__pycache__/pyparsing.cpython-39.pyc,, +setuptools/_vendor/ordered_set.py,sha256=dbaCcs27dyN9gnMWGF5nA_BrVn6Q-NrjKYJpV9_fgBs,15130 +setuptools/_vendor/packaging/__about__.py,sha256=PNMsaZn4UcCHyubgROH1bl6CluduPjI5kFrSp_Zgklo,736 +setuptools/_vendor/packaging/__init__.py,sha256=6enbp5XgRfjBjsI9-bn00HjHf5TH21PDMOKkJW8xw-w,562 +setuptools/_vendor/packaging/__pycache__/__about__.cpython-39.pyc,, +setuptools/_vendor/packaging/__pycache__/__init__.cpython-39.pyc,, +setuptools/_vendor/packaging/__pycache__/_compat.cpython-39.pyc,, +setuptools/_vendor/packaging/__pycache__/_structures.cpython-39.pyc,, +setuptools/_vendor/packaging/__pycache__/_typing.cpython-39.pyc,, +setuptools/_vendor/packaging/__pycache__/markers.cpython-39.pyc,, +setuptools/_vendor/packaging/__pycache__/requirements.cpython-39.pyc,, +setuptools/_vendor/packaging/__pycache__/specifiers.cpython-39.pyc,, +setuptools/_vendor/packaging/__pycache__/tags.cpython-39.pyc,, +setuptools/_vendor/packaging/__pycache__/utils.cpython-39.pyc,, +setuptools/_vendor/packaging/__pycache__/version.cpython-39.pyc,, +setuptools/_vendor/packaging/_compat.py,sha256=MXdsGpSE_W-ZrHoC87andI4LV2FAwU7HLL-eHe_CjhU,1128 +setuptools/_vendor/packaging/_structures.py,sha256=ozkCX8Q8f2qE1Eic3YiQ4buDVfgz2iYevY9e7R2y3iY,2022 +setuptools/_vendor/packaging/_typing.py,sha256=x59EhQ57TMT-kTRyLZV25HZvYGGwbucTo6iKh_O0tMw,1812 +setuptools/_vendor/packaging/markers.py,sha256=BCCxZbt8xgysH8v5pqbLkdtQnRZHIGkJQqlNBGek4nQ,9509 +setuptools/_vendor/packaging/requirements.py,sha256=VHydZdk8m3qFxReomNwKr71cmpjantEV_xOhkEyyINI,4917 +setuptools/_vendor/packaging/specifiers.py,sha256=uYp9l13F0LcknS6d4N60ytiBgFmIhKideOq9AnsxTco,31944 +setuptools/_vendor/packaging/tags.py,sha256=NKMS37Zo_nWrZxgsD6zbXsXgc9edn9m160cBiLmHJdE,24067 +setuptools/_vendor/packaging/utils.py,sha256=RShlvnjO2CtYSD8uri32frMMFMTmB-3ihsq1-ghzLEw,1811 +setuptools/_vendor/packaging/version.py,sha256=Cnbm-OO9D_qd8ZTFxzFcjSavexSYFZmyeaoPvMsjgPc,15470 +setuptools/_vendor/pyparsing.py,sha256=tmrp-lu-qO1i75ZzIN5A12nKRRD1Cm4Vpk-5LR9rims,232055 +setuptools/archive_util.py,sha256=maJDbozRbDeSPw53VT0cb_IS3W0Ap73lJR8tX8RZDx0,7077 +setuptools/build_meta.py,sha256=x7FI1UPKCKxBBSopXocfGDnJa98rQO8atKXSwJtdid8,10280 +setuptools/cli-32.exe,sha256=dfEuovMNnA2HLa3jRfMPVi5tk4R7alCbpTvuxtCyw0Y,65536 +setuptools/cli-64.exe,sha256=KLABu5pyrnokJCv6skjXZ6GsXeyYHGcqOUT3oHI3Xpo,74752 +setuptools/cli.exe,sha256=dfEuovMNnA2HLa3jRfMPVi5tk4R7alCbpTvuxtCyw0Y,65536 +setuptools/command/__init__.py,sha256=fSjRqyhdTj_Ml_uey67g2bMtfv-MQrcoTMBUfBBURvo,551 +setuptools/command/__pycache__/__init__.cpython-39.pyc,, +setuptools/command/__pycache__/alias.cpython-39.pyc,, +setuptools/command/__pycache__/bdist_egg.cpython-39.pyc,, +setuptools/command/__pycache__/bdist_rpm.cpython-39.pyc,, +setuptools/command/__pycache__/build_clib.cpython-39.pyc,, +setuptools/command/__pycache__/build_ext.cpython-39.pyc,, +setuptools/command/__pycache__/build_py.cpython-39.pyc,, +setuptools/command/__pycache__/develop.cpython-39.pyc,, +setuptools/command/__pycache__/dist_info.cpython-39.pyc,, +setuptools/command/__pycache__/easy_install.cpython-39.pyc,, +setuptools/command/__pycache__/egg_info.cpython-39.pyc,, +setuptools/command/__pycache__/install.cpython-39.pyc,, +setuptools/command/__pycache__/install_egg_info.cpython-39.pyc,, +setuptools/command/__pycache__/install_lib.cpython-39.pyc,, +setuptools/command/__pycache__/install_scripts.cpython-39.pyc,, +setuptools/command/__pycache__/py36compat.cpython-39.pyc,, +setuptools/command/__pycache__/register.cpython-39.pyc,, +setuptools/command/__pycache__/rotate.cpython-39.pyc,, +setuptools/command/__pycache__/saveopts.cpython-39.pyc,, +setuptools/command/__pycache__/sdist.cpython-39.pyc,, +setuptools/command/__pycache__/setopt.cpython-39.pyc,, +setuptools/command/__pycache__/test.cpython-39.pyc,, +setuptools/command/__pycache__/upload.cpython-39.pyc,, +setuptools/command/__pycache__/upload_docs.cpython-39.pyc,, +setuptools/command/alias.py,sha256=1sLQxZcNh6dDQpDmm4G7UGGTol83nY1NTPmNBbm2siI,2381 +setuptools/command/bdist_egg.py,sha256=-upiB6fFtm8cQSQj1LRDVpG1-T143DsXCvV0fh03u7U,16604 +setuptools/command/bdist_rpm.py,sha256=_4Y7tVAzu1zEuDc8tpRdE_sy3zST3h3LPTtzioos5Ck,900 +setuptools/command/build_clib.py,sha256=fWHSFGkk10VCddBWCszvNhowbG9Z9CZXVjQ2uSInoOs,4415 +setuptools/command/build_ext.py,sha256=aI_qnK9m8lULZDS6XMv_p2j2pIehVbSarb4PJHDA7dw,13027 +setuptools/command/build_py.py,sha256=10DNYiaM707UGJ-eV6YNcIKRN1pbU7UwXGYUXACrXU8,9473 +setuptools/command/develop.py,sha256=B0p5dh7VrSMdEfhdUE_AJlWk2UxAesOOY14CAV5_DEA,8045 +setuptools/command/dist_info.py,sha256=5t6kOfrdgALT-P3ogss6PF9k-Leyesueycuk3dUyZnI,960 +setuptools/command/easy_install.py,sha256=13BpU0YW0UNJY-k1OSVCPj7EnCZ0ep5fZCS0uKuZ0mY,85308 +setuptools/command/egg_info.py,sha256=oTvMvsBHYwxiqN6V4BgUZfJEcTm_piA7-Ft9aTuHZV4,25079 +setuptools/command/install.py,sha256=8doMxeQEDoK4Eco0mO2WlXXzzp9QnsGJQ7Z7yWkZPG8,4705 +setuptools/command/install_egg_info.py,sha256=bMgeIeRiXzQ4DAGPV1328kcjwQjHjOWU4FngAWLV78Q,2203 +setuptools/command/install_lib.py,sha256=Uz42McsyHZAjrB6cw9E7Bz0xsaTbzxnM1PI9CBhiPtE,3875 +setuptools/command/install_scripts.py,sha256=o0jN_ex7yYYk8W5clymTFOXwkFMKzW9q_zd9Npcex7M,2593 +setuptools/command/launcher manifest.xml,sha256=xlLbjWrB01tKC0-hlVkOKkiSPbzMml2eOPtJ_ucCnbE,628 +setuptools/command/py36compat.py,sha256=7yLWzQj179Enx3pJ8V1cDDCzeLMFMd9XJXlK-iZTq5Y,4946 +setuptools/command/register.py,sha256=kk3DxXCb5lXTvqnhfwx2g6q7iwbUmgTyXUCaBooBOUk,468 +setuptools/command/rotate.py,sha256=SvsQPasezIojPjvMnfkqzh8P0U0tCj0daczF8uc3NQM,2128 +setuptools/command/saveopts.py,sha256=za7QCBcQimKKriWcoCcbhxPjUz30gSB74zuTL47xpP4,658 +setuptools/command/sdist.py,sha256=iKVS1zk2EKw_UPiKzWGck8ytka05cWmX28iMvMH4rbk,7818 +setuptools/command/setopt.py,sha256=LicqlXockLqBOHYPNv1J032HxoBKD4HOHB11qm_t-Bs,5051 +setuptools/command/test.py,sha256=Y4jwjdX_4DCimImq6fDWoHzBniXDNJVEcD6XxVZIYS0,9469 +setuptools/command/upload.py,sha256=XT3YFVfYPAmA5qhGg0euluU98ftxRUW-PzKcODMLxUs,462 +setuptools/command/upload_docs.py,sha256=ba5kOyedD_u62weinrxqqnvpuQvBIuamXehJG6tAvO0,7218 +setuptools/config.py,sha256=aviJCeFXvJ_WHwfY9oFaiGOEm4Fv7DF2i9LaAsaD05k,22020 +setuptools/dep_util.py,sha256=BDx1BkzNQntvAB4alypHbW5UVBzjqths000PrUL4Zqc,949 +setuptools/depends.py,sha256=iHfZdLdlCu2BllSF9bRg7NU0oqbPWMH8ljm4BuwQDY0,5474 +setuptools/dist.py,sha256=E-U3VVCY7JEKf9Fz_dDkT-EFbUmbJ-XFP_2F2Fz0ivE,40150 +setuptools/errors.py,sha256=MVOcv381HNSajDgEUWzOQ4J6B5BHCBMSjHfaWcEwA1o,524 +setuptools/extension.py,sha256=NMM46XjNdVelWemc0x8CyVKA5Ks6Zm3xTWSA2SS6xZM,1684 +setuptools/extern/__init__.py,sha256=uhAc-U12cORBK_H6jUZnG0FF-xaLvFR8j25NH0J0oo4,2389 +setuptools/extern/__pycache__/__init__.cpython-39.pyc,, +setuptools/glob.py,sha256=1oZjbfjAHSXbgdhSuR6YGU8jKob9L8NtEmBYqcPTLYk,4873 +setuptools/gui-32.exe,sha256=XBr0bHMA6Hpz2s9s9Bzjl-PwXfa9nH4ie0rFn4V2kWA,65536 +setuptools/gui-64.exe,sha256=aYKMhX1IJLn4ULHgWX0sE0yREUt6B3TEHf_jOw6yNyE,75264 +setuptools/gui.exe,sha256=XBr0bHMA6Hpz2s9s9Bzjl-PwXfa9nH4ie0rFn4V2kWA,65536 +setuptools/installer.py,sha256=jbhb7ZVkNV_bSUMgfnLcZw0IHr6REFnKF4o7_1Jqxm0,3567 +setuptools/launch.py,sha256=TyPT-Ic1T2EnYvGO26gfNRP4ysBlrhpbRjQxWsiO414,812 +setuptools/lib2to3_ex.py,sha256=YKA7CmdIJWwy0-yuZAxUgoNHbXFmT4p53iNadWdBQCk,2335 +setuptools/monkey.py,sha256=0e3HdVKXHL415O7np-AUqhEFXPPuDdJKbI47chQ_DE4,5217 +setuptools/msvc.py,sha256=HfXdtbmhmxAZXaYFT2NBZrXT8Sdx3fZlh8yIbllLGZ0,51126 +setuptools/namespaces.py,sha256=PMqGVPXPYQgjUTvEg9bGccRAkIODrQ6NmsDg_fwErwI,3093 +setuptools/package_index.py,sha256=xa71H7yK5PunUHF7ngZipaoxw2KWPd23qQNPoDudsPU,40718 +setuptools/py34compat.py,sha256=KYOd6ybRxjBW8NJmYD8t_UyyVmysppFXqHpFLdslGXU,245 +setuptools/sandbox.py,sha256=IirxmeCHbl1CHT7pEPgQ6tTx9wU854n-d2p80Su8t5c,14151 +setuptools/script (dev).tmpl,sha256=RUzQzCQUaXtwdLtYHWYbIQmOaES5Brqq1FvUA_tu-5I,218 +setuptools/script.tmpl,sha256=WGTt5piezO27c-Dbx6l5Q4T3Ff20A5z7872hv3aAhYY,138 +setuptools/ssl_support.py,sha256=CPU_41S-x2V6qOuENr2wQsOSxlHvJAoXOxuAPbrxjpM,8565 +setuptools/unicode_utils.py,sha256=aOOFo4JGwAsiBttGYDsqFS7YqWQeZ2j6DWiCuctR_00,941 +setuptools/version.py,sha256=og_cuZQb0QI6ukKZFfZWPlr1HgJBPPn2vO2m_bI9ZTE,144 +setuptools/wheel.py,sha256=0P8tSk105uF_Ub-30N2HU2X2v7MKDSdjpeQlRRW3SkI,8288 +setuptools/windows_support.py,sha256=5GrfqSP2-dLGJoZTq2g6dCKkyQxxa2n5IQiXlJCoYEE,714 diff --git a/EXE version/main/setuptools-56.0.0.dist-info/REQUESTED b/EXE version/main/setuptools-56.0.0.dist-info/REQUESTED new file mode 100644 index 00000000..e69de29b diff --git a/EXE version/main/setuptools-56.0.0.dist-info/WHEEL b/EXE version/main/setuptools-56.0.0.dist-info/WHEEL new file mode 100644 index 00000000..385faab0 --- /dev/null +++ b/EXE version/main/setuptools-56.0.0.dist-info/WHEEL @@ -0,0 +1,5 @@ +Wheel-Version: 1.0 +Generator: bdist_wheel (0.36.2) +Root-Is-Purelib: true +Tag: py3-none-any + diff --git a/EXE version/main/setuptools-56.0.0.dist-info/dependency_links.txt b/EXE version/main/setuptools-56.0.0.dist-info/dependency_links.txt new file mode 100644 index 00000000..e87d0210 --- /dev/null +++ b/EXE version/main/setuptools-56.0.0.dist-info/dependency_links.txt @@ -0,0 +1,2 @@ +https://files.pythonhosted.org/packages/source/c/certifi/certifi-2016.9.26.tar.gz#md5=baa81e951a29958563689d868ef1064d +https://files.pythonhosted.org/packages/source/w/wincertstore/wincertstore-0.2.zip#md5=ae728f2f007185648d0c7a8679b361e2 diff --git a/EXE version/main/setuptools-56.0.0.dist-info/entry_points.txt b/EXE version/main/setuptools-56.0.0.dist-info/entry_points.txt new file mode 100644 index 00000000..d117e2ce --- /dev/null +++ b/EXE version/main/setuptools-56.0.0.dist-info/entry_points.txt @@ -0,0 +1,60 @@ +[distutils.commands] +alias = setuptools.command.alias:alias +bdist_egg = setuptools.command.bdist_egg:bdist_egg +bdist_rpm = setuptools.command.bdist_rpm:bdist_rpm +build_clib = setuptools.command.build_clib:build_clib +build_ext = setuptools.command.build_ext:build_ext +build_py = setuptools.command.build_py:build_py +develop = setuptools.command.develop:develop +dist_info = setuptools.command.dist_info:dist_info +easy_install = setuptools.command.easy_install:easy_install +egg_info = setuptools.command.egg_info:egg_info +install = setuptools.command.install:install +install_egg_info = setuptools.command.install_egg_info:install_egg_info +install_lib = setuptools.command.install_lib:install_lib +install_scripts = setuptools.command.install_scripts:install_scripts +rotate = setuptools.command.rotate:rotate +saveopts = setuptools.command.saveopts:saveopts +sdist = setuptools.command.sdist:sdist +setopt = setuptools.command.setopt:setopt +test = setuptools.command.test:test +upload_docs = setuptools.command.upload_docs:upload_docs + +[distutils.setup_keywords] +convert_2to3_doctests = setuptools.dist:assert_string_list +dependency_links = setuptools.dist:assert_string_list +eager_resources = setuptools.dist:assert_string_list +entry_points = setuptools.dist:check_entry_points +exclude_package_data = setuptools.dist:check_package_data +extras_require = setuptools.dist:check_extras +include_package_data = setuptools.dist:assert_bool +install_requires = setuptools.dist:check_requirements +namespace_packages = setuptools.dist:check_nsp +package_data = setuptools.dist:check_package_data +packages = setuptools.dist:check_packages +python_requires = setuptools.dist:check_specifier +setup_requires = setuptools.dist:check_requirements +test_loader = setuptools.dist:check_importable +test_runner = setuptools.dist:check_importable +test_suite = setuptools.dist:check_test_suite +tests_require = setuptools.dist:check_requirements +use_2to3 = setuptools.dist:assert_bool +use_2to3_exclude_fixers = setuptools.dist:assert_string_list +use_2to3_fixers = setuptools.dist:assert_string_list +zip_safe = setuptools.dist:assert_bool + +[egg_info.writers] +PKG-INFO = setuptools.command.egg_info:write_pkg_info +dependency_links.txt = setuptools.command.egg_info:overwrite_arg +depends.txt = setuptools.command.egg_info:warn_depends_obsolete +eager_resources.txt = setuptools.command.egg_info:overwrite_arg +entry_points.txt = setuptools.command.egg_info:write_entries +namespace_packages.txt = setuptools.command.egg_info:overwrite_arg +requires.txt = setuptools.command.egg_info:write_requirements +top_level.txt = setuptools.command.egg_info:write_toplevel_names + +[setuptools.finalize_distribution_options] +2to3_doctests = setuptools.dist:Distribution._finalize_2to3_doctests +keywords = setuptools.dist:Distribution._finalize_setup_keywords +parent_finalize = setuptools.dist:_Distribution.finalize_options + diff --git a/EXE version/main/setuptools-56.0.0.dist-info/top_level.txt b/EXE version/main/setuptools-56.0.0.dist-info/top_level.txt new file mode 100644 index 00000000..b5ac1070 --- /dev/null +++ b/EXE version/main/setuptools-56.0.0.dist-info/top_level.txt @@ -0,0 +1,3 @@ +_distutils_hack +pkg_resources +setuptools diff --git a/EXE version/main/source/__init__.py b/EXE version/main/source/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/EXE version/main/source/__pycache__/__init__.cpython-39.pyc b/EXE version/main/source/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 00000000..922f0b90 Binary files /dev/null and b/EXE version/main/source/__pycache__/__init__.cpython-39.pyc differ diff --git a/EXE version/main/source/__pycache__/constants.cpython-39.pyc b/EXE version/main/source/__pycache__/constants.cpython-39.pyc new file mode 100644 index 00000000..8ebb3b24 Binary files /dev/null and b/EXE version/main/source/__pycache__/constants.cpython-39.pyc differ diff --git a/EXE version/main/source/__pycache__/main.cpython-39.pyc b/EXE version/main/source/__pycache__/main.cpython-39.pyc new file mode 100644 index 00000000..3a9603fd Binary files /dev/null and b/EXE version/main/source/__pycache__/main.cpython-39.pyc differ diff --git a/EXE version/main/source/__pycache__/tool.cpython-39.pyc b/EXE version/main/source/__pycache__/tool.cpython-39.pyc new file mode 100644 index 00000000..624fc693 Binary files /dev/null and b/EXE version/main/source/__pycache__/tool.cpython-39.pyc differ diff --git a/EXE version/main/source/component/__init__.py b/EXE version/main/source/component/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/EXE version/main/source/component/__pycache__/__init__.cpython-39.pyc b/EXE version/main/source/component/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 00000000..89ee832a Binary files /dev/null and b/EXE version/main/source/component/__pycache__/__init__.cpython-39.pyc differ diff --git a/EXE version/main/source/component/__pycache__/map.cpython-39.pyc b/EXE version/main/source/component/__pycache__/map.cpython-39.pyc new file mode 100644 index 00000000..b64f307b Binary files /dev/null and b/EXE version/main/source/component/__pycache__/map.cpython-39.pyc differ diff --git a/EXE version/main/source/component/__pycache__/menubar.cpython-39.pyc b/EXE version/main/source/component/__pycache__/menubar.cpython-39.pyc new file mode 100644 index 00000000..ac30e95b Binary files /dev/null and b/EXE version/main/source/component/__pycache__/menubar.cpython-39.pyc differ diff --git a/EXE version/main/source/component/__pycache__/plant.cpython-39.pyc b/EXE version/main/source/component/__pycache__/plant.cpython-39.pyc new file mode 100644 index 00000000..1108874a Binary files /dev/null and b/EXE version/main/source/component/__pycache__/plant.cpython-39.pyc differ diff --git a/EXE version/main/source/component/__pycache__/zombie.cpython-39.pyc b/EXE version/main/source/component/__pycache__/zombie.cpython-39.pyc new file mode 100644 index 00000000..5e5f6a7f Binary files /dev/null and b/EXE version/main/source/component/__pycache__/zombie.cpython-39.pyc differ diff --git a/EXE version/main/source/component/map.py b/EXE version/main/source/component/map.py new file mode 100644 index 00000000..0de0eda5 --- /dev/null +++ b/EXE version/main/source/component/map.py @@ -0,0 +1,45 @@ +__author__ = 'marble_xu' + +import random +import pygame as pg +from .. import tool +from .. import constants as c + +class Map(): + def __init__(self, width, height): + self.width = width + self.height = height + self.map = [[0 for x in range(self.width)] for y in range(self.height)] + + def isValid(self, map_x, map_y): + if (map_x < 0 or map_x >= self.width or + map_y < 0 or map_y >= self.height): + return False + return True + + def isMovable(self, map_x, map_y): + return (self.map[map_y][map_x] == c.MAP_EMPTY) + + def getMapIndex(self, x, y): + x -= c.MAP_OFFSET_X + y -= c.MAP_OFFSET_Y + return (x // c.GRID_X_SIZE, y // c.GRID_Y_SIZE) + + def getMapGridPos(self, map_x, map_y): + return (map_x * c.GRID_X_SIZE + c.GRID_X_SIZE//2 + c.MAP_OFFSET_X, + map_y * c.GRID_Y_SIZE + c.GRID_Y_SIZE//5 * 3 + c.MAP_OFFSET_Y) + + def setMapGridType(self, map_x, map_y, type): + self.map[map_y][map_x] = type + + def getRandomMapIndex(self): + map_x = random.randint(0, self.width-1) + map_y = random.randint(0, self.height-1) + return (map_x, map_y) + + def showPlant(self, x, y): + pos = None + map_x, map_y = self.getMapIndex(x, y) + if self.isValid(map_x, map_y) and self.isMovable(map_x, map_y): + pos = self.getMapGridPos(map_x, map_y) + return pos diff --git a/EXE version/main/source/component/menubar.py b/EXE version/main/source/component/menubar.py new file mode 100644 index 00000000..56054a52 --- /dev/null +++ b/EXE version/main/source/component/menubar.py @@ -0,0 +1,441 @@ +__author__ = 'marble_xu' + +import random +import pygame as pg +from .. import tool +from .. import constants as c + +PANEL_Y_START = 87 +PANEL_X_START = 22 +PANEL_Y_INTERNAL = 74 +PANEL_X_INTERNAL = 53 +CARD_LIST_NUM = 8 + +card_name_list = [c.CARD_SUNFLOWER, c.CARD_PEASHOOTER, c.CARD_SNOWPEASHOOTER, c.CARD_WALLNUT, + c.CARD_CHERRYBOMB, c.CARD_THREEPEASHOOTER, c.CARD_REPEATERPEA, c.CARD_CHOMPER, + c.CARD_PUFFSHROOM, c.CARD_POTATOMINE, c.CARD_SQUASH, c.CARD_SPIKEWEED, + c.CARD_JALAPENO, c.CARD_SCAREDYSHROOM, c.CARD_SUNSHROOM, c.CARD_ICESHROOM, + c.CARD_HYPNOSHROOM, c.CARD_WALLNUT, c.CARD_REDWALLNUT] +plant_name_list = [c.SUNFLOWER, c.PEASHOOTER, c.SNOWPEASHOOTER, c.WALLNUT, + c.CHERRYBOMB, c.THREEPEASHOOTER, c.REPEATERPEA, c.CHOMPER, + c.PUFFSHROOM, c.POTATOMINE, c.SQUASH, c.SPIKEWEED, + c.JALAPENO, c.SCAREDYSHROOM, c.SUNSHROOM, c.ICESHROOM, + c.HYPNOSHROOM, c.WALLNUTBOWLING, c.REDWALLNUTBOWLING] +plant_sun_list = [50, 100, 175, 50, 150, 325, 200, 150, 0, 25, 50, 100, 125, 25, 25, 75, 75, 0, 0] +plant_frozen_time_list = [7500, 7500, 7500, 30000, 50000, 7500, 7500, 7500, 7500, 30000, + 30000, 7500, 50000, 7500, 7500, 50000, 30000, 0, 0] +all_card_list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16] + +def getSunValueImage(sun_value): + font = pg.font.SysFont(None, 22) + width = 32 + msg_image = font.render(str(sun_value), True, c.NAVYBLUE, c.LIGHTYELLOW) + msg_rect = msg_image.get_rect() + msg_w = msg_rect.width + + image = pg.Surface([width, 17]) + x = width - msg_w + + image.fill(c.LIGHTYELLOW) + image.blit(msg_image, (x, 0), (0, 0, msg_rect.w, msg_rect.h)) + image.set_colorkey(c.BLACK) + return image + +def getCardPool(data): + card_pool = [] + for card in data: + tmp = card['name'] + for i,name in enumerate(plant_name_list): + if name == tmp: + card_pool.append(i) + break + return card_pool + +class Card(): + def __init__(self, x, y, name_index, scale=0.78): + self.loadFrame(card_name_list[name_index], scale) + self.rect = self.orig_image.get_rect() + self.rect.x = x + self.rect.y = y + + self.name_index = name_index + self.sun_cost = plant_sun_list[name_index] + self.frozen_time = plant_frozen_time_list[name_index] + self.frozen_timer = -self.frozen_time + self.refresh_timer = 0 + self.select = True + + def loadFrame(self, name, scale): + frame = tool.GFX[name] + rect = frame.get_rect() + width, height = rect.w, rect.h + + self.orig_image = tool.get_image(frame, 0, 0, width, height, c.BLACK, scale) + self.image = self.orig_image + + def checkMouseClick(self, mouse_pos): + x, y = mouse_pos + if(x >= self.rect.x and x <= self.rect.right and + y >= self.rect.y and y <= self.rect.bottom): + return True + return False + + def canClick(self, sun_value, current_time): + if self.sun_cost <= sun_value and (current_time - self.frozen_timer) > self.frozen_time: + return True + return False + + def canSelect(self): + return self.select + + def setSelect(self, can_select): + self.select = can_select + if can_select: + self.image.set_alpha(255) + else: + self.image.set_alpha(128) + + def setFrozenTime(self, current_time): + self.frozen_timer = current_time + + def createShowImage(self, sun_value, current_time): + '''create a card image to show cool down status + or disable status when have not enough sun value''' + time = current_time - self.frozen_timer + if time < self.frozen_time: #cool down status + image = pg.Surface([self.rect.w, self.rect.h]) + frozen_image = self.orig_image.copy() + frozen_image.set_alpha(128) + frozen_height = (self.frozen_time - time)/self.frozen_time * self.rect.h + + image.blit(frozen_image, (0,0), (0, 0, self.rect.w, frozen_height)) + image.blit(self.orig_image, (0,frozen_height), + (0, frozen_height, self.rect.w, self.rect.h - frozen_height)) + elif self.sun_cost > sun_value: #disable status + image = self.orig_image.copy() + image.set_alpha(192) + else: + image = self.orig_image + return image + + def update(self, sun_value, current_time): + if (current_time - self.refresh_timer) >= 250: + self.image = self.createShowImage(sun_value, current_time) + self.refresh_timer = current_time + + def draw(self, surface): + surface.blit(self.image, self.rect) + +class MenuBar(): + def __init__(self, card_list, sun_value): + self.loadFrame(c.MENUBAR_BACKGROUND) + self.rect = self.image.get_rect() + self.rect.x = 10 + self.rect.y = 0 + + self.sun_value = sun_value + self.card_offset_x = 32 + self.setupCards(card_list) + + def loadFrame(self, name): + frame = tool.GFX[name] + rect = frame.get_rect() + frame_rect = (rect.x, rect.y, rect.w, rect.h) + + self.image = tool.get_image(tool.GFX[name], *frame_rect, c.WHITE, 1) + + def update(self, current_time): + self.current_time = current_time + for card in self.card_list: + card.update(self.sun_value, self.current_time) + + def createImage(self, x, y, num): + if num == 1: + return + img = self.image + rect = self.image.get_rect() + width = rect.w + height = rect.h + self.image = pg.Surface((width * num, height)).convert() + self.rect = self.image.get_rect() + self.rect.x = x + self.rect.y = y + for i in range(num): + x = i * width + self.image.blit(img, (x,0)) + self.image.set_colorkey(c.BLACK) + + def setupCards(self, card_list): + self.card_list = [] + x = self.card_offset_x + y = 8 + for index in card_list: + x += 55 + self.card_list.append(Card(x, y, index)) + + def checkCardClick(self, mouse_pos): + result = None + for card in self.card_list: + if card.checkMouseClick(mouse_pos): + if card.canClick(self.sun_value, self.current_time): + result = (plant_name_list[card.name_index], card) + break + return result + + def checkMenuBarClick(self, mouse_pos): + x, y = mouse_pos + if(x >= self.rect.x and x <= self.rect.right and + y >= self.rect.y and y <= self.rect.bottom): + return True + return False + + def decreaseSunValue(self, value): + self.sun_value -= value + + def increaseSunValue(self, value): + self.sun_value += value + + def setCardFrozenTime(self, plant_name): + for card in self.card_list: + if plant_name_list[card.name_index] == plant_name: + card.setFrozenTime(self.current_time) + break + + def drawSunValue(self): + self.value_image = getSunValueImage(self.sun_value) + self.value_rect = self.value_image.get_rect() + self.value_rect.x = 21 + self.value_rect.y = self.rect.bottom - 21 + + self.image.blit(self.value_image, self.value_rect) + + def draw(self, surface): + self.drawSunValue() + surface.blit(self.image, self.rect) + for card in self.card_list: + card.draw(surface) + +class Panel(): + def __init__(self, card_list, sun_value): + self.loadImages(sun_value) + self.selected_cards = [] + self.selected_num = 0 + self.setupCards(card_list) + + def loadFrame(self, name): + frame = tool.GFX[name] + rect = frame.get_rect() + frame_rect = (rect.x, rect.y, rect.w, rect.h) + + return tool.get_image(tool.GFX[name], *frame_rect, c.WHITE, 1) + + def loadImages(self, sun_value): + self.menu_image = self.loadFrame(c.MENUBAR_BACKGROUND) + self.menu_rect = self.menu_image.get_rect() + self.menu_rect.x = 0 + self.menu_rect.y = 0 + + self.panel_image = self.loadFrame(c.PANEL_BACKGROUND) + self.panel_rect = self.panel_image.get_rect() + self.panel_rect.x = 0 + self.panel_rect.y = PANEL_Y_START + + + self.value_image = getSunValueImage(sun_value) + self.value_rect = self.value_image.get_rect() + self.value_rect.x = 21 + self.value_rect.y = self.menu_rect.bottom - 21 + + self.button_image = self.loadFrame(c.START_BUTTON) + self.button_rect = self.button_image.get_rect() + self.button_rect.x = 155 + self.button_rect.y = 547 + + def setupCards(self, card_list): + self.card_list = [] + x = PANEL_X_START - PANEL_X_INTERNAL + y = PANEL_Y_START + 43 - PANEL_Y_INTERNAL + for i, index in enumerate(card_list): + if i % 8 == 0: + x = PANEL_X_START - PANEL_X_INTERNAL + y += PANEL_Y_INTERNAL + x += PANEL_X_INTERNAL + self.card_list.append(Card(x, y, index, 0.75)) + + def checkCardClick(self, mouse_pos): + delete_card = None + for card in self.selected_cards: + if delete_card: # when delete a card, move right cards to left + card.rect.x -= 55 + elif card.checkMouseClick(mouse_pos): + self.deleteCard(card.name_index) + delete_card = card + + if delete_card: + self.selected_cards.remove(delete_card) + self.selected_num -= 1 + + if self.selected_num == CARD_LIST_NUM: + return + + for card in self.card_list: + if card.checkMouseClick(mouse_pos): + if card.canSelect(): + self.addCard(card) + break + + def addCard(self, card): + card.setSelect(False) + y = 8 + x = 78 + self.selected_num * 55 + self.selected_cards.append(Card(x, y, card.name_index)) + self.selected_num += 1 + + def deleteCard(self, index): + self.card_list[index].setSelect(True) + + def checkStartButtonClick(self, mouse_pos): + if self.selected_num < CARD_LIST_NUM: + return False + + x, y = mouse_pos + if (x >= self.button_rect.x and x <= self.button_rect.right and + y >= self.button_rect.y and y <= self.button_rect.bottom): + return True + return False + + def getSelectedCards(self): + card_index_list = [] + for card in self.selected_cards: + card_index_list.append(card.name_index) + return card_index_list + + def draw(self, surface): + self.menu_image.blit(self.value_image, self.value_rect) + surface.blit(self.menu_image, self.menu_rect) + surface.blit(self.panel_image, self.panel_rect) + for card in self.card_list: + card.draw(surface) + for card in self.selected_cards: + card.draw(surface) + + if self.selected_num == CARD_LIST_NUM: + surface.blit(self.button_image, self.button_rect) + +class MoveCard(): + def __init__(self, x, y, card_name, plant_name, scale=0.78): + self.loadFrame(card_name, scale) + self.rect = self.orig_image.get_rect() + self.rect.x = x + self.rect.y = y + self.rect.w = 1 + self.image = self.createShowImage() + + self.card_name = card_name + self.plant_name = plant_name + self.move_timer = 0 + self.select = True + + def loadFrame(self, name, scale): + frame = tool.GFX[name] + rect = frame.get_rect() + width, height = rect.w, rect.h + + self.orig_image = tool.get_image(frame, 0, 0, width, height, c.BLACK, scale) + self.orig_rect = self.orig_image.get_rect() + self.image = self.orig_image + + def checkMouseClick(self, mouse_pos): + x, y = mouse_pos + if(x >= self.rect.x and x <= self.rect.right and + y >= self.rect.y and y <= self.rect.bottom): + return True + return False + + def createShowImage(self): + '''create a part card image when card appears from left''' + if self.rect.w < self.orig_rect.w: #create a part card image + image = pg.Surface([self.rect.w, self.rect.h]) + image.blit(self.orig_image, (0, 0), (0, 0, self.rect.w, self.rect.h)) + self.rect.w += 1 + else: + image = self.orig_image + return image + + def update(self, left_x, current_time): + if self.move_timer == 0: + self.move_timer = current_time + elif (current_time - self.move_timer) >= c.CARD_MOVE_TIME: + if self.rect.x > left_x: + self.rect.x -= 1 + self.image = self.createShowImage() + self.move_timer += c.CARD_MOVE_TIME + + def draw(self, surface): + surface.blit(self.image, self.rect) + +class MoveBar(): + def __init__(self, card_pool): + self.loadFrame(c.MOVEBAR_BACKGROUND) + self.rect = self.image.get_rect() + self.rect.x = 90 + self.rect.y = 0 + + self.card_start_x = self.rect.x + 8 + self.card_end_x = self.rect.right - 5 + self.card_pool = card_pool + self.card_list = [] + self.create_timer = -c.MOVEBAR_CARD_FRESH_TIME + + def loadFrame(self, name): + frame = tool.GFX[name] + rect = frame.get_rect() + frame_rect = (rect.x, rect.y, rect.w, rect.h) + + self.image = tool.get_image(tool.GFX[name], *frame_rect, c.WHITE, 1) + + def createCard(self): + if len(self.card_list) > 0 and self.card_list[-1].rect.right > self.card_end_x: + return False + x = self.card_end_x + y = 6 + index = random.randint(0, len(self.card_pool) - 1) + card_index = self.card_pool[index] + card_name = card_name_list[card_index] + '_move' + plant_name = plant_name_list[card_index] + self.card_list.append(MoveCard(x, y, card_name, plant_name)) + return True + + def update(self, current_time): + self.current_time = current_time + left_x = self.card_start_x + for card in self.card_list: + card.update(left_x, self.current_time) + left_x = card.rect.right + 1 + + if(self.current_time - self.create_timer) > c.MOVEBAR_CARD_FRESH_TIME: + if self.createCard(): + self.create_timer = self.current_time + + def checkCardClick(self, mouse_pos): + result = None + for index, card in enumerate(self.card_list): + if card.checkMouseClick(mouse_pos): + result = (card.plant_name, card) + break + return result + + def checkMenuBarClick(self, mouse_pos): + x, y = mouse_pos + if(x >= self.rect.x and x <= self.rect.right and + y >= self.rect.y and y <= self.rect.bottom): + return True + return False + + def deleateCard(self, card): + self.card_list.remove(card) + + def draw(self, surface): + surface.blit(self.image, self.rect) + for card in self.card_list: + card.draw(surface) \ No newline at end of file diff --git a/EXE version/main/source/component/plant.py b/EXE version/main/source/component/plant.py new file mode 100644 index 00000000..684065b1 --- /dev/null +++ b/EXE version/main/source/component/plant.py @@ -0,0 +1,971 @@ +__author__ = 'marble_xu' + +import random +import pygame as pg +from .. import tool +from .. import constants as c + +class Car(pg.sprite.Sprite): + def __init__(self, x, y, map_y): + pg.sprite.Sprite.__init__(self) + + rect = tool.GFX[c.CAR].get_rect() + width, height = rect.w, rect.h + self.image = tool.get_image(tool.GFX[c.CAR], 0, 0, width, height) + self.rect = self.image.get_rect() + self.rect.x = x + self.rect.bottom = y + self.map_y = map_y + self.state = c.IDLE + self.dead = False + + def update(self, game_info): + self.current_time = game_info[c.CURRENT_TIME] + if self.state == c.IDLE: + pass + elif self.state == c.WALK: + self.rect.x += 4 + if self.rect.x > c.SCREEN_WIDTH: + self.dead = True + + def setWalk(self): + if self.state == c.IDLE: + self.state = c.WALK + + def draw(self, surface): + surface.blit(self.image, self.rect) + +class Bullet(pg.sprite.Sprite): + def __init__(self, x, start_y, dest_y, name, damage, ice): + pg.sprite.Sprite.__init__(self) + + self.name = name + self.frames = [] + self.frame_index = 0 + self.load_images() + self.image = self.frames[self.frame_index] + self.rect = self.image.get_rect() + self.rect.x = x + self.rect.y = start_y + self.dest_y = dest_y + self.y_vel = 4 if (dest_y > start_y) else -4 + self.x_vel = 4 + self.damage = damage + self.ice = ice + self.state = c.FLY + self.current_time = 0 + + def loadFrames(self, frames, name): + frame_list = tool.GFX[name] + if name in tool.PLANT_RECT: + data = tool.PLANT_RECT[name] + x, y, width, height = data['x'], data['y'], data['width'], data['height'] + else: + x, y = 0, 0 + rect = frame_list[0].get_rect() + width, height = rect.w, rect.h + + for frame in frame_list: + frames.append(tool.get_image(frame, x, y, width, height)) + + def load_images(self): + self.fly_frames = [] + self.explode_frames = [] + + fly_name = self.name + if self.name == c.BULLET_MUSHROOM: + explode_name = 'BulletMushRoomExplode' + else: + explode_name = 'PeaNormalExplode' + + self.loadFrames(self.fly_frames, fly_name) + self.loadFrames(self.explode_frames, explode_name) + + self.frames = self.fly_frames + + def update(self, game_info): + self.current_time = game_info[c.CURRENT_TIME] + if self.state == c.FLY: + if self.rect.y != self.dest_y: + self.rect.y += self.y_vel + if self.y_vel * (self.dest_y - self.rect.y) < 0: + self.rect.y = self.dest_y + self.rect.x += self.x_vel + if self.rect.x > c.SCREEN_WIDTH: + self.kill() + elif self.state == c.EXPLODE: + if(self.current_time - self.explode_timer) > 500: + self.kill() + + def setExplode(self): + self.state = c.EXPLODE + self.explode_timer = self.current_time + self.frames = self.explode_frames + self.image = self.frames[self.frame_index] + + def draw(self, surface): + surface.blit(self.image, self.rect) + +class Plant(pg.sprite.Sprite): + def __init__(self, x, y, name, health, bullet_group, scale=1): + pg.sprite.Sprite.__init__(self) + + self.frames = [] + self.frame_index = 0 + self.loadImages(name, scale) + self.frame_num = len(self.frames) + self.image = self.frames[self.frame_index] + self.rect = self.image.get_rect() + self.rect.centerx = x + self.rect.bottom = y + + self.name = name + self.health = health + self.state = c.IDLE + self.bullet_group = bullet_group + self.can_sleep = False + self.animate_timer = 0 + self.animate_interval = 100 + self.hit_timer = 0 + + def loadFrames(self, frames, name, scale, color=c.BLACK): + frame_list = tool.GFX[name] + if name in tool.PLANT_RECT: + data = tool.PLANT_RECT[name] + x, y, width, height = data['x'], data['y'], data['width'], data['height'] + else: + x, y = 0, 0 + rect = frame_list[0].get_rect() + width, height = rect.w, rect.h + + for frame in frame_list: + frames.append(tool.get_image(frame, x, y, width, height, color, scale)) + + def loadImages(self, name, scale): + self.loadFrames(self.frames, name, scale) + + def changeFrames(self, frames): + '''change image frames and modify rect position''' + self.frames = frames + self.frame_num = len(self.frames) + self.frame_index = 0 + + bottom = self.rect.bottom + x = self.rect.x + self.image = self.frames[self.frame_index] + self.rect = self.image.get_rect() + self.rect.bottom = bottom + self.rect.x = x + + def update(self, game_info): + self.current_time = game_info[c.CURRENT_TIME] + self.handleState() + self.animation() + + def handleState(self): + if self.state == c.IDLE: + self.idling() + elif self.state == c.ATTACK: + self.attacking() + elif self.state == c.DIGEST: + self.digest() + + def idling(self): + pass + + def attacking(self): + pass + + def digest(self): + pass + + def animation(self): + if (self.current_time - self.animate_timer) > self.animate_interval: + self.frame_index += 1 + if self.frame_index >= self.frame_num: + self.frame_index = 0 + self.animate_timer = self.current_time + + self.image = self.frames[self.frame_index] + if(self.current_time - self.hit_timer) >= 200: + self.image.set_alpha(255) + else: + self.image.set_alpha(192) + + def canAttack(self, zombie): + if (self.state != c.SLEEP and zombie.state != c.DIE and + self.rect.x <= zombie.rect.right): + return True + return False + + def setAttack(self): + self.state = c.ATTACK + + def setIdle(self): + self.state = c.IDLE + self.is_attacked = False + + def setSleep(self): + self.state = c.SLEEP + self.changeFrames(self.sleep_frames) + + def setDamage(self, damage, zombie): + self.health -= damage + self.hit_timer = self.current_time + if self.health == 0: + self.kill_zombie = zombie + + def getPosition(self): + return self.rect.centerx, self.rect.bottom + +class Sun(Plant): + def __init__(self, x, y, dest_x, dest_y, is_big=True): + if is_big: + scale = 0.9 + self.sun_value = c.SUN_VALUE + else: + scale = 0.6 + self.sun_value = 12 + Plant.__init__(self, x, y, c.SUN, 0, None, scale) + self.move_speed = 1 + self.dest_x = dest_x + self.dest_y = dest_y + self.die_timer = 0 + + def handleState(self): + if self.rect.centerx != self.dest_x: + self.rect.centerx += self.move_speed if self.rect.centerx < self.dest_x else -self.move_speed + if self.rect.bottom != self.dest_y: + self.rect.bottom += self.move_speed if self.rect.bottom < self.dest_y else -self.move_speed + + if self.rect.centerx == self.dest_x and self.rect.bottom == self.dest_y: + if self.die_timer == 0: + self.die_timer = self.current_time + elif(self.current_time - self.die_timer) > c.SUN_LIVE_TIME: + self.state = c.DIE + self.kill() + + def checkCollision(self, x, y): + if self.state == c.DIE: + return False + if(x >= self.rect.x and x <= self.rect.right and + y >= self.rect.y and y <= self.rect.bottom): + self.state = c.DIE + self.kill() + return True + return False + +class SunFlower(Plant): + def __init__(self, x, y, sun_group): + Plant.__init__(self, x, y, c.SUNFLOWER, c.PLANT_HEALTH, None) + self.sun_timer = 0 + self.sun_group = sun_group + + def idling(self): + if self.sun_timer == 0: + self.sun_timer = self.current_time - (c.FLOWER_SUN_INTERVAL - 6000) + elif (self.current_time - self.sun_timer) > c.FLOWER_SUN_INTERVAL: + self.sun_group.add(Sun(self.rect.centerx, self.rect.bottom, self.rect.right, self.rect.bottom + self.rect.h // 2)) + self.sun_timer = self.current_time + +class PeaShooter(Plant): + def __init__(self, x, y, bullet_group): + Plant.__init__(self, x, y, c.PEASHOOTER, c.PLANT_HEALTH, bullet_group) + self.shoot_timer = 0 + + def attacking(self): + if (self.current_time - self.shoot_timer) > 2000: + self.bullet_group.add(Bullet(self.rect.right, self.rect.y, self.rect.y, + c.BULLET_PEA, c.BULLET_DAMAGE_NORMAL, False)) + self.shoot_timer = self.current_time + +class RepeaterPea(Plant): + def __init__(self, x, y, bullet_group): + Plant.__init__(self, x, y, c.REPEATERPEA, c.PLANT_HEALTH, bullet_group) + self.shoot_timer = 0 + + def attacking(self): + if (self.current_time - self.shoot_timer) > 2000: + self.bullet_group.add(Bullet(self.rect.right, self.rect.y, self.rect.y, + c.BULLET_PEA, c.BULLET_DAMAGE_NORMAL, False)) + self.bullet_group.add(Bullet(self.rect.right + 40, self.rect.y, self.rect.y, + c.BULLET_PEA, c.BULLET_DAMAGE_NORMAL, False)) + self.shoot_timer = self.current_time + +class ThreePeaShooter(Plant): + def __init__(self, x, y, bullet_groups, map_y): + Plant.__init__(self, x, y, c.THREEPEASHOOTER, c.PLANT_HEALTH, None) + self.shoot_timer = 0 + self.map_y = map_y + self.bullet_groups = bullet_groups + + def attacking(self): + if (self.current_time - self.shoot_timer) > 2000: + offset_y = 9 # modify bullet in the same y position with bullets of other plants + for i in range(3): + tmp_y = self.map_y + (i - 1) + if tmp_y < 0 or tmp_y >= c.GRID_Y_LEN: + continue + dest_y = self.rect.y + (i - 1) * c.GRID_Y_SIZE + offset_y + self.bullet_groups[tmp_y].add(Bullet(self.rect.right, self.rect.y, dest_y, + c.BULLET_PEA, c.BULLET_DAMAGE_NORMAL, False)) + self.shoot_timer = self.current_time + +class SnowPeaShooter(Plant): + def __init__(self, x, y, bullet_group): + Plant.__init__(self, x, y, c.SNOWPEASHOOTER, c.PLANT_HEALTH, bullet_group) + self.shoot_timer = 0 + + def attacking(self): + if (self.current_time - self.shoot_timer) > 2000: + self.bullet_group.add(Bullet(self.rect.right, self.rect.y, self.rect.y, + c.BULLET_PEA_ICE, c.BULLET_DAMAGE_NORMAL, True)) + self.shoot_timer = self.current_time + +class WallNut(Plant): + def __init__(self, x, y): + Plant.__init__(self, x, y, c.WALLNUT, c.WALLNUT_HEALTH, None) + self.load_images() + self.cracked1 = False + self.cracked2 = False + + def load_images(self): + self.cracked1_frames = [] + self.cracked2_frames = [] + + cracked1_frames_name = self.name + '_cracked1' + cracked2_frames_name = self.name + '_cracked2' + + self.loadFrames(self.cracked1_frames, cracked1_frames_name, 1) + self.loadFrames(self.cracked2_frames, cracked2_frames_name, 1) + + def idling(self): + if not self.cracked1 and self.health <= c.WALLNUT_CRACKED1_HEALTH: + self.changeFrames(self.cracked1_frames) + self.cracked1 = True + elif not self.cracked2 and self.health <= c.WALLNUT_CRACKED2_HEALTH: + self.changeFrames(self.cracked2_frames) + self.cracked2 = True + +class CherryBomb(Plant): + def __init__(self, x, y): + Plant.__init__(self, x, y, c.CHERRYBOMB, c.WALLNUT_HEALTH, None) + self.state = c.ATTACK + self.start_boom = False + self.bomb_timer = 0 + self.explode_y_range = 1 + self.explode_x_range = c.GRID_X_SIZE + + def setBoom(self): + frame = tool.GFX[c.CHERRY_BOOM_IMAGE] + rect = frame.get_rect() + width, height = rect.w, rect.h + + old_rect = self.rect + image = tool.get_image(frame, 0, 0, width, height, c.BLACK, 1) + self.image = image + self.rect = image.get_rect() + self.rect.centerx = old_rect.centerx + self.rect.centery = old_rect.centery + self.start_boom = True + + def animation(self): + if self.start_boom: + if self.bomb_timer == 0: + self.bomb_timer = self.current_time + elif(self.current_time - self.bomb_timer) > 500: + self.health = 0 + else: + if (self.current_time - self.animate_timer) > 100: + self.frame_index += 1 + if self.frame_index >= self.frame_num: + self.setBoom() + return + self.animate_timer = self.current_time + + self.image = self.frames[self.frame_index] + +class Chomper(Plant): + def __init__(self, x, y): + Plant.__init__(self, x, y, c.CHOMPER, c.PLANT_HEALTH, None) + self.animate_interval = 250 + self.digest_timer = 0 + self.digest_interval = 15000 + self.attack_zombie = None + self.zombie_group = None + + def loadImages(self, name, scale): + self.idle_frames = [] + self.attack_frames = [] + self.digest_frames = [] + + idle_name = name + attack_name = name + 'Attack' + digest_name = name + 'Digest' + + frame_list = [self.idle_frames, self.attack_frames, self.digest_frames] + name_list = [idle_name, attack_name, digest_name] + scale_list = [1, 1, 1] + rect_list = [(0, 0, 100, 114), None, None] + + for i, name in enumerate(name_list): + self.loadFrames(frame_list[i], name, scale_list[i]) + + self.frames = self.idle_frames + + def canAttack(self, zombie): + if (self.state == c.IDLE and zombie.state != c.DIGEST and + self.rect.x <= zombie.rect.right and + (self.rect.right + c.GRID_X_SIZE//3 >= zombie.rect.x)): + return True + return False + + def setIdle(self): + self.state = c.IDLE + self.changeFrames(self.idle_frames) + + def setAttack(self, zombie, zombie_group): + self.attack_zombie = zombie + self.zombie_group = zombie_group + self.state = c.ATTACK + self.changeFrames(self.attack_frames) + + def setDigest(self): + self.state = c.DIGEST + self.changeFrames(self.digest_frames) + + def attacking(self): + if self.frame_index == (self.frame_num - 3): + self.zombie_group.remove(self.attack_zombie) + if (self.frame_index + 1) == self.frame_num: + self.setDigest() + + def digest(self): + if self.digest_timer == 0: + self.digest_timer = self.current_time + elif (self.current_time - self.digest_timer) > self.digest_interval: + self.digest_timer = 0 + self.attack_zombie.kill() + self.setIdle() + +class PuffShroom(Plant): + def __init__(self, x, y, bullet_group): + Plant.__init__(self, x, y, c.PUFFSHROOM, c.PLANT_HEALTH, bullet_group) + self.can_sleep = True + self.shoot_timer = 0 + + def loadImages(self, name, scale): + self.idle_frames = [] + self.sleep_frames = [] + + idle_name = name + sleep_name = name + 'Sleep' + + frame_list = [self.idle_frames, self.sleep_frames] + name_list = [idle_name, sleep_name] + + for i, name in enumerate(name_list): + self.loadFrames(frame_list[i], name, 1) + + self.frames = self.idle_frames + + def attacking(self): + if (self.current_time - self.shoot_timer) > 3000: + self.bullet_group.add(Bullet(self.rect.right, self.rect.y + 10, self.rect.y + 10, + c.BULLET_MUSHROOM, c.BULLET_DAMAGE_NORMAL, True)) + self.shoot_timer = self.current_time + + def canAttack(self, zombie): + if (self.rect.x <= zombie.rect.right and + (self.rect.right + c.GRID_X_SIZE * 4 >= zombie.rect.x)): + return True + return False + +class PotatoMine(Plant): + def __init__(self, x, y): + Plant.__init__(self, x, y, c.POTATOMINE, c.PLANT_HEALTH, None) + self.animate_interval = 300 + self.is_init = True + self.init_timer = 0 + self.bomb_timer = 0 + self.explode_y_range = 0 + self.explode_x_range = c.GRID_X_SIZE//3 * 2 + + def loadImages(self, name, scale): + self.init_frames = [] + self.idle_frames = [] + self.explode_frames = [] + + init_name = name + 'Init' + idle_name = name + explode_name = name + 'Explode' + + frame_list = [self.init_frames, self.idle_frames, self.explode_frames] + name_list = [init_name, idle_name, explode_name] + + for i, name in enumerate(name_list): + self.loadFrames(frame_list[i], name, 1, c.WHITE) + + self.frames = self.init_frames + + def idling(self): + if self.is_init: + if self.init_timer == 0: + self.init_timer = self.current_time + elif (self.current_time - self.init_timer) > 15000: + self.changeFrames(self.idle_frames) + self.is_init = False + + def canAttack(self, zombie): + if (not self.is_init and zombie.rect.right >= self.rect.x and + (zombie.rect.x - self.rect.x) <= self.explode_x_range): + return True + return False + + def attacking(self): + if self.bomb_timer == 0: + self.bomb_timer = self.current_time + self.changeFrames(self.explode_frames) + elif (self.current_time - self.bomb_timer) > 500: + self.health = 0 + +class Squash(Plant): + def __init__(self, x, y): + Plant.__init__(self, x, y, c.SQUASH, c.PLANT_HEALTH, None) + self.orig_pos = (x, y) + self.aim_timer = 0 + self.squashing = False + + def loadImages(self, name, scale): + self.idle_frames = [] + self.aim_frames = [] + self.attack_frames = [] + + idle_name = name + aim_name = name + 'Aim' + attack_name = name + 'Attack' + + frame_list = [self.idle_frames, self.aim_frames, self.attack_frames] + name_list = [idle_name, aim_name, attack_name] + + for i, name in enumerate(name_list): + self.loadFrames(frame_list[i], name, 1, c.WHITE) + + self.frames = self.idle_frames + + def canAttack(self, zombie): + if (self.state == c.IDLE and self.rect.x <= zombie.rect.right and + (self.rect.right + c.GRID_X_SIZE >= zombie.rect.x)): + return True + return False + + def setAttack(self, zombie, zombie_group): + self.attack_zombie = zombie + self.zombie_group = zombie_group + self.state = c.ATTACK + + def attacking(self): + if self.squashing: + if self.frame_index == 2: + self.zombie_group.remove(self.attack_zombie) + if (self.frame_index + 1) == self.frame_num: + self.attack_zombie.kill() + self.health = 0 + elif self.aim_timer == 0: + self.aim_timer = self.current_time + self.changeFrames(self.aim_frames) + elif (self.current_time - self.aim_timer) > 1000: + self.changeFrames(self.attack_frames) + self.rect.centerx = self.attack_zombie.rect.centerx + self.squashing = True + self.animate_interval = 300 + + def getPosition(self): + return self.orig_pos + +class Spikeweed(Plant): + def __init__(self, x, y): + Plant.__init__(self, x, y, c.SPIKEWEED, c.PLANT_HEALTH, None) + self.animate_interval = 200 + self.attack_timer = 0 + + def loadImages(self, name, scale): + self.loadFrames(self.frames, name, 0.9, c.WHITE) + + def setIdle(self): + print('spikeweed idle') + self.animate_interval = 200 + self.state = c.IDLE + + def canAttack(self, zombie): + if (self.rect.x <= zombie.rect.right and + (self.rect.right >= zombie.rect.x)): + return True + return False + + def setAttack(self, zombie_group): + self.zombie_group = zombie_group + self.animate_interval = 50 + self.state = c.ATTACK + + def attacking(self): + if (self.current_time - self.attack_timer) > 2000: + self.attack_timer = self.current_time + for zombie in self.zombie_group: + if self.canAttack(zombie): + zombie.setDamage(1, False) + +class Jalapeno(Plant): + def __init__(self, x, y): + Plant.__init__(self, x, y, c.JALAPENO, c.PLANT_HEALTH, None) + self.orig_pos = (x, y) + self.state = c.ATTACK + self.start_explode = False + self.explode_y_range = 0 + self.explode_x_range = 377 + + def loadImages(self, name, scale): + self.explode_frames = [] + explode_name = name + 'Explode' + self.loadFrames(self.explode_frames, explode_name, 1, c.WHITE) + + self.loadFrames(self.frames, name, 1, c.WHITE) + + def setExplode(self): + self.changeFrames(self.explode_frames) + self.animate_timer = self.current_time + self.rect.x = c.MAP_OFFSET_X + self.start_explode = True + + def animation(self): + if self.start_explode: + if(self.current_time - self.animate_timer) > 100: + self.frame_index += 1 + if self.frame_index >= self.frame_num: + self.health = 0 + return + self.animate_timer = self.current_time + else: + if (self.current_time - self.animate_timer) > 100: + self.frame_index += 1 + if self.frame_index >= self.frame_num: + self.setExplode() + return + self.animate_timer = self.current_time + self.image = self.frames[self.frame_index] + + def getPosition(self): + return self.orig_pos + +class ScaredyShroom(Plant): + def __init__(self, x, y, bullet_group): + Plant.__init__(self, x, y, c.SCAREDYSHROOM, c.PLANT_HEALTH, bullet_group) + self.can_sleep = True + self.shoot_timer = 0 + self.cry_x_range = c.GRID_X_SIZE * 2 + + def loadImages(self, name, scale): + self.idle_frames = [] + self.cry_frames = [] + self.sleep_frames = [] + + idle_name = name + cry_name = name + 'Cry' + sleep_name = name + 'Sleep' + + frame_list = [self.idle_frames, self.cry_frames, self.sleep_frames] + name_list = [idle_name, cry_name, sleep_name] + + for i, name in enumerate(name_list): + self.loadFrames(frame_list[i], name, 1, c.WHITE) + + self.frames = self.idle_frames + + def needCry(self, zombie): + if (zombie.state != c.DIE and self.rect.x <= zombie.rect.right and + self.rect.x + self.cry_x_range > zombie.rect.x): + return True + return False + + def setCry(self): + self.state = c.CRY + self.changeFrames(self.cry_frames) + + def setAttack(self): + self.state = c.ATTACK + self.changeFrames(self.idle_frames) + + def setIdle(self): + self.state = c.IDLE + self.changeFrames(self.idle_frames) + + def attacking(self): + if (self.current_time - self.shoot_timer) > 2000: + self.bullet_group.add(Bullet(self.rect.right, self.rect.y + 40, self.rect.y + 40, + c.BULLET_MUSHROOM, c.BULLET_DAMAGE_NORMAL, True)) + self.shoot_timer = self.current_time + +class SunShroom(Plant): + def __init__(self, x, y, sun_group): + Plant.__init__(self, x, y, c.SUNSHROOM, c.PLANT_HEALTH, None) + self.can_sleep = True + self.animate_interval = 200 + self.sun_timer = 0 + self.sun_group = sun_group + self.is_big = False + self.change_timer = 0 + + def loadImages(self, name, scale): + self.idle_frames = [] + self.big_frames = [] + self.sleep_frames = [] + + idle_name = name + big_name = name + 'Big' + sleep_name = name + 'Sleep' + + frame_list = [self.idle_frames, self.big_frames, self.sleep_frames] + name_list = [idle_name, big_name, sleep_name] + + for i, name in enumerate(name_list): + self.loadFrames(frame_list[i], name, 1, c.WHITE) + + self.frames = self.idle_frames + + def idling(self): + if not self.is_big: + if self.change_timer == 0: + self.change_timer = self.current_time + elif (self.current_time - self.change_timer) > 25000: + self.changeFrames(self.big_frames) + self.is_big = True + + if self.sun_timer == 0: + self.sun_timer = self.current_time - (c.FLOWER_SUN_INTERVAL - 6000) + elif (self.current_time - self.sun_timer) > c.FLOWER_SUN_INTERVAL: + self.sun_group.add(Sun(self.rect.centerx, self.rect.bottom, self.rect.right, + self.rect.bottom + self.rect.h // 2, self.is_big)) + self.sun_timer = self.current_time + +class IceShroom(Plant): + def __init__(self, x, y): + Plant.__init__(self, x, y, c.ICESHROOM, c.PLANT_HEALTH, None) + self.can_sleep = True + self.orig_pos = (x, y) + self.start_freeze = False + + def loadImages(self, name, scale): + self.idle_frames = [] + self.snow_frames = [] + self.sleep_frames = [] + self.trap_frames = [] + + idle_name = name + snow_name = name + 'Snow' + sleep_name = name + 'Sleep' + trap_name = name + 'Trap' + + frame_list = [self.idle_frames, self.snow_frames, self.sleep_frames, self.trap_frames] + name_list = [idle_name, snow_name, sleep_name, trap_name] + scale_list = [1, 1.5, 1, 1] + + for i, name in enumerate(name_list): + self.loadFrames(frame_list[i], name, scale_list[i], c.WHITE) + + self.frames = self.idle_frames + + def setFreeze(self): + self.changeFrames(self.snow_frames) + self.animate_timer = self.current_time + self.rect.x = c.MAP_OFFSET_X + self.rect.y = c.MAP_OFFSET_Y + self.start_freeze = True + + def animation(self): + if self.start_freeze: + if(self.current_time - self.animate_timer) > 500: + self.frame_index += 1 + if self.frame_index >= self.frame_num: + self.health = 0 + return + self.animate_timer = self.current_time + else: + if (self.current_time - self.animate_timer) > 100: + self.frame_index += 1 + if self.frame_index >= self.frame_num: + if self.state == c.SLEEP: + self.frame_index = 0 + else: + self.setFreeze() + return + self.animate_timer = self.current_time + self.image = self.frames[self.frame_index] + + def getPosition(self): + return self.orig_pos + +class HypnoShroom(Plant): + def __init__(self, x, y): + Plant.__init__(self, x, y, c.HYPNOSHROOM, 1, None) + self.can_sleep = True + self.animate_interval = 200 + + def loadImages(self, name, scale): + self.idle_frames = [] + self.sleep_frames = [] + + idle_name = name + sleep_name = name + 'Sleep' + + frame_list = [self.idle_frames, self.sleep_frames] + name_list = [idle_name, sleep_name] + + for i, name in enumerate(name_list): + self.loadFrames(frame_list[i], name, 1, c.WHITE) + + self.frames = self.idle_frames + +class WallNutBowling(Plant): + def __init__(self, x, y, map_y, level): + Plant.__init__(self, x, y, c.WALLNUTBOWLING, 1, None) + self.map_y = map_y + self.level = level + self.init_rect = self.rect.copy() + self.rotate_degree = 0 + self.animate_interval = 200 + self.move_timer = 0 + self.move_interval = 70 + self.vel_x = random.randint(12, 15) + self.vel_y = 0 + self.disable_hit_y = -1 + + def loadImages(self, name, scale): + self.loadFrames(self.frames, name, 1, c.WHITE) + + def idling(self): + if self.move_timer == 0: + self.move_timer = self.current_time + elif (self.current_time - self.move_timer) >= self.move_interval: + self.rotate_degree = (self.rotate_degree - 30) % 360 + self.init_rect.x += self.vel_x + self.init_rect.y += self.vel_y + self.handleMapYPosition() + if self.shouldChangeDirection(): + self.changeDirection(-1) + if self.init_rect.x > c.SCREEN_WIDTH: + self.health = 0 + self.move_timer += self.move_interval + + def canHit(self, map_y): + if self.disable_hit_y == map_y: + return False + return True + + def handleMapYPosition(self): + _, map_y1 = self.level.map.getMapIndex(self.init_rect.x, self.init_rect.centery) + _, map_y2 = self.level.map.getMapIndex(self.init_rect.x, self.init_rect.bottom) + if self.map_y != map_y1 and map_y1 == map_y2: + # wallnut bowls to another row, should modify which plant group it belongs to + self.level.plant_groups[self.map_y].remove(self) + self.level.plant_groups[map_y1].add(self) + self.map_y = map_y1 + + def shouldChangeDirection(self): + if self.init_rect.centery <= c.MAP_OFFSET_Y: + return True + elif self.init_rect.bottom + 20 >= c.SCREEN_HEIGHT: + return True + return False + + def changeDirection(self, map_y): + if self.vel_y == 0: + if self.map_y == 0: + direc = 1 + elif self.map_y == (c.GRID_Y_LEN-1): + direc = -1 + else: + if random.randint(0, 1) == 0: + direc = 1 + else: + direc = -1 + self.vel_y = self.vel_x * direc + else: + self.vel_y = - self.vel_y + + self.disable_hit_y = map_y + + def animation(self): + if (self.current_time - self.animate_timer) > self.animate_interval: + self.frame_index += 1 + if self.frame_index >= self.frame_num: + self.frame_index = 0 + self.animate_timer = self.current_time + + image = self.frames[self.frame_index] + self.image = pg.transform.rotate(image, self.rotate_degree) + # must keep the center postion of image when rotate + self.rect = self.image.get_rect(center=self.init_rect.center) + +class RedWallNutBowling(Plant): + def __init__(self, x, y): + Plant.__init__(self, x, y, c.REDWALLNUTBOWLING, 1, None) + self.orig_y = y + self.explode_timer = 0 + self.explode_y_range = 1 + self.explode_x_range = c.GRID_X_SIZE + self.init_rect = self.rect.copy() + self.rotate_degree = 0 + self.animate_interval = 200 + self.move_timer = 0 + self.move_interval = 70 + self.vel_x = random.randint(12, 15) + + def loadImages(self, name, scale): + self.idle_frames = [] + self.explode_frames = [] + + idle_name = name + explode_name = name + 'Explode' + + frame_list = [self.idle_frames, self.explode_frames] + name_list = [idle_name, explode_name] + + for i, name in enumerate(name_list): + self.loadFrames(frame_list[i], name, 1, c.WHITE) + + self.frames = self.idle_frames + + def idling(self): + if self.move_timer == 0: + self.move_timer = self.current_time + elif (self.current_time - self.move_timer) >= self.move_interval: + self.rotate_degree = (self.rotate_degree - 30) % 360 + self.init_rect.x += self.vel_x + if self.init_rect.x > c.SCREEN_WIDTH: + self.health = 0 + self.move_timer += self.move_interval + + def attacking(self): + if self.explode_timer == 0: + self.explode_timer = self.current_time + self.changeFrames(self.explode_frames) + elif (self.current_time - self.explode_timer) > 500: + self.health = 0 + + def animation(self): + if (self.current_time - self.animate_timer) > self.animate_interval: + self.frame_index += 1 + if self.frame_index >= self.frame_num: + self.frame_index = 0 + self.animate_timer = self.current_time + + image = self.frames[self.frame_index] + if self.state == c.IDLE: + self.image = pg.transform.rotate(image, self.rotate_degree) + else: + self.image = image + # must keep the center postion of image when rotate + self.rect = self.image.get_rect(center=self.init_rect.center) + + def getPosition(self): + return (self.rect.centerx, self.orig_y) \ No newline at end of file diff --git a/EXE version/main/source/component/zombie.py b/EXE version/main/source/component/zombie.py new file mode 100644 index 00000000..73780f13 --- /dev/null +++ b/EXE version/main/source/component/zombie.py @@ -0,0 +1,414 @@ +__author__ = 'marble_xu' + +import pygame as pg +from .. import tool +from .. import constants as c + +class Zombie(pg.sprite.Sprite): + def __init__(self, x, y, name, health, head_group=None, damage=1): + pg.sprite.Sprite.__init__(self) + + self.name = name + self.frames = [] + self.frame_index = 0 + self.loadImages() + self.frame_num = len(self.frames) + + self.image = self.frames[self.frame_index] + self.rect = self.image.get_rect() + self.rect.centerx = x + self.rect.bottom = y + + self.health = health + self.damage = damage + self.dead = False + self.losHead = False + self.helmet = False + self.head_group = head_group + + self.walk_timer = 0 + self.animate_timer = 0 + self.attack_timer = 0 + self.state = c.WALK + self.animate_interval = 150 + self.ice_slow_ratio = 1 + self.ice_slow_timer = 0 + self.hit_timer = 0 + self.speed = 1 + self.freeze_timer = 0 + self.is_hypno = False # the zombie is hypo and attack other zombies when it ate a HypnoShroom + + def loadFrames(self, frames, name, image_x, colorkey=c.BLACK): + frame_list = tool.GFX[name] + rect = frame_list[0].get_rect() + width, height = rect.w, rect.h + width -= image_x + + for frame in frame_list: + frames.append(tool.get_image(frame, image_x, 0, width, height, colorkey)) + + def update(self, game_info): + self.current_time = game_info[c.CURRENT_TIME] + self.handleState() + self.updateIceSlow() + self.animation() + + def handleState(self): + if self.state == c.WALK: + self.walking() + elif self.state == c.ATTACK: + self.attacking() + elif self.state == c.DIE: + self.dying() + elif self.state == c.FREEZE: + self.freezing() + + def walking(self): + if self.health <= 0: + self.setDie() + elif self.health <= c.LOSTHEAD_HEALTH and not self.losHead: + self.changeFrames(self.losthead_walk_frames) + self.setLostHead() + elif self.health <= c.NORMAL_HEALTH and self.helmet: + self.changeFrames(self.walk_frames) + self.helmet = False + if self.name == c.NEWSPAPER_ZOMBIE: + self.speed = 2 + + if (self.current_time - self.walk_timer) > (c.ZOMBIE_WALK_INTERVAL * self.getTimeRatio()): + self.walk_timer = self.current_time + if self.is_hypno: + self.rect.x += self.speed + else: + self.rect.x -= self.speed + + def attacking(self): + if self.health <= 0: + self.setDie() + elif self.health <= c.LOSTHEAD_HEALTH and not self.losHead: + self.changeFrames(self.losthead_attack_frames) + self.setLostHead() + elif self.health <= c.NORMAL_HEALTH and self.helmet: + self.changeFrames(self.attack_frames) + self.helmet = False + if (self.current_time - self.attack_timer) > (c.ATTACK_INTERVAL * self.getTimeRatio()): + if self.prey.health > 0: + if self.prey_is_plant: + self.prey.setDamage(self.damage, self) + else: + self.prey.setDamage(self.damage) + self.attack_timer = self.current_time + + if self.prey.health <= 0: + self.prey = None + self.setWalk() + + def dying(self): + pass + + def freezing(self): + if self.health <= 0: + self.setDie() + elif self.health <= c.LOSTHEAD_HEALTH and not self.losHead: + if self.old_state == c.WALK: + self.changeFrames(self.losthead_walk_frames) + else: + self.changeFrames(self.losthead_attack_frames) + self.setLostHead() + if (self.current_time - self.freeze_timer) > c.FREEZE_TIME: + self.setWalk() + + def setLostHead(self): + self.losHead = True + if self.head_group is not None: + self.head_group.add(ZombieHead(self.rect.centerx, self.rect.bottom)) + + def changeFrames(self, frames): + '''change image frames and modify rect position''' + self.frames = frames + self.frame_num = len(self.frames) + self.frame_index = 0 + + bottom = self.rect.bottom + centerx = self.rect.centerx + self.image = self.frames[self.frame_index] + self.rect = self.image.get_rect() + self.rect.bottom = bottom + self.rect.centerx = centerx + + def animation(self): + if self.state == c.FREEZE: + self.image.set_alpha(192) + return + + if (self.current_time - self.animate_timer) > (self.animate_interval * self.getTimeRatio()): + self.frame_index += 1 + if self.frame_index >= self.frame_num: + if self.state == c.DIE: + self.kill() + return + self.frame_index = 0 + self.animate_timer = self.current_time + + self.image = self.frames[self.frame_index] + if self.is_hypno: + self.image = pg.transform.flip(self.image, True, False) + if(self.current_time - self.hit_timer) >= 200: + self.image.set_alpha(255) + else: + self.image.set_alpha(192) + + def getTimeRatio(self): + return self.ice_slow_ratio + + def setIceSlow(self): + '''when get a ice bullet damage, slow the attack or walk speed of the zombie''' + self.ice_slow_timer = self.current_time + self.ice_slow_ratio = 2 + + def updateIceSlow(self): + if self.ice_slow_ratio > 1: + if (self.current_time - self.ice_slow_timer) > c.ICE_SLOW_TIME: + self.ice_slow_ratio = 1 + + def setDamage(self, damage, ice=False): + self.health -= damage + self.hit_timer = self.current_time + if ice: + self.setIceSlow() + + def setWalk(self): + self.state = c.WALK + self.animate_interval = 150 + + if self.helmet: + self.changeFrames(self.helmet_walk_frames) + elif self.losHead: + self.changeFrames(self.losthead_walk_frames) + else: + self.changeFrames(self.walk_frames) + + def setAttack(self, prey, is_plant=True): + self.prey = prey # prey can be plant or other zombies + self.prey_is_plant = is_plant + self.state = c.ATTACK + self.attack_timer = self.current_time + self.animate_interval = 100 + + if self.helmet: + self.changeFrames(self.helmet_attack_frames) + elif self.losHead: + self.changeFrames(self.losthead_attack_frames) + else: + self.changeFrames(self.attack_frames) + + def setDie(self): + self.state = c.DIE + self.animate_interval = 200 + self.changeFrames(self.die_frames) + + def setBoomDie(self): + self.state = c.DIE + self.animate_interval = 200 + self.changeFrames(self.boomdie_frames) + + def setFreeze(self, ice_trap_image): + self.old_state = self.state + self.state = c.FREEZE + self.freeze_timer = self.current_time + self.ice_trap_image = ice_trap_image + self.ice_trap_rect = ice_trap_image.get_rect() + self.ice_trap_rect.centerx = self.rect.centerx + self.ice_trap_rect.bottom = self.rect.bottom + + def drawFreezeTrap(self, surface): + if self.state == c.FREEZE: + surface.blit(self.ice_trap_image, self.ice_trap_rect) + + def setHypno(self): + self.is_hypno = True + self.setWalk() + +class ZombieHead(Zombie): + def __init__(self, x, y): + Zombie.__init__(self, x, y, c.ZOMBIE_HEAD, 0) + self.state = c.DIE + + def loadImages(self): + self.die_frames = [] + die_name = self.name + self.loadFrames(self.die_frames, die_name, 0) + self.frames = self.die_frames + + def setWalk(self): + self.animate_interval = 100 + +class NormalZombie(Zombie): + def __init__(self, x, y, head_group): + Zombie.__init__(self, x, y, c.NORMAL_ZOMBIE, c.NORMAL_HEALTH, head_group) + + def loadImages(self): + self.walk_frames = [] + self.attack_frames = [] + self.losthead_walk_frames = [] + self.losthead_attack_frames = [] + self.die_frames = [] + self.boomdie_frames = [] + + walk_name = self.name + attack_name = self.name + 'Attack' + losthead_walk_name = self.name + 'LostHead' + losthead_attack_name = self.name + 'LostHeadAttack' + die_name = self.name + 'Die' + boomdie_name = c.BOOMDIE + + frame_list = [self.walk_frames, self.attack_frames, self.losthead_walk_frames, + self.losthead_attack_frames, self.die_frames, self.boomdie_frames] + name_list = [walk_name, attack_name, losthead_walk_name, + losthead_attack_name, die_name, boomdie_name] + + for i, name in enumerate(name_list): + self.loadFrames(frame_list[i], name, tool.ZOMBIE_RECT[name]['x']) + + self.frames = self.walk_frames + +class ConeHeadZombie(Zombie): + def __init__(self, x, y, head_group): + Zombie.__init__(self, x, y, c.CONEHEAD_ZOMBIE, c.CONEHEAD_HEALTH, head_group) + self.helmet = True + + def loadImages(self): + self.helmet_walk_frames = [] + self.helmet_attack_frames = [] + self.walk_frames = [] + self.attack_frames = [] + self.losthead_walk_frames = [] + self.losthead_attack_frames = [] + self.die_frames = [] + self.boomdie_frames = [] + + helmet_walk_name = self.name + helmet_attack_name = self.name + 'Attack' + walk_name = c.NORMAL_ZOMBIE + attack_name = c.NORMAL_ZOMBIE + 'Attack' + losthead_walk_name = c.NORMAL_ZOMBIE + 'LostHead' + losthead_attack_name = c.NORMAL_ZOMBIE + 'LostHeadAttack' + die_name = c.NORMAL_ZOMBIE + 'Die' + boomdie_name = c.BOOMDIE + + frame_list = [self.helmet_walk_frames, self.helmet_attack_frames, + self.walk_frames, self.attack_frames, self.losthead_walk_frames, + self.losthead_attack_frames, self.die_frames, self.boomdie_frames] + name_list = [helmet_walk_name, helmet_attack_name, + walk_name, attack_name, losthead_walk_name, + losthead_attack_name, die_name, boomdie_name] + + for i, name in enumerate(name_list): + self.loadFrames(frame_list[i], name, tool.ZOMBIE_RECT[name]['x']) + + self.frames = self.helmet_walk_frames + +class BucketHeadZombie(Zombie): + def __init__(self, x, y, head_group): + Zombie.__init__(self, x, y, c.BUCKETHEAD_ZOMBIE, c.BUCKETHEAD_HEALTH, head_group) + self.helmet = True + + def loadImages(self): + self.helmet_walk_frames = [] + self.helmet_attack_frames = [] + self.walk_frames = [] + self.attack_frames = [] + self.losthead_walk_frames = [] + self.losthead_attack_frames = [] + self.die_frames = [] + self.boomdie_frames = [] + + helmet_walk_name = self.name + helmet_attack_name = self.name + 'Attack' + walk_name = c.NORMAL_ZOMBIE + attack_name = c.NORMAL_ZOMBIE + 'Attack' + losthead_walk_name = c.NORMAL_ZOMBIE + 'LostHead' + losthead_attack_name = c.NORMAL_ZOMBIE + 'LostHeadAttack' + die_name = c.NORMAL_ZOMBIE + 'Die' + boomdie_name = c.BOOMDIE + + frame_list = [self.helmet_walk_frames, self.helmet_attack_frames, + self.walk_frames, self.attack_frames, self.losthead_walk_frames, + self.losthead_attack_frames, self.die_frames, self.boomdie_frames] + name_list = [helmet_walk_name, helmet_attack_name, + walk_name, attack_name, losthead_walk_name, + losthead_attack_name, die_name, boomdie_name] + + for i, name in enumerate(name_list): + self.loadFrames(frame_list[i], name, tool.ZOMBIE_RECT[name]['x']) + + self.frames = self.helmet_walk_frames + +class FlagZombie(Zombie): + def __init__(self, x, y, head_group): + Zombie.__init__(self, x, y, c.FLAG_ZOMBIE, c.FLAG_HEALTH, head_group) + + def loadImages(self): + self.walk_frames = [] + self.attack_frames = [] + self.losthead_walk_frames = [] + self.losthead_attack_frames = [] + self.die_frames = [] + self.boomdie_frames = [] + + walk_name = self.name + attack_name = self.name + 'Attack' + losthead_walk_name = self.name + 'LostHead' + losthead_attack_name = self.name + 'LostHeadAttack' + die_name = c.NORMAL_ZOMBIE + 'Die' + boomdie_name = c.BOOMDIE + + frame_list = [self.walk_frames, self.attack_frames, self.losthead_walk_frames, + self.losthead_attack_frames, self.die_frames, self.boomdie_frames] + name_list = [walk_name, attack_name, losthead_walk_name, + losthead_attack_name, die_name, boomdie_name] + + for i, name in enumerate(name_list): + self.loadFrames(frame_list[i], name, tool.ZOMBIE_RECT[name]['x']) + + self.frames = self.walk_frames + +class NewspaperZombie(Zombie): + def __init__(self, x, y, head_group): + Zombie.__init__(self, x, y, c.NEWSPAPER_ZOMBIE, c.NEWSPAPER_HEALTH, head_group) + self.helmet = True + + def loadImages(self): + self.helmet_walk_frames = [] + self.helmet_attack_frames = [] + self.walk_frames = [] + self.attack_frames = [] + self.losthead_walk_frames = [] + self.losthead_attack_frames = [] + self.die_frames = [] + self.boomdie_frames = [] + + helmet_walk_name = self.name + helmet_attack_name = self.name + 'Attack' + walk_name = self.name + 'NoPaper' + attack_name = self.name + 'NoPaperAttack' + losthead_walk_name = self.name + 'LostHead' + losthead_attack_name = self.name + 'LostHeadAttack' + die_name = self.name + 'Die' + boomdie_name = c.BOOMDIE + + frame_list = [self.helmet_walk_frames, self.helmet_attack_frames, + self.walk_frames, self.attack_frames, self.losthead_walk_frames, + self.losthead_attack_frames, self.die_frames, self.boomdie_frames] + name_list = [helmet_walk_name, helmet_attack_name, + walk_name, attack_name, losthead_walk_name, + losthead_attack_name, die_name, boomdie_name] + + for i, name in enumerate(name_list): + if name == c.BOOMDIE: + color = c.BLACK + else: + color = c.WHITE + self.loadFrames(frame_list[i], name, tool.ZOMBIE_RECT[name]['x'], color) + + self.frames = self.helmet_walk_frames \ No newline at end of file diff --git a/EXE version/main/source/constants.py b/EXE version/main/source/constants.py new file mode 100644 index 00000000..0c4e2b6e --- /dev/null +++ b/EXE version/main/source/constants.py @@ -0,0 +1,180 @@ +__author__ = 'marble_xu' + +START_LEVEL_NUM = 1 + +ORIGINAL_CAPTION = 'Plant VS Zombies Game' + +SCREEN_WIDTH = 800 +SCREEN_HEIGHT = 600 +SCREEN_SIZE = (SCREEN_WIDTH, SCREEN_HEIGHT) + +GRID_X_LEN = 9 +GRID_Y_LEN = 5 +GRID_X_SIZE = 80 +GRID_Y_SIZE = 100 + + +WHITE = (255, 255, 255) +NAVYBLUE = ( 60, 60, 100) +SKY_BLUE = ( 39, 145, 251) +BLACK = ( 0, 0, 0) +LIGHTYELLOW = (234, 233, 171) +RED = (255, 0, 0) +PURPLE = (255, 0, 255) +GOLD = (255, 215, 0) +GREEN = ( 0, 255, 0) + +SIZE_MULTIPLIER = 1.3 + +#GAME INFO DICTIONARY KEYS +CURRENT_TIME = 'current time' +LEVEL_NUM = 'level num' + +#STATES FOR ENTIRE GAME +MAIN_MENU = 'main menu' +LOAD_SCREEN = 'load screen' +GAME_LOSE = 'game los' +GAME_VICTORY = 'game victory' +LEVEL = 'level' + +MAIN_MENU_IMAGE = 'MainMenu' +OPTION_ADVENTURE = 'Adventure' +GAME_LOOSE_IMAGE = 'GameLoose' +GAME_VICTORY_IMAGE = 'GameVictory' + +#MAP COMPONENTS +BACKGROUND_NAME = 'Background' +BACKGROUND_TYPE = 'background_type' +INIT_SUN_NAME = 'init_sun_value' +ZOMBIE_LIST = 'zombie_list' + +MAP_EMPTY = 0 +MAP_EXIST = 1 + +BACKGROUND_OFFSET_X = 220 +MAP_OFFSET_X = 35 +MAP_OFFSET_Y = 100 + +#MENUBAR +CHOOSEBAR_TYPE = 'choosebar_type' +CHOOSEBAR_STATIC = 0 +CHOOSEBAR_MOVE = 1 +CHOSSEBAR_BOWLING = 2 +MENUBAR_BACKGROUND = 'ChooserBackground' +MOVEBAR_BACKGROUND = 'MoveBackground' +PANEL_BACKGROUND = 'PanelBackground' +START_BUTTON = 'StartButton' +CARD_POOL = 'card_pool' + +MOVEBAR_CARD_FRESH_TIME = 6000 +CARD_MOVE_TIME = 60 + +#PLANT INFO +PLANT_IMAGE_RECT = 'plant_image_rect' +CAR = 'car' +SUN = 'Sun' +SUNFLOWER = 'SunFlower' +PEASHOOTER = 'Peashooter' +SNOWPEASHOOTER = 'SnowPea' +WALLNUT = 'WallNut' +CHERRYBOMB = 'CherryBomb' +THREEPEASHOOTER = 'Threepeater' +REPEATERPEA = 'RepeaterPea' +CHOMPER = 'Chomper' +CHERRY_BOOM_IMAGE = 'Boom' +PUFFSHROOM = 'PuffShroom' +POTATOMINE = 'PotatoMine' +SQUASH = 'Squash' +SPIKEWEED = 'Spikeweed' +JALAPENO = 'Jalapeno' +SCAREDYSHROOM = 'ScaredyShroom' +SUNSHROOM = 'SunShroom' +ICESHROOM = 'IceShroom' +HYPNOSHROOM = 'HypnoShroom' +WALLNUTBOWLING = 'WallNutBowling' +REDWALLNUTBOWLING = 'RedWallNutBowling' + +PLANT_HEALTH = 5 +WALLNUT_HEALTH = 30 +WALLNUT_CRACKED1_HEALTH = 20 +WALLNUT_CRACKED2_HEALTH = 10 +WALLNUT_BOWLING_DAMAGE = 10 + +PRODUCE_SUN_INTERVAL = 7000 +FLOWER_SUN_INTERVAL = 22000 +SUN_LIVE_TIME = 7000 +SUN_VALUE = 25 + +ICE_SLOW_TIME = 2000 + +FREEZE_TIME = 7500 +ICETRAP = 'IceTrap' + +#PLANT CARD INFO +CARD_SUNFLOWER = 'card_sunflower' +CARD_PEASHOOTER = 'card_peashooter' +CARD_SNOWPEASHOOTER = 'card_snowpea' +CARD_WALLNUT = 'card_wallnut' +CARD_CHERRYBOMB = 'card_cherrybomb' +CARD_THREEPEASHOOTER = 'card_threepeashooter' +CARD_REPEATERPEA = 'card_repeaterpea' +CARD_CHOMPER = 'card_chomper' +CARD_PUFFSHROOM = 'card_puffshroom' +CARD_POTATOMINE = 'card_potatomine' +CARD_SQUASH = 'card_squash' +CARD_SPIKEWEED = 'card_spikeweed' +CARD_JALAPENO = 'card_jalapeno' +CARD_SCAREDYSHROOM = 'card_scaredyshroom' +CARD_SUNSHROOM = 'card_sunshroom' +CARD_ICESHROOM = 'card_iceshroom' +CARD_HYPNOSHROOM = 'card_hypnoshroom' +CARD_REDWALLNUT = 'card_redwallnut' + +#BULLET INFO +BULLET_PEA = 'PeaNormal' +BULLET_PEA_ICE = 'PeaIce' +BULLET_MUSHROOM = 'BulletMushRoom' +BULLET_DAMAGE_NORMAL = 1 + +#ZOMBIE INFO +ZOMBIE_IMAGE_RECT = 'zombie_image_rect' +ZOMBIE_HEAD = 'ZombieHead' +NORMAL_ZOMBIE = 'Zombie' +CONEHEAD_ZOMBIE = 'ConeheadZombie' +BUCKETHEAD_ZOMBIE = 'BucketheadZombie' +FLAG_ZOMBIE = 'FlagZombie' +NEWSPAPER_ZOMBIE = 'NewspaperZombie' +BOOMDIE = 'BoomDie' + +LOSTHEAD_HEALTH = 5 +NORMAL_HEALTH = 10 +FLAG_HEALTH = 15 +CONEHEAD_HEALTH = 20 +BUCKETHEAD_HEALTH = 30 +NEWSPAPER_HEALTH = 15 + +ATTACK_INTERVAL = 1000 +ZOMBIE_WALK_INTERVAL = 70 + +ZOMBIE_START_X = SCREEN_WIDTH + 50 + +#STATE +IDLE = 'idle' +FLY = 'fly' +EXPLODE = 'explode' +ATTACK = 'attack' +ATTACKED = 'attacked' +DIGEST = 'digest' +WALK = 'walk' +DIE = 'die' +CRY = 'cry' +FREEZE = 'freeze' +SLEEP = 'sleep' + +#LEVEL STATE +CHOOSE = 'choose' +PLAY = 'play' + +#BACKGROUND +BACKGROUND_DAY = 0 +BACKGROUND_NIGHT = 1 \ No newline at end of file diff --git a/EXE version/main/source/data/entity/plant.json b/EXE version/main/source/data/entity/plant.json new file mode 100644 index 00000000..a790f7c0 --- /dev/null +++ b/EXE version/main/source/data/entity/plant.json @@ -0,0 +1,14 @@ +{ + "plant_image_rect":{ + "PeaNormal":{"x":28, "y":0, "width":28, "height":34}, + "PeaIce":{"x":26, "y":0, "width":30, "height":34}, + "Chomper":{"x":0, "y":0, "width":100, "height":114}, + "PuffShroom":{"x":0, "y":28, "width":35, "height":38}, + "PuffShroomSleep":{"x":1, "y":0, "width":39, "height":65}, + "BulletMushRoom":{"x":0, "y":1, "width":55, "height":21}, + "PotatoMine":{"x":0, "y":0, "width":75, "height":55}, + "Squash":{"x":10, "y":140, "width":80, "height":86}, + "SquashAim":{"x":10, "y":140, "width":80, "height":86}, + "Spikeweed":{"x":3, "y":0, "width":80, "height":35} + } +} \ No newline at end of file diff --git a/EXE version/main/source/data/entity/zombie.json b/EXE version/main/source/data/entity/zombie.json new file mode 100644 index 00000000..bbc81fba --- /dev/null +++ b/EXE version/main/source/data/entity/zombie.json @@ -0,0 +1,25 @@ +{ + "zombie_image_rect":{ + "Zombie":{"x":62, "width":90}, + "ZombieAttack":{"x":62, "width":90}, + "ZombieLostHead":{"x":62, "width":90}, + "ZombieLostHeadAttack":{"x":62, "width":90}, + "ZombieDie":{"x":0, "width":164}, + "BoomDie":{"x":68, "width":80}, + "ConeheadZombie":{"x":80, "width":80}, + "ConeheadZombieAttack":{"x":79, "width":87}, + "BucketheadZombie":{"x":54, "width":90}, + "BucketheadZombieAttack":{"x":46, "width":90}, + "FlagZombie":{"x":56, "width":110}, + "FlagZombieAttack":{"x":60, "width":100}, + "FlagZombieLostHead":{"x":55, "width":110}, + "FlagZombieLostHeadAttack":{"x":55, "width":110}, + "NewspaperZombie":{"x":48, "width":92}, + "NewspaperZombieAttack":{"x":48, "width":92}, + "NewspaperZombieNoPaper":{"x":40, "width":98}, + "NewspaperZombieNoPaperAttack":{"x":48, "width":92}, + "NewspaperZombieLostHead":{"x":44, "width":96}, + "NewspaperZombieLostHeadAttack":{"x":48, "width":92}, + "NewspaperZombieDie":{"x":0, "width":100} + } +} \ No newline at end of file diff --git a/EXE version/main/source/data/map/level_0.json b/EXE version/main/source/data/map/level_0.json new file mode 100644 index 00000000..c22fd757 --- /dev/null +++ b/EXE version/main/source/data/map/level_0.json @@ -0,0 +1,7 @@ +{ + "background_type":0, + "init_sun_value":500, + "zombie_list":[ + {"time":1000, "map_y":2, "name":"Zombie"} + ] +} \ No newline at end of file diff --git a/EXE version/main/source/data/map/level_1.json b/EXE version/main/source/data/map/level_1.json new file mode 100644 index 00000000..59801a4d --- /dev/null +++ b/EXE version/main/source/data/map/level_1.json @@ -0,0 +1,19 @@ +{ + "background_type":0, + "init_sun_value":50, + "zombie_list":[ + {"time":20000, "map_y":0, "name":"Zombie"}, + {"time":40000, "map_y":2, "name":"FlagZombie"}, + {"time":50000, "map_y":4, "name":"Zombie"}, + {"time":70000, "map_y":3, "name":"Zombie"}, + {"time":72000, "map_y":1, "name":"FlagZombie"}, + {"time":74000, "map_y":2, "name":"Zombie"}, + {"time":90000, "map_y":0, "name":"Zombie"}, + {"time":91000, "map_y":1, "name":"FlagZombie"}, + {"time":92000, "map_y":2, "name":"Zombie"}, + {"time":93000, "map_y":3, "name":"FlagZombie"}, + {"time":94000, "map_y":0, "name":"Zombie"}, + {"time":95000, "map_y":4, "name":"FlagZombie"}, + {"time":96000, "map_y":1, "name":"Zombie"} + ] +} \ No newline at end of file diff --git a/EXE version/main/source/data/map/level_2.json b/EXE version/main/source/data/map/level_2.json new file mode 100644 index 00000000..b3d9170d --- /dev/null +++ b/EXE version/main/source/data/map/level_2.json @@ -0,0 +1,19 @@ +{ + "background_type":0, + "init_sun_value":50, + "zombie_list":[ + {"time":20000, "map_y":0, "name":"Zombie"}, + {"time":40000, "map_y":2, "name":"FlagZombie"}, + {"time":50000, "map_y":4, "name":"ConeheadZombie"}, + {"time":70000, "map_y":3, "name":"ConeheadZombie"}, + {"time":72000, "map_y":1, "name":"FlagZombie"}, + {"time":74000, "map_y":2, "name":"ConeheadZombie"}, + {"time":90000, "map_y":0, "name":"FlagZombie"}, + {"time":91000, "map_y":1, "name":"ConeheadZombie"}, + {"time":92000, "map_y":2, "name":"Zombie"}, + {"time":93000, "map_y":3, "name":"ConeheadZombie"}, + {"time":94000, "map_y":0, "name":"Zombie"}, + {"time":95000, "map_y":4, "name":"FlagZombie"}, + {"time":96000, "map_y":1, "name":"ConeheadZombie"} + ] +} \ No newline at end of file diff --git a/EXE version/main/source/data/map/level_3.json b/EXE version/main/source/data/map/level_3.json new file mode 100644 index 00000000..04ad595b --- /dev/null +++ b/EXE version/main/source/data/map/level_3.json @@ -0,0 +1,20 @@ +{ + "background_type":1, + "init_sun_value":50, + "zombie_list":[ + {"time":20000, "map_y":0, "name":"Zombie"}, + {"time":40000, "map_y":2, "name":"ConeheadZombie"}, + {"time":50000, "map_y":4, "name":"BucketheadZombie"}, + {"time":70000, "map_y":3, "name":"BucketheadZombie"}, + {"time":72000, "map_y":1, "name":"FlagZombie"}, + {"time":74000, "map_y":2, "name":"ConeheadZombie"}, + {"time":90000, "map_y":0, "name":"BucketheadZombie"}, + {"time":91000, "map_y":1, "name":"ConeheadZombie"}, + {"time":92000, "map_y":2, "name":"Zombie"}, + {"time":93000, "map_y":3, "name":"BucketheadZombie"}, + {"time":94000, "map_y":0, "name":"Zombie"}, + {"time":95000, "map_y":4, "name":"FlagZombie"}, + {"time":96000, "map_y":1, "name":"BucketheadZombie"}, + {"time":97000, "map_y":1, "name":"FlagZombie"} + ] +} diff --git a/EXE version/main/source/data/map/level_4.json b/EXE version/main/source/data/map/level_4.json new file mode 100644 index 00000000..aaa525be --- /dev/null +++ b/EXE version/main/source/data/map/level_4.json @@ -0,0 +1,41 @@ +{ + "background_type":0, + "choosebar_type":1, + "card_pool":[ + {"name":"Peashooter"}, + {"name":"SnowPea"}, + {"name":"WallNut"}, + {"name":"CherryBomb"}, + {"name":"RepeaterPea"}, + {"name":"Chomper"}, + {"name":"PotatoMine"} + ], + "zombie_list":[ + {"time": 1000, "map_y":1, "name":"Zombie"}, + {"time": 6000, "map_y":3, "name":"FlagZombie"}, + {"time":10000, "map_y":0, "name":"ConeheadZombie"}, + {"time":14000, "map_y":2, "name":"NewspaperZombie"}, + {"time":18000, "map_y":4, "name":"BucketheadZombie"}, + {"time":22000, "map_y":0, "name":"Zombie"}, + {"time":26000, "map_y":3, "name":"BucketheadZombie"}, + {"time":30000, "map_y":4, "name":"Zombie"}, + {"time":32000, "map_y":3, "name":"NewspaperZombie"}, + {"time":34000, "map_y":1, "name":"FlagZombie"}, + {"time":36000, "map_y":2, "name":"ConeheadZombie"}, + {"time":38000, "map_y":0, "name":"BucketheadZombie"}, + {"time":40000, "map_y":1, "name":"ConeheadZombie"}, + {"time":42000, "map_y":1, "name":"NewspaperZombie"}, + {"time":60000, "map_y":4, "name":"Zombie"}, + {"time":61000, "map_y":3, "name":"NewspaperZombie"}, + {"time":62000, "map_y":1, "name":"FlagZombie"}, + {"time":63000, "map_y":2, "name":"Zombie"}, + {"time":64000, "map_y":0, "name":"BucketheadZombie"}, + {"time":65000, "map_y":1, "name":"ConeheadZombie"}, + {"time":66000, "map_y":2, "name":"Zombie"}, + {"time":67000, "map_y":4, "name":"BucketheadZombie"}, + {"time":68000, "map_y":3, "name":"NewspaperZombie"}, + {"time":69000, "map_y":1, "name":"FlagZombie"}, + {"time":70000, "map_y":4, "name":"BucketheadZombie"}, + {"time":71000, "map_y":0, "name":"FlagZombie"} + ] +} \ No newline at end of file diff --git a/EXE version/main/source/data/map/level_5.json b/EXE version/main/source/data/map/level_5.json new file mode 100644 index 00000000..343c68b9 --- /dev/null +++ b/EXE version/main/source/data/map/level_5.json @@ -0,0 +1,33 @@ +{ + "background_type":4, + "choosebar_type":2, + "card_pool":[ + {"name":"WallNutBowling"}, + {"name":"RedWallNutBowling"} + ], + "zombie_list":[ + {"time": 1000, "map_y":1, "name":"Zombie"}, + {"time":10000, "map_y":3, "name":"FlagZombie"}, + {"time":12000, "map_y":0, "name":"ConeheadZombie"}, + {"time":14000, "map_y":2, "name":"NewspaperZombie"}, + {"time":18000, "map_y":4, "name":"BucketheadZombie"}, + {"time":22000, "map_y":3, "name":"Zombie"}, + {"time":26000, "map_y":1, "name":"BucketheadZombie"}, + {"time":30000, "map_y":4, "name":"Zombie"}, + {"time":32000, "map_y":3, "name":"NewspaperZombie"}, + {"time":34000, "map_y":1, "name":"FlagZombie"}, + {"time":36000, "map_y":2, "name":"ConeheadZombie"}, + {"time":40000, "map_y":1, "name":"ConeheadZombie"}, + {"time":42000, "map_y":1, "name":"NewspaperZombie"}, + {"time":50000, "map_y":4, "name":"Zombie"}, + {"time":54000, "map_y":3, "name":"NewspaperZombie"}, + {"time":58000, "map_y":1, "name":"FlagZombie"}, + {"time":62000, "map_y":2, "name":"Zombie"}, + {"time":64000, "map_y":1, "name":"ConeheadZombie"}, + {"time":66000, "map_y":2, "name":"Zombie"}, + {"time":68000, "map_y":3, "name":"NewspaperZombie"}, + {"time":70000, "map_y":1, "name":"FlagZombie"}, + {"time":72000, "map_y":4, "name":"BucketheadZombie"}, + {"time":74000, "map_y":0, "name":"FlagZombie"} + ] +} \ No newline at end of file diff --git a/EXE version/main/source/main.py b/EXE version/main/source/main.py new file mode 100644 index 00000000..92fcdc19 --- /dev/null +++ b/EXE version/main/source/main.py @@ -0,0 +1,14 @@ +__author__ = 'marble_xu' + +from . import tool +from . import constants as c +from .state import mainmenu, screen, level + +def main(): + game = tool.Control() + state_dict = {c.MAIN_MENU: mainmenu.Menu(), + c.GAME_VICTORY: screen.GameVictoryScreen(), + c.GAME_LOSE: screen.GameLoseScreen(), + c.LEVEL: level.Level()} + game.setup_states(state_dict, c.MAIN_MENU) + game.main() \ No newline at end of file diff --git a/EXE version/main/source/state/__init__.py b/EXE version/main/source/state/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/EXE version/main/source/state/__pycache__/__init__.cpython-39.pyc b/EXE version/main/source/state/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 00000000..08e8b4ee Binary files /dev/null and b/EXE version/main/source/state/__pycache__/__init__.cpython-39.pyc differ diff --git a/EXE version/main/source/state/__pycache__/level.cpython-39.pyc b/EXE version/main/source/state/__pycache__/level.cpython-39.pyc new file mode 100644 index 00000000..b5a98b90 Binary files /dev/null and b/EXE version/main/source/state/__pycache__/level.cpython-39.pyc differ diff --git a/EXE version/main/source/state/__pycache__/mainmenu.cpython-39.pyc b/EXE version/main/source/state/__pycache__/mainmenu.cpython-39.pyc new file mode 100644 index 00000000..0be55b29 Binary files /dev/null and b/EXE version/main/source/state/__pycache__/mainmenu.cpython-39.pyc differ diff --git a/EXE version/main/source/state/__pycache__/screen.cpython-39.pyc b/EXE version/main/source/state/__pycache__/screen.cpython-39.pyc new file mode 100644 index 00000000..71068092 Binary files /dev/null and b/EXE version/main/source/state/__pycache__/screen.cpython-39.pyc differ diff --git a/EXE version/main/source/state/level.py b/EXE version/main/source/state/level.py new file mode 100644 index 00000000..133cc28a --- /dev/null +++ b/EXE version/main/source/state/level.py @@ -0,0 +1,549 @@ +__author__ = 'marble_xu' + +import os +import json +import pygame as pg +from .. import tool +from .. import constants as c +from ..component import map, plant, zombie, menubar + +class Level(tool.State): + def __init__(self): + tool.State.__init__(self) + + def startup(self, current_time, persist): + self.game_info = persist + self.persist = self.game_info + self.game_info[c.CURRENT_TIME] = current_time + self.map_y_len = c.GRID_Y_LEN + self.map = map.Map(c.GRID_X_LEN, self.map_y_len) + + self.loadMap() + self.setupBackground() + self.initState() + + def loadMap(self): + map_file = 'level_' + str(self.game_info[c.LEVEL_NUM]) + '.json' + file_path = os.path.join('source', 'data', 'map', map_file) + f = open(file_path) + self.map_data = json.load(f) + f.close() + + def setupBackground(self): + img_index = self.map_data[c.BACKGROUND_TYPE] + self.background_type = img_index + self.background = tool.GFX[c.BACKGROUND_NAME][img_index] + self.bg_rect = self.background.get_rect() + + self.level = pg.Surface((self.bg_rect.w, self.bg_rect.h)).convert() + self.viewport = tool.SCREEN.get_rect(bottom=self.bg_rect.bottom) + self.viewport.x += c.BACKGROUND_OFFSET_X + + def setupGroups(self): + self.sun_group = pg.sprite.Group() + self.head_group = pg.sprite.Group() + + self.plant_groups = [] + self.zombie_groups = [] + self.hypno_zombie_groups = [] #zombies who are hypno after eating hypnoshroom + self.bullet_groups = [] + for i in range(self.map_y_len): + self.plant_groups.append(pg.sprite.Group()) + self.zombie_groups.append(pg.sprite.Group()) + self.hypno_zombie_groups.append(pg.sprite.Group()) + self.bullet_groups.append(pg.sprite.Group()) + + def setupZombies(self): + def takeTime(element): + return element[0] + + self.zombie_list = [] + for data in self.map_data[c.ZOMBIE_LIST]: + self.zombie_list.append((data['time'], data['name'], data['map_y'])) + self.zombie_start_time = 0 + self.zombie_list.sort(key=takeTime) + + def setupCars(self): + self.cars = [] + for i in range(self.map_y_len): + _, y = self.map.getMapGridPos(0, i) + self.cars.append(plant.Car(-25, y+20, i)) + + def update(self, surface, current_time, mouse_pos, mouse_click): + self.current_time = self.game_info[c.CURRENT_TIME] = current_time + if self.state == c.CHOOSE: + self.choose(mouse_pos, mouse_click) + elif self.state == c.PLAY: + self.play(mouse_pos, mouse_click) + + self.draw(surface) + + def initBowlingMap(self): + print('initBowlingMap') + for x in range(3, self.map.width): + for y in range(self.map.height): + self.map.setMapGridType(x, y, c.MAP_EXIST) + + def initState(self): + if c.CHOOSEBAR_TYPE in self.map_data: + self.bar_type = self.map_data[c.CHOOSEBAR_TYPE] + else: + self.bar_type = c.CHOOSEBAR_STATIC + + if self.bar_type == c.CHOOSEBAR_STATIC: + self.initChoose() + else: + card_pool = menubar.getCardPool(self.map_data[c.CARD_POOL]) + self.initPlay(card_pool) + if self.bar_type == c.CHOSSEBAR_BOWLING: + self.initBowlingMap() + + def initChoose(self): + self.state = c.CHOOSE + self.panel = menubar.Panel(menubar.all_card_list, self.map_data[c.INIT_SUN_NAME]) + + def choose(self, mouse_pos, mouse_click): + if mouse_pos and mouse_click[0]: + self.panel.checkCardClick(mouse_pos) + if self.panel.checkStartButtonClick(mouse_pos): + self.initPlay(self.panel.getSelectedCards()) + + def initPlay(self, card_list): + self.state = c.PLAY + if self.bar_type == c.CHOOSEBAR_STATIC: + self.menubar = menubar.MenuBar(card_list, self.map_data[c.INIT_SUN_NAME]) + else: + self.menubar = menubar.MoveBar(card_list) + self.drag_plant = False + self.hint_image = None + self.hint_plant = False + if self.background_type == c.BACKGROUND_DAY and self.bar_type == c.CHOOSEBAR_STATIC: + self.produce_sun = True + else: + self.produce_sun = False + self.sun_timer = self.current_time + + self.removeMouseImage() + self.setupGroups() + self.setupZombies() + self.setupCars() + + def play(self, mouse_pos, mouse_click): + if self.zombie_start_time == 0: + self.zombie_start_time = self.current_time + elif len(self.zombie_list) > 0: + data = self.zombie_list[0] + if data[0] <= (self.current_time - self.zombie_start_time): + self.createZombie(data[1], data[2]) + self.zombie_list.remove(data) + + for i in range(self.map_y_len): + self.bullet_groups[i].update(self.game_info) + self.plant_groups[i].update(self.game_info) + self.zombie_groups[i].update(self.game_info) + self.hypno_zombie_groups[i].update(self.game_info) + for zombie in self.hypno_zombie_groups[i]: + if zombie.rect.x > c.SCREEN_WIDTH: + zombie.kill() + + self.head_group.update(self.game_info) + self.sun_group.update(self.game_info) + + if not self.drag_plant and mouse_pos and mouse_click[0]: + result = self.menubar.checkCardClick(mouse_pos) + if result: + self.setupMouseImage(result[0], result[1]) + elif self.drag_plant: + if mouse_click[1]: + self.removeMouseImage() + elif mouse_click[0]: + if self.menubar.checkMenuBarClick(mouse_pos): + self.removeMouseImage() + else: + self.addPlant() + elif mouse_pos is None: + self.setupHintImage() + + if self.produce_sun: + if(self.current_time - self.sun_timer) > c.PRODUCE_SUN_INTERVAL: + self.sun_timer = self.current_time + map_x, map_y = self.map.getRandomMapIndex() + x, y = self.map.getMapGridPos(map_x, map_y) + self.sun_group.add(plant.Sun(x, 0, x, y)) + if not self.drag_plant and mouse_pos and mouse_click[0]: + for sun in self.sun_group: + if sun.checkCollision(mouse_pos[0], mouse_pos[1]): + self.menubar.increaseSunValue(sun.sun_value) + + for car in self.cars: + car.update(self.game_info) + + self.menubar.update(self.current_time) + + self.checkBulletCollisions() + self.checkZombieCollisions() + self.checkPlants() + self.checkCarCollisions() + self.checkGameState() + + def createZombie(self, name, map_y): + x, y = self.map.getMapGridPos(0, map_y) + if name == c.NORMAL_ZOMBIE: + self.zombie_groups[map_y].add(zombie.NormalZombie(c.ZOMBIE_START_X, y, self.head_group)) + elif name == c.CONEHEAD_ZOMBIE: + self.zombie_groups[map_y].add(zombie.ConeHeadZombie(c.ZOMBIE_START_X, y, self.head_group)) + elif name == c.BUCKETHEAD_ZOMBIE: + self.zombie_groups[map_y].add(zombie.BucketHeadZombie(c.ZOMBIE_START_X, y, self.head_group)) + elif name == c.FLAG_ZOMBIE: + self.zombie_groups[map_y].add(zombie.FlagZombie(c.ZOMBIE_START_X, y, self.head_group)) + elif name == c.NEWSPAPER_ZOMBIE: + self.zombie_groups[map_y].add(zombie.NewspaperZombie(c.ZOMBIE_START_X, y, self.head_group)) + + def canSeedPlant(self): + x, y = pg.mouse.get_pos() + return self.map.showPlant(x, y) + + def addPlant(self): + pos = self.canSeedPlant() + if pos is None: + return + + if self.hint_image is None: + self.setupHintImage() + x, y = self.hint_rect.centerx, self.hint_rect.bottom + map_x, map_y = self.map.getMapIndex(x, y) + if self.plant_name == c.SUNFLOWER: + new_plant = plant.SunFlower(x, y, self.sun_group) + elif self.plant_name == c.PEASHOOTER: + new_plant = plant.PeaShooter(x, y, self.bullet_groups[map_y]) + elif self.plant_name == c.SNOWPEASHOOTER: + new_plant = plant.SnowPeaShooter(x, y, self.bullet_groups[map_y]) + elif self.plant_name == c.WALLNUT: + new_plant = plant.WallNut(x, y) + elif self.plant_name == c.CHERRYBOMB: + new_plant = plant.CherryBomb(x, y) + elif self.plant_name == c.THREEPEASHOOTER: + new_plant = plant.ThreePeaShooter(x, y, self.bullet_groups, map_y) + elif self.plant_name == c.REPEATERPEA: + new_plant = plant.RepeaterPea(x, y, self.bullet_groups[map_y]) + elif self.plant_name == c.CHOMPER: + new_plant = plant.Chomper(x, y) + elif self.plant_name == c.PUFFSHROOM: + new_plant = plant.PuffShroom(x, y, self.bullet_groups[map_y]) + elif self.plant_name == c.POTATOMINE: + new_plant = plant.PotatoMine(x, y) + elif self.plant_name == c.SQUASH: + new_plant = plant.Squash(x, y) + elif self.plant_name == c.SPIKEWEED: + new_plant = plant.Spikeweed(x, y) + elif self.plant_name == c.JALAPENO: + new_plant = plant.Jalapeno(x, y) + elif self.plant_name == c.SCAREDYSHROOM: + new_plant = plant.ScaredyShroom(x, y, self.bullet_groups[map_y]) + elif self.plant_name == c.SUNSHROOM: + new_plant = plant.SunShroom(x, y, self.sun_group) + elif self.plant_name == c.ICESHROOM: + new_plant = plant.IceShroom(x, y) + elif self.plant_name == c.HYPNOSHROOM: + new_plant = plant.HypnoShroom(x, y) + elif self.plant_name == c.WALLNUTBOWLING: + new_plant = plant.WallNutBowling(x, y, map_y, self) + elif self.plant_name == c.REDWALLNUTBOWLING: + new_plant = plant.RedWallNutBowling(x, y) + + if new_plant.can_sleep and self.background_type == c.BACKGROUND_DAY: + new_plant.setSleep() + self.plant_groups[map_y].add(new_plant) + if self.bar_type == c.CHOOSEBAR_STATIC: + self.menubar.decreaseSunValue(self.select_plant.sun_cost) + self.menubar.setCardFrozenTime(self.plant_name) + else: + self.menubar.deleateCard(self.select_plant) + + if self.bar_type != c.CHOSSEBAR_BOWLING: + self.map.setMapGridType(map_x, map_y, c.MAP_EXIST) + self.removeMouseImage() + #print('addPlant map[%d,%d], grid pos[%d, %d] pos[%d, %d]' % (map_x, map_y, x, y, pos[0], pos[1])) + + def setupHintImage(self): + pos = self.canSeedPlant() + if pos and self.mouse_image: + if (self.hint_image and pos[0] == self.hint_rect.x and + pos[1] == self.hint_rect.y): + return + width, height = self.mouse_rect.w, self.mouse_rect.h + image = pg.Surface([width, height]) + image.blit(self.mouse_image, (0, 0), (0, 0, width, height)) + image.set_colorkey(c.BLACK) + image.set_alpha(128) + self.hint_image = image + self.hint_rect = image.get_rect() + self.hint_rect.centerx = pos[0] + self.hint_rect.bottom = pos[1] + self.hint_plant = True + else: + self.hint_plant = False + + def setupMouseImage(self, plant_name, select_plant): + frame_list = tool.GFX[plant_name] + if plant_name in tool.PLANT_RECT: + data = tool.PLANT_RECT[plant_name] + x, y, width, height = data['x'], data['y'], data['width'], data['height'] + else: + x, y = 0, 0 + rect = frame_list[0].get_rect() + width, height = rect.w, rect.h + + if (plant_name == c.POTATOMINE or plant_name == c.SQUASH or + plant_name == c.SPIKEWEED or plant_name == c.JALAPENO or + plant_name == c.SCAREDYSHROOM or plant_name == c.SUNSHROOM or + plant_name == c.ICESHROOM or plant_name == c.HYPNOSHROOM or + plant_name == c.WALLNUTBOWLING or plant_name == c.REDWALLNUTBOWLING): + color = c.WHITE + else: + color = c.BLACK + self.mouse_image = tool.get_image(frame_list[0], x, y, width, height, color, 1) + self.mouse_rect = self.mouse_image.get_rect() + pg.mouse.set_visible(False) + self.drag_plant = True + self.plant_name = plant_name + self.select_plant = select_plant + + def removeMouseImage(self): + pg.mouse.set_visible(True) + self.drag_plant = False + self.mouse_image = None + self.hint_image = None + self.hint_plant = False + + def checkBulletCollisions(self): + collided_func = pg.sprite.collide_circle_ratio(0.7) + for i in range(self.map_y_len): + for bullet in self.bullet_groups[i]: + if bullet.state == c.FLY: + zombie = pg.sprite.spritecollideany(bullet, self.zombie_groups[i], collided_func) + if zombie and zombie.state != c.DIE: + zombie.setDamage(bullet.damage, bullet.ice) + bullet.setExplode() + + def checkZombieCollisions(self): + if self.bar_type == c.CHOSSEBAR_BOWLING: + ratio = 0.6 + else: + ratio = 0.7 + collided_func = pg.sprite.collide_circle_ratio(ratio) + for i in range(self.map_y_len): + hypo_zombies = [] + for zombie in self.zombie_groups[i]: + if zombie.state != c.WALK: + continue + plant = pg.sprite.spritecollideany(zombie, self.plant_groups[i], collided_func) + if plant: + if plant.name == c.WALLNUTBOWLING: + if plant.canHit(i): + zombie.setDamage(c.WALLNUT_BOWLING_DAMAGE) + plant.changeDirection(i) + elif plant.name == c.REDWALLNUTBOWLING: + if plant.state == c.IDLE: + plant.setAttack() + elif plant.name != c.SPIKEWEED: + zombie.setAttack(plant) + + for hypno_zombie in self.hypno_zombie_groups[i]: + if hypno_zombie.health <= 0: + continue + zombie_list = pg.sprite.spritecollide(hypno_zombie, + self.zombie_groups[i], False,collided_func) + for zombie in zombie_list: + if zombie.state == c.DIE: + continue + if zombie.state == c.WALK: + zombie.setAttack(hypno_zombie, False) + if hypno_zombie.state == c.WALK: + hypno_zombie.setAttack(zombie, False) + + def checkCarCollisions(self): + collided_func = pg.sprite.collide_circle_ratio(0.8) + for car in self.cars: + zombies = pg.sprite.spritecollide(car, self.zombie_groups[car.map_y], False, collided_func) + for zombie in zombies: + if zombie and zombie.state != c.DIE: + car.setWalk() + zombie.setDie() + if car.dead: + self.cars.remove(car) + + def boomZombies(self, x, map_y, y_range, x_range): + for i in range(self.map_y_len): + if abs(i - map_y) > y_range: + continue + for zombie in self.zombie_groups[i]: + if abs(zombie.rect.centerx - x) <= x_range: + zombie.setBoomDie() + + def freezeZombies(self, plant): + for i in range(self.map_y_len): + for zombie in self.zombie_groups[i]: + if zombie.rect.centerx < c.SCREEN_WIDTH: + zombie.setFreeze(plant.trap_frames[0]) + + def killPlant(self, plant): + x, y = plant.getPosition() + map_x, map_y = self.map.getMapIndex(x, y) + if self.bar_type != c.CHOSSEBAR_BOWLING: + self.map.setMapGridType(map_x, map_y, c.MAP_EMPTY) + if (plant.name == c.CHERRYBOMB or plant.name == c.JALAPENO or + (plant.name == c.POTATOMINE and not plant.is_init) or + plant.name == c.REDWALLNUTBOWLING): + self.boomZombies(plant.rect.centerx, map_y, plant.explode_y_range, + plant.explode_x_range) + elif plant.name == c.ICESHROOM and plant.state != c.SLEEP: + self.freezeZombies(plant) + elif plant.name == c.HYPNOSHROOM and plant.state != c.SLEEP: + zombie = plant.kill_zombie + zombie.setHypno() + _, map_y = self.map.getMapIndex(zombie.rect.centerx, zombie.rect.bottom) + self.zombie_groups[map_y].remove(zombie) + self.hypno_zombie_groups[map_y].add(zombie) + plant.kill() + + def checkPlant(self, plant, i): + zombie_len = len(self.zombie_groups[i]) + if plant.name == c.THREEPEASHOOTER: + if plant.state == c.IDLE: + if zombie_len > 0: + plant.setAttack() + elif (i-1) >= 0 and len(self.zombie_groups[i-1]) > 0: + plant.setAttack() + elif (i+1) < self.map_y_len and len(self.zombie_groups[i+1]) > 0: + plant.setAttack() + elif plant.state == c.ATTACK: + if zombie_len > 0: + pass + elif (i-1) >= 0 and len(self.zombie_groups[i-1]) > 0: + pass + elif (i+1) < self.map_y_len and len(self.zombie_groups[i+1]) > 0: + pass + else: + plant.setIdle() + elif plant.name == c.CHOMPER: + for zombie in self.zombie_groups[i]: + if plant.canAttack(zombie): + plant.setAttack(zombie, self.zombie_groups[i]) + break + elif plant.name == c.POTATOMINE: + for zombie in self.zombie_groups[i]: + if plant.canAttack(zombie): + plant.setAttack() + break + elif plant.name == c.SQUASH: + for zombie in self.zombie_groups[i]: + if plant.canAttack(zombie): + plant.setAttack(zombie, self.zombie_groups[i]) + break + elif plant.name == c.SPIKEWEED: + can_attack = False + for zombie in self.zombie_groups[i]: + if plant.canAttack(zombie): + can_attack = True + break + if plant.state == c.IDLE and can_attack: + plant.setAttack(self.zombie_groups[i]) + elif plant.state == c.ATTACK and not can_attack: + plant.setIdle() + elif plant.name == c.SCAREDYSHROOM: + need_cry = False + can_attack = False + for zombie in self.zombie_groups[i]: + if plant.needCry(zombie): + need_cry = True + break + elif plant.canAttack(zombie): + can_attack = True + if need_cry: + if plant.state != c.CRY: + plant.setCry() + elif can_attack: + if plant.state != c.ATTACK: + plant.setAttack() + elif plant.state != c.IDLE: + plant.setIdle() + elif(plant.name == c.WALLNUTBOWLING or + plant.name == c.REDWALLNUTBOWLING): + pass + else: + can_attack = False + if (plant.state == c.IDLE and zombie_len > 0): + for zombie in self.zombie_groups[i]: + if plant.canAttack(zombie): + can_attack = True + break + if plant.state == c.IDLE and can_attack: + plant.setAttack() + elif (plant.state == c.ATTACK and not can_attack): + plant.setIdle() + + def checkPlants(self): + for i in range(self.map_y_len): + for plant in self.plant_groups[i]: + if plant.state != c.SLEEP: + self.checkPlant(plant, i) + if plant.health <= 0: + self.killPlant(plant) + + def checkVictory(self): + if len(self.zombie_list) > 0: + return False + for i in range(self.map_y_len): + if len(self.zombie_groups[i]) > 0: + return False + return True + + def checkLose(self): + for i in range(self.map_y_len): + for zombie in self.zombie_groups[i]: + if zombie.rect.right < 0: + return True + return False + + def checkGameState(self): + if self.checkVictory(): + self.game_info[c.LEVEL_NUM] += 1 + self.next = c.GAME_VICTORY + self.done = True + elif self.checkLose(): + self.next = c.GAME_LOSE + self.done = True + + def drawMouseShow(self, surface): + if self.hint_plant: + surface.blit(self.hint_image, self.hint_rect) + x, y = pg.mouse.get_pos() + self.mouse_rect.centerx = x + self.mouse_rect.centery = y + surface.blit(self.mouse_image, self.mouse_rect) + + def drawZombieFreezeTrap(self, i, surface): + for zombie in self.zombie_groups[i]: + zombie.drawFreezeTrap(surface) + + def draw(self, surface): + self.level.blit(self.background, self.viewport, self.viewport) + surface.blit(self.level, (0,0), self.viewport) + if self.state == c.CHOOSE: + self.panel.draw(surface) + elif self.state == c.PLAY: + self.menubar.draw(surface) + for i in range(self.map_y_len): + self.plant_groups[i].draw(surface) + self.zombie_groups[i].draw(surface) + self.hypno_zombie_groups[i].draw(surface) + self.bullet_groups[i].draw(surface) + self.drawZombieFreezeTrap(i, surface) + for car in self.cars: + car.draw(surface) + self.head_group.draw(surface) + self.sun_group.draw(surface) + + if self.drag_plant: + self.drawMouseShow(surface) \ No newline at end of file diff --git a/EXE version/main/source/state/mainmenu.py b/EXE version/main/source/state/mainmenu.py new file mode 100644 index 00000000..6ac345fe --- /dev/null +++ b/EXE version/main/source/state/mainmenu.py @@ -0,0 +1,69 @@ +__author__ = 'marble_xu' + +import pygame as pg +from .. import tool +from .. import constants as c + +class Menu(tool.State): + def __init__(self): + tool.State.__init__(self) + + def startup(self, current_time, persist): + self.next = c.LEVEL + self.persist = persist + self.game_info = persist + + self.setupBackground() + self.setupOption() + + def setupBackground(self): + frame_rect = [80, 0, 800, 600] + self.bg_image = tool.get_image(tool.GFX[c.MAIN_MENU_IMAGE], *frame_rect) + self.bg_rect = self.bg_image.get_rect() + self.bg_rect.x = 0 + self.bg_rect.y = 0 + + def setupOption(self): + self.option_frames = [] + frame_names = [c.OPTION_ADVENTURE + '_0', c.OPTION_ADVENTURE + '_1'] + frame_rect = [0, 0, 165, 77] + + for name in frame_names: + self.option_frames.append(tool.get_image(tool.GFX[name], *frame_rect, c.BLACK, 1.7)) + + self.option_frame_index = 0 + self.option_image = self.option_frames[self.option_frame_index] + self.option_rect = self.option_image.get_rect() + self.option_rect.x = 435 + self.option_rect.y = 75 + + self.option_start = 0 + self.option_timer = 0 + self.option_clicked = False + + def checkOptionClick(self, mouse_pos): + x, y = mouse_pos + if(x >= self.option_rect.x and x <= self.option_rect.right and + y >= self.option_rect.y and y <= self.option_rect.bottom): + self.option_clicked = True + self.option_timer = self.option_start = self.current_time + return False + + def update(self, surface, current_time, mouse_pos, mouse_click): + self.current_time = self.game_info[c.CURRENT_TIME] = current_time + + if not self.option_clicked: + if mouse_pos: + self.checkOptionClick(mouse_pos) + else: + if(self.current_time - self.option_timer) > 200: + self.option_frame_index += 1 + if self.option_frame_index >= 2: + self.option_frame_index = 0 + self.option_timer = self.current_time + self.option_image = self.option_frames[self.option_frame_index] + if(self.current_time - self.option_start) > 1300: + self.done = True + + surface.blit(self.bg_image, self.bg_rect) + surface.blit(self.option_image, self.option_rect) \ No newline at end of file diff --git a/EXE version/main/source/state/screen.py b/EXE version/main/source/state/screen.py new file mode 100644 index 00000000..a6244602 --- /dev/null +++ b/EXE version/main/source/state/screen.py @@ -0,0 +1,59 @@ +__author__ = 'marble_xu' + +import pygame as pg +from .. import tool +from .. import constants as c + +class Screen(tool.State): + def __init__(self): + tool.State.__init__(self) + self.end_time = 3000 + + def startup(self, current_time, persist): + self.start_time = current_time + self.next = c.LEVEL + self.persist = persist + self.game_info = persist + name = self.getImageName() + self.setupImage(name) + self.next = self.set_next_state() + + def getImageName(self): + pass + + def set_next_state(self): + pass + + def setupImage(self, name): + frame_rect = [0, 0, 800, 600] + self.image = tool.get_image(tool.GFX[name], *frame_rect) + self.rect = self.image.get_rect() + self.rect.x = 0 + self.rect.y = 0 + + def update(self, surface, current_time, mouse_pos, mouse_click): + if(current_time - self.start_time) < self.end_time: + surface.fill(c.WHITE) + surface.blit(self.image, self.rect) + else: + self.done = True + +class GameVictoryScreen(Screen): + def __init__(self): + Screen.__init__(self) + + def getImageName(self): + return c.GAME_VICTORY_IMAGE + + def set_next_state(self): + return c.LEVEL + +class GameLoseScreen(Screen): + def __init__(self): + Screen.__init__(self) + + def getImageName(self): + return c.GAME_LOOSE_IMAGE + + def set_next_state(self): + return c.MAIN_MENU \ No newline at end of file diff --git a/EXE version/main/source/tool.py b/EXE version/main/source/tool.py new file mode 100644 index 00000000..1a319c8c --- /dev/null +++ b/EXE version/main/source/tool.py @@ -0,0 +1,176 @@ +__author__ = 'marble_xu' + +import os +import json +from abc import abstractmethod +import pygame as pg +from . import constants as c + +class State(): + def __init__(self): + self.start_time = 0.0 + self.current_time = 0.0 + self.done = False + self.next = None + self.persist = {} + + @abstractmethod + def startup(self, current_time, persist): + '''abstract method''' + + def cleanup(self): + self.done = False + return self.persist + + @abstractmethod + def update(self, surface, keys, current_time): + '''abstract method''' + +class Control(): + def __init__(self): + self.screen = pg.display.get_surface() + self.done = False + self.clock = pg.time.Clock() + self.fps = 60 + self.keys = pg.key.get_pressed() + self.mouse_pos = None + self.mouse_click = [False, False] # value:[left mouse click, right mouse click] + self.current_time = 0.0 + self.state_dict = {} + self.state_name = None + self.state = None + self.game_info = {c.CURRENT_TIME:0.0, + c.LEVEL_NUM:c.START_LEVEL_NUM} + + def setup_states(self, state_dict, start_state): + self.state_dict = state_dict + self.state_name = start_state + self.state = self.state_dict[self.state_name] + self.state.startup(self.current_time, self.game_info) + + def update(self): + self.current_time = pg.time.get_ticks() + if self.state.done: + self.flip_state() + self.state.update(self.screen, self.current_time, self.mouse_pos, self.mouse_click) + self.mouse_pos = None + self.mouse_click[0] = False + self.mouse_click[1] = False + + def flip_state(self): + previous, self.state_name = self.state_name, self.state.next + persist = self.state.cleanup() + self.state = self.state_dict[self.state_name] + self.state.startup(self.current_time, persist) + + def event_loop(self): + for event in pg.event.get(): + if event.type == pg.QUIT: + self.done = True + elif event.type == pg.KEYDOWN: + self.keys = pg.key.get_pressed() + elif event.type == pg.KEYUP: + self.keys = pg.key.get_pressed() + elif event.type == pg.MOUSEBUTTONDOWN: + self.mouse_pos = pg.mouse.get_pos() + self.mouse_click[0], _, self.mouse_click[1] = pg.mouse.get_pressed() + print('pos:', self.mouse_pos, ' mouse:', self.mouse_click) + + def main(self): + while not self.done: + self.event_loop() + self.update() + pg.display.update() + self.clock.tick(self.fps) + print('game over') + +def get_image(sheet, x, y, width, height, colorkey=c.BLACK, scale=1): + image = pg.Surface([width, height]) + rect = image.get_rect() + + image.blit(sheet, (0, 0), (x, y, width, height)) + image.set_colorkey(colorkey) + image = pg.transform.scale(image, + (int(rect.width*scale), + int(rect.height*scale))) + return image + +def load_image_frames(directory, image_name, colorkey, accept): + frame_list = [] + tmp = {} + # image_name is "Peashooter", pic name is 'Peashooter_1', get the index 1 + index_start = len(image_name) + 1 + frame_num = 0; + for pic in os.listdir(directory): + name, ext = os.path.splitext(pic) + if ext.lower() in accept: + index = int(name[index_start:]) + img = pg.image.load(os.path.join(directory, pic)) + if img.get_alpha(): + img = img.convert_alpha() + else: + img = img.convert() + img.set_colorkey(colorkey) + tmp[index]= img + frame_num += 1 + + for i in range(frame_num): + frame_list.append(tmp[i]) + return frame_list + +def load_all_gfx(directory, colorkey=c.WHITE, accept=('.png', '.jpg', '.bmp', '.gif')): + graphics = {} + for name1 in os.listdir(directory): + # subfolders under the folder resources\graphics + dir1 = os.path.join(directory, name1) + if os.path.isdir(dir1): + for name2 in os.listdir(dir1): + dir2 = os.path.join(dir1, name2) + if os.path.isdir(dir2): + # e.g. subfolders under the folder resources\graphics\Zombies + for name3 in os.listdir(dir2): + dir3 = os.path.join(dir2, name3) + # e.g. subfolders or pics under the folder resources\graphics\Zombies\ConeheadZombie + if os.path.isdir(dir3): + # e.g. it's the folder resources\graphics\Zombies\ConeheadZombie\ConeheadZombieAttack + image_name, _ = os.path.splitext(name3) + graphics[image_name] = load_image_frames(dir3, image_name, colorkey, accept) + else: + # e.g. pics under the folder resources\graphics\Plants\Peashooter + image_name, _ = os.path.splitext(name2) + graphics[image_name] = load_image_frames(dir2, image_name, colorkey, accept) + break + else: + # e.g. pics under the folder resources\graphics\Screen + name, ext = os.path.splitext(name2) + if ext.lower() in accept: + img = pg.image.load(dir2) + if img.get_alpha(): + img = img.convert_alpha() + else: + img = img.convert() + img.set_colorkey(colorkey) + graphics[name] = img + return graphics + +def loadZombieImageRect(): + file_path = os.path.join('source', 'data', 'entity', 'zombie.json') + f = open(file_path) + data = json.load(f) + f.close() + return data[c.ZOMBIE_IMAGE_RECT] + +def loadPlantImageRect(): + file_path = os.path.join('source', 'data', 'entity', 'plant.json') + f = open(file_path) + data = json.load(f) + f.close() + return data[c.PLANT_IMAGE_RECT] + +pg.init() +pg.display.set_caption(c.ORIGINAL_CAPTION) +SCREEN = pg.display.set_mode(c.SCREEN_SIZE) + +GFX = load_all_gfx(os.path.join("resources","graphics")) +ZOMBIE_RECT = loadZombieImageRect() +PLANT_RECT = loadPlantImageRect() diff --git a/EXE version/main/surface.h b/EXE version/main/surface.h new file mode 100644 index 00000000..bbd7f285 --- /dev/null +++ b/EXE version/main/surface.h @@ -0,0 +1,384 @@ +/* + pygame - Python Game Library + Copyright (C) 2000-2001 Pete Shinners + Copyright (C) 2007 Marcus von Appen + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this library; if not, write to the Free + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Pete Shinners + pete@shinners.org +*/ + +#ifndef SURFACE_H +#define SURFACE_H + +/* This is defined in SDL.h */ +#if defined(_POSIX_C_SOURCE) +#undef _POSIX_C_SOURCE +#endif + +#include +#include "pygame.h" + +/* Blend modes */ +#define PYGAME_BLEND_ADD 0x1 +#define PYGAME_BLEND_SUB 0x2 +#define PYGAME_BLEND_MULT 0x3 +#define PYGAME_BLEND_MIN 0x4 +#define PYGAME_BLEND_MAX 0x5 + +#define PYGAME_BLEND_RGB_ADD 0x1 +#define PYGAME_BLEND_RGB_SUB 0x2 +#define PYGAME_BLEND_RGB_MULT 0x3 +#define PYGAME_BLEND_RGB_MIN 0x4 +#define PYGAME_BLEND_RGB_MAX 0x5 + +#define PYGAME_BLEND_RGBA_ADD 0x6 +#define PYGAME_BLEND_RGBA_SUB 0x7 +#define PYGAME_BLEND_RGBA_MULT 0x8 +#define PYGAME_BLEND_RGBA_MIN 0x9 +#define PYGAME_BLEND_RGBA_MAX 0x10 +#define PYGAME_BLEND_PREMULTIPLIED 0x11 +#define PYGAME_BLEND_ALPHA_SDL2 0x12 + + + + + +#if SDL_BYTEORDER == SDL_LIL_ENDIAN +#define GET_PIXEL_24(b) (b[0] + (b[1] << 8) + (b[2] << 16)) +#else +#define GET_PIXEL_24(b) (b[2] + (b[1] << 8) + (b[0] << 16)) +#endif + +#define GET_PIXEL(pxl, bpp, source) \ + switch (bpp) \ + { \ + case 2: \ + pxl = *((Uint16 *) (source)); \ + break; \ + case 4: \ + pxl = *((Uint32 *) (source)); \ + break; \ + default: \ + { \ + Uint8 *b = (Uint8 *) source; \ + pxl = GET_PIXEL_24(b); \ + } \ + break; \ + } + +#if IS_SDLv1 +#define GET_PIXELVALS(_sR, _sG, _sB, _sA, px, fmt, ppa) \ + _sR = ((px & fmt->Rmask) >> fmt->Rshift); \ + _sR = (_sR << fmt->Rloss) + (_sR >> (8 - (fmt->Rloss << 1))); \ + _sG = ((px & fmt->Gmask) >> fmt->Gshift); \ + _sG = (_sG << fmt->Gloss) + (_sG >> (8 - (fmt->Gloss << 1))); \ + _sB = ((px & fmt->Bmask) >> fmt->Bshift); \ + _sB = (_sB << fmt->Bloss) + (_sB >> (8 - (fmt->Bloss << 1))); \ + if (ppa) \ + { \ + _sA = ((px & fmt->Amask) >> fmt->Ashift); \ + _sA = (_sA << fmt->Aloss) + (_sA >> (8 - (fmt->Aloss << 1))); \ + } \ + else \ + { \ + _sA = 255; \ + } + +#define GET_PIXELVALS_1(sr, sg, sb, sa, _src, _fmt) \ + sr = _fmt->palette->colors[*((Uint8 *) (_src))].r; \ + sg = _fmt->palette->colors[*((Uint8 *) (_src))].g; \ + sb = _fmt->palette->colors[*((Uint8 *) (_src))].b; \ + sa = 255; + +/* For 1 byte palette pixels */ +#define SET_PIXELVAL(px, fmt, _dR, _dG, _dB, _dA) \ + *(px) = (Uint8) SDL_MapRGB(fmt, _dR, _dG, _dB) +#else /* IS_SDLv2 */ +#define GET_PIXELVALS(_sR, _sG, _sB, _sA, px, fmt, ppa) \ + SDL_GetRGBA(px, fmt, &(_sR), &(_sG), &(_sB), &(_sA)); \ + if (!ppa) { \ + _sA = 255; \ + } + +#define GET_PIXELVALS_1(sr, sg, sb, sa, _src, _fmt) \ + sr = _fmt->palette->colors[*((Uint8 *) (_src))].r; \ + sg = _fmt->palette->colors[*((Uint8 *) (_src))].g; \ + sb = _fmt->palette->colors[*((Uint8 *) (_src))].b; \ + sa = 255; + +/* For 1 byte palette pixels */ +#define SET_PIXELVAL(px, fmt, _dR, _dG, _dB, _dA) \ + *(px) = (Uint8) SDL_MapRGBA(fmt, _dR, _dG, _dB, _dA) +#endif /* IS_SDLv2 */ + + + + + + + + +#if SDL_BYTEORDER == SDL_LIL_ENDIAN +#define SET_OFFSETS_24(or, og, ob, fmt) \ + { \ + or = (fmt->Rshift == 0 ? 0 : \ + fmt->Rshift == 8 ? 1 : \ + 2 ); \ + og = (fmt->Gshift == 0 ? 0 : \ + fmt->Gshift == 8 ? 1 : \ + 2 ); \ + ob = (fmt->Bshift == 0 ? 0 : \ + fmt->Bshift == 8 ? 1 : \ + 2 ); \ + } + +#define SET_OFFSETS_32(or, og, ob, fmt) \ + { \ + or = (fmt->Rshift == 0 ? 0 : \ + fmt->Rshift == 8 ? 1 : \ + fmt->Rshift == 16 ? 2 : \ + 3 ); \ + og = (fmt->Gshift == 0 ? 0 : \ + fmt->Gshift == 8 ? 1 : \ + fmt->Gshift == 16 ? 2 : \ + 3 ); \ + ob = (fmt->Bshift == 0 ? 0 : \ + fmt->Bshift == 8 ? 1 : \ + fmt->Bshift == 16 ? 2 : \ + 3 ); \ + } +#else +#define SET_OFFSETS_24(or, og, ob, fmt) \ + { \ + or = (fmt->Rshift == 0 ? 2 : \ + fmt->Rshift == 8 ? 1 : \ + 0 ); \ + og = (fmt->Gshift == 0 ? 2 : \ + fmt->Gshift == 8 ? 1 : \ + 0 ); \ + ob = (fmt->Bshift == 0 ? 2 : \ + fmt->Bshift == 8 ? 1 : \ + 0 ); \ + } + +#define SET_OFFSETS_32(or, og, ob, fmt) \ + { \ + or = (fmt->Rshift == 0 ? 3 : \ + fmt->Rshift == 8 ? 2 : \ + fmt->Rshift == 16 ? 1 : \ + 0 ); \ + og = (fmt->Gshift == 0 ? 3 : \ + fmt->Gshift == 8 ? 2 : \ + fmt->Gshift == 16 ? 1 : \ + 0 ); \ + ob = (fmt->Bshift == 0 ? 3 : \ + fmt->Bshift == 8 ? 2 : \ + fmt->Bshift == 16 ? 1 : \ + 0 ); \ + } +#endif + + +#define CREATE_PIXEL(buf, r, g, b, a, bp, ft) \ + switch (bp) \ + { \ + case 2: \ + *((Uint16 *) (buf)) = \ + ((r >> ft->Rloss) << ft->Rshift) | \ + ((g >> ft->Gloss) << ft->Gshift) | \ + ((b >> ft->Bloss) << ft->Bshift) | \ + ((a >> ft->Aloss) << ft->Ashift); \ + break; \ + case 4: \ + *((Uint32 *) (buf)) = \ + ((r >> ft->Rloss) << ft->Rshift) | \ + ((g >> ft->Gloss) << ft->Gshift) | \ + ((b >> ft->Bloss) << ft->Bshift) | \ + ((a >> ft->Aloss) << ft->Ashift); \ + break; \ + } + +/* Pretty good idea from Tom Duff :-). */ +#define LOOP_UNROLLED4(code, n, width) \ + n = (width + 3) / 4; \ + switch (width & 3) \ + { \ + case 0: do { code; \ + case 3: code; \ + case 2: code; \ + case 1: code; \ + } while (--n > 0); \ + } + +/* Used in the srcbpp == dstbpp == 1 blend functions */ +#define REPEAT_3(code) \ + code; \ + code; \ + code; + +#define REPEAT_4(code) \ + code; \ + code; \ + code; \ + code; + + +#define BLEND_ADD(tmp, sR, sG, sB, sA, dR, dG, dB, dA) \ + tmp = dR + sR; dR = (tmp <= 255 ? tmp : 255); \ + tmp = dG + sG; dG = (tmp <= 255 ? tmp : 255); \ + tmp = dB + sB; dB = (tmp <= 255 ? tmp : 255); + +#define BLEND_SUB(tmp, sR, sG, sB, sA, dR, dG, dB, dA) \ + tmp = dR - sR; dR = (tmp >= 0 ? tmp : 0); \ + tmp = dG - sG; dG = (tmp >= 0 ? tmp : 0); \ + tmp = dB - sB; dB = (tmp >= 0 ? tmp : 0); + +#define BLEND_MULT(sR, sG, sB, sA, dR, dG, dB, dA) \ + dR = (dR && sR) ? (dR * sR) >> 8 : 0; \ + dG = (dG && sG) ? (dG * sG) >> 8 : 0; \ + dB = (dB && sB) ? (dB * sB) >> 8 : 0; + +#define BLEND_MIN(sR, sG, sB, sA, dR, dG, dB, dA) \ + if(sR < dR) { dR = sR; } \ + if(sG < dG) { dG = sG; } \ + if(sB < dB) { dB = sB; } + +#define BLEND_MAX(sR, sG, sB, sA, dR, dG, dB, dA) \ + if(sR > dR) { dR = sR; } \ + if(sG > dG) { dG = sG; } \ + if(sB > dB) { dB = sB; } + + + + + + +#define BLEND_RGBA_ADD(tmp, sR, sG, sB, sA, dR, dG, dB, dA) \ + tmp = dR + sR; dR = (tmp <= 255 ? tmp : 255); \ + tmp = dG + sG; dG = (tmp <= 255 ? tmp : 255); \ + tmp = dB + sB; dB = (tmp <= 255 ? tmp : 255); \ + tmp = dA + sA; dA = (tmp <= 255 ? tmp : 255); + +#define BLEND_RGBA_SUB(tmp, sR, sG, sB, sA, dR, dG, dB, dA) \ + tmp = dR - sR; dR = (tmp >= 0 ? tmp : 0); \ + tmp = dG - sG; dG = (tmp >= 0 ? tmp : 0); \ + tmp = dB - sB; dB = (tmp >= 0 ? tmp : 0); \ + tmp = dA - sA; dA = (tmp >= 0 ? tmp : 0); + +#define BLEND_RGBA_MULT(sR, sG, sB, sA, dR, dG, dB, dA) \ + dR = (dR && sR) ? (dR * sR) >> 8 : 0; \ + dG = (dG && sG) ? (dG * sG) >> 8 : 0; \ + dB = (dB && sB) ? (dB * sB) >> 8 : 0; \ + dA = (dA && sA) ? (dA * sA) >> 8 : 0; + +#define BLEND_RGBA_MIN(sR, sG, sB, sA, dR, dG, dB, dA) \ + if(sR < dR) { dR = sR; } \ + if(sG < dG) { dG = sG; } \ + if(sB < dB) { dB = sB; } \ + if(sA < dA) { dA = sA; } + +#define BLEND_RGBA_MAX(sR, sG, sB, sA, dR, dG, dB, dA) \ + if(sR > dR) { dR = sR; } \ + if(sG > dG) { dG = sG; } \ + if(sB > dB) { dB = sB; } \ + if(sA > dA) { dA = sA; } + + + + + + + + + + + +#if 1 +/* Choose an alpha blend equation. If the sign is preserved on a right shift + * then use a specialized, faster, equation. Otherwise a more general form, + * where all additions are done before the shift, is needed. +*/ +#if (-1 >> 1) < 0 +#define ALPHA_BLEND_COMP(sC, dC, sA) ((((sC - dC) * sA + sC) >> 8) + dC) +#else +#define ALPHA_BLEND_COMP(sC, dC, sA) (((dC << 8) + (sC - dC) * sA + sC) >> 8) +#endif + +#define ALPHA_BLEND(sR, sG, sB, sA, dR, dG, dB, dA) \ + do { \ + if (dA) \ + { \ + dR = ALPHA_BLEND_COMP(sR, dR, sA); \ + dG = ALPHA_BLEND_COMP(sG, dG, sA); \ + dB = ALPHA_BLEND_COMP(sB, dB, sA); \ + dA = sA + dA - ((sA * dA) / 255); \ + } \ + else \ + { \ + dR = sR; \ + dG = sG; \ + dB = sB; \ + dA = sA; \ + } \ + } while(0) + +#define ALPHA_BLEND_PREMULTIPLIED_COMP(sC, dC, sA) (sC + dC - ((dC + 1) * sA >> 8)) + +#define ALPHA_BLEND_PREMULTIPLIED(tmp, sR, sG, sB, sA, dR, dG, dB, dA) \ + do { \ + dR = ALPHA_BLEND_PREMULTIPLIED_COMP(sR, dR, sA); \ + dG = ALPHA_BLEND_PREMULTIPLIED_COMP(sG, dG, sA); \ + dB = ALPHA_BLEND_PREMULTIPLIED_COMP(sB, dB, sA); \ + dA = ALPHA_BLEND_PREMULTIPLIED_COMP(sA, dA, sA); \ + } while(0) +#elif 0 + +#define ALPHA_BLEND(sR, sG, sB, sA, dR, dG, dB, dA) \ + do { \ + if(sA){ \ + if(dA && sA < 255){ \ + int dContrib = dA*(255 - sA)/255; \ + dA = sA+dA - ((sA*dA)/255); \ + dR = (dR*dContrib + sR*sA)/dA; \ + dG = (dG*dContrib + sG*sA)/dA; \ + dB = (dB*dContrib + sB*sA)/dA; \ + }else{ \ + dR = sR; \ + dG = sG; \ + dB = sB; \ + dA = sA; \ + } \ + } \ + } while(0) +#endif + +int +surface_fill_blend (SDL_Surface *surface, SDL_Rect *rect, Uint32 color, + int blendargs); + +void +surface_respect_clip_rect (SDL_Surface *surface, SDL_Rect *rect); + +int +pygame_AlphaBlit (SDL_Surface * src, SDL_Rect * srcrect, + SDL_Surface * dst, SDL_Rect * dstrect, int the_args); + +int +pygame_Blit (SDL_Surface * src, SDL_Rect * srcrect, + SDL_Surface * dst, SDL_Rect * dstrect, int the_args); + +#endif /* SURFACE_H */ diff --git a/EXE version/main/unicodedata.pyd b/EXE version/main/unicodedata.pyd new file mode 100644 index 00000000..bbf07882 Binary files /dev/null and b/EXE version/main/unicodedata.pyd differ diff --git a/EXE version/main/zlib1.dll b/EXE version/main/zlib1.dll new file mode 100644 index 00000000..e7493de3 Binary files /dev/null and b/EXE version/main/zlib1.dll differ