diff options
| author | Sebastian Berg <sebastian@sipsolutions.net> | 2020-03-11 12:26:14 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-03-11 12:26:14 -0700 |
| commit | ef0957302c6383524448cef2cd4cf18c7da18ea8 (patch) | |
| tree | 7ff353097f16e169f935ac6ff19f23c5ad36a350 | |
| parent | b074b21c326ecaa6b6519fc7dfcf54fa4e4457af (diff) | |
| download | numpy-ef0957302c6383524448cef2cd4cf18c7da18ea8.tar.gz | |
NEP 41: First steps towards improved Datatype Support (gh-15506)
This NEP is supposed to:
1. Motivate the whole DType change and lay out a rough plan.
2. Clarify a few mainly high level decision/plans.
3. Get inertia on starting to implement espeically a DTypeMeta class in C, and slowly add new private API working towards Phase II, which is planned t be better specified by NEP 42 and 43.
Full list of squashed commits (including suggestions below):
* NEP: Create NEP41, proposing a rough plan for new DTypes
* Try to clarify how datatypes are "natural" compared to array likes and clean up API breakage section
* Fix references (mostly at least)
* Add a first draft of a few examples.
* Reorganize examples as per suggestion by Marten and add ufunc loop note
* Make a pass on the first chunk and number the later stuff to match
* Some minaor adjustments
* Add, probably silly, picture.
* Add pngs, since it is probably easier to render...
* Small changes, mainly to see if I can make it render...
* Apply suggestions from code review
Thanks @crusaderky especially for type reading and all the reference, etc. issues!
Co-Authored-By: crusaderky <crusaderky@gmail.com>
Co-Authored-By: Maximilian Roos <5635139+max-sixty@users.noreply.github.com>
* Tiny fixes, mainly fix title levels hopefully
It seems I am not allowd to skip a title level in one point
but not another.
* Small changes/fixups
* Reorganize sections to better fit template.
* Further swapping of Detailed Information part.
* Make motivation clear and mention user impact section
the user impact section is more useful than the actual motivation
section.... since the motivation is more technical in nature
* Small editing of the first few sections
* Some further small type-edits for the later sections
* Add a small paragraph mentioning the intention of a fallback
* Smaller changes, rework phases at beginning of scopes section
* Mention which NEP is to define which bullet point in Phase II
* Consolidate point 1+2 into a single point and clarify the incompatible change
* Mention the change of how methods are defined in the backcompat section
* Add a note at the top of the NEP (will need to be links to other NEPs)
This note will almost identiclaly be added to the other NEPs then..
* Fixups mainly based on comments from Ross (large chunks are directly using his suggestions)
* Apply suggestions from code review
Co-Authored-By: Eric Wieser <wieser.eric@gmail.com>
* Incorporate most of Erics comments (which were not already suggestions)
* Update doc/neps/nep-0041-improved-dtype-support.rst
Co-Authored-By: Eric Wieser <wieser.eric@gmail.com>
* Apply suggestions from code review
Co-Authored-By: Eric Wieser <wieser.eric@gmail.com>
* Small reformatting, fix authors and add drafty acknowledgments
Ross does not want authorship, so he has to suffer through this ;).
Co-authored-by: crusaderky <crusaderky@gmail.com>
Co-authored-by: Maximilian Roos <5635139+max-sixty@users.noreply.github.com>
Co-authored-by: Eric Wieser <wieser.eric@gmail.com>
| -rw-r--r-- | doc/neps/_static/nep-0041-mindmap.svg | 3640 | ||||
| -rw-r--r-- | doc/neps/nep-0041-improved-dtype-support.rst | 730 |
2 files changed, 4370 insertions, 0 deletions
diff --git a/doc/neps/_static/nep-0041-mindmap.svg b/doc/neps/_static/nep-0041-mindmap.svg new file mode 100644 index 000000000..2b396f385 --- /dev/null +++ b/doc/neps/_static/nep-0041-mindmap.svg @@ -0,0 +1,3640 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="1299pt" + height="720pt" + viewBox="0 0 1299 720" + version="1.1" + id="svg1387" + sodipodi:docname="mindmap.svg" + inkscape:version="0.92.4 (5da689c313, 2019-01-14)"> + <metadata + id="metadata1391"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + </cc:Work> + </rdf:RDF> + </metadata> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="3440" + inkscape:window-height="1376" + id="namedview1389" + showgrid="false" + inkscape:zoom="0.8221709" + inkscape:cx="902.39885" + inkscape:cy="314.46198" + inkscape:window-x="0" + inkscape:window-y="27" + inkscape:window-maximized="1" + inkscape:current-layer="surface913125" /> + <defs + id="defs352"> + <g + id="g350"> + <symbol + overflow="visible" + id="glyph0-0"> + <path + style="stroke:none;" + d="M 0.953125 2.8125 L 0.953125 -10.125 L 8.0625 -10.125 L 8.0625 2.8125 Z M 1.765625 2 L 7.25 2 L 7.25 -9.296875 L 1.765625 -9.296875 Z M 1.765625 2 " + id="path2" /> + </symbol> + <symbol + overflow="visible" + id="glyph0-1"> + <path + style="stroke:none;" + d="M 2.890625 -8.84375 L 2.890625 -1.15625 L 4.640625 -1.15625 C 6.109375 -1.15625 7.1875 -1.460938 7.875 -2.078125 C 8.5625 -2.703125 8.90625 -3.679688 8.90625 -5.015625 C 8.90625 -6.335938 8.5625 -7.304688 7.875 -7.921875 C 7.1875 -8.535156 6.109375 -8.84375 4.640625 -8.84375 Z M 1.4375 -10 L 4.40625 -10 C 6.476562 -10 8 -9.59375 8.96875 -8.78125 C 9.945312 -7.976562 10.4375 -6.722656 10.4375 -5.015625 C 10.4375 -3.296875 9.945312 -2.03125 8.96875 -1.21875 C 8 -0.40625 6.476562 0 4.40625 0 L 1.4375 0 Z M 1.4375 -10 " + id="path5" /> + </symbol> + <symbol + overflow="visible" + id="glyph0-2"> + <path + style="stroke:none;" + d="M -0.046875 -10 L 9 -10 L 9 -8.8125 L 5.203125 -8.8125 L 5.203125 0 L 3.75 0 L 3.75 -8.8125 L -0.046875 -8.8125 Z M -0.046875 -10 " + id="path8" /> + </symbol> + <symbol + overflow="visible" + id="glyph0-3"> + <path + style="stroke:none;" + d="M 4.71875 0.703125 C 4.34375 1.660156 3.976562 2.28125 3.625 2.5625 C 3.28125 2.851562 2.8125 3 2.21875 3 L 1.15625 3 L 1.15625 1.921875 L 1.9375 1.921875 C 2.300781 1.921875 2.582031 1.832031 2.78125 1.65625 C 2.976562 1.488281 3.203125 1.085938 3.453125 0.453125 L 3.6875 -0.140625 L 0.4375 -8 L 1.828125 -8 L 4.34375 -1.75 L 6.84375 -8 L 8.25 -8 Z M 4.71875 0.703125 " + id="path11" /> + </symbol> + <symbol + overflow="visible" + id="glyph0-4"> + <path + style="stroke:none;" + d="M 2.65625 -1.375 L 2.65625 3 L 1.328125 3 L 1.328125 -8 L 2.65625 -8 L 2.65625 -6.8125 C 2.9375 -7.21875 3.285156 -7.515625 3.703125 -7.703125 C 4.128906 -7.898438 4.632812 -8 5.21875 -8 C 6.195312 -8 6.988281 -7.628906 7.59375 -6.890625 C 8.207031 -6.160156 8.515625 -5.195312 8.515625 -4 C 8.515625 -2.800781 8.207031 -1.832031 7.59375 -1.09375 C 6.988281 -0.363281 6.195312 0 5.21875 0 C 4.632812 0 4.128906 -0.109375 3.703125 -0.328125 C 3.285156 -0.554688 2.9375 -0.90625 2.65625 -1.375 Z M 7.140625 -4.09375 C 7.140625 -5.03125 6.941406 -5.765625 6.546875 -6.296875 C 6.148438 -6.835938 5.601562 -7.109375 4.90625 -7.109375 C 4.207031 -7.109375 3.65625 -6.835938 3.25 -6.296875 C 2.851562 -5.765625 2.65625 -5.03125 2.65625 -4.09375 C 2.65625 -3.15625 2.851562 -2.414062 3.25 -1.875 C 3.65625 -1.34375 4.207031 -1.078125 4.90625 -1.078125 C 5.601562 -1.078125 6.148438 -1.34375 6.546875 -1.875 C 6.941406 -2.414062 7.140625 -3.15625 7.140625 -4.09375 Z M 7.140625 -4.09375 " + id="path14" /> + </symbol> + <symbol + overflow="visible" + id="glyph0-5"> + <path + style="stroke:none;" + d="M 8.25 -4.5625 L 8.25 -4 L 2.1875 -4 C 2.238281 -3.050781 2.507812 -2.328125 3 -1.828125 C 3.488281 -1.335938 4.171875 -1.09375 5.046875 -1.09375 C 5.554688 -1.09375 6.046875 -1.15625 6.515625 -1.28125 C 6.992188 -1.414062 7.46875 -1.613281 7.9375 -1.875 L 7.9375 -0.609375 C 7.46875 -0.421875 6.984375 -0.269531 6.484375 -0.15625 C 5.984375 -0.0507812 5.476562 0 4.96875 0 C 3.6875 0 2.671875 -0.351562 1.921875 -1.0625 C 1.179688 -1.769531 0.8125 -2.726562 0.8125 -3.9375 C 0.8125 -5.1875 1.164062 -6.175781 1.875 -6.90625 C 2.582031 -7.632812 3.539062 -8 4.75 -8 C 5.820312 -8 6.671875 -7.691406 7.296875 -7.078125 C 7.929688 -6.460938 8.25 -5.625 8.25 -4.5625 Z M 6.921875 -5 C 6.910156 -5.582031 6.707031 -6.046875 6.3125 -6.390625 C 5.925781 -6.734375 5.40625 -6.90625 4.75 -6.90625 C 4.019531 -6.90625 3.429688 -6.738281 2.984375 -6.40625 C 2.546875 -6.082031 2.296875 -5.613281 2.234375 -5 Z M 6.921875 -5 " + id="path17" /> + </symbol> + <symbol + overflow="visible" + id="glyph0-6"> + <path + style="stroke:none;" + d="" + id="path20" /> + </symbol> + <symbol + overflow="visible" + id="glyph0-7"> + <path + style="stroke:none;" + d="M 1.4375 -10 L 2.890625 -10 L 2.890625 -6 L 8.140625 -6 L 8.140625 -10 L 9.59375 -10 L 9.59375 0 L 8.140625 0 L 8.140625 -4.8125 L 2.890625 -4.8125 L 2.890625 0 L 1.4375 0 Z M 1.4375 -10 " + id="path23" /> + </symbol> + <symbol + overflow="visible" + id="glyph0-8"> + <path + style="stroke:none;" + d="M 1.375 -8 L 2.703125 -8 L 2.703125 0 L 1.375 0 Z M 1.375 -11 L 2.703125 -11 L 2.703125 -9.375 L 1.375 -9.375 Z M 1.375 -11 " + id="path26" /> + </symbol> + <symbol + overflow="visible" + id="glyph0-9"> + <path + style="stroke:none;" + d="M 6.03125 -6.796875 C 5.882812 -6.878906 5.722656 -6.941406 5.546875 -6.984375 C 5.367188 -7.023438 5.175781 -7.046875 4.96875 -7.046875 C 4.226562 -7.046875 3.65625 -6.800781 3.25 -6.3125 C 2.851562 -5.832031 2.65625 -5.132812 2.65625 -4.21875 L 2.65625 0 L 1.328125 0 L 1.328125 -8 L 2.65625 -8 L 2.65625 -6.78125 C 2.9375 -7.195312 3.296875 -7.503906 3.734375 -7.703125 C 4.179688 -7.898438 4.722656 -8 5.359375 -8 C 5.453125 -8 5.550781 -8.003906 5.65625 -8.015625 C 5.769531 -8.035156 5.894531 -8.066406 6.03125 -8.109375 Z M 6.03125 -6.796875 " + id="path29" /> + </symbol> + <symbol + overflow="visible" + id="glyph0-10"> + <path + style="stroke:none;" + d="M 5.03125 -3.90625 C 3.96875 -3.90625 3.226562 -3.785156 2.8125 -3.546875 C 2.40625 -3.316406 2.203125 -2.921875 2.203125 -2.359375 C 2.203125 -1.898438 2.351562 -1.535156 2.65625 -1.265625 C 2.96875 -1.003906 3.390625 -0.875 3.921875 -0.875 C 4.648438 -0.875 5.234375 -1.125 5.671875 -1.625 C 6.117188 -2.132812 6.34375 -2.800781 6.34375 -3.625 L 6.34375 -3.90625 Z M 7.65625 -4.453125 L 7.65625 0 L 6.34375 0 L 6.34375 -1.1875 C 6.039062 -0.78125 5.664062 -0.476562 5.21875 -0.28125 C 4.769531 -0.09375 4.21875 0 3.5625 0 C 2.738281 0 2.082031 -0.210938 1.59375 -0.640625 C 1.113281 -1.066406 0.875 -1.640625 0.875 -2.359375 C 0.875 -3.203125 1.175781 -3.835938 1.78125 -4.265625 C 2.382812 -4.691406 3.285156 -4.90625 4.484375 -4.90625 L 6.34375 -4.90625 L 6.34375 -5.03125 C 6.34375 -5.625 6.140625 -6.082031 5.734375 -6.40625 C 5.335938 -6.738281 4.78125 -6.90625 4.0625 -6.90625 C 3.601562 -6.90625 3.15625 -6.851562 2.71875 -6.75 C 2.289062 -6.644531 1.875 -6.484375 1.46875 -6.265625 L 1.46875 -7.453125 C 1.945312 -7.628906 2.410156 -7.765625 2.859375 -7.859375 C 3.316406 -7.953125 3.765625 -8 4.203125 -8 C 5.359375 -8 6.222656 -7.703125 6.796875 -7.109375 C 7.367188 -6.523438 7.65625 -5.640625 7.65625 -4.453125 Z M 7.65625 -4.453125 " + id="path32" /> + </symbol> + <symbol + overflow="visible" + id="glyph0-11"> + <path + style="stroke:none;" + d="M 7.15625 -7.515625 L 7.15625 -6.328125 C 6.78125 -6.515625 6.40625 -6.65625 6.03125 -6.75 C 5.65625 -6.851562 5.28125 -6.90625 4.90625 -6.90625 C 4.050781 -6.90625 3.382812 -6.648438 2.90625 -6.140625 C 2.4375 -5.628906 2.203125 -4.914062 2.203125 -4 C 2.203125 -3.082031 2.4375 -2.367188 2.90625 -1.859375 C 3.382812 -1.347656 4.050781 -1.09375 4.90625 -1.09375 C 5.28125 -1.09375 5.65625 -1.140625 6.03125 -1.234375 C 6.40625 -1.328125 6.78125 -1.472656 7.15625 -1.671875 L 7.15625 -0.5 C 6.789062 -0.332031 6.410156 -0.207031 6.015625 -0.125 C 5.617188 -0.0390625 5.195312 0 4.75 0 C 3.539062 0 2.582031 -0.359375 1.875 -1.078125 C 1.164062 -1.796875 0.8125 -2.769531 0.8125 -4 C 0.8125 -5.238281 1.171875 -6.210938 1.890625 -6.921875 C 2.609375 -7.640625 3.59375 -8 4.84375 -8 C 5.25 -8 5.644531 -7.957031 6.03125 -7.875 C 6.414062 -7.789062 6.789062 -7.671875 7.15625 -7.515625 Z M 7.15625 -7.515625 " + id="path35" /> + </symbol> + <symbol + overflow="visible" + id="glyph0-12"> + <path + style="stroke:none;" + d="M 8.046875 -4.71875 L 8.046875 0 L 6.734375 0 L 6.734375 -4.671875 C 6.734375 -5.410156 6.582031 -5.960938 6.28125 -6.328125 C 5.988281 -6.691406 5.546875 -6.875 4.953125 -6.875 C 4.242188 -6.875 3.679688 -6.65625 3.265625 -6.21875 C 2.859375 -5.78125 2.65625 -5.179688 2.65625 -4.421875 L 2.65625 0 L 1.328125 0 L 1.328125 -11 L 2.65625 -11 L 2.65625 -6.59375 C 2.96875 -7.0625 3.335938 -7.410156 3.765625 -7.640625 C 4.191406 -7.878906 4.6875 -8 5.25 -8 C 6.175781 -8 6.875 -7.71875 7.34375 -7.15625 C 7.8125 -6.601562 8.046875 -5.789062 8.046875 -4.71875 Z M 8.046875 -4.71875 " + id="path38" /> + </symbol> + <symbol + overflow="visible" + id="glyph0-13"> + <path + style="stroke:none;" + d="M 4.546875 -11 C 3.910156 -9.945312 3.4375 -8.90625 3.125 -7.875 C 2.8125 -6.84375 2.65625 -5.800781 2.65625 -4.75 C 2.65625 -3.695312 2.8125 -2.648438 3.125 -1.609375 C 3.4375 -0.578125 3.910156 0.457031 4.546875 1.5 L 3.40625 1.5 C 2.6875 0.4375 2.148438 -0.613281 1.796875 -1.65625 C 1.441406 -2.695312 1.265625 -3.726562 1.265625 -4.75 C 1.265625 -5.757812 1.441406 -6.78125 1.796875 -7.8125 C 2.148438 -8.851562 2.6875 -9.914062 3.40625 -11 Z M 4.546875 -11 " + id="path41" /> + </symbol> + <symbol + overflow="visible" + id="glyph0-14"> + <path + style="stroke:none;" + d="M 7.140625 -4 C 7.140625 -4.90625 6.941406 -5.617188 6.546875 -6.140625 C 6.148438 -6.660156 5.601562 -6.921875 4.90625 -6.921875 C 4.207031 -6.921875 3.65625 -6.660156 3.25 -6.140625 C 2.851562 -5.617188 2.65625 -4.90625 2.65625 -4 C 2.65625 -3.09375 2.851562 -2.378906 3.25 -1.859375 C 3.65625 -1.335938 4.207031 -1.078125 4.90625 -1.078125 C 5.601562 -1.078125 6.148438 -1.335938 6.546875 -1.859375 C 6.941406 -2.378906 7.140625 -3.09375 7.140625 -4 Z M 2.65625 -6.625 C 2.9375 -7.09375 3.285156 -7.4375 3.703125 -7.65625 C 4.128906 -7.882812 4.632812 -8 5.21875 -8 C 6.195312 -8 6.988281 -7.628906 7.59375 -6.890625 C 8.207031 -6.160156 8.515625 -5.195312 8.515625 -4 C 8.515625 -2.800781 8.207031 -1.832031 7.59375 -1.09375 C 6.988281 -0.363281 6.195312 0 5.21875 0 C 4.632812 0 4.128906 -0.109375 3.703125 -0.328125 C 3.285156 -0.554688 2.9375 -0.90625 2.65625 -1.375 L 2.65625 0 L 1.328125 0 L 1.328125 -11 L 2.65625 -11 Z M 2.65625 -6.625 " + id="path44" /> + </symbol> + <symbol + overflow="visible" + id="glyph0-15"> + <path + style="stroke:none;" + d="M 6.5 -7.578125 L 6.5 -6.390625 C 6.125 -6.566406 5.734375 -6.695312 5.328125 -6.78125 C 4.929688 -6.875 4.519531 -6.921875 4.09375 -6.921875 C 3.4375 -6.921875 2.941406 -6.828125 2.609375 -6.640625 C 2.285156 -6.453125 2.125 -6.164062 2.125 -5.78125 C 2.125 -5.5 2.238281 -5.273438 2.46875 -5.109375 C 2.707031 -4.941406 3.179688 -4.78125 3.890625 -4.625 L 4.34375 -4.53125 C 5.28125 -4.34375 5.941406 -4.078125 6.328125 -3.734375 C 6.722656 -3.390625 6.921875 -2.910156 6.921875 -2.296875 C 6.921875 -1.585938 6.625 -1.023438 6.03125 -0.609375 C 5.445312 -0.203125 4.640625 0 3.609375 0 C 3.179688 0 2.734375 -0.0390625 2.265625 -0.125 C 1.796875 -0.207031 1.304688 -0.328125 0.796875 -0.484375 L 0.796875 -1.796875 C 1.285156 -1.554688 1.765625 -1.375 2.234375 -1.25 C 2.703125 -1.132812 3.171875 -1.078125 3.640625 -1.078125 C 4.265625 -1.078125 4.742188 -1.175781 5.078125 -1.375 C 5.410156 -1.582031 5.578125 -1.867188 5.578125 -2.234375 C 5.578125 -2.566406 5.453125 -2.820312 5.203125 -3 C 4.960938 -3.1875 4.4375 -3.359375 3.625 -3.515625 L 3.171875 -3.625 C 2.347656 -3.789062 1.753906 -4.039062 1.390625 -4.375 C 1.035156 -4.71875 0.859375 -5.179688 0.859375 -5.765625 C 0.859375 -6.472656 1.125 -7.019531 1.65625 -7.40625 C 2.1875 -7.800781 2.945312 -8 3.9375 -8 C 4.414062 -8 4.867188 -7.960938 5.296875 -7.890625 C 5.734375 -7.828125 6.132812 -7.722656 6.5 -7.578125 Z M 6.5 -7.578125 " + id="path47" /> + </symbol> + <symbol + overflow="visible" + id="glyph0-16"> + <path + style="stroke:none;" + d="M 2.6875 -10 L 2.6875 -8 L 5.40625 -8 L 5.40625 -7 L 2.6875 -7 L 2.6875 -2.625 C 2.6875 -1.96875 2.773438 -1.546875 2.953125 -1.359375 C 3.128906 -1.171875 3.492188 -1.078125 4.046875 -1.078125 L 5.40625 -1.078125 L 5.40625 0 L 4.046875 0 C 3.023438 0 2.320312 -0.1875 1.9375 -0.5625 C 1.550781 -0.945312 1.359375 -1.644531 1.359375 -2.65625 L 1.359375 -7 L 0.390625 -7 L 0.390625 -8 L 1.359375 -8 L 1.359375 -10 Z M 2.6875 -10 " + id="path50" /> + </symbol> + <symbol + overflow="visible" + id="glyph0-17"> + <path + style="stroke:none;" + d="M 1.171875 -11 L 2.328125 -11 C 3.035156 -9.914062 3.566406 -8.851562 3.921875 -7.8125 C 4.285156 -6.78125 4.46875 -5.757812 4.46875 -4.75 C 4.46875 -3.726562 4.285156 -2.695312 3.921875 -1.65625 C 3.566406 -0.613281 3.035156 0.4375 2.328125 1.5 L 1.171875 1.5 C 1.804688 0.457031 2.28125 -0.578125 2.59375 -1.609375 C 2.90625 -2.648438 3.0625 -3.695312 3.0625 -4.75 C 3.0625 -5.800781 2.90625 -6.84375 2.59375 -7.875 C 2.28125 -8.90625 1.804688 -9.945312 1.171875 -11 Z M 1.171875 -11 " + id="path53" /> + </symbol> + <symbol + overflow="visible" + id="glyph0-18"> + <path + style="stroke:none;" + d="M 7.859375 -9.46875 L 7.859375 -8.171875 C 7.304688 -8.398438 6.785156 -8.570312 6.296875 -8.6875 C 5.804688 -8.800781 5.335938 -8.859375 4.890625 -8.859375 C 4.097656 -8.859375 3.488281 -8.722656 3.0625 -8.453125 C 2.632812 -8.179688 2.421875 -7.789062 2.421875 -7.28125 C 2.421875 -6.863281 2.5625 -6.546875 2.84375 -6.328125 C 3.132812 -6.109375 3.675781 -5.9375 4.46875 -5.8125 L 5.34375 -5.640625 C 6.414062 -5.460938 7.207031 -5.140625 7.71875 -4.671875 C 8.238281 -4.210938 8.5 -3.597656 8.5 -2.828125 C 8.5 -1.898438 8.148438 -1.195312 7.453125 -0.71875 C 6.753906 -0.238281 5.738281 0 4.40625 0 C 3.894531 0 3.351562 -0.0507812 2.78125 -0.15625 C 2.207031 -0.269531 1.617188 -0.4375 1.015625 -0.65625 L 1.015625 -2.015625 C 1.597656 -1.722656 2.171875 -1.503906 2.734375 -1.359375 C 3.296875 -1.210938 3.851562 -1.140625 4.40625 -1.140625 C 5.226562 -1.140625 5.863281 -1.285156 6.3125 -1.578125 C 6.757812 -1.867188 6.984375 -2.28125 6.984375 -2.8125 C 6.984375 -3.28125 6.820312 -3.648438 6.5 -3.921875 C 6.175781 -4.191406 5.648438 -4.390625 4.921875 -4.515625 L 4.03125 -4.671875 C 2.957031 -4.859375 2.175781 -5.15625 1.6875 -5.5625 C 1.207031 -5.976562 0.96875 -6.550781 0.96875 -7.28125 C 0.96875 -8.125 1.300781 -8.785156 1.96875 -9.265625 C 2.632812 -9.753906 3.550781 -10 4.71875 -10 C 5.21875 -10 5.726562 -9.953125 6.25 -9.859375 C 6.769531 -9.773438 7.304688 -9.644531 7.859375 -9.46875 Z M 7.859375 -9.46875 " + id="path56" /> + </symbol> + <symbol + overflow="visible" + id="glyph0-19"> + <path + style="stroke:none;" + d="M 4.484375 -6.90625 C 3.785156 -6.90625 3.226562 -6.644531 2.8125 -6.125 C 2.40625 -5.601562 2.203125 -4.894531 2.203125 -4 C 2.203125 -3.101562 2.40625 -2.394531 2.8125 -1.875 C 3.21875 -1.351562 3.773438 -1.09375 4.484375 -1.09375 C 5.191406 -1.09375 5.75 -1.351562 6.15625 -1.875 C 6.570312 -2.394531 6.78125 -3.101562 6.78125 -4 C 6.78125 -4.894531 6.570312 -5.601562 6.15625 -6.125 C 5.75 -6.644531 5.191406 -6.90625 4.484375 -6.90625 Z M 4.484375 -8 C 5.640625 -8 6.539062 -7.644531 7.1875 -6.9375 C 7.84375 -6.226562 8.171875 -5.25 8.171875 -4 C 8.171875 -2.757812 7.84375 -1.78125 7.1875 -1.0625 C 6.539062 -0.351562 5.640625 0 4.484375 0 C 3.335938 0 2.4375 -0.351562 1.78125 -1.0625 C 1.132812 -1.78125 0.8125 -2.757812 0.8125 -4 C 0.8125 -5.25 1.132812 -6.226562 1.78125 -6.9375 C 2.4375 -7.644531 3.335938 -8 4.484375 -8 Z M 4.484375 -8 " + id="path59" /> + </symbol> + <symbol + overflow="visible" + id="glyph0-20"> + <path + style="stroke:none;" + d="M 8.046875 -4.71875 L 8.046875 0 L 6.734375 0 L 6.734375 -4.796875 C 6.734375 -5.554688 6.582031 -6.125 6.28125 -6.5 C 5.988281 -6.875 5.546875 -7.0625 4.953125 -7.0625 C 4.242188 -7.0625 3.679688 -6.835938 3.265625 -6.390625 C 2.859375 -5.941406 2.65625 -5.328125 2.65625 -4.546875 L 2.65625 0 L 1.328125 0 L 1.328125 -8 L 2.65625 -8 L 2.65625 -6.765625 C 2.96875 -7.171875 3.335938 -7.476562 3.765625 -7.6875 C 4.191406 -7.894531 4.6875 -8 5.25 -8 C 6.175781 -8 6.875 -7.71875 7.34375 -7.15625 C 7.8125 -6.601562 8.046875 -5.789062 8.046875 -4.71875 Z M 8.046875 -4.71875 " + id="path62" /> + </symbol> + <symbol + overflow="visible" + id="glyph0-21"> + <path + style="stroke:none;" + d="M 6.65625 -4 C 6.65625 -4.925781 6.457031 -5.644531 6.0625 -6.15625 C 5.675781 -6.664062 5.125 -6.921875 4.40625 -6.921875 C 3.707031 -6.921875 3.160156 -6.664062 2.765625 -6.15625 C 2.367188 -5.644531 2.171875 -4.925781 2.171875 -4 C 2.171875 -3.070312 2.367188 -2.351562 2.765625 -1.84375 C 3.160156 -1.332031 3.707031 -1.078125 4.40625 -1.078125 C 5.125 -1.078125 5.675781 -1.332031 6.0625 -1.84375 C 6.457031 -2.351562 6.65625 -3.070312 6.65625 -4 Z M 7.984375 -1.015625 C 7.984375 0.335938 7.675781 1.34375 7.0625 2 C 6.457031 2.664062 5.53125 3 4.28125 3 C 3.820312 3 3.382812 2.960938 2.96875 2.890625 C 2.5625 2.828125 2.164062 2.726562 1.78125 2.59375 L 1.78125 1.328125 C 2.164062 1.546875 2.546875 1.703125 2.921875 1.796875 C 3.296875 1.890625 3.679688 1.9375 4.078125 1.9375 C 4.941406 1.9375 5.585938 1.710938 6.015625 1.265625 C 6.441406 0.828125 6.65625 0.160156 6.65625 -0.734375 L 6.65625 -1.375 C 6.382812 -0.914062 6.035156 -0.570312 5.609375 -0.34375 C 5.191406 -0.113281 4.6875 0 4.09375 0 C 3.101562 0 2.304688 -0.363281 1.703125 -1.09375 C 1.109375 -1.820312 0.8125 -2.789062 0.8125 -4 C 0.8125 -5.207031 1.109375 -6.175781 1.703125 -6.90625 C 2.304688 -7.632812 3.101562 -8 4.09375 -8 C 4.6875 -8 5.191406 -7.882812 5.609375 -7.65625 C 6.035156 -7.425781 6.382812 -7.082031 6.65625 -6.625 L 6.65625 -8 L 7.984375 -8 Z M 7.984375 -1.015625 " + id="path65" /> + </symbol> + <symbol + overflow="visible" + id="glyph0-22"> + <path + style="stroke:none;" + d="M 5.4375 -11 L 5.4375 -9.9375 L 4.1875 -9.9375 C 3.707031 -9.9375 3.375 -9.84375 3.1875 -9.65625 C 3.007812 -9.476562 2.921875 -9.148438 2.921875 -8.671875 L 2.921875 -8 L 5.09375 -8 L 5.09375 -7 L 2.921875 -7 L 2.921875 0 L 1.59375 0 L 1.59375 -7 L 0.34375 -7 L 0.34375 -8 L 1.59375 -8 L 1.59375 -8.546875 C 1.59375 -9.398438 1.800781 -10.019531 2.21875 -10.40625 C 2.632812 -10.800781 3.296875 -11 4.203125 -11 Z M 5.4375 -11 " + id="path68" /> + </symbol> + <symbol + overflow="visible" + id="glyph0-23"> + <path + style="stroke:none;" + d="M 7.625 -6.3125 C 7.957031 -6.882812 8.351562 -7.304688 8.8125 -7.578125 C 9.269531 -7.859375 9.8125 -8 10.4375 -8 C 11.269531 -8 11.910156 -7.710938 12.359375 -7.140625 C 12.816406 -6.578125 13.046875 -5.769531 13.046875 -4.71875 L 13.046875 0 L 11.71875 0 L 11.71875 -4.671875 C 11.71875 -5.421875 11.582031 -5.972656 11.3125 -6.328125 C 11.039062 -6.691406 10.625 -6.875 10.0625 -6.875 C 9.382812 -6.875 8.847656 -6.65625 8.453125 -6.21875 C 8.054688 -5.78125 7.859375 -5.179688 7.859375 -4.421875 L 7.859375 0 L 6.53125 0 L 6.53125 -4.671875 C 6.53125 -5.421875 6.390625 -5.972656 6.109375 -6.328125 C 5.835938 -6.691406 5.421875 -6.875 4.859375 -6.875 C 4.179688 -6.875 3.644531 -6.648438 3.25 -6.203125 C 2.851562 -5.765625 2.65625 -5.171875 2.65625 -4.421875 L 2.65625 0 L 1.328125 0 L 1.328125 -8 L 2.65625 -8 L 2.65625 -6.59375 C 2.957031 -7.070312 3.316406 -7.425781 3.734375 -7.65625 C 4.160156 -7.882812 4.660156 -8 5.234375 -8 C 5.816406 -8 6.3125 -7.851562 6.71875 -7.5625 C 7.132812 -7.28125 7.4375 -6.863281 7.625 -6.3125 Z M 7.625 -6.3125 " + id="path71" /> + </symbol> + <symbol + overflow="visible" + id="glyph0-24"> + <path + style="stroke:none;" + d="M 7.484375 2 L 7.484375 3 L -0.140625 3 L -0.140625 2 Z M 7.484375 2 " + id="path74" /> + </symbol> + <symbol + overflow="visible" + id="glyph0-25"> + <path + style="stroke:none;" + d="M 6.65625 -6.625 L 6.65625 -11 L 7.984375 -11 L 7.984375 0 L 6.65625 0 L 6.65625 -1.171875 C 6.382812 -0.773438 6.035156 -0.476562 5.609375 -0.28125 C 5.191406 -0.09375 4.6875 0 4.09375 0 C 3.125 0 2.332031 -0.363281 1.71875 -1.09375 C 1.113281 -1.832031 0.8125 -2.800781 0.8125 -4 C 0.8125 -5.195312 1.113281 -6.160156 1.71875 -6.890625 C 2.332031 -7.628906 3.125 -8 4.09375 -8 C 4.6875 -8 5.191406 -7.882812 5.609375 -7.65625 C 6.035156 -7.4375 6.382812 -7.09375 6.65625 -6.625 Z M 2.171875 -3.890625 C 2.171875 -2.953125 2.367188 -2.210938 2.765625 -1.671875 C 3.160156 -1.140625 3.707031 -0.875 4.40625 -0.875 C 5.101562 -0.875 5.648438 -1.140625 6.046875 -1.671875 C 6.453125 -2.210938 6.65625 -2.953125 6.65625 -3.890625 C 6.65625 -4.835938 6.453125 -5.578125 6.046875 -6.109375 C 5.648438 -6.648438 5.101562 -6.921875 4.40625 -6.921875 C 3.707031 -6.921875 3.160156 -6.648438 2.765625 -6.109375 C 2.367188 -5.578125 2.171875 -4.835938 2.171875 -3.890625 Z M 2.171875 -3.890625 " + id="path77" /> + </symbol> + <symbol + overflow="visible" + id="glyph0-26"> + <path + style="stroke:none;" + d="M 1.375 -11 L 2.703125 -11 L 2.703125 0 L 1.375 0 Z M 1.375 -11 " + id="path80" /> + </symbol> + <symbol + overflow="visible" + id="glyph0-27"> + <path + style="stroke:none;" + d="M 1.71875 -1.421875 L 3.234375 -1.421875 L 3.234375 -0.21875 L 2.0625 2 L 1.125 2 L 1.71875 -0.21875 Z M 1.71875 -1.421875 " + id="path83" /> + </symbol> + <symbol + overflow="visible" + id="glyph0-28"> + <path + style="stroke:none;" + d="M 1.5625 -1.765625 L 3.078125 -1.765625 L 3.078125 0 L 1.5625 0 Z M 1.5625 -1.765625 " + id="path86" /> + </symbol> + <symbol + overflow="visible" + id="glyph0-29"> + <path + style="stroke:none;" + d="M 1.25 -3.28125 L 1.25 -8 L 2.5625 -8 L 2.5625 -3.1875 C 2.5625 -2.425781 2.707031 -1.851562 3 -1.46875 C 3.300781 -1.09375 3.75 -0.90625 4.34375 -0.90625 C 5.050781 -0.90625 5.609375 -1.128906 6.015625 -1.578125 C 6.429688 -2.035156 6.640625 -2.65625 6.640625 -3.4375 L 6.640625 -8 L 7.96875 -8 L 7.96875 0 L 6.640625 0 L 6.640625 -1.203125 C 6.328125 -0.796875 5.957031 -0.492188 5.53125 -0.296875 C 5.113281 -0.0976562 4.625 0 4.0625 0 C 3.132812 0 2.429688 -0.273438 1.953125 -0.828125 C 1.484375 -1.390625 1.25 -2.207031 1.25 -3.28125 Z M 4.5625 -8 Z M 4.5625 -8 " + id="path89" /> + </symbol> + <symbol + overflow="visible" + id="glyph0-30"> + <path + style="stroke:none;" + d="M 1.4375 -10 L 3.59375 -10 L 6.328125 -3.1875 L 9.0625 -10 L 11.21875 -10 L 11.21875 0 L 9.8125 0 L 9.8125 -8.78125 L 7.0625 -1.921875 L 5.609375 -1.921875 L 2.84375 -8.78125 L 2.84375 0 L 1.4375 0 Z M 1.4375 -10 " + id="path92" /> + </symbol> + <symbol + overflow="visible" + id="glyph0-31"> + <path + style="stroke:none;" + d="M 1.4375 -10 L 2.890625 -10 L 2.890625 -1.1875 L 8.09375 -1.1875 L 8.09375 0 L 1.4375 0 Z M 1.4375 -10 " + id="path95" /> + </symbol> + <symbol + overflow="visible" + id="glyph0-32"> + <path + style="stroke:none;" + d="M 7.859375 -8 L 7.859375 0 L 6.546875 0 L 6.546875 -7 L 2.921875 -7 L 2.921875 0 L 1.59375 0 L 1.59375 -7 L 0.34375 -7 L 0.34375 -8 L 1.59375 -8 L 1.59375 -8.546875 C 1.59375 -9.378906 1.800781 -9.992188 2.21875 -10.390625 C 2.632812 -10.796875 3.269531 -11 4.125 -11 L 5.4375 -11 L 5.4375 -9.9375 L 4.1875 -9.9375 C 3.707031 -9.9375 3.375 -9.84375 3.1875 -9.65625 C 3.007812 -9.476562 2.921875 -9.148438 2.921875 -8.671875 L 2.921875 -8 Z M 6.546875 -11 L 7.859375 -11 L 7.859375 -9.375 L 6.546875 -9.375 Z M 6.546875 -11 " + id="path98" /> + </symbol> + <symbol + overflow="visible" + id="glyph0-33"> + <path + style="stroke:none;" + d="M 1.71875 -1.765625 L 3.234375 -1.765625 L 3.234375 0 L 1.71875 0 Z M 1.71875 -7 L 3.234375 -7 L 3.234375 -5.21875 L 1.71875 -5.21875 Z M 1.71875 -7 " + id="path101" /> + </symbol> + <symbol + overflow="visible" + id="glyph0-34"> + <path + style="stroke:none;" + d="M 1.4375 -10 L 2.890625 -10 L 2.890625 0 L 1.4375 0 Z M 1.4375 -10 " + id="path104" /> + </symbol> + <symbol + overflow="visible" + id="glyph0-35"> + <path + style="stroke:none;" + d="M 9.453125 -9.015625 L 9.453125 -7.65625 C 8.960938 -8.050781 8.441406 -8.347656 7.890625 -8.546875 C 7.335938 -8.742188 6.75 -8.84375 6.125 -8.84375 C 4.90625 -8.84375 3.96875 -8.515625 3.3125 -7.859375 C 2.664062 -7.203125 2.34375 -6.25 2.34375 -5 C 2.34375 -3.757812 2.664062 -2.804688 3.3125 -2.140625 C 3.96875 -1.484375 4.90625 -1.15625 6.125 -1.15625 C 6.75 -1.15625 7.335938 -1.253906 7.890625 -1.453125 C 8.441406 -1.648438 8.960938 -1.945312 9.453125 -2.34375 L 9.453125 -1 C 8.941406 -0.664062 8.398438 -0.414062 7.828125 -0.25 C 7.265625 -0.0820312 6.671875 0 6.046875 0 C 4.429688 0 3.15625 -0.441406 2.21875 -1.328125 C 1.289062 -2.222656 0.828125 -3.445312 0.828125 -5 C 0.828125 -6.550781 1.289062 -7.769531 2.21875 -8.65625 C 3.15625 -9.550781 4.429688 -10 6.046875 -10 C 6.679688 -10 7.28125 -9.914062 7.84375 -9.75 C 8.414062 -9.59375 8.953125 -9.347656 9.453125 -9.015625 Z M 9.453125 -9.015625 " + id="path107" /> + </symbol> + <symbol + overflow="visible" + id="glyph0-36"> + <path + style="stroke:none;" + d="M 2.890625 -8.84375 L 2.890625 -4.984375 L 4.703125 -4.984375 C 5.378906 -4.984375 5.898438 -5.148438 6.265625 -5.484375 C 6.628906 -5.816406 6.8125 -6.296875 6.8125 -6.921875 C 6.8125 -7.535156 6.628906 -8.007812 6.265625 -8.34375 C 5.898438 -8.675781 5.378906 -8.84375 4.703125 -8.84375 Z M 1.4375 -10 L 4.703125 -10 C 5.898438 -10 6.804688 -9.738281 7.421875 -9.21875 C 8.035156 -8.695312 8.34375 -7.925781 8.34375 -6.90625 C 8.34375 -5.894531 8.035156 -5.128906 7.421875 -4.609375 C 6.804688 -4.085938 5.898438 -3.828125 4.703125 -3.828125 L 2.890625 -3.828125 L 2.890625 0 L 1.4375 0 Z M 1.4375 -10 " + id="path110" /> + </symbol> + <symbol + overflow="visible" + id="glyph0-37"> + <path + style="stroke:none;" + d="M 0.4375 -8 L 1.828125 -8 L 4.34375 -1.28125 L 6.84375 -8 L 8.25 -8 L 5.234375 0 L 3.453125 0 Z M 0.4375 -8 " + id="path113" /> + </symbol> + <symbol + overflow="visible" + id="glyph0-38"> + <path + style="stroke:none;" + d="M 0.609375 -8 L 1.9375 -8 L 3.578125 -1.75 L 5.21875 -8 L 6.78125 -8 L 8.421875 -1.75 L 10.0625 -8 L 11.390625 -8 L 9.28125 0 L 7.734375 0 L 6 -6.5625 L 4.265625 0 L 2.71875 0 Z M 0.609375 -8 " + id="path116" /> + </symbol> + <symbol + overflow="visible" + id="glyph0-39"> + <path + style="stroke:none;" + d="M 1.265625 -11 L 4.296875 -11 L 4.296875 -10.015625 L 2.578125 -10.015625 L 2.578125 1.015625 L 4.296875 1.015625 L 4.296875 1.984375 L 1.265625 1.984375 Z M 1.265625 -11 " + id="path119" /> + </symbol> + <symbol + overflow="visible" + id="glyph0-40"> + <path + style="stroke:none;" + d="M 4.46875 -11 L 4.46875 1.984375 L 1.421875 1.984375 L 1.421875 1.015625 L 3.140625 1.015625 L 3.140625 -10.015625 L 1.421875 -10.015625 L 1.421875 -11 Z M 4.46875 -11 " + id="path122" /> + </symbol> + <symbol + overflow="visible" + id="glyph1-0"> + <path + style="stroke:none;" + d="M 1.078125 4.25 L 1.078125 -16.953125 L 13.078125 -16.953125 L 13.078125 4.25 Z M 2.421875 2.90625 L 11.734375 2.90625 L 11.734375 -15.609375 L 2.421875 -15.609375 Z M 2.421875 2.90625 " + id="path125" /> + </symbol> + <symbol + overflow="visible" + id="glyph1-1"> + <path + style="stroke:none;" + d="M 2.5625 -3.09375 L 5.046875 -3.09375 L 5.046875 0 L 2.5625 0 Z M 2.5625 -3.09375 " + id="path128" /> + </symbol> + <symbol + overflow="visible" + id="glyph2-0"> + <path + style="stroke:none;" + d="M 1.421875 4.53125 L 1.421875 -18.953125 L 14.921875 -18.953125 L 14.921875 4.53125 Z M 2.921875 3.046875 L 13.421875 3.046875 L 13.421875 -17.453125 L 2.921875 -17.453125 Z M 2.921875 3.046875 " + id="path131" /> + </symbol> + <symbol + overflow="visible" + id="glyph2-1"> + <path + style="stroke:none;" + d="M 5.25 -17.828125 L 5.25 -2.171875 L 8.421875 -2.171875 C 11.109375 -2.171875 13.070312 -2.796875 14.3125 -4.046875 C 15.5625 -5.304688 16.1875 -7.296875 16.1875 -10.015625 C 16.1875 -12.710938 15.5625 -14.6875 14.3125 -15.9375 C 13.070312 -17.195312 11.109375 -17.828125 8.421875 -17.828125 Z M 2.625 -20 L 8.015625 -20 C 11.785156 -20 14.550781 -19.191406 16.3125 -17.578125 C 18.082031 -15.960938 18.96875 -13.441406 18.96875 -10.015625 C 18.96875 -6.566406 18.082031 -4.035156 16.3125 -2.421875 C 14.539062 -0.804688 11.773438 0 8.015625 0 L 2.625 0 Z M 2.625 -20 " + id="path134" /> + </symbol> + <symbol + overflow="visible" + id="glyph2-2"> + <path + style="stroke:none;" + d="M -0.078125 -20 L 16.375 -20 L 16.375 -17.765625 L 9.46875 -17.765625 L 9.46875 0 L 6.828125 0 L 6.828125 -17.765625 L -0.078125 -17.765625 Z M -0.078125 -20 " + id="path137" /> + </symbol> + <symbol + overflow="visible" + id="glyph2-3"> + <path + style="stroke:none;" + d="M 8.578125 1.625 C 7.898438 3.425781 7.238281 4.601562 6.59375 5.15625 C 5.957031 5.71875 5.101562 6 4.03125 6 L 2.109375 6 L 2.109375 3.984375 L 3.515625 3.984375 C 4.171875 3.984375 4.679688 3.816406 5.046875 3.484375 C 5.410156 3.148438 5.816406 2.378906 6.265625 1.171875 L 6.6875 0.03125 L 0.796875 -15 L 3.328125 -15 L 7.890625 -3.046875 L 12.453125 -15 L 14.984375 -15 Z M 8.578125 1.625 " + id="path140" /> + </symbol> + <symbol + overflow="visible" + id="glyph2-4"> + <path + style="stroke:none;" + d="M 4.828125 -2.5625 L 4.828125 6 L 2.421875 6 L 2.421875 -15 L 4.828125 -15 L 4.828125 -12.4375 C 5.335938 -13.300781 5.972656 -13.941406 6.734375 -14.359375 C 7.503906 -14.785156 8.425781 -15 9.5 -15 C 11.269531 -15 12.707031 -14.3125 13.8125 -12.9375 C 14.914062 -11.5625 15.46875 -9.75 15.46875 -7.5 C 15.46875 -5.25 14.914062 -3.4375 13.8125 -2.0625 C 12.707031 -0.6875 11.269531 0 9.5 0 C 8.425781 0 7.503906 -0.207031 6.734375 -0.625 C 5.972656 -1.050781 5.335938 -1.695312 4.828125 -2.5625 Z M 12.984375 -7.5 C 12.984375 -9.207031 12.617188 -10.546875 11.890625 -11.515625 C 11.171875 -12.492188 10.175781 -12.984375 8.90625 -12.984375 C 7.632812 -12.984375 6.632812 -12.492188 5.90625 -11.515625 C 5.1875 -10.546875 4.828125 -9.207031 4.828125 -7.5 C 4.828125 -5.789062 5.1875 -4.445312 5.90625 -3.46875 C 6.632812 -2.5 7.632812 -2.015625 8.90625 -2.015625 C 10.175781 -2.015625 11.171875 -2.5 11.890625 -3.46875 C 12.617188 -4.445312 12.984375 -5.789062 12.984375 -7.5 Z M 12.984375 -7.5 " + id="path143" /> + </symbol> + <symbol + overflow="visible" + id="glyph2-5"> + <path + style="stroke:none;" + d="M 14.984375 -8.25 L 14.984375 -7.125 L 3.96875 -7.125 C 4.070312 -5.46875 4.566406 -4.203125 5.453125 -3.328125 C 6.347656 -2.460938 7.59375 -2.03125 9.1875 -2.03125 C 10.101562 -2.03125 10.992188 -2.144531 11.859375 -2.375 C 12.722656 -2.601562 13.582031 -2.941406 14.4375 -3.390625 L 14.4375 -1.125 C 13.570312 -0.757812 12.6875 -0.476562 11.78125 -0.28125 C 10.882812 -0.09375 9.96875 0 9.03125 0 C 6.707031 0 4.863281 -0.660156 3.5 -1.984375 C 2.144531 -3.316406 1.46875 -5.113281 1.46875 -7.375 C 1.46875 -9.71875 2.113281 -11.570312 3.40625 -12.9375 C 4.695312 -14.3125 6.4375 -15 8.625 -15 C 10.582031 -15 12.128906 -14.390625 13.265625 -13.171875 C 14.410156 -11.960938 14.984375 -10.320312 14.984375 -8.25 Z M 12.59375 -9 C 12.570312 -10.207031 12.203125 -11.164062 11.484375 -11.875 C 10.773438 -12.59375 9.828125 -12.953125 8.640625 -12.953125 C 7.304688 -12.953125 6.238281 -12.609375 5.4375 -11.921875 C 4.632812 -11.234375 4.171875 -10.257812 4.046875 -9 Z M 12.59375 -9 " + id="path146" /> + </symbol> + <symbol + overflow="visible" + id="glyph2-6"> + <path + style="stroke:none;" + d="" + id="path149" /> + </symbol> + <symbol + overflow="visible" + id="glyph2-7"> + <path + style="stroke:none;" + d="M 17.171875 -18.140625 L 17.171875 -15.390625 C 16.285156 -16.210938 15.34375 -16.820312 14.34375 -17.21875 C 13.34375 -17.625 12.273438 -17.828125 11.140625 -17.828125 C 8.921875 -17.828125 7.21875 -17.15625 6.03125 -15.8125 C 4.851562 -14.46875 4.265625 -12.53125 4.265625 -10 C 4.265625 -7.46875 4.851562 -5.53125 6.03125 -4.1875 C 7.21875 -2.84375 8.921875 -2.171875 11.140625 -2.171875 C 12.273438 -2.171875 13.34375 -2.367188 14.34375 -2.765625 C 15.34375 -3.171875 16.285156 -3.785156 17.171875 -4.609375 L 17.171875 -1.890625 C 16.253906 -1.253906 15.28125 -0.78125 14.25 -0.46875 C 13.21875 -0.15625 12.128906 0 10.984375 0 C 8.046875 0 5.726562 -0.890625 4.03125 -2.671875 C 2.34375 -4.460938 1.5 -6.90625 1.5 -10 C 1.5 -13.09375 2.34375 -15.53125 4.03125 -17.3125 C 5.726562 -19.101562 8.046875 -20 10.984375 -20 C 12.148438 -20 13.25 -19.84375 14.28125 -19.53125 C 15.3125 -19.226562 16.273438 -18.765625 17.171875 -18.140625 Z M 17.171875 -18.140625 " + id="path152" /> + </symbol> + <symbol + overflow="visible" + id="glyph2-8"> + <path + style="stroke:none;" + d="M 2.515625 -20 L 4.90625 -20 L 4.90625 0 L 2.515625 0 Z M 2.515625 -20 " + id="path155" /> + </symbol> + <symbol + overflow="visible" + id="glyph2-9"> + <path + style="stroke:none;" + d="M 9.140625 -8 C 7.203125 -8 5.859375 -7.765625 5.109375 -7.296875 C 4.367188 -6.835938 4 -6.046875 4 -4.921875 C 4 -4.023438 4.273438 -3.316406 4.828125 -2.796875 C 5.390625 -2.273438 6.15625 -2.015625 7.125 -2.015625 C 8.445312 -2.015625 9.507812 -2.503906 10.3125 -3.484375 C 11.125 -4.472656 11.53125 -5.789062 11.53125 -7.4375 L 11.53125 -8 Z M 13.921875 -8.359375 L 13.921875 0 L 11.53125 0 L 11.53125 -2.625 C 10.976562 -1.726562 10.289062 -1.066406 9.46875 -0.640625 C 8.65625 -0.210938 7.660156 0 6.484375 0 C 4.992188 0 3.804688 -0.425781 2.921875 -1.28125 C 2.046875 -2.144531 1.609375 -3.304688 1.609375 -4.765625 C 1.609375 -6.460938 2.15625 -7.738281 3.25 -8.59375 C 4.34375 -9.457031 5.984375 -9.890625 8.171875 -9.890625 L 11.53125 -9.890625 L 11.53125 -10.078125 C 11.53125 -10.992188 11.164062 -11.703125 10.4375 -12.203125 C 9.707031 -12.703125 8.691406 -12.953125 7.390625 -12.953125 C 6.554688 -12.953125 5.742188 -12.867188 4.953125 -12.703125 C 4.160156 -12.546875 3.398438 -12.300781 2.671875 -11.96875 L 2.671875 -13.96875 C 3.546875 -14.300781 4.394531 -14.554688 5.21875 -14.734375 C 6.039062 -14.910156 6.84375 -15 7.625 -15 C 9.738281 -15 11.316406 -14.445312 12.359375 -13.34375 C 13.398438 -12.25 13.921875 -10.585938 13.921875 -8.359375 Z M 13.921875 -8.359375 " + id="path158" /> + </symbol> + <symbol + overflow="visible" + id="glyph2-10"> + <path + style="stroke:none;" + d="M 11.8125 -14.21875 L 11.8125 -11.96875 C 11.132812 -12.3125 10.429688 -12.566406 9.703125 -12.734375 C 8.972656 -12.898438 8.21875 -12.984375 7.4375 -12.984375 C 6.25 -12.984375 5.359375 -12.804688 4.765625 -12.453125 C 4.171875 -12.097656 3.875 -11.566406 3.875 -10.859375 C 3.875 -10.304688 4.082031 -9.875 4.5 -9.5625 C 4.925781 -9.257812 5.785156 -8.96875 7.078125 -8.6875 L 7.890625 -8.515625 C 9.585938 -8.148438 10.796875 -7.644531 11.515625 -7 C 12.234375 -6.351562 12.59375 -5.453125 12.59375 -4.296875 C 12.59375 -2.972656 12.054688 -1.925781 10.984375 -1.15625 C 9.910156 -0.382812 8.4375 0 6.5625 0 C 5.78125 0 4.96875 -0.078125 4.125 -0.234375 C 3.28125 -0.390625 2.390625 -0.617188 1.453125 -0.921875 L 1.453125 -3.359375 C 2.335938 -2.910156 3.207031 -2.570312 4.0625 -2.34375 C 4.925781 -2.125 5.773438 -2.015625 6.609375 -2.015625 C 7.742188 -2.015625 8.613281 -2.203125 9.21875 -2.578125 C 9.820312 -2.953125 10.125 -3.484375 10.125 -4.171875 C 10.125 -4.804688 9.90625 -5.289062 9.46875 -5.625 C 9.03125 -5.96875 8.070312 -6.296875 6.59375 -6.609375 L 5.75 -6.796875 C 4.269531 -7.097656 3.195312 -7.566406 2.53125 -8.203125 C 1.875 -8.835938 1.546875 -9.707031 1.546875 -10.8125 C 1.546875 -12.144531 2.03125 -13.175781 3 -13.90625 C 3.976562 -14.632812 5.363281 -15 7.15625 -15 C 8.039062 -15 8.875 -14.929688 9.65625 -14.796875 C 10.4375 -14.671875 11.15625 -14.476562 11.8125 -14.21875 Z M 11.8125 -14.21875 " + id="path161" /> + </symbol> + <symbol + overflow="visible" + id="glyph2-11"> + <path + style="stroke:none;" + d="M 2.3125 -20 L 4.96875 -20 L 4.96875 -8.0625 C 4.96875 -5.96875 5.34375 -4.457031 6.09375 -3.53125 C 6.851562 -2.601562 8.078125 -2.140625 9.765625 -2.140625 C 11.453125 -2.140625 12.671875 -2.601562 13.421875 -3.53125 C 14.179688 -4.457031 14.5625 -5.96875 14.5625 -8.0625 L 14.5625 -20 L 17.203125 -20 L 17.203125 -7.75 C 17.203125 -5.1875 16.570312 -3.253906 15.3125 -1.953125 C 14.0625 -0.648438 12.210938 0 9.765625 0 C 7.304688 0 5.445312 -0.648438 4.1875 -1.953125 C 2.9375 -3.253906 2.3125 -5.1875 2.3125 -7.75 Z M 2.3125 -20 " + id="path164" /> + </symbol> + <symbol + overflow="visible" + id="glyph2-12"> + <path + style="stroke:none;" + d="M 2.625 -20 L 13.796875 -20 L 13.796875 -17.765625 L 5.25 -17.765625 L 5.25 -11.21875 L 12.953125 -11.21875 L 12.953125 -9 L 5.25 -9 L 5.25 0 L 2.625 0 Z M 2.625 -20 " + id="path167" /> + </symbol> + <symbol + overflow="visible" + id="glyph2-13"> + <path + style="stroke:none;" + d="M 2.265625 -6.15625 L 2.265625 -15 L 4.65625 -15 L 4.65625 -6.25 C 4.65625 -4.863281 4.925781 -3.820312 5.46875 -3.125 C 6.007812 -2.4375 6.816406 -2.09375 7.890625 -2.09375 C 9.179688 -2.09375 10.203125 -2.503906 10.953125 -3.328125 C 11.703125 -4.160156 12.078125 -5.289062 12.078125 -6.71875 L 12.078125 -15 L 14.484375 -15 L 14.484375 0 L 12.078125 0 L 12.078125 -2.625 C 11.503906 -1.738281 10.832031 -1.078125 10.0625 -0.640625 C 9.289062 -0.210938 8.398438 0 7.390625 0 C 5.710938 0 4.4375 -0.519531 3.5625 -1.5625 C 2.695312 -2.613281 2.265625 -4.144531 2.265625 -6.15625 Z M 8.296875 -15 Z M 8.296875 -15 " + id="path170" /> + </symbol> + <symbol + overflow="visible" + id="glyph2-14"> + <path + style="stroke:none;" + d="M 14.640625 -8.84375 L 14.640625 0 L 12.234375 0 L 12.234375 -8.765625 C 12.234375 -10.148438 11.960938 -11.1875 11.421875 -11.875 C 10.890625 -12.5625 10.085938 -12.90625 9.015625 -12.90625 C 7.722656 -12.90625 6.703125 -12.488281 5.953125 -11.65625 C 5.203125 -10.832031 4.828125 -9.707031 4.828125 -8.28125 L 4.828125 0 L 2.421875 0 L 2.421875 -15 L 4.828125 -15 L 4.828125 -12.375 C 5.398438 -13.25 6.070312 -13.90625 6.84375 -14.34375 C 7.625 -14.78125 8.523438 -15 9.546875 -15 C 11.222656 -15 12.488281 -14.476562 13.34375 -13.4375 C 14.207031 -12.394531 14.640625 -10.863281 14.640625 -8.84375 Z M 14.640625 -8.84375 " + id="path173" /> + </symbol> + <symbol + overflow="visible" + id="glyph2-15"> + <path + style="stroke:none;" + d="M 13.015625 -14.078125 L 13.015625 -11.859375 C 12.335938 -12.222656 11.65625 -12.492188 10.96875 -12.671875 C 10.289062 -12.859375 9.601562 -12.953125 8.90625 -12.953125 C 7.351562 -12.953125 6.144531 -12.472656 5.28125 -11.515625 C 4.425781 -10.554688 4 -9.21875 4 -7.5 C 4 -5.769531 4.425781 -4.425781 5.28125 -3.46875 C 6.144531 -2.507812 7.351562 -2.03125 8.90625 -2.03125 C 9.601562 -2.03125 10.289062 -2.117188 10.96875 -2.296875 C 11.65625 -2.484375 12.335938 -2.757812 13.015625 -3.125 L 13.015625 -0.9375 C 12.335938 -0.625 11.640625 -0.390625 10.921875 -0.234375 C 10.210938 -0.078125 9.453125 0 8.640625 0 C 6.453125 0 4.707031 -0.675781 3.40625 -2.03125 C 2.113281 -3.382812 1.46875 -5.207031 1.46875 -7.5 C 1.46875 -9.820312 2.117188 -11.648438 3.421875 -12.984375 C 4.734375 -14.328125 6.523438 -15 8.796875 -15 C 9.535156 -15 10.253906 -14.921875 10.953125 -14.765625 C 11.660156 -14.617188 12.347656 -14.390625 13.015625 -14.078125 Z M 13.015625 -14.078125 " + id="path176" /> + </symbol> + <symbol + overflow="visible" + id="glyph2-16"> + <path + style="stroke:none;" + d="M 2.515625 -15 L 4.90625 -15 L 4.90625 0 L 2.515625 0 Z M 2.515625 -20 L 4.90625 -20 L 4.90625 -16.953125 L 2.515625 -16.953125 Z M 2.515625 -20 " + id="path179" /> + </symbol> + <symbol + overflow="visible" + id="glyph2-17"> + <path + style="stroke:none;" + d="M 4.890625 -19 L 4.890625 -15 L 9.8125 -15 L 9.8125 -13.140625 L 4.890625 -13.140625 L 4.890625 -4.921875 C 4.890625 -3.679688 5.050781 -2.882812 5.375 -2.53125 C 5.695312 -2.1875 6.359375 -2.015625 7.359375 -2.015625 L 9.8125 -2.015625 L 9.8125 0 L 7.359375 0 C 5.503906 0 4.222656 -0.351562 3.515625 -1.0625 C 2.816406 -1.78125 2.46875 -3.082031 2.46875 -4.96875 L 2.46875 -13.140625 L 0.71875 -13.140625 L 0.71875 -15 L 2.46875 -15 L 2.46875 -19 Z M 4.890625 -19 " + id="path182" /> + </symbol> + <symbol + overflow="visible" + id="glyph2-18"> + <path + style="stroke:none;" + d="M 14.640625 -8.84375 L 14.640625 0 L 12.234375 0 L 12.234375 -8.765625 C 12.234375 -10.148438 11.960938 -11.1875 11.421875 -11.875 C 10.890625 -12.5625 10.085938 -12.90625 9.015625 -12.90625 C 7.722656 -12.90625 6.703125 -12.488281 5.953125 -11.65625 C 5.203125 -10.832031 4.828125 -9.707031 4.828125 -8.28125 L 4.828125 0 L 2.421875 0 L 2.421875 -20 L 4.828125 -20 L 4.828125 -12.375 C 5.398438 -13.25 6.070312 -13.90625 6.84375 -14.34375 C 7.625 -14.78125 8.523438 -15 9.546875 -15 C 11.222656 -15 12.488281 -14.476562 13.34375 -13.4375 C 14.207031 -12.394531 14.640625 -10.863281 14.640625 -8.84375 Z M 14.640625 -8.84375 " + id="path185" /> + </symbol> + <symbol + overflow="visible" + id="glyph2-19"> + <path + style="stroke:none;" + d="M 12.109375 -7.5 C 12.109375 -9.238281 11.75 -10.585938 11.03125 -11.546875 C 10.320312 -12.503906 9.316406 -12.984375 8.015625 -12.984375 C 6.734375 -12.984375 5.734375 -12.503906 5.015625 -11.546875 C 4.304688 -10.585938 3.953125 -9.238281 3.953125 -7.5 C 3.953125 -5.757812 4.304688 -4.410156 5.015625 -3.453125 C 5.734375 -2.492188 6.734375 -2.015625 8.015625 -2.015625 C 9.316406 -2.015625 10.320312 -2.492188 11.03125 -3.453125 C 11.75 -4.410156 12.109375 -5.757812 12.109375 -7.5 Z M 14.515625 -1.671875 C 14.515625 0.910156 13.960938 2.832031 12.859375 4.09375 C 11.753906 5.363281 10.0625 6 7.78125 6 C 6.945312 6 6.15625 5.929688 5.40625 5.796875 C 4.65625 5.671875 3.929688 5.476562 3.234375 5.21875 L 3.234375 2.75 C 3.929688 3.175781 4.625 3.488281 5.3125 3.6875 C 6 3.894531 6.695312 4 7.40625 4 C 8.976562 4 10.15625 3.554688 10.9375 2.671875 C 11.71875 1.796875 12.109375 0.46875 12.109375 -1.3125 L 12.109375 -2.578125 C 11.617188 -1.710938 10.984375 -1.066406 10.203125 -0.640625 C 9.429688 -0.210938 8.507812 0 7.4375 0 C 5.644531 0 4.203125 -0.679688 3.109375 -2.046875 C 2.015625 -3.421875 1.46875 -5.238281 1.46875 -7.5 C 1.46875 -9.757812 2.015625 -11.570312 3.109375 -12.9375 C 4.203125 -14.3125 5.644531 -15 7.4375 -15 C 8.507812 -15 9.429688 -14.785156 10.203125 -14.359375 C 10.984375 -13.929688 11.617188 -13.285156 12.109375 -12.421875 L 12.109375 -15 L 14.515625 -15 Z M 14.515625 -1.671875 " + id="path188" /> + </symbol> + <symbol + overflow="visible" + id="glyph3-0"> + <path + style="stroke:none;" + d="M 1.25 -10.6875 L 7.0625 -10.6875 L 7.0625 0 L 1.25 0 Z M 2 -0.75 L 6.3125 -0.75 L 6.3125 -9.953125 L 2 -9.953125 Z M 2 -0.75 " + id="path191" /> + </symbol> + <symbol + overflow="visible" + id="glyph3-1"> + <path + style="stroke:none;" + d="M 7.90625 -10 L 7.90625 -3.609375 C 7.90625 -2.441406 7.601562 -1.546875 7 -0.921875 C 6.40625 -0.304688 5.523438 0 4.359375 0 C 2.046875 0 0.890625 -1.210938 0.890625 -3.640625 L 0.890625 -10 L 2.234375 -10 L 2.234375 -3.765625 C 2.234375 -2.023438 2.960938 -1.15625 4.421875 -1.15625 C 5.835938 -1.15625 6.554688 -2.023438 6.578125 -3.765625 L 6.578125 -10 Z M 7.90625 -10 " + id="path194" /> + </symbol> + <symbol + overflow="visible" + id="glyph3-2"> + <path + style="stroke:none;" + d="M 3.078125 0 L 1.75 0 L 1.75 -10 L 7.765625 -10 L 7.765625 -8.828125 L 3.078125 -8.828125 L 3.078125 -5.984375 L 7.5 -5.984375 L 7.5 -4.828125 L 3.078125 -4.828125 Z M 3.078125 0 " + id="path197" /> + </symbol> + <symbol + overflow="visible" + id="glyph3-3"> + <path + style="stroke:none;" + d="M 6.609375 0 L 6.40625 -1.1875 L 6.34375 -1.1875 C 5.84375 -0.394531 5.046875 0 3.953125 0 C 2.078125 0 1.140625 -0.953125 1.140625 -2.859375 L 1.140625 -8 L 2.453125 -8 L 2.453125 -2.9375 C 2.453125 -1.695312 3.015625 -1.078125 4.140625 -1.078125 C 4.910156 -1.078125 5.472656 -1.296875 5.828125 -1.734375 C 6.179688 -2.179688 6.359375 -2.910156 6.359375 -3.921875 L 6.359375 -8 L 7.65625 -8 L 7.65625 0 Z M 6.609375 0 " + id="path200" /> + </symbol> + <symbol + overflow="visible" + id="glyph3-4"> + <path + style="stroke:none;" + d="M 6.359375 0 L 6.359375 -5.171875 C 6.359375 -6.429688 5.789062 -7.0625 4.65625 -7.0625 C 3.1875 -7.0625 2.453125 -6.09375 2.453125 -4.15625 L 2.453125 0 L 1.140625 0 L 1.140625 -8 L 2.203125 -8 L 2.390625 -6.9375 L 2.46875 -6.9375 C 2.957031 -7.644531 3.757812 -8 4.875 -8 C 6.726562 -8 7.65625 -7.039062 7.65625 -5.125 L 7.65625 0 Z M 6.359375 0 " + id="path203" /> + </symbol> + <symbol + overflow="visible" + id="glyph3-5"> + <path + style="stroke:none;" + d="M 7.59375 -7.578125 L 7.15625 -6.453125 C 6.4375 -6.710938 5.796875 -6.84375 5.234375 -6.84375 C 3.460938 -6.84375 2.578125 -5.882812 2.578125 -3.96875 C 2.578125 -2.082031 3.441406 -1.140625 5.171875 -1.140625 C 5.921875 -1.140625 6.6875 -1.285156 7.46875 -1.578125 L 7.46875 -0.4375 C 6.820312 -0.144531 6.035156 0 5.109375 0 C 3.878906 0 2.925781 -0.335938 2.25 -1.015625 C 1.570312 -1.703125 1.234375 -2.679688 1.234375 -3.953125 C 1.234375 -5.265625 1.578125 -6.265625 2.265625 -6.953125 C 2.960938 -7.648438 3.9375 -8 5.1875 -8 C 6.039062 -8 6.84375 -7.859375 7.59375 -7.578125 Z M 7.59375 -7.578125 " + id="path206" /> + </symbol> + <symbol + overflow="visible" + id="glyph3-6"> + <path + style="stroke:none;" + d="M 7.171875 0 L 1.609375 0 L 1.609375 -0.953125 L 3.71875 -0.953125 L 3.71875 -9.046875 L 1.609375 -9.046875 L 1.609375 -10 L 7.171875 -10 L 7.171875 -9.046875 L 5.0625 -9.046875 L 5.0625 -0.953125 L 7.171875 -0.953125 Z M 7.171875 0 " + id="path209" /> + </symbol> + <symbol + overflow="visible" + id="glyph3-7"> + <path + style="stroke:none;" + d="M 7 0 L 7 -5.171875 C 7 -5.878906 6.9375 -6.367188 6.8125 -6.640625 C 6.6875 -6.921875 6.472656 -7.0625 6.171875 -7.0625 C 5.753906 -7.0625 5.453125 -6.859375 5.265625 -6.453125 C 5.078125 -6.054688 4.984375 -5.378906 4.984375 -4.421875 L 4.984375 0 L 3.828125 0 L 3.828125 -5.171875 C 3.828125 -6.429688 3.53125 -7.0625 2.9375 -7.0625 C 2.53125 -7.0625 2.238281 -6.867188 2.0625 -6.484375 C 1.894531 -6.097656 1.8125 -5.320312 1.8125 -4.15625 L 1.8125 0 L 0.65625 0 L 0.65625 -8 L 1.5625 -8 L 1.765625 -6.9375 L 1.828125 -6.9375 C 2.148438 -7.644531 2.632812 -8 3.28125 -8 C 4.050781 -8 4.554688 -7.613281 4.796875 -6.84375 L 4.84375 -6.84375 C 5.207031 -7.613281 5.726562 -8 6.40625 -8 C 7.019531 -8 7.460938 -7.773438 7.734375 -7.328125 C 8.015625 -6.890625 8.15625 -6.15625 8.15625 -5.125 L 8.15625 0 Z M 7 0 " + id="path212" /> + </symbol> + <symbol + overflow="visible" + id="glyph3-8"> + <path + style="stroke:none;" + d="M 2.4375 -1.140625 L 2.34375 -1.140625 C 2.40625 -0.441406 2.4375 0 2.4375 0.1875 L 2.4375 4 L 1.125 4 L 1.125 -8 L 2.1875 -8 L 2.375 -6.9375 L 2.4375 -6.9375 C 2.957031 -7.644531 3.726562 -8 4.75 -8 C 5.707031 -8 6.457031 -7.644531 7 -6.9375 C 7.550781 -6.238281 7.828125 -5.257812 7.828125 -4 C 7.828125 -2.75 7.550781 -1.769531 7 -1.0625 C 6.445312 -0.351562 5.695312 0 4.75 0 C 3.757812 0 2.988281 -0.378906 2.4375 -1.140625 Z M 2.4375 -4.390625 L 2.4375 -4.09375 C 2.4375 -3 2.601562 -2.222656 2.9375 -1.765625 C 3.269531 -1.304688 3.796875 -1.078125 4.515625 -1.078125 C 5.816406 -1.078125 6.46875 -2.085938 6.46875 -4.109375 C 6.46875 -6.078125 5.8125 -7.0625 4.5 -7.0625 C 3.78125 -7.0625 3.257812 -6.851562 2.9375 -6.4375 C 2.625 -6.019531 2.457031 -5.335938 2.4375 -4.390625 Z M 2.4375 -4.390625 " + id="path215" /> + </symbol> + <symbol + overflow="visible" + id="glyph3-9"> + <path + style="stroke:none;" + d="M 3.8125 -9.984375 L 1.890625 -10.140625 L 1.890625 -11 L 5.125 -11 L 5.125 -0.953125 L 7.640625 -0.953125 L 7.640625 0 L 1.34375 0 L 1.34375 -0.953125 L 3.8125 -0.953125 Z M 3.8125 -9.984375 " + id="path218" /> + </symbol> + <symbol + overflow="visible" + id="glyph3-10"> + <path + style="stroke:none;" + d="M 6.734375 3.125 L 2.953125 3.125 L 2.953125 -10 L 6.734375 -10 L 6.734375 -8.9375 L 4.25 -8.9375 L 4.25 2.0625 L 6.734375 2.0625 Z M 6.734375 3.125 " + id="path221" /> + </symbol> + <symbol + overflow="visible" + id="glyph3-11"> + <path + style="stroke:none;" + d="M 0.96875 0 L 0.96875 -10 L 3.421875 -10 C 4.929688 -10 6.109375 -9.566406 6.953125 -8.703125 C 7.796875 -7.835938 8.21875 -6.632812 8.21875 -5.09375 C 8.21875 -3.445312 7.78125 -2.1875 6.90625 -1.3125 C 6.03125 -0.4375 4.769531 0 3.125 0 Z M 2.3125 -8.859375 L 2.3125 -1.140625 L 3 -1.140625 C 5.539062 -1.140625 6.8125 -2.441406 6.8125 -5.046875 C 6.8125 -7.585938 5.632812 -8.859375 3.28125 -8.859375 Z M 2.3125 -8.859375 " + id="path224" /> + </symbol> + <symbol + overflow="visible" + id="glyph3-12"> + <path + style="stroke:none;" + d="M 5.0625 0 L 3.71875 0 L 3.71875 -8.828125 L 0.734375 -8.828125 L 0.734375 -10 L 8.046875 -10 L 8.046875 -8.828125 L 5.0625 -8.828125 Z M 5.0625 0 " + id="path227" /> + </symbol> + <symbol + overflow="visible" + id="glyph3-13"> + <path + style="stroke:none;" + d="M 0.59375 -8 L 1.9375 -8 L 3.8125 -3.046875 C 4.207031 -2.003906 4.421875 -1.269531 4.453125 -0.84375 L 4.484375 -0.84375 C 4.597656 -1.414062 4.816406 -2.15625 5.140625 -3.0625 L 6.84375 -8 L 8.203125 -8 L 4.796875 1.359375 C 4.472656 2.234375 4.097656 2.890625 3.671875 3.328125 C 3.253906 3.773438 2.671875 4 1.921875 4 C 1.503906 4 1.101562 3.957031 0.71875 3.875 L 0.71875 2.828125 C 1.007812 2.890625 1.332031 2.921875 1.6875 2.921875 C 2.144531 2.921875 2.5 2.816406 2.75 2.609375 C 3.007812 2.410156 3.242188 2.054688 3.453125 1.546875 L 3.859375 0.40625 Z M 0.59375 -8 " + id="path230" /> + </symbol> + <symbol + overflow="visible" + id="glyph3-14"> + <path + style="stroke:none;" + d="M 7.859375 -3.875 L 2.3125 -3.875 C 2.34375 -2.050781 3.160156 -1.140625 4.765625 -1.140625 C 5.703125 -1.140625 6.585938 -1.320312 7.421875 -1.6875 L 7.421875 -0.53125 C 6.628906 -0.175781 5.757812 0 4.8125 0 C 3.644531 0 2.707031 -0.347656 2 -1.046875 C 1.300781 -1.753906 0.953125 -2.722656 0.953125 -3.953125 C 0.953125 -5.179688 1.273438 -6.160156 1.921875 -6.890625 C 2.566406 -7.628906 3.429688 -8 4.515625 -8 C 5.535156 -8 6.347656 -7.691406 6.953125 -7.078125 C 7.554688 -6.472656 7.859375 -5.664062 7.859375 -4.65625 Z M 2.328125 -4.9375 L 6.4375 -4.9375 C 6.4375 -6.25 5.785156 -6.90625 4.484375 -6.90625 C 3.171875 -6.90625 2.453125 -6.25 2.328125 -4.9375 Z M 2.328125 -4.9375 " + id="path233" /> + </symbol> + <symbol + overflow="visible" + id="glyph3-15"> + <path + style="stroke:none;" + d="M 5.515625 -1.9375 L 5.625 -1.765625 C 5.351562 -0.691406 4.890625 0.5625 4.234375 2 L 3.15625 2 C 3.519531 0.457031 3.785156 -0.851562 3.953125 -1.9375 Z M 5.515625 -1.9375 " + id="path236" /> + </symbol> + <symbol + overflow="visible" + id="glyph3-16"> + <path + style="stroke:none;" + d="M 4.40625 -2.375 C 5.125 -2.375 5.484375 -1.976562 5.484375 -1.1875 C 5.484375 -0.394531 5.125 0 4.40625 0 C 3.675781 0 3.3125 -0.394531 3.3125 -1.1875 C 3.3125 -1.976562 3.675781 -2.375 4.40625 -2.375 Z M 4.40625 -2.375 " + id="path239" /> + </symbol> + <symbol + overflow="visible" + id="glyph3-17"> + <path + style="stroke:none;" + d="M 2.078125 2.0625 L 4.546875 2.0625 L 4.546875 -8.9375 L 2.078125 -8.9375 L 2.078125 -10 L 5.859375 -10 L 5.859375 3.125 L 2.078125 3.125 Z M 2.078125 2.0625 " + id="path242" /> + </symbol> + <symbol + overflow="visible" + id="glyph3-18"> + <path + style="stroke:none;" + d="M 7.1875 0 L 6.15625 -2.8125 L 2.640625 -2.8125 L 1.59375 0 L 0.234375 0 L 3.703125 -10 L 5.09375 -10 L 8.5625 0 Z M 5.78125 -4 L 4.828125 -7 C 4.640625 -7.582031 4.492188 -8.113281 4.390625 -8.59375 C 4.285156 -8.125 4.175781 -7.691406 4.0625 -7.296875 L 3.015625 -4 Z M 5.78125 -4 " + id="path245" /> + </symbol> + <symbol + overflow="visible" + id="glyph3-19"> + <path + style="stroke:none;" + d="M 6.421875 -1.046875 L 6.375 -1.046875 C 5.832031 -0.347656 5.0625 0 4.0625 0 C 3.101562 0 2.347656 -0.347656 1.796875 -1.046875 C 1.253906 -1.753906 0.984375 -2.734375 0.984375 -3.984375 C 0.984375 -5.242188 1.253906 -6.226562 1.796875 -6.9375 C 2.347656 -7.644531 3.101562 -8 4.0625 -8 C 5.039062 -8 5.8125 -7.613281 6.375 -6.84375 L 6.453125 -6.84375 C 6.398438 -7.4375 6.375 -7.816406 6.375 -7.984375 L 6.375 -11 L 7.671875 -11 L 7.671875 0 L 6.625 0 Z M 6.375 -3.703125 L 6.375 -3.984375 C 6.375 -5.035156 6.207031 -5.785156 5.875 -6.234375 C 5.539062 -6.679688 5.007812 -6.90625 4.28125 -6.90625 C 2.976562 -6.90625 2.328125 -5.925781 2.328125 -3.96875 C 2.328125 -2.039062 2.984375 -1.078125 4.296875 -1.078125 C 5.023438 -1.078125 5.546875 -1.28125 5.859375 -1.6875 C 6.179688 -2.101562 6.351562 -2.773438 6.375 -3.703125 Z M 6.375 -3.703125 " + id="path248" /> + </symbol> + <symbol + overflow="visible" + id="glyph3-20"> + <path + style="stroke:none;" + d="M 5.328125 -11 C 5.835938 -11 6.09375 -10.726562 6.09375 -10.1875 C 6.09375 -9.632812 5.835938 -9.359375 5.328125 -9.359375 C 4.816406 -9.359375 4.5625 -9.632812 4.5625 -10.1875 C 4.5625 -10.726562 4.816406 -11 5.328125 -11 Z M 0.96875 3.75 L 0.96875 2.625 C 1.601562 2.820312 2.289062 2.921875 3.03125 2.921875 C 3.59375 2.921875 4.03125 2.773438 4.34375 2.484375 C 4.65625 2.191406 4.8125 1.789062 4.8125 1.28125 L 4.8125 -7.046875 L 1.8125 -7.046875 L 1.8125 -8 L 6.125 -8 L 6.125 1.171875 C 6.125 2.078125 5.851562 2.773438 5.3125 3.265625 C 4.769531 3.753906 4.003906 4 3.015625 4 C 2.234375 4 1.550781 3.914062 0.96875 3.75 Z M 0.96875 3.75 " + id="path251" /> + </symbol> + <symbol + overflow="visible" + id="glyph3-21"> + <path + style="stroke:none;" + d="M 1.453125 -0.484375 L 1.453125 -1.65625 C 2.378906 -1.257812 3.265625 -1.0625 4.109375 -1.0625 C 5.421875 -1.0625 6.078125 -1.441406 6.078125 -2.203125 C 6.078125 -2.460938 5.957031 -2.691406 5.71875 -2.890625 C 5.488281 -3.085938 4.953125 -3.335938 4.109375 -3.640625 C 2.992188 -4.046875 2.289062 -4.414062 2 -4.75 C 1.707031 -5.09375 1.5625 -5.492188 1.5625 -5.953125 C 1.5625 -6.585938 1.828125 -7.085938 2.359375 -7.453125 C 2.898438 -7.816406 3.640625 -8 4.578125 -8 C 5.523438 -8 6.40625 -7.820312 7.21875 -7.46875 L 6.796875 -6.40625 C 5.921875 -6.738281 5.15625 -6.90625 4.5 -6.90625 C 3.375 -6.90625 2.8125 -6.597656 2.8125 -5.984375 C 2.8125 -5.703125 2.929688 -5.472656 3.171875 -5.296875 C 3.410156 -5.117188 3.96875 -4.882812 4.84375 -4.59375 C 5.851562 -4.226562 6.519531 -3.867188 6.84375 -3.515625 C 7.175781 -3.171875 7.34375 -2.75 7.34375 -2.25 C 7.34375 -1.539062 7.0625 -0.988281 6.5 -0.59375 C 5.945312 -0.195312 5.160156 0 4.140625 0 C 2.953125 0 2.054688 -0.160156 1.453125 -0.484375 Z M 1.453125 -0.484375 " + id="path254" /> + </symbol> + <symbol + overflow="visible" + id="glyph3-22"> + <path + style="stroke:none;" + d="M 7.3125 -1.21875 L 7.3125 -0.234375 C 6.6875 -0.078125 6.082031 0 5.5 0 C 3.769531 0 2.90625 -0.816406 2.90625 -2.453125 L 2.90625 -7.03125 L 1 -7.03125 L 1 -7.703125 L 2.90625 -8.03125 L 3.453125 -10 L 4.21875 -10 L 4.21875 -8 L 7.34375 -8 L 7.34375 -7.03125 L 4.21875 -7.03125 L 4.21875 -2.453125 C 4.21875 -1.523438 4.675781 -1.0625 5.59375 -1.0625 C 6.03125 -1.0625 6.601562 -1.113281 7.3125 -1.21875 Z M 7.3125 -1.21875 " + id="path257" /> + </symbol> + <symbol + overflow="visible" + id="glyph3-23"> + <path + style="stroke:none;" + d="" + id="path260" /> + </symbol> + <symbol + overflow="visible" + id="glyph3-24"> + <path + style="stroke:none;" + d="M 6.40625 0 L 6.140625 -1.234375 L 6.09375 -1.234375 C 5.71875 -0.765625 5.335938 -0.441406 4.953125 -0.265625 C 4.566406 -0.0859375 4.066406 0 3.453125 0 C 2.679688 0 2.070312 -0.210938 1.625 -0.640625 C 1.1875 -1.078125 0.96875 -1.675781 0.96875 -2.4375 C 0.96875 -4.09375 2.1875 -4.921875 4.625 -4.921875 L 6.078125 -4.921875 L 6.078125 -5.375 C 6.078125 -6.394531 5.492188 -6.90625 4.328125 -6.90625 C 3.628906 -6.90625 2.847656 -6.734375 1.984375 -6.390625 L 1.53125 -7.296875 C 2.46875 -7.765625 3.378906 -8 4.265625 -8 C 5.347656 -8 6.128906 -7.789062 6.609375 -7.375 C 7.097656 -6.957031 7.34375 -6.289062 7.34375 -5.375 L 7.34375 0 Z M 6.0625 -4.078125 L 4.90625 -4.078125 C 3.96875 -4.078125 3.300781 -3.9375 2.90625 -3.65625 C 2.519531 -3.382812 2.328125 -2.972656 2.328125 -2.421875 C 2.328125 -1.503906 2.800781 -1.046875 3.75 -1.046875 C 4.457031 -1.046875 5.019531 -1.242188 5.4375 -1.640625 C 5.851562 -2.046875 6.0625 -2.613281 6.0625 -3.34375 Z M 6.0625 -4.078125 " + id="path263" /> + </symbol> + <symbol + overflow="visible" + id="glyph3-25"> + <path + style="stroke:none;" + d="M 7.59375 -7.703125 L 7.234375 -6.640625 C 6.648438 -6.859375 6.113281 -6.96875 5.625 -6.96875 C 4.851562 -6.96875 4.253906 -6.738281 3.828125 -6.28125 C 3.398438 -5.832031 3.1875 -5.179688 3.1875 -4.328125 L 3.1875 0 L 1.890625 0 L 1.890625 -8 L 2.953125 -8 L 3.109375 -6.5625 L 3.171875 -6.5625 C 3.535156 -7.082031 3.921875 -7.453125 4.328125 -7.671875 C 4.742188 -7.890625 5.257812 -8 5.875 -8 C 6.4375 -8 7.007812 -7.898438 7.59375 -7.703125 Z M 7.59375 -7.703125 " + id="path266" /> + </symbol> + <symbol + overflow="visible" + id="glyph3-26"> + <path + style="stroke:none;" + d="M 4.53125 -11 C 5.039062 -11 5.296875 -10.726562 5.296875 -10.1875 C 5.296875 -9.914062 5.21875 -9.707031 5.0625 -9.5625 C 4.914062 -9.425781 4.738281 -9.359375 4.53125 -9.359375 C 4.019531 -9.359375 3.765625 -9.632812 3.765625 -10.1875 C 3.765625 -10.726562 4.019531 -11 4.53125 -11 Z M 3.875 -6.953125 L 1.953125 -7.109375 L 1.953125 -8 L 5.171875 -8 L 5.171875 -0.953125 L 7.703125 -0.953125 L 7.703125 0 L 1.40625 0 L 1.40625 -0.953125 L 3.875 -0.953125 Z M 3.875 -6.953125 " + id="path269" /> + </symbol> + <symbol + overflow="visible" + id="glyph3-27"> + <path + style="stroke:none;" + d="M 5.296875 -10 L 6.671875 -10 C 4.523438 -8.175781 3.453125 -6.003906 3.453125 -3.484375 C 3.453125 -0.960938 4.519531 1.195312 6.65625 3 L 5.296875 3 C 3.171875 1.289062 2.109375 -0.863281 2.109375 -3.46875 C 2.109375 -6.0625 3.171875 -8.238281 5.296875 -10 Z M 5.296875 -10 " + id="path272" /> + </symbol> + <symbol + overflow="visible" + id="glyph3-28"> + <path + style="stroke:none;" + d="M 8.0625 -8 L 8.0625 -7.046875 L 6.65625 -6.8125 C 6.96875 -6.332031 7.125 -5.738281 7.125 -5.03125 C 7.125 -4.125 6.867188 -3.398438 6.359375 -2.859375 C 5.859375 -2.328125 5.148438 -2.0625 4.234375 -2.0625 C 3.972656 -2.0625 3.769531 -2.078125 3.625 -2.109375 C 3.144531 -1.929688 2.90625 -1.738281 2.90625 -1.53125 C 2.90625 -1.289062 3.289062 -1.171875 4.0625 -1.171875 L 5.40625 -1.171875 C 6.226562 -1.171875 6.859375 -0.972656 7.296875 -0.578125 C 7.742188 -0.191406 7.96875 0.367188 7.96875 1.109375 C 7.96875 3.035156 6.617188 4 3.921875 4 C 2.878906 4 2.085938 3.789062 1.546875 3.375 C 1.003906 2.957031 0.734375 2.375 0.734375 1.625 C 0.734375 0.519531 1.304688 -0.175781 2.453125 -0.46875 C 1.992188 -0.632812 1.765625 -0.910156 1.765625 -1.296875 C 1.765625 -1.691406 2.082031 -2.035156 2.71875 -2.328125 C 2.289062 -2.535156 1.953125 -2.867188 1.703125 -3.328125 C 1.460938 -3.796875 1.34375 -4.304688 1.34375 -4.859375 C 1.34375 -5.859375 1.597656 -6.628906 2.109375 -7.171875 C 2.617188 -7.722656 3.34375 -8 4.28125 -8 C 4.695312 -8 5.054688 -8 5.359375 -8 Z M 4.25 -2.9375 C 5.320312 -2.9375 5.859375 -3.609375 5.859375 -4.953125 C 5.859375 -6.359375 5.316406 -7.0625 4.234375 -7.0625 C 3.160156 -7.0625 2.625 -6.351562 2.625 -4.9375 C 2.625 -3.601562 3.164062 -2.9375 4.25 -2.9375 Z M 4.953125 0 L 3.609375 0 C 2.515625 0 1.96875 0.53125 1.96875 1.59375 C 1.96875 2.539062 2.613281 3.015625 3.90625 3.015625 C 5.789062 3.015625 6.734375 2.410156 6.734375 1.203125 C 6.734375 0.734375 6.613281 0.414062 6.375 0.25 C 6.132812 0.0820312 5.660156 0 4.953125 0 Z M 4.953125 0 " + id="path275" /> + </symbol> + <symbol + overflow="visible" + id="glyph3-29"> + <path + style="stroke:none;" + d="M 6.359375 0 L 6.359375 -5.0625 C 6.359375 -6.289062 5.789062 -6.90625 4.65625 -6.90625 C 3.1875 -6.90625 2.453125 -5.957031 2.453125 -4.0625 L 2.453125 0 L 1.140625 0 L 1.140625 -11 L 2.453125 -11 L 2.453125 -7.78125 L 2.390625 -6.78125 L 2.46875 -6.78125 C 2.957031 -7.59375 3.757812 -8 4.875 -8 C 6.726562 -8 7.65625 -7.039062 7.65625 -5.125 L 7.65625 0 Z M 6.359375 0 " + id="path278" /> + </symbol> + <symbol + overflow="visible" + id="glyph3-30"> + <path + style="stroke:none;" + d="M 3.5 3 L 2.140625 3 C 4.273438 1.195312 5.34375 -0.960938 5.34375 -3.484375 C 5.34375 -6.003906 4.269531 -8.175781 2.125 -10 L 3.5 -10 C 5.625 -8.25 6.6875 -6.070312 6.6875 -3.46875 C 6.6875 -0.851562 5.625 1.300781 3.5 3 Z M 3.5 3 " + id="path281" /> + </symbol> + <symbol + overflow="visible" + id="glyph4-0"> + <path + style="stroke:none;" + d="M 0.875 2.140625 L 0.875 -9.609375 L 7.734375 -9.609375 L 7.734375 2.140625 Z M 1.625 1.390625 L 7 1.390625 L 7 -8.875 L 1.625 -8.875 Z M 1.625 1.390625 " + id="path284" /> + </symbol> + <symbol + overflow="visible" + id="glyph4-1"> + <path + style="stroke:none;" + d="M 5.484375 -6.796875 C 5.347656 -6.878906 5.195312 -6.941406 5.03125 -6.984375 C 4.875 -7.023438 4.703125 -7.046875 4.515625 -7.046875 C 3.835938 -7.046875 3.316406 -6.800781 2.953125 -6.3125 C 2.597656 -5.832031 2.421875 -5.132812 2.421875 -4.21875 L 2.421875 0 L 1.203125 0 L 1.203125 -8 L 2.421875 -8 L 2.421875 -6.78125 C 2.671875 -7.195312 2.992188 -7.503906 3.390625 -7.703125 C 3.796875 -7.898438 4.289062 -8 4.875 -8 C 4.945312 -8 5.035156 -8.007812 5.140625 -8.03125 C 5.242188 -8.050781 5.351562 -8.078125 5.46875 -8.109375 Z M 5.484375 -6.796875 " + id="path287" /> + </symbol> + <symbol + overflow="visible" + id="glyph4-2"> + <path + style="stroke:none;" + d="M 7.484375 -4.5625 L 7.484375 -4 L 1.984375 -4 C 2.035156 -3.050781 2.28125 -2.328125 2.71875 -1.828125 C 3.164062 -1.335938 3.789062 -1.09375 4.59375 -1.09375 C 5.050781 -1.09375 5.492188 -1.15625 5.921875 -1.28125 C 6.359375 -1.414062 6.785156 -1.613281 7.203125 -1.875 L 7.203125 -0.609375 C 6.773438 -0.421875 6.335938 -0.269531 5.890625 -0.15625 C 5.441406 -0.0507812 4.984375 0 4.515625 0 C 3.347656 0 2.425781 -0.351562 1.75 -1.0625 C 1.070312 -1.769531 0.734375 -2.726562 0.734375 -3.9375 C 0.734375 -5.1875 1.054688 -6.175781 1.703125 -6.90625 C 2.347656 -7.632812 3.21875 -8 4.3125 -8 C 5.289062 -8 6.0625 -7.691406 6.625 -7.078125 C 7.195312 -6.460938 7.484375 -5.625 7.484375 -4.5625 Z M 6.296875 -5 C 6.285156 -5.582031 6.097656 -6.046875 5.734375 -6.390625 C 5.378906 -6.734375 4.910156 -6.90625 4.328125 -6.90625 C 3.648438 -6.90625 3.109375 -6.738281 2.703125 -6.40625 C 2.304688 -6.070312 2.082031 -5.601562 2.03125 -5 Z M 6.296875 -5 " + id="path290" /> + </symbol> + <symbol + overflow="visible" + id="glyph4-3"> + <path + style="stroke:none;" + d="M 1.96875 -4 C 1.96875 -3.09375 2.148438 -2.378906 2.515625 -1.859375 C 2.878906 -1.335938 3.378906 -1.078125 4.015625 -1.078125 C 4.640625 -1.078125 5.132812 -1.335938 5.5 -1.859375 C 5.863281 -2.378906 6.046875 -3.09375 6.046875 -4 C 6.046875 -4.90625 5.863281 -5.617188 5.5 -6.140625 C 5.132812 -6.660156 4.640625 -6.921875 4.015625 -6.921875 C 3.378906 -6.921875 2.878906 -6.660156 2.515625 -6.140625 C 2.148438 -5.617188 1.96875 -4.90625 1.96875 -4 Z M 6.046875 -1.375 C 5.796875 -0.90625 5.476562 -0.554688 5.09375 -0.328125 C 4.707031 -0.109375 4.25 0 3.71875 0 C 2.832031 0 2.113281 -0.363281 1.5625 -1.09375 C 1.007812 -1.832031 0.734375 -2.800781 0.734375 -4 C 0.734375 -5.195312 1.007812 -6.160156 1.5625 -6.890625 C 2.113281 -7.628906 2.832031 -8 3.71875 -8 C 4.25 -8 4.707031 -7.882812 5.09375 -7.65625 C 5.476562 -7.425781 5.796875 -7.082031 6.046875 -6.625 L 6.046875 -8 L 7.25 -8 L 7.25 3 L 6.046875 3 Z M 6.046875 -1.375 " + id="path293" /> + </symbol> + <symbol + overflow="visible" + id="glyph4-4"> + <path + style="stroke:none;" + d="M 1.125 -3.28125 L 1.125 -8 L 2.328125 -8 L 2.328125 -3.1875 C 2.328125 -2.425781 2.460938 -1.851562 2.734375 -1.46875 C 3.003906 -1.09375 3.40625 -0.90625 3.9375 -0.90625 C 4.582031 -0.90625 5.09375 -1.128906 5.46875 -1.578125 C 5.851562 -2.035156 6.046875 -2.65625 6.046875 -3.4375 L 6.046875 -8 L 7.234375 -8 L 7.234375 0 L 6.046875 0 L 6.046875 -1.203125 C 5.753906 -0.796875 5.414062 -0.492188 5.03125 -0.296875 C 4.644531 -0.0976562 4.195312 0 3.6875 0 C 2.851562 0 2.21875 -0.273438 1.78125 -0.828125 C 1.34375 -1.390625 1.125 -2.207031 1.125 -3.28125 Z M 4.140625 -8 Z M 4.140625 -8 " + id="path296" /> + </symbol> + <symbol + overflow="visible" + id="glyph4-5"> + <path + style="stroke:none;" + d="M 1.25 -8 L 2.453125 -8 L 2.453125 0 L 1.25 0 Z M 1.25 -11 L 2.453125 -11 L 2.453125 -9.375 L 1.25 -9.375 Z M 1.25 -11 " + id="path299" /> + </symbol> + <symbol + overflow="visible" + id="glyph4-6"> + <path + style="stroke:none;" + d="M 5.90625 -7.578125 L 5.90625 -6.390625 C 5.5625 -6.566406 5.207031 -6.695312 4.84375 -6.78125 C 4.476562 -6.875 4.101562 -6.921875 3.71875 -6.921875 C 3.125 -6.921875 2.675781 -6.828125 2.375 -6.640625 C 2.082031 -6.453125 1.9375 -6.164062 1.9375 -5.78125 C 1.9375 -5.5 2.039062 -5.273438 2.25 -5.109375 C 2.46875 -4.941406 2.894531 -4.78125 3.53125 -4.625 L 3.9375 -4.53125 C 4.789062 -4.34375 5.394531 -4.078125 5.75 -3.734375 C 6.113281 -3.390625 6.296875 -2.910156 6.296875 -2.296875 C 6.296875 -1.585938 6.023438 -1.023438 5.484375 -0.609375 C 4.953125 -0.203125 4.21875 0 3.28125 0 C 2.882812 0 2.472656 -0.0390625 2.046875 -0.125 C 1.628906 -0.207031 1.1875 -0.328125 0.71875 -0.484375 L 0.71875 -1.796875 C 1.164062 -1.554688 1.601562 -1.375 2.03125 -1.25 C 2.457031 -1.132812 2.882812 -1.078125 3.3125 -1.078125 C 3.875 -1.078125 4.304688 -1.175781 4.609375 -1.375 C 4.910156 -1.570312 5.0625 -1.859375 5.0625 -2.234375 C 5.0625 -2.566406 4.953125 -2.820312 4.734375 -3 C 4.515625 -3.1875 4.035156 -3.359375 3.296875 -3.515625 L 2.875 -3.625 C 2.132812 -3.789062 1.597656 -4.039062 1.265625 -4.375 C 0.941406 -4.707031 0.78125 -5.164062 0.78125 -5.75 C 0.78125 -6.46875 1.019531 -7.019531 1.5 -7.40625 C 1.988281 -7.800781 2.679688 -8 3.578125 -8 C 4.015625 -8 4.425781 -7.960938 4.8125 -7.890625 C 5.207031 -7.816406 5.570312 -7.710938 5.90625 -7.578125 Z M 5.90625 -7.578125 " + id="path302" /> + </symbol> + <symbol + overflow="visible" + id="glyph4-7"> + <path + style="stroke:none;" + d="M 7.125 -9.46875 L 7.125 -8.171875 C 6.632812 -8.398438 6.164062 -8.570312 5.71875 -8.6875 C 5.28125 -8.800781 4.851562 -8.859375 4.4375 -8.859375 C 3.71875 -8.859375 3.164062 -8.722656 2.78125 -8.453125 C 2.394531 -8.179688 2.203125 -7.789062 2.203125 -7.28125 C 2.203125 -6.863281 2.328125 -6.546875 2.578125 -6.328125 C 2.835938 -6.109375 3.328125 -5.9375 4.046875 -5.8125 L 4.84375 -5.640625 C 5.820312 -5.460938 6.546875 -5.140625 7.015625 -4.671875 C 7.484375 -4.210938 7.71875 -3.597656 7.71875 -2.828125 C 7.71875 -1.898438 7.398438 -1.195312 6.765625 -0.71875 C 6.140625 -0.238281 5.21875 0 4 0 C 3.539062 0 3.050781 -0.0507812 2.53125 -0.15625 C 2.007812 -0.269531 1.472656 -0.4375 0.921875 -0.65625 L 0.921875 -2.015625 C 1.453125 -1.722656 1.972656 -1.503906 2.484375 -1.359375 C 2.992188 -1.210938 3.5 -1.140625 4 -1.140625 C 4.75 -1.140625 5.328125 -1.285156 5.734375 -1.578125 C 6.140625 -1.867188 6.34375 -2.28125 6.34375 -2.8125 C 6.34375 -3.28125 6.195312 -3.648438 5.90625 -3.921875 C 5.613281 -4.191406 5.132812 -4.390625 4.46875 -4.515625 L 3.65625 -4.671875 C 2.675781 -4.859375 1.96875 -5.15625 1.53125 -5.5625 C 1.09375 -5.976562 0.875 -6.550781 0.875 -7.28125 C 0.875 -8.113281 1.175781 -8.773438 1.78125 -9.265625 C 2.382812 -9.753906 3.21875 -10 4.28125 -10 C 4.738281 -10 5.203125 -9.953125 5.671875 -9.859375 C 6.148438 -9.773438 6.632812 -9.644531 7.125 -9.46875 Z M 7.125 -9.46875 " + id="path305" /> + </symbol> + <symbol + overflow="visible" + id="glyph4-8"> + <path + style="stroke:none;" + d="M 7.3125 -4.71875 L 7.3125 0 L 6.125 0 L 6.125 -4.671875 C 6.125 -5.410156 5.988281 -5.960938 5.71875 -6.328125 C 5.445312 -6.691406 5.039062 -6.875 4.5 -6.875 C 3.851562 -6.875 3.34375 -6.65625 2.96875 -6.21875 C 2.601562 -5.78125 2.421875 -5.175781 2.421875 -4.40625 L 2.421875 0 L 1.203125 0 L 1.203125 -11 L 2.421875 -11 L 2.421875 -6.59375 C 2.703125 -7.0625 3.035156 -7.410156 3.421875 -7.640625 C 3.816406 -7.878906 4.265625 -8 4.765625 -8 C 5.609375 -8 6.242188 -7.71875 6.671875 -7.15625 C 7.097656 -6.601562 7.3125 -5.789062 7.3125 -4.71875 Z M 7.3125 -4.71875 " + id="path308" /> + </symbol> + <symbol + overflow="visible" + id="glyph4-9"> + <path + style="stroke:none;" + d="M 4.5625 -4 C 3.601562 -4 2.9375 -3.878906 2.5625 -3.640625 C 2.1875 -3.398438 2 -2.984375 2 -2.390625 C 2 -1.921875 2.140625 -1.550781 2.421875 -1.28125 C 2.703125 -1.007812 3.082031 -0.875 3.5625 -0.875 C 4.226562 -0.875 4.757812 -1.128906 5.15625 -1.640625 C 5.5625 -2.160156 5.765625 -2.851562 5.765625 -3.71875 L 5.765625 -4 Z M 6.953125 -4.453125 L 6.953125 0 L 5.765625 0 L 5.765625 -1.203125 C 5.484375 -0.785156 5.140625 -0.476562 4.734375 -0.28125 C 4.328125 -0.09375 3.828125 0 3.234375 0 C 2.492188 0 1.898438 -0.21875 1.453125 -0.65625 C 1.015625 -1.09375 0.796875 -1.675781 0.796875 -2.40625 C 0.796875 -3.269531 1.070312 -3.914062 1.625 -4.34375 C 2.175781 -4.78125 2.992188 -5 4.078125 -5 L 5.765625 -5 L 5.765625 -5.125 C 5.765625 -5.6875 5.582031 -6.125 5.21875 -6.4375 C 4.851562 -6.75 4.34375 -6.90625 3.6875 -6.90625 C 3.269531 -6.90625 2.863281 -6.851562 2.46875 -6.75 C 2.070312 -6.644531 1.691406 -6.488281 1.328125 -6.28125 L 1.328125 -7.453125 C 1.765625 -7.628906 2.191406 -7.765625 2.609375 -7.859375 C 3.023438 -7.953125 3.425781 -8 3.8125 -8 C 4.863281 -8 5.648438 -7.703125 6.171875 -7.109375 C 6.691406 -6.523438 6.953125 -5.640625 6.953125 -4.453125 Z M 6.953125 -4.453125 " + id="path311" /> + </symbol> + <symbol + overflow="visible" + id="glyph4-10"> + <path + style="stroke:none;" + d="" + id="path314" /> + </symbol> + <symbol + overflow="visible" + id="glyph4-11"> + <path + style="stroke:none;" + d="M 4.5625 -9.15625 L 2.765625 -3.984375 L 6.34375 -3.984375 Z M 3.8125 -10 L 5.296875 -10 L 9 0 L 7.640625 0 L 6.75 -2.828125 L 2.375 -2.828125 L 1.484375 0 L 0.109375 0 Z M 3.8125 -10 " + id="path317" /> + </symbol> + <symbol + overflow="visible" + id="glyph4-12"> + <path + style="stroke:none;" + d="M 2.625 -8.84375 L 2.625 -4.984375 L 4.28125 -4.984375 C 4.882812 -4.984375 5.351562 -5.148438 5.6875 -5.484375 C 6.03125 -5.816406 6.203125 -6.296875 6.203125 -6.921875 C 6.203125 -7.535156 6.03125 -8.007812 5.6875 -8.34375 C 5.351562 -8.675781 4.882812 -8.84375 4.28125 -8.84375 Z M 1.3125 -10 L 4.28125 -10 C 5.363281 -10 6.179688 -9.738281 6.734375 -9.21875 C 7.296875 -8.695312 7.578125 -7.925781 7.578125 -6.90625 C 7.578125 -5.894531 7.296875 -5.128906 6.734375 -4.609375 C 6.179688 -4.085938 5.363281 -3.828125 4.28125 -3.828125 L 2.625 -3.828125 L 2.625 0 L 1.3125 0 Z M 1.3125 -10 " + id="path320" /> + </symbol> + <symbol + overflow="visible" + id="glyph4-13"> + <path + style="stroke:none;" + d="M 1.3125 -10 L 2.625 -10 L 2.625 0 L 1.3125 0 Z M 1.3125 -10 " + id="path323" /> + </symbol> + <symbol + overflow="visible" + id="glyph4-14"> + <path + style="stroke:none;" + d="M 3.390625 -10 L 4.484375 -10 L 1.109375 1.5 L 0 1.5 Z M 3.390625 -10 " + id="path326" /> + </symbol> + <symbol + overflow="visible" + id="glyph4-15"> + <path + style="stroke:none;" + d="M 6.9375 -6.3125 C 7.226562 -6.882812 7.582031 -7.304688 8 -7.578125 C 8.414062 -7.859375 8.90625 -8 9.46875 -8 C 10.226562 -8 10.8125 -7.710938 11.21875 -7.140625 C 11.632812 -6.566406 11.84375 -5.757812 11.84375 -4.71875 L 11.84375 0 L 10.640625 0 L 10.640625 -4.671875 C 10.640625 -5.421875 10.515625 -5.972656 10.265625 -6.328125 C 10.023438 -6.691406 9.648438 -6.875 9.140625 -6.875 C 8.523438 -6.875 8.035156 -6.65625 7.671875 -6.21875 C 7.304688 -5.78125 7.125 -5.175781 7.125 -4.40625 L 7.125 0 L 5.921875 0 L 5.921875 -4.671875 C 5.921875 -5.421875 5.796875 -5.972656 5.546875 -6.328125 C 5.304688 -6.691406 4.925781 -6.875 4.40625 -6.875 C 3.800781 -6.875 3.316406 -6.648438 2.953125 -6.203125 C 2.597656 -5.765625 2.421875 -5.164062 2.421875 -4.40625 L 2.421875 0 L 1.203125 0 L 1.203125 -8 L 2.421875 -8 L 2.421875 -6.59375 C 2.691406 -7.070312 3.015625 -7.425781 3.390625 -7.65625 C 3.773438 -7.882812 4.226562 -8 4.75 -8 C 5.28125 -8 5.734375 -7.851562 6.109375 -7.5625 C 6.484375 -7.269531 6.757812 -6.851562 6.9375 -6.3125 Z M 6.9375 -6.3125 " + id="path329" /> + </symbol> + <symbol + overflow="visible" + id="glyph4-16"> + <path + style="stroke:none;" + d="M 2.4375 -10 L 2.4375 -8 L 4.90625 -8 L 4.90625 -7 L 2.4375 -7 L 2.4375 -2.625 C 2.4375 -1.96875 2.515625 -1.546875 2.671875 -1.359375 C 2.835938 -1.171875 3.171875 -1.078125 3.671875 -1.078125 L 4.90625 -1.078125 L 4.90625 0 L 3.671875 0 C 2.753906 0 2.117188 -0.1875 1.765625 -0.5625 C 1.410156 -0.945312 1.234375 -1.644531 1.234375 -2.65625 L 1.234375 -7 L 0.359375 -7 L 0.359375 -8 L 1.234375 -8 L 1.234375 -10 Z M 2.4375 -10 " + id="path332" /> + </symbol> + <symbol + overflow="visible" + id="glyph4-17"> + <path + style="stroke:none;" + d="M 4.078125 -6.90625 C 3.441406 -6.90625 2.9375 -6.644531 2.5625 -6.125 C 2.1875 -5.601562 2 -4.894531 2 -4 C 2 -3.101562 2.179688 -2.394531 2.546875 -1.875 C 2.921875 -1.351562 3.429688 -1.09375 4.078125 -1.09375 C 4.710938 -1.09375 5.21875 -1.351562 5.59375 -1.875 C 5.96875 -2.394531 6.15625 -3.101562 6.15625 -4 C 6.15625 -4.894531 5.96875 -5.601562 5.59375 -6.125 C 5.21875 -6.644531 4.710938 -6.90625 4.078125 -6.90625 Z M 4.078125 -8 C 5.117188 -8 5.9375 -7.644531 6.53125 -6.9375 C 7.125 -6.226562 7.421875 -5.25 7.421875 -4 C 7.421875 -2.757812 7.125 -1.78125 6.53125 -1.0625 C 5.9375 -0.351562 5.117188 0 4.078125 0 C 3.035156 0 2.21875 -0.351562 1.625 -1.0625 C 1.03125 -1.78125 0.734375 -2.757812 0.734375 -4 C 0.734375 -5.25 1.03125 -6.226562 1.625 -6.9375 C 2.21875 -7.644531 3.035156 -8 4.078125 -8 Z M 4.078125 -8 " + id="path335" /> + </symbol> + <symbol + overflow="visible" + id="glyph4-18"> + <path + style="stroke:none;" + d="M 6.046875 -6.625 L 6.046875 -11 L 7.25 -11 L 7.25 0 L 6.046875 0 L 6.046875 -1.171875 C 5.796875 -0.773438 5.476562 -0.476562 5.09375 -0.28125 C 4.707031 -0.09375 4.25 0 3.71875 0 C 2.832031 0 2.113281 -0.363281 1.5625 -1.09375 C 1.007812 -1.832031 0.734375 -2.800781 0.734375 -4 C 0.734375 -5.195312 1.007812 -6.160156 1.5625 -6.890625 C 2.113281 -7.628906 2.832031 -8 3.71875 -8 C 4.25 -8 4.707031 -7.882812 5.09375 -7.65625 C 5.476562 -7.425781 5.796875 -7.082031 6.046875 -6.625 Z M 1.96875 -3.890625 C 1.96875 -2.953125 2.148438 -2.210938 2.515625 -1.671875 C 2.878906 -1.140625 3.378906 -0.875 4.015625 -0.875 C 4.640625 -0.875 5.132812 -1.140625 5.5 -1.671875 C 5.863281 -2.210938 6.046875 -2.953125 6.046875 -3.890625 C 6.046875 -4.835938 5.863281 -5.578125 5.5 -6.109375 C 5.132812 -6.648438 4.640625 -6.921875 4.015625 -6.921875 C 3.378906 -6.921875 2.878906 -6.648438 2.515625 -6.109375 C 2.148438 -5.578125 1.96875 -4.835938 1.96875 -3.890625 Z M 1.96875 -3.890625 " + id="path338" /> + </symbol> + <symbol + overflow="visible" + id="glyph4-19"> + <path + style="stroke:none;" + d="M 0.390625 -8 L 1.671875 -8 L 3.9375 -1.28125 L 6.21875 -8 L 7.484375 -8 L 4.75 0 L 3.125 0 Z M 0.390625 -8 " + id="path341" /> + </symbol> + <symbol + overflow="visible" + id="glyph4-20"> + <path + style="stroke:none;" + d="M 2.625 -4.84375 L 2.625 -1.15625 L 4.734375 -1.15625 C 5.441406 -1.15625 5.960938 -1.304688 6.296875 -1.609375 C 6.640625 -1.910156 6.8125 -2.375 6.8125 -3 C 6.8125 -3.632812 6.640625 -4.097656 6.296875 -4.390625 C 5.960938 -4.691406 5.441406 -4.84375 4.734375 -4.84375 Z M 2.625 -8.84375 L 2.625 -5.96875 L 4.5625 -5.96875 C 5.207031 -5.96875 5.6875 -6.085938 6 -6.328125 C 6.3125 -6.566406 6.46875 -6.925781 6.46875 -7.40625 C 6.46875 -7.882812 6.3125 -8.242188 6 -8.484375 C 5.6875 -8.722656 5.207031 -8.84375 4.5625 -8.84375 Z M 1.3125 -10 L 4.671875 -10 C 5.671875 -10 6.441406 -9.785156 6.984375 -9.359375 C 7.523438 -8.941406 7.796875 -8.34375 7.796875 -7.5625 C 7.796875 -6.96875 7.65625 -6.492188 7.375 -6.140625 C 7.101562 -5.785156 6.695312 -5.5625 6.15625 -5.46875 C 6.800781 -5.320312 7.300781 -5.019531 7.65625 -4.5625 C 8.019531 -4.101562 8.203125 -3.523438 8.203125 -2.828125 C 8.203125 -1.929688 7.90625 -1.234375 7.3125 -0.734375 C 6.726562 -0.242188 5.890625 0 4.796875 0 L 1.3125 0 Z M 1.3125 -10 " + id="path344" /> + </symbol> + <symbol + overflow="visible" + id="glyph4-21"> + <path + style="stroke:none;" + d="M 4.28125 0.703125 C 3.945312 1.660156 3.617188 2.28125 3.296875 2.5625 C 2.972656 2.851562 2.546875 3 2.015625 3 L 1.046875 3 L 1.046875 1.921875 L 1.75 1.921875 C 2.082031 1.921875 2.335938 1.832031 2.515625 1.65625 C 2.703125 1.488281 2.90625 1.085938 3.125 0.453125 L 3.34375 -0.140625 L 0.390625 -8 L 1.671875 -8 L 3.9375 -1.75 L 6.21875 -8 L 7.484375 -8 Z M 4.28125 0.703125 " + id="path347" /> + </symbol> + </g> + </defs> + <g + id="surface913125"> + <rect + style="opacity:0.275;fill:#008080;fill-opacity:1;stroke:none;stroke-width:1.03388488;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect2198" + width="576.52246" + height="351.20435" + x="5.4733415" + y="362.4101" + rx="8.0613747" + ry="7.3037553" /> + <path + style="fill:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke:rgb(77.647059%,14.901961%,18.039216%);stroke-opacity:1;stroke-miterlimit:10;" + d="M 334.433406 906.716003 C 437.433406 906.716003 437.433406 724.216003 540.433406 724.216003 " + transform="matrix(1,0,0,1,-228.433406,-394.376159)" + id="path354" /> + <path + style="fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke:rgb(77.647059%,14.901961%,18.039216%);stroke-opacity:1;stroke-miterlimit:10;" + d="M 545.433406 700.216003 L 678.433406 700.216003 C 678.433406 700.216003 688.433406 724.216003 678.433406 748.216003 L 545.433406 748.216003 C 545.433406 748.216003 535.433406 724.216003 545.433406 700.216003 " + transform="matrix(1,0,0,1,-228.433406,-394.376159)" + id="path356" /> + <g + style="fill:rgb(0%,0%,0%);fill-opacity:1;" + id="g390"> + <use + xlink:href="#glyph0-1" + x="318" + y="325.839844" + id="use358" /> + <use + xlink:href="#glyph0-2" + x="329" + y="325.839844" + id="use360" /> + <use + xlink:href="#glyph0-3" + x="336" + y="325.839844" + id="use362" /> + <use + xlink:href="#glyph0-4" + x="345" + y="325.839844" + id="use364" /> + <use + xlink:href="#glyph0-5" + x="354" + y="325.839844" + id="use366" /> + <use + xlink:href="#glyph0-6" + x="363" + y="325.839844" + id="use368" /> + <use + xlink:href="#glyph0-7" + x="368" + y="325.839844" + id="use370" /> + <use + xlink:href="#glyph0-8" + x="379" + y="325.839844" + id="use372" /> + <use + xlink:href="#glyph0-5" + x="383" + y="325.839844" + id="use374" /> + <use + xlink:href="#glyph0-9" + x="392" + y="325.839844" + id="use376" /> + <use + xlink:href="#glyph0-10" + x="398" + y="325.839844" + id="use378" /> + <use + xlink:href="#glyph0-9" + x="407" + y="325.839844" + id="use380" /> + <use + xlink:href="#glyph0-11" + x="413" + y="325.839844" + id="use382" /> + <use + xlink:href="#glyph0-12" + x="421" + y="325.839844" + id="use384" /> + <use + xlink:href="#glyph0-3" + x="430" + y="325.839844" + id="use386" /> + <use + xlink:href="#glyph0-6" + x="439" + y="325.839844" + id="use388" /> + </g> + <g + style="fill:rgb(0%,0%,0%);fill-opacity:1;" + id="g426"> + <use + xlink:href="#glyph0-13" + x="318" + y="343.839844" + id="use392" /> + <use + xlink:href="#glyph0-10" + x="324" + y="343.839844" + id="use394" /> + <use + xlink:href="#glyph0-14" + x="333" + y="343.839844" + id="use396" /> + <use + xlink:href="#glyph0-15" + x="342" + y="343.839844" + id="use398" /> + <use + xlink:href="#glyph0-16" + x="350" + y="343.839844" + id="use400" /> + <use + xlink:href="#glyph0-9" + x="356" + y="343.839844" + id="use402" /> + <use + xlink:href="#glyph0-10" + x="362" + y="343.839844" + id="use404" /> + <use + xlink:href="#glyph0-11" + x="371" + y="343.839844" + id="use406" /> + <use + xlink:href="#glyph0-16" + x="379" + y="343.839844" + id="use408" /> + <use + xlink:href="#glyph0-6" + x="385" + y="343.839844" + id="use410" /> + <use + xlink:href="#glyph0-1" + x="390" + y="343.839844" + id="use412" /> + <use + xlink:href="#glyph0-2" + x="401" + y="343.839844" + id="use414" /> + <use + xlink:href="#glyph0-3" + x="408" + y="343.839844" + id="use416" /> + <use + xlink:href="#glyph0-4" + x="417" + y="343.839844" + id="use418" /> + <use + xlink:href="#glyph0-5" + x="426" + y="343.839844" + id="use420" /> + <use + xlink:href="#glyph0-15" + x="435" + y="343.839844" + id="use422" /> + <use + xlink:href="#glyph0-17" + x="443" + y="343.839844" + id="use424" /> + </g> + <path + style="fill:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke:rgb(47.843137%,21.176471%,69.411765%);stroke-opacity:1;stroke-miterlimit:10;" + d="M 334.433406 906.716003 C 437.433406 906.716003 437.433406 783.216003 540.433406 783.216003 " + transform="matrix(1,0,0,1,-228.433406,-394.376159)" + id="path428" /> + <path + style="fill-rule:nonzero;fill:none;fill-opacity:1;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke:rgb(47%, 21%, 69%);stroke-opacity:1;stroke-miterlimit:10" + d="M 540.433406 768.216003 L 741.433406 768.216003 L 741.433406 798.216003 L 540.433406 798.216003 Z M 540.433406 768.216003 " + transform="matrix(1,0,0,1,-228.433406,-394.376159)" + id="path430" /> + <g + style="fill:rgb(0%,0%,0%);fill-opacity:1;" + id="g482"> + <use + xlink:href="#glyph0-18" + x="318" + y="393.839844" + id="use432" /> + <use + xlink:href="#glyph0-16" + x="327" + y="393.839844" + id="use434" /> + <use + xlink:href="#glyph0-19" + x="333" + y="393.839844" + id="use436" /> + <use + xlink:href="#glyph0-9" + x="342" + y="393.839844" + id="use438" /> + <use + xlink:href="#glyph0-5" + x="348" + y="393.839844" + id="use440" /> + <use + xlink:href="#glyph0-15" + x="357" + y="393.839844" + id="use442" /> + <use + xlink:href="#glyph0-6" + x="365" + y="393.839844" + id="use444" /> + <use + xlink:href="#glyph0-11" + x="370" + y="393.839844" + id="use446" /> + <use + xlink:href="#glyph0-10" + x="378" + y="393.839844" + id="use448" /> + <use + xlink:href="#glyph0-15" + x="387" + y="393.839844" + id="use450" /> + <use + xlink:href="#glyph0-16" + x="395" + y="393.839844" + id="use452" /> + <use + xlink:href="#glyph0-8" + x="401" + y="393.839844" + id="use454" /> + <use + xlink:href="#glyph0-20" + x="405" + y="393.839844" + id="use456" /> + <use + xlink:href="#glyph0-21" + x="414" + y="393.839844" + id="use458" /> + <use + xlink:href="#glyph0-8" + x="423" + y="393.839844" + id="use460" /> + <use + xlink:href="#glyph0-20" + x="427" + y="393.839844" + id="use462" /> + <use + xlink:href="#glyph0-22" + x="436" + y="393.839844" + id="use464" /> + <use + xlink:href="#glyph0-19" + x="441" + y="393.839844" + id="use466" /> + <use + xlink:href="#glyph0-9" + x="450" + y="393.839844" + id="use468" /> + <use + xlink:href="#glyph0-23" + x="456" + y="393.839844" + id="use470" /> + <use + xlink:href="#glyph0-10" + x="470" + y="393.839844" + id="use472" /> + <use + xlink:href="#glyph0-16" + x="479" + y="393.839844" + id="use474" /> + <use + xlink:href="#glyph0-8" + x="485" + y="393.839844" + id="use476" /> + <use + xlink:href="#glyph0-19" + x="489" + y="393.839844" + id="use478" /> + <use + xlink:href="#glyph0-20" + x="498" + y="393.839844" + id="use480" /> + </g> + <path + style="fill:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke:rgb(47.843137%,21.176471%,69.411765%);stroke-opacity:1;stroke-miterlimit:10;" + d="M 334.433406 906.716003 C 437.433406 906.716003 437.433406 906.716003 540.433406 906.716003 " + transform="matrix(1,0,0,1,-228.433406,-394.376159)" + id="path484" /> + <path + style="fill:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke:rgb(47.843137%,21.176471%,69.411765%);stroke-opacity:1;stroke-miterlimit:10;" + d="M 746.433406 906.716003 C 806.433406 906.716003 806.433406 842.216003 866.433406 842.216003 " + transform="matrix(1,0,0,1,-228.433406,-394.376159)" + id="path486" /> + <path + style="fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke:rgb(47.843137%,21.176471%,69.411765%);stroke-opacity:1;stroke-miterlimit:10;" + d="M 866.433406 818.216003 L 1107.433406 818.216003 L 1107.433406 866.216003 L 866.433406 866.216003 Z M 866.433406 818.216003 " + transform="matrix(1,0,0,1,-228.433406,-394.376159)" + id="path488" /> + <g + style="fill:rgb(0%,0%,0%);fill-opacity:1;" + id="g546"> + <use + xlink:href="#glyph0-24" + x="644" + y="443.839844" + id="use490" /> + <use + xlink:href="#glyph0-24" + x="651" + y="443.839844" + id="use492" /> + <use + xlink:href="#glyph0-11" + x="658" + y="443.839844" + id="use494" /> + <use + xlink:href="#glyph0-19" + x="666" + y="443.839844" + id="use496" /> + <use + xlink:href="#glyph0-23" + x="675" + y="443.839844" + id="use498" /> + <use + xlink:href="#glyph0-23" + x="689" + y="443.839844" + id="use500" /> + <use + xlink:href="#glyph0-19" + x="703" + y="443.839844" + id="use502" /> + <use + xlink:href="#glyph0-20" + x="712" + y="443.839844" + id="use504" /> + <use + xlink:href="#glyph0-24" + x="721" + y="443.839844" + id="use506" /> + <use + xlink:href="#glyph0-25" + x="728" + y="443.839844" + id="use508" /> + <use + xlink:href="#glyph0-16" + x="737" + y="443.839844" + id="use510" /> + <use + xlink:href="#glyph0-3" + x="743" + y="443.839844" + id="use512" /> + <use + xlink:href="#glyph0-4" + x="752" + y="443.839844" + id="use514" /> + <use + xlink:href="#glyph0-5" + x="761" + y="443.839844" + id="use516" /> + <use + xlink:href="#glyph0-24" + x="770" + y="443.839844" + id="use518" /> + <use + xlink:href="#glyph0-24" + x="777" + y="443.839844" + id="use520" /> + <use + xlink:href="#glyph0-13" + x="784" + y="443.839844" + id="use522" /> + <use + xlink:href="#glyph0-11" + x="790" + y="443.839844" + id="use524" /> + <use + xlink:href="#glyph0-26" + x="798" + y="443.839844" + id="use526" /> + <use + xlink:href="#glyph0-15" + x="802" + y="443.839844" + id="use528" /> + <use + xlink:href="#glyph0-27" + x="810" + y="443.839844" + id="use530" /> + <use + xlink:href="#glyph0-6" + x="815" + y="443.839844" + id="use532" /> + <use + xlink:href="#glyph0-19" + x="820" + y="443.839844" + id="use534" /> + <use + xlink:href="#glyph0-16" + x="829" + y="443.839844" + id="use536" /> + <use + xlink:href="#glyph0-12" + x="835" + y="443.839844" + id="use538" /> + <use + xlink:href="#glyph0-5" + x="844" + y="443.839844" + id="use540" /> + <use + xlink:href="#glyph0-9" + x="853" + y="443.839844" + id="use542" /> + <use + xlink:href="#glyph0-17" + x="859" + y="443.839844" + id="use544" /> + </g> + <g + style="fill:rgb(0%,0%,0%);fill-opacity:1;" + id="g606"> + <use + xlink:href="#glyph0-13" + x="644" + y="461.839844" + id="use548" /> + <use + xlink:href="#glyph0-5" + x="650" + y="461.839844" + id="use550" /> + <use + xlink:href="#glyph0-28" + x="659" + y="461.839844" + id="use552" /> + <use + xlink:href="#glyph0-21" + x="664" + y="461.839844" + id="use554" /> + <use + xlink:href="#glyph0-28" + x="673" + y="461.839844" + id="use556" /> + <use + xlink:href="#glyph0-6" + x="678" + y="461.839844" + id="use558" /> + <use + xlink:href="#glyph0-29" + x="683" + y="461.839844" + id="use560" /> + <use + xlink:href="#glyph0-15" + x="692" + y="461.839844" + id="use562" /> + <use + xlink:href="#glyph0-5" + x="700" + y="461.839844" + id="use564" /> + <use + xlink:href="#glyph0-25" + x="709" + y="461.839844" + id="use566" /> + <use + xlink:href="#glyph0-6" + x="718" + y="461.839844" + id="use568" /> + <use + xlink:href="#glyph0-8" + x="723" + y="461.839844" + id="use570" /> + <use + xlink:href="#glyph0-20" + x="727" + y="461.839844" + id="use572" /> + <use + xlink:href="#glyph0-6" + x="736" + y="461.839844" + id="use574" /> + <use + xlink:href="#glyph0-20" + x="741" + y="461.839844" + id="use576" /> + <use + xlink:href="#glyph0-4" + x="750" + y="461.839844" + id="use578" /> + <use + xlink:href="#glyph0-28" + x="759" + y="461.839844" + id="use580" /> + <use + xlink:href="#glyph0-11" + x="764" + y="461.839844" + id="use582" /> + <use + xlink:href="#glyph0-19" + x="772" + y="461.839844" + id="use584" /> + <use + xlink:href="#glyph0-23" + x="781" + y="461.839844" + id="use586" /> + <use + xlink:href="#glyph0-23" + x="795" + y="461.839844" + id="use588" /> + <use + xlink:href="#glyph0-19" + x="809" + y="461.839844" + id="use590" /> + <use + xlink:href="#glyph0-20" + x="818" + y="461.839844" + id="use592" /> + <use + xlink:href="#glyph0-24" + x="827" + y="461.839844" + id="use594" /> + <use + xlink:href="#glyph0-16" + x="834" + y="461.839844" + id="use596" /> + <use + xlink:href="#glyph0-3" + x="840" + y="461.839844" + id="use598" /> + <use + xlink:href="#glyph0-4" + x="849" + y="461.839844" + id="use600" /> + <use + xlink:href="#glyph0-5" + x="858" + y="461.839844" + id="use602" /> + <use + xlink:href="#glyph0-17" + x="867" + y="461.839844" + id="use604" /> + </g> + <path + style="fill:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke:rgb(47.843137%,21.176471%,69.411765%);stroke-opacity:1;stroke-miterlimit:10;" + d="M 746.433406 906.716003 C 806.433406 906.716003 806.433406 910.216003 866.433406 910.216003 " + transform="matrix(1,0,0,1,-228.433406,-394.376159)" + id="path608" /> + <path + style="fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke:rgb(47.843137%,21.176471%,69.411765%);stroke-opacity:1;stroke-miterlimit:10;" + d="M 866.433406 886.216003 L 1015.433406 886.216003 L 1015.433406 934.216003 L 866.433406 934.216003 Z M 866.433406 886.216003 " + transform="matrix(1,0,0,1,-228.433406,-394.376159)" + id="path610" /> + <g + style="fill:rgb(0%,0%,0%);fill-opacity:1;" + id="g650"> + <use + xlink:href="#glyph0-30" + x="644" + y="511.839844" + id="use612" /> + <use + xlink:href="#glyph0-5" + x="657" + y="511.839844" + id="use614" /> + <use + xlink:href="#glyph0-16" + x="666" + y="511.839844" + id="use616" /> + <use + xlink:href="#glyph0-12" + x="672" + y="511.839844" + id="use618" /> + <use + xlink:href="#glyph0-19" + x="681" + y="511.839844" + id="use620" /> + <use + xlink:href="#glyph0-25" + x="690" + y="511.839844" + id="use622" /> + <use + xlink:href="#glyph0-15" + x="699" + y="511.839844" + id="use624" /> + <use + xlink:href="#glyph0-6" + x="707" + y="511.839844" + id="use626" /> + <use + xlink:href="#glyph0-22" + x="712" + y="511.839844" + id="use628" /> + <use + xlink:href="#glyph0-19" + x="717" + y="511.839844" + id="use630" /> + <use + xlink:href="#glyph0-9" + x="726" + y="511.839844" + id="use632" /> + <use + xlink:href="#glyph0-6" + x="732" + y="511.839844" + id="use634" /> + <use + xlink:href="#glyph0-29" + x="737" + y="511.839844" + id="use636" /> + <use + xlink:href="#glyph0-15" + x="746" + y="511.839844" + id="use638" /> + <use + xlink:href="#glyph0-5" + x="754" + y="511.839844" + id="use640" /> + <use + xlink:href="#glyph0-6" + x="763" + y="511.839844" + id="use642" /> + <use + xlink:href="#glyph0-8" + x="768" + y="511.839844" + id="use644" /> + <use + xlink:href="#glyph0-20" + x="772" + y="511.839844" + id="use646" /> + <use + xlink:href="#glyph0-6" + x="781" + y="511.839844" + id="use648" /> + </g> + <g + style="fill:rgb(0%,0%,0%);fill-opacity:1;" + id="g678"> + <use + xlink:href="#glyph0-20" + x="644" + y="529.839844" + id="use652" /> + <use + xlink:href="#glyph0-4" + x="653" + y="529.839844" + id="use654" /> + <use + xlink:href="#glyph0-28" + x="662" + y="529.839844" + id="use656" /> + <use + xlink:href="#glyph0-10" + x="667" + y="529.839844" + id="use658" /> + <use + xlink:href="#glyph0-9" + x="676" + y="529.839844" + id="use660" /> + <use + xlink:href="#glyph0-9" + x="682" + y="529.839844" + id="use662" /> + <use + xlink:href="#glyph0-10" + x="688" + y="529.839844" + id="use664" /> + <use + xlink:href="#glyph0-3" + x="697" + y="529.839844" + id="use666" /> + <use + xlink:href="#glyph0-13" + x="706" + y="529.839844" + id="use668" /> + <use + xlink:href="#glyph0-28" + x="712" + y="529.839844" + id="use670" /> + <use + xlink:href="#glyph0-28" + x="717" + y="529.839844" + id="use672" /> + <use + xlink:href="#glyph0-28" + x="722" + y="529.839844" + id="use674" /> + <use + xlink:href="#glyph0-17" + x="727" + y="529.839844" + id="use676" /> + </g> + <path + style="fill:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke:rgb(47.843137%,21.176471%,69.411765%);stroke-opacity:1;stroke-miterlimit:10;" + d="M 746.433406 906.716003 C 806.433406 906.716003 806.433406 974.716003 866.433406 974.716003 " + transform="matrix(1,0,0,1,-228.433406,-394.376159)" + id="path680" /> + <path + style="fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke:rgb(47.843137%,21.176471%,69.411765%);stroke-opacity:1;stroke-miterlimit:10;" + d="M 866.433406 954.216003 L 902.433406 954.216003 L 902.433406 995.216003 L 866.433406 995.216003 Z M 866.433406 954.216003 " + transform="matrix(1,0,0,1,-228.433406,-394.376159)" + id="path682" /> + <g + style="fill:rgb(0%,0%,0%);fill-opacity:1;" + id="g690"> + <use + xlink:href="#glyph1-1" + x="644" + y="588.839844" + id="use684" /> + <use + xlink:href="#glyph1-1" + x="652" + y="588.839844" + id="use686" /> + <use + xlink:href="#glyph1-1" + x="660" + y="588.839844" + id="use688" /> + </g> + <path + style="fill-rule:nonzero;fill:none;fill-opacity:1;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke:rgb(47%, 21%, 69%);stroke-opacity:1;stroke-miterlimit:10" + d="M 545.433406 891.716003 L 741.433406 891.716003 C 741.433406 891.716003 751.433406 906.716003 741.433406 921.716003 L 545.433406 921.716003 C 545.433406 921.716003 535.433406 906.716003 545.433406 891.716003 " + transform="matrix(1,0,0,1,-228.433406,-394.376159)" + id="path692" /> + <g + style="fill:rgb(0%,0%,0%);fill-opacity:1;" + id="g742"> + <use + xlink:href="#glyph0-31" + x="318" + y="517.339844" + id="use694" /> + <use + xlink:href="#glyph0-19" + x="326" + y="517.339844" + id="use696" /> + <use + xlink:href="#glyph0-21" + x="335" + y="517.339844" + id="use698" /> + <use + xlink:href="#glyph0-8" + x="344" + y="517.339844" + id="use700" /> + <use + xlink:href="#glyph0-11" + x="348" + y="517.339844" + id="use702" /> + <use + xlink:href="#glyph0-6" + x="356" + y="517.339844" + id="use704" /> + <use + xlink:href="#glyph0-25" + x="361" + y="517.339844" + id="use706" /> + <use + xlink:href="#glyph0-5" + x="370" + y="517.339844" + id="use708" /> + <use + xlink:href="#glyph0-32" + x="379" + y="517.339844" + id="use710" /> + <use + xlink:href="#glyph0-20" + x="388" + y="517.339844" + id="use712" /> + <use + xlink:href="#glyph0-5" + x="397" + y="517.339844" + id="use714" /> + <use + xlink:href="#glyph0-25" + x="406" + y="517.339844" + id="use716" /> + <use + xlink:href="#glyph0-6" + x="415" + y="517.339844" + id="use718" /> + <use + xlink:href="#glyph0-14" + x="420" + y="517.339844" + id="use720" /> + <use + xlink:href="#glyph0-3" + x="429" + y="517.339844" + id="use722" /> + <use + xlink:href="#glyph0-6" + x="438" + y="517.339844" + id="use724" /> + <use + xlink:href="#glyph0-23" + x="443" + y="517.339844" + id="use726" /> + <use + xlink:href="#glyph0-5" + x="457" + y="517.339844" + id="use728" /> + <use + xlink:href="#glyph0-16" + x="466" + y="517.339844" + id="use730" /> + <use + xlink:href="#glyph0-12" + x="472" + y="517.339844" + id="use732" /> + <use + xlink:href="#glyph0-19" + x="481" + y="517.339844" + id="use734" /> + <use + xlink:href="#glyph0-25" + x="490" + y="517.339844" + id="use736" /> + <use + xlink:href="#glyph0-15" + x="499" + y="517.339844" + id="use738" /> + <use + xlink:href="#glyph0-33" + x="507" + y="517.339844" + id="use740" /> + </g> + <path + style="fill:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke:rgb(47.843137%,21.176471%,69.411765%);stroke-opacity:1;stroke-miterlimit:10;" + d="M 334.433406 906.716003 C 437.433406 906.716003 437.433406 1030.216003 540.433406 1030.216003 " + transform="matrix(1,0,0,1,-228.433406,-394.376159)" + id="path744" /> + <path + style="fill-rule:nonzero;fill:none;fill-opacity:1;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke:rgb(47%, 21%, 69%);stroke-opacity:1;stroke-miterlimit:10" + d="M 545.433406 1015.216003 L 693.433406 1015.216003 C 693.433406 1015.216003 703.433406 1030.216003 693.433406 1045.216003 L 545.433406 1045.216003 C 545.433406 1045.216003 535.433406 1030.216003 545.433406 1015.216003 " + transform="matrix(1,0,0,1,-228.433406,-394.376159)" + id="path746" /> + <g + style="fill:rgb(0%,0%,0%);fill-opacity:1;" + id="g786"> + <use + xlink:href="#glyph0-34" + x="318" + y="640.839844" + id="use748" /> + <use + xlink:href="#glyph0-20" + x="322" + y="640.839844" + id="use750" /> + <use + xlink:href="#glyph0-15" + x="331" + y="640.839844" + id="use752" /> + <use + xlink:href="#glyph0-16" + x="339" + y="640.839844" + id="use754" /> + <use + xlink:href="#glyph0-10" + x="345" + y="640.839844" + id="use756" /> + <use + xlink:href="#glyph0-20" + x="354" + y="640.839844" + id="use758" /> + <use + xlink:href="#glyph0-11" + x="363" + y="640.839844" + id="use760" /> + <use + xlink:href="#glyph0-5" + x="371" + y="640.839844" + id="use762" /> + <use + xlink:href="#glyph0-15" + x="380" + y="640.839844" + id="use764" /> + <use + xlink:href="#glyph0-6" + x="388" + y="640.839844" + id="use766" /> + <use + xlink:href="#glyph0-10" + x="393" + y="640.839844" + id="use768" /> + <use + xlink:href="#glyph0-9" + x="402" + y="640.839844" + id="use770" /> + <use + xlink:href="#glyph0-5" + x="408" + y="640.839844" + id="use772" /> + <use + xlink:href="#glyph0-6" + x="417" + y="640.839844" + id="use774" /> + <use + xlink:href="#glyph0-25" + x="422" + y="640.839844" + id="use776" /> + <use + xlink:href="#glyph0-16" + x="431" + y="640.839844" + id="use778" /> + <use + xlink:href="#glyph0-3" + x="437" + y="640.839844" + id="use780" /> + <use + xlink:href="#glyph0-4" + x="446" + y="640.839844" + id="use782" /> + <use + xlink:href="#glyph0-5" + x="455" + y="640.839844" + id="use784" /> + </g> + <path + style="fill:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke:rgb(20%,20%,20%);stroke-opacity:1;stroke-miterlimit:10;" + d="M 334.433406 906.716003 C 437.433406 906.716003 437.433406 1080.216003 540.433406 1080.216003 " + transform="matrix(1,0,0,1,-228.433406,-394.376159)" + id="path788" /> + <path + style="stroke:none;fill-rule:nonzero;fill:none;fill-opacity:1" + d="M 312 670.839844 L 491 670.839844 L 491 700.839844 L 312 700.839844 Z M 312 670.839844 " + id="path790" /> + <path + style="fill:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke:rgb(20%,20%,20%);stroke-opacity:1;stroke-miterlimit:10;" + d="M 550.433406 1065.216003 L 540.433406 1065.216003 L 540.433406 1095.216003 L 550.433406 1095.216003 " + transform="matrix(1,0,0,1,-228.433406,-394.376159)" + id="path792" /> + <g + style="fill:rgb(0%,0%,0%);fill-opacity:1;" + id="g836"> + <use + xlink:href="#glyph0-35" + x="318" + y="690.839844" + id="use794" /> + <use + xlink:href="#glyph0-29" + x="328" + y="690.839844" + id="use796" /> + <use + xlink:href="#glyph0-9" + x="337" + y="690.839844" + id="use798" /> + <use + xlink:href="#glyph0-9" + x="343" + y="690.839844" + id="use800" /> + <use + xlink:href="#glyph0-5" + x="349" + y="690.839844" + id="use802" /> + <use + xlink:href="#glyph0-20" + x="358" + y="690.839844" + id="use804" /> + <use + xlink:href="#glyph0-16" + x="367" + y="690.839844" + id="use806" /> + <use + xlink:href="#glyph0-26" + x="373" + y="690.839844" + id="use808" /> + <use + xlink:href="#glyph0-3" + x="377" + y="690.839844" + id="use810" /> + <use + xlink:href="#glyph0-6" + x="386" + y="690.839844" + id="use812" /> + <use + xlink:href="#glyph0-16" + x="391" + y="690.839844" + id="use814" /> + <use + xlink:href="#glyph0-3" + x="397" + y="690.839844" + id="use816" /> + <use + xlink:href="#glyph0-4" + x="406" + y="690.839844" + id="use818" /> + <use + xlink:href="#glyph0-5" + x="415" + y="690.839844" + id="use820" /> + <use + xlink:href="#glyph0-6" + x="424" + y="690.839844" + id="use822" /> + <use + xlink:href="#glyph0-20" + x="429" + y="690.839844" + id="use824" /> + <use + xlink:href="#glyph0-29" + x="438" + y="690.839844" + id="use826" /> + <use + xlink:href="#glyph0-23" + x="447" + y="690.839844" + id="use828" /> + <use + xlink:href="#glyph0-14" + x="461" + y="690.839844" + id="use830" /> + <use + xlink:href="#glyph0-5" + x="470" + y="690.839844" + id="use832" /> + <use + xlink:href="#glyph0-9" + x="479" + y="690.839844" + id="use834" /> + </g> + <path + style="stroke:none;fill-rule:nonzero;fill:#6a3eaa;fill-opacity:1;opacity:1" + d="M 20 490.339844 L 192 490.339844 L 192 534.339844 L 20 534.339844 Z M 20 490.339844 " + id="path838" /> + <g + style="fill:#000000;fill-opacity:1;stroke:none;stroke-opacity:1;stroke-width:13.82475;stroke-miterlimit:4;stroke-dasharray:none" + id="g862"> + <use + xlink:href="#glyph2-1" + x="26" + y="521.339844" + id="use840" + style="fill:#000000;fill-opacity:1;stroke:none;stroke-opacity:1;stroke-width:13.82475;stroke-miterlimit:4;stroke-dasharray:none" /> + <use + xlink:href="#glyph2-2" + x="47" + y="521.339844" + id="use842" + style="fill:#000000;fill-opacity:1;stroke:none;stroke-opacity:1;stroke-width:13.82475;stroke-miterlimit:4;stroke-dasharray:none" /> + <use + xlink:href="#glyph2-3" + x="59" + y="521.339844" + id="use844" + style="fill:#000000;fill-opacity:1;stroke:none;stroke-opacity:1;stroke-width:13.82475;stroke-miterlimit:4;stroke-dasharray:none" /> + <use + xlink:href="#glyph2-4" + x="75" + y="521.339844" + id="use846" + style="fill:#000000;fill-opacity:1;stroke:none;stroke-opacity:1;stroke-width:13.82475;stroke-miterlimit:4;stroke-dasharray:none" /> + <use + xlink:href="#glyph2-5" + x="92" + y="521.339844" + id="use848" + style="fill:#000000;fill-opacity:1;stroke:none;stroke-opacity:1;stroke-width:13.82475;stroke-miterlimit:4;stroke-dasharray:none" /> + <use + xlink:href="#glyph2-6" + x="108" + y="521.339844" + id="use850" + style="fill:#000000;fill-opacity:1;stroke:none;stroke-opacity:1;stroke-width:13.82475;stroke-miterlimit:4;stroke-dasharray:none" /> + <use + xlink:href="#glyph2-7" + x="116" + y="521.339844" + id="use852" + style="fill:#000000;fill-opacity:1;stroke:none;stroke-opacity:1;stroke-width:13.82475;stroke-miterlimit:4;stroke-dasharray:none" /> + <use + xlink:href="#glyph2-8" + x="135" + y="521.339844" + id="use854" + style="fill:#000000;fill-opacity:1;stroke:none;stroke-opacity:1;stroke-width:13.82475;stroke-miterlimit:4;stroke-dasharray:none" /> + <use + xlink:href="#glyph2-9" + x="142" + y="521.339844" + id="use856" + style="fill:#000000;fill-opacity:1;stroke:none;stroke-opacity:1;stroke-width:13.82475;stroke-miterlimit:4;stroke-dasharray:none" /> + <use + xlink:href="#glyph2-10" + x="158" + y="521.339844" + id="use858" + style="fill:#000000;fill-opacity:1;stroke:none;stroke-opacity:1;stroke-width:13.82475;stroke-miterlimit:4;stroke-dasharray:none" /> + <use + xlink:href="#glyph2-10" + x="172" + y="521.339844" + id="use860" + style="fill:#000000;fill-opacity:1;stroke:none;stroke-opacity:1;stroke-width:13.82475;stroke-miterlimit:4;stroke-dasharray:none" /> + </g> + <path + style="fill:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke:rgb(97.647059%,76.862745%,25.098039%);stroke-opacity:1;stroke-miterlimit:10;" + d="M 389.839656 436.376159 C 477.589656 436.376159 477.589656 431.876159 565.339656 431.876159 " + transform="matrix(1,0,0,1,-228.433406,-394.376159)" + id="path864" /> + <path + style="fill:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke:rgb(97.647059%,76.862745%,25.098039%);stroke-opacity:1;stroke-miterlimit:10;" + d="M 726.339656 431.876159 L 846.339656 431.876159 " + transform="matrix(1,0,0,1,-228.433406,-394.376159)" + id="path866" /> + <path + style="fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke:rgb(97.647059%,76.862745%,25.098039%);stroke-opacity:1;stroke-miterlimit:10;" + d="M 851.339656 416.876159 L 1087.339656 416.876159 C 1087.339656 416.876159 1097.339656 431.876159 1087.339656 446.876159 L 851.339656 446.876159 C 851.339656 446.876159 841.339656 431.876159 851.339656 416.876159 " + transform="matrix(1,0,0,1,-228.433406,-394.376159)" + id="path868" /> + <g + style="fill:rgb(0%,0%,0%);fill-opacity:1;" + id="g922"> + <use + xlink:href="#glyph3-1" + x="623.90625" + y="42.5" + id="use870" /> + <use + xlink:href="#glyph3-2" + x="632.90625" + y="42.5" + id="use872" /> + <use + xlink:href="#glyph3-3" + x="641.90625" + y="42.5" + id="use874" /> + <use + xlink:href="#glyph3-4" + x="650.90625" + y="42.5" + id="use876" /> + <use + xlink:href="#glyph3-5" + x="659.90625" + y="42.5" + id="use878" /> + <use + xlink:href="#glyph3-6" + x="668.90625" + y="42.5" + id="use880" /> + <use + xlink:href="#glyph3-7" + x="677.90625" + y="42.5" + id="use882" /> + <use + xlink:href="#glyph3-8" + x="686.90625" + y="42.5" + id="use884" /> + <use + xlink:href="#glyph3-9" + x="695.90625" + y="42.5" + id="use886" /> + <use + xlink:href="#glyph3-10" + x="704.90625" + y="42.5" + id="use888" /> + <use + xlink:href="#glyph3-11" + x="713.90625" + y="42.5" + id="use890" /> + <use + xlink:href="#glyph3-12" + x="722.90625" + y="42.5" + id="use892" /> + <use + xlink:href="#glyph3-13" + x="731.90625" + y="42.5" + id="use894" /> + <use + xlink:href="#glyph3-8" + x="740.90625" + y="42.5" + id="use896" /> + <use + xlink:href="#glyph3-14" + x="749.90625" + y="42.5" + id="use898" /> + <use + xlink:href="#glyph3-15" + x="758.90625" + y="42.5" + id="use900" /> + <use + xlink:href="#glyph3-11" + x="767.90625" + y="42.5" + id="use902" /> + <use + xlink:href="#glyph3-12" + x="776.90625" + y="42.5" + id="use904" /> + <use + xlink:href="#glyph3-13" + x="785.90625" + y="42.5" + id="use906" /> + <use + xlink:href="#glyph3-8" + x="794.90625" + y="42.5" + id="use908" /> + <use + xlink:href="#glyph3-14" + x="803.90625" + y="42.5" + id="use910" /> + <use + xlink:href="#glyph3-15" + x="812.90625" + y="42.5" + id="use912" /> + <use + xlink:href="#glyph3-16" + x="821.90625" + y="42.5" + id="use914" /> + <use + xlink:href="#glyph3-16" + x="830.90625" + y="42.5" + id="use916" /> + <use + xlink:href="#glyph3-16" + x="839.90625" + y="42.5" + id="use918" /> + <use + xlink:href="#glyph3-17" + x="848.90625" + y="42.5" + id="use920" /> + </g> + <path + style="fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke:rgb(97.647059%,76.862745%,25.098039%);stroke-opacity:1;stroke-miterlimit:10;" + d="M 570.339656 416.876159 L 721.339656 416.876159 C 721.339656 416.876159 731.339656 431.876159 721.339656 446.876159 L 570.339656 446.876159 C 570.339656 446.876159 560.339656 431.876159 570.339656 416.876159 " + transform="matrix(1,0,0,1,-228.433406,-394.376159)" + id="path924" /> + <g + style="fill:rgb(0%,0%,0%);fill-opacity:1;" + id="g966"> + <use + xlink:href="#glyph0-30" + x="342.90625" + y="42.5" + id="use926" /> + <use + xlink:href="#glyph0-29" + x="355.90625" + y="42.5" + id="use928" /> + <use + xlink:href="#glyph0-26" + x="364.90625" + y="42.5" + id="use930" /> + <use + xlink:href="#glyph0-16" + x="368.90625" + y="42.5" + id="use932" /> + <use + xlink:href="#glyph0-8" + x="374.90625" + y="42.5" + id="use934" /> + <use + xlink:href="#glyph0-4" + x="378.90625" + y="42.5" + id="use936" /> + <use + xlink:href="#glyph0-26" + x="387.90625" + y="42.5" + id="use938" /> + <use + xlink:href="#glyph0-5" + x="391.90625" + y="42.5" + id="use940" /> + <use + xlink:href="#glyph0-6" + x="400.90625" + y="42.5" + id="use942" /> + <use + xlink:href="#glyph0-1" + x="405.90625" + y="42.5" + id="use944" /> + <use + xlink:href="#glyph0-8" + x="416.90625" + y="42.5" + id="use946" /> + <use + xlink:href="#glyph0-15" + x="420.90625" + y="42.5" + id="use948" /> + <use + xlink:href="#glyph0-4" + x="428.90625" + y="42.5" + id="use950" /> + <use + xlink:href="#glyph0-10" + x="437.90625" + y="42.5" + id="use952" /> + <use + xlink:href="#glyph0-16" + x="446.90625" + y="42.5" + id="use954" /> + <use + xlink:href="#glyph0-11" + x="452.90625" + y="42.5" + id="use956" /> + <use + xlink:href="#glyph0-12" + x="460.90625" + y="42.5" + id="use958" /> + <use + xlink:href="#glyph0-8" + x="469.90625" + y="42.5" + id="use960" /> + <use + xlink:href="#glyph0-20" + x="473.90625" + y="42.5" + id="use962" /> + <use + xlink:href="#glyph0-21" + x="482.90625" + y="42.5" + id="use964" /> + </g> + <path + style="stroke:none;fill-rule:nonzero;fill:#f8c23f;fill-opacity:1" + d="M 30.90625 20 L 291.90625 20 L 291.90625 64 L 30.90625 64 Z M 30.90625 20 " + id="path968" /> + <g + style="fill:rgb(0%,0%,0%);fill-opacity:1;" + id="g1004"> + <use + xlink:href="#glyph2-11" + x="36.90625" + y="51" + id="use970" /> + <use + xlink:href="#glyph2-12" + x="56.90625" + y="51" + id="use972" /> + <use + xlink:href="#glyph2-13" + x="70.90625" + y="51" + id="use974" /> + <use + xlink:href="#glyph2-14" + x="87.90625" + y="51" + id="use976" /> + <use + xlink:href="#glyph2-15" + x="104.90625" + y="51" + id="use978" /> + <use + xlink:href="#glyph2-6" + x="119.90625" + y="51" + id="use980" /> + <use + xlink:href="#glyph2-1" + x="127.90625" + y="51" + id="use982" /> + <use + xlink:href="#glyph2-16" + x="148.90625" + y="51" + id="use984" /> + <use + xlink:href="#glyph2-10" + x="155.90625" + y="51" + id="use986" /> + <use + xlink:href="#glyph2-4" + x="169.90625" + y="51" + id="use988" /> + <use + xlink:href="#glyph2-9" + x="186.90625" + y="51" + id="use990" /> + <use + xlink:href="#glyph2-17" + x="202.90625" + y="51" + id="use992" /> + <use + xlink:href="#glyph2-15" + x="212.90625" + y="51" + id="use994" /> + <use + xlink:href="#glyph2-18" + x="227.90625" + y="51" + id="use996" /> + <use + xlink:href="#glyph2-16" + x="244.90625" + y="51" + id="use998" /> + <use + xlink:href="#glyph2-14" + x="251.90625" + y="51" + id="use1000" /> + <use + xlink:href="#glyph2-19" + x="268.90625" + y="51" + id="use1002" /> + </g> + <path + style="fill:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke:rgb(40.784314%,71.764706%,13.72549%);stroke-opacity:1;stroke-miterlimit:10;" + d="M 769.534969 625.923034 L 945.534969 621.423034 " + transform="matrix(1,0,0,1,-228.433406,-394.376159)" + id="path1006" /> + <path + style="fill:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke:rgb(40.784314%,71.764706%,13.72549%);stroke-opacity:1;stroke-miterlimit:10;" + d="M 1150.534969 621.423034 C 1210.534969 621.423034 1210.534969 562.423034 1270.534969 562.423034 " + transform="matrix(1,0,0,1,-228.433406,-394.376159)" + id="path1008" /> + <path + style="fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke:rgb(40.784314%,71.764706%,13.72549%);stroke-opacity:1;stroke-miterlimit:10;" + d="M 1270.534969 538.423034 L 1507.534969 538.423034 L 1507.534969 586.423034 L 1270.534969 586.423034 Z M 1270.534969 538.423034 " + transform="matrix(1,0,0,1,-228.433406,-394.376159)" + id="path1010" /> + <g + style="fill:rgb(0%,0%,0%);fill-opacity:1;" + id="g1062"> + <use + xlink:href="#glyph3-18" + x="1048.101562" + y="164.046875" + id="use1012" /> + <use + xlink:href="#glyph3-19" + x="1057.101562" + y="164.046875" + id="use1014" /> + <use + xlink:href="#glyph3-20" + x="1066.101562" + y="164.046875" + id="use1016" /> + <use + xlink:href="#glyph3-3" + x="1075.101562" + y="164.046875" + id="use1018" /> + <use + xlink:href="#glyph3-21" + x="1084.101562" + y="164.046875" + id="use1020" /> + <use + xlink:href="#glyph3-22" + x="1093.101562" + y="164.046875" + id="use1022" /> + <use + xlink:href="#glyph3-21" + x="1102.101562" + y="164.046875" + id="use1024" /> + <use + xlink:href="#glyph3-23" + x="1111.101562" + y="164.046875" + id="use1026" /> + <use + xlink:href="#glyph3-8" + x="1120.101562" + y="164.046875" + id="use1028" /> + <use + xlink:href="#glyph3-24" + x="1129.101562" + y="164.046875" + id="use1030" /> + <use + xlink:href="#glyph3-25" + x="1138.101562" + y="164.046875" + id="use1032" /> + <use + xlink:href="#glyph3-24" + x="1147.101562" + y="164.046875" + id="use1034" /> + <use + xlink:href="#glyph3-7" + x="1156.101562" + y="164.046875" + id="use1036" /> + <use + xlink:href="#glyph3-14" + x="1165.101562" + y="164.046875" + id="use1038" /> + <use + xlink:href="#glyph3-22" + x="1174.101562" + y="164.046875" + id="use1040" /> + <use + xlink:href="#glyph3-25" + x="1183.101562" + y="164.046875" + id="use1042" /> + <use + xlink:href="#glyph3-26" + x="1192.101562" + y="164.046875" + id="use1044" /> + <use + xlink:href="#glyph3-5" + x="1201.101562" + y="164.046875" + id="use1046" /> + <use + xlink:href="#glyph3-23" + x="1210.101562" + y="164.046875" + id="use1048" /> + <use + xlink:href="#glyph3-19" + x="1219.101562" + y="164.046875" + id="use1050" /> + <use + xlink:href="#glyph3-22" + x="1228.101562" + y="164.046875" + id="use1052" /> + <use + xlink:href="#glyph3-13" + x="1237.101562" + y="164.046875" + id="use1054" /> + <use + xlink:href="#glyph3-8" + x="1246.101562" + y="164.046875" + id="use1056" /> + <use + xlink:href="#glyph3-14" + x="1255.101562" + y="164.046875" + id="use1058" /> + <use + xlink:href="#glyph3-21" + x="1264.101562" + y="164.046875" + id="use1060" /> + </g> + <g + style="fill:rgb(0%,0%,0%);fill-opacity:1;" + id="g1104"> + <use + xlink:href="#glyph3-27" + x="1048.101562" + y="182.046875" + id="use1064" /> + <use + xlink:href="#glyph3-14" + x="1057.101562" + y="182.046875" + id="use1066" /> + <use + xlink:href="#glyph3-16" + x="1066.101562" + y="182.046875" + id="use1068" /> + <use + xlink:href="#glyph3-28" + x="1075.101562" + y="182.046875" + id="use1070" /> + <use + xlink:href="#glyph3-16" + x="1084.101562" + y="182.046875" + id="use1072" /> + <use + xlink:href="#glyph3-23" + x="1093.101562" + y="182.046875" + id="use1074" /> + <use + xlink:href="#glyph3-21" + x="1102.101562" + y="182.046875" + id="use1076" /> + <use + xlink:href="#glyph3-22" + x="1111.101562" + y="182.046875" + id="use1078" /> + <use + xlink:href="#glyph3-25" + x="1120.101562" + y="182.046875" + id="use1080" /> + <use + xlink:href="#glyph3-26" + x="1129.101562" + y="182.046875" + id="use1082" /> + <use + xlink:href="#glyph3-4" + x="1138.101562" + y="182.046875" + id="use1084" /> + <use + xlink:href="#glyph3-28" + x="1147.101562" + y="182.046875" + id="use1086" /> + <use + xlink:href="#glyph3-23" + x="1156.101562" + y="182.046875" + id="use1088" /> + <use + xlink:href="#glyph3-9" + x="1165.101562" + y="182.046875" + id="use1090" /> + <use + xlink:href="#glyph3-14" + x="1174.101562" + y="182.046875" + id="use1092" /> + <use + xlink:href="#glyph3-4" + x="1183.101562" + y="182.046875" + id="use1094" /> + <use + xlink:href="#glyph3-28" + x="1192.101562" + y="182.046875" + id="use1096" /> + <use + xlink:href="#glyph3-22" + x="1201.101562" + y="182.046875" + id="use1098" /> + <use + xlink:href="#glyph3-29" + x="1210.101562" + y="182.046875" + id="use1100" /> + <use + xlink:href="#glyph3-30" + x="1219.101562" + y="182.046875" + id="use1102" /> + </g> + <path + style="fill:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke:rgb(40.784314%,71.764706%,13.72549%);stroke-opacity:1;stroke-miterlimit:10;" + d="M 1150.534969 621.423034 C 1210.534969 621.423034 1210.534969 630.423034 1270.534969 630.423034 " + transform="matrix(1,0,0,1,-228.433406,-394.376159)" + id="path1106" /> + <path + style="fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke:rgb(40.784314%,71.764706%,13.72549%);stroke-opacity:1;stroke-miterlimit:10;" + d="M 1270.534969 606.423034 L 1451.534969 606.423034 L 1451.534969 654.423034 L 1270.534969 654.423034 Z M 1270.534969 606.423034 " + transform="matrix(1,0,0,1,-228.433406,-394.376159)" + id="path1108" /> + <g + style="fill:rgb(0%,0%,0%);fill-opacity:1;" + id="g1158"> + <use + xlink:href="#glyph0-36" + x="1048.101562" + y="232.046875" + id="use1110" /> + <use + xlink:href="#glyph0-9" + x="1057.101562" + y="232.046875" + id="use1112" /> + <use + xlink:href="#glyph0-19" + x="1063.101562" + y="232.046875" + id="use1114" /> + <use + xlink:href="#glyph0-37" + x="1072.101562" + y="232.046875" + id="use1116" /> + <use + xlink:href="#glyph0-8" + x="1081.101562" + y="232.046875" + id="use1118" /> + <use + xlink:href="#glyph0-25" + x="1085.101562" + y="232.046875" + id="use1120" /> + <use + xlink:href="#glyph0-5" + x="1094.101562" + y="232.046875" + id="use1122" /> + <use + xlink:href="#glyph0-15" + x="1103.101562" + y="232.046875" + id="use1124" /> + <use + xlink:href="#glyph0-6" + x="1111.101562" + y="232.046875" + id="use1126" /> + <use + xlink:href="#glyph0-26" + x="1116.101562" + y="232.046875" + id="use1128" /> + <use + xlink:href="#glyph0-19" + x="1120.101562" + y="232.046875" + id="use1130" /> + <use + xlink:href="#glyph0-38" + x="1129.101562" + y="232.046875" + id="use1132" /> + <use + xlink:href="#glyph0-6" + x="1141.101562" + y="232.046875" + id="use1134" /> + <use + xlink:href="#glyph0-26" + x="1146.101562" + y="232.046875" + id="use1136" /> + <use + xlink:href="#glyph0-5" + x="1150.101562" + y="232.046875" + id="use1138" /> + <use + xlink:href="#glyph0-37" + x="1159.101562" + y="232.046875" + id="use1140" /> + <use + xlink:href="#glyph0-5" + x="1168.101562" + y="232.046875" + id="use1142" /> + <use + xlink:href="#glyph0-26" + x="1177.101562" + y="232.046875" + id="use1144" /> + <use + xlink:href="#glyph0-6" + x="1181.101562" + y="232.046875" + id="use1146" /> + <use + xlink:href="#glyph0-11" + x="1186.101562" + y="232.046875" + id="use1148" /> + <use + xlink:href="#glyph0-10" + x="1194.101562" + y="232.046875" + id="use1150" /> + <use + xlink:href="#glyph0-15" + x="1203.101562" + y="232.046875" + id="use1152" /> + <use + xlink:href="#glyph0-16" + x="1211.101562" + y="232.046875" + id="use1154" /> + <use + xlink:href="#glyph0-6" + x="1217.101562" + y="232.046875" + id="use1156" /> + </g> + <g + style="fill:rgb(0%,0%,0%);fill-opacity:1;" + id="g1176"> + <use + xlink:href="#glyph0-22" + x="1048.101562" + y="250.046875" + id="use1160" /> + <use + xlink:href="#glyph0-29" + x="1053.101562" + y="250.046875" + id="use1162" /> + <use + xlink:href="#glyph0-20" + x="1062.101562" + y="250.046875" + id="use1164" /> + <use + xlink:href="#glyph0-11" + x="1071.101562" + y="250.046875" + id="use1166" /> + <use + xlink:href="#glyph0-16" + x="1079.101562" + y="250.046875" + id="use1168" /> + <use + xlink:href="#glyph0-8" + x="1085.101562" + y="250.046875" + id="use1170" /> + <use + xlink:href="#glyph0-19" + x="1089.101562" + y="250.046875" + id="use1172" /> + <use + xlink:href="#glyph0-20" + x="1098.101562" + y="250.046875" + id="use1174" /> + </g> + <path + style="fill:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke:rgb(40.784314%,71.764706%,13.72549%);stroke-opacity:1;stroke-miterlimit:10;" + d="M 1150.534969 621.423034 C 1210.534969 621.423034 1210.534969 689.423034 1270.534969 689.423034 " + transform="matrix(1,0,0,1,-228.433406,-394.376159)" + id="path1178" /> + <path + style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;" + d="M 1042.101562 280.046875 L 1160.101562 280.046875 L 1160.101562 310.046875 L 1042.101562 310.046875 Z M 1042.101562 280.046875 " + id="path1180" /> + <path + style="fill:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke:rgb(40.784314%,71.764706%,13.72549%);stroke-opacity:1;stroke-miterlimit:10;" + d="M 1280.534969 674.423034 L 1270.534969 674.423034 L 1270.534969 704.423034 L 1280.534969 704.423034 " + transform="matrix(1,0,0,1,-228.433406,-394.376159)" + id="path1182" /> + <g + style="fill:rgb(0%,0%,0%);fill-opacity:1;" + id="g1212"> + <use + xlink:href="#glyph0-35" + x="1048.101562" + y="300.046875" + id="use1184" /> + <use + xlink:href="#glyph0-10" + x="1058.101562" + y="300.046875" + id="use1186" /> + <use + xlink:href="#glyph0-15" + x="1067.101562" + y="300.046875" + id="use1188" /> + <use + xlink:href="#glyph0-16" + x="1075.101562" + y="300.046875" + id="use1190" /> + <use + xlink:href="#glyph0-8" + x="1081.101562" + y="300.046875" + id="use1192" /> + <use + xlink:href="#glyph0-20" + x="1085.101562" + y="300.046875" + id="use1194" /> + <use + xlink:href="#glyph0-21" + x="1094.101562" + y="300.046875" + id="use1196" /> + <use + xlink:href="#glyph0-6" + x="1103.101562" + y="300.046875" + id="use1198" /> + <use + xlink:href="#glyph0-15" + x="1108.101562" + y="300.046875" + id="use1200" /> + <use + xlink:href="#glyph0-10" + x="1116.101562" + y="300.046875" + id="use1202" /> + <use + xlink:href="#glyph0-22" + x="1125.101562" + y="300.046875" + id="use1204" /> + <use + xlink:href="#glyph0-5" + x="1130.101562" + y="300.046875" + id="use1206" /> + <use + xlink:href="#glyph0-16" + x="1139.101562" + y="300.046875" + id="use1208" /> + <use + xlink:href="#glyph0-3" + x="1145.101562" + y="300.046875" + id="use1210" /> + </g> + <path + style="fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke:rgb(40.784314%,71.764706%,13.72549%);stroke-opacity:1;stroke-miterlimit:10;" + d="M 950.534969 606.423034 L 1145.534969 606.423034 C 1145.534969 606.423034 1155.534969 621.423034 1145.534969 636.423034 L 950.534969 636.423034 C 950.534969 636.423034 940.534969 621.423034 950.534969 606.423034 " + transform="matrix(1,0,0,1,-228.433406,-394.376159)" + id="path1214" /> + <g + style="fill:rgb(0%,0%,0%);fill-opacity:1;" + id="g1264"> + <use + xlink:href="#glyph0-35" + x="723.101562" + y="232.046875" + id="use1216" /> + <use + xlink:href="#glyph0-10" + x="733.101562" + y="232.046875" + id="use1218" /> + <use + xlink:href="#glyph0-15" + x="742.101562" + y="232.046875" + id="use1220" /> + <use + xlink:href="#glyph0-16" + x="750.101562" + y="232.046875" + id="use1222" /> + <use + xlink:href="#glyph0-8" + x="756.101562" + y="232.046875" + id="use1224" /> + <use + xlink:href="#glyph0-20" + x="760.101562" + y="232.046875" + id="use1226" /> + <use + xlink:href="#glyph0-21" + x="769.101562" + y="232.046875" + id="use1228" /> + <use + xlink:href="#glyph0-34" + x="778.101562" + y="232.046875" + id="use1230" /> + <use + xlink:href="#glyph0-23" + x="782.101562" + y="232.046875" + id="use1232" /> + <use + xlink:href="#glyph0-4" + x="796.101562" + y="232.046875" + id="use1234" /> + <use + xlink:href="#glyph0-26" + x="805.101562" + y="232.046875" + id="use1236" /> + <use + xlink:href="#glyph0-39" + x="809.101562" + y="232.046875" + id="use1238" /> + <use + xlink:href="#glyph0-1" + x="815.101562" + y="232.046875" + id="use1240" /> + <use + xlink:href="#glyph0-2" + x="826.101562" + y="232.046875" + id="use1242" /> + <use + xlink:href="#glyph0-3" + x="833.101562" + y="232.046875" + id="use1244" /> + <use + xlink:href="#glyph0-4" + x="842.101562" + y="232.046875" + id="use1246" /> + <use + xlink:href="#glyph0-5" + x="851.101562" + y="232.046875" + id="use1248" /> + <use + xlink:href="#glyph0-27" + x="860.101562" + y="232.046875" + id="use1250" /> + <use + xlink:href="#glyph0-1" + x="865.101562" + y="232.046875" + id="use1252" /> + <use + xlink:href="#glyph0-2" + x="876.101562" + y="232.046875" + id="use1254" /> + <use + xlink:href="#glyph0-3" + x="883.101562" + y="232.046875" + id="use1256" /> + <use + xlink:href="#glyph0-4" + x="892.101562" + y="232.046875" + id="use1258" /> + <use + xlink:href="#glyph0-5" + x="901.101562" + y="232.046875" + id="use1260" /> + <use + xlink:href="#glyph0-40" + x="910.101562" + y="232.046875" + id="use1262" /> + </g> + <path + style="stroke:none;fill-rule:nonzero;fill:#66b521;fill-opacity:1" + d="M 485.101562 209.546875 L 597.101562 209.546875 L 597.101562 253.546875 L 485.101562 253.546875 Z M 485.101562 209.546875 " + id="path1266" /> + <g + style="fill:rgb(0%,0%,0%);fill-opacity:1;" + id="g1282"> + <use + xlink:href="#glyph2-7" + x="491.101562" + y="240.546875" + id="use1268" /> + <use + xlink:href="#glyph2-9" + x="510.101562" + y="240.546875" + id="use1270" /> + <use + xlink:href="#glyph2-10" + x="526.101562" + y="240.546875" + id="use1272" /> + <use + xlink:href="#glyph2-17" + x="540.101562" + y="240.546875" + id="use1274" /> + <use + xlink:href="#glyph2-16" + x="550.101562" + y="240.546875" + id="use1276" /> + <use + xlink:href="#glyph2-14" + x="557.101562" + y="240.546875" + id="use1278" /> + <use + xlink:href="#glyph2-19" + x="574.101562" + y="240.546875" + id="use1280" /> + </g> + <path + style="fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke:rgb(80%,0%,0%);stroke-opacity:1;stroke-dasharray:2,8;stroke-miterlimit:10;" + d="M 620.488094 695.216003 C 642.406063 620.102721 651.351375 538.98944 647.331844 451.876159 " + transform="matrix(1,0,0,1,-228.433406,-394.376159)" + id="path1284" /> + <path + style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,0%,0%);fill-opacity:1;" + d="M 392.054688 300.839844 L 402.195312 292.707031 L 387.878906 288.527344 Z M 392.054688 300.839844 " + id="path1286" /> + <path + style="fill:#cc0000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.12582338" + d="m 385.36881,167.34353 h 59.66863 c 3.72929,0 6.75494,3.02565 6.75494,6.75494 v 19.139 c 0,3.73368 -3.02565,6.75494 -6.75494,6.75494 h -59.66863 c -3.72929,0 -6.75494,-3.02126 -6.75494,-6.75494 v -19.139 c 0,-3.72929 3.02565,-6.75494 6.75494,-6.75494 z m 0,0" + id="path1288" + inkscape:connector-curvature="0" /> + <g + style="fill:#ffffff;fill-opacity:1" + id="g1306" + transform="matrix(1.1258233,0,0,1.1258233,-52.242237,-23.109714)"> + <use + xlink:href="#glyph4-1" + x="388.70312" + y="188.16797" + id="use1290" + width="100%" + height="100%" /> + <use + xlink:href="#glyph4-2" + x="393.70312" + y="188.16797" + id="use1292" + width="100%" + height="100%" /> + <use + xlink:href="#glyph4-3" + x="401.70312" + y="188.16797" + id="use1294" + width="100%" + height="100%" /> + <use + xlink:href="#glyph4-4" + x="409.70312" + y="188.16797" + id="use1296" + width="100%" + height="100%" /> + <use + xlink:href="#glyph4-5" + x="417.70312" + y="188.16797" + id="use1298" + width="100%" + height="100%" /> + <use + xlink:href="#glyph4-1" + x="421.70312" + y="188.16797" + id="use1300" + width="100%" + height="100%" /> + <use + xlink:href="#glyph4-2" + x="426.70312" + y="188.16797" + id="use1302" + width="100%" + height="100%" /> + <use + xlink:href="#glyph4-6" + x="434.70312" + y="188.16797" + id="use1304" + width="100%" + height="100%" /> + </g> + <path + style="fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke:rgb(46.666667%,46.666667%,46.666667%);stroke-opacity:1;stroke-dasharray:20,8;stroke-miterlimit:10;" + d="M 1030.890438 601.423034 C 986.933406 546.33319 965.824031 496.485534 967.566219 451.876159 " + transform="matrix(1,0,0,1,-228.433406,-394.376159)" + id="path1308" /> + <path + style=" stroke:none;fill-rule:nonzero;fill:rgb(46.666667%,46.666667%,46.666667%);fill-opacity:1;" + d="M 739.132812 57.5 L 731.265625 67.851562 L 746.167969 68.433594 Z M 739.132812 57.5 " + id="path1310" /> + <path + style=" stroke:none;fill-rule:nonzero;fill:rgb(46.666667%,46.666667%,46.666667%);fill-opacity:1;" + d="M 802.457031 207.046875 L 801.644531 194.074219 L 789.984375 203.375 Z M 802.457031 207.046875 " + id="path1312" /> + <path + style="fill:#757575;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.1717118" + d="m 710.88877,101.39438 h 85.53496 c 3.8813,0 7.03027,3.1444 7.03027,7.03027 v 39.8382 c 0,3.8813 -3.14897,7.03027 -7.03027,7.03027 h -85.53496 c -3.8813,0 -7.03027,-3.14897 -7.03027,-7.03027 v -39.8382 c 0,-3.88587 3.14897,-7.03027 7.03027,-7.03027 z m 0,0" + id="path1314" + inkscape:connector-curvature="0" /> + <g + style="fill:#ffffff;fill-opacity:1" + id="g1338" + transform="matrix(1.1717118,0,0,1.1717118,-129.41169,-22.03814)"> + <use + xlink:href="#glyph4-7" + x="717.15625" + y="124.34375" + id="use1316" + width="100%" + height="100%" /> + <use + xlink:href="#glyph4-8" + x="725.15625" + y="124.34375" + id="use1318" + width="100%" + height="100%" /> + <use + xlink:href="#glyph4-9" + x="733.15625" + y="124.34375" + id="use1320" + width="100%" + height="100%" /> + <use + xlink:href="#glyph4-1" + x="741.15625" + y="124.34375" + id="use1322" + width="100%" + height="100%" /> + <use + xlink:href="#glyph4-2" + x="746.15625" + y="124.34375" + id="use1324" + width="100%" + height="100%" /> + <use + xlink:href="#glyph4-6" + x="754.15625" + y="124.34375" + id="use1326" + width="100%" + height="100%" /> + <use + xlink:href="#glyph4-10" + x="761.15625" + y="124.34375" + id="use1328" + width="100%" + height="100%" /> + <use + xlink:href="#glyph4-11" + x="765.15625" + y="124.34375" + id="use1330" + width="100%" + height="100%" /> + <use + xlink:href="#glyph4-12" + x="774.15625" + y="124.34375" + id="use1332" + width="100%" + height="100%" /> + <use + xlink:href="#glyph4-13" + x="782.15625" + y="124.34375" + id="use1334" + width="100%" + height="100%" /> + <use + xlink:href="#glyph4-14" + x="786.15625" + y="124.34375" + id="use1336" + width="100%" + height="100%" /> + </g> + <g + style="fill:#ffffff;fill-opacity:1" + id="g1354" + transform="matrix(1.1717118,0,0,1.1717118,-129.41169,-22.03814)"> + <use + xlink:href="#glyph4-15" + x="717.15625" + y="141.34375" + id="use1340" + width="100%" + height="100%" /> + <use + xlink:href="#glyph4-2" + x="730.15625" + y="141.34375" + id="use1342" + width="100%" + height="100%" /> + <use + xlink:href="#glyph4-16" + x="738.15625" + y="141.34375" + id="use1344" + width="100%" + height="100%" /> + <use + xlink:href="#glyph4-8" + x="743.15625" + y="141.34375" + id="use1346" + width="100%" + height="100%" /> + <use + xlink:href="#glyph4-17" + x="751.15625" + y="141.34375" + id="use1348" + width="100%" + height="100%" /> + <use + xlink:href="#glyph4-18" + x="759.15625" + y="141.34375" + id="use1350" + width="100%" + height="100%" /> + <use + xlink:href="#glyph4-6" + x="767.15625" + y="141.34375" + id="use1352" + width="100%" + height="100%" /> + </g> + <path + style="fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke:rgb(46.666667%,46.666667%,46.666667%);stroke-opacity:1;stroke-dasharray:2,8;stroke-miterlimit:10;" + d="M 1040.890438 641.423034 C 984.038875 728.954284 887.581844 780.516784 751.519344 796.102721 " + transform="matrix(1,0,0,1,-228.433406,-394.376159)" + id="path1356" /> + <path + style=" stroke:none;fill-rule:nonzero;fill:rgb(46.666667%,46.666667%,46.666667%);fill-opacity:1;" + d="M 523.085938 401.726562 L 534.515625 407.921875 L 532.816406 393.105469 Z M 523.085938 401.726562 " + id="path1358" /> + <path + style="fill:#757575;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.16217232" + d="m 652.15184,334.51569 h 90.64944 c 3.8497,0 6.97303,3.1188 6.97303,6.97303 v 19.75693 c 0,3.8497 -3.12333,6.97304 -6.97303,6.97304 h -90.64944 c -3.85423,0 -6.97303,-3.12334 -6.97303,-6.97304 v -19.75693 c 0,-3.85423 3.1188,-6.97303 6.97303,-6.97303 z m 0,0" + id="path1360" + inkscape:connector-curvature="0" /> + <g + style="fill:#ffffff;fill-opacity:1" + id="g1384" + transform="matrix(1.1621723,0,0,1.1621723,-113.11137,-56.98202)"> + <use + xlink:href="#glyph4-12" + x="658.47656" + y="355.86719" + id="use1362" + width="100%" + height="100%" /> + <use + xlink:href="#glyph4-1" + x="666.47656" + y="355.86719" + id="use1364" + width="100%" + height="100%" /> + <use + xlink:href="#glyph4-17" + x="671.47656" + y="355.86719" + id="use1366" + width="100%" + height="100%" /> + <use + xlink:href="#glyph4-19" + x="679.47656" + y="355.86719" + id="use1368" + width="100%" + height="100%" /> + <use + xlink:href="#glyph4-5" + x="687.47656" + y="355.86719" + id="use1370" + width="100%" + height="100%" /> + <use + xlink:href="#glyph4-18" + x="691.47656" + y="355.86719" + id="use1372" + width="100%" + height="100%" /> + <use + xlink:href="#glyph4-2" + x="699.47656" + y="355.86719" + id="use1374" + width="100%" + height="100%" /> + <use + xlink:href="#glyph4-18" + x="707.47656" + y="355.86719" + id="use1376" + width="100%" + height="100%" /> + <use + xlink:href="#glyph4-10" + x="715.47656" + y="355.86719" + id="use1378" + width="100%" + height="100%" /> + <use + xlink:href="#glyph4-20" + x="719.47656" + y="355.86719" + id="use1380" + width="100%" + height="100%" /> + <use + xlink:href="#glyph4-21" + x="728.47656" + y="355.86719" + id="use1382" + width="100%" + height="100%" /> + </g> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.51816273px;line-height:1.25;font-family:flux;-inkscape-font-specification:flux;letter-spacing:0px;word-spacing:0px;fill:#004141;fill-opacity:1;stroke:none;stroke-width:0.9388622" + x="9.0130692" + y="702.06409" + id="text2202"><tspan + sodipodi:role="line" + id="tspan2200" + x="9.0130692" + y="702.06409" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:50.07265091px;line-height:1.25;font-family:serif;-inkscape-font-specification:serif;fill:#004141;fill-opacity:1;stroke-width:0.9388622">Phase I</tspan></text> + </g> +</svg> diff --git a/doc/neps/nep-0041-improved-dtype-support.rst b/doc/neps/nep-0041-improved-dtype-support.rst new file mode 100644 index 000000000..32200f27f --- /dev/null +++ b/doc/neps/nep-0041-improved-dtype-support.rst @@ -0,0 +1,730 @@ +================================================= +NEP 41 — First step towards a new Datatype System +================================================= + +:title: Improved Datatype Support +:Author: Sebastian Berg +:Author: Stéfan van der Walt +:Author: Matti Picus +:Status: Draft +:Type: Standard Track +:Created: 2020-02-03 + + +.. note:: + + This NEP is part of a series of NEPs encompassing first information + about the previous dtype implementation and issues with it in NEP 40. + NEP 41 (this document) then provides an overview and generic design + choices for the refactor. + Further NEPs 42 and 43 go into the technical details of the datatype + and universal function related internal and external API changes. + In some cases it may be necessary to consult the other NEPs for a full + picture of the desired changes and why these changes are necessary. + + +Abstract +-------- + +`Datatypes <data-type-objects-dtype>` in NumPy describe how to interpret each +element in arrays. NumPy provides ``int``, ``float``, and ``complex`` numerical +types, as well as string, datetime, and structured datatype capabilities. +The growing Python community, however, has need for more diverse datatypes. +Examples are datatypes with unit information attached (such as meters) or +categorical datatypes (fixed set of possible values). +However, the current NumPy datatype API is too limited to allow the creation +of these. + +This NEP is the first step to enable such growth; it will lead to +a simpler development path for new datatypes. +In the long run the new datatype system will also support the creation +of datatypes directly from Python rather than C. +Refactoring the datatype API will improve maintainability and facilitate +development of both user-defined external datatypes, +as well as new features for existing datatypes internal to NumPy. + + +Motivation and Scope +-------------------- + +.. seealso:: + + The user impact section includes examples of what kind of new datatypes + will be enabled by the proposed changes in the long run. + It may thus help to read these section out of order. + +Motivation +^^^^^^^^^^ + +One of the main issues with the current API is the definition of typical +functions such as addition and multiplication for parametric datatypes +(see also NEP 40) which require additional steps to determine the output type. +For example when adding two strings of length 4, the result is a string +of length 8, which is different from the input. +Similarly, a datatype which embeds a physical unit must calculate the new unit +information: dividing a distance by a time results in a speed. +A related difficulty is that the :ref:`current casting rules <_ufuncs.casting>` +-- the conversion between different datatypes -- +cannot describe casting for such parametric datatypes implemented outside of NumPy. + +This additional functionality for supporting parametric datatypes introduces +increased complexity within NumPy itself, +and furthermore is not available to external user-defined datatypes. +In general the concerns of different datatypes are not well well-encapsulated. +This burden is exacerbated by the exposure of internal C structures, +limiting the addition of new fields +(for example to support new sorting methods [new_sort]_). + +Currently there are many factors which limit the creation of new user-defined +datatypes: + +* Creating casting rules for parametric user-defined dtypes is either impossible + or so complex that it has never been attempted. +* Type promotion, e.g. the operation deciding that adding float and integer + values should return a float value, is very valuable for numeric datatypes + but is limited in scope for user-defined and especially parametric datatypes. +* Much of the logic (e.g. promotion) is written in single functions + instead of being split as methods on the datatype itself. +* In the current design datatypes cannot have methods that do not generalize + to other datatypes. For example a unit datatype cannot have a ``.to_si()`` method to + easily find the datatype which would represent the same values in SI units. + +The large need to solve these issues has driven the scientific community +to create work-arounds in multiple projects implementing physical units as an +array-like class instead of a datatype, which would generalize better across +multiple array-likes (Dask, pandas, etc.). +Already, Pandas has made a push into the same direction with its +extension arrays [pandas_extension_arrays]_ and undoubtedly +the community would be best served if such new features could be common +between NumPy, Pandas, and other projects. + +Scope +^^^^^ + +The proposed refactoring of the datatype system is a large undertaking and +thus is proposed to be split into various phases, roughly: + +* Phase I: Restructure and extend the datatype infrastructure (This NEP 41) +* Phase II: Incrementally define or rework API (Detailed largely in NEPs 42/43) +* Phase III: Growth of NumPy and Scientific Python Ecosystem capabilities. + +For a more detailed accounting of the various phases, see +"Plan to Approach the Full Refactor" in the Implementation section below. +This NEP proposes to move ahead with the necessary creation of new dtype +subclasses (Phase I), +and start working on implementing current functionality. +Within the context of this NEP all development will be fully private API or +use preliminary underscored names which must be changed in the future. +Most of the internal and public API choices are part of a second Phase +and will be discussed in more detail in the following NEPs 42 and 43. +The initial implementation of this NEP will have little or no effect on users, +but provides the necessary ground work for incrementally addressing the +full rework. + +The implementation of this NEP and the following, implied large rework of how +datatypes are defined in NumPy is expected to create small incompatibilities +(see backward compatibility section). +However, a transition requiring large code adaption is not anticipated and not +within scope. + +Specifically, this NEP makes the following design choices which are discussed +in more details in the detailed description section: + +1. Each datatype will be an instance of a subclass of ``np.dtype``, with most of the + datatype-specific logic being implemented + as special methods on the class. In the C-API, these correspond to specific + slots. In short, for ``f = np.dtype("f8")``, ``isinstance(f, np.dtype)`` will remain true, + but ``type(f)`` will be a subclass of ``np.dtype`` rather than just ``np.dtype`` itself. + The ``PyArray_ArrFuncs`` which are currently stored as a pointer on the instance (as ``PyArray_Descr->f``), + should instead be stored on the class as typically done in Python. + In the future these may correspond to python side dunder methods. + Storage information such as itemsize and byteorder can differ between + different dtype instances (e.g. "S3" vs. "S8") and will remain part of the instance. + This means that in the long run the current lowlevel access to dtype methods + will be removed (see ``PyArray_ArrFuncs`` in NEP 40). + +2. The current NumPy scalars will *not* change, they will not be instances of + datatypes. This will also be true for new datatypes, scalars will not be + instances of a dtype (although ``isinstance(scalar, dtype)`` may be made + to return ``True`` when appropriate). + +Detailed technical decisions to follow in NEP 42. + +Further, the public API will be designed in a way that is extensible in the future: + +3. All new C-API functions provided to the user will hide implementation details + as much as possible. The public API should be an identical, but limited, + version of the C-API used for the internal NumPy datatypes. + +The changes to the datatype system in Phase II must include a large refactor of the +UFunc machinery, which will be further defined in NEP 43: + +4. To enable all of the desired functionality for new user-defined datatypes, + the UFunc machinery will be changed to replace the current dispatching + and type resolution system. + The old system should be *mostly* supported as a legacy version for some time. + +Additionally, as a general design principle, the addition of new user-defined +datatypes will *not* change the behaviour of programs. +For example ``common_dtype(a, b)`` must not be ``c`` unless ``a`` or ``b`` know +that ``c`` exists. + + +User Impact +----------- + +The current ecosystem has very few user-defined datatypes using NumPy, the +two most prominent being: ``rational`` and ``quaternion``. +These represent fairly simple datatypes which are not strongly impacted +by the current limitations. +However, we have identified a need for datatypes such as: + +* bfloat16, used in deep learning +* categorical types +* physical units (such as meters) +* datatypes for tracing/automatic differentiation +* high, fixed precision math +* specialized integer types such as int2, int24 +* new, better datetime representations +* extending e.g. integer dtypes to have a sentinel NA value +* geometrical objects [pygeos]_ + +Some of these are partially solved; for example unit capability is provided +in ``astropy.units``, ``unyt``, or ``pint``, as `numpy.ndarray` subclasses. +Most of these datatypes, however, simply cannot be reasonably defined +right now. +An advantage of having such datatypes in NumPy is that they should integrate +seamlessly with other array or array-like packages such as Pandas, +``xarray`` [xarray_dtype_issue]_, or ``Dask``. + +The long term user impact of implementing this NEP will be to allow both +the growth of the whole ecosystem by having such new datatypes, as well as +consolidating implementation of such datatypes within NumPy to achieve +better interoperability. + + +Examples +^^^^^^^^ + +The following examples represent future user-defined datatypes we wish to enable. +These datatypes are not part the NEP and choices (e.g. choice of casting rules) +are possibilities we wish to enable and do not represent recommendations. + +Simple Numerical Types +"""""""""""""""""""""" + +Mainly used where memory is a consideration, lower-precision numeric types +such as :ref:```bfloat16`` <https://en.wikipedia.org/wiki/Bfloat16_floating-point_format>` +are common in other computational frameworks. +For these types the definitions of things such as ``np.common_type`` and +``np.can_cast`` are some of the most important interfaces. Once they +support ``np.common_type``, it is (for the most part) possible to find +the correct ufunc loop to call, since most ufuncs -- such as add -- effectively +only require ``np.result_type``:: + + >>> np.add(arr1, arr2).dtype == np.result_type(arr1, arr2) + +and `~numpy.result_type` is largely identical to `~numpy.common_type`. + + +Fixed, high precision math +"""""""""""""""""""""""""" + +Allowing arbitrary precision or higher precision math is important in +simulations. For instance ``mpmath`` defines a precision:: + + >>> import mpmath as mp + >>> print(mp.dps) # the current (default) precision + 15 + +NumPy should be able to construct a native, memory-efficient array from +a list of ``mpmath.mpf`` floating point objects:: + + >>> arr_15_dps = np.array(mp.arange(3)) # (mp.arange returns a list) + >>> print(arr_15_dps) # Must find the correct precision from the objects: + array(['0.0', '1.0', '2.0'], dtype=mpf[dps=15]) + +We should also be able to specify the desired precision when +creating the datatype for an array. Here, we use ``np.dtype[mp.mpf]`` +to find the DType class (the notation is not part of this NEP), +which is then instantiated with the desired parameter. +This could also be written as ``MpfDType`` class:: + + >>> arr_100_dps = np.array([1, 2, 3], dtype=np.dtype[mp.mpf](dps=100)) + >>> print(arr_15_dps + arr_100_dps) + array(['0.0', '2.0', '4.0'], dtype=mpf[dps=100]) + +The ``mpf`` datatype can decide that the result of the operation should be the +higher precision one of the two, so uses a precision of 100. +Furthermore, we should be able to define casting, for example as in:: + + >>> np.can_cast(arr_15_dps.dtype, arr_100_dps.dtype, casting="safe") + True + >>> np.can_cast(arr_100_dps.dtype, arr_15_dps.dtype, casting="safe") + False # loses precision + >>> np.can_cast(arr_100_dps.dtype, arr_100_dps.dtype, casting="same_kind") + True + +Casting from float is a probably always at least a ``same_kind`` cast, but +in general, it is not safe:: + + >>> np.can_cast(np.float64, np.dtype[mp.mpf](dps=4), casting="safe") + False + +since a float64 has a higer precision than the ``mpf`` datatype with +``dps=4``. + +Alternatively, we can say that:: + + >>> np.common_type(np.dtype[mp.mpf](dps=5), np.dtype[mp.mpf](dps=10)) + np.dtype[mp.mpf](dps=10) + +And possibly even:: + + >>> np.common_type(np.dtype[mp.mpf](dps=5), np.float64) + np.dtype[mp.mpf](dps=16) # equivalent precision to float64 (I believe) + +since ``np.float64`` can be cast to a ``np.dtype[mp.mpf](dps=16)`` safely. + + +Categoricals +"""""""""""" + +Categoricals are interesting in that they can have fixed, predefined values, +or can be dynamic with the ability to modify categories when necessary. +The fixed categories (defined ahead of time) is the most straight forward +categorical definition. +Categoricals are *hard*, since there are many strategies to implement them, +suggesting NumPy should only provide the scaffolding for user-defined +categorical types. For instance:: + + >>> cat = Categorical(["eggs", "spam", "toast"]) + >>> breakfast = array(["eggs", "spam", "eggs", "toast"], dtype=cat) + +could store the array very efficiently, since it knows that there are only 3 +categories. +Since a categorical in this sense knows almost nothing about the data stored +in it, few operations makes, sense, although equality does: + + >>> breakfast2 = array(["eggs", "eggs", "eggs", "eggs"], dtype=cat) + >>> breakfast == breakfast2 + array[True, False, True, False]) + +The categorical datatype could work like a dictionary: no two +items names can be equal (checked on dtype creation), so that the equality +operation above can be performed very efficiently. +If the values define an order, the category labels (internally integers) could +be ordered the same way to allow efficient sorting and comparison. + +Whether or not casting is defined from one categorical with less to one with +strictly more values defined, is something that the Categorical datatype would +need to decide. Both options should be available. + + +Unit on the Datatype +"""""""""""""""""""" + +There are different ways to define Units, depending on how the internal +machinery would be organized, one way is to have a single Unit datatype +for every existing numerical type. +This will be written as ``Unit[float64]``, the unit itself is part of the +DType instance ``Unit[float64]("m")`` is a ``float64`` with meters attached:: + + >>> from astropy import units + >>> meters = np.array([1, 2, 3], dtype=np.float64) * units.m # meters + >>> print(meters) + array([1.0, 2.0, 3.0], dtype=Unit[float64]("m")) + +Note that units are a bit tricky. It is debatable, whether:: + + >>> np.array([1.0, 2.0, 3.0], dtype=Unit[float64]("m")) + +should be valid syntax (coercing the float scalars without a unit to meters). +Once the array is created, math will work without any issue:: + + >>> meters / (2 * unit.seconds) + array([0.5, 1.0, 1.5], dtype=Unit[float64]("m/s")) + +Casting is not valid from one unit to the other, but can be valid between +different scales of the same dimensionality (although this may be "unsafe"):: + + >>> meters.astype(Unit[float64]("s")) + TypeError: Cannot cast meters to seconds. + >>> meters.astype(Unit[float64]("km")) + >>> # Convert to centimeter-gram-second (cgs) units: + >>> meters.astype(meters.dtype.to_cgs()) + +The above notation is somewhat clumsy. Functions +could be used instead to convert between units. +There may be ways to make these more convenient, but those must be left +for future discussions:: + + >>> units.convert(meters, "km") + >>> units.to_cgs(meters) + +There are some open questions. For example, whether additional methods +on the array object could exist to simplify some of the notions, and how these +would percolate from the datatype to the ``ndarray``. + +The interaction with other scalars would likely be defined through:: + + >>> np.common_type(np.float64, Unit) + Unit[np.float64](dimensionless) + +Ufunc output datatype determination can be more involved than for simple +numerical dtypes since there is no "universal" output type:: + + >>> np.multiply(meters, seconds).dtype != np.result_type(meters, seconds) + +In fact ``np.result_type(meters, seconds)`` must error without context +of the operation being done. +This example highlights how the specific ufunc loop +(loop with known, specific DTypes as inputs), has to be able to to make +certain decisions before the actual calculation can start. + + + +Implementation +-------------- + +Plan to Approach the Full Refactor +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +To address these issues in NumPy and enable new datatypes, +multiple development stages are required: + +* Phase I: Restructure and extend the datatype infrastructure (This NEP) + + * Organize Datatypes like normal Python classes [`PR 15508`]_ + +* Phase II: Incrementally define or rework API + + * Create a new and easily extensible API for defining new datatypes + and related functionality. (NEP 42) + + * Incrementally define all necessary functionality through the new API (NEP 42): + + * Defining operations such as ``np.common_type``. + * Allowing to define casting between datatypes. + * Add functionality necessary to create a numpy array from Python scalars + (i.e. ``np.array(...)``). + * … + + * Restructure how universal functions work (NEP 43), in order to: + + * make it possible to allow a `~numpy.ufunc` such as ``np.add`` to be + extended by user-defined datatypes such as Units. + + * allow efficient lookup for the correct implementation for user-defined + datatypes. + + * enable reuse of existing code. Units should be able to use the + normal math loops and add additional logic to determine output type. + +* Phase III: Growth of NumPy and Scientific Python Ecosystem capabilities: + + * Cleanup of legacy behaviour where it is considered buggy or undesirable. + * Provide a path to define new datatypes from Python. + * Assist the community in creating types such as Units or Categoricals + * Allow strings to be used in functions such as ``np.equal`` or ``np.add``. + * Remove legacy code paths within NumPy to improve long term maintainability + +This document serves as a basis for phase I and provides the vision and +motivation for the full project. +Phase I does not introduce any new user-facing features, +but is concerned with the necessary conceptual cleanup of the current datatype system. +It provides a more "pythonic" datatype Python type object, with a clear class hierarchy. + +The second phase is the incremental creation of all APIs necessary to define +fully featured datatypes and reorganization of the NumPy datatype system. +This phase will thus be primarily concerned with defining an, +initially preliminary, stable public API. + +Some of the benefits of a large refactor may only become evident after the full +deprecation of the current legacy implementation (i.e. larger code removals). +However, these steps are necessary for improvements to many parts of the +core NumPy API, and are expected to make the implementation generally +easier to understand. + +The following figure illustrates the proposed design at a high level, +and roughly delineates the components of the overall design. +Note that this NEP only regards Phase I (shaded area), +the rest encompasses Phase II and the design choices are up for discussion, +however, it highlights that the DType datatype class is the central, necessary +concept: + +.. image:: _static/nep-0041-mindmap.svg + + +First steps directly related to this NEP +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The required changes necessary to NumPy are large and touch many areas +of the code base +but many of these changes can be addressed incrementally. + +To enable an incremental approach we will start by creating a C defined +``PyArray_DTypeMeta`` class with its instances being the ``DType`` classes, +subclasses of ``np.dtype``. +This is necessary to add the ability of storing custom slots on the DType in C. +This ``DTypeMeta`` will be implemented first to then enable incremental +restructuring of current code. + +The addition of ``DType`` will then enable addressing other changes +incrementally, some of which may begin before the settling the full internal +API: + +1. New machinery for array coercion, with the goal of enabling user DTypes + with appropriate class methods. +2. The replacement or wrapping of the current casting machinery. +3. Incremental redefinition of the current ``PyArray_ArrFuncs`` slots into + DType method slots. + +At this point, no or only very limited new public API will be added and +the internal API is considered to be in flux. +Any new public API may be set up give warnings and will have leading underscores +to indicate that it is not finalized and can be changed without warning. + + +Backward compatibility +---------------------- + +While the actual backward compatibility impact of implementing Phase I and II +are not yet fully clear, we anticipate, and accept the following changes: + +* **Python API**: + + * ``type(np.dtype("f8"))`` will be a subclass of ``np.dtype``, while right + now ``type(np.dtype("f8")) is np.dtype``. + Code should use ``isinstance`` checks, and in very rare cases may have to + be adapted to use it. + +* **C-API**: + + * In old versions of NumPy ``PyArray_DescrCheck`` is a macro which uses + ``type(dtype) is np.dtype``. When compiling against an old NumPy version, + the macro may have to be replaced with the corresponding + ``PyObject_IsInstance`` call. (If this is a problem, we could backport + fixing the macro) + + * The UFunc machinery changes will break *limited* parts of the current + implementation. Replacing e.g. the default ``TypeResolver`` is expected + to remain supported for a time, although optimized masked inner loop iteration + (which is not even used *within* NumPy) will no longer be supported. + + * All functions currently defined on the dtypes, such as + ``PyArray_Descr->f->nonzero``, will be defined and accessed differently. + This means that in the long run lowlevel access code will + have to be changed to use the new API. Such changes are expected to be + necessary in very few project. + +* **dtype implementors (C-API)**: + + * The array which is currently provided to some functions (such as cast functions), + will no longer be provided. + For example ``PyArray_Descr->f->nonzero`` or ``PyArray_Descr->f->copyswapn``, + may instead receive a dummy array object with only some fields (mainly the + dtype), being valid. + At least in some code paths, a similar mechanism is already used. + + * The ``scalarkind`` slot and registration of scalar casting will be + removed/ignored without replacement. + It currently allows partial value-based casting. + The ``PyArray_ScalarKind`` function will continue to work for builtin types, + but will not be used internally and be deprecated. + + * Currently user dtypes are defined as instances of ``np.dtype``. + The creation works by the user providing a prototype instance. + NumPy will need to modify at least the type during registration. + This has no effect for either ``rational`` or ``quaternion`` and mutation + of the structure seems unlikely after registration. + +Since there is a fairly large API surface concerning datatypes, further changes +or the limitation certain function to currently existing datatypes is +likely to occur. +For example functions which use the type number as input +should be replaced with functions taking DType classes instead. +Although public, large parts of this C-API seem to be used rarely, +possibly never, by downstream projects. + + + +Detailed Description +-------------------- + +This section details the design decisions covered by this NEP. +The subsections correspond to the list of design choices presented +in the Scope section. + +Datatypes as Python Classes (1) +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The current NumPy datatypes are not full scale python classes. +They are instead (prototype) instances of a single ``np.dtype`` class. +Changing this means that any special handling, e.g. for ``datetime`` +can be moved to the Datetime DType class instead, away from monolithic general +code (e.g. current ``PyArray_AdjustFlexibleDType``). + +The main consequence of this change with respect to the API is that +special methods move from the dtype instances to methods on the new DType class. +This is the typical design pattern used in Python. +Organizing these methods and information in a more Pythonic way provides a +solid foundation for refining and extending the API in the future. +The current API cannot be extended due to how it is exposed publically. +This means for example that the methods currently stored in ``PyArray_ArrFuncs`` +on each datatype (see NEP 40) will be defined differently in the future and +deprecated in the long run. + +The most prominent visible side effect of this will be that +``type(np.dtype(np.float64))`` will not be ``np.dtype`` anymore. +Instead it will be a subclass of ``np.dtype`` meaning that +``isinstance(np.dtype(np.float64), np.dtype)`` will remain true. +This will also add the ability to use ``isinstance(dtype, np.dtype[float64])`` +thus removing the need to use ``dtype.kind``, ``dtype.char``, or ``dtype.type`` +to do this check. + +With the design decision of DTypes as full-scale Python classes, +the question of subclassing arises. +Inheritance, however, appears problematic and a complexity best avoided +(at least initially) for container datatypes. +Further, subclasses may be more interesting for interoperability for +example with GPU backends (CuPy) storing additional methods related to the +GPU rather than as a mechanism to define new datatypes. +A class hierarchy does provides value, this may be achieved by +allowing the creation of *abstract* datatypes. +An example for an abstract datatype would be the datatype equivalent of +``np.floating``, representing any floating point number. +These can serve the same purpose as Python's abstract base classes. + + +Scalars should not be instances of the datatypes (2) +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +For simple datatypes such as ``float64`` (see also below), it seems +tempting that the instance of a ``np.dtype("float64")`` can be the scalar. +This idea may be even more appealing due to the fact that scalars, +rather than datatypes, currently define a useful type hierarchy. + +However, we have specifically decided against this for a number of reasons. +First, the new datatypes described herein would be instances of DType classes. +Making these instances themselves classes, while possible, adds additional +complexity that users need to understand. +It would also mean that scalars must have storage information (such as byteorder) +which is generally unnecessary and currently is not used. +Second, while the simple NumPy scalars such as ``float64`` may be such instances, +it should be possible to create datatypes for Python objects without enforcing +NumPy as a dependency. +However, Python objects that do not depend on NumPy cannot be instances of a NumPy DType. +Third, there is a mismatch between the methods and attributes which are useful +for scalars and datatypes. For instance ``to_float()`` makes sense for a scalar +but not for a datatype and ``newbyteorder`` is not useful on a scalar (or has +a different meaning). + +Overall, it seem rather than reducing the complexity, i.e. by merging +the two distinct type hierarchies, making scalars instances of DTypes would +increase the complexity of both the design and implementation. + +A possible future path may be to instead simplify the current NumPy scalars to +be much simpler objects which largely derive their behaviour from the datatypes. + +C-API for creating new Datatypes (3) +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The current C-API with which users can create new datatypes +is limited in scope, and requires use of "private" structures. This means +the API is not extensible: no new members can be added to the structure +without losing binary compatibility. +This has already limited the inclusion of new sorting methods into +NumPy [new_sort]_. + +The new version shall thus replace the current ``PyArray_ArrFuncs`` structure used +to define new datatypes. +Datatypes that currently exist and are defined using these slots will be +supported during a deprecation period. + +The most likely solution is to hide the implementation from the user and thus make +it extensible in the future is to model the API after Python's stable +API [PEP-384]_: + +.. code-block:: C + + static struct PyArrayMethodDef slots[] = { + {NPY_dt_method, method_implementation}, + ..., + {0, NULL} + } + + typedef struct{ + PyTypeObject *typeobj; /* type of python scalar */ + ...; + PyType_Slot *slots; + } PyArrayDTypeMeta_Spec; + + PyObject* PyArray_InitDTypeMetaFromSpec( + PyArray_DTypeMeta *user_dtype, PyArrayDTypeMeta_Spec *dtype_spec); + +The C-side slots should be designed to mirror Python side methods +such as ``dtype.__dtype_method__``, although the exposure to Python is +a later step in the implementation to reduce the complexity of the initial +implementation. + + +C-API Changes to the UFunc Machinery (4) +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Proposed changes to the UFunc machinery will be part of NEP 43. +However, the following changes will be necessary (see NEP 40 for a detailed +description of the current implementation and its issues): + +* The current UFunc type resolution must be adapted to allow better control + for user-defined dtypes as well as resolve current inconsistencies. +* The inner-loop used in UFuncs must be expanded to include a return value. + Further, error reporting must be improved, and passing in dtype-specific + information enabled. + This requires the modification of the inner-loop function signature and + addition of new hooks called before and after the inner-loop is used. + +An important goal for any changes to the universal functions will be to +allow the reuse of existing loops. +It should be easy for a new units datatype to fall back to existing math +functions after handling the unit related computations. + + +Discussion +---------- + +See NEP 40 for a list of previous meetings and discussions. + + +References +---------- + +.. [pandas_extension_arrays] https://pandas.pydata.org/pandas-docs/stable/development/extending.html#extension-types + +.. _xarray_dtype_issue: https://github.com/pydata/xarray/issues/1262 + +.. [pygeos] https://github.com/caspervdw/pygeos + +.. [new_sort] https://github.com/numpy/numpy/pull/12945 + +.. [PEP-384] https://www.python.org/dev/peps/pep-0384/ + +.. [PR 15508] https://github.com/numpy/numpy/pull/15508 + + +Copyright +--------- + +This document has been placed in the public domain. + + +Acknowledgments +--------------- + +The effort to create new datatypes for NumPy has been discussed for several +years in many different contexts and settings, making it impossible to list everyone involved. +We would like to thank especially Stephan Hoyer, Nathaniel Smith, and Eric Wieser +for repeated in-depth discussion about datatype design. +We are very grateful for the community input in reviewing and revising this +NEP and would like to thank especially Ross Barnowski and Ralf Gommers. + |
