mirror of https://github.com/pybind/pybind11.git
Much more efficient generation of function signatures, updated docs
This modification taps into some newer C++14 features (if present) to generate function signatures considerably more efficiently at compile time rather than at run time. With this change, pybind11 binaries are now *2.1 times* smaller compared to the Boost.Python baseline in the benchmark. Compilation times get a nice improvement as well. Visual Studio 2015 unfortunately doesn't implement 'constexpr' well enough yet to support this change and uses a runtime fallback.
This commit is contained in:
parent
2ac5044a05
commit
66c9a40213
|
@ -37,8 +37,16 @@ endif()
|
||||||
find_package(PythonInterp ${PYTHONLIBS_VERSION_STRING} EXACT REQUIRED)
|
find_package(PythonInterp ${PYTHONLIBS_VERSION_STRING} EXACT REQUIRED)
|
||||||
|
|
||||||
if (CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR CMAKE_CXX_COMPILER_ID MATCHES "GNU")
|
if (CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR CMAKE_CXX_COMPILER_ID MATCHES "GNU")
|
||||||
# Enable C++11 mode on C++ / Clang
|
CHECK_CXX_COMPILER_FLAG("-std=c++14" HAS_CPP14_FLAG)
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
|
CHECK_CXX_COMPILER_FLAG("-std=c++11" HAS_CPP11_FLAG)
|
||||||
|
|
||||||
|
if (HAS_CPP14_FLAG)
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14")
|
||||||
|
elseif (HAS_CPP11_FLAG)
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
|
||||||
|
else()
|
||||||
|
message(FATAL_ERROR "Unsupported compiler -- pybind11 requires C++11 support!")
|
||||||
|
endif()
|
||||||
|
|
||||||
# Enable link time optimization and set the default symbol
|
# Enable link time optimization and set the default symbol
|
||||||
# visibility to hidden (very important to obtain small binaries)
|
# visibility to hidden (very important to obtain small binaries)
|
||||||
|
@ -74,14 +82,15 @@ include_directories(include)
|
||||||
set(PYBIND11_HEADERS
|
set(PYBIND11_HEADERS
|
||||||
include/pybind11/cast.h
|
include/pybind11/cast.h
|
||||||
include/pybind11/common.h
|
include/pybind11/common.h
|
||||||
|
include/pybind11/complex.h
|
||||||
|
include/pybind11/descr.h
|
||||||
|
include/pybind11/functional.h
|
||||||
|
include/pybind11/numpy.h
|
||||||
include/pybind11/operators.h
|
include/pybind11/operators.h
|
||||||
include/pybind11/pybind11.h
|
include/pybind11/pybind11.h
|
||||||
include/pybind11/pytypes.h
|
include/pybind11/pytypes.h
|
||||||
include/pybind11/typeid.h
|
|
||||||
include/pybind11/numpy.h
|
|
||||||
include/pybind11/complex.h
|
|
||||||
include/pybind11/stl.h
|
include/pybind11/stl.h
|
||||||
include/pybind11/functional.h
|
include/pybind11/typeid.h
|
||||||
)
|
)
|
||||||
|
|
||||||
# Create the binding library
|
# Create the binding library
|
||||||
|
|
17
README.md
17
README.md
|
@ -23,12 +23,12 @@ become an excessively large and unnecessary dependency.
|
||||||
|
|
||||||
Think of this library as a tiny self-contained version of Boost.Python with
|
Think of this library as a tiny self-contained version of Boost.Python with
|
||||||
everything stripped away that isn't relevant for binding generation. The core
|
everything stripped away that isn't relevant for binding generation. The core
|
||||||
header files only require ~2K lines of code and depend on Python (2.7 or 3.x)
|
header files only require ~3K lines of code and depend on Python (2.7 or 3.x)
|
||||||
and the C++ standard library. This compact implementation was possible thanks
|
and the C++ standard library. This compact implementation was possible thanks
|
||||||
to some of the new C++11 language features (tuples, lambda functions and
|
to some of the new C++11 language features (specifically: tuples, lambda
|
||||||
variadic templates). Since its creation, this library has grown beyond
|
functions and variadic templates). Since its creation, this library has grown
|
||||||
Boost.Python in many ways, leading to dramatically simpler binding code in many
|
beyond Boost.Python in many ways, leading to dramatically simpler binding code
|
||||||
common situations.
|
in many common situations.
|
||||||
|
|
||||||
Tutorial and reference documentation is provided at
|
Tutorial and reference documentation is provided at
|
||||||
[http://pybind11.readthedocs.org/en/latest](http://pybind11.readthedocs.org/en/latest).
|
[http://pybind11.readthedocs.org/en/latest](http://pybind11.readthedocs.org/en/latest).
|
||||||
|
@ -71,6 +71,13 @@ In addition to the core functionality, pybind11 provides some extra goodies:
|
||||||
- Everything is contained in just a few header files; there is no need to link
|
- Everything is contained in just a few header files; there is no need to link
|
||||||
against any additional libraries.
|
against any additional libraries.
|
||||||
|
|
||||||
|
- Binaries are generally smaller by a factor of 2 or more compared to
|
||||||
|
equivalent bindings generated by Boost.Python.
|
||||||
|
|
||||||
|
- When supported by the compiler, two new C++14 features (relaxed constexpr,
|
||||||
|
return value deduction) such as are used to do additional work at compile
|
||||||
|
time, leading to smaller binaries.
|
||||||
|
|
||||||
### License
|
### License
|
||||||
|
|
||||||
pybind11 is provided under a BSD-style license that can be found in the
|
pybind11 is provided under a BSD-style license that can be found in the
|
||||||
|
|
|
@ -81,7 +81,7 @@ for codegen in [generate_dummy_code_pybind11, generate_dummy_code_boost]:
|
||||||
f.write(codegen(nclasses))
|
f.write(codegen(nclasses))
|
||||||
n1 = dt.datetime.now()
|
n1 = dt.datetime.now()
|
||||||
os.system("g++ -Os -shared -rdynamic -undefined dynamic_lookup "
|
os.system("g++ -Os -shared -rdynamic -undefined dynamic_lookup "
|
||||||
"-fvisibility=hidden -std=c++11 test.cpp -I include "
|
"-fvisibility=hidden -std=c++14 test.cpp -I include "
|
||||||
"-I /System/Library/Frameworks/Python.framework/Headers -o test.so")
|
"-I /System/Library/Frameworks/Python.framework/Headers -o test.so")
|
||||||
n2 = dt.datetime.now()
|
n2 = dt.datetime.now()
|
||||||
elapsed = (n2 - n1).total_seconds()
|
elapsed = (n2 - n1).total_seconds()
|
||||||
|
|
|
@ -4,9 +4,12 @@ Benchmark
|
||||||
The following is the result of a synthetic benchmark comparing both compilation
|
The following is the result of a synthetic benchmark comparing both compilation
|
||||||
time and module size of pybind11 against Boost.Python.
|
time and module size of pybind11 against Boost.Python.
|
||||||
|
|
||||||
A python script (see the ``docs/benchmark.py`` file) was used to generate a
|
Setup
|
||||||
set of dummy classes whose count increases for each successive benchmark
|
-----
|
||||||
(between 1 and 512 classes in powers of two). Each class has four methods with
|
|
||||||
|
A python script (see the ``docs/benchmark.py`` file) was used to generate a set
|
||||||
|
of files with dummy classes whose count increases for each successive benchmark
|
||||||
|
(between 1 and 2048 classes in powers of two). Each class has four methods with
|
||||||
a randomly generated signature with a return value and four arguments. (There
|
a randomly generated signature with a return value and four arguments. (There
|
||||||
was no particular reason for this setup other than the desire to generate many
|
was no particular reason for this setup other than the desire to generate many
|
||||||
unique function signatures whose count could be controlled in a simple way.)
|
unique function signatures whose count could be controlled in a simple way.)
|
||||||
|
@ -43,28 +46,38 @@ compilation was done with
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
|
|
||||||
Apple LLVM version 7.0.0 (clang-700.0.72)
|
Apple LLVM version 7.0.2 (clang-700.1.81)
|
||||||
|
|
||||||
and the following compilation flags
|
and the following compilation flags
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
|
|
||||||
g++ -Os -shared -rdynamic -undefined dynamic_lookup -fvisibility=hidden -std=c++11
|
g++ -Os -shared -rdynamic -undefined dynamic_lookup -fvisibility=hidden -std=c++14
|
||||||
|
|
||||||
|
Compilation time
|
||||||
|
----------------
|
||||||
|
|
||||||
The following log-log plot shows how the compilation time grows for an
|
The following log-log plot shows how the compilation time grows for an
|
||||||
increasing number of class and function declarations. pybind11 includes fewer
|
increasing number of class and function declarations. pybind11 includes many
|
||||||
headers, which initially leads to shorter compilation times, but the
|
fewer headers, which initially leads to shorter compilation times, but the
|
||||||
performance is ultimately very similar (pybind11 is 1 second faster for the
|
performance is ultimately fairly similar (pybind11 is 19.8 seconds faster for
|
||||||
largest file, which is less than 1% of the total compilation time).
|
the largest largest file with 2048 classes and a total of 8192 methods -- a
|
||||||
|
modest **1.2x** speedup relative to Boost.Python, which required 116.35
|
||||||
|
seconds).
|
||||||
|
|
||||||
.. image:: pybind11_vs_boost_python1.svg
|
.. image:: pybind11_vs_boost_python1.svg
|
||||||
|
|
||||||
Differences between the two libraries become more pronounced when considering
|
Module size
|
||||||
the file size of the generated Python plugin. Note that the plot below does not
|
-----------
|
||||||
include the size of the Boost.Python shared library, hence Boost actually has a
|
|
||||||
slight advantage.
|
Differences between the two libraries become much more pronounced when
|
||||||
|
considering the file size of the generated Python plugin: for the largest file,
|
||||||
|
the binary generated by Boost.Python required 16.8 MiB, which was **2.17
|
||||||
|
times** / **9.1 megabytes** larger than the output generated by pybind11. For
|
||||||
|
very small inputs, Boost.Python has an edge in the plot below -- however, note
|
||||||
|
that it stores many definitions in an external library, whose size was not
|
||||||
|
included here, hence the comparison is slightly shifted in Boost.Python's
|
||||||
|
favor.
|
||||||
|
|
||||||
.. image:: pybind11_vs_boost_python2.svg
|
.. image:: pybind11_vs_boost_python2.svg
|
||||||
|
|
||||||
Despite this, the libraries procuced by Boost.Python for more than a few
|
|
||||||
functions are consistently larger by a factor of 1.75.
|
|
||||||
|
|
|
@ -39,8 +39,16 @@ and that the pybind11 repository is located in a subdirectory named :file:`pybin
|
||||||
# find_package(PythonInterp ${PYTHONLIBS_VERSION_STRING} EXACT REQUIRED)
|
# find_package(PythonInterp ${PYTHONLIBS_VERSION_STRING} EXACT REQUIRED)
|
||||||
|
|
||||||
if (CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR CMAKE_CXX_COMPILER_ID MATCHES "GNU")
|
if (CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR CMAKE_CXX_COMPILER_ID MATCHES "GNU")
|
||||||
# Enable C++11 mode on C++ / Clang
|
CHECK_CXX_COMPILER_FLAG("-std=c++14" HAS_CPP14_FLAG)
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
|
CHECK_CXX_COMPILER_FLAG("-std=c++11" HAS_CPP11_FLAG)
|
||||||
|
|
||||||
|
if (HAS_CPP14_FLAG)
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14")
|
||||||
|
elseif (HAS_CPP11_FLAG)
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
|
||||||
|
else()
|
||||||
|
message(FATAL_ERROR "Unsupported compiler -- at least C++11 support is needed!")
|
||||||
|
endif()
|
||||||
|
|
||||||
# Enable link time optimization and set the default symbol
|
# Enable link time optimization and set the default symbol
|
||||||
# visibility to hidden (very important to obtain small binaries)
|
# visibility to hidden (very important to obtain small binaries)
|
||||||
|
|
|
@ -18,12 +18,12 @@ become an excessively large and unnecessary dependency.
|
||||||
|
|
||||||
Think of this library as a tiny self-contained version of Boost.Python with
|
Think of this library as a tiny self-contained version of Boost.Python with
|
||||||
everything stripped away that isn't relevant for binding generation. The core
|
everything stripped away that isn't relevant for binding generation. The core
|
||||||
header files only require ~2K lines of code and depend on Python (2.7 or 3.x)
|
header files only require ~3K lines of code and depend on Python (2.7 or 3.x)
|
||||||
and the C++ standard library. This compact implementation was possible thanks
|
and the C++ standard library. This compact implementation was possible thanks
|
||||||
to some of the new C++11 language features (tuples, lambda functions and
|
to some of the new C++11 language features (specifically: tuples, lambda
|
||||||
variadic templates). Since its creation, this library has grown beyond
|
functions and variadic templates). Since its creation, this library has grown
|
||||||
Boost.Python in many ways, leading to dramatically simpler binding code in many
|
beyond Boost.Python in many ways, leading to dramatically simpler binding code
|
||||||
common situations.
|
in many common situations.
|
||||||
|
|
||||||
Core features
|
Core features
|
||||||
*************
|
*************
|
||||||
|
@ -64,3 +64,10 @@ In addition to the core functionality, pybind11 provides some extra goodies:
|
||||||
|
|
||||||
- Everything is contained in just a few header files; there is no need to link
|
- Everything is contained in just a few header files; there is no need to link
|
||||||
against any additional libraries.
|
against any additional libraries.
|
||||||
|
|
||||||
|
- Binaries are generally smaller by a factor of 2 or more compared to
|
||||||
|
equivalent bindings generated by Boost.Python.
|
||||||
|
|
||||||
|
- When supported by the compiler, two new C++14 features (relaxed constexpr,
|
||||||
|
return value deduction) such as are used to do additional work at compile
|
||||||
|
time, leading to smaller binaries.
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="468pt" height="248pt" viewBox="0 0 468 248" version="1.1">
|
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="468pt" height="252pt" viewBox="0 0 468 252" version="1.1">
|
||||||
<defs>
|
<defs>
|
||||||
<g>
|
<g>
|
||||||
<symbol overflow="visible" id="glyph0-0">
|
<symbol overflow="visible" id="glyph0-0">
|
||||||
|
@ -12,30 +12,33 @@
|
||||||
<path style="stroke:none;" d="M 0.414062 -3.53125 C 0.414062 -4.375 0.503906 -5.058594 0.675781 -5.574219 C 0.851562 -6.089844 1.109375 -6.488281 1.453125 -6.765625 C 1.796875 -7.046875 2.226562 -7.1875 2.75 -7.1875 C 3.132812 -7.1875 3.46875 -7.109375 3.757812 -6.957031 C 4.046875 -6.800781 4.289062 -6.578125 4.476562 -6.285156 C 4.664062 -5.996094 4.8125 -5.640625 4.921875 -5.222656 C 5.03125 -4.804688 5.082031 -4.238281 5.082031 -3.53125 C 5.082031 -2.691406 4.996094 -2.011719 4.824219 -1.496094 C 4.652344 -0.980469 4.394531 -0.582031 4.050781 -0.300781 C 3.707031 -0.0195312 3.273438 0.121094 2.75 0.121094 C 2.058594 0.121094 1.515625 -0.125 1.125 -0.621094 C 0.652344 -1.214844 0.414062 -2.1875 0.414062 -3.53125 Z M 1.320312 -3.53125 C 1.320312 -2.355469 1.457031 -1.574219 1.730469 -1.183594 C 2.007812 -0.796875 2.34375 -0.601562 2.75 -0.601562 C 3.152344 -0.601562 3.492188 -0.796875 3.765625 -1.1875 C 4.042969 -1.578125 4.179688 -2.359375 4.179688 -3.53125 C 4.179688 -4.710938 4.042969 -5.492188 3.765625 -5.878906 C 3.492188 -6.265625 3.148438 -6.460938 2.738281 -6.460938 C 2.335938 -6.460938 2.011719 -6.289062 1.773438 -5.945312 C 1.46875 -5.511719 1.320312 -4.707031 1.320312 -3.53125 Z "/>
|
<path style="stroke:none;" d="M 0.414062 -3.53125 C 0.414062 -4.375 0.503906 -5.058594 0.675781 -5.574219 C 0.851562 -6.089844 1.109375 -6.488281 1.453125 -6.765625 C 1.796875 -7.046875 2.226562 -7.1875 2.75 -7.1875 C 3.132812 -7.1875 3.46875 -7.109375 3.757812 -6.957031 C 4.046875 -6.800781 4.289062 -6.578125 4.476562 -6.285156 C 4.664062 -5.996094 4.8125 -5.640625 4.921875 -5.222656 C 5.03125 -4.804688 5.082031 -4.238281 5.082031 -3.53125 C 5.082031 -2.691406 4.996094 -2.011719 4.824219 -1.496094 C 4.652344 -0.980469 4.394531 -0.582031 4.050781 -0.300781 C 3.707031 -0.0195312 3.273438 0.121094 2.75 0.121094 C 2.058594 0.121094 1.515625 -0.125 1.125 -0.621094 C 0.652344 -1.214844 0.414062 -2.1875 0.414062 -3.53125 Z M 1.320312 -3.53125 C 1.320312 -2.355469 1.457031 -1.574219 1.730469 -1.183594 C 2.007812 -0.796875 2.34375 -0.601562 2.75 -0.601562 C 3.152344 -0.601562 3.492188 -0.796875 3.765625 -1.1875 C 4.042969 -1.578125 4.179688 -2.359375 4.179688 -3.53125 C 4.179688 -4.710938 4.042969 -5.492188 3.765625 -5.878906 C 3.492188 -6.265625 3.148438 -6.460938 2.738281 -6.460938 C 2.335938 -6.460938 2.011719 -6.289062 1.773438 -5.945312 C 1.46875 -5.511719 1.320312 -4.707031 1.320312 -3.53125 Z "/>
|
||||||
</symbol>
|
</symbol>
|
||||||
<symbol overflow="visible" id="glyph0-3">
|
<symbol overflow="visible" id="glyph0-3">
|
||||||
<path style="stroke:none;" d="M 0.414062 -1.875 L 1.335938 -1.953125 C 1.40625 -1.503906 1.566406 -1.167969 1.8125 -0.941406 C 2.0625 -0.714844 2.363281 -0.601562 2.714844 -0.601562 C 3.136719 -0.601562 3.496094 -0.761719 3.789062 -1.078125 C 4.082031 -1.398438 4.226562 -1.820312 4.226562 -2.347656 C 4.226562 -2.851562 4.085938 -3.246094 3.804688 -3.535156 C 3.523438 -3.824219 3.15625 -3.96875 2.699219 -3.96875 C 2.417969 -3.96875 2.160156 -3.90625 1.933594 -3.777344 C 1.707031 -3.648438 1.527344 -3.480469 1.398438 -3.277344 L 0.570312 -3.382812 L 1.265625 -7.0625 L 4.824219 -7.0625 L 4.824219 -6.21875 L 1.96875 -6.21875 L 1.582031 -4.296875 C 2.011719 -4.597656 2.460938 -4.746094 2.933594 -4.746094 C 3.558594 -4.746094 4.085938 -4.53125 4.515625 -4.097656 C 4.945312 -3.664062 5.160156 -3.105469 5.160156 -2.425781 C 5.160156 -1.777344 4.972656 -1.21875 4.59375 -0.746094 C 4.136719 -0.167969 3.507812 0.121094 2.714844 0.121094 C 2.0625 0.121094 1.53125 -0.0585938 1.121094 -0.425781 C 0.710938 -0.789062 0.472656 -1.273438 0.414062 -1.875 Z "/>
|
<path style="stroke:none;" d="M 5.035156 -0.84375 L 5.035156 0 L 0.304688 0 C 0.296875 -0.210938 0.332031 -0.414062 0.40625 -0.609375 C 0.527344 -0.933594 0.71875 -1.25 0.984375 -1.5625 C 1.25 -1.875 1.632812 -2.234375 2.132812 -2.648438 C 2.910156 -3.285156 3.4375 -3.789062 3.710938 -4.164062 C 3.984375 -4.535156 4.121094 -4.886719 4.121094 -5.21875 C 4.121094 -5.566406 3.996094 -5.863281 3.746094 -6.101562 C 3.5 -6.339844 3.171875 -6.460938 2.773438 -6.460938 C 2.351562 -6.460938 2.011719 -6.332031 1.757812 -6.078125 C 1.503906 -5.824219 1.375 -5.472656 1.371094 -5.023438 L 0.46875 -5.117188 C 0.53125 -5.789062 0.761719 -6.304688 1.167969 -6.65625 C 1.570312 -7.011719 2.113281 -7.1875 2.792969 -7.1875 C 3.480469 -7.1875 4.023438 -6.996094 4.421875 -6.617188 C 4.824219 -6.234375 5.023438 -5.761719 5.023438 -5.199219 C 5.023438 -4.914062 4.964844 -4.632812 4.847656 -4.355469 C 4.730469 -4.078125 4.535156 -3.789062 4.265625 -3.480469 C 3.992188 -3.175781 3.542969 -2.753906 2.910156 -2.222656 C 2.382812 -1.78125 2.042969 -1.480469 1.894531 -1.320312 C 1.746094 -1.164062 1.621094 -1.003906 1.523438 -0.84375 Z "/>
|
||||||
</symbol>
|
</symbol>
|
||||||
<symbol overflow="visible" id="glyph0-4">
|
<symbol overflow="visible" id="glyph0-4">
|
||||||
<path style="stroke:none;" d="M 0.820312 0 L 0.820312 -7.15625 L 5.648438 -7.15625 L 5.648438 -6.3125 L 1.765625 -6.3125 L 1.765625 -4.097656 L 5.125 -4.097656 L 5.125 -3.25 L 1.765625 -3.25 L 1.765625 0 Z "/>
|
<path style="stroke:none;" d="M 0.414062 -1.875 L 1.335938 -1.953125 C 1.40625 -1.503906 1.566406 -1.167969 1.8125 -0.941406 C 2.0625 -0.714844 2.363281 -0.601562 2.714844 -0.601562 C 3.136719 -0.601562 3.496094 -0.761719 3.789062 -1.078125 C 4.082031 -1.398438 4.226562 -1.820312 4.226562 -2.347656 C 4.226562 -2.851562 4.085938 -3.246094 3.804688 -3.535156 C 3.523438 -3.824219 3.15625 -3.96875 2.699219 -3.96875 C 2.417969 -3.96875 2.160156 -3.90625 1.933594 -3.777344 C 1.707031 -3.648438 1.527344 -3.480469 1.398438 -3.277344 L 0.570312 -3.382812 L 1.265625 -7.0625 L 4.824219 -7.0625 L 4.824219 -6.21875 L 1.96875 -6.21875 L 1.582031 -4.296875 C 2.011719 -4.597656 2.460938 -4.746094 2.933594 -4.746094 C 3.558594 -4.746094 4.085938 -4.53125 4.515625 -4.097656 C 4.945312 -3.664062 5.160156 -3.105469 5.160156 -2.425781 C 5.160156 -1.777344 4.972656 -1.21875 4.59375 -0.746094 C 4.136719 -0.167969 3.507812 0.121094 2.714844 0.121094 C 2.0625 0.121094 1.53125 -0.0585938 1.121094 -0.425781 C 0.710938 -0.789062 0.472656 -1.273438 0.414062 -1.875 Z "/>
|
||||||
</symbol>
|
</symbol>
|
||||||
<symbol overflow="visible" id="glyph0-5">
|
<symbol overflow="visible" id="glyph0-5">
|
||||||
<path style="stroke:none;" d="M 4.058594 0 L 4.058594 -0.761719 C 3.65625 -0.175781 3.105469 0.117188 2.414062 0.117188 C 2.105469 0.117188 1.820312 0.0585938 1.554688 -0.0585938 C 1.289062 -0.175781 1.09375 -0.324219 0.964844 -0.5 C 0.835938 -0.679688 0.746094 -0.894531 0.695312 -1.152344 C 0.65625 -1.324219 0.640625 -1.597656 0.640625 -1.972656 L 0.640625 -5.1875 L 1.519531 -5.1875 L 1.519531 -2.308594 C 1.519531 -1.851562 1.535156 -1.542969 1.570312 -1.382812 C 1.625 -1.152344 1.746094 -0.96875 1.921875 -0.835938 C 2.101562 -0.703125 2.324219 -0.640625 2.585938 -0.640625 C 2.851562 -0.640625 3.097656 -0.707031 3.328125 -0.84375 C 3.5625 -0.976562 3.726562 -1.160156 3.820312 -1.394531 C 3.917969 -1.625 3.964844 -1.964844 3.964844 -2.40625 L 3.964844 -5.1875 L 4.84375 -5.1875 L 4.84375 0 Z "/>
|
<path style="stroke:none;" d="M 0.820312 0 L 0.820312 -7.15625 L 5.648438 -7.15625 L 5.648438 -6.3125 L 1.765625 -6.3125 L 1.765625 -4.097656 L 5.125 -4.097656 L 5.125 -3.25 L 1.765625 -3.25 L 1.765625 0 Z "/>
|
||||||
</symbol>
|
</symbol>
|
||||||
<symbol overflow="visible" id="glyph0-6">
|
<symbol overflow="visible" id="glyph0-6">
|
||||||
<path style="stroke:none;" d="M 0.660156 0 L 0.660156 -5.1875 L 1.449219 -5.1875 L 1.449219 -4.449219 C 1.832031 -5.019531 2.382812 -5.304688 3.101562 -5.304688 C 3.414062 -5.304688 3.699219 -5.246094 3.960938 -5.132812 C 4.222656 -5.023438 4.421875 -4.875 4.550781 -4.691406 C 4.679688 -4.507812 4.773438 -4.292969 4.824219 -4.042969 C 4.855469 -3.878906 4.875 -3.59375 4.875 -3.1875 L 4.875 0 L 3.992188 0 L 3.992188 -3.15625 C 3.992188 -3.511719 3.960938 -3.78125 3.890625 -3.957031 C 3.824219 -4.132812 3.703125 -4.277344 3.527344 -4.382812 C 3.351562 -4.488281 3.148438 -4.539062 2.914062 -4.539062 C 2.539062 -4.539062 2.21875 -4.421875 1.945312 -4.183594 C 1.671875 -3.945312 1.539062 -3.496094 1.539062 -2.832031 L 1.539062 0 Z "/>
|
<path style="stroke:none;" d="M 4.058594 0 L 4.058594 -0.761719 C 3.65625 -0.175781 3.105469 0.117188 2.414062 0.117188 C 2.105469 0.117188 1.820312 0.0585938 1.554688 -0.0585938 C 1.289062 -0.175781 1.09375 -0.324219 0.964844 -0.5 C 0.835938 -0.679688 0.746094 -0.894531 0.695312 -1.152344 C 0.65625 -1.324219 0.640625 -1.597656 0.640625 -1.972656 L 0.640625 -5.1875 L 1.519531 -5.1875 L 1.519531 -2.308594 C 1.519531 -1.851562 1.535156 -1.542969 1.570312 -1.382812 C 1.625 -1.152344 1.746094 -0.96875 1.921875 -0.835938 C 2.101562 -0.703125 2.324219 -0.640625 2.585938 -0.640625 C 2.851562 -0.640625 3.097656 -0.707031 3.328125 -0.84375 C 3.5625 -0.976562 3.726562 -1.160156 3.820312 -1.394531 C 3.917969 -1.625 3.964844 -1.964844 3.964844 -2.40625 L 3.964844 -5.1875 L 4.84375 -5.1875 L 4.84375 0 Z "/>
|
||||||
</symbol>
|
</symbol>
|
||||||
<symbol overflow="visible" id="glyph0-7">
|
<symbol overflow="visible" id="glyph0-7">
|
||||||
<path style="stroke:none;" d="M 4.042969 -1.898438 L 4.90625 -1.789062 C 4.8125 -1.191406 4.570312 -0.726562 4.183594 -0.386719 C 3.792969 -0.0507812 3.316406 0.117188 2.75 0.117188 C 2.039062 0.117188 1.46875 -0.113281 1.039062 -0.578125 C 0.605469 -1.042969 0.390625 -1.707031 0.390625 -2.574219 C 0.390625 -3.132812 0.484375 -3.625 0.667969 -4.042969 C 0.855469 -4.460938 1.136719 -4.777344 1.515625 -4.988281 C 1.894531 -5.199219 2.308594 -5.304688 2.753906 -5.304688 C 3.316406 -5.304688 3.777344 -5.160156 4.136719 -4.875 C 4.492188 -4.589844 4.722656 -4.1875 4.824219 -3.664062 L 3.96875 -3.53125 C 3.886719 -3.878906 3.746094 -4.140625 3.539062 -4.316406 C 3.332031 -4.492188 3.082031 -4.578125 2.789062 -4.578125 C 2.34375 -4.578125 1.984375 -4.421875 1.710938 -4.105469 C 1.433594 -3.789062 1.292969 -3.285156 1.292969 -2.597656 C 1.292969 -1.902344 1.425781 -1.394531 1.695312 -1.078125 C 1.960938 -0.761719 2.308594 -0.605469 2.738281 -0.605469 C 3.085938 -0.605469 3.371094 -0.710938 3.601562 -0.921875 C 3.835938 -1.132812 3.980469 -1.460938 4.042969 -1.898438 Z "/>
|
<path style="stroke:none;" d="M 0.660156 0 L 0.660156 -5.1875 L 1.449219 -5.1875 L 1.449219 -4.449219 C 1.832031 -5.019531 2.382812 -5.304688 3.101562 -5.304688 C 3.414062 -5.304688 3.699219 -5.246094 3.960938 -5.132812 C 4.222656 -5.023438 4.421875 -4.875 4.550781 -4.691406 C 4.679688 -4.507812 4.773438 -4.292969 4.824219 -4.042969 C 4.855469 -3.878906 4.875 -3.59375 4.875 -3.1875 L 4.875 0 L 3.992188 0 L 3.992188 -3.15625 C 3.992188 -3.511719 3.960938 -3.78125 3.890625 -3.957031 C 3.824219 -4.132812 3.703125 -4.277344 3.527344 -4.382812 C 3.351562 -4.488281 3.148438 -4.539062 2.914062 -4.539062 C 2.539062 -4.539062 2.21875 -4.421875 1.945312 -4.183594 C 1.671875 -3.945312 1.539062 -3.496094 1.539062 -2.832031 L 1.539062 0 Z "/>
|
||||||
</symbol>
|
</symbol>
|
||||||
<symbol overflow="visible" id="glyph0-8">
|
<symbol overflow="visible" id="glyph0-8">
|
||||||
<path style="stroke:none;" d="M 2.578125 -0.785156 L 2.703125 -0.0078125 C 2.457031 0.0429688 2.234375 0.0703125 2.039062 0.0703125 C 1.722656 0.0703125 1.476562 0.0195312 1.296875 -0.0820312 C 1.121094 -0.183594 1 -0.316406 0.929688 -0.480469 C 0.855469 -0.644531 0.820312 -0.992188 0.820312 -1.519531 L 0.820312 -4.5 L 0.175781 -4.5 L 0.175781 -5.1875 L 0.820312 -5.1875 L 0.820312 -6.46875 L 1.695312 -6.996094 L 1.695312 -5.1875 L 2.578125 -5.1875 L 2.578125 -4.5 L 1.695312 -4.5 L 1.695312 -1.46875 C 1.695312 -1.21875 1.710938 -1.058594 1.742188 -0.984375 C 1.773438 -0.914062 1.820312 -0.859375 1.890625 -0.816406 C 1.960938 -0.773438 2.0625 -0.75 2.191406 -0.75 C 2.289062 -0.75 2.417969 -0.761719 2.578125 -0.785156 Z "/>
|
<path style="stroke:none;" d="M 4.042969 -1.898438 L 4.90625 -1.789062 C 4.8125 -1.191406 4.570312 -0.726562 4.183594 -0.386719 C 3.792969 -0.0507812 3.316406 0.117188 2.75 0.117188 C 2.039062 0.117188 1.46875 -0.113281 1.039062 -0.578125 C 0.605469 -1.042969 0.390625 -1.707031 0.390625 -2.574219 C 0.390625 -3.132812 0.484375 -3.625 0.667969 -4.042969 C 0.855469 -4.460938 1.136719 -4.777344 1.515625 -4.988281 C 1.894531 -5.199219 2.308594 -5.304688 2.753906 -5.304688 C 3.316406 -5.304688 3.777344 -5.160156 4.136719 -4.875 C 4.492188 -4.589844 4.722656 -4.1875 4.824219 -3.664062 L 3.96875 -3.53125 C 3.886719 -3.878906 3.746094 -4.140625 3.539062 -4.316406 C 3.332031 -4.492188 3.082031 -4.578125 2.789062 -4.578125 C 2.34375 -4.578125 1.984375 -4.421875 1.710938 -4.105469 C 1.433594 -3.789062 1.292969 -3.285156 1.292969 -2.597656 C 1.292969 -1.902344 1.425781 -1.394531 1.695312 -1.078125 C 1.960938 -0.761719 2.308594 -0.605469 2.738281 -0.605469 C 3.085938 -0.605469 3.371094 -0.710938 3.601562 -0.921875 C 3.835938 -1.132812 3.980469 -1.460938 4.042969 -1.898438 Z "/>
|
||||||
</symbol>
|
</symbol>
|
||||||
<symbol overflow="visible" id="glyph0-9">
|
<symbol overflow="visible" id="glyph0-9">
|
||||||
<path style="stroke:none;" d="M 0.664062 -6.148438 L 0.664062 -7.15625 L 1.542969 -7.15625 L 1.542969 -6.148438 Z M 0.664062 0 L 0.664062 -5.1875 L 1.542969 -5.1875 L 1.542969 0 Z "/>
|
<path style="stroke:none;" d="M 2.578125 -0.785156 L 2.703125 -0.0078125 C 2.457031 0.0429688 2.234375 0.0703125 2.039062 0.0703125 C 1.722656 0.0703125 1.476562 0.0195312 1.296875 -0.0820312 C 1.121094 -0.183594 1 -0.316406 0.929688 -0.480469 C 0.855469 -0.644531 0.820312 -0.992188 0.820312 -1.519531 L 0.820312 -4.5 L 0.175781 -4.5 L 0.175781 -5.1875 L 0.820312 -5.1875 L 0.820312 -6.46875 L 1.695312 -6.996094 L 1.695312 -5.1875 L 2.578125 -5.1875 L 2.578125 -4.5 L 1.695312 -4.5 L 1.695312 -1.46875 C 1.695312 -1.21875 1.710938 -1.058594 1.742188 -0.984375 C 1.773438 -0.914062 1.820312 -0.859375 1.890625 -0.816406 C 1.960938 -0.773438 2.0625 -0.75 2.191406 -0.75 C 2.289062 -0.75 2.417969 -0.761719 2.578125 -0.785156 Z "/>
|
||||||
</symbol>
|
</symbol>
|
||||||
<symbol overflow="visible" id="glyph0-10">
|
<symbol overflow="visible" id="glyph0-10">
|
||||||
<path style="stroke:none;" d="M 0.332031 -2.59375 C 0.332031 -3.554688 0.597656 -4.265625 1.132812 -4.726562 C 1.578125 -5.109375 2.121094 -5.304688 2.765625 -5.304688 C 3.476562 -5.304688 4.058594 -5.070312 4.511719 -4.601562 C 4.964844 -4.132812 5.191406 -3.488281 5.191406 -2.664062 C 5.191406 -2 5.089844 -1.472656 4.890625 -1.089844 C 4.691406 -0.707031 4.398438 -0.410156 4.015625 -0.199219 C 3.632812 0.0117188 3.214844 0.117188 2.765625 0.117188 C 2.039062 0.117188 1.449219 -0.117188 1.003906 -0.582031 C 0.554688 -1.046875 0.332031 -1.71875 0.332031 -2.59375 Z M 1.234375 -2.59375 C 1.234375 -1.929688 1.378906 -1.429688 1.671875 -1.101562 C 1.960938 -0.769531 2.324219 -0.605469 2.765625 -0.605469 C 3.199219 -0.605469 3.5625 -0.773438 3.851562 -1.101562 C 4.140625 -1.433594 4.289062 -1.941406 4.289062 -2.621094 C 4.289062 -3.261719 4.140625 -3.75 3.851562 -4.078125 C 3.558594 -4.410156 3.195312 -4.574219 2.765625 -4.574219 C 2.324219 -4.574219 1.960938 -4.410156 1.671875 -4.082031 C 1.382812 -3.753906 1.234375 -3.257812 1.234375 -2.59375 Z "/>
|
<path style="stroke:none;" d="M 0.664062 -6.148438 L 0.664062 -7.15625 L 1.542969 -7.15625 L 1.542969 -6.148438 Z M 0.664062 0 L 0.664062 -5.1875 L 1.542969 -5.1875 L 1.542969 0 Z "/>
|
||||||
</symbol>
|
</symbol>
|
||||||
<symbol overflow="visible" id="glyph0-11">
|
<symbol overflow="visible" id="glyph0-11">
|
||||||
|
<path style="stroke:none;" d="M 0.332031 -2.59375 C 0.332031 -3.554688 0.597656 -4.265625 1.132812 -4.726562 C 1.578125 -5.109375 2.121094 -5.304688 2.765625 -5.304688 C 3.476562 -5.304688 4.058594 -5.070312 4.511719 -4.601562 C 4.964844 -4.132812 5.191406 -3.488281 5.191406 -2.664062 C 5.191406 -2 5.089844 -1.472656 4.890625 -1.089844 C 4.691406 -0.707031 4.398438 -0.410156 4.015625 -0.199219 C 3.632812 0.0117188 3.214844 0.117188 2.765625 0.117188 C 2.039062 0.117188 1.449219 -0.117188 1.003906 -0.582031 C 0.554688 -1.046875 0.332031 -1.71875 0.332031 -2.59375 Z M 1.234375 -2.59375 C 1.234375 -1.929688 1.378906 -1.429688 1.671875 -1.101562 C 1.960938 -0.769531 2.324219 -0.605469 2.765625 -0.605469 C 3.199219 -0.605469 3.5625 -0.773438 3.851562 -1.101562 C 4.140625 -1.433594 4.289062 -1.941406 4.289062 -2.621094 C 4.289062 -3.261719 4.140625 -3.75 3.851562 -4.078125 C 3.558594 -4.410156 3.195312 -4.574219 2.765625 -4.574219 C 2.324219 -4.574219 1.960938 -4.410156 1.671875 -4.082031 C 1.382812 -3.753906 1.234375 -3.257812 1.234375 -2.59375 Z "/>
|
||||||
|
</symbol>
|
||||||
|
<symbol overflow="visible" id="glyph0-12">
|
||||||
<path style="stroke:none;" d="M 0.308594 -1.546875 L 1.175781 -1.683594 C 1.226562 -1.335938 1.363281 -1.070312 1.585938 -0.882812 C 1.808594 -0.699219 2.117188 -0.605469 2.519531 -0.605469 C 2.921875 -0.605469 3.222656 -0.6875 3.417969 -0.851562 C 3.613281 -1.015625 3.710938 -1.210938 3.710938 -1.429688 C 3.710938 -1.628906 3.625 -1.785156 3.453125 -1.898438 C 3.332031 -1.976562 3.03125 -2.078125 2.554688 -2.195312 C 1.910156 -2.359375 1.460938 -2.5 1.214844 -2.621094 C 0.964844 -2.738281 0.777344 -2.902344 0.648438 -3.113281 C 0.519531 -3.324219 0.453125 -3.554688 0.453125 -3.808594 C 0.453125 -4.039062 0.507812 -4.253906 0.613281 -4.449219 C 0.71875 -4.648438 0.863281 -4.8125 1.046875 -4.941406 C 1.183594 -5.042969 1.367188 -5.128906 1.605469 -5.199219 C 1.839844 -5.269531 2.09375 -5.304688 2.363281 -5.304688 C 2.769531 -5.304688 3.128906 -5.242188 3.433594 -5.125 C 3.742188 -5.007812 3.96875 -4.851562 4.117188 -4.652344 C 4.261719 -4.453125 4.363281 -4.183594 4.417969 -3.847656 L 3.558594 -3.730469 C 3.519531 -3.996094 3.40625 -4.207031 3.21875 -4.355469 C 3.03125 -4.503906 2.769531 -4.578125 2.425781 -4.578125 C 2.023438 -4.578125 1.734375 -4.511719 1.5625 -4.378906 C 1.390625 -4.246094 1.304688 -4.089844 1.304688 -3.910156 C 1.304688 -3.796875 1.339844 -3.695312 1.410156 -3.601562 C 1.484375 -3.507812 1.59375 -3.429688 1.75 -3.367188 C 1.835938 -3.335938 2.09375 -3.261719 2.523438 -3.144531 C 3.144531 -2.976562 3.578125 -2.84375 3.824219 -2.738281 C 4.070312 -2.632812 4.265625 -2.476562 4.40625 -2.273438 C 4.546875 -2.074219 4.613281 -1.824219 4.613281 -1.523438 C 4.613281 -1.230469 4.527344 -0.953125 4.359375 -0.695312 C 4.1875 -0.4375 3.941406 -0.238281 3.617188 -0.09375 C 3.296875 0.046875 2.929688 0.117188 2.523438 0.117188 C 1.851562 0.117188 1.335938 -0.0234375 0.984375 -0.304688 C 0.632812 -0.582031 0.40625 -0.996094 0.308594 -1.546875 Z "/>
|
<path style="stroke:none;" d="M 0.308594 -1.546875 L 1.175781 -1.683594 C 1.226562 -1.335938 1.363281 -1.070312 1.585938 -0.882812 C 1.808594 -0.699219 2.117188 -0.605469 2.519531 -0.605469 C 2.921875 -0.605469 3.222656 -0.6875 3.417969 -0.851562 C 3.613281 -1.015625 3.710938 -1.210938 3.710938 -1.429688 C 3.710938 -1.628906 3.625 -1.785156 3.453125 -1.898438 C 3.332031 -1.976562 3.03125 -2.078125 2.554688 -2.195312 C 1.910156 -2.359375 1.460938 -2.5 1.214844 -2.621094 C 0.964844 -2.738281 0.777344 -2.902344 0.648438 -3.113281 C 0.519531 -3.324219 0.453125 -3.554688 0.453125 -3.808594 C 0.453125 -4.039062 0.507812 -4.253906 0.613281 -4.449219 C 0.71875 -4.648438 0.863281 -4.8125 1.046875 -4.941406 C 1.183594 -5.042969 1.367188 -5.128906 1.605469 -5.199219 C 1.839844 -5.269531 2.09375 -5.304688 2.363281 -5.304688 C 2.769531 -5.304688 3.128906 -5.242188 3.433594 -5.125 C 3.742188 -5.007812 3.96875 -4.851562 4.117188 -4.652344 C 4.261719 -4.453125 4.363281 -4.183594 4.417969 -3.847656 L 3.558594 -3.730469 C 3.519531 -3.996094 3.40625 -4.207031 3.21875 -4.355469 C 3.03125 -4.503906 2.769531 -4.578125 2.425781 -4.578125 C 2.023438 -4.578125 1.734375 -4.511719 1.5625 -4.378906 C 1.390625 -4.246094 1.304688 -4.089844 1.304688 -3.910156 C 1.304688 -3.796875 1.339844 -3.695312 1.410156 -3.601562 C 1.484375 -3.507812 1.59375 -3.429688 1.75 -3.367188 C 1.835938 -3.335938 2.09375 -3.261719 2.523438 -3.144531 C 3.144531 -2.976562 3.578125 -2.84375 3.824219 -2.738281 C 4.070312 -2.632812 4.265625 -2.476562 4.40625 -2.273438 C 4.546875 -2.074219 4.613281 -1.824219 4.613281 -1.523438 C 4.613281 -1.230469 4.527344 -0.953125 4.359375 -0.695312 C 4.1875 -0.4375 3.941406 -0.238281 3.617188 -0.09375 C 3.296875 0.046875 2.929688 0.117188 2.523438 0.117188 C 1.851562 0.117188 1.335938 -0.0234375 0.984375 -0.304688 C 0.632812 -0.582031 0.40625 -0.996094 0.308594 -1.546875 Z "/>
|
||||||
</symbol>
|
</symbol>
|
||||||
<symbol overflow="visible" id="glyph1-0">
|
<symbol overflow="visible" id="glyph1-0">
|
||||||
|
@ -151,289 +154,274 @@
|
||||||
</symbol>
|
</symbol>
|
||||||
</g>
|
</g>
|
||||||
<clipPath id="clip1">
|
<clipPath id="clip1">
|
||||||
<path d="M 94 21 L 96 21 L 96 217 L 94 217 Z "/>
|
<path d="M 89 21 L 91 21 L 91 221 L 89 221 Z "/>
|
||||||
</clipPath>
|
</clipPath>
|
||||||
<clipPath id="clip2">
|
<clipPath id="clip2">
|
||||||
<path d="M 204 21 L 206 21 L 206 217 L 204 217 Z "/>
|
<path d="M 201 21 L 203 21 L 203 221 L 201 221 Z "/>
|
||||||
</clipPath>
|
</clipPath>
|
||||||
<clipPath id="clip3">
|
<clipPath id="clip3">
|
||||||
<path d="M 314 21 L 316 21 L 316 217 L 314 217 Z "/>
|
<path d="M 313 21 L 315 21 L 315 221 L 313 221 Z "/>
|
||||||
</clipPath>
|
</clipPath>
|
||||||
<clipPath id="clip4">
|
<clipPath id="clip4">
|
||||||
<path d="M 39 197 L 355 197 L 355 199 L 39 199 Z "/>
|
<path d="M 33 180 L 355 180 L 355 182 L 33 182 Z "/>
|
||||||
</clipPath>
|
</clipPath>
|
||||||
<clipPath id="clip5">
|
<clipPath id="clip5">
|
||||||
<path d="M 39 140 L 355 140 L 355 142 L 39 142 Z "/>
|
<path d="M 33 146 L 355 146 L 355 148 L 33 148 Z "/>
|
||||||
</clipPath>
|
</clipPath>
|
||||||
<clipPath id="clip6">
|
<clipPath id="clip6">
|
||||||
<path d="M 39 115 L 355 115 L 355 117 L 39 117 Z "/>
|
<path d="M 33 120 L 355 120 L 355 122 L 33 122 Z "/>
|
||||||
</clipPath>
|
</clipPath>
|
||||||
<clipPath id="clip7">
|
<clipPath id="clip7">
|
||||||
<path d="M 39 58 L 355 58 L 355 60 L 39 60 Z "/>
|
<path d="M 33 95 L 355 95 L 355 97 L 33 97 Z "/>
|
||||||
</clipPath>
|
</clipPath>
|
||||||
<clipPath id="clip8">
|
<clipPath id="clip8">
|
||||||
<path d="M 39 33 L 355 33 L 355 35 L 39 35 Z "/>
|
<path d="M 33 61 L 355 61 L 355 63 L 33 63 Z "/>
|
||||||
</clipPath>
|
</clipPath>
|
||||||
</defs>
|
</defs>
|
||||||
<g id="surface4">
|
<g id="surface11">
|
||||||
<g clip-path="url(#clip1)" clip-rule="nonzero">
|
<g clip-path="url(#clip1)" clip-rule="nonzero">
|
||||||
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:0.5;stroke-dasharray:1,2;stroke-miterlimit:3.25;" d="M 95.160156 216.296875 L 95.160156 21 "/>
|
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:0.5;stroke-dasharray:1,2;stroke-miterlimit:3.25;" d="M 90.226562 220.007812 L 90.226562 21 "/>
|
||||||
</g>
|
</g>
|
||||||
<g clip-path="url(#clip2)" clip-rule="nonzero">
|
<g clip-path="url(#clip2)" clip-rule="nonzero">
|
||||||
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:0.5;stroke-dasharray:1,2;stroke-miterlimit:3.25;" d="M 204.84375 216.296875 L 204.84375 21 "/>
|
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:0.5;stroke-dasharray:1,2;stroke-miterlimit:3.25;" d="M 201.996094 220.007812 L 201.996094 21 "/>
|
||||||
</g>
|
</g>
|
||||||
<g clip-path="url(#clip3)" clip-rule="nonzero">
|
<g clip-path="url(#clip3)" clip-rule="nonzero">
|
||||||
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:0.5;stroke-dasharray:1,2;stroke-miterlimit:3.25;" d="M 314.53125 216.296875 L 314.53125 21 "/>
|
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:0.5;stroke-dasharray:1,2;stroke-miterlimit:3.25;" d="M 313.761719 220.007812 L 313.761719 21 "/>
|
||||||
</g>
|
</g>
|
||||||
<g clip-path="url(#clip4)" clip-rule="nonzero">
|
<g clip-path="url(#clip4)" clip-rule="nonzero">
|
||||||
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:0.5;stroke-dasharray:1,2;stroke-miterlimit:3.25;" d="M 39 198.339844 L 355 198.339844 "/>
|
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:0.5;stroke-dasharray:1,2;stroke-miterlimit:3.25;" d="M 33 180.734375 L 355 180.734375 "/>
|
||||||
</g>
|
</g>
|
||||||
<g clip-path="url(#clip5)" clip-rule="nonzero">
|
<g clip-path="url(#clip5)" clip-rule="nonzero">
|
||||||
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:0.5;stroke-dasharray:1,2;stroke-miterlimit:3.25;" d="M 39 140.886719 L 355 140.886719 "/>
|
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:0.5;stroke-dasharray:1,2;stroke-miterlimit:3.25;" d="M 33 146.960938 L 355 146.960938 "/>
|
||||||
</g>
|
</g>
|
||||||
<g clip-path="url(#clip6)" clip-rule="nonzero">
|
<g clip-path="url(#clip6)" clip-rule="nonzero">
|
||||||
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:0.5;stroke-dasharray:1,2;stroke-miterlimit:3.25;" d="M 39 116.140625 L 355 116.140625 "/>
|
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:0.5;stroke-dasharray:1,2;stroke-miterlimit:3.25;" d="M 33 121.410156 L 355 121.410156 "/>
|
||||||
</g>
|
</g>
|
||||||
<g clip-path="url(#clip7)" clip-rule="nonzero">
|
<g clip-path="url(#clip7)" clip-rule="nonzero">
|
||||||
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:0.5;stroke-dasharray:1,2;stroke-miterlimit:3.25;" d="M 39 58.6875 L 355 58.6875 "/>
|
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:0.5;stroke-dasharray:1,2;stroke-miterlimit:3.25;" d="M 33 95.859375 L 355 95.859375 "/>
|
||||||
</g>
|
</g>
|
||||||
<g clip-path="url(#clip8)" clip-rule="nonzero">
|
<g clip-path="url(#clip8)" clip-rule="nonzero">
|
||||||
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:0.5;stroke-dasharray:1,2;stroke-miterlimit:3.25;" d="M 39 33.945312 L 355 33.945312 "/>
|
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:0.5;stroke-dasharray:1,2;stroke-miterlimit:3.25;" d="M 33 62.082031 L 355 62.082031 "/>
|
||||||
</g>
|
</g>
|
||||||
<path style=" stroke:none;fill-rule:evenodd;fill:rgb(36.84082%,50.67749%,70.979309%);fill-opacity:1;" d="M 55.070312 170 C 55.070312 169.183594 54.75 168.402344 54.171875 167.828125 C 53.597656 167.25 52.816406 166.929688 52 166.929688 C 51.183594 166.929688 50.402344 167.25 49.828125 167.828125 C 49.25 168.402344 48.929688 169.183594 48.929688 170 C 48.929688 170.816406 49.25 171.597656 49.828125 172.171875 C 50.402344 172.75 51.183594 173.070312 52 173.070312 C 52.816406 173.070312 53.597656 172.75 54.171875 172.171875 C 54.75 171.597656 55.070312 170.816406 55.070312 170 Z "/>
|
<path style=" stroke:none;fill-rule:evenodd;fill:rgb(36.84082%,50.67749%,70.979309%);fill-opacity:1;" d="M 49.128906 169 C 49.128906 168.167969 48.800781 167.375 48.214844 166.785156 C 47.625 166.199219 46.832031 165.871094 46 165.871094 C 45.167969 165.871094 44.375 166.199219 43.785156 166.785156 C 43.199219 167.375 42.871094 168.167969 42.871094 169 C 42.871094 169.832031 43.199219 170.625 43.785156 171.214844 C 44.375 171.800781 45.167969 172.128906 46 172.128906 C 46.832031 172.128906 47.625 171.800781 48.214844 171.214844 C 48.800781 170.625 49.128906 169.832031 49.128906 169 Z "/>
|
||||||
<path style=" stroke:none;fill-rule:evenodd;fill:rgb(36.84082%,50.67749%,70.979309%);fill-opacity:1;" d="M 88.070312 167 C 88.070312 166.183594 87.75 165.402344 87.171875 164.828125 C 86.597656 164.25 85.816406 163.929688 85 163.929688 C 84.183594 163.929688 83.402344 164.25 82.828125 164.828125 C 82.25 165.402344 81.929688 166.183594 81.929688 167 C 81.929688 167.816406 82.25 168.597656 82.828125 169.171875 C 83.402344 169.75 84.183594 170.070312 85 170.070312 C 85.816406 170.070312 86.597656 169.75 87.171875 169.171875 C 87.75 168.597656 88.070312 167.816406 88.070312 167 Z "/>
|
<path style=" stroke:none;fill-rule:evenodd;fill:rgb(36.84082%,50.67749%,70.979309%);fill-opacity:1;" d="M 82.128906 169 C 82.128906 168.167969 81.800781 167.375 81.214844 166.785156 C 80.625 166.199219 79.832031 165.871094 79 165.871094 C 78.167969 165.871094 77.375 166.199219 76.785156 166.785156 C 76.199219 167.375 75.871094 168.167969 75.871094 169 C 75.871094 169.832031 76.199219 170.625 76.785156 171.214844 C 77.375 171.800781 78.167969 172.128906 79 172.128906 C 79.832031 172.128906 80.625 171.800781 81.214844 171.214844 C 81.800781 170.625 82.128906 169.832031 82.128906 169 Z "/>
|
||||||
<path style=" stroke:none;fill-rule:evenodd;fill:rgb(36.84082%,50.67749%,70.979309%);fill-opacity:1;" d="M 121.070312 162 C 121.070312 161.183594 120.75 160.402344 120.171875 159.828125 C 119.597656 159.25 118.816406 158.929688 118 158.929688 C 117.183594 158.929688 116.402344 159.25 115.828125 159.828125 C 115.25 160.402344 114.929688 161.183594 114.929688 162 C 114.929688 162.816406 115.25 163.597656 115.828125 164.171875 C 116.402344 164.75 117.183594 165.070312 118 165.070312 C 118.816406 165.070312 119.597656 164.75 120.171875 164.171875 C 120.75 163.597656 121.070312 162.816406 121.070312 162 Z "/>
|
<path style=" stroke:none;fill-rule:evenodd;fill:rgb(36.84082%,50.67749%,70.979309%);fill-opacity:1;" d="M 116.128906 167 C 116.128906 166.167969 115.800781 165.375 115.214844 164.785156 C 114.625 164.199219 113.832031 163.871094 113 163.871094 C 112.167969 163.871094 111.375 164.199219 110.785156 164.785156 C 110.199219 165.375 109.871094 166.167969 109.871094 167 C 109.871094 167.832031 110.199219 168.625 110.785156 169.214844 C 111.375 169.800781 112.167969 170.128906 113 170.128906 C 113.832031 170.128906 114.625 169.800781 115.214844 169.214844 C 115.800781 168.625 116.128906 167.832031 116.128906 167 Z "/>
|
||||||
<path style=" stroke:none;fill-rule:evenodd;fill:rgb(36.84082%,50.67749%,70.979309%);fill-opacity:1;" d="M 154.070312 154 C 154.070312 153.183594 153.75 152.402344 153.171875 151.828125 C 152.597656 151.25 151.816406 150.929688 151 150.929688 C 150.183594 150.929688 149.402344 151.25 148.828125 151.828125 C 148.25 152.402344 147.929688 153.183594 147.929688 154 C 147.929688 154.816406 148.25 155.597656 148.828125 156.171875 C 149.402344 156.75 150.183594 157.070312 151 157.070312 C 151.816406 157.070312 152.597656 156.75 153.171875 156.171875 C 153.75 155.597656 154.070312 154.816406 154.070312 154 Z "/>
|
<path style=" stroke:none;fill-rule:evenodd;fill:rgb(36.84082%,50.67749%,70.979309%);fill-opacity:1;" d="M 150.128906 159 C 150.128906 158.167969 149.800781 157.375 149.214844 156.785156 C 148.625 156.199219 147.832031 155.871094 147 155.871094 C 146.167969 155.871094 145.375 156.199219 144.785156 156.785156 C 144.199219 157.375 143.871094 158.167969 143.871094 159 C 143.871094 159.832031 144.199219 160.625 144.785156 161.214844 C 145.375 161.800781 146.167969 162.128906 147 162.128906 C 147.832031 162.128906 148.625 161.800781 149.214844 161.214844 C 149.800781 160.625 150.128906 159.832031 150.128906 159 Z "/>
|
||||||
<path style=" stroke:none;fill-rule:evenodd;fill:rgb(36.84082%,50.67749%,70.979309%);fill-opacity:1;" d="M 187.070312 142 C 187.070312 141.183594 186.75 140.402344 186.171875 139.828125 C 185.597656 139.25 184.816406 138.929688 184 138.929688 C 183.183594 138.929688 182.402344 139.25 181.828125 139.828125 C 181.25 140.402344 180.929688 141.183594 180.929688 142 C 180.929688 142.816406 181.25 143.597656 181.828125 144.171875 C 182.402344 144.75 183.183594 145.070312 184 145.070312 C 184.816406 145.070312 185.597656 144.75 186.171875 144.171875 C 186.75 143.597656 187.070312 142.816406 187.070312 142 Z "/>
|
<path style=" stroke:none;fill-rule:evenodd;fill:rgb(36.84082%,50.67749%,70.979309%);fill-opacity:1;" d="M 183.128906 146 C 183.128906 145.167969 182.800781 144.375 182.214844 143.785156 C 181.625 143.199219 180.832031 142.871094 180 142.871094 C 179.167969 142.871094 178.375 143.199219 177.785156 143.785156 C 177.199219 144.375 176.871094 145.167969 176.871094 146 C 176.871094 146.832031 177.199219 147.625 177.785156 148.214844 C 178.375 148.800781 179.167969 149.128906 180 149.128906 C 180.832031 149.128906 181.625 148.800781 182.214844 148.214844 C 182.800781 147.625 183.128906 146.832031 183.128906 146 Z "/>
|
||||||
<path style=" stroke:none;fill-rule:evenodd;fill:rgb(36.84082%,50.67749%,70.979309%);fill-opacity:1;" d="M 220.070312 125 C 220.070312 124.183594 219.75 123.402344 219.171875 122.828125 C 218.597656 122.25 217.816406 121.929688 217 121.929688 C 216.183594 121.929688 215.402344 122.25 214.828125 122.828125 C 214.25 123.402344 213.929688 124.183594 213.929688 125 C 213.929688 125.816406 214.25 126.597656 214.828125 127.171875 C 215.402344 127.75 216.183594 128.070312 217 128.070312 C 217.816406 128.070312 218.597656 127.75 219.171875 127.171875 C 219.75 126.597656 220.070312 125.816406 220.070312 125 Z "/>
|
<path style=" stroke:none;fill-rule:evenodd;fill:rgb(36.84082%,50.67749%,70.979309%);fill-opacity:1;" d="M 217.128906 128 C 217.128906 127.167969 216.800781 126.375 216.214844 125.785156 C 215.625 125.199219 214.832031 124.871094 214 124.871094 C 213.167969 124.871094 212.375 125.199219 211.785156 125.785156 C 211.199219 126.375 210.871094 127.167969 210.871094 128 C 210.871094 128.832031 211.199219 129.625 211.785156 130.214844 C 212.375 130.800781 213.167969 131.128906 214 131.128906 C 214.832031 131.128906 215.625 130.800781 216.214844 130.214844 C 216.800781 129.625 217.128906 128.832031 217.128906 128 Z "/>
|
||||||
<path style=" stroke:none;fill-rule:evenodd;fill:rgb(36.84082%,50.67749%,70.979309%);fill-opacity:1;" d="M 253.070312 105 C 253.070312 104.183594 252.75 103.402344 252.171875 102.828125 C 251.597656 102.25 250.816406 101.929688 250 101.929688 C 249.183594 101.929688 248.402344 102.25 247.828125 102.828125 C 247.25 103.402344 246.929688 104.183594 246.929688 105 C 246.929688 105.816406 247.25 106.597656 247.828125 107.171875 C 248.402344 107.75 249.183594 108.070312 250 108.070312 C 250.816406 108.070312 251.597656 107.75 252.171875 107.171875 C 252.75 106.597656 253.070312 105.816406 253.070312 105 Z "/>
|
<path style=" stroke:none;fill-rule:evenodd;fill:rgb(36.84082%,50.67749%,70.979309%);fill-opacity:1;" d="M 251.128906 108 C 251.128906 107.167969 250.800781 106.375 250.214844 105.785156 C 249.625 105.199219 248.832031 104.871094 248 104.871094 C 247.167969 104.871094 246.375 105.199219 245.785156 105.785156 C 245.199219 106.375 244.871094 107.167969 244.871094 108 C 244.871094 108.832031 245.199219 109.625 245.785156 110.214844 C 246.375 110.800781 247.167969 111.128906 248 111.128906 C 248.832031 111.128906 249.625 110.800781 250.214844 110.214844 C 250.800781 109.625 251.128906 108.832031 251.128906 108 Z "/>
|
||||||
<path style=" stroke:none;fill-rule:evenodd;fill:rgb(36.84082%,50.67749%,70.979309%);fill-opacity:1;" d="M 286.070312 82 C 286.070312 81.183594 285.75 80.402344 285.171875 79.828125 C 284.597656 79.25 283.816406 78.929688 283 78.929688 C 282.183594 78.929688 281.402344 79.25 280.828125 79.828125 C 280.25 80.402344 279.929688 81.183594 279.929688 82 C 279.929688 82.816406 280.25 83.597656 280.828125 84.171875 C 281.402344 84.75 282.183594 85.070312 283 85.070312 C 283.816406 85.070312 284.597656 84.75 285.171875 84.171875 C 285.75 83.597656 286.070312 82.816406 286.070312 82 Z "/>
|
<path style=" stroke:none;fill-rule:evenodd;fill:rgb(36.84082%,50.67749%,70.979309%);fill-opacity:1;" d="M 284.128906 85 C 284.128906 84.167969 283.800781 83.375 283.214844 82.785156 C 282.625 82.199219 281.832031 81.871094 281 81.871094 C 280.167969 81.871094 279.375 82.199219 278.785156 82.785156 C 278.199219 83.375 277.871094 84.167969 277.871094 85 C 277.871094 85.832031 278.199219 86.625 278.785156 87.214844 C 279.375 87.800781 280.167969 88.128906 281 88.128906 C 281.832031 88.128906 282.625 87.800781 283.214844 87.214844 C 283.800781 86.625 284.128906 85.832031 284.128906 85 Z "/>
|
||||||
<path style=" stroke:none;fill-rule:evenodd;fill:rgb(36.84082%,50.67749%,70.979309%);fill-opacity:1;" d="M 319.070312 57 C 319.070312 56.183594 318.75 55.402344 318.171875 54.828125 C 317.597656 54.25 316.816406 53.929688 316 53.929688 C 315.183594 53.929688 314.402344 54.25 313.828125 54.828125 C 313.25 55.402344 312.929688 56.183594 312.929688 57 C 312.929688 57.816406 313.25 58.597656 313.828125 59.171875 C 314.402344 59.75 315.183594 60.070312 316 60.070312 C 316.816406 60.070312 317.597656 59.75 318.171875 59.171875 C 318.75 58.597656 319.070312 57.816406 319.070312 57 Z "/>
|
<path style=" stroke:none;fill-rule:evenodd;fill:rgb(36.84082%,50.67749%,70.979309%);fill-opacity:1;" d="M 318.128906 59 C 318.128906 58.167969 317.800781 57.375 317.214844 56.785156 C 316.625 56.199219 315.832031 55.871094 315 55.871094 C 314.167969 55.871094 313.375 56.199219 312.785156 56.785156 C 312.199219 57.375 311.871094 58.167969 311.871094 59 C 311.871094 59.832031 312.199219 60.625 312.785156 61.214844 C 313.375 61.800781 314.167969 62.128906 315 62.128906 C 315.832031 62.128906 316.625 61.800781 317.214844 61.214844 C 317.800781 60.625 318.128906 59.832031 318.128906 59 Z "/>
|
||||||
<path style=" stroke:none;fill-rule:evenodd;fill:rgb(36.84082%,50.67749%,70.979309%);fill-opacity:1;" d="M 352.070312 31 C 352.070312 30.183594 351.75 29.402344 351.171875 28.828125 C 350.597656 28.25 349.816406 27.929688 349 27.929688 C 348.183594 27.929688 347.402344 28.25 346.828125 28.828125 C 346.25 29.402344 345.929688 30.183594 345.929688 31 C 345.929688 31.816406 346.25 32.597656 346.828125 33.171875 C 347.402344 33.75 348.183594 34.070312 349 34.070312 C 349.816406 34.070312 350.597656 33.75 351.171875 33.171875 C 351.75 32.597656 352.070312 31.816406 352.070312 31 Z "/>
|
<path style=" stroke:none;fill-rule:evenodd;fill:rgb(36.84082%,50.67749%,70.979309%);fill-opacity:1;" d="M 352.128906 31 C 352.128906 30.167969 351.800781 29.375 351.214844 28.785156 C 350.625 28.199219 349.832031 27.871094 349 27.871094 C 348.167969 27.871094 347.375 28.199219 346.785156 28.785156 C 346.199219 29.375 345.871094 30.167969 345.871094 31 C 345.871094 31.832031 346.199219 32.625 346.785156 33.214844 C 347.375 33.800781 348.167969 34.128906 349 34.128906 C 349.832031 34.128906 350.625 33.800781 351.214844 33.214844 C 351.800781 32.625 352.128906 31.832031 352.128906 31 Z "/>
|
||||||
<path style=" stroke:none;fill-rule:evenodd;fill:rgb(88.070679%,61.103821%,14.204407%);fill-opacity:1;" d="M 55.070312 203 C 55.070312 202.183594 54.75 201.402344 54.171875 200.828125 C 53.597656 200.25 52.816406 199.929688 52 199.929688 C 51.183594 199.929688 50.402344 200.25 49.828125 200.828125 C 49.25 201.402344 48.929688 202.183594 48.929688 203 C 48.929688 203.816406 49.25 204.597656 49.828125 205.171875 C 50.402344 205.75 51.183594 206.070312 52 206.070312 C 52.816406 206.070312 53.597656 205.75 54.171875 205.171875 C 54.75 204.597656 55.070312 203.816406 55.070312 203 Z "/>
|
<path style=" stroke:none;fill-rule:evenodd;fill:rgb(88.070679%,61.103821%,14.204407%);fill-opacity:1;" d="M 49.128906 205 C 49.128906 204.167969 48.800781 203.375 48.214844 202.785156 C 47.625 202.199219 46.832031 201.871094 46 201.871094 C 45.167969 201.871094 44.375 202.199219 43.785156 202.785156 C 43.199219 203.375 42.871094 204.167969 42.871094 205 C 42.871094 205.832031 43.199219 206.625 43.785156 207.214844 C 44.375 207.800781 45.167969 208.128906 46 208.128906 C 46.832031 208.128906 47.625 207.800781 48.214844 207.214844 C 48.800781 206.625 49.128906 205.832031 49.128906 205 Z "/>
|
||||||
<path style=" stroke:none;fill-rule:evenodd;fill:rgb(88.070679%,61.103821%,14.204407%);fill-opacity:1;" d="M 88.070312 195 C 88.070312 194.183594 87.75 193.402344 87.171875 192.828125 C 86.597656 192.25 85.816406 191.929688 85 191.929688 C 84.183594 191.929688 83.402344 192.25 82.828125 192.828125 C 82.25 193.402344 81.929688 194.183594 81.929688 195 C 81.929688 195.816406 82.25 196.597656 82.828125 197.171875 C 83.402344 197.75 84.183594 198.070312 85 198.070312 C 85.816406 198.070312 86.597656 197.75 87.171875 197.171875 C 87.75 196.597656 88.070312 195.816406 88.070312 195 Z "/>
|
<path style=" stroke:none;fill-rule:evenodd;fill:rgb(88.070679%,61.103821%,14.204407%);fill-opacity:1;" d="M 82.128906 199 C 82.128906 198.167969 81.800781 197.375 81.214844 196.785156 C 80.625 196.199219 79.832031 195.871094 79 195.871094 C 78.167969 195.871094 77.375 196.199219 76.785156 196.785156 C 76.199219 197.375 75.871094 198.167969 75.871094 199 C 75.871094 199.832031 76.199219 200.625 76.785156 201.214844 C 77.375 201.800781 78.167969 202.128906 79 202.128906 C 79.832031 202.128906 80.625 201.800781 81.214844 201.214844 C 81.800781 200.625 82.128906 199.832031 82.128906 199 Z "/>
|
||||||
<path style=" stroke:none;fill-rule:evenodd;fill:rgb(88.070679%,61.103821%,14.204407%);fill-opacity:1;" d="M 121.070312 182 C 121.070312 181.183594 120.75 180.402344 120.171875 179.828125 C 119.597656 179.25 118.816406 178.929688 118 178.929688 C 117.183594 178.929688 116.402344 179.25 115.828125 179.828125 C 115.25 180.402344 114.929688 181.183594 114.929688 182 C 114.929688 182.816406 115.25 183.597656 115.828125 184.171875 C 116.402344 184.75 117.183594 185.070312 118 185.070312 C 118.816406 185.070312 119.597656 184.75 120.171875 184.171875 C 120.75 183.597656 121.070312 182.816406 121.070312 182 Z "/>
|
<path style=" stroke:none;fill-rule:evenodd;fill:rgb(88.070679%,61.103821%,14.204407%);fill-opacity:1;" d="M 116.128906 190 C 116.128906 189.167969 115.800781 188.375 115.214844 187.785156 C 114.625 187.199219 113.832031 186.871094 113 186.871094 C 112.167969 186.871094 111.375 187.199219 110.785156 187.785156 C 110.199219 188.375 109.871094 189.167969 109.871094 190 C 109.871094 190.832031 110.199219 191.625 110.785156 192.214844 C 111.375 192.800781 112.167969 193.128906 113 193.128906 C 113.832031 193.128906 114.625 192.800781 115.214844 192.214844 C 115.800781 191.625 116.128906 190.832031 116.128906 190 Z "/>
|
||||||
<path style=" stroke:none;fill-rule:evenodd;fill:rgb(88.070679%,61.103821%,14.204407%);fill-opacity:1;" d="M 154.070312 165 C 154.070312 164.183594 153.75 163.402344 153.171875 162.828125 C 152.597656 162.25 151.816406 161.929688 151 161.929688 C 150.183594 161.929688 149.402344 162.25 148.828125 162.828125 C 148.25 163.402344 147.929688 164.183594 147.929688 165 C 147.929688 165.816406 148.25 166.597656 148.828125 167.171875 C 149.402344 167.75 150.183594 168.070312 151 168.070312 C 151.816406 168.070312 152.597656 167.75 153.171875 167.171875 C 153.75 166.597656 154.070312 165.816406 154.070312 165 Z "/>
|
<path style=" stroke:none;fill-rule:evenodd;fill:rgb(88.070679%,61.103821%,14.204407%);fill-opacity:1;" d="M 150.128906 177 C 150.128906 176.167969 149.800781 175.375 149.214844 174.785156 C 148.625 174.199219 147.832031 173.871094 147 173.871094 C 146.167969 173.871094 145.375 174.199219 144.785156 174.785156 C 144.199219 175.375 143.871094 176.167969 143.871094 177 C 143.871094 177.832031 144.199219 178.625 144.785156 179.214844 C 145.375 179.800781 146.167969 180.128906 147 180.128906 C 147.832031 180.128906 148.625 179.800781 149.214844 179.214844 C 149.800781 178.625 150.128906 177.832031 150.128906 177 Z "/>
|
||||||
<path style=" stroke:none;fill-rule:evenodd;fill:rgb(88.070679%,61.103821%,14.204407%);fill-opacity:1;" d="M 187.070312 148 C 187.070312 147.183594 186.75 146.402344 186.171875 145.828125 C 185.597656 145.25 184.816406 144.929688 184 144.929688 C 183.183594 144.929688 182.402344 145.25 181.828125 145.828125 C 181.25 146.402344 180.929688 147.183594 180.929688 148 C 180.929688 148.816406 181.25 149.597656 181.828125 150.171875 C 182.402344 150.75 183.183594 151.070312 184 151.070312 C 184.816406 151.070312 185.597656 150.75 186.171875 150.171875 C 186.75 149.597656 187.070312 148.816406 187.070312 148 Z "/>
|
<path style=" stroke:none;fill-rule:evenodd;fill:rgb(88.070679%,61.103821%,14.204407%);fill-opacity:1;" d="M 183.128906 159 C 183.128906 158.167969 182.800781 157.375 182.214844 156.785156 C 181.625 156.199219 180.832031 155.871094 180 155.871094 C 179.167969 155.871094 178.375 156.199219 177.785156 156.785156 C 177.199219 157.375 176.871094 158.167969 176.871094 159 C 176.871094 159.832031 177.199219 160.625 177.785156 161.214844 C 178.375 161.800781 179.167969 162.128906 180 162.128906 C 180.832031 162.128906 181.625 161.800781 182.214844 161.214844 C 182.800781 160.625 183.128906 159.832031 183.128906 159 Z "/>
|
||||||
<path style=" stroke:none;fill-rule:evenodd;fill:rgb(88.070679%,61.103821%,14.204407%);fill-opacity:1;" d="M 220.070312 127 C 220.070312 126.183594 219.75 125.402344 219.171875 124.828125 C 218.597656 124.25 217.816406 123.929688 217 123.929688 C 216.183594 123.929688 215.402344 124.25 214.828125 124.828125 C 214.25 125.402344 213.929688 126.183594 213.929688 127 C 213.929688 127.816406 214.25 128.597656 214.828125 129.171875 C 215.402344 129.75 216.183594 130.070312 217 130.070312 C 217.816406 130.070312 218.597656 129.75 219.171875 129.171875 C 219.75 128.597656 220.070312 127.816406 220.070312 127 Z "/>
|
<path style=" stroke:none;fill-rule:evenodd;fill:rgb(88.070679%,61.103821%,14.204407%);fill-opacity:1;" d="M 217.128906 138 C 217.128906 137.167969 216.800781 136.375 216.214844 135.785156 C 215.625 135.199219 214.832031 134.871094 214 134.871094 C 213.167969 134.871094 212.375 135.199219 211.785156 135.785156 C 211.199219 136.375 210.871094 137.167969 210.871094 138 C 210.871094 138.832031 211.199219 139.625 211.785156 140.214844 C 212.375 140.800781 213.167969 141.128906 214 141.128906 C 214.832031 141.128906 215.625 140.800781 216.214844 140.214844 C 216.800781 139.625 217.128906 138.832031 217.128906 138 Z "/>
|
||||||
<path style=" stroke:none;fill-rule:evenodd;fill:rgb(88.070679%,61.103821%,14.204407%);fill-opacity:1;" d="M 253.070312 104 C 253.070312 103.183594 252.75 102.402344 252.171875 101.828125 C 251.597656 101.25 250.816406 100.929688 250 100.929688 C 249.183594 100.929688 248.402344 101.25 247.828125 101.828125 C 247.25 102.402344 246.929688 103.183594 246.929688 104 C 246.929688 104.816406 247.25 105.597656 247.828125 106.171875 C 248.402344 106.75 249.183594 107.070312 250 107.070312 C 250.816406 107.070312 251.597656 106.75 252.171875 106.171875 C 252.75 105.597656 253.070312 104.816406 253.070312 104 Z "/>
|
<path style=" stroke:none;fill-rule:evenodd;fill:rgb(88.070679%,61.103821%,14.204407%);fill-opacity:1;" d="M 251.128906 115 C 251.128906 114.167969 250.800781 113.375 250.214844 112.785156 C 249.625 112.199219 248.832031 111.871094 248 111.871094 C 247.167969 111.871094 246.375 112.199219 245.785156 112.785156 C 245.199219 113.375 244.871094 114.167969 244.871094 115 C 244.871094 115.832031 245.199219 116.625 245.785156 117.214844 C 246.375 117.800781 247.167969 118.128906 248 118.128906 C 248.832031 118.128906 249.625 117.800781 250.214844 117.214844 C 250.800781 116.625 251.128906 115.832031 251.128906 115 Z "/>
|
||||||
<path style=" stroke:none;fill-rule:evenodd;fill:rgb(88.070679%,61.103821%,14.204407%);fill-opacity:1;" d="M 286.070312 79 C 286.070312 78.183594 285.75 77.402344 285.171875 76.828125 C 284.597656 76.25 283.816406 75.929688 283 75.929688 C 282.183594 75.929688 281.402344 76.25 280.828125 76.828125 C 280.25 77.402344 279.929688 78.183594 279.929688 79 C 279.929688 79.816406 280.25 80.597656 280.828125 81.171875 C 281.402344 81.75 282.183594 82.070312 283 82.070312 C 283.816406 82.070312 284.597656 81.75 285.171875 81.171875 C 285.75 80.597656 286.070312 79.816406 286.070312 79 Z "/>
|
<path style=" stroke:none;fill-rule:evenodd;fill:rgb(88.070679%,61.103821%,14.204407%);fill-opacity:1;" d="M 284.128906 91 C 284.128906 90.167969 283.800781 89.375 283.214844 88.785156 C 282.625 88.199219 281.832031 87.871094 281 87.871094 C 280.167969 87.871094 279.375 88.199219 278.785156 88.785156 C 278.199219 89.375 277.871094 90.167969 277.871094 91 C 277.871094 91.832031 278.199219 92.625 278.785156 93.214844 C 279.375 93.800781 280.167969 94.128906 281 94.128906 C 281.832031 94.128906 282.625 93.800781 283.214844 93.214844 C 283.800781 92.625 284.128906 91.832031 284.128906 91 Z "/>
|
||||||
<path style=" stroke:none;fill-rule:evenodd;fill:rgb(88.070679%,61.103821%,14.204407%);fill-opacity:1;" d="M 319.070312 55 C 319.070312 54.183594 318.75 53.402344 318.171875 52.828125 C 317.597656 52.25 316.816406 51.929688 316 51.929688 C 315.183594 51.929688 314.402344 52.25 313.828125 52.828125 C 313.25 53.402344 312.929688 54.183594 312.929688 55 C 312.929688 55.816406 313.25 56.597656 313.828125 57.171875 C 314.402344 57.75 315.183594 58.070312 316 58.070312 C 316.816406 58.070312 317.597656 57.75 318.171875 57.171875 C 318.75 56.597656 319.070312 55.816406 319.070312 55 Z "/>
|
<path style=" stroke:none;fill-rule:evenodd;fill:rgb(88.070679%,61.103821%,14.204407%);fill-opacity:1;" d="M 318.128906 65 C 318.128906 64.167969 317.800781 63.375 317.214844 62.785156 C 316.625 62.199219 315.832031 61.871094 315 61.871094 C 314.167969 61.871094 313.375 62.199219 312.785156 62.785156 C 312.199219 63.375 311.871094 64.167969 311.871094 65 C 311.871094 65.832031 312.199219 66.625 312.785156 67.214844 C 313.375 67.800781 314.167969 68.128906 315 68.128906 C 315.832031 68.128906 316.625 67.800781 317.214844 67.214844 C 317.800781 66.625 318.128906 65.832031 318.128906 65 Z "/>
|
||||||
<path style=" stroke:none;fill-rule:evenodd;fill:rgb(88.070679%,61.103821%,14.204407%);fill-opacity:1;" d="M 352.070312 31 C 352.070312 30.183594 351.75 29.402344 351.171875 28.828125 C 350.597656 28.25 349.816406 27.929688 349 27.929688 C 348.183594 27.929688 347.402344 28.25 346.828125 28.828125 C 346.25 29.402344 345.929688 30.183594 345.929688 31 C 345.929688 31.816406 346.25 32.597656 346.828125 33.171875 C 347.402344 33.75 348.183594 34.070312 349 34.070312 C 349.816406 34.070312 350.597656 33.75 351.171875 33.171875 C 351.75 32.597656 352.070312 31.816406 352.070312 31 Z "/>
|
<path style=" stroke:none;fill-rule:evenodd;fill:rgb(88.070679%,61.103821%,14.204407%);fill-opacity:1;" d="M 352.128906 38 C 352.128906 37.167969 351.800781 36.375 351.214844 35.785156 C 350.625 35.199219 349.832031 34.871094 349 34.871094 C 348.167969 34.871094 347.375 35.199219 346.785156 35.785156 C 346.199219 36.375 345.871094 37.167969 345.871094 38 C 345.871094 38.832031 346.199219 39.625 346.785156 40.214844 C 347.375 40.800781 348.167969 41.128906 349 41.128906 C 349.832031 41.128906 350.625 40.800781 351.214844 40.214844 C 351.800781 39.625 352.128906 38.832031 352.128906 38 Z "/>
|
||||||
<path style="fill:none;stroke-width:0.5;stroke-linecap:square;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 355 216.296875 L 39 216.296875 "/>
|
<path style="fill:none;stroke-width:0.5;stroke-linecap:square;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 355 220.007812 L 33 220.007812 "/>
|
||||||
<path style="fill:none;stroke-width:0.5;stroke-linecap:square;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 39 216.296875 L 39 21 "/>
|
<path style="fill:none;stroke-width:0.5;stroke-linecap:square;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 33 220.007812 L 33 21 "/>
|
||||||
<path style="fill:none;stroke-width:0.5;stroke-linecap:square;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 39 21 L 355 21 "/>
|
<path style="fill:none;stroke-width:0.5;stroke-linecap:square;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 33 21 L 355 21 "/>
|
||||||
<path style="fill:none;stroke-width:0.5;stroke-linecap:square;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 355 21 L 355 216.296875 "/>
|
<path style="fill:none;stroke-width:0.5;stroke-linecap:square;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 355 21 L 355 220.007812 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 95.160156 216.296875 L 95.160156 213.140625 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 90.226562 220.007812 L 90.226562 216.785156 "/>
|
||||||
<g style="fill:rgb(39.99939%,39.99939%,39.99939%);fill-opacity:1;">
|
<g style="fill:rgb(39.99939%,39.99939%,39.99939%);fill-opacity:1;">
|
||||||
<use xlink:href="#glyph0-1" x="89.659467" y="228.29874"/>
|
<use xlink:href="#glyph0-1" x="84.725786" y="232.006944"/>
|
||||||
<use xlink:href="#glyph0-2" x="95.220991" y="228.29874"/>
|
<use xlink:href="#glyph0-2" x="90.28731" y="232.006944"/>
|
||||||
</g>
|
</g>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 204.84375 216.296875 L 204.84375 213.140625 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 201.996094 220.007812 L 201.996094 216.785156 "/>
|
||||||
<g style="fill:rgb(39.99939%,39.99939%,39.99939%);fill-opacity:1;">
|
<g style="fill:rgb(39.99939%,39.99939%,39.99939%);fill-opacity:1;">
|
||||||
<use xlink:href="#glyph0-1" x="196.345465" y="228.29874"/>
|
<use xlink:href="#glyph0-1" x="193.49443" y="232.006944"/>
|
||||||
<use xlink:href="#glyph0-2" x="201.906989" y="228.29874"/>
|
<use xlink:href="#glyph0-2" x="199.055953" y="232.006944"/>
|
||||||
<use xlink:href="#glyph0-2" x="207.468512" y="228.29874"/>
|
<use xlink:href="#glyph0-2" x="204.617477" y="232.006944"/>
|
||||||
</g>
|
</g>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 314.53125 216.296875 L 314.53125 213.140625 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 313.761719 220.007812 L 313.761719 216.785156 "/>
|
||||||
<g style="fill:rgb(39.99939%,39.99939%,39.99939%);fill-opacity:1;">
|
<g style="fill:rgb(39.99939%,39.99939%,39.99939%);fill-opacity:1;">
|
||||||
<use xlink:href="#glyph0-1" x="303.531463" y="228.29874"/>
|
<use xlink:href="#glyph0-1" x="302.763074" y="232.006944"/>
|
||||||
<use xlink:href="#glyph0-2" x="309.092987" y="228.29874"/>
|
<use xlink:href="#glyph0-2" x="308.324597" y="232.006944"/>
|
||||||
<use xlink:href="#glyph0-2" x="314.65451" y="228.29874"/>
|
<use xlink:href="#glyph0-2" x="313.88612" y="232.006944"/>
|
||||||
<use xlink:href="#glyph0-2" x="320.216034" y="228.29874"/>
|
<use xlink:href="#glyph0-2" x="319.447644" y="232.006944"/>
|
||||||
</g>
|
</g>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 51.511719 216.296875 L 51.511719 214.71875 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 45.75 220.007812 L 45.75 218.398438 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 62.140625 216.296875 L 62.140625 214.71875 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 56.578125 220.007812 L 56.578125 218.398438 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 70.824219 216.296875 L 70.824219 214.71875 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 65.429688 220.007812 L 65.429688 218.398438 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 78.167969 216.296875 L 78.167969 214.71875 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 72.914062 220.007812 L 72.914062 218.398438 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 84.53125 216.296875 L 84.53125 214.71875 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 79.394531 220.007812 L 79.394531 218.398438 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 90.140625 216.296875 L 90.140625 214.71875 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 85.113281 220.007812 L 85.113281 218.398438 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 128.179688 216.296875 L 128.179688 214.71875 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 123.871094 220.007812 L 123.871094 218.398438 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 147.492188 216.296875 L 147.492188 214.71875 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 143.554688 220.007812 L 143.554688 218.398438 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 161.195312 216.296875 L 161.195312 214.71875 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 157.515625 220.007812 L 157.515625 218.398438 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 171.828125 216.296875 L 171.828125 214.71875 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 168.347656 220.007812 L 168.347656 218.398438 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 180.511719 216.296875 L 180.511719 214.71875 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 177.199219 220.007812 L 177.199219 218.398438 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 187.855469 216.296875 L 187.855469 214.71875 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 184.679688 220.007812 L 184.679688 218.398438 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 194.214844 216.296875 L 194.214844 214.71875 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 191.164062 220.007812 L 191.164062 218.398438 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 199.828125 216.296875 L 199.828125 214.71875 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 196.878906 220.007812 L 196.878906 218.398438 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 237.863281 216.296875 L 237.863281 214.71875 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 235.640625 220.007812 L 235.640625 218.398438 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 257.179688 216.296875 L 257.179688 214.71875 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 255.320312 220.007812 L 255.320312 218.398438 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 270.882812 216.296875 L 270.882812 214.71875 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 269.285156 220.007812 L 269.285156 218.398438 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 281.511719 216.296875 L 281.511719 214.71875 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 280.117188 220.007812 L 280.117188 218.398438 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 290.199219 216.296875 L 290.199219 214.71875 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 288.96875 220.007812 L 288.96875 218.398438 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 297.539062 216.296875 L 297.539062 214.71875 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 296.449219 220.007812 L 296.449219 218.398438 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 303.902344 216.296875 L 303.902344 214.71875 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 302.929688 220.007812 L 302.929688 218.398438 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 309.511719 216.296875 L 309.511719 214.71875 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 308.648438 220.007812 L 308.648438 218.398438 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 347.550781 216.296875 L 347.550781 214.71875 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 347.410156 220.007812 L 347.410156 218.398438 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 39 198.339844 L 42.160156 198.339844 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 33 180.734375 L 36.21875 180.734375 "/>
|
||||||
<g style="fill:rgb(39.99939%,39.99939%,39.99939%);fill-opacity:1;">
|
<g style="fill:rgb(39.99939%,39.99939%,39.99939%);fill-opacity:1;">
|
||||||
<use xlink:href="#glyph0-1" x="30" y="200.838111"/>
|
<use xlink:href="#glyph0-3" x="24" y="183.235493"/>
|
||||||
</g>
|
</g>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 39 140.886719 L 42.160156 140.886719 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 33 146.960938 L 36.21875 146.960938 "/>
|
||||||
<g style="fill:rgb(39.99939%,39.99939%,39.99939%);fill-opacity:1;">
|
<g style="fill:rgb(39.99939%,39.99939%,39.99939%);fill-opacity:1;">
|
||||||
<use xlink:href="#glyph0-3" x="30" y="143.385105"/>
|
<use xlink:href="#glyph0-4" x="24" y="149.45964"/>
|
||||||
</g>
|
</g>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 39 116.140625 L 42.160156 116.140625 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 33 121.410156 L 36.21875 121.410156 "/>
|
||||||
<g style="fill:rgb(39.99939%,39.99939%,39.99939%);fill-opacity:1;">
|
<g style="fill:rgb(39.99939%,39.99939%,39.99939%);fill-opacity:1;">
|
||||||
<use xlink:href="#glyph0-1" x="25" y="118.641442"/>
|
<use xlink:href="#glyph0-1" x="19" y="123.909193"/>
|
||||||
<use xlink:href="#glyph0-2" x="30.561523" y="118.641442"/>
|
<use xlink:href="#glyph0-2" x="24.561523" y="123.909193"/>
|
||||||
</g>
|
</g>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 39 58.6875 L 42.160156 58.6875 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 33 95.859375 L 36.21875 95.859375 "/>
|
||||||
<g style="fill:rgb(39.99939%,39.99939%,39.99939%);fill-opacity:1;">
|
<g style="fill:rgb(39.99939%,39.99939%,39.99939%);fill-opacity:1;">
|
||||||
<use xlink:href="#glyph0-3" x="25" y="61.188436"/>
|
<use xlink:href="#glyph0-3" x="19" y="98.358747"/>
|
||||||
<use xlink:href="#glyph0-2" x="30.561523" y="61.188436"/>
|
<use xlink:href="#glyph0-2" x="24.561523" y="98.358747"/>
|
||||||
</g>
|
</g>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 39 33.945312 L 42.160156 33.945312 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 33 62.082031 L 36.21875 62.082031 "/>
|
||||||
<g style="fill:rgb(39.99939%,39.99939%,39.99939%);fill-opacity:1;">
|
<g style="fill:rgb(39.99939%,39.99939%,39.99939%);fill-opacity:1;">
|
||||||
<use xlink:href="#glyph0-1" x="19" y="36.444773"/>
|
<use xlink:href="#glyph0-4" x="19" y="64.582894"/>
|
||||||
<use xlink:href="#glyph0-2" x="24.561523" y="36.444773"/>
|
<use xlink:href="#glyph0-2" x="24.561523" y="64.582894"/>
|
||||||
<use xlink:href="#glyph0-2" x="30.123047" y="36.444773"/>
|
|
||||||
</g>
|
</g>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 39 211.070312 L 40.578125 211.070312 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 33 206.285156 L 34.609375 206.285156 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 39 206.304688 L 40.578125 206.304688 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 33 165.789062 L 34.609375 165.789062 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 39 202.097656 L 40.578125 202.097656 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 33 155.183594 L 34.609375 155.183594 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 39 173.59375 L 40.578125 173.59375 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 33 140.238281 L 34.609375 140.238281 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 39 159.121094 L 40.578125 159.121094 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 33 134.558594 L 34.609375 134.558594 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 39 148.851562 L 40.578125 148.851562 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 33 129.632812 L 34.609375 129.632812 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 39 134.375 L 40.578125 134.375 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 33 125.292969 L 34.609375 125.292969 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 39 128.875 L 40.578125 128.875 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 33 80.914062 L 34.609375 80.914062 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 39 124.105469 L 40.578125 124.105469 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 33 70.308594 L 34.609375 70.308594 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 39 119.902344 L 40.578125 119.902344 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 33 36.53125 L 34.609375 36.53125 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 39 91.398438 L 40.578125 91.398438 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 90.226562 21 L 90.226562 24.21875 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 39 76.921875 L 40.578125 76.921875 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 201.996094 21 L 201.996094 24.21875 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 39 66.652344 L 40.578125 66.652344 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 313.761719 21 L 313.761719 24.21875 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 39 52.179688 L 40.578125 52.179688 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 45.75 21 L 45.75 22.609375 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 39 46.675781 L 40.578125 46.675781 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 56.578125 21 L 56.578125 22.609375 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 39 41.910156 L 40.578125 41.910156 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 65.429688 21 L 65.429688 22.609375 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 39 37.707031 L 40.578125 37.707031 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 72.914062 21 L 72.914062 22.609375 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 95.160156 21 L 95.160156 24.160156 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 79.394531 21 L 79.394531 22.609375 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 204.84375 21 L 204.84375 24.160156 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 85.113281 21 L 85.113281 22.609375 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 314.53125 21 L 314.53125 24.160156 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 123.871094 21 L 123.871094 22.609375 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 51.511719 21 L 51.511719 22.578125 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 143.554688 21 L 143.554688 22.609375 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 62.140625 21 L 62.140625 22.578125 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 157.515625 21 L 157.515625 22.609375 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 70.824219 21 L 70.824219 22.578125 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 168.347656 21 L 168.347656 22.609375 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 78.167969 21 L 78.167969 22.578125 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 177.199219 21 L 177.199219 22.609375 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 84.53125 21 L 84.53125 22.578125 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 184.679688 21 L 184.679688 22.609375 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 90.140625 21 L 90.140625 22.578125 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 191.164062 21 L 191.164062 22.609375 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 128.179688 21 L 128.179688 22.578125 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 196.878906 21 L 196.878906 22.609375 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 147.492188 21 L 147.492188 22.578125 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 235.640625 21 L 235.640625 22.609375 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 161.195312 21 L 161.195312 22.578125 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 255.320312 21 L 255.320312 22.609375 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 171.828125 21 L 171.828125 22.578125 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 269.285156 21 L 269.285156 22.609375 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 180.511719 21 L 180.511719 22.578125 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 280.117188 21 L 280.117188 22.609375 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 187.855469 21 L 187.855469 22.578125 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 288.96875 21 L 288.96875 22.609375 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 194.214844 21 L 194.214844 22.578125 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 296.449219 21 L 296.449219 22.609375 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 199.828125 21 L 199.828125 22.578125 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 302.929688 21 L 302.929688 22.609375 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 237.863281 21 L 237.863281 22.578125 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 308.648438 21 L 308.648438 22.609375 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 257.179688 21 L 257.179688 22.578125 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 347.410156 21 L 347.410156 22.609375 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 270.882812 21 L 270.882812 22.578125 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 355 180.734375 L 351.78125 180.734375 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 281.511719 21 L 281.511719 22.578125 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 355 146.960938 L 351.78125 146.960938 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 290.199219 21 L 290.199219 22.578125 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 355 121.410156 L 351.78125 121.410156 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 297.539062 21 L 297.539062 22.578125 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 355 95.859375 L 351.78125 95.859375 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 303.902344 21 L 303.902344 22.578125 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 355 62.082031 L 351.78125 62.082031 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 309.511719 21 L 309.511719 22.578125 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 355 206.285156 L 353.390625 206.285156 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 347.550781 21 L 347.550781 22.578125 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 355 165.789062 L 353.390625 165.789062 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 355 198.339844 L 351.839844 198.339844 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 355 155.183594 L 353.390625 155.183594 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 355 140.886719 L 351.839844 140.886719 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 355 140.238281 L 353.390625 140.238281 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 355 116.140625 L 351.839844 116.140625 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 355 134.558594 L 353.390625 134.558594 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 355 58.6875 L 351.839844 58.6875 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 355 129.632812 L 353.390625 129.632812 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 355 33.945312 L 351.839844 33.945312 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 355 125.292969 L 353.390625 125.292969 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 355 211.070312 L 353.421875 211.070312 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 355 80.914062 L 353.390625 80.914062 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 355 206.304688 L 353.421875 206.304688 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 355 70.308594 L 353.390625 70.308594 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 355 202.097656 L 353.421875 202.097656 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 355 36.53125 L 353.390625 36.53125 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 355 173.59375 L 353.421875 173.59375 "/>
|
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 355 159.121094 L 353.421875 159.121094 "/>
|
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 355 148.851562 L 353.421875 148.851562 "/>
|
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 355 134.375 L 353.421875 134.375 "/>
|
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 355 128.875 L 353.421875 128.875 "/>
|
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 355 124.105469 L 353.421875 124.105469 "/>
|
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 355 119.902344 L 353.421875 119.902344 "/>
|
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 355 91.398438 L 353.421875 91.398438 "/>
|
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 355 76.921875 L 353.421875 76.921875 "/>
|
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 355 66.652344 L 353.421875 66.652344 "/>
|
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 355 52.179688 L 353.421875 52.179688 "/>
|
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 355 46.675781 L 353.421875 46.675781 "/>
|
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 355 41.910156 L 353.421875 41.910156 "/>
|
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 355 37.707031 L 353.421875 37.707031 "/>
|
|
||||||
<g style="fill:rgb(39.99939%,39.99939%,39.99939%);fill-opacity:1;">
|
<g style="fill:rgb(39.99939%,39.99939%,39.99939%);fill-opacity:1;">
|
||||||
<use xlink:href="#glyph0-4" x="175.5" y="247.29874"/>
|
<use xlink:href="#glyph0-5" x="172.5" y="251.006944"/>
|
||||||
<use xlink:href="#glyph0-5" x="181.608398" y="247.29874"/>
|
<use xlink:href="#glyph0-6" x="178.608398" y="251.006944"/>
|
||||||
<use xlink:href="#glyph0-6" x="187.169922" y="247.29874"/>
|
<use xlink:href="#glyph0-7" x="184.169922" y="251.006944"/>
|
||||||
<use xlink:href="#glyph0-7" x="192.731445" y="247.29874"/>
|
<use xlink:href="#glyph0-8" x="189.731445" y="251.006944"/>
|
||||||
<use xlink:href="#glyph0-8" x="197.731445" y="247.29874"/>
|
<use xlink:href="#glyph0-9" x="194.731445" y="251.006944"/>
|
||||||
<use xlink:href="#glyph0-9" x="200.509766" y="247.29874"/>
|
<use xlink:href="#glyph0-10" x="197.509766" y="251.006944"/>
|
||||||
<use xlink:href="#glyph0-10" x="202.731445" y="247.29874"/>
|
<use xlink:href="#glyph0-11" x="199.731445" y="251.006944"/>
|
||||||
<use xlink:href="#glyph0-6" x="208.292969" y="247.29874"/>
|
<use xlink:href="#glyph0-7" x="205.292969" y="251.006944"/>
|
||||||
<use xlink:href="#glyph0-11" x="213.854492" y="247.29874"/>
|
<use xlink:href="#glyph0-12" x="210.854492" y="251.006944"/>
|
||||||
</g>
|
</g>
|
||||||
<g style="fill:rgb(39.99939%,39.99939%,39.99939%);fill-opacity:1;">
|
<g style="fill:rgb(39.99939%,39.99939%,39.99939%);fill-opacity:1;">
|
||||||
<use xlink:href="#glyph1-1" x="9" y="138.14937"/>
|
<use xlink:href="#glyph1-1" x="9" y="140.003472"/>
|
||||||
<use xlink:href="#glyph1-2" x="9" y="131.479448"/>
|
<use xlink:href="#glyph1-2" x="9" y="133.33355"/>
|
||||||
<use xlink:href="#glyph1-3" x="9" y="125.917925"/>
|
<use xlink:href="#glyph1-3" x="9" y="127.772027"/>
|
||||||
<use xlink:href="#glyph1-4" x="9" y="120.917925"/>
|
<use xlink:href="#glyph1-4" x="9" y="122.772027"/>
|
||||||
<use xlink:href="#glyph1-5" x="9" y="115.356401"/>
|
<use xlink:href="#glyph1-5" x="9" y="117.210503"/>
|
||||||
<use xlink:href="#glyph1-6" x="9" y="109.794878"/>
|
<use xlink:href="#glyph1-6" x="9" y="111.64898"/>
|
||||||
<use xlink:href="#glyph1-7" x="9" y="104.233355"/>
|
<use xlink:href="#glyph1-7" x="9" y="106.087457"/>
|
||||||
</g>
|
</g>
|
||||||
<g style="fill:rgb(39.99939%,39.99939%,39.99939%);fill-opacity:1;">
|
<g style="fill:rgb(39.99939%,39.99939%,39.99939%);fill-opacity:1;">
|
||||||
<use xlink:href="#glyph2-1" x="125" y="12"/>
|
<use xlink:href="#glyph2-1" x="122" y="12"/>
|
||||||
<use xlink:href="#glyph2-2" x="133.666016" y="12"/>
|
<use xlink:href="#glyph2-2" x="130.666016" y="12"/>
|
||||||
<use xlink:href="#glyph2-3" x="140.339844" y="12"/>
|
<use xlink:href="#glyph2-3" x="137.339844" y="12"/>
|
||||||
<use xlink:href="#glyph2-4" x="150.335938" y="12"/>
|
<use xlink:href="#glyph2-4" x="147.335938" y="12"/>
|
||||||
<use xlink:href="#glyph2-5" x="157.009766" y="12"/>
|
<use xlink:href="#glyph2-5" x="154.009766" y="12"/>
|
||||||
<use xlink:href="#glyph2-6" x="159.675781" y="12"/>
|
<use xlink:href="#glyph2-6" x="156.675781" y="12"/>
|
||||||
<use xlink:href="#glyph2-7" x="162.341797" y="12"/>
|
<use xlink:href="#glyph2-7" x="159.341797" y="12"/>
|
||||||
<use xlink:href="#glyph2-8" x="169.015625" y="12"/>
|
<use xlink:href="#glyph2-8" x="166.015625" y="12"/>
|
||||||
<use xlink:href="#glyph2-5" x="172.349609" y="12"/>
|
<use xlink:href="#glyph2-5" x="169.349609" y="12"/>
|
||||||
<use xlink:href="#glyph2-2" x="175.015625" y="12"/>
|
<use xlink:href="#glyph2-2" x="172.015625" y="12"/>
|
||||||
<use xlink:href="#glyph2-9" x="181.689453" y="12"/>
|
<use xlink:href="#glyph2-9" x="178.689453" y="12"/>
|
||||||
</g>
|
</g>
|
||||||
<g style="fill:rgb(39.99939%,39.99939%,39.99939%);fill-opacity:1;">
|
<g style="fill:rgb(39.99939%,39.99939%,39.99939%);fill-opacity:1;">
|
||||||
<use xlink:href="#glyph2-8" x="191" y="12"/>
|
<use xlink:href="#glyph2-8" x="188" y="12"/>
|
||||||
<use xlink:href="#glyph2-5" x="194.333984" y="12"/>
|
<use xlink:href="#glyph2-5" x="191.333984" y="12"/>
|
||||||
<use xlink:href="#glyph2-3" x="197" y="12"/>
|
<use xlink:href="#glyph2-3" x="194" y="12"/>
|
||||||
<use xlink:href="#glyph2-10" x="206.996094" y="12"/>
|
<use xlink:href="#glyph2-10" x="203.996094" y="12"/>
|
||||||
</g>
|
</g>
|
||||||
<g style="fill:rgb(39.99939%,39.99939%,39.99939%);fill-opacity:1;">
|
<g style="fill:rgb(39.99939%,39.99939%,39.99939%);fill-opacity:1;">
|
||||||
<use xlink:href="#glyph2-2" x="217" y="12"/>
|
<use xlink:href="#glyph2-2" x="214" y="12"/>
|
||||||
<use xlink:href="#glyph2-11" x="223.673828" y="12"/>
|
<use xlink:href="#glyph2-11" x="220.673828" y="12"/>
|
||||||
</g>
|
</g>
|
||||||
<g style="fill:rgb(39.99939%,39.99939%,39.99939%);fill-opacity:1;">
|
<g style="fill:rgb(39.99939%,39.99939%,39.99939%);fill-opacity:1;">
|
||||||
<use xlink:href="#glyph2-3" x="230" y="12"/>
|
<use xlink:href="#glyph2-3" x="227" y="12"/>
|
||||||
<use xlink:href="#glyph2-2" x="239.996094" y="12"/>
|
<use xlink:href="#glyph2-2" x="236.996094" y="12"/>
|
||||||
<use xlink:href="#glyph2-12" x="246.669922" y="12"/>
|
<use xlink:href="#glyph2-12" x="243.669922" y="12"/>
|
||||||
<use xlink:href="#glyph2-13" x="253.34375" y="12"/>
|
<use xlink:href="#glyph2-13" x="250.34375" y="12"/>
|
||||||
<use xlink:href="#glyph2-6" x="260.017578" y="12"/>
|
<use xlink:href="#glyph2-6" x="257.017578" y="12"/>
|
||||||
<use xlink:href="#glyph2-10" x="262.683594" y="12"/>
|
<use xlink:href="#glyph2-10" x="259.683594" y="12"/>
|
||||||
</g>
|
</g>
|
||||||
<path style=" stroke:none;fill-rule:evenodd;fill:rgb(36.84082%,50.67749%,70.979309%);fill-opacity:1;" d="M 382.148438 114 C 382.148438 113.164062 381.816406 112.363281 381.226562 111.773438 C 380.636719 111.183594 379.835938 110.851562 379 110.851562 C 378.164062 110.851562 377.363281 111.183594 376.773438 111.773438 C 376.183594 112.363281 375.851562 113.164062 375.851562 114 C 375.851562 114.835938 376.183594 115.636719 376.773438 116.226562 C 377.363281 116.816406 378.164062 117.148438 379 117.148438 C 379.835938 117.148438 380.636719 116.816406 381.226562 116.226562 C 381.816406 115.636719 382.148438 114.835938 382.148438 114 Z "/>
|
<path style=" stroke:none;fill-rule:evenodd;fill:rgb(36.84082%,50.67749%,70.979309%);fill-opacity:1;" d="M 382.148438 116 C 382.148438 115.164062 381.816406 114.363281 381.226562 113.773438 C 380.636719 113.183594 379.835938 112.851562 379 112.851562 C 378.164062 112.851562 377.363281 113.183594 376.773438 113.773438 C 376.183594 114.363281 375.851562 115.164062 375.851562 116 C 375.851562 116.835938 376.183594 117.636719 376.773438 118.226562 C 377.363281 118.816406 378.164062 119.148438 379 119.148438 C 379.835938 119.148438 380.636719 118.816406 381.226562 118.226562 C 381.816406 117.636719 382.148438 116.835938 382.148438 116 Z "/>
|
||||||
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
|
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
|
||||||
<use xlink:href="#glyph3-1" x="391" y="118.28418"/>
|
<use xlink:href="#glyph3-1" x="391" y="120.28418"/>
|
||||||
<use xlink:href="#glyph3-2" x="399.670898" y="118.28418"/>
|
<use xlink:href="#glyph3-2" x="399.670898" y="120.28418"/>
|
||||||
<use xlink:href="#glyph3-2" x="406.901367" y="118.28418"/>
|
<use xlink:href="#glyph3-2" x="406.901367" y="120.28418"/>
|
||||||
<use xlink:href="#glyph3-3" x="414.131836" y="118.28418"/>
|
<use xlink:href="#glyph3-3" x="414.131836" y="120.28418"/>
|
||||||
<use xlink:href="#glyph3-4" x="420.631836" y="118.28418"/>
|
<use xlink:href="#glyph3-4" x="420.631836" y="120.28418"/>
|
||||||
</g>
|
</g>
|
||||||
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
|
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
|
||||||
<use xlink:href="#glyph3-5" x="424" y="118.28418"/>
|
<use xlink:href="#glyph3-5" x="424" y="120.28418"/>
|
||||||
</g>
|
</g>
|
||||||
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
|
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
|
||||||
<use xlink:href="#glyph3-6" x="428" y="118.28418"/>
|
<use xlink:href="#glyph3-6" x="428" y="120.28418"/>
|
||||||
<use xlink:href="#glyph3-7" x="436.670898" y="118.28418"/>
|
<use xlink:href="#glyph3-7" x="436.670898" y="120.28418"/>
|
||||||
<use xlink:href="#glyph3-4" x="443.170898" y="118.28418"/>
|
<use xlink:href="#glyph3-4" x="443.170898" y="120.28418"/>
|
||||||
<use xlink:href="#glyph3-8" x="446.783203" y="118.28418"/>
|
<use xlink:href="#glyph3-8" x="446.783203" y="120.28418"/>
|
||||||
<use xlink:href="#glyph3-2" x="454.013672" y="118.28418"/>
|
<use xlink:href="#glyph3-2" x="454.013672" y="120.28418"/>
|
||||||
<use xlink:href="#glyph3-9" x="461.244141" y="118.28418"/>
|
<use xlink:href="#glyph3-9" x="461.244141" y="120.28418"/>
|
||||||
</g>
|
</g>
|
||||||
<path style=" stroke:none;fill-rule:evenodd;fill:rgb(88.070679%,61.103821%,14.204407%);fill-opacity:1;" d="M 382.148438 137 C 382.148438 136.164062 381.816406 135.363281 381.226562 134.773438 C 380.636719 134.183594 379.835938 133.851562 379 133.851562 C 378.164062 133.851562 377.363281 134.183594 376.773438 134.773438 C 376.183594 135.363281 375.851562 136.164062 375.851562 137 C 375.851562 137.835938 376.183594 138.636719 376.773438 139.226562 C 377.363281 139.816406 378.164062 140.148438 379 140.148438 C 379.835938 140.148438 380.636719 139.816406 381.226562 139.226562 C 381.816406 138.636719 382.148438 137.835938 382.148438 137 Z "/>
|
<path style=" stroke:none;fill-rule:evenodd;fill:rgb(88.070679%,61.103821%,14.204407%);fill-opacity:1;" d="M 382.148438 139 C 382.148438 138.164062 381.816406 137.363281 381.226562 136.773438 C 380.636719 136.183594 379.835938 135.851562 379 135.851562 C 378.164062 135.851562 377.363281 136.183594 376.773438 136.773438 C 376.183594 137.363281 375.851562 138.164062 375.851562 139 C 375.851562 139.835938 376.183594 140.636719 376.773438 141.226562 C 377.363281 141.816406 378.164062 142.148438 379 142.148438 C 379.835938 142.148438 380.636719 141.816406 381.226562 141.226562 C 381.816406 140.636719 382.148438 139.835938 382.148438 139 Z "/>
|
||||||
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
|
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
|
||||||
<use xlink:href="#glyph3-10" x="391" y="141.28418"/>
|
<use xlink:href="#glyph3-10" x="391" y="143.28418"/>
|
||||||
<use xlink:href="#glyph3-7" x="398.230469" y="141.28418"/>
|
<use xlink:href="#glyph3-7" x="398.230469" y="143.28418"/>
|
||||||
<use xlink:href="#glyph3-11" x="404.730469" y="141.28418"/>
|
<use xlink:href="#glyph3-11" x="404.730469" y="143.28418"/>
|
||||||
<use xlink:href="#glyph3-12" x="411.960938" y="141.28418"/>
|
<use xlink:href="#glyph3-12" x="411.960938" y="143.28418"/>
|
||||||
<use xlink:href="#glyph3-9" x="414.849609" y="141.28418"/>
|
<use xlink:href="#glyph3-9" x="414.849609" y="143.28418"/>
|
||||||
<use xlink:href="#glyph3-13" x="422.080078" y="141.28418"/>
|
<use xlink:href="#glyph3-13" x="422.080078" y="143.28418"/>
|
||||||
<use xlink:href="#glyph3-14" x="429.310547" y="141.28418"/>
|
<use xlink:href="#glyph3-14" x="429.310547" y="143.28418"/>
|
||||||
<use xlink:href="#glyph3-14" x="436.541016" y="141.28418"/>
|
<use xlink:href="#glyph3-14" x="436.541016" y="143.28418"/>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
|
|
Before Width: | Height: | Size: 87 KiB After Width: | Height: | Size: 86 KiB |
|
@ -163,7 +163,7 @@
|
||||||
<path d="M 39 107 L 355 107 L 355 109 L 39 109 Z "/>
|
<path d="M 39 107 L 355 107 L 355 109 L 39 109 Z "/>
|
||||||
</clipPath>
|
</clipPath>
|
||||||
<clipPath id="clip6">
|
<clipPath id="clip6">
|
||||||
<path d="M 39 43 L 355 43 L 355 45 L 39 45 Z "/>
|
<path d="M 39 44 L 355 44 L 355 46 L 39 46 Z "/>
|
||||||
</clipPath>
|
</clipPath>
|
||||||
</defs>
|
</defs>
|
||||||
<g id="surface18">
|
<g id="surface18">
|
||||||
|
@ -177,13 +177,13 @@
|
||||||
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:0.5;stroke-dasharray:1,2;stroke-miterlimit:3.25;" d="M 314.53125 214.296875 L 314.53125 19 "/>
|
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:0.5;stroke-dasharray:1,2;stroke-miterlimit:3.25;" d="M 314.53125 214.296875 L 314.53125 19 "/>
|
||||||
</g>
|
</g>
|
||||||
<g clip-path="url(#clip4)" clip-rule="nonzero">
|
<g clip-path="url(#clip4)" clip-rule="nonzero">
|
||||||
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:0.5;stroke-dasharray:1,2;stroke-miterlimit:3.25;" d="M 39 171.957031 L 355 171.957031 "/>
|
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:0.5;stroke-dasharray:1,2;stroke-miterlimit:3.25;" d="M 39 171.960938 L 355 171.960938 "/>
|
||||||
</g>
|
</g>
|
||||||
<g clip-path="url(#clip5)" clip-rule="nonzero">
|
<g clip-path="url(#clip5)" clip-rule="nonzero">
|
||||||
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:0.5;stroke-dasharray:1,2;stroke-miterlimit:3.25;" d="M 39 108.226562 L 355 108.226562 "/>
|
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:0.5;stroke-dasharray:1,2;stroke-miterlimit:3.25;" d="M 39 108.234375 L 355 108.234375 "/>
|
||||||
</g>
|
</g>
|
||||||
<g clip-path="url(#clip6)" clip-rule="nonzero">
|
<g clip-path="url(#clip6)" clip-rule="nonzero">
|
||||||
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:0.5;stroke-dasharray:1,2;stroke-miterlimit:3.25;" d="M 39 44.492188 L 355 44.492188 "/>
|
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:0.5;stroke-dasharray:1,2;stroke-miterlimit:3.25;" d="M 39 44.511719 L 355 44.511719 "/>
|
||||||
</g>
|
</g>
|
||||||
<path style=" stroke:none;fill-rule:evenodd;fill:rgb(36.84082%,50.67749%,70.979309%);fill-opacity:1;" d="M 55.070312 201 C 55.070312 200.183594 54.75 199.402344 54.171875 198.828125 C 53.597656 198.25 52.816406 197.929688 52 197.929688 C 51.183594 197.929688 50.402344 198.25 49.828125 198.828125 C 49.25 199.402344 48.929688 200.183594 48.929688 201 C 48.929688 201.816406 49.25 202.597656 49.828125 203.171875 C 50.402344 203.75 51.183594 204.070312 52 204.070312 C 52.816406 204.070312 53.597656 203.75 54.171875 203.171875 C 54.75 202.597656 55.070312 201.816406 55.070312 201 Z "/>
|
<path style=" stroke:none;fill-rule:evenodd;fill:rgb(36.84082%,50.67749%,70.979309%);fill-opacity:1;" d="M 55.070312 201 C 55.070312 200.183594 54.75 199.402344 54.171875 198.828125 C 53.597656 198.25 52.816406 197.929688 52 197.929688 C 51.183594 197.929688 50.402344 198.25 49.828125 198.828125 C 49.25 199.402344 48.929688 200.183594 48.929688 201 C 48.929688 201.816406 49.25 202.597656 49.828125 203.171875 C 50.402344 203.75 51.183594 204.070312 52 204.070312 C 52.816406 204.070312 53.597656 203.75 54.171875 203.171875 C 54.75 202.597656 55.070312 201.816406 55.070312 201 Z "/>
|
||||||
<path style=" stroke:none;fill-rule:evenodd;fill:rgb(36.84082%,50.67749%,70.979309%);fill-opacity:1;" d="M 88.070312 176 C 88.070312 175.183594 87.75 174.402344 87.171875 173.828125 C 86.597656 173.25 85.816406 172.929688 85 172.929688 C 84.183594 172.929688 83.402344 173.25 82.828125 173.828125 C 82.25 174.402344 81.929688 175.183594 81.929688 176 C 81.929688 176.816406 82.25 177.597656 82.828125 178.171875 C 83.402344 178.75 84.183594 179.070312 85 179.070312 C 85.816406 179.070312 86.597656 178.75 87.171875 178.171875 C 87.75 177.597656 88.070312 176.816406 88.070312 176 Z "/>
|
<path style=" stroke:none;fill-rule:evenodd;fill:rgb(36.84082%,50.67749%,70.979309%);fill-opacity:1;" d="M 88.070312 176 C 88.070312 175.183594 87.75 174.402344 87.171875 173.828125 C 86.597656 173.25 85.816406 172.929688 85 172.929688 C 84.183594 172.929688 83.402344 173.25 82.828125 173.828125 C 82.25 174.402344 81.929688 175.183594 81.929688 176 C 81.929688 176.816406 82.25 177.597656 82.828125 178.171875 C 83.402344 178.75 84.183594 179.070312 85 179.070312 C 85.816406 179.070312 86.597656 178.75 87.171875 178.171875 C 87.75 177.597656 88.070312 176.816406 88.070312 176 Z "/>
|
||||||
|
@ -195,16 +195,16 @@
|
||||||
<path style=" stroke:none;fill-rule:evenodd;fill:rgb(36.84082%,50.67749%,70.979309%);fill-opacity:1;" d="M 286.070312 67 C 286.070312 66.183594 285.75 65.402344 285.171875 64.828125 C 284.597656 64.25 283.816406 63.929688 283 63.929688 C 282.183594 63.929688 281.402344 64.25 280.828125 64.828125 C 280.25 65.402344 279.929688 66.183594 279.929688 67 C 279.929688 67.816406 280.25 68.597656 280.828125 69.171875 C 281.402344 69.75 282.183594 70.070312 283 70.070312 C 283.816406 70.070312 284.597656 69.75 285.171875 69.171875 C 285.75 68.597656 286.070312 67.816406 286.070312 67 Z "/>
|
<path style=" stroke:none;fill-rule:evenodd;fill:rgb(36.84082%,50.67749%,70.979309%);fill-opacity:1;" d="M 286.070312 67 C 286.070312 66.183594 285.75 65.402344 285.171875 64.828125 C 284.597656 64.25 283.816406 63.929688 283 63.929688 C 282.183594 63.929688 281.402344 64.25 280.828125 64.828125 C 280.25 65.402344 279.929688 66.183594 279.929688 67 C 279.929688 67.816406 280.25 68.597656 280.828125 69.171875 C 281.402344 69.75 282.183594 70.070312 283 70.070312 C 283.816406 70.070312 284.597656 69.75 285.171875 69.171875 C 285.75 68.597656 286.070312 67.816406 286.070312 67 Z "/>
|
||||||
<path style=" stroke:none;fill-rule:evenodd;fill:rgb(36.84082%,50.67749%,70.979309%);fill-opacity:1;" d="M 319.070312 48 C 319.070312 47.183594 318.75 46.402344 318.171875 45.828125 C 317.597656 45.25 316.816406 44.929688 316 44.929688 C 315.183594 44.929688 314.402344 45.25 313.828125 45.828125 C 313.25 46.402344 312.929688 47.183594 312.929688 48 C 312.929688 48.816406 313.25 49.597656 313.828125 50.171875 C 314.402344 50.75 315.183594 51.070312 316 51.070312 C 316.816406 51.070312 317.597656 50.75 318.171875 50.171875 C 318.75 49.597656 319.070312 48.816406 319.070312 48 Z "/>
|
<path style=" stroke:none;fill-rule:evenodd;fill:rgb(36.84082%,50.67749%,70.979309%);fill-opacity:1;" d="M 319.070312 48 C 319.070312 47.183594 318.75 46.402344 318.171875 45.828125 C 317.597656 45.25 316.816406 44.929688 316 44.929688 C 315.183594 44.929688 314.402344 45.25 313.828125 45.828125 C 313.25 46.402344 312.929688 47.183594 312.929688 48 C 312.929688 48.816406 313.25 49.597656 313.828125 50.171875 C 314.402344 50.75 315.183594 51.070312 316 51.070312 C 316.816406 51.070312 317.597656 50.75 318.171875 50.171875 C 318.75 49.597656 319.070312 48.816406 319.070312 48 Z "/>
|
||||||
<path style=" stroke:none;fill-rule:evenodd;fill:rgb(36.84082%,50.67749%,70.979309%);fill-opacity:1;" d="M 352.070312 29 C 352.070312 28.183594 351.75 27.402344 351.171875 26.828125 C 350.597656 26.25 349.816406 25.929688 349 25.929688 C 348.183594 25.929688 347.402344 26.25 346.828125 26.828125 C 346.25 27.402344 345.929688 28.183594 345.929688 29 C 345.929688 29.816406 346.25 30.597656 346.828125 31.171875 C 347.402344 31.75 348.183594 32.070312 349 32.070312 C 349.816406 32.070312 350.597656 31.75 351.171875 31.171875 C 351.75 30.597656 352.070312 29.816406 352.070312 29 Z "/>
|
<path style=" stroke:none;fill-rule:evenodd;fill:rgb(36.84082%,50.67749%,70.979309%);fill-opacity:1;" d="M 352.070312 29 C 352.070312 28.183594 351.75 27.402344 351.171875 26.828125 C 350.597656 26.25 349.816406 25.929688 349 25.929688 C 348.183594 25.929688 347.402344 26.25 346.828125 26.828125 C 346.25 27.402344 345.929688 28.183594 345.929688 29 C 345.929688 29.816406 346.25 30.597656 346.828125 31.171875 C 347.402344 31.75 348.183594 32.070312 349 32.070312 C 349.816406 32.070312 350.597656 31.75 351.171875 31.171875 C 351.75 30.597656 352.070312 29.816406 352.070312 29 Z "/>
|
||||||
<path style=" stroke:none;fill-rule:evenodd;fill:rgb(88.070679%,61.103821%,14.204407%);fill-opacity:1;" d="M 55.070312 194 C 55.070312 193.183594 54.75 192.402344 54.171875 191.828125 C 53.597656 191.25 52.816406 190.929688 52 190.929688 C 51.183594 190.929688 50.402344 191.25 49.828125 191.828125 C 49.25 192.402344 48.929688 193.183594 48.929688 194 C 48.929688 194.816406 49.25 195.597656 49.828125 196.171875 C 50.402344 196.75 51.183594 197.070312 52 197.070312 C 52.816406 197.070312 53.597656 196.75 54.171875 196.171875 C 54.75 195.597656 55.070312 194.816406 55.070312 194 Z "/>
|
<path style=" stroke:none;fill-rule:evenodd;fill:rgb(88.070679%,61.103821%,14.204407%);fill-opacity:1;" d="M 55.070312 191 C 55.070312 190.183594 54.75 189.402344 54.171875 188.828125 C 53.597656 188.25 52.816406 187.929688 52 187.929688 C 51.183594 187.929688 50.402344 188.25 49.828125 188.828125 C 49.25 189.402344 48.929688 190.183594 48.929688 191 C 48.929688 191.816406 49.25 192.597656 49.828125 193.171875 C 50.402344 193.75 51.183594 194.070312 52 194.070312 C 52.816406 194.070312 53.597656 193.75 54.171875 193.171875 C 54.75 192.597656 55.070312 191.816406 55.070312 191 Z "/>
|
||||||
<path style=" stroke:none;fill-rule:evenodd;fill:rgb(88.070679%,61.103821%,14.204407%);fill-opacity:1;" d="M 88.070312 180 C 88.070312 179.183594 87.75 178.402344 87.171875 177.828125 C 86.597656 177.25 85.816406 176.929688 85 176.929688 C 84.183594 176.929688 83.402344 177.25 82.828125 177.828125 C 82.25 178.402344 81.929688 179.183594 81.929688 180 C 81.929688 180.816406 82.25 181.597656 82.828125 182.171875 C 83.402344 182.75 84.183594 183.070312 85 183.070312 C 85.816406 183.070312 86.597656 182.75 87.171875 182.171875 C 87.75 181.597656 88.070312 180.816406 88.070312 180 Z "/>
|
<path style=" stroke:none;fill-rule:evenodd;fill:rgb(88.070679%,61.103821%,14.204407%);fill-opacity:1;" d="M 88.070312 181 C 88.070312 180.183594 87.75 179.402344 87.171875 178.828125 C 86.597656 178.25 85.816406 177.929688 85 177.929688 C 84.183594 177.929688 83.402344 178.25 82.828125 178.828125 C 82.25 179.402344 81.929688 180.183594 81.929688 181 C 81.929688 181.816406 82.25 182.597656 82.828125 183.171875 C 83.402344 183.75 84.183594 184.070312 85 184.070312 C 85.816406 184.070312 86.597656 183.75 87.171875 183.171875 C 87.75 182.597656 88.070312 181.816406 88.070312 181 Z "/>
|
||||||
<path style=" stroke:none;fill-rule:evenodd;fill:rgb(88.070679%,61.103821%,14.204407%);fill-opacity:1;" d="M 121.070312 168 C 121.070312 167.183594 120.75 166.402344 120.171875 165.828125 C 119.597656 165.25 118.816406 164.929688 118 164.929688 C 117.183594 164.929688 116.402344 165.25 115.828125 165.828125 C 115.25 166.402344 114.929688 167.183594 114.929688 168 C 114.929688 168.816406 115.25 169.597656 115.828125 170.171875 C 116.402344 170.75 117.183594 171.070312 118 171.070312 C 118.816406 171.070312 119.597656 170.75 120.171875 170.171875 C 120.75 169.597656 121.070312 168.816406 121.070312 168 Z "/>
|
<path style=" stroke:none;fill-rule:evenodd;fill:rgb(88.070679%,61.103821%,14.204407%);fill-opacity:1;" d="M 121.070312 170 C 121.070312 169.183594 120.75 168.402344 120.171875 167.828125 C 119.597656 167.25 118.816406 166.929688 118 166.929688 C 117.183594 166.929688 116.402344 167.25 115.828125 167.828125 C 115.25 168.402344 114.929688 169.183594 114.929688 170 C 114.929688 170.816406 115.25 171.597656 115.828125 172.171875 C 116.402344 172.75 117.183594 173.070312 118 173.070312 C 118.816406 173.070312 119.597656 172.75 120.171875 172.171875 C 120.75 171.597656 121.070312 170.816406 121.070312 170 Z "/>
|
||||||
<path style=" stroke:none;fill-rule:evenodd;fill:rgb(88.070679%,61.103821%,14.204407%);fill-opacity:1;" d="M 154.070312 153 C 154.070312 152.183594 153.75 151.402344 153.171875 150.828125 C 152.597656 150.25 151.816406 149.929688 151 149.929688 C 150.183594 149.929688 149.402344 150.25 148.828125 150.828125 C 148.25 151.402344 147.929688 152.183594 147.929688 153 C 147.929688 153.816406 148.25 154.597656 148.828125 155.171875 C 149.402344 155.75 150.183594 156.070312 151 156.070312 C 151.816406 156.070312 152.597656 155.75 153.171875 155.171875 C 153.75 154.597656 154.070312 153.816406 154.070312 153 Z "/>
|
<path style=" stroke:none;fill-rule:evenodd;fill:rgb(88.070679%,61.103821%,14.204407%);fill-opacity:1;" d="M 154.070312 157 C 154.070312 156.183594 153.75 155.402344 153.171875 154.828125 C 152.597656 154.25 151.816406 153.929688 151 153.929688 C 150.183594 153.929688 149.402344 154.25 148.828125 154.828125 C 148.25 155.402344 147.929688 156.183594 147.929688 157 C 147.929688 157.816406 148.25 158.597656 148.828125 159.171875 C 149.402344 159.75 150.183594 160.070312 151 160.070312 C 151.816406 160.070312 152.597656 159.75 153.171875 159.171875 C 153.75 158.597656 154.070312 157.816406 154.070312 157 Z "/>
|
||||||
<path style=" stroke:none;fill-rule:evenodd;fill:rgb(88.070679%,61.103821%,14.204407%);fill-opacity:1;" d="M 187.070312 137 C 187.070312 136.183594 186.75 135.402344 186.171875 134.828125 C 185.597656 134.25 184.816406 133.929688 184 133.929688 C 183.183594 133.929688 182.402344 134.25 181.828125 134.828125 C 181.25 135.402344 180.929688 136.183594 180.929688 137 C 180.929688 137.816406 181.25 138.597656 181.828125 139.171875 C 182.402344 139.75 183.183594 140.070312 184 140.070312 C 184.816406 140.070312 185.597656 139.75 186.171875 139.171875 C 186.75 138.597656 187.070312 137.816406 187.070312 137 Z "/>
|
<path style=" stroke:none;fill-rule:evenodd;fill:rgb(88.070679%,61.103821%,14.204407%);fill-opacity:1;" d="M 187.070312 142 C 187.070312 141.183594 186.75 140.402344 186.171875 139.828125 C 185.597656 139.25 184.816406 138.929688 184 138.929688 C 183.183594 138.929688 182.402344 139.25 181.828125 139.828125 C 181.25 140.402344 180.929688 141.183594 180.929688 142 C 180.929688 142.816406 181.25 143.597656 181.828125 144.171875 C 182.402344 144.75 183.183594 145.070312 184 145.070312 C 184.816406 145.070312 185.597656 144.75 186.171875 144.171875 C 186.75 143.597656 187.070312 142.816406 187.070312 142 Z "/>
|
||||||
<path style=" stroke:none;fill-rule:evenodd;fill:rgb(88.070679%,61.103821%,14.204407%);fill-opacity:1;" d="M 220.070312 120 C 220.070312 119.183594 219.75 118.402344 219.171875 117.828125 C 218.597656 117.25 217.816406 116.929688 217 116.929688 C 216.183594 116.929688 215.402344 117.25 214.828125 117.828125 C 214.25 118.402344 213.929688 119.183594 213.929688 120 C 213.929688 120.816406 214.25 121.597656 214.828125 122.171875 C 215.402344 122.75 216.183594 123.070312 217 123.070312 C 217.816406 123.070312 218.597656 122.75 219.171875 122.171875 C 219.75 121.597656 220.070312 120.816406 220.070312 120 Z "/>
|
<path style=" stroke:none;fill-rule:evenodd;fill:rgb(88.070679%,61.103821%,14.204407%);fill-opacity:1;" d="M 220.070312 125 C 220.070312 124.183594 219.75 123.402344 219.171875 122.828125 C 218.597656 122.25 217.816406 121.929688 217 121.929688 C 216.183594 121.929688 215.402344 122.25 214.828125 122.828125 C 214.25 123.402344 213.929688 124.183594 213.929688 125 C 213.929688 125.816406 214.25 126.597656 214.828125 127.171875 C 215.402344 127.75 216.183594 128.070312 217 128.070312 C 217.816406 128.070312 218.597656 127.75 219.171875 127.171875 C 219.75 126.597656 220.070312 125.816406 220.070312 125 Z "/>
|
||||||
<path style=" stroke:none;fill-rule:evenodd;fill:rgb(88.070679%,61.103821%,14.204407%);fill-opacity:1;" d="M 253.070312 101 C 253.070312 100.183594 252.75 99.402344 252.171875 98.828125 C 251.597656 98.25 250.816406 97.929688 250 97.929688 C 249.183594 97.929688 248.402344 98.25 247.828125 98.828125 C 247.25 99.402344 246.929688 100.183594 246.929688 101 C 246.929688 101.816406 247.25 102.597656 247.828125 103.171875 C 248.402344 103.75 249.183594 104.070312 250 104.070312 C 250.816406 104.070312 251.597656 103.75 252.171875 103.171875 C 252.75 102.597656 253.070312 101.816406 253.070312 101 Z "/>
|
<path style=" stroke:none;fill-rule:evenodd;fill:rgb(88.070679%,61.103821%,14.204407%);fill-opacity:1;" d="M 253.070312 107 C 253.070312 106.183594 252.75 105.402344 252.171875 104.828125 C 251.597656 104.25 250.816406 103.929688 250 103.929688 C 249.183594 103.929688 248.402344 104.25 247.828125 104.828125 C 247.25 105.402344 246.929688 106.183594 246.929688 107 C 246.929688 107.816406 247.25 108.597656 247.828125 109.171875 C 248.402344 109.75 249.183594 110.070312 250 110.070312 C 250.816406 110.070312 251.597656 109.75 252.171875 109.171875 C 252.75 108.597656 253.070312 107.816406 253.070312 107 Z "/>
|
||||||
<path style=" stroke:none;fill-rule:evenodd;fill:rgb(88.070679%,61.103821%,14.204407%);fill-opacity:1;" d="M 286.070312 82 C 286.070312 81.183594 285.75 80.402344 285.171875 79.828125 C 284.597656 79.25 283.816406 78.929688 283 78.929688 C 282.183594 78.929688 281.402344 79.25 280.828125 79.828125 C 280.25 80.402344 279.929688 81.183594 279.929688 82 C 279.929688 82.816406 280.25 83.597656 280.828125 84.171875 C 281.402344 84.75 282.183594 85.070312 283 85.070312 C 283.816406 85.070312 284.597656 84.75 285.171875 84.171875 C 285.75 83.597656 286.070312 82.816406 286.070312 82 Z "/>
|
<path style=" stroke:none;fill-rule:evenodd;fill:rgb(88.070679%,61.103821%,14.204407%);fill-opacity:1;" d="M 286.070312 88 C 286.070312 87.183594 285.75 86.402344 285.171875 85.828125 C 284.597656 85.25 283.816406 84.929688 283 84.929688 C 282.183594 84.929688 281.402344 85.25 280.828125 85.828125 C 280.25 86.402344 279.929688 87.183594 279.929688 88 C 279.929688 88.816406 280.25 89.597656 280.828125 90.171875 C 281.402344 90.75 282.183594 91.070312 283 91.070312 C 283.816406 91.070312 284.597656 90.75 285.171875 90.171875 C 285.75 89.597656 286.070312 88.816406 286.070312 88 Z "/>
|
||||||
<path style=" stroke:none;fill-rule:evenodd;fill:rgb(88.070679%,61.103821%,14.204407%);fill-opacity:1;" d="M 319.070312 63 C 319.070312 62.183594 318.75 61.402344 318.171875 60.828125 C 317.597656 60.25 316.816406 59.929688 316 59.929688 C 315.183594 59.929688 314.402344 60.25 313.828125 60.828125 C 313.25 61.402344 312.929688 62.183594 312.929688 63 C 312.929688 63.816406 313.25 64.597656 313.828125 65.171875 C 314.402344 65.75 315.183594 66.070312 316 66.070312 C 316.816406 66.070312 317.597656 65.75 318.171875 65.171875 C 318.75 64.597656 319.070312 63.816406 319.070312 63 Z "/>
|
<path style=" stroke:none;fill-rule:evenodd;fill:rgb(88.070679%,61.103821%,14.204407%);fill-opacity:1;" d="M 319.070312 69 C 319.070312 68.183594 318.75 67.402344 318.171875 66.828125 C 317.597656 66.25 316.816406 65.929688 316 65.929688 C 315.183594 65.929688 314.402344 66.25 313.828125 66.828125 C 313.25 67.402344 312.929688 68.183594 312.929688 69 C 312.929688 69.816406 313.25 70.597656 313.828125 71.171875 C 314.402344 71.75 315.183594 72.070312 316 72.070312 C 316.816406 72.070312 317.597656 71.75 318.171875 71.171875 C 318.75 70.597656 319.070312 69.816406 319.070312 69 Z "/>
|
||||||
<path style=" stroke:none;fill-rule:evenodd;fill:rgb(88.070679%,61.103821%,14.204407%);fill-opacity:1;" d="M 352.070312 44 C 352.070312 43.183594 351.75 42.402344 351.171875 41.828125 C 350.597656 41.25 349.816406 40.929688 349 40.929688 C 348.183594 40.929688 347.402344 41.25 346.828125 41.828125 C 346.25 42.402344 345.929688 43.183594 345.929688 44 C 345.929688 44.816406 346.25 45.597656 346.828125 46.171875 C 347.402344 46.75 348.183594 47.070312 349 47.070312 C 349.816406 47.070312 350.597656 46.75 351.171875 46.171875 C 351.75 45.597656 352.070312 44.816406 352.070312 44 Z "/>
|
<path style=" stroke:none;fill-rule:evenodd;fill:rgb(88.070679%,61.103821%,14.204407%);fill-opacity:1;" d="M 352.070312 50 C 352.070312 49.183594 351.75 48.402344 351.171875 47.828125 C 350.597656 47.25 349.816406 46.929688 349 46.929688 C 348.183594 46.929688 347.402344 47.25 346.828125 47.828125 C 346.25 48.402344 345.929688 49.183594 345.929688 50 C 345.929688 50.816406 346.25 51.597656 346.828125 52.171875 C 347.402344 52.75 348.183594 53.070312 349 53.070312 C 349.816406 53.070312 350.597656 52.75 351.171875 52.171875 C 351.75 51.597656 352.070312 50.816406 352.070312 50 Z "/>
|
||||||
<path style="fill:none;stroke-width:0.5;stroke-linecap:square;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 355 214.296875 L 39 214.296875 "/>
|
<path style="fill:none;stroke-width:0.5;stroke-linecap:square;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 355 214.296875 L 39 214.296875 "/>
|
||||||
<path style="fill:none;stroke-width:0.5;stroke-linecap:square;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 39 214.296875 L 39 19 "/>
|
<path style="fill:none;stroke-width:0.5;stroke-linecap:square;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 39 214.296875 L 39 19 "/>
|
||||||
<path style="fill:none;stroke-width:0.5;stroke-linecap:square;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 39 19 L 355 19 "/>
|
<path style="fill:none;stroke-width:0.5;stroke-linecap:square;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 39 19 L 355 19 "/>
|
||||||
|
@ -250,54 +250,54 @@
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 303.902344 214.296875 L 303.902344 212.71875 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 303.902344 214.296875 L 303.902344 212.71875 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 309.511719 214.296875 L 309.511719 212.71875 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 309.511719 214.296875 L 309.511719 212.71875 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 347.550781 214.296875 L 347.550781 212.71875 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 347.550781 214.296875 L 347.550781 212.71875 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 39 171.957031 L 42.160156 171.957031 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 39 171.960938 L 42.160156 171.960938 "/>
|
||||||
<g style="fill:rgb(39.99939%,39.99939%,39.99939%);fill-opacity:1;">
|
<g style="fill:rgb(39.99939%,39.99939%,39.99939%);fill-opacity:1;">
|
||||||
<use xlink:href="#glyph0-1" x="19" y="176.958348"/>
|
<use xlink:href="#glyph0-1" x="19" y="176.961688"/>
|
||||||
<use xlink:href="#glyph0-2" x="24.561523" y="176.958348"/>
|
<use xlink:href="#glyph0-2" x="24.561523" y="176.961688"/>
|
||||||
</g>
|
</g>
|
||||||
<g style="fill:rgb(39.99939%,39.99939%,39.99939%);fill-opacity:1;">
|
<g style="fill:rgb(39.99939%,39.99939%,39.99939%);fill-opacity:1;">
|
||||||
<use xlink:href="#glyph1-1" x="30" y="172.809911"/>
|
<use xlink:href="#glyph1-1" x="30" y="172.81325"/>
|
||||||
</g>
|
</g>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 39 108.226562 L 42.160156 108.226562 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 39 108.234375 L 42.160156 108.234375 "/>
|
||||||
<g style="fill:rgb(39.99939%,39.99939%,39.99939%);fill-opacity:1;">
|
<g style="fill:rgb(39.99939%,39.99939%,39.99939%);fill-opacity:1;">
|
||||||
<use xlink:href="#glyph0-1" x="19" y="113.225321"/>
|
<use xlink:href="#glyph0-1" x="19" y="113.23603"/>
|
||||||
<use xlink:href="#glyph0-2" x="24.561523" y="113.225321"/>
|
<use xlink:href="#glyph0-2" x="24.561523" y="113.23603"/>
|
||||||
</g>
|
</g>
|
||||||
<g style="fill:rgb(39.99939%,39.99939%,39.99939%);fill-opacity:1;">
|
<g style="fill:rgb(39.99939%,39.99939%,39.99939%);fill-opacity:1;">
|
||||||
<use xlink:href="#glyph1-2" x="30" y="109.076883"/>
|
<use xlink:href="#glyph1-2" x="30" y="109.087593"/>
|
||||||
</g>
|
</g>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 39 44.492188 L 42.160156 44.492188 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 39 44.511719 L 42.160156 44.511719 "/>
|
||||||
<g style="fill:rgb(39.99939%,39.99939%,39.99939%);fill-opacity:1;">
|
<g style="fill:rgb(39.99939%,39.99939%,39.99939%);fill-opacity:1;">
|
||||||
<use xlink:href="#glyph0-1" x="19" y="49.492293"/>
|
<use xlink:href="#glyph0-1" x="19" y="49.510373"/>
|
||||||
<use xlink:href="#glyph0-2" x="24.561523" y="49.492293"/>
|
<use xlink:href="#glyph0-2" x="24.561523" y="49.510373"/>
|
||||||
</g>
|
</g>
|
||||||
<g style="fill:rgb(39.99939%,39.99939%,39.99939%);fill-opacity:1;">
|
<g style="fill:rgb(39.99939%,39.99939%,39.99939%);fill-opacity:1;">
|
||||||
<use xlink:href="#glyph1-3" x="30" y="45.343855"/>
|
<use xlink:href="#glyph1-3" x="30" y="45.361936"/>
|
||||||
</g>
|
</g>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 39 205.28125 L 40.578125 205.28125 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 39 205.28125 L 40.578125 205.28125 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 39 197.320312 L 40.578125 197.320312 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 39 197.320312 L 40.578125 197.320312 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 39 191.144531 L 40.578125 191.144531 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 39 191.144531 L 40.578125 191.144531 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 39 186.097656 L 40.578125 186.097656 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 39 186.097656 L 40.578125 186.097656 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 39 181.832031 L 40.578125 181.832031 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 39 181.832031 L 40.578125 181.832031 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 39 178.132812 L 40.578125 178.132812 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 39 178.136719 L 40.578125 178.136719 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 39 174.875 L 40.578125 174.875 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 39 174.878906 L 40.578125 174.878906 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 39 152.773438 L 40.578125 152.773438 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 39 152.777344 L 40.578125 152.777344 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 39 141.550781 L 40.578125 141.550781 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 39 141.558594 L 40.578125 141.558594 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 39 133.585938 L 40.578125 133.585938 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 39 133.59375 L 40.578125 133.59375 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 39 127.410156 L 40.578125 127.410156 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 39 127.417969 L 40.578125 127.417969 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 39 122.363281 L 40.578125 122.363281 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 39 122.375 L 40.578125 122.375 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 39 118.097656 L 40.578125 118.097656 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 39 118.105469 L 40.578125 118.105469 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 39 114.402344 L 40.578125 114.402344 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 39 114.410156 L 40.578125 114.410156 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 39 111.140625 L 40.578125 111.140625 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 39 111.152344 L 40.578125 111.152344 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 39 89.039062 L 40.578125 89.039062 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 39 89.050781 L 40.578125 89.050781 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 39 77.816406 L 40.578125 77.816406 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 39 77.832031 L 40.578125 77.832031 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 39 69.855469 L 40.578125 69.855469 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 39 69.871094 L 40.578125 69.871094 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 39 63.679688 L 40.578125 63.679688 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 39 63.695312 L 40.578125 63.695312 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 39 58.632812 L 40.578125 58.632812 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 39 58.648438 L 40.578125 58.648438 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 39 54.363281 L 40.578125 54.363281 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 39 54.382812 L 40.578125 54.382812 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 39 50.667969 L 40.578125 50.667969 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 39 50.6875 L 40.578125 50.6875 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 39 47.410156 L 40.578125 47.410156 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 39 47.425781 L 40.578125 47.425781 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 39 25.308594 L 40.578125 25.308594 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 39 25.328125 L 40.578125 25.328125 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 95.160156 19 L 95.160156 22.160156 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 95.160156 19 L 95.160156 22.160156 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 204.84375 19 L 204.84375 22.160156 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 204.84375 19 L 204.84375 22.160156 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 314.53125 19 L 314.53125 22.160156 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 314.53125 19 L 314.53125 22.160156 "/>
|
||||||
|
@ -324,33 +324,33 @@
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 303.902344 19 L 303.902344 20.578125 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 303.902344 19 L 303.902344 20.578125 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 309.511719 19 L 309.511719 20.578125 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 309.511719 19 L 309.511719 20.578125 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 347.550781 19 L 347.550781 20.578125 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 347.550781 19 L 347.550781 20.578125 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 355 171.957031 L 351.839844 171.957031 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 355 171.960938 L 351.839844 171.960938 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 355 108.226562 L 351.839844 108.226562 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 355 108.234375 L 351.839844 108.234375 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 355 44.492188 L 351.839844 44.492188 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 355 44.511719 L 351.839844 44.511719 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 355 205.28125 L 353.421875 205.28125 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 355 205.28125 L 353.421875 205.28125 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 355 197.320312 L 353.421875 197.320312 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 355 197.320312 L 353.421875 197.320312 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 355 191.144531 L 353.421875 191.144531 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 355 191.144531 L 353.421875 191.144531 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 355 186.097656 L 353.421875 186.097656 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 355 186.097656 L 353.421875 186.097656 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 355 181.832031 L 353.421875 181.832031 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 355 181.832031 L 353.421875 181.832031 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 355 178.132812 L 353.421875 178.132812 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 355 178.136719 L 353.421875 178.136719 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 355 174.875 L 353.421875 174.875 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 355 174.878906 L 353.421875 174.878906 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 355 152.773438 L 353.421875 152.773438 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 355 152.777344 L 353.421875 152.777344 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 355 141.550781 L 353.421875 141.550781 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 355 141.558594 L 353.421875 141.558594 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 355 133.585938 L 353.421875 133.585938 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 355 133.59375 L 353.421875 133.59375 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 355 127.410156 L 353.421875 127.410156 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 355 127.417969 L 353.421875 127.417969 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 355 122.363281 L 353.421875 122.363281 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 355 122.375 L 353.421875 122.375 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 355 118.097656 L 353.421875 118.097656 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 355 118.105469 L 353.421875 118.105469 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 355 114.402344 L 353.421875 114.402344 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 355 114.410156 L 353.421875 114.410156 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 355 111.140625 L 353.421875 111.140625 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 355 111.152344 L 353.421875 111.152344 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 355 89.039062 L 353.421875 89.039062 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 355 89.050781 L 353.421875 89.050781 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 355 77.816406 L 353.421875 77.816406 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 355 77.832031 L 353.421875 77.832031 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 355 69.855469 L 353.421875 69.855469 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 355 69.871094 L 353.421875 69.871094 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 355 63.679688 L 353.421875 63.679688 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 355 63.695312 L 353.421875 63.695312 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 355 58.632812 L 353.421875 58.632812 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 355 58.648438 L 353.421875 58.648438 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 355 54.363281 L 353.421875 54.363281 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 355 54.382812 L 353.421875 54.382812 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 355 50.667969 L 353.421875 50.667969 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 355 50.6875 L 353.421875 50.6875 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 355 47.410156 L 353.421875 47.410156 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 355 47.425781 L 353.421875 47.425781 "/>
|
||||||
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 355 25.308594 L 353.421875 25.308594 "/>
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(39.99939%,39.99939%,39.99939%);stroke-opacity:1;stroke-miterlimit:3.25;" d="M 355 25.328125 L 353.421875 25.328125 "/>
|
||||||
<g style="fill:rgb(39.99939%,39.99939%,39.99939%);fill-opacity:1;">
|
<g style="fill:rgb(39.99939%,39.99939%,39.99939%);fill-opacity:1;">
|
||||||
<use xlink:href="#glyph0-3" x="175.5" y="245.29874"/>
|
<use xlink:href="#glyph0-3" x="175.5" y="245.29874"/>
|
||||||
<use xlink:href="#glyph0-4" x="181.608398" y="245.29874"/>
|
<use xlink:href="#glyph0-4" x="181.608398" y="245.29874"/>
|
||||||
|
|
Before Width: | Height: | Size: 84 KiB After Width: | Height: | Size: 84 KiB |
|
@ -14,4 +14,5 @@ void kw_func(int x, int y) { std::cout << "kw_func(x=" << x << ", y=" << y << ")
|
||||||
void init_ex11(py::module &m) {
|
void init_ex11(py::module &m) {
|
||||||
m.def("kw_func", &kw_func, py::arg("x"), py::arg("y"));
|
m.def("kw_func", &kw_func, py::arg("x"), py::arg("y"));
|
||||||
m.def("kw_func2", &kw_func, py::arg("x") = 100, py::arg("y") = 200);
|
m.def("kw_func2", &kw_func, py::arg("x") = 100, py::arg("y") = 200);
|
||||||
|
m.def("kw_func3", [](const char *) { }, py::arg("data") = std::string("Hello world!"));
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,19 +1,19 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python
|
||||||
from __future__ import print_function
|
from __future__ import print_function
|
||||||
import sys, pydoc
|
import sys
|
||||||
|
import pydoc
|
||||||
|
|
||||||
sys.path.append('.')
|
sys.path.append('.')
|
||||||
|
|
||||||
import example
|
from example import kw_func, kw_func2, kw_func3
|
||||||
|
|
||||||
from example import kw_func
|
|
||||||
from example import kw_func2
|
|
||||||
|
|
||||||
print(pydoc.render_doc(kw_func, "Help on %s"))
|
print(pydoc.render_doc(kw_func, "Help on %s"))
|
||||||
print(pydoc.render_doc(kw_func2, "Help on %s"))
|
print(pydoc.render_doc(kw_func2, "Help on %s"))
|
||||||
|
print(pydoc.render_doc(kw_func3, "Help on %s"))
|
||||||
|
|
||||||
kw_func(5, 10)
|
kw_func(5, 10)
|
||||||
kw_func(5, y = 10)
|
kw_func(5, y=10)
|
||||||
kw_func(y = 10, x = 5)
|
kw_func(y=10, x=5)
|
||||||
|
|
||||||
kw_func2()
|
kw_func2()
|
||||||
|
|
||||||
|
@ -24,3 +24,8 @@ kw_func2(y=10)
|
||||||
|
|
||||||
kw_func2(5, 10)
|
kw_func2(5, 10)
|
||||||
kw_func2(x=5, y=10)
|
kw_func2(x=5, y=10)
|
||||||
|
|
||||||
|
try:
|
||||||
|
kw_func2(x=5, y=10, z=12)
|
||||||
|
except Exception as e:
|
||||||
|
print("Caught expected exception: " + str(e))
|
||||||
|
|
|
@ -1,3 +1,18 @@
|
||||||
|
Help on built-in function kw_func
|
||||||
|
|
||||||
|
kkww__ffuunncc(...)
|
||||||
|
Signature : (x : int, y : int) -> None
|
||||||
|
|
||||||
|
Help on built-in function kw_func2
|
||||||
|
|
||||||
|
kkww__ffuunncc22(...)
|
||||||
|
Signature : (x : int = 100L, y : int = 200L) -> None
|
||||||
|
|
||||||
|
Help on built-in function kw_func3
|
||||||
|
|
||||||
|
kkww__ffuunncc33(...)
|
||||||
|
Signature : (data : str = u'Hello world!') -> None
|
||||||
|
|
||||||
kw_func(x=5, y=10)
|
kw_func(x=5, y=10)
|
||||||
kw_func(x=5, y=10)
|
kw_func(x=5, y=10)
|
||||||
kw_func(x=5, y=10)
|
kw_func(x=5, y=10)
|
||||||
|
@ -7,13 +22,6 @@ kw_func(x=5, y=200)
|
||||||
kw_func(x=100, y=10)
|
kw_func(x=100, y=10)
|
||||||
kw_func(x=5, y=10)
|
kw_func(x=5, y=10)
|
||||||
kw_func(x=5, y=10)
|
kw_func(x=5, y=10)
|
||||||
Help on built-in function kw_func
|
Caught expected exception: Incompatible function arguments. The following argument types are supported:
|
||||||
|
1. (x : int = 100L, y : int = 200L) -> None
|
||||||
kkww__ffuunncc(...) method of builtins.PyCapsule instance
|
|
||||||
Signature : (x : int, y : int) -> None
|
|
||||||
|
|
||||||
Help on built-in function kw_func2
|
|
||||||
|
|
||||||
kkww__ffuunncc22(...) method of builtins.PyCapsule instance
|
|
||||||
Signature : (x : int = 100, y : int = 200) -> None
|
|
||||||
|
|
||||||
|
|
|
@ -12,8 +12,8 @@
|
||||||
|
|
||||||
#include "pytypes.h"
|
#include "pytypes.h"
|
||||||
#include "typeid.h"
|
#include "typeid.h"
|
||||||
|
#include "descr.h"
|
||||||
#include <array>
|
#include <array>
|
||||||
#include <list>
|
|
||||||
#include <limits>
|
#include <limits>
|
||||||
|
|
||||||
NAMESPACE_BEGIN(pybind11)
|
NAMESPACE_BEGIN(pybind11)
|
||||||
|
@ -25,80 +25,6 @@ NAMESPACE_BEGIN(detail)
|
||||||
#define PYBIND11_AS_STRING PyString_AsString
|
#define PYBIND11_AS_STRING PyString_AsString
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/** Linked list descriptor type for function signatures (produces smaller binaries
|
|
||||||
compared to a previous solution using std::string and operator +=) */
|
|
||||||
class descr {
|
|
||||||
public:
|
|
||||||
struct entry {
|
|
||||||
const std::type_info *type = nullptr;
|
|
||||||
const char *str = nullptr;
|
|
||||||
entry *next = nullptr;
|
|
||||||
entry(const std::type_info *type) : type(type) { }
|
|
||||||
entry(const char *str) : str(str) { }
|
|
||||||
};
|
|
||||||
|
|
||||||
descr() { }
|
|
||||||
descr(descr &&d) : first(d.first), last(d.last) { d.first = d.last = nullptr; }
|
|
||||||
PYBIND11_NOINLINE descr(const char *str) { first = last = new entry { str }; }
|
|
||||||
PYBIND11_NOINLINE descr(const std::type_info &type) { first = last = new entry { &type }; }
|
|
||||||
|
|
||||||
PYBIND11_NOINLINE void operator+(const char *str) {
|
|
||||||
entry *next = new entry { str };
|
|
||||||
last->next = next;
|
|
||||||
last = next;
|
|
||||||
}
|
|
||||||
|
|
||||||
PYBIND11_NOINLINE void operator+(const std::type_info *type) {
|
|
||||||
entry *next = new entry { type };
|
|
||||||
last->next = next;
|
|
||||||
last = next;
|
|
||||||
}
|
|
||||||
|
|
||||||
PYBIND11_NOINLINE void operator+=(descr &&other) {
|
|
||||||
last->next = other.first;
|
|
||||||
while (last->next)
|
|
||||||
last = last->next;
|
|
||||||
other.first = other.last = nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
PYBIND11_NOINLINE friend descr operator+(descr &&l, descr &&r) {
|
|
||||||
descr result(std::move(l));
|
|
||||||
result += std::move(r);
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
PYBIND11_NOINLINE std::string str() const {
|
|
||||||
std::string result;
|
|
||||||
auto const& registered_types = get_internals().registered_types;
|
|
||||||
for (entry *it = first; it != nullptr; it = it->next) {
|
|
||||||
if (it->type) {
|
|
||||||
auto it2 = registered_types.find(it->type);
|
|
||||||
if (it2 != registered_types.end()) {
|
|
||||||
result += it2->second.type->tp_name;
|
|
||||||
} else {
|
|
||||||
std::string tname(it->type->name());
|
|
||||||
detail::clean_type_id(tname);
|
|
||||||
result += tname;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
result += it->str;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
PYBIND11_NOINLINE ~descr() {
|
|
||||||
while (first) {
|
|
||||||
entry *tmp = first->next;
|
|
||||||
delete first;
|
|
||||||
first = tmp;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
entry *first = nullptr;
|
|
||||||
entry *last = nullptr;
|
|
||||||
};
|
|
||||||
|
|
||||||
class type_caster_custom {
|
class type_caster_custom {
|
||||||
public:
|
public:
|
||||||
PYBIND11_NOINLINE type_caster_custom(const std::type_info *type_info) {
|
PYBIND11_NOINLINE type_caster_custom(const std::type_info *type_info) {
|
||||||
|
@ -195,7 +121,7 @@ protected:
|
||||||
/// Generic type caster for objects stored on the heap
|
/// Generic type caster for objects stored on the heap
|
||||||
template <typename type, typename Enable = void> class type_caster : public type_caster_custom {
|
template <typename type, typename Enable = void> class type_caster : public type_caster_custom {
|
||||||
public:
|
public:
|
||||||
static descr name() { return typeid(type); }
|
static PYBIND11_DESCR name() { return type_descr(_<type>()); }
|
||||||
|
|
||||||
type_caster() : type_caster_custom(&typeid(type)) { }
|
type_caster() : type_caster_custom(&typeid(type)) { }
|
||||||
|
|
||||||
|
@ -224,7 +150,7 @@ protected:
|
||||||
protected: \
|
protected: \
|
||||||
type value; \
|
type value; \
|
||||||
public: \
|
public: \
|
||||||
static descr name() { return py_name; } \
|
static PYBIND11_DESCR name() { return type_descr(py_name); } \
|
||||||
static PyObject *cast(const type *src, return_value_policy policy, PyObject *parent) { \
|
static PyObject *cast(const type *src, return_value_policy policy, PyObject *parent) { \
|
||||||
return cast(*src, policy, parent); \
|
return cast(*src, policy, parent); \
|
||||||
} \
|
} \
|
||||||
|
@ -296,9 +222,10 @@ public:
|
||||||
return cast(*src, policy, parent);
|
return cast(*src, policy, parent);
|
||||||
}
|
}
|
||||||
|
|
||||||
static descr name() {
|
template <typename T2 = T, typename std::enable_if<std::is_integral<T2>::value, int>::type = 0>
|
||||||
return std::is_floating_point<T>::value ? "float" : "int";
|
static PYBIND11_DESCR name() { return type_descr(_("int")); }
|
||||||
}
|
template <typename T2 = T, typename std::enable_if<!std::is_integral<T2>::value, int>::type = 0>
|
||||||
|
static PYBIND11_DESCR name() { return type_descr(_("float")); }
|
||||||
|
|
||||||
operator T*() { return &value; }
|
operator T*() { return &value; }
|
||||||
operator T&() { return value; }
|
operator T&() { return value; }
|
||||||
|
@ -314,7 +241,7 @@ public:
|
||||||
Py_INCREF(Py_None);
|
Py_INCREF(Py_None);
|
||||||
return Py_None;
|
return Py_None;
|
||||||
}
|
}
|
||||||
PYBIND11_TYPE_CASTER(void_type, "None");
|
PYBIND11_TYPE_CASTER(void_type, _("None"));
|
||||||
};
|
};
|
||||||
|
|
||||||
template <> class type_caster<void> : public type_caster<void_type> { };
|
template <> class type_caster<void> : public type_caster<void_type> { };
|
||||||
|
@ -332,7 +259,7 @@ public:
|
||||||
Py_INCREF(result);
|
Py_INCREF(result);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
PYBIND11_TYPE_CASTER(bool, "bool");
|
PYBIND11_TYPE_CASTER(bool, _("bool"));
|
||||||
};
|
};
|
||||||
|
|
||||||
template <> class type_caster<std::string> {
|
template <> class type_caster<std::string> {
|
||||||
|
@ -352,7 +279,7 @@ public:
|
||||||
static PyObject *cast(const std::string &src, return_value_policy /* policy */, PyObject * /* parent */) {
|
static PyObject *cast(const std::string &src, return_value_policy /* policy */, PyObject * /* parent */) {
|
||||||
return PyUnicode_FromString(src.c_str());
|
return PyUnicode_FromString(src.c_str());
|
||||||
}
|
}
|
||||||
PYBIND11_TYPE_CASTER(std::string, "str");
|
PYBIND11_TYPE_CASTER(std::string, _("str"));
|
||||||
};
|
};
|
||||||
|
|
||||||
template <> class type_caster<char> {
|
template <> class type_caster<char> {
|
||||||
|
@ -379,7 +306,7 @@ public:
|
||||||
return PyUnicode_DecodeLatin1(str, 1, nullptr);
|
return PyUnicode_DecodeLatin1(str, 1, nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
static descr name() { return "str"; }
|
static PYBIND11_DESCR name() { return type_descr(_("str")); }
|
||||||
|
|
||||||
operator char*() { return (char *) value.c_str(); }
|
operator char*() { return (char *) value.c_str(); }
|
||||||
operator char() { if (value.length() > 0) return value[0]; else return '\0'; }
|
operator char() { if (value.length() > 0) return value[0]; else return '\0'; }
|
||||||
|
@ -411,13 +338,10 @@ public:
|
||||||
return tuple;
|
return tuple;
|
||||||
}
|
}
|
||||||
|
|
||||||
static descr name() {
|
static PYBIND11_DESCR name() {
|
||||||
class descr result("(");
|
return type_descr(
|
||||||
result += std::move(type_caster<typename decay<T1>::type>::name());
|
_("(") + type_caster<typename decay<T1>::type>::name() +
|
||||||
result += ", ";
|
_(", ") + type_caster<typename decay<T2>::type>::name() + _(")"));
|
||||||
result += std::move(type_caster<typename decay<T2>::type>::name());
|
|
||||||
result += ")";
|
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
operator type() {
|
operator type() {
|
||||||
|
@ -441,31 +365,11 @@ public:
|
||||||
return cast(src, policy, parent, typename make_index_sequence<size>::type());
|
return cast(src, policy, parent, typename make_index_sequence<size>::type());
|
||||||
}
|
}
|
||||||
|
|
||||||
static descr name(const std::list<argument_entry> &args = std::list<argument_entry>()) {
|
static PYBIND11_DESCR name() {
|
||||||
std::array<class descr, size> type_names {{
|
return type_descr(
|
||||||
type_caster<typename decay<Tuple>::type>::name()...
|
_("(") +
|
||||||
}};
|
detail::concat(type_caster<typename decay<Tuple>::type>::name()...) +
|
||||||
auto it = args.begin();
|
_(")"));
|
||||||
class descr result("(");
|
|
||||||
for (int i=0; i<size; ++i) {
|
|
||||||
if (it != args.end()) {
|
|
||||||
result += it->name;
|
|
||||||
result += " : ";
|
|
||||||
}
|
|
||||||
result += std::move(type_names[i]);
|
|
||||||
if (it != args.end()) {
|
|
||||||
if (it->descr) {
|
|
||||||
result += " = ";
|
|
||||||
result += it->descr;
|
|
||||||
}
|
|
||||||
++it;
|
|
||||||
}
|
|
||||||
if (i+1 < size)
|
|
||||||
result += ", ";
|
|
||||||
++it;
|
|
||||||
}
|
|
||||||
result += ")";
|
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename ReturnValue, typename Func> typename std::enable_if<!std::is_void<ReturnValue>::value, ReturnValue>::type call(Func &&f) {
|
template <typename ReturnValue, typename Func> typename std::enable_if<!std::is_void<ReturnValue>::value, ReturnValue>::type call(Func &&f) {
|
||||||
|
@ -576,7 +480,7 @@ public:
|
||||||
src.inc_ref();
|
src.inc_ref();
|
||||||
return (PyObject *) src.ptr();
|
return (PyObject *) src.ptr();
|
||||||
}
|
}
|
||||||
PYBIND11_TYPE_CASTER(type, typeid(type));
|
PYBIND11_TYPE_CASTER(type, _<type>());
|
||||||
};
|
};
|
||||||
|
|
||||||
NAMESPACE_END(detail)
|
NAMESPACE_END(detail)
|
||||||
|
|
|
@ -167,16 +167,12 @@ struct overload_hash {
|
||||||
|
|
||||||
/// Stores information about a keyword argument
|
/// Stores information about a keyword argument
|
||||||
struct argument_entry {
|
struct argument_entry {
|
||||||
char *name; ///< Argument name
|
const char *name; ///< Argument name
|
||||||
char *descr; ///< Human-readable version of the argument value
|
const char *descr; ///< Human-readable version of the argument value
|
||||||
PyObject *value; ///< Associated Python object
|
PyObject *value; ///< Associated Python object
|
||||||
|
|
||||||
argument_entry(char *name, char *descr, PyObject *value)
|
argument_entry(const char *name, const char *descr, PyObject *value)
|
||||||
: name(name), descr(descr), value(value) { }
|
: name(name), descr(descr), value(value) { }
|
||||||
|
|
||||||
~argument_entry() {
|
|
||||||
free(name); free(descr); Py_XDECREF(value);
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/// Internal data struture used to track registered instances and types
|
/// Internal data struture used to track registered instances and types
|
||||||
|
|
|
@ -34,7 +34,7 @@ public:
|
||||||
return PyComplex_FromDoubles((double) src.real(), (double) src.imag());
|
return PyComplex_FromDoubles((double) src.real(), (double) src.imag());
|
||||||
}
|
}
|
||||||
|
|
||||||
PYBIND11_TYPE_CASTER(std::complex<T>, "complex");
|
PYBIND11_TYPE_CASTER(std::complex<T>, _("complex"));
|
||||||
};
|
};
|
||||||
NAMESPACE_END(detail)
|
NAMESPACE_END(detail)
|
||||||
NAMESPACE_END(pybind11)
|
NAMESPACE_END(pybind11)
|
||||||
|
|
|
@ -0,0 +1,161 @@
|
||||||
|
/*
|
||||||
|
pybind11/descr.h: Helper type for concatenating type signatures
|
||||||
|
either at runtime (C++11) or compile time (C++14)
|
||||||
|
|
||||||
|
Copyright (c) 2015 Wenzel Jakob <wenzel@inf.ethz.ch>
|
||||||
|
|
||||||
|
All rights reserved. Use of this source code is governed by a
|
||||||
|
BSD-style license that can be found in the LICENSE file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "common.h"
|
||||||
|
|
||||||
|
NAMESPACE_BEGIN(pybind11)
|
||||||
|
NAMESPACE_BEGIN(detail)
|
||||||
|
|
||||||
|
|
||||||
|
#if defined(__clang__)
|
||||||
|
# if __has_feature(cxx_return_type_deduction) && __has_feature(cxx_relaxed_constexpr)
|
||||||
|
# define PYBIND11_CPP14
|
||||||
|
# endif
|
||||||
|
#elif defined(__GNUG__)
|
||||||
|
# if __cpp_constexpr >= 201304 && __cpp_decltype_auto >= 201304
|
||||||
|
# define PYBIND11_CPP14
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(PYBIND11_CPP14) /* Concatenate type signatures at compile time using C++14 */
|
||||||
|
|
||||||
|
template <size_t Size1, size_t Size2> class descr {
|
||||||
|
template <size_t Size1_, size_t Size2_> friend class descr;
|
||||||
|
public:
|
||||||
|
constexpr descr(char const (&text) [Size1+1], const std::type_info * const (&types)[Size2+1])
|
||||||
|
: descr(text, types,
|
||||||
|
typename make_index_sequence<Size1>::type(),
|
||||||
|
typename make_index_sequence<Size2>::type()) { }
|
||||||
|
|
||||||
|
constexpr const char *text() const { return m_text; }
|
||||||
|
constexpr const std::type_info * const * types() const { return m_types; }
|
||||||
|
|
||||||
|
template <size_t OtherSize1, size_t OtherSize2>
|
||||||
|
constexpr descr<Size1 + OtherSize1, Size2 + OtherSize2> operator+(const descr<OtherSize1, OtherSize2> &other) const {
|
||||||
|
return concat(other,
|
||||||
|
typename make_index_sequence<Size1>::type(),
|
||||||
|
typename make_index_sequence<Size2>::type(),
|
||||||
|
typename make_index_sequence<OtherSize1>::type(),
|
||||||
|
typename make_index_sequence<OtherSize2>::type());
|
||||||
|
}
|
||||||
|
|
||||||
|
protected:
|
||||||
|
template <size_t... Indices1, size_t... Indices2>
|
||||||
|
constexpr descr(
|
||||||
|
char const (&text) [Size1+1],
|
||||||
|
const std::type_info * const (&types) [Size2+1],
|
||||||
|
index_sequence<Indices1...>, index_sequence<Indices2...>)
|
||||||
|
: m_text{text[Indices1]..., '\0'},
|
||||||
|
m_types{types[Indices2]..., nullptr } {}
|
||||||
|
|
||||||
|
template <size_t OtherSize1, size_t OtherSize2, size_t... Indices1,
|
||||||
|
size_t... Indices2, size_t... OtherIndices1, size_t... OtherIndices2>
|
||||||
|
constexpr descr<Size1 + OtherSize1, Size2 + OtherSize2>
|
||||||
|
concat(const descr<OtherSize1, OtherSize2> &other,
|
||||||
|
index_sequence<Indices1...>, index_sequence<Indices2...>,
|
||||||
|
index_sequence<OtherIndices1...>, index_sequence<OtherIndices2...>) const {
|
||||||
|
return descr<Size1 + OtherSize1, Size2 + OtherSize2>(
|
||||||
|
{ m_text[Indices1]..., other.m_text[OtherIndices1]..., '\0' },
|
||||||
|
{ m_types[Indices2]..., other.m_types[OtherIndices2]..., nullptr }
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected:
|
||||||
|
char m_text[Size1 + 1];
|
||||||
|
const std::type_info * m_types[Size2 + 1];
|
||||||
|
};
|
||||||
|
|
||||||
|
template <size_t Size> constexpr descr<Size - 1, 0> _(char const(&text)[Size]) {
|
||||||
|
return descr<Size - 1, 0>(text, { nullptr });
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename Type> constexpr descr<1, 1> _() {
|
||||||
|
return descr<1, 1>({ '%', '\0' }, { &typeid(Type), nullptr });
|
||||||
|
}
|
||||||
|
|
||||||
|
inline constexpr descr<0, 0> concat() { return _(""); }
|
||||||
|
template <size_t Size1, size_t Size2, typename... Args> auto constexpr concat(descr<Size1, Size2> descr) { return descr; }
|
||||||
|
template <size_t Size1, size_t Size2, typename... Args> auto constexpr concat(descr<Size1, Size2> descr, Args&&... args) { return descr + _(", ") + concat(args...); }
|
||||||
|
template <size_t Size1, size_t Size2> auto constexpr type_descr(descr<Size1, Size2> descr) { return _("{") + descr + _("}"); }
|
||||||
|
|
||||||
|
#define PYBIND11_DESCR constexpr auto
|
||||||
|
|
||||||
|
#else /* Simpler C++11 implementation based on run-time memory allocation and copying */
|
||||||
|
|
||||||
|
class descr {
|
||||||
|
public:
|
||||||
|
PYBIND11_NOINLINE descr(const char *text, const std::type_info * const * types) {
|
||||||
|
size_t nChars = len(text), nTypes = len(types);
|
||||||
|
m_text = new char[nChars];
|
||||||
|
m_types = new const std::type_info *[nTypes];
|
||||||
|
memcpy(m_text, text, nChars * sizeof(char));
|
||||||
|
memcpy(m_types, types, nTypes * sizeof(const std::type_info *));
|
||||||
|
}
|
||||||
|
|
||||||
|
PYBIND11_NOINLINE descr friend operator+(descr &&d1, descr &&d2) {
|
||||||
|
descr r;
|
||||||
|
|
||||||
|
size_t nChars1 = len(d1.m_text), nTypes1 = len(d1.m_types);
|
||||||
|
size_t nChars2 = len(d2.m_text), nTypes2 = len(d2.m_types);
|
||||||
|
|
||||||
|
r.m_text = new char[nChars1 + nChars2 - 1];
|
||||||
|
r.m_types = new const std::type_info *[nTypes1 + nTypes2 - 1];
|
||||||
|
memcpy(r.m_text, d1.m_text, (nChars1-1) * sizeof(char));
|
||||||
|
memcpy(r.m_text + nChars1 - 1, d2.m_text, nChars2 * sizeof(char));
|
||||||
|
memcpy(r.m_types, d1.m_types, (nTypes1-1) * sizeof(std::type_info *));
|
||||||
|
memcpy(r.m_types + nTypes1 - 1, d2.m_types, nTypes2 * sizeof(std::type_info *));
|
||||||
|
|
||||||
|
delete[] d1.m_text; delete[] d1.m_types;
|
||||||
|
delete[] d2.m_text; delete[] d2.m_types;
|
||||||
|
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
char *text() { return m_text; }
|
||||||
|
const std::type_info * * types() { return m_types; }
|
||||||
|
|
||||||
|
protected:
|
||||||
|
PYBIND11_NOINLINE descr() { }
|
||||||
|
|
||||||
|
template <typename T> static size_t len(const T *ptr) { // return length including null termination
|
||||||
|
const T *it = ptr;
|
||||||
|
while (*it++ != (T) 0)
|
||||||
|
;
|
||||||
|
return it - ptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
const std::type_info **m_types = nullptr;
|
||||||
|
char *m_text = nullptr;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* The 'PYBIND11_NOINLINE inline' combinations below are intentional to get the desired linkage while producing as little object code as possible */
|
||||||
|
|
||||||
|
PYBIND11_NOINLINE inline descr _(const char *text) {
|
||||||
|
const std::type_info *types[1] = { nullptr };
|
||||||
|
return descr(text, types);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename Type> PYBIND11_NOINLINE descr _() {
|
||||||
|
const std::type_info *types[2] = { &typeid(Type), nullptr };
|
||||||
|
return descr("%", types);
|
||||||
|
}
|
||||||
|
|
||||||
|
PYBIND11_NOINLINE inline descr concat() { return _(""); }
|
||||||
|
PYBIND11_NOINLINE inline descr concat(descr &&d) { return d; }
|
||||||
|
template <typename... Args> PYBIND11_NOINLINE descr concat(descr &&d, Args&&... args) { return std::move(d) + _(", ") + concat(std::forward<Args>(args)...); }
|
||||||
|
PYBIND11_NOINLINE inline descr type_descr(descr&& d) { return _("{") + std::move(d) + _("}"); }
|
||||||
|
|
||||||
|
#define PYBIND11_DESCR descr
|
||||||
|
#endif
|
||||||
|
|
||||||
|
NAMESPACE_END(detail)
|
||||||
|
NAMESPACE_END(pybind11)
|
|
@ -39,11 +39,10 @@ public:
|
||||||
return f.ptr();
|
return f.ptr();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PYBIND11_TYPE_CASTER(type, _("function<") +
|
||||||
PYBIND11_TYPE_CASTER(type, detail::descr("function<") +
|
type_caster<std::tuple<Args...>>::name() + _(" -> ") +
|
||||||
type_caster<std::tuple<Args...>>::name() + detail::descr(" -> ") +
|
|
||||||
type_caster<typename decay<Return>::type>::name() +
|
type_caster<typename decay<Return>::type>::name() +
|
||||||
detail::descr(">"));
|
_(">"));
|
||||||
};
|
};
|
||||||
|
|
||||||
NAMESPACE_END(detail)
|
NAMESPACE_END(detail)
|
||||||
|
|
|
@ -24,7 +24,6 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "cast.h"
|
#include "cast.h"
|
||||||
#include <iostream>
|
|
||||||
|
|
||||||
NAMESPACE_BEGIN(pybind11)
|
NAMESPACE_BEGIN(pybind11)
|
||||||
|
|
||||||
|
@ -39,10 +38,10 @@ struct arg {
|
||||||
|
|
||||||
/// Annotation for keyword arguments with default values
|
/// Annotation for keyword arguments with default values
|
||||||
template <typename T> struct arg_t : public arg {
|
template <typename T> struct arg_t : public arg {
|
||||||
arg_t(const char *name, const T &value, const char *value_str = nullptr)
|
arg_t(const char *name, const T &value, const char *descr = nullptr)
|
||||||
: arg(name), value(value), value_str(value_str) {}
|
: arg(name), value(value), descr(descr) { }
|
||||||
T value;
|
T value;
|
||||||
const char *value_str;
|
const char *descr;
|
||||||
};
|
};
|
||||||
|
|
||||||
template <typename T> arg_t<T> arg::operator=(const T &value) { return arg_t<T>(name, value); }
|
template <typename T> arg_t<T> arg::operator=(const T &value) { return arg_t<T>(name, value); }
|
||||||
|
@ -65,15 +64,17 @@ private:
|
||||||
/// Linked list of function overloads
|
/// Linked list of function overloads
|
||||||
struct function_entry {
|
struct function_entry {
|
||||||
/// Function name and user-specified documentation string
|
/// Function name and user-specified documentation string
|
||||||
const char *name = nullptr, *doc = nullptr;
|
char *name = nullptr, *doc = nullptr; /* why no C++ strings? They generate heavier code.. */
|
||||||
|
/// Human-readable version of the function signature
|
||||||
|
char *signature = nullptr;
|
||||||
/// List of registered keyword arguments
|
/// List of registered keyword arguments
|
||||||
std::list<detail::argument_entry> args;
|
std::vector<detail::argument_entry> args;
|
||||||
/// Pointer to lambda function which converts arguments and performs the call
|
/// Pointer to lambda function which converts arguments and performs the actual call
|
||||||
PyObject * (*impl) (function_entry *, PyObject *, PyObject *) = nullptr;
|
PyObject * (*impl) (function_entry *, PyObject *, PyObject *) = nullptr;
|
||||||
/// Storage for the wrapped function pointer and captured data, if any
|
/// Storage for the wrapped function pointer and captured data, if any
|
||||||
void *data = nullptr;
|
void *data = nullptr;
|
||||||
/// Pointer to custom destructor for 'data' (if needed)
|
/// Pointer to custom destructor for 'data' (if needed)
|
||||||
void (*free) (void *ptr) = nullptr;
|
void (*free_data) (void *ptr) = nullptr;
|
||||||
/// Return value policy associated with this function
|
/// Return value policy associated with this function
|
||||||
return_value_policy policy = return_value_policy::automatic;
|
return_value_policy policy = return_value_policy::automatic;
|
||||||
/// True if name == '__init__'
|
/// True if name == '__init__'
|
||||||
|
@ -86,12 +87,6 @@ private:
|
||||||
PyObject *sibling = nullptr;
|
PyObject *sibling = nullptr;
|
||||||
/// Pointer to next overload
|
/// Pointer to next overload
|
||||||
function_entry *next = nullptr;
|
function_entry *next = nullptr;
|
||||||
|
|
||||||
~function_entry() {
|
|
||||||
delete def;
|
|
||||||
if (free)
|
|
||||||
free(data);
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
function_entry *m_entry;
|
function_entry *m_entry;
|
||||||
|
@ -115,59 +110,56 @@ private:
|
||||||
(void) unused;
|
(void) unused;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void process_extra(const char *doc, function_entry *entry) { entry->doc = doc; }
|
static void process_extra(const char *doc, function_entry *entry) { entry->doc = (char *) doc; }
|
||||||
static void process_extra(const pybind11::doc &d, function_entry *entry) { entry->doc = d.value; }
|
static void process_extra(const pybind11::doc &d, function_entry *entry) { entry->doc = (char *) d.value; }
|
||||||
static void process_extra(const pybind11::name &n, function_entry *entry) { entry->name = n.value; }
|
static void process_extra(const pybind11::name &n, function_entry *entry) { entry->name = (char *) n.value; }
|
||||||
static void process_extra(const pybind11::return_value_policy p, function_entry *entry) { entry->policy = p; }
|
static void process_extra(const pybind11::return_value_policy p, function_entry *entry) { entry->policy = p; }
|
||||||
static void process_extra(const pybind11::sibling s, function_entry *entry) { entry->sibling = s.value; }
|
static void process_extra(const pybind11::sibling s, function_entry *entry) { entry->sibling = s.value; }
|
||||||
static void process_extra(const pybind11::is_method &m, function_entry *entry) { entry->class_ = m.class_; }
|
static void process_extra(const pybind11::is_method &m, function_entry *entry) { entry->class_ = m.class_; }
|
||||||
static void process_extra(const pybind11::arg &a, function_entry *entry) {
|
static void process_extra(const pybind11::arg &a, function_entry *entry) {
|
||||||
if (entry->class_ && entry->args.empty())
|
if (entry->class_ && entry->args.empty())
|
||||||
entry->args.emplace_back(strdup("self"), nullptr, nullptr);
|
entry->args.emplace_back("self", nullptr, nullptr);
|
||||||
entry->args.emplace_back(strdup(a.name), nullptr, nullptr);
|
entry->args.emplace_back(a.name, nullptr, nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
static void process_extra(const pybind11::arg_t<T> &a, function_entry *entry) {
|
static void process_extra(const pybind11::arg_t<T> &a, function_entry *entry) {
|
||||||
if (entry->class_ && entry->args.empty())
|
if (entry->class_ && entry->args.empty())
|
||||||
entry->args.emplace_back(strdup("self"), nullptr, nullptr);
|
entry->args.emplace_back("self", nullptr, nullptr);
|
||||||
|
|
||||||
PyObject *obj = detail::type_caster<typename detail::decay<T>::type>::cast(
|
PyObject *obj = detail::type_caster<typename detail::decay<T>::type>::cast(
|
||||||
a.value, return_value_policy::automatic, nullptr);
|
a.value, return_value_policy::automatic, nullptr);
|
||||||
|
|
||||||
entry->args.emplace_back(
|
if (obj == nullptr)
|
||||||
strdup(a.name),
|
throw std::runtime_error("arg(): could not convert default keyword "
|
||||||
strdup(a.value_str != nullptr ? a.value_str :
|
"argument into a Python object (type not "
|
||||||
(const char *) ((object) handle(obj).attr("__repr__")).call().str()),
|
"registered yet?)");
|
||||||
obj
|
|
||||||
);
|
entry->args.emplace_back(a.name, a.descr, obj);
|
||||||
}
|
}
|
||||||
public:
|
public:
|
||||||
cpp_function() { }
|
cpp_function() { }
|
||||||
|
|
||||||
/// Vanilla function pointers
|
/// Vanilla function pointers
|
||||||
template <typename Return, typename... Arg, typename... Extra>
|
template <typename Return, typename... Args, typename... Extra>
|
||||||
cpp_function(Return (*f)(Arg...), Extra&&... extra) {
|
cpp_function(Return (*f)(Args...), Extra&&... extra) {
|
||||||
|
using detail::descr;
|
||||||
m_entry = new function_entry();
|
m_entry = new function_entry();
|
||||||
m_entry->data = (void *) f;
|
m_entry->data = (void *) f;
|
||||||
|
|
||||||
typedef arg_value_caster<Arg...> cast_in;
|
typedef arg_value_caster<Args...> cast_in;
|
||||||
typedef return_value_caster<Return> cast_out;
|
typedef return_value_caster<Return> cast_out;
|
||||||
|
|
||||||
m_entry->impl = [](function_entry *entry, PyObject *pyArgs, PyObject *parent) -> PyObject * {
|
m_entry->impl = [](function_entry *entry, PyObject *pyArgs, PyObject *parent) -> PyObject * {
|
||||||
cast_in args;
|
cast_in args;
|
||||||
if (!args.load(pyArgs, true))
|
if (!args.load(pyArgs, true))
|
||||||
return (PyObject *) 1; /* Special return code: try next overload */
|
return (PyObject *) 1; /* Special return code: try next overload */
|
||||||
return cast_out::cast(args.template call<Return>((Return (*)(Arg...)) entry->data), entry->policy, parent);
|
return cast_out::cast(args.template call<Return>((Return (*)(Args...)) entry->data), entry->policy, parent);
|
||||||
};
|
};
|
||||||
|
|
||||||
process_extras(std::make_tuple(std::forward<Extra>(extra)...), m_entry);
|
process_extras(std::make_tuple(std::forward<Extra>(extra)...), m_entry);
|
||||||
|
PYBIND11_DESCR signature = cast_in::name() + detail::_(" -> ") + cast_out::name();
|
||||||
detail::descr d = cast_in::name(m_entry->args);
|
initialize(signature.text(), signature.types(), sizeof...(Args));
|
||||||
d += " -> ";
|
|
||||||
d += std::move(cast_out::name());
|
|
||||||
|
|
||||||
initialize(d, sizeof...(Arg));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Delegating helper constructor to deal with lambda functions
|
/// Delegating helper constructor to deal with lambda functions
|
||||||
|
@ -197,21 +189,21 @@ public:
|
||||||
|
|
||||||
private:
|
private:
|
||||||
/// Functors, lambda functions, etc.
|
/// Functors, lambda functions, etc.
|
||||||
template <typename Func, typename Return, typename... Arg, typename... Extra>
|
template <typename Func, typename Return, typename... Args, typename... Extra>
|
||||||
void initialize(Func &&f, Return (*)(Arg...), Extra&&... extra) {
|
void initialize(Func &&f, Return (*)(Args...), Extra&&... extra) {
|
||||||
struct capture {
|
using detail::descr;
|
||||||
typename std::remove_reference<Func>::type f;
|
|
||||||
};
|
struct capture { typename std::remove_reference<Func>::type f; };
|
||||||
|
|
||||||
m_entry = new function_entry();
|
m_entry = new function_entry();
|
||||||
m_entry->data = new capture { std::forward<Func>(f) };
|
m_entry->data = new capture { std::forward<Func>(f) };
|
||||||
|
|
||||||
if (!std::is_trivially_destructible<Func>::value)
|
if (!std::is_trivially_destructible<Func>::value)
|
||||||
m_entry->free = [](void *ptr) { delete (capture *) ptr; };
|
m_entry->free_data = [](void *ptr) { delete (capture *) ptr; };
|
||||||
else
|
else
|
||||||
m_entry->free = operator delete;
|
m_entry->free_data = operator delete;
|
||||||
|
|
||||||
typedef arg_value_caster<Arg...> cast_in;
|
typedef arg_value_caster<Args...> cast_in;
|
||||||
typedef return_value_caster<Return> cast_out;
|
typedef return_value_caster<Return> cast_out;
|
||||||
|
|
||||||
m_entry->impl = [](function_entry *entry, PyObject *pyArgs, PyObject *parent) -> PyObject *{
|
m_entry->impl = [](function_entry *entry, PyObject *pyArgs, PyObject *parent) -> PyObject *{
|
||||||
|
@ -222,12 +214,8 @@ private:
|
||||||
};
|
};
|
||||||
|
|
||||||
process_extras(std::make_tuple(std::forward<Extra>(extra)...), m_entry);
|
process_extras(std::make_tuple(std::forward<Extra>(extra)...), m_entry);
|
||||||
|
PYBIND11_DESCR signature = cast_in::name() + detail::_(" -> ") + cast_out::name();
|
||||||
detail::descr d = cast_in::name(m_entry->args);
|
initialize(signature.text(), signature.types(), sizeof...(Args));
|
||||||
d += " -> ";
|
|
||||||
d += std::move(cast_out::name());
|
|
||||||
|
|
||||||
initialize(d, sizeof...(Arg));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *dispatcher(PyObject *self, PyObject *args, PyObject *kwargs) {
|
static PyObject *dispatcher(PyObject *self, PyObject *args, PyObject *kwargs) {
|
||||||
|
@ -250,17 +238,17 @@ private:
|
||||||
PyTuple_SET_ITEM(args_, i, item);
|
PyTuple_SET_ITEM(args_, i, item);
|
||||||
}
|
}
|
||||||
int arg_ctr = 0;
|
int arg_ctr = 0;
|
||||||
for (auto const &it : it->args) {
|
for (auto const &it2 : it->args) {
|
||||||
int index = arg_ctr++;
|
int index = arg_ctr++;
|
||||||
if (PyTuple_GET_ITEM(args_, index))
|
if (PyTuple_GET_ITEM(args_, index))
|
||||||
continue;
|
continue;
|
||||||
PyObject *value = nullptr;
|
PyObject *value = nullptr;
|
||||||
if (kwargs)
|
if (kwargs)
|
||||||
value = PyDict_GetItemString(kwargs, it.name);
|
value = PyDict_GetItemString(kwargs, it2.name);
|
||||||
if (value)
|
if (value)
|
||||||
kwargs_consumed++;
|
kwargs_consumed++;
|
||||||
else if (it.value)
|
else if (it2.value)
|
||||||
value = it.value;
|
value = it2.value;
|
||||||
if (value) {
|
if (value) {
|
||||||
Py_INCREF(value);
|
Py_INCREF(value);
|
||||||
PyTuple_SET_ITEM(args_, index, value);
|
PyTuple_SET_ITEM(args_, index, value);
|
||||||
|
@ -301,7 +289,7 @@ private:
|
||||||
int ctr = 0;
|
int ctr = 0;
|
||||||
for (function_entry *it2 = overloads; it2 != nullptr; it2 = it2->next) {
|
for (function_entry *it2 = overloads; it2 != nullptr; it2 = it2->next) {
|
||||||
msg += " "+ std::to_string(++ctr) + ". ";
|
msg += " "+ std::to_string(++ctr) + ". ";
|
||||||
//msg += it2->signature; XXX
|
msg += it2->signature;
|
||||||
msg += "\n";
|
msg += "\n";
|
||||||
}
|
}
|
||||||
PyErr_SetString(PyExc_TypeError, msg.c_str());
|
PyErr_SetString(PyExc_TypeError, msg.c_str());
|
||||||
|
@ -309,7 +297,7 @@ private:
|
||||||
} else if (result == nullptr) {
|
} else if (result == nullptr) {
|
||||||
std::string msg = "Unable to convert function return value to a "
|
std::string msg = "Unable to convert function return value to a "
|
||||||
"Python type! The signature was\n\t";
|
"Python type! The signature was\n\t";
|
||||||
//msg += it->signature;
|
msg += it->signature;
|
||||||
PyErr_SetString(PyExc_TypeError, msg.c_str());
|
PyErr_SetString(PyExc_TypeError, msg.c_str());
|
||||||
return nullptr;
|
return nullptr;
|
||||||
} else {
|
} else {
|
||||||
|
@ -327,18 +315,88 @@ private:
|
||||||
static void destruct(function_entry *entry) {
|
static void destruct(function_entry *entry) {
|
||||||
while (entry) {
|
while (entry) {
|
||||||
function_entry *next = entry->next;
|
function_entry *next = entry->next;
|
||||||
|
delete entry->def;
|
||||||
|
if (entry->free_data)
|
||||||
|
entry->free_data(entry->data);
|
||||||
|
std::free((char *) entry->name);
|
||||||
|
std::free((char *) entry->doc);
|
||||||
|
std::free((char *) entry->signature);
|
||||||
|
for (auto &arg: entry->args) {
|
||||||
|
std::free((char *) arg.name);
|
||||||
|
std::free((char *) arg.descr);
|
||||||
|
Py_XDECREF(arg.value);
|
||||||
|
}
|
||||||
delete entry;
|
delete entry;
|
||||||
entry = next;
|
entry = next;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void initialize(const detail::descr &, int args) {
|
void initialize(const char *text, const std::type_info * const * types, int args) {
|
||||||
if (m_entry->name == nullptr)
|
/* Create copies of all referenced C-style strings */
|
||||||
m_entry->name = "";
|
m_entry->name = strdup(m_entry->name ? m_entry->name : "");
|
||||||
|
if (m_entry->doc) m_entry->doc = strdup(m_entry->doc);
|
||||||
|
for (auto &a: m_entry->args) {
|
||||||
|
if (a.name)
|
||||||
|
a.name = strdup(a.name);
|
||||||
|
if (a.descr)
|
||||||
|
a.descr = strdup(a.descr);
|
||||||
|
else if (a.value)
|
||||||
|
a.descr = strdup(((object) handle(a.value).attr("__repr__")).call().str());
|
||||||
|
}
|
||||||
|
auto const ®istered_types = detail::get_internals().registered_types;
|
||||||
|
|
||||||
|
/* Generate a proper function signature */
|
||||||
|
std::string signature;
|
||||||
|
size_t type_depth = 0, char_index = 0, type_index = 0, arg_index = 0;
|
||||||
|
while (true) {
|
||||||
|
char c = text[char_index++];
|
||||||
|
if (c == '\0')
|
||||||
|
break;
|
||||||
|
|
||||||
|
if (c == '{') {
|
||||||
|
if (type_depth == 1 && arg_index < m_entry->args.size()) {
|
||||||
|
signature += m_entry->args[arg_index].name;
|
||||||
|
signature += " : ";
|
||||||
|
}
|
||||||
|
++type_depth;
|
||||||
|
} else if (c == '}') {
|
||||||
|
--type_depth;
|
||||||
|
if (type_depth == 1 && arg_index < m_entry->args.size()) {
|
||||||
|
if (m_entry->args[arg_index].descr) {
|
||||||
|
signature += " = ";
|
||||||
|
signature += m_entry->args[arg_index].descr;
|
||||||
|
}
|
||||||
|
arg_index++;
|
||||||
|
}
|
||||||
|
} else if (c == '%') {
|
||||||
|
const std::type_info *t = types[type_index++];
|
||||||
|
if (!t)
|
||||||
|
throw std::runtime_error("Internal error while generating type signature (1)");
|
||||||
|
auto it = registered_types.find(t);
|
||||||
|
if (it != registered_types.end()) {
|
||||||
|
signature += it->second.type->tp_name;
|
||||||
|
} else {
|
||||||
|
std::string tname(t->name());
|
||||||
|
detail::clean_type_id(tname);
|
||||||
|
signature += tname;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
signature += c;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (type_depth != 0 && types[type_index ] != nullptr)
|
||||||
|
throw std::runtime_error("Internal error while generating type signature (2)");
|
||||||
|
|
||||||
|
#if !defined(PYBIND11_CPP14)
|
||||||
|
delete[] types;
|
||||||
|
delete[] text;
|
||||||
|
#endif
|
||||||
|
|
||||||
#if PY_MAJOR_VERSION < 3
|
#if PY_MAJOR_VERSION < 3
|
||||||
if (strcmp(m_entry->name, "__next__") == 0)
|
if (strcmp(m_entry->name, "__next__") == 0) {
|
||||||
m_entry->name = "next";
|
free(m_entry->name);
|
||||||
|
m_entry->name = strdup("next");
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (!m_entry->args.empty() && (int) m_entry->args.size() != args)
|
if (!m_entry->args.empty() && (int) m_entry->args.size() != args)
|
||||||
|
@ -348,7 +406,8 @@ private:
|
||||||
" pybind11::arg entries were specified!");
|
" pybind11::arg entries were specified!");
|
||||||
|
|
||||||
m_entry->is_constructor = !strcmp(m_entry->name, "__init__");
|
m_entry->is_constructor = !strcmp(m_entry->name, "__init__");
|
||||||
//m_entry->signature = descr.str(); // XXX
|
m_entry->signature = strdup(signature.c_str());
|
||||||
|
m_entry->args.shrink_to_fit();
|
||||||
|
|
||||||
#if PY_MAJOR_VERSION < 3
|
#if PY_MAJOR_VERSION < 3
|
||||||
if (m_entry->sibling && PyMethod_Check(m_entry->sibling))
|
if (m_entry->sibling && PyMethod_Check(m_entry->sibling))
|
||||||
|
@ -360,10 +419,10 @@ private:
|
||||||
capsule entry_capsule(PyCFunction_GetSelf(m_entry->sibling), true);
|
capsule entry_capsule(PyCFunction_GetSelf(m_entry->sibling), true);
|
||||||
s_entry = (function_entry *) entry_capsule;
|
s_entry = (function_entry *) entry_capsule;
|
||||||
if (s_entry->class_ != m_entry->class_)
|
if (s_entry->class_ != m_entry->class_)
|
||||||
s_entry = nullptr; /* Method override */
|
s_entry = nullptr; /* Overridden method, don't append to parent class overloads */
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!s_entry) {
|
if (!s_entry) { /* No existing overload was found, create a function object */
|
||||||
m_entry->def = new PyMethodDef();
|
m_entry->def = new PyMethodDef();
|
||||||
memset(m_entry->def, 0, sizeof(PyMethodDef));
|
memset(m_entry->def, 0, sizeof(PyMethodDef));
|
||||||
m_entry->def->ml_name = m_entry->name;
|
m_entry->def->ml_name = m_entry->name;
|
||||||
|
@ -385,19 +444,24 @@ private:
|
||||||
std::string signatures;
|
std::string signatures;
|
||||||
int index = 0;
|
int index = 0;
|
||||||
function_entry *it = entry;
|
function_entry *it = entry;
|
||||||
while (it) { /* Create pydoc entry */
|
while (it) { /* Create pydoc entry including all function signatures and docstrings of the overload chain */
|
||||||
if (s_entry)
|
if (s_entry)
|
||||||
signatures += std::to_string(++index) + ". ";
|
signatures += std::to_string(++index) + ". ";
|
||||||
//signatures += "Signature : " + std::string(it->signature) + "\n"; XXX
|
signatures += "Signature : ";
|
||||||
if (it->doc && strlen(it->doc) > 0)
|
signatures += it->signature;
|
||||||
signatures += "\n" + std::string(it->doc) + "\n";
|
signatures += "\n";
|
||||||
|
if (it->doc && strlen(it->doc) > 0) {
|
||||||
|
signatures += "\n";
|
||||||
|
signatures += it->doc;
|
||||||
|
signatures += "\n";
|
||||||
|
}
|
||||||
if (it->next)
|
if (it->next)
|
||||||
signatures += "\n";
|
signatures += "\n";
|
||||||
it = it->next;
|
it = it->next;
|
||||||
}
|
}
|
||||||
PyCFunctionObject *func = (PyCFunctionObject *) m_ptr;
|
PyCFunctionObject *func = (PyCFunctionObject *) m_ptr;
|
||||||
if (func->m_ml->ml_doc)
|
if (func->m_ml->ml_doc)
|
||||||
std::free((char *) func->m_ml->ml_doc);
|
free((char *) func->m_ml->ml_doc);
|
||||||
func->m_ml->ml_doc = strdup(signatures.c_str());
|
func->m_ml->ml_doc = strdup(signatures.c_str());
|
||||||
if (entry->class_) {
|
if (entry->class_) {
|
||||||
#if PY_MAJOR_VERSION >= 3
|
#if PY_MAJOR_VERSION >= 3
|
||||||
|
@ -510,7 +574,7 @@ public:
|
||||||
type->ht_type.tp_base = (PyTypeObject *) parent;
|
type->ht_type.tp_base = (PyTypeObject *) parent;
|
||||||
if (doc) {
|
if (doc) {
|
||||||
size_t size = strlen(doc)+1;
|
size_t size = strlen(doc)+1;
|
||||||
type->ht_type.tp_doc = (char *)PyObject_MALLOC(size);
|
type->ht_type.tp_doc = (char *) PyObject_MALLOC(size);
|
||||||
memcpy((void *) type->ht_type.tp_doc, doc, size);
|
memcpy((void *) type->ht_type.tp_doc, doc, size);
|
||||||
}
|
}
|
||||||
Py_XINCREF(parent);
|
Py_XINCREF(parent);
|
||||||
|
@ -522,7 +586,8 @@ public:
|
||||||
/* Needed by pydoc */
|
/* Needed by pydoc */
|
||||||
attr("__module__") = scope_name;
|
attr("__module__") = scope_name;
|
||||||
|
|
||||||
auto &type_info = detail::get_internals().registered_types[tinfo];
|
auto ®istered_types = get_internals().registered_types;
|
||||||
|
auto &type_info = registered_types[tinfo];
|
||||||
type_info.type = (PyTypeObject *) m_ptr;
|
type_info.type = (PyTypeObject *) m_ptr;
|
||||||
type_info.type_size = type_size;
|
type_info.type_size = type_size;
|
||||||
type_info.init_holder = init_holder;
|
type_info.init_holder = init_holder;
|
||||||
|
|
|
@ -45,7 +45,7 @@ public:
|
||||||
static PyObject *cast(const type &src, return_value_policy policy, PyObject *parent) {
|
static PyObject *cast(const type &src, return_value_policy policy, PyObject *parent) {
|
||||||
object list(PyList_New(src.size()), false);
|
object list(PyList_New(src.size()), false);
|
||||||
if (!list)
|
if (!list)
|
||||||
return nullptr;
|
return nullptr;
|
||||||
size_t index = 0;
|
size_t index = 0;
|
||||||
for (auto const &value: src) {
|
for (auto const &value: src) {
|
||||||
object value_ (value_conv::cast(value, policy, parent), false);
|
object value_ (value_conv::cast(value, policy, parent), false);
|
||||||
|
@ -55,23 +55,23 @@ public:
|
||||||
}
|
}
|
||||||
return list.release();
|
return list.release();
|
||||||
}
|
}
|
||||||
PYBIND11_TYPE_CASTER(type, detail::descr("list<") + value_conv::name() + detail::descr(">"));
|
PYBIND11_TYPE_CASTER(type, _("list<") + value_conv::name() + _(">"));
|
||||||
};
|
};
|
||||||
|
|
||||||
template <typename Value, typename Compare, typename Alloc> struct type_caster<std::set<Value, Compare, Alloc>> {
|
template <typename Key, typename Compare, typename Alloc> struct type_caster<std::set<Key, Compare, Alloc>> {
|
||||||
typedef std::set<Value, Compare, Alloc> type;
|
typedef std::set<Key, Compare, Alloc> type;
|
||||||
typedef type_caster<Value> value_conv;
|
typedef type_caster<Key> key_conv;
|
||||||
public:
|
public:
|
||||||
bool load(PyObject *src, bool convert) {
|
bool load(PyObject *src, bool convert) {
|
||||||
pybind11::set s(src, true);
|
pybind11::set s(src, true);
|
||||||
if (!s.check())
|
if (!s.check())
|
||||||
return false;
|
return false;
|
||||||
value.clear();
|
value.clear();
|
||||||
value_conv conv;
|
key_conv conv;
|
||||||
for (const object &o: s) {
|
for (const object &o: s) {
|
||||||
if (!conv.load((PyObject *) o.ptr(), convert))
|
if (!conv.load((PyObject *) o.ptr(), convert))
|
||||||
return false;
|
return false;
|
||||||
value.insert((Value) conv);
|
value.insert((Key) conv);
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -79,15 +79,15 @@ public:
|
||||||
static PyObject *cast(const type &src, return_value_policy policy, PyObject *parent) {
|
static PyObject *cast(const type &src, return_value_policy policy, PyObject *parent) {
|
||||||
object set(PySet_New(nullptr), false);
|
object set(PySet_New(nullptr), false);
|
||||||
if (!set)
|
if (!set)
|
||||||
return nullptr;
|
return nullptr;
|
||||||
for (auto const &value: src) {
|
for (auto const &value: src) {
|
||||||
object value_(value_conv::cast(value, policy, parent), false);
|
object value_(key_conv::cast(value, policy, parent), false);
|
||||||
if (!value_ || PySet_Add(set.ptr(), value_.ptr()) != 0)
|
if (!value_ || PySet_Add(set.ptr(), value_.ptr()) != 0)
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
return set.release();
|
return set.release();
|
||||||
}
|
}
|
||||||
PYBIND11_TYPE_CASTER(type, detail::descr("set<") + value_conv::name() + detail::descr(">"));
|
PYBIND11_TYPE_CASTER(type, _("set<") + key_conv::name() + _(">"));
|
||||||
};
|
};
|
||||||
|
|
||||||
template <typename Key, typename Value, typename Compare, typename Alloc> struct type_caster<std::map<Key, Value, Compare, Alloc>> {
|
template <typename Key, typename Value, typename Compare, typename Alloc> struct type_caster<std::map<Key, Value, Compare, Alloc>> {
|
||||||
|
@ -116,7 +116,7 @@ public:
|
||||||
static PyObject *cast(const type &src, return_value_policy policy, PyObject *parent) {
|
static PyObject *cast(const type &src, return_value_policy policy, PyObject *parent) {
|
||||||
object dict(PyDict_New(), false);
|
object dict(PyDict_New(), false);
|
||||||
if (!dict)
|
if (!dict)
|
||||||
return nullptr;
|
return nullptr;
|
||||||
for (auto const &kv: src) {
|
for (auto const &kv: src) {
|
||||||
object key(key_conv::cast(kv.first, policy, parent), false);
|
object key(key_conv::cast(kv.first, policy, parent), false);
|
||||||
object value(value_conv::cast(kv.second, policy, parent), false);
|
object value(value_conv::cast(kv.second, policy, parent), false);
|
||||||
|
@ -126,7 +126,7 @@ public:
|
||||||
return dict.release();
|
return dict.release();
|
||||||
}
|
}
|
||||||
|
|
||||||
PYBIND11_TYPE_CASTER(type, detail::descr("dict<") + key_conv::name() + detail::descr(", ") + value_conv::name() + detail::descr(">"));
|
PYBIND11_TYPE_CASTER(type, _("dict<") + key_conv::name() + _(", ") + value_conv::name() + _(">"));
|
||||||
};
|
};
|
||||||
|
|
||||||
NAMESPACE_END(detail)
|
NAMESPACE_END(detail)
|
||||||
|
|
|
@ -33,11 +33,11 @@ inline void clean_type_id(std::string &name) {
|
||||||
abi::__cxa_demangle(name.c_str(), nullptr, nullptr, &status), std::free };
|
abi::__cxa_demangle(name.c_str(), nullptr, nullptr, &status), std::free };
|
||||||
if (status == 0)
|
if (status == 0)
|
||||||
name = res.get();
|
name = res.get();
|
||||||
#else
|
#else
|
||||||
detail::erase_all(name, "class ");
|
detail::erase_all(name, "class ");
|
||||||
detail::erase_all(name, "struct ");
|
detail::erase_all(name, "struct ");
|
||||||
detail::erase_all(name, "enum ");
|
detail::erase_all(name, "enum ");
|
||||||
#endif
|
#endif
|
||||||
detail::erase_all(name, "pybind11::");
|
detail::erase_all(name, "pybind11::");
|
||||||
}
|
}
|
||||||
NAMESPACE_END(detail)
|
NAMESPACE_END(detail)
|
||||||
|
|
Loading…
Reference in New Issue