]> git.ipfire.org Git - thirdparty/rrdtool-1.x.git/commitdiff
preparing for 1.8 (#1155)
authorTobias Oetiker <tobi@oetiker.ch>
Mon, 14 Mar 2022 13:39:15 +0000 (14:39 +0100)
committerGitHub <noreply@github.com>
Mon, 14 Mar 2022 13:39:15 +0000 (14:39 +0100)
* updated CHANGES file
* move testing to GitHub actions
* prepare release action

.github/workflows/build-test-linux.yml [new file with mode: 0644]
.github/workflows/codeql-analysis.yml
.github/workflows/release-source.yml [new file with mode: 0644]
CHANGES
VERSION
configure.ac
doc/logo-dark.svg [new file with mode: 0644]
doc/logo-light.svg [new file with mode: 0644]

diff --git a/.github/workflows/build-test-linux.yml b/.github/workflows/build-test-linux.yml
new file mode 100644 (file)
index 0000000..ddc85da
--- /dev/null
@@ -0,0 +1,58 @@
+name: "Linux Build"
+on:
+  push:
+    branches: [ master ]
+  pull_request:
+    branches: [ master ]
+jobs:
+  build:
+    name: Build
+    runs-on: ubuntu-latest
+    steps:
+    - name: Checkout repository
+      uses: actions/checkout@v2
+
+    - name: Install dependencies
+      run: |
+        sudo apt-get update
+        sudo apt-get install autopoint build-essential libdbi-dev libtool-bin tcl-dev lua5.1 liblua5.1-0-dev valgrind dc python3-pip python3-setuptools libpango1.0-dev ghostscript gettext
+        sudo pip install cpp-coveralls
+    
+    - name: Build
+      run: |
+        V=$(cat VERSION)
+        ./bootstrap
+        ./configure --prefix=/opt/rrdtool-master
+        make
+        sudo make install
+        /opt/rrdtool-master/bin/rrdtool
+        /opt/rrdtool-master/share/rrdtool/examples/4charts.pl
+    - name: Run Checks
+      run: |
+        make check
+    - name: Test bindings
+      run: |
+        (cd bindings/perl-shared && make test)
+        (cd bindings/python && sudo chown -R $USER . && python setup.py test)
+    - name: Run "rrdcached-tcp"
+      run: |  
+        make check TESTS_STYLE="rrdcached-tcp"
+    - name: Run "rrdcached-udp"
+      run: |
+        make check TESTS_STYLE="rrdcached-unix"
+    - name: Run valgrind
+      run: |
+        make check TESTS_STYLE="valgrind-logfile" TESTS="modify1 modify2 modify3 modify4 modify5 tune1 tune2 graph1 rrdcreate dump-restore create-with-source-1 create-with-source-2 create-with-source-3 create-with-source-4 create-with-source-and-mapping-1 create-from-template-1 dcounter1 vformatter1 list1 pdp-calc1"
+        podchecker doc/*.pod
+    - name: Dist and Re-Build Test
+      run: |  
+        V=$(cat VERSION)
+        make dist
+        tar xf rrdtool-$V.tar.gz
+        cd rrdtool-$V
+        ./configure
+        make
+        sudo make install
+        cd /opt/rrdtool-$V
+        bin/rrdtool
+        
\ No newline at end of file
index 65a58aeb1cddfa27c3322e845a35229af57c4012..020e687882b78685d89c164cc7af16eb32b62fc7 100644 (file)
@@ -64,6 +64,7 @@ jobs:
     #    uses a compiled language
 
     - run: |
+       sudo apt-get update
        sudo apt-get install autopoint libdbi-dev libtool-bin tcl-dev lua5.1 liblua5.1-0-dev valgrind dc python3-pip python3-setuptools libpango1.0-dev ghostscript
        sudo pip install cpp-coveralls
        ./bootstrap
diff --git a/.github/workflows/release-source.yml b/.github/workflows/release-source.yml
new file mode 100644 (file)
index 0000000..0ccfa84
--- /dev/null
@@ -0,0 +1,52 @@
+---
+name: Release Source
+
+# yamllint disable rule:line-length
+# yamllint disable-line rule:truthy
+on:
+  push:
+    tags:
+      - 'v*.*.*'
+  workflow_dispatch:
+
+jobs:
+  prepare:
+    name: Create Release
+    runs-on: ubuntu-latest
+    outputs:
+      version: ${{ steps.get_version.outputs.version }}
+    steps:
+    - name: Get Version
+      id: get_version
+      run: echo +'::set-output name=version::$(cat VERSION)'
+
+  release:
+    name: Release Source
+    runs-on: ubuntu-latest
+    permissions:
+      contents: write
+    steps:
+    - name: Checkout
+      uses: actions/checkout@v2
+
+    - name: Install dependencies
+      run: |
+        sudo apt-get update
+        sudo apt-get install autotools build-essential gettext
+    - name: Build Dist
+      run: |
+        ./bootstrap
+        ./configure
+        make dist
+        perl -077 -ne '/^(.+?\n.+?\n.+?)\nRRDtool/s && print $1' CHANGES > releasenotes
+    - name: Create Release
+      uses: ncipollo/release-action@v1
+      with:
+        artifacts: "rrdtool-${{ steps.get_version.outputs.version }}.tar.gz"
+        artifactContentType: "application/tar+gzip"
+        bodyFile: releasenotes
+        discussionCategory: "Release ${{ needs.prepare.outputs.version }}"
+        name: "RRDtool Version ${{ needs.prepare.outputs.version }}"
+        token: ${{ secrets.GITHUB_TOKEN }}
+
+
diff --git a/CHANGES b/CHANGES
index 3c0d767789c836c94a898d10095eb33b52569d60..1054cb7de1aaf10c02cbc8522aad9377f062ebbc 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,58 @@
+
+RRDtool 1.8.0 - 2022-03-13
+==========================
+
+Bugfixes
+--------
+* python bindings: properly convert double values of rrd info <Stefan Gluszek>
+* failed to expand 'Py_UNUSED', Invalid usage when expanding  'Py_UNUSED' <c72578>
+* document --showtime in xport help output <c72578>
+* fix --use-nan-for-all-missing-data <c72578>
+* update rrdruby.pod <c72578>
+* add missing rrdruby.pod and rrdpython.pod to dist <c72578>
+* Set first_weekday to 0 (Sunday), when HAVE__NL_TIME_WEEK_1STDAY is not defined <nirgal>
+* fix median calculation for all NaN inputs <c72578>
+* fix potential leak in xport during failure <c72578>
+* fix many warnings raised by Cppcheck <c72578>
+* fix many compiler warnings from latest gcc <c72578>
+* ensure proper initialization in rrd_daemon <clarfonthey>
+* cleanup testsuite <nirgal>
+* better testing <c72578>
+* avoid invalid read in rrd_client <pallas>
+* add symbols from rrdc to librrd <pallas>
+* Fix duplicate write_changes_to_disk() calls when HAVE_LIBRADOS is true and HAVE_MMAP is false <yil-cpr>
+* documentation updates <nirgal>
+* for SMIN example in docs <Thomas-Gelf>
+* fix for pyton3 compatibility <SuperHeron>
+* freemem only for valid status <Christian Kr"oger>
+* fix double meaning of time 0 as uninitialized value <neirbowj>
+* fix for zfs not supporting fallocate. this makes resize work on zfs <zelsing>
+* add rrdrados.pod to dist <Jeron Roovers>
+* fetch - do not call rrd_freemem on uninitialized pointers <commx>
+* use separate pango fontmap per thread <nomis>
+* switch to python 3 <nirgal>
+* do not leak filename when opening a broken file <mistotebe>
+* fix leaks in rrdcached <mistotebe>
+* avoid segfault when flushing cache <svenpanne>
+* escape json in legend entries <c72578>
+* fix leak in xport <andrewchambers>
+* make rrdcgi param parsing more robust <oetiker>
+* fix race in journal_write <usaleem-lx>
+
+
+Features
+--------
+* ROUND function for rrd RPN <TheWitness>
+* vcpkg support for MSVC builds (see WIN32-BUILD-TIPS.txt) <c72578>
+* add first_weekday for Windows port <c72578>
+* add x64 platform for win32 build <c72578>
+* add --add-jsontime for graphv <netniV>
+* add --utc to graph <jyavenard>
+* add automated testing for win32 builds <c72578>
+* support TUNE command in rrdcached
+
+
+
 RRDtool 1.7.2 - 2019-05-27
 ==========================
 Bugfixes
diff --git a/VERSION b/VERSION
index f8a696c8dc56436062b4d179d96c78cbbbb718d7..27f9cd322bb9121054664da0e44ac2996f726886 100644 (file)
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-1.7.2
+1.8.0
index b4aa00826c109949267a49f1601cc6db86eae41f..4d2345855bf9ecdab9716c29575b2ac8b6c59f7c 100644 (file)
@@ -25,7 +25,7 @@ dnl - if any functionality was removed do c++,r=0,a=0.
 dnl
 dnl see http://sourceware.org/autobook/autobook/autobook_91.html
 dnl
-LIBVERS=10:1:2
+LIBVERS=11:0:3
 AC_SUBST(LIBVERS)
 
 AC_CANONICAL_TARGET
diff --git a/doc/logo-dark.svg b/doc/logo-dark.svg
new file mode 100644 (file)
index 0000000..745f2a7
--- /dev/null
@@ -0,0 +1,40 @@
+<?xml version="1.0" standalone="no"?>\r
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">\r
+<!--Generator: Xara Designer (www.xara.com), SVG filter version: 6.6.0.1-->\r
+<svg fill="none" fill-rule="evenodd" stroke="black" stroke-width="0.501" stroke-linejoin="bevel" stroke-miterlimit="10" font-family="Times New Roman" font-size="16" style="font-variant-ligatures:none" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" version="1.1" overflow="visible" width="81.459pt" height="26.775pt" viewBox="265.098 -254.704 81.459 26.775">\r
+ <defs>\r
+       </defs>\r
+ <g id="Layer 1" transform="scale(1 -1)">\r
+  <g id="Group" fill-rule="nonzero" stroke="none" stroke-width="0.534" fill="#7f9fff">\r
+   <g id="Group_1">\r
+    <path d="M 277.802,240.433 L 272.94,240.433 L 270.859,245.891 L 269.479,245.891 L 269.479,240.433 L 265.098,240.433 L 265.098,254.704 L 272.553,254.704 C 274.198,254.704 275.476,254.319 276.385,253.549 C 277.295,252.779 277.75,251.763 277.75,250.501 C 277.75,249.679 277.582,248.952 277.248,248.321 C 276.913,247.691 276.237,247.135 275.219,246.654 L 277.802,240.433 Z M 269.479,248.943 L 271.351,248.943 C 271.901,248.943 272.344,249.058 272.679,249.288 C 273.013,249.518 273.18,249.857 273.18,250.303 C 273.18,251.216 272.619,251.672 271.497,251.672 L 269.479,251.672 L 269.479,248.943 Z" marker-start="none" marker-end="none"/>\r
+    <path d="M 292.576,240.433 L 287.714,240.433 L 285.633,245.891 L 284.253,245.891 L 284.253,240.433 L 279.872,240.433 L 279.872,254.704 L 287.327,254.704 C 288.972,254.704 290.25,254.319 291.159,253.549 C 292.069,252.779 292.524,251.763 292.524,250.501 C 292.524,249.679 292.356,248.952 292.022,248.321 C 291.687,247.691 291.011,247.135 289.993,246.654 L 292.576,240.433 Z M 284.253,248.943 L 286.125,248.943 C 286.675,248.943 287.118,249.058 287.453,249.288 C 287.787,249.518 287.954,249.857 287.954,250.303 C 287.954,251.216 287.393,251.672 286.271,251.672 L 284.253,251.672 L 284.253,248.943 Z" marker-start="none" marker-end="none"/>\r
+    <path d="M 294.646,240.433 L 294.646,254.704 L 300.167,254.704 C 302.565,254.704 304.36,253.993 305.552,252.571 C 306.743,251.149 307.339,249.504 307.339,247.637 C 307.339,245.504 306.7,243.77 305.421,242.435 C 304.142,241.1 302.481,240.433 300.439,240.433 L 294.646,240.433 Z M 299.027,243.716 L 300.167,243.716 C 300.892,243.716 301.504,244.068 302.002,244.772 C 302.5,245.476 302.75,246.434 302.75,247.647 C 302.75,248.685 302.528,249.581 302.085,250.334 C 301.643,251.087 301.003,251.463 300.167,251.463 L 299.027,251.463 L 299.027,243.716 Z" marker-start="none" marker-end="none"/>\r
+    <path d="M 315.609,251.066 L 315.609,248.358 L 313.487,248.358 L 313.487,244.437 C 313.487,243.9 313.588,243.582 313.79,243.48 C 313.992,243.379 314.201,243.329 314.417,243.329 C 314.752,243.329 315.149,243.388 315.609,243.507 L 315.609,240.537 C 314.787,240.377 313.978,240.297 313.183,240.297 C 311.901,240.297 310.958,240.572 310.355,241.123 C 309.752,241.673 309.451,242.552 309.451,243.758 L 309.461,245.002 L 309.461,248.358 L 307.872,248.358 L 307.872,251.066 L 309.461,251.066 L 309.524,254.527 L 313.487,254.589 L 313.487,251.066 L 315.609,251.066 Z" marker-start="none" marker-end="none"/>\r
+    <path d="M 322.196,240.213 C 320.433,240.213 319.032,240.762 317.993,241.86 C 316.955,242.958 316.435,244.246 316.435,245.723 C 316.435,247.312 316.977,248.637 318.061,249.696 C 319.145,250.756 320.555,251.285 322.29,251.285 C 324.04,251.285 325.446,250.762 326.509,249.717 C 327.573,248.671 328.104,247.361 328.104,245.786 C 328.104,244.197 327.565,242.871 326.489,241.808 C 325.411,240.745 323.981,240.213 322.196,240.213 Z M 322.259,242.744 C 322.907,242.744 323.303,243.08 323.446,243.752 C 323.589,244.425 323.66,245.127 323.66,245.859 C 323.66,246.856 323.559,247.574 323.357,248.013 C 323.155,248.452 322.792,248.671 322.27,248.671 C 321.789,248.671 321.436,248.445 321.213,247.992 C 320.99,247.539 320.879,246.793 320.879,245.755 C 320.879,244.535 320.994,243.728 321.224,243.334 C 321.454,242.94 321.799,242.744 322.259,242.744 Z" marker-start="none" marker-end="none"/>\r
+    <path d="M 334.92,240.213 C 333.157,240.213 331.756,240.762 330.717,241.86 C 329.679,242.958 329.159,244.246 329.159,245.723 C 329.159,247.312 329.701,248.637 330.785,249.696 C 331.869,250.756 333.279,251.285 335.014,251.285 C 336.764,251.285 338.17,250.762 339.233,249.717 C 340.297,248.671 340.828,247.361 340.828,245.786 C 340.828,244.197 340.289,242.871 339.213,241.808 C 338.135,240.745 336.705,240.213 334.92,240.213 Z M 334.983,242.744 C 335.631,242.744 336.027,243.08 336.17,243.752 C 336.313,244.425 336.384,245.127 336.384,245.859 C 336.384,246.856 336.283,247.574 336.081,248.013 C 335.879,248.452 335.516,248.671 334.994,248.671 C 334.513,248.671 334.16,248.445 333.937,247.992 C 333.714,247.539 333.603,246.793 333.603,245.755 C 333.603,244.535 333.718,243.728 333.948,243.334 C 334.178,242.94 334.523,242.744 334.983,242.744 Z" marker-start="none" marker-end="none"/>\r
+    <path d="M 346.557,254.704 L 346.557,240.433 L 342.448,240.433 L 342.448,254.704 L 346.557,254.704 Z" marker-start="none" marker-end="none"/>\r
+   </g>\r
+  </g>\r
+  <g id="Group_2" fill-rule="nonzero" stroke="none" stroke-width="0.249" fill="#cccccc">\r
+   <g id="Group_3">\r
+    <path d="M 266.58,229.702 L 265.463,229.702 L 265.463,236.387 L 266.58,236.387 L 266.58,229.702 Z" marker-start="none" marker-end="none"/>\r
+    <path d="M 269.856,229.599 C 269.125,229.599 268.567,229.862 268.182,230.388 C 267.796,230.913 267.604,231.516 267.604,232.195 C 267.604,232.926 267.817,233.535 268.243,234.022 C 268.669,234.508 269.231,234.751 269.93,234.751 C 270.593,234.751 271.137,234.515 271.563,234.041 C 271.989,233.568 272.203,232.952 272.203,232.195 C 272.203,231.415 271.981,230.787 271.539,230.312 C 271.097,229.837 270.536,229.599 269.856,229.599 Z M 269.896,230.52 C 270.647,230.52 271.022,231.08 271.022,232.2 C 271.022,232.706 270.932,233.105 270.753,233.397 C 270.573,233.69 270.297,233.836 269.925,233.836 C 269.54,233.836 269.254,233.685 269.068,233.383 C 268.882,233.081 268.789,232.68 268.789,232.18 C 268.789,231.641 268.888,231.23 269.085,230.946 C 269.283,230.662 269.553,230.52 269.896,230.52 Z" marker-start="none" marker-end="none"/>\r
+    <path d="M 277.737,235.594 L 277.737,234.737 L 277.394,234.737 C 277.244,234.737 277.112,234.719 277,234.683 C 276.887,234.647 276.777,234.531 276.669,234.335 C 277.061,234.015 277.257,233.659 277.257,233.268 C 277.257,232.83 277.073,232.468 276.706,232.18 C 276.339,231.893 275.853,231.749 275.249,231.749 C 274.987,231.749 274.682,231.792 274.333,231.876 C 274.104,231.772 273.99,231.61 273.99,231.392 C 273.99,231.271 274.045,231.16 274.156,231.059 C 274.267,230.957 274.436,230.907 274.661,230.907 L 276.13,230.907 C 276.633,230.907 277.027,230.777 277.313,230.518 C 277.599,230.258 277.742,229.935 277.742,229.55 C 277.742,229.083 277.525,228.696 277.093,228.389 C 276.66,228.082 276.019,227.929 275.17,227.929 C 273.574,227.929 272.775,228.375 272.775,229.266 C 272.775,229.707 273.015,230.041 273.495,230.27 C 273.188,230.531 273.035,230.804 273.035,231.088 C 273.035,231.519 273.298,231.862 273.823,232.117 C 273.366,232.394 273.138,232.776 273.138,233.263 C 273.138,233.674 273.306,234.025 273.642,234.316 C 273.979,234.606 274.49,234.751 275.175,234.751 C 275.489,234.751 275.807,234.717 276.13,234.649 C 276.281,235.279 276.677,235.594 277.32,235.594 L 277.737,235.594 Z M 275.2,232.41 C 275.807,232.41 276.111,232.696 276.111,233.268 C 276.111,233.486 276.035,233.671 275.883,233.821 C 275.731,233.971 275.51,234.046 275.219,234.046 C 274.925,234.046 274.698,233.968 274.536,233.811 C 274.374,233.654 274.294,233.459 274.294,233.223 C 274.294,232.982 274.374,232.786 274.534,232.636 C 274.694,232.486 274.916,232.41 275.2,232.41 Z M 273.975,229.971 C 273.815,229.824 273.735,229.682 273.735,229.545 C 273.735,229.32 273.869,229.122 274.137,228.95 C 274.405,228.779 274.831,228.693 275.415,228.693 C 276.274,228.693 276.703,228.913 276.703,229.354 C 276.703,229.518 276.628,229.641 276.478,229.724 C 276.328,229.807 276.156,229.849 275.964,229.849 L 274.778,229.849 C 274.553,229.849 274.285,229.89 273.975,229.971 Z" marker-start="none" marker-end="none"/>\r
+    <path d="M 282.934,235.594 L 282.934,234.737 L 282.591,234.737 C 282.441,234.737 282.309,234.719 282.197,234.683 C 282.084,234.647 281.974,234.531 281.866,234.335 C 282.258,234.015 282.454,233.659 282.454,233.268 C 282.454,232.83 282.27,232.468 281.903,232.18 C 281.536,231.893 281.05,231.749 280.446,231.749 C 280.184,231.749 279.879,231.792 279.53,231.876 C 279.301,231.772 279.187,231.61 279.187,231.392 C 279.187,231.271 279.242,231.16 279.353,231.059 C 279.464,230.957 279.633,230.907 279.858,230.907 L 281.327,230.907 C 281.83,230.907 282.224,230.777 282.51,230.518 C 282.796,230.258 282.939,229.935 282.939,229.55 C 282.939,229.083 282.722,228.696 282.29,228.389 C 281.857,228.082 281.216,227.929 280.367,227.929 C 278.771,227.929 277.972,228.375 277.972,229.266 C 277.972,229.707 278.212,230.041 278.692,230.27 C 278.385,230.531 278.232,230.804 278.232,231.088 C 278.232,231.519 278.495,231.862 279.02,232.117 C 278.563,232.394 278.335,232.776 278.335,233.263 C 278.335,233.674 278.503,234.025 278.839,234.316 C 279.176,234.606 279.687,234.751 280.372,234.751 C 280.686,234.751 281.004,234.717 281.327,234.649 C 281.478,235.279 281.874,235.594 282.517,235.594 L 282.934,235.594 Z M 280.397,232.41 C 281.004,232.41 281.308,232.696 281.308,233.268 C 281.308,233.486 281.232,233.671 281.08,233.821 C 280.928,233.971 280.707,234.046 280.416,234.046 C 280.122,234.046 279.895,233.968 279.733,233.811 C 279.571,233.654 279.491,233.459 279.491,233.223 C 279.491,232.982 279.571,232.786 279.731,232.636 C 279.891,232.486 280.113,232.41 280.397,232.41 Z M 279.172,229.971 C 279.012,229.824 278.932,229.682 278.932,229.545 C 278.932,229.32 279.066,229.122 279.334,228.95 C 279.602,228.779 280.028,228.693 280.612,228.693 C 281.471,228.693 281.9,228.913 281.9,229.354 C 281.9,229.518 281.825,229.641 281.675,229.724 C 281.525,229.807 281.353,229.849 281.161,229.849 L 279.975,229.849 C 279.75,229.849 279.482,229.89 279.172,229.971 Z" marker-start="none" marker-end="none"/>\r
+    <path d="M 284.732,235.227 L 283.615,235.227 L 283.615,236.387 L 284.732,236.387 L 284.732,235.227 Z M 284.732,229.702 L 283.615,229.702 L 283.615,234.649 L 284.732,234.649 L 284.732,229.702 Z" marker-start="none" marker-end="none"/>\r
+    <path d="M 290.168,229.702 L 289.052,229.702 L 289.052,232.792 C 289.052,233.119 288.977,233.365 288.826,233.53 C 288.676,233.694 288.495,233.777 288.283,233.777 C 287.992,233.777 287.738,233.65 287.519,233.395 C 287.3,233.14 287.191,232.757 287.191,232.244 L 287.191,229.702 L 286.074,229.702 L 286.074,234.649 L 287.093,234.649 L 287.093,233.503 C 287.449,234.335 287.948,234.751 288.591,234.751 C 289.026,234.751 289.397,234.614 289.706,234.34 C 290.014,234.066 290.168,233.584 290.168,232.895 L 290.168,229.702 Z" marker-start="none" marker-end="none"/>\r
+    <path d="M 296.017,235.594 L 296.017,234.737 L 295.674,234.737 C 295.524,234.737 295.392,234.719 295.28,234.683 C 295.167,234.647 295.057,234.531 294.949,234.335 C 295.341,234.015 295.537,233.659 295.537,233.268 C 295.537,232.83 295.353,232.468 294.986,232.18 C 294.619,231.893 294.133,231.749 293.529,231.749 C 293.267,231.749 292.962,231.792 292.613,231.876 C 292.384,231.772 292.27,231.61 292.27,231.392 C 292.27,231.271 292.325,231.16 292.436,231.059 C 292.547,230.957 292.716,230.907 292.941,230.907 L 294.41,230.907 C 294.913,230.907 295.307,230.777 295.593,230.518 C 295.879,230.258 296.022,229.935 296.022,229.55 C 296.022,229.083 295.805,228.696 295.373,228.389 C 294.94,228.082 294.299,227.929 293.45,227.929 C 291.854,227.929 291.055,228.375 291.055,229.266 C 291.055,229.707 291.295,230.041 291.775,230.27 C 291.468,230.531 291.315,230.804 291.315,231.088 C 291.315,231.519 291.578,231.862 292.103,232.117 C 291.646,232.394 291.418,232.776 291.418,233.263 C 291.418,233.674 291.586,234.025 291.922,234.316 C 292.259,234.606 292.77,234.751 293.455,234.751 C 293.769,234.751 294.087,234.717 294.41,234.649 C 294.561,235.279 294.957,235.594 295.6,235.594 L 296.017,235.594 Z M 293.48,232.41 C 294.087,232.41 294.391,232.696 294.391,233.268 C 294.391,233.486 294.315,233.671 294.163,233.821 C 294.011,233.971 293.79,234.046 293.499,234.046 C 293.205,234.046 292.978,233.968 292.816,233.811 C 292.654,233.654 292.574,233.459 292.574,233.223 C 292.574,232.982 292.654,232.786 292.814,232.636 C 292.974,232.486 293.196,232.41 293.48,232.41 Z M 292.255,229.971 C 292.095,229.824 292.015,229.682 292.015,229.545 C 292.015,229.32 292.149,229.122 292.417,228.95 C 292.685,228.779 293.111,228.693 293.695,228.693 C 294.554,228.693 294.983,228.913 294.983,229.354 C 294.983,229.518 294.908,229.641 294.758,229.724 C 294.608,229.807 294.436,229.849 294.244,229.849 L 293.058,229.849 C 292.833,229.849 292.565,229.89 292.255,229.971 Z" marker-start="none" marker-end="none"/>\r
+    <path d="M 304.53,233.757 L 305.534,233.581 C 305.39,232.628 304.994,231.785 304.344,231.054 C 304.572,230.806 304.741,230.655 304.851,230.601 C 304.96,230.547 305.09,230.52 305.24,230.52 C 305.309,230.52 305.407,230.528 305.534,230.544 L 305.534,229.609 L 305.069,229.599 C 304.765,229.599 304.516,229.643 304.322,229.731 C 304.127,229.819 303.877,230.014 303.57,230.314 C 302.901,229.838 302.172,229.599 301.386,229.599 C 300.638,229.599 300.03,229.801 299.561,230.204 C 299.092,230.607 298.858,231.104 298.858,231.695 C 298.858,232.071 298.968,232.428 299.186,232.768 C 299.405,233.107 299.875,233.437 300.597,233.757 C 300.208,234.214 300.014,234.637 300.014,235.026 C 300.014,235.46 300.177,235.813 300.504,236.084 C 300.83,236.355 301.248,236.49 301.758,236.49 C 302.28,236.49 302.708,236.36 303.041,236.098 C 303.374,235.837 303.541,235.481 303.541,235.031 C 303.541,234.714 303.428,234.409 303.203,234.115 C 302.977,233.821 302.656,233.589 302.238,233.419 L 303.687,231.764 C 304.144,232.352 304.425,233.016 304.53,233.757 Z M 301.689,234.149 C 302.257,234.387 302.541,234.681 302.541,235.031 C 302.541,235.22 302.473,235.369 302.336,235.476 C 302.199,235.584 302.037,235.638 301.851,235.638 C 301.661,235.638 301.496,235.583 301.354,235.474 C 301.212,235.365 301.141,235.222 301.141,235.045 C 301.141,234.758 301.323,234.459 301.689,234.149 Z M 301.18,233.023 C 300.514,232.722 300.181,232.304 300.181,231.769 C 300.181,231.41 300.31,231.122 300.57,230.904 C 300.83,230.687 301.157,230.579 301.552,230.579 C 302.038,230.579 302.497,230.737 302.928,231.054 L 301.18,233.023 Z" marker-start="none" marker-end="none"/>\r
+    <path d="M 313.42,235.594 L 313.42,234.737 L 313.077,234.737 C 312.927,234.737 312.795,234.719 312.683,234.683 C 312.57,234.647 312.46,234.531 312.352,234.335 C 312.744,234.015 312.94,233.659 312.94,233.268 C 312.94,232.83 312.756,232.468 312.389,232.18 C 312.022,231.893 311.536,231.749 310.932,231.749 C 310.67,231.749 310.365,231.792 310.016,231.876 C 309.787,231.772 309.673,231.61 309.673,231.392 C 309.673,231.271 309.728,231.16 309.839,231.059 C 309.95,230.957 310.119,230.907 310.344,230.907 L 311.813,230.907 C 312.316,230.907 312.71,230.777 312.996,230.518 C 313.282,230.258 313.425,229.935 313.425,229.55 C 313.425,229.083 313.208,228.696 312.776,228.389 C 312.343,228.082 311.702,227.929 310.853,227.929 C 309.257,227.929 308.458,228.375 308.458,229.266 C 308.458,229.707 308.698,230.041 309.178,230.27 C 308.871,230.531 308.718,230.804 308.718,231.088 C 308.718,231.519 308.981,231.862 309.506,232.117 C 309.049,232.394 308.821,232.776 308.821,233.263 C 308.821,233.674 308.989,234.025 309.325,234.316 C 309.662,234.606 310.173,234.751 310.858,234.751 C 311.172,234.751 311.49,234.717 311.813,234.649 C 311.964,235.279 312.36,235.594 313.003,235.594 L 313.42,235.594 Z M 310.883,232.41 C 311.49,232.41 311.794,232.696 311.794,233.268 C 311.794,233.486 311.718,233.671 311.566,233.821 C 311.414,233.971 311.193,234.046 310.902,234.046 C 310.608,234.046 310.381,233.968 310.219,233.811 C 310.057,233.654 309.977,233.459 309.977,233.223 C 309.977,232.982 310.057,232.786 310.217,232.636 C 310.377,232.486 310.599,232.41 310.883,232.41 Z M 309.658,229.971 C 309.498,229.824 309.418,229.682 309.418,229.545 C 309.418,229.32 309.552,229.122 309.82,228.95 C 310.088,228.779 310.514,228.693 311.098,228.693 C 311.957,228.693 312.386,228.913 312.386,229.354 C 312.386,229.518 312.311,229.641 312.161,229.724 C 312.011,229.807 311.839,229.849 311.647,229.849 L 310.461,229.849 C 310.236,229.849 309.968,229.89 309.658,229.971 Z" marker-start="none" marker-end="none"/>\r
+    <path d="M 315.223,229.702 L 314.106,229.702 L 314.106,234.649 L 315.115,234.649 L 315.115,233.468 C 315.259,233.929 315.456,234.265 315.708,234.477 C 315.959,234.69 316.217,234.796 316.481,234.796 C 316.517,234.796 316.566,234.794 316.628,234.791 L 316.628,233.591 C 316.06,233.591 315.684,233.409 315.499,233.047 C 315.315,232.685 315.223,232.334 315.223,231.994 L 315.223,229.702 Z" marker-start="none" marker-end="none"/>\r
+    <path d="M 321.663,229.702 L 320.601,229.702 C 320.506,230.002 320.449,230.335 320.429,230.701 C 320.132,229.967 319.574,229.599 318.754,229.599 C 318.261,229.599 317.865,229.744 317.567,230.033 C 317.268,230.321 317.118,230.685 317.118,231.122 C 317.118,232.258 318.116,232.827 320.111,232.827 C 320.189,232.827 320.295,232.825 320.429,232.822 L 320.429,233.194 C 320.429,233.707 320.08,233.963 319.381,233.963 C 318.702,233.963 318.317,233.707 318.225,233.194 L 317.275,233.336 C 317.327,233.747 317.54,234.086 317.912,234.352 C 318.284,234.618 318.823,234.751 319.528,234.751 C 319.91,234.751 320.222,234.72 320.464,234.656 C 320.705,234.592 320.909,234.485 321.076,234.333 C 321.242,234.181 321.357,234.016 321.421,233.838 C 321.485,233.66 321.517,233.359 321.517,232.934 L 321.517,230.701 C 321.517,230.378 321.566,230.045 321.663,229.702 Z M 320.429,232.219 C 318.986,232.219 318.265,231.875 318.265,231.186 C 318.265,230.98 318.337,230.805 318.482,230.659 C 318.628,230.514 318.847,230.442 319.141,230.442 C 319.566,230.442 319.887,230.576 320.104,230.846 C 320.321,231.115 320.429,231.421 320.429,231.764 L 320.429,232.219 Z" marker-start="none" marker-end="none"/>\r
+    <path d="M 323.99,228.032 L 322.854,228.032 L 322.854,234.649 L 323.922,234.649 L 323.922,233.787 C 324.264,234.43 324.769,234.751 325.435,234.751 C 325.984,234.751 326.421,234.513 326.748,234.036 C 327.074,233.56 327.237,232.951 327.237,232.21 C 327.237,231.508 327.082,230.897 326.77,230.378 C 326.458,229.859 325.993,229.599 325.376,229.599 C 324.74,229.599 324.277,229.864 323.99,230.393 L 323.99,228.032 Z M 323.99,231.73 C 323.99,231.371 324.097,231.073 324.311,230.836 C 324.525,230.599 324.762,230.481 325.024,230.481 C 325.379,230.481 325.64,230.637 325.805,230.948 C 325.97,231.26 326.052,231.656 326.052,232.136 C 326.052,232.639 325.969,233.048 325.802,233.363 C 325.636,233.678 325.388,233.836 325.058,233.836 C 324.761,233.836 324.508,233.707 324.301,233.449 C 324.094,233.191 323.99,232.853 323.99,232.435 L 323.99,231.73 Z" marker-start="none" marker-end="none"/>\r
+    <path d="M 332.35,229.702 L 331.234,229.702 L 331.234,232.939 C 331.234,233.289 331.159,233.534 331.011,233.676 C 330.862,233.819 330.688,233.89 330.489,233.89 C 330.173,233.89 329.906,233.764 329.691,233.512 C 329.475,233.261 329.368,232.846 329.368,232.268 L 329.368,229.702 L 328.251,229.702 L 328.251,236.387 L 329.368,236.387 L 329.368,233.782 C 329.645,234.494 330.132,234.849 330.827,234.849 C 331.843,234.849 332.35,234.267 332.35,233.101 L 332.35,229.702 Z" marker-start="none" marker-end="none"/>\r
+    <path d="M 334.805,235.227 L 333.688,235.227 L 333.688,236.387 L 334.805,236.387 L 334.805,235.227 Z M 334.805,229.702 L 333.688,229.702 L 333.688,234.649 L 334.805,234.649 L 334.805,229.702 Z" marker-start="none" marker-end="none"/>\r
+    <path d="M 340.241,229.702 L 339.125,229.702 L 339.125,232.792 C 339.125,233.119 339.05,233.365 338.899,233.53 C 338.749,233.694 338.568,233.777 338.356,233.777 C 338.065,233.777 337.811,233.65 337.592,233.395 C 337.373,233.14 337.264,232.757 337.264,232.244 L 337.264,229.702 L 336.147,229.702 L 336.147,234.649 L 337.166,234.649 L 337.166,233.503 C 337.522,234.335 338.021,234.751 338.664,234.751 C 339.099,234.751 339.47,234.614 339.779,234.34 C 340.087,234.066 340.241,233.584 340.241,232.895 L 340.241,229.702 Z" marker-start="none" marker-end="none"/>\r
+    <path d="M 346.09,235.594 L 346.09,234.737 L 345.747,234.737 C 345.597,234.737 345.465,234.719 345.353,234.683 C 345.24,234.647 345.13,234.531 345.022,234.335 C 345.414,234.015 345.61,233.659 345.61,233.268 C 345.61,232.83 345.426,232.468 345.059,232.18 C 344.692,231.893 344.206,231.749 343.602,231.749 C 343.34,231.749 343.035,231.792 342.686,231.876 C 342.457,231.772 342.343,231.61 342.343,231.392 C 342.343,231.271 342.398,231.16 342.509,231.059 C 342.62,230.957 342.789,230.907 343.014,230.907 L 344.483,230.907 C 344.986,230.907 345.38,230.777 345.666,230.518 C 345.952,230.258 346.095,229.935 346.095,229.55 C 346.095,229.083 345.878,228.696 345.446,228.389 C 345.013,228.082 344.372,227.929 343.523,227.929 C 341.927,227.929 341.128,228.375 341.128,229.266 C 341.128,229.707 341.368,230.041 341.848,230.27 C 341.541,230.531 341.388,230.804 341.388,231.088 C 341.388,231.519 341.651,231.862 342.176,232.117 C 341.719,232.394 341.491,232.776 341.491,233.263 C 341.491,233.674 341.659,234.025 341.995,234.316 C 342.332,234.606 342.843,234.751 343.528,234.751 C 343.842,234.751 344.16,234.717 344.483,234.649 C 344.634,235.279 345.03,235.594 345.673,235.594 L 346.09,235.594 Z M 343.553,232.41 C 344.16,232.41 344.464,232.696 344.464,233.268 C 344.464,233.486 344.388,233.671 344.236,233.821 C 344.084,233.971 343.863,234.046 343.572,234.046 C 343.278,234.046 343.051,233.968 342.889,233.811 C 342.727,233.654 342.647,233.459 342.647,233.223 C 342.647,232.982 342.727,232.786 342.887,232.636 C 343.047,232.486 343.269,232.41 343.553,232.41 Z M 342.328,229.971 C 342.168,229.824 342.088,229.682 342.088,229.545 C 342.088,229.32 342.222,229.122 342.49,228.95 C 342.758,228.779 343.184,228.693 343.768,228.693 C 344.627,228.693 345.056,228.913 345.056,229.354 C 345.056,229.518 344.981,229.641 344.831,229.724 C 344.681,229.807 344.509,229.849 344.317,229.849 L 343.131,229.849 C 342.906,229.849 342.638,229.89 342.328,229.971 Z" marker-start="none" marker-end="none"/>\r
+   </g>\r
+  </g>\r
+ </g>\r
+</svg>\r
diff --git a/doc/logo-light.svg b/doc/logo-light.svg
new file mode 100644 (file)
index 0000000..8c9ccdb
--- /dev/null
@@ -0,0 +1,40 @@
+<?xml version="1.0" standalone="no"?>\r
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">\r
+<!--Generator: Xara Designer (www.xara.com), SVG filter version: 6.6.0.1-->\r
+<svg fill="none" fill-rule="evenodd" stroke="black" stroke-width="0.501" stroke-linejoin="bevel" stroke-miterlimit="10" font-family="Times New Roman" font-size="16" style="font-variant-ligatures:none" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" version="1.1" overflow="visible" width="82.836pt" height="26.584pt" viewBox="264.191 -305.542 82.836 26.584">\r
+ <defs>\r
+       </defs>\r
+ <g id="Layer 1" transform="scale(1 -1)">\r
+  <g id="Group" fill-rule="nonzero" stroke="none" stroke-width="0.542" fill="#001a67">\r
+   <g id="Group_1">\r
+    <path d="M 277.087,291.054 L 272.152,291.054 L 270.039,296.595 L 268.638,296.595 L 268.638,291.054 L 264.191,291.054 L 264.191,305.542 L 271.759,305.542 C 273.429,305.542 274.725,305.151 275.649,304.369 C 276.572,303.588 277.034,302.556 277.034,301.275 C 277.034,300.44 276.864,299.703 276.525,299.062 C 276.185,298.422 275.498,297.858 274.466,297.369 L 277.087,291.054 Z M 268.638,299.694 L 270.538,299.694 C 271.097,299.694 271.547,299.811 271.886,300.044 C 272.226,300.278 272.396,300.621 272.396,301.074 C 272.396,302.001 271.826,302.464 270.687,302.464 L 268.638,302.464 L 268.638,299.694 Z" marker-start="none" marker-end="none"/>\r
+    <path d="M 292.085,291.054 L 287.15,291.054 L 285.037,296.595 L 283.636,296.595 L 283.636,291.054 L 279.189,291.054 L 279.189,305.542 L 286.757,305.542 C 288.427,305.542 289.723,305.151 290.647,304.369 C 291.57,303.588 292.032,302.556 292.032,301.275 C 292.032,300.44 291.862,299.703 291.523,299.062 C 291.183,298.422 290.496,297.858 289.464,297.369 L 292.085,291.054 Z M 283.636,299.694 L 285.536,299.694 C 286.095,299.694 286.545,299.811 286.884,300.044 C 287.224,300.278 287.394,300.621 287.394,301.074 C 287.394,302.001 286.824,302.464 285.685,302.464 L 283.636,302.464 L 283.636,299.694 Z" marker-start="none" marker-end="none"/>\r
+    <path d="M 294.187,291.054 L 294.187,305.542 L 299.791,305.542 C 302.226,305.542 304.048,304.82 305.258,303.377 C 306.467,301.933 307.072,300.263 307.072,298.367 C 307.072,296.202 306.423,294.442 305.125,293.086 C 303.827,291.731 302.141,291.054 300.067,291.054 L 294.187,291.054 Z M 298.634,294.387 L 299.791,294.387 C 300.527,294.387 301.148,294.744 301.654,295.459 C 302.16,296.173 302.413,297.147 302.413,298.378 C 302.413,299.432 302.188,300.341 301.739,301.106 C 301.29,301.87 300.641,302.252 299.791,302.252 L 298.634,302.252 L 298.634,294.387 Z" marker-start="none" marker-end="none"/>\r
+    <path d="M 315.469,301.849 L 315.469,299.099 L 313.314,299.099 L 313.314,295.119 C 313.314,294.574 313.417,294.251 313.622,294.148 C 313.827,294.045 314.04,293.994 314.259,293.994 C 314.599,293.994 315.002,294.054 315.469,294.175 L 315.469,291.16 C 314.634,290.997 313.813,290.916 313.007,290.916 C 311.705,290.916 310.748,291.195 310.136,291.754 C 309.523,292.313 309.218,293.205 309.218,294.429 L 309.228,295.692 L 309.228,299.099 L 307.615,299.099 L 307.615,301.849 L 309.228,301.849 L 309.292,305.362 L 313.314,305.426 L 313.314,301.849 L 315.469,301.849 Z" marker-start="none" marker-end="none"/>\r
+    <path d="M 322.157,290.831 C 320.367,290.831 318.944,291.389 317.89,292.503 C 316.835,293.618 316.308,294.925 316.308,296.425 C 316.308,298.038 316.858,299.383 317.959,300.458 C 319.059,301.534 320.49,302.071 322.252,302.071 C 324.028,302.071 325.456,301.541 326.535,300.479 C 327.614,299.418 328.154,298.088 328.153,296.488 C 328.154,294.875 327.607,293.529 326.514,292.45 C 325.42,291.371 323.968,290.831 322.157,290.831 Z M 322.22,293.4 C 322.878,293.4 323.28,293.741 323.425,294.424 C 323.57,295.107 323.643,295.82 323.643,296.563 C 323.643,297.575 323.54,298.303 323.335,298.749 C 323.129,299.195 322.762,299.418 322.231,299.418 C 321.743,299.418 321.385,299.188 321.159,298.728 C 320.932,298.268 320.819,297.511 320.819,296.457 C 320.819,295.218 320.936,294.399 321.17,293.999 C 321.403,293.6 321.753,293.4 322.22,293.4 Z" marker-start="none" marker-end="none"/>\r
+    <path d="M 335.075,290.831 C 333.285,290.831 331.862,291.389 330.808,292.503 C 329.753,293.618 329.226,294.925 329.226,296.425 C 329.226,298.038 329.776,299.383 330.877,300.458 C 331.977,301.534 333.408,302.071 335.17,302.071 C 336.946,302.071 338.374,301.541 339.453,300.479 C 340.532,299.418 341.072,298.088 341.071,296.488 C 341.072,294.875 340.525,293.529 339.432,292.45 C 338.338,291.371 336.886,290.831 335.075,290.831 Z M 335.138,293.4 C 335.796,293.4 336.198,293.741 336.343,294.424 C 336.488,295.107 336.561,295.82 336.561,296.563 C 336.561,297.575 336.458,298.303 336.253,298.749 C 336.047,299.195 335.68,299.418 335.149,299.418 C 334.661,299.418 334.303,299.188 334.077,298.728 C 333.85,298.268 333.737,297.511 333.737,296.457 C 333.737,295.218 333.854,294.399 334.088,293.999 C 334.321,293.6 334.671,293.4 335.138,293.4 Z" marker-start="none" marker-end="none"/>\r
+    <path d="M 346.889,305.542 L 346.889,291.054 L 342.717,291.054 L 342.717,305.542 L 346.889,305.542 Z" marker-start="none" marker-end="none"/>\r
+   </g>\r
+  </g>\r
+  <g id="Group_2" fill-rule="nonzero" stroke="none" stroke-width="0.251" fill="#000000">\r
+   <g id="Group_3">\r
+    <path d="M 265.948,280.766 L 264.809,280.766 L 264.809,287.584 L 265.948,287.584 L 265.948,280.766 Z" marker-start="none" marker-end="none"/>\r
+    <path d="M 269.289,280.661 C 268.543,280.661 267.974,280.929 267.581,281.465 C 267.188,282.001 266.992,282.616 266.992,283.308 C 266.992,284.054 267.209,284.675 267.643,285.171 C 268.078,285.668 268.652,285.916 269.364,285.916 C 270.04,285.916 270.595,285.674 271.03,285.191 C 271.464,284.709 271.682,284.081 271.682,283.308 C 271.682,282.513 271.456,281.872 271.005,281.388 C 270.554,280.903 269.982,280.661 269.289,280.661 Z M 269.329,281.6 C 270.095,281.6 270.478,282.171 270.478,283.313 C 270.478,283.83 270.386,284.237 270.203,284.535 C 270.02,284.833 269.739,284.982 269.359,284.982 C 268.966,284.982 268.675,284.828 268.485,284.52 C 268.295,284.212 268.2,283.803 268.2,283.293 C 268.2,282.744 268.301,282.324 268.503,282.035 C 268.704,281.745 268.979,281.6 269.329,281.6 Z" marker-start="none" marker-end="none"/>\r
+    <path d="M 277.325,286.775 L 277.325,285.901 L 276.976,285.901 C 276.823,285.901 276.689,285.882 276.574,285.846 C 276.459,285.809 276.347,285.691 276.237,285.491 C 276.636,285.165 276.836,284.802 276.836,284.402 C 276.836,283.956 276.649,283.586 276.274,283.293 C 275.9,283 275.404,282.854 274.788,282.854 C 274.522,282.854 274.21,282.897 273.854,282.984 C 273.621,282.877 273.505,282.712 273.505,282.489 C 273.505,282.366 273.561,282.253 273.674,282.15 C 273.788,282.046 273.959,281.995 274.189,281.995 L 275.687,281.995 C 276.2,281.995 276.602,281.862 276.893,281.598 C 277.185,281.333 277.33,281.004 277.33,280.611 C 277.33,280.135 277.11,279.74 276.669,279.427 C 276.227,279.114 275.574,278.958 274.708,278.958 C 273.08,278.958 272.266,279.412 272.266,280.321 C 272.266,280.771 272.511,281.112 273,281.345 C 272.687,281.612 272.53,281.89 272.53,282.18 C 272.53,282.619 272.799,282.969 273.335,283.228 C 272.868,283.511 272.635,283.901 272.635,284.397 C 272.635,284.817 272.807,285.175 273.15,285.471 C 273.493,285.767 274.014,285.916 274.713,285.916 C 275.033,285.916 275.358,285.881 275.687,285.811 C 275.841,286.453 276.245,286.775 276.901,286.775 L 277.325,286.775 Z M 274.738,283.528 C 275.358,283.528 275.667,283.819 275.667,284.402 C 275.667,284.625 275.59,284.813 275.435,284.967 C 275.28,285.12 275.055,285.196 274.758,285.196 C 274.459,285.196 274.226,285.116 274.061,284.957 C 273.896,284.797 273.814,284.597 273.814,284.357 C 273.814,284.111 273.896,283.911 274.059,283.758 C 274.222,283.605 274.448,283.528 274.738,283.528 Z M 273.489,281.041 C 273.326,280.891 273.245,280.746 273.245,280.606 C 273.245,280.376 273.381,280.174 273.654,279.999 C 273.927,279.824 274.362,279.737 274.958,279.737 C 275.834,279.737 276.272,279.962 276.272,280.411 C 276.272,280.578 276.195,280.704 276.042,280.788 C 275.889,280.873 275.714,280.916 275.517,280.916 L 274.309,280.916 C 274.079,280.916 273.806,280.958 273.489,281.041 Z" marker-start="none" marker-end="none"/>\r
+    <path d="M 282.624,286.775 L 282.624,285.901 L 282.275,285.901 C 282.122,285.901 281.988,285.882 281.873,285.846 C 281.758,285.809 281.646,285.691 281.536,285.491 C 281.935,285.165 282.135,284.802 282.135,284.402 C 282.135,283.956 281.948,283.586 281.573,283.293 C 281.199,283 280.703,282.854 280.087,282.854 C 279.821,282.854 279.509,282.897 279.153,282.984 C 278.92,282.877 278.804,282.712 278.804,282.489 C 278.804,282.366 278.86,282.253 278.973,282.15 C 279.087,282.046 279.258,281.995 279.488,281.995 L 280.986,281.995 C 281.499,281.995 281.901,281.862 282.192,281.598 C 282.484,281.333 282.629,281.004 282.629,280.611 C 282.629,280.135 282.409,279.74 281.968,279.427 C 281.526,279.114 280.873,278.958 280.007,278.958 C 278.379,278.958 277.565,279.412 277.565,280.321 C 277.565,280.771 277.81,281.112 278.299,281.345 C 277.986,281.612 277.829,281.89 277.829,282.18 C 277.829,282.619 278.098,282.969 278.634,283.228 C 278.167,283.511 277.934,283.901 277.934,284.397 C 277.934,284.817 278.106,285.175 278.449,285.471 C 278.792,285.767 279.313,285.916 280.012,285.916 C 280.332,285.916 280.657,285.881 280.986,285.811 C 281.14,286.453 281.544,286.775 282.2,286.775 L 282.624,286.775 Z M 280.037,283.528 C 280.657,283.528 280.966,283.819 280.966,284.402 C 280.966,284.625 280.889,284.813 280.734,284.967 C 280.579,285.12 280.354,285.196 280.057,285.196 C 279.758,285.196 279.525,285.116 279.36,284.957 C 279.195,284.797 279.113,284.597 279.113,284.357 C 279.113,284.111 279.195,283.911 279.358,283.758 C 279.521,283.605 279.747,283.528 280.037,283.528 Z M 278.788,281.041 C 278.625,280.891 278.544,280.746 278.544,280.606 C 278.544,280.376 278.68,280.174 278.953,279.999 C 279.226,279.824 279.661,279.737 280.257,279.737 C 281.133,279.737 281.571,279.962 281.571,280.411 C 281.571,280.578 281.494,280.704 281.341,280.788 C 281.188,280.873 281.013,280.916 280.816,280.916 L 279.608,280.916 C 279.378,280.916 279.105,280.958 278.788,281.041 Z" marker-start="none" marker-end="none"/>\r
+    <path d="M 284.457,286.4 L 283.318,286.4 L 283.318,287.584 L 284.457,287.584 L 284.457,286.4 Z M 284.457,280.766 L 283.318,280.766 L 283.318,285.811 L 284.457,285.811 L 284.457,280.766 Z" marker-start="none" marker-end="none"/>\r
+    <path d="M 290.001,280.766 L 288.862,280.766 L 288.862,283.918 C 288.862,284.251 288.785,284.501 288.632,284.669 C 288.479,284.838 288.294,284.922 288.078,284.922 C 287.782,284.922 287.522,284.792 287.299,284.532 C 287.076,284.272 286.964,283.881 286.964,283.358 L 286.964,280.766 L 285.825,280.766 L 285.825,285.811 L 286.864,285.811 L 286.864,284.642 C 287.227,285.491 287.737,285.916 288.393,285.916 C 288.836,285.916 289.214,285.776 289.529,285.496 C 289.844,285.216 290.001,284.725 290.001,284.023 L 290.001,280.766 Z" marker-start="none" marker-end="none"/>\r
+    <path d="M 295.964,286.775 L 295.964,285.901 L 295.615,285.901 C 295.462,285.901 295.328,285.882 295.213,285.846 C 295.098,285.809 294.986,285.691 294.876,285.491 C 295.275,285.165 295.475,284.802 295.475,284.402 C 295.475,283.956 295.288,283.586 294.913,283.293 C 294.539,283 294.043,282.854 293.427,282.854 C 293.161,282.854 292.849,282.897 292.493,282.984 C 292.26,282.877 292.144,282.712 292.144,282.489 C 292.144,282.366 292.2,282.253 292.313,282.15 C 292.427,282.046 292.598,281.995 292.828,281.995 L 294.326,281.995 C 294.839,281.995 295.241,281.862 295.532,281.598 C 295.824,281.333 295.969,281.004 295.969,280.611 C 295.969,280.135 295.749,279.74 295.308,279.427 C 294.866,279.114 294.213,278.958 293.347,278.958 C 291.719,278.958 290.905,279.412 290.905,280.321 C 290.905,280.771 291.15,281.112 291.639,281.345 C 291.326,281.612 291.169,281.89 291.169,282.18 C 291.169,282.619 291.438,282.969 291.974,283.228 C 291.507,283.511 291.274,283.901 291.274,284.397 C 291.274,284.817 291.446,285.175 291.789,285.471 C 292.132,285.767 292.653,285.916 293.352,285.916 C 293.672,285.916 293.997,285.881 294.326,285.811 C 294.48,286.453 294.884,286.775 295.54,286.775 L 295.964,286.775 Z M 293.377,283.528 C 293.997,283.528 294.306,283.819 294.306,284.402 C 294.306,284.625 294.229,284.813 294.074,284.967 C 293.919,285.12 293.694,285.196 293.397,285.196 C 293.098,285.196 292.865,285.116 292.7,284.957 C 292.535,284.797 292.453,284.597 292.453,284.357 C 292.453,284.111 292.535,283.911 292.698,283.758 C 292.861,283.605 293.087,283.528 293.377,283.528 Z M 292.128,281.041 C 291.965,280.891 291.884,280.746 291.884,280.606 C 291.884,280.376 292.02,280.174 292.293,279.999 C 292.566,279.824 293.001,279.737 293.597,279.737 C 294.473,279.737 294.911,279.962 294.911,280.411 C 294.911,280.578 294.834,280.704 294.681,280.788 C 294.528,280.873 294.353,280.916 294.156,280.916 L 292.948,280.916 C 292.718,280.916 292.445,280.958 292.128,281.041 Z" marker-start="none" marker-end="none"/>\r
+    <path d="M 304.645,284.902 L 305.669,284.722 C 305.522,283.75 305.118,282.89 304.455,282.145 C 304.688,281.892 304.86,281.738 304.972,281.683 C 305.083,281.628 305.216,281.6 305.369,281.6 C 305.439,281.6 305.539,281.609 305.669,281.625 L 305.669,280.671 L 305.194,280.661 C 304.884,280.661 304.631,280.706 304.432,280.796 C 304.234,280.886 303.979,281.084 303.666,281.39 C 302.983,280.904 302.241,280.661 301.438,280.661 C 300.676,280.661 300.055,280.867 299.577,281.278 C 299.099,281.689 298.861,282.196 298.861,282.799 C 298.861,283.182 298.972,283.546 299.195,283.893 C 299.418,284.239 299.898,284.575 300.634,284.902 C 300.238,285.368 300.039,285.799 300.039,286.195 C 300.039,286.638 300.206,286.998 300.539,287.274 C 300.872,287.551 301.298,287.689 301.818,287.689 C 302.35,287.689 302.787,287.556 303.126,287.289 C 303.466,287.023 303.636,286.66 303.636,286.2 C 303.636,285.877 303.521,285.566 303.291,285.266 C 303.061,284.967 302.733,284.73 302.307,284.557 L 303.786,282.869 C 304.252,283.468 304.538,284.146 304.645,284.902 Z M 301.748,285.301 C 302.327,285.544 302.617,285.844 302.617,286.2 C 302.617,286.393 302.547,286.545 302.407,286.655 C 302.267,286.765 302.102,286.82 301.913,286.82 C 301.719,286.82 301.55,286.764 301.405,286.652 C 301.261,286.541 301.188,286.395 301.188,286.215 C 301.188,285.922 301.375,285.618 301.748,285.301 Z M 301.228,284.152 C 300.549,283.846 300.209,283.42 300.209,282.874 C 300.209,282.508 300.342,282.214 300.606,281.992 C 300.871,281.771 301.205,281.66 301.608,281.66 C 302.104,281.66 302.572,281.821 303.011,282.145 L 301.228,284.152 Z" marker-start="none" marker-end="none"/>\r
+    <path d="M 313.709,286.775 L 313.709,285.901 L 313.36,285.901 C 313.207,285.901 313.073,285.882 312.958,285.846 C 312.843,285.809 312.731,285.691 312.621,285.491 C 313.02,285.165 313.22,284.802 313.22,284.402 C 313.22,283.956 313.033,283.586 312.658,283.293 C 312.284,283 311.788,282.854 311.172,282.854 C 310.906,282.854 310.594,282.897 310.238,282.984 C 310.005,282.877 309.889,282.712 309.889,282.489 C 309.889,282.366 309.945,282.253 310.058,282.15 C 310.172,282.046 310.343,281.995 310.573,281.995 L 312.071,281.995 C 312.584,281.995 312.986,281.862 313.277,281.598 C 313.569,281.333 313.714,281.004 313.714,280.611 C 313.714,280.135 313.494,279.74 313.053,279.427 C 312.611,279.114 311.958,278.958 311.092,278.958 C 309.464,278.958 308.65,279.412 308.65,280.321 C 308.65,280.771 308.895,281.112 309.384,281.345 C 309.071,281.612 308.914,281.89 308.914,282.18 C 308.914,282.619 309.183,282.969 309.719,283.228 C 309.252,283.511 309.019,283.901 309.019,284.397 C 309.019,284.817 309.191,285.175 309.534,285.471 C 309.877,285.767 310.398,285.916 311.097,285.916 C 311.417,285.916 311.742,285.881 312.071,285.811 C 312.225,286.453 312.629,286.775 313.285,286.775 L 313.709,286.775 Z M 311.122,283.528 C 311.742,283.528 312.051,283.819 312.051,284.402 C 312.051,284.625 311.974,284.813 311.819,284.967 C 311.664,285.12 311.439,285.196 311.142,285.196 C 310.843,285.196 310.61,285.116 310.445,284.957 C 310.28,284.797 310.198,284.597 310.198,284.357 C 310.198,284.111 310.28,283.911 310.443,283.758 C 310.606,283.605 310.832,283.528 311.122,283.528 Z M 309.873,281.041 C 309.71,280.891 309.629,280.746 309.629,280.606 C 309.629,280.376 309.765,280.174 310.038,279.999 C 310.311,279.824 310.746,279.737 311.342,279.737 C 312.218,279.737 312.656,279.962 312.656,280.411 C 312.656,280.578 312.579,280.704 312.426,280.788 C 312.273,280.873 312.098,280.916 311.901,280.916 L 310.693,280.916 C 310.463,280.916 310.19,280.958 309.873,281.041 Z" marker-start="none" marker-end="none"/>\r
+    <path d="M 315.547,280.766 L 314.408,280.766 L 314.408,285.811 L 315.437,285.811 L 315.437,284.607 C 315.584,285.077 315.785,285.42 316.042,285.636 C 316.298,285.852 316.561,285.961 316.831,285.961 C 316.867,285.961 316.917,285.959 316.981,285.956 L 316.981,284.732 C 316.401,284.732 316.017,284.547 315.829,284.177 C 315.641,283.808 315.547,283.45 315.547,283.104 L 315.547,280.766 Z" marker-start="none" marker-end="none"/>\r
+    <path d="M 322.115,280.766 L 321.031,280.766 C 320.934,281.072 320.876,281.412 320.856,281.785 C 320.553,281.036 319.984,280.661 319.148,280.661 C 318.645,280.661 318.241,280.808 317.937,281.103 C 317.632,281.398 317.48,281.768 317.48,282.214 C 317.48,283.373 318.497,283.953 320.531,283.953 C 320.611,283.953 320.72,283.951 320.856,283.948 L 320.856,284.327 C 320.856,284.85 320.5,285.111 319.787,285.111 C 319.095,285.111 318.702,284.85 318.608,284.327 L 317.639,284.472 C 317.693,284.892 317.909,285.237 318.289,285.509 C 318.668,285.78 319.218,285.916 319.937,285.916 C 320.327,285.916 320.645,285.883 320.891,285.818 C 321.137,285.753 321.346,285.643 321.515,285.489 C 321.685,285.334 321.803,285.165 321.868,284.984 C 321.932,284.803 321.965,284.495 321.965,284.063 L 321.965,281.785 C 321.965,281.455 322.015,281.116 322.115,280.766 Z M 320.856,283.333 C 319.384,283.333 318.648,282.982 318.648,282.279 C 318.648,282.07 318.722,281.891 318.871,281.742 C 319.019,281.594 319.243,281.52 319.542,281.52 C 319.975,281.52 320.303,281.658 320.524,281.932 C 320.745,282.207 320.856,282.519 320.856,282.869 L 320.856,283.333 Z" marker-start="none" marker-end="none"/>\r
+    <path d="M 324.487,279.063 L 323.328,279.063 L 323.328,285.811 L 324.417,285.811 L 324.417,284.932 C 324.767,285.588 325.281,285.916 325.961,285.916 C 326.52,285.916 326.966,285.673 327.299,285.186 C 327.632,284.7 327.799,284.079 327.799,283.323 C 327.799,282.607 327.64,281.985 327.322,281.455 C 327.004,280.926 326.53,280.661 325.901,280.661 C 325.251,280.661 324.78,280.931 324.487,281.47 L 324.487,279.063 Z M 324.487,282.834 C 324.487,282.468 324.596,282.164 324.814,281.922 C 325.032,281.681 325.275,281.56 325.541,281.56 C 325.904,281.56 326.169,281.719 326.338,282.037 C 326.506,282.355 326.59,282.759 326.59,283.248 C 326.59,283.761 326.505,284.178 326.335,284.5 C 326.165,284.821 325.912,284.982 325.576,284.982 C 325.273,284.982 325.016,284.85 324.804,284.587 C 324.593,284.324 324.487,283.979 324.487,283.553 L 324.487,282.834 Z" marker-start="none" marker-end="none"/>\r
+    <path d="M 333.013,280.766 L 331.874,280.766 L 331.874,284.068 C 331.874,284.424 331.798,284.674 331.647,284.819 C 331.495,284.964 331.318,285.037 331.115,285.037 C 330.792,285.037 330.521,284.908 330.301,284.652 C 330.081,284.396 329.971,283.973 329.971,283.383 L 329.971,280.766 L 328.832,280.766 L 328.832,287.584 L 329.971,287.584 L 329.971,284.927 C 330.254,285.653 330.75,286.016 331.46,286.016 C 332.495,286.016 333.013,285.421 333.013,284.232 L 333.013,280.766 Z" marker-start="none" marker-end="none"/>\r
+    <path d="M 335.515,286.4 L 334.376,286.4 L 334.376,287.584 L 335.515,287.584 L 335.515,286.4 Z M 335.515,280.766 L 334.376,280.766 L 334.376,285.811 L 335.515,285.811 L 335.515,280.766 Z" marker-start="none" marker-end="none"/>\r
+    <path d="M 341.059,280.766 L 339.92,280.766 L 339.92,283.918 C 339.92,284.251 339.843,284.501 339.69,284.669 C 339.537,284.838 339.352,284.922 339.136,284.922 C 338.84,284.922 338.58,284.792 338.357,284.532 C 338.134,284.272 338.022,283.881 338.022,283.358 L 338.022,280.766 L 336.883,280.766 L 336.883,285.811 L 337.922,285.811 L 337.922,284.642 C 338.285,285.491 338.795,285.916 339.451,285.916 C 339.894,285.916 340.272,285.776 340.587,285.496 C 340.902,285.216 341.059,284.725 341.059,284.023 L 341.059,280.766 Z" marker-start="none" marker-end="none"/>\r
+    <path d="M 347.022,286.775 L 347.022,285.901 L 346.673,285.901 C 346.52,285.901 346.386,285.882 346.271,285.846 C 346.156,285.809 346.044,285.691 345.934,285.491 C 346.333,285.165 346.533,284.802 346.533,284.402 C 346.533,283.956 346.346,283.586 345.971,283.293 C 345.597,283 345.101,282.854 344.485,282.854 C 344.219,282.854 343.907,282.897 343.551,282.984 C 343.318,282.877 343.202,282.712 343.202,282.489 C 343.202,282.366 343.258,282.253 343.371,282.15 C 343.485,282.046 343.656,281.995 343.886,281.995 L 345.384,281.995 C 345.897,281.995 346.299,281.862 346.59,281.598 C 346.882,281.333 347.027,281.004 347.027,280.611 C 347.027,280.135 346.807,279.74 346.366,279.427 C 345.924,279.114 345.271,278.958 344.405,278.958 C 342.777,278.958 341.963,279.412 341.963,280.321 C 341.963,280.771 342.208,281.112 342.697,281.345 C 342.384,281.612 342.227,281.89 342.227,282.18 C 342.227,282.619 342.496,282.969 343.032,283.228 C 342.565,283.511 342.332,283.901 342.332,284.397 C 342.332,284.817 342.504,285.175 342.847,285.471 C 343.19,285.767 343.711,285.916 344.41,285.916 C 344.73,285.916 345.055,285.881 345.384,285.811 C 345.538,286.453 345.942,286.775 346.598,286.775 L 347.022,286.775 Z M 344.435,283.528 C 345.055,283.528 345.364,283.819 345.364,284.402 C 345.364,284.625 345.287,284.813 345.132,284.967 C 344.977,285.12 344.752,285.196 344.455,285.196 C 344.156,285.196 343.923,285.116 343.758,284.957 C 343.593,284.797 343.511,284.597 343.511,284.357 C 343.511,284.111 343.593,283.911 343.756,283.758 C 343.919,283.605 344.145,283.528 344.435,283.528 Z M 343.186,281.041 C 343.023,280.891 342.942,280.746 342.942,280.606 C 342.942,280.376 343.078,280.174 343.351,279.999 C 343.624,279.824 344.059,279.737 344.655,279.737 C 345.531,279.737 345.969,279.962 345.969,280.411 C 345.969,280.578 345.892,280.704 345.739,280.788 C 345.586,280.873 345.411,280.916 345.214,280.916 L 344.006,280.916 C 343.776,280.916 343.503,280.958 343.186,281.041 Z" marker-start="none" marker-end="none"/>\r
+   </g>\r
+  </g>\r
+ </g>\r
+</svg>\r