Merge branch 'develop' into theme/infrastructure

This commit is contained in:
Robin van der Linde 2025-07-27 22:26:24 +02:00
commit bbd7135157
66 changed files with 1961 additions and 798 deletions

View file

@ -1,20 +0,0 @@
tasks:
- init: npm run init
command: npm run start
name: Initialize and start MapComplete
- name: Generate Layeroverview
command: npm run generate:layeroverview
ports:
- name: MapComplete Website
port: 1234
onOpen: open-browser
vscode:
extensions:
- "esbenp.prettier-vscode"
- "eamodio.gitlens"
- "github.vscode-pull-request-github"
- "svelte.svelte-vscode"
- "bradlc.vscode-tailwindcss"
- "editorconfig.editorconfig"

View file

@ -31,17 +31,17 @@ You need at least 3GB RAM available to run MapComplete, but you'll preferably ha
To develop and build MapComplete, you To develop and build MapComplete, you
0. Make a fork and clone the repository. (We recommend a shallow clone with `git clone --filter=blob:none <repo>`) 0. Make a fork and clone the repository. (We recommend a shallow clone with `git clone --filter=blob:none <repo>`)
1. Install `python3` if you do not have it already - On Linux: `sudo apt install python3` 1. Install `python3` if you do not have it already - On Linux: `sudo apt install python3` or `sudo dnf install python3`
2. Install `nvm` to easily install node: 2. Install `nvm` to easily install node:
- `wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.37.2/install.sh | bash` - `wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.37.2/install.sh | bash`
- Restart your terminal - Restart your terminal
- Run `nvm install` and `nvm use` to install and use the correct version of node. (_Note: nvm might complain that the relevant version is not yet installed. It'll have it installed only for the current user account but not system-wide - which is fine) - Run `nvm install` and `nvm use` to install and use the correct version of node. (_Note: nvm might complain that the relevant version is not yet installed. It'll have it installed only for the current user account but not system-wide - which is fine)
4. Run `npm run init` (including **run**, not ~~`npm init`~~)which … 3. Run `npm run init` (including **run**, not ~~`npm init`~~)which …
- runs `npm ci` for you - runs `npm ci` for you
- generates some additional dependencies and files - generates some additional dependencies and files
- does various housekeeping and setup. This can take a few minutes the first time as some PNGs need to be created - does various housekeeping and setup. This can take a few minutes the first time as some PNGs need to be created
5. Run `npm run start` to host a local testversion at http://localhost:1234/ 4. Run `npm run start` to host a local testversion at http://127.0.0.1:1234/
6. By default, a landing page with available themes is served. In order to load a single theme, use `layout=themename` 5. By default, a landing page with available themes is served. In order to load a single theme, use `layout=themename`
or `userlayout=true#<layout configuration>` as [Query parameter](URL_Parameters.md). Note that the shorter URLs or `userlayout=true#<layout configuration>` as [Query parameter](URL_Parameters.md). Note that the shorter URLs
(e.g. `bookcases.html`, `aed.html`, ...) _don't_ exist on the development version. (e.g. `bookcases.html`, `aed.html`, ...) _don't_ exist on the development version.
@ -52,31 +52,18 @@ Development using Windows
You need at least 3GB RAM available to run MapComplete, but you'll preferably have 8GB of free RAM available. You need at least 3GB RAM available to run MapComplete, but you'll preferably have 8GB of free RAM available.
For Windows you can use the devcontainer, or the WSL subsystem. For Windows you can use the WSL subsystem.
To use the devcontainer in Visual Studio Code:
0. Make sure you have installed
the [Remote - Containers](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers)
extension and it's dependencies.
1. Make a fork and clone the repository.
2. After cloning, Visual Studio Code will ask you if you want to use the devcontainer.
3. Then you can either clone it again in a volume (for better performance), or open the current folder in a container.
4. By now, you should be able to run `npm run start` to host a local testversion at http://localhost:1234/index.html
5. By default, a landing page with available themes is served. In order to load a single theme, use `layout=themename`
or `userlayout=true#<layout configuration>` as [Query parameter](URL_Parameters.md). Note that the shorter URLs (
e.g. `bookcases.html`, `aed.html`, ...) _don't_ exist on the development version.
To use the WSL in Visual Studio Code: To use the WSL in Visual Studio Code:
0. Make sure you have installed the [Remote - WSL]() extension and it's dependencies. 1. Make sure you have installed the [Remote - WSL](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-wsl) extension and it's dependencies.
1. Open a remote WSL window using the button in the bottom left. 2. Open a remote WSL window using the button in the bottom left.
2. Make a fork and clone the repository. 3. Make a fork and clone the repository.
3. Install `npm` using `sudo apt install npm`. 4. Install `npm` using `sudo apt install npm`.
4. Run `npm run init` and generate some additional dependencies and generated files. Note that it'll install the 5. Run `npm run init` and generate some additional dependencies and generated files. Note that it'll install the
dependencies too dependencies too
5. Run `npm run start` to host a local testversion at http://localhost:1234/index.html 6. Run `npm run start` to host a local testversion at http://127.0.0.1:1234/index.html
6. By default, a landing page with available themes is served. In order to load a single theme, use `layout=themename` 7. By default, a landing page with available themes is served. In order to load a single theme, use `layout=themename`
or `userlayout=true#<layout configuration>` as [Query parameter](URL_Parameters.md). Note that the shorter URLs ( or `userlayout=true#<layout configuration>` as [Query parameter](URL_Parameters.md). Note that the shorter URLs (
e.g. `bookcases.html`, `aed.html`, ...) _don't_ exist on the development version. e.g. `bookcases.html`, `aed.html`, ...) _don't_ exist on the development version.
@ -95,10 +82,12 @@ Note that `npm run start` is equivalent to `npm run generate:layeroverview && np
Automatic deployment Automatic deployment
-------------------- --------------------
Currently, the master branch is automatically deployed to https://mapcomplete.org/ by a Forgejo action. MapComplete is automatically deployed to various locations, depending on the branch you are working on.
Every branch is automatically built (upon push) to `https://pietervdvn.github.io/mc/<branchname>` by a GitHub action. The master branch is automatically deployed to https://mapcomplete.org/, and the development branch is available at
https://dev.mapcomplete.org/. Both are automatically deployed by a Forgejo action.
Other branches are automatically deployed to https://builds.mapcomplete.org/<branchname>.
Deploying a fork Deploying a fork
---------------- ----------------
@ -113,9 +102,9 @@ This script can be invoked with `npm run prepare-deploy`
If you want to deploy your fork: If you want to deploy your fork:
0. `npm run prepare-deploy` 1. `npm run prepare-deploy`
1. `npm run build` 2. `npm run build`
2. Copy the entire `dist` folder to where you host your website. Visiting `index.html` gives you the landing page, 3. Copy the entire `dist` folder to where you host your website. Visiting `index.html` gives you the landing page,
visiting `yourwebsite/<theme>` should bring you to the appropriate theme. visiting `yourwebsite/<theme>` should bring you to the appropriate theme.
### Getting your own API-keys ### Getting your own API-keys

View file

@ -399,6 +399,41 @@
} }
] ]
}, },
{
"id": "cash_in-types",
"question": {
"en": "In what ways can you deposit cash at this ATM?",
"nl": "Op welke manieren kan je geld storten bij deze geldautomaat?"
},
"mappings": [
{
"if": "cash_in:coins=yes",
"ifnot": "cash_in:coins=no",
"then": {
"en": "You can deposit coins at this ATM",
"nl": "Je kan munten storten bij deze geldautomaat"
}
},
{
"if": "cash_in:notes=yes",
"ifnot": "cash_in:notes=no",
"then": {
"en": "You can deposit notes at this ATM",
"nl": "Je kan biljetten storten bij deze geldautomaat"
}
},
{
"if": "cash_in:sealbags=yes",
"ifnot": "cash_in:sealbags=no",
"then": {
"en": "You can deposit sealed bags at this ATM",
"nl": "Je kan sealbags storten bij deze geldautomaat"
}
}
],
"condition": "cash_in=yes",
"multiAnswer": true
},
{ {
"id": "cash_out-denominations-notes", "id": "cash_out-denominations-notes",
"question": { "question": {

View file

@ -8,7 +8,7 @@
height="500" height="500"
viewBox="0 0 500 500" viewBox="0 0 500 500"
sodipodi:docname="logo-hub.svg" sodipodi:docname="logo-hub.svg"
inkscape:version="1.4 (e7c3feb100, 2024-10-09)" inkscape:version="1.4.2 (ebf0e940d0, 2025-05-08)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg"
@ -25,10 +25,10 @@
inkscape:pagecheckerboard="0" inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1" inkscape:deskcolor="#d1d1d1"
inkscape:zoom="0.68921927" inkscape:zoom="0.68921927"
inkscape:cx="263.34145" inkscape:cx="264.06691"
inkscape:cy="171.93367" inkscape:cy="172.65913"
inkscape:window-width="1704" inkscape:window-width="2560"
inkscape:window-height="996" inkscape:window-height="1371"
inkscape:window-x="0" inkscape:window-x="0"
inkscape:window-y="0" inkscape:window-y="0"
inkscape:window-maximized="1" inkscape:window-maximized="1"
@ -45,17 +45,11 @@
d="m 436.5236,681.36291 c -6.74741,-2.13918 -14.9843,-7.26966 -34.32508,-21.37991 -68.5756,-50.02998 -120.91693,-107.10242 -149.04086,-162.51261 -17.0909,-33.67273 -25.59741,-65.40593 -26.628,-99.33465 -1.15068,-37.88281 6.06308,-71.70048 22.46148,-105.29805 30.02816,-61.52265 86.3781,-106.04268 152.70885,-120.6497 17.43029,-3.83841 28.50629,-4.98052 48.30017,-4.98052 19.79387,0 30.86987,1.14211 48.30016,4.98052 94.21933,20.7485 164.51505,100.20844 174.54536,197.3003 1.58552,15.34767 0.64021,42.86331 -1.97525,57.4944 -13.20508,73.87025 -65.11208,147.83867 -152.43593,217.22396 -13.05291,10.37151 -39.96705,29.70314 -46.65434,33.51044 -10.2471,5.83402 -23.90103,7.24594 -35.25656,3.64582 z" d="m 436.5236,681.36291 c -6.74741,-2.13918 -14.9843,-7.26966 -34.32508,-21.37991 -68.5756,-50.02998 -120.91693,-107.10242 -149.04086,-162.51261 -17.0909,-33.67273 -25.59741,-65.40593 -26.628,-99.33465 -1.15068,-37.88281 6.06308,-71.70048 22.46148,-105.29805 30.02816,-61.52265 86.3781,-106.04268 152.70885,-120.6497 17.43029,-3.83841 28.50629,-4.98052 48.30017,-4.98052 19.79387,0 30.86987,1.14211 48.30016,4.98052 94.21933,20.7485 164.51505,100.20844 174.54536,197.3003 1.58552,15.34767 0.64021,42.86331 -1.97525,57.4944 -13.20508,73.87025 -65.11208,147.83867 -152.43593,217.22396 -13.05291,10.37151 -39.96705,29.70314 -46.65434,33.51044 -10.2471,5.83402 -23.90103,7.24594 -35.25656,3.64582 z"
id="path1" id="path1"
sodipodi:nodetypes="sssssssssssss" /> sodipodi:nodetypes="sssssssssssss" />
<text <path
xml:space="preserve" style="font-size:177.423px;font-family:Ubuntu;-inkscape-font-specification:Ubuntu;letter-spacing:1px;fill:#ffffff;stroke:#ffffff;stroke-width:5.41727;paint-order:fill markers stroke"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:177.423px;font-family:MnSymbol;-inkscape-font-specification:MnSymbol;text-align:start;letter-spacing:1px;writing-mode:lr-tb;direction:ltr;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:5.41727;stroke-dasharray:none;paint-order:fill markers stroke" d="M 309.7506,457.04883 V 322.20734 l 16.50034,-2.83876 v 47.19452 q 4.613,-1.77423 9.75827,-2.66135 5.32269,-1.06454 10.46795,-1.06454 11.00023,0 18.27457,3.19362 7.27435,3.01619 11.5325,8.69372 4.43557,5.50012 6.2098,13.30673 1.77423,7.80661 1.77423,17.21003 v 51.80752 h -16.50033 v -48.25906 q 0,-8.5163 -1.24197,-14.54869 -1.06453,-6.03238 -3.72588,-9.75826 -2.66134,-3.72588 -7.09692,-5.32269 -4.43557,-1.77423 -11.00023,-1.77423 -2.66134,0 -5.50011,0.35485 -2.83877,0.35484 -5.50011,0.88711 -2.48392,0.35485 -4.613,0.88712 -1.95165,0.53226 -2.83877,0.88711 v 76.64674 z m 175.76151,-2.66135 q -5.67754,1.41939 -15.08096,3.01619 -9.22599,1.59681 -21.46818,1.59681 -10.64538,0 -17.91973,-3.01619 -7.27434,-3.19361 -11.70991,-8.87115 -4.43558,-5.67754 -6.38723,-13.30673 -1.95165,-7.80661 -1.95165,-17.21003 v -51.80751 h 16.50033 v 48.25905 q 0,16.85519 5.32269,24.12953 5.32269,7.27434 17.91973,7.27434 2.66134,0 5.50011,-0.17742 2.83877,-0.17742 5.32269,-0.35484 2.48392,-0.35485 4.43558,-0.53227 2.12907,-0.35485 3.01619,-0.7097 v -77.88869 h 16.50034 z m 45.88791,-85.51788 q 3.01619,-1.95166 9.04857,-4.08073 6.20981,-2.12908 14.19384,-2.12908 9.93569,0 17.56488,3.54846 7.80661,3.54846 13.1293,9.93569 5.32269,6.38723 7.98404,15.25838 2.83877,8.87115 2.83877,19.51653 0,11.17765 -3.37104,20.22622 -3.19361,8.87115 -9.226,15.08095 -6.03238,6.20981 -14.54868,9.58085 -8.51631,3.37103 -19.16169,3.37103 -11.53249,0 -20.40364,-1.5968 -8.87115,-1.59681 -14.54869,-3.19362 V 322.20734 l 16.50034,-2.83876 z m 0,73.80796 q 2.48392,0.7097 6.9195,1.41939 4.613,0.53227 11.35507,0.53227 13.30673,0 21.29076,-8.69373 7.98404,-8.87115 7.98404,-25.01664 0,-7.09692 -1.41939,-13.30673 -1.41938,-6.2098 -4.613,-10.64538 -3.19361,-4.613 -8.33888,-7.09692 -4.96784,-2.66134 -12.06476,-2.66134 -6.74208,0 -12.41961,2.3065 -5.67754,2.30649 -8.69373,4.79042 z"
x="295.55676" id="text1"
y="457.04883" aria-label="hub" />
id="text1"><tspan
sodipodi:role="line"
id="tspan1"
x="295.55676"
y="457.04883"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:177.423px;font-family:Ubuntu;-inkscape-font-specification:Ubuntu;letter-spacing:1px;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:5.41727;stroke-dasharray:none">hub</tspan></text>
</g> </g>
</g> </g>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 3 KiB

After

Width:  |  Height:  |  Size: 4.1 KiB

Before After
Before After

View file

@ -270,7 +270,8 @@
"ca": "Aquest fanal es troba al final d'un pal recte", "ca": "Aquest fanal es troba al final d'un pal recte",
"cs": "Tato lampa je umístěna na vrcholu rovného stožáru", "cs": "Tato lampa je umístěna na vrcholu rovného stožáru",
"it": "Questo lampione si trova in cima a un palo dritto" "it": "Questo lampione si trova in cima a un palo dritto"
} },
"icon": "./assets/layers/street_lamps/straight_pole.svg"
}, },
{ {
"if": "lamp_mount=bent_mast", "if": "lamp_mount=bent_mast",
@ -282,7 +283,8 @@
"ca": "Aquest fanal es troba al final d'un pal doblegat", "ca": "Aquest fanal es troba al final d'un pal doblegat",
"cs": "Tato lampa je umístěna na konci ohnutého stožáru", "cs": "Tato lampa je umístěna na konci ohnutého stožáru",
"it": "Questo lampione si trova all'estremità di un palo curvo" "it": "Questo lampione si trova all'estremità di un palo curvo"
} },
"icon": "./assets/layers/street_lamps/bent_pole_1.svg"
} }
], ],
"condition": { "condition": {

View file

@ -27,7 +27,12 @@
"source": { "source": {
"osmTags": { "osmTags": {
"and": [ "and": [
{
"or": [
"man_made=surveillance", "man_made=surveillance",
"disused:man_made=surveillance"
]
},
{ {
"or": [ "or": [
"surveillance:type=camera", "surveillance:type=camera",
@ -52,7 +57,15 @@
"es": "Cámara de vigilancia", "es": "Cámara de vigilancia",
"cs": "Bezpečnostní kamera", "cs": "Bezpečnostní kamera",
"sl": "Nadzorna kamera" "sl": "Nadzorna kamera"
},
"mappings": [
{
"if": "disused:man_made=surveillance",
"then": {
"en": "Disused surveillance camera"
} }
}
]
}, },
"pointRendering": [ "pointRendering": [
{ {
@ -122,7 +135,13 @@
"then": "calc({_direction:numerical}deg - 90deg)" "then": "calc({_direction:numerical}deg - 90deg)"
} }
] ]
},
"iconBadges": [
{
"if": "disused:man_made=surveillance",
"then": "close:red"
} }
]
} }
], ],
"lineRendering": [ "lineRendering": [
@ -237,6 +256,35 @@
], ],
"tagRenderings": [ "tagRenderings": [
"images", "images",
{
"id": "active",
"question": {
"en": "Is this camera currently in use?",
"nl": "Is deze camera momenteel in gebruik?"
},
"mappings": [
{
"if": "man_made=surveillance",
"then": {
"en": "This camera is currently in use.",
"nl": "Deze camera is momenteel in gebruik."
},
"addExtraTags": [
"disused:man_made="
]
},
{
"if": "disused:man_made=surveillance",
"then": {
"en": "This camera is not used anymore",
"nl": "Deze camera is niet meer in gebruik"
},
"addExtraTags": [
"man_made="
]
}
]
},
{ {
"id": "has_alpr", "id": "has_alpr",
"question": { "question": {

View file

@ -1,9 +1,9 @@
{ {
"id": "transit_routes", "id": "transit_routes",
"name": { "name": {
"en": "Bus lines", "en": "Transit Routes",
"de": "Buslinien", "de": "Buslinien",
"nl": "Buslijnen", "nl": "OV-lijnen",
"da": "Buslinjer", "da": "Buslinjer",
"ca": "Línies de bus", "ca": "Línies de bus",
"cs": "Autobusové linky", "cs": "Autobusové linky",
@ -11,9 +11,9 @@
"it": "Linee degli autobus" "it": "Linee degli autobus"
}, },
"description": { "description": {
"en": "Layer showing bus lines", "en": "Layer showing transit routes",
"de": "Ebene mit Buslinien", "de": "Ebene mit Buslinien",
"nl": "Laag met buslijnen", "nl": "Laag met OV-lijnen",
"da": "Lag, der viser buslinjer", "da": "Lag, der viser buslinjer",
"ca": "Capa que mostra les línies d'autobús", "ca": "Capa que mostra les línies d'autobús",
"cs": "Vrstva zobrazující autobusové linky", "cs": "Vrstva zobrazující autobusové linky",
@ -22,9 +22,14 @@
}, },
"source": { "source": {
"osmTags": { "osmTags": {
"and": [ "or": [
"type=route", "route=bus",
"route=bus" "route=tram",
"route=trolleybus",
"route=light_rail",
"route=subway",
"route=train",
"route=ferry"
] ]
} }
}, },
@ -34,9 +39,9 @@
"minzoom": 15, "minzoom": 15,
"title": { "title": {
"render": { "render": {
"en": "Bus line", "en": "Transit route",
"de": "Buslinie", "de": "Buslinie",
"nl": "Buslijn", "nl": "OV-lijn",
"da": "Buslinje", "da": "Buslinje",
"ca": "Línia de bus", "ca": "Línia de bus",
"cs": "Autobusová linka", "cs": "Autobusová linka",
@ -65,7 +70,14 @@
"condition": { "condition": {
"and": [ "and": [
"id~relation/[0-9]+", "id~relation/[0-9]+",
"_numeric_id~*" "_numeric_id~*",
{
"or": [
"route=bus",
"route=tram",
"route=trolleybus"
]
}
] ]
}, },
"render": "<a href=' https://relatify.monicz.dev/?relation={_numeric_id}&load=1' target='_blank' rel='noopener'><img alt='on relatify' textmode='🗺️' src='./assets/layers/transit_routes/relatify.png'/></a>" "render": "<a href=' https://relatify.monicz.dev/?relation={_numeric_id}&load=1' target='_blank' rel='noopener'><img alt='on relatify' textmode='🗺️' src='./assets/layers/transit_routes/relatify.png'/></a>"
@ -90,9 +102,9 @@
{ {
"id": "name", "id": "name",
"question": { "question": {
"en": "What is the name for this bus line? (i.e. Bus XX: From => Via => To)", "en": "What is the name for this transit route? (i.e. Bus XX: From => Via => To)",
"de": "Wie lautet der Name der Buslinie? (z.B. Bus XX: Von => Über => Nach)", "de": "Wie lautet der Name der Buslinie? (z.B. Bus XX: Von => Über => Nach)",
"nl": "Wat is de naam van deze buslijn (bv. Bus XX: Van => Via => Naar)", "nl": "Wat is de naam van deze OV-lijn (bv. Bus XX: Van => Via => Naar)",
"cs": "Jak se jmenuje tato autobusová linka? (tj. Autobus XX: Od => Přes => Do)", "cs": "Jak se jmenuje tato autobusová linka? (tj. Autobus XX: Od => Přes => Do)",
"es": "¿Cuál es el nombre de esta línea de autobús? (es decir, Autobús XX: Desde => Vía => Hasta)", "es": "¿Cuál es el nombre de esta línea de autobús? (es decir, Autobús XX: Desde => Vía => Hasta)",
"ca": "Quin és el nom d'aquesta línia d'autobús? (és a dir, Bus XX: De : Via ) A)", "ca": "Quin és el nom d'aquesta línia d'autobús? (és a dir, Bus XX: De : Via ) A)",
@ -108,9 +120,9 @@
{ {
"id": "from", "id": "from",
"question": { "question": {
"en": "What is the starting point for this bus line?", "en": "What is the starting point for this transit route?",
"de": "Wo ist der Startpunkt dieser Buslinie?", "de": "Wo ist der Startpunkt dieser Buslinie?",
"nl": "Wat is het beginpunt van deze buslijn?", "nl": "Wat is het beginpunt van deze OV-lijn?",
"da": "Hvad er udgangspunktet for denne buslinje?", "da": "Hvad er udgangspunktet for denne buslinje?",
"ca": "Quin és el punt inicial d'aquesta línea d'autobús?", "ca": "Quin és el punt inicial d'aquesta línea d'autobús?",
"cs": "Jaký je výchozí bod této autobusové linky?", "cs": "Jaký je výchozí bod této autobusové linky?",
@ -118,9 +130,9 @@
"it": "Qual è il punto di partenza di questa linea di autobus?" "it": "Qual è il punto di partenza di questa linea di autobus?"
}, },
"render": { "render": {
"en": "This bus line begins at {from}", "en": "This transit route begins at {from}",
"de": "Die Buslinie startet von {from}", "de": "Die Buslinie startet von {from}",
"nl": "Deze buslijn begint bij {from}", "nl": "Deze OV-lijn begint bij {from}",
"da": "Denne buslinje starter kl. {from}", "da": "Denne buslinje starter kl. {from}",
"fr": "Cette ligne de bus commence à {from}", "fr": "Cette ligne de bus commence à {from}",
"ca": "Aquesta línia d'autobús comença a {from}", "ca": "Aquesta línia d'autobús comença a {from}",
@ -138,9 +150,9 @@
{ {
"id": "via", "id": "via",
"question": { "question": {
"en": "What is the via point for this bus line?", "en": "What is the via point for this transit route?",
"de": "Über welchen Zwischenhalt fährt die Buslinie?", "de": "Über welchen Zwischenhalt fährt die Buslinie?",
"nl": "Via welk punt gaat deze buslijn?", "nl": "Via welk punt gaat deze OV-lijn?",
"cs": "Jaký je průjezdní bod této autobusové linky?", "cs": "Jaký je průjezdní bod této autobusové linky?",
"ru": "Где находится конечный пункт этого автобусного маршрута?", "ru": "Где находится конечный пункт этого автобусного маршрута?",
"es": "¿Cuál es el punto intermedio de esta línea de autobús?", "es": "¿Cuál es el punto intermedio de esta línea de autobús?",
@ -149,9 +161,9 @@
"uk": "Яка кінцева зупинка цієї автобусної лінії?" "uk": "Яка кінцева зупинка цієї автобусної лінії?"
}, },
"render": { "render": {
"en": "This bus line goes via {via}", "en": "This transit route goes via {via}",
"de": "Die Buslinie fährt über {via}", "de": "Die Buslinie fährt über {via}",
"nl": "Deze buslijn gaat via {via}", "nl": "Deze OV-lijn gaat via {via}",
"da": "Denne buslinje går via {via}", "da": "Denne buslinje går via {via}",
"fr": "Cette ligne de bus passe par {via}", "fr": "Cette ligne de bus passe par {via}",
"ca": "Aquesta línia d'autobús passa per {via}", "ca": "Aquesta línia d'autobús passa per {via}",
@ -168,9 +180,9 @@
{ {
"id": "to", "id": "to",
"question": { "question": {
"en": "What is the ending point for this bus line?", "en": "What is the ending point for this transit route?",
"de": "Wo ist der Endpunkt der Buslinie?", "de": "Wo ist der Endpunkt der Buslinie?",
"nl": "Wat is het eindpunt van deze buslijn?", "nl": "Wat is het eindpunt van deze OV-lijn?",
"da": "Hvad er endestationen for denne buslinje?", "da": "Hvad er endestationen for denne buslinje?",
"ca": "Quin és el punt final d'aquesta línea d'autobús?", "ca": "Quin és el punt final d'aquesta línea d'autobús?",
"cs": "Jaký je konečný bod této autobusové linky?", "cs": "Jaký je konečný bod této autobusové linky?",
@ -178,9 +190,9 @@
"it": "Qual è il punto di arrivo di questa linea di autobus?" "it": "Qual è il punto di arrivo di questa linea di autobus?"
}, },
"render": { "render": {
"en": "This bus line ends at {to}", "en": "This transit route ends at {to}",
"de": "Der Endpunkt der Buslinie ist {to}", "de": "Der Endpunkt der Buslinie ist {to}",
"nl": "Deze buslijn eindigt bij {to}", "nl": "Deze OV-lijn eindigt bij {to}",
"da": "Denne buslinje slutter ved {to}", "da": "Denne buslinje slutter ved {to}",
"fr": "Cette ligne de bus termine à {to}", "fr": "Cette ligne de bus termine à {to}",
"ca": "Aquesta línia d'autobús acaba a {to}", "ca": "Aquesta línia d'autobús acaba a {to}",
@ -198,9 +210,9 @@
{ {
"id": "colour", "id": "colour",
"question": { "question": {
"en": "What is the colour for this bus line?", "en": "What is the colour for this transit route?",
"de": "Welche Farbe hat diese Buslinie?", "de": "Welche Farbe hat diese Buslinie?",
"nl": "Wat is de kleur van deze buslijn?", "nl": "Wat is de kleur van deze OV-lijn?",
"da": "Hvad er farven på denne buslinje?", "da": "Hvad er farven på denne buslinje?",
"ca": "Quin és el color d'aquest línia d'autobús?", "ca": "Quin és el color d'aquest línia d'autobús?",
"cs": "Jakou barvu má tato autobusová linka?", "cs": "Jakou barvu má tato autobusová linka?",
@ -208,9 +220,9 @@
"it": "Qual è il colore di questa linea di autobus?" "it": "Qual è il colore di questa linea di autobus?"
}, },
"render": { "render": {
"en": "This bus line has the color {colour}", "en": "This transit route has the color {colour}",
"de": "Die Buslinie hat die Farbe {colour}", "de": "Die Buslinie hat die Farbe {colour}",
"nl": "Deze buslijn heeft de kleur {colour}", "nl": "Deze OV-lijn heeft de kleur {colour}",
"da": "Denne buslinje har farven {colour}", "da": "Denne buslinje har farven {colour}",
"ca": "Aquesta línea d'autobús té el color {colour}", "ca": "Aquesta línea d'autobús té el color {colour}",
"cs": "Tato autobusová linka má barvu {colour}", "cs": "Tato autobusová linka má barvu {colour}",
@ -225,9 +237,9 @@
{ {
"id": "network", "id": "network",
"question": { "question": {
"en": "What network does this bus line belong to?", "en": "What network does this transit route belong to?",
"de": "Zu welchem Verkehrsverbund gehört die Buslinie?", "de": "Zu welchem Verkehrsverbund gehört die Buslinie?",
"nl": "Bij welk netwerk hoort deze buslijn?", "nl": "Bij welk netwerk hoort deze OV-lijn?",
"da": "Hvilket netværk tilhører denne buslinje?", "da": "Hvilket netværk tilhører denne buslinje?",
"ca": "A quina xarxa pertany aquesta línea d'autobús?", "ca": "A quina xarxa pertany aquesta línea d'autobús?",
"cs": "Do jaké sítě tato autobusová linka patří?", "cs": "Do jaké sítě tato autobusová linka patří?",
@ -235,9 +247,9 @@
"it": "A quale rete appartiene questa linea di autobus?" "it": "A quale rete appartiene questa linea di autobus?"
}, },
"render": { "render": {
"en": "This bus line is part of the {network} network", "en": "This transit route is part of the {network} network",
"de": "Die Buslinie gehört zum Verkehrsverbund {network}", "de": "Die Buslinie gehört zum Verkehrsverbund {network}",
"nl": "Deze buslijn is onderdeel van het {network} netwerk", "nl": "Deze OV-lijn is onderdeel van het {network} netwerk",
"ca": "Aquesta línea d'autobús és part de la xarxa {network}", "ca": "Aquesta línea d'autobús és part de la xarxa {network}",
"fr": "Cette ligne de bus fait partie du réseau {network}", "fr": "Cette ligne de bus fait partie du réseau {network}",
"cs": "Tato autobusová linka je součástí sítě {network}", "cs": "Tato autobusová linka je součástí sítě {network}",
@ -254,9 +266,9 @@
"builtin": "operator", "builtin": "operator",
"override": { "override": {
"question": { "question": {
"en": "What company operates this bus line?", "en": "What company operates this transit route?",
"de": "Welches Unternehmen betreibt die Buslinie?", "de": "Welches Unternehmen betreibt die Buslinie?",
"nl": "Welk bedrijf exploiteert deze buslijn?", "nl": "Welk bedrijf exploiteert deze OV-lijn?",
"da": "Hvilket selskab driver denne buslinje?", "da": "Hvilket selskab driver denne buslinje?",
"ca": "Quina companyia opera aquesta línia d'autobús?", "ca": "Quina companyia opera aquesta línia d'autobús?",
"cs": "Jaká společnost provozuje tuto autobusovou linku?", "cs": "Jaká společnost provozuje tuto autobusovou linku?",
@ -264,9 +276,9 @@
"it": "Quale azienda gestisce questa linea di autobus?" "it": "Quale azienda gestisce questa linea di autobus?"
}, },
"render": { "render": {
"en": "This bus line is operated by {operator}", "en": "This transit route is operated by {operator}",
"de": "Die Buslinie wird betrieben von {operator}", "de": "Die Buslinie wird betrieben von {operator}",
"nl": "Deze buslijn wordt geëxploiteerd door {operator}", "nl": "Deze OV-lijn wordt geëxploiteerd door {operator}",
"da": "Denne buslinje drives af {operator}", "da": "Denne buslinje drives af {operator}",
"ca": "{operator} opera aquesta línea d'autobús", "ca": "{operator} opera aquesta línea d'autobús",
"fr": "Cette ligne de bus est gérée par {operator}", "fr": "Cette ligne de bus est gérée par {operator}",

View file

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="500" height="500">
<title>ANCHOR</title>
<g stroke="black" fill="none">
<circle cx="250" cy="80" r="40" stroke-width="20"/>
<path d="M 250,125 V 440 M 150,185 H 350 M 100,347 C 130,460 370,460 400,347" stroke-width="30"/>
</g>
<g fill="black">
<circle cx="250" cy="115" r="20"/>
<path d="M 55,365 L 75,260 150,330 Z M 225,440 L 250,470 275,440 Z M 445,365 L 425,260 350,330 Z"/>
</g>
<div xmlns="" id="divScriptsUsed" style="display: none"/><script xmlns="" id="globalVarsDetection" src="moz-extension://85428172-fe12-427b-ac2a-46cc4f37cea0/js/wrs_env.js"/></svg>

After

Width:  |  Height:  |  Size: 653 B

View file

@ -0,0 +1,2 @@
SPDX-FileCopyrightText: DePiep
SPDX-License-Identifier: CC0-1.0

View file

@ -11,5 +11,35 @@
"sources": [ "sources": [
"https://github.com/gravitystorm/openstreetmap-carto/blob/master/symbols/highway/bus_stop.svg" "https://github.com/gravitystorm/openstreetmap-carto/blob/master/symbols/highway/bus_stop.svg"
] ]
},
{
"path": "ferry.svg",
"license": "CC0-1.0",
"authors": [
"DePiep"
],
"sources": [
"https://commons.wikimedia.org/wiki/File:BSicon_ANCHOR.svg"
]
},
{
"path": "subway.svg",
"license": "CC0-1.0",
"authors": [
"Siyuwj"
],
"sources": [
"https://commons.wikimedia.org/wiki/File:BSicon_SUBWAY-CHN.svg"
]
},
{
"path": "tram.svg",
"license": "CC0-1.0",
"authors": [
"BjørnN"
],
"sources": [
"https://commons.wikimedia.org/wiki/File:BSicon_TRAM1.svg"
]
} }
] ]

View file

@ -0,0 +1,51 @@
<?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:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.1"
id="图层_2"
x="0px"
y="0px"
width="1100"
height="1100"
viewBox="0 0 1100 1100"
enable-background="new 0 0 500 500"
xml:space="preserve"
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)"
sodipodi:docname="BSicon_SUBWAY-CHN.svg"><metadata
id="metadata17"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
id="defs15" /><sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1009"
id="namedview13"
showgrid="false"
inkscape:zoom="0.70710678"
inkscape:cx="931.55143"
inkscape:cy="600.05849"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="图层_2"
inkscape:document-rotation="0" /><path
id="rect893"
style="opacity:1;fill:#000000;stroke:none;stroke-width:5.35389;stroke-miterlimit:10;stroke-dasharray:none"
d="M 427.9668 280 C 372.03142 280 327 325.03142 327 380.9668 L 327 729.0332 C 327 777.76822 361.18609 818.21983 406.98242 827.82812 L 291 1000 L 351 1000 L 432.50977 879 L 661.49023 879 L 743 1000 L 803 1000 L 687.01758 827.82812 C 732.81391 818.21983 767 777.76822 767 729.0332 L 767 380.9668 C 767 325.03142 721.96858 280 666.0332 280 L 427.9668 280 z M 493.17188 298 L 600.82812 298 C 609.23298 298 616 304.76702 616 313.17188 L 616 347.42969 C 616 355.83454 609.23299 362.59961 600.82812 362.59961 L 493.17188 362.59961 C 484.76702 362.59961 478 355.83454 478 347.42969 L 478 313.17188 C 478 304.76702 484.76701 298 493.17188 298 z M 420.40039 378.5 L 670.40039 378.5 C 698.10039 378.5 720.40039 400.8 720.40039 428.5 L 720.40039 498.5 C 720.40039 526.2 698.10039 548.5 670.40039 548.5 L 420.40039 548.5 C 392.70039 548.5 370.40039 526.2 370.40039 498.5 L 370.40039 428.5 C 370.40039 400.8 392.70039 378.5 420.40039 378.5 z M 421.96289 686.87891 L 422 686.87891 C 447.95738 686.87891 469 707.92153 469 733.87891 C 469 759.83629 447.95738 780.87891 422 780.87891 C 396.04262 780.87891 375 759.83629 375 733.87891 C 374.99999 707.93601 396.02 686.89939 421.96289 686.87891 z M 671.96289 686.87891 L 672 686.87891 C 697.95738 686.87891 719 707.92153 719 733.87891 C 719 759.83629 697.95738 780.87891 672 780.87891 C 646.04262 780.87891 625 759.83629 625 733.87891 C 624.99999 707.93601 646.02 686.89939 671.96289 686.87891 z " /><path
id="path852"
style="fill:#000000;stroke:none;stroke-width:5.30544"
d="m 125.54793,964.142 c -0.4394,-165.32487 -1.0063,-331.8464 2.5075,-497.09678 15.3487,-160.29688 130.2979,-304.99034 282.9433,-356.36484 153.4477,-54.967807 336.3503,-9.11239 445.2166,112.36708 76.1891,80.74759 118.3471,193.0285 112.2182,304.20579 0.6161,145.2861 0.2421,291.60186 0.1978,436.88875 H 901.874 c -1.1193,-164.46202 0.57953,-329.00793 -3.19737,-493.40251 -14.4252,-143.60363 -125.8634,-270.68771 -266.3193,-303.96588 -123.1472,-31.48846 -261.1871,10.39271 -345.4035,105.90361 -62.9281,67.77457 -96.4043,161.10936 -90.8869,253.39078 -1.062,146.02217 -1.1439,292.0493 -1.6739,438.074 z"
sodipodi:nodetypes="ccccccccccccc" /></svg>

After

Width:  |  Height:  |  Size: 3.8 KiB

View file

@ -0,0 +1,2 @@
SPDX-FileCopyrightText: Siyuwj
SPDX-License-Identifier: CC0-1.0

View file

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="500" height="500">
<g fill="none" stroke="#000">
<path stroke-width="5" d="m102 174 54-37 54 37-54 37Z"/>
<path stroke-width="14" d="M30 220h440"/>
</g>
<path d="m40 227-30 60v34a13 13 0 0 0 13 13h454a13 13 0 0 0 13-13v-34l-30-60Zm68-14 5-5h84l5 5ZM52 343a14 14 0 0 0 44 0Zm52 0a24 24 0 0 1-4 12h38a24 24 0 0 1-4-12Zm38 0a14 14 0 0 0 44 0Zm172 0a14 14 0 0 0 44 0Zm52 0a24 24 0 0 1-4 12h38a24 24 0 0 1-4-12Zm38 0a14 14 0 0 0 44 0Z"/>
<g fill="#fff">
<path d="M67 287H47c-30 0-30 0 0-60h20Zm366 0h20c30 0 30 0 0-60h-20ZM74 227h34v99H74z"/>
<rect width="77" height="60" x="117" y="227" rx="10"/>
<rect width="77" height="60" x="203" y="227" rx="10"/>
<rect width="77" height="60" x="289" y="227" rx="10"/>
<path d="M374 227h52v99h-52z"/>
</g>
<div xmlns="" id="divScriptsUsed" style="display: none"/><script xmlns="" id="globalVarsDetection" src="moz-extension://85428172-fe12-427b-ac2a-46cc4f37cea0/js/wrs_env.js"/></svg>

After

Width:  |  Height:  |  Size: 1 KiB

View file

@ -0,0 +1,2 @@
SPDX-FileCopyrightText: BjørnN
SPDX-License-Identifier: CC0-1.0

View file

@ -22,7 +22,9 @@
"source": { "source": {
"osmTags": { "osmTags": {
"or": [ "or": [
"highway=bus_stop" "highway=bus_stop",
"railway=platform",
"amenity=ferry_terminal"
] ]
} }
}, },
@ -32,7 +34,7 @@
"en": "Transit Stop", "en": "Transit Stop",
"de": "Haltestelle", "de": "Haltestelle",
"da": "Stoppested", "da": "Stoppested",
"nl": "Bushalte", "nl": "OV-halte",
"ca": "Parada de transport públic", "ca": "Parada de transport públic",
"cs": "Tranzitní zastávka", "cs": "Tranzitní zastávka",
"es": "Parada de transporte", "es": "Parada de transporte",
@ -65,13 +67,39 @@
{ {
"icon": { "icon": {
"render": "./assets/layers/transit_stops/bus_stop.svg", "render": "./assets/layers/transit_stops/bus_stop.svg",
"mappings": [] "mappings": [
{
"if": "train=yes",
"then": "./assets/svg/train.svg"
},
{
"if": "subway=yes",
"then": "./assets/layers/transit_stops/subway.svg"
},
{
"if": "tram=yes",
"then": "./assets/layers/transit_stops/tram.svg"
},
{
"if": "light_rail=yes",
"then": "./assets/svg/train.svg"
},
{
"if": "ferry=yes",
"then": "./assets/layers/transit_stops/ferry.svg"
}
]
} }
} }
] ]
} }
], ],
"lineRendering": [], "lineRendering": [
{
"color": "#74717190",
"fillColor": "#74717190"
}
],
"tagRenderings": [ "tagRenderings": [
{ {
"id": "stop_name", "id": "stop_name",
@ -134,6 +162,30 @@
} }
] ]
}, },
{
"id": "ref",
"question": {
"en": "What is the platform reference of this stop?"
},
"render": {
"en": "The platform reference of this stop is <b>{ref}</b>."
},
"freeform": {
"key": "ref",
"type": "string",
"placeholder": {
"en": "e.g. A1 or 1"
}
},
"mappings": [
{
"if": "ref=",
"then": {
"en": "This stop has no platform reference"
}
}
]
},
"images", "images",
{ {
"id": "shelter", "id": "shelter",

View file

@ -1,196 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<svg xmlns="http://www.w3.org/2000/svg" width="343px" height="370px" viewBox="0 0 343 370" version="1.1">
<g id="surface1">
<path style="fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:1.0568;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(100%,0%,0%);stroke-opacity:1;stroke-miterlimit:4;" d="M 117.14544 98.889271 L 203.016089 98.889271 L 203.016089 191.843045 L 117.14544 191.843045 Z M 117.14544 98.889271 " transform="matrix(3.944705,0,0,3.93576,-459.971387,-387.126315)"/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 26.683594 35.921875 L 21.300781 35.921875 L 21.300781 34.839844 L 23.054688 34.445312 L 23.054688 22.550781 L 21.300781 22.136719 L 21.300781 21.054688 L 26.683594 21.054688 L 26.683594 22.136719 L 24.933594 22.550781 L 24.933594 34.445312 L 26.683594 34.839844 Z M 26.683594 35.921875 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 41.589844 24.550781 C 42.855469 24.550781 43.800781 24.878906 44.429688 25.53125 C 45.054688 26.167969 45.367188 27.210938 45.367188 28.65625 L 45.367188 35.921875 L 43.550781 35.921875 L 43.550781 28.738281 C 43.550781 26.972656 42.792969 26.09375 41.277344 26.09375 C 40.191406 26.09375 39.410156 26.40625 38.9375 27.03125 C 38.480469 27.65625 38.25 28.5625 38.25 29.757812 L 38.25 35.921875 L 36.433594 35.921875 L 36.433594 28.738281 C 36.433594 26.972656 35.667969 26.09375 34.136719 26.09375 C 33.011719 26.09375 32.230469 26.441406 31.800781 27.132812 C 31.367188 27.828125 31.152344 28.828125 31.152344 30.132812 L 31.152344 35.921875 L 29.316406 35.921875 L 29.316406 24.761719 L 30.796875 24.761719 L 31.070312 26.28125 L 31.171875 26.28125 C 31.519531 25.695312 31.988281 25.265625 32.570312 24.988281 C 33.171875 24.699219 33.804688 24.550781 34.472656 24.550781 C 36.226562 24.550781 37.367188 25.175781 37.894531 26.425781 L 38 26.425781 C 38.375 25.789062 38.882812 25.316406 39.523438 25.011719 C 40.175781 24.703125 40.867188 24.550781 41.589844 24.550781 Z M 41.589844 24.550781 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 53.070312 24.574219 C 54.433594 24.574219 55.441406 24.871094 56.097656 25.46875 C 56.75 26.066406 57.078125 27.015625 57.078125 28.320312 L 57.078125 35.921875 L 55.742188 35.921875 L 55.386719 34.339844 L 55.304688 34.339844 C 54.816406 34.953125 54.300781 35.402344 53.757812 35.695312 C 53.230469 35.984375 52.492188 36.132812 51.546875 36.132812 C 50.53125 36.132812 49.6875 35.867188 49.019531 35.339844 C 48.351562 34.796875 48.019531 33.957031 48.019531 32.820312 C 48.019531 31.710938 48.457031 30.855469 49.332031 30.257812 C 50.210938 29.648438 51.558594 29.3125 53.382812 29.257812 L 55.28125 29.195312 L 55.28125 28.53125 C 55.28125 27.597656 55.082031 26.953125 54.675781 26.59375 C 54.273438 26.230469 53.703125 26.050781 52.964844 26.050781 C 52.382812 26.050781 51.824219 26.140625 51.296875 26.320312 C 50.765625 26.488281 50.273438 26.683594 49.8125 26.90625 L 49.25 25.53125 C 49.738281 25.265625 50.316406 25.042969 50.984375 24.863281 C 51.652344 24.667969 52.347656 24.574219 53.070312 24.574219 Z M 55.261719 30.464844 L 53.613281 30.527344 C 52.222656 30.585938 51.253906 30.808594 50.710938 31.195312 C 50.183594 31.585938 49.917969 32.132812 49.917969 32.839844 C 49.917969 33.464844 50.105469 33.921875 50.480469 34.214844 C 50.871094 34.507812 51.367188 34.652344 51.964844 34.652344 C 52.910156 34.652344 53.695312 34.394531 54.324219 33.882812 C 54.949219 33.355469 55.261719 32.550781 55.261719 31.464844 Z M 55.261719 30.464844 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 64.507812 24.550781 C 65.246094 24.550781 65.90625 24.691406 66.492188 24.96875 C 67.089844 25.246094 67.597656 25.667969 68.015625 26.238281 L 68.121094 26.238281 L 68.371094 24.761719 L 69.832031 24.761719 L 69.832031 36.109375 C 69.832031 37.707031 69.421875 38.910156 68.601562 39.714844 C 67.792969 40.519531 66.535156 40.921875 64.824219 40.921875 C 63.179688 40.921875 61.835938 40.683594 60.792969 40.214844 L 60.792969 38.527344 C 61.894531 39.109375 63.269531 39.402344 64.925781 39.402344 C 65.886719 39.402344 66.636719 39.117188 67.179688 38.546875 C 67.738281 37.992188 68.015625 37.226562 68.015625 36.257812 L 68.015625 35.820312 C 68.015625 35.652344 68.023438 35.417969 68.035156 35.109375 C 68.050781 34.792969 68.066406 34.570312 68.078125 34.445312 L 67.996094 34.445312 C 67.242188 35.570312 66.089844 36.132812 64.53125 36.132812 C 63.082031 36.132812 61.949219 35.625 61.128906 34.609375 C 60.320312 33.597656 59.917969 32.179688 59.917969 30.363281 C 59.917969 28.585938 60.320312 27.175781 61.128906 26.132812 C 61.949219 25.078125 63.074219 24.550781 64.507812 24.550781 Z M 64.757812 26.09375 C 63.828125 26.09375 63.105469 26.46875 62.589844 27.21875 C 62.074219 27.953125 61.816406 29.007812 61.816406 30.382812 C 61.816406 31.757812 62.066406 32.8125 62.566406 33.550781 C 63.082031 34.269531 63.828125 34.632812 64.800781 34.632812 C 65.929688 34.632812 66.75 34.332031 67.265625 33.738281 C 67.78125 33.125 68.035156 32.148438 68.035156 30.800781 L 68.035156 30.363281 C 68.035156 28.835938 67.773438 27.746094 67.242188 27.09375 C 66.714844 26.425781 65.886719 26.09375 64.757812 26.09375 Z M 64.757812 26.09375 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 77.703125 24.550781 C 78.660156 24.550781 79.484375 24.761719 80.164062 25.175781 C 80.859375 25.59375 81.390625 26.183594 81.75 26.945312 C 82.128906 27.695312 82.316406 28.578125 82.316406 29.59375 L 82.316406 30.695312 L 74.652344 30.695312 C 74.683594 31.960938 75.003906 32.925781 75.613281 33.589844 C 76.242188 34.242188 77.109375 34.570312 78.222656 34.570312 C 78.933594 34.570312 79.558594 34.507812 80.101562 34.382812 C 80.660156 34.242188 81.230469 34.046875 81.8125 33.796875 L 81.8125 35.402344 C 81.242188 35.652344 80.679688 35.832031 80.125 35.945312 C 79.566406 36.070312 78.90625 36.132812 78.140625 36.132812 C 77.082031 36.132812 76.144531 35.917969 75.320312 35.484375 C 74.515625 35.054688 73.882812 34.417969 73.421875 33.570312 C 72.976562 32.707031 72.753906 31.660156 72.753906 30.425781 C 72.753906 29.203125 72.957031 28.15625 73.359375 27.28125 C 73.777344 26.40625 74.355469 25.730469 75.09375 25.261719 C 75.84375 24.789062 76.714844 24.550781 77.703125 24.550781 Z M 77.679688 26.050781 C 76.804688 26.050781 76.109375 26.335938 75.59375 26.90625 C 75.09375 27.460938 74.792969 28.238281 74.695312 29.238281 L 80.394531 29.238281 C 80.378906 28.292969 80.15625 27.53125 79.726562 26.945312 C 79.296875 26.351562 78.613281 26.050781 77.679688 26.050781 Z M 77.679688 26.050781 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 95.964844 24.550781 C 97.300781 24.550781 98.3125 24.878906 98.992188 25.53125 C 99.675781 26.167969 100.015625 27.210938 100.015625 28.65625 L 100.015625 35.921875 L 98.199219 35.921875 L 98.199219 28.78125 C 98.199219 26.988281 97.363281 26.09375 95.695312 26.09375 C 94.457031 26.09375 93.601562 26.441406 93.128906 27.132812 C 92.65625 27.828125 92.417969 28.828125 92.417969 30.132812 L 92.417969 35.921875 L 90.582031 35.921875 L 90.582031 24.761719 L 92.0625 24.761719 L 92.335938 26.28125 L 92.4375 26.28125 C 92.800781 25.695312 93.300781 25.265625 93.941406 24.988281 C 94.582031 24.699219 95.257812 24.550781 95.964844 24.550781 Z M 95.964844 24.550781 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 113.207031 30.320312 C 113.207031 32.167969 112.734375 33.597656 111.789062 34.609375 C 110.855469 35.625 109.589844 36.132812 107.988281 36.132812 C 107 36.132812 106.117188 35.910156 105.339844 35.464844 C 104.574219 35.007812 103.96875 34.347656 103.523438 33.488281 C 103.078125 32.613281 102.855469 31.554688 102.855469 30.320312 C 102.855469 28.472656 103.320312 27.050781 104.253906 26.050781 C 105.1875 25.050781 106.453125 24.550781 108.050781 24.550781 C 109.066406 24.550781 109.957031 24.78125 110.722656 25.238281 C 111.503906 25.683594 112.109375 26.335938 112.539062 27.195312 C 112.984375 28.042969 113.207031 29.085938 113.207031 30.320312 Z M 104.753906 30.320312 C 104.753906 31.640625 105.011719 32.6875 105.527344 33.464844 C 106.054688 34.230469 106.890625 34.609375 108.03125 34.609375 C 109.160156 34.609375 109.988281 34.230469 110.515625 33.464844 C 111.042969 32.6875 111.308594 31.640625 111.308594 30.320312 C 111.308594 29 111.042969 27.96875 110.515625 27.21875 C 109.988281 26.46875 109.152344 26.09375 108.011719 26.09375 C 106.871094 26.09375 106.042969 26.46875 105.527344 27.21875 C 105.011719 27.96875 104.753906 29 104.753906 30.320312 Z M 104.753906 30.320312 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 119.847656 34.632812 C 120.125 34.632812 120.410156 34.609375 120.703125 34.570312 C 120.996094 34.515625 121.230469 34.457031 121.410156 34.402344 L 121.410156 35.796875 C 121.21875 35.894531 120.9375 35.972656 120.578125 36.027344 C 120.214844 36.097656 119.867188 36.132812 119.53125 36.132812 C 118.949219 36.132812 118.40625 36.035156 117.90625 35.839844 C 117.417969 35.632812 117.019531 35.277344 116.714844 34.777344 C 116.410156 34.277344 116.257812 33.578125 116.257812 32.675781 L 116.257812 26.175781 L 114.667969 26.175781 L 114.667969 25.300781 L 116.277344 24.574219 L 117.007812 22.199219 L 118.09375 22.199219 L 118.09375 24.761719 L 121.328125 24.761719 L 121.328125 26.175781 L 118.09375 26.175781 L 118.09375 32.632812 C 118.09375 33.3125 118.253906 33.820312 118.574219 34.152344 C 118.90625 34.472656 119.332031 34.632812 119.847656 34.632812 Z M 119.847656 34.632812 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 133.308594 24.574219 C 134.671875 24.574219 135.683594 24.871094 136.335938 25.46875 C 136.992188 26.066406 137.316406 27.015625 137.316406 28.320312 L 137.316406 35.921875 L 135.980469 35.921875 L 135.628906 34.339844 L 135.542969 34.339844 C 135.054688 34.953125 134.542969 35.402344 134 35.695312 C 133.46875 35.984375 132.734375 36.132812 131.785156 36.132812 C 130.769531 36.132812 129.929688 35.867188 129.261719 35.339844 C 128.59375 34.796875 128.257812 33.957031 128.257812 32.820312 C 128.257812 31.710938 128.695312 30.855469 129.574219 30.257812 C 130.449219 29.648438 131.800781 29.3125 133.625 29.257812 L 135.523438 29.195312 L 135.523438 28.53125 C 135.523438 27.597656 135.320312 26.953125 134.917969 26.59375 C 134.515625 26.230469 133.941406 26.050781 133.207031 26.050781 C 132.621094 26.050781 132.066406 26.140625 131.535156 26.320312 C 131.007812 26.488281 130.511719 26.683594 130.054688 26.90625 L 129.488281 25.53125 C 129.976562 25.265625 130.554688 25.042969 131.222656 24.863281 C 131.890625 24.667969 132.585938 24.574219 133.308594 24.574219 Z M 135.5 30.464844 L 133.851562 30.527344 C 132.460938 30.585938 131.492188 30.808594 130.953125 31.195312 C 130.421875 31.585938 130.15625 32.132812 130.15625 32.839844 C 130.15625 33.464844 130.347656 33.921875 130.722656 34.214844 C 131.109375 34.507812 131.605469 34.652344 132.203125 34.652344 C 133.148438 34.652344 133.9375 34.394531 134.5625 33.882812 C 135.1875 33.355469 135.5 32.550781 135.5 31.464844 Z M 135.5 30.464844 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 143.246094 35.921875 L 139.007812 24.761719 L 140.972656 24.761719 L 143.351562 31.339844 C 143.460938 31.648438 143.578125 31.988281 143.707031 32.363281 C 143.832031 32.738281 143.941406 33.097656 144.039062 33.445312 C 144.136719 33.777344 144.207031 34.0625 144.246094 34.296875 L 144.332031 34.296875 C 144.386719 34.0625 144.464844 33.769531 144.5625 33.425781 C 144.671875 33.078125 144.789062 32.714844 144.914062 32.339844 C 145.054688 31.964844 145.171875 31.632812 145.269531 31.339844 L 147.652344 24.761719 L 149.613281 24.761719 L 145.355469 35.921875 Z M 143.246094 35.921875 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 155.625 24.574219 C 156.988281 24.574219 157.996094 24.871094 158.652344 25.46875 C 159.304688 26.066406 159.632812 27.015625 159.632812 28.320312 L 159.632812 35.921875 L 158.296875 35.921875 L 157.941406 34.339844 L 157.859375 34.339844 C 157.371094 34.953125 156.855469 35.402344 156.3125 35.695312 C 155.785156 35.984375 155.046875 36.132812 154.101562 36.132812 C 153.085938 36.132812 152.242188 35.867188 151.574219 35.339844 C 150.90625 34.796875 150.574219 33.957031 150.574219 32.820312 C 150.574219 31.710938 151.011719 30.855469 151.886719 30.257812 C 152.765625 29.648438 154.113281 29.3125 155.9375 29.257812 L 157.835938 29.195312 L 157.835938 28.53125 C 157.835938 27.597656 157.636719 26.953125 157.230469 26.59375 C 156.828125 26.230469 156.257812 26.050781 155.519531 26.050781 C 154.933594 26.050781 154.378906 26.140625 153.851562 26.320312 C 153.320312 26.488281 152.828125 26.683594 152.367188 26.90625 L 151.804688 25.53125 C 152.292969 25.265625 152.867188 25.042969 153.535156 24.863281 C 154.203125 24.667969 154.902344 24.574219 155.625 24.574219 Z M 157.816406 30.464844 L 156.167969 30.527344 C 154.777344 30.585938 153.808594 30.808594 153.265625 31.195312 C 152.738281 31.585938 152.472656 32.132812 152.472656 32.839844 C 152.472656 33.464844 152.660156 33.921875 153.035156 34.214844 C 153.425781 34.507812 153.917969 34.652344 154.519531 34.652344 C 155.464844 34.652344 156.25 34.394531 156.875 33.882812 C 157.503906 33.355469 157.816406 32.550781 157.816406 31.464844 Z M 157.816406 30.464844 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 164.035156 20.574219 C 164.316406 20.574219 164.558594 20.671875 164.765625 20.867188 C 164.988281 21.046875 165.101562 21.335938 165.101562 21.738281 C 165.101562 22.128906 164.988281 22.421875 164.765625 22.613281 C 164.558594 22.808594 164.316406 22.90625 164.035156 22.90625 C 163.730469 22.90625 163.472656 22.808594 163.265625 22.613281 C 163.054688 22.421875 162.949219 22.128906 162.949219 21.738281 C 162.949219 21.335938 163.054688 21.046875 163.265625 20.867188 C 163.472656 20.671875 163.730469 20.574219 164.035156 20.574219 Z M 164.933594 24.761719 L 164.933594 35.921875 L 163.097656 35.921875 L 163.097656 24.761719 Z M 164.933594 24.761719 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 170.320312 35.921875 L 168.484375 35.921875 L 168.484375 20.09375 L 170.320312 20.09375 Z M 170.320312 35.921875 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 178.105469 24.574219 C 179.46875 24.574219 180.476562 24.871094 181.132812 25.46875 C 181.785156 26.066406 182.113281 27.015625 182.113281 28.320312 L 182.113281 35.921875 L 180.777344 35.921875 L 180.421875 34.339844 L 180.339844 34.339844 C 179.851562 34.953125 179.335938 35.402344 178.792969 35.695312 C 178.265625 35.984375 177.527344 36.132812 176.582031 36.132812 C 175.566406 36.132812 174.722656 35.867188 174.054688 35.339844 C 173.386719 34.796875 173.054688 33.957031 173.054688 32.820312 C 173.054688 31.710938 173.492188 30.855469 174.371094 30.257812 C 175.246094 29.648438 176.597656 29.3125 178.417969 29.257812 L 180.316406 29.195312 L 180.316406 28.53125 C 180.316406 27.597656 180.117188 26.953125 179.714844 26.59375 C 179.308594 26.230469 178.738281 26.050781 178 26.050781 C 177.417969 26.050781 176.859375 26.140625 176.332031 26.320312 C 175.800781 26.488281 175.308594 26.683594 174.847656 26.90625 L 174.285156 25.53125 C 174.773438 25.265625 175.351562 25.042969 176.019531 24.863281 C 176.6875 24.667969 177.382812 24.574219 178.105469 24.574219 Z M 180.296875 30.464844 L 178.648438 30.527344 C 177.257812 30.585938 176.289062 30.808594 175.746094 31.195312 C 175.21875 31.585938 174.953125 32.132812 174.953125 32.839844 C 174.953125 33.464844 175.140625 33.921875 175.515625 34.214844 C 175.90625 34.507812 176.402344 34.652344 177 34.652344 C 177.945312 34.652344 178.730469 34.394531 179.359375 33.882812 C 179.984375 33.355469 180.296875 32.550781 180.296875 31.464844 Z M 180.296875 30.464844 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 187.414062 20.09375 L 187.414062 23.949219 C 187.414062 24.417969 187.402344 24.863281 187.375 25.28125 C 187.359375 25.683594 187.339844 26.003906 187.3125 26.238281 L 187.414062 26.238281 C 187.734375 25.765625 188.175781 25.371094 188.730469 25.050781 C 189.289062 24.730469 190.003906 24.574219 190.878906 24.574219 C 192.273438 24.574219 193.386719 25.058594 194.21875 26.03125 C 195.070312 26.988281 195.492188 28.425781 195.492188 30.339844 C 195.492188 32.257812 195.070312 33.703125 194.21875 34.671875 C 193.371094 35.644531 192.257812 36.132812 190.878906 36.132812 C 190.003906 36.132812 189.289062 35.972656 188.730469 35.652344 C 188.175781 35.332031 187.734375 34.953125 187.414062 34.507812 L 187.269531 34.507812 L 186.894531 35.921875 L 185.578125 35.921875 L 185.578125 20.09375 Z M 190.566406 26.09375 C 189.382812 26.09375 188.5625 26.433594 188.105469 27.113281 C 187.644531 27.792969 187.414062 28.847656 187.414062 30.277344 L 187.414062 30.363281 C 187.414062 31.738281 187.636719 32.792969 188.082031 33.527344 C 188.542969 34.25 189.382812 34.609375 190.609375 34.609375 C 191.609375 34.609375 192.355469 34.242188 192.84375 33.507812 C 193.34375 32.769531 193.59375 31.710938 193.59375 30.320312 C 193.59375 27.503906 192.585938 26.09375 190.566406 26.09375 Z M 190.566406 26.09375 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 200.253906 35.921875 L 198.417969 35.921875 L 198.417969 20.09375 L 200.253906 20.09375 Z M 200.253906 35.921875 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 208.121094 24.550781 C 209.082031 24.550781 209.902344 24.761719 210.585938 25.175781 C 211.28125 25.59375 211.808594 26.183594 212.171875 26.945312 C 212.546875 27.695312 212.734375 28.578125 212.734375 29.59375 L 212.734375 30.695312 L 205.074219 30.695312 C 205.101562 31.960938 205.421875 32.925781 206.035156 33.589844 C 206.660156 34.242188 207.53125 34.570312 208.644531 34.570312 C 209.355469 34.570312 209.980469 34.507812 210.523438 34.382812 C 211.078125 34.242188 211.648438 34.046875 212.234375 33.796875 L 212.234375 35.402344 C 211.664062 35.652344 211.101562 35.832031 210.542969 35.945312 C 209.988281 36.070312 209.328125 36.132812 208.5625 36.132812 C 207.503906 36.132812 206.5625 35.917969 205.742188 35.484375 C 204.9375 35.054688 204.300781 34.417969 203.84375 33.570312 C 203.398438 32.707031 203.175781 31.660156 203.175781 30.425781 C 203.175781 29.203125 203.378906 28.15625 203.78125 27.28125 C 204.199219 26.40625 204.777344 25.730469 205.511719 25.261719 C 206.265625 24.789062 207.132812 24.550781 208.121094 24.550781 Z M 208.101562 26.050781 C 207.226562 26.050781 206.527344 26.335938 206.015625 26.90625 C 205.511719 27.460938 205.214844 28.238281 205.117188 29.238281 L 210.816406 29.238281 C 210.800781 28.292969 210.578125 27.53125 210.148438 26.945312 C 209.714844 26.351562 209.035156 26.050781 208.101562 26.050781 Z M 208.101562 26.050781 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 29.066406 87.988281 L 24.160156 74.953125 L 24.078125 74.953125 C 24.117188 75.382812 24.152344 75.964844 24.179688 76.703125 C 24.207031 77.425781 24.222656 78.179688 24.222656 78.972656 L 24.222656 87.988281 L 22.488281 87.988281 L 22.488281 73.121094 L 25.265625 73.121094 L 29.859375 85.304688 L 29.941406 85.304688 L 34.617188 73.121094 L 37.375 73.121094 L 37.375 87.988281 L 35.515625 87.988281 L 35.515625 78.847656 C 35.515625 78.125 35.527344 77.410156 35.558594 76.703125 C 35.597656 75.992188 35.632812 75.417969 35.660156 74.972656 L 35.578125 74.972656 L 30.609375 87.988281 Z M 29.066406 87.988281 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 45.410156 76.640625 C 46.773438 76.640625 47.78125 76.9375 48.4375 77.535156 C 49.089844 78.132812 49.417969 79.082031 49.417969 80.386719 L 49.417969 87.988281 L 48.082031 87.988281 L 47.726562 86.40625 L 47.644531 86.40625 C 47.15625 87.019531 46.640625 87.46875 46.097656 87.761719 C 45.570312 88.050781 44.832031 88.199219 43.886719 88.199219 C 42.871094 88.199219 42.027344 87.933594 41.359375 87.40625 C 40.691406 86.867188 40.359375 86.023438 40.359375 84.886719 C 40.359375 83.777344 40.796875 82.921875 41.671875 82.324219 C 42.550781 81.714844 43.898438 81.382812 45.722656 81.324219 L 47.621094 81.261719 L 47.621094 80.597656 C 47.621094 79.667969 47.421875 79.019531 47.015625 78.660156 C 46.613281 78.296875 46.042969 78.117188 45.304688 78.117188 C 44.722656 78.117188 44.164062 78.207031 43.636719 78.390625 C 43.105469 78.554688 42.613281 78.75 42.152344 78.972656 L 41.589844 77.597656 C 42.078125 77.332031 42.652344 77.113281 43.320312 76.929688 C 43.988281 76.738281 44.6875 76.640625 45.410156 76.640625 Z M 47.601562 82.535156 L 45.953125 82.597656 C 44.5625 82.652344 43.59375 82.875 43.050781 83.261719 C 42.523438 83.652344 42.257812 84.199219 42.257812 84.90625 C 42.257812 85.53125 42.445312 85.992188 42.820312 86.28125 C 43.210938 86.574219 43.703125 86.71875 44.304688 86.71875 C 45.25 86.71875 46.035156 86.460938 46.660156 85.949219 C 47.289062 85.421875 47.601562 84.617188 47.601562 83.53125 Z M 47.601562 82.535156 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 58.207031 76.617188 C 59.582031 76.617188 60.6875 77.097656 61.523438 78.054688 C 62.375 79.011719 62.796875 80.457031 62.796875 82.386719 C 62.796875 84.289062 62.375 85.734375 61.523438 86.71875 C 60.6875 87.707031 59.574219 88.199219 58.183594 88.199219 C 57.320312 88.199219 56.605469 88.039062 56.035156 87.71875 C 55.476562 87.386719 55.039062 87.003906 54.71875 86.574219 L 54.59375 86.574219 C 54.621094 86.808594 54.648438 87.109375 54.675781 87.46875 C 54.707031 87.832031 54.71875 88.144531 54.71875 88.40625 L 54.71875 92.988281 L 52.882812 92.988281 L 52.882812 76.828125 L 54.386719 76.828125 L 54.636719 78.347656 L 54.71875 78.347656 C 55.054688 77.859375 55.492188 77.453125 56.035156 77.117188 C 56.578125 76.785156 57.300781 76.617188 58.207031 76.617188 Z M 57.871094 78.160156 C 56.730469 78.160156 55.921875 78.480469 55.449219 79.117188 C 54.992188 79.757812 54.746094 80.726562 54.71875 82.035156 L 54.71875 82.386719 C 54.71875 83.761719 54.941406 84.824219 55.386719 85.574219 C 55.847656 86.308594 56.6875 86.679688 57.914062 86.679688 C 58.59375 86.679688 59.152344 86.492188 59.582031 86.117188 C 60.027344 85.742188 60.355469 85.234375 60.5625 84.59375 C 60.785156 83.941406 60.898438 83.199219 60.898438 82.367188 C 60.898438 81.089844 60.648438 80.070312 60.148438 79.304688 C 59.660156 78.542969 58.902344 78.160156 57.871094 78.160156 Z M 57.871094 78.160156 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 66.660156 72.640625 C 66.9375 72.640625 67.179688 72.738281 67.390625 72.933594 C 67.613281 73.113281 67.722656 73.40625 67.722656 73.808594 C 67.722656 74.195312 67.613281 74.488281 67.390625 74.683594 C 67.179688 74.875 66.9375 74.972656 66.660156 74.972656 C 66.351562 74.972656 66.097656 74.875 65.886719 74.683594 C 65.679688 74.488281 65.574219 74.195312 65.574219 73.808594 C 65.574219 73.40625 65.679688 73.113281 65.886719 72.933594 C 66.097656 72.738281 66.351562 72.640625 66.660156 72.640625 Z M 67.558594 76.828125 L 67.558594 87.988281 L 65.71875 87.988281 L 65.71875 76.828125 Z M 67.558594 76.828125 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 72.941406 87.988281 L 71.105469 87.988281 L 71.105469 72.160156 L 72.941406 72.160156 Z M 72.941406 87.988281 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 78.328125 87.988281 L 76.492188 87.988281 L 76.492188 72.160156 L 78.328125 72.160156 Z M 78.328125 87.988281 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 86.113281 76.640625 C 87.476562 76.640625 88.488281 76.9375 89.140625 77.535156 C 89.792969 78.132812 90.121094 79.082031 90.121094 80.386719 L 90.121094 87.988281 L 88.785156 87.988281 L 88.429688 86.40625 L 88.347656 86.40625 C 87.859375 87.019531 87.34375 87.46875 86.804688 87.761719 C 86.273438 88.050781 85.535156 88.199219 84.589844 88.199219 C 83.574219 88.199219 82.730469 87.933594 82.0625 87.40625 C 81.394531 86.867188 81.0625 86.023438 81.0625 84.886719 C 81.0625 83.777344 81.5 82.921875 82.378906 82.324219 C 83.253906 81.714844 84.605469 81.382812 86.425781 81.324219 L 88.328125 81.261719 L 88.328125 80.597656 C 88.328125 79.667969 88.125 79.019531 87.722656 78.660156 C 87.316406 78.296875 86.746094 78.117188 86.007812 78.117188 C 85.425781 78.117188 84.867188 78.207031 84.339844 78.390625 C 83.8125 78.554688 83.316406 78.75 82.859375 78.972656 L 82.292969 77.597656 C 82.78125 77.332031 83.359375 77.113281 84.027344 76.929688 C 84.695312 76.738281 85.390625 76.640625 86.113281 76.640625 Z M 88.304688 82.535156 L 86.65625 82.597656 C 85.265625 82.652344 84.296875 82.875 83.753906 83.261719 C 83.226562 83.652344 82.960938 84.199219 82.960938 84.90625 C 82.960938 85.53125 83.148438 85.992188 83.527344 86.28125 C 83.914062 86.574219 84.410156 86.71875 85.007812 86.71875 C 85.953125 86.71875 86.738281 86.460938 87.367188 85.949219 C 87.992188 85.421875 88.304688 84.617188 88.304688 83.53125 Z M 88.304688 82.535156 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 98.804688 76.617188 C 99.015625 76.617188 99.238281 76.632812 99.472656 76.660156 C 99.722656 76.675781 99.941406 76.703125 100.121094 76.742188 L 99.890625 78.429688 C 99.710938 78.390625 99.507812 78.355469 99.285156 78.328125 C 99.078125 78.296875 98.875 78.285156 98.679688 78.285156 C 98.109375 78.285156 97.574219 78.445312 97.074219 78.765625 C 96.570312 79.070312 96.167969 79.507812 95.863281 80.074219 C 95.570312 80.632812 95.421875 81.285156 95.421875 82.035156 L 95.421875 87.988281 L 93.585938 87.988281 L 93.585938 76.828125 L 95.089844 76.828125 L 95.296875 78.867188 L 95.382812 78.867188 C 95.742188 78.257812 96.210938 77.730469 96.78125 77.285156 C 97.351562 76.839844 98.027344 76.617188 98.804688 76.617188 Z M 98.804688 76.617188 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 100.453125 76.828125 L 102.417969 76.828125 L 104.839844 83.179688 C 105.046875 83.734375 105.234375 84.269531 105.402344 84.78125 C 105.570312 85.28125 105.695312 85.761719 105.777344 86.21875 L 105.859375 86.21875 C 105.945312 85.871094 106.078125 85.421875 106.257812 84.867188 C 106.4375 84.296875 106.625 83.726562 106.820312 83.15625 L 109.097656 76.828125 L 111.078125 76.828125 L 106.257812 89.53125 C 105.867188 90.585938 105.359375 91.425781 104.734375 92.050781 C 104.121094 92.675781 103.273438 92.988281 102.1875 92.988281 C 101.851562 92.988281 101.5625 92.96875 101.308594 92.925781 C 101.058594 92.898438 100.84375 92.863281 100.664062 92.820312 L 100.664062 91.363281 C 100.816406 91.390625 100.996094 91.417969 101.207031 91.445312 C 101.429688 91.476562 101.65625 91.488281 101.894531 91.488281 C 102.535156 91.488281 103.050781 91.308594 103.4375 90.949219 C 103.84375 90.585938 104.15625 90.105469 104.378906 89.511719 L 104.964844 88.03125 Z M 100.453125 76.828125 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 125.566406 84.90625 C 125.566406 85.992188 125.164062 86.808594 124.355469 87.363281 C 123.546875 87.921875 122.460938 88.199219 121.097656 88.199219 C 120.320312 88.199219 119.644531 88.136719 119.074219 88.011719 C 118.515625 87.886719 118.023438 87.710938 117.59375 87.488281 L 117.59375 85.824219 C 118.039062 86.046875 118.574219 86.253906 119.199219 86.449219 C 119.839844 86.628906 120.488281 86.71875 121.140625 86.71875 C 122.074219 86.71875 122.746094 86.574219 123.164062 86.28125 C 123.582031 85.976562 123.792969 85.574219 123.792969 85.074219 C 123.792969 84.796875 123.714844 84.546875 123.5625 84.324219 C 123.410156 84.101562 123.128906 83.878906 122.726562 83.65625 C 122.335938 83.4375 121.773438 83.1875 121.035156 82.910156 C 120.3125 82.628906 119.691406 82.351562 119.179688 82.074219 C 118.664062 81.796875 118.265625 81.464844 117.988281 81.074219 C 117.710938 80.6875 117.570312 80.1875 117.570312 79.574219 C 117.570312 78.632812 117.953125 77.902344 118.71875 77.390625 C 119.5 76.875 120.515625 76.617188 121.765625 76.617188 C 122.449219 76.617188 123.082031 76.6875 123.667969 76.828125 C 124.265625 76.953125 124.820312 77.132812 125.335938 77.367188 L 124.710938 78.828125 C 124.238281 78.632812 123.742188 78.464844 123.226562 78.328125 C 122.714844 78.1875 122.183594 78.117188 121.640625 78.117188 C 120.890625 78.117188 120.3125 78.242188 119.910156 78.492188 C 119.519531 78.730469 119.324219 79.054688 119.324219 79.472656 C 119.324219 79.777344 119.414062 80.042969 119.597656 80.261719 C 119.777344 80.472656 120.074219 80.679688 120.492188 80.886719 C 120.925781 81.082031 121.496094 81.320312 122.203125 81.597656 C 122.914062 81.859375 123.519531 82.128906 124.019531 82.410156 C 124.523438 82.6875 124.90625 83.027344 125.167969 83.429688 C 125.433594 83.816406 125.566406 84.3125 125.566406 84.90625 Z M 125.566406 84.90625 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 132.601562 76.617188 C 133.558594 76.617188 134.382812 76.828125 135.0625 77.242188 C 135.757812 77.660156 136.289062 78.25 136.648438 79.011719 C 137.027344 79.761719 137.214844 80.644531 137.214844 81.660156 L 137.214844 82.761719 L 129.550781 82.761719 C 129.582031 84.027344 129.902344 84.992188 130.511719 85.65625 C 131.140625 86.308594 132.007812 86.636719 133.121094 86.636719 C 133.832031 86.636719 134.457031 86.574219 135 86.449219 C 135.558594 86.308594 136.128906 86.117188 136.710938 85.867188 L 136.710938 87.46875 C 136.140625 87.71875 135.578125 87.898438 135.023438 88.011719 C 134.464844 88.136719 133.804688 88.199219 133.039062 88.199219 C 131.980469 88.199219 131.042969 87.984375 130.21875 87.550781 C 129.414062 87.121094 128.78125 86.484375 128.320312 85.636719 C 127.875 84.777344 127.652344 83.726562 127.652344 82.492188 C 127.652344 81.269531 127.855469 80.222656 128.257812 79.347656 C 128.675781 78.472656 129.253906 77.796875 129.992188 77.328125 C 130.742188 76.855469 131.613281 76.617188 132.601562 76.617188 Z M 132.578125 78.117188 C 131.703125 78.117188 131.007812 78.402344 130.492188 78.972656 C 129.992188 79.527344 129.691406 80.304688 129.59375 81.304688 L 135.292969 81.304688 C 135.277344 80.359375 135.054688 79.597656 134.625 79.011719 C 134.195312 78.417969 133.511719 78.117188 132.578125 78.117188 Z M 132.578125 78.117188 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 145.269531 76.617188 C 145.480469 76.617188 145.703125 76.632812 145.9375 76.660156 C 146.1875 76.675781 146.40625 76.703125 146.585938 76.742188 L 146.355469 78.429688 C 146.175781 78.390625 145.972656 78.355469 145.75 78.328125 C 145.542969 78.296875 145.339844 78.285156 145.144531 78.285156 C 144.574219 78.285156 144.039062 78.445312 143.539062 78.765625 C 143.039062 79.070312 142.632812 79.507812 142.328125 80.074219 C 142.035156 80.632812 141.890625 81.285156 141.890625 82.035156 L 141.890625 87.988281 L 140.050781 87.988281 L 140.050781 76.828125 L 141.554688 76.828125 L 141.765625 78.867188 L 141.847656 78.867188 C 142.210938 78.257812 142.675781 77.730469 143.246094 77.285156 C 143.816406 76.839844 144.492188 76.617188 145.269531 76.617188 Z M 145.269531 76.617188 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 151.136719 87.988281 L 146.898438 76.828125 L 148.859375 76.828125 L 151.242188 83.40625 C 151.351562 83.714844 151.46875 84.054688 151.59375 84.429688 C 151.722656 84.804688 151.832031 85.164062 151.929688 85.511719 C 152.027344 85.84375 152.097656 86.128906 152.136719 86.367188 L 152.222656 86.367188 C 152.277344 86.128906 152.355469 85.835938 152.453125 85.492188 C 152.5625 85.144531 152.679688 84.78125 152.804688 84.40625 C 152.945312 84.03125 153.0625 83.699219 153.160156 83.40625 L 155.539062 76.828125 L 157.503906 76.828125 L 153.246094 87.988281 Z M 151.136719 87.988281 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 163.597656 76.617188 C 164.558594 76.617188 165.378906 76.828125 166.0625 77.242188 C 166.757812 77.660156 167.285156 78.25 167.648438 79.011719 C 168.023438 79.761719 168.210938 80.644531 168.210938 81.660156 L 168.210938 82.761719 L 160.550781 82.761719 C 160.578125 84.027344 160.898438 84.992188 161.511719 85.65625 C 162.136719 86.308594 163.007812 86.636719 164.121094 86.636719 C 164.828125 86.636719 165.457031 86.574219 166 86.449219 C 166.554688 86.308594 167.125 86.117188 167.710938 85.867188 L 167.710938 87.46875 C 167.140625 87.71875 166.578125 87.898438 166.019531 88.011719 C 165.464844 88.136719 164.800781 88.199219 164.035156 88.199219 C 162.980469 88.199219 162.039062 87.984375 161.21875 87.550781 C 160.410156 87.121094 159.777344 86.484375 159.320312 85.636719 C 158.875 84.777344 158.652344 83.726562 158.652344 82.492188 C 158.652344 81.269531 158.851562 80.222656 159.257812 79.347656 C 159.675781 78.472656 160.25 77.796875 160.988281 77.328125 C 161.742188 76.855469 162.609375 76.617188 163.597656 76.617188 Z M 163.578125 78.117188 C 162.699219 78.117188 162.003906 78.402344 161.488281 78.972656 C 160.988281 79.527344 160.691406 80.304688 160.59375 81.304688 L 166.289062 81.304688 C 166.277344 80.359375 166.054688 79.597656 165.621094 79.011719 C 165.191406 78.417969 164.507812 78.117188 163.578125 78.117188 Z M 163.578125 78.117188 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 178.335938 84.90625 C 178.335938 85.992188 177.933594 86.808594 177.125 87.363281 C 176.316406 87.921875 175.230469 88.199219 173.867188 88.199219 C 173.089844 88.199219 172.414062 88.136719 171.84375 88.011719 C 171.285156 87.886719 170.792969 87.710938 170.363281 87.488281 L 170.363281 85.824219 C 170.808594 86.046875 171.34375 86.253906 171.96875 86.449219 C 172.609375 86.628906 173.257812 86.71875 173.910156 86.71875 C 174.84375 86.71875 175.515625 86.574219 175.933594 86.28125 C 176.351562 85.976562 176.5625 85.574219 176.5625 85.074219 C 176.5625 84.796875 176.484375 84.546875 176.332031 84.324219 C 176.179688 84.101562 175.898438 83.878906 175.496094 83.65625 C 175.105469 83.4375 174.542969 83.1875 173.804688 82.910156 C 173.082031 82.628906 172.460938 82.351562 171.949219 82.074219 C 171.433594 81.796875 171.035156 81.464844 170.757812 81.074219 C 170.480469 80.6875 170.339844 80.1875 170.339844 79.574219 C 170.339844 78.632812 170.722656 77.902344 171.488281 77.390625 C 172.269531 76.875 173.285156 76.617188 174.535156 76.617188 C 175.21875 76.617188 175.851562 76.6875 176.4375 76.828125 C 177.035156 76.953125 177.589844 77.132812 178.105469 77.367188 L 177.480469 78.828125 C 177.007812 78.632812 176.511719 78.464844 175.996094 78.328125 C 175.484375 78.1875 174.953125 78.117188 174.410156 78.117188 C 173.660156 78.117188 173.082031 78.242188 172.679688 78.492188 C 172.289062 78.730469 172.09375 79.054688 172.09375 79.472656 C 172.09375 79.777344 172.183594 80.042969 172.367188 80.261719 C 172.546875 80.472656 172.84375 80.679688 173.261719 80.886719 C 173.695312 81.082031 174.265625 81.320312 174.972656 81.597656 C 175.683594 81.859375 176.289062 82.128906 176.789062 82.410156 C 177.292969 82.6875 177.675781 83.027344 177.9375 83.429688 C 178.203125 83.816406 178.335938 84.3125 178.335938 84.90625 Z M 178.335938 84.90625 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 190.210938 86.699219 C 190.492188 86.699219 190.777344 86.679688 191.070312 86.636719 C 191.359375 86.582031 191.597656 86.523438 191.777344 86.46875 L 191.777344 87.863281 C 191.582031 87.960938 191.304688 88.039062 190.941406 88.09375 C 190.582031 88.164062 190.234375 88.199219 189.898438 88.199219 C 189.316406 88.199219 188.773438 88.101562 188.269531 87.90625 C 187.785156 87.699219 187.386719 87.34375 187.082031 86.84375 C 186.773438 86.34375 186.621094 85.644531 186.621094 84.742188 L 186.621094 78.242188 L 185.035156 78.242188 L 185.035156 77.367188 L 186.644531 76.640625 L 187.375 74.265625 L 188.460938 74.265625 L 188.460938 76.828125 L 191.695312 76.828125 L 191.695312 78.242188 L 188.460938 78.242188 L 188.460938 84.699219 C 188.460938 85.378906 188.621094 85.886719 188.9375 86.21875 C 189.273438 86.539062 189.699219 86.699219 190.210938 86.699219 Z M 190.210938 86.699219 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 195.847656 72.160156 L 195.847656 76.804688 C 195.847656 77.363281 195.8125 77.882812 195.742188 78.367188 L 195.871094 78.367188 C 196.230469 77.796875 196.71875 77.367188 197.332031 77.078125 C 197.957031 76.785156 198.632812 76.640625 199.355469 76.640625 C 200.71875 76.640625 201.742188 76.964844 202.425781 77.617188 C 203.105469 78.257812 203.445312 79.292969 203.445312 80.722656 L 203.445312 87.988281 L 201.628906 87.988281 L 201.628906 80.847656 C 201.628906 79.054688 200.796875 78.160156 199.125 78.160156 C 197.875 78.160156 197.011719 78.515625 196.539062 79.222656 C 196.078125 79.917969 195.847656 80.914062 195.847656 82.222656 L 195.847656 87.988281 L 194.011719 87.988281 L 194.011719 72.160156 Z M 195.847656 72.160156 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 211.234375 76.617188 C 212.191406 76.617188 213.015625 76.828125 213.695312 77.242188 C 214.390625 77.660156 214.921875 78.25 215.28125 79.011719 C 215.65625 79.761719 215.847656 80.644531 215.847656 81.660156 L 215.847656 82.761719 L 208.183594 82.761719 C 208.210938 84.027344 208.53125 84.992188 209.144531 85.65625 C 209.769531 86.308594 210.640625 86.636719 211.753906 86.636719 C 212.464844 86.636719 213.089844 86.574219 213.632812 86.449219 C 214.191406 86.308594 214.761719 86.117188 215.34375 85.867188 L 215.34375 87.46875 C 214.773438 87.71875 214.210938 87.898438 213.652344 88.011719 C 213.097656 88.136719 212.4375 88.199219 211.671875 88.199219 C 210.613281 88.199219 209.675781 87.984375 208.851562 87.550781 C 208.046875 87.121094 207.414062 86.484375 206.953125 85.636719 C 206.507812 84.777344 206.285156 83.726562 206.285156 82.492188 C 206.285156 81.269531 206.488281 80.222656 206.890625 79.347656 C 207.308594 78.472656 207.886719 77.796875 208.625 77.328125 C 209.375 76.855469 210.246094 76.617188 211.234375 76.617188 Z M 211.210938 78.117188 C 210.335938 78.117188 209.640625 78.402344 209.125 78.972656 C 208.625 79.527344 208.324219 80.304688 208.226562 81.304688 L 213.925781 81.304688 C 213.910156 80.359375 213.6875 79.597656 213.257812 79.011719 C 212.824219 78.417969 212.144531 78.117188 211.210938 78.117188 Z M 211.210938 78.117188 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 219.625 72.640625 C 219.902344 72.640625 220.144531 72.738281 220.355469 72.933594 C 220.578125 73.113281 220.6875 73.40625 220.6875 73.808594 C 220.6875 74.195312 220.578125 74.488281 220.355469 74.683594 C 220.144531 74.875 219.902344 74.972656 219.625 74.972656 C 219.316406 74.972656 219.058594 74.875 218.851562 74.683594 C 218.644531 74.488281 218.539062 74.195312 218.539062 73.808594 C 218.539062 73.40625 218.644531 73.113281 218.851562 72.933594 C 219.058594 72.738281 219.316406 72.640625 219.625 72.640625 Z M 220.523438 76.828125 L 220.523438 87.988281 L 218.683594 87.988281 L 218.683594 76.828125 Z M 220.523438 76.828125 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 229.289062 76.617188 C 229.496094 76.617188 229.71875 76.632812 229.957031 76.660156 C 230.207031 76.675781 230.421875 76.703125 230.605469 76.742188 L 230.375 78.429688 C 230.191406 78.390625 229.992188 78.355469 229.769531 78.328125 C 229.558594 78.296875 229.359375 78.285156 229.164062 78.285156 C 228.59375 78.285156 228.058594 78.445312 227.554688 78.765625 C 227.054688 79.070312 226.652344 79.507812 226.34375 80.074219 C 226.054688 80.632812 225.90625 81.285156 225.90625 82.035156 L 225.90625 87.988281 L 224.070312 87.988281 L 224.070312 76.828125 L 225.574219 76.828125 L 225.78125 78.867188 L 225.867188 78.867188 C 226.226562 78.257812 226.691406 77.730469 227.265625 77.285156 C 227.835938 76.839844 228.507812 76.617188 229.289062 76.617188 Z M 229.289062 76.617188 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 239.058594 72.640625 C 239.335938 72.640625 239.578125 72.738281 239.789062 72.933594 C 240.011719 73.113281 240.121094 73.40625 240.121094 73.808594 C 240.121094 74.195312 240.011719 74.488281 239.789062 74.683594 C 239.578125 74.875 239.335938 74.972656 239.058594 74.972656 C 238.75 74.972656 238.492188 74.875 238.285156 74.683594 C 238.078125 74.488281 237.972656 74.195312 237.972656 73.808594 C 237.972656 73.40625 238.078125 73.113281 238.285156 72.933594 C 238.492188 72.738281 238.75 72.640625 239.058594 72.640625 Z M 239.957031 76.828125 L 239.957031 87.988281 L 238.117188 87.988281 L 238.117188 76.828125 Z M 239.957031 76.828125 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 255.777344 76.617188 C 257.042969 76.617188 257.992188 76.945312 258.617188 77.597656 C 259.242188 78.234375 259.554688 79.277344 259.554688 80.722656 L 259.554688 87.988281 L 257.738281 87.988281 L 257.738281 80.804688 C 257.738281 79.042969 256.980469 78.160156 255.464844 78.160156 C 254.378906 78.160156 253.601562 78.472656 253.125 79.097656 C 252.667969 79.722656 252.4375 80.632812 252.4375 81.824219 L 252.4375 87.988281 L 250.621094 87.988281 L 250.621094 80.804688 C 250.621094 79.042969 249.855469 78.160156 248.324219 78.160156 C 247.199219 78.160156 246.417969 78.507812 245.988281 79.199219 C 245.554688 79.894531 245.339844 80.894531 245.339844 82.199219 L 245.339844 87.988281 L 243.503906 87.988281 L 243.503906 76.828125 L 244.984375 76.828125 L 245.257812 78.347656 L 245.363281 78.347656 C 245.710938 77.765625 246.175781 77.332031 246.761719 77.054688 C 247.359375 76.765625 247.992188 76.617188 248.660156 76.617188 C 250.414062 76.617188 251.554688 77.242188 252.082031 78.492188 L 252.1875 78.492188 C 252.5625 77.855469 253.070312 77.382812 253.710938 77.078125 C 254.367188 76.769531 255.054688 76.617188 255.777344 76.617188 Z M 255.777344 76.617188 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 267.257812 76.640625 C 268.621094 76.640625 269.632812 76.9375 270.285156 77.535156 C 270.9375 78.132812 271.265625 79.082031 271.265625 80.386719 L 271.265625 87.988281 L 269.929688 87.988281 L 269.574219 86.40625 L 269.492188 86.40625 C 269.003906 87.019531 268.488281 87.46875 267.949219 87.761719 C 267.417969 88.050781 266.679688 88.199219 265.734375 88.199219 C 264.71875 88.199219 263.875 87.933594 263.207031 87.40625 C 262.539062 86.867188 262.207031 86.023438 262.207031 84.886719 C 262.207031 83.777344 262.644531 82.921875 263.523438 82.324219 C 264.398438 81.714844 265.75 81.382812 267.570312 81.324219 L 269.472656 81.261719 L 269.472656 80.597656 C 269.472656 79.667969 269.269531 79.019531 268.867188 78.660156 C 268.460938 78.296875 267.890625 78.117188 267.152344 78.117188 C 266.570312 78.117188 266.011719 78.207031 265.484375 78.390625 C 264.957031 78.554688 264.460938 78.75 264.003906 78.972656 L 263.4375 77.597656 C 263.925781 77.332031 264.503906 77.113281 265.171875 76.929688 C 265.839844 76.738281 266.535156 76.640625 267.257812 76.640625 Z M 269.449219 82.535156 L 267.800781 82.597656 C 266.410156 82.652344 265.441406 82.875 264.898438 83.261719 C 264.371094 83.652344 264.105469 84.199219 264.105469 84.90625 C 264.105469 85.53125 264.292969 85.992188 264.671875 86.28125 C 265.058594 86.574219 265.554688 86.71875 266.152344 86.71875 C 267.097656 86.71875 267.882812 86.460938 268.511719 85.949219 C 269.136719 85.421875 269.449219 84.617188 269.449219 83.53125 Z M 269.449219 82.535156 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 278.699219 76.617188 C 279.433594 76.617188 280.097656 76.757812 280.679688 77.035156 C 281.277344 77.3125 281.785156 77.734375 282.203125 78.304688 L 282.308594 78.304688 L 282.558594 76.828125 L 284.019531 76.828125 L 284.019531 88.175781 C 284.019531 89.773438 283.609375 90.976562 282.789062 91.78125 C 281.980469 92.585938 280.722656 92.988281 279.011719 92.988281 C 277.367188 92.988281 276.027344 92.753906 274.980469 92.28125 L 274.980469 90.59375 C 276.082031 91.175781 277.457031 91.46875 279.113281 91.46875 C 280.074219 91.46875 280.828125 91.183594 281.371094 90.613281 C 281.925781 90.058594 282.203125 89.296875 282.203125 88.324219 L 282.203125 87.886719 C 282.203125 87.71875 282.210938 87.484375 282.226562 87.175781 C 282.238281 86.859375 282.253906 86.636719 282.265625 86.511719 L 282.183594 86.511719 C 281.433594 87.636719 280.277344 88.199219 278.71875 88.199219 C 277.269531 88.199219 276.136719 87.691406 275.316406 86.679688 C 274.507812 85.664062 274.105469 84.25 274.105469 82.429688 C 274.105469 80.652344 274.507812 79.242188 275.316406 78.203125 C 276.136719 77.144531 277.265625 76.617188 278.699219 76.617188 Z M 278.949219 78.160156 C 278.015625 78.160156 277.292969 78.535156 276.777344 79.285156 C 276.261719 80.019531 276.003906 81.074219 276.003906 82.449219 C 276.003906 83.824219 276.253906 84.878906 276.757812 85.617188 C 277.269531 86.335938 278.015625 86.699219 278.988281 86.699219 C 280.117188 86.699219 280.9375 86.398438 281.453125 85.804688 C 281.96875 85.191406 282.226562 84.214844 282.226562 82.867188 L 282.226562 82.429688 C 282.226562 80.902344 281.960938 79.8125 281.433594 79.160156 C 280.902344 78.492188 280.074219 78.160156 278.949219 78.160156 Z M 278.949219 78.160156 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 291.890625 76.617188 C 292.851562 76.617188 293.671875 76.828125 294.351562 77.242188 C 295.046875 77.660156 295.578125 78.25 295.9375 79.011719 C 296.316406 79.761719 296.503906 80.644531 296.503906 81.660156 L 296.503906 82.761719 L 288.84375 82.761719 C 288.871094 84.027344 289.191406 84.992188 289.800781 85.65625 C 290.429688 86.308594 291.296875 86.636719 292.410156 86.636719 C 293.121094 86.636719 293.746094 86.574219 294.289062 86.449219 C 294.847656 86.308594 295.417969 86.117188 296.003906 85.867188 L 296.003906 87.46875 C 295.429688 87.71875 294.867188 87.898438 294.3125 88.011719 C 293.753906 88.136719 293.09375 88.199219 292.328125 88.199219 C 291.269531 88.199219 290.332031 87.984375 289.511719 87.550781 C 288.703125 87.121094 288.070312 86.484375 287.609375 85.636719 C 287.164062 84.777344 286.941406 83.726562 286.941406 82.492188 C 286.941406 81.269531 287.144531 80.222656 287.546875 79.347656 C 287.964844 78.472656 288.542969 77.796875 289.28125 77.328125 C 290.03125 76.855469 290.902344 76.617188 291.890625 76.617188 Z M 291.867188 78.117188 C 290.992188 78.117188 290.296875 78.402344 289.78125 78.972656 C 289.28125 79.527344 288.980469 80.304688 288.882812 81.304688 L 294.582031 81.304688 C 294.570312 80.359375 294.347656 79.597656 293.914062 79.011719 C 293.484375 78.417969 292.800781 78.117188 291.867188 78.117188 Z M 291.867188 78.117188 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 306.625 84.90625 C 306.625 85.992188 306.222656 86.808594 305.417969 87.363281 C 304.609375 87.921875 303.523438 88.199219 302.160156 88.199219 C 301.378906 88.199219 300.707031 88.136719 300.136719 88.011719 C 299.578125 87.886719 299.085938 87.710938 298.652344 87.488281 L 298.652344 85.824219 C 299.097656 86.046875 299.632812 86.253906 300.261719 86.449219 C 300.902344 86.628906 301.546875 86.71875 302.203125 86.71875 C 303.132812 86.71875 303.808594 86.574219 304.226562 86.28125 C 304.644531 85.976562 304.851562 85.574219 304.851562 85.074219 C 304.851562 84.796875 304.777344 84.546875 304.621094 84.324219 C 304.46875 84.101562 304.191406 83.878906 303.789062 83.65625 C 303.398438 83.4375 302.835938 83.1875 302.097656 82.910156 C 301.375 82.628906 300.753906 82.351562 300.238281 82.074219 C 299.722656 81.796875 299.328125 81.464844 299.050781 81.074219 C 298.769531 80.6875 298.632812 80.1875 298.632812 79.574219 C 298.632812 78.632812 299.015625 77.902344 299.78125 77.390625 C 300.558594 76.875 301.574219 76.617188 302.828125 76.617188 C 303.507812 76.617188 304.144531 76.6875 304.726562 76.828125 C 305.324219 76.953125 305.882812 77.132812 306.398438 77.367188 L 305.769531 78.828125 C 305.296875 78.632812 304.804688 78.464844 304.289062 78.328125 C 303.773438 78.1875 303.246094 78.117188 302.703125 78.117188 C 301.949219 78.117188 301.375 78.242188 300.96875 78.492188 C 300.582031 78.730469 300.386719 79.054688 300.386719 79.472656 C 300.386719 79.777344 300.476562 80.042969 300.65625 80.261719 C 300.835938 80.472656 301.136719 80.679688 301.554688 80.886719 C 301.984375 81.082031 302.554688 81.320312 303.265625 81.597656 C 303.976562 81.859375 304.582031 82.128906 305.082031 82.410156 C 305.582031 82.6875 305.964844 83.027344 306.230469 83.429688 C 306.496094 83.816406 306.625 84.3125 306.625 84.90625 Z M 306.625 84.90625 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 27.394531 104.277344 L 24.578125 104.277344 L 24.578125 114.023438 L 22.742188 114.023438 L 22.742188 104.277344 L 20.777344 104.277344 L 20.777344 103.421875 L 22.742188 102.796875 L 22.742188 102.152344 C 22.742188 100.707031 23.058594 99.671875 23.699219 99.050781 C 24.339844 98.410156 25.230469 98.089844 26.371094 98.089844 C 26.816406 98.089844 27.222656 98.132812 27.582031 98.214844 C 27.957031 98.285156 28.277344 98.367188 28.542969 98.464844 L 28.0625 99.902344 C 27.839844 99.832031 27.582031 99.765625 27.289062 99.695312 C 27 99.625 26.699219 99.589844 26.394531 99.589844 C 25.78125 99.589844 25.320312 99.796875 25.015625 100.214844 C 24.722656 100.617188 24.578125 101.257812 24.578125 102.132812 L 24.578125 102.859375 L 27.394531 102.859375 Z M 27.394531 104.277344 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 34.636719 102.652344 C 34.847656 102.652344 35.070312 102.664062 35.304688 102.695312 C 35.558594 102.707031 35.773438 102.734375 35.953125 102.777344 L 35.722656 104.464844 C 35.542969 104.421875 35.339844 104.386719 35.117188 104.359375 C 34.910156 104.332031 34.707031 104.316406 34.511719 104.316406 C 33.941406 104.316406 33.40625 104.476562 32.90625 104.796875 C 32.40625 105.101562 32 105.539062 31.695312 106.109375 C 31.402344 106.664062 31.257812 107.316406 31.257812 108.066406 L 31.257812 114.023438 L 29.421875 114.023438 L 29.421875 102.859375 L 30.921875 102.859375 L 31.132812 104.902344 L 31.214844 104.902344 C 31.578125 104.289062 32.042969 103.761719 32.613281 103.320312 C 33.183594 102.875 33.859375 102.652344 34.636719 102.652344 Z M 34.636719 102.652344 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 47.351562 108.421875 C 47.351562 110.269531 46.878906 111.699219 45.929688 112.710938 C 45 113.726562 43.734375 114.230469 42.132812 114.230469 C 41.144531 114.230469 40.261719 114.007812 39.480469 113.566406 C 38.714844 113.105469 38.109375 112.449219 37.664062 111.585938 C 37.21875 110.710938 36.996094 109.65625 36.996094 108.421875 C 36.996094 106.574219 37.464844 105.152344 38.394531 104.152344 C 39.328125 103.152344 40.59375 102.652344 42.195312 102.652344 C 43.210938 102.652344 44.101562 102.882812 44.867188 103.339844 C 45.644531 103.785156 46.25 104.4375 46.683594 105.296875 C 47.128906 106.144531 47.351562 107.183594 47.351562 108.421875 Z M 38.898438 108.421875 C 38.898438 109.738281 39.152344 110.789062 39.667969 111.566406 C 40.199219 112.328125 41.03125 112.710938 42.175781 112.710938 C 43.300781 112.710938 44.128906 112.328125 44.65625 111.566406 C 45.1875 110.789062 45.453125 109.738281 45.453125 108.421875 C 45.453125 107.101562 45.1875 106.066406 44.65625 105.316406 C 44.128906 104.566406 43.292969 104.191406 42.152344 104.191406 C 41.011719 104.191406 40.183594 104.566406 39.667969 105.316406 C 39.152344 106.066406 38.898438 107.101562 38.898438 108.421875 Z M 38.898438 108.421875 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 62.527344 102.652344 C 63.792969 102.652344 64.738281 102.976562 65.363281 103.628906 C 65.992188 104.269531 66.304688 105.3125 66.304688 106.753906 L 66.304688 114.023438 L 64.488281 114.023438 L 64.488281 106.839844 C 64.488281 105.074219 63.730469 104.191406 62.214844 104.191406 C 61.128906 104.191406 60.347656 104.503906 59.875 105.128906 C 59.414062 105.753906 59.1875 106.664062 59.1875 107.859375 L 59.1875 114.023438 L 57.371094 114.023438 L 57.371094 106.839844 C 57.371094 105.074219 56.605469 104.191406 55.074219 104.191406 C 53.945312 104.191406 53.167969 104.539062 52.734375 105.234375 C 52.304688 105.929688 52.089844 106.929688 52.089844 108.234375 L 52.089844 114.023438 L 50.253906 114.023438 L 50.253906 102.859375 L 51.734375 102.859375 L 52.003906 104.378906 L 52.109375 104.378906 C 52.457031 103.796875 52.925781 103.367188 53.507812 103.089844 C 54.105469 102.796875 54.738281 102.652344 55.40625 102.652344 C 57.160156 102.652344 58.300781 103.277344 58.832031 104.527344 L 58.9375 104.527344 C 59.3125 103.886719 59.820312 103.414062 60.460938 103.109375 C 61.113281 102.804688 61.800781 102.652344 62.527344 102.652344 Z M 62.527344 102.652344 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 77.324219 114.023438 L 75.445312 114.023438 L 75.445312 99.152344 L 83.777344 99.152344 L 83.777344 100.796875 L 77.324219 100.796875 L 77.324219 106.066406 L 83.378906 106.066406 L 83.378906 107.710938 L 77.324219 107.710938 Z M 77.324219 114.023438 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 90.269531 102.671875 C 91.632812 102.671875 92.640625 102.972656 93.292969 103.570312 C 93.949219 104.164062 94.277344 105.117188 94.277344 106.421875 L 94.277344 114.023438 L 92.941406 114.023438 L 92.585938 112.441406 L 92.5 112.441406 C 92.015625 113.050781 91.5 113.503906 90.957031 113.792969 C 90.429688 114.085938 89.691406 114.230469 88.742188 114.230469 C 87.726562 114.230469 86.886719 113.96875 86.21875 113.441406 C 85.550781 112.898438 85.214844 112.058594 85.214844 110.921875 C 85.214844 109.808594 85.65625 108.957031 86.53125 108.359375 C 87.40625 107.746094 88.757812 107.414062 90.582031 107.359375 L 92.480469 107.296875 L 92.480469 106.628906 C 92.480469 105.699219 92.277344 105.054688 91.875 104.691406 C 91.472656 104.332031 90.902344 104.152344 90.164062 104.152344 C 89.578125 104.152344 89.023438 104.242188 88.492188 104.421875 C 87.964844 104.589844 87.46875 104.785156 87.011719 105.003906 L 86.449219 103.628906 C 86.933594 103.367188 87.511719 103.144531 88.179688 102.964844 C 88.847656 102.769531 89.542969 102.671875 90.269531 102.671875 Z M 92.460938 108.566406 L 90.808594 108.628906 C 89.417969 108.683594 88.453125 108.90625 87.910156 109.296875 C 87.378906 109.683594 87.117188 110.234375 87.117188 110.941406 C 87.117188 111.566406 87.304688 112.023438 87.679688 112.316406 C 88.070312 112.605469 88.5625 112.753906 89.160156 112.753906 C 90.109375 112.753906 90.894531 112.496094 91.519531 111.980469 C 92.144531 111.453125 92.460938 110.648438 92.460938 109.566406 Z M 92.460938 108.566406 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 102.230469 114.230469 C 101.242188 114.230469 100.355469 114.03125 99.578125 113.628906 C 98.8125 113.226562 98.207031 112.601562 97.761719 111.753906 C 97.332031 110.90625 97.113281 109.824219 97.113281 108.503906 C 97.113281 107.128906 97.34375 106.011719 97.804688 105.152344 C 98.261719 104.289062 98.882812 103.660156 99.660156 103.257812 C 100.453125 102.851562 101.351562 102.652344 102.355469 102.652344 C 102.925781 102.652344 103.472656 102.714844 104.003906 102.839844 C 104.53125 102.949219 104.964844 103.089844 105.296875 103.257812 L 104.734375 104.777344 C 104.398438 104.652344 104.011719 104.535156 103.566406 104.421875 C 103.121094 104.3125 102.703125 104.253906 102.3125 104.253906 C 100.113281 104.253906 99.015625 105.664062 99.015625 108.484375 C 99.015625 109.832031 99.277344 110.863281 99.808594 111.585938 C 100.351562 112.292969 101.148438 112.648438 102.207031 112.648438 C 102.820312 112.648438 103.355469 112.585938 103.816406 112.460938 C 104.289062 112.335938 104.71875 112.183594 105.109375 112.003906 L 105.109375 113.628906 C 104.734375 113.820312 104.316406 113.96875 103.855469 114.066406 C 103.410156 114.175781 102.867188 114.230469 102.230469 114.230469 Z M 102.230469 114.230469 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 112.082031 102.652344 C 113.042969 102.652344 113.863281 102.859375 114.542969 103.277344 C 115.238281 103.691406 115.769531 104.285156 116.128906 105.046875 C 116.507812 105.796875 116.695312 106.679688 116.695312 107.691406 L 116.695312 108.796875 L 109.035156 108.796875 C 109.0625 110.058594 109.382812 111.023438 109.992188 111.691406 C 110.621094 112.34375 111.488281 112.667969 112.601562 112.667969 C 113.3125 112.667969 113.9375 112.605469 114.480469 112.480469 C 115.039062 112.34375 115.609375 112.148438 116.191406 111.898438 L 116.191406 113.503906 C 115.621094 113.753906 115.058594 113.933594 114.503906 114.042969 C 113.945312 114.167969 113.285156 114.230469 112.519531 114.230469 C 111.460938 114.230469 110.523438 114.015625 109.703125 113.585938 C 108.894531 113.15625 108.261719 112.515625 107.800781 111.671875 C 107.355469 110.808594 107.132812 109.761719 107.132812 108.523438 C 107.132812 107.304688 107.335938 106.253906 107.738281 105.378906 C 108.15625 104.503906 108.734375 103.832031 109.472656 103.359375 C 110.222656 102.886719 111.09375 102.652344 112.082031 102.652344 Z M 112.058594 104.152344 C 111.183594 104.152344 110.488281 104.4375 109.972656 105.003906 C 109.472656 105.5625 109.171875 106.339844 109.074219 107.339844 L 114.773438 107.339844 C 114.761719 106.394531 114.539062 105.628906 114.105469 105.046875 C 113.675781 104.449219 112.992188 104.152344 112.058594 104.152344 Z M 112.058594 104.152344 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 121.371094 98.195312 L 121.371094 102.046875 C 121.371094 102.519531 121.355469 102.964844 121.328125 103.382812 C 121.3125 103.785156 121.292969 104.101562 121.265625 104.339844 L 121.371094 104.339844 C 121.691406 103.867188 122.128906 103.472656 122.683594 103.152344 C 123.242188 102.832031 123.957031 102.671875 124.835938 102.671875 C 126.226562 102.671875 127.339844 103.160156 128.175781 104.128906 C 129.023438 105.089844 129.449219 106.527344 129.449219 108.441406 C 129.449219 110.359375 129.023438 111.800781 128.175781 112.773438 C 127.328125 113.746094 126.214844 114.230469 124.835938 114.230469 C 123.957031 114.230469 123.242188 114.070312 122.683594 113.753906 C 122.128906 113.433594 121.691406 113.050781 121.371094 112.605469 L 121.222656 112.605469 L 120.847656 114.023438 L 119.53125 114.023438 L 119.53125 98.195312 Z M 124.523438 104.191406 C 123.339844 104.191406 122.519531 104.535156 122.058594 105.214844 C 121.601562 105.894531 121.371094 106.949219 121.371094 108.378906 L 121.371094 108.460938 C 121.371094 109.835938 121.59375 110.890625 122.039062 111.628906 C 122.496094 112.351562 123.339844 112.710938 124.5625 112.710938 C 125.566406 112.710938 126.308594 112.34375 126.796875 111.609375 C 127.296875 110.871094 127.550781 109.808594 127.550781 108.421875 C 127.550781 105.601562 126.539062 104.191406 124.523438 104.191406 Z M 124.523438 104.191406 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 142.097656 108.421875 C 142.097656 110.269531 141.625 111.699219 140.679688 112.710938 C 139.746094 113.726562 138.480469 114.230469 136.878906 114.230469 C 135.890625 114.230469 135.007812 114.007812 134.230469 113.566406 C 133.464844 113.105469 132.859375 112.449219 132.414062 111.585938 C 131.96875 110.710938 131.746094 109.65625 131.746094 108.421875 C 131.746094 106.574219 132.210938 105.152344 133.144531 104.152344 C 134.074219 103.152344 135.34375 102.652344 136.941406 102.652344 C 137.957031 102.652344 138.847656 102.882812 139.613281 103.339844 C 140.394531 103.785156 141 104.4375 141.429688 105.296875 C 141.875 106.144531 142.097656 107.183594 142.097656 108.421875 Z M 133.644531 108.421875 C 133.644531 109.738281 133.902344 110.789062 134.417969 111.566406 C 134.945312 112.328125 135.78125 112.710938 136.921875 112.710938 C 138.046875 112.710938 138.875 112.328125 139.40625 111.566406 C 139.933594 110.789062 140.199219 109.738281 140.199219 108.421875 C 140.199219 107.101562 139.933594 106.066406 139.40625 105.316406 C 138.875 104.566406 138.042969 104.191406 136.902344 104.191406 C 135.757812 104.191406 134.929688 104.566406 134.417969 105.316406 C 133.902344 106.066406 133.644531 107.101562 133.644531 108.421875 Z M 133.644531 108.421875 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 154.726562 108.421875 C 154.726562 110.269531 154.253906 111.699219 153.308594 112.710938 C 152.375 113.726562 151.109375 114.230469 149.507812 114.230469 C 148.519531 114.230469 147.636719 114.007812 146.855469 113.566406 C 146.09375 113.105469 145.488281 112.449219 145.042969 111.585938 C 144.597656 110.710938 144.375 109.65625 144.375 108.421875 C 144.375 106.574219 144.839844 105.152344 145.773438 104.152344 C 146.703125 103.152344 147.96875 102.652344 149.570312 102.652344 C 150.585938 102.652344 151.476562 102.882812 152.242188 103.339844 C 153.023438 103.785156 153.628906 104.4375 154.058594 105.296875 C 154.503906 106.144531 154.726562 107.183594 154.726562 108.421875 Z M 146.273438 108.421875 C 146.273438 109.738281 146.53125 110.789062 147.046875 111.566406 C 147.574219 112.328125 148.410156 112.710938 149.550781 112.710938 C 150.675781 112.710938 151.503906 112.328125 152.035156 111.566406 C 152.5625 110.789062 152.828125 109.738281 152.828125 108.421875 C 152.828125 107.101562 152.5625 106.066406 152.035156 105.316406 C 151.503906 104.566406 150.671875 104.191406 149.527344 104.191406 C 148.386719 104.191406 147.558594 104.566406 147.046875 105.316406 C 146.53125 106.066406 146.273438 107.101562 146.273438 108.421875 Z M 146.273438 108.421875 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 159.445312 98.195312 L 159.445312 106.464844 C 159.445312 106.683594 159.429688 106.976562 159.402344 107.339844 C 159.390625 107.699219 159.375 108.011719 159.359375 108.273438 L 159.445312 108.273438 C 159.527344 108.164062 159.652344 108.003906 159.820312 107.796875 C 159.988281 107.589844 160.152344 107.378906 160.320312 107.171875 C 160.503906 106.949219 160.65625 106.769531 160.78125 106.628906 L 164.351562 102.859375 L 166.5 102.859375 L 161.96875 107.628906 L 166.8125 114.023438 L 164.601562 114.023438 L 160.71875 108.816406 L 159.445312 109.921875 L 159.445312 114.023438 L 157.628906 114.023438 L 157.628906 98.195312 Z M 159.445312 98.195312 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 181.488281 110.941406 C 181.488281 112.023438 181.082031 112.84375 180.277344 113.398438 C 179.46875 113.953125 178.382812 114.230469 177.019531 114.230469 C 176.242188 114.230469 175.566406 114.167969 174.996094 114.042969 C 174.4375 113.917969 173.945312 113.746094 173.511719 113.523438 L 173.511719 111.855469 C 173.957031 112.078125 174.496094 112.289062 175.121094 112.480469 C 175.761719 112.664062 176.40625 112.753906 177.0625 112.753906 C 177.996094 112.753906 178.667969 112.605469 179.085938 112.316406 C 179.503906 112.011719 179.714844 111.609375 179.714844 111.109375 C 179.714844 110.828125 179.636719 110.578125 179.484375 110.359375 C 179.332031 110.136719 179.050781 109.914062 178.648438 109.691406 C 178.257812 109.46875 177.695312 109.21875 176.957031 108.941406 C 176.234375 108.664062 175.613281 108.386719 175.101562 108.109375 C 174.585938 107.832031 174.1875 107.496094 173.910156 107.109375 C 173.632812 106.71875 173.492188 106.21875 173.492188 105.609375 C 173.492188 104.664062 173.875 103.9375 174.640625 103.421875 C 175.417969 102.910156 176.4375 102.652344 177.6875 102.652344 C 178.371094 102.652344 179.003906 102.722656 179.585938 102.859375 C 180.1875 102.984375 180.742188 103.164062 181.257812 103.402344 L 180.632812 104.859375 C 180.160156 104.664062 179.664062 104.5 179.148438 104.359375 C 178.632812 104.222656 178.105469 104.152344 177.5625 104.152344 C 176.8125 104.152344 176.234375 104.277344 175.832031 104.527344 C 175.441406 104.761719 175.246094 105.089844 175.246094 105.503906 C 175.246094 105.8125 175.335938 106.074219 175.515625 106.296875 C 175.699219 106.503906 175.996094 106.714844 176.414062 106.921875 C 176.847656 107.117188 177.417969 107.351562 178.125 107.628906 C 178.835938 107.894531 179.441406 108.164062 179.941406 108.441406 C 180.445312 108.71875 180.828125 109.058594 181.089844 109.460938 C 181.355469 109.851562 181.488281 110.34375 181.488281 110.941406 Z M 181.488281 110.941406 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 188.523438 102.652344 C 189.480469 102.652344 190.304688 102.859375 190.984375 103.277344 C 191.679688 103.691406 192.210938 104.285156 192.570312 105.046875 C 192.945312 105.796875 193.136719 106.679688 193.136719 107.691406 L 193.136719 108.796875 L 185.472656 108.796875 C 185.503906 110.058594 185.820312 111.023438 186.433594 111.691406 C 187.0625 112.34375 187.929688 112.667969 189.042969 112.667969 C 189.753906 112.667969 190.378906 112.605469 190.921875 112.480469 C 191.480469 112.34375 192.050781 112.148438 192.632812 111.898438 L 192.632812 113.503906 C 192.0625 113.753906 191.5 113.933594 190.941406 114.042969 C 190.386719 114.167969 189.726562 114.230469 188.960938 114.230469 C 187.902344 114.230469 186.964844 114.015625 186.140625 113.585938 C 185.335938 113.15625 184.703125 112.515625 184.242188 111.671875 C 183.796875 110.808594 183.574219 109.761719 183.574219 108.523438 C 183.574219 107.304688 183.777344 106.253906 184.179688 105.378906 C 184.597656 104.503906 185.175781 103.832031 185.914062 103.359375 C 186.664062 102.886719 187.535156 102.652344 188.523438 102.652344 Z M 188.5 104.152344 C 187.625 104.152344 186.929688 104.4375 186.414062 105.003906 C 185.914062 105.5625 185.613281 106.339844 185.515625 107.339844 L 191.214844 107.339844 C 191.199219 106.394531 190.976562 105.628906 190.546875 105.046875 C 190.113281 104.449219 189.433594 104.152344 188.5 104.152344 Z M 188.5 104.152344 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 201.191406 102.652344 C 201.402344 102.652344 201.625 102.664062 201.859375 102.695312 C 202.109375 102.707031 202.328125 102.734375 202.507812 102.777344 L 202.277344 104.464844 C 202.097656 104.421875 201.894531 104.386719 201.671875 104.359375 C 201.464844 104.332031 201.261719 104.316406 201.066406 104.316406 C 200.496094 104.316406 199.960938 104.476562 199.460938 104.796875 C 198.957031 105.101562 198.554688 105.539062 198.25 106.109375 C 197.957031 106.664062 197.8125 107.316406 197.8125 108.066406 L 197.8125 114.023438 L 195.972656 114.023438 L 195.972656 102.859375 L 197.476562 102.859375 L 197.683594 104.902344 L 197.769531 104.902344 C 198.128906 104.289062 198.597656 103.761719 199.167969 103.320312 C 199.738281 102.875 200.414062 102.652344 201.191406 102.652344 Z M 201.191406 102.652344 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 207.058594 114.023438 L 202.820312 102.859375 L 204.78125 102.859375 L 207.164062 109.441406 C 207.273438 109.746094 207.390625 110.085938 207.515625 110.460938 C 207.640625 110.835938 207.753906 111.199219 207.851562 111.546875 C 207.949219 111.878906 208.019531 112.164062 208.058594 112.398438 L 208.144531 112.398438 C 208.199219 112.164062 208.277344 111.871094 208.371094 111.523438 C 208.484375 111.175781 208.601562 110.816406 208.726562 110.441406 C 208.867188 110.066406 208.984375 109.734375 209.082031 109.441406 L 211.460938 102.859375 L 213.425781 102.859375 L 209.167969 114.023438 Z M 207.058594 114.023438 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 219.519531 102.652344 C 220.480469 102.652344 221.300781 102.859375 221.984375 103.277344 C 222.679688 103.691406 223.207031 104.285156 223.570312 105.046875 C 223.945312 105.796875 224.132812 106.679688 224.132812 107.691406 L 224.132812 108.796875 L 216.472656 108.796875 C 216.5 110.058594 216.820312 111.023438 217.433594 111.691406 C 218.058594 112.34375 218.929688 112.667969 220.042969 112.667969 C 220.75 112.667969 221.378906 112.605469 221.921875 112.480469 C 222.476562 112.34375 223.046875 112.148438 223.632812 111.898438 L 223.632812 113.503906 C 223.0625 113.753906 222.496094 113.933594 221.941406 114.042969 C 221.382812 114.167969 220.722656 114.230469 219.957031 114.230469 C 218.902344 114.230469 217.960938 114.015625 217.140625 113.585938 C 216.332031 113.15625 215.699219 112.515625 215.242188 111.671875 C 214.796875 110.808594 214.574219 109.761719 214.574219 108.523438 C 214.574219 107.304688 214.773438 106.253906 215.179688 105.378906 C 215.59375 104.503906 216.171875 103.832031 216.910156 103.359375 C 217.660156 102.886719 218.53125 102.652344 219.519531 102.652344 Z M 219.5 104.152344 C 218.621094 104.152344 217.925781 104.4375 217.410156 105.003906 C 216.910156 105.5625 216.609375 106.339844 216.515625 107.339844 L 222.210938 107.339844 C 222.199219 106.394531 221.976562 105.628906 221.542969 105.046875 C 221.113281 104.449219 220.429688 104.152344 219.5 104.152344 Z M 219.5 104.152344 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 232.191406 102.652344 C 232.398438 102.652344 232.621094 102.664062 232.859375 102.695312 C 233.109375 102.707031 233.324219 102.734375 233.503906 102.777344 L 233.277344 104.464844 C 233.09375 104.421875 232.894531 104.386719 232.671875 104.359375 C 232.460938 104.332031 232.261719 104.316406 232.066406 104.316406 C 231.496094 104.316406 230.957031 104.476562 230.457031 104.796875 C 229.957031 105.101562 229.554688 105.539062 229.246094 106.109375 C 228.953125 106.664062 228.808594 107.316406 228.808594 108.066406 L 228.808594 114.023438 L 226.972656 114.023438 L 226.972656 102.859375 L 228.476562 102.859375 L 228.683594 104.902344 L 228.765625 104.902344 C 229.128906 104.289062 229.59375 103.761719 230.164062 103.320312 C 230.734375 102.875 231.410156 102.652344 232.191406 102.652344 Z M 232.191406 102.652344 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 242.878906 110.941406 C 242.878906 112.023438 242.472656 112.84375 241.667969 113.398438 C 240.859375 113.953125 239.773438 114.230469 238.410156 114.230469 C 237.632812 114.230469 236.957031 114.167969 236.386719 114.042969 C 235.828125 113.917969 235.335938 113.746094 234.902344 113.523438 L 234.902344 111.855469 C 235.347656 112.078125 235.886719 112.289062 236.511719 112.480469 C 237.152344 112.664062 237.796875 112.753906 238.453125 112.753906 C 239.386719 112.753906 240.058594 112.605469 240.476562 112.316406 C 240.894531 112.011719 241.101562 111.609375 241.101562 111.109375 C 241.101562 110.828125 241.027344 110.578125 240.875 110.359375 C 240.722656 110.136719 240.441406 109.914062 240.039062 109.691406 C 239.648438 109.46875 239.085938 109.21875 238.347656 108.941406 C 237.625 108.664062 237.003906 108.386719 236.492188 108.109375 C 235.976562 107.832031 235.578125 107.496094 235.300781 107.109375 C 235.023438 106.71875 234.882812 106.21875 234.882812 105.609375 C 234.882812 104.664062 235.265625 103.9375 236.03125 103.421875 C 236.808594 102.910156 237.828125 102.652344 239.078125 102.652344 C 239.761719 102.652344 240.394531 102.722656 240.976562 102.859375 C 241.578125 102.984375 242.132812 103.164062 242.648438 103.402344 L 242.023438 104.859375 C 241.546875 104.664062 241.054688 104.5 240.539062 104.359375 C 240.023438 104.222656 239.496094 104.152344 238.953125 104.152344 C 238.203125 104.152344 237.625 104.277344 237.222656 104.527344 C 236.832031 104.761719 236.636719 105.089844 236.636719 105.503906 C 236.636719 105.8125 236.726562 106.074219 236.90625 106.296875 C 237.089844 106.503906 237.386719 106.714844 237.804688 106.921875 C 238.238281 107.117188 238.808594 107.351562 239.515625 107.628906 C 240.226562 107.894531 240.832031 108.164062 241.332031 108.441406 C 241.835938 108.71875 242.214844 109.058594 242.480469 109.460938 C 242.746094 109.851562 242.878906 110.34375 242.878906 110.941406 Z M 242.878906 110.941406 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 245.320312 112.898438 C 245.320312 112.386719 245.445312 112.023438 245.695312 111.816406 C 245.945312 111.609375 246.246094 111.503906 246.59375 111.503906 C 246.957031 111.503906 247.261719 111.609375 247.511719 111.816406 C 247.777344 112.023438 247.910156 112.386719 247.910156 112.898438 C 247.910156 113.398438 247.777344 113.757812 247.511719 113.980469 C 247.261719 114.203125 246.957031 114.316406 246.59375 114.316406 C 246.246094 114.316406 245.945312 114.203125 245.695312 113.980469 C 245.445312 113.757812 245.320312 113.398438 245.320312 112.898438 Z M 245.320312 112.898438 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 26.371094 158.53125 L 30.253906 151.21875 L 32.28125 151.21875 L 27.3125 160.320312 L 27.3125 166.089844 L 25.433594 166.089844 L 25.433594 160.40625 L 20.464844 151.21875 L 22.511719 151.21875 Z M 26.371094 158.53125 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 42.738281 160.488281 C 42.738281 162.335938 42.265625 163.765625 41.316406 164.777344 C 40.386719 165.792969 39.121094 166.296875 37.519531 166.296875 C 36.53125 166.296875 35.648438 166.078125 34.867188 165.632812 C 34.101562 165.171875 33.496094 164.515625 33.050781 163.652344 C 32.605469 162.777344 32.382812 161.722656 32.382812 160.488281 C 32.382812 158.640625 32.851562 157.21875 33.78125 156.21875 C 34.714844 155.21875 35.980469 154.71875 37.582031 154.71875 C 38.597656 154.71875 39.488281 154.949219 40.253906 155.40625 C 41.03125 155.851562 41.636719 156.503906 42.070312 157.363281 C 42.515625 158.210938 42.738281 159.253906 42.738281 160.488281 Z M 34.285156 160.488281 C 34.285156 161.808594 34.542969 162.855469 35.054688 163.632812 C 35.585938 164.394531 36.417969 164.777344 37.5625 164.777344 C 38.6875 164.777344 39.515625 164.394531 40.042969 163.632812 C 40.574219 162.855469 40.839844 161.808594 40.839844 160.488281 C 40.839844 159.167969 40.574219 158.132812 40.042969 157.382812 C 39.515625 156.636719 38.679688 156.261719 37.539062 156.261719 C 36.398438 156.261719 35.570312 156.636719 35.054688 157.382812 C 34.542969 158.132812 34.285156 159.167969 34.285156 160.488281 Z M 34.285156 160.488281 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 54.992188 154.925781 L 54.992188 166.089844 L 53.488281 166.089844 L 53.214844 164.613281 L 53.132812 164.613281 C 52.769531 165.195312 52.269531 165.625 51.628906 165.902344 C 50.988281 166.167969 50.308594 166.296875 49.585938 166.296875 C 48.234375 166.296875 47.21875 165.980469 46.535156 165.339844 C 45.855469 164.6875 45.515625 163.652344 45.515625 162.238281 L 45.515625 154.925781 L 47.371094 154.925781 L 47.371094 162.113281 C 47.371094 163.890625 48.199219 164.777344 49.855469 164.777344 C 51.09375 164.777344 51.949219 164.429688 52.421875 163.738281 C 52.910156 163.042969 53.152344 162.042969 53.152344 160.738281 L 53.152344 154.925781 Z M 54.992188 154.925781 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 63.757812 154.71875 C 63.964844 154.71875 64.1875 154.734375 64.425781 154.761719 C 64.675781 154.773438 64.890625 154.800781 65.074219 154.84375 L 64.84375 156.53125 C 64.664062 156.488281 64.460938 156.453125 64.238281 156.425781 C 64.027344 156.398438 63.828125 156.386719 63.632812 156.386719 C 63.0625 156.386719 62.527344 156.542969 62.023438 156.863281 C 61.523438 157.167969 61.121094 157.605469 60.816406 158.175781 C 60.523438 158.730469 60.375 159.382812 60.375 160.132812 L 60.375 166.089844 L 58.539062 166.089844 L 58.539062 154.925781 L 60.042969 154.925781 L 60.25 156.96875 L 60.335938 156.96875 C 60.695312 156.355469 61.164062 155.828125 61.734375 155.386719 C 62.304688 154.941406 62.976562 154.71875 63.757812 154.71875 Z M 63.757812 154.71875 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 74.425781 150.261719 L 74.425781 154.113281 C 74.425781 154.585938 74.410156 155.03125 74.382812 155.449219 C 74.367188 155.851562 74.347656 156.167969 74.320312 156.40625 L 74.425781 156.40625 C 74.746094 155.933594 75.183594 155.539062 75.738281 155.21875 C 76.296875 154.898438 77.011719 154.738281 77.890625 154.738281 C 79.28125 154.738281 80.394531 155.226562 81.230469 156.199219 C 82.078125 157.15625 82.503906 158.59375 82.503906 160.507812 C 82.503906 162.425781 82.078125 163.867188 81.230469 164.839844 C 80.378906 165.8125 79.265625 166.296875 77.890625 166.296875 C 77.011719 166.296875 76.296875 166.140625 75.738281 165.820312 C 75.183594 165.5 74.746094 165.117188 74.425781 164.675781 L 74.277344 164.675781 L 73.902344 166.089844 L 72.585938 166.089844 L 72.585938 150.261719 Z M 77.578125 156.261719 C 76.394531 156.261719 75.574219 156.601562 75.113281 157.28125 C 74.652344 157.960938 74.425781 159.015625 74.425781 160.445312 L 74.425781 160.53125 C 74.425781 161.902344 74.648438 162.960938 75.09375 163.695312 C 75.550781 164.417969 76.394531 164.777344 77.617188 164.777344 C 78.621094 164.777344 79.363281 164.410156 79.851562 163.675781 C 80.351562 162.9375 80.601562 161.875 80.601562 160.488281 C 80.601562 157.667969 79.59375 156.261719 77.578125 156.261719 Z M 77.578125 156.261719 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 90.644531 154.71875 C 90.851562 154.71875 91.074219 154.734375 91.3125 154.761719 C 91.5625 154.773438 91.777344 154.800781 91.957031 154.84375 L 91.730469 156.53125 C 91.546875 156.488281 91.347656 156.453125 91.125 156.425781 C 90.914062 156.398438 90.714844 156.386719 90.519531 156.386719 C 89.949219 156.386719 89.410156 156.542969 88.910156 156.863281 C 88.410156 157.167969 88.007812 157.605469 87.699219 158.175781 C 87.40625 158.730469 87.261719 159.382812 87.261719 160.132812 L 87.261719 166.089844 L 85.425781 166.089844 L 85.425781 154.925781 L 86.929688 154.925781 L 87.136719 156.96875 L 87.21875 156.96875 C 87.582031 156.355469 88.046875 155.828125 88.617188 155.386719 C 89.1875 154.941406 89.863281 154.71875 90.644531 154.71875 Z M 90.644531 154.71875 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 103.355469 160.488281 C 103.355469 162.335938 102.882812 163.765625 101.9375 164.777344 C 101.003906 165.792969 99.738281 166.296875 98.136719 166.296875 C 97.148438 166.296875 96.265625 166.078125 95.484375 165.632812 C 94.722656 165.171875 94.117188 164.515625 93.671875 163.652344 C 93.226562 162.777344 93.003906 161.722656 93.003906 160.488281 C 93.003906 158.640625 93.46875 157.21875 94.402344 156.21875 C 95.332031 155.21875 96.597656 154.71875 98.199219 154.71875 C 99.214844 154.71875 100.105469 154.949219 100.871094 155.40625 C 101.652344 155.851562 102.257812 156.503906 102.6875 157.363281 C 103.132812 158.210938 103.355469 159.253906 103.355469 160.488281 Z M 94.902344 160.488281 C 94.902344 161.808594 95.160156 162.855469 95.675781 163.632812 C 96.203125 164.394531 97.039062 164.777344 98.179688 164.777344 C 99.304688 164.777344 100.132812 164.394531 100.664062 163.632812 C 101.191406 162.855469 101.457031 161.808594 101.457031 160.488281 C 101.457031 159.167969 101.191406 158.132812 100.664062 157.382812 C 100.132812 156.636719 99.300781 156.261719 98.15625 156.261719 C 97.015625 156.261719 96.1875 156.636719 95.675781 157.382812 C 95.160156 158.132812 94.902344 159.167969 94.902344 160.488281 Z M 94.902344 160.488281 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 114.984375 166.070312 L 113.0625 159.78125 C 112.882812 159.210938 112.722656 158.65625 112.582031 158.113281 C 112.457031 157.558594 112.359375 157.128906 112.289062 156.824219 L 112.207031 156.824219 C 112.152344 157.128906 112.058594 157.558594 111.933594 158.113281 C 111.808594 158.65625 111.648438 159.21875 111.453125 159.800781 L 109.449219 166.070312 L 107.363281 166.070312 L 104.296875 154.90625 L 106.195312 154.90625 L 107.738281 160.863281 C 107.890625 161.460938 108.039062 162.0625 108.175781 162.675781 C 108.316406 163.285156 108.414062 163.792969 108.46875 164.195312 L 108.554688 164.195312 C 108.609375 163.957031 108.671875 163.667969 108.742188 163.320312 C 108.824219 162.972656 108.914062 162.613281 109.011719 162.238281 C 109.109375 161.847656 109.207031 161.5 109.304688 161.195312 L 111.289062 154.90625 L 113.292969 154.90625 L 115.210938 161.195312 C 115.367188 161.667969 115.511719 162.183594 115.652344 162.738281 C 115.804688 163.292969 115.90625 163.773438 115.964844 164.175781 L 116.046875 164.175781 C 116.089844 163.828125 116.179688 163.347656 116.320312 162.738281 C 116.472656 162.125 116.632812 161.5 116.796875 160.863281 L 118.363281 154.90625 L 120.242188 154.90625 L 117.132812 166.070312 Z M 114.984375 166.070312 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 129.53125 163.007812 C 129.53125 164.089844 129.128906 164.910156 128.320312 165.464844 C 127.515625 166.019531 126.429688 166.296875 125.066406 166.296875 C 124.285156 166.296875 123.609375 166.234375 123.039062 166.109375 C 122.484375 165.984375 121.988281 165.8125 121.558594 165.589844 L 121.558594 163.925781 C 122.003906 164.144531 122.539062 164.355469 123.164062 164.550781 C 123.804688 164.730469 124.453125 164.820312 125.105469 164.820312 C 126.039062 164.820312 126.714844 164.675781 127.132812 164.382812 C 127.546875 164.078125 127.757812 163.675781 127.757812 163.175781 C 127.757812 162.898438 127.679688 162.648438 127.527344 162.425781 C 127.375 162.203125 127.097656 161.980469 126.691406 161.757812 C 126.304688 161.535156 125.738281 161.285156 125.003906 161.007812 C 124.277344 160.730469 123.660156 160.453125 123.144531 160.175781 C 122.628906 159.898438 122.234375 159.566406 121.953125 159.175781 C 121.675781 158.785156 121.535156 158.289062 121.535156 157.675781 C 121.535156 156.730469 121.917969 156.003906 122.683594 155.488281 C 123.464844 154.976562 124.480469 154.71875 125.734375 154.71875 C 126.414062 154.71875 127.046875 154.789062 127.632812 154.925781 C 128.230469 155.050781 128.789062 155.234375 129.300781 155.46875 L 128.675781 156.925781 C 128.203125 156.730469 127.707031 156.566406 127.195312 156.425781 C 126.679688 156.289062 126.148438 156.21875 125.609375 156.21875 C 124.855469 156.21875 124.277344 156.34375 123.875 156.59375 C 123.484375 156.828125 123.289062 157.15625 123.289062 157.570312 C 123.289062 157.878906 123.382812 158.140625 123.5625 158.363281 C 123.742188 158.570312 124.042969 158.78125 124.460938 158.988281 C 124.890625 159.183594 125.460938 159.417969 126.171875 159.695312 C 126.878906 159.960938 127.484375 160.230469 127.988281 160.507812 C 128.488281 160.785156 128.871094 161.125 129.136719 161.527344 C 129.398438 161.917969 129.53125 162.410156 129.53125 163.007812 Z M 129.53125 163.007812 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 136.566406 154.71875 C 137.527344 154.71875 138.347656 154.925781 139.03125 155.34375 C 139.726562 155.761719 140.253906 156.351562 140.617188 157.113281 C 140.992188 157.863281 141.179688 158.746094 141.179688 159.757812 L 141.179688 160.863281 L 133.519531 160.863281 C 133.546875 162.125 133.867188 163.089844 134.480469 163.757812 C 135.105469 164.410156 135.976562 164.738281 137.089844 164.738281 C 137.796875 164.738281 138.425781 164.675781 138.96875 164.550781 C 139.523438 164.410156 140.09375 164.214844 140.679688 163.964844 L 140.679688 165.570312 C 140.109375 165.820312 139.542969 166 138.988281 166.109375 C 138.429688 166.234375 137.769531 166.296875 137.003906 166.296875 C 135.945312 166.296875 135.007812 166.082031 134.1875 165.652344 C 133.378906 165.222656 132.746094 164.582031 132.289062 163.738281 C 131.84375 162.875 131.621094 161.828125 131.621094 160.59375 C 131.621094 159.371094 131.820312 158.320312 132.222656 157.445312 C 132.640625 156.574219 133.21875 155.898438 133.957031 155.425781 C 134.707031 154.953125 135.578125 154.71875 136.566406 154.71875 Z M 136.546875 156.21875 C 135.667969 156.21875 134.972656 156.503906 134.457031 157.070312 C 133.957031 157.628906 133.65625 158.40625 133.558594 159.40625 L 139.257812 159.40625 C 139.246094 158.460938 139.023438 157.695312 138.589844 157.113281 C 138.160156 156.515625 137.476562 156.21875 136.546875 156.21875 Z M 136.546875 156.21875 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 149.238281 154.71875 C 149.445312 154.71875 149.667969 154.734375 149.90625 154.761719 C 150.15625 154.773438 150.371094 154.800781 150.550781 154.84375 L 150.324219 156.53125 C 150.140625 156.488281 149.941406 156.453125 149.71875 156.425781 C 149.507812 156.398438 149.304688 156.386719 149.113281 156.386719 C 148.542969 156.386719 148.003906 156.542969 147.503906 156.863281 C 147.003906 157.167969 146.601562 157.605469 146.292969 158.175781 C 146 158.730469 145.855469 159.382812 145.855469 160.132812 L 145.855469 166.089844 L 144.019531 166.089844 L 144.019531 154.925781 L 145.519531 154.925781 L 145.730469 156.96875 L 145.8125 156.96875 C 146.175781 156.355469 146.640625 155.828125 147.210938 155.386719 C 147.78125 154.941406 148.457031 154.71875 149.238281 154.71875 Z M 149.238281 154.71875 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 163.390625 154.71875 C 164.765625 154.71875 165.875 155.199219 166.707031 156.15625 C 167.558594 157.113281 167.980469 158.558594 167.980469 160.488281 C 167.980469 162.390625 167.558594 163.832031 166.707031 164.820312 C 165.875 165.804688 164.761719 166.296875 163.367188 166.296875 C 162.503906 166.296875 161.789062 166.140625 161.21875 165.820312 C 160.660156 165.484375 160.222656 165.105469 159.902344 164.675781 L 159.777344 164.675781 C 159.804688 164.910156 159.832031 165.207031 159.863281 165.570312 C 159.890625 165.929688 159.902344 166.242188 159.902344 166.507812 L 159.902344 171.089844 L 158.066406 171.089844 L 158.066406 154.925781 L 159.570312 154.925781 L 159.820312 156.449219 L 159.902344 156.449219 C 160.238281 155.960938 160.675781 155.550781 161.21875 155.21875 C 161.761719 154.886719 162.484375 154.71875 163.390625 154.71875 Z M 163.054688 156.261719 C 161.914062 156.261719 161.105469 156.578125 160.632812 157.21875 C 160.175781 157.855469 159.929688 158.828125 159.902344 160.132812 L 159.902344 160.488281 C 159.902344 161.863281 160.125 162.925781 160.570312 163.675781 C 161.03125 164.410156 161.871094 164.777344 163.097656 164.777344 C 163.777344 164.777344 164.335938 164.589844 164.765625 164.214844 C 165.210938 163.839844 165.539062 163.335938 165.75 162.695312 C 165.972656 162.042969 166.082031 161.300781 166.082031 160.46875 C 166.082031 159.191406 165.832031 158.167969 165.332031 157.40625 C 164.84375 156.640625 164.085938 156.261719 163.054688 156.261719 Z M 163.054688 156.261719 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 176.121094 154.71875 C 176.332031 154.71875 176.554688 154.734375 176.789062 154.761719 C 177.042969 154.773438 177.257812 154.800781 177.4375 154.84375 L 177.207031 156.53125 C 177.027344 156.488281 176.824219 156.453125 176.601562 156.425781 C 176.394531 156.398438 176.191406 156.386719 175.996094 156.386719 C 175.425781 156.386719 174.890625 156.542969 174.390625 156.863281 C 173.890625 157.167969 173.484375 157.605469 173.179688 158.175781 C 172.886719 158.730469 172.742188 159.382812 172.742188 160.132812 L 172.742188 166.089844 L 170.902344 166.089844 L 170.902344 154.925781 L 172.40625 154.925781 L 172.617188 156.96875 L 172.699219 156.96875 C 173.0625 156.355469 173.527344 155.828125 174.097656 155.386719 C 174.667969 154.941406 175.34375 154.71875 176.121094 154.71875 Z M 176.121094 154.71875 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 188.835938 160.488281 C 188.835938 162.335938 188.363281 163.765625 187.414062 164.777344 C 186.484375 165.792969 185.214844 166.296875 183.617188 166.296875 C 182.628906 166.296875 181.746094 166.078125 180.964844 165.632812 C 180.199219 165.171875 179.59375 164.515625 179.148438 163.652344 C 178.703125 162.777344 178.480469 161.722656 178.480469 160.488281 C 178.480469 158.640625 178.949219 157.21875 179.878906 156.21875 C 180.8125 155.21875 182.078125 154.71875 183.679688 154.71875 C 184.695312 154.71875 185.585938 154.949219 186.351562 155.40625 C 187.128906 155.851562 187.734375 156.503906 188.167969 157.363281 C 188.613281 158.210938 188.835938 159.253906 188.835938 160.488281 Z M 180.378906 160.488281 C 180.378906 161.808594 180.636719 162.855469 181.152344 163.632812 C 181.683594 164.394531 182.515625 164.777344 183.65625 164.777344 C 184.785156 164.777344 185.613281 164.394531 186.140625 163.632812 C 186.671875 162.855469 186.933594 161.808594 186.933594 160.488281 C 186.933594 159.167969 186.671875 158.132812 186.140625 157.382812 C 185.613281 156.636719 184.777344 156.261719 183.636719 156.261719 C 182.496094 156.261719 181.667969 156.636719 181.152344 157.382812 C 180.636719 158.132812 180.378906 159.167969 180.378906 160.488281 Z M 180.378906 160.488281 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 193.574219 150.261719 L 193.574219 154.113281 C 193.574219 154.585938 193.558594 155.03125 193.53125 155.449219 C 193.515625 155.851562 193.496094 156.167969 193.46875 156.40625 L 193.574219 156.40625 C 193.894531 155.933594 194.332031 155.539062 194.886719 155.21875 C 195.445312 154.898438 196.160156 154.738281 197.039062 154.738281 C 198.429688 154.738281 199.542969 155.226562 200.378906 156.199219 C 201.226562 157.15625 201.652344 158.59375 201.652344 160.507812 C 201.652344 162.425781 201.226562 163.867188 200.378906 164.839844 C 199.53125 165.8125 198.417969 166.296875 197.039062 166.296875 C 196.160156 166.296875 195.445312 166.140625 194.886719 165.820312 C 194.332031 165.5 193.894531 165.117188 193.574219 164.675781 L 193.425781 164.675781 L 193.050781 166.089844 L 191.734375 166.089844 L 191.734375 150.261719 Z M 196.726562 156.261719 C 195.542969 156.261719 194.722656 156.601562 194.261719 157.28125 C 193.804688 157.960938 193.574219 159.015625 193.574219 160.445312 L 193.574219 160.53125 C 193.574219 161.902344 193.796875 162.960938 194.242188 163.695312 C 194.699219 164.417969 195.542969 164.777344 196.765625 164.777344 C 197.769531 164.777344 198.511719 164.410156 199 163.675781 C 199.5 162.9375 199.753906 161.875 199.753906 160.488281 C 199.753906 157.667969 198.742188 156.261719 196.726562 156.261719 Z M 196.726562 156.261719 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 208.8125 154.738281 C 210.175781 154.738281 211.183594 155.039062 211.839844 155.636719 C 212.492188 156.230469 212.820312 157.183594 212.820312 158.488281 L 212.820312 166.089844 L 211.484375 166.089844 L 211.128906 164.507812 L 211.042969 164.507812 C 210.558594 165.117188 210.042969 165.570312 209.5 165.859375 C 208.972656 166.152344 208.234375 166.296875 207.289062 166.296875 C 206.273438 166.296875 205.429688 166.035156 204.761719 165.507812 C 204.09375 164.964844 203.761719 164.125 203.761719 162.988281 C 203.761719 161.875 204.199219 161.023438 205.074219 160.425781 C 205.953125 159.8125 207.300781 159.480469 209.125 159.425781 L 211.023438 159.363281 L 211.023438 158.695312 C 211.023438 157.765625 210.820312 157.121094 210.417969 156.761719 C 210.015625 156.398438 209.445312 156.21875 208.707031 156.21875 C 208.121094 156.21875 207.566406 156.308594 207.035156 156.488281 C 206.507812 156.65625 206.015625 156.851562 205.554688 157.070312 L 204.992188 155.699219 C 205.476562 155.433594 206.054688 155.210938 206.722656 155.03125 C 207.390625 154.835938 208.085938 154.738281 208.8125 154.738281 Z M 211.003906 160.632812 L 209.355469 160.695312 C 207.960938 160.75 206.996094 160.972656 206.453125 161.363281 C 205.921875 161.75 205.660156 162.300781 205.660156 163.007812 C 205.660156 163.632812 205.847656 164.089844 206.222656 164.382812 C 206.613281 164.675781 207.105469 164.820312 207.703125 164.820312 C 208.652344 164.820312 209.4375 164.5625 210.0625 164.050781 C 210.691406 163.523438 211.003906 162.714844 211.003906 161.632812 Z M 211.003906 160.632812 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 218.121094 150.261719 L 218.121094 154.113281 C 218.121094 154.585938 218.105469 155.03125 218.078125 155.449219 C 218.066406 155.851562 218.042969 156.167969 218.015625 156.40625 L 218.121094 156.40625 C 218.441406 155.933594 218.878906 155.539062 219.4375 155.21875 C 219.992188 154.898438 220.710938 154.738281 221.585938 154.738281 C 222.976562 154.738281 224.089844 155.226562 224.925781 156.199219 C 225.773438 157.15625 226.199219 158.59375 226.199219 160.507812 C 226.199219 162.425781 225.773438 163.867188 224.925781 164.839844 C 224.078125 165.8125 222.964844 166.296875 221.585938 166.296875 C 220.710938 166.296875 219.992188 166.140625 219.4375 165.820312 C 218.878906 165.5 218.441406 165.117188 218.121094 164.675781 L 217.976562 164.675781 L 217.597656 166.089844 L 216.285156 166.089844 L 216.285156 150.261719 Z M 221.273438 156.261719 C 220.089844 156.261719 219.269531 156.601562 218.808594 157.28125 C 218.351562 157.960938 218.121094 159.015625 218.121094 160.445312 L 218.121094 160.53125 C 218.121094 161.902344 218.34375 162.960938 218.789062 163.695312 C 219.25 164.417969 220.089844 164.777344 221.316406 164.777344 C 222.316406 164.777344 223.0625 164.410156 223.546875 163.675781 C 224.050781 162.9375 224.300781 161.875 224.300781 160.488281 C 224.300781 157.667969 223.289062 156.261719 221.273438 156.261719 Z M 221.273438 156.261719 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 230.957031 166.089844 L 229.121094 166.089844 L 229.121094 150.261719 L 230.957031 150.261719 Z M 230.957031 166.089844 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 232.753906 154.925781 L 234.714844 154.925781 L 237.136719 161.277344 C 237.347656 161.835938 237.535156 162.371094 237.699219 162.882812 C 237.867188 163.382812 237.992188 163.863281 238.078125 164.320312 L 238.160156 164.320312 C 238.242188 163.972656 238.375 163.523438 238.558594 162.964844 C 238.738281 162.398438 238.925781 161.828125 239.121094 161.257812 L 241.394531 154.925781 L 243.378906 154.925781 L 238.558594 167.632812 C 238.167969 168.6875 237.660156 169.527344 237.03125 170.152344 C 236.421875 170.777344 235.570312 171.089844 234.488281 171.089844 C 234.152344 171.089844 233.859375 171.066406 233.609375 171.027344 C 233.359375 171 233.144531 170.964844 232.960938 170.921875 L 232.960938 169.464844 C 233.117188 169.492188 233.296875 169.519531 233.503906 169.546875 C 233.726562 169.574219 233.957031 169.589844 234.195312 169.589844 C 234.835938 169.589844 235.347656 169.410156 235.738281 169.046875 C 236.140625 168.6875 236.457031 168.207031 236.679688 167.609375 L 237.261719 166.132812 Z M 232.753906 154.925781 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 252.417969 150.261719 L 252.417969 154.113281 C 252.417969 154.585938 252.402344 155.03125 252.375 155.449219 C 252.363281 155.851562 252.339844 156.167969 252.3125 156.40625 L 252.417969 156.40625 C 252.738281 155.933594 253.175781 155.539062 253.730469 155.21875 C 254.289062 154.898438 255.003906 154.738281 255.882812 154.738281 C 257.273438 154.738281 258.386719 155.226562 259.222656 156.199219 C 260.070312 157.15625 260.496094 158.59375 260.496094 160.507812 C 260.496094 162.425781 260.070312 163.867188 259.222656 164.839844 C 258.375 165.8125 257.261719 166.296875 255.882812 166.296875 C 255.003906 166.296875 254.289062 166.140625 253.730469 165.820312 C 253.175781 165.5 252.738281 165.117188 252.417969 164.675781 L 252.269531 164.675781 L 251.894531 166.089844 L 250.582031 166.089844 L 250.582031 150.261719 Z M 255.570312 156.261719 C 254.386719 156.261719 253.566406 156.601562 253.105469 157.28125 C 252.648438 157.960938 252.417969 159.015625 252.417969 160.445312 L 252.417969 160.53125 C 252.417969 161.902344 252.640625 162.960938 253.085938 163.695312 C 253.542969 164.417969 254.386719 164.777344 255.609375 164.777344 C 256.613281 164.777344 257.355469 164.410156 257.84375 163.675781 C 258.34375 162.9375 258.597656 161.875 258.597656 160.488281 C 258.597656 157.667969 257.585938 156.261719 255.570312 156.261719 Z M 255.570312 156.261719 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 265.253906 166.089844 L 263.417969 166.089844 L 263.417969 150.261719 L 265.253906 150.261719 Z M 265.253906 166.089844 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 278.53125 160.488281 C 278.53125 162.335938 278.058594 163.765625 277.109375 164.777344 C 276.179688 165.792969 274.914062 166.296875 273.3125 166.296875 C 272.324219 166.296875 271.441406 166.078125 270.660156 165.632812 C 269.894531 165.171875 269.289062 164.515625 268.84375 163.652344 C 268.398438 162.777344 268.175781 161.722656 268.175781 160.488281 C 268.175781 158.640625 268.644531 157.21875 269.574219 156.21875 C 270.507812 155.21875 271.773438 154.71875 273.375 154.71875 C 274.390625 154.71875 275.28125 154.949219 276.046875 155.40625 C 276.824219 155.851562 277.429688 156.503906 277.863281 157.363281 C 278.308594 158.210938 278.53125 159.253906 278.53125 160.488281 Z M 270.078125 160.488281 C 270.078125 161.808594 270.335938 162.855469 270.847656 163.632812 C 271.378906 164.394531 272.210938 164.777344 273.355469 164.777344 C 274.480469 164.777344 275.308594 164.394531 275.835938 163.632812 C 276.367188 162.855469 276.632812 161.808594 276.632812 160.488281 C 276.632812 159.167969 276.367188 158.132812 275.835938 157.382812 C 275.308594 156.636719 274.472656 156.261719 273.332031 156.261719 C 272.191406 156.261719 271.363281 156.636719 270.847656 157.382812 C 270.335938 158.132812 270.078125 159.167969 270.078125 160.488281 Z M 270.078125 160.488281 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 285.921875 166.296875 C 284.933594 166.296875 284.046875 166.097656 283.269531 165.695312 C 282.503906 165.292969 281.898438 164.667969 281.453125 163.820312 C 281.023438 162.972656 280.804688 161.890625 280.804688 160.570312 C 280.804688 159.195312 281.035156 158.078125 281.496094 157.21875 C 281.953125 156.355469 282.574219 155.726562 283.351562 155.324219 C 284.144531 154.921875 285.042969 154.71875 286.046875 154.71875 C 286.617188 154.71875 287.164062 154.78125 287.695312 154.90625 C 288.222656 155.015625 288.65625 155.15625 288.988281 155.324219 L 288.425781 156.84375 C 288.089844 156.71875 287.703125 156.601562 287.257812 156.488281 C 286.8125 156.378906 286.394531 156.324219 286.003906 156.324219 C 283.804688 156.324219 282.707031 157.730469 282.707031 160.550781 C 282.707031 161.898438 282.96875 162.929688 283.5 163.652344 C 284.042969 164.363281 284.839844 164.714844 285.898438 164.714844 C 286.511719 164.714844 287.046875 164.652344 287.507812 164.527344 C 287.980469 164.402344 288.410156 164.25 288.800781 164.070312 L 288.800781 165.695312 C 288.425781 165.890625 288.007812 166.035156 287.546875 166.132812 C 287.101562 166.242188 286.558594 166.296875 285.921875 166.296875 Z M 285.921875 166.296875 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 293.269531 150.261719 L 293.269531 158.53125 C 293.269531 158.753906 293.253906 159.042969 293.226562 159.40625 C 293.210938 159.765625 293.199219 160.078125 293.183594 160.34375 L 293.269531 160.34375 C 293.351562 160.230469 293.476562 160.070312 293.644531 159.863281 C 293.808594 159.65625 293.976562 159.445312 294.144531 159.238281 C 294.324219 159.015625 294.476562 158.835938 294.605469 158.695312 L 298.171875 154.925781 L 300.324219 154.925781 L 295.792969 159.695312 L 300.636719 166.089844 L 298.421875 166.089844 L 294.539062 160.882812 L 293.269531 161.988281 L 293.269531 166.089844 L 291.453125 166.089844 L 291.453125 150.261719 Z M 293.269531 150.261719 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 309.882812 163.007812 C 309.882812 164.089844 309.480469 164.910156 308.671875 165.464844 C 307.867188 166.019531 306.78125 166.296875 305.417969 166.296875 C 304.636719 166.296875 303.960938 166.234375 303.390625 166.109375 C 302.835938 165.984375 302.339844 165.8125 301.910156 165.589844 L 301.910156 163.925781 C 302.355469 164.144531 302.890625 164.355469 303.515625 164.550781 C 304.15625 164.730469 304.804688 164.820312 305.457031 164.820312 C 306.390625 164.820312 307.066406 164.675781 307.484375 164.382812 C 307.898438 164.078125 308.109375 163.675781 308.109375 163.175781 C 308.109375 162.898438 308.03125 162.648438 307.878906 162.425781 C 307.726562 162.203125 307.449219 161.980469 307.042969 161.757812 C 306.65625 161.535156 306.089844 161.285156 305.355469 161.007812 C 304.628906 160.730469 304.011719 160.453125 303.496094 160.175781 C 302.980469 159.898438 302.585938 159.566406 302.304688 159.175781 C 302.027344 158.785156 301.886719 158.289062 301.886719 157.675781 C 301.886719 156.730469 302.269531 156.003906 303.035156 155.488281 C 303.816406 154.976562 304.832031 154.71875 306.085938 154.71875 C 306.765625 154.71875 307.398438 154.789062 307.984375 154.925781 C 308.582031 155.050781 309.140625 155.234375 309.652344 155.46875 L 309.027344 156.925781 C 308.554688 156.730469 308.058594 156.566406 307.546875 156.425781 C 307.03125 156.289062 306.5 156.21875 305.960938 156.21875 C 305.207031 156.21875 304.628906 156.34375 304.226562 156.59375 C 303.835938 156.828125 303.640625 157.15625 303.640625 157.570312 C 303.640625 157.878906 303.734375 158.140625 303.914062 158.363281 C 304.09375 158.570312 304.394531 158.78125 304.8125 158.988281 C 305.242188 159.183594 305.8125 159.417969 306.523438 159.695312 C 307.230469 159.960938 307.835938 160.230469 308.339844 160.507812 C 308.839844 160.785156 309.222656 161.125 309.488281 161.527344 C 309.75 161.917969 309.882812 162.410156 309.882812 163.007812 Z M 309.882812 163.007812 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 26.726562 192.332031 C 25.738281 192.332031 24.855469 192.128906 24.078125 191.726562 C 23.3125 191.324219 22.707031 190.699219 22.261719 189.851562 C 21.828125 189.007812 21.613281 187.921875 21.613281 186.605469 C 21.613281 185.230469 21.84375 184.113281 22.300781 183.25 C 22.761719 182.390625 23.378906 181.757812 24.160156 181.355469 C 24.953125 180.953125 25.851562 180.753906 26.851562 180.753906 C 27.421875 180.753906 27.972656 180.816406 28.5 180.941406 C 29.03125 181.050781 29.460938 181.191406 29.796875 181.355469 L 29.230469 182.875 C 28.898438 182.75 28.507812 182.632812 28.0625 182.523438 C 27.617188 182.410156 27.199219 182.355469 26.8125 182.355469 C 24.613281 182.355469 23.511719 183.765625 23.511719 186.582031 C 23.511719 187.929688 23.777344 188.964844 24.304688 189.6875 C 24.847656 190.394531 25.648438 190.75 26.707031 190.75 C 27.320312 190.75 27.855469 190.6875 28.3125 190.5625 C 28.785156 190.4375 29.21875 190.285156 29.609375 190.101562 L 29.609375 191.726562 C 29.230469 191.921875 28.816406 192.066406 28.355469 192.164062 C 27.910156 192.277344 27.367188 192.332031 26.726562 192.332031 Z M 26.726562 192.332031 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 41.984375 186.519531 C 41.984375 188.367188 41.511719 189.796875 40.566406 190.8125 C 39.632812 191.824219 38.367188 192.332031 36.769531 192.332031 C 35.78125 192.332031 34.894531 192.109375 34.117188 191.664062 C 33.351562 191.207031 32.746094 190.546875 32.300781 189.6875 C 31.855469 188.8125 31.632812 187.757812 31.632812 186.519531 C 31.632812 184.675781 32.097656 183.25 33.03125 182.25 C 33.964844 181.253906 35.230469 180.753906 36.832031 180.753906 C 37.847656 180.753906 38.738281 180.980469 39.503906 181.441406 C 40.28125 181.882812 40.886719 182.535156 41.316406 183.398438 C 41.761719 184.246094 41.984375 185.285156 41.984375 186.519531 Z M 33.53125 186.519531 C 33.53125 187.839844 33.789062 188.886719 34.304688 189.667969 C 34.832031 190.429688 35.667969 190.8125 36.808594 190.8125 C 37.9375 190.8125 38.765625 190.429688 39.292969 189.667969 C 39.820312 188.886719 40.085938 187.839844 40.085938 186.519531 C 40.085938 185.203125 39.820312 184.167969 39.292969 183.417969 C 38.765625 182.667969 37.929688 182.292969 36.789062 182.292969 C 35.648438 182.292969 34.820312 182.667969 34.304688 183.417969 C 33.789062 184.167969 33.53125 185.203125 33.53125 186.519531 Z M 33.53125 186.519531 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 50.273438 180.753906 C 51.609375 180.753906 52.617188 181.078125 53.300781 181.730469 C 53.980469 182.371094 54.324219 183.410156 54.324219 184.855469 L 54.324219 192.125 L 52.507812 192.125 L 52.507812 184.980469 C 52.507812 183.1875 51.671875 182.292969 50 182.292969 C 48.761719 182.292969 47.90625 182.640625 47.433594 183.335938 C 46.960938 184.027344 46.726562 185.027344 46.726562 186.332031 L 46.726562 192.125 L 44.886719 192.125 L 44.886719 180.960938 L 46.371094 180.960938 L 46.640625 182.480469 L 46.746094 182.480469 C 47.105469 181.898438 47.609375 181.46875 48.25 181.191406 C 48.886719 180.898438 49.5625 180.753906 50.273438 180.753906 Z M 50.273438 180.753906 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 61.523438 190.832031 C 61.800781 190.832031 62.085938 190.8125 62.378906 190.769531 C 62.671875 190.714844 62.910156 190.660156 63.089844 190.601562 L 63.089844 192 C 62.894531 192.097656 62.617188 192.171875 62.253906 192.226562 C 61.894531 192.296875 61.546875 192.332031 61.210938 192.332031 C 60.625 192.332031 60.082031 192.234375 59.582031 192.039062 C 59.097656 191.832031 58.699219 191.476562 58.394531 190.976562 C 58.085938 190.476562 57.933594 189.777344 57.933594 188.875 L 57.933594 182.375 L 56.347656 182.375 L 56.347656 181.503906 L 57.953125 180.773438 L 58.683594 178.398438 L 59.769531 178.398438 L 59.769531 180.960938 L 63.007812 180.960938 L 63.007812 182.375 L 59.769531 182.375 L 59.769531 188.832031 C 59.769531 189.511719 59.929688 190.019531 60.25 190.351562 C 60.585938 190.671875 61.007812 190.832031 61.523438 190.832031 Z M 61.523438 190.832031 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 69.644531 180.753906 C 70.605469 180.753906 71.425781 180.960938 72.105469 181.378906 C 72.804688 181.792969 73.332031 182.382812 73.695312 183.148438 C 74.070312 183.898438 74.257812 184.777344 74.257812 185.792969 L 74.257812 186.894531 L 66.597656 186.894531 C 66.625 188.160156 66.945312 189.125 67.558594 189.792969 C 68.183594 190.445312 69.054688 190.769531 70.167969 190.769531 C 70.875 190.769531 71.503906 190.707031 72.042969 190.582031 C 72.601562 190.445312 73.171875 190.25 73.757812 190 L 73.757812 191.601562 C 73.1875 191.851562 72.621094 192.035156 72.066406 192.144531 C 71.507812 192.269531 70.847656 192.332031 70.082031 192.332031 C 69.023438 192.332031 68.085938 192.117188 67.265625 191.6875 C 66.457031 191.253906 65.824219 190.617188 65.363281 189.769531 C 64.917969 188.910156 64.695312 187.859375 64.695312 186.625 C 64.695312 185.402344 64.898438 184.355469 65.300781 183.480469 C 65.71875 182.605469 66.296875 181.933594 67.035156 181.460938 C 67.785156 180.988281 68.65625 180.753906 69.644531 180.753906 Z M 69.625 182.25 C 68.746094 182.25 68.050781 182.535156 67.535156 183.105469 C 67.035156 183.660156 66.734375 184.4375 66.636719 185.4375 L 72.335938 185.4375 C 72.324219 184.492188 72.101562 183.730469 71.667969 183.148438 C 71.238281 182.550781 70.554688 182.25 69.625 182.25 Z M 69.625 182.25 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 82.480469 180.753906 C 83.816406 180.753906 84.828125 181.078125 85.507812 181.730469 C 86.191406 182.371094 86.53125 183.410156 86.53125 184.855469 L 86.53125 192.125 L 84.714844 192.125 L 84.714844 184.980469 C 84.714844 183.1875 83.878906 182.292969 82.210938 182.292969 C 80.972656 182.292969 80.117188 182.640625 79.644531 183.335938 C 79.167969 184.027344 78.933594 185.027344 78.933594 186.332031 L 78.933594 192.125 L 77.097656 192.125 L 77.097656 180.960938 L 78.578125 180.960938 L 78.851562 182.480469 L 78.953125 182.480469 C 79.316406 181.898438 79.816406 181.46875 80.457031 181.191406 C 81.097656 180.898438 81.773438 180.753906 82.480469 180.753906 Z M 82.480469 180.753906 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 93.734375 190.832031 C 94.011719 190.832031 94.296875 190.8125 94.589844 190.769531 C 94.882812 190.714844 95.117188 190.660156 95.296875 190.601562 L 95.296875 192 C 95.105469 192.097656 94.824219 192.171875 94.464844 192.226562 C 94.101562 192.296875 93.753906 192.332031 93.417969 192.332031 C 92.835938 192.332031 92.292969 192.234375 91.792969 192.039062 C 91.304688 191.832031 90.90625 191.476562 90.601562 190.976562 C 90.296875 190.476562 90.140625 189.777344 90.140625 188.875 L 90.140625 182.375 L 88.554688 182.375 L 88.554688 181.503906 L 90.164062 180.773438 L 90.894531 178.398438 L 91.980469 178.398438 L 91.980469 180.960938 L 95.214844 180.960938 L 95.214844 182.375 L 91.980469 182.375 L 91.980469 188.832031 C 91.980469 189.511719 92.140625 190.019531 92.460938 190.351562 C 92.792969 190.671875 93.21875 190.832031 93.734375 190.832031 Z M 93.734375 190.832031 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 110.246094 189.042969 C 110.246094 190.125 109.839844 190.945312 109.035156 191.5 C 108.226562 192.054688 107.140625 192.332031 105.777344 192.332031 C 104.996094 192.332031 104.324219 192.269531 103.753906 192.144531 C 103.195312 192.019531 102.703125 191.847656 102.269531 191.625 L 102.269531 189.957031 C 102.714844 190.179688 103.25 190.386719 103.878906 190.582031 C 104.519531 190.761719 105.164062 190.851562 105.820312 190.851562 C 106.75 190.851562 107.425781 190.707031 107.84375 190.414062 C 108.261719 190.109375 108.46875 189.707031 108.46875 189.207031 C 108.46875 188.929688 108.394531 188.679688 108.242188 188.457031 C 108.085938 188.234375 107.808594 188.015625 107.40625 187.792969 C 107.015625 187.570312 106.453125 187.320312 105.714844 187.042969 C 104.992188 186.765625 104.371094 186.488281 103.855469 186.207031 C 103.34375 185.929688 102.945312 185.597656 102.667969 185.210938 C 102.386719 184.820312 102.25 184.320312 102.25 183.710938 C 102.25 182.765625 102.632812 182.035156 103.398438 181.523438 C 104.175781 181.007812 105.191406 180.753906 106.445312 180.753906 C 107.128906 180.753906 107.761719 180.820312 108.34375 180.960938 C 108.941406 181.085938 109.5 181.265625 110.015625 181.503906 L 109.386719 182.960938 C 108.914062 182.765625 108.421875 182.597656 107.90625 182.460938 C 107.390625 182.320312 106.863281 182.25 106.320312 182.25 C 105.570312 182.25 104.992188 182.375 104.585938 182.625 C 104.199219 182.863281 104.003906 183.1875 104.003906 183.605469 C 104.003906 183.910156 104.09375 184.175781 104.273438 184.398438 C 104.457031 184.605469 104.753906 184.8125 105.171875 185.023438 C 105.601562 185.214844 106.171875 185.453125 106.882812 185.730469 C 107.59375 185.992188 108.199219 186.265625 108.699219 186.542969 C 109.199219 186.820312 109.582031 187.160156 109.847656 187.5625 C 110.113281 187.953125 110.246094 188.445312 110.246094 189.042969 Z M 110.246094 189.042969 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 117.277344 180.753906 C 118.238281 180.753906 119.058594 180.960938 119.742188 181.378906 C 120.4375 181.792969 120.964844 182.382812 121.328125 183.148438 C 121.703125 183.898438 121.890625 184.777344 121.890625 185.792969 L 121.890625 186.894531 L 114.230469 186.894531 C 114.257812 188.160156 114.578125 189.125 115.191406 189.792969 C 115.816406 190.445312 116.6875 190.769531 117.800781 190.769531 C 118.511719 190.769531 119.136719 190.707031 119.679688 190.582031 C 120.234375 190.445312 120.804688 190.25 121.390625 190 L 121.390625 191.601562 C 120.820312 191.851562 120.257812 192.035156 119.699219 192.144531 C 119.144531 192.269531 118.484375 192.332031 117.71875 192.332031 C 116.660156 192.332031 115.71875 192.117188 114.898438 191.6875 C 114.09375 191.253906 113.457031 190.617188 113 189.769531 C 112.554688 188.910156 112.332031 187.859375 112.332031 186.625 C 112.332031 185.402344 112.535156 184.355469 112.9375 183.480469 C 113.355469 182.605469 113.933594 181.933594 114.667969 181.460938 C 115.421875 180.988281 116.289062 180.753906 117.277344 180.753906 Z M 117.257812 182.25 C 116.382812 182.25 115.683594 182.535156 115.171875 183.105469 C 114.667969 183.660156 114.371094 184.4375 114.273438 185.4375 L 119.972656 185.4375 C 119.957031 184.492188 119.734375 183.730469 119.304688 183.148438 C 118.871094 182.550781 118.191406 182.25 117.257812 182.25 Z M 117.257812 182.25 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 129.949219 180.753906 C 130.15625 180.753906 130.378906 180.765625 130.617188 180.792969 C 130.867188 180.808594 131.082031 180.835938 131.265625 180.878906 L 131.035156 182.5625 C 130.855469 182.523438 130.652344 182.488281 130.429688 182.460938 C 130.21875 182.433594 130.019531 182.417969 129.824219 182.417969 C 129.253906 182.417969 128.71875 182.578125 128.214844 182.898438 C 127.714844 183.203125 127.3125 183.640625 127.007812 184.210938 C 126.714844 184.765625 126.566406 185.417969 126.566406 186.167969 L 126.566406 192.125 L 124.730469 192.125 L 124.730469 180.960938 L 126.234375 180.960938 L 126.441406 183 L 126.527344 183 C 126.886719 182.390625 127.355469 181.863281 127.925781 181.417969 C 128.496094 180.972656 129.171875 180.753906 129.949219 180.753906 Z M 129.949219 180.753906 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 135.816406 192.125 L 131.578125 180.960938 L 133.539062 180.960938 L 135.917969 187.542969 C 136.03125 187.847656 136.148438 188.1875 136.273438 188.5625 C 136.398438 188.9375 136.511719 189.296875 136.609375 189.644531 C 136.707031 189.976562 136.773438 190.261719 136.816406 190.5 L 136.898438 190.5 C 136.957031 190.261719 137.03125 189.972656 137.128906 189.625 C 137.242188 189.277344 137.359375 188.917969 137.484375 188.542969 C 137.625 188.167969 137.742188 187.832031 137.839844 187.542969 L 140.21875 180.960938 L 142.179688 180.960938 L 137.921875 192.125 Z M 135.816406 192.125 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 148.277344 180.753906 C 149.238281 180.753906 150.058594 180.960938 150.738281 181.378906 C 151.4375 181.792969 151.964844 182.382812 152.328125 183.148438 C 152.703125 183.898438 152.890625 184.777344 152.890625 185.792969 L 152.890625 186.894531 L 145.230469 186.894531 C 145.257812 188.160156 145.578125 189.125 146.1875 189.792969 C 146.816406 190.445312 147.683594 190.769531 148.796875 190.769531 C 149.507812 190.769531 150.132812 190.707031 150.675781 190.582031 C 151.234375 190.445312 151.804688 190.25 152.390625 190 L 152.390625 191.601562 C 151.816406 191.851562 151.253906 192.035156 150.699219 192.144531 C 150.140625 192.269531 149.480469 192.332031 148.714844 192.332031 C 147.65625 192.332031 146.71875 192.117188 145.898438 191.6875 C 145.089844 191.253906 144.457031 190.617188 143.996094 189.769531 C 143.550781 188.910156 143.328125 187.859375 143.328125 186.625 C 143.328125 185.402344 143.53125 184.355469 143.933594 183.480469 C 144.351562 182.605469 144.929688 181.933594 145.667969 181.460938 C 146.417969 180.988281 147.289062 180.753906 148.277344 180.753906 Z M 148.253906 182.25 C 147.378906 182.25 146.683594 182.535156 146.167969 183.105469 C 145.667969 183.660156 145.367188 184.4375 145.269531 185.4375 L 150.96875 185.4375 C 150.957031 184.492188 150.734375 183.730469 150.300781 183.148438 C 149.871094 182.550781 149.1875 182.25 148.253906 182.25 Z M 148.253906 182.25 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 159.695312 192.332031 C 158.304688 192.332031 157.191406 191.851562 156.355469 190.894531 C 155.519531 189.921875 155.101562 188.480469 155.101562 186.5625 C 155.101562 184.648438 155.519531 183.203125 156.355469 182.230469 C 157.203125 181.246094 158.324219 180.753906 159.714844 180.753906 C 160.578125 180.753906 161.28125 180.910156 161.824219 181.230469 C 162.378906 181.550781 162.832031 181.9375 163.179688 182.398438 L 163.304688 182.398438 C 163.292969 182.21875 163.265625 181.953125 163.222656 181.605469 C 163.195312 181.246094 163.179688 180.960938 163.179688 180.753906 L 163.179688 176.296875 L 165.019531 176.296875 L 165.019531 192.125 L 163.535156 192.125 L 163.265625 190.625 L 163.179688 190.625 C 162.847656 191.097656 162.402344 191.5 161.84375 191.832031 C 161.289062 192.164062 160.570312 192.332031 159.695312 192.332031 Z M 159.988281 190.8125 C 161.167969 190.8125 161.996094 190.492188 162.472656 189.851562 C 162.957031 189.199219 163.203125 188.222656 163.203125 186.917969 L 163.203125 186.582031 C 163.203125 185.195312 162.972656 184.132812 162.511719 183.398438 C 162.054688 182.648438 161.203125 182.273438 159.964844 182.273438 C 158.976562 182.273438 158.234375 182.667969 157.734375 183.460938 C 157.246094 184.238281 157.003906 185.285156 157.003906 186.605469 C 157.003906 187.9375 157.246094 188.972656 157.734375 189.707031 C 158.234375 190.445312 158.984375 190.8125 159.988281 190.8125 Z M 159.988281 190.8125 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 175.832031 176.296875 L 175.832031 180.148438 C 175.832031 180.621094 175.816406 181.066406 175.789062 181.480469 C 175.773438 181.882812 175.753906 182.203125 175.726562 182.4375 L 175.832031 182.4375 C 176.148438 181.96875 176.589844 181.570312 177.144531 181.253906 C 177.703125 180.933594 178.417969 180.773438 179.296875 180.773438 C 180.6875 180.773438 181.800781 181.257812 182.636719 182.230469 C 183.484375 183.1875 183.910156 184.625 183.910156 186.542969 C 183.910156 188.457031 183.484375 189.902344 182.636719 190.875 C 181.785156 191.847656 180.671875 192.332031 179.296875 192.332031 C 178.417969 192.332031 177.703125 192.171875 177.144531 191.851562 C 176.589844 191.535156 176.148438 191.152344 175.832031 190.707031 L 175.683594 190.707031 L 175.308594 192.125 L 173.992188 192.125 L 173.992188 176.296875 Z M 178.980469 182.292969 C 177.800781 182.292969 176.976562 182.632812 176.519531 183.3125 C 176.058594 183.996094 175.832031 185.050781 175.832031 186.480469 L 175.832031 186.5625 C 175.832031 187.9375 176.054688 188.992188 176.5 189.730469 C 176.957031 190.449219 177.800781 190.8125 179.023438 190.8125 C 180.027344 190.8125 180.769531 190.445312 181.257812 189.707031 C 181.757812 188.972656 182.007812 187.910156 182.007812 186.519531 C 182.007812 183.703125 181 182.292969 178.980469 182.292969 Z M 178.980469 182.292969 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 184.660156 180.960938 L 186.621094 180.960938 L 189.042969 187.3125 C 189.253906 187.867188 189.441406 188.402344 189.605469 188.917969 C 189.773438 189.417969 189.898438 189.894531 189.984375 190.351562 L 190.066406 190.351562 C 190.148438 190.007812 190.28125 189.554688 190.464844 189 C 190.644531 188.429688 190.832031 187.859375 191.027344 187.292969 L 193.300781 180.960938 L 195.285156 180.960938 L 190.464844 193.664062 C 190.074219 194.71875 189.566406 195.558594 188.9375 196.183594 C 188.328125 196.808594 187.476562 197.121094 186.394531 197.121094 C 186.058594 197.121094 185.765625 197.101562 185.515625 197.058594 C 185.265625 197.03125 185.050781 196.996094 184.867188 196.957031 L 184.867188 195.496094 C 185.023438 195.523438 185.203125 195.554688 185.410156 195.582031 C 185.632812 195.609375 185.863281 195.621094 186.101562 195.621094 C 186.742188 195.621094 187.253906 195.441406 187.644531 195.082031 C 188.046875 194.71875 188.363281 194.242188 188.585938 193.644531 L 189.167969 192.164062 Z M 184.660156 180.960938 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 207.640625 182.375 L 204.824219 182.375 L 204.824219 192.125 L 202.988281 192.125 L 202.988281 182.375 L 201.023438 182.375 L 201.023438 181.523438 L 202.988281 180.898438 L 202.988281 180.253906 C 202.988281 178.808594 203.308594 177.773438 203.949219 177.148438 C 204.585938 176.511719 205.476562 176.191406 206.621094 176.191406 C 207.066406 176.191406 207.46875 176.234375 207.832031 176.316406 C 208.207031 176.386719 208.527344 176.46875 208.789062 176.566406 L 208.308594 178.003906 C 208.085938 177.933594 207.832031 177.863281 207.539062 177.792969 C 207.246094 177.726562 206.945312 177.691406 206.640625 177.691406 C 206.027344 177.691406 205.570312 177.898438 205.261719 178.316406 C 204.96875 178.71875 204.824219 179.355469 204.824219 180.230469 L 204.824219 180.960938 L 207.640625 180.960938 Z M 207.640625 182.375 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 213.90625 180.773438 C 215.269531 180.773438 216.277344 181.070312 216.929688 181.667969 C 217.585938 182.265625 217.914062 183.214844 217.914062 184.523438 L 217.914062 192.125 L 216.578125 192.125 L 216.222656 190.539062 L 216.136719 190.539062 C 215.652344 191.152344 215.136719 191.601562 214.59375 191.894531 C 214.066406 192.1875 213.328125 192.332031 212.378906 192.332031 C 211.363281 192.332031 210.523438 192.066406 209.855469 191.539062 C 209.1875 191 208.851562 190.160156 208.851562 189.019531 C 208.851562 187.910156 209.292969 187.054688 210.167969 186.457031 C 211.042969 185.847656 212.394531 185.515625 214.21875 185.460938 L 216.117188 185.398438 L 216.117188 184.730469 C 216.117188 183.800781 215.914062 183.152344 215.511719 182.792969 C 215.109375 182.433594 214.539062 182.25 213.800781 182.25 C 213.214844 182.25 212.660156 182.34375 212.128906 182.523438 C 211.601562 182.6875 211.105469 182.882812 210.648438 183.105469 L 210.085938 181.730469 C 210.570312 181.46875 211.148438 181.246094 211.816406 181.066406 C 212.484375 180.871094 213.179688 180.773438 213.90625 180.773438 Z M 216.097656 186.667969 L 214.445312 186.730469 C 213.054688 186.785156 212.089844 187.007812 211.546875 187.394531 C 211.015625 187.785156 210.753906 188.332031 210.753906 189.042969 C 210.753906 189.667969 210.941406 190.125 211.316406 190.414062 C 211.707031 190.707031 212.199219 190.851562 212.796875 190.851562 C 213.746094 190.851562 214.53125 190.597656 215.15625 190.082031 C 215.78125 189.554688 216.097656 188.75 216.097656 187.667969 Z M 216.097656 186.667969 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 225.867188 192.332031 C 224.878906 192.332031 223.992188 192.128906 223.214844 191.726562 C 222.449219 191.324219 221.84375 190.699219 221.398438 189.851562 C 220.96875 189.007812 220.75 187.921875 220.75 186.605469 C 220.75 185.230469 220.980469 184.113281 221.441406 183.25 C 221.898438 182.390625 222.519531 181.757812 223.296875 181.355469 C 224.089844 180.953125 224.988281 180.753906 225.992188 180.753906 C 226.5625 180.753906 227.109375 180.816406 227.640625 180.941406 C 228.167969 181.050781 228.601562 181.191406 228.933594 181.355469 L 228.371094 182.875 C 228.035156 182.75 227.648438 182.632812 227.203125 182.523438 C 226.757812 182.410156 226.339844 182.355469 225.949219 182.355469 C 223.75 182.355469 222.652344 183.765625 222.652344 186.582031 C 222.652344 187.929688 222.914062 188.964844 223.445312 189.6875 C 223.988281 190.394531 224.785156 190.75 225.84375 190.75 C 226.457031 190.75 226.992188 190.6875 227.453125 190.5625 C 227.925781 190.4375 228.355469 190.285156 228.746094 190.101562 L 228.746094 191.726562 C 228.371094 191.921875 227.953125 192.066406 227.492188 192.164062 C 227.046875 192.277344 226.503906 192.332031 225.867188 192.332031 Z M 225.867188 192.332031 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 235.71875 180.753906 C 236.679688 180.753906 237.5 180.960938 238.179688 181.378906 C 238.875 181.792969 239.40625 182.382812 239.765625 183.148438 C 240.144531 183.898438 240.332031 184.777344 240.332031 185.792969 L 240.332031 186.894531 L 232.671875 186.894531 C 232.699219 188.160156 233.019531 189.125 233.628906 189.792969 C 234.257812 190.445312 235.125 190.769531 236.238281 190.769531 C 236.949219 190.769531 237.574219 190.707031 238.117188 190.582031 C 238.675781 190.445312 239.246094 190.25 239.828125 190 L 239.828125 191.601562 C 239.257812 191.851562 238.695312 192.035156 238.140625 192.144531 C 237.582031 192.269531 236.921875 192.332031 236.15625 192.332031 C 235.097656 192.332031 234.160156 192.117188 233.339844 191.6875 C 232.53125 191.253906 231.898438 190.617188 231.4375 189.769531 C 230.992188 188.910156 230.769531 187.859375 230.769531 186.625 C 230.769531 185.402344 230.972656 184.355469 231.375 183.480469 C 231.792969 182.605469 232.371094 181.933594 233.109375 181.460938 C 233.859375 180.988281 234.730469 180.753906 235.71875 180.753906 Z M 235.695312 182.25 C 234.820312 182.25 234.125 182.535156 233.609375 183.105469 C 233.109375 183.660156 232.808594 184.4375 232.710938 185.4375 L 238.410156 185.4375 C 238.398438 184.492188 238.175781 183.730469 237.742188 183.148438 C 237.3125 182.550781 236.628906 182.25 235.695312 182.25 Z M 235.695312 182.25 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 245.007812 176.296875 L 245.007812 180.148438 C 245.007812 180.621094 244.992188 181.066406 244.964844 181.480469 C 244.953125 181.882812 244.929688 182.203125 244.902344 182.4375 L 245.007812 182.4375 C 245.328125 181.96875 245.765625 181.570312 246.320312 181.253906 C 246.878906 180.933594 247.59375 180.773438 248.472656 180.773438 C 249.863281 180.773438 250.976562 181.257812 251.8125 182.230469 C 252.660156 183.1875 253.085938 184.625 253.085938 186.542969 C 253.085938 188.457031 252.660156 189.902344 251.8125 190.875 C 250.964844 191.847656 249.851562 192.332031 248.472656 192.332031 C 247.59375 192.332031 246.878906 192.171875 246.320312 191.851562 C 245.765625 191.535156 245.328125 191.152344 245.007812 190.707031 L 244.859375 190.707031 L 244.484375 192.125 L 243.167969 192.125 L 243.167969 176.296875 Z M 248.160156 182.292969 C 246.976562 182.292969 246.15625 182.632812 245.695312 183.3125 C 245.238281 183.996094 245.007812 185.050781 245.007812 186.480469 L 245.007812 186.5625 C 245.007812 187.9375 245.230469 188.992188 245.675781 189.730469 C 246.132812 190.449219 246.976562 190.8125 248.199219 190.8125 C 249.203125 190.8125 249.945312 190.445312 250.433594 189.707031 C 250.933594 188.972656 251.1875 187.910156 251.1875 186.519531 C 251.1875 183.703125 250.175781 182.292969 248.160156 182.292969 Z M 248.160156 182.292969 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 265.734375 186.519531 C 265.734375 188.367188 265.261719 189.796875 264.316406 190.8125 C 263.382812 191.824219 262.117188 192.332031 260.515625 192.332031 C 259.527344 192.332031 258.644531 192.109375 257.867188 191.664062 C 257.101562 191.207031 256.496094 190.546875 256.050781 189.6875 C 255.605469 188.8125 255.382812 187.757812 255.382812 186.519531 C 255.382812 184.675781 255.847656 183.25 256.78125 182.25 C 257.710938 181.253906 258.980469 180.753906 260.578125 180.753906 C 261.59375 180.753906 262.484375 180.980469 263.25 181.441406 C 264.03125 181.882812 264.636719 182.535156 265.066406 183.398438 C 265.511719 184.246094 265.734375 185.285156 265.734375 186.519531 Z M 257.28125 186.519531 C 257.28125 187.839844 257.539062 188.886719 258.054688 189.667969 C 258.582031 190.429688 259.417969 190.8125 260.558594 190.8125 C 261.683594 190.8125 262.511719 190.429688 263.042969 189.667969 C 263.570312 188.886719 263.835938 187.839844 263.835938 186.519531 C 263.835938 185.203125 263.570312 184.167969 263.042969 183.417969 C 262.511719 182.667969 261.679688 182.292969 260.539062 182.292969 C 259.394531 182.292969 258.566406 182.667969 258.054688 183.417969 C 257.539062 184.167969 257.28125 185.203125 257.28125 186.519531 Z M 257.28125 186.519531 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 278.363281 186.519531 C 278.363281 188.367188 277.890625 189.796875 276.945312 190.8125 C 276.011719 191.824219 274.746094 192.332031 273.144531 192.332031 C 272.15625 192.332031 271.273438 192.109375 270.492188 191.664062 C 269.730469 191.207031 269.125 190.546875 268.679688 189.6875 C 268.234375 188.8125 268.011719 187.757812 268.011719 186.519531 C 268.011719 184.675781 268.476562 183.25 269.410156 182.25 C 270.339844 181.253906 271.605469 180.753906 273.207031 180.753906 C 274.222656 180.753906 275.113281 180.980469 275.878906 181.441406 C 276.660156 181.882812 277.265625 182.535156 277.695312 183.398438 C 278.140625 184.246094 278.363281 185.285156 278.363281 186.519531 Z M 269.910156 186.519531 C 269.910156 187.839844 270.167969 188.886719 270.683594 189.667969 C 271.210938 190.429688 272.046875 190.8125 273.1875 190.8125 C 274.3125 190.8125 275.140625 190.429688 275.671875 189.667969 C 276.199219 188.886719 276.464844 187.839844 276.464844 186.519531 C 276.464844 185.203125 276.199219 184.167969 275.671875 183.417969 C 275.140625 182.667969 274.308594 182.292969 273.164062 182.292969 C 272.023438 182.292969 271.195312 182.667969 270.683594 183.417969 C 270.167969 184.167969 269.910156 185.203125 269.910156 186.519531 Z M 269.910156 186.519531 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 283.082031 176.296875 L 283.082031 184.5625 C 283.082031 184.785156 283.066406 185.078125 283.039062 185.4375 C 283.027344 185.800781 283.011719 186.113281 282.996094 186.375 L 283.082031 186.375 C 283.164062 186.265625 283.289062 186.105469 283.457031 185.894531 C 283.625 185.6875 283.789062 185.480469 283.957031 185.273438 C 284.140625 185.050781 284.292969 184.867188 284.417969 184.730469 L 287.988281 180.960938 L 290.136719 180.960938 L 285.605469 185.730469 L 290.449219 192.125 L 288.238281 192.125 L 284.355469 186.917969 L 283.082031 188.019531 L 283.082031 192.125 L 281.265625 192.125 L 281.265625 176.296875 Z M 283.082031 176.296875 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 296.898438 187.355469 L 296.898438 185.730469 L 301.953125 185.730469 L 301.953125 187.355469 Z M 296.898438 187.355469 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 31.382812 218.136719 L 29.460938 211.847656 C 29.28125 211.277344 29.121094 210.722656 28.980469 210.179688 C 28.855469 209.625 28.757812 209.195312 28.6875 208.890625 L 28.605469 208.890625 C 28.550781 209.195312 28.460938 209.625 28.335938 210.179688 C 28.210938 210.722656 28.050781 211.285156 27.855469 211.867188 L 25.851562 218.136719 L 23.761719 218.136719 L 20.695312 206.972656 L 22.59375 206.972656 L 24.140625 212.929688 C 24.292969 213.527344 24.4375 214.128906 24.578125 214.742188 C 24.714844 215.351562 24.8125 215.859375 24.871094 216.261719 L 24.953125 216.261719 C 25.007812 216.027344 25.070312 215.734375 25.140625 215.386719 C 25.222656 215.039062 25.316406 214.679688 25.414062 214.304688 C 25.507812 213.914062 25.605469 213.566406 25.703125 213.261719 L 27.6875 206.972656 L 29.691406 206.972656 L 31.613281 213.261719 C 31.765625 213.734375 31.910156 214.25 32.050781 214.804688 C 32.203125 215.359375 32.308594 215.839844 32.363281 216.242188 L 32.445312 216.242188 C 32.488281 215.894531 32.578125 215.414062 32.71875 214.804688 C 32.871094 214.191406 33.03125 213.566406 33.199219 212.929688 L 34.765625 206.972656 L 36.640625 206.972656 L 33.53125 218.136719 Z M 31.382812 218.136719 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 40.484375 202.328125 L 40.484375 206.972656 C 40.484375 207.527344 40.449219 208.050781 40.378906 208.535156 L 40.503906 208.535156 C 40.867188 207.964844 41.351562 207.535156 41.964844 207.242188 C 42.589844 206.953125 43.265625 206.804688 43.988281 206.804688 C 45.355469 206.804688 46.375 207.132812 47.058594 207.785156 C 47.742188 208.425781 48.082031 209.457031 48.082031 210.886719 L 48.082031 218.15625 L 46.265625 218.15625 L 46.265625 211.011719 C 46.265625 209.222656 45.429688 208.328125 43.761719 208.328125 C 42.507812 208.328125 41.644531 208.679688 41.171875 209.390625 C 40.710938 210.082031 40.484375 211.082031 40.484375 212.386719 L 40.484375 218.15625 L 38.644531 218.15625 L 38.644531 202.328125 Z M 40.484375 202.328125 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 52.484375 202.808594 C 52.765625 202.808594 53.007812 202.90625 53.214844 203.097656 C 53.4375 203.28125 53.550781 203.570312 53.550781 203.972656 C 53.550781 204.363281 53.4375 204.65625 53.214844 204.847656 C 53.007812 205.042969 52.765625 205.140625 52.484375 205.140625 C 52.179688 205.140625 51.921875 205.042969 51.714844 204.847656 C 51.503906 204.65625 51.398438 204.363281 51.398438 203.972656 C 51.398438 203.570312 51.503906 203.28125 51.714844 203.097656 C 51.921875 202.90625 52.179688 202.808594 52.484375 202.808594 Z M 53.382812 206.992188 L 53.382812 218.15625 L 51.546875 218.15625 L 51.546875 206.992188 Z M 53.382812 206.992188 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 61.417969 218.367188 C 60.433594 218.367188 59.546875 218.164062 58.769531 217.761719 C 58.003906 217.359375 57.398438 216.734375 56.953125 215.886719 C 56.519531 215.039062 56.304688 213.957031 56.304688 212.636719 C 56.304688 211.261719 56.535156 210.144531 56.996094 209.285156 C 57.453125 208.425781 58.074219 207.792969 58.851562 207.390625 C 59.644531 206.988281 60.542969 206.785156 61.546875 206.785156 C 62.117188 206.785156 62.664062 206.847656 63.195312 206.972656 C 63.722656 207.085938 64.15625 207.222656 64.488281 207.390625 L 63.925781 208.910156 C 63.589844 208.785156 63.199219 208.667969 62.753906 208.554688 C 62.308594 208.445312 61.894531 208.390625 61.503906 208.390625 C 59.304688 208.390625 58.207031 209.796875 58.207031 212.617188 C 58.207031 213.964844 58.46875 215 59 215.71875 C 59.542969 216.429688 60.339844 216.78125 61.398438 216.78125 C 62.011719 216.78125 62.546875 216.71875 63.007812 216.59375 C 63.480469 216.46875 63.910156 216.316406 64.300781 216.136719 L 64.300781 217.761719 C 63.925781 217.957031 63.507812 218.101562 63.046875 218.199219 C 62.601562 218.308594 62.058594 218.367188 61.417969 218.367188 Z M 61.417969 218.367188 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 68.789062 202.328125 L 68.789062 206.972656 C 68.789062 207.527344 68.753906 208.050781 68.683594 208.535156 L 68.808594 208.535156 C 69.171875 207.964844 69.65625 207.535156 70.269531 207.242188 C 70.898438 206.953125 71.570312 206.804688 72.296875 206.804688 C 73.660156 206.804688 74.683594 207.132812 75.363281 207.785156 C 76.046875 208.425781 76.386719 209.457031 76.386719 210.886719 L 76.386719 218.15625 L 74.570312 218.15625 L 74.570312 211.011719 C 74.570312 209.222656 73.734375 208.328125 72.066406 208.328125 C 70.8125 208.328125 69.949219 208.679688 69.476562 209.390625 C 69.019531 210.082031 68.789062 211.082031 68.789062 212.386719 L 68.789062 218.15625 L 66.953125 218.15625 L 66.953125 202.328125 Z M 68.789062 202.328125 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 86.21875 202.808594 C 86.496094 202.808594 86.738281 202.90625 86.949219 203.097656 C 87.171875 203.28125 87.28125 203.570312 87.28125 203.972656 C 87.28125 204.363281 87.171875 204.65625 86.949219 204.847656 C 86.738281 205.042969 86.496094 205.140625 86.21875 205.140625 C 85.910156 205.140625 85.65625 205.042969 85.445312 204.847656 C 85.238281 204.65625 85.132812 204.363281 85.132812 203.972656 C 85.132812 203.570312 85.238281 203.28125 85.445312 203.097656 C 85.65625 202.90625 85.910156 202.808594 86.21875 202.808594 Z M 87.117188 206.992188 L 87.117188 218.15625 L 85.277344 218.15625 L 85.277344 206.992188 Z M 87.117188 206.992188 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 97.949219 215.074219 C 97.949219 216.15625 97.546875 216.976562 96.738281 217.53125 C 95.929688 218.085938 94.847656 218.367188 93.480469 218.367188 C 92.703125 218.367188 92.027344 218.304688 91.457031 218.179688 C 90.902344 218.054688 90.40625 217.878906 89.976562 217.65625 L 89.976562 215.992188 C 90.421875 216.214844 90.957031 216.421875 91.582031 216.617188 C 92.222656 216.796875 92.871094 216.886719 93.523438 216.886719 C 94.457031 216.886719 95.132812 216.742188 95.550781 216.449219 C 95.964844 216.144531 96.175781 215.742188 96.175781 215.242188 C 96.175781 214.964844 96.097656 214.714844 95.945312 214.492188 C 95.792969 214.269531 95.515625 214.046875 95.109375 213.824219 C 94.722656 213.601562 94.15625 213.351562 93.417969 213.074219 C 92.695312 212.796875 92.078125 212.519531 91.5625 212.242188 C 91.046875 211.964844 90.652344 211.632812 90.371094 211.242188 C 90.09375 210.855469 89.953125 210.355469 89.953125 209.742188 C 89.953125 208.800781 90.335938 208.070312 91.101562 207.554688 C 91.882812 207.042969 92.898438 206.785156 94.148438 206.785156 C 94.832031 206.785156 95.464844 206.855469 96.050781 206.992188 C 96.648438 207.117188 97.203125 207.300781 97.71875 207.535156 L 97.09375 208.992188 C 96.621094 208.800781 96.125 208.632812 95.613281 208.492188 C 95.097656 208.355469 94.566406 208.285156 94.023438 208.285156 C 93.273438 208.285156 92.695312 208.410156 92.292969 208.660156 C 91.902344 208.894531 91.707031 209.222656 91.707031 209.640625 C 91.707031 209.945312 91.796875 210.207031 91.980469 210.429688 C 92.160156 210.636719 92.460938 210.847656 92.878906 211.054688 C 93.308594 211.25 93.878906 211.484375 94.589844 211.761719 C 95.296875 212.027344 95.902344 212.296875 96.40625 212.574219 C 96.90625 212.851562 97.289062 213.191406 97.554688 213.597656 C 97.816406 213.984375 97.949219 214.476562 97.949219 215.074219 Z M 97.949219 215.074219 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 110.054688 206.785156 C 110.792969 206.785156 111.453125 206.925781 112.039062 207.203125 C 112.636719 207.480469 113.144531 207.902344 113.5625 208.472656 L 113.667969 208.472656 L 113.917969 206.992188 L 115.378906 206.992188 L 115.378906 218.34375 C 115.378906 219.941406 114.96875 221.140625 114.148438 221.949219 C 113.339844 222.753906 112.082031 223.15625 110.371094 223.15625 C 108.726562 223.15625 107.382812 222.917969 106.339844 222.449219 L 106.339844 220.761719 C 107.441406 221.34375 108.816406 221.636719 110.472656 221.636719 C 111.433594 221.636719 112.183594 221.351562 112.726562 220.78125 C 113.285156 220.226562 113.5625 219.460938 113.5625 218.492188 L 113.5625 218.054688 C 113.5625 217.886719 113.570312 217.648438 113.585938 217.34375 C 113.597656 217.027344 113.613281 216.804688 113.625 216.679688 L 113.542969 216.679688 C 112.789062 217.804688 111.636719 218.367188 110.078125 218.367188 C 108.628906 218.367188 107.496094 217.859375 106.675781 216.84375 C 105.867188 215.832031 105.464844 214.414062 105.464844 212.597656 C 105.464844 210.820312 105.867188 209.410156 106.675781 208.367188 C 107.496094 207.3125 108.621094 206.785156 110.054688 206.785156 Z M 110.308594 208.328125 C 109.375 208.328125 108.652344 208.703125 108.136719 209.453125 C 107.621094 210.1875 107.363281 211.242188 107.363281 212.617188 C 107.363281 213.992188 107.613281 215.046875 108.113281 215.78125 C 108.628906 216.503906 109.375 216.867188 110.347656 216.867188 C 111.476562 216.867188 112.296875 216.566406 112.8125 215.96875 C 113.328125 215.359375 113.585938 214.378906 113.585938 213.035156 L 113.585938 212.597656 C 113.585938 211.070312 113.320312 209.980469 112.789062 209.328125 C 112.261719 208.660156 111.433594 208.328125 110.308594 208.328125 Z M 110.308594 208.328125 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 128.65625 212.554688 C 128.65625 214.402344 128.183594 215.832031 127.234375 216.84375 C 126.304688 217.859375 125.035156 218.367188 123.4375 218.367188 C 122.449219 218.367188 121.566406 218.144531 120.785156 217.699219 C 120.019531 217.242188 119.414062 216.582031 118.96875 215.71875 C 118.523438 214.84375 118.300781 213.789062 118.300781 212.554688 C 118.300781 210.707031 118.769531 209.285156 119.699219 208.285156 C 120.632812 207.285156 121.898438 206.785156 123.5 206.785156 C 124.515625 206.785156 125.40625 207.015625 126.171875 207.472656 C 126.949219 207.917969 127.554688 208.570312 127.988281 209.429688 C 128.433594 210.277344 128.65625 211.320312 128.65625 212.554688 Z M 120.199219 212.554688 C 120.199219 213.875 120.457031 214.921875 120.972656 215.699219 C 121.503906 216.464844 122.335938 216.84375 123.476562 216.84375 C 124.605469 216.84375 125.433594 216.464844 125.960938 215.699219 C 126.492188 214.921875 126.753906 213.875 126.753906 212.554688 C 126.753906 211.234375 126.492188 210.203125 125.960938 209.453125 C 125.433594 208.703125 124.597656 208.328125 123.457031 208.328125 C 122.316406 208.328125 121.488281 208.703125 120.972656 209.453125 C 120.457031 210.203125 120.199219 211.234375 120.199219 212.554688 Z M 120.199219 212.554688 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 141.285156 212.554688 C 141.285156 214.402344 140.8125 215.832031 139.863281 216.84375 C 138.933594 217.859375 137.664062 218.367188 136.066406 218.367188 C 135.078125 218.367188 134.195312 218.144531 133.414062 217.699219 C 132.648438 217.242188 132.042969 216.582031 131.597656 215.71875 C 131.152344 214.84375 130.929688 213.789062 130.929688 212.554688 C 130.929688 210.707031 131.398438 209.285156 132.328125 208.285156 C 133.261719 207.285156 134.527344 206.785156 136.128906 206.785156 C 137.144531 206.785156 138.035156 207.015625 138.800781 207.472656 C 139.578125 207.917969 140.183594 208.570312 140.617188 209.429688 C 141.0625 210.277344 141.285156 211.320312 141.285156 212.554688 Z M 132.828125 212.554688 C 132.828125 213.875 133.085938 214.921875 133.601562 215.699219 C 134.132812 216.464844 134.964844 216.84375 136.105469 216.84375 C 137.234375 216.84375 138.0625 216.464844 138.589844 215.699219 C 139.121094 214.921875 139.382812 213.875 139.382812 212.554688 C 139.382812 211.234375 139.121094 210.203125 138.589844 209.453125 C 138.0625 208.703125 137.226562 208.328125 136.085938 208.328125 C 134.945312 208.328125 134.117188 208.703125 133.601562 209.453125 C 133.085938 210.203125 132.828125 211.234375 132.828125 212.554688 Z M 132.828125 212.554688 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 148.152344 218.367188 C 146.761719 218.367188 145.648438 217.886719 144.8125 216.929688 C 143.976562 215.957031 143.558594 214.511719 143.558594 212.597656 C 143.558594 210.679688 143.976562 209.234375 144.8125 208.265625 C 145.660156 207.277344 146.78125 206.785156 148.171875 206.785156 C 149.035156 206.785156 149.738281 206.945312 150.28125 207.265625 C 150.835938 207.585938 151.289062 207.972656 151.636719 208.429688 L 151.761719 208.429688 C 151.75 208.25 151.722656 207.988281 151.679688 207.640625 C 151.652344 207.277344 151.636719 206.992188 151.636719 206.785156 L 151.636719 202.328125 L 153.472656 202.328125 L 153.472656 218.15625 L 151.992188 218.15625 L 151.722656 216.65625 L 151.636719 216.65625 C 151.304688 217.128906 150.859375 217.53125 150.300781 217.867188 C 149.746094 218.199219 149.027344 218.367188 148.152344 218.367188 Z M 148.445312 216.84375 C 149.625 216.84375 150.453125 216.527344 150.925781 215.886719 C 151.414062 215.234375 151.660156 214.253906 151.660156 212.949219 L 151.660156 212.617188 C 151.660156 211.230469 151.429688 210.167969 150.96875 209.429688 C 150.511719 208.679688 149.660156 208.304688 148.421875 208.304688 C 147.433594 208.304688 146.691406 208.703125 146.1875 209.492188 C 145.703125 210.269531 145.457031 211.320312 145.457031 212.636719 C 145.457031 213.972656 145.703125 215.003906 146.1875 215.742188 C 146.691406 216.476562 147.441406 216.84375 148.445312 216.84375 Z M 148.445312 216.84375 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 156.75 217.03125 C 156.75 216.519531 156.875 216.15625 157.128906 215.949219 C 157.378906 215.742188 157.675781 215.636719 158.023438 215.636719 C 158.386719 215.636719 158.691406 215.742188 158.941406 215.949219 C 159.207031 216.15625 159.339844 216.519531 159.339844 217.03125 C 159.339844 217.53125 159.207031 217.894531 158.941406 218.117188 C 158.691406 218.335938 158.386719 218.449219 158.023438 218.449219 C 157.675781 218.449219 157.378906 218.335938 157.128906 218.117188 C 156.875 217.894531 156.75 217.53125 156.75 217.03125 Z M 156.75 217.03125 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 26.683594 270.222656 L 21.300781 270.222656 L 21.300781 269.140625 L 23.054688 268.746094 L 23.054688 256.851562 L 21.300781 256.4375 L 21.300781 255.355469 L 26.683594 255.355469 L 26.683594 256.4375 L 24.933594 256.851562 L 24.933594 268.746094 L 26.683594 269.140625 Z M 26.683594 270.222656 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 34.472656 260.476562 L 31.652344 260.476562 L 31.652344 270.222656 L 29.816406 270.222656 L 29.816406 260.476562 L 27.855469 260.476562 L 27.855469 259.621094 L 29.816406 259 L 29.816406 258.351562 C 29.816406 256.910156 30.136719 255.875 30.777344 255.25 C 31.417969 254.609375 32.308594 254.292969 33.449219 254.292969 C 33.894531 254.292969 34.296875 254.332031 34.660156 254.417969 C 35.035156 254.484375 35.355469 254.570312 35.621094 254.667969 L 35.140625 256.101562 C 34.917969 256.035156 34.660156 255.964844 34.367188 255.894531 C 34.074219 255.824219 33.777344 255.789062 33.46875 255.789062 C 32.855469 255.789062 32.398438 256 32.09375 256.414062 C 31.800781 256.820312 31.652344 257.457031 31.652344 258.332031 L 31.652344 259.0625 L 34.472656 259.0625 Z M 34.472656 260.476562 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 40.171875 259.0625 L 42.132812 259.0625 L 44.554688 265.414062 C 44.761719 265.96875 44.949219 266.503906 45.117188 267.015625 C 45.285156 267.515625 45.410156 267.996094 45.492188 268.453125 L 45.578125 268.453125 C 45.660156 268.105469 45.792969 267.65625 45.972656 267.101562 C 46.152344 266.53125 46.34375 265.960938 46.535156 265.390625 L 48.8125 259.0625 L 50.796875 259.0625 L 45.972656 271.765625 C 45.582031 272.820312 45.074219 273.660156 44.449219 274.285156 C 43.835938 274.910156 42.988281 275.222656 41.902344 275.222656 C 41.570312 275.222656 41.277344 275.203125 41.027344 275.160156 C 40.777344 275.132812 40.558594 275.097656 40.378906 275.054688 L 40.378906 273.597656 C 40.53125 273.625 40.710938 273.652344 40.921875 273.679688 C 41.144531 273.707031 41.375 273.722656 41.609375 273.722656 C 42.25 273.722656 42.765625 273.542969 43.15625 273.179688 C 43.558594 272.820312 43.871094 272.339844 44.09375 271.746094 L 44.679688 270.265625 Z M 40.171875 259.0625 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 62.296875 264.621094 C 62.296875 266.46875 61.824219 267.898438 60.878906 268.910156 C 59.945312 269.925781 58.679688 270.433594 57.078125 270.433594 C 56.089844 270.433594 55.207031 270.210938 54.425781 269.765625 C 53.660156 269.308594 53.054688 268.648438 52.609375 267.789062 C 52.164062 266.914062 51.941406 265.855469 51.941406 264.621094 C 51.941406 262.773438 52.410156 261.351562 53.339844 260.351562 C 54.273438 259.351562 55.539062 258.851562 57.140625 258.851562 C 58.15625 258.851562 59.046875 259.082031 59.8125 259.539062 C 60.59375 259.984375 61.195312 260.636719 61.628906 261.496094 C 62.074219 262.34375 62.296875 263.386719 62.296875 264.621094 Z M 53.84375 264.621094 C 53.84375 265.941406 54.101562 266.988281 54.613281 267.765625 C 55.144531 268.53125 55.980469 268.910156 57.121094 268.910156 C 58.246094 268.910156 59.074219 268.53125 59.605469 267.765625 C 60.132812 266.988281 60.398438 265.941406 60.398438 264.621094 C 60.398438 263.300781 60.132812 262.269531 59.605469 261.519531 C 59.074219 260.769531 58.238281 260.394531 57.097656 260.394531 C 55.957031 260.394531 55.128906 260.769531 54.613281 261.519531 C 54.101562 262.269531 53.84375 263.300781 53.84375 264.621094 Z M 53.84375 264.621094 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 74.550781 259.0625 L 74.550781 270.222656 L 73.046875 270.222656 L 72.773438 268.746094 L 72.691406 268.746094 C 72.328125 269.328125 71.828125 269.757812 71.1875 270.035156 C 70.546875 270.300781 69.867188 270.433594 69.144531 270.433594 C 67.792969 270.433594 66.777344 270.113281 66.09375 269.472656 C 65.414062 268.820312 65.074219 267.789062 65.074219 266.371094 L 65.074219 259.0625 L 66.929688 259.0625 L 66.929688 266.246094 C 66.929688 268.023438 67.757812 268.910156 69.414062 268.910156 C 70.652344 268.910156 71.507812 268.566406 71.980469 267.871094 C 72.46875 267.175781 72.710938 266.175781 72.710938 264.871094 L 72.710938 259.0625 Z M 74.550781 259.0625 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 92.667969 270.203125 L 90.746094 263.914062 C 90.566406 263.34375 90.40625 262.789062 90.269531 262.246094 C 90.140625 261.691406 90.046875 261.261719 89.976562 260.957031 L 89.890625 260.957031 C 89.835938 261.261719 89.746094 261.691406 89.621094 262.246094 C 89.496094 262.789062 89.335938 263.351562 89.140625 263.933594 L 87.136719 270.203125 L 85.050781 270.203125 L 81.980469 259.039062 L 83.878906 259.039062 L 85.425781 264.996094 C 85.578125 265.59375 85.722656 266.199219 85.863281 266.808594 C 86.003906 267.417969 86.101562 267.925781 86.15625 268.328125 L 86.238281 268.328125 C 86.292969 268.09375 86.355469 267.800781 86.425781 267.453125 C 86.511719 267.105469 86.601562 266.746094 86.699219 266.371094 C 86.796875 265.980469 86.894531 265.636719 86.992188 265.328125 L 88.972656 259.039062 L 90.976562 259.039062 L 92.898438 265.328125 C 93.050781 265.800781 93.195312 266.316406 93.335938 266.871094 C 93.488281 267.425781 93.59375 267.90625 93.648438 268.308594 L 93.734375 268.308594 C 93.773438 267.960938 93.863281 267.480469 94.003906 266.871094 C 94.15625 266.261719 94.316406 265.636719 94.484375 264.996094 L 96.050781 259.039062 L 97.929688 259.039062 L 94.816406 270.203125 Z M 92.667969 270.203125 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 104.167969 258.875 C 105.535156 258.875 106.542969 259.171875 107.195312 259.769531 C 107.851562 260.367188 108.175781 261.316406 108.175781 262.621094 L 108.175781 270.222656 L 106.839844 270.222656 L 106.488281 268.640625 L 106.402344 268.640625 C 105.917969 269.25 105.402344 269.703125 104.859375 269.996094 C 104.328125 270.285156 103.59375 270.433594 102.644531 270.433594 C 101.628906 270.433594 100.789062 270.167969 100.121094 269.640625 C 99.453125 269.097656 99.117188 268.257812 99.117188 267.121094 C 99.117188 266.011719 99.558594 265.15625 100.433594 264.558594 C 101.308594 263.949219 102.660156 263.613281 104.484375 263.558594 L 106.382812 263.496094 L 106.382812 262.832031 C 106.382812 261.898438 106.179688 261.253906 105.777344 260.894531 C 105.375 260.53125 104.804688 260.351562 104.066406 260.351562 C 103.480469 260.351562 102.925781 260.441406 102.394531 260.621094 C 101.867188 260.789062 101.371094 260.984375 100.914062 261.207031 L 100.351562 259.832031 C 100.835938 259.566406 101.414062 259.34375 102.082031 259.164062 C 102.75 258.96875 103.445312 258.875 104.167969 258.875 Z M 106.363281 264.765625 L 104.710938 264.828125 C 103.320312 264.886719 102.355469 265.105469 101.8125 265.496094 C 101.28125 265.886719 101.019531 266.433594 101.019531 267.140625 C 101.019531 267.765625 101.207031 268.222656 101.582031 268.515625 C 101.972656 268.808594 102.464844 268.953125 103.0625 268.953125 C 104.011719 268.953125 104.796875 268.695312 105.421875 268.183594 C 106.046875 267.65625 106.363281 266.851562 106.363281 265.765625 Z M 106.363281 264.765625 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 117.027344 258.851562 C 118.363281 258.851562 119.375 259.179688 120.054688 259.832031 C 120.738281 260.46875 121.078125 261.511719 121.078125 262.957031 L 121.078125 270.222656 L 119.261719 270.222656 L 119.261719 263.082031 C 119.261719 261.289062 118.425781 260.394531 116.757812 260.394531 C 115.519531 260.394531 114.664062 260.742188 114.1875 261.433594 C 113.714844 262.128906 113.480469 263.128906 113.480469 264.433594 L 113.480469 270.222656 L 111.644531 270.222656 L 111.644531 259.0625 L 113.125 259.0625 L 113.394531 260.582031 L 113.5 260.582031 C 113.863281 259.996094 114.363281 259.566406 115.003906 259.289062 C 115.644531 259 116.320312 258.851562 117.027344 258.851562 Z M 117.027344 258.851562 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 128.28125 268.933594 C 128.558594 268.933594 128.84375 268.910156 129.136719 268.871094 C 129.425781 268.816406 129.664062 268.757812 129.84375 268.703125 L 129.84375 270.097656 C 129.648438 270.195312 129.371094 270.273438 129.011719 270.328125 C 128.648438 270.398438 128.300781 270.433594 127.964844 270.433594 C 127.382812 270.433594 126.839844 270.335938 126.339844 270.140625 C 125.851562 269.933594 125.453125 269.578125 125.148438 269.078125 C 124.84375 268.578125 124.6875 267.878906 124.6875 266.976562 L 124.6875 260.476562 L 123.101562 260.476562 L 123.101562 259.601562 L 124.710938 258.875 L 125.441406 256.5 L 126.527344 256.5 L 126.527344 259.0625 L 129.761719 259.0625 L 129.761719 260.476562 L 126.527344 260.476562 L 126.527344 266.933594 C 126.527344 267.613281 126.6875 268.121094 127.007812 268.453125 C 127.339844 268.773438 127.765625 268.933594 128.28125 268.933594 Z M 128.28125 268.933594 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 141.242188 268.933594 C 141.519531 268.933594 141.804688 268.910156 142.097656 268.871094 C 142.390625 268.816406 142.625 268.757812 142.808594 268.703125 L 142.808594 270.097656 C 142.613281 270.195312 142.335938 270.273438 141.972656 270.328125 C 141.609375 270.398438 141.261719 270.433594 140.929688 270.433594 C 140.34375 270.433594 139.800781 270.335938 139.300781 270.140625 C 138.8125 269.933594 138.417969 269.578125 138.109375 269.078125 C 137.804688 268.578125 137.652344 267.878906 137.652344 266.976562 L 137.652344 260.476562 L 136.066406 260.476562 L 136.066406 259.601562 L 137.671875 258.875 L 138.402344 256.5 L 139.488281 256.5 L 139.488281 259.0625 L 142.722656 259.0625 L 142.722656 260.476562 L 139.488281 260.476562 L 139.488281 266.933594 C 139.488281 267.613281 139.648438 268.121094 139.96875 268.453125 C 140.300781 268.773438 140.726562 268.933594 141.242188 268.933594 Z M 141.242188 268.933594 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 154.769531 264.621094 C 154.769531 266.46875 154.296875 267.898438 153.347656 268.910156 C 152.417969 269.925781 151.148438 270.433594 149.550781 270.433594 C 148.5625 270.433594 147.679688 270.210938 146.898438 269.765625 C 146.132812 269.308594 145.527344 268.648438 145.082031 267.789062 C 144.636719 266.914062 144.414062 265.855469 144.414062 264.621094 C 144.414062 262.773438 144.882812 261.351562 145.8125 260.351562 C 146.746094 259.351562 148.011719 258.851562 149.613281 258.851562 C 150.628906 258.851562 151.519531 259.082031 152.285156 259.539062 C 153.0625 259.984375 153.667969 260.636719 154.101562 261.496094 C 154.546875 262.34375 154.769531 263.386719 154.769531 264.621094 Z M 146.3125 264.621094 C 146.3125 265.941406 146.570312 266.988281 147.085938 267.765625 C 147.617188 268.53125 148.449219 268.910156 149.589844 268.910156 C 150.71875 268.910156 151.546875 268.53125 152.074219 267.765625 C 152.605469 266.988281 152.867188 265.941406 152.867188 264.621094 C 152.867188 263.300781 152.605469 262.269531 152.074219 261.519531 C 151.546875 260.769531 150.710938 260.394531 149.570312 260.394531 C 148.429688 260.394531 147.601562 260.769531 147.085938 261.519531 C 146.570312 262.269531 146.3125 263.300781 146.3125 264.621094 Z M 146.3125 264.621094 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 170.382812 267.140625 C 170.382812 268.222656 169.980469 269.042969 169.171875 269.597656 C 168.363281 270.15625 167.277344 270.433594 165.914062 270.433594 C 165.136719 270.433594 164.460938 270.371094 163.890625 270.246094 C 163.332031 270.121094 162.839844 269.945312 162.410156 269.722656 L 162.410156 268.058594 C 162.855469 268.28125 163.390625 268.488281 164.015625 268.683594 C 164.65625 268.863281 165.304688 268.953125 165.957031 268.953125 C 166.890625 268.953125 167.5625 268.808594 167.980469 268.515625 C 168.398438 268.210938 168.609375 267.808594 168.609375 267.308594 C 168.609375 267.03125 168.53125 266.78125 168.378906 266.558594 C 168.226562 266.335938 167.945312 266.113281 167.542969 265.890625 C 167.152344 265.667969 166.589844 265.417969 165.851562 265.140625 C 165.128906 264.863281 164.507812 264.585938 163.996094 264.308594 C 163.480469 264.03125 163.082031 263.699219 162.804688 263.308594 C 162.527344 262.921875 162.386719 262.421875 162.386719 261.808594 C 162.386719 260.867188 162.769531 260.136719 163.535156 259.621094 C 164.316406 259.109375 165.332031 258.851562 166.582031 258.851562 C 167.265625 258.851562 167.898438 258.921875 168.484375 259.0625 C 169.082031 259.1875 169.636719 259.367188 170.152344 259.601562 L 169.527344 261.058594 C 169.054688 260.867188 168.558594 260.699219 168.042969 260.558594 C 167.53125 260.421875 167 260.351562 166.457031 260.351562 C 165.707031 260.351562 165.128906 260.476562 164.726562 260.726562 C 164.335938 260.964844 164.140625 261.289062 164.140625 261.707031 C 164.140625 262.011719 164.230469 262.273438 164.414062 262.496094 C 164.59375 262.707031 164.890625 262.914062 165.308594 263.121094 C 165.742188 263.316406 166.3125 263.550781 167.019531 263.828125 C 167.730469 264.09375 168.335938 264.363281 168.835938 264.640625 C 169.339844 264.921875 169.722656 265.261719 169.984375 265.664062 C 170.25 266.050781 170.382812 266.542969 170.382812 267.140625 Z M 170.382812 267.140625 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 177.417969 258.851562 C 178.375 258.851562 179.199219 259.0625 179.878906 259.476562 C 180.574219 259.894531 181.105469 260.484375 181.464844 261.246094 C 181.84375 261.996094 182.03125 262.878906 182.03125 263.890625 L 182.03125 264.996094 L 174.367188 264.996094 C 174.398438 266.261719 174.71875 267.226562 175.328125 267.890625 C 175.957031 268.542969 176.824219 268.871094 177.9375 268.871094 C 178.648438 268.871094 179.273438 268.808594 179.816406 268.683594 C 180.375 268.542969 180.945312 268.347656 181.527344 268.097656 L 181.527344 269.703125 C 180.957031 269.953125 180.394531 270.132812 179.839844 270.246094 C 179.28125 270.371094 178.621094 270.433594 177.855469 270.433594 C 176.796875 270.433594 175.859375 270.21875 175.035156 269.785156 C 174.230469 269.355469 173.597656 268.71875 173.136719 267.871094 C 172.691406 267.007812 172.46875 265.960938 172.46875 264.726562 C 172.46875 263.503906 172.671875 262.457031 173.074219 261.582031 C 173.492188 260.707031 174.070312 260.03125 174.808594 259.5625 C 175.558594 259.089844 176.429688 258.851562 177.417969 258.851562 Z M 177.394531 260.351562 C 176.519531 260.351562 175.824219 260.636719 175.308594 261.207031 C 174.808594 261.761719 174.507812 262.539062 174.410156 263.539062 L 180.109375 263.539062 C 180.09375 262.59375 179.871094 261.832031 179.441406 261.246094 C 179.011719 260.652344 178.328125 260.351562 177.394531 260.351562 Z M 177.394531 260.351562 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 189.191406 258.851562 C 190.148438 258.851562 190.972656 259.0625 191.652344 259.476562 C 192.347656 259.894531 192.878906 260.484375 193.238281 261.246094 C 193.613281 261.996094 193.804688 262.878906 193.804688 263.890625 L 193.804688 264.996094 L 186.140625 264.996094 C 186.167969 266.261719 186.488281 267.226562 187.101562 267.890625 C 187.726562 268.542969 188.597656 268.871094 189.710938 268.871094 C 190.421875 268.871094 191.046875 268.808594 191.589844 268.683594 C 192.148438 268.542969 192.71875 268.347656 193.300781 268.097656 L 193.300781 269.703125 C 192.730469 269.953125 192.167969 270.132812 191.609375 270.246094 C 191.054688 270.371094 190.394531 270.433594 189.628906 270.433594 C 188.570312 270.433594 187.632812 270.21875 186.808594 269.785156 C 186.003906 269.355469 185.371094 268.71875 184.910156 267.871094 C 184.464844 267.007812 184.242188 265.960938 184.242188 264.726562 C 184.242188 263.503906 184.445312 262.457031 184.847656 261.582031 C 185.265625 260.707031 185.84375 260.03125 186.582031 259.5625 C 187.332031 259.089844 188.203125 258.851562 189.191406 258.851562 Z M 189.167969 260.351562 C 188.292969 260.351562 187.597656 260.636719 187.082031 261.207031 C 186.582031 261.761719 186.28125 262.539062 186.183594 263.539062 L 191.882812 263.539062 C 191.867188 262.59375 191.644531 261.832031 191.214844 261.246094 C 190.78125 260.652344 190.101562 260.351562 189.167969 260.351562 Z M 189.167969 260.351562 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 205.804688 268.933594 C 206.082031 268.933594 206.367188 268.910156 206.660156 268.871094 C 206.953125 268.816406 207.191406 268.757812 207.371094 268.703125 L 207.371094 270.097656 C 207.175781 270.195312 206.898438 270.273438 206.535156 270.328125 C 206.175781 270.398438 205.828125 270.433594 205.492188 270.433594 C 204.90625 270.433594 204.363281 270.335938 203.863281 270.140625 C 203.378906 269.933594 202.980469 269.578125 202.675781 269.078125 C 202.367188 268.578125 202.214844 267.878906 202.214844 266.976562 L 202.214844 260.476562 L 200.628906 260.476562 L 200.628906 259.601562 L 202.234375 258.875 L 202.964844 256.5 L 204.050781 256.5 L 204.050781 259.0625 L 207.289062 259.0625 L 207.289062 260.476562 L 204.050781 260.476562 L 204.050781 266.933594 C 204.050781 267.613281 204.210938 268.121094 204.53125 268.453125 C 204.867188 268.773438 205.289062 268.933594 205.804688 268.933594 Z M 205.804688 268.933594 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 211.441406 254.394531 L 211.441406 259.039062 C 211.441406 259.59375 211.40625 260.117188 211.335938 260.601562 L 211.460938 260.601562 C 211.824219 260.03125 212.3125 259.601562 212.921875 259.3125 C 213.550781 259.019531 214.222656 258.875 214.949219 258.875 C 216.3125 258.875 217.335938 259.199219 218.015625 259.851562 C 218.699219 260.492188 219.039062 261.523438 219.039062 262.957031 L 219.039062 270.222656 L 217.222656 270.222656 L 217.222656 263.082031 C 217.222656 261.289062 216.386719 260.394531 214.71875 260.394531 C 213.464844 260.394531 212.601562 260.746094 212.128906 261.457031 C 211.671875 262.148438 211.441406 263.148438 211.441406 264.453125 L 211.441406 270.222656 L 209.605469 270.222656 L 209.605469 254.394531 Z M 211.441406 254.394531 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 223.445312 254.875 C 223.722656 254.875 223.964844 254.972656 224.175781 255.167969 C 224.398438 255.347656 224.507812 255.636719 224.507812 256.039062 C 224.507812 256.429688 224.398438 256.722656 224.175781 256.914062 C 223.964844 257.109375 223.722656 257.207031 223.445312 257.207031 C 223.136719 257.207031 222.878906 257.109375 222.671875 256.914062 C 222.460938 256.722656 222.359375 256.429688 222.359375 256.039062 C 222.359375 255.636719 222.460938 255.347656 222.671875 255.167969 C 222.878906 254.972656 223.136719 254.875 223.445312 254.875 Z M 224.339844 259.0625 L 224.339844 270.222656 L 222.503906 270.222656 L 222.503906 259.0625 Z M 224.339844 259.0625 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 235.175781 267.140625 C 235.175781 268.222656 234.773438 269.042969 233.964844 269.597656 C 233.15625 270.15625 232.070312 270.433594 230.707031 270.433594 C 229.929688 270.433594 229.253906 270.371094 228.683594 270.246094 C 228.125 270.121094 227.632812 269.945312 227.199219 269.722656 L 227.199219 268.058594 C 227.644531 268.28125 228.183594 268.488281 228.808594 268.683594 C 229.449219 268.863281 230.097656 268.953125 230.75 268.953125 C 231.683594 268.953125 232.355469 268.808594 232.773438 268.515625 C 233.191406 268.210938 233.402344 267.808594 233.402344 267.308594 C 233.402344 267.03125 233.324219 266.78125 233.171875 266.558594 C 233.019531 266.335938 232.738281 266.113281 232.335938 265.890625 C 231.945312 265.667969 231.382812 265.417969 230.644531 265.140625 C 229.921875 264.863281 229.300781 264.585938 228.789062 264.308594 C 228.273438 264.03125 227.875 263.699219 227.597656 263.308594 C 227.320312 262.921875 227.179688 262.421875 227.179688 261.808594 C 227.179688 260.867188 227.5625 260.136719 228.328125 259.621094 C 229.109375 259.109375 230.125 258.851562 231.375 258.851562 C 232.058594 258.851562 232.691406 258.921875 233.277344 259.0625 C 233.875 259.1875 234.429688 259.367188 234.945312 259.601562 L 234.320312 261.058594 C 233.847656 260.867188 233.351562 260.699219 232.835938 260.558594 C 232.324219 260.421875 231.792969 260.351562 231.25 260.351562 C 230.5 260.351562 229.921875 260.476562 229.519531 260.726562 C 229.128906 260.964844 228.933594 261.289062 228.933594 261.707031 C 228.933594 262.011719 229.023438 262.273438 229.203125 262.496094 C 229.386719 262.707031 229.683594 262.914062 230.101562 263.121094 C 230.535156 263.316406 231.105469 263.550781 231.8125 263.828125 C 232.523438 264.09375 233.128906 264.363281 233.628906 264.640625 C 234.132812 264.921875 234.515625 265.261719 234.777344 265.664062 C 235.042969 266.050781 235.175781 266.542969 235.175781 267.140625 Z M 235.175781 267.140625 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 244.253906 254.875 C 244.535156 254.875 244.777344 254.972656 244.984375 255.167969 C 245.207031 255.347656 245.320312 255.636719 245.320312 256.039062 C 245.320312 256.429688 245.207031 256.722656 244.984375 256.914062 C 244.777344 257.109375 244.535156 257.207031 244.253906 257.207031 C 243.949219 257.207031 243.691406 257.109375 243.484375 256.914062 C 243.273438 256.722656 243.167969 256.429688 243.167969 256.039062 C 243.167969 255.636719 243.273438 255.347656 243.484375 255.167969 C 243.691406 254.972656 243.949219 254.875 244.253906 254.875 Z M 245.152344 259.0625 L 245.152344 270.222656 L 243.316406 270.222656 L 243.316406 259.0625 Z M 245.152344 259.0625 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 260.976562 258.851562 C 262.242188 258.851562 263.1875 259.179688 263.8125 259.832031 C 264.441406 260.46875 264.753906 261.511719 264.753906 262.957031 L 264.753906 270.222656 L 262.9375 270.222656 L 262.9375 263.039062 C 262.9375 261.273438 262.179688 260.394531 260.664062 260.394531 C 259.578125 260.394531 258.796875 260.707031 258.324219 261.332031 C 257.863281 261.957031 257.636719 262.863281 257.636719 264.058594 L 257.636719 270.222656 L 255.820312 270.222656 L 255.820312 263.039062 C 255.820312 261.273438 255.054688 260.394531 253.523438 260.394531 C 252.394531 260.394531 251.617188 260.742188 251.183594 261.433594 C 250.753906 262.128906 250.539062 263.128906 250.539062 264.433594 L 250.539062 270.222656 L 248.703125 270.222656 L 248.703125 259.0625 L 250.183594 259.0625 L 250.453125 260.582031 L 250.558594 260.582031 C 250.90625 259.996094 251.375 259.566406 251.957031 259.289062 C 252.554688 259 253.1875 258.851562 253.855469 258.851562 C 255.609375 258.851562 256.75 259.476562 257.28125 260.726562 L 257.386719 260.726562 C 257.761719 260.089844 258.269531 259.617188 258.910156 259.3125 C 259.5625 259.003906 260.25 258.851562 260.976562 258.851562 Z M 260.976562 258.851562 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 272.457031 258.875 C 273.820312 258.875 274.828125 259.171875 275.484375 259.769531 C 276.136719 260.367188 276.464844 261.316406 276.464844 262.621094 L 276.464844 270.222656 L 275.128906 270.222656 L 274.773438 268.640625 L 274.691406 268.640625 C 274.203125 269.25 273.6875 269.703125 273.144531 269.996094 C 272.617188 270.285156 271.878906 270.433594 270.933594 270.433594 C 269.917969 270.433594 269.074219 270.167969 268.40625 269.640625 C 267.738281 269.097656 267.40625 268.257812 267.40625 267.121094 C 267.40625 266.011719 267.84375 265.15625 268.71875 264.558594 C 269.597656 263.949219 270.945312 263.613281 272.769531 263.558594 L 274.667969 263.496094 L 274.667969 262.832031 C 274.667969 261.898438 274.46875 261.253906 274.0625 260.894531 C 273.660156 260.53125 273.089844 260.351562 272.351562 260.351562 C 271.765625 260.351562 271.210938 260.441406 270.683594 260.621094 C 270.152344 260.789062 269.660156 260.984375 269.199219 261.207031 L 268.636719 259.832031 C 269.125 259.566406 269.699219 259.34375 270.367188 259.164062 C 271.035156 258.96875 271.730469 258.875 272.457031 258.875 Z M 274.648438 264.765625 L 273 264.828125 C 271.605469 264.886719 270.640625 265.105469 270.097656 265.496094 C 269.570312 265.886719 269.304688 266.433594 269.304688 267.140625 C 269.304688 267.765625 269.492188 268.222656 269.867188 268.515625 C 270.257812 268.808594 270.75 268.953125 271.351562 268.953125 C 272.296875 268.953125 273.082031 268.695312 273.707031 268.183594 C 274.335938 267.65625 274.648438 266.851562 274.648438 265.765625 Z M 274.648438 264.765625 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 283.894531 258.851562 C 284.632812 258.851562 285.292969 258.992188 285.878906 259.269531 C 286.476562 259.546875 286.984375 259.96875 287.402344 260.539062 L 287.507812 260.539062 L 287.757812 259.0625 L 289.21875 259.0625 L 289.21875 270.410156 C 289.21875 272.007812 288.808594 273.210938 287.984375 274.015625 C 287.179688 274.820312 285.917969 275.222656 284.207031 275.222656 C 282.566406 275.222656 281.222656 274.984375 280.179688 274.515625 L 280.179688 272.828125 C 281.277344 273.410156 282.65625 273.703125 284.3125 273.703125 C 285.273438 273.703125 286.023438 273.417969 286.566406 272.847656 C 287.125 272.292969 287.402344 271.527344 287.402344 270.558594 L 287.402344 270.121094 C 287.402344 269.953125 287.410156 269.71875 287.421875 269.410156 C 287.4375 269.09375 287.449219 268.871094 287.464844 268.746094 L 287.382812 268.746094 C 286.628906 269.871094 285.472656 270.433594 283.914062 270.433594 C 282.46875 270.433594 281.335938 269.925781 280.511719 268.910156 C 279.707031 267.898438 279.300781 266.480469 279.300781 264.664062 C 279.300781 262.886719 279.707031 261.476562 280.511719 260.433594 C 281.335938 259.378906 282.460938 258.851562 283.894531 258.851562 Z M 284.144531 260.394531 C 283.214844 260.394531 282.488281 260.769531 281.972656 261.519531 C 281.460938 262.253906 281.203125 263.308594 281.203125 264.683594 C 281.203125 266.058594 281.453125 267.113281 281.953125 267.847656 C 282.46875 268.570312 283.214844 268.933594 284.1875 268.933594 C 285.3125 268.933594 286.136719 268.632812 286.648438 268.035156 C 287.164062 267.425781 287.421875 266.449219 287.421875 265.101562 L 287.421875 264.664062 C 287.421875 263.136719 287.160156 262.046875 286.628906 261.394531 C 286.101562 260.726562 285.273438 260.394531 284.144531 260.394531 Z M 284.144531 260.394531 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 297.085938 258.851562 C 298.046875 258.851562 298.867188 259.0625 299.550781 259.476562 C 300.246094 259.894531 300.773438 260.484375 301.136719 261.246094 C 301.511719 261.996094 301.699219 262.878906 301.699219 263.890625 L 301.699219 264.996094 L 294.039062 264.996094 C 294.066406 266.261719 294.386719 267.226562 295 267.890625 C 295.625 268.542969 296.496094 268.871094 297.609375 268.871094 C 298.320312 268.871094 298.945312 268.808594 299.488281 268.683594 C 300.042969 268.542969 300.613281 268.347656 301.199219 268.097656 L 301.199219 269.703125 C 300.628906 269.953125 300.066406 270.132812 299.507812 270.246094 C 298.953125 270.371094 298.292969 270.433594 297.527344 270.433594 C 296.46875 270.433594 295.527344 270.21875 294.707031 269.785156 C 293.902344 269.355469 293.265625 268.71875 292.808594 267.871094 C 292.363281 267.007812 292.140625 265.960938 292.140625 264.726562 C 292.140625 263.503906 292.34375 262.457031 292.746094 261.582031 C 293.164062 260.707031 293.742188 260.03125 294.476562 259.5625 C 295.230469 259.089844 296.097656 258.851562 297.085938 258.851562 Z M 297.066406 260.351562 C 296.191406 260.351562 295.492188 260.636719 294.980469 261.207031 C 294.476562 261.761719 294.179688 262.539062 294.082031 263.539062 L 299.78125 263.539062 C 299.765625 262.59375 299.542969 261.832031 299.113281 261.246094 C 298.679688 260.652344 298 260.351562 297.066406 260.351562 Z M 297.066406 260.351562 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 306.625 267.808594 L 306.773438 268.035156 C 306.59375 268.773438 306.328125 269.578125 305.980469 270.453125 C 305.644531 271.339844 305.3125 272.160156 304.976562 272.910156 L 303.621094 272.910156 C 303.816406 272.117188 304.011719 271.25 304.207031 270.308594 C 304.414062 269.363281 304.566406 268.53125 304.664062 267.808594 Z M 306.625 267.808594 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 26.207031 296.464844 C 24.8125 296.464844 23.699219 295.988281 22.867188 295.027344 C 22.03125 294.054688 21.613281 292.613281 21.613281 290.695312 C 21.613281 288.78125 22.03125 287.335938 22.867188 286.363281 C 23.714844 285.378906 24.835938 284.886719 26.226562 284.886719 C 27.089844 284.886719 27.792969 285.046875 28.335938 285.363281 C 28.890625 285.683594 29.34375 286.074219 29.691406 286.53125 L 29.816406 286.53125 C 29.800781 286.351562 29.773438 286.085938 29.734375 285.738281 C 29.707031 285.378906 29.691406 285.09375 29.691406 284.886719 L 29.691406 280.429688 L 31.527344 280.429688 L 31.527344 296.257812 L 30.046875 296.257812 L 29.773438 294.757812 L 29.691406 294.757812 C 29.355469 295.230469 28.910156 295.632812 28.355469 295.964844 C 27.796875 296.300781 27.082031 296.464844 26.207031 296.464844 Z M 26.496094 294.945312 C 27.679688 294.945312 28.507812 294.625 28.980469 293.988281 C 29.46875 293.335938 29.710938 292.355469 29.710938 291.050781 L 29.710938 290.71875 C 29.710938 289.328125 29.484375 288.265625 29.023438 287.53125 C 28.5625 286.78125 27.714844 286.40625 26.476562 286.40625 C 25.488281 286.40625 24.746094 286.800781 24.242188 287.59375 C 23.757812 288.371094 23.511719 289.417969 23.511719 290.738281 C 23.511719 292.070312 23.757812 293.105469 24.242188 293.839844 C 24.746094 294.578125 25.496094 294.945312 26.496094 294.945312 Z M 26.496094 294.945312 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 36.015625 280.90625 C 36.292969 280.90625 36.539062 281.003906 36.746094 281.199219 C 36.96875 281.378906 37.082031 281.671875 37.082031 282.074219 C 37.082031 282.464844 36.96875 282.753906 36.746094 282.949219 C 36.539062 283.144531 36.292969 283.242188 36.015625 283.242188 C 35.710938 283.242188 35.453125 283.144531 35.242188 282.949219 C 35.035156 282.753906 34.929688 282.464844 34.929688 282.074219 C 34.929688 281.671875 35.035156 281.378906 35.242188 281.199219 C 35.453125 281.003906 35.710938 280.90625 36.015625 280.90625 Z M 36.914062 285.09375 L 36.914062 296.257812 L 35.078125 296.257812 L 35.078125 285.09375 Z M 36.914062 285.09375 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 47.746094 293.175781 C 47.746094 294.257812 47.34375 295.078125 46.535156 295.632812 C 45.730469 296.1875 44.644531 296.464844 43.28125 296.464844 C 42.5 296.464844 41.824219 296.402344 41.253906 296.277344 C 40.699219 296.152344 40.203125 295.980469 39.773438 295.757812 L 39.773438 294.089844 C 40.21875 294.3125 40.753906 294.523438 41.378906 294.714844 C 42.019531 294.898438 42.667969 294.988281 43.320312 294.988281 C 44.253906 294.988281 44.929688 294.839844 45.347656 294.550781 C 45.765625 294.242188 45.972656 293.839844 45.972656 293.339844 C 45.972656 293.0625 45.898438 292.8125 45.742188 292.589844 C 45.589844 292.371094 45.3125 292.148438 44.910156 291.925781 C 44.519531 291.703125 43.957031 291.453125 43.21875 291.175781 C 42.492188 290.898438 41.875 290.621094 41.359375 290.34375 C 40.84375 290.066406 40.449219 289.730469 40.171875 289.34375 C 39.890625 288.953125 39.753906 288.453125 39.753906 287.84375 C 39.753906 286.898438 40.136719 286.171875 40.902344 285.65625 C 41.679688 285.144531 42.695312 284.886719 43.949219 284.886719 C 44.628906 284.886719 45.261719 284.957031 45.847656 285.09375 C 46.445312 285.21875 47.003906 285.398438 47.519531 285.636719 L 46.890625 287.09375 C 46.417969 286.898438 45.925781 286.734375 45.410156 286.59375 C 44.894531 286.453125 44.367188 286.386719 43.824219 286.386719 C 43.070312 286.386719 42.492188 286.511719 42.089844 286.761719 C 41.699219 286.996094 41.507812 287.324219 41.507812 287.738281 C 41.507812 288.042969 41.597656 288.308594 41.777344 288.53125 C 41.957031 288.738281 42.257812 288.945312 42.675781 289.15625 C 43.105469 289.351562 43.675781 289.585938 44.386719 289.863281 C 45.097656 290.128906 45.703125 290.398438 46.203125 290.675781 C 46.703125 290.953125 47.085938 291.292969 47.351562 291.695312 C 47.617188 292.085938 47.746094 292.578125 47.746094 293.175781 Z M 47.746094 293.175781 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 54.699219 284.90625 C 56.0625 284.90625 57.070312 285.207031 57.726562 285.800781 C 58.378906 286.398438 58.707031 287.351562 58.707031 288.65625 L 58.707031 296.257812 L 57.371094 296.257812 L 57.015625 294.675781 L 56.933594 294.675781 C 56.445312 295.285156 55.929688 295.738281 55.386719 296.027344 C 54.859375 296.320312 54.121094 296.464844 53.175781 296.464844 C 52.160156 296.464844 51.316406 296.203125 50.648438 295.675781 C 49.980469 295.132812 49.648438 294.292969 49.648438 293.152344 C 49.648438 292.042969 50.085938 291.1875 50.960938 290.59375 C 51.839844 289.980469 53.1875 289.648438 55.011719 289.59375 L 56.910156 289.53125 L 56.910156 288.863281 C 56.910156 287.933594 56.710938 287.289062 56.304688 286.925781 C 55.902344 286.566406 55.332031 286.386719 54.59375 286.386719 C 54.007812 286.386719 53.453125 286.476562 52.925781 286.65625 C 52.394531 286.824219 51.902344 287.015625 51.441406 287.238281 L 50.878906 285.863281 C 51.367188 285.601562 51.941406 285.378906 52.609375 285.199219 C 53.277344 285.003906 53.976562 284.90625 54.699219 284.90625 Z M 56.890625 290.800781 L 55.242188 290.863281 C 53.847656 290.917969 52.882812 291.140625 52.339844 291.53125 C 51.8125 291.917969 51.546875 292.464844 51.546875 293.175781 C 51.546875 293.800781 51.734375 294.257812 52.109375 294.550781 C 52.5 294.839844 52.992188 294.988281 53.59375 294.988281 C 54.539062 294.988281 55.324219 294.730469 55.949219 294.214844 C 56.578125 293.6875 56.890625 292.882812 56.890625 291.800781 Z M 56.890625 290.800781 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 64.007812 280.429688 L 64.007812 284.28125 C 64.007812 284.753906 63.996094 285.199219 63.964844 285.613281 C 63.953125 286.015625 63.933594 286.335938 63.902344 286.574219 L 64.007812 286.574219 C 64.328125 286.101562 64.765625 285.703125 65.324219 285.386719 C 65.878906 285.066406 66.597656 284.90625 67.472656 284.90625 C 68.863281 284.90625 69.976562 285.394531 70.8125 286.363281 C 71.660156 287.324219 72.085938 288.757812 72.085938 290.675781 C 72.085938 292.589844 71.660156 294.035156 70.8125 295.007812 C 69.964844 295.980469 68.851562 296.464844 67.472656 296.464844 C 66.597656 296.464844 65.878906 296.304688 65.324219 295.988281 C 64.765625 295.667969 64.328125 295.285156 64.007812 294.839844 L 63.863281 294.839844 L 63.488281 296.257812 L 62.171875 296.257812 L 62.171875 280.429688 Z M 67.160156 286.425781 C 65.976562 286.425781 65.15625 286.765625 64.695312 287.449219 C 64.238281 288.128906 64.007812 289.183594 64.007812 290.613281 L 64.007812 290.695312 C 64.007812 292.070312 64.230469 293.125 64.675781 293.863281 C 65.136719 294.585938 65.976562 294.945312 67.203125 294.945312 C 68.203125 294.945312 68.949219 294.578125 69.433594 293.839844 C 69.9375 293.105469 70.1875 292.042969 70.1875 290.65625 C 70.1875 287.835938 69.179688 286.425781 67.160156 286.425781 Z M 67.160156 286.425781 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 76.847656 296.257812 L 75.007812 296.257812 L 75.007812 280.429688 L 76.847656 280.429688 Z M 76.847656 296.257812 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 84.714844 284.886719 C 85.675781 284.886719 86.496094 285.09375 87.179688 285.511719 C 87.875 285.925781 88.402344 286.515625 88.765625 287.28125 C 89.140625 288.03125 89.328125 288.914062 89.328125 289.925781 L 89.328125 291.03125 L 81.667969 291.03125 C 81.695312 292.292969 82.015625 293.257812 82.628906 293.925781 C 83.253906 294.578125 84.125 294.902344 85.238281 294.902344 C 85.945312 294.902344 86.574219 294.839844 87.117188 294.714844 C 87.671875 294.578125 88.242188 294.382812 88.828125 294.132812 L 88.828125 295.738281 C 88.257812 295.988281 87.695312 296.167969 87.136719 296.277344 C 86.578125 296.402344 85.917969 296.464844 85.152344 296.464844 C 84.097656 296.464844 83.15625 296.25 82.335938 295.820312 C 81.527344 295.390625 80.894531 294.75 80.4375 293.902344 C 79.992188 293.042969 79.769531 291.996094 79.769531 290.757812 C 79.769531 289.539062 79.96875 288.488281 80.375 287.613281 C 80.789062 286.738281 81.367188 286.066406 82.105469 285.59375 C 82.859375 285.121094 83.726562 284.886719 84.714844 284.886719 Z M 84.695312 286.386719 C 83.816406 286.386719 83.121094 286.671875 82.605469 287.238281 C 82.105469 287.792969 81.808594 288.570312 81.710938 289.570312 L 87.40625 289.570312 C 87.394531 288.628906 87.171875 287.863281 86.738281 287.28125 C 86.308594 286.683594 85.625 286.386719 84.695312 286.386719 Z M 84.695312 286.386719 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 104.878906 293.175781 C 104.878906 294.257812 104.476562 295.078125 103.667969 295.632812 C 102.863281 296.1875 101.777344 296.464844 100.414062 296.464844 C 99.632812 296.464844 98.957031 296.402344 98.386719 296.277344 C 97.832031 296.152344 97.335938 295.980469 96.90625 295.757812 L 96.90625 294.089844 C 97.351562 294.3125 97.886719 294.523438 98.511719 294.714844 C 99.152344 294.898438 99.800781 294.988281 100.453125 294.988281 C 101.386719 294.988281 102.0625 294.839844 102.480469 294.550781 C 102.898438 294.242188 103.105469 293.839844 103.105469 293.339844 C 103.105469 293.0625 103.027344 292.8125 102.875 292.589844 C 102.722656 292.371094 102.445312 292.148438 102.039062 291.925781 C 101.652344 291.703125 101.085938 291.453125 100.351562 291.175781 C 99.625 290.898438 99.007812 290.621094 98.492188 290.34375 C 97.976562 290.066406 97.582031 289.730469 97.300781 289.34375 C 97.023438 288.953125 96.886719 288.453125 96.886719 287.84375 C 96.886719 286.898438 97.265625 286.171875 98.03125 285.65625 C 98.8125 285.144531 99.828125 284.886719 101.082031 284.886719 C 101.761719 284.886719 102.394531 284.957031 102.980469 285.09375 C 103.578125 285.21875 104.136719 285.398438 104.648438 285.636719 L 104.023438 287.09375 C 103.550781 286.898438 103.054688 286.734375 102.542969 286.59375 C 102.027344 286.453125 101.496094 286.386719 100.957031 286.386719 C 100.203125 286.386719 99.625 286.511719 99.222656 286.761719 C 98.832031 286.996094 98.636719 287.324219 98.636719 287.738281 C 98.636719 288.042969 98.730469 288.308594 98.910156 288.53125 C 99.089844 288.738281 99.390625 288.945312 99.808594 289.15625 C 100.238281 289.351562 100.808594 289.585938 101.519531 289.863281 C 102.230469 290.128906 102.832031 290.398438 103.335938 290.675781 C 103.835938 290.953125 104.21875 291.292969 104.484375 291.695312 C 104.746094 292.085938 104.878906 292.578125 104.878906 293.175781 Z M 104.878906 293.175781 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 111.328125 294.964844 C 111.609375 294.964844 111.894531 294.945312 112.183594 294.902344 C 112.476562 294.847656 112.714844 294.792969 112.894531 294.738281 L 112.894531 296.132812 C 112.699219 296.230469 112.421875 296.304688 112.058594 296.363281 C 111.699219 296.429688 111.351562 296.464844 111.015625 296.464844 C 110.433594 296.464844 109.890625 296.367188 109.386719 296.175781 C 108.902344 295.964844 108.503906 295.613281 108.199219 295.113281 C 107.890625 294.613281 107.738281 293.910156 107.738281 293.007812 L 107.738281 286.511719 L 106.152344 286.511719 L 106.152344 285.636719 L 107.761719 284.90625 L 108.492188 282.53125 L 109.578125 282.53125 L 109.578125 285.09375 L 112.8125 285.09375 L 112.8125 286.511719 L 109.578125 286.511719 L 109.578125 292.964844 C 109.578125 293.648438 109.734375 294.152344 110.054688 294.488281 C 110.390625 294.804688 110.816406 294.964844 111.328125 294.964844 Z M 111.328125 294.964844 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 120.347656 284.886719 C 120.554688 284.886719 120.777344 284.898438 121.015625 284.925781 C 121.265625 284.941406 121.480469 284.96875 121.664062 285.011719 L 121.433594 286.699219 C 121.25 286.65625 121.050781 286.621094 120.828125 286.59375 C 120.617188 286.566406 120.417969 286.550781 120.222656 286.550781 C 119.652344 286.550781 119.117188 286.710938 118.613281 287.03125 C 118.113281 287.335938 117.710938 287.773438 117.402344 288.34375 C 117.113281 288.898438 116.964844 289.550781 116.964844 290.300781 L 116.964844 296.257812 L 115.128906 296.257812 L 115.128906 285.09375 L 116.632812 285.09375 L 116.839844 287.136719 L 116.925781 287.136719 C 117.285156 286.523438 117.75 285.996094 118.324219 285.550781 C 118.894531 285.109375 119.566406 284.886719 120.347656 284.886719 Z M 120.347656 284.886719 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 124.6875 280.90625 C 124.96875 280.90625 125.210938 281.003906 125.417969 281.199219 C 125.640625 281.378906 125.753906 281.671875 125.753906 282.074219 C 125.753906 282.464844 125.640625 282.753906 125.417969 282.949219 C 125.210938 283.144531 124.96875 283.242188 124.6875 283.242188 C 124.382812 283.242188 124.125 283.144531 123.917969 282.949219 C 123.707031 282.753906 123.605469 282.464844 123.605469 282.074219 C 123.605469 281.671875 123.707031 281.378906 123.917969 281.199219 C 124.125 281.003906 124.382812 280.90625 124.6875 280.90625 Z M 125.585938 285.09375 L 125.585938 296.257812 L 123.75 296.257812 L 123.75 285.09375 Z M 125.585938 285.09375 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 133.625 296.464844 C 132.636719 296.464844 131.75 296.265625 130.972656 295.863281 C 130.207031 295.457031 129.601562 294.835938 129.15625 293.988281 C 128.726562 293.140625 128.507812 292.058594 128.507812 290.738281 C 128.507812 289.363281 128.738281 288.246094 129.199219 287.386719 C 129.65625 286.523438 130.277344 285.890625 131.054688 285.488281 C 131.847656 285.085938 132.746094 284.886719 133.75 284.886719 C 134.320312 284.886719 134.867188 284.949219 135.398438 285.074219 C 135.925781 285.183594 136.359375 285.324219 136.691406 285.488281 L 136.128906 287.011719 C 135.792969 286.886719 135.40625 286.765625 134.960938 286.65625 C 134.515625 286.546875 134.097656 286.488281 133.707031 286.488281 C 131.507812 286.488281 130.410156 287.898438 130.410156 290.71875 C 130.410156 292.0625 130.671875 293.097656 131.203125 293.820312 C 131.746094 294.527344 132.542969 294.882812 133.601562 294.882812 C 134.214844 294.882812 134.75 294.820312 135.210938 294.695312 C 135.683594 294.570312 136.113281 294.417969 136.503906 294.238281 L 136.503906 295.863281 C 136.128906 296.054688 135.710938 296.203125 135.25 296.300781 C 134.804688 296.410156 134.261719 296.464844 133.625 296.464844 Z M 133.625 296.464844 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 142.890625 294.964844 C 143.167969 294.964844 143.453125 294.945312 143.746094 294.902344 C 144.039062 294.847656 144.277344 294.792969 144.457031 294.738281 L 144.457031 296.132812 C 144.261719 296.230469 143.984375 296.304688 143.621094 296.363281 C 143.261719 296.429688 142.910156 296.464844 142.578125 296.464844 C 141.992188 296.464844 141.449219 296.367188 140.949219 296.175781 C 140.460938 295.964844 140.066406 295.613281 139.761719 295.113281 C 139.453125 294.613281 139.300781 293.910156 139.300781 293.007812 L 139.300781 286.511719 L 137.714844 286.511719 L 137.714844 285.636719 L 139.320312 284.90625 L 140.050781 282.53125 L 141.136719 282.53125 L 141.136719 285.09375 L 144.375 285.09375 L 144.375 286.511719 L 141.136719 286.511719 L 141.136719 292.964844 C 141.136719 293.648438 141.296875 294.152344 141.617188 294.488281 C 141.953125 294.804688 142.375 294.964844 142.890625 294.964844 Z M 142.890625 294.964844 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 155.855469 294.964844 C 156.132812 294.964844 156.417969 294.945312 156.710938 294.902344 C 157 294.847656 157.238281 294.792969 157.417969 294.738281 L 157.417969 296.132812 C 157.222656 296.230469 156.945312 296.304688 156.585938 296.363281 C 156.222656 296.429688 155.875 296.464844 155.539062 296.464844 C 154.957031 296.464844 154.414062 296.367188 153.914062 296.175781 C 153.425781 295.964844 153.027344 295.613281 152.722656 295.113281 C 152.417969 294.613281 152.261719 293.910156 152.261719 293.007812 L 152.261719 286.511719 L 150.675781 286.511719 L 150.675781 285.636719 L 152.285156 284.90625 L 153.015625 282.53125 L 154.101562 282.53125 L 154.101562 285.09375 L 157.335938 285.09375 L 157.335938 286.511719 L 154.101562 286.511719 L 154.101562 292.964844 C 154.101562 293.648438 154.261719 294.152344 154.582031 294.488281 C 154.914062 294.804688 155.339844 294.964844 155.855469 294.964844 Z M 155.855469 294.964844 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 164.871094 284.886719 C 165.082031 284.886719 165.304688 284.898438 165.539062 284.925781 C 165.789062 284.941406 166.003906 284.96875 166.1875 285.011719 L 165.957031 286.699219 C 165.777344 286.65625 165.574219 286.621094 165.351562 286.59375 C 165.144531 286.566406 164.941406 286.550781 164.746094 286.550781 C 164.175781 286.550781 163.640625 286.710938 163.140625 287.03125 C 162.636719 287.335938 162.234375 287.773438 161.929688 288.34375 C 161.636719 288.898438 161.488281 289.550781 161.488281 290.300781 L 161.488281 296.257812 L 159.652344 296.257812 L 159.652344 285.09375 L 161.15625 285.09375 L 161.363281 287.136719 L 161.449219 287.136719 C 161.808594 286.523438 162.277344 285.996094 162.847656 285.550781 C 163.417969 285.109375 164.09375 284.886719 164.871094 284.886719 Z M 164.871094 284.886719 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 172.09375 284.90625 C 173.457031 284.90625 174.464844 285.207031 175.121094 285.800781 C 175.773438 286.398438 176.101562 287.351562 176.101562 288.65625 L 176.101562 296.257812 L 174.765625 296.257812 L 174.410156 294.675781 L 174.328125 294.675781 C 173.839844 295.285156 173.324219 295.738281 172.78125 296.027344 C 172.253906 296.320312 171.515625 296.464844 170.570312 296.464844 C 169.554688 296.464844 168.710938 296.203125 168.042969 295.675781 C 167.375 295.132812 167.042969 294.292969 167.042969 293.152344 C 167.042969 292.042969 167.480469 291.1875 168.355469 290.59375 C 169.234375 289.980469 170.582031 289.648438 172.40625 289.59375 L 174.304688 289.53125 L 174.304688 288.863281 C 174.304688 287.933594 174.105469 287.289062 173.699219 286.925781 C 173.296875 286.566406 172.726562 286.386719 171.988281 286.386719 C 171.40625 286.386719 170.847656 286.476562 170.320312 286.65625 C 169.789062 286.824219 169.296875 287.015625 168.835938 287.238281 L 168.273438 285.863281 C 168.761719 285.601562 169.339844 285.378906 170.007812 285.199219 C 170.675781 285.003906 171.371094 284.90625 172.09375 284.90625 Z M 174.285156 290.800781 L 172.636719 290.863281 C 171.246094 290.917969 170.277344 291.140625 169.734375 291.53125 C 169.207031 291.917969 168.941406 292.464844 168.941406 293.175781 C 168.941406 293.800781 169.128906 294.257812 169.503906 294.550781 C 169.894531 294.839844 170.390625 294.988281 170.988281 294.988281 C 171.933594 294.988281 172.71875 294.730469 173.347656 294.214844 C 173.972656 293.6875 174.285156 292.882812 174.285156 291.800781 Z M 174.285156 290.800781 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 184.054688 296.464844 C 183.066406 296.464844 182.183594 296.265625 181.402344 295.863281 C 180.636719 295.457031 180.03125 294.835938 179.585938 293.988281 C 179.15625 293.140625 178.941406 292.058594 178.941406 290.738281 C 178.941406 289.363281 179.171875 288.246094 179.628906 287.386719 C 180.089844 286.523438 180.707031 285.890625 181.488281 285.488281 C 182.28125 285.085938 183.179688 284.886719 184.179688 284.886719 C 184.75 284.886719 185.300781 284.949219 185.828125 285.074219 C 186.359375 285.183594 186.789062 285.324219 187.125 285.488281 L 186.558594 287.011719 C 186.226562 286.886719 185.835938 286.765625 185.390625 286.65625 C 184.945312 286.546875 184.527344 286.488281 184.136719 286.488281 C 181.9375 286.488281 180.839844 287.898438 180.839844 290.71875 C 180.839844 292.0625 181.105469 293.097656 181.632812 293.820312 C 182.175781 294.527344 182.976562 294.882812 184.035156 294.882812 C 184.644531 294.882812 185.183594 294.820312 185.640625 294.695312 C 186.113281 294.570312 186.546875 294.417969 186.933594 294.238281 L 186.933594 295.863281 C 186.558594 296.054688 186.140625 296.203125 185.683594 296.300781 C 185.238281 296.410156 184.695312 296.464844 184.054688 296.464844 Z M 184.054688 296.464844 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 191.402344 280.429688 L 191.402344 288.695312 C 191.402344 288.917969 191.386719 289.210938 191.359375 289.570312 C 191.347656 289.933594 191.332031 290.246094 191.320312 290.507812 L 191.402344 290.507812 C 191.484375 290.398438 191.609375 290.238281 191.777344 290.03125 C 191.945312 289.820312 192.113281 289.613281 192.277344 289.40625 C 192.460938 289.183594 192.613281 289.003906 192.738281 288.863281 L 196.308594 285.09375 L 198.457031 285.09375 L 193.929688 289.863281 L 198.769531 296.257812 L 196.558594 296.257812 L 192.675781 291.050781 L 191.402344 292.15625 L 191.402344 296.257812 L 189.585938 296.257812 L 189.585938 280.429688 Z M 191.402344 280.429688 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 201.671875 280.90625 C 201.949219 280.90625 202.195312 281.003906 202.402344 281.199219 C 202.625 281.378906 202.738281 281.671875 202.738281 282.074219 C 202.738281 282.464844 202.625 282.753906 202.402344 282.949219 C 202.195312 283.144531 201.949219 283.242188 201.671875 283.242188 C 201.367188 283.242188 201.109375 283.144531 200.898438 282.949219 C 200.691406 282.753906 200.585938 282.464844 200.585938 282.074219 C 200.585938 281.671875 200.691406 281.378906 200.898438 281.199219 C 201.109375 281.003906 201.367188 280.90625 201.671875 280.90625 Z M 202.570312 285.09375 L 202.570312 296.257812 L 200.734375 296.257812 L 200.734375 285.09375 Z M 202.570312 285.09375 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 211.503906 284.886719 C 212.839844 284.886719 213.847656 285.210938 214.53125 285.863281 C 215.210938 286.503906 215.554688 287.542969 215.554688 288.988281 L 215.554688 296.257812 L 213.738281 296.257812 L 213.738281 289.113281 C 213.738281 287.324219 212.902344 286.425781 211.234375 286.425781 C 209.992188 286.425781 209.136719 286.773438 208.664062 287.46875 C 208.191406 288.164062 207.957031 289.164062 207.957031 290.46875 L 207.957031 296.257812 L 206.117188 296.257812 L 206.117188 285.09375 L 207.601562 285.09375 L 207.871094 286.613281 L 207.976562 286.613281 C 208.339844 286.03125 208.839844 285.601562 209.480469 285.324219 C 210.121094 285.03125 210.792969 284.886719 211.503906 284.886719 Z M 211.503906 284.886719 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 222.984375 284.886719 C 223.722656 284.886719 224.382812 285.023438 224.96875 285.300781 C 225.566406 285.582031 226.074219 286.003906 226.492188 286.574219 L 226.597656 286.574219 L 226.847656 285.09375 L 228.308594 285.09375 L 228.308594 296.445312 C 228.308594 298.042969 227.898438 299.242188 227.074219 300.046875 C 226.269531 300.851562 225.007812 301.253906 223.296875 301.253906 C 221.65625 301.253906 220.3125 301.019531 219.269531 300.546875 L 219.269531 298.859375 C 220.367188 299.445312 221.746094 299.734375 223.402344 299.734375 C 224.363281 299.734375 225.113281 299.449219 225.65625 298.882812 C 226.214844 298.324219 226.492188 297.5625 226.492188 296.589844 L 226.492188 296.152344 C 226.492188 295.988281 226.5 295.75 226.511719 295.445312 C 226.527344 295.125 226.539062 294.902344 226.554688 294.777344 L 226.46875 294.777344 C 225.71875 295.902344 224.5625 296.464844 223.003906 296.464844 C 221.558594 296.464844 220.425781 295.957031 219.601562 294.945312 C 218.796875 293.929688 218.390625 292.515625 218.390625 290.695312 C 218.390625 288.917969 218.796875 287.511719 219.601562 286.46875 C 220.425781 285.414062 221.550781 284.886719 222.984375 284.886719 Z M 223.234375 286.425781 C 222.304688 286.425781 221.578125 286.800781 221.0625 287.550781 C 220.550781 288.289062 220.292969 289.34375 220.292969 290.71875 C 220.292969 292.09375 220.542969 293.148438 221.042969 293.882812 C 221.558594 294.605469 222.304688 294.964844 223.277344 294.964844 C 224.402344 294.964844 225.226562 294.667969 225.738281 294.070312 C 226.253906 293.460938 226.511719 292.480469 226.511719 291.132812 L 226.511719 290.695312 C 226.511719 289.167969 226.246094 288.078125 225.71875 287.425781 C 225.191406 286.761719 224.363281 286.425781 223.234375 286.425781 Z M 223.234375 286.425781 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 27.5625 310.917969 C 28.941406 310.917969 30.046875 311.398438 30.882812 312.355469 C 31.730469 313.3125 32.15625 314.757812 32.15625 316.6875 C 32.15625 318.589844 31.730469 320.035156 30.882812 321.019531 C 30.046875 322.007812 28.933594 322.5 27.542969 322.5 C 26.679688 322.5 25.960938 322.339844 25.390625 322.019531 C 24.835938 321.6875 24.394531 321.304688 24.078125 320.875 L 23.949219 320.875 C 23.980469 321.109375 24.007812 321.410156 24.035156 321.769531 C 24.0625 322.132812 24.078125 322.445312 24.078125 322.707031 L 24.078125 327.289062 L 22.238281 327.289062 L 22.238281 311.128906 L 23.742188 311.128906 L 23.992188 312.648438 L 24.078125 312.648438 C 24.410156 312.160156 24.847656 311.753906 25.390625 311.417969 C 25.933594 311.085938 26.65625 310.917969 27.5625 310.917969 Z M 27.226562 312.460938 C 26.085938 312.460938 25.28125 312.78125 24.808594 313.417969 C 24.347656 314.058594 24.105469 315.027344 24.078125 316.335938 L 24.078125 316.6875 C 24.078125 318.0625 24.300781 319.125 24.746094 319.875 C 25.203125 320.609375 26.046875 320.980469 27.269531 320.980469 C 27.953125 320.980469 28.507812 320.792969 28.941406 320.417969 C 29.386719 320.042969 29.710938 319.535156 29.921875 318.894531 C 30.144531 318.242188 30.253906 317.5 30.253906 316.667969 C 30.253906 315.390625 30.003906 314.371094 29.503906 313.605469 C 29.015625 312.84375 28.257812 312.460938 27.226562 312.460938 Z M 27.226562 312.460938 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 40.296875 310.917969 C 40.503906 310.917969 40.726562 310.933594 40.964844 310.960938 C 41.214844 310.976562 41.429688 311.003906 41.609375 311.042969 L 41.382812 312.730469 C 41.199219 312.691406 41 312.65625 40.777344 312.628906 C 40.566406 312.597656 40.363281 312.585938 40.171875 312.585938 C 39.601562 312.585938 39.0625 312.746094 38.5625 313.0625 C 38.0625 313.371094 37.660156 313.808594 37.351562 314.375 C 37.058594 314.933594 36.914062 315.585938 36.914062 316.335938 L 36.914062 322.289062 L 35.078125 322.289062 L 35.078125 311.128906 L 36.578125 311.128906 L 36.789062 313.167969 L 36.871094 313.167969 C 37.234375 312.558594 37.699219 312.03125 38.269531 311.585938 C 38.839844 311.140625 39.515625 310.917969 40.296875 310.917969 Z M 40.296875 310.917969 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 53.007812 316.6875 C 53.007812 318.535156 52.535156 319.964844 51.589844 320.980469 C 50.65625 321.992188 49.390625 322.5 47.789062 322.5 C 46.800781 322.5 45.917969 322.277344 45.136719 321.832031 C 44.371094 321.375 43.765625 320.714844 43.320312 319.855469 C 42.875 318.980469 42.652344 317.925781 42.652344 316.6875 C 42.652344 314.839844 43.121094 313.417969 44.050781 312.417969 C 44.984375 311.417969 46.25 310.917969 47.851562 310.917969 C 48.867188 310.917969 49.757812 311.148438 50.523438 311.605469 C 51.304688 312.050781 51.910156 312.703125 52.339844 313.5625 C 52.785156 314.410156 53.007812 315.453125 53.007812 316.6875 Z M 44.554688 316.6875 C 44.554688 318.007812 44.8125 319.054688 45.324219 319.832031 C 45.855469 320.597656 46.691406 320.980469 47.832031 320.980469 C 48.957031 320.980469 49.785156 320.597656 50.316406 319.832031 C 50.84375 319.054688 51.109375 318.007812 51.109375 316.6875 C 51.109375 315.371094 50.84375 314.335938 50.316406 313.585938 C 49.785156 312.835938 48.949219 312.460938 47.808594 312.460938 C 46.667969 312.460938 45.839844 312.835938 45.324219 313.585938 C 44.8125 314.335938 44.554688 315.371094 44.554688 316.6875 Z M 44.554688 316.6875 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 59.644531 321 C 59.925781 321 60.210938 320.980469 60.5 320.9375 C 60.792969 320.882812 61.03125 320.824219 61.210938 320.769531 L 61.210938 322.164062 C 61.015625 322.261719 60.738281 322.339844 60.375 322.394531 C 60.015625 322.464844 59.667969 322.5 59.332031 322.5 C 58.746094 322.5 58.207031 322.402344 57.703125 322.207031 C 57.21875 322 56.820312 321.644531 56.515625 321.144531 C 56.207031 320.644531 56.054688 319.945312 56.054688 319.042969 L 56.054688 312.542969 L 54.46875 312.542969 L 54.46875 311.667969 L 56.074219 310.941406 L 56.808594 308.566406 L 57.890625 308.566406 L 57.890625 311.128906 L 61.128906 311.128906 L 61.128906 312.542969 L 57.890625 312.542969 L 57.890625 319 C 57.890625 319.679688 58.050781 320.1875 58.371094 320.519531 C 58.707031 320.839844 59.128906 321 59.644531 321 Z M 59.644531 321 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 67.765625 310.917969 C 68.726562 310.917969 69.546875 311.128906 70.230469 311.542969 C 70.925781 311.960938 71.453125 312.550781 71.816406 313.3125 C 72.191406 314.0625 72.378906 314.945312 72.378906 315.960938 L 72.378906 317.0625 L 64.71875 317.0625 C 64.746094 318.328125 65.066406 319.292969 65.679688 319.957031 C 66.304688 320.609375 67.175781 320.9375 68.289062 320.9375 C 68.996094 320.9375 69.625 320.875 70.167969 320.75 C 70.722656 320.609375 71.292969 320.417969 71.878906 320.167969 L 71.878906 321.769531 C 71.308594 322.019531 70.742188 322.199219 70.1875 322.3125 C 69.628906 322.4375 68.96875 322.5 68.203125 322.5 C 67.144531 322.5 66.207031 322.285156 65.386719 321.851562 C 64.578125 321.421875 63.945312 320.785156 63.488281 319.9375 C 63.042969 319.078125 62.820312 318.027344 62.820312 316.792969 C 62.820312 315.570312 63.019531 314.523438 63.421875 313.648438 C 63.839844 312.773438 64.417969 312.097656 65.15625 311.628906 C 65.90625 311.15625 66.777344 310.917969 67.765625 310.917969 Z M 67.746094 312.417969 C 66.867188 312.417969 66.171875 312.703125 65.65625 313.273438 C 65.15625 313.828125 64.855469 314.605469 64.757812 315.605469 L 70.457031 315.605469 C 70.445312 314.660156 70.222656 313.898438 69.789062 313.3125 C 69.359375 312.71875 68.675781 312.417969 67.746094 312.417969 Z M 67.746094 312.417969 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 79.707031 322.5 C 78.71875 322.5 77.832031 322.296875 77.054688 321.894531 C 76.289062 321.492188 75.683594 320.867188 75.238281 320.019531 C 74.808594 319.171875 74.589844 318.089844 74.589844 316.773438 C 74.589844 315.398438 74.820312 314.28125 75.28125 313.417969 C 75.738281 312.558594 76.359375 311.925781 77.136719 311.523438 C 77.929688 311.121094 78.828125 310.917969 79.832031 310.917969 C 80.402344 310.917969 80.949219 310.980469 81.480469 311.105469 C 82.007812 311.21875 82.441406 311.355469 82.773438 311.523438 L 82.210938 313.042969 C 81.875 312.917969 81.488281 312.800781 81.042969 312.691406 C 80.597656 312.578125 80.179688 312.523438 79.789062 312.523438 C 77.589844 312.523438 76.492188 313.933594 76.492188 316.75 C 76.492188 318.097656 76.753906 319.132812 77.285156 319.855469 C 77.828125 320.5625 78.628906 320.917969 79.683594 320.917969 C 80.296875 320.917969 80.832031 320.855469 81.292969 320.730469 C 81.765625 320.605469 82.195312 320.449219 82.585938 320.269531 L 82.585938 321.894531 C 82.210938 322.089844 81.792969 322.234375 81.332031 322.332031 C 80.886719 322.445312 80.34375 322.5 79.707031 322.5 Z M 79.707031 322.5 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 88.972656 321 C 89.25 321 89.539062 320.980469 89.828125 320.9375 C 90.121094 320.882812 90.359375 320.824219 90.539062 320.769531 L 90.539062 322.164062 C 90.34375 322.261719 90.066406 322.339844 89.703125 322.394531 C 89.34375 322.464844 88.996094 322.5 88.660156 322.5 C 88.074219 322.5 87.535156 322.402344 87.03125 322.207031 C 86.546875 322 86.148438 321.644531 85.84375 321.144531 C 85.535156 320.644531 85.382812 319.945312 85.382812 319.042969 L 85.382812 312.542969 L 83.796875 312.542969 L 83.796875 311.667969 L 85.402344 310.941406 L 86.132812 308.566406 L 87.21875 308.566406 L 87.21875 311.128906 L 90.457031 311.128906 L 90.457031 312.542969 L 87.21875 312.542969 L 87.21875 319 C 87.21875 319.679688 87.378906 320.1875 87.699219 320.519531 C 88.035156 320.839844 88.457031 321 88.972656 321 Z M 88.972656 321 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 93.710938 306.941406 C 93.992188 306.941406 94.234375 307.039062 94.441406 307.234375 C 94.664062 307.414062 94.777344 307.703125 94.777344 308.109375 C 94.777344 308.496094 94.664062 308.789062 94.441406 308.980469 C 94.234375 309.175781 93.992188 309.273438 93.710938 309.273438 C 93.40625 309.273438 93.148438 309.175781 92.941406 308.980469 C 92.730469 308.789062 92.625 308.496094 92.625 308.109375 C 92.625 307.703125 92.730469 307.414062 92.941406 307.234375 C 93.148438 307.039062 93.40625 306.941406 93.710938 306.941406 Z M 94.609375 311.128906 L 94.609375 322.289062 L 92.773438 322.289062 L 92.773438 311.128906 Z M 94.609375 311.128906 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 107.886719 316.6875 C 107.886719 318.535156 107.414062 319.964844 106.464844 320.980469 C 105.535156 321.992188 104.265625 322.5 102.667969 322.5 C 101.679688 322.5 100.796875 322.277344 100.015625 321.832031 C 99.25 321.375 98.644531 320.714844 98.199219 319.855469 C 97.753906 318.980469 97.53125 317.925781 97.53125 316.6875 C 97.53125 314.839844 98 313.417969 98.929688 312.417969 C 99.863281 311.417969 101.128906 310.917969 102.730469 310.917969 C 103.746094 310.917969 104.636719 311.148438 105.402344 311.605469 C 106.179688 312.050781 106.785156 312.703125 107.21875 313.5625 C 107.664062 314.410156 107.886719 315.453125 107.886719 316.6875 Z M 99.429688 316.6875 C 99.429688 318.007812 99.6875 319.054688 100.203125 319.832031 C 100.734375 320.597656 101.566406 320.980469 102.707031 320.980469 C 103.835938 320.980469 104.664062 320.597656 105.191406 319.832031 C 105.722656 319.054688 105.984375 318.007812 105.984375 316.6875 C 105.984375 315.371094 105.722656 314.335938 105.191406 313.585938 C 104.664062 312.835938 103.828125 312.460938 102.6875 312.460938 C 101.546875 312.460938 100.71875 312.835938 100.203125 313.585938 C 99.6875 314.335938 99.429688 315.371094 99.429688 316.6875 Z M 99.429688 316.6875 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 116.171875 310.917969 C 117.507812 310.917969 118.515625 311.246094 119.199219 311.898438 C 119.882812 312.535156 120.222656 313.578125 120.222656 315.023438 L 120.222656 322.289062 L 118.40625 322.289062 L 118.40625 315.148438 C 118.40625 313.355469 117.570312 312.460938 115.902344 312.460938 C 114.664062 312.460938 113.808594 312.808594 113.332031 313.5 C 112.859375 314.195312 112.625 315.195312 112.625 316.5 L 112.625 322.289062 L 110.785156 322.289062 L 110.785156 311.128906 L 112.269531 311.128906 L 112.539062 312.648438 L 112.644531 312.648438 C 113.007812 312.066406 113.507812 311.632812 114.148438 311.355469 C 114.789062 311.066406 115.460938 310.917969 116.171875 310.917969 Z M 116.171875 310.917969 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 134.269531 312.542969 L 131.453125 312.542969 L 131.453125 322.289062 L 129.617188 322.289062 L 129.617188 312.542969 L 127.652344 312.542969 L 127.652344 311.691406 L 129.617188 311.066406 L 129.617188 310.417969 C 129.617188 308.976562 129.933594 307.941406 130.574219 307.316406 C 131.214844 306.675781 132.105469 306.359375 133.246094 306.359375 C 133.691406 306.359375 134.097656 306.398438 134.457031 306.484375 C 134.832031 306.550781 135.152344 306.636719 135.417969 306.734375 L 134.9375 308.171875 C 134.714844 308.101562 134.457031 308.03125 134.164062 307.960938 C 133.875 307.890625 133.574219 307.859375 133.269531 307.859375 C 132.65625 307.859375 132.195312 308.066406 131.890625 308.484375 C 131.597656 308.886719 131.453125 309.523438 131.453125 310.398438 L 131.453125 311.128906 L 134.269531 311.128906 Z M 134.269531 312.542969 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 146.023438 316.6875 C 146.023438 318.535156 145.550781 319.964844 144.601562 320.980469 C 143.671875 321.992188 142.402344 322.5 140.804688 322.5 C 139.816406 322.5 138.933594 322.277344 138.152344 321.832031 C 137.386719 321.375 136.78125 320.714844 136.335938 319.855469 C 135.890625 318.980469 135.667969 317.925781 135.667969 316.6875 C 135.667969 314.839844 136.136719 313.417969 137.066406 312.417969 C 138 311.417969 139.265625 310.917969 140.867188 310.917969 C 141.882812 310.917969 142.773438 311.148438 143.539062 311.605469 C 144.316406 312.050781 144.921875 312.703125 145.355469 313.5625 C 145.800781 314.410156 146.023438 315.453125 146.023438 316.6875 Z M 137.566406 316.6875 C 137.566406 318.007812 137.824219 319.054688 138.339844 319.832031 C 138.871094 320.597656 139.703125 320.980469 140.84375 320.980469 C 141.972656 320.980469 142.800781 320.597656 143.328125 319.832031 C 143.859375 319.054688 144.121094 318.007812 144.121094 316.6875 C 144.121094 315.371094 143.859375 314.335938 143.328125 313.585938 C 142.800781 312.835938 141.964844 312.460938 140.824219 312.460938 C 139.683594 312.460938 138.855469 312.835938 138.339844 313.585938 C 137.824219 314.335938 137.566406 315.371094 137.566406 316.6875 Z M 137.566406 316.6875 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 154.140625 310.917969 C 154.351562 310.917969 154.574219 310.933594 154.808594 310.960938 C 155.0625 310.976562 155.277344 311.003906 155.457031 311.042969 L 155.226562 312.730469 C 155.046875 312.691406 154.84375 312.65625 154.621094 312.628906 C 154.414062 312.597656 154.210938 312.585938 154.015625 312.585938 C 153.445312 312.585938 152.910156 312.746094 152.410156 313.0625 C 151.910156 313.371094 151.503906 313.808594 151.199219 314.375 C 150.90625 314.933594 150.761719 315.585938 150.761719 316.335938 L 150.761719 322.289062 L 148.921875 322.289062 L 148.921875 311.128906 L 150.425781 311.128906 L 150.636719 313.167969 L 150.71875 313.167969 C 151.082031 312.558594 151.546875 312.03125 152.117188 311.585938 C 152.6875 311.140625 153.363281 310.917969 154.140625 310.917969 Z M 154.140625 310.917969 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 166.707031 321 C 166.988281 321 167.273438 320.980469 167.5625 320.9375 C 167.855469 320.882812 168.09375 320.824219 168.273438 320.769531 L 168.273438 322.164062 C 168.078125 322.261719 167.800781 322.339844 167.4375 322.394531 C 167.078125 322.464844 166.730469 322.5 166.394531 322.5 C 165.8125 322.5 165.269531 322.402344 164.765625 322.207031 C 164.28125 322 163.882812 321.644531 163.578125 321.144531 C 163.269531 320.644531 163.117188 319.945312 163.117188 319.042969 L 163.117188 312.542969 L 161.53125 312.542969 L 161.53125 311.667969 L 163.140625 310.941406 L 163.871094 308.566406 L 164.953125 308.566406 L 164.953125 311.128906 L 168.191406 311.128906 L 168.191406 312.542969 L 164.953125 312.542969 L 164.953125 319 C 164.953125 319.679688 165.113281 320.1875 165.433594 320.519531 C 165.769531 320.839844 166.195312 321 166.707031 321 Z M 166.707031 321 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 172.34375 306.460938 L 172.34375 311.105469 C 172.34375 311.660156 172.308594 312.183594 172.238281 312.667969 L 172.367188 312.667969 C 172.726562 312.097656 173.214844 311.667969 173.828125 311.378906 C 174.453125 311.085938 175.128906 310.941406 175.851562 310.941406 C 177.214844 310.941406 178.238281 311.265625 178.917969 311.917969 C 179.601562 312.558594 179.941406 313.59375 179.941406 315.023438 L 179.941406 322.289062 L 178.125 322.289062 L 178.125 315.148438 C 178.125 313.355469 177.292969 312.460938 175.621094 312.460938 C 174.371094 312.460938 173.507812 312.816406 173.035156 313.523438 C 172.574219 314.21875 172.34375 315.214844 172.34375 316.523438 L 172.34375 322.289062 L 170.507812 322.289062 L 170.507812 306.460938 Z M 172.34375 306.460938 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 184.347656 306.941406 C 184.625 306.941406 184.867188 307.039062 185.078125 307.234375 C 185.300781 307.414062 185.410156 307.703125 185.410156 308.109375 C 185.410156 308.496094 185.300781 308.789062 185.078125 308.980469 C 184.867188 309.175781 184.625 309.273438 184.347656 309.273438 C 184.039062 309.273438 183.785156 309.175781 183.574219 308.980469 C 183.367188 308.789062 183.261719 308.496094 183.261719 308.109375 C 183.261719 307.703125 183.367188 307.414062 183.574219 307.234375 C 183.785156 307.039062 184.039062 306.941406 184.347656 306.941406 Z M 185.246094 311.128906 L 185.246094 322.289062 L 183.40625 322.289062 L 183.40625 311.128906 Z M 185.246094 311.128906 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 196.078125 319.207031 C 196.078125 320.292969 195.675781 321.109375 194.867188 321.664062 C 194.058594 322.222656 192.976562 322.5 191.609375 322.5 C 190.832031 322.5 190.15625 322.4375 189.585938 322.3125 C 189.03125 322.1875 188.535156 322.011719 188.105469 321.789062 L 188.105469 320.125 C 188.550781 320.347656 189.085938 320.554688 189.710938 320.75 C 190.351562 320.929688 191 321.019531 191.652344 321.019531 C 192.585938 321.019531 193.261719 320.875 193.675781 320.582031 C 194.09375 320.277344 194.304688 319.875 194.304688 319.375 C 194.304688 319.097656 194.226562 318.847656 194.074219 318.625 C 193.921875 318.402344 193.644531 318.179688 193.238281 317.957031 C 192.847656 317.738281 192.285156 317.488281 191.546875 317.207031 C 190.824219 316.929688 190.207031 316.652344 189.691406 316.375 C 189.175781 316.097656 188.777344 315.765625 188.5 315.375 C 188.222656 314.988281 188.082031 314.488281 188.082031 313.875 C 188.082031 312.933594 188.464844 312.203125 189.230469 311.691406 C 190.011719 311.175781 191.027344 310.917969 192.277344 310.917969 C 192.960938 310.917969 193.59375 310.988281 194.179688 311.128906 C 194.777344 311.253906 195.332031 311.433594 195.847656 311.667969 L 195.222656 313.125 C 194.75 312.933594 194.253906 312.765625 193.738281 312.628906 C 193.226562 312.488281 192.695312 312.417969 192.152344 312.417969 C 191.402344 312.417969 190.824219 312.542969 190.421875 312.792969 C 190.03125 313.03125 189.835938 313.355469 189.835938 313.773438 C 189.835938 314.078125 189.925781 314.34375 190.109375 314.5625 C 190.289062 314.773438 190.589844 314.980469 191.003906 315.1875 C 191.4375 315.382812 192.007812 315.621094 192.71875 315.898438 C 193.425781 316.160156 194.03125 316.429688 194.535156 316.710938 C 195.035156 316.988281 195.417969 317.328125 195.679688 317.730469 C 195.945312 318.117188 196.078125 318.609375 196.078125 319.207031 Z M 196.078125 319.207031 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 211.503906 319.207031 C 211.503906 320.292969 211.101562 321.109375 210.292969 321.664062 C 209.484375 322.222656 208.402344 322.5 207.035156 322.5 C 206.257812 322.5 205.582031 322.4375 205.011719 322.3125 C 204.457031 322.1875 203.960938 322.011719 203.53125 321.789062 L 203.53125 320.125 C 203.976562 320.347656 204.511719 320.554688 205.136719 320.75 C 205.777344 320.929688 206.425781 321.019531 207.078125 321.019531 C 208.011719 321.019531 208.6875 320.875 209.101562 320.582031 C 209.519531 320.277344 209.730469 319.875 209.730469 319.375 C 209.730469 319.097656 209.652344 318.847656 209.5 318.625 C 209.347656 318.402344 209.070312 318.179688 208.664062 317.957031 C 208.277344 317.738281 207.710938 317.488281 206.972656 317.207031 C 206.25 316.929688 205.632812 316.652344 205.117188 316.375 C 204.601562 316.097656 204.203125 315.765625 203.925781 315.375 C 203.648438 314.988281 203.507812 314.488281 203.507812 313.875 C 203.507812 312.933594 203.890625 312.203125 204.65625 311.691406 C 205.4375 311.175781 206.453125 310.917969 207.703125 310.917969 C 208.386719 310.917969 209.019531 310.988281 209.605469 311.128906 C 210.203125 311.253906 210.757812 311.433594 211.273438 311.667969 L 210.648438 313.125 C 210.175781 312.933594 209.679688 312.765625 209.167969 312.628906 C 208.652344 312.488281 208.121094 312.417969 207.578125 312.417969 C 206.828125 312.417969 206.25 312.542969 205.847656 312.792969 C 205.457031 313.03125 205.261719 313.355469 205.261719 313.773438 C 205.261719 314.078125 205.351562 314.34375 205.535156 314.5625 C 205.714844 314.773438 206.015625 314.980469 206.429688 315.1875 C 206.863281 315.382812 207.433594 315.621094 208.144531 315.898438 C 208.851562 316.160156 209.457031 316.429688 209.960938 316.710938 C 210.460938 316.988281 210.84375 317.328125 211.105469 317.730469 C 211.371094 318.117188 211.503906 318.609375 211.503906 319.207031 Z M 211.503906 319.207031 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 215.15625 306.941406 C 215.433594 306.941406 215.679688 307.039062 215.886719 307.234375 C 216.109375 307.414062 216.222656 307.703125 216.222656 308.109375 C 216.222656 308.496094 216.109375 308.789062 215.886719 308.980469 C 215.679688 309.175781 215.433594 309.273438 215.15625 309.273438 C 214.851562 309.273438 214.59375 309.175781 214.382812 308.980469 C 214.175781 308.789062 214.070312 308.496094 214.070312 308.109375 C 214.070312 307.703125 214.175781 307.414062 214.382812 307.234375 C 214.59375 307.039062 214.851562 306.941406 215.15625 306.941406 Z M 216.054688 311.128906 L 216.054688 322.289062 L 214.21875 322.289062 L 214.21875 311.128906 Z M 216.054688 311.128906 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 223.339844 321 C 223.617188 321 223.902344 320.980469 224.195312 320.9375 C 224.488281 320.882812 224.722656 320.824219 224.90625 320.769531 L 224.90625 322.164062 C 224.710938 322.261719 224.433594 322.339844 224.070312 322.394531 C 223.707031 322.464844 223.359375 322.5 223.027344 322.5 C 222.441406 322.5 221.898438 322.402344 221.398438 322.207031 C 220.910156 322 220.515625 321.644531 220.207031 321.144531 C 219.902344 320.644531 219.75 319.945312 219.75 319.042969 L 219.75 312.542969 L 218.164062 312.542969 L 218.164062 311.667969 L 219.769531 310.941406 L 220.5 308.566406 L 221.585938 308.566406 L 221.585938 311.128906 L 224.820312 311.128906 L 224.820312 312.542969 L 221.585938 312.542969 L 221.585938 319 C 221.585938 319.679688 221.746094 320.1875 222.066406 320.519531 C 222.398438 320.839844 222.824219 321 223.339844 321 Z M 223.339844 321 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 231.460938 310.917969 C 232.417969 310.917969 233.242188 311.128906 233.921875 311.542969 C 234.617188 311.960938 235.148438 312.550781 235.507812 313.3125 C 235.886719 314.0625 236.074219 314.945312 236.074219 315.960938 L 236.074219 317.0625 L 228.410156 317.0625 C 228.441406 318.328125 228.761719 319.292969 229.371094 319.957031 C 230 320.609375 230.867188 320.9375 231.980469 320.9375 C 232.691406 320.9375 233.316406 320.875 233.859375 320.75 C 234.417969 320.609375 234.988281 320.417969 235.570312 320.167969 L 235.570312 321.769531 C 235 322.019531 234.4375 322.199219 233.882812 322.3125 C 233.324219 322.4375 232.664062 322.5 231.898438 322.5 C 230.839844 322.5 229.902344 322.285156 229.078125 321.851562 C 228.273438 321.421875 227.640625 320.785156 227.179688 319.9375 C 226.734375 319.078125 226.511719 318.027344 226.511719 316.792969 C 226.511719 315.570312 226.714844 314.523438 227.117188 313.648438 C 227.535156 312.773438 228.113281 312.097656 228.851562 311.628906 C 229.601562 311.15625 230.472656 310.917969 231.460938 310.917969 Z M 231.4375 312.417969 C 230.5625 312.417969 229.867188 312.703125 229.351562 313.273438 C 228.851562 313.828125 228.550781 314.605469 228.453125 315.605469 L 234.152344 315.605469 C 234.136719 314.660156 233.914062 313.898438 233.484375 313.3125 C 233.054688 312.71875 232.371094 312.417969 231.4375 312.417969 Z M 231.4375 312.417969 "/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 220 KiB

View file

@ -1,14 +1,14 @@
{ {
"id": "transit", "id": "transit",
"title": { "title": {
"en": "Bus routes", "en": "Transit routes",
"de": "Buslinien", "de": "Buslinien",
"fr": "Lignes de bus", "fr": "Lignes de bus",
"da": "Busruter", "da": "Busruter",
"nb_NO": "Bussruter", "nb_NO": "Bussruter",
"ca": "Rutes de bus", "ca": "Rutes de bus",
"pa_PK": "بس روٹ", "pa_PK": "بس روٹ",
"nl": "Busroutes", "nl": "OV-lijnen",
"es": "Rutas de autobús", "es": "Rutas de autobús",
"cs": "Autobusové linky", "cs": "Autobusové linky",
"zh_Hant": "公車路線", "zh_Hant": "公車路線",

View file

@ -26,17 +26,67 @@
"name": "Dataset Afvalbakken Assen", "name": "Dataset Afvalbakken Assen",
"description": "Laag op basis van externe data", "description": "Laag op basis van externe data",
"source": { "source": {
"osmTags": "OBJECTID~*", "osmTags": "Historisch_~*",
"geoJson": "https://opendata.arcgis.com/datasets/5b6953ac5a9d4616a7dc75ab0beeac2f_0.geojson" "geoJson": "https://opendata.arcgis.com/datasets/5b6953ac5a9d4616a7dc75ab0beeac2f_0.geojson"
}, },
"calculatedTags": [ "calculatedTags": [
"_closest_osm_waste_basket=closest(feat)('waste_basket')?.properties?.id", "_closest_osm_waste_basket=closest(feat)('waste_basket')?.properties?.id",
"_closest_osm_waste_basket_distance=distanceTo(feat)(feat.properties._closest_osm_waste_basket)", "_closest_osm_waste_basket_distance=distanceTo(feat)(feat.properties._closest_osm_waste_basket)",
"_has_closeby_feature=Number(feat.properties._closest_osm_waste_basket_distance) < 10 ? 'yes' : 'no'" "_has_closeby_feature=Number(feat.properties._closest_osm_waste_basket_distance) < 10 ? 'yes' : 'no'",
"_waste=(feat.properties.Type_ === 'Capitol 60L' || feat.properties.Type_ === 'Restafval') ? 'trash' : (feat.properties.Type_ === 'Hondenpoep' ? 'dog_excrement' : '')",
"_tags='amenity=waste_basket' + (feat.properties._waste ? ';waste=' + feat.properties._waste : '') + ';operator=Gemeente Assen;operator:wikidata=Q798'"
], ],
"title": "Afvalbak in dataset", "title": "Afvalbak in dataset",
"tagRenderings": [ "tagRenderings": [
"all_tags" {
"id": "import",
"render": {
"special": {
"type": "import_button",
"targetLayer": "waste_basket",
"tags": "_tags",
"text": "Voeg deze afvalbak toe"
}
},
"condition": "_has_closeby_feature=no"
},
{
"id": "tag-hint",
"render": "Deze afvalbak krijgt de volgende tags: <b>{_tags}</b>",
"condition": "_has_closeby_feature=no"
},
{
"id": "imported",
"render": "Deze afvalbak is (waarschijnlijk) al toegevoegd. <a href=#{_closest_osm_waste_basket}>Bekijk het punt</a>.",
"condition": "_has_closeby_feature=yes"
},
{
"id": "tag-apply",
"condition": "_has_closeby_feature=yes",
"render": {
"special": {
"type": "tag_apply",
"tags_to_apply": "$_tags",
"id_of_object_to_apply_this_one": "_closest_osm_waste_basket",
"message": "Voeg alle tags toe aan de bestaande afvalbak",
"image": "./assets/svg/addSmall.svg"
}
}
},
{
"id": "type",
"render": "<b>Type:</b> {Type_}",
"condition": "Type_~*"
},
{
"id": "colour",
"render": "<b>Kleur:</b> {Kleur_}",
"condition": "Kleur_~*"
},
{
"id": "minimap_with_poi",
"render": "{minimap(18, id, _closest_osm_waste_basket)}"
}
], ],
"pointRendering": [ "pointRendering": [
{ {
@ -46,12 +96,13 @@
], ],
"marker": [ "marker": [
{ {
"icon": { "icon": "circle",
"render": "circle:red", "color": {
"render": "red",
"mappings": [ "mappings": [
{ {
"if": "_has_closeby_feature=yes", "if": "_has_closeby_feature=yes",
"then": "circle:#008000aa" "then": "green"
} }
] ]
} }
@ -61,7 +112,27 @@
"anchor": "center" "anchor": "center"
} }
], ],
"lineRendering": [] "lineRendering": [],
"filter": [
{
"id": "closeby",
"options": [
{
"default": true,
"question": "Alle vuilnisbakken"
},
{
"osmTags": "_has_closeby_feature=yes",
"question": "Met nabijgelegen vuilnisbak"
},
{
"osmTags": "_has_closeby_feature=no",
"question": "Zonder nabijgelegen vuilnisbak"
}
],
"#": "ignore-possible-duplicate"
}
]
}, },
"recycling", "recycling",
{ {
@ -69,20 +140,73 @@
"name": "Dataset Recyclingcontainers Assen", "name": "Dataset Recyclingcontainers Assen",
"description": "Laag op basis van externe data", "description": "Laag op basis van externe data",
"source": { "source": {
"osmTags": "OBJECTID~*", "osmTags": "Subtype_~*",
"geoJson": "https://opendata.arcgis.com/datasets/edb893998e27461b8ed82aad9854d27d_0.geojson" "geoJson": "https://services1.arcgis.com/p5QhXC0i0sZjprM1/arcgis/rest/services/Dataset_ondergrondse_containers_2022_Assen_(view)/FeatureServer/0/query?outFields=*&where=1%3D1&f=geojson"
}, },
"calculatedTags": [ "calculatedTags": [
"_closest_osm_recycling=closest(feat)('recycling')?.properties?.id", "_closest_osm_recycling=closest(feat)('recycling')?.properties?.id",
"_closest_osm_waste_disposal=closest(feat)('waste_disposal')?.properties?.id", "_closest_osm_waste_disposal=closest(feat)('waste_disposal')?.properties?.id",
"_closest_osm_recycling_distance=distanceTo(feat)(feat.properties._closest_osm_recycling)", "_closest_osm_recycling_distance=distanceTo(feat)(feat.properties._closest_osm_recycling)",
"_closest_osm_waste_disposal_distance=distanceTo(feat)(feat.properties._closest_osm_waste_disposal)", "_closest_osm_waste_disposal_distance=distanceTo(feat)(feat.properties._closest_osm_waste_disposal)",
"_closest_feature=(Number(feat.properties._closest_osm_recycling_distance) <= Number(feat.properties._closest_osm_waste_disposal_distance) ? feat.properties._closest_osm_recycling : feat.properties._closest_osm_waste_disposal)",
"_has_closeby_recycling=Number(feat.properties._closest_osm_recycling_distance) < 10 ? 'yes' : 'no'", "_has_closeby_recycling=Number(feat.properties._closest_osm_recycling_distance) < 10 ? 'yes' : 'no'",
"_has_closeby_waste_disposal=Number(feat.properties._closest_osm_waste_disposal_distance) < 10 ? 'yes' : 'no'" "_has_closeby_waste_disposal=Number(feat.properties._closest_osm_waste_disposal_distance) < 10 ? 'yes' : 'no'",
"_has_closeby_feature=feat.properties._has_closeby_recycling === 'yes' || feat.properties._has_closeby_waste_disposal === 'yes' ? 'yes' : 'no'",
"_amenity=feat.properties.Type__ === 'Restafval' ? 'amenity=waste_disposal;access=residents' : 'amenity=recycling;recycling_type=container'",
"_recycling_tags=feat.properties.Type__ === 'Glas' ? 'recycling:glass_bottles=yes' : (feat.properties.Type__ === 'Kleding' ? 'recycling:clothes=yes;recyling:shoes=yes' : (feat.properties.Type__ === 'Papier' ? 'recycling:paper=yes' : (feat.properties.Type__ === 'PMD' ? 'recycling:pmd=yes' : (feat.properties.Type__ === 'BIO' ? 'recycling:green_waste=yes' : ''))))",
"_tags=feat.properties._amenity + (feat.properties._recycling_tags ? ';' + feat.properties._recycling_tags : '') + ';operator=Gemeente Assen;operator:wikidata=Q798'"
], ],
"title": "Recyclingcontainer in dataset", "title": "Recyclingcontainer in dataset",
"tagRenderings": [ "tagRenderings": [
"all_tags" {
"id": "import",
"render": {
"special": {
"type": "import_button",
"targetLayer": "recycling",
"tags": "_tags",
"text": "Voeg deze recyclingcontainer toe"
}
},
"condition": "_has_closeby_feature=no"
},
{
"id": "tag-hint",
"render": "Deze recyclingcontainer krijgt de volgende tags: <b>{_tags}</b>",
"condition": "_has_closeby_feature=no"
},
{
"id": "imported",
"render": "Deze recyclingcontainer is (waarschijnlijk) al toegevoegd. <a href=#{_closest_osm_waste_basket}>Bekijk het punt</a>.",
"condition": "_has_closeby_feature=yes"
},
{
"id": "tag-apply",
"condition": "_has_closeby_feature=yes",
"render": {
"special": {
"type": "tag_apply",
"tags_to_apply": "$_tags",
"id_of_object_to_apply_this_one": "_closest_feature",
"message": "Voeg alle tags toe aan de bestaande recyclingcontainer",
"image": "./assets/svg/addSmall.svg"
}
}
},
{
"id": "type",
"render": "<b>Type:</b> {Type_}",
"condition": "Type_~*"
},
{
"id": "colour",
"render": "<b>Kleur:</b> {Kleur_}",
"condition": "Kleur_~*"
},
{
"id": "minimap_with_poi",
"render": "{minimap(18, id, _closest_feature)}"
}
], ],
"pointRendering": [ "pointRendering": [
{ {
@ -92,16 +216,18 @@
], ],
"marker": [ "marker": [
{ {
"icon": { "icon": "circle",
"render": "circle:red", "color": {
"render": "red",
"mappings": [ "mappings": [
{ {
"if": "_has_closeby_recycling=yes", "if": {
"then": "circle:#008000aa" "or": [
"_has_closeby_recycling=yes",
"_has_closeby_waste_disposal=yes"
]
}, },
{ "then": "green"
"if": "_has_closeby_waste_disposal=yes",
"then": "circle:#008000aa"
} }
] ]
} }
@ -111,8 +237,45 @@
"anchor": "center" "anchor": "center"
} }
], ],
"lineRendering": [] "lineRendering": [],
"filter": [
{
"id": "closeby",
"options": [
{
"default": true,
"question": "Alle recyclingcontainers"
},
{
"osmTags": "_has_closeby_feature=yes",
"question": "Met nabijgelegen recyclingcontainer"
},
{
"osmTags": "_has_closeby_feature=no",
"question": "Zonder nabijgelegen recyclingcontainer"
}
],
"#": "ignore-possible-duplicate"
}
]
}, },
"waste_disposal" "waste_disposal"
],
"tileLayerSources": [
{
"id": "assen_lufo",
"name": "Assen Luchtfoto",
"best": true,
"attribution": {
"text": "Gemeente Assen"
},
"category": "photo",
"type": "wms",
"url": "https://map.rlin.eu/service?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image%2Fpng&TRANSPARENT=true&LAYERS=assen&CRS={proj}&STYLES=&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",
"defaultState": false,
"isOverlay": false,
"min_zoom": 0,
"max_zoom": 22
}
] ]
} }

263
assets/themes/zhv/zhv.json Normal file
View file

@ -0,0 +1,263 @@
{
"id": "zhv",
"title": {
"en": "ZHV Import Tool"
},
"description": {
"en": "Small theme allowing import of bus stops from the Zentrales Haltestellenverzeichnis in Germany."
},
"icon": "./assets/layers/transit_stops/bus_stop.svg",
"hideFromOverview": true,
"layers": [
{
"id": "zhv",
"name": {
"en": "Public transport stops in ZHV"
},
"title": {
"render": {
"en": "Public transport stop in ZHV"
}
},
"minzoom": 15,
"source": {
"geoJson": "https://robinlinde.github.io/tiles/zhv_haltestellen/{z}/{x}/{y}.json",
"geoJsonZoomLevel": 15,
"osmTags": "Type~Q"
},
"tagRenderings": [
{
"id": "name",
"render": {
"en": "This stop is called {Name}"
}
},
{
"id": "id",
"render": {
"en": "The ID of this stop is {_ifopt}"
}
},
{
"id": "closest_stop",
"render": {
"en": "The closest stop in OSM is <a href=#{_closest_osm_stop}>{_closest_osm_stop_name}</a>."
}
},
{
"id": "import",
"render": {
"special": {
"type": "import_button",
"targetLayer": "transit_stops",
"tags": "_tags",
"text": {
"en": "Add this stop"
}
}
},
"condition": {
"or": [
"_has_closeby_feature=no",
"_has_closeby_feature=maybe"
]
}
},
{
"id": "tag-hint",
"render": {
"en": "This stop will get the following tags: <b>{_tags}</b>"
},
"condition": {
"or": [
"_has_closeby_feature=no",
"_has_closeby_feature=maybe"
]
}
},
{
"id": "imported",
"render": {
"en": "This stop is (probably) already added. <a href=#{_closest_osm_stop_id}>View the point</a>."
},
"condition": {
"or": [
"_has_closeby_feature=yes",
"_has_closeby_feature=maybe"
]
}
},
{
"id": "minimap_with_poi",
"render": "{minimap(18, id, _closest_osm_stop_id):height:10rem}"
}
],
"pointRendering": [
{
"marker": [
{
"icon": "circle",
"color": {
"render": "red",
"mappings": [
{
"if": "_has_closeby_feature=yes",
"then": "green"
},
{
"if": "_has_closeby_feature=maybe",
"then": "orange"
}
]
}
}
],
"location": [
"point",
"centroid"
],
"iconSize": "20,20"
}
],
"calculatedTags": [
"_closest_osm_stop_id=closest(feat)('all_transit_stops')?.properties?.id",
"_closest_osm_stop_distance=distanceTo(feat)(feat.properties._closest_osm_stop_id)",
"_closest_osm_stop_name=closest(feat)('all_transit_stops')?.properties?.name",
"_closest_osm_stop_ifopt=closest(feat)('all_transit_stops')?.properties?.['ref:IFOPT']",
"_has_closeby_feature=(feat.properties._closest_osm_stop_ifopt === feat.properties._ifopt) ? 'yes' : (feat.properties._closest_osm_stop_distance < 15 ? 'yes' : (feat.properties._closest_osm_stop_distance > 25 ? 'no' : 'maybe'))",
"_ifopt=feat.properties.DHID",
"_tags='public_transport=platform;ref:IFOPT='+feat.properties._ifopt+';name='+feat.properties.Name"
]
},
{
"builtin": "transit_stops",
"override": {
"#": "We're getting all public_transport=platforms since when importing ZHV stops, we don't add the type-specific tags.",
"source": {
"osmTags": "public_transport=platform"
},
"id": "all_transit_stops",
"name": {
"en": "Public transport stops in OSM"
},
"tagRenderings+": [
{
"id": "type",
"question": {
"en": "What kind of transit types is this stop used for?"
},
"condition": "_geometry:type=Point",
"multiAnswer": true,
"mappings": [
{
"if": "bus=yes",
"ifnot": {
"and": [
"bus=",
"highway="
]
},
"then": {
"en": "This stop is used for bus transit."
},
"addExtraTags": [
"highway=bus_stop"
]
},
{
"if": "train=yes",
"ifnot": "train=",
"then": {
"en": "This stop is used for train transit."
}
},
{
"if": "light_rail=yes",
"ifnot": "light_rail=",
"then": {
"en": "This stop is used for light rail transit."
}
},
{
"if": "subway=yes",
"ifnot": "subway=",
"then": {
"en": "This stop is used for subway transit."
}
},
{
"if": "tram=yes",
"ifnot": "tram=",
"then": {
"en": "This stop is used for tram transit."
}
},
{
"if": "ferry=yes",
"ifnot": "ferry=",
"then": {
"en": "This stop is used for ferry transit."
}
}
]
},
{
"id": "ifopt",
"question": {
"en": "What is the IFOPT reference of this stop?"
},
"render": {
"en": "The IFOPT reference of this stop is {ref:IFOPT}."
},
"freeform": {
"key": "ref:IFOPT",
"type": "string",
"placeholder": {
"en": "e.g. NL:Q:15003950 or de:03457:15801::2"
}
}
},
{
"id": "zhv_stop",
"condition": "_has_closeby_feature=yes",
"render": {
"en": "There is a ZHV stop nearby: <a href=#{_closest_zhv_stop_id}>{_closest_zhv_stop_name}</a>."
}
},
{
"id": "zhv_apply",
"condition": {
"and": [
"_has_closeby_feature=yes",
"ref:IFOPT!~*"
]
},
"render": {
"special": {
"type": "tag_apply",
"tags_to_apply": "ref:IFOPT=$_ifopt",
"id_of_object_to_apply_this_one": "_closest_osm_stop_id",
"message": {
"en": "Add IFOPT to this stop"
},
"image": "./assets/svg/addSmall.svg"
}
}
},
{
"id": "minimap_with_poi",
"condition": "_has_closeby_feature=yes",
"render": "{minimap(18, id, _closest_zhv_stop_id):height:10rem}"
}
],
"calculatedTags": [
"_closest_zhv_stop_id=closest(feat)('zhv')?.properties?.id",
"_closest_zhv_stop_distance=distanceTo(feat)(feat.properties._closest_zhv_stop_id)",
"_closest_zhv_stop_name=closest(feat)('zhv')?.properties?.Name",
"_has_closeby_feature=feat.properties._closest_zhv_stop_distance < 25",
"_ifopt=closest(feat)('zhv')?.properties?.DHID"
]
}
}
]
}

View file

@ -810,9 +810,12 @@
"deleteConfirm": "Permantently delete this review", "deleteConfirm": "Permantently delete this review",
"deleteText": "This cannot be undone", "deleteText": "This cannot be undone",
"deleteTitle": "Delete this review?", "deleteTitle": "Delete this review?",
"disabledForPrivacy": "Reviews are disabled due to your privacy settings.",
"edit": "Edit review", "edit": "Edit review",
"editPrivacySettings": "Edit your privacy settings",
"i_am_affiliated": "I am affiliated with this object", "i_am_affiliated": "I am affiliated with this object",
"i_am_affiliated_explanation": "Check if you are an owner, creator, employee, …", "i_am_affiliated_explanation": "Check if you are an owner, creator, employee, …",
"loadOnce": "Load reviews once",
"no_reviews_yet": "There are no reviews yet. Be the first one!", "no_reviews_yet": "There are no reviews yet. Be the first one!",
"non_place_review": "One review is not about a place and is not shown here.", "non_place_review": "One review is not about a place and is not shown here.",
"non_place_reviews": "{n} reviews are not about a place and are not shown here.", "non_place_reviews": "{n} reviews are not about a place and are not shown here.",

View file

@ -779,6 +779,20 @@
}, },
"question": "Can you deposit cash into this ATM?" "question": "Can you deposit cash into this ATM?"
}, },
"cash_in-types": {
"mappings": {
"0": {
"then": "You can deposit coins at this ATM"
},
"1": {
"then": "You can deposit notes at this ATM"
},
"2": {
"then": "You can deposit sealed bags at this ATM"
}
},
"question": "In what ways can you deposit cash at this ATM?"
},
"cash_out": { "cash_out": {
"mappings": { "mappings": {
"0": { "0": {
@ -12529,6 +12543,17 @@
"question": "What exactly is surveilled here?", "question": "What exactly is surveilled here?",
"render": "Surveills a {surveillance:zone}" "render": "Surveills a {surveillance:zone}"
}, },
"active": {
"mappings": {
"0": {
"then": "This camera is currently in use."
},
"1": {
"then": "This camera is not used anymore"
}
},
"question": "Is this camera currently in use?"
},
"camera:mount": { "camera:mount": {
"mappings": { "mappings": {
"0": { "0": {
@ -12587,6 +12612,11 @@
} }
}, },
"title": { "title": {
"mappings": {
"0": {
"then": "Disused surveillance camera"
}
},
"render": "Surveillance Camera" "render": "Surveillance Camera"
} }
}, },
@ -13462,37 +13492,37 @@
} }
}, },
"transit_routes": { "transit_routes": {
"description": "Layer showing bus lines", "description": "Layer showing transit routes",
"name": "Bus lines", "name": "Transit Routes",
"tagRenderings": { "tagRenderings": {
"colour": { "colour": {
"question": "What is the colour for this bus line?", "question": "What is the colour for this transit route?",
"render": "This bus line has the color {colour}" "render": "This transit route has the color {colour}"
}, },
"from": { "from": {
"question": "What is the starting point for this bus line?", "question": "What is the starting point for this transit route?",
"render": "This bus line begins at {from}" "render": "This transit route begins at {from}"
}, },
"name": { "name": {
"question": "What is the name for this bus line? (i.e. Bus XX: From => Via => To)" "question": "What is the name for this transit route? (i.e. Bus XX: From => Via => To)"
}, },
"network": { "network": {
"question": "What network does this bus line belong to?", "question": "What network does this transit route belong to?",
"render": "This bus line is part of the {network} network" "render": "This transit route is part of the {network} network"
}, },
"operator": { "operator": {
"override": { "override": {
"question": "What company operates this bus line?", "question": "What company operates this transit route?",
"render": "This bus line is operated by {operator}" "render": "This transit route is operated by {operator}"
} }
}, },
"to": { "to": {
"question": "What is the ending point for this bus line?", "question": "What is the ending point for this transit route?",
"render": "This bus line ends at {to}" "render": "This transit route ends at {to}"
}, },
"via": { "via": {
"question": "What is the via point for this bus line?", "question": "What is the via point for this transit route?",
"render": "This bus line goes via {via}" "render": "This transit route goes via {via}"
} }
}, },
"title": { "title": {
@ -13501,7 +13531,7 @@
"then": "{name}" "then": "{name}"
} }
}, },
"render": "Bus line" "render": "Transit route"
} }
}, },
"transit_stops": { "transit_stops": {
@ -13595,6 +13625,18 @@
}, },
"question": "Is this stop lit?" "question": "Is this stop lit?"
}, },
"ref": {
"freeform": {
"placeholder": "e.g. A1 or 1"
},
"mappings": {
"0": {
"then": "This stop has no platform reference"
}
},
"question": "What is the platform reference of this stop?",
"render": "The platform reference of this stop is <b>{ref}</b>."
},
"shelter": { "shelter": {
"mappings": { "mappings": {
"0": { "0": {

View file

@ -757,6 +757,20 @@
}, },
"question": "Kan je geld storten bij deze geldautomaat?" "question": "Kan je geld storten bij deze geldautomaat?"
}, },
"cash_in-types": {
"mappings": {
"0": {
"then": "Je kan munten storten bij deze geldautomaat"
},
"1": {
"then": "Je kan biljetten storten bij deze geldautomaat"
},
"2": {
"then": "Je kan sealbags storten bij deze geldautomaat"
}
},
"question": "Op welke manieren kan je geld storten bij deze geldautomaat?"
},
"cash_out": { "cash_out": {
"mappings": { "mappings": {
"0": { "0": {
@ -9926,6 +9940,17 @@
"question": "Wat wordt hier precies bewaakt?", "question": "Wat wordt hier precies bewaakt?",
"render": "Bewaakt een {surveillance:zone}" "render": "Bewaakt een {surveillance:zone}"
}, },
"active": {
"mappings": {
"0": {
"then": "Deze camera is momenteel in gebruik."
},
"1": {
"then": "Deze camera is niet meer in gebruik"
}
},
"question": "Is deze camera momenteel in gebruik?"
},
"camera:mount": { "camera:mount": {
"mappings": { "mappings": {
"0": { "0": {
@ -10568,37 +10593,37 @@
} }
}, },
"transit_routes": { "transit_routes": {
"description": "Laag met buslijnen", "description": "Laag met OV-lijnen",
"name": "Buslijnen", "name": "OV-lijnen",
"tagRenderings": { "tagRenderings": {
"colour": { "colour": {
"question": "Wat is de kleur van deze buslijn?", "question": "Wat is de kleur van deze OV-lijn?",
"render": "Deze buslijn heeft de kleur {colour}" "render": "Deze OV-lijn heeft de kleur {colour}"
}, },
"from": { "from": {
"question": "Wat is het beginpunt van deze buslijn?", "question": "Wat is het beginpunt van deze OV-lijn?",
"render": "Deze buslijn begint bij {from}" "render": "Deze OV-lijn begint bij {from}"
}, },
"name": { "name": {
"question": "Wat is de naam van deze buslijn (bv. Bus XX: Van => Via => Naar)" "question": "Wat is de naam van deze OV-lijn (bv. Bus XX: Van => Via => Naar)"
}, },
"network": { "network": {
"question": "Bij welk netwerk hoort deze buslijn?", "question": "Bij welk netwerk hoort deze OV-lijn?",
"render": "Deze buslijn is onderdeel van het {network} netwerk" "render": "Deze OV-lijn is onderdeel van het {network} netwerk"
}, },
"operator": { "operator": {
"override": { "override": {
"question": "Welk bedrijf exploiteert deze buslijn?", "question": "Welk bedrijf exploiteert deze OV-lijn?",
"render": "Deze buslijn wordt geëxploiteerd door {operator}" "render": "Deze OV-lijn wordt geëxploiteerd door {operator}"
} }
}, },
"to": { "to": {
"question": "Wat is het eindpunt van deze buslijn?", "question": "Wat is het eindpunt van deze OV-lijn?",
"render": "Deze buslijn eindigt bij {to}" "render": "Deze OV-lijn eindigt bij {to}"
}, },
"via": { "via": {
"question": "Via welk punt gaat deze buslijn?", "question": "Via welk punt gaat deze OV-lijn?",
"render": "Deze buslijn gaat via {via}" "render": "Deze OV-lijn gaat via {via}"
} }
}, },
"title": { "title": {
@ -10607,7 +10632,7 @@
"then": "{name}" "then": "{name}"
} }
}, },
"render": "Buslijn" "render": "OV-lijn"
} }
}, },
"transit_stops": { "transit_stops": {
@ -10698,7 +10723,7 @@
"then": "Halte {name}" "then": "Halte {name}"
} }
}, },
"render": "Bushalte" "render": "OV-halte"
} }
}, },
"tree_node": { "tree_node": {

View file

@ -1370,7 +1370,7 @@
}, },
"transit": { "transit": {
"description": "Plan your trip with the help of the public transport system.", "description": "Plan your trip with the help of the public transport system.",
"title": "Bus routes" "title": "Transit routes"
}, },
"trees": { "trees": {
"description": "Map all the trees!", "description": "Map all the trees!",
@ -1511,5 +1511,88 @@
} }
}, },
"title": "Winter Service" "title": "Winter Service"
},
"zhv": {
"description": "Small theme allowing import of bus stops from the Zentrales Haltestellenverzeichnis in Germany.",
"layers": {
"0": {
"name": "Public transport stops in ZHV",
"tagRenderings": {
"closest_stop": {
"render": "The closest stop in OSM is <a href=#{_closest_osm_stop}>{_closest_osm_stop_name}</a>."
},
"id": {
"render": "The ID of this stop is {_ifopt}"
},
"import": {
"render": {
"special": {
"text": "Add this stop"
}
}
},
"imported": {
"render": "This stop is (probably) already added. <a href=#{_closest_osm_stop_id}>View the point</a>."
},
"name": {
"render": "This stop is called {Name}"
},
"tag-hint": {
"render": "This stop will get the following tags: <b>{_tags}</b>"
}
},
"title": {
"render": "Public transport stop in ZHV"
}
},
"1": {
"override": {
"name": "Public transport stops in OSM",
"tagRenderings+": {
"0": {
"mappings": {
"0": {
"then": "This stop is used for bus transit."
},
"1": {
"then": "This stop is used for train transit."
},
"2": {
"then": "This stop is used for light rail transit."
},
"3": {
"then": "This stop is used for subway transit."
},
"4": {
"then": "This stop is used for tram transit."
},
"5": {
"then": "This stop is used for ferry transit."
}
},
"question": "What kind of transit types is this stop used for?"
},
"1": {
"freeform": {
"placeholder": "e.g. NL:Q:15003950 or de:03457:15801::2"
},
"question": "What is the IFOPT reference of this stop?",
"render": "The IFOPT reference of this stop is {ref:IFOPT}."
},
"2": {
"render": "There is a ZHV stop nearby: <a href=#{_closest_zhv_stop_id}>{_closest_zhv_stop_name}</a>."
},
"3": {
"render": {
"special": {
"message": "Add IFOPT to this stop"
}
}
}
}
}
}
},
"title": "ZHV Import Tool"
} }
} }

View file

@ -1359,7 +1359,7 @@
}, },
"transit": { "transit": {
"description": "Plan je trip met behulp van het openbaar vervoer.", "description": "Plan je trip met behulp van het openbaar vervoer.",
"title": "Busroutes" "title": "OV-lijnen"
}, },
"trees": { "trees": {
"description": "Breng bomen in kaart!", "description": "Breng bomen in kaart!",

8
package-lock.json generated
View file

@ -84,7 +84,7 @@
"showdown": "^2.1.0", "showdown": "^2.1.0",
"svelte": "^3.59.2", "svelte": "^3.59.2",
"svg-path-parser": "^1.1.0", "svg-path-parser": "^1.1.0",
"tag2link": "^2025.3.21", "tag2link": "^2025.5.21",
"tailwind-merge": "^1.14.0", "tailwind-merge": "^1.14.0",
"tailwindcss": "^3.4.17", "tailwindcss": "^3.4.17",
"ts-node": "^10.9.2", "ts-node": "^10.9.2",
@ -26604,9 +26604,9 @@
"license": "MIT" "license": "MIT"
}, },
"node_modules/tag2link": { "node_modules/tag2link": {
"version": "2025.3.21", "version": "2025.5.21",
"resolved": "https://registry.npmjs.org/tag2link/-/tag2link-2025.3.21.tgz", "resolved": "https://registry.npmjs.org/tag2link/-/tag2link-2025.5.21.tgz",
"integrity": "sha512-JvRTQdY/z0vAEFUzL7rhLndNiDnStlurW+1jgXL5FW+GppR2T/dq2lXMEppbFNxJ9C4h5b+ykjcMPH791YeLdA==", "integrity": "sha512-vcz6/6U5V3QYPA7geLrtzLMqhCwg6OvoGP665DbGgPRSWASjFn0J4jA/NyifD3Tmp2yf8RnEuI6QBvhXGBVSHg==",
"license": "ISC" "license": "ISC"
}, },
"node_modules/tailwind-merge": { "node_modules/tailwind-merge": {

View file

@ -249,7 +249,7 @@
"showdown": "^2.1.0", "showdown": "^2.1.0",
"svelte": "^3.59.2", "svelte": "^3.59.2",
"svg-path-parser": "^1.1.0", "svg-path-parser": "^1.1.0",
"tag2link": "^2025.3.21", "tag2link": "^2025.5.21",
"tailwind-merge": "^1.14.0", "tailwind-merge": "^1.14.0",
"tailwindcss": "^3.4.17", "tailwindcss": "^3.4.17",
"ts-node": "^10.9.2", "ts-node": "^10.9.2",

View file

@ -8357,6 +8357,10 @@ svg.apply-fill path {
margin-right: 0.25rem; margin-right: 0.25rem;
} }
.sm\:mr-2 {
margin-right: 0.5rem;
}
.sm\:mt-2 { .sm\:mt-2 {
margin-top: 0.5rem; margin-top: 0.5rem;
} }
@ -8583,6 +8587,10 @@ svg.apply-fill path {
margin-right: 0.5rem; margin-right: 0.5rem;
} }
.md\:mr-4 {
margin-right: 1rem;
}
.md\:ms-2 { .md\:ms-2 {
margin-inline-start: 0.5rem; margin-inline-start: 0.5rem;
} }

View file

@ -96,7 +96,7 @@ class HandleErrors extends Script {
" is identical to previously seen changeset, not writing to file" " is identical to previously seen changeset, not writing to file"
)*/ )*/
} else { } else {
const changesetWithMsg = `<!-- User: ${parsed.message.username} (${parsed.message.userid}) ${parsed.message.layout}; Version ${parsed.message.version}; Not uploaded due to ${parsed.message.message} --> const changesetWithMsg = `<!-- User: ${parsed.message.username} (${parsed.message.userid}) ${parsed.message.theme}; Version ${parsed.message.version}; Not uploaded due to ${parsed.message.message} -->
${changeset}` ${changeset}`
writeFileSync(path, changesetWithMsg, "utf8") writeFileSync(path, changesetWithMsg, "utf8")
createdChangesets.add(changeset) createdChangesets.add(changeset)
@ -115,14 +115,13 @@ ${changeset}`
console.log("Written refused", path) console.log("Written refused", path)
} }
} }
private readonly osmConnection = new OsmConnection()
private readonly downloader = new OsmObjectDownloader(this.osmConnection.Backend(), undefined)
async main(args: string[]): Promise<void> { async fixForFile(path: string){
const osmConnection = new OsmConnection()
const downloader = new OsmObjectDownloader(osmConnection.Backend(), undefined)
const path = args[0]
const lines = readFileSync(path, "utf8").split("\n") const lines = readFileSync(path, "utf8").split("\n")
const osmConnection = this.osmConnection
const downloader = this.downloader
const createdChangesets = new Set<string>() const createdChangesets = new Set<string>()
const refusedFiles: Set<string> = new Set<string>() const refusedFiles: Set<string> = new Set<string>()
refusedFiles.add("[]") refusedFiles.add("[]")
@ -143,7 +142,7 @@ ${changeset}`
try { try {
const parsed: ErrorMessage = JSON.parse(line) const parsed: ErrorMessage = JSON.parse(line)
const e = parsed.message const e = parsed.message
if (e.layout === "grb") { if (e.theme === "grb") {
console.log("Skipping GRB ") console.log("Skipping GRB ")
continue continue
} }
@ -182,6 +181,18 @@ ${changeset}`
} }
} }
} }
async main(args: string[]): Promise<void> {
if(args[0] === undefined){
console.log("Please specify the error file to handle")
return
}
for (const path of args) {
await this.fixForFile(path)
}
}
} }
new HandleErrors().run() new HandleErrors().run()

View file

@ -0,0 +1,58 @@
import { readFileSync, writeFileSync } from "fs"
import Script from "../Script"
import { parse } from "papaparse"
import { FeatureCollection, Point } from "geojson"
class ZHVcsv2GeoJson extends Script {
constructor() {
super("Converts a CSV file with ZHV data to GeoJSON format. Usage: csv-file output-file")
}
async main(args: string[]): Promise<void> {
const csvFile = args[0]
const outputFile = args[1]
if (!csvFile || !outputFile) {
console.error("Usage: csv-file output-file")
return
}
// Read the CSV file and parse it using PapaParse
const text = readFileSync(csvFile, "utf-8")
const parsed = parse(text, {
header: true,
dynamicTyping: false,
})
console.log(`Parsed ${parsed.data.length} rows from ${csvFile}`)
console.log(`First row:`, parsed.data[0])
// Drop all rows that do not have a valid latitude and longitude
parsed.data = parsed.data.filter((row: any) => {
return row["Latitude"] && row["Longitude"]
})
// Convert the parsed data to GeoJSON format
const geoJson: FeatureCollection<Point> = {
type: "FeatureCollection",
features: parsed.data.map((row: any) => ({
type: "Feature",
geometry: {
type: "Point",
coordinates: [
parseFloat(row["Longitude"].replace(",", ".")),
parseFloat(row["Latitude"].replace(",", ".")),
],
},
properties: row,
})),
}
console.log(`First feature:`, geoJson.features[0])
// Write the GeoJSON output to the specified file
writeFileSync(outputFile, JSON.stringify(geoJson), "utf-8")
}
}
new ZHVcsv2GeoJson().run()

View file

@ -1,25 +1,27 @@
import { Store, UIEventSource } from "../UIEventSource" import { Store, UIEventSource } from "../UIEventSource"
import FilteredLayer from "../../Models/FilteredLayer" import FilteredLayer from "../../Models/FilteredLayer"
import { Feature } from "geojson" import { Feature, Geometry } from "geojson"
import { OsmTags } from "../../Models/OsmFeature"
export interface FeatureSource<T extends Feature = Feature> { export interface FeatureSource<T extends Feature = Feature<Geometry, OsmTags>> {
features: Store<T[]> features: Store<T[]>
} }
export interface UpdatableFeatureSource<T extends Feature = Feature> extends FeatureSource<T> { export interface UpdatableFeatureSource<T extends Feature = Feature<Geometry, OsmTags>> extends FeatureSource<T> {
/** /**
* Forces an update and downloads the data, even if the feature source is supposed to be active * Forces an update and downloads the data, even if the feature source is supposed to be active
*/ */
updateAsync() updateAsync(): void
} }
export interface WritableFeatureSource<T extends Feature = Feature> extends FeatureSource<T> {
export interface WritableFeatureSource<T extends Feature = Feature<Geometry, OsmTags>> extends FeatureSource<T> {
features: UIEventSource<T[]> features: UIEventSource<T[]>
} }
/** /**
* A feature source which only contains features for the defined layer * A feature source which only contains features for the defined layer
*/ */
export interface FeatureSourceForLayer<T extends Feature = Feature> extends FeatureSource<T> { export interface FeatureSourceForLayer<T extends Feature = Feature<Geometry, OsmTags>> extends FeatureSource<T> {
readonly layer: FilteredLayer readonly layer: FilteredLayer
} }

View file

@ -5,21 +5,23 @@ import { Feature } from "geojson"
import { UIEventSource } from "../UIEventSource" import { UIEventSource } from "../UIEventSource"
/** /**
* Constructs multiple featureStores based on the given layers, where every constructed feature source will contain features only matching the given layer
*
* In some rare cases, some elements are shown on multiple layers (when 'passthrough' is enabled) * In some rare cases, some elements are shown on multiple layers (when 'passthrough' is enabled)
* If this is the case, multiple objects with a different _matching_layer_id are generated. * If this is the case, multiple objects with a different _matching_layer_id are generated.
* In any case, this featureSource marks the objects with _matching_layer_id * In any case, this featureSource marks the objects with _matching_layer_id
*/ */
export default class PerLayerFeatureSourceSplitter<T extends FeatureSource = FeatureSource> { export default class PerLayerFeatureSourceSplitter<T extends Feature, SRC extends FeatureSource<T>> {
public readonly perLayer: ReadonlyMap<string, T> public readonly perLayer: ReadonlyMap<string, SRC>
constructor( constructor(
layers: FilteredLayer[], layers: FilteredLayer[],
upstream: FeatureSource, upstream: FeatureSource<T>,
options?: { options?: {
constructStore?: (features: UIEventSource<Feature[]>, layer: FilteredLayer) => T constructStore?: (features: UIEventSource<T[]>, layer: FilteredLayer) => SRC
handleLeftovers?: (featuresWithoutLayer: Feature[]) => void handleLeftovers?: (featuresWithoutLayer: T[]) => void
} }
) { ) {
const knownLayers = new Map<string, T>() const knownLayers = new Map<string, SRC>()
/** /**
* Keeps track of the ids that are included per layer. * Keeps track of the ids that are included per layer.
* Used to know if the downstream feature source needs to be pinged * Used to know if the downstream feature source needs to be pinged
@ -30,12 +32,12 @@ export default class PerLayerFeatureSourceSplitter<T extends FeatureSource = Fea
const constructStore = const constructStore =
options?.constructStore ?? ((store, layer) => new SimpleFeatureSource(layer, store)) options?.constructStore ?? ((store, layer) => new SimpleFeatureSource(layer, store))
for (const layer of layers) { for (const layer of layers) {
const src = new UIEventSource<Feature[]>([]) const src = new UIEventSource<T[]>([])
layerSources.set(layer.layerDef.id, src) layerSources.set(layer.layerDef.id, src)
knownLayers.set(layer.layerDef.id, <T>constructStore(src, layer)) knownLayers.set(layer.layerDef.id, <SRC>constructStore(src, layer))
} }
upstream.features.addCallbackAndRunD((features) => { upstream.features.addCallbackAndRunD((features: T[]) => {
if (layers === undefined) { if (layers === undefined) {
return return
} }
@ -49,7 +51,7 @@ export default class PerLayerFeatureSourceSplitter<T extends FeatureSource = Fea
*/ */
const hasChanged: boolean[] = layers.map(() => false) const hasChanged: boolean[] = layers.map(() => false)
const newIndices: Set<string>[] = layers.map(() => new Set<string>()) const newIndices: Set<string>[] = layers.map(() => new Set<string>())
const noLayerFound: Feature[] = [] const noLayerFound: T[] = []
for (const layer of layers) { for (const layer of layers) {
featuresPerLayer.set(layer.layerDef.id, []) featuresPerLayer.set(layer.layerDef.id, [])
@ -113,7 +115,7 @@ export default class PerLayerFeatureSourceSplitter<T extends FeatureSource = Fea
}) })
} }
public forEach(f: (featureSource: T) => void) { public forEach(f: ((src: SRC) => void)) {
for (const fs of this.perLayer.values()) { for (const fs of this.perLayer.values()) {
f(fs) f(fs)
} }

View file

@ -1,12 +1,13 @@
import { Store, UIEventSource } from "../../UIEventSource" import { Store, UIEventSource } from "../../UIEventSource"
import FilteredLayer from "../../../Models/FilteredLayer" import FilteredLayer from "../../../Models/FilteredLayer"
import { FeatureSource } from "../FeatureSource" import { FeatureSource } from "../FeatureSource"
import { Feature } from "geojson" import { Feature, Geometry } from "geojson"
import { GlobalFilter } from "../../../Models/GlobalFilter" import { GlobalFilter } from "../../../Models/GlobalFilter"
import { OsmTags } from "../../../Models/OsmFeature"
export default class FilteringFeatureSource implements FeatureSource { export default class FilteringFeatureSource<T extends Feature = Feature<Geometry, OsmTags>> implements FeatureSource<T> {
public features: UIEventSource<Feature[]> = new UIEventSource([]) public readonly features: UIEventSource<T[]> = new UIEventSource([])
private readonly upstream: FeatureSource private readonly upstream: FeatureSource<T>
private readonly _fetchStore?: (id: string) => Store<Record<string, string>> private readonly _fetchStore?: (id: string) => Store<Record<string, string>>
private readonly _globalFilters?: Store<GlobalFilter[]> private readonly _globalFilters?: Store<GlobalFilter[]>
private readonly _alreadyRegistered = new Set<Store<any>>() private readonly _alreadyRegistered = new Set<Store<any>>()
@ -18,7 +19,7 @@ export default class FilteringFeatureSource implements FeatureSource {
constructor( constructor(
layer: FilteredLayer, layer: FilteredLayer,
upstream: FeatureSource, upstream: FeatureSource<T>,
fetchStore?: (id: string) => Store<Record<string, string>>, fetchStore?: (id: string) => Store<Record<string, string>>,
globalFilters?: Store<GlobalFilter[]>, globalFilters?: Store<GlobalFilter[]>,
metataggingUpdated?: Store<any>, metataggingUpdated?: Store<any>,
@ -40,7 +41,7 @@ export default class FilteringFeatureSource implements FeatureSource {
}) })
layer.appliedFilters.forEach((value) => layer.appliedFilters.forEach((value) =>
value.addCallback((_) => { value.addCallback(() => {
this.update() this.update()
}) })
) )
@ -68,7 +69,7 @@ export default class FilteringFeatureSource implements FeatureSource {
private update() { private update() {
const layer = this._layer const layer = this._layer
const features: Feature[] = this.upstream.features.data ?? [] const features: T[] = this.upstream.features.data ?? []
const includedFeatureIds = new Set<string>() const includedFeatureIds = new Set<string>()
const globalFilters = this._globalFilters?.data?.map((f) => f) const globalFilters = this._globalFilters?.data?.map((f) => f)
const zoomlevel = this._zoomlevel?.data const zoomlevel = this._zoomlevel?.data
@ -121,10 +122,9 @@ export default class FilteringFeatureSource implements FeatureSource {
} }
this._alreadyRegistered.add(src) this._alreadyRegistered.add(src)
const self = this
// Add a callback as a changed tag might change the filter // Add a callback as a changed tag might change the filter
src.addCallbackAndRunD((_) => { src.addCallbackAndRunD(() => {
self._is_dirty.setData(true) this._is_dirty.setData(true)
}) })
} }
} }

View file

@ -0,0 +1,38 @@
import { FeatureSource } from "../FeatureSource"
import { Feature } from "geojson"
import { Store, UIEventSource } from "../../UIEventSource"
export class IfVisibleFeatureSource<T extends Feature> implements FeatureSource<T> {
private readonly _features: UIEventSource<T[]> = new UIEventSource<T[]>([])
public readonly features: Store<T[]> = this._features
constructor(upstream: FeatureSource<T>, visible: Store<boolean>) {
let dirty = false
upstream.features.addCallbackAndRun(features => {
if (!visible.data) {
dirty = true
this._features.set([])
return
}
this._features.set(features)
dirty = false
})
visible.addCallbackAndRun(isVisible => {
if (isVisible && dirty) {
this._features.set(upstream.features.data)
dirty = false
}
if (!visible) {
this._features.set([])
}
})
}
}

View file

@ -1,24 +1,19 @@
import { Feature as GeojsonFeature, Geometry } from "geojson" import { Feature, Feature as GeojsonFeature, Geometry } from "geojson"
import { Store, UIEventSource } from "../../UIEventSource" import { Store, UIEventSource } from "../../UIEventSource"
import { FeatureSourceForTile, UpdatableFeatureSource } from "../FeatureSource" import { FeatureSourceForTile, UpdatableFeatureSource } from "../FeatureSource"
import { MvtToGeojson } from "mvt-to-geojson" import { MvtToGeojson } from "mvt-to-geojson"
import { OsmTags } from "../../../Models/OsmFeature"
export default class MvtSource implements FeatureSourceForTile, UpdatableFeatureSource { export default class MvtSource implements FeatureSourceForTile, UpdatableFeatureSource {
public readonly features: Store<GeojsonFeature<Geometry, { [name: string]: any }>[]> public readonly features: Store<GeojsonFeature<Geometry, OsmTags>[]>
public readonly x: number public readonly x: number
public readonly y: number public readonly y: number
public readonly z: number public readonly z: number
private readonly _url: string private readonly _url: string
private readonly _layerName: string
private readonly _features: UIEventSource< private readonly _features: UIEventSource<
GeojsonFeature< GeojsonFeature<Geometry, OsmTags>[]
Geometry, > = new UIEventSource<GeojsonFeature<Geometry, OsmTags>[]>([])
{
[name: string]: any
}
>[]
> = new UIEventSource<GeojsonFeature<Geometry, { [p: string]: any }>[]>([])
private currentlyRunning: Promise<any> private currentlyRunning: Promise<any>
constructor( constructor(
@ -26,11 +21,9 @@ export default class MvtSource implements FeatureSourceForTile, UpdatableFeature
x: number, x: number,
y: number, y: number,
z: number, z: number,
layerName?: string,
isActive?: Store<boolean> isActive?: Store<boolean>
) { ) {
this._url = url this._url = url
this._layerName = layerName
this.x = x this.x = x
this.y = y this.y = y
this.z = z this.z = z
@ -61,7 +54,7 @@ export default class MvtSource implements FeatureSourceForTile, UpdatableFeature
return return
} }
const buffer = await result.arrayBuffer() const buffer = await result.arrayBuffer()
const features = MvtToGeojson.fromBuffer(buffer, this.x, this.y, this.z) const features = <Feature<Geometry, OsmTags>[]>MvtToGeojson.fromBuffer(buffer, this.x, this.y, this.z)
for (const feature of features) { for (const feature of features) {
const properties = feature.properties const properties = feature.properties
if (!properties["osm_type"]) { if (!properties["osm_type"]) {

View file

@ -8,7 +8,8 @@ import { Utils } from "../../../Utils"
import { TagsFilter } from "../../Tags/TagsFilter" import { TagsFilter } from "../../Tags/TagsFilter"
import { BBox } from "../../BBox" import { BBox } from "../../BBox"
import { OsmTags } from "../../../Models/OsmFeature" import { OsmTags } from "../../../Models/OsmFeature"
;("use strict")
("use strict")
/** /**
* A wrapper around the 'Overpass'-object. * A wrapper around the 'Overpass'-object.
@ -138,7 +139,6 @@ export default class OverpassFeatureSource implements UpdatableFeatureSource {
return undefined return undefined
} }
this.runningQuery.setData(true) this.runningQuery.setData(true)
console.trace("Overpass feature source: querying geojson")
data = (await overpass.queryGeoJson(bounds))[0] data = (await overpass.queryGeoJson(bounds))[0]
} catch (e) { } catch (e) {
this.retries.data++ this.retries.data++

View file

@ -1,14 +1,15 @@
import { UIEventSource } from "../../UIEventSource" import { UIEventSource } from "../../UIEventSource"
import FilteredLayer from "../../../Models/FilteredLayer" import FilteredLayer from "../../../Models/FilteredLayer"
import { FeatureSourceForLayer } from "../FeatureSource" import { FeatureSourceForLayer } from "../FeatureSource"
import { Feature } from "geojson" import { Feature, Geometry } from "geojson"
import { OsmTags } from "../../../Models/OsmFeature"
export default class SimpleFeatureSource implements FeatureSourceForLayer { export default class SimpleFeatureSource<T extends Feature = Feature<Geometry, OsmTags>> implements FeatureSourceForLayer<T> {
public readonly features: UIEventSource<Feature[]> public readonly features: UIEventSource<T[]>
public readonly layer: FilteredLayer public readonly layer: FilteredLayer
constructor(layer: FilteredLayer, featureSource?: UIEventSource<Feature[]>) { constructor(layer: FilteredLayer, featureSource?: UIEventSource<T[]>) {
this.layer = layer this.layer = layer
this.features = featureSource ?? new UIEventSource<Feature[]>([]) this.features = featureSource ?? new UIEventSource<T[]>([])
} }
} }

View file

@ -0,0 +1,170 @@
import { FeatureSource } from "../FeatureSource"
import { Feature, Point } from "geojson"
import { ImmutableStore, Store, UIEventSource } from "../../UIEventSource"
import { GeoOperations } from "../../GeoOperations"
import { Tiles } from "../../../Models/TileRange"
export interface ClusteringOptions {
/**
* If the zoomlevel is (strictly) above the specified value, don't cluster no matter how many features the tile contains.
*/
dontClusterAboveZoom?: number
/**
* If the number of features in a _tile_ is equal or more then this number,
* drop those features and emit a summary tile instead
*/
cutoff?: 20 | number
showSummaryAt?: "tilecenter" | "average"
}
interface SummaryProperties {
id: string,
total: number,
tile_id: number
}
export class ClusteringFeatureSource<T extends Feature<Point> = Feature<Point>> implements FeatureSource<T> {
private readonly id: string
private readonly showSummaryAt: "tilecenter" | "average"
features: Store<T[]>
/**
*The clustering feature source works _only_ on points and is a preprocessing step for the ShowDataLayer.
* If a tile contains many points, a 'summary' point is emitted instead in 'summaryPoints'.
* The points from the summary will _not_ be emitted in 'this.features' in that case.
*
* We ignore the polygons, as polygons get smaller when zoomed out and thus don't clutter the map too much
*/
constructor(upstream: FeatureSource<T>,
currentZoomlevel: Store<number>,
id: string,
options?: ClusteringOptions) {
this.id = id
this.showSummaryAt = options?.showSummaryAt ?? "average"
const clusterCutoff = options?.dontClusterAboveZoom ?? 17
const doCluster = options?.dontClusterAboveZoom === undefined ? new ImmutableStore(true) : currentZoomlevel.map(zoom => zoom <= clusterCutoff)
const cutoff = options?.cutoff ?? 20
const summaryPoints = new UIEventSource<Feature<Point, SummaryProperties>[]>([])
currentZoomlevel = currentZoomlevel.stabilized(500).map(z => Math.floor(z))
this.features = (upstream.features.map(features => {
if (!doCluster.data) {
summaryPoints.set([])
return features
}
const z = currentZoomlevel.data
const perTile = GeoOperations.spreadIntoBboxes(features, z)
const resultingFeatures = []
const summary: Feature<Point, SummaryProperties>[] = []
for (const tileIndex of perTile.keys()) {
const tileFeatures: Feature<Point>[] = perTile.get(tileIndex)
if (tileFeatures.length > cutoff) {
summary.push(this.createSummaryFeature(tileFeatures, tileIndex))
} else {
resultingFeatures.push(...tileFeatures)
}
}
summaryPoints.set(summary)
return resultingFeatures
}, [doCluster, currentZoomlevel]))
ClusterGrouping.singleton.registerSource(summaryPoints)
}
private createSummaryFeature(features: Feature<Point>[], tileId: number): Feature<Point, SummaryProperties> {
let lon: number
let lat: number
const [z, x, y] = Tiles.tile_from_index(tileId)
if (this.showSummaryAt === "tilecenter") {
[lon, lat] = Tiles.centerPointOf(z, x, y)
} else {
let lonSum = 0
let latSum = 0
for (const feature of features) {
const [lon, lat] = feature.geometry.coordinates
lonSum += lon
latSum += lat
}
lon = lonSum / features.length
lat = latSum / features.length
}
return {
type: "Feature",
geometry: {
type: "Point",
coordinates: [lon, lat]
},
properties: {
id: "summary_" + this.id + "_" + tileId,
tile_id: tileId,
total: features.length
}
}
}
}
/**
* Groups multiple summaries together
*/
export class ClusterGrouping implements FeatureSource<Feature<Point, { total_metric: string }>> {
private readonly _features: UIEventSource<Feature<Point, { total_metric: string }>[]> = new UIEventSource([])
public readonly features: Store<Feature<Point, { total_metric: string }>[]> = this._features
public static readonly singleton = new ClusterGrouping()
public readonly isDirty = new UIEventSource(false)
private constructor() {
this.isDirty.stabilized(200).addCallback(dirty => {
if (dirty) {
this.update()
}
})
}
private allSource: Store<Feature<Point, { total: number, tile_id: number }>[]>[] = []
private update() {
const countPerTile = new Map<number, number>()
for (const source of this.allSource) {
for (const f of source.data) {
const id = f.properties.tile_id
const count = f.properties.total + (countPerTile.get(id) ?? 0)
countPerTile.set(id, count)
}
}
const features: Feature<Point, { total_metric: string, id: string }>[] = []
const now = new Date().getTime() + ""
for (const tileId of countPerTile.keys()) {
const coordinates = Tiles.centerPointOf(tileId)
features.push({
type: "Feature",
properties: {
total_metric: "" + countPerTile.get(tileId),
id: "clustered_all_" + tileId + "_" + now // We add the date to force a fresh ID every time, this makes sure values are updated
},
geometry: {
type: "Point",
coordinates
}
})
}
this._features.set(features)
this.isDirty.set(false)
}
public registerSource(features: Store<Feature<Point, SummaryProperties>[]>) {
this.allSource.push(features)
features.addCallbackAndRun(() => {
//this.isDirty.set(true)
this.update()
})
}
}

View file

@ -1,5 +1,5 @@
import DynamicTileSource from "./DynamicTileSource" import DynamicTileSource from "./DynamicTileSource"
import { Store, UIEventSource } from "../../UIEventSource" import { ImmutableStore, Store, UIEventSource } from "../../UIEventSource"
import { BBox } from "../../BBox" import { BBox } from "../../BBox"
import StaticFeatureSource from "../Sources/StaticFeatureSource" import StaticFeatureSource from "../Sources/StaticFeatureSource"
import { Feature, Point } from "geojson" import { Feature, Point } from "geojson"
@ -20,7 +20,7 @@ export class SummaryTileSourceRewriter implements FeatureSource {
public readonly totalNumberOfFeatures: Store<number> = this._totalNumberOfFeatures public readonly totalNumberOfFeatures: Store<number> = this._totalNumberOfFeatures
constructor( constructor(
summarySource: SummaryTileSource, summarySource: SummaryTileSource,
filteredLayers: ReadonlyMap<string, FilteredLayer> filteredLayers: ReadonlyMap<string, FilteredLayer>,
) { ) {
this.filteredLayers = Array.from(filteredLayers.values()).filter( this.filteredLayers = Array.from(filteredLayers.values()).filter(
(l) => !Constants.isPriviliged(l.layerDef) (l) => !Constants.isPriviliged(l.layerDef)
@ -73,11 +73,18 @@ export class SummaryTileSource extends DynamicTileSource {
zoom: Store<number> zoom: Store<number>
}, },
options?: { options?: {
isActive?: Store<boolean> isActive?: Store<boolean>,
availableLayers?: Store<Set<string>>
} }
) { ) {
const layersSummed = layers.join("+")
const zDiff = 2 const zDiff = 2
const layersSummed = (options?.availableLayers??new ImmutableStore(undefined)).map(available => {
console.log("Determining 'layersSummed' with currently available:", available)
if(available === undefined){
return layers.join("+")
}
return layers.filter(l => available.has(l)).join("+")
})
super( super(
zoomRounded, zoomRounded,
0, // minzoom 0, // minzoom
@ -85,7 +92,7 @@ export class SummaryTileSource extends DynamicTileSource {
const features = SummaryTileSource.downloadTile( const features = SummaryTileSource.downloadTile(
tileIndex, tileIndex,
cacheserver, cacheserver,
layersSummed layersSummed.data
) )
const [z] = Tiles.tile_from_index(tileIndex) const [z] = Tiles.tile_from_index(tileIndex)
return new StaticFeatureSource( return new StaticFeatureSource(
@ -110,6 +117,9 @@ export class SummaryTileSource extends DynamicTileSource {
cacheserver: string, cacheserver: string,
layersSummed: string layersSummed: string
): Store<Feature<Point>[]> { ): Store<Feature<Point>[]> {
if(layersSummed === ""){
return new ImmutableStore([])
}
const [z, x, y] = Tiles.tile_from_index(tileIndex) const [z, x, y] = Tiles.tile_from_index(tileIndex)
let coordinates = Tiles.centerPointOf(z, x, y) let coordinates = Tiles.centerPointOf(z, x, y)
const url = `${cacheserver}/summary/${layersSummed}/${z}/${x}/${y}.json` const url = `${cacheserver}/summary/${layersSummed}/${z}/${x}/${y}.json`

View file

@ -10,11 +10,12 @@ import {
MultiPolygon, MultiPolygon,
Point, Point,
Polygon, Polygon,
Position, Position
} from "geojson" } from "geojson"
import { Tiles } from "../Models/TileRange" import { Tiles } from "../Models/TileRange"
import { Utils } from "../Utils" import { Utils } from "../Utils"
;("use strict")
("use strict")
export class GeoOperations { export class GeoOperations {
private static readonly _earthRadius: number = 6378137 private static readonly _earthRadius: number = 6378137
@ -536,10 +537,23 @@ export class GeoOperations {
* @param features * @param features
* @param zoomlevel * @param zoomlevel
*/ */
public static spreadIntoBboxes(features: Feature[], zoomlevel: number): Map<number, Feature[]> { public static spreadIntoBboxes<T extends Feature = Feature>(features: T[], zoomlevel: number): Map<number, T[]> {
const perBbox = new Map<number, Feature[]>() const perBbox = new Map<number, T[]>()
const z = zoomlevel
for (const feature of features) { for (const feature of features) {
if (feature.geometry.type === "Point") {
const [lon, lat] = feature.geometry.coordinates
const tileXYZ = Tiles.embedded_tile(lat, lon, z)
const tileNumber = Tiles.tile_index(z, tileXYZ.x, tileXYZ.y)
let newFeatureList = perBbox.get(tileNumber)
if (newFeatureList === undefined) {
newFeatureList = []
perBbox.set(tileNumber, newFeatureList)
}
newFeatureList.push(feature)
continue
}
const bbox = BBox.get(feature) const bbox = BBox.get(feature)
const tilerange = bbox.expandToTileBounds(zoomlevel).containingTileRange(zoomlevel) const tilerange = bbox.expandToTileBounds(zoomlevel).containingTileRange(zoomlevel)
Tiles.MapRange(tilerange, (x, y) => { Tiles.MapRange(tilerange, (x, y) => {

View file

@ -369,7 +369,7 @@ export default class UserRelatedState {
private static initUserSettingsState(): LayerConfig { private static initUserSettingsState(): LayerConfig {
try { try {
return new LayerConfig(<LayerConfigJson>usersettings, "userinformationpanel") return new LayerConfig(<LayerConfigJson><any>usersettings, "userinformationpanel")
} catch (e) { } catch (e) {
return undefined return undefined
} }
@ -655,7 +655,7 @@ export default class UserRelatedState {
for (const key in featureSwitches) { for (const key in featureSwitches) {
if (featureSwitches[key].addCallbackAndRun) { if (featureSwitches[key].addCallbackAndRun) {
featureSwitches[key].addCallbackAndRun((v) => { featureSwitches[key].addCallbackAndRun((v: string) => {
const oldV = amendedPrefs.data["__" + key] const oldV = amendedPrefs.data["__" + key]
if (oldV === v) { if (oldV === v) {
return return

View file

@ -4,6 +4,17 @@ import { Utils } from "../../Utils"
import { Feature, Position } from "geojson" import { Feature, Position } from "geojson"
import { GeoOperations } from "../GeoOperations" import { GeoOperations } from "../GeoOperations"
import { SpecialVisualizationState } from "../../UI/SpecialVisualization" import { SpecialVisualizationState } from "../../UI/SpecialVisualization"
import { WithUserRelatedState } from "../../Models/ThemeViewState/WithUserRelatedState"
export interface ReviewCollection {
readonly subjectUri?: Store<string>
readonly loadingAllowed: UIEventSource<boolean>
removeReviewLocally(review: Review): void
deleteReview(review: Review & { signature: string }): Promise<void>
createReview(review: Omit<Review, "sub">): Promise<void>
}
export class MangroveIdentity { export class MangroveIdentity {
private readonly keypair: UIEventSource<CryptoKeyPair> = new UIEventSource<CryptoKeyPair>( private readonly keypair: UIEventSource<CryptoKeyPair> = new UIEventSource<CryptoKeyPair>(
@ -134,12 +145,13 @@ export class MangroveIdentity {
} }
} }
/** /**
* Tracks all reviews of a given feature, allows to create a new review (and inserts this into the list) * Tracks all reviews of a given feature, allows to create a new review (and inserts this into the list)
* *
* This object will start fetching the reviews as soon as it is constructed * This object will start fetching the reviews as soon as it is constructed
*/ */
export default class FeatureReviews { export default class FeatureReviews implements ReviewCollection {
/** /**
* See https://gitlab.com/open-reviews/mangrove/-/blob/master/servers/reviewer/src/review.rs#L269 and https://source.mapcomplete.org/MapComplete/MapComplete/issues/1775 * See https://gitlab.com/open-reviews/mangrove/-/blob/master/servers/reviewer/src/review.rs#L269 and https://source.mapcomplete.org/MapComplete/MapComplete/issues/1775
*/ */
@ -147,10 +159,11 @@ export default class FeatureReviews {
private static readonly _featureReviewsCache: Record<string, FeatureReviews> = {} private static readonly _featureReviewsCache: Record<string, FeatureReviews> = {}
public readonly subjectUri: Store<string> public readonly subjectUri: Store<string>
public readonly average: Store<number | null> public readonly average: Store<number | null>
public readonly loadingAllowed: UIEventSource<boolean>
private readonly _reviews: UIEventSource< private readonly _reviews: UIEventSource<
(Review & { kid: string; signature: string; madeByLoggedInUser: Store<boolean> })[] (Review & { kid: string; signature: string; madeByLoggedInUser: Store<boolean> })[]
> = new UIEventSource(undefined) > = new UIEventSource(undefined)
public readonly reviews: Store<(Review & { signature: string, madeByLoggedInUser: Store<boolean> })[]> = public readonly reviews: Store<(Review & { kid: string, signature: string, madeByLoggedInUser: Store<boolean> })[]> =
this._reviews this._reviews
private readonly _lat: number private readonly _lat: number
private readonly _lon: number private readonly _lon: number
@ -158,23 +171,21 @@ export default class FeatureReviews {
private readonly _name: Store<string> private readonly _name: Store<string>
private readonly _identity: MangroveIdentity private readonly _identity: MangroveIdentity
private readonly _testmode: Store<boolean> private readonly _testmode: Store<boolean>
public readonly loadingAllowed: UIEventSource<boolean | null>
private readonly _reportError: (msg: string, extra: string) => Promise<void> private readonly _reportError: (msg: string, extra: string) => Promise<void>
private constructor( private constructor(
feature: Feature, feature: Feature,
tagsSource: UIEventSource<Record<string, string>>, tagsSource: UIEventSource<Record<string, string>>,
mangroveIdentity: MangroveIdentity, mangroveIdentity: MangroveIdentity,
loadingAllowed?: UIEventSource<boolean>,
options?: Readonly<{ options?: Readonly<{
nameKey?: "name" | string nameKey?: "name" | string
fallbackName?: string fallbackName?: string
uncertaintyRadius?: number uncertaintyRadius?: number,
}>, }>,
testmode?: Store<boolean>, testmode?: Store<boolean>,
loadingAllowed?: UIEventSource<boolean | null>,
reportError?: (msg: string, extra: string) => Promise<void> reportError?: (msg: string, extra: string) => Promise<void>
) { ) {
this.loadingAllowed = loadingAllowed
this._reportError = reportError this._reportError = reportError
const centerLonLat = GeoOperations.centerpointCoordinates(feature) const centerLonLat = GeoOperations.centerpointCoordinates(feature)
;[this._lon, this._lat] = centerLonLat ;[this._lon, this._lat] = centerLonLat
@ -221,14 +232,17 @@ export default class FeatureReviews {
}) })
this.subjectUri = this.ConstructSubjectUri() this.subjectUri = this.ConstructSubjectUri()
this.loadingAllowed = loadingAllowed
this.subjectUri.mapD( this.subjectUri.mapD(
async (sub) => { async (sub) => {
if (!loadingAllowed.data) {
return
}
const reviews = await MangroveReviews.getReviews({ sub }) const reviews = await MangroveReviews.getReviews({ sub })
console.debug("Got reviews for", feature, reviews, sub) console.debug("Got reviews for", feature, reviews, sub)
this.addReviews(reviews.reviews, this._name.data) this.addReviews(reviews.reviews, this._name.data)
}, },
[this._name] [this._name, loadingAllowed]
) )
/* We also construct all subject queries _without_ encoding the name to work around a previous bug /* We also construct all subject queries _without_ encoding the name to work around a previous bug
* See https://github.com/giggls/opencampsitemap/issues/30 * See https://github.com/giggls/opencampsitemap/issues/30
@ -267,6 +281,7 @@ export default class FeatureReviews {
}) })
} }
/** /**
* Construct a featureReviewsFor or fetches it from the cache * Construct a featureReviewsFor or fetches it from the cache
* *
@ -288,7 +303,7 @@ export default class FeatureReviews {
tagsSource: UIEventSource<Record<string, string>>, tagsSource: UIEventSource<Record<string, string>>,
mangroveIdentity: MangroveIdentity, mangroveIdentity: MangroveIdentity,
options: { nameKey: string; fallbackName: string }, options: { nameKey: string; fallbackName: string },
state?: SpecialVisualizationState state?: SpecialVisualizationState & WithUserRelatedState,
): FeatureReviews { ): FeatureReviews {
const key = const key =
feature.properties.id + feature.properties.id +
@ -300,34 +315,14 @@ export default class FeatureReviews {
if (cached !== undefined) { if (cached !== undefined) {
return cached return cached
} }
const themeIsSensitive = state?.theme?.enableMorePrivacy ?? false
const settings =
state?.osmConnection?.getPreference<"always" | "yes" | "ask" | "hidden">(
"reviews-allowed"
) ?? new ImmutableStore("yes")
const loadingAllowed = new UIEventSource(false)
settings.addCallbackAndRun((s) => {
if (s === "hidden") {
loadingAllowed.set(null)
return
}
if (s === "always") {
loadingAllowed.set(true)
return
}
if (themeIsSensitive || s === "ask") {
loadingAllowed.set(false)
return
}
loadingAllowed.set(true)
})
const featureReviews = new FeatureReviews( const featureReviews = new FeatureReviews(
feature, feature,
tagsSource, tagsSource,
mangroveIdentity, mangroveIdentity,
new UIEventSource(state?.loadReviews?.data ?? true),
options, options,
state?.featureSwitchIsTesting, state?.featureSwitchIsTesting,
loadingAllowed,
(msg, extra) => state?.reportError(msg, extra) (msg, extra) => state?.reportError(msg, extra)
) )
FeatureReviews._featureReviewsCache[key] = featureReviews FeatureReviews._featureReviewsCache[key] = featureReviews
@ -458,7 +453,7 @@ export default class FeatureReviews {
this.removeReviewLocally(review) this.removeReviewLocally(review)
} }
public removeReviewLocally(review: Review){ public removeReviewLocally(review: Review): void {
this._reviews.set( this._reviews.set(
this._reviews.data?.filter(r => r !== review) this._reviews.data?.filter(r => r !== review)
) )

View file

@ -31,8 +31,11 @@ export class IconConfig extends WithContextLoader {
} }
} }
export const allowed_location_codes = ["point", "centroid", "start", "end", "projected_centerpoint", "polygon_centroid", "waypoints"] as const
export type PointRenderingLocation = typeof allowed_location_codes[number]
export default class PointRenderingConfig extends WithContextLoader { export default class PointRenderingConfig extends WithContextLoader {
static readonly allowed_location_codes: ReadonlySet<string> = new Set<string>([ static readonly allowed_location_codes_set: ReadonlySet<PointRenderingLocation> = new Set<PointRenderingLocation>([
"point", "point",
"centroid", "centroid",
"start", "start",
@ -41,16 +44,7 @@ export default class PointRenderingConfig extends WithContextLoader {
"polygon_centroid", "polygon_centroid",
"waypoints", "waypoints",
]) ])
public readonly location: Set< public readonly location: Set<PointRenderingLocation>
| "point"
| "centroid"
| "start"
| "end"
| "projected_centerpoint"
| "polygon_centroid"
| "waypoints"
| string
>
public readonly marker: IconConfig[] public readonly marker: IconConfig[]
public readonly iconBadges: { if: TagsFilter; then: TagRenderingConfig }[] public readonly iconBadges: { if: TagsFilter; then: TagRenderingConfig }[]
@ -77,10 +71,10 @@ export default class PointRenderingConfig extends WithContextLoader {
json.location = [json.location] json.location = [json.location]
} }
this.location = new Set(json.location) this.location = new Set(<PointRenderingLocation[]>json.location)
this.location.forEach((l) => { this.location.forEach((l) => {
const allowed = PointRenderingConfig.allowed_location_codes const allowed = PointRenderingConfig.allowed_location_codes_set
if (!allowed.has(l)) { if (!allowed.has(l)) {
throw `A point rendering has an invalid location: '${l}' is not one of ${Array.from( throw `A point rendering has an invalid location: '${l}' is not one of ${Array.from(
allowed allowed
@ -313,10 +307,9 @@ export default class PointRenderingConfig extends WithContextLoader {
} }
const cssLabel = this.labelCss?.GetRenderValue(tags.data)?.txt const cssLabel = this.labelCss?.GetRenderValue(tags.data)?.txt
const cssClassesLabel = this.labelCssClasses?.GetRenderValue(tags.data)?.txt const cssClassesLabel = this.labelCssClasses?.GetRenderValue(tags.data)?.txt
const self = this
return new VariableUiElement( return new VariableUiElement(
tags.map((tags) => { tags.map((tags) => {
const label = self.label const label = this.label
?.GetRenderValue(tags) ?.GetRenderValue(tags)
?.Subs(tags) ?.Subs(tags)
?.SetClass("flex items-center justify-center absolute marker-label") ?.SetClass("flex items-center justify-center absolute marker-label")

View file

@ -255,27 +255,4 @@ export class UserMapFeatureswitchState extends WithUserRelatedState {
} }
) )
} }
/**
* Shows the current GPS-location marker on the given map.
* This is used to show the location on _other_ maps, e.g. on the map to add a new feature.
*
* This is _NOT_ to be used on the main map!
*/
public showCurrentLocationOn(map: Store<MlMap>) {
const id = "gps_location"
const layer = this.theme.getLayer(id)
if (layer === undefined) {
return
}
if (map === this.map) {
throw "Invalid use of showCurrentLocationOn"
}
const features = this.geolocation.currentUserLocation
return new ShowDataLayer(map, {
features,
layer,
metaTags: this.userRelatedState.preferencesAsTags,
})
}
} }

View file

@ -1,5 +1,7 @@
import { Changes } from "../../Logic/Osm/Changes" import { Changes } from "../../Logic/Osm/Changes"
import { NewGeometryFromChangesFeatureSource } from "../../Logic/FeatureSource/Sources/NewGeometryFromChangesFeatureSource" import {
NewGeometryFromChangesFeatureSource
} from "../../Logic/FeatureSource/Sources/NewGeometryFromChangesFeatureSource"
import { WithLayoutSourceState } from "./WithLayoutSourceState" import { WithLayoutSourceState } from "./WithLayoutSourceState"
import ThemeConfig from "../ThemeConfig/ThemeConfig" import ThemeConfig from "../ThemeConfig/ThemeConfig"
import { Utils } from "../../Utils" import { Utils } from "../../Utils"
@ -18,9 +20,7 @@ import { Map as MlMap } from "maplibre-gl"
import FilteringFeatureSource from "../../Logic/FeatureSource/Sources/FilteringFeatureSource" import FilteringFeatureSource from "../../Logic/FeatureSource/Sources/FilteringFeatureSource"
import ShowDataLayer from "../../UI/Map/ShowDataLayer" import ShowDataLayer from "../../UI/Map/ShowDataLayer"
import SelectedElementTagsUpdater from "../../Logic/Actors/SelectedElementTagsUpdater" import SelectedElementTagsUpdater from "../../Logic/Actors/SelectedElementTagsUpdater"
import NoElementsInViewDetector, { import NoElementsInViewDetector, { FeatureViewState } from "../../Logic/Actors/NoElementsInViewDetector"
FeatureViewState,
} from "../../Logic/Actors/NoElementsInViewDetector"
export class WithChangesState extends WithLayoutSourceState { export class WithChangesState extends WithLayoutSourceState {
readonly changes: Changes readonly changes: Changes
@ -219,14 +219,24 @@ export class WithChangesState extends WithLayoutSourceState {
) )
filteringFeatureSource.set(layerName, filtered) filteringFeatureSource.set(layerName, filtered)
new ShowDataLayer(map, { ShowDataLayer.showLayerClustered(map,
this,
{
layer: fs.layer.layerDef,
features: filtered,
doShowLayer,
metaTags: this.userRelatedState.preferencesAsTags,
selectedElement: this.selectedElement,
fetchStore: (id) => this.featureProperties.getStore(id)
})
/*new ShowDataLayer(map, {
layer: fs.layer.layerDef, layer: fs.layer.layerDef,
features: filtered, features: filtered,
doShowLayer, doShowLayer,
metaTags: this.userRelatedState.preferencesAsTags, metaTags: this.userRelatedState.preferencesAsTags,
selectedElement: this.selectedElement, selectedElement: this.selectedElement,
fetchStore: (id) => this.featureProperties.getStore(id), fetchStore: (id) => this.featureProperties.getStore(id),
}) })*/
}) })
return filteringFeatureSource return filteringFeatureSource
} }

View file

@ -18,12 +18,14 @@ import { Store, UIEventSource } from "../../Logic/UIEventSource"
import NearbyFeatureSource from "../../Logic/FeatureSource/Sources/NearbyFeatureSource" import NearbyFeatureSource from "../../Logic/FeatureSource/Sources/NearbyFeatureSource"
import { import {
SummaryTileSource, SummaryTileSource,
SummaryTileSourceRewriter, SummaryTileSourceRewriter
} from "../../Logic/FeatureSource/TiledFeatureSource/SummaryTileSource" } from "../../Logic/FeatureSource/TiledFeatureSource/SummaryTileSource"
import { ShowDataLayerOptions } from "../../UI/Map/ShowDataLayerOptions" import { ShowDataLayerOptions } from "../../UI/Map/ShowDataLayerOptions"
import { ClusterGrouping } from "../../Logic/FeatureSource/TiledFeatureSource/ClusteringFeatureSource"
export class WithSpecialLayers extends WithChangesState { export class WithSpecialLayers extends WithChangesState {
readonly favourites: FavouritesFeatureSource readonly favourites: FavouritesFeatureSource
private mvtAvailableLayers: Store<Set<string>>
/** /**
* When hovering (in the popup) an image, the location of the image will be revealed on the main map. * When hovering (in the popup) an image, the location of the image will be revealed on the main map.
* This store contains those images that should be shown, probably only the currently hovered image * This store contains those images that should be shown, probably only the currently hovered image
@ -43,6 +45,7 @@ export class WithSpecialLayers extends WithChangesState {
constructor(theme: ThemeConfig, mvtAvailableLayers: Store<Set<string>>) { constructor(theme: ThemeConfig, mvtAvailableLayers: Store<Set<string>>) {
super(theme, mvtAvailableLayers) super(theme, mvtAvailableLayers)
this.mvtAvailableLayers = mvtAvailableLayers
this.favourites = new FavouritesFeatureSource(this) this.favourites = new FavouritesFeatureSource(this)
@ -61,6 +64,7 @@ export class WithSpecialLayers extends WithChangesState {
this.closestFeatures.registerSource(this.favourites, "favourite") this.closestFeatures.registerSource(this.favourites, "favourite")
this.featureSummary = this.setupSummaryLayer() this.featureSummary = this.setupSummaryLayer()
this.setupClusterLayer()
this.initActorsSpecialLayers() this.initActorsSpecialLayers()
this.drawSelectedElement() this.drawSelectedElement()
this.drawSpecialLayers() this.drawSpecialLayers()
@ -111,6 +115,7 @@ export class WithSpecialLayers extends WithChangesState {
this.mapProperties, this.mapProperties,
{ {
isActive: this.mapProperties.zoom.map((z) => z < maxzoom), isActive: this.mapProperties.zoom.map((z) => z < maxzoom),
availableLayers: this.mvtAvailableLayers
} }
) )
@ -128,6 +133,18 @@ export class WithSpecialLayers extends WithChangesState {
return source return source
} }
/**
* On high zoom levels, the clusters will be gathered in the GroupClustering.
* This method is responsible for drawing it
* @private
*/
private setupClusterLayer(): void {
new ShowDataLayer(this.map, {
features: ClusterGrouping.singleton,
layer: new LayerConfig(<LayerConfigJson>(<unknown>summaryLayer), "summaryLayer")
})
}
protected registerSpecialLayer(flayer: FilteredLayer, source: FeatureSource) { protected registerSpecialLayer(flayer: FilteredLayer, source: FeatureSource) {
if (!source?.features) { if (!source?.features) {
return return

View file

@ -4,7 +4,7 @@ import { OsmConnection } from "../../Logic/Osm/OsmConnection"
import UserRelatedState from "../../Logic/State/UserRelatedState" import UserRelatedState from "../../Logic/State/UserRelatedState"
import { QueryParameters } from "../../Logic/Web/QueryParameters" import { QueryParameters } from "../../Logic/Web/QueryParameters"
import FeatureSwitchState from "../../Logic/State/FeatureSwitchState" import FeatureSwitchState from "../../Logic/State/FeatureSwitchState"
import { Store, UIEventSource } from "../../Logic/UIEventSource" import { ImmutableStore, Store, UIEventSource } from "../../Logic/UIEventSource"
import LayerConfig from "../ThemeConfig/LayerConfig" import LayerConfig from "../ThemeConfig/LayerConfig"
import { LastClickFeatureSource } from "../../Logic/FeatureSource/Sources/LastClickFeatureSource" import { LastClickFeatureSource } from "../../Logic/FeatureSource/Sources/LastClickFeatureSource"
import { GeocodingUtils } from "../../Logic/Search/GeocodingProvider" import { GeocodingUtils } from "../../Logic/Search/GeocodingProvider"
@ -18,6 +18,9 @@ export class WithUserRelatedState {
readonly osmConnection: OsmConnection readonly osmConnection: OsmConnection
readonly userRelatedState: UserRelatedState readonly userRelatedState: UserRelatedState
readonly loadReviews: Store<boolean>
readonly overlayLayerStates: ReadonlyMap< readonly overlayLayerStates: ReadonlyMap<
string, string,
{ readonly isDisplayed: UIEventSource<boolean> } { readonly isDisplayed: UIEventSource<boolean> }
@ -62,6 +65,7 @@ export class WithUserRelatedState {
this.featureSwitches, this.featureSwitches,
rasterLayer rasterLayer
) )
this.loadReviews = this.constructIsLoadingReviewsAllowed()
if (!this.theme.official) { if (!this.theme.official) {
// Add custom themes to the "visited custom themes" // Add custom themes to the "visited custom themes"
@ -113,4 +117,31 @@ export class WithUserRelatedState {
} }
return this.theme.getMatchingLayer(properties) return this.theme.getMatchingLayer(properties)
} }
private constructIsLoadingReviewsAllowed() : UIEventSource<boolean>{
const loadingAllowed = new UIEventSource(false)
const themeIsSensitive = this.theme?.enableMorePrivacy ?? false
const settings =
this?.osmConnection?.getPreference<"always" | "yes" | "ask" | "hidden">(
"reviews-allowed",
) ?? new ImmutableStore("yes")
settings.addCallbackAndRun((s) => {
if (s === "hidden") {
loadingAllowed.set(null)
return
}
if (s === "always") {
loadingAllowed.set(true)
return
}
if (themeIsSensitive || s === "ask") {
loadingAllowed.set(false)
return
}
loadingAllowed.set(true)
})
return loadingAllowed
}
} }

View file

@ -53,11 +53,20 @@ export class Tiles {
/** /**
* Returns the centerpoint [lon, lat] of the specified tile * Returns the centerpoint [lon, lat] of the specified tile
* @param z * @param z OR tileId
* @param x * @param x
* @param y * @param y
*/ */
static centerPointOf(z: number, x: number, y: number): [number, number] { static centerPointOf(z: number, x: number, y: number): [number, number] ;
static centerPointOf(tileId: number): [number, number] ;
static centerPointOf(zOrId: number, x?: number, y?: number): [number, number] {
let z: number
if (x === undefined) {
[z, x, y] = Tiles.tile_from_index(zOrId)
} else {
z = zOrId
}
return [ return [
(Tiles.tile2long(x, z) + Tiles.tile2long(x + 1, z)) / 2, (Tiles.tile2long(x, z) + Tiles.tile2long(x + 1, z)) / 2,
(Tiles.tile2lat(y, z) + Tiles.tile2lat(y + 1, z)) / 2, (Tiles.tile2lat(y, z) + Tiles.tile2lat(y + 1, z)) / 2,

View file

@ -161,7 +161,8 @@
</DrawerLeft> </DrawerLeft>
<div class="flex w-screen flex-col p-2 sm:p-4"> <div class="flex w-screen flex-col p-2 sm:p-4">
<InsetSpacer height={AndroidPolyfill.getInsetSizes().top}/> <InsetSpacer height={AndroidPolyfill.getInsetSizes().top}/>
<div class="flex w-full justify-between overflow-hidden"> <!-- Top menu bar -->
<div class="flex w-full justify-between overflow-hidden pb-4">
<button on:click={() => guistate.pageStates.menu.set(true)} class="m-0 rounded-full p-2"> <button on:click={() => guistate.pageStates.menu.set(true)} class="m-0 rounded-full p-2">
<MenuIcon class="h-6 w-6 cursor-pointer" /> <MenuIcon class="h-6 w-6 cursor-pointer" />
</button> </button>
@ -174,15 +175,16 @@
/> />
</div> </div>
<div class="mt-4 flex overflow-hidden break-words"> <!-- Introduction pane -->
<div class="flex overflow-hidden break-words">
<div class="m-3 hidden flex-none md:block"> <div class="m-3 hidden flex-none md:block">
<Logo alt="MapComplete Logo" class="h-12 w-12 sm:h-24 sm:w-24" /> <Logo alt="MapComplete Logo" class="h-12 w-12 sm:h-24 sm:w-24" />
</div> </div>
<div class="link-underline flex w-full flex-col"> <div class="link-underline flex w-full flex-col">
<div class="flex flex-wrap"> <div class="flex items-center">
<div class="m-1 flex-none md:hidden"> <div class="m-1 flex-none md:hidden">
<Logo alt="MapComplete Logo" class="mr-4 h-10 w-10 sm:h-20 sm:w-20" /> <Logo alt="MapComplete Logo" class="mr-1 sm:mr-2 md:mr-4 h-10 w-10 sm:h-20 sm:w-20" />
</div> </div>
<div class="flex flex-col"> <div class="flex flex-col">
<h1 class="m-0 break-words font-extrabold tracking-tight md:text-6xl"> <h1 class="m-0 break-words font-extrabold tracking-tight md:text-6xl">

View file

@ -34,7 +34,6 @@
</script> </script>
{#if $showButton} {#if $showButton}
<div class="flex flex-col">
<button class="as-link sidebar-button" on:click={openJosm}> <button class="as-link sidebar-button" on:click={openJosm}>
<Josm_logo class="h-6 w-6" /> <Josm_logo class="h-6 w-6" />
<Tr t={t.editJosm} /> <Tr t={t.editJosm} />
@ -47,5 +46,4 @@
{:else} {:else}
<Tr cls="alert shrink-0 w-fit" t={t.josmNotOpened} /> <Tr cls="alert shrink-0 w-fit" t={t.josmNotOpened} />
{/if} {/if}
</div>
{/if} {/if}

View file

@ -44,7 +44,7 @@
display: flex; display: flex;
align-items: center; align-items: center;
border-radius: 0.25rem !important; border-radius: 0.25rem !important;
padding: 0.4rem 0.75rem !important; padding: 0.5rem 0.75rem !important;
text-decoration: none !important; text-decoration: none !important;
width: 100%; width: 100%;
text-align: start; text-align: start;
@ -58,7 +58,7 @@
.sidebar-unit > button svg, .sidebar-unit > button svg,
.sidebar-unit > button img .sidebar-unit > button img
) { ) {
margin-right: 0.5rem; margin-right: 0.2rem;
flex-shrink: 0; flex-shrink: 0;
} }

View file

@ -60,6 +60,7 @@
import ImageUploadQueue from "../../Logic/ImageProviders/ImageUploadQueue" import ImageUploadQueue from "../../Logic/ImageProviders/ImageUploadQueue"
import QueuedImagesView from "../Image/QueuedImagesView.svelte" import QueuedImagesView from "../Image/QueuedImagesView.svelte"
import InsetSpacer from "../Base/InsetSpacer.svelte" import InsetSpacer from "../Base/InsetSpacer.svelte"
import UserCircle from "@rgossiaux/svelte-heroicons/solid/UserCircle"
export let state: { export let state: {
favourites: FavouritesFeatureSource favourites: FavouritesFeatureSource
@ -133,9 +134,11 @@
<SidebarUnit> <SidebarUnit>
<LoginToggle {state}> <LoginToggle {state}>
<LoginButton osmConnection={state.osmConnection} slot="not-logged-in" /> <LoginButton osmConnection={state.osmConnection} slot="not-logged-in" />
<div class="flex items-center gap-x-4"> <div class="flex items-center gap-x-4 w-fit m-2">
{#if $userdetails.img} {#if $userdetails.img}
<img alt="avatar" src={$userdetails.img} class="h-14 w-14 rounded-full" /> <img alt="avatar" src={$userdetails.img} class="h-12 w-12 rounded-full" />
{:else}
<UserCircle class="h-14 w-14" color="gray"/>
{/if} {/if}
<b>{$userdetails.name}</b> <b>{$userdetails.name}</b>
</div> </div>

View file

@ -29,7 +29,11 @@
export let feature: Feature export let feature: Feature
export let readonly = false export let readonly = false
export let sourceUrl: Store<string> export let sourceUrl: Store<string>
/**
* A switch that signals that the information should be downloaded.
* The actual 'download' code is _not_ implemented here
*/
export let downloadInformation : UIEventSource<boolean>
export let collapsed: boolean export let collapsed: boolean
const t = Translations.t.external const t = Translations.t.external
@ -49,8 +53,14 @@
<LoginToggle {state} silentFail> <LoginToggle {state} silentFail>
{#if !$sourceUrl || !$enableLogin} {#if !$sourceUrl || !$enableLogin}
<!-- empty block --> <!-- empty block -->
{:else if !$downloadInformation}
<button on:click={() => downloadInformation.set(true)}>
Attempt to download information from the website {$sourceUrl}
</button>
{:else if $externalData === undefined} {:else if $externalData === undefined}
<div class="flex justify-center">
<Loading /> <Loading />
</div>
{:else if $externalData["error"] !== undefined} {:else if $externalData["error"] !== undefined}
<div class="subtle low-interaction rounded p-2 px-4 italic"> <div class="subtle low-interaction rounded p-2 px-4 italic">
<Tr t={Translations.t.external.error} /> <Tr t={Translations.t.external.error} />

View file

@ -3,11 +3,10 @@
* Shows an image with attribution * Shows an image with attribution
*/ */
import ImageAttribution from "./ImageAttribution.svelte" import ImageAttribution from "./ImageAttribution.svelte"
import { ImmutableStore, Store } from "../../Logic/UIEventSource" import { ImmutableStore, Store, UIEventSource } from "../../Logic/UIEventSource"
import type { HotspotProperties, ProvidedImage } from "../../Logic/ImageProviders/ImageProvider" import type { HotspotProperties, ProvidedImage } from "../../Logic/ImageProviders/ImageProvider"
import { Mapillary } from "../../Logic/ImageProviders/Mapillary" import { Mapillary } from "../../Logic/ImageProviders/Mapillary"
import { UIEventSource } from "../../Logic/UIEventSource"
import { MagnifyingGlassPlusIcon } from "@babeard/svelte-heroicons/outline" import { MagnifyingGlassPlusIcon } from "@babeard/svelte-heroicons/outline"
import { CloseButton } from "flowbite-svelte" import { CloseButton } from "flowbite-svelte"
import ImageOperations from "./ImageOperations.svelte" import ImageOperations from "./ImageOperations.svelte"
@ -24,15 +23,9 @@
import Panorama360 from "../../assets/svg/Panorama360.svelte" import Panorama360 from "../../assets/svg/Panorama360.svelte"
import { ExternalLinkIcon } from "@rgossiaux/svelte-heroicons/solid" import { ExternalLinkIcon } from "@rgossiaux/svelte-heroicons/solid"
import { ExclamationTriangle as TriangleOutline } from "@babeard/svelte-heroicons/outline/ExclamationTriangle" import { ExclamationTriangle as TriangleOutline } from "@babeard/svelte-heroicons/outline/ExclamationTriangle"
import LoginToggle from "../Base/LoginToggle.svelte"
export let image: Partial<ProvidedImage> & { id: string; url: string } export let image: Partial<ProvidedImage> & { id: string; url: string }
let fallbackImage: string = undefined
if (image?.provider === Mapillary.singleton) {
fallbackImage = "./assets/svg/blocked.svg"
}
let imgEl: HTMLImageElement
export let imgClass: string = undefined export let imgClass: string = undefined
export let state: ThemeViewState = undefined export let state: ThemeViewState = undefined
export let attributionFormat: "minimal" | "medium" | "large" = "medium" export let attributionFormat: "minimal" | "medium" | "large" = "medium"
@ -147,6 +140,7 @@
Not found Not found
</div> </div>
This image is probably incorrect or deleted. This image is probably incorrect or deleted.
{image.url}
<slot name="not-found-extra" /> <slot name="not-found-extra" />
{:else} {:else}
<div class="alert flex items-center"> <div class="alert flex items-center">
@ -191,7 +185,6 @@
{/if} {/if}
<img <img
class:hidden={!loaded} class:hidden={!loaded}
bind:this={imgEl}
on:load={() => (loaded = true)} on:load={() => (loaded = true)}
class={imgClass ?? ""} class={imgClass ?? ""}
class:cursor-zoom-in={canZoom} class:cursor-zoom-in={canZoom}

View file

@ -63,7 +63,7 @@
provider: AllImageProviders.byName(image.provider), provider: AllImageProviders.byName(image.provider),
date, date,
id: Object.values(image.osmTags)[0], id: Object.values(image.osmTags)[0],
isSpherical: image.details.isSpherical, isSpherical: image.details?.isSpherical ?? false,
license, license,
} }

View file

@ -60,7 +60,7 @@
{#if language !== $current} {#if language !== $current}
({language_translations[language]?.[$current] ?? language}) ({language_translations[language]?.[$current] ?? language})
{/if} {/if}
{#if $preferredLanguages.indexOf(language) >= 0} {#if $preferredLanguages?.indexOf(language) >= 0}
{/if} {/if}
</option> </option>
@ -78,6 +78,9 @@
({language}) ({language})
{/if} {/if}
{/if} {/if}
{#if $preferredLanguages?.indexOf(language) >= 0}
{/if}
</option> </option>
{/each} {/each}
</Dropdown> </Dropdown>

View file

@ -0,0 +1,277 @@
import PointRenderingConfig, {
allowed_location_codes,
PointRenderingLocation
} from "../../Models/ThemeConfig/PointRenderingConfig"
import { ImmutableStore, Store } from "../../Logic/UIEventSource"
import { type Alignment, Map as MlMap, Marker } from "maplibre-gl"
import { Feature, Geometry, Point } from "geojson"
import { OsmId, OsmTags } from "../../Models/OsmFeature"
import LayerConfig from "../../Models/ThemeConfig/LayerConfig"
import { FeatureSource } from "../../Logic/FeatureSource/FeatureSource"
import { IfVisibleFeatureSource } from "../../Logic/FeatureSource/Sources/IfVisibleFeatureSource"
import StaticFeatureSource from "../../Logic/FeatureSource/Sources/StaticFeatureSource"
import { GeoOperations } from "../../Logic/GeoOperations"
export class PointRenderingLayer {
private readonly _config: PointRenderingConfig
private readonly _fetchStore?: (id: string) => Store<Record<string, string>>
private readonly _map: MlMap
private readonly _onClick: (feature: Feature) => void
private readonly _allMarkers: Map<OsmId, Map<PointRenderingLocation, Marker>> = new Map()
private readonly _selectedElement: Store<{ properties: { id?: string } }>
private readonly _markedAsSelected: HTMLElement[] = []
private readonly _metatags: Store<Record<string, string>>
constructor(
map: MlMap,
layer: LayerConfig,
features: FeatureSource<Feature<Geometry, { id: string }>>,
config: PointRenderingConfig,
metatags?: Store<Record<string, string>>,
visibility?: Store<boolean>,
fetchStore?: (id: string) => Store<Record<string, string>>,
onClick?: (feature: Feature) => void,
selectedElement?: Store<{ properties: { id?: string } }>,
preprocess?: <T extends Feature<Point>>(fs: FeatureSource<T>) => FeatureSource<T>
) {
this._config = config
this._map = map
this._metatags = metatags
this._fetchStore = fetchStore
this._onClick = onClick
this._selectedElement = selectedElement
visibility ??= new ImmutableStore(true)
if (!features?.features) {
throw (
"Could not setup a PointRenderingLayer; features?.features is undefined/null. The layer is " +
layer.id
)
}
/**
* Basically 'features', but only if 'visible' is true
*/
const featuresIfVisibleStore: Store<(Feature<Point, { id: string }> & {
locationType: PointRenderingLocation
})[]> =
new IfVisibleFeatureSource(features, visibility).features.map(features =>
PointRenderingLayer.extractLocations(features, config.location)
)
let featuresToDraw: FeatureSource<Feature<Point, { id: string }> & { locationType: PointRenderingLocation }>
if (preprocess) {
featuresToDraw = preprocess(new StaticFeatureSource(featuresIfVisibleStore))
} else {
featuresToDraw = new StaticFeatureSource(featuresIfVisibleStore)
}
featuresToDraw.features?.addCallbackAndRunD((features) => {
this.updateFeatures(features)
this.hideUnneededElements(features)
})
selectedElement?.addCallbackAndRun((selected) => {
this._markedAsSelected.forEach((el) => el.classList.remove("selected"))
this._markedAsSelected.splice(0, this._markedAsSelected.length)
if (selected === undefined) {
return
}
allowed_location_codes.forEach((code) => {
const marker = this._allMarkers.get(<OsmId>selected.properties.id)
?.get(code)
?.getElement()
if (marker === undefined) {
return
}
marker.classList?.add("selected")
this._markedAsSelected.push(marker)
})
})
}
/**
* All locations that this layer should be rendered
* @private
*/
private static extractLocations(features: Feature<Geometry, {
id: string
}>[], locations: Set<PointRenderingLocation>): (Feature<Point, { id: string }> & {
locationType: PointRenderingLocation
})[] {
const resultingFeatures: (Feature<Point, { id: string }> & { locationType: PointRenderingLocation })[] = []
function registerFeature(feature: Feature<any, {
id: string
}>, location: [number, number], locationType: PointRenderingLocation) {
resultingFeatures.push({
...feature,
locationType,
geometry: {
type: "Point",
coordinates: location
}
})
}
for (const feature of features) {
for (const location of locations) {
if (feature?.geometry === undefined) {
console.warn(
"Got an invalid feature:",
feature,
" while rendering",
location
)
}
if (location === "waypoints") {
if (feature.geometry.type === "LineString") {
for (const loc of feature.geometry.coordinates) {
registerFeature(feature, <[number, number]>loc, location)
}
}
if (
feature.geometry.type === "MultiLineString" ||
feature.geometry.type === "Polygon"
) {
for (const coors of feature.geometry.coordinates) {
for (const loc of coors) {
registerFeature(feature, <[number, number]>loc, location)
}
}
}
continue
}
const loc = GeoOperations.featureToCoordinateWithRenderingType(feature, location)
if (loc === undefined) {
continue
}
registerFeature(feature, loc, location)
}
}
return resultingFeatures
}
/**
* Hides (or shows) all markers as needed which are in the cache
* @private
*/
private hideUnneededElements(featuresToDraw: Feature<Geometry, { id: string }>[]) {
const idsToShow = new Set(featuresToDraw.map(f => f.properties.id))
for (const key of this._allMarkers.keys()) {
const shouldBeShown = idsToShow.has(key)
for (const marker of this._allMarkers.get(key).values()) {
if (!shouldBeShown) {
marker.addClassName("hidden")
} else {
marker.removeClassName("hidden")
}
}
}
}
private updateFeatures(allPointLocations: (Feature<Point> & { locationType: PointRenderingLocation })[]) {
const cache = this._allMarkers
for (const feature of allPointLocations) {
const id = <OsmId>feature.properties.id
const locationType: PointRenderingLocation = feature.locationType
let marker = cache.get(id)?.get(locationType)
if (marker) {
const oldLoc = marker.getLngLat()
const loc = feature.geometry.coordinates
if (loc[0] !== oldLoc.lng && loc[1] !== oldLoc.lat) {
marker.setLngLat(<[number, number]>loc)
}
} else {
marker = this.addPoint(feature)
if (!cache.has(id)) {
cache.set(id, new Map())
}
cache.get(id).set(locationType, marker)
}
if (this._selectedElement?.data?.properties?.id === id) {
marker.getElement().classList.add("selected")
this._markedAsSelected.push(marker.getElement())
}
}
}
/**
* Render the relevant marker at the explicitly given location.
*/
private addPoint(feature: Feature<Point>): Marker {
/*
new Marker()
.setLngLat(feature.geometry.coordinates)
.addTo(this._map)*/
let store: Store<Record<string, string>>
if (this._fetchStore) {
store = this._fetchStore(feature.properties.id)
} else {
store = new ImmutableStore(<OsmTags>feature.properties)
}
const { html, iconAnchor } = this._config.RenderIcon(store, { metatags: this._metatags })
html.SetClass("marker")
if (this._onClick !== undefined) {
html.SetClass("cursor-pointer")
}
const element = html.ConstructElement()
store.addCallbackAndRunD((tags) => {
if (tags._deleted === "yes") {
html.SetClass("grayscale")
}
})
if (this._onClick) {
element.addEventListener("click", (ev) => {
ev.preventDefault()
this._onClick(feature)
// Workaround to signal the MapLibreAdaptor to ignore this click
ev["consumed"] = true
})
}
const marker = new Marker({ element })
.setLngLat(<[number, number]>feature.geometry.coordinates)
.setOffset(iconAnchor)
.addTo(this._map)
store
.map((tags) => this._config.pitchAlignment.GetRenderValue(tags).Subs(tags).txt)
.addCallbackAndRun((pitchAligment) =>
marker.setPitchAlignment(<Alignment>pitchAligment)
)
store
.map((tags) => this._config.rotationAlignment.GetRenderValue(tags).Subs(tags).txt)
.addCallbackAndRun((pitchAligment) =>
marker.setRotationAlignment(<Alignment>pitchAligment)
)
if (feature.geometry.type === "Point") {
// When the tags get 'pinged', check that the location didn't change
store.addCallbackAndRunD(() => {
// Check if the location is still the same
const oldLoc = marker.getLngLat()
const newloc = (<Point>feature.geometry).coordinates
if (newloc[0] === oldLoc.lng && newloc[1] === oldLoc.lat) {
return
}
marker.setLngLat({ lon: newloc[0], lat: newloc[1] })
})
}
return marker
}
}

View file

@ -1,14 +1,11 @@
import { ImmutableStore, Store, UIEventSource } from "../../Logic/UIEventSource" import { Store, UIEventSource } from "../../Logic/UIEventSource"
import type { AddLayerObject, Alignment, Map as MlMap } from "maplibre-gl" import type { AddLayerObject, Map as MlMap } from "maplibre-gl"
import { GeoJSONSource, Marker } from "maplibre-gl" import { GeoJSONSource } from "maplibre-gl"
import { ShowDataLayerOptions } from "./ShowDataLayerOptions" import { ShowDataLayerOptions } from "./ShowDataLayerOptions"
import { GeoOperations } from "../../Logic/GeoOperations"
import LayerConfig from "../../Models/ThemeConfig/LayerConfig" import LayerConfig from "../../Models/ThemeConfig/LayerConfig"
import PointRenderingConfig from "../../Models/ThemeConfig/PointRenderingConfig" import { FeatureSource } from "../../Logic/FeatureSource/FeatureSource"
import { OsmTags } from "../../Models/OsmFeature"
import { FeatureSource, FeatureSourceForLayer } from "../../Logic/FeatureSource/FeatureSource"
import { BBox } from "../../Logic/BBox" import { BBox } from "../../Logic/BBox"
import { Feature, Point } from "geojson" import { Feature, Geometry } from "geojson"
import LineRenderingConfig from "../../Models/ThemeConfig/LineRenderingConfig" import LineRenderingConfig from "../../Models/ThemeConfig/LineRenderingConfig"
import { Utils } from "../../Utils" import { Utils } from "../../Utils"
import * as range_layer from "../../../assets/layers/range/range.json" import * as range_layer from "../../../assets/layers/range/range.json"
@ -17,209 +14,9 @@ import FilteredLayer from "../../Models/FilteredLayer"
import SimpleFeatureSource from "../../Logic/FeatureSource/Sources/SimpleFeatureSource" import SimpleFeatureSource from "../../Logic/FeatureSource/Sources/SimpleFeatureSource"
import { TagsFilter } from "../../Logic/Tags/TagsFilter" import { TagsFilter } from "../../Logic/Tags/TagsFilter"
import { LayerConfigJson } from "../../Models/ThemeConfig/Json/LayerConfigJson" import { LayerConfigJson } from "../../Models/ThemeConfig/Json/LayerConfigJson"
import { PointRenderingLayer } from "./PointRenderingLayer"
class PointRenderingLayer { import { ClusteringFeatureSource } from "../../Logic/FeatureSource/TiledFeatureSource/ClusteringFeatureSource"
private readonly _config: PointRenderingConfig import { OsmTags } from "../../Models/OsmFeature"
private readonly _visibility?: Store<boolean>
private readonly _fetchStore?: (id: string) => Store<Record<string, string>>
private readonly _map: MlMap
private readonly _onClick: (feature: Feature) => void
private readonly _allMarkers: Map<string, Marker> = new Map<string, Marker>()
private readonly _selectedElement: Store<{ properties: { id?: string } }>
private readonly _markedAsSelected: HTMLElement[] = []
private readonly _metatags: Store<Record<string, string>>
private _dirty = false
constructor(
map: MlMap,
layer: LayerConfig,
features: FeatureSource,
config: PointRenderingConfig,
metatags?: Store<Record<string, string>>,
visibility?: Store<boolean>,
fetchStore?: (id: string) => Store<Record<string, string>>,
onClick?: (feature: Feature) => void,
selectedElement?: Store<{ properties: { id?: string } }>
) {
this._visibility = visibility
this._config = config
this._map = map
this._metatags = metatags
this._fetchStore = fetchStore
this._onClick = onClick
this._selectedElement = selectedElement
if (!features?.features) {
throw (
"Could not setup a PointRenderingLayer; features?.features is undefined/null. The layer is " +
layer.id
)
}
features.features?.addCallbackAndRunD((features) => this.updateFeatures(features))
visibility?.addCallbackAndRunD((visible) => {
if (visible === true && this._dirty) {
this.updateFeatures(features.features.data)
}
this.setVisibility(visible)
})
selectedElement?.addCallbackAndRun((selected) => {
this._markedAsSelected.forEach((el) => el.classList.remove("selected"))
this._markedAsSelected.splice(0, this._markedAsSelected.length)
if (selected === undefined) {
return
}
PointRenderingConfig.allowed_location_codes.forEach((code) => {
const marker = this._allMarkers
.get(selected.properties?.id + "-" + code)
?.getElement()
if (marker === undefined) {
return
}
marker?.classList?.add("selected")
this._markedAsSelected.push(marker)
})
})
}
private updateFeatures(features: Feature[]) {
if (this._visibility?.data === false) {
this._dirty = true
return
}
this._dirty = false
const cache = this._allMarkers
const unseenKeys = new Set(cache.keys())
for (const location of this._config.location) {
for (const feature of features) {
if (feature?.geometry === undefined) {
console.warn(
"Got an invalid feature:",
features,
" while rendering",
location,
"of",
this._config
)
}
const id = feature.properties.id + "-" + location
unseenKeys.delete(id)
if (location === "waypoints") {
if (feature.geometry.type === "LineString") {
for (const loc of feature.geometry.coordinates) {
this.addPoint(feature, <[number, number]>loc)
}
}
if (
feature.geometry.type === "MultiLineString" ||
feature.geometry.type === "Polygon"
) {
for (const coors of feature.geometry.coordinates) {
for (const loc of coors) {
this.addPoint(feature, <[number, number]>loc)
}
}
}
continue
}
const loc = GeoOperations.featureToCoordinateWithRenderingType(feature, location)
if (loc === undefined) {
continue
}
if (cache.has(id)) {
const cached = cache.get(id)
const oldLoc = cached.getLngLat()
if (loc[0] !== oldLoc.lng && loc[1] !== oldLoc.lat) {
cached.setLngLat(loc)
}
continue
}
const marker = this.addPoint(feature, loc)
if (this._selectedElement?.data === feature.properties.id) {
marker.getElement().classList.add("selected")
this._markedAsSelected.push(marker.getElement())
}
cache.set(id, marker)
}
}
for (const unseenKey of unseenKeys) {
cache.get(unseenKey).remove()
cache.delete(unseenKey)
}
}
private setVisibility(visible: boolean) {
for (const marker of this._allMarkers.values()) {
if (visible) {
marker.getElement().classList.remove("hidden")
} else {
marker.getElement().classList.add("hidden")
}
}
}
private addPoint(feature: Feature, loc: [number, number]): Marker {
let store: Store<Record<string, string>>
if (this._fetchStore) {
store = this._fetchStore(feature.properties.id)
} else {
store = new ImmutableStore(<OsmTags>feature.properties)
}
const { html, iconAnchor } = this._config.RenderIcon(store, { metatags: this._metatags })
html.SetClass("marker")
if (this._onClick !== undefined) {
html.SetClass("cursor-pointer")
}
const el = html.ConstructElement()
store.addCallbackAndRunD((tags) => {
if (tags._deleted === "yes") {
html.SetClass("grayscale")
}
})
if (this._onClick) {
el.addEventListener("click", (ev) => {
ev.preventDefault()
this._onClick(feature)
// Workaround to signal the MapLibreAdaptor to ignore this click
ev["consumed"] = true
})
}
const marker = new Marker({ element: el })
.setLngLat(loc)
.setOffset(iconAnchor)
.addTo(this._map)
store
.map((tags) => this._config.pitchAlignment.GetRenderValue(tags).Subs(tags).txt)
.addCallbackAndRun((pitchAligment) =>
marker.setPitchAlignment(<Alignment>pitchAligment)
)
store
.map((tags) => this._config.rotationAlignment.GetRenderValue(tags).Subs(tags).txt)
.addCallbackAndRun((pitchAligment) =>
marker.setRotationAlignment(<Alignment>pitchAligment)
)
if (feature.geometry.type === "Point") {
// When the tags get 'pinged', check that the location didn't change
store.addCallbackAndRunD(() => {
// Check if the location is still the same
const oldLoc = marker.getLngLat()
const newloc = (<Point>feature.geometry).coordinates
if (newloc[0] === oldLoc.lng && newloc[1] === oldLoc.lat) {
return
}
marker.setLngLat({ lon: newloc[0], lat: newloc[1] })
})
}
return marker
}
}
class LineRenderingLayer { class LineRenderingLayer {
/** /**
@ -564,7 +361,7 @@ export default class ShowDataLayer {
layers: LayerConfig[], layers: LayerConfig[],
options?: Partial<Omit<ShowDataLayerOptions, "features" | "layer">> options?: Partial<Omit<ShowDataLayerOptions, "features" | "layer">>
) { ) {
const perLayer: PerLayerFeatureSourceSplitter<FeatureSourceForLayer> = const perLayer =
new PerLayerFeatureSourceSplitter( new PerLayerFeatureSourceSplitter(
layers.filter((l) => l.source !== null).map((l) => new FilteredLayer(l)), layers.filter((l) => l.source !== null).map((l) => new FilteredLayer(l)),
features, features,
@ -582,18 +379,41 @@ export default class ShowDataLayer {
}) })
} }
perLayer.forEach((fs) => { perLayer.forEach((features) => {
new ShowDataLayer(mlmap, { new ShowDataLayer(mlmap, {
layer: fs.layer.layerDef, layer: features.layer.layerDef,
features: fs, features,
...(options ?? {}), ...(options ?? {}),
}) })
}) })
} }
/**
* Show the data, unless they are clustered.
* This method does _not_ add the clusters themselves to the map,
* this should be done independently. In a themeViewGui, this is done by the 'addSpecialLayers'
* @see ClusterGrouping
* @param mlmap
* @param state
* @param options
*/
public static showLayerClustered(mlmap: Store<MlMap>,
state: { mapProperties: { zoom: UIEventSource<number> } },
options: ShowDataLayerOptions & { layer: LayerConfig }
) {
options.preprocessPoints = feats =>
new ClusteringFeatureSource(feats, state.mapProperties.zoom.map(z => z + 2),
options.layer.id,
{
cutoff: 7,
showSummaryAt: "tilecenter"
})
new ShowDataLayer(mlmap, options)
}
public static showRange( public static showRange(
map: Store<MlMap>, map: Store<MlMap>,
features: FeatureSource, features: FeatureSource<Feature<Geometry, OsmTags>>,
doShowLayer?: Store<boolean> doShowLayer?: Store<boolean>
): ShowDataLayer { ): ShowDataLayer {
return new ShowDataLayer(map, { return new ShowDataLayer(map, {
@ -603,8 +423,6 @@ export default class ShowDataLayer {
}) })
} }
public destruct() {}
private static zoomToCurrentFeatures(map: MlMap, features: Feature[]) { private static zoomToCurrentFeatures(map: MlMap, features: Feature[]) {
if (!features || !map || features.length == 0) { if (!features || !map || features.length == 0) {
return return
@ -635,6 +453,7 @@ export default class ShowDataLayer {
layer, layer,
drawLines, drawLines,
drawMarkers, drawMarkers,
preprocessPoints
} = this._options } = this._options
let onClick = this._options.onClick let onClick = this._options.onClick
if (!onClick && selectedElement && layer.title !== undefined) { if (!onClick && selectedElement && layer.title !== undefined) {
@ -672,7 +491,8 @@ export default class ShowDataLayer {
doShowLayer, doShowLayer,
fetchStore, fetchStore,
onClick, onClick,
selectedElement selectedElement,
preprocessPoints
) )
} }
} }

View file

@ -1,12 +1,13 @@
import { FeatureSource } from "../../Logic/FeatureSource/FeatureSource" import { FeatureSource } from "../../Logic/FeatureSource/FeatureSource"
import { Store, UIEventSource } from "../../Logic/UIEventSource" import { Store, UIEventSource } from "../../Logic/UIEventSource"
import { Feature } from "geojson" import { Feature, Geometry, Point } from "geojson"
import { OsmTags } from "../../Models/OsmFeature"
export interface ShowDataLayerOptions { export interface ShowDataLayerOptions {
/** /**
* Features to show * Features to show
*/ */
features: FeatureSource features: FeatureSource<Feature<Geometry, OsmTags>>
/** /**
* Indication of the current selected element; overrides some filters. * Indication of the current selected element; overrides some filters.
* When a feature is tapped, the feature will be put in there * When a feature is tapped, the feature will be put in there
@ -31,5 +32,6 @@ export interface ShowDataLayerOptions {
onClick?: (feature: Feature) => void onClick?: (feature: Feature) => void
metaTags?: Store<Record<string, string>> metaTags?: Store<Record<string, string>>
prefix?: string prefix?: string,
preprocessPoints?: <T extends Feature<Point>>(fs: FeatureSource<T>) => FeatureSource<T>
} }

View file

@ -23,6 +23,7 @@
let average = reviews.average let average = reviews.average
let allReviews: Store< let allReviews: Store<
(Review & { (Review & {
kid: string,
signature: string, signature: string,
madeByLoggedInUser: Store<boolean> madeByLoggedInUser: Store<boolean>
})[] })[]
@ -32,7 +33,7 @@
let subject: Store<string> = reviews.subjectUri let subject: Store<string> = reviews.subjectUri
</script> </script>
<ReviewPrivacyShield {reviews} guistate={state.guistate}> <ReviewPrivacyShield loadingAllowed={reviews.loadingAllowed} guistate={state.guistate}>
<div class="border-2 border-dashed border-gray-300 p-2 flex flex-col gap-y-2"> <div class="border-2 border-dashed border-gray-300 p-2 flex flex-col gap-y-2">
{#if $allReviews?.length > 1} {#if $allReviews?.length > 1}
<StarsBar score={$average} /> <StarsBar score={$average} />
@ -43,7 +44,7 @@
</div> </div>
{:else if $allReviews.length > 0} {:else if $allReviews.length > 0}
{#each $allReviews as review} {#each $allReviews as review}
<SingleReview {review} {state} {tags} {feature} {layer} {reviews}/> <SingleReview {review} {state} {tags} {feature} {layer} {reviews} showMenu={false}/>
{/each} {/each}
{:else} {:else}
<div class="subtle m-2 italic flex justify-center"> <div class="subtle m-2 italic flex justify-center">

View file

@ -1,5 +1,6 @@
<script lang="ts"> <script lang="ts">
import FeatureReviews from "../../Logic/Web/MangroveReviews" import FeatureReviews from "../../Logic/Web/MangroveReviews"
import type { ReviewCollection } from "../../Logic/Web/MangroveReviews"
import StarsBar from "./StarsBar.svelte" import StarsBar from "./StarsBar.svelte"
import SpecialTranslation from "../Popup/TagRendering/SpecialTranslation.svelte" import SpecialTranslation from "../Popup/TagRendering/SpecialTranslation.svelte"
import { ImmutableStore, Store, UIEventSource } from "../../Logic/UIEventSource" import { ImmutableStore, Store, UIEventSource } from "../../Logic/UIEventSource"
@ -10,7 +11,7 @@
import Tr from "../Base/Tr.svelte" import Tr from "../Base/Tr.svelte"
import If from "../Base/If.svelte" import If from "../Base/If.svelte"
import Loading from "../Base/Loading.svelte" import Loading from "../Base/Loading.svelte"
import { MangroveReviews, Review } from "mangrove-reviews-typescript" import { Review } from "mangrove-reviews-typescript"
import { placeholder } from "../../Utils/placeholder" import { placeholder } from "../../Utils/placeholder"
import { ExclamationTriangle } from "@babeard/svelte-heroicons/solid/ExclamationTriangle" import { ExclamationTriangle } from "@babeard/svelte-heroicons/solid/ExclamationTriangle"
import ReviewPrivacyShield from "./ReviewPrivacyShield.svelte" import ReviewPrivacyShield from "./ReviewPrivacyShield.svelte"
@ -25,9 +26,9 @@
* The form to create a new review. * The form to create a new review.
* This is multi-stepped. * This is multi-stepped.
*/ */
export let reviews: FeatureReviews export let reviews: ReviewCollection
export let editReview: Review & { signature: string } = undefined export let editReview: Review & { signature: string } = undefined
let subject: Store<string> = editReview !== undefined ? new ImmutableStore(editReview.sub) : reviews.subjectUri export let subject: Store<string> = editReview !== undefined ? new ImmutableStore(editReview.sub) : reviews.subjectUri
let score = editReview?.rating ?? 0 let score = editReview?.rating ?? 0
let confirmedScore = editReview?.rating let confirmedScore = editReview?.rating
let isAffiliated = new UIEventSource(editReview?.metadata?.is_affiliated ?? false) let isAffiliated = new UIEventSource(editReview?.metadata?.is_affiliated ?? false)
@ -49,7 +50,11 @@
let uploadFailed: string = undefined let uploadFailed: string = undefined
let isTesting = state?.featureSwitchIsTesting let isTesting = state?.featureSwitchIsTesting
let debug = state.featureSwitches.featureSwitchIsDebugging
/**
* only for this feature, copy upstream value to start with
*/
async function save() { async function save() {
if (hasError.data) { if (hasError.data) {
return return
@ -98,11 +103,9 @@
_state = "done" _state = "done"
} }
let test = state.featureSwitches.featureSwitchIsTesting
let debug = state.featureSwitches.featureSwitchIsDebugging
</script> </script>
<ReviewPrivacyShield hiddenIfNotAllowed {reviews} guistate={state.guistate}> <ReviewPrivacyShield hiddenIfNotAllowed loadingAllowed={reviews.loadingAllowed} guistate={state.guistate}>
{#if uploadFailed} {#if uploadFailed}
<div class="alert flex"> <div class="alert flex">
<ExclamationTriangle class="h-6 w-6" /> <ExclamationTriangle class="h-6 w-6" />
@ -188,7 +191,7 @@
<Tr cls="subtle mt-4" t={t.tos} /> <Tr cls="subtle mt-4" t={t.tos} />
{/if} {/if}
{#if $debug || $test} {#if $debug || $isTesting}
<span class="subtle self-end">{$subject}</span> <span class="subtle self-end">{$subject}</span>
{/if} {/if}
</div> </div>

View file

@ -2,29 +2,31 @@
/** /**
* Due to privacy, we cannot load reviews unless allowed in the privacy policy * Due to privacy, we cannot load reviews unless allowed in the privacy policy
*/ */
import FeatureReviews from "../../Logic/Web/MangroveReviews"
import { MenuState } from "../../Models/MenuState" import { MenuState } from "../../Models/MenuState"
import { ImmutableStore } from "../../Logic/UIEventSource" import { UIEventSource } from "../../Logic/UIEventSource"
import Translations from "../i18n/Translations"
import Tr from "../Base/Tr.svelte"
export let guistate: MenuState export let guistate: MenuState
export let reviews: FeatureReviews export let loadingAllowed : UIEventSource<boolean>
export let hiddenIfNotAllowed: boolean = false export let hiddenIfNotAllowed: boolean = false
let allowed = reviews?.loadingAllowed ?? new ImmutableStore(true) let t = Translations.t.reviews
</script> </script>
{#if $allowed} {#if $loadingAllowed}
<slot /> <slot />
{:else if !hiddenIfNotAllowed && $allowed !== null} {:else if !hiddenIfNotAllowed && $loadingAllowed !== null}
<div class="low-interaction mx-1 flex flex-col rounded"> <div class="low-interaction mx-1 flex flex-col rounded">
Reviews are disabled due to your privacy settings. <Tr t={t.disabledForPrivacy}/>
<button on:click={() => reviews.loadingAllowed.set(true)} class="primary"> <button on:click={() => {loadingAllowed.set(true)}} class="primary">
Load reviews once <Tr t={t.loadOnce}/>
</button> </button>
<button <button
class="as-link self-end" class="as-link self-end"
on:click={() => guistate.openUsersettings("mangrove-reviews-allowed")} on:click={() => guistate.openUsersettings("mangrove-reviews-allowed")}
> >
Edit your privacy settings <Tr t={t.editPrivacySettings}/>
</button> </button>
</div> </div>
{/if} {/if}

View file

@ -1,5 +1,4 @@
<script lang="ts"> <script lang="ts">
import type { SpecialVisualizationState } from "../SpecialVisualization"
import Translations from "../i18n/Translations" import Translations from "../i18n/Translations"
import Tr from "../Base/Tr.svelte" import Tr from "../Base/Tr.svelte"
import LoginToggle from "../Base/LoginToggle.svelte" import LoginToggle from "../Base/LoginToggle.svelte"
@ -7,11 +6,14 @@
import SingleReview from "./SingleReview.svelte" import SingleReview from "./SingleReview.svelte"
import Mangrove_logo from "../../assets/svg/Mangrove_logo.svelte" import Mangrove_logo from "../../assets/svg/Mangrove_logo.svelte"
import Loading from "../Base/Loading.svelte" import Loading from "../Base/Loading.svelte"
import { OsmConnection } from "../../Logic/Osm/OsmConnection"
import { MangroveIdentity } from "../../Logic/Web/MangroveReviews"
import ThemeViewState from "../../Models/ThemeViewState"
/** /**
* A panel showing all the reviews by the logged-in user * A panel showing all the reviews by the logged-in user
*/ */
export let state: SpecialVisualizationState export let state: ThemeViewState & {osmConnection: OsmConnection, userRelatedState: { mangroveIdentity: MangroveIdentity }}
let allReviews = state.userRelatedState.mangroveIdentity.getAllReviews() let allReviews = state.userRelatedState.mangroveIdentity.getAllReviews()
let reviews = state.userRelatedState.mangroveIdentity.getGeoReviews() let reviews = state.userRelatedState.mangroveIdentity.getGeoReviews()
let kid = state.userRelatedState.mangroveIdentity.getKeyId() let kid = state.userRelatedState.mangroveIdentity.getKeyId()

View file

@ -17,17 +17,24 @@
import ReviewForm from "./ReviewForm.svelte" import ReviewForm from "./ReviewForm.svelte"
import type { Feature } from "geojson" import type { Feature } from "geojson"
import LayerConfig from "../../Models/ThemeConfig/LayerConfig" import LayerConfig from "../../Models/ThemeConfig/LayerConfig"
import FeatureReviews, { MangroveIdentity } from "../../Logic/Web/MangroveReviews" import { MangroveIdentity } from "../../Logic/Web/MangroveReviews"
import type { ReviewCollection } from "../../Logic/Web/MangroveReviews"
import ShieldExclamation from "@babeard/svelte-heroicons/solid/ShieldExclamation" import ShieldExclamation from "@babeard/svelte-heroicons/solid/ShieldExclamation"
import Delete_icon from "../../assets/svg/Delete_icon.svelte" import Delete_icon from "../../assets/svg/Delete_icon.svelte"
import ValidatedInput from "../InputElement/ValidatedInput.svelte" import ValidatedInput from "../InputElement/ValidatedInput.svelte"
import type { MapProperties } from "../../Models/MapProperties"
export let state: ThemeViewState = undefined export let state: ThemeViewState & {
mapProperties?: MapProperties,
userRelatedState?: { mangroveIdentity: MangroveIdentity }
} = undefined
export let tags: UIEventSource<Record<string, string>> = undefined export let tags: UIEventSource<Record<string, string>> = undefined
export let feature: Feature = undefined export let feature: Feature = undefined
export let layer: LayerConfig = undefined export let layer: LayerConfig = undefined
export let reviews: FeatureReviews export let reviews: ReviewCollection
export let showMenu: boolean
export let review: Review & { export let review: Review & {
kid: string kid: string
@ -212,7 +219,7 @@
{date} {date}
</a> </a>
</div> </div>
{#if review.signature} {#if review.signature && showMenu !== undefined}
<div class="self-start"> <div class="self-start">
<DotMenu> <DotMenu>
{#if $byLoggedInUser} {#if $byLoggedInUser}

View file

@ -97,7 +97,7 @@ class LinkedDataFromWebsite extends SpecialVisualization {
funcName = "linked_data_from_website" funcName = "linked_data_from_website"
group = "data_import" group = "data_import"
docs = docs =
"Attempts to load (via a proxy) the specified website and parsed ld+json from there. Suitable data will be offered to import into OSM. Note: this element is added by default" "Attempts to load (via a proxy) the specified website and parsed ld+json from there. Suitable data will be offered to import into OSM. Note: this element is added by default; but is disabled if the theme has the 'more privacy' flag set"
args = [ args = [
{ {
name: "key", name: "key",
@ -146,12 +146,16 @@ class LinkedDataFromWebsite extends SpecialVisualization {
argument: string[], argument: string[],
feature: Feature, feature: Feature,
layer: LayerConfig layer: LayerConfig
): BaseUIElement { ): SvelteUIElement {
if(state.theme.enableMorePrivacy){
return undefined
}
const key = argument[0] ?? "website" const key = argument[0] ?? "website"
const useProxy = argument[1] !== "no" const useProxy = argument[1] !== "no"
const readonly = argument[3] === "readonly" const readonly = argument[3] === "readonly"
const isClosed = (argument[4] ?? "yes") === "yes" const isClosed = (argument[4] ?? "yes") === "yes"
const downloadInformation = new UIEventSource(false)
const countryStore: Store<string | undefined> = tags.mapD((tags) => tags._country) const countryStore: Store<string | undefined> = tags.mapD((tags) => tags._country)
const sourceUrl: Store<string | undefined> = tags.mapD((tags) => { const sourceUrl: Store<string | undefined> = tags.mapD((tags) => {
if (!tags[key] || tags[key] === "undefined") { if (!tags[key] || tags[key] === "undefined") {
@ -161,6 +165,9 @@ class LinkedDataFromWebsite extends SpecialVisualization {
}) })
const externalData: Store<{ success: GeoJsonProperties } | { error }> = sourceUrl.bindD( const externalData: Store<{ success: GeoJsonProperties } | { error }> = sourceUrl.bindD(
(url) => { (url) => {
if(!downloadInformation.data){
return undefined
}
const country = countryStore.data const country = countryStore.data
if (url.startsWith("https://data.velopark.be/")) { if (url.startsWith("https://data.velopark.be/")) {
return Stores.FromPromiseWithErr( return Stores.FromPromiseWithErr(
@ -208,13 +215,15 @@ class LinkedDataFromWebsite extends SpecialVisualization {
})() })()
) )
}, },
[countryStore] [countryStore, downloadInformation]
) )
externalData.addCallbackAndRunD((lod) => externalData.addCallbackAndRunD((lod) =>
console.log("linked_data_from_website received the following data:", lod) console.log("linked_data_from_website received the following data:", lod)
) )
return new SvelteUIElement(ComparisonTool, { return new SvelteUIElement(ComparisonTool, {
feature, feature,
state, state,
@ -223,6 +232,7 @@ class LinkedDataFromWebsite extends SpecialVisualization {
externalData, externalData,
sourceUrl, sourceUrl,
readonly, readonly,
downloadInformation,
collapsed: isClosed, collapsed: isClosed,
}) })
} }

View file

@ -40,7 +40,6 @@
import DrawerLeft from "./Base/DrawerLeft.svelte" import DrawerLeft from "./Base/DrawerLeft.svelte"
import DrawerRight from "./Base/DrawerRight.svelte" import DrawerRight from "./Base/DrawerRight.svelte"
import SearchResults from "./Search/SearchResults.svelte" import SearchResults from "./Search/SearchResults.svelte"
import Hash from "../Logic/Web/Hash"
import Searchbar from "./Base/Searchbar.svelte" import Searchbar from "./Base/Searchbar.svelte"
import ChevronRight from "@babeard/svelte-heroicons/mini/ChevronRight" import ChevronRight from "@babeard/svelte-heroicons/mini/ChevronRight"
import { Drawer } from "flowbite-svelte" import { Drawer } from "flowbite-svelte"
@ -67,7 +66,6 @@
let selectedElement: UIEventSource<Feature> = new UIEventSource<Feature>(undefined) let selectedElement: UIEventSource<Feature> = new UIEventSource<Feature>(undefined)
let compass = Orientation.singleton.alpha let compass = Orientation.singleton.alpha
let compassLoaded = Orientation.singleton.gotMeasurement let compassLoaded = Orientation.singleton.gotMeasurement
let hash = Hash.hash
let addNewFeatureMode = state.userRelatedState.addNewFeatureMode let addNewFeatureMode = state.userRelatedState.addNewFeatureMode
let gpsAvailable = state.geolocation.geolocationState.gpsAvailable let gpsAvailable = state.geolocation.geolocationState.gpsAvailable
let gpsButtonAriaLabel = state.geolocation.geolocationState.gpsStateExplanation let gpsButtonAriaLabel = state.geolocation.geolocationState.gpsStateExplanation

View file

@ -0,0 +1,84 @@
import { FeatureCollection, Point } from "geojson"
import { describe, it } from "vitest"
import StaticFeatureSource from "../../../src/Logic/FeatureSource/Sources/StaticFeatureSource"
import {
ClusterGrouping,
ClusteringFeatureSource
} from "../../../src/Logic/FeatureSource/TiledFeatureSource/ClusteringFeatureSource"
import { UIEventSource } from "../../../src/Logic/UIEventSource"
import { expect } from "chai"
const points: FeatureCollection<Point> = {
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"properties": {name: "a"},
"geometry": {
"coordinates": [
9.759318139161195,
55.56552169756637
],
"type": "Point"
}
},
{
"type": "Feature",
"properties": {name: "b"},
"geometry": {
"coordinates": [
9.759768615515327,
55.56569930560951
],
"type": "Point"
}
},
{
"type": "Feature",
"properties": {name: "c"},
"geometry": {
"coordinates": [
9.75879327221594,
55.56569229478089
],
"type": "Point"
}
},
{
"type": "Feature",
"properties": {name: "d"},
"geometry": {
"coordinates": [
9.759380131319915,
55.56507066300628
],
"type": "Point"
}
}
]
}
describe("ClusteringFeatureSource", () => {
it("smallTest", () => {
const source = new StaticFeatureSource(points.features)
const zoom = new UIEventSource(19)
// On zoomlevel 19, all points are in a different tile
const clusteringSource = new ClusteringFeatureSource(source, zoom, "test", {
cutoff: 2,
dontClusterAboveZoom: 100
})
const allClusters = ClusterGrouping.singleton.features
expect(allClusters.data.length).to.eq(0)
expect(clusteringSource.features.data.length).to.eq(4)
zoom.set(13)
expect(allClusters.data.length).to.eq(1)
expect(allClusters.data[0].properties["total_metric"]).to.eq("4")
expect(clusteringSource.features.data.length).to.eq(0)
})
})