Document barectf 3
authorPhilippe Proulx <eeppeliteloop@gmail.com>
Thu, 24 Sep 2020 00:01:30 +0000 (20:01 -0400)
committerPhilippe Proulx <eeppeliteloop@gmail.com>
Thu, 24 Sep 2020 03:04:40 +0000 (23:04 -0400)
This patch adds the complete documentation of barectf 3 (upcoming major
release of the project).

The new `docs` directory is an Antora [1] documentation component
version. You can include it in an Antora site.

All the pages are written in AsciiDoc (Asciidoctor version).

Some contents were copied (and adapted) from the barectf wiki [2], but
most of the pages feature brand new text. The logo and diagrams are also
refreshed.

I'm removing the `barectf` CLI tool's manual page (`doc/man`) as it's
now documented in `docs/modules/cli/pages/usage.adoc`. Having the CLI
documented within the whole project's documentation makes it possible to
have critical links to and from other parts of it. This is to the
advantage of the reader.

[1]: https://antora.org/
[2]: https://github.com/efficios/barectf/wiki

56 files changed:
.gitignore
doc/man/.gitignore [deleted file]
doc/man/Makefile [deleted file]
doc/man/asciidoc.conf [deleted file]
doc/man/barectf.1 [deleted file]
doc/man/barectf.1.txt [deleted file]
doc/man/xsl/manpage-bold-literal.xsl [deleted file]
doc/man/xsl/manpage-callouts.xsl [deleted file]
doc/man/xsl/manpage-links.xsl [deleted file]
doc/man/xsl/manpage.xsl [deleted file]
docs/antora.yml [new file with mode: 0644]
docs/modules/ROOT/images/barectf-logo.svg [new file with mode: 0644]
docs/modules/ROOT/images/getting-started-trace-compass.png [new file with mode: 0644]
docs/modules/ROOT/nav.adoc [new file with mode: 0644]
docs/modules/ROOT/pages/get-help.adoc [new file with mode: 0644]
docs/modules/ROOT/pages/getting-started.adoc [new file with mode: 0644]
docs/modules/ROOT/pages/index.adoc [new file with mode: 0644]
docs/modules/ROOT/pages/install.adoc [new file with mode: 0644]
docs/modules/ROOT/pages/whats-new.adoc [new file with mode: 0644]
docs/modules/ROOT/partials/def-prefix-note.adoc [new file with mode: 0644]
docs/modules/cli/pages/index.adoc [new file with mode: 0644]
docs/modules/cli/pages/usage.adoc [new file with mode: 0644]
docs/modules/how-barectf-works/images/barectf-data-flow.svg [new file with mode: 0644]
docs/modules/how-barectf-works/images/ctf-data-stream.svg [new file with mode: 0644]
docs/modules/how-barectf-works/images/ctf-event-record.svg [new file with mode: 0644]
docs/modules/how-barectf-works/images/ctf-overview.svg [new file with mode: 0644]
docs/modules/how-barectf-works/images/ctf-packet.svg [new file with mode: 0644]
docs/modules/how-barectf-works/images/ctf-trace.svg [new file with mode: 0644]
docs/modules/how-barectf-works/pages/ctf-primer.adoc [new file with mode: 0644]
docs/modules/how-barectf-works/pages/index.adoc [new file with mode: 0644]
docs/modules/platform/pages/api.adoc [new file with mode: 0644]
docs/modules/platform/pages/example.adoc [new file with mode: 0644]
docs/modules/platform/pages/index.adoc [new file with mode: 0644]
docs/modules/tracing-funcs/pages/index.adoc [new file with mode: 0644]
docs/modules/yaml/pages/cfg-obj.adoc [new file with mode: 0644]
docs/modules/yaml/pages/clk-type-obj.adoc [new file with mode: 0644]
docs/modules/yaml/pages/common-values.adoc [new file with mode: 0644]
docs/modules/yaml/pages/dst-obj.adoc [new file with mode: 0644]
docs/modules/yaml/pages/dyn-array-ft-obj.adoc [new file with mode: 0644]
docs/modules/yaml/pages/enum-ft-obj.adoc [new file with mode: 0644]
docs/modules/yaml/pages/ert-obj.adoc [new file with mode: 0644]
docs/modules/yaml/pages/ft-obj.adoc [new file with mode: 0644]
docs/modules/yaml/pages/include.adoc [new file with mode: 0644]
docs/modules/yaml/pages/index.adoc [new file with mode: 0644]
docs/modules/yaml/pages/int-ft-obj.adoc [new file with mode: 0644]
docs/modules/yaml/pages/real-ft-obj.adoc [new file with mode: 0644]
docs/modules/yaml/pages/static-array-ft-obj.adoc [new file with mode: 0644]
docs/modules/yaml/pages/str-ft-obj.adoc [new file with mode: 0644]
docs/modules/yaml/pages/struct-ft-obj.adoc [new file with mode: 0644]
docs/modules/yaml/pages/trace-obj.adoc [new file with mode: 0644]
docs/modules/yaml/pages/trace-type-obj.adoc [new file with mode: 0644]
docs/modules/yaml/pages/yaml-primer.adoc [new file with mode: 0644]
docs/modules/yaml/partials/ft-obj-inherit-prop.adoc [new file with mode: 0644]
docs/modules/yaml/partials/int-ft-obj-base-props.adoc [new file with mode: 0644]
docs/modules/yaml/partials/int-ft-obj-c-types-table.adoc [new file with mode: 0644]
docs/modules/yaml/partials/patching-rules-table.adoc [new file with mode: 0644]

index fde739b0222cdd7e568786a271bcdd68551c6875..29f7ba168d326be4b29155d0dbffca7148b0e999 100644 (file)
@@ -50,9 +50,6 @@ coverage.xml
 # Django stuff:
 *.log
 
-# Sphinx documentation
-docs/_build/
-
 # PyBuilder
 target/
 
diff --git a/doc/man/.gitignore b/doc/man/.gitignore
deleted file mode 100644 (file)
index def272c..0000000
+++ /dev/null
@@ -1 +0,0 @@
-barectf.1.xml
diff --git a/doc/man/Makefile b/doc/man/Makefile
deleted file mode 100644 (file)
index 4c79ad0..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-# The MIT License (MIT)
-#
-# Copyright (c) 2016 Philippe Proulx <pproulx@efficios.com>
-#
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to deal
-# in the Software without restriction, including without limitation the rights
-# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-# copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-# THE SOFTWARE.
-
-# source
-SRC = barectf
-
-# config
-ASCIIDOC_CONF = asciidoc.conf
-XSL_FILES = \
-       manpage.xsl \
-       manpage-callouts.xsl \
-       manpage-bold-literal.xsl \
-       manpage-links.xsl
-XSL_SRC_FILES = $(addprefix xsl/,$(XSL_FILES))
-
-# tools
-ASCIIDOC ?= asciidoc
-XMLTO ?= xmlto
-ADOC = $(ASCIIDOC) -f $(ASCIIDOC_CONF) -d manpage \
-       -a barectf_version=$(shell cd ../../barectf; python3 -c 'import __init__; print(__init__.__version__)')
-ADOC_DOCBOOK = $(ADOC) -b docbook
-XTO = $(XMLTO) -m $(firstword $(XSL_SRC_FILES)) man
-
-# recipes
-.PHONY: all
-
-all: $(SRC).1
-
-$(SRC).1.xml: $(SRC).1.txt $(ASCIIDOC_CONF)
-       $(ADOC_DOCBOOK) -o $@ $<
-
-$(SRC).1: $(SRC).1.xml $(XSL_SRC_FILES)
-       $(XTO) $<
-
-.PHONY: clean
-
-clean:
-       rm -f $(SRC).1 $(SRC).1.xml
diff --git a/doc/man/asciidoc.conf b/doc/man/asciidoc.conf
deleted file mode 100644 (file)
index 8960c96..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-[macros]
-(?su)[\\]?(?P<name>option):(?P<opt>-?-?[a-zA-Z0-9-]*)=
-(?su)[\\]?(?P<name>nloption):(?P<opt>-?-?[a-zA-Z0-9-]*)=
-:not:=not
-
-ifdef::doctype-manpage[]
-ifdef::backend-docbook[]
-[option-inlinemacro]
-<literal>{opt}</literal>
-
-[nloption-inlinemacro]
-<literal>{opt}</literal>
-
-[not-inlinemacro]
-NOT
-
-[header]
-template::[header-declarations]
-<refentry>
-  <refmeta>
-    <refentrytitle>{mantitle}</refentrytitle>
-    <manvolnum>{manvolnum}</manvolnum>
-    <refmiscinfo class="source">barectf</refmiscinfo>
-    <refmiscinfo class="version">{barectf_version}</refmiscinfo>
-    <refmiscinfo class="manual">barectf manual</refmiscinfo>
-  </refmeta>
-  <refnamediv>
-    <refname>{manname}</refname>
-    <refpurpose>{manpurpose}</refpurpose>
-  </refnamediv>
-endif::backend-docbook[]
-endif::doctype-manpage[]
diff --git a/doc/man/barectf.1 b/doc/man/barectf.1
deleted file mode 100644 (file)
index 758c37d..0000000
+++ /dev/null
@@ -1,185 +0,0 @@
-'\" t
-.\"     Title: barectf
-.\"    Author: [see the "AUTHORS" section]
-.\" Generator: DocBook XSL Stylesheets vsnapshot <http://docbook.sf.net/>
-.\"      Date: 05/14/2020
-.\"    Manual: barectf manual
-.\"    Source: barectf 2.3.1
-.\"  Language: English
-.\"
-.TH "BARECTF" "1" "05/14/2020" "barectf 2\&.3\&.1" "barectf manual"
-.\" -----------------------------------------------------------------
-.\" * Define some portability stuff
-.\" -----------------------------------------------------------------
-.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-.\" http://bugs.debian.org/507673
-.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
-.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-.ie \n(.g .ds Aq \(aq
-.el       .ds Aq '
-.\" -----------------------------------------------------------------
-.\" * set default formatting
-.\" -----------------------------------------------------------------
-.\" disable hyphenation
-.nh
-.\" disable justification (adjust text to left margin only)
-.ad l
-.\" -----------------------------------------------------------------
-.\" * MAIN CONTENT STARTS HERE *
-.\" -----------------------------------------------------------------
-.SH "NAME"
-barectf \- Generate C99 code that can write native CTF packets
-.SH "SYNOPSIS"
-.sp
-.nf
-\fBbarectf\fR [\fB--prefix\fR=\fIPREFIX\fR] [\fB--dump-config\fR]
-        [\fB--code-dir\fR=\fIPATH\fR] [\fB--headers-dir\fR=\fIPATH\fR] [\fB--metadata-dir\fR=\fIPATH\fR]
-        [\fB-I\fR \fIPATH\fR]\&... [\fB--ignore-include-not-found\fR] \fICONFIG\fR
-.fi
-.SH "DESCRIPTION"
-.sp
-The \fBbarectf\fR command generates C99 code, that itself can write Common Trace Format <http://diamon.org/ctf> packets natively, out of a YAML configuration input file \fICONFIG\fR\&. The full documentation of barectf is available on the project\(cqs website <http://barectf.org>\&.
-.sp
-A prefix is used to scope the generated file names, as well as the generated function names, macro names, structure names, and so on\&. By default, this prefix is \fBbarectf_\fR\&. It can be overridden by the configuration file, and ultimately by the \fB--prefix\fR option\&.
-.sp
-By default, all generated C and CTF metadata files are written to the current working directory\&. The \fB--code-dir\fR, \fB--headers-dir\fR, and \fB--metadata-dir\fR options are used to control where the generated files should go\&.
-.sp
-You can add directories to be searched into for inclusion files, before the default search directories, by using the \fB-I\fR option one or more times\&.
-.sp
-By default, if an inclusion file is not found while processing the configuration file \fICONFIG\fR, an error is emitted\&. You can instruct \fBbarectf\fR to continue silently instead by providing the \fB--ignore-include-not-found\fR option\&.
-.sp
-To view the effective YAML configuration file used for generating the C and CTF metadata files, after having processed all inclusion files, use the \fB--dump-config\fR option\&.
-.SH "OPTIONS"
-.PP
-\fB-c\fR \fIPATH\fR, \fB--code-dir\fR=\fIPATH\fR
-.RS 4
-Write C source files to directory
-\fIPATH\fR
-instead of the current working directory\&.
-.RE
-.PP
-\fB--dump-config\fR
-.RS 4
-Dump the effective YAML configuration file, after all inclusions are processed, to the standard output\&.
-.RE
-.PP
-\fB-H\fR \fIPATH\fR, \fB--headers-dir\fR=\fIPATH\fR
-.RS 4
-Write C header files to directory
-\fIPATH\fR
-instead of the current working directory\&.
-.RE
-.PP
-\fB--ignore-include-not-found\fR
-.RS 4
-Do not consider as an error inclusion files that are not found: continue silently\&.
-.RE
-.PP
-\fB-I\fR \fIPATH\fR, \fB--include-dir\fR=\fIPATH\fR
-.RS 4
-Prepend
-\fIPATH\fR
-to the list of directories to search into for include files\&. The default list of directories is the current working directory, followed by the directory containing the provided, "standard" inclusion files\&.
-.RE
-.PP
-\fB-m\fR \fIPATH\fR, \fB--metadata-dir\fR=\fIPATH\fR
-.RS 4
-Write CTF metadata file to directory
-\fIPATH\fR
-instead of the current working directory\&.
-.RE
-.PP
-\fB-p\fR \fIPREFIX\fR, \fB--prefix\fR=\fIPREFIX\fR
-.RS 4
-Override the configuration file\(cqs prefix with
-\fIPREFIX\fR\&. This prefix is used in file names, function names, macro names, structure names, and the rest\&. When not specified in the configuration file, the default prefix is
-\fBbarectf_\fR\&.
-.RE
-.PP
-\fB-h\fR, \fB--help\fR
-.RS 4
-Show command help\&.
-.RE
-.PP
-\fB--version\fR
-.RS 4
-Show the command\(cqs version\&.
-.RE
-.SH "EXIT STATUS"
-.PP
-\fB0\fR
-.RS 4
-Success
-.RE
-.PP
-\fBNot 0\fR
-.RS 4
-Error
-.RE
-.SH "BUGS"
-.sp
-Please report any bug or usability issue as a GitHub issue <https://github.com/efficios/barectf/issues>\&.
-.SH "RESOURCES"
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-Project\(cqs website <http://barectf.org>
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-Continuous integration <http://ci.lttng.org/job/barectf>
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-Mailing list <http://lists.lttng.org>
-for support and development:
-\fBlttng-dev@lists.lttng.org\fR
-(prefix the subject message with
-\fB[barectf]\fR)
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-IRC channel <irc://irc.oftc.net/lttng>:
-\fB#lttng\fR
-on
-\fBirc.oftc.net\fR
-(\fBeepp\fR
-is barectf\(cqs author and maintainer)
-.RE
-.SH "COPYRIGHT"
-.sp
-Copyright (c) 2014\-2016 Philippe Proulx <mailto:pproulx@efficios.com>\&.
-.sp
-barectf is distributed under the MIT License <https://github.com/efficios/barectf/blob/master/LICENSE>\&.
-.SH "AUTHORS"
-.sp
-barectf was originally written by and is maintained by, as of this version, Philippe Proulx <mailto:pproulx@efficios.com>\&. Other, nice people have since contributed to the project\&.
-.sp
-barectf is supported by EfficiOS <http://www.efficios.com/>\&.
diff --git a/doc/man/barectf.1.txt b/doc/man/barectf.1.txt
deleted file mode 100644 (file)
index 1c942cb..0000000
+++ /dev/null
@@ -1,130 +0,0 @@
-barectf(1)
-==========
-
-
-NAME
-----
-barectf - Generate C99 code that can write native CTF packets
-
-
-SYNOPSIS
---------
-[verse]
-*barectf* [option:--prefix='PREFIX'] [option:--dump-config]
-        [option:--code-dir='PATH'] [option:--headers-dir='PATH'] [option:--metadata-dir='PATH']
-        [option:-I 'PATH']... [option:--ignore-include-not-found] 'CONFIG'
-
-
-DESCRIPTION
------------
-The `barectf` command generates C99 code, that itself can write
-http://diamon.org/ctf[Common Trace Format] packets natively, out of a
-YAML configuration input file 'CONFIG'. The full documentation of
-barectf is available on the http://barectf.org[project's website].
-
-A prefix is used to scope the generated file names, as well as the
-generated function names, macro names, structure names, and so on.
-By default, this prefix is `barectf_`. It can be overridden by the
-configuration file, and ultimately by the option:--prefix option.
-
-By default, all generated C and CTF metadata files are written to the
-current working directory. The option:--code-dir, option:--headers-dir,
-and option:--metadata-dir options are used to control where the
-generated files should go.
-
-You can add directories to be searched into for inclusion files, before
-the default search directories, by using the option:-I option one or
-more times.
-
-By default, if an inclusion file is not found while processing the
-configuration file 'CONFIG', an error is emitted. You can instruct
-`barectf` to continue silently instead by providing the
-option:--ignore-include-not-found option.
-
-To view the effective YAML configuration file used for generating the
-C and CTF metadata files, after having processed all inclusion files,
-use the option:--dump-config option.
-
-
-OPTIONS
--------
-option:-c 'PATH', option:--code-dir='PATH'::
-    Write C source files to directory 'PATH' instead of the current
-    working directory.
-
-option:--dump-config::
-    Dump the effective YAML configuration file, after all inclusions are
-    processed, to the standard output.
-
-option:-H 'PATH', option:--headers-dir='PATH'::
-    Write C header files to directory 'PATH' instead of the current
-    working directory.
-
-option:--ignore-include-not-found::
-    Do not consider as an error inclusion files that are not found:
-    continue silently.
-
-option:-I 'PATH', option:--include-dir='PATH'::
-    Prepend 'PATH' to the list of directories to search into for include
-    files. The default list of directories is the current working
-    directory, followed by the directory containing the provided,
-    "standard" inclusion files.
-
-option:-m 'PATH', option:--metadata-dir='PATH'::
-    Write CTF metadata file to directory 'PATH' instead of the current
-    working directory.
-
-option:-p 'PREFIX', option:--prefix='PREFIX'::
-    Override the configuration file's prefix with 'PREFIX'. This prefix
-    is used in file names, function names, macro names, structure names,
-    and the rest. When not specified in the configuration file, the
-    default prefix is `barectf_`.
-
-option:-h, option:--help::
-    Show command help.
-
-option:--version::
-    Show the command's version.
-
-
-EXIT STATUS
------------
-*0*::
-    Success
-
-*Not 0*::
-    Error
-
-
-BUGS
-----
-Please report any bug or usability issue as a
-https://github.com/efficios/barectf/issues[GitHub issue].
-
-
-RESOURCES
----------
-* http://barectf.org[Project's website]
-* http://ci.lttng.org/job/barectf[Continuous integration]
-* http://lists.lttng.org[Mailing list] for support and
-  development: `lttng-dev@lists.lttng.org` (prefix the subject message
-  with `[barectf]`)
-* irc://irc.oftc.net/lttng[IRC channel]: `#lttng` on `irc.oftc.net`
-  (`eepp` is barectf's author and maintainer)
-
-
-COPYRIGHT
----------
-Copyright (c) 2014-2016 mailto:pproulx@efficios.com[Philippe Proulx].
-
-barectf is distributed under the
-https://github.com/efficios/barectf/blob/master/LICENSE[MIT License].
-
-
-AUTHORS
--------
-barectf was originally written by and is maintained by, as of this
-version, mailto:pproulx@efficios.com[Philippe Proulx]. Other, nice
-people have since contributed to the project.
-
-barectf is supported by http://www.efficios.com/[EfficiOS].
diff --git a/doc/man/xsl/manpage-bold-literal.xsl b/doc/man/xsl/manpage-bold-literal.xsl
deleted file mode 100644 (file)
index c0e0900..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
-    <xsl:template match="literal">
-        <xsl:text>\fB</xsl:text>
-        <xsl:value-of select="." />
-        <xsl:text>\fR</xsl:text>
-    </xsl:template>
-</xsl:stylesheet>
diff --git a/doc/man/xsl/manpage-callouts.xsl b/doc/man/xsl/manpage-callouts.xsl
deleted file mode 100644 (file)
index 2f7a5d7..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
-   <xsl:template match="co">
-        <xsl:value-of select="concat('\','fB(',substring-after(@id,'-'),')','\','fR')"/>
-   </xsl:template>
-   <xsl:template match="calloutlist">
-        <xsl:value-of select="."/>
-        <xsl:text>sp&#10;</xsl:text>
-        <xsl:apply-templates/>
-        <xsl:text>&#10;</xsl:text>
-   </xsl:template>
-   <xsl:template match="callout">
-        <xsl:value-of select="concat('\','fB',substring-after(@arearefs,'-'),'. ','\','fR')"/>
-        <xsl:apply-templates/>
-        <xsl:value-of select="."/>
-        <xsl:text>br&#10;</xsl:text>
-   </xsl:template>
-</xsl:stylesheet>
diff --git a/doc/man/xsl/manpage-links.xsl b/doc/man/xsl/manpage-links.xsl
deleted file mode 100644 (file)
index 0662921..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
-    <xsl:template match="ulink">
-        <xsl:apply-templates/><xsl:text> &lt;</xsl:text><xsl:value-of select="@url"/><xsl:text>&gt;</xsl:text>
-    </xsl:template>
-    <xsl:template match="link">
-        <xsl:text>\fI</xsl:text><xsl:apply-templates/><xsl:text>\fR</xsl:text>
-    </xsl:template>
-</xsl:stylesheet>
diff --git a/doc/man/xsl/manpage.xsl b/doc/man/xsl/manpage.xsl
deleted file mode 100644 (file)
index b51049f..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
-    <xsl:import href="manpage-callouts.xsl" />
-    <xsl:import href="manpage-bold-literal.xsl" />
-    <xsl:import href="manpage-links.xsl" />
-
-    <!-- disable end notes -->
-    <xsl:param name="man.endnotes.are.numbered">0</xsl:param>
-</xsl:stylesheet>
diff --git a/docs/antora.yml b/docs/antora.yml
new file mode 100644 (file)
index 0000000..f32e927
--- /dev/null
@@ -0,0 +1,8 @@
+name: barectf
+title: barectf
+version: '3.0'
+asciidoc:
+  attributes:
+    req-abbr: '<abbr title="Required?">Req?</abbr>'
+nav:
+  - modules/ROOT/nav.adoc
diff --git a/docs/modules/ROOT/images/barectf-logo.svg b/docs/modules/ROOT/images/barectf-logo.svg
new file mode 100644 (file)
index 0000000..e46cc2c
--- /dev/null
@@ -0,0 +1 @@
+<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 645.33 122.88"><defs><style>.cls-1{fill:none;stroke:#5f0f40;stroke-linecap:square;stroke-linejoin:round;stroke-width:5px;}.cls-2{fill:#5f0f40;}.cls-3{fill:#9b1c22;}</style></defs><title>barectf-logo</title><line class="cls-1" x1="10.29" y1="43.95" x2="3.54" y2="37.19"/><line class="cls-1" x1="21.56" y1="32.69" x2="14.8" y2="25.93"/><line class="cls-1" x1="32.69" y1="21.56" x2="25.93" y2="14.8"/><line class="cls-1" x1="43.95" y1="10.29" x2="37.19" y2="3.54"/><path class="cls-1" d="M161,265.83l-43.2-43.2a8,8,0,0,0-11.39,0L63.07,266a8,8,0,0,0,0,11.39l43.33,43.33a8,8,0,0,0,11.39,0L161,277.49A8.32,8.32,0,0,0,161,265.83Z" transform="translate(-50.52 -210.22)"/><line class="cls-1" x1="112.59" y1="78.93" x2="119.34" y2="85.69"/><line class="cls-1" x1="101.32" y1="90.19" x2="108.08" y2="96.95"/><line class="cls-1" x1="90.19" y1="101.32" x2="96.95" y2="108.08"/><line class="cls-1" x1="78.93" y1="112.59" x2="85.69" y2="119.34"/><rect class="cls-1" x="60.89" y="252.74" width="6.75" height="9.74" transform="translate(-213.86 -89.32) rotate(-45)"/><rect class="cls-1" x="72.15" y="241.48" width="6.75" height="9.74" transform="translate(-202.6 -84.66) rotate(-45)"/><rect class="cls-1" x="83.28" y="230.35" width="6.75" height="9.74" transform="translate(-191.47 -80.05) rotate(-45)"/><rect class="cls-1" x="93.05" y="315.99" width="9.74" height="6.75" transform="translate(-247.67 -47.44) rotate(-45)"/><line class="cls-1" x1="43.95" y1="112.59" x2="37.19" y2="119.34"/><rect class="cls-1" x="81.78" y="304.72" width="9.74" height="6.75" transform="translate(-243 -58.7) rotate(-45)"/><line class="cls-1" x1="32.69" y1="101.32" x2="25.93" y2="108.08"/><rect class="cls-1" x="70.65" y="293.59" width="9.74" height="6.75" transform="translate(-238.39 -69.83) rotate(-45)"/><line class="cls-1" x1="21.56" y1="90.19" x2="14.8" y2="96.95"/><rect class="cls-1" x="59.39" y="282.33" width="9.74" height="6.75" transform="translate(-233.72 -81.1) rotate(-45)"/><line class="cls-1" x1="10.29" y1="78.93" x2="3.54" y2="85.69"/><line class="cls-1" x1="78.93" y1="10.29" x2="85.69" y2="3.54"/><line class="cls-1" x1="90.19" y1="21.56" x2="96.95" y2="14.8"/><line class="cls-1" x1="101.32" y1="32.69" x2="108.08" y2="25.93"/><line class="cls-1" x1="112.59" y1="43.95" x2="119.34" y2="37.19"/><circle class="cls-2" cx="34.41" cy="61.44" r="8.71"/><rect class="cls-1" x="156.29" y="280.83" width="6.75" height="9.74" transform="translate(-205.78 -13.64) rotate(-45)"/><rect class="cls-1" x="145.03" y="292.09" width="6.75" height="9.74" transform="translate(-217.04 -18.3) rotate(-45)"/><rect class="cls-1" x="133.9" y="303.22" width="6.75" height="9.74" transform="translate(-228.17 -22.91) rotate(-45)"/><rect class="cls-1" x="122.64" y="314.49" width="6.75" height="9.74" transform="translate(-239.44 -27.58) rotate(-45)"/><rect class="cls-1" x="121.14" y="220.58" width="9.74" height="6.75" transform="translate(-171.98 -55.52) rotate(-45)"/><rect class="cls-1" x="132.4" y="231.85" width="9.74" height="6.75" transform="translate(-176.64 -44.26) rotate(-45)"/><rect class="cls-1" x="143.53" y="242.98" width="9.74" height="6.75" transform="translate(-181.25 -33.13) rotate(-45)"/><rect class="cls-1" x="154.79" y="254.24" width="9.74" height="6.75" transform="translate(-185.92 -21.87) rotate(-45)"/><rect class="cls-1" x="94.55" y="219.08" width="6.75" height="9.74" transform="translate(-180.21 -75.38) rotate(-45)"/><path class="cls-2" d="M225.43,323.58a24.38,24.38,0,0,1-7.14-3.84,29.48,29.48,0,0,1-5.72-6l-3.92,9.88h-7.22V219.34h12.86v1.1a4.13,4.13,0,0,0-1.17,2.05,20.29,20.29,0,0,0-.24,3.78v36.84a27.87,27.87,0,0,1,4.08-5.18,27.55,27.55,0,0,1,5.18-4.08,23.52,23.52,0,0,1,12.08-3.45,30.8,30.8,0,0,1,12,2.26,24.62,24.62,0,0,1,9.33,6.84,31.85,31.85,0,0,1,6,11.44,54.41,54.41,0,0,1,2.12,16,50.29,50.29,0,0,1-2.51,16.64,34.35,34.35,0,0,1-6.83,11.9,28.22,28.22,0,0,1-9.64,7.08,27.11,27.11,0,0,1-11,2.34A25.62,25.62,0,0,1,225.43,323.58Zm14.2-10.1A16.69,16.69,0,0,0,246,308.9a22.73,22.73,0,0,0,4.47-8.45,43.48,43.48,0,0,0,1.65-12.87,46.73,46.73,0,0,0-1.41-12.17,24.91,24.91,0,0,0-4-8.61,15.89,15.89,0,0,0-6.2-5,18.79,18.79,0,0,0-7.84-1.63,16.23,16.23,0,0,0-10.28,3.49,22.68,22.68,0,0,0-7,9.77,39,39,0,0,0-2.51,14.5,51.2,51.2,0,0,0,1.1,11,26.19,26.19,0,0,0,3.37,8.53,15.61,15.61,0,0,0,6,5.51,19.24,19.24,0,0,0,9,1.94A19.74,19.74,0,0,0,239.63,313.48Z" transform="translate(-50.52 -210.22)"/><path class="cls-2" d="M298.94,324.92q-12.24,0-18.82-5.55a17.67,17.67,0,0,1-6.59-14.15,19.55,19.55,0,0,1,2.82-10.4,24.63,24.63,0,0,1,7.77-7.81,39.12,39.12,0,0,1,11.53-4.93,55.33,55.33,0,0,1,14-1.72c1.77,0,3.58,0,5.41.08s3.76.16,5.8.32,4.16.39,6.36.7l.31,8.63q-2.82-.46-5.72-.71T316,289c-1.88-.1-3.71-.16-5.49-.16a53.34,53.34,0,0,0-10.35.94,29,29,0,0,0-8.16,2.81,14.25,14.25,0,0,0-5.34,4.83,13.17,13.17,0,0,0-1.88,7.18,11.85,11.85,0,0,0,1.18,5.54,9.27,9.27,0,0,0,3.21,3.58,14.44,14.44,0,0,0,4.79,2,27,27,0,0,0,6,.63,28.67,28.67,0,0,0,10.9-2,21.93,21.93,0,0,0,8.16-5.68,24.37,24.37,0,0,0,5.1-9.18A41.2,41.2,0,0,0,325.92,287q0-10.57-2.51-16.49a15.87,15.87,0,0,0-7.45-8.4q-4.93-2.49-12.63-2.49a27.7,27.7,0,0,0-10.19,2,26.38,26.38,0,0,0-9.1,6l-5.49-7.22a32.78,32.78,0,0,1,11.61-7.53,38.92,38.92,0,0,1,14-2.51A45.05,45.05,0,0,1,317,252.13a24,24,0,0,1,10,5.72,26.19,26.19,0,0,1,6.43,10.75,53.61,53.61,0,0,1,2.28,16.94v38.12H323.41V312.21a21.39,21.39,0,0,1-4.94,6.43,22.07,22.07,0,0,1-6.2,3.84,30.89,30.89,0,0,1-6.74,1.89A42.74,42.74,0,0,1,298.94,324.92Z" transform="translate(-50.52 -210.22)"/><path class="cls-2" d="M355.89,252h11.76l-.47,21-1.41-2.35a25.17,25.17,0,0,1,3.29-8.63,24.34,24.34,0,0,1,12.87-10.28,25.36,25.36,0,0,1,8.15-1.33,27.44,27.44,0,0,1,10.44,2,25,25,0,0,1,8.55,5.88L404,267l-.62,1.41-1.1-.63a9.24,9.24,0,0,0-.94-2.35,10.59,10.59,0,0,0-2.67-2.67,16.76,16.76,0,0,0-4.63-2.11,18.86,18.86,0,0,0-4.78-.55,22,22,0,0,0-7.84,1.48,20.54,20.54,0,0,0-7.14,4.61,21.84,21.84,0,0,0-5.1,8,31.91,31.91,0,0,0-1.88,11.55v37.93H355.89Z" transform="translate(-50.52 -210.22)"/><path class="cls-2" d="M450.18,324.92a40.27,40.27,0,0,1-14.27-2.42,30.38,30.38,0,0,1-11.06-7.09,31.34,31.34,0,0,1-7.14-11.62,51.1,51.1,0,0,1,.08-31.88,34.3,34.3,0,0,1,7.06-11.77,30,30,0,0,1,10.51-7.24,33,33,0,0,1,12.78-2.5,32,32,0,0,1,11.45,2,24.91,24.91,0,0,1,9.26,6.17,29.63,29.63,0,0,1,6.2,10.55,45.52,45.52,0,0,1,2.27,15.16c0,.83,0,1.69-.08,2.57s-.13,1.75-.23,2.58H426a36,36,0,0,0,2.36,11.86,23.27,23.27,0,0,0,5.33,8.22,21.21,21.21,0,0,0,7.61,4.73,27,27,0,0,0,9.18,1.55,27.59,27.59,0,0,0,7.06-.87,22.46,22.46,0,0,0,6.19-2.66,23.65,23.65,0,0,0,5.26-4.47l6.27,6.11a30.22,30.22,0,0,1-6.82,6.12,28.14,28.14,0,0,1-8.4,3.69A39.53,39.53,0,0,1,450.18,324.92Zm-23.69-44.24h39.38a28.36,28.36,0,0,0-1.33-9,20.82,20.82,0,0,0-3.77-6.85,15.82,15.82,0,0,0-5.8-4.36,18.72,18.72,0,0,0-7.61-1.48,20.47,20.47,0,0,0-7.14,1.25,17.76,17.76,0,0,0-6.2,4,23.68,23.68,0,0,0-4.78,6.77A32.57,32.57,0,0,0,426.49,280.68Z" transform="translate(-50.52 -210.22)"/><path class="cls-3" d="M510.75,322.1a33.89,33.89,0,0,1-11.37-7.81,35.55,35.55,0,0,1-7.45-11.79,40.44,40.44,0,0,1-2.67-14.92,40,40,0,0,1,2.67-14.76,35.69,35.69,0,0,1,7.45-11.8,34.18,34.18,0,0,1,11.37-7.81A36.06,36.06,0,0,1,525,250.4a34.47,34.47,0,0,1,15.76,3.53,30.26,30.26,0,0,1,11.37,9.81l-7,6.9-1.1,1.1-.79-.79a5.14,5.14,0,0,0-.55-2.35,13,13,0,0,0-2.43-3,20,20,0,0,0-7.37-4.39,29.82,29.82,0,0,0-9.1-1.26,20.58,20.58,0,0,0-8.63,1.87,22.63,22.63,0,0,0-7.29,5.38,25.89,25.89,0,0,0-5.1,8.5,31.08,31.08,0,0,0-1.88,11.08A31.71,31.71,0,0,0,502.75,298a27.64,27.64,0,0,0,5.18,8.81,23,23,0,0,0,7.92,5.85,23.64,23.64,0,0,0,10,2.11,23.18,23.18,0,0,0,6.9-1,24.55,24.55,0,0,0,6.28-3,28,28,0,0,0,5.49-4.79l6.59,7.69a35.87,35.87,0,0,1-11.85,8.47,34.94,34.94,0,0,1-14,2.83A36.27,36.27,0,0,1,510.75,322.1Z" transform="translate(-50.52 -210.22)"/><path class="cls-3" d="M564.24,252h51.61v9.26H564.24Zm24.63,70.59a15.57,15.57,0,0,1-6.74-7.31,37.27,37.27,0,0,1-3.06-12.49,145.75,145.75,0,0,1-.39-17.92l1.88-51.22,11.76-1.42,1.57-.15.16,1.1a15.16,15.16,0,0,0-1.33,2.2,12.34,12.34,0,0,0-.87,3.77l-1.41,17.76.47,2.83-1.1,25.93q-.46,11.94.63,18.47t3.92,9a11.15,11.15,0,0,0,7.53,2.43,20,20,0,0,0,9.18-2,66.69,66.69,0,0,0,8.39-5.17l3.45,8.94a39.6,39.6,0,0,1-11,5.8,36.76,36.76,0,0,1-11.76,1.89A23.81,23.81,0,0,1,588.87,322.56Z" transform="translate(-50.52 -210.22)"/><path class="cls-3" d="M647.07,260.91H631.54V252h15.53v-6q0-9.57,3.37-15.69a21,21,0,0,1,9.34-9,30.84,30.84,0,0,1,13.65-2.9,32.73,32.73,0,0,1,12.62,2.43,23.8,23.8,0,0,1,9.81,7.45l-6,8.32-.94,1.25-1-.63a11.09,11.09,0,0,0-.62-2.51,11,11,0,0,0-2.2-3.13,16.49,16.49,0,0,0-5-3.14,18.51,18.51,0,0,0-6.43-.94,18,18,0,0,0-8.16,1.8,12.69,12.69,0,0,0-5.65,5.81q-2,4-2,10.9v6h23.53v8.94H657.9v62.75H647.07Z" transform="translate(-50.52 -210.22)"/></svg>
\ No newline at end of file
diff --git a/docs/modules/ROOT/images/getting-started-trace-compass.png b/docs/modules/ROOT/images/getting-started-trace-compass.png
new file mode 100644 (file)
index 0000000..d985f99
Binary files /dev/null and b/docs/modules/ROOT/images/getting-started-trace-compass.png differ
diff --git a/docs/modules/ROOT/nav.adoc b/docs/modules/ROOT/nav.adoc
new file mode 100644 (file)
index 0000000..ad60ea9
--- /dev/null
@@ -0,0 +1,31 @@
+* xref:whats-new.adoc[What's new in barectf{nbsp}3?]
+* xref:install.adoc[]
+* xref:getting-started.adoc[]
+* xref:how-barectf-works:index.adoc[]
+** xref:how-barectf-works:ctf-primer.adoc[]
+* xref:yaml:index.adoc[]
+** xref:yaml:yaml-primer.adoc[]
+** xref:yaml:cfg-obj.adoc[Configuration object]
+*** xref:yaml:common-values.adoc[Common values]
+*** xref:yaml:trace-obj.adoc[Trace object]
+*** xref:yaml:trace-type-obj.adoc[Trace type object]
+*** xref:yaml:clk-type-obj.adoc[Clock type object]
+*** xref:yaml:dst-obj.adoc[Data stream type object]
+*** xref:yaml:ert-obj.adoc[Event record type object]
+*** xref:yaml:ft-obj.adoc[Field type object]
+**** xref:yaml:int-ft-obj.adoc[Integer]
+**** xref:yaml:enum-ft-obj.adoc[Enumeration]
+**** xref:yaml:real-ft-obj.adoc[Real]
+**** xref:yaml:str-ft-obj.adoc[String]
+**** xref:yaml:struct-ft-obj.adoc[Structure]
+**** xref:yaml:static-array-ft-obj.adoc[Static array]
+**** xref:yaml:dyn-array-ft-obj.adoc[Dynamic array]
+** xref:yaml:include.adoc[]
+* xref:cli:index.adoc[]
+** xref:cli:usage.adoc[]
+* xref:tracing-funcs:index.adoc[]
+* xref:build:index.adoc[]
+* xref:platform:index.adoc[]
+** xref:platform:api.adoc[]
+** xref:platform:example.adoc[]
+* xref:get-help.adoc[]
diff --git a/docs/modules/ROOT/pages/get-help.adoc b/docs/modules/ROOT/pages/get-help.adoc
new file mode 100644 (file)
index 0000000..7117215
--- /dev/null
@@ -0,0 +1,20 @@
+= Get help
+
+To get help with barectf:
+
+* Write to the
+  https://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev[lttng-dev]
+  mailing list with the `+[barectf]+` subject prefix.
+
+* Query `eepp` on the OFTC or Freenode IRC networks.
+
+* https://github.com/efficios/barectf/issues/new[Create a GitHub issue].
+
+For commercial support and feature requests, please
+https://www.efficios.com/contact/[contact EfficiOS].
+
+Other links:
+
+* https://ci.lttng.org/view/barectf/[Continuous integration]
+* https://lttng.org/blog/[LTTng blog], which contains posts about
+  barectf
diff --git a/docs/modules/ROOT/pages/getting-started.adoc b/docs/modules/ROOT/pages/getting-started.adoc
new file mode 100644 (file)
index 0000000..b41e2ff
--- /dev/null
@@ -0,0 +1,282 @@
+= Getting started
+
+This introductory guide makes you create a very simple barectf YAML
+configuration, generate a tracer out of it, and then use it.
+
+You need Linux for this user guide.
+
+The steps are:
+
+. <<yaml,Write the YAML configuration file>>.
+. <<cli,Generate the files with the `barectf` CLI tool>>.
+. <<app,Write the application source file>>.
+. <<build,Download the Linux FS platform source files and
+  build the application>>.
+. <<trace,Execute the application>> to produce
+  xref:how-barectf-works:ctf-primer.adoc#ds[CTF data streams].
+. <<read,Read the resulting CTF trace>>.
+
+IMPORTANT: Make sure that barectf xref:install.adoc[is installed] before
+you follow this guide.
+
+[[yaml]]
+== Write the YAML configuration file
+
+. Create an empty directory and `cd` into it, for example:
++
+[.cl]
+[verse]
+[.prompt]##$## cd $(mktemp --directory)
+
+. Write the following xref:yaml:index.adoc[YAML configuration file]:
++
+[[config.yaml]]
+.`config.yaml`
+[source,yaml]
+----
+# Needed YAML tag for the configuration object
+--- !<tag:barectf.org,2020/3/config>
+
+# Configuration's trace
+trace:
+  # Type of the trace
+  type:
+    # Add standard field type aliases
+    $include:
+      - stdint.yaml
+      - stdmisc.yaml
+
+    # Native byte order is little-endian
+    native-byte-order: little-endian
+
+    # One clock type
+    clock-types:
+      # The Linux FS platform requires a clock type named `default`
+      # which has a 1-GHz frequency and the `uint64_t` C type.
+      default:
+        frequency: 1000000000
+        $c-type: uint64_t
+
+    # One data stream type
+    data-stream-types:
+      # Stream type named `default`
+      default:
+        # Default data stream type
+        $is-default: true
+
+        # Default clock type: `default`
+        $default-clock-type-name: default
+
+        # Two event record types
+        event-record-types:
+          # Event record type named `one_integer`
+          one_integer:
+            payload-field-type:
+              class: structure
+              members:
+                # One payload member: a 32-bit signed integer field type
+                # (`int32_t` C type)
+                - the_integer: int32
+
+          # Event record type named `one_string`
+          one_string:
+            payload-field-type:
+              class: structure
+              members:
+                # One payload member: a string field type
+                # (`const char *` C type)
+                - the_string: string
+----
++
+barectf will <<cli,generate>> two
+xref:tracing-funcs:index.adoc[tracing functions] named
+`+barectf_trace_one_integer()+` and `+barectf_trace_one_string()+` from
+this configuration.
+
+[[cli]]
+== Generate the files with the `barectf` CLI tool
+
+. Create a directory which will contain the CTF trace:
++
+--
+[.cl]
+[verse]
+[.prompt]##$## mkdir trace
+--
++
+A CTF trace always contains a file named `metadata` and one or more data
+stream files. barectf always generates the `metadata` file while the
+user application writes the data stream files through the generated
+tracer.
+
+. Generate the CTF metadata stream and C{nbsp}source files with the
+  xref:cli:index.adoc[`barectf` CLI tool]:
++
+[.cl]
+[verse]
+--
+[.prompt]##$## barectf generate --metadata-dir=trace config.yaml
+--
++
+`barectf generate` creates:
++
+[%autowidth.stretch, cols="d,a"]
+|===
+|File name |Description
+
+|`trace/metadata`
+|The CTF metadata stream file.
+
+It's in the `trace` directory because we used the
+xref:cli:usage.adoc#generate-metadata-dir-option[`+--metadata-dir+`]
+option.
+
+|`barectf.h`
+|The generated tracer's public C{nbsp}header file.
+
+|`barectf-bitfield.h`
+|Internal macros for the generated tracer (included by `barectf.c`).
+
+|`barectf.c`
+|The generated tracer's C{nbsp}source code.
+|===
+
+[[app]]
+== Write the application source file
+
+Write a simple application which uses the generated tracer:
+
+.`app.c`
+[source,c]
+----
+/* Include the Linux FS platform header */
+#include "barectf-platform-linux-fs.h"
+
+/* Include the barectf public header */
+#include "barectf.h"
+
+int main(const int argc, const char * const argv[])
+{
+    /* Platform context */
+    struct barectf_platform_linux_fs_ctx *platform_ctx;
+
+    /* barectf context */
+    struct barectf_default_ctx *ctx;
+
+    int i;
+
+    /*
+     * Obtain a platform context.
+     *
+     * The platform is configured to write 512-byte packets to a data
+     * stream file within the `trace` directory.
+     */
+    platform_ctx = barectf_platform_linux_fs_init(512, "trace/stream",
+                                                  0, 0, 0);
+
+    /* Obtain the barectf context from the platform context */
+    ctx = barectf_platform_linux_fs_get_barectf_ctx(platform_ctx);
+
+    /*
+     * Write a `one_integer` event record which contains the number of
+     * command arguments.
+     */
+    barectf_trace_one_integer(ctx, argc);
+
+    /* For each command argument */
+    for (i = 0; i < argc; ++i) {
+        /*
+         * Write a `one_integer` event record which contains the
+         * argument's index.
+         */
+        barectf_trace_one_integer(ctx, i);
+
+        /*
+         * Write a `one_string` event record which contains the
+         * argument.
+         */
+        barectf_trace_one_string(ctx, argv[i]);
+    }
+
+    /* Finalize (free) the platform context */
+    barectf_platform_linux_fs_fini(platform_ctx);
+
+    return 0;
+}
+----
+
+This application calls the `+barectf_trace_one_integer()+` and
+`+barectf_trace_one_string()+` functions which correspond to the
+`one_integer` and `one_string` event record types in
+<<config.yaml,`config.yaml`>>.
+
+[[build]]
+== Download platform source files and build the application
+
+To build the final application, you need the Linux FS platform source
+files.
+
+The Linux FS platform only exists to demonstrate barectf; a barectf user
+almost always xref:platform:index.adoc[writes its own platform] because
+of the bare-metal/embedded nature of the target systems.
+
+. Download the Linux FS platform source files:
++
+[.cl]
+[verse]
+[.prompt]##$## wget https://raw.githubusercontent.com/efficios/barectf/stable-{page-component-version}/platforms/linux-fs/barectf-platform-linux-fs.h
+[.prompt]##$## wget https://raw.githubusercontent.com/efficios/barectf/stable-{page-component-version}/platforms/linux-fs/barectf-platform-linux-fs.c
+
+. Build the application:
++
+[.cl]
+[verse]
+[.prompt]##$## gcc -o app app.c barectf.c barectf-platform-linux-fs.c
+
+[[trace]]
+== Execute the application
+
+Run the <<build,built>> application, passing a few command-line
+arguments:
+
+[.cl]
+[verse]
+[.prompt]##$## ./app lorem ipsum nulla dolore consequat
+
+This writes the xref:how-barectf-works:ctf-primer.adoc#ds[CTF data
+stream] file `trace/stream`.
+
+The `trace` directory is now a complete
+xref:how-barectf-works:ctf-primer.adoc#trace[CTF trace].
+
+[[read]]
+== Read the CTF trace
+
+Use https://babeltrace.org/[Babeltrace{nbsp}2] to read the resulting
+CTF trace:
+
+[.cl]
+[verse]
+[.prompt]##$## babeltrace2 trace
+
+----
+[15:52:24.202028327] (+?.?????????) one_integer: { the_integer = 6 }
+[15:52:24.202029477] (+0.000001150) one_integer: { the_integer = 0 }
+[15:52:24.202029988] (+0.000000511) one_string: { the_string = "./app" }
+[15:52:24.202033362] (+0.000003374) one_integer: { the_integer = 1 }
+[15:52:24.202033716] (+0.000000354) one_string: { the_string = "lorem" }
+[15:52:24.202034147] (+0.000000431) one_integer: { the_integer = 2 }
+[15:52:24.202034465] (+0.000000318) one_string: { the_string = "ipsum" }
+[15:52:24.202034812] (+0.000000347) one_integer: { the_integer = 3 }
+[15:52:24.202035147] (+0.000000335) one_string: { the_string = "nulla" }
+[15:52:24.202035527] (+0.000000380) one_integer: { the_integer = 4 }
+[15:52:24.202035848] (+0.000000321) one_string: { the_string = "dolore" }
+[15:52:24.202036175] (+0.000000327) one_integer: { the_integer = 5 }
+[15:52:24.202036553] (+0.000000378) one_string: { the_string = "consequat" }
+----
+
+You can also open the trace with
+https://www.eclipse.org/tracecompass/[Trace{nbsp}Compass]:
+
+.Trace Compass 5.3.0's event list view
+image::getting-started-trace-compass.png[]
diff --git a/docs/modules/ROOT/pages/index.adoc b/docs/modules/ROOT/pages/index.adoc
new file mode 100644 (file)
index 0000000..72f7dda
--- /dev/null
@@ -0,0 +1,101 @@
+= Welcome!
+:ansi-c: ANSI{nbsp}C
+
+[.welcome-logo]
+image::barectf-logo.svg[]
+
+Welcome to the _**barectf**_{nbsp}{page-component-version}
+documentation!
+
+== What's barectf?
+
+barectf (from _bare_ metal and _CTF_) is a generator of
+https://en.wikipedia.org/wiki/Tracing_(software)[tracer] which produces
+xref:how-barectf-works:ctf-primer.adoc#ds[CTF data streams].
+
+CTF is a binary trace format designed to be very fast to write without
+compromising great flexibility.
+
+barectf reads a configuration and produces:
+
+* A CTF xref:how-barectf-works:ctf-primer.adoc#trace[metadata stream]
+  file.
+
+* {ansi-c} source code files which, once compiled, constitute a tracer
+  which writes CTF data streams.
++
+The generated C{nbsp}source code has no other dependencies than a few
+C{nbsp}standard library headers.
+
+Your C/{cpp} program can include the generated `barectf.h` header and
+call its xref:tracing-funcs:index.adoc[`+barectf_trace_*()+` functions]
+from source locations of your choice to write
+xref:how-barectf-works:ctf-primer.adoc#er[event records] to
+xref:how-barectf-works:ctf-primer.adoc#pkt[CTF packets]. You can then
+read and analyze the CTF traces with tools such as
+https://babeltrace.org/[Babeltrace{nbsp}2] and
+https://www.eclipse.org/tracecompass/[Trace{nbsp}Compass].
+
+xref:getting-started.adoc[Get started] now with a simple barectf
+configuration.
+
+Read xref:how-barectf-works:index.adoc[] to understand the mechanics and
+terminology of barectf.
+
+== Do I need barectf?
+
+You may need barectf if you need to add CTF tracing capabilities to your
+bare metal or embedded application/system.
+
+Because barectf generates portable {ansi-c} code, you can compile it and
+use it for virtually any system.
+
+If you need to add CTF instrumentation to Linux applications or to the
+Linux kernel, have a look at https://lttng.org/[LTTng] which offers a
+comprehensive tracing solution for Linux.
+
+== Components of barectf
+
+The barectf project contains:
+
+* A Python{nbsp}3 package, named `barectf`, which offers an API to
+  programatically create a barectf configuration and generate files out
+  of it.
++
+The documentation of the `barectf` Python{nbsp}3 package isn't available
+yet.
+
+* A xref:cli:index.adoc[command-line interface] (CLI), named `barectf`,
+  which can process a xref:yaml:index.adoc[barectf YAML configuration
+  file] to generate files out of it.
+
+* Installed xref:yaml:include.adoc#std[standard partial YAML files]
+  which you can include in your barectf YAML configuration.
+
+== What's in this documentation?
+
+This documentation shows:
+
+* xref:install.adoc[How to install barectf].
+
+* xref:how-barectf-works:index.adoc[How barectf works].
+
+* xref:yaml:index.adoc[How to write a barectf YAML configuration].
+
+* xref:cli:index.adoc[How to generate files from a YAML configuration
+  file] with the `barectf` CLI tool.
+
+* xref:build:index.adoc[How to use and build your application with
+  a generated tracer].
+
+* xref:platform:index.adoc[How to write a barectf platform].
+
+== It's "`barectf`"!
+
+The name of the project is "`**barectf**`"; not "`BareCTF`", nor
+"`__bareCTF__`", nor "`__Barectf__`".
+
+== License
+
+The barectf project, including this documentation, is licensed under the
+https://github.com/efficios/barectf/blob/stable-{page-component-version}/LICENSE[MIT license].
diff --git a/docs/modules/ROOT/pages/install.adoc b/docs/modules/ROOT/pages/install.adoc
new file mode 100644 (file)
index 0000000..6fe0ca9
--- /dev/null
@@ -0,0 +1,47 @@
+= Install barectf
+
+== Requirements
+
+barectf{nbsp}{page-component-version} requires
+http://python.org/[Python]{nbsp}3.6 and pip for Python{nbsp}3.
+
+You can install barectf on Linux, macOS, or Windows.
+
+== Install barectf
+
+There are two ways to install barectf with pip:
+
+* To install barectf on your system:
++
+[.cl]
+[verse]
+[.prompt]##&#35;## pip3 install barectf
+
+* To install barectf for the current user:
++
+[.cl]
+[verse]
+--
+[.prompt]##$## pip3 install --user barectf
+--
++
+See `+pip3 install --help+` to learn more about the `+--user+`
+option.
+
+NOTE: The commands above install the latest version of barectf,
+while you're currently reading the documentation of
+barectf{nbsp}{page-component-version}.
+
+== Upgrade barectf
+
+To upgrade your system barectf:
+
+[.cl]
+[verse]
+[.prompt]##&#35;## pip3 install --upgrade barectf
+
+To upgrade your user barectf:
+
+[.cl]
+[verse]
+[.prompt]##$## pip3 install --user --upgrade barectf
diff --git a/docs/modules/ROOT/pages/whats-new.adoc b/docs/modules/ROOT/pages/whats-new.adoc
new file mode 100644 (file)
index 0000000..72b46d1
--- /dev/null
@@ -0,0 +1,108 @@
+= What's new in barectf{nbsp}3?
+
+barectf{nbsp}3 is a major update of the project.
+
+The main, user-visible changes are:
+
+* Support for user-defined
+  xref:yaml:static-array-ft-obj.adoc[static] and
+  xref:yaml:dyn-array-ft-obj.adoc[dynamic array field types].
+
+* Reworked `barectf` Python API to match the recent CTF terminology and
+  model (like https://babeltrace.org/[Babeltrace{nbsp}2] and the
+  upcoming CTF{nbsp}2).
+
+* Reworked xref:yaml:index.adoc[YAML configuration] format to match the
+  new Python API.
++
+barectf{nbsp}3 can still read and use barectf{nbsp}2 YAML
+configurations.
++
+The main changes are:
++
+** Updated terminology for property names and values.
+** The xref:yaml:cfg-obj.adoc[configuration object] mapping (the YAML
+   document) must be tagged with `tag:barectf.org,2020/3/config`.
+** The configuration object contains a xref:yaml:trace-obj.adoc[trace
+   object] which contains a xref:yaml:trace-type-obj.adoc[trace type
+   object].
++
+A trace can have an environment while a trace type can have a UUID.
+
+** You can specify two
+   xref:yaml:cfg-obj.adoc#prefix-obj[prefixes] instead of a
+   single one: a file name prefix and an identifier prefix.
++
+With barectf{nbsp}2, the single prefix `my_app_` becomes the file name
+prefix `my_app` and the identifier prefix `my_app_`.
+
+** You don't need to specify special CTF structure field type members,
+   like `magic`, `stream_id`, and `timestamp`.
++
+Instead, you specify
+xref:yaml:trace-type-obj.adoc#features-obj[trace type] and
+xref:yaml:dst-obj.adoc#features-obj[data stream type
+features]. You can still control the exact field type of a feature.
+
+** A data stream type can have zero or one
+   xref:yaml:dst-obj.adoc#def-clk-type-name-prop[default clock type].
++
+When a data stream type has a default clock type, its timestamp integer
+field types (packet beginning, packet end, and event record)
+automatically refer to this specific clock type, effectively removing
+the integer field type's `property-mappings` property.
+
+** The only way to make a data stream type the default one is with its
+   xref:yaml:dst-obj.adoc#is-def-prop[`$is-default`
+   boolean property].
+
+** You cannot specify custom
+   xref:how-barectf-works:ctf-primer.adoc#pkt[packet] header and
+   xref:how-barectf-works:ctf-primer.adoc#er[event record]
+   header field type members anymore.
++
+The header field types only exist for the trace format itself.
++
+Instead,
+xref:yaml:dst-obj.adoc#pkt-ctx-ft-extra-members-prop[append user-defined
+members to the packet context field type]
+and use the
+xref:yaml:dst-obj.adoc#er-common-ctx-ft-prop[event record common context
+field type].
+
+** xref:yaml:trace-type-obj.adoc#ft-aliases-prop[Field type aliases]
+   do not need to be defined in any specific order.
+** An xref:yaml:int-ft-obj.adoc[integer field type] _is_ a bit array
+   field type.
++
+A bit array field type has size and alignment properties. It doesn't
+have a byte order property: as of barectf{nbsp}3.0, the generated tracer
+always uses the native byte order.
+
+** An integer field type doesn't have a `signed` property: unsigned
+   and signed integer field types are two different classes.
+** An xref:yaml:enum-ft-obj.adoc[enumeration field type] _is_ an integer
+   field type.
+** The xref:yaml:enum-ft-obj.adoc#mappings-prop[mappings] of an
+   enumeration field type are a YAML mapping of labels to sequences of
+   integer ranges.
+** A xref:yaml:real-ft-obj.adoc[real field type] _is_ a bit array field
+   type.
+** The xref:yaml:struct-ft-obj.adoc#members-prop[members] of a structure
+   field type are a sequence instead of a mapping (YAML mappings are
+   _not_ ordered).
++
+This sequence is considered to be an _ordered mapping_, similar to
+YAML's https://yaml.org/type/omap.html[`+!!omap+`] type.
+
+* Updated xref:yaml:include.adoc#std[standard partial YAML files] for
+  the new YAML configuration format.
+
+* The xref:cli:usage.adoc[`barectf` CLI tool] now has a Git-like user
+  interface with a few commands.
++
+The `barectf` CLI tool remains backward compatible with barectf{nbsp}2's
+CLI: the default command is
+xref:cli:usage.adoc#generate-command[`generate`].
+
+* The generated C{nbsp}code is ``const``-correct.
diff --git a/docs/modules/ROOT/partials/def-prefix-note.adoc b/docs/modules/ROOT/partials/def-prefix-note.adoc
new file mode 100644 (file)
index 0000000..773d3db
--- /dev/null
@@ -0,0 +1,3 @@
+NOTE: This page assumes that the configured
+xref:yaml:cfg-obj.adoc#prefix-prop[identifier prefix] is the default
+`barectf`.
diff --git a/docs/modules/cli/pages/index.adoc b/docs/modules/cli/pages/index.adoc
new file mode 100644 (file)
index 0000000..375babb
--- /dev/null
@@ -0,0 +1,113 @@
+= Generate files from a YAML configuration file
+
+barectf ships with the `barectf` command-line interface (CLI) tool.
+
+The `barectf` CLI tool has a command interface, like
+https://git-scm.com/[Git].
+
+This page focuses on the `barectf generate` command. See
+xref:usage.adoc[] for the complete CLI tool's documentation.
+
+== Generate files from a YAML configuration
+
+Use the xref:usage.adoc#generate-command[`barectf generate` command] to
+generate files from a barectf xref:yaml:index.adoc[YAML configuration
+file]:
+
+[.cl]
+[verse]
+[.prompt]##$## barectf generate my-config.yaml
+
+On success, this command writes the following files to the current
+working directory:
+
+[%autowidth.stretch, cols="d,a"]
+|===
+|File name |Description
+
+|[[metadata-file]]`metadata`
+|The CTF metadata stream file.
+
+You'll need to place this file in a directory with the
+xref:how-barectf-works:ctf-primer.adoc#ds[data stream] files which your
+application will write through the generated tracer.
+
+See xref:how-barectf-works:index.adoc[] to learn more.
+
+|`barectf.h`
+|The generated tracer's public C{nbsp}header file.
+
+This header contains the prototypes of the packet opening, packet
+closing, and xref:tracing-funcs:index.adoc[tracing functions].
+
+barectf generates one packet opening/closing function per configured
+xref:yaml:dst-obj.adoc[data stream type] and one tracing function per
+configured xref:yaml:ert-obj.adoc[event record type].
+
+Your application and xref:platform:index.adoc[platforms] need to
+include this file.
+
+|`barectf-bitfield.h`
+|Internal macros for the generated tracer (included by `barectf.c`).
+
+|[[barectf.c-file]]`barectf.c`
+|The generated tracer's C{nbsp}source code.
+|===
+
+Those file names assume that `my-config.yaml` uses the default
+xref:yaml:cfg-obj.adoc#prefix-prop[prefixes].
+
+=== Use dedicated output directories
+
+Because the <<metadata-file,`metadata` file>> which barectf generates is
+part of an eventual
+xref:how-barectf-works:ctf-primer.adoc#trace[CTF trace], you'll probably
+want to make barectf write it to its own directory.
+
+Use the `barectf generate` command's
+xref:usage.adoc#generate-metadata-dir-option[`+--metadata-dir+` option]
+to specify the `metadata` file's output directory:
+
+[.cl]
+[verse]
+[.prompt]##$## barectf generate my-config.yaml --metadata-dir=my-trace
+
+`barectf generate` also offers the
+xref:usage.adoc#generate-code-dir-option[`+--code-dir+`] and
+xref:usage.adoc#generate-headers-dir-option[`+--headers-dir+`] options
+to select the output directories of the generated
+<<barectf.c-file,tracer source file>> and headers.
+
+=== Control inclusions
+
+A barectf xref:yaml:index.adoc[YAML configuration file] can
+xref:yaml:include.adoc[include partial YAML files].
+
+Set the most significant inclusion search directories with the `barectf
+generate` command's
+xref:usage.adoc#generate-include-dir-option[`+--include-dir+`] option.
+You can use the option more than once:
+
+[.cl]
+[verse]
+[.prompt]##$## barectf generate my-config.yaml \
+                   --include-dir=/path/to/project/barectf \
+                   --include-dir=/path/to/base/barectf
+
+By default, if `barectf generate` can't find an inclusion file, it
+prints an error and xref:usage.adoc#exit-status[exits] with a non-zero
+status.
+
+However, it's possible that some YAML file **_A_** includes a file
+**_B_** which barectf can't find, but **_A_** doesn't need anything from
+**_B_**.
+
+Force `barectf generate` to continue silently instead with its
+xref:usage.adoc#generate-ignore-include-not-found-option[`+--ignore-include-not-found+`]
+option:
+
+[.cl]
+[verse]
+[.prompt]##$## barectf generate my-config.yaml --ignore-include-not-found \
+                   --include-dir=/path/to/project/barectf \
+                   --include-dir=/path/to/base/barectf \
diff --git a/docs/modules/cli/pages/usage.adoc b/docs/modules/cli/pages/usage.adoc
new file mode 100644 (file)
index 0000000..7915ae3
--- /dev/null
@@ -0,0 +1,316 @@
+= `barectf` CLI tool usage
+
+barectf ships with the `barectf` command-line interface (CLI) tool.
+
+== General synopses
+
+Run a `barectf` command:
+
+[.cl]
+[verse]
+*barectf* _COMMAND_ _COMMAND-ARGUMENTS_
+
+Print the version of `barectf`:
+
+[.cl]
+[verse]
+*barectf* pass:[[]xref:#version-option[--version]pass:[\]]
+
+Print brief general help:
+
+[.cl]
+[verse]
+*barectf* pass:[[]xref:#help-option[--help]pass:[\]]
+
+== General description
+
+The `barectf` tool has a Git-like user interface with the following
+available commands:
+
+<<generate-command,`generate`>>::
+    Generate the C source and CTF metadata stream files of a tracer
+    from a xref:yaml:index.adoc[YAML configuration file].
+
+<<show-effective-configuration-command,`show-effective-configuration`>>::
+    Print the _effective_ YAML configuration file for a given YAML
+    configuration file and inclusion directories.
+
+<<show-configuration-version-command,`show-configuration-version`>>::
+    Print the major version (2 or 3) of a YAML configuration file.
+
+== General options
+
+[[help-option]]`-h`::
+`--help`::
+    Print brief general help and exit.
+
+[[version-option]]`-V`::
+`--version`::
+    Print the version of `barectf` and exit.
+
+[[generate-command]]
+== `generate` command
+
+=== Synopses
+
+Generate files from configuration file:
+
+[.cl]
+[verse]
+*barectf generate* pass:[[]xref:#generate-prefix-option[--prefix]=__PREFIX__] pass:[[]xref:#generate-metadata-dir-option[--metadata-dir]=__MDIR__]
+                 pass:[[]xref:#generate-headers-dir-option[--headers-dir]=__HDIR__] pass:[[]xref:#generate-code-dir-option[--code-dir]=__CDIR__]
+                 pass:[[]xref:#generate-include-dir-option[--include-dir]=__IDIR__]...
+                 pass:[[]xref:#generate-ignore-include-not-found-option[--ignore-include-not-found]pass:[\]] _CONFIG-PATH_
+
+Print command's brief help:
+
+[.cl]
+[verse]
+*barectf generate* xref:#generate-help-option[--help]
+
+=== Command name aliases
+
+* `gen`
+
+=== Description
+
+The `barectf generate` command reads the xref:yaml:index.adoc[YAML
+configuration file] `__CONFIG-PATH__` to produce:
+
+[%autowidth.stretch, cols="d,a"]
+|===
+|File name |Description
+
+|`__MDIR__/metadata`
+|The CTF metadata stream file.
+
+|`__HDIR__/__FPREFIX__.h`
+|The generated tracer's public C{nbsp}header file.
+
+|`__HDIR__/__FPREFIX__-bitfield.h`
+|Internal macros for the generated tracer (included by `__FPREFIX__.c`).
+
+|`__CDIR__/__FPREFIX__.c`
+|The generated tracer's C{nbsp}source code.
+|===
+
+See xref:lel[Build the generated C{nbsp}source code] to learn how to
+build the C{nbsp}source which the `generate` command produces.
+
+In the list above, `__FPREFIX__` is:
+
+Without the <<generate-prefix-option,`--prefix`>> option::
+    If the `__CONFIG-PATH__` file has a file name xref:yaml:cfg-obj.adoc#prefix-prop[prefix option]:::
+        The `__CONFIG-PATH__` file's file name prefix option.
+    Otherwise:::
+        `barectf`
+
+With the <<generate-prefix-option,`--prefix`>> option::
+    `__PREFIX__`, without trailing underscores.
++
+For example, if `__PREFIX__` is `my_tracer_`, then `__FPREFIX__` is
+`my_tracer`.
+
+By default, `__MDIR__`, `__HDIR__`, and `__CDIR__` are the current
+working directory. Use the
+<<generate-metadata-dir-option,`--metadata-dir`>>,
+<<generate-headers-dir-option,`--headers-dir`>>, and
+<<generate-code-dir-option,`--code-dir`>> to specify other output
+directories.
+
+Therefore, by default, the `generate` command writes the `metadata`,
+`barectf.h`, `barectf-bitfield.h`, and `barectf.c` files to the current
+working directory.
+
+If you use the <<prefix-option,`--prefix`>> option, then all the
+public C{nbsp}identifiers in `__FPREFIX__.h` and `__FPREFIX__.c` begin
+with `__PREFIX__`. Otherwise, they begin with:
+
+If the `__CONFIG-PATH__` file has an identifier prefix option::
+    The `__CONFIG-PATH__` file's identifier prefix option.
+
+Otherwise::
+    `barectf_`
+
+Add directories to be searched into for inclusion files before the
+default inclusion directories with the repeatable
+<<generate-include-dir-option,`--include-dir`>> option.
+
+By default, if `barectf` can't find an inclusion file while processing
+the `__CONFIG-PATH__` file, the command prints an error and
+<<exit-status,exits>> with a non-zero status. Force
+`barectf generate` to continue silently instead with its
+<<generate-ignore-include-not-found-option,`--ignore-include-not-found`>>
+option.
+
+=== Options
+
+[[generate-code-dir-option]]`-c __CDIR__`::
+`--code-dir=__CDIR__`::
+    Write the C{nbsp}source file to the directory `__CDIR__` instead of
+    the current working directory.
+
+[[generate-headers-dir-option]]`-H __HDIR__`::
+`--headers-dir=__HDIR__`::
+    Write C{nbsp}header files to the directory `__HDIR__` instead of
+    the current working directory.
+
+[[generate-help-option]]`-h`::
+`--help`::
+    Print the `generate` command's brief help and exit.
+
+[[generate-ignore-include-not-found-option]]`--ignore-include-not-found`::
+    Continue to process the `__CONFIG-PATH__` file when inclusion
+    files are not found.
+
+[[generate-include-dir-option]]`-I __IDIR__`::
+`--include-dir=__IDIR__`::
+    Add `__IDIR__` to the list of directories to be searched into for
+    inclusion files before the default inclusion directories.
++
+The default inclusion directories are:
++
+. The current working directory.
+. The directory containing the standard inclusion files
+  (like `stdint.yaml`).
+
+[[generate-metadata-dir-option]]`-m __MDIR__`::
+`--metadata-dir=__MDIR__`::
+    Write the CTF metadata stream file to the directory `__MDIR__`
+    instead of the current working directory.
+
+[[generate-prefix-option]]`-p __PREFIX__`::
+`--prefix=__PREFIX__`::
+    Override the default or `__CONFIG-PATH__` file's file and
+    identifier prefixes with:
++
+File name prefix:::
+    `__PREFIX__`, without trailing underscores.
+Identifier prefix:::
+    `__PREFIX__`
+
++
+--
+The default file name prefix is `barectf`.
+
+The default identifier prefix is `barectf_`.
+--
+
+[[show-effective-configuration-command]]
+== `show-effective-configuration` command
+
+=== Synopses
+
+Show effective configuration:
+
+[.cl]
+[verse]
+*barectf show-effective-configuration* pass:[[]xref:#show-effective-configuration-include-dir-option[--include-dir]=__IDIR__]...
+        pass:[[]xref:#show-effective-configuration-ignore-include-not-found-option[--ignore-include-not-found]pass:[\]] _CONFIG-PATH_
+
+Print command's brief help:
+
+[.cl]
+[verse]
+*barectf show-effective-configuration* xref:#show-effective-configuration-help-option[`--help`]
+
+=== Command name aliases
+
+* `show-effective-config`
+* `show-effective-cfg`
+
+=== Description
+
+The `barectf show-effective-configuration` command reads the
+xref:yaml:index.adoc[YAML configuration file] `__CONFIG-PATH__` and
+prints an equivalent, _effective_ YAML configuration.
+
+See the xref:yaml:index.adoc#stages[processing stages] of a YAML
+configuration file to learn what an effective configuration is.
+
+Moreover, the `show-effective-configuration` command validates the
+`__CONFIG-PATH__` file. In other words, if the command
+<<exit-status,exits>> with status{nbsp}0, the
+<<generate-command,`generate` command>> using the same options and
+`__CONFIG-PATH__` file would also succeed.
+
+Add directories to be searched into for inclusion files before the
+default inclusion directories with the repeatable
+<<show-effective-configuration-include-dir-option,`--include-dir`>> option.
+
+By default, if `barectf` can't find an inclusion file while processing
+the `__CONFIG-PATH__` file, the command prints an error and
+<<exit-status,exits>> with a non-zero status. Force
+`barectf show-effective-configuration` to continue silently instead
+with its
+<<show-effective-configuration-ignore-include-not-found-option,`--ignore-include-not-found`>>
+option.
+
+=== Options
+
+[[show-effective-configuration-help-option]]`-h`::
+`--help`::
+    Print the `show-effective-configuration` command's
+    brief help and exit.
+
+[[show-effective-configuration-ignore-include-not-found-option]]`--ignore-include-not-found`::
+    Continue to process the `__CONFIG-PATH__` file when inclusion
+    files are not found.
+
+[[show-effective-configuration-include-dir-option]]`-I __IDIR__`::
+`--include-dir=__IDIR__`::
+    Add `__IDIR__` to the list of directories to be searched into for
+    inclusion files before the default inclusion directories.
++
+The default inclusion directories are:
++
+. The current working directory.
+. The directory containing the standard inclusion files
+  (like `stdint.yaml`).
+
+[[show-configuration-version-command]]
+== `show-configuration-version` command
+
+=== Synopses
+
+Show configuration file's version:
+
+[.cl]
+[verse]
+*barectf show-configuration-version* _CONFIG-PATH_
+
+Print command's brief help:
+
+[.cl]
+[verse]
+*barectf show-configuration-version* xref:#show-configuration-version-help-option[`--help`]
+
+=== Command name aliases
+
+* `show-config-version`
+* `show-cfg-version`
+
+=== Description
+
+The `barectf show-configuration-version` command reads the
+xref:yaml:index.adoc[YAML configuration file] `__CONFIG-PATH__` and
+prints its version, which is either 2 or 3.
+
+The `show-configuration-version` does _not_ validate the
+`__CONFIG-PATH__` file.
+
+=== Options
+
+[[show-configuration-version-help-option]]`-h`::
+`--help`::
+    Print the `show-configuration-version` command's brief help
+    and exit.
+
+[[exit-status]]
+== Exit status
+
+0::
+    Success
+
+Not 0::
+    Error
diff --git a/docs/modules/how-barectf-works/images/barectf-data-flow.svg b/docs/modules/how-barectf-works/images/barectf-data-flow.svg
new file mode 100644 (file)
index 0000000..82d581f
--- /dev/null
@@ -0,0 +1 @@
+<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1574.33 2336.82"><defs><style>.cls-1{fill:#f2f2f3;}.cls-2,.cls-20,.cls-26,.cls-28,.cls-29{fill:none;}.cls-2,.cls-26,.cls-29{stroke:#231f20;}.cls-2,.cls-26,.cls-28,.cls-29,.cls-36,.cls-37,.cls-7{stroke-miterlimit:10;}.cls-2,.cls-28,.cls-36{stroke-width:3px;}.cls-2{stroke-dasharray:12.06 12.06;}.cls-3{fill:#ffe9cc;}.cls-4{fill:#ffe2bd;}.cls-5{fill:#f8a794;}.cls-6{fill:#f47859;}.cls-7{fill:#d1edf3;stroke:#89cbd3;stroke-width:1.81px;}.cls-8{opacity:0.8;}.cls-9{fill:#c93f63;}.cls-10{opacity:0.85;}.cls-11{fill:#231f20;}.cls-12{fill:#d2e8c7;}.cls-13{fill:#c4e2b6;}.cls-14{fill:#92bc7a;}.cls-15{fill:#7fad66;}.cls-16{fill:#c8d7e8;}.cls-17{fill:#b0d0e8;}.cls-18{fill:#7cb0df;}.cls-19{fill:#2a80c3;}.cls-20{stroke:#5f0f40;stroke-linecap:square;stroke-linejoin:round;stroke-width:8.08px;}.cls-21{fill:#5f0f40;}.cls-22{fill:#85afdd;}.cls-23{fill:#235377;}.cls-24{fill:#fff;}.cls-25,.cls-29{opacity:0.75;}.cls-26,.cls-29{stroke-width:5px;}.cls-27{opacity:0.9;}.cls-28{stroke:#f47859;}.cls-30{fill:#b1d3f0;}.cls-31{fill:#91bae1;}.cls-32{fill:#edf0f1;}.cls-33{fill:#965ba5;}.cls-34{fill:#364a5e;}.cls-35{opacity:0.7;}.cls-36{fill:#f4f4f5;stroke:#7d7d7d;}.cls-37{fill:#de3a6c;stroke:#bb315f;stroke-width:2.58px;}.cls-38{opacity:0.95;}</style></defs><title>howitworks</title><rect class="cls-1" x="999.65" y="1863.17" width="573.19" height="429.18" rx="29.85"/><rect class="cls-2" x="999.65" y="1863.17" width="573.19" height="429.18" rx="29.85"/><g id="surface1"><path class="cls-3" d="M878.53,642.37a5.81,5.81,0,0,0-5.79-5.79H783v28.95a5.79,5.79,0,0,1-5.79,5.79H745.38V798.68a5.8,5.8,0,0,0,5.79,5.78H872.74a5.8,5.8,0,0,0,5.79-5.78Z" transform="translate(-341.21 -94.59)"/><path class="cls-4" d="M783,804.46h89.73a5.78,5.78,0,0,0,5.79-5.78V715A145,145,0,0,1,783,804.46Z" transform="translate(-341.21 -94.59)"/><path class="cls-5" d="M783,665.53V636.58l-37.63,34.74h31.84A5.79,5.79,0,0,0,783,665.53Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M826.43,714.73H765.65a2.89,2.89,0,1,1,0-5.78h60.78a2.89,2.89,0,1,1,0,5.78Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M839,732.1H765.65a2.9,2.9,0,1,1,0-5.79H839a2.9,2.9,0,1,1,0,5.79Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M800.87,749.47H765.65a2.9,2.9,0,1,1,0-5.79h35.22a2.9,2.9,0,1,1,0,5.79Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M843.8,697.37h-55a2.9,2.9,0,0,1,0-5.79h55a2.9,2.9,0,0,1,0,5.79Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M777.22,697.37H765.65a2.9,2.9,0,1,1,0-5.79h11.57a2.9,2.9,0,1,1,0,5.79Z" transform="translate(-341.21 -94.59)"/></g><path class="cls-7" d="M894.15,654H806.91a4.61,4.61,0,0,0-4.59,4.59v41.33a4.61,4.61,0,0,0,4.59,4.59h87.24a4.6,4.6,0,0,0,4.59-4.59V658.54A4.6,4.6,0,0,0,894.15,654Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M821.12,766.84H765.65a2.9,2.9,0,1,1,0-5.79h55.47a2.9,2.9,0,0,1,0,5.79Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M791.7,784.2H765.65a2.9,2.9,0,1,1,0-5.79H791.7a2.9,2.9,0,0,1,0,5.79Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M833.43,749.47H812.68a2.9,2.9,0,0,1,0-5.79h20.75a2.9,2.9,0,1,1,0,5.79Z" transform="translate(-341.21 -94.59)"/><g class="cls-8"><path class="cls-9" d="M859.79,690.69a15.21,15.21,0,0,1-6.29,1.09c-7.74,0-12.45-4.85-12.45-12.27,0-8,5.57-12.88,13-12.88a14,14,0,0,1,5.93,1.09l-1,3.54a11.92,11.92,0,0,0-4.77-.94c-5,0-8.54,3.11-8.54,9,0,5.35,3.15,8.79,8.5,8.79a12.33,12.33,0,0,0,4.85-.91Z" transform="translate(-341.21 -94.59)"/></g><g class="cls-10"><path class="cls-11" d="M758.8,840.22a10.48,10.48,0,0,1-.54,3.49,7.33,7.33,0,0,1-1.53,2.61,6.5,6.5,0,0,1-2.42,1.64,8.49,8.49,0,0,1-3.2.57,15.47,15.47,0,0,1-2.84-.26,14.55,14.55,0,0,1-2.88-.85V826.27h2.72v6.08l-.12,2.9a7,7,0,0,1,2.5-2.22,6.39,6.39,0,0,1,2.87-.65,4.84,4.84,0,0,1,2.36.56,4.78,4.78,0,0,1,1.7,1.59,7.45,7.45,0,0,1,1,2.46A14.56,14.56,0,0,1,758.8,840.22Zm-2.78.13a13.23,13.23,0,0,0-.18-2.27,5.78,5.78,0,0,0-.57-1.76,3.14,3.14,0,0,0-1-1.15,2.51,2.51,0,0,0-1.46-.42,3.48,3.48,0,0,0-1,.17,4.3,4.3,0,0,0-1.1.54,8.63,8.63,0,0,0-1.21,1,15.57,15.57,0,0,0-1.35,1.57v7.61a10.2,10.2,0,0,0,1.63.49,7.35,7.35,0,0,0,1.57.18,5.3,5.3,0,0,0,1.79-.3,3.52,3.52,0,0,0,1.5-1,4.79,4.79,0,0,0,1-1.84A9,9,0,0,0,756,840.35Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M773.06,848.35l-.06-2.11a8.61,8.61,0,0,1-2.6,1.83,7.07,7.07,0,0,1-2.77.56,6.79,6.79,0,0,1-2.3-.35,4.27,4.27,0,0,1-1.57-.94,3.73,3.73,0,0,1-.91-1.42,5.28,5.28,0,0,1-.29-1.76,4.4,4.4,0,0,1,1.76-3.7,8.52,8.52,0,0,1,5.2-1.33h3.25v-1.38a2.91,2.91,0,0,0-.89-2.22,3.85,3.85,0,0,0-2.72-.84,11.51,11.51,0,0,0-2.62.3,18.87,18.87,0,0,0-2.66.84v-2.45c.34-.13.72-.25,1.15-.37s.86-.23,1.33-.32,1-.17,1.47-.23,1-.08,1.55-.08a9.66,9.66,0,0,1,2.56.31,5.37,5.37,0,0,1,1.93.95,4.31,4.31,0,0,1,1.21,1.61,5.73,5.73,0,0,1,.42,2.28v10.82Zm-.29-7.14h-3.46a6.48,6.48,0,0,0-1.75.2,3.2,3.2,0,0,0-1.2.58,2.32,2.32,0,0,0-.69.9,2.76,2.76,0,0,0-.23,1.18,2.72,2.72,0,0,0,.14.86,1.89,1.89,0,0,0,.45.74,2.15,2.15,0,0,0,.82.5,3.34,3.34,0,0,0,1.21.19,5.12,5.12,0,0,0,2.15-.57,10.59,10.59,0,0,0,2.56-1.8Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M781.22,832.66h2.49l.07,2.89a10.07,10.07,0,0,1,2.75-2.42,5.56,5.56,0,0,1,2.72-.75A4.43,4.43,0,0,1,793,834a7,7,0,0,1,1.16,4.68h-2.75a5.17,5.17,0,0,0-.6-3,2.17,2.17,0,0,0-1.9-.93,3.33,3.33,0,0,0-1.1.2,4.6,4.6,0,0,0-1.14.62,10.67,10.67,0,0,0-1.24,1.1,19.55,19.55,0,0,0-1.41,1.63v10.08h-2.75Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M811.42,839.67c0,.39,0,.71,0,1s0,.51,0,.74h-11a4.86,4.86,0,0,0,1.34,3.69,5.38,5.38,0,0,0,3.87,1.29c.46,0,.92,0,1.38-.05s.9-.09,1.33-.15.83-.13,1.22-.21.76-.17,1.09-.26v2.23a18.79,18.79,0,0,1-2.51.51,21,21,0,0,1-2.9.2,9.66,9.66,0,0,1-3.46-.55,5.84,5.84,0,0,1-2.39-1.59A6.42,6.42,0,0,1,798,844a12,12,0,0,1-.45-3.42,10.1,10.1,0,0,1,.48-3.13,7.87,7.87,0,0,1,1.39-2.59,6.72,6.72,0,0,1,2.24-1.78,6.84,6.84,0,0,1,3-.65,7.7,7.7,0,0,1,2.9.51,5.9,5.9,0,0,1,2.14,1.46,6.41,6.41,0,0,1,1.31,2.3A9.54,9.54,0,0,1,811.42,839.67Zm-2.82-.39a5.87,5.87,0,0,0-.21-1.91,3.84,3.84,0,0,0-.77-1.49,3.59,3.59,0,0,0-1.31-1,4.43,4.43,0,0,0-1.81-.35,3.76,3.76,0,0,0-1.62.34,3.88,3.88,0,0,0-1.27,1,5.21,5.21,0,0,0-.86,1.5,6.89,6.89,0,0,0-.4,1.92Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M828,847.77a12,12,0,0,1-2.18.6,13.5,13.5,0,0,1-2.31.2,7.76,7.76,0,0,1-5.73-2,8,8,0,0,1-2-5.89,9.55,9.55,0,0,1,.57-3.38,7.56,7.56,0,0,1,1.63-2.59,7.15,7.15,0,0,1,2.5-1.66,8.52,8.52,0,0,1,3.2-.59,14.69,14.69,0,0,1,2.28.17,9.91,9.91,0,0,1,2,.56v2.6a8.76,8.76,0,0,0-2.08-.78,9.69,9.69,0,0,0-2.17-.24,5.07,5.07,0,0,0-2,.4,4.79,4.79,0,0,0-1.63,1.15,5.4,5.4,0,0,0-1.11,1.83,6.9,6.9,0,0,0-.41,2.44,5.86,5.86,0,0,0,1.38,4.25,5.09,5.09,0,0,0,3.84,1.42A9.58,9.58,0,0,0,826,846a9.39,9.39,0,0,0,2-.75Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M846,848.13a13,13,0,0,1-1.9.33,19,19,0,0,1-2,.11,6.34,6.34,0,0,1-4.41-1.34,5.31,5.31,0,0,1-1.45-4.1v-8.19h-4.39v-2.28h4.39v-4.31l2.72-.71v5h7v2.28h-7v8a3.27,3.27,0,0,0,.89,2.52,3.76,3.76,0,0,0,2.65.84,12.3,12.3,0,0,0,1.64-.12,14.91,14.91,0,0,0,1.86-.37Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M864.88,828.8a18.38,18.38,0,0,0-3.69-.45q-3.68,0-3.67,3.84v2.75h6.87v2.27h-6.87v11.14h-2.77V837.21h-5v-2.27h5v-2.59q0-6.27,6.53-6.27a19.45,19.45,0,0,1,3.6.38Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M874.72,843.42a2.63,2.63,0,0,1,1.84.77,2.66,2.66,0,0,1,.55.84,2.48,2.48,0,0,1,.2,1,2.42,2.42,0,0,1-.2,1,2.57,2.57,0,0,1-.55.82,2.61,2.61,0,0,1-.83.55,2.5,2.5,0,0,1-1,.21,2.44,2.44,0,0,1-1-.21,2.61,2.61,0,0,1-.83-.55,2.75,2.75,0,0,1-.55-.82,2.42,2.42,0,0,1-.2-1,2.48,2.48,0,0,1,.2-1,2.84,2.84,0,0,1,.55-.84,2.48,2.48,0,0,1,.83-.56A2.44,2.44,0,0,1,874.72,843.42Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M898.33,847.77a12,12,0,0,1-2.18.6,13.3,13.3,0,0,1-2.3.2,7.76,7.76,0,0,1-5.73-2,8,8,0,0,1-2-5.89,9.33,9.33,0,0,1,.58-3.38,7.54,7.54,0,0,1,1.62-2.59,7.25,7.25,0,0,1,2.5-1.66,8.53,8.53,0,0,1,3.21-.59,14.88,14.88,0,0,1,2.28.17,9.82,9.82,0,0,1,2,.56v2.6a8.86,8.86,0,0,0-2.07-.78,9.78,9.78,0,0,0-2.18-.24,5.07,5.07,0,0,0-2,.4,4.89,4.89,0,0,0-1.63,1.15,5.4,5.4,0,0,0-1.11,1.83,6.9,6.9,0,0,0-.4,2.44,5.86,5.86,0,0,0,1.38,4.25,5.09,5.09,0,0,0,3.83,1.42,9.51,9.51,0,0,0,2.15-.25,9.39,9.39,0,0,0,2-.75Z" transform="translate(-341.21 -94.59)"/></g><g id="surface1-2" data-name="surface1"><path class="cls-12" d="M1145.5,997.41a5.81,5.81,0,0,0-5.79-5.79H1050v28.94a5.79,5.79,0,0,1-5.79,5.79h-31.84v127.36a5.81,5.81,0,0,0,5.79,5.79h121.57a5.81,5.81,0,0,0,5.79-5.79Z" transform="translate(-341.21 -94.59)"/><path class="cls-13" d="M1050,1159.5h89.73a5.79,5.79,0,0,0,5.79-5.79V1070A145.07,145.07,0,0,1,1050,1159.5Z" transform="translate(-341.21 -94.59)"/><path class="cls-14" d="M1050,1020.56V991.62l-37.63,34.73h31.84A5.79,5.79,0,0,0,1050,1020.56Z" transform="translate(-341.21 -94.59)"/><path class="cls-15" d="M1093.39,1069.77h-60.78a2.9,2.9,0,0,1,0-5.79h60.78a2.9,2.9,0,1,1,0,5.79Z" transform="translate(-341.21 -94.59)"/><path class="cls-15" d="M1106,1087.14h-73.35a2.9,2.9,0,0,1,0-5.79H1106a2.9,2.9,0,0,1,0,5.79Z" transform="translate(-341.21 -94.59)"/><path class="cls-15" d="M1067.84,1104.5h-35.23a2.9,2.9,0,0,1,0-5.79h35.23a2.9,2.9,0,0,1,0,5.79Z" transform="translate(-341.21 -94.59)"/><path class="cls-15" d="M1110.76,1052.4h-55a2.9,2.9,0,1,1,0-5.79h55a2.9,2.9,0,1,1,0,5.79Z" transform="translate(-341.21 -94.59)"/><path class="cls-15" d="M1044.19,1052.4h-11.58a2.9,2.9,0,0,1,0-5.79h11.58a2.9,2.9,0,0,1,0,5.79Z" transform="translate(-341.21 -94.59)"/></g><path class="cls-7" d="M1161.12,1009h-87.25a4.61,4.61,0,0,0-4.59,4.6v41.32a4.6,4.6,0,0,0,4.59,4.59h87.25a4.6,4.6,0,0,0,4.59-4.59v-41.32A4.61,4.61,0,0,0,1161.12,1009Z" transform="translate(-341.21 -94.59)"/><path class="cls-15" d="M1088.08,1121.87h-55.47a2.9,2.9,0,0,1,0-5.79h55.47a2.9,2.9,0,1,1,0,5.79Z" transform="translate(-341.21 -94.59)"/><path class="cls-15" d="M1058.66,1139.24h-26.05a2.9,2.9,0,0,1,0-5.79h26.05a2.9,2.9,0,0,1,0,5.79Z" transform="translate(-341.21 -94.59)"/><path class="cls-15" d="M1100.4,1104.5h-20.75a2.9,2.9,0,1,1,0-5.79h20.75a2.9,2.9,0,0,1,0,5.79Z" transform="translate(-341.21 -94.59)"/><g class="cls-8"><path class="cls-9" d="M1126.76,1045.73a15.51,15.51,0,0,1-6.3,1.08c-7.74,0-12.45-4.85-12.45-12.26,0-8,5.58-12.89,13-12.89a14.06,14.06,0,0,1,5.94,1.09l-1,3.55a11.81,11.81,0,0,0-4.78-.94c-5,0-8.54,3.11-8.54,9,0,5.35,3.15,8.79,8.51,8.79a12.47,12.47,0,0,0,4.84-.9Z" transform="translate(-341.21 -94.59)"/></g><g class="cls-10"><path class="cls-11" d="M1017,1195.26a10.39,10.39,0,0,1-.59,3.65,7.19,7.19,0,0,1-1.62,2.6,6.63,6.63,0,0,1-2.43,1.54,8.68,8.68,0,0,1-3.05.52,14.72,14.72,0,0,1-1.49-.08,10.2,10.2,0,0,1-1.51-.27v6.57h-2.72v-22.1H1006l.17,2.63a7,7,0,0,1,2.5-2.26,6.54,6.54,0,0,1,2.88-.65,4.87,4.87,0,0,1,2.36.56,5,5,0,0,1,1.7,1.59,7.5,7.5,0,0,1,1,2.47A13.9,13.9,0,0,1,1017,1195.26Zm-2.79.12a14.47,14.47,0,0,0-.17-2.27,6.27,6.27,0,0,0-.58-1.76,3.13,3.13,0,0,0-1-1.15,2.47,2.47,0,0,0-1.45-.41,3.57,3.57,0,0,0-1.05.16,4.18,4.18,0,0,0-1.1.55,7.85,7.85,0,0,0-1.2,1,16.77,16.77,0,0,0-1.35,1.57v7.61a8.07,8.07,0,0,0,1.58.49,7.59,7.59,0,0,0,1.62.18,4.23,4.23,0,0,0,3.45-1.49A6.82,6.82,0,0,0,1014.18,1195.38Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M1026.5,1183.54h-4.64v-2.24h7.39v19.81h4.67v2.27h-12.58v-2.27h5.16Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M1048.83,1203.38l-.07-2.11a8.61,8.61,0,0,1-2.6,1.83,7.07,7.07,0,0,1-2.77.56,6.8,6.8,0,0,1-2.3-.34,4.37,4.37,0,0,1-1.57-1,3.77,3.77,0,0,1-.91-1.41,5.3,5.3,0,0,1-.28-1.77,4.37,4.37,0,0,1,1.75-3.69,8.54,8.54,0,0,1,5.2-1.34h3.25v-1.37a2.93,2.93,0,0,0-.89-2.23,3.85,3.85,0,0,0-2.72-.84,11.51,11.51,0,0,0-2.62.3,18.87,18.87,0,0,0-2.66.84v-2.45c.34-.12.72-.25,1.15-.37s.86-.22,1.33-.32,1-.17,1.47-.22a13.3,13.3,0,0,1,1.55-.09,10,10,0,0,1,2.56.31,5.22,5.22,0,0,1,1.93,1,4.06,4.06,0,0,1,1.21,1.61,5.66,5.66,0,0,1,.42,2.28v10.81Zm-.3-7.14h-3.45a6.8,6.8,0,0,0-1.75.2,3.41,3.41,0,0,0-1.21.58,2.32,2.32,0,0,0-.69.9,3,3,0,0,0-.23,1.18,2.83,2.83,0,0,0,.14.87,2,2,0,0,0,.45.73,2.3,2.3,0,0,0,.82.51,3.59,3.59,0,0,0,1.22.19,5.11,5.11,0,0,0,2.14-.57,10.65,10.65,0,0,0,2.56-1.81Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M1069,1203.16a13,13,0,0,1-1.9.34c-.66.06-1.33.1-2,.1a6.34,6.34,0,0,1-4.41-1.34,5.29,5.29,0,0,1-1.45-4.1V1190h-4.39v-2.28h4.39v-4.31l2.71-.7v5h7V1190h-7v8a3.29,3.29,0,0,0,.9,2.53,3.79,3.79,0,0,0,2.65.83,12.3,12.3,0,0,0,1.64-.12,14.82,14.82,0,0,0,1.86-.36Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M1087.86,1183.83a18.38,18.38,0,0,0-3.69-.45q-3.68,0-3.67,3.84V1190h6.87v2.27h-6.87v11.14h-2.77v-11.14h-5V1190h5v-2.59q0-6.27,6.53-6.27a19.45,19.45,0,0,1,3.6.38Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M1105.18,1195.41a10.47,10.47,0,0,1-.51,3.35,7.28,7.28,0,0,1-1.49,2.61,6.55,6.55,0,0,1-2.35,1.69,7.91,7.91,0,0,1-3.16.6,8.17,8.17,0,0,1-3-.52,6,6,0,0,1-2.27-1.54,6.88,6.88,0,0,1-1.42-2.52,11,11,0,0,1-.49-3.45,10.4,10.4,0,0,1,.51-3.34,7.52,7.52,0,0,1,1.49-2.59,6.63,6.63,0,0,1,2.36-1.69,7.83,7.83,0,0,1,3.15-.6,8.48,8.48,0,0,1,3,.52,6,6,0,0,1,2.26,1.54,6.71,6.71,0,0,1,1.42,2.5A11,11,0,0,1,1105.18,1195.41Zm-2.78.13a8.77,8.77,0,0,0-.32-2.54,5.18,5.18,0,0,0-.91-1.82,3.89,3.89,0,0,0-1.45-1.09,4.79,4.79,0,0,0-1.89-.37,4.25,4.25,0,0,0-2.09.48,4.14,4.14,0,0,0-1.42,1.27,5.5,5.5,0,0,0-.81,1.86,9.89,9.89,0,0,0,.06,4.75,5.1,5.1,0,0,0,.91,1.82,3.86,3.86,0,0,0,1.44,1.1,4.82,4.82,0,0,0,1.91.36,4.23,4.23,0,0,0,2.08-.47,4.06,4.06,0,0,0,1.42-1.28,5.57,5.57,0,0,0,.82-1.85A9.38,9.38,0,0,0,1102.4,1195.54Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M1109.76,1187.69h2.49l.08,2.89a10,10,0,0,1,2.74-2.42,5.56,5.56,0,0,1,2.72-.75,4.46,4.46,0,0,1,3.7,1.58,7,7,0,0,1,1.16,4.69h-2.75a5.18,5.18,0,0,0-.6-3,2.18,2.18,0,0,0-1.9-.92,3.31,3.31,0,0,0-1.1.19,4.35,4.35,0,0,0-1.14.63,9.72,9.72,0,0,0-1.24,1.1,21,21,0,0,0-1.41,1.62v10.08h-2.75Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M1137.9,1203.38v-11.27c0-.48,0-.89-.05-1.2a2.8,2.8,0,0,0-.17-.74.73.73,0,0,0-.75-.49,1,1,0,0,0-.57.18,2.63,2.63,0,0,0-.57.61,10.51,10.51,0,0,0-.68,1.12c-.24.46-.53,1-.86,1.71v10.08h-2.49v-11c0-.57,0-1,0-1.39a4,4,0,0,0-.17-.83.77.77,0,0,0-.31-.4.79.79,0,0,0-.45-.11,1,1,0,0,0-.53.15,2.52,2.52,0,0,0-.56.57,9,9,0,0,0-.68,1.11c-.25.46-.54,1.06-.89,1.79v10.08h-2.5v-15.69h2.08l.13,3a15,15,0,0,1,.78-1.52,5.46,5.46,0,0,1,.79-1,2.75,2.75,0,0,1,.87-.56,2.8,2.8,0,0,1,1-.18,2.32,2.32,0,0,1,1.93.83,4.15,4.15,0,0,1,.65,2.56c.25-.54.5-1,.74-1.44a5.08,5.08,0,0,1,.77-1.07,3.12,3.12,0,0,1,.91-.65,2.82,2.82,0,0,1,1.16-.23q3,0,3,4.55v11.42Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M1150.48,1198.46a2.55,2.55,0,0,1,2.39,1.6,2.52,2.52,0,0,1,.21,1,2.39,2.39,0,0,1-.21,1,2.46,2.46,0,0,1-.55.82,2.57,2.57,0,0,1-1.84.76,2.6,2.6,0,0,1-1-.2,2.68,2.68,0,0,1-1.38-1.38,2.55,2.55,0,0,1-.2-1,2.61,2.61,0,0,1,.76-1.86,2.49,2.49,0,0,1,.82-.56A2.6,2.6,0,0,1,1150.48,1198.46Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M1174.09,1202.8a11.73,11.73,0,0,1-2.18.6,13.3,13.3,0,0,1-2.3.2,7.72,7.72,0,0,1-5.73-2,8,8,0,0,1-2-5.89,9.27,9.27,0,0,1,.58-3.37,7.61,7.61,0,0,1,1.63-2.6,7.2,7.2,0,0,1,2.5-1.66,8.44,8.44,0,0,1,3.2-.59,13.69,13.69,0,0,1,2.28.18,9.24,9.24,0,0,1,2,.56v2.59a8.82,8.82,0,0,0-2.07-.77,9.78,9.78,0,0,0-2.18-.24,5.07,5.07,0,0,0-2,.39,4.89,4.89,0,0,0-1.63,1.15,5.4,5.4,0,0,0-1.11,1.83,6.9,6.9,0,0,0-.4,2.44,5.88,5.88,0,0,0,1.38,4.26,5.12,5.12,0,0,0,3.83,1.41,9,9,0,0,0,2.15-.25,9.2,9.2,0,0,0,2-.75Z" transform="translate(-341.21 -94.59)"/></g><g id="surface1-3" data-name="surface1"><path class="cls-16" d="M519.43,150.76a5.81,5.81,0,0,0-5.79-5.79H423.91v28.94a5.79,5.79,0,0,1-5.79,5.79H386.28V307.06a5.81,5.81,0,0,0,5.79,5.79H513.64a5.81,5.81,0,0,0,5.79-5.79Z" transform="translate(-341.21 -94.59)"/><path class="cls-17" d="M423.91,312.85h89.73a5.79,5.79,0,0,0,5.79-5.79V223.38A145.05,145.05,0,0,1,423.91,312.85Z" transform="translate(-341.21 -94.59)"/><path class="cls-18" d="M423.91,173.91V145L386.28,179.7h31.84A5.79,5.79,0,0,0,423.91,173.91Z" transform="translate(-341.21 -94.59)"/><path class="cls-19" d="M467.33,223.12H406.54a2.9,2.9,0,0,1,0-5.79h60.79a2.9,2.9,0,0,1,0,5.79Z" transform="translate(-341.21 -94.59)"/><path class="cls-19" d="M479.89,240.49H406.54a2.9,2.9,0,0,1,0-5.79h73.35a2.9,2.9,0,0,1,0,5.79Z" transform="translate(-341.21 -94.59)"/><path class="cls-19" d="M441.77,257.85H406.54a2.9,2.9,0,0,1,0-5.79h35.23a2.9,2.9,0,0,1,0,5.79Z" transform="translate(-341.21 -94.59)"/><path class="cls-19" d="M484.7,205.75h-55a2.9,2.9,0,0,1,0-5.79h55a2.9,2.9,0,0,1,0,5.79Z" transform="translate(-341.21 -94.59)"/><path class="cls-19" d="M418.12,205.75H406.54a2.9,2.9,0,0,1,0-5.79h11.58a2.9,2.9,0,1,1,0,5.79Z" transform="translate(-341.21 -94.59)"/></g><path class="cls-7" d="M535.05,162.33H447.81a4.6,4.6,0,0,0-4.59,4.6v41.32a4.6,4.6,0,0,0,4.59,4.59h87.24a4.6,4.6,0,0,0,4.59-4.59V166.93A4.61,4.61,0,0,0,535.05,162.33Z" transform="translate(-341.21 -94.59)"/><path class="cls-19" d="M462,275.22H406.54a2.9,2.9,0,0,1,0-5.79H462a2.9,2.9,0,0,1,0,5.79Z" transform="translate(-341.21 -94.59)"/><path class="cls-19" d="M432.59,292.59h-26a2.9,2.9,0,0,1,0-5.79h26a2.9,2.9,0,1,1,0,5.79Z" transform="translate(-341.21 -94.59)"/><path class="cls-19" d="M474.33,257.85H453.58a2.9,2.9,0,0,1,0-5.79h20.75a2.9,2.9,0,1,1,0,5.79Z" transform="translate(-341.21 -94.59)"/><g class="cls-8"><path class="cls-9" d="M459.72,198.37v-9l-6.82-12.57h4.48l2.59,5.53c.74,1.6,1.28,2.82,1.86,4.29h.06c.55-1.38,1.16-2.72,1.89-4.29l2.59-5.53h4.45l-7.17,12.48v9.08Z" transform="translate(-341.21 -94.59)"/><path class="cls-9" d="M474.76,192.26l-1.86,6.11h-4.06l6.91-21.56h5l7,21.56h-4.22l-1.95-6.11Zm6.17-3L479.24,184c-.42-1.31-.77-2.78-1.09-4h-.06c-.32,1.25-.64,2.75-1,4l-1.66,5.32Z" transform="translate(-341.21 -94.59)"/><path class="cls-9" d="M508.9,189.57c-.13-2.78-.29-6.14-.25-9h-.1c-.71,2.62-1.6,5.53-2.56,8.25l-3.14,9.35h-3l-2.88-9.22c-.83-2.75-1.6-5.7-2.17-8.38h-.07c-.09,2.81-.22,6.24-.38,9.18l-.48,8.67h-3.68l1.44-21.56h5.18l2.82,8.67c.77,2.52,1.44,5.08,2,7.48h.1c.58-2.33,1.31-5,2.14-7.51l3-8.64h5.12l1.25,21.56h-3.84Z" transform="translate(-341.21 -94.59)"/><path class="cls-9" d="M517.16,176.81h3.93v18.27H530v3.29h-12.8Z" transform="translate(-341.21 -94.59)"/></g><g class="cls-10"><path class="cls-11" d="M353.49,355.15V343.89a10,10,0,0,0-.05-1.2,2.88,2.88,0,0,0-.17-.75.8.8,0,0,0-.3-.38.87.87,0,0,0-.44-.11.94.94,0,0,0-.58.19,2.44,2.44,0,0,0-.57.61,8.8,8.8,0,0,0-.68,1.12c-.24.46-.53,1-.86,1.71v10.07h-2.49v-11c0-.58,0-1-.05-1.39a3.83,3.83,0,0,0-.17-.83.76.76,0,0,0-.31-.41.88.88,0,0,0-.45-.11.92.92,0,0,0-.53.16,2.25,2.25,0,0,0-.56.56,9,9,0,0,0-.68,1.11c-.25.47-.54,1.07-.89,1.8v10.07h-2.5V339.47h2.08l.13,3a14.78,14.78,0,0,1,.78-1.51,4.86,4.86,0,0,1,.79-1,2.58,2.58,0,0,1,.87-.56,2.8,2.8,0,0,1,1-.18,2.32,2.32,0,0,1,1.93.82,4.19,4.19,0,0,1,.65,2.57c.25-.54.5-1,.74-1.45a5.27,5.27,0,0,1,.77-1.06,3,3,0,0,1,.91-.66,2.82,2.82,0,0,1,1.16-.22q3,0,2.95,4.54v11.42Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M373.85,339.47l-5.34,14a27.46,27.46,0,0,1-1.71,3.69,11.14,11.14,0,0,1-1.93,2.54,7,7,0,0,1-2.3,1.46,7.93,7.93,0,0,1-2.79.46H359l-.72-.05v-2.47l.75.09a7.88,7.88,0,0,0,.86,0,4.24,4.24,0,0,0,1.4-.22,3.85,3.85,0,0,0,1.23-.71,6.77,6.77,0,0,0,1.11-1.27,14.27,14.27,0,0,0,1-1.9l-6.27-15.68h3.1l4,10.37.8,2.44.91-2.5,3.67-10.31Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M388.46,347.92h-9.34v-2.56h9.34Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M407.28,354.58a12,12,0,0,1-2.18.6,13.5,13.5,0,0,1-2.31.19,7.75,7.75,0,0,1-5.73-2,8,8,0,0,1-2-5.89,9.55,9.55,0,0,1,.57-3.38,7.56,7.56,0,0,1,1.63-2.59,7.32,7.32,0,0,1,2.5-1.67,8.51,8.51,0,0,1,3.2-.58,14.79,14.79,0,0,1,2.28.17,9.91,9.91,0,0,1,2,.56v2.6a8.76,8.76,0,0,0-2.08-.78,9.69,9.69,0,0,0-2.17-.24,4.9,4.9,0,0,0-2,.4,4.79,4.79,0,0,0-1.63,1.15,5.4,5.4,0,0,0-1.11,1.83,6.62,6.62,0,0,0-.41,2.43,5.87,5.87,0,0,0,1.38,4.26,5.13,5.13,0,0,0,3.84,1.42,9.58,9.58,0,0,0,2.15-.25,9.39,9.39,0,0,0,2-.75Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M426.34,347.19a10.28,10.28,0,0,1-.52,3.35,7.59,7.59,0,0,1-1.48,2.61,6.78,6.78,0,0,1-2.36,1.68,7.75,7.75,0,0,1-3.16.61,8.21,8.21,0,0,1-3-.53,6,6,0,0,1-2.27-1.54,6.75,6.75,0,0,1-1.42-2.51,11,11,0,0,1-.49-3.46,10.34,10.34,0,0,1,.51-3.33,7.43,7.43,0,0,1,1.49-2.59,6.51,6.51,0,0,1,2.36-1.69,7.87,7.87,0,0,1,3.15-.6,8.23,8.23,0,0,1,3,.52,6,6,0,0,1,2.26,1.53,6.77,6.77,0,0,1,1.43,2.51A11.24,11.24,0,0,1,426.34,347.19Zm-2.78.12a9.18,9.18,0,0,0-.32-2.54,5.14,5.14,0,0,0-.92-1.81,3.75,3.75,0,0,0-1.44-1.09,4.67,4.67,0,0,0-1.9-.37,4.27,4.27,0,0,0-2.09.48,4,4,0,0,0-1.42,1.27,5.45,5.45,0,0,0-.81,1.85,9.36,9.36,0,0,0-.26,2.21,9.25,9.25,0,0,0,.32,2.55,5.18,5.18,0,0,0,.91,1.82,3.83,3.83,0,0,0,1.44,1.09,4.65,4.65,0,0,0,1.91.37,4.21,4.21,0,0,0,2.08-.48,4.07,4.07,0,0,0,1.43-1.27,5.45,5.45,0,0,0,.81-1.85A9.53,9.53,0,0,0,423.56,347.31Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M430.28,339.47h2.42l.11,2.53a11.36,11.36,0,0,1,1.32-1.35,7.53,7.53,0,0,1,1.26-.87,4.67,4.67,0,0,1,1.26-.46,6.45,6.45,0,0,1,1.33-.13,4.57,4.57,0,0,1,3.66,1.43,6.38,6.38,0,0,1,1.24,4.3v10.23h-2.71v-10a4.42,4.42,0,0,0-.69-2.73,2.43,2.43,0,0,0-2.05-.88,3.28,3.28,0,0,0-1,.15,3.9,3.9,0,0,0-1,.51,8.6,8.6,0,0,0-1.11,1,18.5,18.5,0,0,0-1.36,1.56v10.4h-2.71Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M461.79,335.61a18.47,18.47,0,0,0-3.69-.46c-2.45,0-3.67,1.29-3.67,3.85v2.75h6.88V344h-6.88v11.14h-2.76V344h-5.05v-2.26h5.05v-2.6q0-6.25,6.53-6.26a19.28,19.28,0,0,1,3.59.37Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M470.81,341.72h-4.64v-2.25h7.39v13.42h4.67v2.26H465.65v-2.26h5.16Zm.95-8.83a2.08,2.08,0,0,1,1.52.62,2.21,2.21,0,0,1,.46.68,2.16,2.16,0,0,1-2.82,2.82,2,2,0,0,1-.68-.46,2.14,2.14,0,0,1-.46-.69,2.26,2.26,0,0,1,0-1.67,2.21,2.21,0,0,1,.46-.68,2,2,0,0,1,.68-.46A2.13,2.13,0,0,1,471.76,332.89Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M494.35,341.69A4.07,4.07,0,0,1,495,343a5,5,0,0,1,.25,1.57,5.45,5.45,0,0,1-.45,2.23,5,5,0,0,1-1.26,1.72,5.88,5.88,0,0,1-1.94,1.12,7.41,7.41,0,0,1-2.5.4,7.74,7.74,0,0,1-1.84-.21,4.64,4.64,0,0,1-1.36-.53c-.2.3-.36.57-.5.83a1.93,1.93,0,0,0-.2.88,1.16,1.16,0,0,0,.57,1,2.78,2.78,0,0,0,1.51.42l4.12.16a9.24,9.24,0,0,1,2.17.3,5.3,5.3,0,0,1,1.7.76,3.75,3.75,0,0,1,1.11,1.24,3.56,3.56,0,0,1,.4,1.7,4.46,4.46,0,0,1-1.86,3.63,7.38,7.38,0,0,1-2.39,1.14,12.55,12.55,0,0,1-3.46.42,14.35,14.35,0,0,1-3.24-.31,7,7,0,0,1-2.19-.84,3.26,3.26,0,0,1-1.64-2.92,3.69,3.69,0,0,1,.53-2A5.94,5.94,0,0,1,484.2,354a2.74,2.74,0,0,1-.71-.47,2.74,2.74,0,0,1-.76-1.33,3.13,3.13,0,0,1-.1-.73,3.68,3.68,0,0,1,.48-1.86,10.3,10.3,0,0,1,1.13-1.6,7.9,7.9,0,0,1-.52-.7,4.73,4.73,0,0,1-.39-.74,4.53,4.53,0,0,1-.25-.86,5.59,5.59,0,0,1-.09-1.06,5.37,5.37,0,0,1,.45-2.22,5,5,0,0,1,1.25-1.73,5.78,5.78,0,0,1,1.94-1.12,7.62,7.62,0,0,1,2.5-.39,7.87,7.87,0,0,1,1.11.07,6.31,6.31,0,0,1,.94.21h5.69v2.22Zm-9.43,15.73a1.69,1.69,0,0,0,1.15,1.62,8.2,8.2,0,0,0,3.22.51,8.48,8.48,0,0,0,2.18-.24,4.36,4.36,0,0,0,1.42-.62,2.28,2.28,0,0,0,.78-.87,2.44,2.44,0,0,0,.23-1,1.53,1.53,0,0,0-.78-1.41,5.6,5.6,0,0,0-2.39-.53l-4.1-.14a7.43,7.43,0,0,0-.85.67,2.83,2.83,0,0,0-.52.67,2.69,2.69,0,0,0-.27.67A3.08,3.08,0,0,0,484.92,357.42Zm.82-12.83A3.85,3.85,0,0,0,486,346a3,3,0,0,0,.71,1.06,3.21,3.21,0,0,0,1.07.68,3.7,3.7,0,0,0,1.36.24,3.64,3.64,0,0,0,1.45-.27,3,3,0,0,0,1.06-.74,3.34,3.34,0,0,0,.66-1.08,3.66,3.66,0,0,0,.23-1.27,3.75,3.75,0,0,0-.25-1.37,3,3,0,0,0-1.78-1.74,3.56,3.56,0,0,0-1.37-.25,3.62,3.62,0,0,0-1.44.28,3.17,3.17,0,0,0-1.06.75,3,3,0,0,0-.66,1.07A3.56,3.56,0,0,0,485.74,344.59Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M506.82,350.23a2.63,2.63,0,0,1,1.84.77,2.73,2.73,0,0,1,.55.83,2.53,2.53,0,0,1,.21,1,2.42,2.42,0,0,1-.21,1,2.69,2.69,0,0,1-.55.82,2.61,2.61,0,0,1-.83.55,2.47,2.47,0,0,1-1,.21,2.44,2.44,0,0,1-1-.21,2.46,2.46,0,0,1-.82-.55,2.72,2.72,0,0,1-.56-.82,2.59,2.59,0,0,1-.2-1,2.7,2.7,0,0,1,.2-1A2.76,2.76,0,0,1,505,351a2.35,2.35,0,0,1,.82-.56A2.44,2.44,0,0,1,506.82,350.23Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M532.2,339.47l-5.35,14a27.46,27.46,0,0,1-1.71,3.69,11.14,11.14,0,0,1-1.93,2.54,7,7,0,0,1-2.29,1.46,8,8,0,0,1-2.8.46h-.74l-.71-.05v-2.47l.75.09a7.76,7.76,0,0,0,.86,0,4.18,4.18,0,0,0,1.39-.22,3.75,3.75,0,0,0,1.23-.71,6.77,6.77,0,0,0,1.11-1.27,13.21,13.21,0,0,0,1-1.9l-6.26-15.68h3.09l4,10.37.79,2.44.91-2.5,3.67-10.31Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M545.92,355.15l-.07-2.1a8.39,8.39,0,0,1-2.6,1.82,6.9,6.9,0,0,1-2.77.57,6.79,6.79,0,0,1-2.3-.35,4.35,4.35,0,0,1-1.57-.94,3.73,3.73,0,0,1-.91-1.42,5.28,5.28,0,0,1-.28-1.76,4.38,4.38,0,0,1,1.75-3.7,8.54,8.54,0,0,1,5.2-1.33h3.25v-1.38a2.93,2.93,0,0,0-.89-2.23,3.9,3.9,0,0,0-2.72-.83,11.51,11.51,0,0,0-2.62.3,17.65,17.65,0,0,0-2.66.84v-2.45c.34-.13.72-.25,1.15-.37s.86-.23,1.33-.32,1-.17,1.47-.23,1-.08,1.55-.08a9.6,9.6,0,0,1,2.56.31,5.37,5.37,0,0,1,1.93.95,4.21,4.21,0,0,1,1.21,1.61,5.73,5.73,0,0,1,.42,2.28v10.81Zm-.3-7.14h-3.45a6.35,6.35,0,0,0-1.75.21,3.33,3.33,0,0,0-1.21.58,2.36,2.36,0,0,0-.69.89,3,3,0,0,0-.23,1.18,2.74,2.74,0,0,0,.14.87A1.93,1.93,0,0,0,539.7,353a3.36,3.36,0,0,0,1.22.19,5.11,5.11,0,0,0,2.14-.57,10.59,10.59,0,0,0,2.56-1.8Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M564.62,355.15V343.89a9.72,9.72,0,0,0-.06-1.2,2.53,2.53,0,0,0-.17-.75.85.85,0,0,0-.29-.38.88.88,0,0,0-.45-.11,1,1,0,0,0-.58.19,2.44,2.44,0,0,0-.57.61,8.89,8.89,0,0,0-.67,1.12c-.25.46-.53,1-.87,1.71v10.07h-2.48v-11a12.75,12.75,0,0,0-.06-1.39,2.92,2.92,0,0,0-.17-.83.8.8,0,0,0-.3-.41,1,1,0,0,0-.46-.11,1,1,0,0,0-.53.16,2.24,2.24,0,0,0-.55.56,7.94,7.94,0,0,0-.68,1.11c-.25.47-.55,1.07-.89,1.8v10.07h-2.5V339.47h2.08l.12,3a12.93,12.93,0,0,1,.79-1.51,4.55,4.55,0,0,1,.79-1,2.58,2.58,0,0,1,.87-.56,2.73,2.73,0,0,1,1-.18,2.31,2.31,0,0,1,1.92.82,4.12,4.12,0,0,1,.66,2.57c.25-.54.49-1,.73-1.45a5.29,5.29,0,0,1,.78-1.06,2.86,2.86,0,0,1,.91-.66,2.79,2.79,0,0,1,1.16-.22c2,0,3,1.51,3,4.54v11.42Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M576.37,335.31h-4.64v-2.23h7.39v19.81h4.67v2.26H571.21v-2.26h5.16Z" transform="translate(-341.21 -94.59)"/></g><g id="surface1-4" data-name="surface1"><path class="cls-16" d="M1416.3,643.37a5.81,5.81,0,0,0-5.79-5.79h-89.73v28.95a5.79,5.79,0,0,1-5.79,5.79h-31.84V799.68a5.8,5.8,0,0,0,5.79,5.78h121.57a5.8,5.8,0,0,0,5.79-5.78Z" transform="translate(-341.21 -94.59)"/><path class="cls-17" d="M1320.78,805.46h89.73a5.78,5.78,0,0,0,5.79-5.78V716A145,145,0,0,1,1320.78,805.46Z" transform="translate(-341.21 -94.59)"/><path class="cls-18" d="M1320.78,666.53V637.58l-37.63,34.74H1315A5.79,5.79,0,0,0,1320.78,666.53Z" transform="translate(-341.21 -94.59)"/><path class="cls-19" d="M1364.2,715.74h-60.79a2.9,2.9,0,0,1,0-5.79h60.79a2.9,2.9,0,0,1,0,5.79Z" transform="translate(-341.21 -94.59)"/><path class="cls-19" d="M1376.76,733.1h-73.35a2.9,2.9,0,0,1,0-5.79h73.35a2.9,2.9,0,0,1,0,5.79Z" transform="translate(-341.21 -94.59)"/><path class="cls-19" d="M1338.64,750.47h-35.23a2.9,2.9,0,0,1,0-5.79h35.23a2.9,2.9,0,0,1,0,5.79Z" transform="translate(-341.21 -94.59)"/><path class="cls-19" d="M1381.56,698.37h-55a2.9,2.9,0,1,1,0-5.79h55a2.9,2.9,0,1,1,0,5.79Z" transform="translate(-341.21 -94.59)"/><path class="cls-19" d="M1315,698.37h-11.58a2.9,2.9,0,0,1,0-5.79H1315a2.9,2.9,0,1,1,0,5.79Z" transform="translate(-341.21 -94.59)"/></g><path class="cls-7" d="M1431.92,655h-87.24a4.6,4.6,0,0,0-4.59,4.59v41.33a4.6,4.6,0,0,0,4.59,4.59h87.24a4.61,4.61,0,0,0,4.59-4.59V659.54A4.61,4.61,0,0,0,1431.92,655Z" transform="translate(-341.21 -94.59)"/><path class="cls-19" d="M1358.88,767.84h-55.47a2.9,2.9,0,0,1,0-5.79h55.47a2.9,2.9,0,1,1,0,5.79Z" transform="translate(-341.21 -94.59)"/><path class="cls-19" d="M1329.46,785.2h-26a2.9,2.9,0,0,1,0-5.79h26a2.9,2.9,0,1,1,0,5.79Z" transform="translate(-341.21 -94.59)"/><path class="cls-19" d="M1371.2,750.47h-20.75a2.9,2.9,0,1,1,0-5.79h20.75a2.9,2.9,0,1,1,0,5.79Z" transform="translate(-341.21 -94.59)"/><g class="cls-8"><path class="cls-9" d="M1397.56,691.69a15.27,15.27,0,0,1-6.3,1.09c-7.74,0-12.44-4.85-12.44-12.27,0-8,5.57-12.88,13-12.88a14.06,14.06,0,0,1,5.94,1.09l-1,3.54a12,12,0,0,0-4.78-.94c-5,0-8.53,3.11-8.53,9,0,5.35,3.14,8.79,8.5,8.79a12.33,12.33,0,0,0,4.85-.91Z" transform="translate(-341.21 -94.59)"/></g><g class="cls-10"><path class="cls-11" d="M1303.14,849.35V838.08a10,10,0,0,0-.05-1.2,2.8,2.8,0,0,0-.17-.74.83.83,0,0,0-.3-.39.88.88,0,0,0-.45-.11,1,1,0,0,0-.57.19,2.63,2.63,0,0,0-.57.61,8.8,8.8,0,0,0-.68,1.12c-.24.46-.53,1-.86,1.71v10.08H1297v-11c0-.57,0-1,0-1.39a3.83,3.83,0,0,0-.17-.83.8.8,0,0,0-.31-.41.88.88,0,0,0-.45-.11,1,1,0,0,0-.53.16,2.25,2.25,0,0,0-.56.56,9,9,0,0,0-.68,1.11c-.25.47-.54,1.07-.89,1.8v10.08h-2.5V833.66h2.08l.13,3a15.91,15.91,0,0,1,.78-1.51,5.14,5.14,0,0,1,.79-1,2.75,2.75,0,0,1,.87-.56,2.8,2.8,0,0,1,1-.18,2.3,2.3,0,0,1,1.93.83,4.13,4.13,0,0,1,.65,2.56c.25-.54.5-1,.74-1.45a5.27,5.27,0,0,1,.77-1.06,3.15,3.15,0,0,1,.91-.66,2.82,2.82,0,0,1,1.16-.22q3,0,3,4.54v11.43Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M1323.5,833.66l-5.34,14a26.89,26.89,0,0,1-1.71,3.69,10.92,10.92,0,0,1-1.93,2.54,6.84,6.84,0,0,1-2.3,1.46,7.94,7.94,0,0,1-2.8.47l-.73,0-.72-.05v-2.46l.75.08a7.88,7.88,0,0,0,.86,0,4.24,4.24,0,0,0,1.4-.22,3.67,3.67,0,0,0,1.23-.71,6.77,6.77,0,0,0,1.11-1.27,13.5,13.5,0,0,0,1-1.89l-6.27-15.69h3.09l4,10.37.8,2.44.91-2.5,3.67-10.31Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M1338.11,842.11h-9.34v-2.56h9.34Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M1354.82,849.35l-.07-2.11a8.61,8.61,0,0,1-2.6,1.83,7.07,7.07,0,0,1-2.77.56,6.79,6.79,0,0,1-2.3-.35,4.22,4.22,0,0,1-1.57-.94,3.73,3.73,0,0,1-.91-1.42,5.24,5.24,0,0,1-.28-1.76,4.39,4.39,0,0,1,1.75-3.7,8.54,8.54,0,0,1,5.2-1.33h3.25v-1.38a2.91,2.91,0,0,0-.89-2.22,3.85,3.85,0,0,0-2.72-.84,11.51,11.51,0,0,0-2.62.3,18.87,18.87,0,0,0-2.66.84v-2.45c.34-.13.72-.25,1.15-.37s.86-.23,1.33-.32,1-.17,1.47-.23,1-.08,1.55-.08a9.6,9.6,0,0,1,2.56.31,5.37,5.37,0,0,1,1.93.95,4.21,4.21,0,0,1,1.21,1.61,5.73,5.73,0,0,1,.42,2.28v10.82Zm-.3-7.14h-3.45a6.38,6.38,0,0,0-1.75.2,3.41,3.41,0,0,0-1.21.58,2.32,2.32,0,0,0-.69.9,3,3,0,0,0-.23,1.18,2.72,2.72,0,0,0,.14.86,2,2,0,0,0,.45.74,2.15,2.15,0,0,0,.82.5,3.36,3.36,0,0,0,1.22.19,5.11,5.11,0,0,0,2.14-.57,10.59,10.59,0,0,0,2.56-1.8Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M1375.74,841.22a10.4,10.4,0,0,1-.59,3.66,7.15,7.15,0,0,1-1.62,2.59,6.65,6.65,0,0,1-2.43,1.55,8.92,8.92,0,0,1-3,.51,14.72,14.72,0,0,1-1.49-.07,11.69,11.69,0,0,1-1.51-.27v6.56h-2.72V833.66h2.42l.17,2.62a7.09,7.09,0,0,1,2.5-2.25,6.4,6.4,0,0,1,2.88-.65,4.63,4.63,0,0,1,4.06,2.15,7.41,7.41,0,0,1,1,2.47A13.81,13.81,0,0,1,1375.74,841.22Zm-2.78.13a13.23,13.23,0,0,0-.18-2.27,5.87,5.87,0,0,0-.57-1.76,3.14,3.14,0,0,0-1-1.15,2.51,2.51,0,0,0-1.46-.42,3.48,3.48,0,0,0-1,.17,4.35,4.35,0,0,0-1.11.54,8.6,8.6,0,0,0-1.2,1,15.57,15.57,0,0,0-1.35,1.57v7.61a9.07,9.07,0,0,0,1.58.49,7.59,7.59,0,0,0,1.62.18,4.3,4.3,0,0,0,3.46-1.49A6.89,6.89,0,0,0,1373,841.35Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M1393.33,841.22a10.41,10.41,0,0,1-.58,3.66,7.28,7.28,0,0,1-1.62,2.59,6.69,6.69,0,0,1-2.44,1.55,8.87,8.87,0,0,1-3,.51,14.86,14.86,0,0,1-1.49-.07,12,12,0,0,1-1.51-.27v6.56h-2.72V833.66h2.43l.17,2.62A6.93,6.93,0,0,1,1385,834a6.33,6.33,0,0,1,2.87-.65,4.82,4.82,0,0,1,2.36.56,4.89,4.89,0,0,1,1.71,1.59,7.63,7.63,0,0,1,1,2.47A13.84,13.84,0,0,1,1393.33,841.22Zm-2.78.13a13.23,13.23,0,0,0-.18-2.27,5.87,5.87,0,0,0-.57-1.76,3.05,3.05,0,0,0-1-1.15,2.5,2.5,0,0,0-1.45-.42,3.49,3.49,0,0,0-1,.17,4.46,4.46,0,0,0-1.1.54,8.6,8.6,0,0,0-1.2,1,14.37,14.37,0,0,0-1.36,1.57v7.61a9.07,9.07,0,0,0,1.58.49,7.68,7.68,0,0,0,1.63.18,4.26,4.26,0,0,0,3.45-1.49A6.89,6.89,0,0,0,1390.55,841.35Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M1403.69,844.42a2.63,2.63,0,0,1,1.84.77,2.66,2.66,0,0,1,.55.84,2.48,2.48,0,0,1,.2,1,2.42,2.42,0,0,1-.2,1,2.57,2.57,0,0,1-.55.82,2.61,2.61,0,0,1-.83.55,2.56,2.56,0,0,1-2,0,2.69,2.69,0,0,1-.82-.55,2.57,2.57,0,0,1-.55-.82,2.42,2.42,0,0,1-.2-1,2.48,2.48,0,0,1,.2-1,2.66,2.66,0,0,1,.55-.84,2.55,2.55,0,0,1,.82-.56A2.52,2.52,0,0,1,1403.69,844.42Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M1427.3,848.77a12,12,0,0,1-2.18.6,13.3,13.3,0,0,1-2.3.2,7.76,7.76,0,0,1-5.73-2,8,8,0,0,1-2-5.89,9.37,9.37,0,0,1,.58-3.38,7.54,7.54,0,0,1,1.62-2.59,7.25,7.25,0,0,1,2.5-1.66,8.53,8.53,0,0,1,3.21-.59,14.88,14.88,0,0,1,2.28.17,9.82,9.82,0,0,1,2,.56v2.6a8.4,8.4,0,0,0-2.07-.77,9.22,9.22,0,0,0-2.18-.25,5.07,5.07,0,0,0-2,.4,4.89,4.89,0,0,0-1.63,1.15,5.4,5.4,0,0,0-1.11,1.83,6.9,6.9,0,0,0-.41,2.44,5.86,5.86,0,0,0,1.39,4.25,5.09,5.09,0,0,0,3.83,1.42,9.51,9.51,0,0,0,2.15-.25,9.39,9.39,0,0,0,2-.75Z" transform="translate(-341.21 -94.59)"/></g><g id="surface1-5" data-name="surface1"><path class="cls-12" d="M1685.63,642.18a5.81,5.81,0,0,0-5.79-5.79h-89.73v28.94a5.79,5.79,0,0,1-5.79,5.79h-31.84V798.48a5.81,5.81,0,0,0,5.79,5.79h121.57a5.81,5.81,0,0,0,5.79-5.79Z" transform="translate(-341.21 -94.59)"/><path class="cls-13" d="M1590.11,804.27h89.73a5.79,5.79,0,0,0,5.79-5.79V714.8A145.05,145.05,0,0,1,1590.11,804.27Z" transform="translate(-341.21 -94.59)"/><path class="cls-14" d="M1590.11,665.33V636.39l-37.63,34.73h31.84A5.79,5.79,0,0,0,1590.11,665.33Z" transform="translate(-341.21 -94.59)"/><path class="cls-15" d="M1633.53,714.54h-60.78a2.9,2.9,0,1,1,0-5.79h60.78a2.9,2.9,0,0,1,0,5.79Z" transform="translate(-341.21 -94.59)"/><path class="cls-15" d="M1646.09,731.91h-73.34a2.9,2.9,0,1,1,0-5.79h73.34a2.9,2.9,0,1,1,0,5.79Z" transform="translate(-341.21 -94.59)"/><path class="cls-15" d="M1608,749.27h-35.22a2.9,2.9,0,1,1,0-5.79H1608a2.9,2.9,0,1,1,0,5.79Z" transform="translate(-341.21 -94.59)"/><path class="cls-15" d="M1650.9,697.17h-55a2.9,2.9,0,0,1,0-5.79h55a2.9,2.9,0,0,1,0,5.79Z" transform="translate(-341.21 -94.59)"/><path class="cls-15" d="M1584.32,697.17h-11.57a2.9,2.9,0,1,1,0-5.79h11.57a2.9,2.9,0,1,1,0,5.79Z" transform="translate(-341.21 -94.59)"/></g><path class="cls-7" d="M1701.25,653.75H1614a4.61,4.61,0,0,0-4.59,4.6v41.32a4.61,4.61,0,0,0,4.59,4.59h87.24a4.6,4.6,0,0,0,4.59-4.59V658.35A4.6,4.6,0,0,0,1701.25,653.75Z" transform="translate(-341.21 -94.59)"/><path class="cls-15" d="M1628.22,766.64h-55.47a2.9,2.9,0,1,1,0-5.79h55.47a2.9,2.9,0,0,1,0,5.79Z" transform="translate(-341.21 -94.59)"/><path class="cls-15" d="M1598.8,784h-26a2.9,2.9,0,1,1,0-5.79h26a2.9,2.9,0,0,1,0,5.79Z" transform="translate(-341.21 -94.59)"/><path class="cls-15" d="M1640.53,749.27h-20.75a2.9,2.9,0,0,1,0-5.79h20.75a2.9,2.9,0,1,1,0,5.79Z" transform="translate(-341.21 -94.59)"/><g class="cls-8"><path class="cls-9" d="M1652.42,666.68v9.88h10.42v-9.88h4.5v24.65h-4.5V680.47h-10.42v10.86h-4.5V666.68Z" transform="translate(-341.21 -94.59)"/></g><g class="cls-10"><path class="cls-11" d="M1557.1,840.42a10.45,10.45,0,0,1-.58,3.66,7.15,7.15,0,0,1-1.62,2.59,6.69,6.69,0,0,1-2.44,1.55,8.87,8.87,0,0,1-3,.51,12.4,12.4,0,0,1-1.49-.08,11.94,11.94,0,0,1-1.51-.26V855h-2.71V832.86h2.42l.17,2.62a7.06,7.06,0,0,1,2.5-2.26,6.46,6.46,0,0,1,2.87-.64,4.71,4.71,0,0,1,2.36.56,4.86,4.86,0,0,1,1.71,1.58,7.82,7.82,0,0,1,1,2.47A14,14,0,0,1,1557.1,840.42Zm-2.78.12a13.19,13.19,0,0,0-.18-2.26,5.94,5.94,0,0,0-.57-1.77,3.13,3.13,0,0,0-1-1.15,2.57,2.57,0,0,0-1.45-.41,3.82,3.82,0,0,0-1,.16,4.52,4.52,0,0,0-1.1.55,8.6,8.6,0,0,0-1.2,1,14.37,14.37,0,0,0-1.36,1.57v7.61a9.07,9.07,0,0,0,1.58.49,7.68,7.68,0,0,0,1.63.18,4.26,4.26,0,0,0,3.45-1.49A6.92,6.92,0,0,0,1554.32,840.54Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M1566.63,828.7H1562v-2.23h7.39v19.81h4.67v2.26h-12.57v-2.26h5.15Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M1589,848.54l-.06-2.11a8.38,8.38,0,0,1-2.6,1.83,7,7,0,0,1-2.78.57,6.72,6.72,0,0,1-2.29-.35,4.27,4.27,0,0,1-1.57-.94,3.57,3.57,0,0,1-.91-1.42,5.28,5.28,0,0,1-.29-1.76,4.39,4.39,0,0,1,1.76-3.7,8.49,8.49,0,0,1,5.19-1.33h3.25V838a2.89,2.89,0,0,0-.89-2.23,3.88,3.88,0,0,0-2.72-.83,12.07,12.07,0,0,0-2.61.29,18.21,18.21,0,0,0-2.67.85v-2.45c.35-.13.73-.25,1.15-.37s.87-.23,1.34-.32,1-.17,1.47-.23a13.13,13.13,0,0,1,1.54-.08,9.68,9.68,0,0,1,2.57.31,5.21,5.21,0,0,1,1.93,1,4.23,4.23,0,0,1,1.21,1.61,5.73,5.73,0,0,1,.42,2.28v10.81Zm-.3-7.14h-3.45a6.4,6.4,0,0,0-1.75.21,3.19,3.19,0,0,0-1.2.57,2.34,2.34,0,0,0-.7.9,3,3,0,0,0-.22,1.18,2.52,2.52,0,0,0,.14.87,1.79,1.79,0,0,0,.45.73,2.08,2.08,0,0,0,.81.51,3.4,3.4,0,0,0,1.22.19,5.15,5.15,0,0,0,2.15-.57,10.16,10.16,0,0,0,2.55-1.81Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M1609.12,848.33a14.64,14.64,0,0,1-1.91.33,18.86,18.86,0,0,1-2,.1,6.34,6.34,0,0,1-4.41-1.33,5.34,5.34,0,0,1-1.45-4.1v-8.19H1595v-2.28h4.39v-4.32l2.72-.7v5h7v2.28h-7v8a3.29,3.29,0,0,0,.9,2.52,3.75,3.75,0,0,0,2.65.84,12.42,12.42,0,0,0,1.64-.12,15.66,15.66,0,0,0,1.86-.37Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M1628,829a18.39,18.39,0,0,0-3.69-.46c-2.44,0-3.67,1.29-3.67,3.85v2.75h6.88v2.26h-6.88v11.14h-2.76V837.4h-5v-2.26h5v-2.6q0-6.25,6.53-6.26a19.28,19.28,0,0,1,3.59.37Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M1645.32,840.58a10.28,10.28,0,0,1-.52,3.35,7.43,7.43,0,0,1-1.48,2.61,6.69,6.69,0,0,1-2.36,1.68,7.91,7.91,0,0,1-3.16.61,8.21,8.21,0,0,1-3-.53,5.87,5.87,0,0,1-2.26-1.54,6.77,6.77,0,0,1-1.43-2.51,11.33,11.33,0,0,1-.49-3.46,10.07,10.07,0,0,1,.52-3.33,7.54,7.54,0,0,1,1.48-2.6,6.69,6.69,0,0,1,2.36-1.68,7.91,7.91,0,0,1,3.16-.6,8.21,8.21,0,0,1,3,.52,6.08,6.08,0,0,1,2.27,1.53,6.75,6.75,0,0,1,1.42,2.51A10.94,10.94,0,0,1,1645.32,840.58Zm-2.78.12a9.18,9.18,0,0,0-.32-2.54,5,5,0,0,0-.92-1.81,3.59,3.59,0,0,0-1.44-1.09,4.67,4.67,0,0,0-1.9-.37,4.32,4.32,0,0,0-2.08.47,4.2,4.2,0,0,0-1.43,1.28,5.45,5.45,0,0,0-.81,1.85,9.36,9.36,0,0,0-.26,2.21,9.25,9.25,0,0,0,.32,2.55,5.19,5.19,0,0,0,.92,1.82,3.72,3.72,0,0,0,1.43,1.09,4.68,4.68,0,0,0,1.91.37,4.27,4.27,0,0,0,2.09-.48,4.14,4.14,0,0,0,1.42-1.27,5.45,5.45,0,0,0,.81-1.85A9.53,9.53,0,0,0,1642.54,840.7Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M1649.9,832.86h2.48l.08,2.89a10,10,0,0,1,2.74-2.42,5.57,5.57,0,0,1,2.73-.75,4.46,4.46,0,0,1,3.7,1.57,7.15,7.15,0,0,1,1.16,4.69H1660a5.17,5.17,0,0,0-.6-3,2.17,2.17,0,0,0-1.9-.93,3.27,3.27,0,0,0-1.1.19,4.35,4.35,0,0,0-1.14.63,10.58,10.58,0,0,0-1.25,1.1c-.43.45-.9,1-1.4,1.63v10.07h-2.75Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M1678,848.54V837.28a9.72,9.72,0,0,0-.06-1.2,2.53,2.53,0,0,0-.17-.75.85.85,0,0,0-.29-.38.88.88,0,0,0-.45-.11,1,1,0,0,0-.58.19,2.64,2.64,0,0,0-.57.61,8.89,8.89,0,0,0-.67,1.12q-.36.69-.87,1.71v10.07h-2.48v-11a13.08,13.08,0,0,0-.06-1.4,2.84,2.84,0,0,0-.17-.82.8.8,0,0,0-.3-.41,1,1,0,0,0-.46-.11,1,1,0,0,0-.53.16,2.24,2.24,0,0,0-.55.56,9,9,0,0,0-.68,1.11c-.25.47-.55,1.07-.89,1.8v10.07h-2.5V832.86h2.08l.12,3a12.93,12.93,0,0,1,.79-1.51,4.86,4.86,0,0,1,.79-1,2.58,2.58,0,0,1,.87-.56,2.73,2.73,0,0,1,1-.18,2.31,2.31,0,0,1,1.92.82A4.12,4.12,0,0,1,1674,836c.25-.55.49-1,.73-1.45a5,5,0,0,1,.78-1.06,2.86,2.86,0,0,1,.91-.66,2.79,2.79,0,0,1,1.16-.22c2,0,3,1.51,3,4.54v11.42Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M1690.62,843.62a2.5,2.5,0,0,1,1,.21,2.44,2.44,0,0,1,.82.56,2.76,2.76,0,0,1,.56.83,2.7,2.7,0,0,1,.2,1,2.62,2.62,0,0,1-.2,1,2.72,2.72,0,0,1-.56.82,2.57,2.57,0,0,1-.82.55,2.5,2.5,0,0,1-1,.21,2.45,2.45,0,0,1-1-.21,2.55,2.55,0,0,1-1.37-1.37,2.46,2.46,0,0,1-.21-1,2.53,2.53,0,0,1,.21-1,2.73,2.73,0,0,1,.55-.83,2.55,2.55,0,0,1,.82-.56A2.45,2.45,0,0,1,1690.62,843.62Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M1714.65,848.54h-2.72v-10a4.49,4.49,0,0,0-.68-2.71,2.29,2.29,0,0,0-2-.9,3.4,3.4,0,0,0-1,.15,3.6,3.6,0,0,0-1,.51,9.33,9.33,0,0,0-1.13,1c-.4.41-.87.93-1.4,1.56v10.4H1702V826.47h2.72v6.39l-.1,2.47a11.1,11.1,0,0,1,1.26-1.29,6.76,6.76,0,0,1,1.24-.86,5.12,5.12,0,0,1,1.25-.46,5.83,5.83,0,0,1,1.33-.14,4.62,4.62,0,0,1,3.63,1.43,6.28,6.28,0,0,1,1.28,4.3Z" transform="translate(-341.21 -94.59)"/></g><line class="cls-20" x1="389.42" y1="117.64" x2="378.5" y2="106.72"/><line class="cls-20" x1="407.61" y1="99.45" x2="396.7" y2="88.53"/><line class="cls-20" x1="425.59" y1="81.47" x2="414.68" y2="70.55"/><line class="cls-20" x1="443.78" y1="63.27" x2="432.87" y2="52.36"/><path class="cls-20" d="M892.44,231.06l-69.77-69.77a12.92,12.92,0,0,0-18.41,0l-70,70a12.92,12.92,0,0,0,0,18.41l70,70a12.92,12.92,0,0,0,18.41,0l69.77-69.77A13.44,13.44,0,0,0,892.44,231.06Z" transform="translate(-341.21 -94.59)"/><line class="cls-20" x1="554.65" y1="174.14" x2="565.57" y2="185.06"/><line class="cls-20" x1="536.46" y1="192.34" x2="547.38" y2="203.25"/><line class="cls-20" x1="518.48" y1="210.32" x2="529.4" y2="221.23"/><line class="cls-20" x1="500.29" y1="228.51" x2="511.2" y2="239.42"/><rect class="cls-20" x="730.75" y="209.92" width="10.9" height="15.74" transform="translate(-279.59 489.77) rotate(-45)"/><rect class="cls-20" x="748.94" y="191.73" width="10.9" height="15.74" transform="translate(-261.4 497.31) rotate(-45)"/><rect class="cls-20" x="766.92" y="173.75" width="10.9" height="15.74" transform="translate(-243.42 504.75) rotate(-45)"/><rect class="cls-20" x="782.69" y="312.09" width="15.74" height="10.9" transform="translate(-334.19 557.42) rotate(-45)"/><line class="cls-20" x1="443.78" y1="228.51" x2="432.87" y2="239.42"/><rect class="cls-20" x="764.5" y="293.89" width="15.74" height="10.9" transform="translate(-326.66 539.23) rotate(-45)"/><line class="cls-20" x1="425.59" y1="210.32" x2="414.68" y2="221.23"/><rect class="cls-20" x="746.52" y="275.91" width="15.74" height="10.9" transform="translate(-319.21 521.25) rotate(-45)"/><line class="cls-20" x1="407.61" y1="192.34" x2="396.7" y2="203.25"/><rect class="cls-20" x="728.33" y="257.72" width="15.74" height="10.9" transform="translate(-311.67 503.06) rotate(-45)"/><line class="cls-20" x1="389.42" y1="174.14" x2="378.5" y2="185.06"/><line class="cls-20" x1="500.29" y1="63.27" x2="511.2" y2="52.36"/><line class="cls-20" x1="518.48" y1="81.47" x2="529.4" y2="70.55"/><line class="cls-20" x1="536.46" y1="99.45" x2="547.38" y2="88.53"/><line class="cls-20" x1="554.65" y1="117.64" x2="565.57" y2="106.72"/><circle class="cls-21" cx="428.37" cy="145.89" r="14.08"/><rect class="cls-20" x="884.85" y="255.3" width="10.9" height="15.74" transform="translate(-266.54 612.03) rotate(-45)"/><rect class="cls-20" x="866.66" y="273.49" width="10.9" height="15.74" transform="translate(-284.73 604.49) rotate(-45)"/><rect class="cls-20" x="848.68" y="291.47" width="10.9" height="15.74" transform="translate(-302.71 597.04) rotate(-45)"/><rect class="cls-20" x="830.49" y="309.66" width="10.9" height="15.74" transform="translate(-320.9 589.51) rotate(-45)"/><rect class="cls-20" x="828.07" y="157.98" width="15.74" height="10.9" transform="translate(-211.93 544.37) rotate(-45)"/><rect class="cls-20" x="846.26" y="176.17" width="15.74" height="10.9" transform="translate(-219.47 562.57) rotate(-45)"/><rect class="cls-20" x="864.24" y="194.15" width="15.74" height="10.9" transform="translate(-226.92 580.54) rotate(-45)"/><rect class="cls-20" x="882.43" y="212.35" width="15.74" height="10.9" transform="translate(-234.45 598.74) rotate(-45)"/><rect class="cls-20" x="785.11" y="155.56" width="10.9" height="15.74" transform="translate(-225.22 512.29) rotate(-45)"/><g class="cls-10"><path class="cls-21" d="M759.45,120.54c.07-1.18.14-3.13.14-4.93V95H764v10.44h.07a6.33,6.33,0,0,1,5.61-2.81c4.29,0,7.35,3.56,7.31,8.89,0,6.3-4,9.43-8,9.43a6,6,0,0,1-5.55-3h-.07l-.21,2.62Zm4.57-7.23a4.37,4.37,0,0,0,.11,1,4.07,4.07,0,0,0,3.92,3.1c2.77,0,4.46-2.23,4.46-5.76,0-3.1-1.47-5.62-4.42-5.62a4.16,4.16,0,0,0-3.93,3.24,5.5,5.5,0,0,0-.14,1.16Z" transform="translate(-341.21 -94.59)"/><path class="cls-21" d="M790.51,120.54l-.29-1.94h-.1a6.52,6.52,0,0,1-5.19,2.34,5.2,5.2,0,0,1-5.5-5.22c0-4.43,3.92-6.66,10.4-6.62v-.29c0-1.15-.47-3.06-3.57-3.06a9.25,9.25,0,0,0-4.71,1.3l-.86-2.88a12.5,12.5,0,0,1,6.33-1.55c5.62,0,7.24,3.56,7.24,7.38v6.33a28.06,28.06,0,0,0,.25,4.21Zm-.57-8.56c-3.14-.07-6.12.61-6.12,3.27a2.32,2.32,0,0,0,2.52,2.52,3.58,3.58,0,0,0,3.45-2.41,3.1,3.1,0,0,0,.15-1Z" transform="translate(-341.21 -94.59)"/><path class="cls-21" d="M798.94,108.67c0-2.38,0-4.07-.15-5.66h3.85l.15,3.35h.14a5.24,5.24,0,0,1,4.79-3.74,4.2,4.2,0,0,1,1,.11v4.17a6.26,6.26,0,0,0-1.29-.14,3.9,3.9,0,0,0-4,3.35,7.64,7.64,0,0,0-.15,1.36v9.07h-4.42Z" transform="translate(-341.21 -94.59)"/><path class="cls-21" d="M814.56,113c.11,3.17,2.59,4.54,5.4,4.54a13,13,0,0,0,4.86-.8l.65,3.06a16.34,16.34,0,0,1-6.12,1.08c-5.69,0-9-3.49-9-8.85,0-4.86,3-9.43,8.57-9.43s7.56,4.68,7.56,8.53a11.1,11.1,0,0,1-.14,1.87Zm7.7-3.1c0-1.61-.68-4.28-3.63-4.28-2.74,0-3.89,2.49-4.07,4.28Z" transform="translate(-341.21 -94.59)"/><path class="cls-21" d="M842.89,120a12.64,12.64,0,0,1-5,.9c-5.47,0-9-3.49-9-8.92,0-5.26,3.6-9.36,9.75-9.36a11,11,0,0,1,4.29.83l-.8,3.31a7.63,7.63,0,0,0-3.34-.69c-3.39,0-5.4,2.49-5.37,5.69,0,3.6,2.34,5.65,5.37,5.65a8.63,8.63,0,0,0,3.49-.68Z" transform="translate(-341.21 -94.59)"/><path class="cls-21" d="M851.78,98v5H856v3.32h-4.22v7.73c0,2.13.58,3.24,2.27,3.24a6.52,6.52,0,0,0,1.73-.21l.07,3.38a9.79,9.79,0,0,1-3.2.43,5.14,5.14,0,0,1-3.82-1.44c-.93-1-1.36-2.59-1.36-4.89v-8.24H845V103h2.52v-4Z" transform="translate(-341.21 -94.59)"/><path class="cls-21" d="M859.85,120.54V106.33h-2.38V103h2.38v-.75a8.2,8.2,0,0,1,2.12-6,6.72,6.72,0,0,1,4.57-1.69,8.68,8.68,0,0,1,2.85.43l-.33,3.42a5.12,5.12,0,0,0-1.87-.32c-2.19,0-3,1.83-3,4v.9h3.85v3.32h-3.81v14.21Z" transform="translate(-341.21 -94.59)"/></g><path class="cls-22" d="M1182.24,1637.47V1610.6a4,4,0,0,0-4-3.95h-14.78a79.66,79.66,0,0,0-10.69-25.8l10.45-10.45a3.94,3.94,0,0,0,0-5.59l-19-19a4,4,0,0,0-5.59,0l-10.45,10.45a79.66,79.66,0,0,0-25.8-10.69V1530.8a4,4,0,0,0-4-4h-26.87a4,4,0,0,0-3.95,4v14.81a79.67,79.67,0,0,0-25.76,10.69l-10.49-10.48a4,4,0,0,0-5.59,0l-19,19a4,4,0,0,0,0,5.59l10.51,10.51a79.78,79.78,0,0,0-10.64,25.74H991.82a4,4,0,0,0-4,3.95v26.87a4,4,0,0,0,4,4h14.91a79.6,79.6,0,0,0,10.66,25.7l-10.55,10.55a4,4,0,0,0,0,5.59l19,19a4,4,0,0,0,5.59,0L1042,1691.7a79.6,79.6,0,0,0,25.7,10.66v14.91a4,4,0,0,0,3.95,4h26.87a4,4,0,0,0,4-4v-14.88a80,80,0,0,0,25.74-10.65l10.51,10.51a4,4,0,0,0,5.59,0l19-19a3.94,3.94,0,0,0,0-5.59l-10.48-10.49a79.67,79.67,0,0,0,10.69-25.76h14.81A4,4,0,0,0,1182.24,1637.47Z" transform="translate(-341.21 -94.59)"/><path class="cls-23" d="M1098.51,1725.17h-26.86a7.91,7.91,0,0,1-7.9-7.9v-11.8a83.37,83.37,0,0,1-21.16-8.77l-8.35,8.35a7.91,7.91,0,0,1-11.17,0l-19-19a7.91,7.91,0,0,1,0-11.17l8.35-8.35a83.76,83.76,0,0,1-8.78-21.16H991.85a7.91,7.91,0,0,1-7.9-7.9V1610.6a7.91,7.91,0,0,1,7.9-7.9h11.77a83.76,83.76,0,0,1,8.76-21.2l-8.31-8.31a7.91,7.91,0,0,1,0-11.17l19-19a7.91,7.91,0,0,1,11.17,0l8.29,8.29a83.37,83.37,0,0,1,21.22-8.81v-11.7a7.91,7.91,0,0,1,7.9-7.9h26.86a7.92,7.92,0,0,1,7.91,7.9v11.67a83.55,83.55,0,0,1,21.26,8.8l8.24-8.25a7.92,7.92,0,0,1,11.18,0l19,19a7.91,7.91,0,0,1,0,11.17l-8.24,8.25a83.61,83.61,0,0,1,8.8,21.26h11.67a7.92,7.92,0,0,1,7.9,7.9v26.87a7.92,7.92,0,0,1-7.9,7.9h-11.7a83.37,83.37,0,0,1-8.81,21.22l8.28,8.29a7.91,7.91,0,0,1,0,11.17l-19,19a7.92,7.92,0,0,1-11.18,0l-8.31-8.32a83.57,83.57,0,0,1-21.19,8.77v11.77A7.92,7.92,0,0,1,1098.51,1725.17ZM1042,1687.75a4,4,0,0,1,2.12.62,75.83,75.83,0,0,0,24.43,10.14,4,4,0,0,1,3.1,3.85v14.91h26.86v-14.88a4,4,0,0,1,3.11-3.86,75.77,75.77,0,0,0,24.47-10.12,4,4,0,0,1,4.91.54l10.51,10.51,19-19L1150,1670a4,4,0,0,1-.53-4.93,75.8,75.8,0,0,0,10.17-24.49,3.94,3.94,0,0,1,3.85-3.09h14.81V1610.6h-14.79a3.94,3.94,0,0,1-3.85-3.1,75.86,75.86,0,0,0-10.16-24.53,4,4,0,0,1,.54-4.92l10.45-10.44-19-19-10.45,10.45a4,4,0,0,1-4.92.54,75.72,75.72,0,0,0-24.52-10.16,4,4,0,0,1-3.11-3.86V1530.8h-26.86v14.81a4,4,0,0,1-3.09,3.85,75.76,75.76,0,0,0-24.5,10.17,4,4,0,0,1-4.92-.53l-10.49-10.49-19,19,10.51,10.51a4,4,0,0,1,.54,4.91,75.68,75.68,0,0,0-10.12,24.47,4,4,0,0,1-3.86,3.1H991.85v26.87h14.9a4,4,0,0,1,3.86,3.09,76,76,0,0,0,10.13,24.44,4,4,0,0,1-.53,4.92l-10.55,10.54,19,19,10.55-10.55A4,4,0,0,1,1042,1687.75Z" transform="translate(-341.21 -94.59)"/><path class="cls-24" d="M1138.78,1624a53.73,53.73,0,1,1-53.72-53.73A53.72,53.72,0,0,1,1138.78,1624Z" transform="translate(-341.21 -94.59)"/><path class="cls-23" d="M1085.06,1681.69a57.67,57.67,0,1,1,28.19-108,3.95,3.95,0,0,1-3.86,6.89,49.78,49.78,0,1,0,20.21,21.2,4,4,0,1,1,7.07-3.53,57.66,57.66,0,0,1-51.61,83.43Z" transform="translate(-341.21 -94.59)"/><path class="cls-23" d="M1123.91,1590.86a4,4,0,0,1-2.8-6.75,4,4,0,0,1,2.8-1.16,4,4,0,0,1,0,7.91Z" transform="translate(-341.21 -94.59)"/><g class="cls-10"><path class="cls-11" d="M1081.73,1640.93a22.87,22.87,0,0,1-9.26,1.59c-11.38,0-18.3-7.13-18.3-18,0-11.81,8.19-18.94,19.15-18.94a20.48,20.48,0,0,1,8.73,1.6l-1.44,5.21a17.31,17.31,0,0,0-7-1.38c-7.29,0-12.56,4.57-12.56,13.19,0,7.87,4.63,12.93,12.51,12.93a18.21,18.21,0,0,0,7.12-1.34Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M1111.62,1640.93a22.83,22.83,0,0,1-9.26,1.59c-11.38,0-18.3-7.13-18.3-18,0-11.81,8.2-18.94,19.15-18.94a20.48,20.48,0,0,1,8.73,1.6l-1.44,5.21a17.31,17.31,0,0,0-7-1.38c-7.29,0-12.55,4.57-12.55,13.19,0,7.87,4.62,12.93,12.5,12.93a18.31,18.31,0,0,0,7.13-1.34Z" transform="translate(-341.21 -94.59)"/></g><g class="cls-25"><line class="cls-26" x1="208.36" y1="145.68" x2="329.7" y2="145.68"/><polygon class="cls-11" points="356.18 145.68 318.87 160.93 327.72 145.68 318.87 130.44 356.18 145.68"/></g><g class="cls-25"><path class="cls-26" d="M931.57,240.27h817.14a34.66,34.66,0,0,1,34.66,34.66V2020.2" transform="translate(-341.21 -94.59)"/><polygon class="cls-11" points="1442.15 1952.08 1426.91 1914.77 1442.15 1923.63 1457.4 1914.77 1442.15 1952.08"/></g><g class="cls-25"><line class="cls-26" x1="472.04" y1="264.94" x2="472.04" y2="486.28"/><polygon class="cls-11" points="472.04 512.75 456.79 475.45 472.04 484.3 487.28 475.45 472.04 512.75"/></g><g class="cls-25"><path class="cls-26" d="M813.25,359.53c0,106.25,243,88.87,271.33,221.47" transform="translate(-341.21 -94.59)"/><polygon class="cls-11" points="746.04 512.75 726.61 477.44 742.77 484.49 756.89 473.94 746.04 512.75"/></g><g id="surface1-6" data-name="surface1"><path class="cls-3" d="M610.25,643.39a5.81,5.81,0,0,0-5.79-5.79H514.73v28.95a5.78,5.78,0,0,1-5.79,5.78H477.1V799.69a5.81,5.81,0,0,0,5.79,5.79H604.46a5.81,5.81,0,0,0,5.79-5.79Z" transform="translate(-341.21 -94.59)"/><path class="cls-4" d="M514.73,805.48h89.73a5.79,5.79,0,0,0,5.79-5.79V716A145,145,0,0,1,514.73,805.48Z" transform="translate(-341.21 -94.59)"/><path class="cls-5" d="M514.73,666.55V637.6L477.1,672.33h31.84A5.78,5.78,0,0,0,514.73,666.55Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M558.15,715.75H497.36a2.9,2.9,0,0,1,0-5.79h60.79a2.9,2.9,0,0,1,0,5.79Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M570.71,733.12H497.36a2.9,2.9,0,0,1,0-5.79h73.35a2.9,2.9,0,0,1,0,5.79Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M532.59,750.49H497.36a2.9,2.9,0,0,1,0-5.79h35.23a2.9,2.9,0,0,1,0,5.79Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M575.52,698.39h-55a2.9,2.9,0,0,1,0-5.79h55a2.9,2.9,0,0,1,0,5.79Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M508.94,698.39H497.36a2.9,2.9,0,0,1,0-5.79h11.58a2.9,2.9,0,1,1,0,5.79Z" transform="translate(-341.21 -94.59)"/></g><path class="cls-7" d="M625.87,655H538.63a4.6,4.6,0,0,0-4.59,4.59v41.32a4.6,4.6,0,0,0,4.59,4.6h87.24a4.61,4.61,0,0,0,4.59-4.6V659.56A4.61,4.61,0,0,0,625.87,655Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M552.83,767.85H497.36a2.9,2.9,0,0,1,0-5.79h55.47a2.9,2.9,0,1,1,0,5.79Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M523.41,785.22h-26a2.9,2.9,0,0,1,0-5.79h26a2.9,2.9,0,1,1,0,5.79Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M565.15,750.49H544.4a2.9,2.9,0,1,1,0-5.79h20.75a2.9,2.9,0,1,1,0,5.79Z" transform="translate(-341.21 -94.59)"/><g class="cls-8"><path class="cls-9" d="M577,667.9v9.87h10.42V667.9H592v24.65h-4.5V681.69H577v10.86h-4.5V667.9Z" transform="translate(-341.21 -94.59)"/></g><g class="cls-10"><path class="cls-11" d="M499.31,841.63a10.54,10.54,0,0,1-.54,3.5,7.5,7.5,0,0,1-1.53,2.61,6.58,6.58,0,0,1-2.41,1.64,8.56,8.56,0,0,1-3.2.57,15.6,15.6,0,0,1-2.85-.27,14.91,14.91,0,0,1-2.87-.84V827.68h2.72v6.08l-.13,2.9a7,7,0,0,1,2.51-2.22,6.49,6.49,0,0,1,2.87-.65,4.87,4.87,0,0,1,2.36.56,5,5,0,0,1,1.7,1.59,7.41,7.41,0,0,1,1,2.47A13.9,13.9,0,0,1,499.31,841.63Zm-2.78.13a13.31,13.31,0,0,0-.18-2.27,6,6,0,0,0-.57-1.76,3.13,3.13,0,0,0-1-1.15,2.48,2.48,0,0,0-1.45-.42,3.6,3.6,0,0,0-1.05.17,4.18,4.18,0,0,0-1.1.55,7.85,7.85,0,0,0-1.2,1,15.4,15.4,0,0,0-1.35,1.57v7.61a10.4,10.4,0,0,0,1.62.49,7.44,7.44,0,0,0,1.58.18,5.64,5.64,0,0,0,1.79-.29,3.64,3.64,0,0,0,1.5-1,5,5,0,0,0,1-1.84A9.32,9.32,0,0,0,496.53,841.76Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M513.58,849.76l-.06-2.11a8.77,8.77,0,0,1-2.61,1.83,7.48,7.48,0,0,1-5.07.22,4.46,4.46,0,0,1-1.57-1,3.63,3.63,0,0,1-.9-1.41,5.06,5.06,0,0,1-.29-1.77,4.36,4.36,0,0,1,1.76-3.69,8.49,8.49,0,0,1,5.19-1.34h3.25v-1.38a2.89,2.89,0,0,0-.89-2.22,3.84,3.84,0,0,0-2.72-.84,11.42,11.42,0,0,0-2.61.3,19.41,19.41,0,0,0-2.67.84v-2.45c.35-.13.73-.25,1.15-.37s.87-.22,1.34-.32.95-.17,1.46-.22a13.3,13.3,0,0,1,1.55-.09,9.6,9.6,0,0,1,2.56.31,5.15,5.15,0,0,1,1.93,1,4.1,4.1,0,0,1,1.21,1.6A5.57,5.57,0,0,1,516,839v10.81Zm-.3-7.14h-3.45a6.85,6.85,0,0,0-1.75.2,3.36,3.36,0,0,0-1.2.58,2.25,2.25,0,0,0-.7.9,3,3,0,0,0-.23,1.18,2.72,2.72,0,0,0,.14.86,2,2,0,0,0,.46.74,2.34,2.34,0,0,0,.81.51,3.61,3.61,0,0,0,1.22.18,5.19,5.19,0,0,0,2.15-.57,10.55,10.55,0,0,0,2.55-1.8Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M521.74,834.07h2.48l.08,2.89a10,10,0,0,1,2.74-2.42,5.57,5.57,0,0,1,2.73-.75,4.45,4.45,0,0,1,3.69,1.58,7.05,7.05,0,0,1,1.17,4.69h-2.75a5.1,5.1,0,0,0-.61-3,2.15,2.15,0,0,0-1.89-.93,3.34,3.34,0,0,0-1.11.2,4.6,4.6,0,0,0-1.14.62,10.72,10.72,0,0,0-1.24,1.11,19.32,19.32,0,0,0-1.4,1.62v10.08h-2.75Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M551.94,841.09c0,.38,0,.71,0,1s0,.5,0,.73h-11a4.92,4.92,0,0,0,1.34,3.7,5.43,5.43,0,0,0,3.88,1.28c.46,0,.91,0,1.37,0s.9-.09,1.33-.15.84-.13,1.23-.21.75-.16,1.08-.26v2.24a18.7,18.7,0,0,1-2.5.5,21.07,21.07,0,0,1-2.9.2,9.72,9.72,0,0,1-3.47-.55,5.89,5.89,0,0,1-2.38-1.58,6.61,6.61,0,0,1-1.38-2.55A11.9,11.9,0,0,1,538,842a10.11,10.11,0,0,1,.47-3.14,7.87,7.87,0,0,1,1.39-2.59,6.51,6.51,0,0,1,2.25-1.77,6.66,6.66,0,0,1,3-.66,7.55,7.55,0,0,1,2.91.52,5.83,5.83,0,0,1,2.13,1.46,6.08,6.08,0,0,1,1.31,2.29A9.55,9.55,0,0,1,551.94,841.09Zm-2.83-.39a6.2,6.2,0,0,0-.2-1.92,4.08,4.08,0,0,0-.78-1.49,3.64,3.64,0,0,0-1.3-1A4.46,4.46,0,0,0,545,836a3.78,3.78,0,0,0-1.63.35,3.59,3.59,0,0,0-1.26,1,5,5,0,0,0-.86,1.5,6.89,6.89,0,0,0-.41,1.93Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M568.47,849.18a12,12,0,0,1-2.18.6,13.38,13.38,0,0,1-2.3.2,7.72,7.72,0,0,1-5.73-2,8,8,0,0,1-2-5.89,9.27,9.27,0,0,1,.58-3.37,7.59,7.59,0,0,1,1.62-2.6,7.25,7.25,0,0,1,2.5-1.66,8.53,8.53,0,0,1,3.21-.59,14.88,14.88,0,0,1,2.28.17,9.84,9.84,0,0,1,2,.57v2.59a8.82,8.82,0,0,0-2.07-.77,9.78,9.78,0,0,0-2.18-.25,5.07,5.07,0,0,0-2,.4,4.89,4.89,0,0,0-1.63,1.15,5.4,5.4,0,0,0-1.11,1.83,6.9,6.9,0,0,0-.41,2.44,5.9,5.9,0,0,0,1.39,4.26,5.12,5.12,0,0,0,3.83,1.41,9,9,0,0,0,2.15-.25,9.39,9.39,0,0,0,2-.75Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M586.52,849.54a13.14,13.14,0,0,1-1.91.34c-.66.06-1.32.1-2,.1a6.34,6.34,0,0,1-4.41-1.34,5.34,5.34,0,0,1-1.45-4.1v-8.19h-4.39v-2.28h4.39v-4.31l2.72-.7v5h7v2.28h-7v8a3.26,3.26,0,0,0,.9,2.52,3.75,3.75,0,0,0,2.65.84,12.42,12.42,0,0,0,1.64-.12,15.55,15.55,0,0,0,1.86-.36Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M605.39,830.21a18.3,18.3,0,0,0-3.69-.45c-2.44,0-3.67,1.28-3.67,3.84v2.75h6.88v2.27H598v11.14h-2.76V838.62h-5v-2.27h5v-2.59q0-6.27,6.53-6.27a19.35,19.35,0,0,1,3.59.38Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M620,842.52h-9.34V840H620Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M481.72,872a10.54,10.54,0,0,1-.54,3.5,7.37,7.37,0,0,1-1.53,2.6,6.56,6.56,0,0,1-2.41,1.65,8.58,8.58,0,0,1-3.21.57,15.5,15.5,0,0,1-2.84-.27,15.22,15.22,0,0,1-2.88-.84V858.08H471v6.08l-.12,2.9a7,7,0,0,1,2.5-2.22,6.56,6.56,0,0,1,2.87-.65,4.63,4.63,0,0,1,4.06,2.15,7.42,7.42,0,0,1,1,2.47A14.46,14.46,0,0,1,481.72,872Zm-2.78.13a13.31,13.31,0,0,0-.18-2.27,6,6,0,0,0-.57-1.76,3.22,3.22,0,0,0-1-1.15,2.5,2.5,0,0,0-1.45-.42,3.49,3.49,0,0,0-1.05.17,4,4,0,0,0-1.1.55,8.39,8.39,0,0,0-1.21,1,16.77,16.77,0,0,0-1.35,1.57v7.61a10.2,10.2,0,0,0,1.63.49,7.44,7.44,0,0,0,1.58.18,5.53,5.53,0,0,0,1.78-.29,3.64,3.64,0,0,0,1.5-1,4.85,4.85,0,0,0,1-1.84A9.32,9.32,0,0,0,478.94,872.16Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M491.25,866.72h-4.64v-2.25H494v13.42h4.67v2.27H486.09v-2.27h5.16Zm.95-8.83a2.15,2.15,0,0,1,.85.17,2.1,2.1,0,0,1,.68.46,2.24,2.24,0,0,1,.45.68,2,2,0,0,1,.16.83,2.08,2.08,0,0,1-.16.83,2.29,2.29,0,0,1-.45.69,2.1,2.1,0,0,1-.68.46,2.31,2.31,0,0,1-1.69,0,2,2,0,0,1-.68-.46,2.29,2.29,0,0,1-.45-.69,2.09,2.09,0,0,1-.17-.83,2.05,2.05,0,0,1,.17-.83,2.24,2.24,0,0,1,.45-.68,2,2,0,0,1,.68-.46A2.14,2.14,0,0,1,492.2,857.89Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M516.14,879.94a13,13,0,0,1-1.9.34c-.66.06-1.33.1-2,.1a6.34,6.34,0,0,1-4.41-1.34,5.31,5.31,0,0,1-1.45-4.1v-8.19H502v-2.28h4.39v-4.31l2.71-.7v5h7.05v2.28h-7.05v8a3.26,3.26,0,0,0,.9,2.52,3.75,3.75,0,0,0,2.65.84,12.3,12.3,0,0,0,1.64-.12,17.33,17.33,0,0,0,1.86-.36Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M535,860.61a18.38,18.38,0,0,0-3.69-.45q-3.68,0-3.67,3.84v2.75h6.87V869h-6.87v11.14h-2.77V869h-5v-2.27h5v-2.59q0-6.27,6.53-6.27a19.45,19.45,0,0,1,3.6.38Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M544,866.72h-4.64v-2.25h7.39v13.42h4.67v2.27H538.88v-2.27H544Zm1-8.83a2.14,2.14,0,0,1,.84.17,2,2,0,0,1,.68.46,2.24,2.24,0,0,1,.45.68,2.05,2.05,0,0,1,.17.83,2.09,2.09,0,0,1-.17.83,2.29,2.29,0,0,1-.45.69,2,2,0,0,1-.68.46,2.31,2.31,0,0,1-1.69,0,2,2,0,0,1-.68-.46,2.29,2.29,0,0,1-.45-.69,2.09,2.09,0,0,1-.17-.83,2.05,2.05,0,0,1,.17-.83,2.24,2.24,0,0,1,.45-.68,2,2,0,0,1,.68-.46A2.15,2.15,0,0,1,545,857.89Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M569.53,871.49c0,.38,0,.7,0,1s0,.5,0,.73h-11a4.85,4.85,0,0,0,1.35,3.69,5.37,5.37,0,0,0,3.87,1.29c.46,0,.92,0,1.38,0s.9-.09,1.33-.15.83-.13,1.22-.21.75-.16,1.09-.26v2.24a20.61,20.61,0,0,1-2.51.5,21,21,0,0,1-2.9.2,9.76,9.76,0,0,1-3.47-.55,5.89,5.89,0,0,1-2.38-1.58,6.53,6.53,0,0,1-1.37-2.55,11.88,11.88,0,0,1-.45-3.41,10.12,10.12,0,0,1,.48-3.14,7.69,7.69,0,0,1,1.39-2.59,6.48,6.48,0,0,1,2.24-1.77,6.67,6.67,0,0,1,3-.66,7.5,7.5,0,0,1,2.9.52,5.66,5.66,0,0,1,2.13,1.46,6.24,6.24,0,0,1,1.32,2.29A9.85,9.85,0,0,1,569.53,871.49Zm-2.83-.39a5.65,5.65,0,0,0-.2-1.92,4.06,4.06,0,0,0-.77-1.49,3.67,3.67,0,0,0-1.31-1,4.43,4.43,0,0,0-1.81-.35,3.74,3.74,0,0,0-1.62.35,3.54,3.54,0,0,0-1.27,1,5,5,0,0,0-.86,1.5,7.26,7.26,0,0,0-.41,1.93Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M579.22,860.31h-4.64v-2.23H582v19.81h4.67v2.27H574.06v-2.27h5.16Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M590.67,872.64a10.5,10.5,0,0,1,.55-3.55,7.31,7.31,0,0,1,1.55-2.63,6.65,6.65,0,0,1,2.43-1.62,8.52,8.52,0,0,1,3.14-.56,10.32,10.32,0,0,1,1.48.1,9.79,9.79,0,0,1,1.43.29v-6.59H604v22.08h-2.44l-.1-3a8.28,8.28,0,0,1-2.46,2.45,5.54,5.54,0,0,1-2.88.8,4.63,4.63,0,0,1-4.07-2.15,7.44,7.44,0,0,1-1-2.46A13.67,13.67,0,0,1,590.67,872.64Zm2.78-.17a8.4,8.4,0,0,0,.84,4.24,2.62,2.62,0,0,0,2.37,1.4,3.61,3.61,0,0,0,2.18-.92,13.3,13.3,0,0,0,2.41-2.73v-7.29a7.13,7.13,0,0,0-1.48-.47,8.16,8.16,0,0,0-1.61-.17A4.31,4.31,0,0,0,594.7,868,6.77,6.77,0,0,0,593.45,872.47Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M615.24,875.24a2.45,2.45,0,0,1,1,.2,2.53,2.53,0,0,1,.83.56,2.61,2.61,0,0,1,.76,1.86,2.55,2.55,0,0,1-.2,1,2.6,2.6,0,0,1-.56.82,2.53,2.53,0,0,1-.83.56,2.65,2.65,0,0,1-2,0,2.68,2.68,0,0,1-1.38-1.38,2.55,2.55,0,0,1-.2-1,2.61,2.61,0,0,1,.76-1.86,2.6,2.6,0,0,1,.82-.56A2.44,2.44,0,0,1,615.24,875.24Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M639.27,880.16h-2.72v-10a4.49,4.49,0,0,0-.68-2.71,2.3,2.3,0,0,0-2-.9,3.2,3.2,0,0,0-2,.67,7.81,7.81,0,0,0-1.13,1c-.4.42-.87.94-1.4,1.56v10.41h-2.72V858.08h2.72v6.39l-.1,2.47a11.1,11.1,0,0,1,1.26-1.29,7,7,0,0,1,1.23-.85,4.83,4.83,0,0,1,1.26-.47,6.45,6.45,0,0,1,1.33-.14,4.65,4.65,0,0,1,3.63,1.43,6.29,6.29,0,0,1,1.28,4.3Z" transform="translate(-341.21 -94.59)"/></g><g id="surface1-7" data-name="surface1"><path class="cls-3" d="M1145.5,642.18a5.81,5.81,0,0,0-5.79-5.79H1050v28.94a5.79,5.79,0,0,1-5.79,5.79h-31.84V798.48a5.81,5.81,0,0,0,5.79,5.79h121.57a5.81,5.81,0,0,0,5.79-5.79Z" transform="translate(-341.21 -94.59)"/><path class="cls-4" d="M1050,804.27h89.73a5.79,5.79,0,0,0,5.79-5.79V714.8A145.07,145.07,0,0,1,1050,804.27Z" transform="translate(-341.21 -94.59)"/><path class="cls-5" d="M1050,665.33V636.39l-37.63,34.73h31.84A5.79,5.79,0,0,0,1050,665.33Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1093.39,714.54h-60.78a2.9,2.9,0,0,1,0-5.79h60.78a2.9,2.9,0,1,1,0,5.79Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1106,731.9h-73.35a2.89,2.89,0,1,1,0-5.78H1106a2.89,2.89,0,0,1,0,5.78Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1067.84,749.27h-35.23a2.9,2.9,0,0,1,0-5.79h35.23a2.9,2.9,0,0,1,0,5.79Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1110.76,697.17h-55a2.9,2.9,0,1,1,0-5.79h55a2.9,2.9,0,1,1,0,5.79Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1044.19,697.17h-11.58a2.9,2.9,0,0,1,0-5.79h11.58a2.9,2.9,0,0,1,0,5.79Z" transform="translate(-341.21 -94.59)"/></g><path class="cls-7" d="M1161.12,653.75h-87.25a4.61,4.61,0,0,0-4.59,4.6v41.32a4.61,4.61,0,0,0,4.59,4.59h87.25a4.61,4.61,0,0,0,4.59-4.59V658.35A4.61,4.61,0,0,0,1161.12,653.75Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1088.08,766.64h-55.47a2.9,2.9,0,0,1,0-5.79h55.47a2.9,2.9,0,1,1,0,5.79Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1058.66,784h-26.05a2.9,2.9,0,0,1,0-5.79h26.05a2.9,2.9,0,1,1,0,5.79Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1100.4,749.27h-20.75a2.9,2.9,0,1,1,0-5.79h20.75a2.9,2.9,0,0,1,0,5.79Z" transform="translate(-341.21 -94.59)"/><g class="cls-8"><path class="cls-9" d="M1112.28,666.68v9.88h10.43v-9.88h4.5v24.65h-4.5V680.47h-10.43v10.86h-4.5V666.68Z" transform="translate(-341.21 -94.59)"/></g><g class="cls-10"><path class="cls-11" d="M1025.76,840.42a10.48,10.48,0,0,1-.54,3.49,7.33,7.33,0,0,1-1.53,2.61,6.58,6.58,0,0,1-2.41,1.64,8.56,8.56,0,0,1-3.2.57,16.51,16.51,0,0,1-2.85-.26,14.27,14.27,0,0,1-2.87-.85V826.47h2.72v6.07l-.13,2.91a7.17,7.17,0,0,1,2.51-2.23,6.49,6.49,0,0,1,2.87-.64,4.7,4.7,0,0,1,2.35.56,4.86,4.86,0,0,1,1.71,1.58,7.59,7.59,0,0,1,1,2.47A14,14,0,0,1,1025.76,840.42Zm-2.78.12a13.19,13.19,0,0,0-.18-2.26,5.94,5.94,0,0,0-.57-1.77,3.13,3.13,0,0,0-1-1.15,2.55,2.55,0,0,0-1.45-.41,3.88,3.88,0,0,0-1,.16,4.52,4.52,0,0,0-1.1.55,8.6,8.6,0,0,0-1.2,1,14.38,14.38,0,0,0-1.35,1.57v7.61a10.4,10.4,0,0,0,1.62.49,7.44,7.44,0,0,0,1.58.18,5.38,5.38,0,0,0,1.79-.3,3.86,3.86,0,0,0,1.5-1,5.06,5.06,0,0,0,1-1.84A9.34,9.34,0,0,0,1023,840.54Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M1040,848.54l-.06-2.11a8.42,8.42,0,0,1-2.61,1.83,6.9,6.9,0,0,1-2.77.57,6.79,6.79,0,0,1-2.3-.35,4.35,4.35,0,0,1-1.57-.94,3.66,3.66,0,0,1-.9-1.42,5,5,0,0,1-.29-1.76,4.36,4.36,0,0,1,1.76-3.7,8.49,8.49,0,0,1,5.19-1.33h3.25V838a2.93,2.93,0,0,0-.89-2.23,3.88,3.88,0,0,0-2.72-.83,12,12,0,0,0-2.61.29,18.21,18.21,0,0,0-2.67.85v-2.45c.34-.13.73-.25,1.15-.37s.87-.23,1.34-.32,1-.17,1.46-.23a13.3,13.3,0,0,1,1.55-.08,9.6,9.6,0,0,1,2.56.31,5.13,5.13,0,0,1,1.93,1,4.13,4.13,0,0,1,1.21,1.61,5.55,5.55,0,0,1,.43,2.28v10.81Zm-.3-7.14h-3.45a6.4,6.4,0,0,0-1.75.21,3.19,3.19,0,0,0-1.2.57,2.25,2.25,0,0,0-.7.9,3,3,0,0,0-.23,1.18,2.78,2.78,0,0,0,.14.87,1.93,1.93,0,0,0,.46.73,2.08,2.08,0,0,0,.81.51,3.36,3.36,0,0,0,1.22.19,5.19,5.19,0,0,0,2.15-.57,10.35,10.35,0,0,0,2.55-1.81Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M1048.18,832.86h2.49l.08,2.89a9.88,9.88,0,0,1,2.74-2.42,5.57,5.57,0,0,1,2.73-.75,4.44,4.44,0,0,1,3.69,1.57,7.09,7.09,0,0,1,1.17,4.69h-2.75a5.08,5.08,0,0,0-.61-3,2.15,2.15,0,0,0-1.89-.93,3.32,3.32,0,0,0-1.11.19,4.35,4.35,0,0,0-1.14.63,10.56,10.56,0,0,0-1.24,1.1,19.55,19.55,0,0,0-1.41,1.63v10.07h-2.75Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M1078.39,839.87c0,.39,0,.71,0,1s0,.51,0,.74h-11a4.9,4.9,0,0,0,1.34,3.69,5.39,5.39,0,0,0,3.88,1.29c.46,0,.91,0,1.37,0s.9-.09,1.33-.15l1.23-.21c.39-.08.75-.17,1.08-.26v2.23a18.62,18.62,0,0,1-2.5.51,21.07,21.07,0,0,1-2.9.2,10,10,0,0,1-3.47-.55,5.91,5.91,0,0,1-2.38-1.59,6.56,6.56,0,0,1-1.38-2.54,12,12,0,0,1-.44-3.42,10,10,0,0,1,.47-3.13,7.77,7.77,0,0,1,1.39-2.59,6.57,6.57,0,0,1,5.26-2.43,7.79,7.79,0,0,1,2.91.51,5.83,5.83,0,0,1,2.13,1.46,6.12,6.12,0,0,1,1.31,2.3A9.53,9.53,0,0,1,1078.39,839.87Zm-2.83-.39a6.13,6.13,0,0,0-.2-1.91,4,4,0,0,0-.78-1.49,3.52,3.52,0,0,0-1.3-1,4.3,4.3,0,0,0-1.81-.35,3.78,3.78,0,0,0-1.63.34,3.62,3.62,0,0,0-1.26,1,4.79,4.79,0,0,0-.86,1.5,6.75,6.75,0,0,0-.41,1.92Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M1094.92,848a12,12,0,0,1-2.18.6,13.42,13.42,0,0,1-2.31.19,7.74,7.74,0,0,1-5.72-2,8,8,0,0,1-2-5.89,9.33,9.33,0,0,1,.58-3.38,7.54,7.54,0,0,1,1.62-2.59,7.18,7.18,0,0,1,2.5-1.67,8.53,8.53,0,0,1,3.21-.58,14.88,14.88,0,0,1,2.28.17,9.24,9.24,0,0,1,2,.56V836a8.43,8.43,0,0,0-2.07-.78,9.78,9.78,0,0,0-2.18-.24,4.9,4.9,0,0,0-2,.4,4.75,4.75,0,0,0-1.63,1.15,5.4,5.4,0,0,0-1.11,1.83,6.84,6.84,0,0,0-.41,2.43,5.87,5.87,0,0,0,1.39,4.26,5.12,5.12,0,0,0,3.83,1.41,9,9,0,0,0,2.15-.25,8.43,8.43,0,0,0,2-.75Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M1113,848.33a14.64,14.64,0,0,1-1.91.33,18.86,18.86,0,0,1-2,.1,6.34,6.34,0,0,1-4.41-1.33,5.31,5.31,0,0,1-1.45-4.1v-8.19h-4.39v-2.28h4.39v-4.32l2.72-.7v5h7v2.28h-7v8a3.29,3.29,0,0,0,.9,2.52,3.75,3.75,0,0,0,2.65.84,12.42,12.42,0,0,0,1.64-.12A15.66,15.66,0,0,0,1113,846Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M1131.84,829a18.47,18.47,0,0,0-3.69-.46c-2.44,0-3.67,1.29-3.67,3.85v2.75h6.88v2.26h-6.88v11.14h-2.76V837.4h-5v-2.26h5v-2.6q0-6.25,6.53-6.26a19.28,19.28,0,0,1,3.59.37Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M1141.68,843.62a2.47,2.47,0,0,1,1,.21,2.39,2.39,0,0,1,.83.56,2.76,2.76,0,0,1,.56.83,2.7,2.7,0,0,1,.2,1,2.62,2.62,0,0,1-.2,1,2.72,2.72,0,0,1-.56.82,2.51,2.51,0,0,1-.83.55,2.47,2.47,0,0,1-1,.21,2.44,2.44,0,0,1-1-.21,2.57,2.57,0,0,1-.82-.55,2.72,2.72,0,0,1-.56-.82,2.62,2.62,0,0,1-.2-1,2.7,2.7,0,0,1,.2-1,2.76,2.76,0,0,1,.56-.83,2.58,2.58,0,0,1,1.83-.77Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M1165.72,848.54H1163v-10a4.49,4.49,0,0,0-.68-2.71,2.3,2.3,0,0,0-2-.9,3.4,3.4,0,0,0-1,.15,3.6,3.6,0,0,0-1,.51,8.63,8.63,0,0,0-1.13,1c-.4.41-.87.93-1.4,1.56v10.4h-2.72V826.47h2.72v6.39l-.1,2.47A11.1,11.1,0,0,1,1157,834a7.06,7.06,0,0,1,1.23-.86,5,5,0,0,1,1.26-.46,5.83,5.83,0,0,1,1.33-.14,4.58,4.58,0,0,1,3.62,1.43,6.23,6.23,0,0,1,1.29,4.3Z" transform="translate(-341.21 -94.59)"/></g><g class="cls-27"><line class="cls-28" x1="289.39" y1="643.14" x2="382.95" y2="643.14"/><polygon class="cls-6" points="373.01 655.41 370.97 653.22 381.8 643.15 370.97 633.08 373.01 630.88 386.21 643.15 373.01 655.41"/></g><g class="cls-27"><line class="cls-28" x1="653.87" y1="643.14" x2="560.3" y2="643.14"/><polygon class="cls-6" points="570.24 630.88 572.29 633.07 561.45 643.14 572.29 653.21 570.24 655.41 557.05 643.14 570.24 630.88"/></g><g class="cls-25"><path class="cls-26" d="M813.25,359.53c0,106.25-243.06,88.87-271.33,221.47" transform="translate(-341.21 -94.59)"/><polygon class="cls-11" points="198.04 512.75 187.18 473.94 201.31 484.49 217.46 477.44 198.04 512.75"/></g><g class="cls-27"><line class="cls-28" x1="743.87" y1="779.26" x2="743.87" y2="872.82"/><polygon class="cls-6" points="731.6 862.88 733.8 860.83 743.87 871.67 753.94 860.83 756.14 862.88 743.87 876.07 731.6 862.88"/></g><g class="cls-27"><line class="cls-28" x1="825.39" y1="643.14" x2="918.95" y2="643.14"/><polygon class="cls-6" points="909.01 655.41 906.97 653.22 917.8 643.15 906.97 633.08 909.01 630.88 922.21 643.15 909.01 655.41"/></g><g class="cls-27"><line class="cls-28" x1="1189.87" y1="643.14" x2="1096.3" y2="643.14"/><polygon class="cls-6" points="1106.24 630.88 1108.29 633.07 1097.45 643.14 1108.29 653.21 1106.24 655.41 1093.05 643.14 1106.24 630.88"/></g><g class="cls-25"><line class="cls-26" x1="743.87" y1="1149" x2="743.87" y2="1370.34"/><polygon class="cls-11" points="743.87 1396.82 728.63 1359.51 743.87 1368.37 759.11 1359.51 743.87 1396.82"/></g><path class="cls-29" d="M1350.84,886.71c0,423.08-265.76,390.33-265.76,572.7" transform="translate(-341.21 -94.59)"/><path class="cls-29" d="M819.33,886.71c0,423.08,265.75,390.33,265.75,572.7" transform="translate(-341.21 -94.59)"/><g id="Page-1"><path id="Shape" class="cls-30" d="M1433.86,1539.8h84.07a12.45,12.45,0,0,1,12.46,12.45v143.24a12.45,12.45,0,0,1-12.46,12.45H1405.84a12.45,12.45,0,0,1-12.46-12.45V1580.28Z" transform="translate(-341.21 -94.59)"/><path class="cls-31" d="M1433.86,1539.8v28a12.46,12.46,0,0,1-12.46,12.46h-28Z" transform="translate(-341.21 -94.59)"/><path class="cls-32" d="M1499.25,1555.37h-18.68a3.12,3.12,0,1,1,0-6.23h18.68a3.12,3.12,0,0,1,0,6.23Z" transform="translate(-341.21 -94.59)"/><path class="cls-32" d="M1517.93,1555.37h-6.23a3.12,3.12,0,0,1,0-6.23h6.23a3.12,3.12,0,1,1,0,6.23Z" transform="translate(-341.21 -94.59)"/><path class="cls-31" d="M1412.06,1695.49H1409a3.12,3.12,0,0,1,0-6.23h3.11a3.12,3.12,0,1,1,0,6.23Z" transform="translate(-341.21 -94.59)"/><path class="cls-31" d="M1443.2,1695.49h-18.68a3.12,3.12,0,1,1,0-6.23h18.68a3.12,3.12,0,0,1,0,6.23Z" transform="translate(-341.21 -94.59)"/><rect id="Rectangle-path" class="cls-33" x="1101.99" y="1519.94" width="130.78" height="105.87" rx="12.46"/><rect class="cls-34" x="1114.44" y="1532.39" width="105.87" height="80.96" rx="3.11"/><path class="cls-32" d="M1468.11,1661.24a3.12,3.12,0,0,1-1.87-5.61l9.14-6.85-9.14-6.85a3.11,3.11,0,0,1,3.74-5l12.45,9.34a3.11,3.11,0,0,1,0,5l-12.45,9.34A3.08,3.08,0,0,1,1468.11,1661.24Z" transform="translate(-341.21 -94.59)"/><path class="cls-32" d="M1496.14,1661.24h-9.35a3.12,3.12,0,0,1,0-6.23h9.35a3.12,3.12,0,0,1,0,6.23Z" transform="translate(-341.21 -94.59)"/></g><g class="cls-10"><path class="cls-11" d="M1444.59,1764.05v-11.27a9.72,9.72,0,0,0-.06-1.2,2.8,2.8,0,0,0-.17-.74.88.88,0,0,0-.3-.39.87.87,0,0,0-.44-.11,1,1,0,0,0-.58.19,2.63,2.63,0,0,0-.57.61,9.69,9.69,0,0,0-.67,1.12q-.37.69-.87,1.71v10.08h-2.48v-11a12.88,12.88,0,0,0-.06-1.39,3.41,3.41,0,0,0-.17-.83.8.8,0,0,0-.31-.41.88.88,0,0,0-.45-.11,1,1,0,0,0-.53.16,2.24,2.24,0,0,0-.55.56,8.59,8.59,0,0,0-.68,1.11q-.37.7-.9,1.8v10.08h-2.5v-15.69h2.08l.13,3a13.79,13.79,0,0,1,.79-1.51,4.49,4.49,0,0,1,.79-1,2.58,2.58,0,0,1,1.89-.74,2.32,2.32,0,0,1,1.92.83,4.07,4.07,0,0,1,.65,2.56c.25-.54.5-1,.74-1.45a5.69,5.69,0,0,1,.77-1.06,3,3,0,0,1,.92-.65,2.78,2.78,0,0,1,1.15-.23c2,0,3,1.51,3,4.55v11.42Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M1465,1748.36l-5.35,14a26.89,26.89,0,0,1-1.71,3.69,10.92,10.92,0,0,1-1.93,2.54,6.74,6.74,0,0,1-2.3,1.46,7.93,7.93,0,0,1-2.79.47l-.74,0-.72,0V1768l.75.08a7.88,7.88,0,0,0,.86,0,4.24,4.24,0,0,0,1.4-.22,3.67,3.67,0,0,0,1.23-.71,6.77,6.77,0,0,0,1.11-1.27,12.54,12.54,0,0,0,1-1.89l-6.27-15.69h3.1l4,10.38.79,2.43.91-2.5,3.67-10.31Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M1479.55,1756.81h-9.34v-2.56h9.34Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M1496.26,1764.05l-.06-2.11a8.77,8.77,0,0,1-2.61,1.83,7.07,7.07,0,0,1-2.77.56,6.8,6.8,0,0,1-2.3-.34,4.37,4.37,0,0,1-1.57-1,3.63,3.63,0,0,1-.9-1.41,5.06,5.06,0,0,1-.29-1.77,4.36,4.36,0,0,1,1.76-3.69,8.42,8.42,0,0,1,5.19-1.34H1496v-1.38a2.92,2.92,0,0,0-.89-2.22,3.84,3.84,0,0,0-2.72-.84,11.57,11.57,0,0,0-2.62.3,19.73,19.73,0,0,0-2.66.84v-2.45c.34-.13.73-.25,1.15-.37s.87-.22,1.33-.32,1-.17,1.47-.22a13.3,13.3,0,0,1,1.55-.09,9.6,9.6,0,0,1,2.56.31,5.29,5.29,0,0,1,1.93.95,4.21,4.21,0,0,1,1.21,1.61,5.74,5.74,0,0,1,.43,2.29v10.81Zm-.3-7.14h-3.45a6.85,6.85,0,0,0-1.75.2,3.5,3.5,0,0,0-1.21.58,2.32,2.32,0,0,0-.69.9,3,3,0,0,0-.23,1.18,2.72,2.72,0,0,0,.14.86,2,2,0,0,0,.46.74,2.25,2.25,0,0,0,.81.51,3.61,3.61,0,0,0,1.22.18,5.19,5.19,0,0,0,2.15-.57,10.75,10.75,0,0,0,2.55-1.8Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M1517.18,1755.92a10.4,10.4,0,0,1-.59,3.66,7.18,7.18,0,0,1-1.61,2.59,6.57,6.57,0,0,1-2.44,1.55,8.88,8.88,0,0,1-3,.52,14.72,14.72,0,0,1-1.49-.08,10.44,10.44,0,0,1-1.51-.27v6.56h-2.72v-22.09h2.43l.17,2.63a6.87,6.87,0,0,1,2.5-2.26,6.46,6.46,0,0,1,2.87-.65,4.63,4.63,0,0,1,4.06,2.15,7.42,7.42,0,0,1,1,2.47A14.46,14.46,0,0,1,1517.18,1755.92Zm-2.78.13a13.31,13.31,0,0,0-.18-2.27,5.87,5.87,0,0,0-.57-1.76,3.14,3.14,0,0,0-1-1.15,2.5,2.5,0,0,0-1.45-.42,3.49,3.49,0,0,0-1,.17,4,4,0,0,0-1.1.55,8.39,8.39,0,0,0-1.21,1,16.77,16.77,0,0,0-1.35,1.57v7.61a9.07,9.07,0,0,0,1.58.49,7.61,7.61,0,0,0,1.63.18,4.26,4.26,0,0,0,3.45-1.49A6.87,6.87,0,0,0,1514.4,1756.05Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M1534.77,1755.92a10.41,10.41,0,0,1-.58,3.66,7.06,7.06,0,0,1-1.62,2.59,6.57,6.57,0,0,1-2.44,1.55,8.82,8.82,0,0,1-3,.52c-.5,0-1,0-1.5-.08a10.31,10.31,0,0,1-1.5-.27v6.56h-2.72v-22.09h2.42l.17,2.63a7,7,0,0,1,2.5-2.26,6.51,6.51,0,0,1,2.88-.65,4.87,4.87,0,0,1,2.36.56,5,5,0,0,1,1.7,1.59,7.41,7.41,0,0,1,1,2.47A13.9,13.9,0,0,1,1534.77,1755.92Zm-2.78.13a13.31,13.31,0,0,0-.18-2.27,5.87,5.87,0,0,0-.57-1.76,3.05,3.05,0,0,0-1-1.15,2.48,2.48,0,0,0-1.45-.42,3.6,3.6,0,0,0-1,.17,4.18,4.18,0,0,0-1.1.55,7.85,7.85,0,0,0-1.2,1,15.4,15.4,0,0,0-1.35,1.57v7.61a9,9,0,0,0,1.57.49,7.75,7.75,0,0,0,1.63.18,4.23,4.23,0,0,0,3.45-1.49A6.82,6.82,0,0,0,1532,1756.05Z" transform="translate(-341.21 -94.59)"/></g><g class="cls-25"><line class="cls-26" x1="874.35" y1="1529.44" x2="995.69" y2="1529.44"/><polygon class="cls-11" points="1022.17 1529.44 984.86 1544.69 993.71 1529.44 984.86 1514.2 1022.17 1529.44"/></g><g class="cls-25"><line class="cls-26" x1="1142.47" y1="1704.26" x2="1142.47" y2="1925.6"/><polygon class="cls-11" points="1142.47 1952.08 1127.22 1914.77 1142.47 1923.63 1157.71 1914.77 1142.47 1952.08"/></g><g id="surface1-8" data-name="surface1"><path class="cls-4" d="M1470.88,2097h67.21v-12.8a6.42,6.42,0,0,0-6.4-6.4h-99.22v32a6.41,6.41,0,0,1-6.4,6.4h-35.21v121.62a6.43,6.43,0,0,0,6.4,6.41h32V2135.37Z" transform="translate(-341.21 -94.59)"/><path class="cls-5" d="M1432.47,2109.77v-32l-41.61,38.41h35.21A6.41,6.41,0,0,0,1432.47,2109.77Z" transform="translate(-341.21 -94.59)"/><g class="cls-35"><path class="cls-6" d="M1422,2140.05c0,4.22-1.66,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.74-6.84,4.81-6.84S1422,2136.17,1422,2140.05Zm-7,.12c0,3.19.87,4.85,2.25,4.85s2.22-1.78,2.22-4.93-.73-4.86-2.22-4.86C1416,2135.23,1415,2136.87,1415.06,2140.17Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1427.48,2135.8h0L1425,2137l-.42-1.88,3.19-1.57h2.08v13.14h-2.4Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1438.31,2135.8h0l-2.4,1.21-.43-1.88,3.2-1.57h2.08v13.14h-2.41Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1454.53,2140.05c0,4.22-1.66,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.73-6.84,4.81-6.84S1454.53,2136.17,1454.53,2140.05Zm-7,.12c0,3.19.87,4.85,2.25,4.85s2.22-1.78,2.22-4.93-.73-4.86-2.22-4.86C1448.48,2135.23,1447.55,2136.87,1447.57,2140.17Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1460,2135.8h0l-2.41,1.21-.42-1.88,3.19-1.57h2.08v13.14H1460Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1476.2,2140.05c0,4.22-1.66,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.74-6.84,4.81-6.84S1476.2,2136.17,1476.2,2140.05Zm-7,.12c0,3.19.86,4.85,2.24,4.85s2.22-1.78,2.22-4.93-.72-4.86-2.22-4.86C1470.16,2135.23,1469.22,2136.87,1469.25,2140.17Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1487,2140.05c0,4.22-1.66,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.73-6.84,4.81-6.84S1487,2136.17,1487,2140.05Zm-7,.12c0,3.19.87,4.85,2.25,4.85s2.22-1.78,2.22-4.93-.73-4.86-2.22-4.86C1481,2135.23,1480.06,2136.87,1480.08,2140.17Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1497.87,2140.05c0,4.22-1.65,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.74-6.84,4.81-6.84S1497.87,2136.17,1497.87,2140.05Zm-6.95.12c0,3.19.87,4.85,2.24,4.85s2.23-1.78,2.23-4.93-.73-4.86-2.23-4.86C1491.83,2135.23,1490.9,2136.87,1490.92,2140.17Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1503.33,2135.8h0l-2.41,1.21-.42-1.88,3.19-1.57h2.09v13.14h-2.41Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1514.17,2135.8h0l-2.41,1.21-.42-1.88,3.19-1.57h2.08v13.14h-2.4Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1416.64,2152.06h0l-2.4,1.21-.43-1.88,3.2-1.57h2.08V2163h-2.41Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1432.86,2156.31c0,4.22-1.66,6.87-4.8,6.87s-4.65-2.75-4.67-6.75,1.74-6.84,4.82-6.84S1432.86,2152.43,1432.86,2156.31Zm-7,.12c0,3.19.87,4.85,2.24,4.85s2.23-1.78,2.23-4.93-.73-4.85-2.23-4.85C1426.81,2151.5,1425.88,2153.13,1425.9,2156.43Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1443.69,2156.31c0,4.22-1.66,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.74-6.84,4.81-6.84S1443.69,2152.43,1443.69,2156.31Zm-7,.12c0,3.19.87,4.85,2.24,4.85s2.23-1.78,2.23-4.93-.73-4.85-2.23-4.85C1437.65,2151.5,1436.72,2153.13,1436.74,2156.43Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1449.15,2152.06h0l-2.41,1.21-.42-1.88,3.19-1.57h2.09V2163h-2.41Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1465.36,2156.31c0,4.22-1.65,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.74-6.84,4.81-6.84S1465.36,2152.43,1465.36,2156.31Zm-6.95.12c0,3.19.87,4.85,2.24,4.85s2.23-1.78,2.23-4.93-.73-4.85-2.23-4.85C1459.32,2151.5,1458.39,2153.13,1458.41,2156.43Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1470.82,2152.06h0l-2.4,1.21-.43-1.88,3.2-1.57h2.08V2163h-2.41Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1487,2156.31c0,4.22-1.66,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.73-6.84,4.81-6.84S1487,2152.43,1487,2156.31Zm-7,.12c0,3.19.87,4.85,2.25,4.85s2.22-1.78,2.22-4.93-.73-4.85-2.22-4.85C1481,2151.5,1480.06,2153.13,1480.08,2156.43Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1492.5,2152.06h0l-2.41,1.21-.43-1.88,3.2-1.57h2.08V2163h-2.4Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1508.71,2156.31c0,4.22-1.66,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.74-6.84,4.81-6.84S1508.71,2152.43,1508.71,2156.31Zm-7,.12c0,3.19.87,4.85,2.25,4.85s2.22-1.78,2.22-4.93-.73-4.85-2.22-4.85C1502.66,2151.5,1501.73,2153.13,1501.75,2156.43Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1514.17,2152.06h0l-2.41,1.21-.42-1.88,3.19-1.57h2.08V2163h-2.4Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1422,2172.57c0,4.22-1.66,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.74-6.84,4.81-6.84S1422,2168.69,1422,2172.57Zm-7,.12c0,3.19.87,4.85,2.25,4.85s2.22-1.78,2.22-4.93-.73-4.85-2.22-4.85C1416,2167.76,1415,2169.39,1415.06,2172.69Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1432.86,2172.57c0,4.22-1.66,6.87-4.8,6.87s-4.65-2.75-4.67-6.75,1.74-6.84,4.82-6.84S1432.86,2168.69,1432.86,2172.57Zm-7,.12c0,3.19.87,4.85,2.24,4.85s2.23-1.78,2.23-4.93-.73-4.85-2.23-4.85C1426.81,2167.76,1425.88,2169.39,1425.9,2172.69Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1438.31,2168.32h0l-2.4,1.21-.43-1.88,3.2-1.57h2.08v13.14h-2.41Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1454.53,2172.57c0,4.22-1.66,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.73-6.84,4.81-6.84S1454.53,2168.69,1454.53,2172.57Zm-7,.12c0,3.19.87,4.85,2.25,4.85s2.22-1.78,2.22-4.93-.73-4.85-2.22-4.85C1448.48,2167.76,1447.55,2169.39,1447.57,2172.69Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1460,2168.32h0l-2.41,1.21-.42-1.88,3.19-1.57h2.08v13.14H1460Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1476.2,2172.57c0,4.22-1.66,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.74-6.84,4.81-6.84S1476.2,2168.69,1476.2,2172.57Zm-7,.12c0,3.19.86,4.85,2.24,4.85s2.22-1.78,2.22-4.93-.72-4.85-2.22-4.85C1470.16,2167.76,1469.22,2169.39,1469.25,2172.69Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1481.66,2168.32h0l-2.41,1.21-.42-1.88,3.19-1.57h2.09v13.14h-2.41Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1497.87,2172.57c0,4.22-1.65,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.74-6.84,4.81-6.84S1497.87,2168.69,1497.87,2172.57Zm-6.95.12c0,3.19.87,4.85,2.24,4.85s2.23-1.78,2.23-4.93-.73-4.85-2.23-4.85C1491.83,2167.76,1490.9,2169.39,1490.92,2172.69Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1508.71,2172.57c0,4.22-1.66,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.74-6.84,4.81-6.84S1508.71,2168.69,1508.71,2172.57Zm-7,.12c0,3.19.87,4.85,2.25,4.85s2.22-1.78,2.22-4.93-.73-4.85-2.22-4.85C1502.66,2167.76,1501.73,2169.39,1501.75,2172.69Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1514.17,2168.32h0l-2.41,1.21-.42-1.88,3.19-1.57h2.08v13.14h-2.4Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1416.64,2184.58h0l-2.4,1.22-.43-1.88,3.2-1.58h2.08v13.14h-2.41Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1432.86,2188.83c0,4.22-1.66,6.87-4.8,6.87s-4.65-2.75-4.67-6.75,1.74-6.83,4.82-6.83S1432.86,2185,1432.86,2188.83Zm-7,.12c0,3.19.87,4.85,2.24,4.85s2.23-1.78,2.23-4.93-.73-4.85-2.23-4.85C1426.81,2184,1425.88,2185.65,1425.9,2189Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1438.31,2184.58h0l-2.4,1.22-.43-1.88,3.2-1.58h2.08v13.14h-2.41Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1454.53,2188.83c0,4.22-1.66,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.73-6.83,4.81-6.83S1454.53,2185,1454.53,2188.83Zm-7,.12c0,3.19.87,4.85,2.25,4.85s2.22-1.78,2.22-4.93-.73-4.85-2.22-4.85C1448.48,2184,1447.55,2185.65,1447.57,2189Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1465.36,2188.83c0,4.22-1.65,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.74-6.83,4.81-6.83S1465.36,2185,1465.36,2188.83Zm-6.95.12c0,3.19.87,4.85,2.24,4.85s2.23-1.78,2.23-4.93-.73-4.85-2.23-4.85C1459.32,2184,1458.39,2185.65,1458.41,2189Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1470.82,2184.58h0l-2.4,1.22-.43-1.88,3.2-1.58h2.08v13.14h-2.41Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1487,2188.83c0,4.22-1.66,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.73-6.83,4.81-6.83S1487,2185,1487,2188.83Zm-7,.12c0,3.19.87,4.85,2.25,4.85s2.22-1.78,2.22-4.93-.73-4.85-2.22-4.85C1481,2184,1480.06,2185.65,1480.08,2189Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1497.87,2188.83c0,4.22-1.65,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.74-6.83,4.81-6.83S1497.87,2185,1497.87,2188.83Zm-6.95.12c0,3.19.87,4.85,2.24,4.85s2.23-1.78,2.23-4.93-.73-4.85-2.23-4.85C1491.83,2184,1490.9,2185.65,1490.92,2189Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1503.33,2184.58h0l-2.41,1.22-.42-1.88,3.19-1.58h2.09v13.14h-2.41Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1519.55,2188.83c0,4.22-1.66,6.87-4.8,6.87s-4.65-2.75-4.67-6.75,1.74-6.83,4.81-6.83S1519.55,2185,1519.55,2188.83Zm-7,.12c0,3.19.87,4.85,2.24,4.85s2.23-1.78,2.23-4.93-.73-4.85-2.23-4.85C1513.5,2184,1512.57,2185.65,1512.59,2189Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1422,2205.09c0,4.22-1.66,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.74-6.83,4.81-6.83S1422,2201.21,1422,2205.09Zm-7,.12c0,3.19.87,4.85,2.25,4.85s2.22-1.78,2.22-4.93-.73-4.85-2.22-4.85C1416,2200.28,1415,2201.91,1415.06,2205.21Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1432.86,2205.09c0,4.22-1.66,6.87-4.8,6.87s-4.65-2.75-4.67-6.75,1.74-6.83,4.82-6.83S1432.86,2201.21,1432.86,2205.09Zm-7,.12c0,3.19.87,4.85,2.24,4.85s2.23-1.78,2.23-4.93-.73-4.85-2.23-4.85C1426.81,2200.28,1425.88,2201.91,1425.9,2205.21Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1438.31,2200.84h0l-2.4,1.22-.43-1.88,3.2-1.58h2.08v13.14h-2.41Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1449.15,2200.84h0l-2.41,1.22-.42-1.88,3.19-1.58h2.09v13.14h-2.41Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1465.36,2205.09c0,4.22-1.65,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.74-6.83,4.81-6.83S1465.36,2201.21,1465.36,2205.09Zm-6.95.12c0,3.19.87,4.85,2.24,4.85s2.23-1.78,2.23-4.93-.73-4.85-2.23-4.85C1459.32,2200.28,1458.39,2201.91,1458.41,2205.21Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1470.82,2200.84h0l-2.4,1.22-.43-1.88,3.2-1.58h2.08v13.14h-2.41Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1481.66,2200.84h0l-2.41,1.22-.42-1.88,3.19-1.58h2.09v13.14h-2.41Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1492.5,2200.84h0l-2.41,1.22-.43-1.88,3.2-1.58h2.08v13.14h-2.4Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1508.71,2205.09c0,4.22-1.66,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.74-6.83,4.81-6.83S1508.71,2201.21,1508.71,2205.09Zm-7,.12c0,3.19.87,4.85,2.25,4.85s2.22-1.78,2.22-4.93-.73-4.85-2.22-4.85C1502.66,2200.28,1501.73,2201.91,1501.75,2205.21Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1514.17,2200.84h0l-2.41,1.22-.42-1.88,3.19-1.58h2.08v13.14h-2.4Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1416.64,2217.1h0l-2.4,1.22-.43-1.88,3.2-1.58h2.08V2228h-2.41Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1427.48,2217.1h0l-2.41,1.22-.42-1.88,3.19-1.58h2.08V2228h-2.4Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1443.69,2221.35c0,4.22-1.66,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.74-6.83,4.81-6.83S1443.69,2217.47,1443.69,2221.35Zm-7,.12c0,3.19.87,4.85,2.24,4.85s2.23-1.78,2.23-4.93-.73-4.85-2.23-4.85C1437.65,2216.54,1436.72,2218.17,1436.74,2221.47Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1449.15,2217.1h0l-2.41,1.22-.42-1.88,3.19-1.58h2.09V2228h-2.41Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1465.36,2221.35c0,4.22-1.65,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.74-6.83,4.81-6.83S1465.36,2217.47,1465.36,2221.35Zm-6.95.12c0,3.19.87,4.85,2.24,4.85s2.23-1.78,2.23-4.93-.73-4.85-2.23-4.85C1459.32,2216.54,1458.39,2218.17,1458.41,2221.47Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1476.2,2221.35c0,4.22-1.66,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.74-6.83,4.81-6.83S1476.2,2217.47,1476.2,2221.35Zm-7,.12c0,3.19.86,4.85,2.24,4.85s2.22-1.78,2.22-4.93-.72-4.85-2.22-4.85C1470.16,2216.54,1469.22,2218.17,1469.25,2221.47Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1481.66,2217.1h0l-2.41,1.22-.42-1.88,3.19-1.58h2.09V2228h-2.41Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1492.5,2217.1h0l-2.41,1.22-.43-1.88,3.2-1.58h2.08V2228h-2.4Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1508.71,2221.35c0,4.22-1.66,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.74-6.83,4.81-6.83S1508.71,2217.47,1508.71,2221.35Zm-7,.12c0,3.19.87,4.85,2.25,4.85s2.22-1.78,2.22-4.93-.73-4.85-2.22-4.85C1502.66,2216.54,1501.73,2218.17,1501.75,2221.47Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1514.17,2217.1h0l-2.41,1.22-.42-1.88,3.19-1.58h2.08V2228h-2.4Z" transform="translate(-341.21 -94.59)"/></g><path class="cls-3" d="M1570.1,2097h-99.22v32a6.4,6.4,0,0,1-6.4,6.4h-35.21V2257a6.42,6.42,0,0,0,6.4,6.4H1570.1a6.42,6.42,0,0,0,6.4-6.4V2103.36A6.42,6.42,0,0,0,1570.1,2097Z" transform="translate(-341.21 -94.59)"/><path class="cls-5" d="M1464.48,2135.37a6.4,6.4,0,0,0,6.4-6.4v-32l-41.61,38.41Z" transform="translate(-341.21 -94.59)"/><path class="cls-4" d="M1470.88,2263.4h99.22a6.41,6.41,0,0,0,6.4-6.4v-92.53A160.38,160.38,0,0,1,1470.88,2263.4Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1460.42,2160.12c0,4.22-1.65,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.74-6.84,4.81-6.84S1460.42,2156.23,1460.42,2160.12Zm-7,.12c0,3.19.87,4.85,2.24,4.85s2.23-1.78,2.23-4.93-.73-4.86-2.23-4.86C1454.38,2155.3,1453.45,2156.94,1453.47,2160.24Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1465.88,2155.87h0l-2.4,1.21-.43-1.88,3.2-1.57h2.08v13.14h-2.41Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1476.72,2155.87h0l-2.41,1.21-.42-1.88,3.19-1.57h2.09v13.14h-2.41Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1492.93,2160.12c0,4.22-1.66,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.74-6.84,4.81-6.84S1492.93,2156.23,1492.93,2160.12Zm-7,.12c0,3.19.87,4.85,2.24,4.85s2.23-1.78,2.23-4.93-.73-4.86-2.23-4.86C1486.89,2155.3,1486,2156.94,1486,2160.24Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1498.39,2155.87h0l-2.41,1.21-.42-1.88,3.19-1.57h2.09v13.14h-2.41Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1514.6,2160.12c0,4.22-1.65,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.74-6.84,4.81-6.84S1514.6,2156.23,1514.6,2160.12Zm-6.95.12c0,3.19.87,4.85,2.24,4.85s2.23-1.78,2.23-4.93-.73-4.86-2.23-4.86C1508.56,2155.3,1507.63,2156.94,1507.65,2160.24Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1525.44,2160.12c0,4.22-1.66,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.74-6.84,4.81-6.84S1525.44,2156.23,1525.44,2160.12Zm-7,.12c0,3.19.87,4.85,2.24,4.85s2.22-1.78,2.22-4.93-.72-4.86-2.22-4.86C1519.4,2155.3,1518.47,2156.94,1518.49,2160.24Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1536.28,2160.12c0,4.22-1.66,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.73-6.84,4.81-6.84S1536.28,2156.23,1536.28,2160.12Zm-7,.12c0,3.19.87,4.85,2.25,4.85s2.22-1.78,2.22-4.93-.73-4.86-2.22-4.86C1530.23,2155.3,1529.3,2156.94,1529.32,2160.24Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1541.74,2155.87h0l-2.41,1.21-.43-1.88,3.2-1.57h2.08v13.14h-2.4Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1552.57,2155.87h0l-2.4,1.21-.43-1.88,3.19-1.57H1555v13.14h-2.41Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1455.05,2172.13h0l-2.41,1.21-.43-1.88,3.2-1.57h2.08V2183h-2.4Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1471.26,2176.38c0,4.22-1.66,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.74-6.84,4.81-6.84S1471.26,2172.49,1471.26,2176.38Zm-7,.12c0,3.19.87,4.85,2.25,4.85s2.22-1.78,2.22-4.93-.72-4.86-2.22-4.86C1465.22,2171.56,1464.28,2173.2,1464.3,2176.5Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1482.1,2176.38c0,4.22-1.66,6.87-4.8,6.87s-4.64-2.75-4.67-6.75,1.74-6.84,4.82-6.84S1482.1,2172.49,1482.1,2176.38Zm-7,.12c0,3.19.87,4.85,2.25,4.85s2.22-1.78,2.22-4.93-.73-4.86-2.22-4.86S1475.12,2173.2,1475.14,2176.5Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1487.55,2172.13h0l-2.4,1.21-.43-1.88,3.2-1.57H1490V2183h-2.41Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1503.77,2176.38c0,4.22-1.66,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.74-6.84,4.81-6.84S1503.77,2172.49,1503.77,2176.38Zm-7,.12c0,3.19.87,4.85,2.25,4.85s2.22-1.78,2.22-4.93-.73-4.86-2.22-4.86C1497.72,2171.56,1496.79,2173.2,1496.81,2176.5Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1509.23,2172.13h0l-2.41,1.21-.42-1.88,3.19-1.57h2.08V2183h-2.4Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1525.44,2176.38c0,4.22-1.66,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.74-6.84,4.81-6.84S1525.44,2172.49,1525.44,2176.38Zm-7,.12c0,3.19.87,4.85,2.24,4.85s2.22-1.78,2.22-4.93-.72-4.86-2.22-4.86C1519.4,2171.56,1518.47,2173.2,1518.49,2176.5Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1530.9,2172.13h0l-2.41,1.21-.42-1.88,3.19-1.57h2.09V2183h-2.41Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1547.11,2176.38c0,4.22-1.65,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.74-6.84,4.81-6.84S1547.11,2172.49,1547.11,2176.38Zm-6.95.12c0,3.19.87,4.85,2.24,4.85s2.23-1.78,2.23-4.93-.73-4.86-2.23-4.86C1541.07,2171.56,1540.14,2173.2,1540.16,2176.5Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1552.57,2172.13h0l-2.4,1.21-.43-1.88,3.19-1.57H1555V2183h-2.41Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1460.42,2192.64c0,4.22-1.65,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.74-6.84,4.81-6.84S1460.42,2188.75,1460.42,2192.64Zm-7,.12c0,3.19.87,4.85,2.24,4.85s2.23-1.78,2.23-4.93-.73-4.86-2.23-4.86C1454.38,2187.82,1453.45,2189.46,1453.47,2192.76Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1471.26,2192.64c0,4.22-1.66,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.74-6.84,4.81-6.84S1471.26,2188.75,1471.26,2192.64Zm-7,.12c0,3.19.87,4.85,2.25,4.85s2.22-1.78,2.22-4.93-.72-4.86-2.22-4.86C1465.22,2187.82,1464.28,2189.46,1464.3,2192.76Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1476.72,2188.39h0l-2.41,1.21-.42-1.88,3.19-1.57h2.09v13.14h-2.41Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1492.93,2192.64c0,4.22-1.66,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.74-6.84,4.81-6.84S1492.93,2188.75,1492.93,2192.64Zm-7,.12c0,3.19.87,4.85,2.24,4.85s2.23-1.78,2.23-4.93-.73-4.86-2.23-4.86C1486.89,2187.82,1486,2189.46,1486,2192.76Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1498.39,2188.39h0l-2.41,1.21-.42-1.88,3.19-1.57h2.09v13.14h-2.41Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1514.6,2192.64c0,4.22-1.65,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.74-6.84,4.81-6.84S1514.6,2188.75,1514.6,2192.64Zm-6.95.12c0,3.19.87,4.85,2.24,4.85s2.23-1.78,2.23-4.93-.73-4.86-2.23-4.86C1508.56,2187.82,1507.63,2189.46,1507.65,2192.76Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1520.06,2188.39h0l-2.4,1.21-.43-1.88,3.2-1.57h2.08v13.14h-2.41Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1536.28,2192.64c0,4.22-1.66,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.73-6.84,4.81-6.84S1536.28,2188.75,1536.28,2192.64Zm-7,.12c0,3.19.87,4.85,2.25,4.85s2.22-1.78,2.22-4.93-.73-4.86-2.22-4.86C1530.23,2187.82,1529.3,2189.46,1529.32,2192.76Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1547.11,2192.64c0,4.22-1.65,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.74-6.84,4.81-6.84S1547.11,2188.75,1547.11,2192.64Zm-6.95.12c0,3.19.87,4.85,2.24,4.85s2.23-1.78,2.23-4.93-.73-4.86-2.23-4.86C1541.07,2187.82,1540.14,2189.46,1540.16,2192.76Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1552.57,2188.39h0l-2.4,1.21-.43-1.88,3.19-1.57H1555v13.14h-2.41Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1455.05,2204.65h0l-2.41,1.21-.43-1.88,3.2-1.57h2.08v13.14h-2.4Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1471.26,2208.9c0,4.22-1.66,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.74-6.84,4.81-6.84S1471.26,2205,1471.26,2208.9Zm-7,.12c0,3.19.87,4.85,2.25,4.85s2.22-1.78,2.22-4.93-.72-4.86-2.22-4.86C1465.22,2204.08,1464.28,2205.72,1464.3,2209Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1476.72,2204.65h0l-2.41,1.21-.42-1.88,3.19-1.57h2.09v13.14h-2.41Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1492.93,2208.9c0,4.22-1.66,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.74-6.84,4.81-6.84S1492.93,2205,1492.93,2208.9Zm-7,.12c0,3.19.87,4.85,2.24,4.85s2.23-1.78,2.23-4.93-.73-4.86-2.23-4.86C1486.89,2204.08,1486,2205.72,1486,2209Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1503.77,2208.9c0,4.22-1.66,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.74-6.84,4.81-6.84S1503.77,2205,1503.77,2208.9Zm-7,.12c0,3.19.87,4.85,2.25,4.85s2.22-1.78,2.22-4.93-.73-4.86-2.22-4.86C1497.72,2204.08,1496.79,2205.72,1496.81,2209Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1509.23,2204.65h0l-2.41,1.21-.42-1.88,3.19-1.57h2.08v13.14h-2.4Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1525.44,2208.9c0,4.22-1.66,6.87-4.79,6.87S1516,2213,1516,2209s1.74-6.84,4.81-6.84S1525.44,2205,1525.44,2208.9Zm-7,.12c0,3.19.87,4.85,2.24,4.85s2.22-1.78,2.22-4.93-.72-4.86-2.22-4.86C1519.4,2204.08,1518.47,2205.72,1518.49,2209Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1536.28,2208.9c0,4.22-1.66,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.73-6.84,4.81-6.84S1536.28,2205,1536.28,2208.9Zm-7,.12c0,3.19.87,4.85,2.25,4.85s2.22-1.78,2.22-4.93-.73-4.86-2.22-4.86C1530.23,2204.08,1529.3,2205.72,1529.32,2209Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1541.74,2204.65h0l-2.41,1.21-.43-1.88,3.2-1.57h2.08v13.14h-2.4Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1558,2208.9c0,4.22-1.66,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.74-6.84,4.81-6.84S1558,2205,1558,2208.9Zm-7,.12c0,3.19.87,4.85,2.25,4.85s2.22-1.78,2.22-4.93-.73-4.86-2.22-4.86C1551.9,2204.08,1551,2205.72,1551,2209Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1460.42,2225.16c0,4.22-1.65,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.74-6.84,4.81-6.84S1460.42,2221.28,1460.42,2225.16Zm-7,.12c0,3.19.87,4.85,2.24,4.85s2.23-1.78,2.23-4.93-.73-4.86-2.23-4.86C1454.38,2220.34,1453.45,2222,1453.47,2225.28Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1471.26,2225.16c0,4.22-1.66,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.74-6.84,4.81-6.84S1471.26,2221.28,1471.26,2225.16Zm-7,.12c0,3.19.87,4.85,2.25,4.85s2.22-1.78,2.22-4.93-.72-4.86-2.22-4.86C1465.22,2220.34,1464.28,2222,1464.3,2225.28Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1476.72,2220.91h0l-2.41,1.21-.42-1.88,3.19-1.57h2.09v13.14h-2.41Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1487.55,2220.91h0l-2.4,1.21-.43-1.88,3.2-1.57H1490v13.14h-2.41Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1503.77,2225.16c0,4.22-1.66,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.74-6.84,4.81-6.84S1503.77,2221.28,1503.77,2225.16Zm-7,.12c0,3.19.87,4.85,2.25,4.85s2.22-1.78,2.22-4.93-.73-4.86-2.22-4.86C1497.72,2220.34,1496.79,2222,1496.81,2225.28Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1509.23,2220.91h0l-2.41,1.21-.42-1.88,3.19-1.57h2.08v13.14h-2.4Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1520.06,2220.91h0l-2.4,1.21-.43-1.88,3.2-1.57h2.08v13.14h-2.41Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1530.9,2220.91h0l-2.41,1.21-.42-1.88,3.19-1.57h2.09v13.14h-2.41Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1547.11,2225.16c0,4.22-1.65,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.74-6.84,4.81-6.84S1547.11,2221.28,1547.11,2225.16Zm-6.95.12c0,3.19.87,4.85,2.24,4.85s2.23-1.78,2.23-4.93-.73-4.86-2.23-4.86C1541.07,2220.34,1540.14,2222,1540.16,2225.28Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1552.57,2220.91h0l-2.4,1.21-.43-1.88,3.19-1.57H1555v13.14h-2.41Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1455.05,2237.17h0l-2.41,1.21-.43-1.88,3.2-1.57h2.08v13.14h-2.4Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1465.88,2237.17h0l-2.4,1.21-.43-1.88,3.2-1.57h2.08v13.14h-2.41Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1482.1,2241.42c0,4.22-1.66,6.87-4.8,6.87s-4.64-2.75-4.67-6.75,1.74-6.84,4.82-6.84S1482.1,2237.54,1482.1,2241.42Zm-7,.12c0,3.19.87,4.85,2.25,4.85s2.22-1.78,2.22-4.93-.73-4.86-2.22-4.86S1475.12,2238.24,1475.14,2241.54Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1487.55,2237.17h0l-2.4,1.21-.43-1.88,3.2-1.57H1490v13.14h-2.41Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1503.77,2241.42c0,4.22-1.66,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.74-6.84,4.81-6.84S1503.77,2237.54,1503.77,2241.42Zm-7,.12c0,3.19.87,4.85,2.25,4.85s2.22-1.78,2.22-4.93-.73-4.86-2.22-4.86C1497.72,2236.6,1496.79,2238.24,1496.81,2241.54Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1514.6,2241.42c0,4.22-1.65,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.74-6.84,4.81-6.84S1514.6,2237.54,1514.6,2241.42Zm-6.95.12c0,3.19.87,4.85,2.24,4.85s2.23-1.78,2.23-4.93-.73-4.86-2.23-4.86C1508.56,2236.6,1507.63,2238.24,1507.65,2241.54Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1520.06,2237.17h0l-2.4,1.21-.43-1.88,3.2-1.57h2.08v13.14h-2.41Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1530.9,2237.17h0l-2.41,1.21-.42-1.88,3.19-1.57h2.09v13.14h-2.41Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1547.11,2241.42c0,4.22-1.65,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.74-6.84,4.81-6.84S1547.11,2237.54,1547.11,2241.42Zm-6.95.12c0,3.19.87,4.85,2.24,4.85s2.23-1.78,2.23-4.93-.73-4.86-2.23-4.86C1541.07,2236.6,1540.14,2238.24,1540.16,2241.54Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1552.57,2237.17h0l-2.4,1.21-.43-1.88,3.19-1.57H1555v13.14h-2.41Z" transform="translate(-341.21 -94.59)"/></g><g class="cls-10"><path class="cls-11" d="M1440.75,2304.75a13.62,13.62,0,0,1-5.57,1c-6.84,0-11-4.28-11-10.84,0-7.11,4.92-11.39,11.52-11.39a12.29,12.29,0,0,1,5.24,1l-.86,3.13a10.42,10.42,0,0,0-4.22-.83c-4.39,0-7.56,2.75-7.56,7.93,0,4.74,2.79,7.78,7.52,7.78a11,11,0,0,0,4.29-.8Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M1448.88,2287.12h-6.14v-3.29H1459v3.29h-6.2v18.27h-3.94Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M1461.55,2283.83H1474v3.23h-8.51v6h7.93v3.23h-7.93v9.15h-3.94Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M1498.67,2282.68V2301c0,1.6.06,3.33.13,4.38h-3.52l-.16-2.46h-.07a5.59,5.59,0,0,1-5.08,2.82c-3.71,0-6.66-3.17-6.66-8,0-5.22,3.23-8.32,7-8.32a4.94,4.94,0,0,1,4.38,2.05h.06v-8.83Zm-3.94,13.63a6,6,0,0,0-.09-1,3.45,3.45,0,0,0-3.39-2.78c-2.53,0-3.94,2.24-3.94,5.15s1.41,4.93,3.91,4.93a3.48,3.48,0,0,0,3.39-2.79,4.62,4.62,0,0,0,.12-1.15Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M1511.66,2305.39l-.25-1.72h-.1a5.8,5.8,0,0,1-4.61,2.08,4.63,4.63,0,0,1-4.89-4.64c0-3.94,3.49-5.92,9.24-5.89V2295c0-1-.41-2.72-3.16-2.72a8.24,8.24,0,0,0-4.19,1.15l-.77-2.55a11.12,11.12,0,0,1,5.63-1.38c5,0,6.43,3.17,6.43,6.56v5.63a25,25,0,0,0,.22,3.74Zm-.51-7.61c-2.78-.07-5.44.54-5.44,2.91a2.06,2.06,0,0,0,2.24,2.24,3.18,3.18,0,0,0,3.07-2.14,2.74,2.74,0,0,0,.13-.87Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M1523.47,2285.36v4.45h3.75v3h-3.75v6.87c0,1.89.51,2.88,2,2.88a5.61,5.61,0,0,0,1.53-.19l.07,3a8.8,8.8,0,0,1-2.85.38,4.54,4.54,0,0,1-3.39-1.28c-.83-.89-1.22-2.3-1.22-4.35v-7.32h-2.24v-3h2.24v-3.52Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M1539,2305.39l-.26-1.72h-.09a5.8,5.8,0,0,1-4.61,2.08,4.63,4.63,0,0,1-4.9-4.64c0-3.94,3.49-5.92,9.25-5.89V2295c0-1-.41-2.72-3.17-2.72a8.29,8.29,0,0,0-4.19,1.15l-.77-2.55a11.19,11.19,0,0,1,5.64-1.38c5,0,6.43,3.17,6.43,6.56v5.63a25,25,0,0,0,.22,3.74Zm-.51-7.61c-2.79-.07-5.44.54-5.44,2.91a2.06,2.06,0,0,0,2.24,2.24,3.18,3.18,0,0,0,3.07-2.14,2.74,2.74,0,0,0,.13-.87Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M1431.14,2332.18a8.8,8.8,0,0,0,4,1.12c1.72,0,2.49-.71,2.49-1.73s-.64-1.6-2.56-2.27c-3-1.06-4.32-2.72-4.28-4.54,0-2.76,2.27-4.9,5.88-4.9a9.16,9.16,0,0,1,4.13.93l-.77,2.78a7,7,0,0,0-3.29-.9c-1.41,0-2.18.68-2.18,1.64s.74,1.47,2.72,2.17c2.82,1,4.13,2.47,4.16,4.77,0,2.82-2.21,4.86-6.34,4.86a10,10,0,0,1-4.73-1.08Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M1449.18,2315.76v4.45h3.75v2.94h-3.75V2330c0,1.89.52,2.88,2,2.88a5.76,5.76,0,0,0,1.54-.19l.06,3a8.8,8.8,0,0,1-2.85.38,4.56,4.56,0,0,1-3.39-1.28c-.83-.89-1.22-2.3-1.22-4.35v-7.33h-2.24v-2.94h2.24v-3.52Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M1455.91,2325.23c0-2.11,0-3.61-.13-5h3.42l.13,3h.13a4.64,4.64,0,0,1,4.25-3.33,3.79,3.79,0,0,1,.93.1v3.71a5.07,5.07,0,0,0-1.15-.13,3.47,3.47,0,0,0-3.52,3,6.34,6.34,0,0,0-.13,1.22v8.06h-3.93Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M1469.79,2329.11c.1,2.81,2.31,4,4.8,4a11.62,11.62,0,0,0,4.32-.71l.58,2.72a14.58,14.58,0,0,1-5.44,1c-5.06,0-8-3.1-8-7.87,0-4.32,2.62-8.38,7.61-8.38s6.72,4.16,6.72,7.58a9.18,9.18,0,0,1-.13,1.67Zm6.85-2.76c0-1.44-.61-3.8-3.23-3.8-2.43,0-3.46,2.21-3.62,3.8Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M1492.29,2335.79l-.26-1.72h-.09a5.82,5.82,0,0,1-4.61,2.08,4.63,4.63,0,0,1-4.9-4.64c0-3.94,3.49-5.92,9.25-5.89v-.26c0-1-.42-2.72-3.17-2.72a8.2,8.2,0,0,0-4.19,1.16l-.77-2.57a11.27,11.27,0,0,1,5.63-1.37c5,0,6.44,3.17,6.44,6.56v5.63a25,25,0,0,0,.22,3.74Zm-.51-7.61c-2.79-.07-5.44.54-5.44,2.91a2.06,2.06,0,0,0,2.24,2.24,3.19,3.19,0,0,0,3.07-2.14,3.06,3.06,0,0,0,.13-.87Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M1499.78,2324.85c0-1.79,0-3.3-.13-4.64H1503l.16,2.3h.1a5.38,5.38,0,0,1,4.8-2.65,4.51,4.51,0,0,1,4.32,2.88h.06a5.78,5.78,0,0,1,1.92-1.95,5.19,5.19,0,0,1,3.13-.93c2.6,0,5.22,1.76,5.22,6.75v9.18h-3.84v-8.6c0-2.6-.9-4.13-2.78-4.13a3,3,0,0,0-2.75,2.08,5.37,5.37,0,0,0-.2,1.31v9.34h-3.84v-9c0-2.18-.86-3.71-2.68-3.71a3.07,3.07,0,0,0-2.82,2.24,3.35,3.35,0,0,0-.22,1.28v9.21h-3.84Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M1526.72,2332.18a8.84,8.84,0,0,0,4,1.12c1.73,0,2.5-.71,2.5-1.73s-.64-1.6-2.56-2.27c-3-1.06-4.32-2.72-4.29-4.54,0-2.76,2.27-4.9,5.89-4.9a9.12,9.12,0,0,1,4.12.93l-.76,2.78a7.07,7.07,0,0,0-3.3-.9c-1.41,0-2.18.68-2.18,1.64s.74,1.47,2.72,2.17c2.82,1,4.13,2.47,4.16,4.77,0,2.82-2.2,4.86-6.33,4.86A10.06,10.06,0,0,1,1526,2335Z" transform="translate(-341.21 -94.59)"/></g><g id="surface1-9" data-name="surface1"><path class="cls-3" d="M1843.83,2101.43a5.81,5.81,0,0,0-5.79-5.79h-89.72v29a5.79,5.79,0,0,1-5.79,5.79h-31.84v127.36a5.8,5.8,0,0,0,5.79,5.78H1838a5.8,5.8,0,0,0,5.79-5.78Z" transform="translate(-341.21 -94.59)"/><path class="cls-4" d="M1748.32,2263.52H1838a5.78,5.78,0,0,0,5.79-5.78v-83.68A145,145,0,0,1,1748.32,2263.52Z" transform="translate(-341.21 -94.59)"/><path class="cls-5" d="M1748.32,2124.59v-29l-37.63,34.74h31.84A5.79,5.79,0,0,0,1748.32,2124.59Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1791.73,2173.8H1731a2.9,2.9,0,1,1,0-5.79h60.78a2.9,2.9,0,1,1,0,5.79Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1804.29,2191.16H1731a2.9,2.9,0,1,1,0-5.79h73.34a2.9,2.9,0,1,1,0,5.79Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1766.17,2208.53H1731a2.9,2.9,0,1,1,0-5.79h35.22a2.9,2.9,0,1,1,0,5.79Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1809.1,2156.43h-55a2.9,2.9,0,0,1,0-5.79h55a2.9,2.9,0,0,1,0,5.79Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1742.53,2156.43H1731a2.9,2.9,0,1,1,0-5.79h11.58a2.9,2.9,0,0,1,0,5.79Z" transform="translate(-341.21 -94.59)"/></g><path class="cls-7" d="M1859.45,2113h-87.24a4.61,4.61,0,0,0-4.59,4.59v41.33a4.61,4.61,0,0,0,4.59,4.59h87.24a4.61,4.61,0,0,0,4.6-4.59V2117.6A4.61,4.61,0,0,0,1859.45,2113Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1786.42,2225.9H1731a2.9,2.9,0,1,1,0-5.79h55.47a2.9,2.9,0,0,1,0,5.79Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1757,2243.26h-26a2.9,2.9,0,1,1,0-5.79h26a2.9,2.9,0,0,1,0,5.79Z" transform="translate(-341.21 -94.59)"/><path class="cls-6" d="M1798.74,2208.53H1778a2.9,2.9,0,0,1,0-5.79h20.76a2.9,2.9,0,0,1,0,5.79Z" transform="translate(-341.21 -94.59)"/><path class="cls-9" d="M1787.07,2130.79h-6.15v-3.29h16.29v3.29H1791v18.28h-3.93Z" transform="translate(-341.21 -94.59)"/><path class="cls-9" d="M1799.39,2144.78a11,11,0,0,0,5.21,1.37c2.53,0,3.94-1.18,3.94-2.94s-1.09-2.59-3.84-3.58c-3.55-1.28-5.83-3.17-5.83-6.28,0-3.52,3-6.2,7.62-6.2a11.45,11.45,0,0,1,5.18,1.08l-1,3.17a9.18,9.18,0,0,0-4.29-1c-2.49,0-3.58,1.34-3.58,2.59,0,1.66,1.25,2.43,4.13,3.55,3.74,1.41,5.57,3.3,5.57,6.4,0,3.46-2.63,6.46-8.19,6.46a12.89,12.89,0,0,1-5.83-1.34Z" transform="translate(-341.21 -94.59)"/><path class="cls-9" d="M1816.09,2127.79a39.52,39.52,0,0,1,6.27-.45c4,0,6.82.83,8.8,2.49s3.36,4.26,3.36,7.94c0,3.84-1.31,6.72-3.36,8.58s-5.57,2.94-9.76,2.94a42.92,42.92,0,0,1-5.31-.29Zm3.94,18.27a15.51,15.51,0,0,0,2.17.09c5.12,0,8.16-2.78,8.16-8.25,0-4.77-2.72-7.49-7.65-7.49a13.09,13.09,0,0,0-2.68.22Z" transform="translate(-341.21 -94.59)"/><path class="cls-9" d="M1838,2127.5h3.93v18.27h8.87v3.3H1838Z" transform="translate(-341.21 -94.59)"/><g class="cls-10"><path class="cls-11" d="M1730.68,2307.41v-11.27a9.72,9.72,0,0,0-.06-1.2,2.45,2.45,0,0,0-.17-.74.7.7,0,0,0-.74-.5,1,1,0,0,0-.58.19,2.63,2.63,0,0,0-.57.61,8.89,8.89,0,0,0-.67,1.12c-.25.46-.53,1-.87,1.71v10.08h-2.48v-11a12.88,12.88,0,0,0-.06-1.39,2.92,2.92,0,0,0-.17-.83.84.84,0,0,0-.3-.41,1,1,0,0,0-.46-.11,1.05,1.05,0,0,0-.53.16,2.43,2.43,0,0,0-.55.56,7.94,7.94,0,0,0-.68,1.11c-.25.47-.55,1.07-.89,1.8v10.08h-2.5v-15.69h2.08l.12,3a13.79,13.79,0,0,1,.79-1.51,4.79,4.79,0,0,1,.79-1,2.62,2.62,0,0,1,1.89-.74,2.32,2.32,0,0,1,1.92.83,4.07,4.07,0,0,1,.66,2.56c.25-.54.49-1,.73-1.45a5.29,5.29,0,0,1,.78-1.06,3,3,0,0,1,.91-.65,2.64,2.64,0,0,1,1.16-.23c2,0,3,1.51,3,4.55v11.42Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M1750.34,2298.74c0,.38,0,.7,0,1s0,.51,0,.74h-11a4.86,4.86,0,0,0,1.34,3.69,5.39,5.39,0,0,0,3.88,1.29c.45,0,.91,0,1.37-.05s.9-.09,1.33-.15.83-.13,1.23-.21.75-.17,1.08-.26V2307a20.23,20.23,0,0,1-2.51.5,20.81,20.81,0,0,1-2.89.2,9.72,9.72,0,0,1-3.47-.55,5.93,5.93,0,0,1-2.39-1.58,6.66,6.66,0,0,1-1.37-2.55,12,12,0,0,1-.45-3.42,10.1,10.1,0,0,1,.48-3.13,7.87,7.87,0,0,1,1.39-2.59,6.72,6.72,0,0,1,2.24-1.78,6.84,6.84,0,0,1,3-.65,7.7,7.7,0,0,1,2.9.51,5.93,5.93,0,0,1,2.14,1.47,6.22,6.22,0,0,1,1.31,2.29A9.55,9.55,0,0,1,1750.34,2298.74Zm-2.83-.4a5.87,5.87,0,0,0-.21-1.91,3.91,3.91,0,0,0-.77-1.49,3.64,3.64,0,0,0-1.3-1,4.51,4.51,0,0,0-1.82-.35,3.76,3.76,0,0,0-1.62.34,3.88,3.88,0,0,0-1.27,1,5.21,5.21,0,0,0-.86,1.5,6.89,6.89,0,0,0-.4,1.92Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M1767.32,2307.19a13.13,13.13,0,0,1-1.91.33,18.71,18.71,0,0,1-2,.11,6.31,6.31,0,0,1-4.4-1.34,5.31,5.31,0,0,1-1.46-4.1V2294h-4.39v-2.28h4.39v-4.31l2.72-.71v5h7V2294h-7v8a3.27,3.27,0,0,0,.9,2.52,3.75,3.75,0,0,0,2.65.84,12.3,12.3,0,0,0,1.64-.12,15.66,15.66,0,0,0,1.86-.37Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M1782.35,2307.41l-.06-2.11a8.74,8.74,0,0,1-2.6,1.83,7.12,7.12,0,0,1-2.78.56,6.72,6.72,0,0,1-2.29-.35,4.14,4.14,0,0,1-1.57-.94,3.54,3.54,0,0,1-.91-1.41,5.34,5.34,0,0,1-.29-1.77,4.41,4.41,0,0,1,1.76-3.7,8.49,8.49,0,0,1,5.19-1.33h3.25v-1.38a2.87,2.87,0,0,0-.89-2.22,3.84,3.84,0,0,0-2.72-.84,11.49,11.49,0,0,0-2.61.3,19.41,19.41,0,0,0-2.67.84v-2.45c.35-.13.73-.25,1.15-.37s.87-.23,1.34-.32,1-.17,1.47-.23,1-.08,1.54-.08a9.68,9.68,0,0,1,2.57.31,5.37,5.37,0,0,1,1.93.95,4.31,4.31,0,0,1,1.21,1.61,5.73,5.73,0,0,1,.42,2.28v10.82Zm-.3-7.14h-3.45a6.43,6.43,0,0,0-1.75.2,3.36,3.36,0,0,0-1.2.58,2.34,2.34,0,0,0-.7.9,3,3,0,0,0-.22,1.18,2.46,2.46,0,0,0,.14.86,1.89,1.89,0,0,0,.45.74,2.34,2.34,0,0,0,.81.51,3.65,3.65,0,0,0,1.22.18,5.15,5.15,0,0,0,2.15-.57,10.36,10.36,0,0,0,2.55-1.8Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M1789.07,2299.89a10.5,10.5,0,0,1,.55-3.55,7.31,7.31,0,0,1,1.55-2.63,6.61,6.61,0,0,1,2.42-1.62,8.61,8.61,0,0,1,3.15-.56,10.41,10.41,0,0,1,1.48.1,10.07,10.07,0,0,1,1.43.29v-6.59h2.73v22.08h-2.44l-.09-3a8.19,8.19,0,0,1-2.47,2.45,5.48,5.48,0,0,1-2.87.8,4.63,4.63,0,0,1-4.07-2.15,7.45,7.45,0,0,1-1-2.46A13.69,13.69,0,0,1,1789.07,2299.89Zm2.78-.17a8.4,8.4,0,0,0,.84,4.24,2.61,2.61,0,0,0,2.36,1.4,3.56,3.56,0,0,0,2.18-.92,13.4,13.4,0,0,0,2.42-2.74v-7.28a7.22,7.22,0,0,0-1.49-.47,8,8,0,0,0-1.61-.17,4.33,4.33,0,0,0-3.46,1.44A6.78,6.78,0,0,0,1791.85,2299.72Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M1817.54,2307.41l-.06-2.11a8.77,8.77,0,0,1-2.61,1.83,7.07,7.07,0,0,1-2.77.56,6.79,6.79,0,0,1-2.3-.35,4.22,4.22,0,0,1-1.57-.94,3.63,3.63,0,0,1-.9-1.41,5.1,5.1,0,0,1-.29-1.77,4.39,4.39,0,0,1,1.76-3.7,8.49,8.49,0,0,1,5.19-1.33h3.25v-1.38a2.91,2.91,0,0,0-.89-2.22,3.84,3.84,0,0,0-2.72-.84,11.57,11.57,0,0,0-2.62.3,19.73,19.73,0,0,0-2.66.84v-2.45c.34-.13.73-.25,1.15-.37s.87-.23,1.34-.32,1-.17,1.46-.23,1-.08,1.55-.08a9.6,9.6,0,0,1,2.56.31,5.29,5.29,0,0,1,1.93.95,4.21,4.21,0,0,1,1.21,1.61,5.55,5.55,0,0,1,.43,2.28v10.82Zm-.3-7.14h-3.45a6.43,6.43,0,0,0-1.75.2,3.36,3.36,0,0,0-1.2.58,2.25,2.25,0,0,0-.7.9,3,3,0,0,0-.23,1.18,2.72,2.72,0,0,0,.14.86,2,2,0,0,0,.46.74,2.34,2.34,0,0,0,.81.51,3.61,3.61,0,0,0,1.22.18,5.19,5.19,0,0,0,2.15-.57,10.75,10.75,0,0,0,2.55-1.8Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M1837.69,2307.19a13,13,0,0,1-1.9.33,18.85,18.85,0,0,1-2,.11,6.34,6.34,0,0,1-4.41-1.34,5.31,5.31,0,0,1-1.45-4.1V2294h-4.39v-2.28h4.39v-4.31l2.72-.71v5h7V2294h-7v8a3.27,3.27,0,0,0,.9,2.52,3.72,3.72,0,0,0,2.64.84,12.56,12.56,0,0,0,1.65-.12,15.13,15.13,0,0,0,1.85-.37Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M1852.73,2307.41l-.07-2.11a8.61,8.61,0,0,1-2.6,1.83,7.07,7.07,0,0,1-2.77.56,6.79,6.79,0,0,1-2.3-.35,4.22,4.22,0,0,1-1.57-.94,3.77,3.77,0,0,1-.91-1.41,5.34,5.34,0,0,1-.28-1.77,4.41,4.41,0,0,1,1.75-3.7,8.54,8.54,0,0,1,5.2-1.33h3.25v-1.38a2.91,2.91,0,0,0-.89-2.22,3.85,3.85,0,0,0-2.72-.84,11.51,11.51,0,0,0-2.62.3,18.87,18.87,0,0,0-2.66.84v-2.45c.34-.13.72-.25,1.15-.37s.86-.23,1.33-.32,1-.17,1.47-.23,1-.08,1.55-.08a9.6,9.6,0,0,1,2.56.31,5.37,5.37,0,0,1,1.93.95,4.21,4.21,0,0,1,1.21,1.61,5.73,5.73,0,0,1,.42,2.28v10.82Zm-.3-7.14H1849a6.43,6.43,0,0,0-1.75.2,3.5,3.5,0,0,0-1.21.58,2.32,2.32,0,0,0-.69.9,3,3,0,0,0-.23,1.18,2.72,2.72,0,0,0,.14.86,2.17,2.17,0,0,0,.45.74,2.3,2.3,0,0,0,.82.51,3.61,3.61,0,0,0,1.22.18,5.11,5.11,0,0,0,2.14-.57,10.59,10.59,0,0,0,2.56-1.8Z" transform="translate(-341.21 -94.59)"/></g><g class="cls-10"><path class="cls-11" d="M1581,2430.42a13.66,13.66,0,0,1-5.57,1c-6.85,0-11-4.29-11-10.85,0-7.1,4.93-11.39,11.52-11.39a12.35,12.35,0,0,1,5.25,1l-.87,3.14a10.4,10.4,0,0,0-4.22-.84c-4.38,0-7.55,2.76-7.55,7.94,0,4.74,2.78,7.77,7.52,7.77a11.06,11.06,0,0,0,4.29-.79Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M1589.13,2412.79H1583v-3.3h16.29v3.3h-6.21v18.27h-3.94Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M1601.81,2409.49h12.44v3.23h-8.51v6h7.94v3.24h-7.94v9.15h-3.93Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M1629.07,2411v4.45h3.74v2.94h-3.74v6.88c0,1.89.51,2.88,2,2.88a6.07,6.07,0,0,0,1.54-.19l.06,3a8.73,8.73,0,0,1-2.84.38,4.58,4.58,0,0,1-3.4-1.28c-.83-.9-1.21-2.3-1.21-4.35v-7.33H1623v-2.94h2.24V2412Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M1635.79,2420.5c0-2.11,0-3.62-.13-5h3.42l.13,3h.13a4.65,4.65,0,0,1,4.26-3.33,4.32,4.32,0,0,1,.92.1v3.71a5.71,5.71,0,0,0-1.15-.13,3.47,3.47,0,0,0-3.52,3,7.13,7.13,0,0,0-.13,1.22v8.06h-3.93Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M1655.66,2431.06l-.26-1.73h-.09a5.77,5.77,0,0,1-4.61,2.08,4.63,4.63,0,0,1-4.9-4.64c0-3.93,3.49-5.92,9.25-5.89v-.25c0-1-.41-2.72-3.17-2.72a8.29,8.29,0,0,0-4.19,1.15l-.77-2.56a11.3,11.3,0,0,1,5.64-1.38c5,0,6.43,3.17,6.43,6.56v5.64a25.06,25.06,0,0,0,.22,3.74Zm-.51-7.62c-2.79-.06-5.44.55-5.44,2.91a2.06,2.06,0,0,0,2.24,2.24,3.18,3.18,0,0,0,3.07-2.14,2.73,2.73,0,0,0,.13-.86Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M1674.6,2430.58a11.43,11.43,0,0,1-4.41.8c-4.87,0-8-3.11-8-7.94,0-4.67,3.2-8.32,8.67-8.32a9.68,9.68,0,0,1,3.8.74l-.7,2.94a7.08,7.08,0,0,0-3-.6c-3,0-4.8,2.2-4.77,5.05,0,3.2,2.08,5,4.77,5a7.72,7.72,0,0,0,3.1-.6Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M1680,2424.37c.1,2.82,2.31,4,4.8,4a11.64,11.64,0,0,0,4.32-.7l.58,2.72a14.78,14.78,0,0,1-5.44,1c-5.06,0-8-3.11-8-7.87,0-4.32,2.62-8.39,7.61-8.39s6.72,4.16,6.72,7.59a9,9,0,0,1-.13,1.66Zm6.85-2.75c0-1.44-.61-3.81-3.23-3.81-2.43,0-3.46,2.21-3.62,3.81Z" transform="translate(-341.21 -94.59)"/></g><rect class="cls-36" x="24.05" y="887.09" width="347.97" height="342.75" rx="15.6"/><g id="surface1-10" data-name="surface1"><path class="cls-3" d="M461.84,1213.39a2.9,2.9,0,0,0-2.9-2.89H414.08V1225a2.89,2.89,0,0,1-2.9,2.89H395.26v63.68a2.92,2.92,0,0,0,2.9,2.9h60.78a2.92,2.92,0,0,0,2.9-2.9Z" transform="translate(-341.21 -94.59)"/><path class="cls-4" d="M414.08,1294.44h44.86a2.9,2.9,0,0,0,2.9-2.9V1249.7A72.55,72.55,0,0,1,414.08,1294.44Z" transform="translate(-341.21 -94.59)"/><path class="cls-5" d="M414.08,1225V1210.5l-18.82,17.36h15.92A2.89,2.89,0,0,0,414.08,1225Z" transform="translate(-341.21 -94.59)"/></g><g id="surface1-11" data-name="surface1"><path class="cls-12" d="M461.84,1114.47a2.92,2.92,0,0,0-2.9-2.9H414.08v14.48a2.9,2.9,0,0,1-2.9,2.89H395.26v63.68a2.9,2.9,0,0,0,2.9,2.89h60.78a2.9,2.9,0,0,0,2.9-2.89Z" transform="translate(-341.21 -94.59)"/><path class="cls-13" d="M414.08,1195.51h44.86a2.89,2.89,0,0,0,2.9-2.89v-41.84A72.52,72.52,0,0,1,414.08,1195.51Z" transform="translate(-341.21 -94.59)"/><path class="cls-14" d="M414.08,1126.05v-14.48l-18.82,17.37h15.92A2.9,2.9,0,0,0,414.08,1126.05Z" transform="translate(-341.21 -94.59)"/></g><g id="surface1-12" data-name="surface1"><path class="cls-16" d="M461.84,1015.53a2.92,2.92,0,0,0-2.9-2.9H414.08v14.48a2.9,2.9,0,0,1-2.9,2.89H395.26v63.68a2.9,2.9,0,0,0,2.9,2.89h60.78a2.9,2.9,0,0,0,2.9-2.89Z" transform="translate(-341.21 -94.59)"/><path class="cls-17" d="M414.08,1096.57h44.86a2.89,2.89,0,0,0,2.9-2.89v-41.84A72.54,72.54,0,0,1,414.08,1096.57Z" transform="translate(-341.21 -94.59)"/><path class="cls-18" d="M414.08,1027.11v-14.48L395.26,1030h15.92A2.9,2.9,0,0,0,414.08,1027.11Z" transform="translate(-341.21 -94.59)"/></g><g class="cls-10"><path class="cls-11" d="M494.69,1042.43V1055c0,4.23,1.76,6.18,4.41,6.18,2.85,0,4.55-2,4.55-6.18v-12.57h3.93v12.32c0,6.65-3.42,9.6-8.61,9.6-5,0-8.22-2.79-8.22-9.57v-12.35Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M511.42,1060.38a8.84,8.84,0,0,0,4,1.12c1.73,0,2.5-.7,2.5-1.73s-.64-1.6-2.56-2.27c-3-1.06-4.32-2.72-4.29-4.54,0-2.76,2.27-4.9,5.89-4.9a9.16,9.16,0,0,1,4.13.93l-.77,2.78a7,7,0,0,0-3.3-.89c-1.41,0-2.17.67-2.17,1.63s.73,1.47,2.72,2.17c2.81,1,4.12,2.47,4.16,4.77,0,2.82-2.21,4.87-6.34,4.87a10.09,10.09,0,0,1-4.74-1.09Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M527.74,1057.31c.1,2.81,2.31,4,4.8,4a11.85,11.85,0,0,0,4.32-.7l.58,2.72a14.78,14.78,0,0,1-5.44,1c-5.06,0-8-3.11-8-7.88,0-4.32,2.62-8.38,7.61-8.38s6.72,4.16,6.72,7.58a9.09,9.09,0,0,1-.13,1.67Zm6.85-2.75c0-1.44-.61-3.81-3.23-3.81-2.43,0-3.46,2.21-3.62,3.81Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M541.47,1053.44c0-2.12,0-3.62-.13-5h3.43l.12,3H545a4.65,4.65,0,0,1,4.26-3.33,3.84,3.84,0,0,1,.93.1v3.71a5.17,5.17,0,0,0-1.16-.13,3.49,3.49,0,0,0-3.52,3,7.07,7.07,0,0,0-.12,1.21V1064h-3.94Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M559.93,1064v-12.64h-2.11v-2.95h2.11v-.73c0-4.2,2.91-6.76,7.55-6.76a9.15,9.15,0,0,1,4.29,1l-.86,3a7.23,7.23,0,0,0-3.43-.83c-2.75,0-3.64,1.66-3.64,3.71v.64h9.31V1064h-4v-12.64h-5.31V1064Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M577.37,1041.28h4V1064h-4Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M588.38,1057.31c.1,2.81,2.3,4,4.8,4a11.89,11.89,0,0,0,4.32-.7l.58,2.72a14.78,14.78,0,0,1-5.44,1c-5.06,0-8-3.11-8-7.88,0-4.32,2.63-8.38,7.62-8.38s6.72,4.16,6.72,7.58a9.09,9.09,0,0,1-.13,1.67Zm6.85-2.75c0-1.44-.61-3.81-3.23-3.81-2.44,0-3.46,2.21-3.62,3.81Z" transform="translate(-341.21 -94.59)"/></g><g class="cls-10"><path class="cls-11" d="M490.78,1141.66a33.73,33.73,0,0,1,6-.45c2.88,0,5,.61,6.37,1.76a6.1,6.1,0,0,1,2.11,4.77,6.52,6.52,0,0,1-1.86,4.89,9.5,9.5,0,0,1-6.81,2.31,11.65,11.65,0,0,1-1.92-.13v8.13h-3.91Zm3.91,10a7.84,7.84,0,0,0,1.92.16c2.94,0,4.73-1.44,4.73-4s-1.66-3.68-4.38-3.68a10.56,10.56,0,0,0-2.27.19Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M508.41,1140.22h4v22.72h-4Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M525.41,1162.94l-.26-1.73h-.1a5.8,5.8,0,0,1-4.6,2.08,4.63,4.63,0,0,1-4.9-4.64c0-3.94,3.49-5.92,9.25-5.89v-.26c0-1-.42-2.72-3.17-2.72a8.14,8.14,0,0,0-4.19,1.16l-.77-2.56a11.15,11.15,0,0,1,5.63-1.38c5,0,6.43,3.17,6.43,6.56v5.63a25,25,0,0,0,.23,3.75Zm-.52-7.62c-2.78-.06-5.44.54-5.44,2.91a2.07,2.07,0,0,0,2.24,2.24,3.2,3.2,0,0,0,3.08-2.14,3,3,0,0,0,.12-.87Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M537.21,1142.91v4.44H541v3h-3.75v6.88c0,1.88.52,2.88,2,2.88a5.69,5.69,0,0,0,1.54-.2l.06,3a8.48,8.48,0,0,1-2.85.39,4.56,4.56,0,0,1-3.39-1.28c-.83-.9-1.22-2.31-1.22-4.36v-7.32h-2.24v-3h2.24v-3.52Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M544.38,1162.94V1150.3h-2.11v-3h2.11v-.67a7.3,7.3,0,0,1,1.89-5.31,5.94,5.94,0,0,1,4.06-1.5,7.75,7.75,0,0,1,2.53.38l-.29,3a4.54,4.54,0,0,0-1.66-.29c-1.95,0-2.62,1.63-2.62,3.55v.8h3.42v3h-3.39v12.64Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M568.61,1155c0,5.73-4,8.29-8,8.29-4.42,0-7.81-3-7.81-8s3.36-8.26,8.06-8.26S568.61,1150.26,568.61,1155Zm-11.75.16c0,3,1.47,5.28,3.87,5.28,2.24,0,3.81-2.21,3.81-5.34,0-2.44-1.09-5.22-3.77-5.22S556.86,1152.57,556.86,1155.16Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M571.84,1152.38c0-2.12,0-3.62-.13-5h3.42l.13,3h.13a4.65,4.65,0,0,1,4.26-3.33,3.76,3.76,0,0,1,.92.1v3.71a5.07,5.07,0,0,0-1.15-.13,3.47,3.47,0,0,0-3.52,3,7,7,0,0,0-.13,1.21v8.07h-3.93Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M583.23,1152c0-1.79,0-3.29-.13-4.64h3.39l.16,2.31h.1a5.39,5.39,0,0,1,4.8-2.66,4.49,4.49,0,0,1,4.32,2.88h.06a6.07,6.07,0,0,1,1.92-2A5.22,5.22,0,0,1,601,1147c2.59,0,5.21,1.76,5.21,6.75v9.19h-3.84v-8.61c0-2.59-.89-4.13-2.78-4.13a3,3,0,0,0-2.75,2.08,5.37,5.37,0,0,0-.19,1.31v9.35H592.8v-9c0-2.17-.87-3.71-2.69-3.71a3.09,3.09,0,0,0-2.82,2.24,3.35,3.35,0,0,0-.22,1.28v9.22h-3.84Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M617.44,1162.94V1150.3h-2.12v-3h2.12v-.73c0-4.2,2.91-6.75,7.55-6.75a9.21,9.21,0,0,1,4.29,1l-.87,3A7.19,7.19,0,0,0,625,1143c-2.75,0-3.65,1.67-3.65,3.71v.64h9.31v15.59h-4V1150.3h-5.31v12.64Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M634.88,1140.22h4v22.72h-4Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M645.88,1156.25c.1,2.81,2.31,4,4.8,4a11.85,11.85,0,0,0,4.32-.7l.58,2.72a14.74,14.74,0,0,1-5.44,1c-5.06,0-8-3.11-8-7.88,0-4.32,2.62-8.38,7.61-8.38s6.72,4.16,6.72,7.58a10.34,10.34,0,0,1-.12,1.67Zm6.85-2.75c0-1.44-.61-3.81-3.23-3.81-2.43,0-3.46,2.21-3.62,3.81Z" transform="translate(-341.21 -94.59)"/></g><g class="cls-10"><path class="cls-11" d="M508.06,1260.87a21.38,21.38,0,0,1-6.94,1.21c-3.65,0-6.4-.93-8.45-2.88a10.68,10.68,0,0,1-3-7.93c0-6.82,4.87-11.2,12-11.2a14.31,14.31,0,0,1,5.73,1l-.86,3.17a11.69,11.69,0,0,0-4.9-.93c-4.61,0-7.84,2.72-7.84,7.74s3,7.81,7.49,7.81a7.41,7.41,0,0,0,3-.45v-5.37h-3.8V1250h7.61Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M514.91,1255.17c.1,2.82,2.3,4,4.8,4a11.68,11.68,0,0,0,4.32-.7l.58,2.72a14.78,14.78,0,0,1-5.44,1c-5.06,0-8-3.11-8-7.87,0-4.32,2.63-8.39,7.62-8.39s6.72,4.16,6.72,7.59a9,9,0,0,1-.13,1.66Zm6.85-2.75c0-1.44-.61-3.81-3.23-3.81-2.44,0-3.46,2.21-3.62,3.81Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M528.64,1250.91c0-1.79,0-3.29-.13-4.64H532l.19,2.34h.09a5.62,5.62,0,0,1,5-2.69c2.72,0,5.54,1.76,5.54,6.69v9.25h-3.94v-8.8c0-2.24-.83-3.94-3-3.94a3.29,3.29,0,0,0-3.07,2.31,3.94,3.94,0,0,0-.16,1.28v9.15h-4Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M549.73,1255.17c.09,2.82,2.3,4,4.8,4a11.62,11.62,0,0,0,4.31-.7l.58,2.72a14.74,14.74,0,0,1-5.44,1c-5.05,0-8-3.11-8-7.87,0-4.32,2.62-8.39,7.62-8.39s6.71,4.16,6.71,7.59a10.3,10.3,0,0,1-.12,1.66Zm6.84-2.75c0-1.44-.6-3.81-3.23-3.81-2.43,0-3.45,2.21-3.61,3.81Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M563.45,1251.3c0-2.11,0-3.62-.12-5h3.42l.13,3H567a4.64,4.64,0,0,1,4.25-3.33,3.84,3.84,0,0,1,.93.1v3.71a5.71,5.71,0,0,0-1.15-.13,3.47,3.47,0,0,0-3.52,3,6.23,6.23,0,0,0-.13,1.21v8.07h-3.94Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M583.32,1261.86l-.25-1.73H583a5.77,5.77,0,0,1-4.61,2.08,4.62,4.62,0,0,1-4.89-4.64c0-3.94,3.49-5.92,9.25-5.89v-.25c0-1-.42-2.72-3.17-2.72a8.24,8.24,0,0,0-4.19,1.15l-.77-2.56a11.15,11.15,0,0,1,5.63-1.38c5,0,6.43,3.17,6.43,6.56v5.63a25,25,0,0,0,.23,3.75Zm-.51-7.62c-2.78-.06-5.44.55-5.44,2.91a2.06,2.06,0,0,0,2.24,2.24,3.18,3.18,0,0,0,3.07-2.14,2.73,2.73,0,0,0,.13-.86Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M595.13,1241.83v4.44h3.75v3h-3.75v6.88c0,1.89.51,2.88,2,2.88a6,6,0,0,0,1.53-.19l.07,3a8.48,8.48,0,0,1-2.85.39,4.56,4.56,0,0,1-3.39-1.28c-.83-.9-1.22-2.31-1.22-4.35v-7.33h-2.24v-3h2.24v-3.51Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M604.44,1255.17c.1,2.82,2.31,4,4.8,4a11.64,11.64,0,0,0,4.32-.7l.58,2.72a14.74,14.74,0,0,1-5.44,1c-5.05,0-8-3.11-8-7.87,0-4.32,2.62-8.39,7.61-8.39s6.72,4.16,6.72,7.59a10.3,10.3,0,0,1-.12,1.66Zm6.85-2.75c0-1.44-.61-3.81-3.23-3.81-2.43,0-3.45,2.21-3.62,3.81Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M632.54,1239.14v18.33c0,1.6.06,3.33.13,4.39h-3.52l-.16-2.47h-.07a5.59,5.59,0,0,1-5.08,2.82c-3.72,0-6.66-3.17-6.66-8,0-5.21,3.23-8.32,7-8.32a5,5,0,0,1,4.38,2h.06v-8.83Zm-3.94,13.63a5.86,5.86,0,0,0-.09-1,3.45,3.45,0,0,0-3.39-2.79c-2.53,0-3.94,2.24-3.94,5.15s1.41,4.93,3.9,4.93a3.49,3.49,0,0,0,3.4-2.78,4.67,4.67,0,0,0,.12-1.15Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M643.84,1261.86v-12.64h-2.12v-3h2.12v-.73c0-4.19,2.91-6.75,7.55-6.75a9.21,9.21,0,0,1,4.29,1l-.87,3a7.06,7.06,0,0,0-3.42-.84c-2.75,0-3.65,1.67-3.65,3.71v.64h9.31v15.59h-4v-12.64h-5.31v12.64Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M661.28,1239.14h4v22.72h-4Z" transform="translate(-341.21 -94.59)"/><path class="cls-11" d="M672.28,1255.17c.1,2.82,2.31,4,4.8,4a11.64,11.64,0,0,0,4.32-.7l.58,2.72a14.78,14.78,0,0,1-5.44,1c-5.06,0-8-3.11-8-7.87,0-4.32,2.62-8.39,7.61-8.39s6.72,4.16,6.72,7.59a9,9,0,0,1-.13,1.66Zm6.85-2.75c0-1.44-.61-3.81-3.23-3.81-2.43,0-3.46,2.21-3.62,3.81Z" transform="translate(-341.21 -94.59)"/></g><circle class="cls-37" cx="269.04" cy="145.68" r="29.17"/><g class="cls-38"><path class="cls-24" d="M608.75,232.3h-.07l-4.46,2.12-.9-4.1,6.19-2.88h4.54v23.4h-5.3Z" transform="translate(-341.21 -94.59)"/></g><circle class="cls-37" cx="697.19" cy="145.68" r="29.17"/><g class="cls-38"><path class="cls-24" d="M1029.92,250.84v-3.31l3-2.74c5.11-4.57,7.59-7.2,7.66-9.93,0-1.91-1.15-3.42-3.85-3.42a8.48,8.48,0,0,0-5,1.94l-1.55-3.92a13,13,0,0,1,7.67-2.41c5.29,0,8.2,3.09,8.2,7.34,0,3.92-2.84,7.05-6.22,10.08l-2.16,1.8v.07h8.82v4.5Z" transform="translate(-341.21 -94.59)"/></g><circle class="cls-37" cx="418.13" cy="388.85" r="29.17"/><g class="cls-38"><path class="cls-24" d="M751.84,488.64a12.94,12.94,0,0,0,5.44,1.44c2.84,0,4.28-1.37,4.28-3.13,0-2.3-2.3-3.35-4.72-3.35h-2.23v-3.92h2.13c1.83,0,4.17-.72,4.17-2.7,0-1.41-1.15-2.45-3.45-2.45a10.76,10.76,0,0,0-4.9,1.4l-1.12-4a14.72,14.72,0,0,1,7.24-1.76c5,0,7.77,2.63,7.77,5.83,0,2.49-1.4,4.43-4.28,5.44v.07a5.81,5.81,0,0,1,5.08,5.69c0,4.14-3.64,7.16-9.58,7.16a13.78,13.78,0,0,1-6.95-1.66Z" transform="translate(-341.21 -94.59)"/></g><circle class="cls-37" cx="809.82" cy="1460.78" r="29.17"/><g class="cls-38"><path class="cls-24" d="M1152.24,1565.93v-5.58h-10.37v-3.56l8.85-14.25h6.7v13.71h2.81v4.1h-2.81v5.58Zm0-9.68v-5.18c0-1.41.07-2.85.18-4.36h-.15c-.75,1.51-1.37,2.88-2.16,4.36l-3.13,5.11v.07Z" transform="translate(-341.21 -94.59)"/></g><circle class="cls-37" cx="1142.47" cy="1783.35" r="29.17"/><g class="cls-38"><path class="cls-24" d="M1490.82,1869.6h-9.07l-.5,3.6a10.41,10.41,0,0,1,1.51-.07,10.79,10.79,0,0,1,6.16,1.69,6.68,6.68,0,0,1,2.84,5.87c0,4.36-3.74,8.21-10,8.21a15,15,0,0,1-6.52-1.33l1-4.11a13.39,13.39,0,0,0,5.3,1.15c2.26,0,4.67-1.07,4.67-3.56s-1.9-3.89-6.58-3.89a20.62,20.62,0,0,0-3.17.22l1.55-12.27h12.88Z" transform="translate(-341.21 -94.59)"/></g><circle class="cls-37" cx="1442.15" cy="1783.35" r="29.17"/><g class="cls-38"><path class="cls-24" d="M1774.89,1888.5v-3.31l3-2.73c5.11-4.58,7.6-7.2,7.67-9.94,0-1.91-1.15-3.42-3.85-3.42a8.54,8.54,0,0,0-5,1.94l-1.54-3.92a13,13,0,0,1,7.66-2.41c5.29,0,8.21,3.09,8.21,7.34,0,3.93-2.84,7.06-6.23,10.08l-2.16,1.8v.07h8.82v4.5Z" transform="translate(-341.21 -94.59)"/></g></svg>
\ No newline at end of file
diff --git a/docs/modules/how-barectf-works/images/ctf-data-stream.svg b/docs/modules/how-barectf-works/images/ctf-data-stream.svg
new file mode 100644 (file)
index 0000000..ecf8598
--- /dev/null
@@ -0,0 +1 @@
+<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1402.16 566.85"><defs><style>.cls-1{fill:none;}.cls-1,.cls-2{stroke:#f8a794;}.cls-1,.cls-2,.cls-3{stroke-miterlimit:10;stroke-width:2px;}.cls-2,.cls-5{fill:#ffe9cc;}.cls-3{fill:#4eba6f;stroke:#1a8947;}.cls-4{fill:#fff;}.cls-6{fill:#f8a794;}.cls-7{fill:#ffe2bd;}.cls-8{fill:#f47859;}.cls-9{fill:#ce8172;}</style></defs><title>ctf-data-stream</title><line class="cls-1" x1="1388.84" y1="346.62" x2="747.33" y2="156.24"/><line class="cls-1" x1="15.07" y1="346.62" x2="656.58" y2="156.24"/><rect class="cls-2" x="1" y="344.73" width="1400.16" height="176.94" rx="20.26"/><rect class="cls-3" x="21" y="364.73" width="288.25" height="136.94" rx="20.26"/><rect class="cls-3" x="333" y="364.73" width="288.25" height="136.94" rx="20.26"/><rect class="cls-3" x="646" y="364.73" width="198.25" height="136.94" rx="20.26"/><rect class="cls-3" x="868.25" y="364.73" width="512.93" height="136.94" rx="20.26"/><path class="cls-4" d="M348.51,623.2a34.58,34.58,0,0,1,6-.45c2.88,0,5,.61,6.37,1.76a6.1,6.1,0,0,1,2.11,4.77,6.57,6.57,0,0,1-1.85,4.9,9.57,9.57,0,0,1-6.82,2.3,10.65,10.65,0,0,1-1.92-.13v8.13h-3.9Zm3.9,10a7.84,7.84,0,0,0,1.92.16c2.94,0,4.74-1.44,4.74-4s-1.67-3.68-4.39-3.68a11.35,11.35,0,0,0-2.27.19Z" transform="translate(-238.82 -201.89)"/><path class="cls-4" d="M374.33,644.48l-.26-1.73H374a5.77,5.77,0,0,1-4.61,2.08,4.63,4.63,0,0,1-4.9-4.64c0-3.93,3.49-5.92,9.25-5.89v-.25c0-1-.41-2.72-3.17-2.72a8.29,8.29,0,0,0-4.19,1.15l-.76-2.56a11.23,11.23,0,0,1,5.63-1.38c5,0,6.43,3.17,6.43,6.56v5.64a25.06,25.06,0,0,0,.22,3.74Zm-.51-7.62c-2.79-.06-5.44.55-5.44,2.92a2.07,2.07,0,0,0,2.24,2.24,3.19,3.19,0,0,0,3.07-2.15,2.73,2.73,0,0,0,.13-.86Z" transform="translate(-238.82 -201.89)"/><path class="cls-4" d="M393.27,644a11.43,11.43,0,0,1-4.41.8c-4.87,0-8-3.1-8-7.94,0-4.67,3.2-8.32,8.67-8.32a9.77,9.77,0,0,1,3.81.74l-.71,2.94a7.08,7.08,0,0,0-3-.6c-3,0-4.8,2.2-4.77,5,0,3.2,2.08,5,4.77,5a7.7,7.7,0,0,0,3.1-.61Z" transform="translate(-238.82 -201.89)"/><path class="cls-4" d="M400.12,635.74h.07c.38-.6.83-1.28,1.24-1.82l3.78-5H410l-5.76,6.36,6.59,9.22H406l-4.48-6.88-1.35,1.57v5.31h-3.93V621.76h3.93Z" transform="translate(-238.82 -201.89)"/><path class="cls-4" d="M415,637.79c.1,2.82,2.31,4,4.8,4a11.64,11.64,0,0,0,4.32-.7l.58,2.72a14.74,14.74,0,0,1-5.44,1c-5.06,0-8-3.1-8-7.87,0-4.32,2.62-8.39,7.61-8.39s6.72,4.16,6.72,7.59a10.3,10.3,0,0,1-.12,1.66Zm6.85-2.75c0-1.44-.61-3.81-3.23-3.81-2.43,0-3.46,2.21-3.62,3.81Z" transform="translate(-238.82 -201.89)"/><path class="cls-4" d="M433.27,624.45v4.45H437v2.94h-3.75v6.88c0,1.89.52,2.88,2,2.88a6.2,6.2,0,0,0,1.54-.19l.06,3a8.48,8.48,0,0,1-2.85.39,4.56,4.56,0,0,1-3.39-1.28c-.83-.9-1.22-2.3-1.22-4.35v-7.33h-2.24V628.9h2.24v-3.52Z" transform="translate(-238.82 -201.89)"/><path class="cls-4" d="M452.06,627.23H452l-3.8,1.92-.68-3,5.06-2.5h3.3v20.8h-3.81Z" transform="translate(-238.82 -201.89)"/><path class="cls-4" d="M660.51,623.2a34.58,34.58,0,0,1,6-.45c2.88,0,5,.61,6.37,1.76a6.1,6.1,0,0,1,2.11,4.77,6.57,6.57,0,0,1-1.85,4.9,9.57,9.57,0,0,1-6.82,2.3,10.65,10.65,0,0,1-1.92-.13v8.13h-3.9Zm3.9,10a7.84,7.84,0,0,0,1.92.16c2.94,0,4.74-1.44,4.74-4s-1.67-3.68-4.39-3.68a11.35,11.35,0,0,0-2.27.19Z" transform="translate(-238.82 -201.89)"/><path class="cls-4" d="M686.33,644.48l-.26-1.73H686a5.77,5.77,0,0,1-4.61,2.08,4.63,4.63,0,0,1-4.9-4.64c0-3.93,3.49-5.92,9.25-5.89v-.25c0-1-.41-2.72-3.17-2.72a8.29,8.29,0,0,0-4.19,1.15l-.76-2.56a11.23,11.23,0,0,1,5.63-1.38c5,0,6.43,3.17,6.43,6.56v5.64a25.06,25.06,0,0,0,.22,3.74Zm-.51-7.62c-2.79-.06-5.44.55-5.44,2.92a2.07,2.07,0,0,0,2.24,2.24,3.19,3.19,0,0,0,3.07-2.15,2.73,2.73,0,0,0,.13-.86Z" transform="translate(-238.82 -201.89)"/><path class="cls-4" d="M705.27,644a11.43,11.43,0,0,1-4.41.8c-4.87,0-8-3.1-8-7.94,0-4.67,3.2-8.32,8.67-8.32a9.77,9.77,0,0,1,3.81.74l-.71,2.94a7.08,7.08,0,0,0-3-.6c-3,0-4.8,2.2-4.77,5,0,3.2,2.08,5,4.77,5a7.7,7.7,0,0,0,3.1-.61Z" transform="translate(-238.82 -201.89)"/><path class="cls-4" d="M712.12,635.74h.07c.38-.6.83-1.28,1.24-1.82l3.78-5H722l-5.76,6.36,6.59,9.22H718l-4.48-6.88-1.35,1.57v5.31h-3.93V621.76h3.93Z" transform="translate(-238.82 -201.89)"/><path class="cls-4" d="M727,637.79c.1,2.82,2.31,4,4.8,4a11.64,11.64,0,0,0,4.32-.7l.58,2.72a14.74,14.74,0,0,1-5.44,1c-5.06,0-8-3.1-8-7.87,0-4.32,2.62-8.39,7.61-8.39s6.72,4.16,6.72,7.59a9,9,0,0,1-.13,1.66Zm6.85-2.75c0-1.44-.61-3.81-3.23-3.81-2.43,0-3.46,2.21-3.62,3.81Z" transform="translate(-238.82 -201.89)"/><path class="cls-4" d="M745.27,624.45v4.45H749v2.94h-3.75v6.88c0,1.89.51,2.88,2,2.88a6.2,6.2,0,0,0,1.54-.19l.06,3a8.48,8.48,0,0,1-2.85.39,4.56,4.56,0,0,1-3.39-1.28c-.83-.9-1.22-2.3-1.22-4.35v-7.33h-2.24V628.9h2.24v-3.52Z" transform="translate(-238.82 -201.89)"/><path class="cls-4" d="M757.88,644.48v-2.4l2.47-2.27c4.89-4.55,7.19-7,7.23-9.79,0-1.86-1-3.49-3.71-3.49a7.55,7.55,0,0,0-4.45,1.73l-1.15-2.79a10.3,10.3,0,0,1,6.39-2.14c4.61,0,6.85,2.91,6.85,6.3,0,3.65-2.62,6.59-6.24,10l-1.82,1.57v.07H772v3.26Z" transform="translate(-238.82 -201.89)"/><path class="cls-4" d="M928.51,623.2a34.58,34.58,0,0,1,6-.45c2.88,0,5,.61,6.37,1.76a6.1,6.1,0,0,1,2.11,4.77,6.57,6.57,0,0,1-1.85,4.9,9.57,9.57,0,0,1-6.82,2.3,10.65,10.65,0,0,1-1.92-.13v8.13h-3.9Zm3.9,10a7.84,7.84,0,0,0,1.92.16c2.94,0,4.74-1.44,4.74-4s-1.67-3.68-4.39-3.68a11.35,11.35,0,0,0-2.27.19Z" transform="translate(-238.82 -201.89)"/><path class="cls-4" d="M954.33,644.48l-.26-1.73H954a5.77,5.77,0,0,1-4.61,2.08,4.63,4.63,0,0,1-4.9-4.64c0-3.93,3.49-5.92,9.25-5.89v-.25c0-1-.41-2.72-3.17-2.72a8.29,8.29,0,0,0-4.19,1.15l-.77-2.56a11.3,11.3,0,0,1,5.64-1.38c5,0,6.43,3.17,6.43,6.56v5.64a25.06,25.06,0,0,0,.22,3.74Zm-.51-7.62c-2.79-.06-5.44.55-5.44,2.92a2.07,2.07,0,0,0,2.24,2.24,3.19,3.19,0,0,0,3.07-2.15,2.73,2.73,0,0,0,.13-.86Z" transform="translate(-238.82 -201.89)"/><path class="cls-4" d="M973.27,644a11.43,11.43,0,0,1-4.41.8c-4.87,0-8-3.1-8-7.94,0-4.67,3.2-8.32,8.67-8.32a9.77,9.77,0,0,1,3.81.74l-.71,2.94a7.08,7.08,0,0,0-3-.6c-3,0-4.8,2.2-4.77,5,0,3.2,2.08,5,4.77,5a7.7,7.7,0,0,0,3.1-.61Z" transform="translate(-238.82 -201.89)"/><path class="cls-4" d="M980.12,635.74h.07c.38-.6.83-1.28,1.24-1.82l3.78-5H990l-5.76,6.36,6.59,9.22H986l-4.48-6.88-1.35,1.57v5.31h-3.93V621.76h3.93Z" transform="translate(-238.82 -201.89)"/><path class="cls-4" d="M995,637.79c.1,2.82,2.31,4,4.8,4a11.64,11.64,0,0,0,4.32-.7l.58,2.72a14.74,14.74,0,0,1-5.44,1c-5.06,0-8-3.1-8-7.87,0-4.32,2.62-8.39,7.61-8.39s6.72,4.16,6.72,7.59a9,9,0,0,1-.13,1.66Zm6.85-2.75c0-1.44-.61-3.81-3.23-3.81-2.43,0-3.46,2.21-3.62,3.81Z" transform="translate(-238.82 -201.89)"/><path class="cls-4" d="M1013.27,624.45v4.45H1017v2.94h-3.75v6.88c0,1.89.51,2.88,2,2.88a6.2,6.2,0,0,0,1.54-.19l.06,3a8.48,8.48,0,0,1-2.85.39,4.56,4.56,0,0,1-3.39-1.28c-.83-.9-1.22-2.3-1.22-4.35v-7.33h-2.24V628.9h2.24v-3.52Z" transform="translate(-238.82 -201.89)"/><path class="cls-4" d="M1026.68,640.42a10.28,10.28,0,0,0,4.74,1.28c3,0,4.22-1.7,4.19-3.33,0-2.47-2.31-3.52-4.7-3.52h-1.83V632h1.76c1.82,0,4.13-.83,4.13-2.91,0-1.41-1.06-2.6-3.33-2.6a8.31,8.31,0,0,0-4.25,1.32l-.9-2.85a11.24,11.24,0,0,1,6-1.6c4.29,0,6.5,2.37,6.5,5.09,0,2.17-1.28,4-3.84,4.86v.06a5.25,5.25,0,0,1,4.57,5.19c0,3.52-2.94,6.3-8.09,6.3a11.36,11.36,0,0,1-5.83-1.44Z" transform="translate(-238.82 -201.89)"/><path class="cls-4" d="M1308.1,623.2a34.58,34.58,0,0,1,6-.45c2.88,0,5,.61,6.37,1.76a6.1,6.1,0,0,1,2.11,4.77,6.57,6.57,0,0,1-1.85,4.9,9.57,9.57,0,0,1-6.82,2.3,10.65,10.65,0,0,1-1.92-.13v8.13h-3.9Zm3.9,10a7.84,7.84,0,0,0,1.92.16c2.94,0,4.74-1.44,4.74-4s-1.67-3.68-4.39-3.68a11.35,11.35,0,0,0-2.27.19Z" transform="translate(-238.82 -201.89)"/><path class="cls-4" d="M1333.92,644.48l-.26-1.73h-.09a5.77,5.77,0,0,1-4.61,2.08,4.63,4.63,0,0,1-4.9-4.64c0-3.93,3.49-5.92,9.25-5.89v-.25c0-1-.41-2.72-3.17-2.72a8.29,8.29,0,0,0-4.19,1.15l-.77-2.56a11.3,11.3,0,0,1,5.64-1.38c5,0,6.43,3.17,6.43,6.56v5.64a25.06,25.06,0,0,0,.22,3.74Zm-.51-7.62c-2.79-.06-5.44.55-5.44,2.92a2.07,2.07,0,0,0,2.24,2.24,3.19,3.19,0,0,0,3.07-2.15,2.73,2.73,0,0,0,.13-.86Z" transform="translate(-238.82 -201.89)"/><path class="cls-4" d="M1352.86,644a11.43,11.43,0,0,1-4.41.8c-4.87,0-8-3.1-8-7.94,0-4.67,3.2-8.32,8.67-8.32a9.77,9.77,0,0,1,3.81.74l-.71,2.94a7.08,7.08,0,0,0-3-.6c-3,0-4.8,2.2-4.77,5,0,3.2,2.08,5,4.77,5a7.7,7.7,0,0,0,3.1-.61Z" transform="translate(-238.82 -201.89)"/><path class="cls-4" d="M1359.71,635.74h.07c.38-.6.83-1.28,1.24-1.82l3.78-5h4.73l-5.75,6.36,6.59,9.22h-4.84l-4.47-6.88-1.35,1.57v5.31h-3.93V621.76h3.93Z" transform="translate(-238.82 -201.89)"/><path class="cls-4" d="M1374.62,637.79c.1,2.82,2.31,4,4.8,4a11.64,11.64,0,0,0,4.32-.7l.58,2.72a14.74,14.74,0,0,1-5.44,1c-5.06,0-8-3.1-8-7.87,0-4.32,2.62-8.39,7.61-8.39s6.72,4.16,6.72,7.59a9,9,0,0,1-.13,1.66Zm6.85-2.75c0-1.44-.61-3.81-3.23-3.81-2.43,0-3.46,2.21-3.62,3.81Z" transform="translate(-238.82 -201.89)"/><path class="cls-4" d="M1392.86,624.45v4.45h3.75v2.94h-3.75v6.88c0,1.89.51,2.88,2,2.88a6,6,0,0,0,1.53-.19l.07,3a8.48,8.48,0,0,1-2.85.39,4.56,4.56,0,0,1-3.39-1.28c-.83-.9-1.22-2.3-1.22-4.35v-7.33h-2.24V628.9H1389v-3.52Z" transform="translate(-238.82 -201.89)"/><path class="cls-4" d="M1414.14,644.48V639.2h-9.4v-2.56l8.47-13h4.64v12.54h2.69v3h-2.69v5.28Zm0-8.26v-5.66c0-1.18,0-2.4.13-3.62h-.13c-.64,1.32-1.18,2.37-1.82,3.52l-3.81,5.7,0,.06Z" transform="translate(-238.82 -201.89)"/><g id="surface1"><path class="cls-5" d="M1007.12,201.89H907.9v32a6.41,6.41,0,0,1-6.41,6.4h-35.2V361.93a6.42,6.42,0,0,0,6.4,6.4h134.43a6.42,6.42,0,0,0,6.4-6.4V208.29A6.42,6.42,0,0,0,1007.12,201.89Z" transform="translate(-238.82 -201.89)"/><path class="cls-6" d="M901.49,240.3a6.41,6.41,0,0,0,6.41-6.4v-32L866.29,240.3Z" transform="translate(-238.82 -201.89)"/><path class="cls-7" d="M907.9,368.33h99.22a6.41,6.41,0,0,0,6.4-6.4V269.4A160.4,160.4,0,0,1,907.9,368.33Z" transform="translate(-238.82 -201.89)"/><path class="cls-8" d="M897.44,265c0,4.23-1.66,6.88-4.79,6.88s-4.65-2.75-4.67-6.75,1.74-6.84,4.81-6.84S897.44,261.16,897.44,265Zm-7,.13c0,3.19.87,4.85,2.24,4.85s2.22-1.78,2.22-4.94-.72-4.85-2.22-4.85C891.4,260.23,890.47,261.87,890.49,265.17Z" transform="translate(-238.82 -201.89)"/><path class="cls-8" d="M902.9,260.8h0L900.45,262l-.42-1.88,3.19-1.58h2.09V271.7H902.9Z" transform="translate(-238.82 -201.89)"/><path class="cls-8" d="M913.74,260.8h0L911.29,262l-.42-1.88,3.19-1.58h2.08V271.7h-2.4Z" transform="translate(-238.82 -201.89)"/><path class="cls-8" d="M930,265c0,4.23-1.66,6.88-4.79,6.88s-4.65-2.75-4.67-6.75,1.74-6.84,4.81-6.84S930,261.16,930,265Zm-7,.13c0,3.19.87,4.85,2.25,4.85s2.22-1.78,2.22-4.94-.72-4.85-2.22-4.85C923.91,260.23,923,261.87,923,265.17Z" transform="translate(-238.82 -201.89)"/><path class="cls-8" d="M935.41,260.8h0L933,262l-.42-1.88,3.19-1.58h2.08V271.7h-2.4Z" transform="translate(-238.82 -201.89)"/><path class="cls-8" d="M951.62,265c0,4.23-1.66,6.88-4.79,6.88s-4.65-2.75-4.67-6.75,1.74-6.84,4.81-6.84S951.62,261.16,951.62,265Zm-7,.13c0,3.19.87,4.85,2.24,4.85s2.22-1.78,2.22-4.94-.72-4.85-2.22-4.85C945.58,260.23,944.65,261.87,944.67,265.17Z" transform="translate(-238.82 -201.89)"/><path class="cls-8" d="M962.46,265c0,4.23-1.66,6.88-4.79,6.88s-4.65-2.75-4.67-6.75,1.74-6.84,4.81-6.84S962.46,261.16,962.46,265Zm-7,.13c0,3.19.87,4.85,2.25,4.85s2.22-1.78,2.22-4.94-.73-4.85-2.22-4.85S955.48,261.87,955.5,265.17Z" transform="translate(-238.82 -201.89)"/><path class="cls-8" d="M973.29,265c0,4.23-1.65,6.88-4.79,6.88s-4.65-2.75-4.67-6.75,1.74-6.84,4.81-6.84S973.29,261.16,973.29,265Zm-6.95.13c0,3.19.87,4.85,2.24,4.85s2.23-1.78,2.23-4.94-.73-4.85-2.23-4.85C967.25,260.23,966.32,261.87,966.34,265.17Z" transform="translate(-238.82 -201.89)"/><path class="cls-8" d="M978.75,260.8h0l-2.4,1.21-.43-1.88,3.2-1.58h2.08V271.7h-2.41Z" transform="translate(-238.82 -201.89)"/><path class="cls-8" d="M989.59,260.8h0L987.14,262l-.42-1.88,3.19-1.58H992V271.7h-2.4Z" transform="translate(-238.82 -201.89)"/><path class="cls-8" d="M892.06,277.06h0l-2.4,1.21-.43-1.88,3.2-1.57h2.08V288h-2.41Z" transform="translate(-238.82 -201.89)"/><path class="cls-8" d="M908.28,281.31c0,4.22-1.66,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.73-6.84,4.81-6.84S908.28,277.42,908.28,281.31Zm-7,.12c0,3.19.87,4.85,2.25,4.85s2.22-1.78,2.22-4.93-.73-4.86-2.22-4.86S901.3,278.13,901.32,281.43Z" transform="translate(-238.82 -201.89)"/><path class="cls-8" d="M919.11,281.31c0,4.22-1.65,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.74-6.84,4.81-6.84S919.11,277.42,919.11,281.31Zm-7,.12c0,3.19.87,4.85,2.24,4.85s2.23-1.78,2.23-4.93-.73-4.86-2.23-4.86C913.07,276.49,912.14,278.13,912.16,281.43Z" transform="translate(-238.82 -201.89)"/><path class="cls-8" d="M924.57,277.06h0l-2.4,1.21-.43-1.88,3.2-1.57H927V288h-2.41Z" transform="translate(-238.82 -201.89)"/><path class="cls-8" d="M940.79,281.31c0,4.22-1.66,6.87-4.8,6.87s-4.65-2.75-4.67-6.75,1.74-6.84,4.82-6.84S940.79,277.42,940.79,281.31Zm-7,.12c0,3.19.87,4.85,2.25,4.85s2.22-1.78,2.22-4.93-.73-4.86-2.22-4.86S933.81,278.13,933.83,281.43Z" transform="translate(-238.82 -201.89)"/><path class="cls-8" d="M946.24,277.06h0l-2.4,1.21-.43-1.88,3.2-1.57h2.08V288h-2.41Z" transform="translate(-238.82 -201.89)"/><path class="cls-8" d="M962.46,281.31c0,4.22-1.66,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.74-6.84,4.81-6.84S962.46,277.42,962.46,281.31Zm-7,.12c0,3.19.87,4.85,2.25,4.85s2.22-1.78,2.22-4.93-.73-4.86-2.22-4.86S955.48,278.13,955.5,281.43Z" transform="translate(-238.82 -201.89)"/><path class="cls-8" d="M967.92,277.06h0l-2.41,1.21-.42-1.88,3.19-1.57h2.08V288h-2.4Z" transform="translate(-238.82 -201.89)"/><path class="cls-8" d="M984.13,281.31c0,4.22-1.66,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.74-6.84,4.81-6.84S984.13,277.42,984.13,281.31Zm-7,.12c0,3.19.86,4.85,2.24,4.85s2.22-1.78,2.22-4.93-.72-4.86-2.22-4.86C978.09,276.49,977.16,278.13,977.18,281.43Z" transform="translate(-238.82 -201.89)"/><path class="cls-8" d="M989.59,277.06h0l-2.41,1.21-.42-1.88,3.19-1.57H992V288h-2.4Z" transform="translate(-238.82 -201.89)"/><path class="cls-8" d="M897.44,297.57c0,4.22-1.66,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.74-6.84,4.81-6.84S897.44,293.68,897.44,297.57Zm-7,.12c0,3.19.87,4.85,2.24,4.85s2.22-1.78,2.22-4.93-.72-4.86-2.22-4.86C891.4,292.75,890.47,294.39,890.49,297.69Z" transform="translate(-238.82 -201.89)"/><path class="cls-8" d="M908.28,297.57c0,4.22-1.66,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.73-6.84,4.81-6.84S908.28,293.68,908.28,297.57Zm-7,.12c0,3.19.87,4.85,2.25,4.85s2.22-1.78,2.22-4.93-.73-4.86-2.22-4.86S901.3,294.39,901.32,297.69Z" transform="translate(-238.82 -201.89)"/><path class="cls-8" d="M913.74,293.32h0l-2.41,1.21-.42-1.88,3.19-1.57h2.08v13.14h-2.4Z" transform="translate(-238.82 -201.89)"/><path class="cls-8" d="M930,297.57c0,4.22-1.66,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.74-6.84,4.81-6.84S930,293.68,930,297.57Zm-7,.12c0,3.19.87,4.85,2.25,4.85s2.22-1.78,2.22-4.93-.72-4.86-2.22-4.86C923.91,292.75,923,294.39,923,297.69Z" transform="translate(-238.82 -201.89)"/><path class="cls-8" d="M935.41,293.32h0L933,294.53l-.42-1.88,3.19-1.57h2.08v13.14h-2.4Z" transform="translate(-238.82 -201.89)"/><path class="cls-8" d="M951.62,297.57c0,4.22-1.66,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.74-6.84,4.81-6.84S951.62,293.68,951.62,297.57Zm-7,.12c0,3.19.87,4.85,2.24,4.85s2.22-1.78,2.22-4.93-.72-4.86-2.22-4.86C945.58,292.75,944.65,294.39,944.67,297.69Z" transform="translate(-238.82 -201.89)"/><path class="cls-8" d="M957.08,293.32h0l-2.41,1.21-.42-1.88,3.19-1.57h2.09v13.14h-2.41Z" transform="translate(-238.82 -201.89)"/><path class="cls-8" d="M973.29,297.57c0,4.22-1.65,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.74-6.84,4.81-6.84S973.29,293.68,973.29,297.57Zm-6.95.12c0,3.19.87,4.85,2.24,4.85s2.23-1.78,2.23-4.93-.73-4.86-2.23-4.86C967.25,292.75,966.32,294.39,966.34,297.69Z" transform="translate(-238.82 -201.89)"/><path class="cls-8" d="M984.13,297.57c0,4.22-1.66,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.74-6.84,4.81-6.84S984.13,293.68,984.13,297.57Zm-7,.12c0,3.19.86,4.85,2.24,4.85s2.22-1.78,2.22-4.93-.72-4.86-2.22-4.86C978.09,292.75,977.16,294.39,977.18,297.69Z" transform="translate(-238.82 -201.89)"/><path class="cls-8" d="M989.59,293.32h0l-2.41,1.21-.42-1.88,3.19-1.57H992v13.14h-2.4Z" transform="translate(-238.82 -201.89)"/><path class="cls-8" d="M892.06,309.58h0l-2.4,1.21-.43-1.88,3.2-1.57h2.08v13.14h-2.41Z" transform="translate(-238.82 -201.89)"/><path class="cls-8" d="M908.28,313.83c0,4.22-1.66,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.73-6.84,4.81-6.84S908.28,309.94,908.28,313.83Zm-7,.12c0,3.19.87,4.85,2.25,4.85s2.22-1.78,2.22-4.93-.73-4.86-2.22-4.86S901.3,310.65,901.32,314Z" transform="translate(-238.82 -201.89)"/><path class="cls-8" d="M913.74,309.58h0l-2.41,1.21-.42-1.88,3.19-1.57h2.08v13.14h-2.4Z" transform="translate(-238.82 -201.89)"/><path class="cls-8" d="M930,313.83c0,4.22-1.66,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.74-6.84,4.81-6.84S930,309.94,930,313.83Zm-7,.12c0,3.19.87,4.85,2.25,4.85s2.22-1.78,2.22-4.93-.72-4.86-2.22-4.86C923.91,309,923,310.65,923,314Z" transform="translate(-238.82 -201.89)"/><path class="cls-8" d="M940.79,313.83c0,4.22-1.66,6.87-4.8,6.87s-4.65-2.75-4.67-6.75,1.74-6.84,4.82-6.84S940.79,309.94,940.79,313.83Zm-7,.12c0,3.19.87,4.85,2.25,4.85s2.22-1.78,2.22-4.93-.73-4.86-2.22-4.86S933.81,310.65,933.83,314Z" transform="translate(-238.82 -201.89)"/><path class="cls-8" d="M946.24,309.58h0l-2.4,1.21-.43-1.88,3.2-1.57h2.08v13.14h-2.41Z" transform="translate(-238.82 -201.89)"/><path class="cls-8" d="M962.46,313.83c0,4.22-1.66,6.87-4.79,6.87S953,318,953,314s1.74-6.84,4.81-6.84S962.46,309.94,962.46,313.83Zm-7,.12c0,3.19.87,4.85,2.25,4.85S960,317,960,313.87s-.73-4.86-2.22-4.86S955.48,310.65,955.5,314Z" transform="translate(-238.82 -201.89)"/><path class="cls-8" d="M973.29,313.83c0,4.22-1.65,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.74-6.84,4.81-6.84S973.29,309.94,973.29,313.83Zm-6.95.12c0,3.19.87,4.85,2.24,4.85s2.23-1.78,2.23-4.93-.73-4.86-2.23-4.86C967.25,309,966.32,310.65,966.34,314Z" transform="translate(-238.82 -201.89)"/><path class="cls-8" d="M978.75,309.58h0l-2.4,1.21-.43-1.88,3.2-1.57h2.08v13.14h-2.41Z" transform="translate(-238.82 -201.89)"/><path class="cls-8" d="M995,313.83c0,4.22-1.66,6.87-4.8,6.87S985.53,318,985.5,314s1.74-6.84,4.82-6.84S995,309.94,995,313.83Zm-7,.12c0,3.19.87,4.85,2.25,4.85s2.22-1.78,2.22-4.93-.73-4.86-2.22-4.86S988,310.65,988,314Z" transform="translate(-238.82 -201.89)"/><path class="cls-8" d="M897.44,330.09c0,4.22-1.66,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.74-6.84,4.81-6.84S897.44,326.2,897.44,330.09Zm-7,.12c0,3.19.87,4.85,2.24,4.85s2.22-1.78,2.22-4.93-.72-4.86-2.22-4.86C891.4,325.27,890.47,326.91,890.49,330.21Z" transform="translate(-238.82 -201.89)"/><path class="cls-8" d="M908.28,330.09c0,4.22-1.66,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.73-6.84,4.81-6.84S908.28,326.2,908.28,330.09Zm-7,.12c0,3.19.87,4.85,2.25,4.85s2.22-1.78,2.22-4.93-.73-4.86-2.22-4.86S901.3,326.91,901.32,330.21Z" transform="translate(-238.82 -201.89)"/><path class="cls-8" d="M913.74,325.84h0l-2.41,1.21-.42-1.88,3.19-1.57h2.08v13.14h-2.4Z" transform="translate(-238.82 -201.89)"/><path class="cls-8" d="M924.57,325.84h0l-2.4,1.21-.43-1.88,3.2-1.57H927v13.14h-2.41Z" transform="translate(-238.82 -201.89)"/><path class="cls-8" d="M940.79,330.09c0,4.22-1.66,6.87-4.8,6.87s-4.65-2.75-4.67-6.75,1.74-6.84,4.82-6.84S940.79,326.2,940.79,330.09Zm-7,.12c0,3.19.87,4.85,2.25,4.85s2.22-1.78,2.22-4.93-.73-4.86-2.22-4.86S933.81,326.91,933.83,330.21Z" transform="translate(-238.82 -201.89)"/><path class="cls-8" d="M946.24,325.84h0l-2.4,1.21-.43-1.88,3.2-1.57h2.08v13.14h-2.41Z" transform="translate(-238.82 -201.89)"/><path class="cls-8" d="M957.08,325.84h0l-2.41,1.21-.42-1.88,3.19-1.57h2.09v13.14h-2.41Z" transform="translate(-238.82 -201.89)"/><path class="cls-8" d="M967.92,325.84h0l-2.41,1.21-.42-1.88,3.19-1.57h2.08v13.14h-2.4Z" transform="translate(-238.82 -201.89)"/><path class="cls-8" d="M984.13,330.09c0,4.22-1.66,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.74-6.84,4.81-6.84S984.13,326.2,984.13,330.09Zm-7,.12c0,3.19.86,4.85,2.24,4.85s2.22-1.78,2.22-4.93-.72-4.86-2.22-4.86C978.09,325.27,977.16,326.91,977.18,330.21Z" transform="translate(-238.82 -201.89)"/><path class="cls-8" d="M989.59,325.84h0l-2.41,1.21-.42-1.88,3.19-1.57H992v13.14h-2.4Z" transform="translate(-238.82 -201.89)"/><path class="cls-8" d="M892.06,342.1h0l-2.4,1.21-.43-1.88,3.2-1.57h2.08V353h-2.41Z" transform="translate(-238.82 -201.89)"/><path class="cls-8" d="M902.9,342.1h0l-2.41,1.21-.42-1.88,3.19-1.57h2.09V353H902.9Z" transform="translate(-238.82 -201.89)"/><path class="cls-8" d="M919.11,346.35c0,4.22-1.65,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.74-6.84,4.81-6.84S919.11,342.46,919.11,346.35Zm-7,.12c0,3.19.87,4.85,2.24,4.85s2.23-1.78,2.23-4.93-.73-4.86-2.23-4.86C913.07,341.53,912.14,343.17,912.16,346.47Z" transform="translate(-238.82 -201.89)"/><path class="cls-8" d="M924.57,342.1h0l-2.4,1.21-.43-1.88,3.2-1.57H927V353h-2.41Z" transform="translate(-238.82 -201.89)"/><path class="cls-8" d="M940.79,346.35c0,4.22-1.66,6.87-4.8,6.87s-4.65-2.75-4.67-6.75,1.74-6.84,4.82-6.84S940.79,342.46,940.79,346.35Zm-7,.12c0,3.19.87,4.85,2.25,4.85s2.22-1.78,2.22-4.93-.73-4.86-2.22-4.86S933.81,343.17,933.83,346.47Z" transform="translate(-238.82 -201.89)"/><path class="cls-8" d="M951.62,346.35c0,4.22-1.66,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.74-6.84,4.81-6.84S951.62,342.46,951.62,346.35Zm-7,.12c0,3.19.87,4.85,2.24,4.85s2.22-1.78,2.22-4.93-.72-4.86-2.22-4.86C945.58,341.53,944.65,343.17,944.67,346.47Z" transform="translate(-238.82 -201.89)"/><path class="cls-8" d="M957.08,342.1h0l-2.41,1.21-.42-1.88,3.19-1.57h2.09V353h-2.41Z" transform="translate(-238.82 -201.89)"/><path class="cls-8" d="M967.92,342.1h0l-2.41,1.21-.42-1.88,3.19-1.57h2.08V353h-2.4Z" transform="translate(-238.82 -201.89)"/><path class="cls-8" d="M984.13,346.35c0,4.22-1.66,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.74-6.84,4.81-6.84S984.13,342.46,984.13,346.35Zm-7,.12c0,3.19.86,4.85,2.24,4.85s2.22-1.78,2.22-4.93-.72-4.86-2.22-4.86C978.09,341.53,977.16,343.17,977.18,346.47Z" transform="translate(-238.82 -201.89)"/><path class="cls-8" d="M989.59,342.1h0l-2.41,1.21-.42-1.88,3.19-1.57H992V353h-2.4Z" transform="translate(-238.82 -201.89)"/></g><path class="cls-9" d="M845.87,767.75a13.62,13.62,0,0,1-5.57,1c-6.84,0-11-4.29-11-10.85,0-7.1,4.92-11.39,11.52-11.39a12.45,12.45,0,0,1,5.24,1l-.86,3.14a10.46,10.46,0,0,0-4.22-.83c-4.39,0-7.56,2.75-7.56,7.93,0,4.74,2.79,7.78,7.52,7.78a11,11,0,0,0,4.29-.8Z" transform="translate(-238.82 -201.89)"/><path class="cls-9" d="M854,750.12h-6.14v-3.29h16.28v3.29h-6.2v18.27H854Z" transform="translate(-238.82 -201.89)"/><path class="cls-9" d="M866.67,746.83h12.45v3.23h-8.51v6h7.93v3.23h-7.93v9.15h-3.94Z" transform="translate(-238.82 -201.89)"/><path class="cls-9" d="M903.79,745.67V764c0,1.6.06,3.33.13,4.38H900.4l-.16-2.46h-.07a5.58,5.58,0,0,1-5.08,2.81c-3.72,0-6.66-3.16-6.66-8,0-5.22,3.23-8.32,7-8.32a5,5,0,0,1,4.38,2h.06v-8.83Zm-3.94,13.63a5.86,5.86,0,0,0-.09-1,3.44,3.44,0,0,0-3.39-2.78c-2.53,0-3.94,2.24-3.94,5.15s1.41,4.93,3.9,4.93a3.49,3.49,0,0,0,3.4-2.79,4.62,4.62,0,0,0,.12-1.15Z" transform="translate(-238.82 -201.89)"/><path class="cls-9" d="M916.78,768.39l-.25-1.73h-.1a5.77,5.77,0,0,1-4.61,2.08,4.62,4.62,0,0,1-4.89-4.64c0-3.93,3.48-5.92,9.24-5.88V758c0-1-.41-2.72-3.16-2.72a8.3,8.3,0,0,0-4.2,1.15l-.76-2.56a11.24,11.24,0,0,1,5.63-1.37c5,0,6.43,3.16,6.43,6.56v5.63a25,25,0,0,0,.22,3.74Zm-.51-7.61c-2.78-.07-5.44.54-5.44,2.91a2.07,2.07,0,0,0,2.24,2.24,3.19,3.19,0,0,0,3.07-2.15,2.65,2.65,0,0,0,.13-.86Z" transform="translate(-238.82 -201.89)"/><path class="cls-9" d="M928.59,748.36v4.45h3.74v2.94h-3.74v6.88c0,1.89.51,2.88,2,2.88a5.61,5.61,0,0,0,1.53-.19l.07,3a8.8,8.8,0,0,1-2.85.38,4.54,4.54,0,0,1-3.39-1.28c-.84-.89-1.22-2.3-1.22-4.35v-7.33h-2.24v-2.94h2.24v-3.52Z" transform="translate(-238.82 -201.89)"/><path class="cls-9" d="M944.08,768.39l-.26-1.73h-.09a5.79,5.79,0,0,1-4.61,2.08,4.63,4.63,0,0,1-4.9-4.64c0-3.93,3.49-5.92,9.25-5.88V758c0-1-.42-2.72-3.17-2.72a8.29,8.29,0,0,0-4.19,1.15l-.77-2.56a11.27,11.27,0,0,1,5.63-1.37c5,0,6.44,3.16,6.44,6.56v5.63a25,25,0,0,0,.22,3.74Zm-.51-7.61c-2.79-.07-5.44.54-5.44,2.91a2.07,2.07,0,0,0,2.24,2.24,3.2,3.2,0,0,0,3.07-2.15,3,3,0,0,0,.13-.86Z" transform="translate(-238.82 -201.89)"/><path class="cls-9" d="M958,764.78a8.8,8.8,0,0,0,4,1.12c1.73,0,2.49-.71,2.49-1.73s-.64-1.6-2.56-2.27c-3-1.06-4.32-2.72-4.28-4.55,0-2.75,2.27-4.89,5.88-4.89a9.18,9.18,0,0,1,4.13.92l-.77,2.79a6.91,6.91,0,0,0-3.29-.9c-1.41,0-2.18.67-2.18,1.63s.74,1.48,2.72,2.18c2.82,1,4.13,2.46,4.16,4.77,0,2.81-2.21,4.86-6.33,4.86a10.06,10.06,0,0,1-4.74-1.09Z" transform="translate(-238.82 -201.89)"/><path class="cls-9" d="M976,748.36v4.45h3.75v2.94H976v6.88c0,1.89.52,2.88,2,2.88a5.76,5.76,0,0,0,1.54-.19l.06,3a8.8,8.8,0,0,1-2.85.38,4.56,4.56,0,0,1-3.39-1.28c-.83-.89-1.22-2.3-1.22-4.35v-7.33H970v-2.94h2.23v-3.52Z" transform="translate(-238.82 -201.89)"/><path class="cls-9" d="M982.77,757.83c0-2.11,0-3.61-.13-5h3.42l.13,3h.13a4.64,4.64,0,0,1,4.25-3.32,4.38,4.38,0,0,1,.93.09v3.71a5.8,5.8,0,0,0-1.15-.12,3.46,3.46,0,0,0-3.52,3,6.25,6.25,0,0,0-.13,1.22v8.06h-3.93Z" transform="translate(-238.82 -201.89)"/><path class="cls-9" d="M996.65,761.7c.1,2.82,2.31,4,4.8,4a11.62,11.62,0,0,0,4.32-.71l.58,2.72a14.58,14.58,0,0,1-5.44,1c-5.06,0-8-3.1-8-7.87,0-4.32,2.62-8.38,7.61-8.38s6.72,4.16,6.72,7.58a9,9,0,0,1-.13,1.66Zm6.85-2.75c0-1.44-.61-3.81-3.23-3.81-2.43,0-3.46,2.21-3.62,3.81Z" transform="translate(-238.82 -201.89)"/><path class="cls-9" d="M1019.15,768.39l-.26-1.73h-.09a5.79,5.79,0,0,1-4.61,2.08,4.63,4.63,0,0,1-4.9-4.64c0-3.93,3.49-5.92,9.25-5.88V758c0-1-.42-2.72-3.17-2.72a8.29,8.29,0,0,0-4.19,1.15l-.77-2.56a11.3,11.3,0,0,1,5.63-1.37c5,0,6.44,3.16,6.44,6.56v5.63a25,25,0,0,0,.22,3.74Zm-.51-7.61c-2.79-.07-5.44.54-5.44,2.91a2.07,2.07,0,0,0,2.24,2.24,3.2,3.2,0,0,0,3.07-2.15,3,3,0,0,0,.13-.86Z" transform="translate(-238.82 -201.89)"/><path class="cls-9" d="M1026.64,757.45c0-1.79,0-3.3-.13-4.64h3.39l.16,2.3h.1a5.38,5.38,0,0,1,4.8-2.65,4.51,4.51,0,0,1,4.32,2.88h.06a5.82,5.82,0,0,1,1.92-2,5.26,5.26,0,0,1,3.14-.92c2.59,0,5.21,1.76,5.21,6.75v9.18h-3.84v-8.61c0-2.59-.89-4.12-2.78-4.12a3,3,0,0,0-2.75,2.08,5.37,5.37,0,0,0-.2,1.31v9.34h-3.84v-9c0-2.18-.86-3.71-2.68-3.71a3.07,3.07,0,0,0-2.82,2.24,3.35,3.35,0,0,0-.22,1.28v9.21h-3.84Z" transform="translate(-238.82 -201.89)"/></svg>
\ No newline at end of file
diff --git a/docs/modules/how-barectf-works/images/ctf-event-record.svg b/docs/modules/how-barectf-works/images/ctf-event-record.svg
new file mode 100644 (file)
index 0000000..bc30f72
--- /dev/null
@@ -0,0 +1 @@
+<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 956.03 519.39"><defs><style>.cls-1{fill:#3b97d3;stroke:#206d99;}.cls-1,.cls-2,.cls-5,.cls-6,.cls-7{stroke-miterlimit:10;stroke-width:2px;}.cls-2{fill:#965ba5;stroke:#894b9d;}.cls-3{fill:#fff;}.cls-4{fill:#206d99;}.cls-5{fill:#4eba6e;stroke:#1a8947;}.cls-6{fill:#e57e25;stroke:#d25627;}.cls-7{fill:none;stroke:#216d99;}.cls-8{fill:#1a8947;}</style></defs><title>ctf-event-record</title><rect class="cls-1" x="1" y="296.26" width="954.03" height="176.94" rx="20.26"/><path class="cls-2" d="M536.75,646.27H363.81c-10.65,0-19.29-9.07-19.29-20.26V529.59c0-11.19,8.64-20.26,19.29-20.26H536.75c10.66,0,19.3,9.07,19.3,20.26V626C556.05,637.2,547.41,646.27,536.75,646.27Z" transform="translate(-323.84 -194.08)"/><path class="cls-3" d="M405.7,565.63v8.64h9.12v-8.64h3.93v21.56h-3.93v-9.5H405.7v9.5h-3.94V565.63Z" transform="translate(-323.84 -194.08)"/><path class="cls-3" d="M425.89,580.51c.1,2.81,2.3,4,4.8,4a11.66,11.66,0,0,0,4.32-.71l.58,2.72a14.58,14.58,0,0,1-5.44,1c-5.06,0-8-3.1-8-7.87,0-4.32,2.62-8.38,7.61-8.38s6.72,4.16,6.72,7.58a9.09,9.09,0,0,1-.13,1.67Zm6.85-2.76c0-1.43-.61-3.8-3.23-3.8-2.44,0-3.46,2.21-3.62,3.8Z" transform="translate(-323.84 -194.08)"/><path class="cls-3" d="M448.39,587.19l-.26-1.72H448a5.8,5.8,0,0,1-4.6,2.08,4.63,4.63,0,0,1-4.9-4.64c0-3.94,3.49-5.92,9.25-5.89v-.26c0-1-.42-2.72-3.17-2.72a8.14,8.14,0,0,0-4.19,1.16l-.77-2.56a11.15,11.15,0,0,1,5.63-1.38c5,0,6.43,3.17,6.43,6.56v5.63a24.83,24.83,0,0,0,.23,3.74Zm-.52-7.61c-2.78-.07-5.44.54-5.44,2.91a2.07,2.07,0,0,0,2.24,2.24,3.2,3.2,0,0,0,3.08-2.14,3,3,0,0,0,.12-.87Z" transform="translate(-323.84 -194.08)"/><path class="cls-3" d="M470.24,564.48v18.33c0,1.6.07,3.33.13,4.38h-3.52l-.16-2.46h-.06a5.62,5.62,0,0,1-5.09,2.82c-3.71,0-6.66-3.17-6.66-8,0-5.22,3.23-8.32,7-8.32a5,5,0,0,1,4.38,2h.07v-8.83Zm-3.93,13.63a6,6,0,0,0-.1-1,3.45,3.45,0,0,0-3.39-2.78c-2.53,0-3.94,2.24-3.94,5.15s1.41,4.93,3.91,4.93a3.48,3.48,0,0,0,3.39-2.79,4.6,4.6,0,0,0,.13-1.15Z" transform="translate(-323.84 -194.08)"/><path class="cls-3" d="M477.25,580.51c.1,2.81,2.3,4,4.8,4a11.66,11.66,0,0,0,4.32-.71l.58,2.72a14.58,14.58,0,0,1-5.44,1c-5.06,0-8-3.1-8-7.87,0-4.32,2.63-8.38,7.62-8.38s6.72,4.16,6.72,7.58a9.09,9.09,0,0,1-.13,1.67Zm6.85-2.76c0-1.43-.61-3.8-3.23-3.8-2.44,0-3.46,2.21-3.62,3.8Z" transform="translate(-323.84 -194.08)"/><path class="cls-3" d="M491,576.63c0-2.11,0-3.61-.13-5h3.42l.13,3h.13a4.65,4.65,0,0,1,4.26-3.33,3.76,3.76,0,0,1,.92.1v3.71a5.07,5.07,0,0,0-1.15-.13,3.47,3.47,0,0,0-3.52,3,7.25,7.25,0,0,0-.13,1.22v8.06H491Z" transform="translate(-323.84 -194.08)"/><path class="cls-4" d="M702.9,712.48a13.66,13.66,0,0,1-5.57,1c-6.85,0-11-4.29-11-10.85,0-7.1,4.93-11.39,11.52-11.39a12.35,12.35,0,0,1,5.25,1l-.86,3.14a10.49,10.49,0,0,0-4.23-.84c-4.38,0-7.55,2.75-7.55,7.94,0,4.73,2.78,7.77,7.52,7.77a11.05,11.05,0,0,0,4.29-.8Z" transform="translate(-323.84 -194.08)"/><path class="cls-4" d="M711,694.85h-6.15v-3.3h16.29v3.3H715v18.27H711Z" transform="translate(-323.84 -194.08)"/><path class="cls-4" d="M723.7,691.55h12.45v3.23h-8.52v6h7.94V704h-7.94v9.15H723.7Z" transform="translate(-323.84 -194.08)"/><path class="cls-4" d="M749.23,706.43c.1,2.82,2.31,4,4.8,4a11.64,11.64,0,0,0,4.32-.7l.58,2.72a14.78,14.78,0,0,1-5.44,1c-5.06,0-8-3.11-8-7.87,0-4.32,2.62-8.39,7.61-8.39s6.72,4.16,6.72,7.59a9,9,0,0,1-.13,1.66Zm6.85-2.75c0-1.44-.61-3.81-3.23-3.81-2.43,0-3.46,2.21-3.62,3.81Z" transform="translate(-323.84 -194.08)"/><path class="cls-4" d="M765.36,697.54l2.53,7.9a38.63,38.63,0,0,1,1.05,3.9h.1c.29-1.28.64-2.49,1.06-3.9l2.46-7.9h4.16l-6,15.58H766.9l-5.8-15.58Z" transform="translate(-323.84 -194.08)"/><path class="cls-4" d="M781.49,706.43c.09,2.82,2.3,4,4.8,4a11.71,11.71,0,0,0,4.32-.7l.57,2.72a14.7,14.7,0,0,1-5.44,1c-5,0-8-3.11-8-7.87,0-4.32,2.63-8.39,7.62-8.39s6.72,4.16,6.72,7.59a10.05,10.05,0,0,1-.13,1.66Zm6.85-2.75c0-1.44-.61-3.81-3.23-3.81-2.44,0-3.46,2.21-3.62,3.81Z" transform="translate(-323.84 -194.08)"/><path class="cls-4" d="M795.22,702.17c0-1.79,0-3.29-.13-4.63h3.45l.2,2.33h.09a5.63,5.63,0,0,1,5-2.69c2.72,0,5.54,1.76,5.54,6.69v9.25h-3.94v-8.8c0-2.24-.83-3.94-3-3.94a3.31,3.31,0,0,0-3.08,2.31,4.23,4.23,0,0,0-.16,1.28v9.15h-4Z" transform="translate(-323.84 -194.08)"/><path class="cls-4" d="M817.87,693.09v4.45h3.75v2.94h-3.75v6.88c0,1.89.51,2.88,2,2.88a6,6,0,0,0,1.53-.19l.07,3a8.48,8.48,0,0,1-2.85.39,4.54,4.54,0,0,1-3.39-1.28c-.83-.9-1.22-2.31-1.22-4.35v-7.33h-2.24v-2.94H814V694Z" transform="translate(-323.84 -194.08)"/><path class="cls-4" d="M831.22,702.56c0-2.11,0-3.62-.13-5h3.42l.13,3h.13a4.65,4.65,0,0,1,4.25-3.33,3.79,3.79,0,0,1,.93.1V701a5.71,5.71,0,0,0-1.15-.13,3.47,3.47,0,0,0-3.52,3,7.12,7.12,0,0,0-.13,1.21v8.07h-3.93Z" transform="translate(-323.84 -194.08)"/><path class="cls-4" d="M845.1,706.43c.1,2.82,2.31,4,4.8,4a11.64,11.64,0,0,0,4.32-.7l.58,2.72a14.74,14.74,0,0,1-5.44,1c-5.06,0-8-3.11-8-7.87,0-4.32,2.62-8.39,7.61-8.39s6.72,4.16,6.72,7.59a10.3,10.3,0,0,1-.12,1.66Zm6.85-2.75c0-1.44-.61-3.81-3.23-3.81-2.43,0-3.46,2.21-3.62,3.81Z" transform="translate(-323.84 -194.08)"/><path class="cls-4" d="M870.29,712.64a11.49,11.49,0,0,1-4.42.8c-4.86,0-8-3.11-8-7.94,0-4.67,3.2-8.32,8.67-8.32a9.77,9.77,0,0,1,3.81.74l-.7,2.94a7.07,7.07,0,0,0-3-.61c-3,0-4.8,2.21-4.77,5.06,0,3.2,2.08,5,4.77,5a7.65,7.65,0,0,0,3.1-.6Z" transform="translate(-323.84 -194.08)"/><path class="cls-4" d="M887.73,705.18c0,5.73-4,8.29-8,8.29-4.42,0-7.81-3-7.81-8s3.36-8.26,8.06-8.26S887.73,700.45,887.73,705.18Zm-11.75.16c0,3,1.48,5.28,3.88,5.28,2.24,0,3.8-2.21,3.8-5.34,0-2.43-1.08-5.22-3.77-5.22S876,702.75,876,705.34Z" transform="translate(-323.84 -194.08)"/><path class="cls-4" d="M891,702.56c0-2.11,0-3.62-.13-5h3.43l.12,3h.13a4.65,4.65,0,0,1,4.26-3.33,3.84,3.84,0,0,1,.93.1V701a5.82,5.82,0,0,0-1.16-.13,3.49,3.49,0,0,0-3.52,3,7.18,7.18,0,0,0-.12,1.21v8.07H891Z" transform="translate(-323.84 -194.08)"/><path class="cls-4" d="M916.43,690.4v18.33c0,1.6.06,3.33.13,4.39H913l-.16-2.47h-.06a5.62,5.62,0,0,1-5.09,2.82c-3.71,0-6.66-3.17-6.66-8,0-5.21,3.23-8.32,7-8.32a5,5,0,0,1,4.38,2.05h.06V690.4ZM912.49,704a5.86,5.86,0,0,0-.09-1,3.45,3.45,0,0,0-3.39-2.79c-2.53,0-3.94,2.24-3.94,5.15s1.41,4.93,3.91,4.93a3.48,3.48,0,0,0,3.39-2.78,4.67,4.67,0,0,0,.12-1.15Z" transform="translate(-323.84 -194.08)"/><path class="cls-2" d="M770.75,646.27H597.81c-10.65,0-19.29-9.07-19.29-20.26V529.59c0-11.19,8.64-20.26,19.29-20.26H770.75c10.66,0,19.3,9.07,19.3,20.26V626C790.05,637.2,781.41,646.27,770.75,646.27Z" transform="translate(-323.84 -194.08)"/><path class="cls-3" d="M638.11,567.35a13.56,13.56,0,0,1-5.56,1c-6.85,0-11-4.28-11-10.84,0-7.11,4.93-11.39,11.52-11.39a12.35,12.35,0,0,1,5.25,1l-.87,3.13a10.42,10.42,0,0,0-4.22-.83c-4.39,0-7.55,2.75-7.55,7.93,0,4.74,2.78,7.78,7.52,7.78a11,11,0,0,0,4.28-.8Z" transform="translate(-323.84 -194.08)"/><path class="cls-3" d="M655.62,560.06c0,5.73-4,8.28-8,8.28-4.42,0-7.81-3-7.81-8s3.36-8.25,8.06-8.25S655.62,555.32,655.62,560.06Zm-11.75.16c0,3,1.48,5.28,3.88,5.28,2.24,0,3.8-2.21,3.8-5.35,0-2.43-1.08-5.21-3.77-5.21S643.87,557.63,643.87,560.22Z" transform="translate(-323.84 -194.08)"/><path class="cls-3" d="M658.85,557.05c0-1.79,0-3.3-.13-4.64h3.39l.16,2.3h.1a5.41,5.41,0,0,1,4.8-2.65,4.49,4.49,0,0,1,4.32,2.88h.06a5.87,5.87,0,0,1,1.92-2,5.22,5.22,0,0,1,3.14-.93c2.59,0,5.22,1.76,5.22,6.75V568H678v-8.6c0-2.6-.9-4.13-2.79-4.13a3,3,0,0,0-2.75,2.08,5.37,5.37,0,0,0-.19,1.31V568h-3.84v-9c0-2.18-.87-3.71-2.69-3.71a3.09,3.09,0,0,0-2.82,2.24,3.35,3.35,0,0,0-.22,1.28V568h-3.84Z" transform="translate(-323.84 -194.08)"/><path class="cls-3" d="M686,557.05c0-1.79,0-3.3-.13-4.64h3.39l.16,2.3h.1a5.38,5.38,0,0,1,4.8-2.65,4.51,4.51,0,0,1,4.32,2.88h.06a5.69,5.69,0,0,1,1.92-2,5.2,5.2,0,0,1,3.14-.93c2.59,0,5.21,1.76,5.21,6.75V568h-3.84v-8.6c0-2.6-.89-4.13-2.78-4.13a3,3,0,0,0-2.75,2.08,5.37,5.37,0,0,0-.2,1.31V568h-3.84v-9c0-2.18-.86-3.71-2.68-3.71a3.07,3.07,0,0,0-2.82,2.24,3.35,3.35,0,0,0-.22,1.28V568H686Z" transform="translate(-323.84 -194.08)"/><path class="cls-3" d="M727.94,560.06c0,5.73-4,8.28-8,8.28-4.42,0-7.81-3-7.81-8s3.36-8.25,8.06-8.25S727.94,555.32,727.94,560.06Zm-11.75.16c0,3,1.48,5.28,3.88,5.28,2.24,0,3.8-2.21,3.8-5.35,0-2.43-1.08-5.21-3.77-5.21S716.19,557.63,716.19,560.22Z" transform="translate(-323.84 -194.08)"/><path class="cls-3" d="M731.17,557.05c0-1.79,0-3.3-.13-4.64h3.46l.19,2.34h.1a5.6,5.6,0,0,1,5-2.69c2.72,0,5.53,1.76,5.53,6.69V568h-3.93v-8.8c0-2.24-.84-3.93-3-3.93a3.29,3.29,0,0,0-3.07,2.3,3.94,3.94,0,0,0-.16,1.28V568h-4Z" transform="translate(-323.84 -194.08)"/><path class="cls-3" d="M644.93,605.91a11.26,11.26,0,0,1-4.42.8c-4.86,0-8-3.1-8-7.93,0-4.67,3.2-8.32,8.67-8.32a9.93,9.93,0,0,1,3.81.73l-.7,2.95a6.91,6.91,0,0,0-3-.61c-3,0-4.8,2.21-4.77,5.06,0,3.2,2.08,5,4.77,5a7.72,7.72,0,0,0,3.11-.61Z" transform="translate(-323.84 -194.08)"/><path class="cls-3" d="M662.37,598.46c0,5.73-4,8.28-8,8.28-4.42,0-7.81-3-7.81-8s3.36-8.25,8.07-8.25S662.37,593.72,662.37,598.46Zm-11.74.16c0,3,1.47,5.28,3.87,5.28,2.24,0,3.81-2.21,3.81-5.35,0-2.43-1.09-5.21-3.78-5.21S650.63,596,650.63,598.62Z" transform="translate(-323.84 -194.08)"/><path class="cls-3" d="M665.6,595.45c0-1.79,0-3.3-.13-4.64h3.46l.19,2.34h.1a5.61,5.61,0,0,1,5-2.69c2.72,0,5.53,1.76,5.53,6.69v9.24h-3.93v-8.8c0-2.24-.83-3.93-3-3.93a3.3,3.3,0,0,0-3.07,2.3,3.94,3.94,0,0,0-.16,1.28v9.15h-4Z" transform="translate(-323.84 -194.08)"/><path class="cls-3" d="M688.26,586.36v4.45H692v2.94h-3.74v6.88c0,1.89.51,2.88,2,2.88a5.64,5.64,0,0,0,1.54-.19l.06,3a8.73,8.73,0,0,1-2.84.38,4.58,4.58,0,0,1-3.4-1.28c-.83-.89-1.21-2.3-1.21-4.35v-7.33h-2.24v-2.94h2.24v-3.52Z" transform="translate(-323.84 -194.08)"/><path class="cls-3" d="M697.57,599.71c.1,2.81,2.3,4,4.8,4a11.66,11.66,0,0,0,4.32-.71l.58,2.72a14.58,14.58,0,0,1-5.44,1c-5.06,0-8-3.1-8-7.87,0-4.32,2.63-8.38,7.62-8.38s6.72,4.16,6.72,7.58a9.18,9.18,0,0,1-.13,1.67Zm6.85-2.76c0-1.44-.61-3.8-3.23-3.8-2.44,0-3.46,2.2-3.62,3.8Z" transform="translate(-323.84 -194.08)"/><path class="cls-3" d="M713.67,590.81l1.85,2.94c.51.84,1,1.6,1.41,2.4h.1c.44-.86.89-1.66,1.34-2.46l1.73-2.88h4.29l-5.22,7.49,5.31,8.09H720l-1.92-3.1c-.51-.83-1-1.66-1.4-2.53h-.07c-.45.9-.89,1.67-1.41,2.53l-1.79,3.1h-4.35l5.41-7.93-5.22-7.65Z" transform="translate(-323.84 -194.08)"/><path class="cls-3" d="M731.78,586.36v4.45h3.74v2.94h-3.74v6.88c0,1.89.51,2.88,2,2.88a5.64,5.64,0,0,0,1.54-.19l.06,3a8.73,8.73,0,0,1-2.84.38,4.58,4.58,0,0,1-3.4-1.28c-.83-.89-1.21-2.3-1.21-4.35v-7.33H725.7v-2.94h2.24v-3.52Z" transform="translate(-323.84 -194.08)"/><path class="cls-2" d="M1004.75,646.27H831.81c-10.65,0-19.29-9.07-19.29-20.26V529.59c0-11.19,8.64-20.26,19.29-20.26h172.94c10.66,0,19.3,9.07,19.3,20.26V626C1024.05,637.2,1015.41,646.27,1004.75,646.27Z" transform="translate(-323.84 -194.08)"/><path class="cls-3" d="M866.72,563.7a10.86,10.86,0,0,0,5.22,1.38c2.53,0,3.93-1.18,3.93-2.94s-1.08-2.59-3.84-3.59c-3.55-1.28-5.82-3.16-5.82-6.27,0-3.52,2.95-6.2,7.62-6.2a11.49,11.49,0,0,1,5.18,1.08l-1,3.17a9.09,9.09,0,0,0-4.29-1c-2.49,0-3.58,1.34-3.58,2.59,0,1.66,1.25,2.43,4.13,3.55,3.74,1.41,5.56,3.3,5.56,6.4,0,3.46-2.62,6.46-8.19,6.46a12.84,12.84,0,0,1-5.82-1.34Z" transform="translate(-323.84 -194.08)"/><path class="cls-3" d="M883.27,557.59c0-2-.07-3.71-.13-5.18h3.45l.2,2.4h.06a6.07,6.07,0,0,1,5.34-2.75c3.59,0,6.56,3.07,6.56,7.93,0,5.63-3.55,8.35-7.1,8.35a5.13,5.13,0,0,1-4.38-2.07h-.07v8.06h-3.93Zm3.93,3.88a4.26,4.26,0,0,0,.13,1.08,3.56,3.56,0,0,0,3.46,2.76c2.49,0,4-2.08,4-5.16,0-2.75-1.34-5-3.87-5a3.68,3.68,0,0,0-3.52,2.91,3.86,3.86,0,0,0-.16,1Z" transform="translate(-323.84 -194.08)"/><path class="cls-3" d="M904.77,561.31c.1,2.81,2.31,4,4.8,4a11.66,11.66,0,0,0,4.32-.71l.58,2.72a14.58,14.58,0,0,1-5.44,1c-5.06,0-8-3.1-8-7.87,0-4.32,2.63-8.38,7.62-8.38s6.72,4.16,6.72,7.58a9.18,9.18,0,0,1-.13,1.67Zm6.85-2.76c0-1.44-.61-3.8-3.23-3.8-2.44,0-3.46,2.2-3.62,3.8Z" transform="translate(-323.84 -194.08)"/><path class="cls-3" d="M930,567.51a11.25,11.25,0,0,1-4.41.8c-4.87,0-8-3.1-8-7.93,0-4.67,3.2-8.32,8.67-8.32a10,10,0,0,1,3.81.73l-.71,3a6.9,6.9,0,0,0-3-.61c-3,0-4.8,2.21-4.77,5.06,0,3.2,2.08,5,4.77,5a7.7,7.7,0,0,0,3.1-.61Z" transform="translate(-323.84 -194.08)"/><path class="cls-3" d="M937.06,548.06a2.21,2.21,0,1,1-2.21-2.15A2.09,2.09,0,0,1,937.06,548.06ZM932.87,568V552.41h4V568Z" transform="translate(-323.84 -194.08)"/><path class="cls-3" d="M941.51,568V555.35h-2.12v-2.94h2.12v-.74c0-4.19,2.91-6.75,7.55-6.75a9.34,9.34,0,0,1,4.29,1l-.87,3a7.07,7.07,0,0,0-3.42-.83c-2.75,0-3.65,1.66-3.65,3.71v.64h9.31V568h-4V555.35h-5.31V568Z" transform="translate(-323.84 -194.08)"/><path class="cls-3" d="M970.4,567.51a11.25,11.25,0,0,1-4.41.8c-4.87,0-8-3.1-8-7.93,0-4.67,3.2-8.32,8.68-8.32a9.87,9.87,0,0,1,3.8.73l-.7,3a6.91,6.91,0,0,0-3-.61c-3,0-4.8,2.21-4.76,5.06,0,3.2,2.08,5,4.76,5a7.72,7.72,0,0,0,3.11-.61Z" transform="translate(-323.84 -194.08)"/><path class="cls-3" d="M878.93,605.91a11.26,11.26,0,0,1-4.42.8c-4.86,0-8-3.1-8-7.93,0-4.67,3.2-8.32,8.67-8.32a9.93,9.93,0,0,1,3.81.73l-.7,2.95a6.91,6.91,0,0,0-3-.61c-3,0-4.8,2.21-4.77,5.06,0,3.2,2.08,5,4.77,5a7.72,7.72,0,0,0,3.11-.61Z" transform="translate(-323.84 -194.08)"/><path class="cls-3" d="M896.37,598.46c0,5.73-4,8.28-8,8.28-4.42,0-7.81-3-7.81-8s3.36-8.25,8.07-8.25S896.37,593.72,896.37,598.46Zm-11.74.16c0,3,1.47,5.28,3.87,5.28,2.24,0,3.81-2.21,3.81-5.35,0-2.43-1.09-5.21-3.78-5.21S884.63,596,884.63,598.62Z" transform="translate(-323.84 -194.08)"/><path class="cls-3" d="M899.6,595.45c0-1.79,0-3.3-.13-4.64h3.46l.19,2.34h.1a5.61,5.61,0,0,1,5-2.69c2.72,0,5.53,1.76,5.53,6.69v9.24h-3.93v-8.8c0-2.24-.83-3.93-3-3.93a3.3,3.3,0,0,0-3.07,2.3,3.94,3.94,0,0,0-.16,1.28v9.15h-4Z" transform="translate(-323.84 -194.08)"/><path class="cls-3" d="M922.26,586.36v4.45H926v2.94h-3.74v6.88c0,1.89.51,2.88,2,2.88a5.64,5.64,0,0,0,1.54-.19l.06,3a8.73,8.73,0,0,1-2.84.38,4.58,4.58,0,0,1-3.4-1.28c-.83-.89-1.21-2.3-1.21-4.35v-7.33h-2.24v-2.94h2.24v-3.52Z" transform="translate(-323.84 -194.08)"/><path class="cls-3" d="M931.57,599.71c.1,2.81,2.3,4,4.8,4a11.66,11.66,0,0,0,4.32-.71l.58,2.72a14.58,14.58,0,0,1-5.44,1c-5.06,0-8-3.1-8-7.87,0-4.32,2.63-8.38,7.62-8.38s6.72,4.16,6.72,7.58a9.18,9.18,0,0,1-.13,1.67Zm6.85-2.76c0-1.44-.61-3.8-3.23-3.8-2.44,0-3.46,2.2-3.62,3.8Z" transform="translate(-323.84 -194.08)"/><path class="cls-3" d="M947.67,590.81l1.85,2.94c.51.84,1,1.6,1.41,2.4h.1c.44-.86.89-1.66,1.34-2.46l1.73-2.88h4.29l-5.22,7.49,5.31,8.09H954l-1.92-3.1c-.51-.83-1-1.66-1.4-2.53h-.07c-.45.9-.89,1.67-1.41,2.53l-1.79,3.1h-4.35l5.41-7.93-5.22-7.65Z" transform="translate(-323.84 -194.08)"/><path class="cls-3" d="M965.78,586.36v4.45h3.74v2.94h-3.74v6.88c0,1.89.51,2.88,2,2.88a5.64,5.64,0,0,0,1.54-.19l.06,3a8.73,8.73,0,0,1-2.84.38,4.58,4.58,0,0,1-3.4-1.28c-.83-.89-1.21-2.3-1.21-4.35v-7.33H959.7v-2.94h2.24v-3.52Z" transform="translate(-323.84 -194.08)"/><path class="cls-2" d="M1239,646.27H1066c-10.66,0-19.3-9.07-19.3-20.26V529.59c0-11.19,8.64-20.26,19.3-20.26H1239c10.65,0,19.29,9.07,19.29,20.26V626C1258.26,637.2,1249.62,646.27,1239,646.27Z" transform="translate(-323.84 -194.08)"/><path class="cls-3" d="M1099.23,565.92a33.61,33.61,0,0,1,6-.45c2.88,0,5,.61,6.37,1.76a6.07,6.07,0,0,1,2.11,4.76,6.56,6.56,0,0,1-1.85,4.9,9.53,9.53,0,0,1-6.82,2.31,11.65,11.65,0,0,1-1.92-.13v8.12h-3.9Zm3.9,10a7.84,7.84,0,0,0,1.92.16c2.94,0,4.74-1.44,4.74-4s-1.67-3.68-4.39-3.68a10.63,10.63,0,0,0-2.27.19Z" transform="translate(-323.84 -194.08)"/><path class="cls-3" d="M1125.05,587.19l-.26-1.72h-.09a5.8,5.8,0,0,1-4.61,2.08,4.62,4.62,0,0,1-4.89-4.64c0-3.94,3.48-5.92,9.24-5.89v-.26c0-1-.41-2.72-3.17-2.72a8.2,8.2,0,0,0-4.19,1.16l-.76-2.56a11.12,11.12,0,0,1,5.63-1.38c5,0,6.43,3.17,6.43,6.56v5.63a25,25,0,0,0,.22,3.74Zm-.51-7.61c-2.79-.07-5.44.54-5.44,2.91a2.06,2.06,0,0,0,2.24,2.24,3.18,3.18,0,0,0,3.07-2.14,2.74,2.74,0,0,0,.13-.87Z" transform="translate(-323.84 -194.08)"/><path class="cls-3" d="M1134.68,571.61l2.82,8.35c.32,1,.64,2.15.86,3h.1c.25-.89.54-2,.83-3.07l2.43-8.32H1146L1142,582.23c-2.14,5.83-3.58,8.42-5.44,10a7.87,7.87,0,0,1-4.13,2l-.89-3.33a6.68,6.68,0,0,0,2.3-1.09,6.93,6.93,0,0,0,2.15-2.46,1.59,1.59,0,0,0,.25-.71,1.7,1.7,0,0,0-.22-.77l-5.7-14.3Z" transform="translate(-323.84 -194.08)"/><path class="cls-3" d="M1148.22,564.48h4v22.71h-4Z" transform="translate(-323.84 -194.08)"/><path class="cls-3" d="M1171.26,579.26c0,5.73-4,8.29-8,8.29-4.42,0-7.81-3-7.81-8s3.36-8.25,8.06-8.25S1171.26,574.52,1171.26,579.26Zm-11.75.16c0,3,1.48,5.28,3.88,5.28,2.24,0,3.8-2.21,3.8-5.35,0-2.43-1.08-5.21-3.77-5.21S1159.51,576.83,1159.51,579.42Z" transform="translate(-323.84 -194.08)"/><path class="cls-3" d="M1183.26,587.19l-.26-1.72h-.09a5.82,5.82,0,0,1-4.61,2.08,4.63,4.63,0,0,1-4.9-4.64c0-3.94,3.49-5.92,9.25-5.89v-.26c0-1-.42-2.72-3.17-2.72a8.2,8.2,0,0,0-4.19,1.16l-.77-2.56a11.15,11.15,0,0,1,5.63-1.38c5,0,6.44,3.17,6.44,6.56v5.63a25,25,0,0,0,.22,3.74Zm-.51-7.61c-2.79-.07-5.44.54-5.44,2.91a2.06,2.06,0,0,0,2.24,2.24,3.19,3.19,0,0,0,3.07-2.14,3.06,3.06,0,0,0,.13-.87Z" transform="translate(-323.84 -194.08)"/><path class="cls-3" d="M1205.11,564.48v18.33c0,1.6.07,3.33.13,4.38h-3.52l-.16-2.46h-.06a5.62,5.62,0,0,1-5.09,2.82c-3.71,0-6.66-3.17-6.66-8,0-5.22,3.24-8.32,7-8.32a5,5,0,0,1,4.38,2h.07v-8.83Zm-3.93,13.63a5.14,5.14,0,0,0-.1-1,3.45,3.45,0,0,0-3.39-2.78c-2.53,0-3.94,2.24-3.94,5.15s1.41,4.93,3.91,4.93a3.47,3.47,0,0,0,3.39-2.79,4.18,4.18,0,0,0,.13-1.15Z" transform="translate(-323.84 -194.08)"/><rect class="cls-5" x="157.22" y="38.42" width="641.59" height="80.34" rx="10.52"/><path class="cls-6" d="M578.26,303.3H499.73a9,9,0,0,1-8.76-9.2V250.32a9,9,0,0,1,8.76-9.2h78.53a9,9,0,0,1,8.76,9.2V294.1A9,9,0,0,1,578.26,303.3Z" transform="translate(-323.84 -194.08)"/><path class="cls-6" d="M684.05,303.3H605.53a9,9,0,0,1-8.76-9.2V250.32a9,9,0,0,1,8.76-9.2h78.52a9,9,0,0,1,8.76,9.2V294.1A9,9,0,0,1,684.05,303.3Z" transform="translate(-323.84 -194.08)"/><path class="cls-1" d="M790.3,303.3H711.77a9,9,0,0,1-8.76-9.2V250.32a9,9,0,0,1,8.76-9.2H790.3a9,9,0,0,1,8.76,9.2V294.1A9,9,0,0,1,790.3,303.3Z" transform="translate(-323.84 -194.08)"/><path class="cls-1" d="M880.65,303.3H818a9,9,0,0,1-8.76-9.2V250.32a9,9,0,0,1,8.76-9.2h62.63a9,9,0,0,1,8.76,9.2V294.1A9,9,0,0,1,880.65,303.3Z" transform="translate(-323.84 -194.08)"/><path class="cls-1" d="M1015.51,303.3H908.38a9,9,0,0,1-8.76-9.2V250.32a9,9,0,0,1,8.76-9.2h107.13a9,9,0,0,1,8.76,9.2V294.1A9,9,0,0,1,1015.51,303.3Z" transform="translate(-323.84 -194.08)"/><path class="cls-1" d="M1105,303.3h-61.72a9,9,0,0,1-8.76-9.2V250.32a9,9,0,0,1,8.76-9.2H1105a9,9,0,0,1,8.77,9.2V294.1A9,9,0,0,1,1105,303.3Z" transform="translate(-323.84 -194.08)"/><line class="cls-7" x1="11.71" y1="298.64" x2="487.6" y2="106.08"/><line class="cls-7" x1="943.73" y1="298.87" x2="564.01" y2="105.27"/><path class="cls-8" d="M758,210.64a10.28,10.28,0,0,1-4.18.72c-5.14,0-8.26-3.22-8.26-8.14,0-5.33,3.7-8.54,8.64-8.54a9.33,9.33,0,0,1,3.94.72l-.65,2.35a7.79,7.79,0,0,0-3.17-.62c-3.28,0-5.66,2.06-5.66,6,0,3.55,2.09,5.83,5.64,5.83a8.29,8.29,0,0,0,3.22-.6Z" transform="translate(-323.84 -194.08)"/><path class="cls-8" d="M764.13,197.41h-4.61v-2.47h12.22v2.47h-4.66v13.71h-3Z" transform="translate(-323.84 -194.08)"/><path class="cls-8" d="M773.63,194.94H783v2.43h-6.38v4.46h5.95v2.42h-5.95v6.87h-3Z" transform="translate(-323.84 -194.08)"/><path class="cls-8" d="M790.7,203.32c0-1.54-.05-2.79-.1-3.89h2.59l.15,1.8h0a4.54,4.54,0,0,1,4-2.06c2.69,0,4.93,2.3,4.93,6,0,4.22-2.67,6.26-5.33,6.26a3.83,3.83,0,0,1-3.29-1.56h-.05v6.05H790.7Zm2.95,2.9a2.79,2.79,0,0,0,.1.82,2.66,2.66,0,0,0,2.59,2.06c1.87,0,3-1.56,3-3.86,0-2.07-1-3.75-2.91-3.75a2.76,2.76,0,0,0-2.64,2.19,2.72,2.72,0,0,0-.12.74Z" transform="translate(-323.84 -194.08)"/><path class="cls-8" d="M811.32,211.12l-.2-1.3h-.07a4.34,4.34,0,0,1-3.46,1.56,3.47,3.47,0,0,1-3.67-3.48c0-3,2.62-4.44,6.94-4.41v-.2c0-.76-.31-2-2.38-2a6.12,6.12,0,0,0-3.14.87l-.58-1.92a8.43,8.43,0,0,1,4.23-1c3.74,0,4.82,2.37,4.82,4.92v4.22a18.71,18.71,0,0,0,.17,2.81Zm-.39-5.71c-2.09,0-4.08.4-4.08,2.18a1.55,1.55,0,0,0,1.68,1.68,2.38,2.38,0,0,0,2.3-1.61,1.87,1.87,0,0,0,.1-.65Z" transform="translate(-323.84 -194.08)"/><path class="cls-8" d="M825.52,210.76a8.5,8.5,0,0,1-3.31.6c-3.65,0-6-2.33-6-6s2.4-6.24,6.5-6.24a7.46,7.46,0,0,1,2.86.55l-.53,2.21a5.14,5.14,0,0,0-2.23-.46,3.79,3.79,0,0,0,0,7.56,5.71,5.71,0,0,0,2.32-.46Z" transform="translate(-323.84 -194.08)"/><path class="cls-8" d="M830.66,204.57h0c.29-.46.63-1,.94-1.37l2.83-3.77H838l-4.32,4.78,4.94,6.91H835L831.67,206l-1,1.17v4h-3v-17h3Z" transform="translate(-323.84 -194.08)"/><path class="cls-8" d="M841.84,206.1c.07,2.11,1.73,3,3.6,3a8.91,8.91,0,0,0,3.24-.53l.44,2a11,11,0,0,1-4.09.72c-3.79,0-6-2.33-6-5.91,0-3.24,2-6.28,5.71-6.28s5,3.12,5,5.68a8.27,8.27,0,0,1-.09,1.25ZM847,204c0-1.08-.46-2.86-2.43-2.86a2.89,2.89,0,0,0-2.71,2.86Z" transform="translate(-323.84 -194.08)"/><path class="cls-8" d="M855.52,196.09v3.34h2.81v2.21h-2.81v5.16c0,1.41.39,2.16,1.51,2.16a4.07,4.07,0,0,0,1.16-.15l0,2.26a6.4,6.4,0,0,1-2.13.29,3.45,3.45,0,0,1-2.55-1,4.68,4.68,0,0,1-.91-3.27v-5.49H851v-2.21h1.68v-2.64Z" transform="translate(-323.84 -194.08)"/></svg>
\ No newline at end of file
diff --git a/docs/modules/how-barectf-works/images/ctf-overview.svg b/docs/modules/how-barectf-works/images/ctf-overview.svg
new file mode 100644 (file)
index 0000000..4fa151b
--- /dev/null
@@ -0,0 +1 @@
+<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576.19 475.15"><defs><style>.cls-1{fill:#f2f2f3;}.cls-2,.cls-4{fill:none;}.cls-2{stroke:#231f20;stroke-width:3px;stroke-dasharray:12.06 12.06;}.cls-12,.cls-2{stroke-miterlimit:10;}.cls-3{opacity:0.75;}.cls-5{fill:#ffe2bd;}.cls-6{fill:#f8a794;}.cls-7{opacity:0.7;}.cls-8{fill:#f47859;}.cls-9{fill:#ffe9cc;}.cls-10{opacity:0.85;}.cls-11{fill:#231f20;}.cls-12{fill:#d1edf3;stroke:#89cbd3;stroke-width:1.81px;}.cls-13{fill:#c93f63;}</style></defs><title>ctf-overview</title><rect class="cls-1" x="1.5" y="1.5" width="573.19" height="429.18" rx="29.85"/><rect class="cls-2" x="1.5" y="1.5" width="573.19" height="429.18" rx="29.85"/><g class="cls-3"><path class="cls-4" d="M685,325.57" transform="translate(-240.98 -235.15)"/></g><g class="cls-3"><path class="cls-4" d="M385.3,325.57" transform="translate(-240.98 -235.15)"/></g><g id="surface1"><path class="cls-5" d="M372.5,375.86h67.21V363.05a6.42,6.42,0,0,0-6.4-6.4H334.09v32a6.4,6.4,0,0,1-6.4,6.4H292.48V516.69a6.42,6.42,0,0,0,6.4,6.4h32V414.26Z" transform="translate(-240.98 -235.15)"/><path class="cls-6" d="M334.09,388.66v-32l-41.61,38.41h35.2A6.4,6.4,0,0,0,334.09,388.66Z" transform="translate(-240.98 -235.15)"/><g class="cls-7"><path class="cls-8" d="M323.64,418.94c0,4.23-1.66,6.88-4.79,6.88s-4.65-2.75-4.67-6.76,1.73-6.83,4.81-6.83S323.64,415.06,323.64,418.94Zm-7,.12c0,3.2.87,4.85,2.25,4.85s2.22-1.77,2.22-4.93-.73-4.85-2.22-4.85S316.66,415.77,316.68,419.06Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M329.1,414.7h-.05l-2.4,1.21-.43-1.88,3.2-1.58h2.08v13.14h-2.4Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M339.93,414.7h0l-2.4,1.21-.43-1.88,3.2-1.58h2.08v13.14h-2.41Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M356.15,418.94c0,4.23-1.66,6.88-4.8,6.88s-4.65-2.75-4.67-6.76,1.74-6.83,4.82-6.83S356.15,415.06,356.15,418.94Zm-7,.12c0,3.2.87,4.85,2.24,4.85s2.23-1.77,2.23-4.93-.73-4.85-2.23-4.85C350.1,414.13,349.17,415.77,349.19,419.06Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M361.6,414.7h0l-2.4,1.21-.43-1.88,3.2-1.58H364v13.14H361.6Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M377.82,418.94c0,4.23-1.66,6.88-4.79,6.88s-4.65-2.75-4.67-6.76,1.73-6.83,4.81-6.83S377.82,415.06,377.82,418.94Zm-7,.12c0,3.2.87,4.85,2.25,4.85s2.22-1.77,2.22-4.93-.73-4.85-2.22-4.85S370.84,415.77,370.86,419.06Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M388.65,418.94c0,4.23-1.65,6.88-4.79,6.88s-4.65-2.75-4.67-6.76,1.74-6.83,4.81-6.83S388.65,415.06,388.65,418.94Zm-6.95.12c0,3.2.87,4.85,2.24,4.85s2.23-1.77,2.23-4.93-.73-4.85-2.23-4.85C382.61,414.13,381.68,415.77,381.7,419.06Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M399.49,418.94c0,4.23-1.66,6.88-4.79,6.88s-4.65-2.75-4.67-6.76,1.74-6.83,4.81-6.83S399.49,415.06,399.49,418.94Zm-6.95.12c0,3.2.86,4.85,2.24,4.85S397,422.14,397,419s-.72-4.85-2.22-4.85C393.45,414.13,392.51,415.77,392.54,419.06Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M405,414.7h0l-2.41,1.21-.42-1.88,3.19-1.58h2.08v13.14H405Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M415.78,414.7h0l-2.4,1.21-.43-1.88,3.2-1.58h2.08v13.14h-2.41Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M318.26,431h0l-2.41,1.21-.42-1.88,3.19-1.58h2.09v13.14h-2.41Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M334.47,435.2c0,4.23-1.66,6.88-4.79,6.88s-4.65-2.75-4.67-6.76,1.74-6.83,4.81-6.83S334.47,431.32,334.47,435.2Zm-7,.12c0,3.2.87,4.86,2.24,4.86s2.23-1.78,2.23-4.94-.73-4.85-2.23-4.85C328.43,430.39,327.5,432,327.52,435.32Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M345.31,435.2c0,4.23-1.66,6.88-4.79,6.88s-4.65-2.75-4.67-6.76,1.74-6.83,4.81-6.83S345.31,431.32,345.31,435.2Zm-7,.12c0,3.2.87,4.86,2.25,4.86s2.22-1.78,2.22-4.94-.72-4.85-2.22-4.85C339.26,430.39,338.33,432,338.35,435.32Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M350.77,431h0l-2.41,1.21-.42-1.88,3.19-1.58h2.08v13.14h-2.4Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M367,435.2c0,4.23-1.66,6.88-4.79,6.88s-4.65-2.75-4.67-6.76,1.74-6.83,4.81-6.83S367,431.32,367,435.2Zm-7,.12c0,3.2.87,4.86,2.24,4.86s2.22-1.78,2.22-4.94-.72-4.85-2.22-4.85C360.94,430.39,360,432,360,435.32Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M372.44,431h0L370,432.17l-.42-1.88,3.19-1.58h2.09v13.14h-2.41Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M388.65,435.2c0,4.23-1.65,6.88-4.79,6.88s-4.65-2.75-4.67-6.76,1.74-6.83,4.81-6.83S388.65,431.32,388.65,435.2Zm-6.95.12c0,3.2.87,4.86,2.24,4.86s2.23-1.78,2.23-4.94-.73-4.85-2.23-4.85C382.61,430.39,381.68,432,381.7,435.32Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M394.11,431h0l-2.4,1.21-.43-1.88,3.2-1.58h2.08v13.14h-2.41Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M410.33,435.2c0,4.23-1.66,6.88-4.8,6.88s-4.64-2.75-4.67-6.76,1.74-6.83,4.82-6.83S410.33,431.32,410.33,435.2Zm-7,.12c0,3.2.87,4.86,2.25,4.86s2.22-1.78,2.22-4.94-.73-4.85-2.22-4.85S403.35,432,403.37,435.32Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M415.78,431h0l-2.4,1.21-.43-1.88,3.2-1.58h2.08v13.14h-2.41Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M323.64,451.46c0,4.23-1.66,6.88-4.79,6.88s-4.65-2.75-4.67-6.76,1.73-6.83,4.81-6.83S323.64,447.58,323.64,451.46Zm-7,.12c0,3.2.87,4.86,2.25,4.86s2.22-1.78,2.22-4.94-.73-4.85-2.22-4.85S316.66,448.29,316.68,451.58Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M334.47,451.46c0,4.23-1.66,6.88-4.79,6.88s-4.65-2.75-4.67-6.76,1.74-6.83,4.81-6.83S334.47,447.58,334.47,451.46Zm-7,.12c0,3.2.87,4.86,2.24,4.86s2.23-1.78,2.23-4.94-.73-4.85-2.23-4.85C328.43,446.65,327.5,448.29,327.52,451.58Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M339.93,447.22h0l-2.4,1.21-.43-1.88,3.2-1.58h2.08v13.14h-2.41Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M356.15,451.46c0,4.23-1.66,6.88-4.8,6.88s-4.65-2.75-4.67-6.76,1.74-6.83,4.82-6.83S356.15,447.58,356.15,451.46Zm-7,.12c0,3.2.87,4.86,2.24,4.86s2.23-1.78,2.23-4.94-.73-4.85-2.23-4.85C350.1,446.65,349.17,448.29,349.19,451.58Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M361.6,447.22h0l-2.4,1.21-.43-1.88,3.2-1.58H364v13.14H361.6Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M377.82,451.46c0,4.23-1.66,6.88-4.79,6.88s-4.65-2.75-4.67-6.76,1.73-6.83,4.81-6.83S377.82,447.58,377.82,451.46Zm-7,.12c0,3.2.87,4.86,2.25,4.86s2.22-1.78,2.22-4.94-.73-4.85-2.22-4.85S370.84,448.29,370.86,451.58Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M383.28,447.22h0l-2.41,1.21-.42-1.88L383.6,445h2.08v13.14h-2.4Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M399.49,451.46c0,4.23-1.66,6.88-4.79,6.88s-4.65-2.75-4.67-6.76,1.74-6.83,4.81-6.83S399.49,447.58,399.49,451.46Zm-6.95.12c0,3.2.86,4.86,2.24,4.86s2.22-1.78,2.22-4.94-.72-4.85-2.22-4.85C393.45,446.65,392.51,448.29,392.54,451.58Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M410.33,451.46c0,4.23-1.66,6.88-4.8,6.88s-4.64-2.75-4.67-6.76,1.74-6.83,4.82-6.83S410.33,447.58,410.33,451.46Zm-7,.12c0,3.2.87,4.86,2.25,4.86s2.22-1.78,2.22-4.94-.73-4.85-2.22-4.85S403.35,448.29,403.37,451.58Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M415.78,447.22h0l-2.4,1.21-.43-1.88,3.2-1.58h2.08v13.14h-2.41Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M318.26,463.48h0l-2.41,1.21-.42-1.88,3.19-1.58h2.09v13.14h-2.41Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M334.47,467.72c0,4.23-1.66,6.88-4.79,6.88s-4.65-2.75-4.67-6.76,1.74-6.83,4.81-6.83S334.47,463.84,334.47,467.72Zm-7,.12c0,3.2.87,4.86,2.24,4.86s2.23-1.78,2.23-4.94-.73-4.85-2.23-4.85C328.43,462.91,327.5,464.55,327.52,467.84Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M339.93,463.48h0l-2.4,1.21-.43-1.88,3.2-1.58h2.08v13.14h-2.41Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M356.15,467.72c0,4.23-1.66,6.88-4.8,6.88s-4.65-2.75-4.67-6.76,1.74-6.83,4.82-6.83S356.15,463.84,356.15,467.72Zm-7,.12c0,3.2.87,4.86,2.24,4.86s2.23-1.78,2.23-4.94-.73-4.85-2.23-4.85C350.1,462.91,349.17,464.55,349.19,467.84Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M367,467.72c0,4.23-1.66,6.88-4.79,6.88s-4.65-2.75-4.67-6.76,1.74-6.83,4.81-6.83S367,463.84,367,467.72Zm-7,.12c0,3.2.87,4.86,2.24,4.86s2.22-1.78,2.22-4.94-.72-4.85-2.22-4.85C360.94,462.91,360,464.55,360,467.84Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M372.44,463.48h0L370,464.69l-.42-1.88,3.19-1.58h2.09v13.14h-2.41Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M388.65,467.72c0,4.23-1.65,6.88-4.79,6.88s-4.65-2.75-4.67-6.76S380.93,461,384,461,388.65,463.84,388.65,467.72Zm-6.95.12c0,3.2.87,4.86,2.24,4.86s2.23-1.78,2.23-4.94-.73-4.85-2.23-4.85C382.61,462.91,381.68,464.55,381.7,467.84Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M399.49,467.72c0,4.23-1.66,6.88-4.79,6.88s-4.65-2.75-4.67-6.76,1.74-6.83,4.81-6.83S399.49,463.84,399.49,467.72Zm-6.95.12c0,3.2.86,4.86,2.24,4.86s2.22-1.78,2.22-4.94-.72-4.85-2.22-4.85C393.45,462.91,392.51,464.55,392.54,467.84Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M405,463.48h0l-2.41,1.21-.42-1.88,3.19-1.58h2.08v13.14H405Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M421.16,467.72c0,4.23-1.66,6.88-4.79,6.88s-4.65-2.75-4.67-6.76,1.74-6.83,4.81-6.83S421.16,463.84,421.16,467.72Zm-7,.12c0,3.2.87,4.86,2.24,4.86s2.23-1.78,2.23-4.94-.73-4.85-2.23-4.85C415.12,462.91,414.19,464.55,414.21,467.84Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M323.64,484c0,4.23-1.66,6.88-4.79,6.88s-4.65-2.75-4.67-6.76,1.73-6.83,4.81-6.83S323.64,480.1,323.64,484Zm-7,.12c0,3.2.87,4.86,2.25,4.86s2.22-1.78,2.22-4.94-.73-4.85-2.22-4.85S316.66,480.81,316.68,484.1Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M334.47,484c0,4.23-1.66,6.88-4.79,6.88S325,488.11,325,484.1s1.74-6.83,4.81-6.83S334.47,480.1,334.47,484Zm-7,.12c0,3.2.87,4.86,2.24,4.86S332,487.18,332,484s-.73-4.85-2.23-4.85C328.43,479.17,327.5,480.81,327.52,484.1Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M339.93,479.74h0l-2.4,1.21-.43-1.88,3.2-1.58h2.08v13.14h-2.41Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M350.77,479.74h0L348.32,481l-.42-1.88,3.19-1.58h2.08v13.14h-2.4Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M367,484c0,4.23-1.66,6.88-4.79,6.88s-4.65-2.75-4.67-6.76,1.74-6.83,4.81-6.83S367,480.1,367,484Zm-7,.12c0,3.2.87,4.86,2.24,4.86s2.22-1.78,2.22-4.94-.72-4.85-2.22-4.85C360.94,479.17,360,480.81,360,484.1Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M372.44,479.74h0L370,481l-.42-1.88,3.19-1.58h2.09v13.14h-2.41Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M383.28,479.74h0L380.83,481l-.42-1.88,3.19-1.58h2.08v13.14h-2.4Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M394.11,479.74h0l-2.4,1.21-.43-1.88,3.2-1.58h2.08v13.14h-2.41Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M410.33,484c0,4.23-1.66,6.88-4.8,6.88s-4.64-2.75-4.67-6.76,1.74-6.83,4.82-6.83S410.33,480.1,410.33,484Zm-7,.12c0,3.2.87,4.86,2.25,4.86s2.22-1.78,2.22-4.94-.73-4.85-2.22-4.85S403.35,480.81,403.37,484.1Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M415.78,479.74h0l-2.4,1.21-.43-1.88,3.2-1.58h2.08v13.14h-2.41Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M318.26,496h0l-2.41,1.21-.42-1.88,3.19-1.58h2.09v13.14h-2.41Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M329.1,496h-.05l-2.4,1.21-.43-1.88,3.2-1.58h2.08v13.14h-2.4Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M345.31,500.24c0,4.23-1.66,6.88-4.79,6.88s-4.65-2.75-4.67-6.76,1.74-6.83,4.81-6.83S345.31,496.36,345.31,500.24Zm-7,.12c0,3.2.87,4.86,2.25,4.86s2.22-1.78,2.22-4.94-.72-4.85-2.22-4.85C339.26,495.43,338.33,497.07,338.35,500.36Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M350.77,496h0l-2.41,1.21-.42-1.88,3.19-1.58h2.08v13.14h-2.4Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M367,500.24c0,4.23-1.66,6.88-4.79,6.88s-4.65-2.75-4.67-6.76,1.74-6.83,4.81-6.83S367,496.36,367,500.24Zm-7,.12c0,3.2.87,4.86,2.24,4.86s2.22-1.78,2.22-4.94-.72-4.85-2.22-4.85C360.94,495.43,360,497.07,360,500.36Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M377.82,500.24c0,4.23-1.66,6.88-4.79,6.88s-4.65-2.75-4.67-6.76,1.73-6.83,4.81-6.83S377.82,496.36,377.82,500.24Zm-7,.12c0,3.2.87,4.86,2.25,4.86s2.22-1.78,2.22-4.94-.73-4.85-2.22-4.85S370.84,497.07,370.86,500.36Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M383.28,496h0l-2.41,1.21-.42-1.88,3.19-1.58h2.08v13.14h-2.4Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M394.11,496h0l-2.4,1.21-.43-1.88,3.2-1.58h2.08v13.14h-2.41Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M410.33,500.24c0,4.23-1.66,6.88-4.8,6.88s-4.64-2.75-4.67-6.76,1.74-6.83,4.82-6.83S410.33,496.36,410.33,500.24Zm-7,.12c0,3.2.87,4.86,2.25,4.86s2.22-1.78,2.22-4.94-.73-4.85-2.22-4.85S403.35,497.07,403.37,500.36Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M415.78,496h0l-2.4,1.21-.43-1.88,3.2-1.58h2.08v13.14h-2.41Z" transform="translate(-240.98 -235.15)"/></g><path class="cls-9" d="M471.72,375.86H372.5v32a6.4,6.4,0,0,1-6.41,6.4h-35.2V535.89a6.42,6.42,0,0,0,6.4,6.4H471.72a6.42,6.42,0,0,0,6.4-6.4V382.26A6.42,6.42,0,0,0,471.72,375.86Z" transform="translate(-240.98 -235.15)"/><path class="cls-6" d="M366.09,414.26a6.4,6.4,0,0,0,6.41-6.4v-32l-41.61,38.4Z" transform="translate(-240.98 -235.15)"/><path class="cls-5" d="M372.5,542.29h99.22a6.4,6.4,0,0,0,6.4-6.4V443.36A160.38,160.38,0,0,1,372.5,542.29Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M362,439c0,4.23-1.66,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.74-6.83,4.81-6.83S362,435.13,362,439Zm-7,.12c0,3.2.86,4.85,2.24,4.85s2.22-1.78,2.22-4.93-.72-4.85-2.22-4.85C356,434.2,355.07,435.83,355.09,439.13Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M367.5,434.76h0L365.05,436l-.42-1.88,3.19-1.58h2.09v13.14H367.5Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M378.34,434.76h0L375.89,436l-.43-1.88,3.2-1.58h2.08v13.14h-2.4Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M394.55,439c0,4.23-1.66,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.74-6.83,4.81-6.83S394.55,435.13,394.55,439Zm-7,.12c0,3.2.87,4.85,2.25,4.85s2.22-1.78,2.22-4.93-.73-4.85-2.22-4.85C388.5,434.2,387.57,435.83,387.59,439.13Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M400,434.76h0L397.56,436l-.42-1.88,3.19-1.58h2.08v13.14H400Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M416.22,439c0,4.23-1.66,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.74-6.83,4.81-6.83S416.22,435.13,416.22,439Zm-7,.12c0,3.2.87,4.85,2.24,4.85s2.22-1.78,2.22-4.93-.72-4.85-2.22-4.85C410.18,434.2,409.25,435.83,409.27,439.13Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M427.06,439c0,4.23-1.66,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.73-6.83,4.81-6.83S427.06,435.13,427.06,439Zm-7,.12c0,3.2.87,4.85,2.25,4.85s2.22-1.78,2.22-4.93-.73-4.85-2.22-4.85S420.08,435.83,420.1,439.13Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M437.89,439c0,4.23-1.65,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.74-6.83,4.81-6.83S437.89,435.13,437.89,439Zm-6.95.12c0,3.2.87,4.85,2.24,4.85s2.23-1.78,2.23-4.93-.73-4.85-2.23-4.85C431.85,434.2,430.92,435.83,430.94,439.13Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M443.35,434.76h0l-2.4,1.22-.43-1.88,3.2-1.58h2.08v13.14h-2.41Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M454.19,434.76h0L451.74,436l-.42-1.88,3.19-1.58h2.08v13.14h-2.4Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M356.66,451h0l-2.4,1.22-.43-1.88,3.2-1.58h2.08v13.14h-2.41Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M372.88,455.27c0,4.23-1.66,6.87-4.8,6.87s-4.64-2.75-4.67-6.75,1.74-6.83,4.82-6.83S372.88,451.39,372.88,455.27Zm-7,.12c0,3.2.87,4.85,2.25,4.85s2.22-1.78,2.22-4.93-.73-4.85-2.22-4.85S365.9,452.1,365.92,455.39Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M383.71,455.27c0,4.23-1.65,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.74-6.83,4.81-6.83S383.71,451.39,383.71,455.27Zm-6.95.12c0,3.2.87,4.85,2.24,4.85s2.23-1.78,2.23-4.93-.73-4.85-2.23-4.85C377.67,450.46,376.74,452.1,376.76,455.39Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M389.17,451h0l-2.4,1.22-.43-1.88,3.19-1.58h2.09v13.14h-2.41Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M405.39,455.27c0,4.23-1.66,6.87-4.8,6.87s-4.65-2.75-4.67-6.75,1.74-6.83,4.82-6.83S405.39,451.39,405.39,455.27Zm-7,.12c0,3.2.87,4.85,2.24,4.85s2.23-1.78,2.23-4.93-.73-4.85-2.23-4.85C399.34,450.46,398.41,452.1,398.43,455.39Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M410.84,451h0l-2.4,1.22-.43-1.88,3.2-1.58h2.08v13.14h-2.41Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M427.06,455.27c0,4.23-1.66,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.73-6.83,4.81-6.83S427.06,451.39,427.06,455.27Zm-7,.12c0,3.2.87,4.85,2.25,4.85s2.22-1.78,2.22-4.93-.73-4.85-2.22-4.85S420.08,452.1,420.1,455.39Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M432.52,451h0l-2.41,1.22-.42-1.88,3.19-1.58h2.08v13.14h-2.4Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M448.73,455.27c0,4.23-1.66,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.74-6.83,4.81-6.83S448.73,451.39,448.73,455.27Zm-7,.12c0,3.2.86,4.85,2.24,4.85s2.22-1.78,2.22-4.93-.72-4.85-2.22-4.85C442.69,450.46,441.75,452.1,441.78,455.39Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M454.19,451h0l-2.41,1.22-.42-1.88,3.19-1.58h2.08v13.14h-2.4Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M362,471.53c0,4.23-1.66,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.74-6.83,4.81-6.83S362,467.65,362,471.53Zm-7,.12c0,3.2.86,4.85,2.24,4.85s2.22-1.78,2.22-4.93-.72-4.85-2.22-4.85C356,466.72,355.07,468.36,355.09,471.65Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M372.88,471.53c0,4.23-1.66,6.87-4.8,6.87s-4.64-2.75-4.67-6.75,1.74-6.83,4.82-6.83S372.88,467.65,372.88,471.53Zm-7,.12c0,3.2.87,4.85,2.25,4.85s2.22-1.78,2.22-4.93-.73-4.85-2.22-4.85S365.9,468.36,365.92,471.65Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M378.34,467.28h0l-2.41,1.22-.43-1.88,3.2-1.58h2.08v13.14h-2.4Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M394.55,471.53c0,4.23-1.66,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.74-6.83,4.81-6.83S394.55,467.65,394.55,471.53Zm-7,.12c0,3.2.87,4.85,2.25,4.85s2.22-1.78,2.22-4.93-.73-4.85-2.22-4.85C388.5,466.72,387.57,468.36,387.59,471.65Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M400,467.28h0l-2.41,1.22-.42-1.88,3.19-1.58h2.08v13.14H400Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M416.22,471.53c0,4.23-1.66,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.74-6.83,4.81-6.83S416.22,467.65,416.22,471.53Zm-7,.12c0,3.2.87,4.85,2.24,4.85s2.22-1.78,2.22-4.93-.72-4.85-2.22-4.85C410.18,466.72,409.25,468.36,409.27,471.65Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M421.68,467.28h0l-2.41,1.22-.42-1.88L422,465h2.09v13.14h-2.41Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M437.89,471.53c0,4.23-1.65,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.74-6.83,4.81-6.83S437.89,467.65,437.89,471.53Zm-6.95.12c0,3.2.87,4.85,2.24,4.85s2.23-1.78,2.23-4.93-.73-4.85-2.23-4.85C431.85,466.72,430.92,468.36,430.94,471.65Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M448.73,471.53c0,4.23-1.66,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.74-6.83,4.81-6.83S448.73,467.65,448.73,471.53Zm-7,.12c0,3.2.86,4.85,2.24,4.85s2.22-1.78,2.22-4.93-.72-4.85-2.22-4.85C442.69,466.72,441.75,468.36,441.78,471.65Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M454.19,467.28h0l-2.41,1.22-.42-1.88,3.19-1.58h2.08v13.14h-2.4Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M356.66,483.54h0l-2.4,1.22-.43-1.88,3.2-1.58h2.08v13.14h-2.41Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M372.88,487.79c0,4.23-1.66,6.87-4.8,6.87s-4.64-2.75-4.67-6.75,1.74-6.83,4.82-6.83S372.88,483.91,372.88,487.79Zm-7,.12c0,3.2.87,4.85,2.25,4.85s2.22-1.77,2.22-4.93-.73-4.85-2.22-4.85S365.9,484.62,365.92,487.91Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M378.34,483.54h0l-2.41,1.22-.43-1.88,3.2-1.58h2.08v13.14h-2.4Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M394.55,487.79c0,4.23-1.66,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.74-6.83,4.81-6.83S394.55,483.91,394.55,487.79Zm-7,.12c0,3.2.87,4.85,2.25,4.85s2.22-1.77,2.22-4.93-.73-4.85-2.22-4.85C388.5,483,387.57,484.62,387.59,487.91Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M405.39,487.79c0,4.23-1.66,6.87-4.8,6.87s-4.65-2.75-4.67-6.75,1.74-6.83,4.82-6.83S405.39,483.91,405.39,487.79Zm-7,.12c0,3.2.87,4.85,2.24,4.85s2.23-1.77,2.23-4.93-.73-4.85-2.23-4.85C399.34,483,398.41,484.62,398.43,487.91Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M410.84,483.54h0l-2.4,1.22-.43-1.88,3.2-1.58h2.08v13.14h-2.41Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M427.06,487.79c0,4.23-1.66,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.73-6.83,4.81-6.83S427.06,483.91,427.06,487.79Zm-7,.12c0,3.2.87,4.85,2.25,4.85s2.22-1.77,2.22-4.93-.73-4.85-2.22-4.85S420.08,484.62,420.1,487.91Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M437.89,487.79c0,4.23-1.65,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.74-6.83,4.81-6.83S437.89,483.91,437.89,487.79Zm-6.95.12c0,3.2.87,4.85,2.24,4.85s2.23-1.77,2.23-4.93-.73-4.85-2.23-4.85C431.85,483,430.92,484.62,430.94,487.91Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M443.35,483.54h0l-2.4,1.22-.43-1.88,3.2-1.58h2.08v13.14h-2.41Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M459.57,487.79c0,4.23-1.66,6.87-4.8,6.87s-4.65-2.75-4.67-6.75,1.74-6.83,4.82-6.83S459.57,483.91,459.57,487.79Zm-7,.12c0,3.2.87,4.85,2.25,4.85s2.22-1.77,2.22-4.93-.73-4.85-2.22-4.85S452.59,484.62,452.61,487.91Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M362,504.05c0,4.23-1.66,6.88-4.79,6.88s-4.65-2.75-4.67-6.76,1.74-6.83,4.81-6.83S362,500.17,362,504.05Zm-7,.12c0,3.2.86,4.86,2.24,4.86s2.22-1.78,2.22-4.94-.72-4.85-2.22-4.85C356,499.24,355.07,500.88,355.09,504.17Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M372.88,504.05c0,4.23-1.66,6.88-4.8,6.88s-4.64-2.75-4.67-6.76,1.74-6.83,4.82-6.83S372.88,500.17,372.88,504.05Zm-7,.12c0,3.2.87,4.86,2.25,4.86s2.22-1.78,2.22-4.94-.73-4.85-2.22-4.85S365.9,500.88,365.92,504.17Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M378.34,499.81h0L375.89,501l-.43-1.88,3.2-1.58h2.08V510.7h-2.4Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M389.17,499.81h0l-2.4,1.21-.43-1.88,3.19-1.58h2.09V510.7h-2.41Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M405.39,504.05c0,4.23-1.66,6.88-4.8,6.88s-4.65-2.75-4.67-6.76,1.74-6.83,4.82-6.83S405.39,500.17,405.39,504.05Zm-7,.12c0,3.2.87,4.86,2.24,4.86s2.23-1.78,2.23-4.94-.73-4.85-2.23-4.85C399.34,499.24,398.41,500.88,398.43,504.17Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M410.84,499.81h0L408.4,501l-.43-1.88,3.2-1.58h2.08V510.7h-2.41Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M421.68,499.81h0L419.23,501l-.42-1.88,3.19-1.58h2.09V510.7h-2.41Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M432.52,499.81h0L430.07,501l-.42-1.88,3.19-1.58h2.08V510.7h-2.4Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M448.73,504.05c0,4.23-1.66,6.88-4.79,6.88s-4.65-2.75-4.67-6.76,1.74-6.83,4.81-6.83S448.73,500.17,448.73,504.05Zm-7,.12c0,3.2.86,4.86,2.24,4.86s2.22-1.78,2.22-4.94-.72-4.85-2.22-4.85C442.69,499.24,441.75,500.88,441.78,504.17Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M454.19,499.81h0L451.74,501l-.42-1.88,3.19-1.58h2.08V510.7h-2.4Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M356.66,516.07h0l-2.4,1.21-.43-1.88,3.2-1.58h2.08V527h-2.41Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M367.5,516.07h0l-2.41,1.21-.42-1.88,3.19-1.58h2.09V527H367.5Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M383.71,520.31c0,4.23-1.65,6.88-4.79,6.88s-4.65-2.75-4.67-6.76,1.74-6.83,4.81-6.83S383.71,516.43,383.71,520.31Zm-6.95.12c0,3.2.87,4.86,2.24,4.86s2.23-1.78,2.23-4.94-.73-4.85-2.23-4.85C377.67,515.5,376.74,517.14,376.76,520.43Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M389.17,516.07h0l-2.4,1.21-.43-1.88,3.19-1.58h2.09V527h-2.41Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M405.39,520.31c0,4.23-1.66,6.88-4.8,6.88s-4.65-2.75-4.67-6.76,1.74-6.83,4.82-6.83S405.39,516.43,405.39,520.31Zm-7,.12c0,3.2.87,4.86,2.24,4.86s2.23-1.78,2.23-4.94-.73-4.85-2.23-4.85C399.34,515.5,398.41,517.14,398.43,520.43Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M416.22,520.31c0,4.23-1.66,6.88-4.79,6.88s-4.65-2.75-4.67-6.76,1.74-6.83,4.81-6.83S416.22,516.43,416.22,520.31Zm-7,.12c0,3.2.87,4.86,2.24,4.86s2.22-1.78,2.22-4.94-.72-4.85-2.22-4.85C410.18,515.5,409.25,517.14,409.27,520.43Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M421.68,516.07h0l-2.41,1.21-.42-1.88,3.19-1.58h2.09V527h-2.41Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M432.52,516.07h0l-2.41,1.21-.42-1.88,3.19-1.58h2.08V527h-2.4Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M448.73,520.31c0,4.23-1.66,6.88-4.79,6.88s-4.65-2.75-4.67-6.76,1.74-6.83,4.81-6.83S448.73,516.43,448.73,520.31Zm-7,.12c0,3.2.86,4.86,2.24,4.86s2.22-1.78,2.22-4.94-.72-4.85-2.22-4.85C442.69,515.5,441.75,517.14,441.78,520.43Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M454.19,516.07h0l-2.41,1.21-.42-1.88,3.19-1.58h2.08V527h-2.4Z" transform="translate(-240.98 -235.15)"/></g><g class="cls-10"><path class="cls-11" d="M342.37,583.65a13.66,13.66,0,0,1-5.57,1c-6.85,0-11-4.29-11-10.85,0-7.1,4.93-11.39,11.52-11.39a12.31,12.31,0,0,1,5.25,1l-.86,3.13a10.64,10.64,0,0,0-4.23-.83c-4.38,0-7.55,2.75-7.55,7.94,0,4.73,2.79,7.77,7.52,7.77a11.05,11.05,0,0,0,4.29-.8Z" transform="translate(-240.98 -235.15)"/><path class="cls-11" d="M350.5,566h-6.15v-3.3h16.29V566h-6.21v18.27H350.5Z" transform="translate(-240.98 -235.15)"/><path class="cls-11" d="M363.17,562.72h12.45V566h-8.51v5.95H375v3.24h-7.93v9.15h-3.94Z" transform="translate(-240.98 -235.15)"/><path class="cls-11" d="M400.29,561.57V579.9c0,1.6.06,3.33.12,4.39H396.9l-.16-2.47h-.07a5.61,5.61,0,0,1-5.09,2.82c-3.71,0-6.65-3.17-6.65-8,0-5.21,3.23-8.32,7-8.32a5,5,0,0,1,4.39,2h.06v-8.83Zm-3.94,13.63a5.86,5.86,0,0,0-.09-1,3.46,3.46,0,0,0-3.4-2.79c-2.52,0-3.93,2.24-3.93,5.15s1.41,4.93,3.9,4.93a3.47,3.47,0,0,0,3.39-2.78,4.22,4.22,0,0,0,.13-1.15Z" transform="translate(-240.98 -235.15)"/><path class="cls-11" d="M413.28,584.29l-.26-1.73h-.09a5.77,5.77,0,0,1-4.61,2.08,4.63,4.63,0,0,1-4.9-4.64c0-3.94,3.49-5.92,9.25-5.89v-.25c0-1-.41-2.72-3.17-2.72a8.29,8.29,0,0,0-4.19,1.15l-.77-2.56a11.3,11.3,0,0,1,5.64-1.38c5,0,6.43,3.17,6.43,6.56v5.63a25.12,25.12,0,0,0,.22,3.75Zm-.51-7.62c-2.79-.06-5.44.55-5.44,2.91a2.06,2.06,0,0,0,2.24,2.24,3.18,3.18,0,0,0,3.07-2.14,2.73,2.73,0,0,0,.13-.86Z" transform="translate(-240.98 -235.15)"/><path class="cls-11" d="M425.09,564.26v4.44h3.74v2.95h-3.74v6.88c0,1.89.51,2.88,2,2.88a6.07,6.07,0,0,0,1.54-.19l.06,3a8.41,8.41,0,0,1-2.84.39,4.58,4.58,0,0,1-3.4-1.28c-.83-.9-1.21-2.31-1.21-4.35v-7.33H419V568.7h2.24v-3.51Z" transform="translate(-240.98 -235.15)"/><path class="cls-11" d="M440.58,584.29l-.26-1.73h-.1a5.77,5.77,0,0,1-4.6,2.08,4.63,4.63,0,0,1-4.9-4.64c0-3.94,3.49-5.92,9.25-5.89v-.25c0-1-.42-2.72-3.17-2.72a8.24,8.24,0,0,0-4.19,1.15l-.77-2.56a11.26,11.26,0,0,1,5.63-1.38c5,0,6.43,3.17,6.43,6.56v5.63a25,25,0,0,0,.23,3.75Zm-.52-7.62c-2.78-.06-5.44.55-5.44,2.91a2.07,2.07,0,0,0,2.25,2.24,3.2,3.2,0,0,0,3.07-2.14,3,3,0,0,0,.12-.86Z" transform="translate(-240.98 -235.15)"/><path class="cls-11" d="M332.75,611.07a8.75,8.75,0,0,0,4,1.12c1.73,0,2.5-.7,2.5-1.73s-.64-1.6-2.56-2.27c-3-1.05-4.32-2.72-4.29-4.54,0-2.75,2.27-4.9,5.89-4.9a9.16,9.16,0,0,1,4.13.93l-.77,2.78a7,7,0,0,0-3.3-.89c-1.4,0-2.17.67-2.17,1.63s.73,1.47,2.72,2.18c2.81,1,4.13,2.46,4.16,4.76,0,2.82-2.21,4.87-6.34,4.87a10,10,0,0,1-4.73-1.09Z" transform="translate(-240.98 -235.15)"/><path class="cls-11" d="M350.8,594.66v4.44h3.74v2.95H350.8v6.88c0,1.89.51,2.88,2,2.88a6,6,0,0,0,1.53-.19l.07,3a8.48,8.48,0,0,1-2.85.39,4.54,4.54,0,0,1-3.39-1.28c-.83-.9-1.22-2.31-1.22-4.35v-7.33h-2.24V599.1H347v-3.52Z" transform="translate(-240.98 -235.15)"/><path class="cls-11" d="M357.52,604.13c0-2.11,0-3.62-.13-5h3.43l.13,3h.12a4.66,4.66,0,0,1,4.26-3.33,4.42,4.42,0,0,1,.93.1v3.71a5.8,5.8,0,0,0-1.15-.13,3.47,3.47,0,0,0-3.52,3,6.23,6.23,0,0,0-.13,1.21v8.07h-3.94Z" transform="translate(-240.98 -235.15)"/><path class="cls-11" d="M371.41,608c.09,2.82,2.3,4,4.8,4a11.71,11.71,0,0,0,4.32-.7l.57,2.72a14.7,14.7,0,0,1-5.44,1c-5.05,0-8-3.11-8-7.87,0-4.32,2.63-8.39,7.62-8.39s6.72,4.16,6.72,7.59a10.05,10.05,0,0,1-.13,1.66Zm6.85-2.75c0-1.44-.61-3.81-3.23-3.81-2.44,0-3.46,2.21-3.62,3.81Z" transform="translate(-240.98 -235.15)"/><path class="cls-11" d="M393.9,614.69l-.25-1.73h-.1A5.77,5.77,0,0,1,389,615a4.63,4.63,0,0,1-4.9-4.64c0-3.94,3.49-5.92,9.25-5.89v-.25c0-1-.42-2.72-3.17-2.72a8.24,8.24,0,0,0-4.19,1.15l-.77-2.56a11.15,11.15,0,0,1,5.63-1.38c5,0,6.43,3.17,6.43,6.56v5.63a25,25,0,0,0,.23,3.75Zm-.51-7.62c-2.78-.06-5.44.55-5.44,2.91a2.07,2.07,0,0,0,2.24,2.24,3.18,3.18,0,0,0,3.07-2.14,2.73,2.73,0,0,0,.13-.86Z" transform="translate(-240.98 -235.15)"/><path class="cls-11" d="M401.39,603.74c0-1.79,0-3.29-.13-4.64h3.4l.16,2.31h.09a5.39,5.39,0,0,1,4.8-2.66,4.5,4.5,0,0,1,4.32,2.88h.07a5.87,5.87,0,0,1,1.92-2,5.16,5.16,0,0,1,3.13-.93c2.59,0,5.22,1.76,5.22,6.75v9.19h-3.84v-8.61c0-2.59-.9-4.13-2.79-4.13A3,3,0,0,0,415,604a6.08,6.08,0,0,0-.19,1.31v9.35H411v-9c0-2.17-.86-3.71-2.69-3.71a3.06,3.06,0,0,0-2.81,2.24,3.38,3.38,0,0,0-.23,1.28v9.22h-3.84Z" transform="translate(-240.98 -235.15)"/><path class="cls-11" d="M428.34,611.07a8.68,8.68,0,0,0,4,1.12c1.72,0,2.49-.7,2.49-1.73s-.64-1.6-2.56-2.27c-3-1.05-4.32-2.72-4.28-4.54,0-2.75,2.27-4.9,5.88-4.9a9.16,9.16,0,0,1,4.13.93l-.77,2.78a7,7,0,0,0-3.29-.89c-1.41,0-2.18.67-2.18,1.63s.74,1.47,2.72,2.18c2.82,1,4.13,2.46,4.16,4.76,0,2.82-2.21,4.87-6.34,4.87a10,10,0,0,1-4.73-1.09Z" transform="translate(-240.98 -235.15)"/></g><g id="surface1-2" data-name="surface1"><path class="cls-9" d="M745.45,380.33a5.81,5.81,0,0,0-5.79-5.79H649.93v28.94a5.79,5.79,0,0,1-5.79,5.79H612.3V536.63a5.81,5.81,0,0,0,5.79,5.79H739.66a5.81,5.81,0,0,0,5.79-5.79Z" transform="translate(-240.98 -235.15)"/><path class="cls-5" d="M649.93,542.42h89.73a5.79,5.79,0,0,0,5.79-5.79V453A145.05,145.05,0,0,1,649.93,542.42Z" transform="translate(-240.98 -235.15)"/><path class="cls-6" d="M649.93,403.48V374.54L612.3,409.27h31.84A5.79,5.79,0,0,0,649.93,403.48Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M693.35,452.69H632.57a2.9,2.9,0,1,1,0-5.79h60.78a2.9,2.9,0,0,1,0,5.79Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M705.91,470.06H632.57a2.9,2.9,0,1,1,0-5.79h73.34a2.9,2.9,0,1,1,0,5.79Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M667.79,487.42H632.57a2.9,2.9,0,1,1,0-5.79h35.22a2.9,2.9,0,1,1,0,5.79Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M710.72,435.32h-55a2.9,2.9,0,0,1,0-5.79h55a2.9,2.9,0,0,1,0,5.79Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M644.14,435.32H632.57a2.9,2.9,0,1,1,0-5.79h11.57a2.9,2.9,0,1,1,0,5.79Z" transform="translate(-240.98 -235.15)"/></g><path class="cls-12" d="M761.07,391.9H673.83a4.61,4.61,0,0,0-4.59,4.6v41.32a4.6,4.6,0,0,0,4.59,4.59h87.24a4.6,4.6,0,0,0,4.59-4.59V396.5A4.61,4.61,0,0,0,761.07,391.9Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M688,504.79H632.57a2.9,2.9,0,1,1,0-5.79H688a2.9,2.9,0,0,1,0,5.79Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M658.62,522.16h-26a2.9,2.9,0,1,1,0-5.79h26a2.9,2.9,0,0,1,0,5.79Z" transform="translate(-240.98 -235.15)"/><path class="cls-8" d="M700.35,487.42H679.6a2.9,2.9,0,0,1,0-5.79h20.75a2.9,2.9,0,1,1,0,5.79Z" transform="translate(-240.98 -235.15)"/><path class="cls-13" d="M688.68,409.69h-6.14v-3.3h16.29v3.3h-6.21V428h-3.94Z" transform="translate(-240.98 -235.15)"/><path class="cls-13" d="M701,423.67a10.86,10.86,0,0,0,5.22,1.38c2.53,0,3.93-1.19,3.93-2.95s-1.08-2.59-3.84-3.58c-3.55-1.28-5.82-3.17-5.82-6.27,0-3.52,2.94-6.21,7.62-6.21a11.34,11.34,0,0,1,5.18,1.09l-1,3.17a9.07,9.07,0,0,0-4.29-1c-2.49,0-3.58,1.35-3.58,2.59,0,1.67,1.25,2.44,4.13,3.56,3.74,1.4,5.56,3.29,5.56,6.4,0,3.45-2.62,6.46-8.19,6.46a12.7,12.7,0,0,1-5.82-1.35Z" transform="translate(-240.98 -235.15)"/><path class="cls-13" d="M717.71,406.68a39.34,39.34,0,0,1,6.27-.45c4,0,6.81.83,8.8,2.5s3.36,4.25,3.36,7.93c0,3.84-1.31,6.72-3.36,8.58s-5.57,2.94-9.76,2.94a42.8,42.8,0,0,1-5.31-.29ZM721.64,425a14.18,14.18,0,0,0,2.18.1c5.12,0,8.16-2.79,8.16-8.26,0-4.77-2.72-7.49-7.65-7.49a12.42,12.42,0,0,0-2.69.23Z" transform="translate(-240.98 -235.15)"/><path class="cls-13" d="M739.56,406.39h3.94v18.27h8.86V428h-12.8Z" transform="translate(-240.98 -235.15)"/><g class="cls-10"><path class="cls-11" d="M632.3,586.3V575a9.9,9.9,0,0,0-.06-1.21,2.8,2.8,0,0,0-.17-.74.8.8,0,0,0-.3-.38.78.78,0,0,0-.44-.11,1,1,0,0,0-.58.19,2.37,2.37,0,0,0-.57.6,10.64,10.64,0,0,0-.67,1.12q-.37.71-.87,1.71V586.3h-2.48v-11a13,13,0,0,0-.06-1.39,3.41,3.41,0,0,0-.17-.83.77.77,0,0,0-.31-.4.79.79,0,0,0-.45-.11,1,1,0,0,0-.53.15,2.32,2.32,0,0,0-.55.57,7.94,7.94,0,0,0-.68,1.11c-.25.46-.55,1.06-.9,1.79V586.3H620V570.61h2.08l.13,3a13.14,13.14,0,0,1,.79-1.52,4.73,4.73,0,0,1,.79-1,2.58,2.58,0,0,1,1.89-.74,2.32,2.32,0,0,1,1.92.83,4.09,4.09,0,0,1,.65,2.56c.25-.54.5-1,.74-1.44a5.78,5.78,0,0,1,.77-1.07,3,3,0,0,1,.92-.65,2.78,2.78,0,0,1,1.15-.23q3,0,3,4.55V586.3Z" transform="translate(-240.98 -235.15)"/><path class="cls-11" d="M652,577.63c0,.38,0,.71,0,1s0,.5-.05.73h-11a4.87,4.87,0,0,0,1.35,3.7,5.37,5.37,0,0,0,3.87,1.29q.69,0,1.38-.06c.46,0,.9-.08,1.33-.15s.83-.13,1.22-.21.75-.16,1.09-.26v2.24a18.79,18.79,0,0,1-2.51.51,21,21,0,0,1-2.9.19,10,10,0,0,1-3.47-.54,6,6,0,0,1-2.38-1.59,6.39,6.39,0,0,1-1.37-2.55,11.88,11.88,0,0,1-.45-3.41,10,10,0,0,1,.48-3.13,7.74,7.74,0,0,1,1.39-2.6,6.61,6.61,0,0,1,5.26-2.43,7.5,7.5,0,0,1,2.9.52,5.66,5.66,0,0,1,2.13,1.46,6.2,6.2,0,0,1,1.32,2.3A9.78,9.78,0,0,1,652,577.63Zm-2.83-.39a5.65,5.65,0,0,0-.2-1.92,4.14,4.14,0,0,0-.77-1.49,3.65,3.65,0,0,0-1.31-1,4.27,4.27,0,0,0-1.81-.36,3.74,3.74,0,0,0-1.62.35,3.65,3.65,0,0,0-1.27,1,5,5,0,0,0-.86,1.5,7.1,7.1,0,0,0-.41,1.92Z" transform="translate(-240.98 -235.15)"/><path class="cls-11" d="M668.94,586.08a13.14,13.14,0,0,1-1.91.34,18.86,18.86,0,0,1-2,.1,6.34,6.34,0,0,1-4.41-1.34,5.33,5.33,0,0,1-1.45-4.1v-8.19h-4.39v-2.28h4.39V566.3l2.72-.7v5h7.05v2.28h-7.05v8a3.29,3.29,0,0,0,.9,2.53,3.79,3.79,0,0,0,2.65.83,14.24,14.24,0,0,0,1.64-.11,15.66,15.66,0,0,0,1.86-.37Z" transform="translate(-240.98 -235.15)"/><path class="cls-11" d="M684,586.3l-.06-2.11A8.59,8.59,0,0,1,681.3,586a7.07,7.07,0,0,1-2.77.56,6.8,6.8,0,0,1-2.3-.34,4.37,4.37,0,0,1-1.57-1,3.63,3.63,0,0,1-.9-1.41,5.06,5.06,0,0,1-.29-1.77,4.36,4.36,0,0,1,1.76-3.69,8.49,8.49,0,0,1,5.19-1.34h3.25v-1.37a2.93,2.93,0,0,0-.89-2.23,3.84,3.84,0,0,0-2.72-.84,11.57,11.57,0,0,0-2.62.3,18.49,18.49,0,0,0-2.66.85v-2.46c.34-.12.73-.25,1.15-.37s.87-.22,1.33-.32,1-.16,1.47-.22a13.3,13.3,0,0,1,1.55-.09,10,10,0,0,1,2.56.31,5.15,5.15,0,0,1,1.93,1,4.13,4.13,0,0,1,1.21,1.61,5.65,5.65,0,0,1,.43,2.28V586.3Zm-.3-7.14h-3.45a6.85,6.85,0,0,0-1.75.2,3.5,3.5,0,0,0-1.21.58,2.32,2.32,0,0,0-.69.9,3,3,0,0,0-.23,1.18,2.83,2.83,0,0,0,.14.87,2,2,0,0,0,.46.73,2.25,2.25,0,0,0,.81.51,3.59,3.59,0,0,0,1.22.19,5.19,5.19,0,0,0,2.15-.57,10.82,10.82,0,0,0,2.55-1.81Z" transform="translate(-240.98 -235.15)"/><path class="cls-11" d="M690.69,578.79a10.83,10.83,0,0,1,.54-3.56,7.34,7.34,0,0,1,1.56-2.62,6.52,6.52,0,0,1,2.42-1.63,8.54,8.54,0,0,1,3.15-.55,12.12,12.12,0,0,1,1.48.09,8.54,8.54,0,0,1,1.42.3v-6.6H704V586.3h-2.44l-.09-3a8.35,8.35,0,0,1-2.47,2.46,5.5,5.5,0,0,1-2.88.79,4.87,4.87,0,0,1-2.36-.56,4.81,4.81,0,0,1-1.71-1.59,7.65,7.65,0,0,1-1-2.46A13.66,13.66,0,0,1,690.69,578.79Zm2.78-.18a8.6,8.6,0,0,0,.83,4.25,2.62,2.62,0,0,0,2.37,1.39,3.5,3.5,0,0,0,2.18-.92,12.76,12.76,0,0,0,2.41-2.73v-7.28a6.42,6.42,0,0,0-1.48-.48,8.06,8.06,0,0,0-1.61-.16,4.35,4.35,0,0,0-3.46,1.43A6.78,6.78,0,0,0,693.47,578.61Z" transform="translate(-240.98 -235.15)"/><path class="cls-11" d="M719.16,586.3l-.07-2.11a8.44,8.44,0,0,1-2.6,1.83,7.07,7.07,0,0,1-2.77.56,6.8,6.8,0,0,1-2.3-.34,4.37,4.37,0,0,1-1.57-1,3.77,3.77,0,0,1-.91-1.41,5.3,5.3,0,0,1-.28-1.77,4.37,4.37,0,0,1,1.75-3.69,8.54,8.54,0,0,1,5.2-1.34h3.25v-1.37a2.93,2.93,0,0,0-.89-2.23,3.85,3.85,0,0,0-2.72-.84,11.51,11.51,0,0,0-2.62.3,17.73,17.73,0,0,0-2.66.85v-2.46c.34-.12.72-.25,1.15-.37s.86-.22,1.33-.32,1-.16,1.47-.22a13.3,13.3,0,0,1,1.55-.09,10,10,0,0,1,2.56.31,5.22,5.22,0,0,1,1.93,1,4.13,4.13,0,0,1,1.21,1.61,5.66,5.66,0,0,1,.42,2.28V586.3Zm-.3-7.14h-3.45a6.8,6.8,0,0,0-1.75.2,3.41,3.41,0,0,0-1.21.58,2.32,2.32,0,0,0-.69.9,3,3,0,0,0-.23,1.18,2.83,2.83,0,0,0,.14.87,2,2,0,0,0,.45.73,2.3,2.3,0,0,0,.82.51,3.59,3.59,0,0,0,1.22.19,5.11,5.11,0,0,0,2.14-.57,10.65,10.65,0,0,0,2.56-1.81Z" transform="translate(-240.98 -235.15)"/><path class="cls-11" d="M739.31,586.08a13,13,0,0,1-1.9.34,19,19,0,0,1-2,.1,6.34,6.34,0,0,1-4.41-1.34,5.29,5.29,0,0,1-1.45-4.1v-8.19h-4.39v-2.28h4.39V566.3l2.71-.7v5h7v2.28h-7v8a3.29,3.29,0,0,0,.9,2.53,3.79,3.79,0,0,0,2.65.83,14.1,14.1,0,0,0,1.64-.11,15.27,15.27,0,0,0,1.86-.37Z" transform="translate(-240.98 -235.15)"/><path class="cls-11" d="M754.34,586.3l-.06-2.11a8.44,8.44,0,0,1-2.6,1.83,7.1,7.1,0,0,1-2.77.56,6.76,6.76,0,0,1-2.3-.34,4.28,4.28,0,0,1-1.57-1,3.65,3.65,0,0,1-.91-1.41,5.3,5.3,0,0,1-.29-1.77,4.38,4.38,0,0,1,1.76-3.69,8.5,8.5,0,0,1,5.2-1.34h3.25v-1.37a2.93,2.93,0,0,0-.89-2.23,3.85,3.85,0,0,0-2.72-.84,11.51,11.51,0,0,0-2.62.3,17.73,17.73,0,0,0-2.66.85v-2.46c.34-.12.72-.25,1.14-.37s.87-.22,1.34-.32,1-.16,1.47-.22a13.17,13.17,0,0,1,1.55-.09,10.09,10.09,0,0,1,2.56.31,5.22,5.22,0,0,1,1.93,1,4.23,4.23,0,0,1,1.21,1.61,5.66,5.66,0,0,1,.42,2.28V586.3Zm-.29-7.14h-3.46a6.85,6.85,0,0,0-1.75.2,3.36,3.36,0,0,0-1.2.58,2.34,2.34,0,0,0-.7.9,3,3,0,0,0-.22,1.18,2.56,2.56,0,0,0,.14.87,1.86,1.86,0,0,0,.45.73,2.34,2.34,0,0,0,.81.51,3.63,3.63,0,0,0,1.22.19,5.15,5.15,0,0,0,2.15-.57,10.65,10.65,0,0,0,2.56-1.81Z" transform="translate(-240.98 -235.15)"/></g><g class="cls-10"><path class="cls-11" d="M482.62,709.31a13.62,13.62,0,0,1-5.57,1c-6.84,0-11-4.29-11-10.85,0-7.1,4.92-11.39,11.52-11.39a12.45,12.45,0,0,1,5.24,1l-.86,3.14a10.42,10.42,0,0,0-4.22-.83c-4.39,0-7.55,2.75-7.55,7.93,0,4.74,2.78,7.78,7.51,7.78a11,11,0,0,0,4.29-.8Z" transform="translate(-240.98 -235.15)"/><path class="cls-11" d="M490.75,691.68h-6.14v-3.29h16.28v3.29h-6.2V710h-3.94Z" transform="translate(-240.98 -235.15)"/><path class="cls-11" d="M503.42,688.39h12.45v3.23h-8.51v6h7.93v3.23h-7.93V710h-3.94Z" transform="translate(-240.98 -235.15)"/><path class="cls-11" d="M530.68,689.92v4.45h3.75v2.94h-3.75v6.88c0,1.89.52,2.88,2,2.88a5.7,5.7,0,0,0,1.54-.19l.06,3a8.8,8.8,0,0,1-2.85.38,4.56,4.56,0,0,1-3.39-1.28c-.83-.89-1.21-2.3-1.21-4.35v-7.33h-2.24v-2.94h2.24v-3.52Z" transform="translate(-240.98 -235.15)"/><path class="cls-11" d="M537.41,699.39c0-2.11,0-3.61-.13-5h3.42l.13,3H541a4.65,4.65,0,0,1,4.25-3.33,4.38,4.38,0,0,1,.93.09v3.72a5.07,5.07,0,0,0-1.15-.13,3.46,3.46,0,0,0-3.52,3,7.25,7.25,0,0,0-.13,1.22V710h-3.93Z" transform="translate(-240.98 -235.15)"/><path class="cls-11" d="M557.28,710l-.26-1.73h-.09a5.79,5.79,0,0,1-4.61,2.08,4.63,4.63,0,0,1-4.9-4.64c0-3.93,3.49-5.92,9.25-5.88v-.26c0-1-.42-2.72-3.17-2.72a8.29,8.29,0,0,0-4.19,1.15l-.77-2.56a11.27,11.27,0,0,1,5.63-1.37c5,0,6.43,3.17,6.43,6.56v5.63a24.83,24.83,0,0,0,.23,3.74Zm-.52-7.61c-2.78-.07-5.43.54-5.43,2.91a2.07,2.07,0,0,0,2.24,2.24,3.2,3.2,0,0,0,3.07-2.15,2.92,2.92,0,0,0,.12-.86Z" transform="translate(-240.98 -235.15)"/><path class="cls-11" d="M576.22,709.47a11.26,11.26,0,0,1-4.42.8c-4.86,0-8-3.1-8-7.93S567,694,572.44,694a9.89,9.89,0,0,1,3.81.73l-.7,3a6.91,6.91,0,0,0-3-.61c-3,0-4.8,2.21-4.77,5,0,3.2,2.09,5,4.77,5a7.72,7.72,0,0,0,3.11-.61Z" transform="translate(-240.98 -235.15)"/><path class="cls-11" d="M581.63,703.26c.09,2.82,2.3,4,4.8,4a11.7,11.7,0,0,0,4.32-.71l.57,2.72a14.48,14.48,0,0,1-5.43,1c-5.06,0-8-3.1-8-7.87,0-4.32,2.63-8.38,7.62-8.38s6.72,4.16,6.72,7.58a10,10,0,0,1-.13,1.66Zm6.85-2.75c0-1.44-.61-3.81-3.23-3.81-2.44,0-3.46,2.21-3.62,3.81Z" transform="translate(-240.98 -235.15)"/></g></svg>
\ No newline at end of file
diff --git a/docs/modules/how-barectf-works/images/ctf-packet.svg b/docs/modules/how-barectf-works/images/ctf-packet.svg
new file mode 100644 (file)
index 0000000..d7d56f2
--- /dev/null
@@ -0,0 +1 @@
+<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1415.03 524.83"><defs><style>.cls-1{fill:#ffe9cc;stroke:#f8a794;}.cls-1,.cls-2,.cls-3,.cls-4,.cls-6,.cls-8{stroke-miterlimit:10;stroke-width:2px;}.cls-2{fill:#4eba6f;}.cls-2,.cls-3,.cls-8{stroke:#1a8947;}.cls-3{fill:#4eba6e;}.cls-4{fill:#e57e25;stroke:#d25627;}.cls-5{fill:#fff;}.cls-6{fill:#3b97d3;stroke:#206d99;}.cls-7{fill:#1a8947;}.cls-8{fill:none;}.cls-9{fill:#ce8172;}</style></defs><title>ctf-packet</title><rect class="cls-1" x="389.64" y="38.32" width="635.74" height="80.34" rx="12.66"/><rect class="cls-2" x="398.73" y="47.4" width="130.88" height="62.18" rx="9.2"/><rect class="cls-2" x="540.39" y="47.4" width="130.88" height="62.18" rx="9.2"/><rect class="cls-2" x="682.51" y="47.4" width="90.02" height="62.18" rx="9.2"/><rect class="cls-2" x="783.42" y="47.4" width="232.89" height="62.18" rx="9.2"/><rect class="cls-3" x="1" y="295.71" width="1413.03" height="176.94" rx="20.26"/><path class="cls-4" d="M538.9,646.27H366c-10.66,0-19.3-9.07-19.3-20.26V529.59c0-11.19,8.64-20.26,19.3-20.26H538.9c10.65,0,19.29,9.07,19.29,20.26V626C558.19,637.2,549.55,646.27,538.9,646.27Z" transform="translate(-323.84 -194.63)"/><path class="cls-5" d="M405.7,565.63v8.64h9.12v-8.64h3.93v21.56h-3.93v-9.5H405.7v9.5h-3.94V565.63Z" transform="translate(-323.84 -194.63)"/><path class="cls-5" d="M425.89,580.51c.1,2.81,2.3,4,4.8,4a11.66,11.66,0,0,0,4.32-.71l.58,2.72a14.58,14.58,0,0,1-5.44,1c-5.06,0-8-3.1-8-7.87,0-4.32,2.62-8.38,7.61-8.38s6.72,4.16,6.72,7.58a9.09,9.09,0,0,1-.13,1.67Zm6.85-2.76c0-1.43-.61-3.8-3.23-3.8-2.44,0-3.46,2.21-3.62,3.8Z" transform="translate(-323.84 -194.63)"/><path class="cls-5" d="M448.39,587.19l-.26-1.72H448a5.8,5.8,0,0,1-4.6,2.08,4.63,4.63,0,0,1-4.9-4.64c0-3.94,3.49-5.92,9.25-5.89v-.26c0-1-.42-2.72-3.17-2.72a8.14,8.14,0,0,0-4.19,1.16l-.77-2.56a11.15,11.15,0,0,1,5.63-1.38c5,0,6.43,3.17,6.43,6.56v5.63a24.83,24.83,0,0,0,.23,3.74Zm-.52-7.61c-2.78-.07-5.44.54-5.44,2.91a2.07,2.07,0,0,0,2.24,2.24,3.2,3.2,0,0,0,3.08-2.14,3,3,0,0,0,.12-.87Z" transform="translate(-323.84 -194.63)"/><path class="cls-5" d="M470.24,564.48v18.33c0,1.6.07,3.33.13,4.38h-3.52l-.16-2.46h-.06a5.62,5.62,0,0,1-5.09,2.82c-3.71,0-6.66-3.17-6.66-8,0-5.22,3.23-8.32,7-8.32a5,5,0,0,1,4.38,2h.07v-8.83Zm-3.93,13.63a6,6,0,0,0-.1-1,3.45,3.45,0,0,0-3.39-2.78c-2.53,0-3.94,2.24-3.94,5.15s1.41,4.93,3.91,4.93a3.48,3.48,0,0,0,3.39-2.79,4.6,4.6,0,0,0,.13-1.15Z" transform="translate(-323.84 -194.63)"/><path class="cls-5" d="M477.25,580.51c.1,2.81,2.3,4,4.8,4a11.66,11.66,0,0,0,4.32-.71l.58,2.72a14.58,14.58,0,0,1-5.44,1c-5.06,0-8-3.1-8-7.87,0-4.32,2.63-8.38,7.62-8.38s6.72,4.16,6.72,7.58a9.09,9.09,0,0,1-.13,1.67Zm6.85-2.76c0-1.43-.61-3.8-3.23-3.8-2.44,0-3.46,2.21-3.62,3.8Z" transform="translate(-323.84 -194.63)"/><path class="cls-5" d="M491,576.63c0-2.11,0-3.61-.13-5h3.42l.13,3h.13a4.65,4.65,0,0,1,4.26-3.33,3.76,3.76,0,0,1,.92.1v3.71a5.07,5.07,0,0,0-1.15-.13,3.47,3.47,0,0,0-3.52,3,7.25,7.25,0,0,0-.13,1.22v8.06H491Z" transform="translate(-323.84 -194.63)"/><path class="cls-4" d="M771.9,646.27H599c-10.66,0-19.3-9.07-19.3-20.26V529.59c0-11.19,8.64-20.26,19.3-20.26H771.9c10.65,0,19.29,9.07,19.29,20.26V626C791.19,637.2,782.55,646.27,771.9,646.27Z" transform="translate(-323.84 -194.63)"/><path class="cls-5" d="M648,586.55a13.66,13.66,0,0,1-5.57,1c-6.85,0-11-4.28-11-10.84,0-7.11,4.93-11.39,11.52-11.39a12.35,12.35,0,0,1,5.25,1l-.86,3.13a10.51,10.51,0,0,0-4.23-.83c-4.38,0-7.55,2.75-7.55,7.94,0,4.73,2.78,7.77,7.52,7.77a11.05,11.05,0,0,0,4.29-.8Z" transform="translate(-323.84 -194.63)"/><path class="cls-5" d="M665.48,579.26c0,5.73-4,8.29-8,8.29-4.41,0-7.8-3-7.8-8s3.35-8.25,8.06-8.25S665.48,574.52,665.48,579.26Zm-11.74.16c0,3,1.47,5.28,3.87,5.28,2.24,0,3.81-2.21,3.81-5.35,0-2.43-1.09-5.21-3.78-5.21S653.74,576.83,653.74,579.42Z" transform="translate(-323.84 -194.63)"/><path class="cls-5" d="M668.71,576.25c0-1.79,0-3.3-.12-4.64H672l.19,2.34h.1a5.61,5.61,0,0,1,5-2.69c2.72,0,5.54,1.76,5.54,6.69v9.24h-3.94v-8.8c0-2.23-.83-3.93-3-3.93a3.31,3.31,0,0,0-3.07,2.3,4,4,0,0,0-.16,1.28v9.15h-4Z" transform="translate(-323.84 -194.63)"/><path class="cls-5" d="M691.37,567.16v4.45h3.74v2.95h-3.74v6.87c0,1.89.51,2.88,2,2.88a5.61,5.61,0,0,0,1.53-.19l.07,3a8.8,8.8,0,0,1-2.85.38,4.54,4.54,0,0,1-3.39-1.28c-.84-.89-1.22-2.3-1.22-4.35v-7.32h-2.24v-2.95h2.24v-3.52Z" transform="translate(-323.84 -194.63)"/><path class="cls-5" d="M700.68,580.51c.1,2.81,2.31,4,4.8,4a11.62,11.62,0,0,0,4.32-.71l.58,2.72a14.58,14.58,0,0,1-5.44,1c-5.06,0-8-3.1-8-7.87,0-4.32,2.62-8.38,7.61-8.38s6.72,4.16,6.72,7.58a9.09,9.09,0,0,1-.13,1.67Zm6.85-2.76c0-1.43-.61-3.8-3.23-3.8-2.43,0-3.46,2.21-3.62,3.8Z" transform="translate(-323.84 -194.63)"/><path class="cls-5" d="M716.78,571.61l1.85,2.95c.52.83,1,1.6,1.41,2.39h.1c.45-.86.89-1.66,1.34-2.46l1.73-2.88h4.29l-5.22,7.49,5.31,8.09h-4.44l-1.92-3.1c-.52-.83-1-1.66-1.41-2.53h-.07c-.44.9-.89,1.67-1.4,2.53l-1.8,3.1H712.2l5.41-7.93-5.22-7.65Z" transform="translate(-323.84 -194.63)"/><path class="cls-5" d="M734.89,567.16v4.45h3.74v2.95h-3.74v6.87c0,1.89.51,2.88,2,2.88a5.61,5.61,0,0,0,1.53-.19l.07,3a8.8,8.8,0,0,1-2.85.38,4.54,4.54,0,0,1-3.39-1.28c-.84-.89-1.22-2.3-1.22-4.35v-7.32h-2.24v-2.95h2.24v-3.52Z" transform="translate(-323.84 -194.63)"/><path class="cls-6" d="M1005.9,646.27H833c-10.66,0-19.3-9.07-19.3-20.26V529.59c0-11.19,8.64-20.26,19.3-20.26H1005.9c10.65,0,19.29,9.07,19.29,20.26V626C1025.19,637.2,1016.55,646.27,1005.9,646.27Z" transform="translate(-323.84 -194.63)"/><path class="cls-5" d="M895.27,558.43h-8.13v6.33h9.09V568h-13V546.43h12.54v3.23h-8.6v5.57h8.13Z" transform="translate(-323.84 -194.63)"/><path class="cls-5" d="M901.7,552.41l2.53,7.9c.44,1.38.76,2.63,1,3.91h.1c.29-1.28.64-2.5,1-3.91l2.47-7.9h4.16L907.11,568h-3.88l-5.79-15.58Z" transform="translate(-323.84 -194.63)"/><path class="cls-5" d="M917.83,561.31c.09,2.81,2.3,4,4.8,4a11.7,11.7,0,0,0,4.32-.71l.57,2.72a14.54,14.54,0,0,1-5.44,1c-5.05,0-8-3.1-8-7.87,0-4.32,2.62-8.38,7.62-8.38s6.72,4.16,6.72,7.58a10.2,10.2,0,0,1-.13,1.67Zm6.84-2.76c0-1.44-.6-3.8-3.23-3.8-2.43,0-3.45,2.2-3.61,3.8Z" transform="translate(-323.84 -194.63)"/><path class="cls-5" d="M931.55,557.05c0-1.79,0-3.3-.12-4.64h3.45l.19,2.34h.1a5.61,5.61,0,0,1,5-2.69c2.72,0,5.53,1.76,5.53,6.69V568h-3.93v-8.8c0-2.24-.83-3.93-3-3.93a3.31,3.31,0,0,0-3.07,2.3,3.94,3.94,0,0,0-.16,1.28V568h-4Z" transform="translate(-323.84 -194.63)"/><path class="cls-5" d="M954.21,548v4.45H958v2.94h-3.74v6.88c0,1.89.51,2.88,2,2.88a5.61,5.61,0,0,0,1.53-.19l.07,3a8.8,8.8,0,0,1-2.85.38,4.54,4.54,0,0,1-3.39-1.28c-.84-.89-1.22-2.3-1.22-4.35v-7.33h-2.24v-2.94h2.24v-3.52Z" transform="translate(-323.84 -194.63)"/><path class="cls-5" d="M865.38,595.83c0-2.11,0-3.61-.13-5h3.42l.13,3h.13a4.65,4.65,0,0,1,4.26-3.33,4.35,4.35,0,0,1,.92.09v3.72a5.07,5.07,0,0,0-1.15-.13,3.47,3.47,0,0,0-3.52,3,7.25,7.25,0,0,0-.13,1.22v8.06h-3.93Z" transform="translate(-323.84 -194.63)"/><path class="cls-5" d="M879.27,599.71c.09,2.81,2.3,4,4.8,4a11.7,11.7,0,0,0,4.32-.71l.57,2.72a14.54,14.54,0,0,1-5.44,1c-5,0-8-3.1-8-7.87,0-4.32,2.63-8.38,7.62-8.38s6.72,4.16,6.72,7.58a10.2,10.2,0,0,1-.13,1.67Zm6.84-2.76c0-1.44-.6-3.8-3.23-3.8-2.43,0-3.45,2.2-3.61,3.8Z" transform="translate(-323.84 -194.63)"/><path class="cls-5" d="M904.45,605.91a11.26,11.26,0,0,1-4.42.8c-4.86,0-8-3.1-8-7.93,0-4.67,3.2-8.32,8.67-8.32a9.93,9.93,0,0,1,3.81.73l-.7,2.95a6.91,6.91,0,0,0-3-.61c-3,0-4.8,2.21-4.77,5.06,0,3.2,2.08,5,4.77,5a7.72,7.72,0,0,0,3.11-.61Z" transform="translate(-323.84 -194.63)"/><path class="cls-5" d="M921.89,598.46c0,5.73-4,8.28-8,8.28-4.42,0-7.81-3-7.81-8s3.36-8.25,8.07-8.25S921.89,593.72,921.89,598.46Zm-11.74.16c0,3,1.47,5.28,3.87,5.28,2.24,0,3.81-2.21,3.81-5.35,0-2.43-1.09-5.21-3.78-5.21S910.15,596,910.15,598.62Z" transform="translate(-323.84 -194.63)"/><path class="cls-5" d="M925.12,595.83c0-2.11,0-3.61-.13-5h3.43l.13,3h.12a4.66,4.66,0,0,1,4.26-3.33,4.45,4.45,0,0,1,.93.09v3.72a5.07,5.07,0,0,0-1.15-.13,3.46,3.46,0,0,0-3.52,3,6.34,6.34,0,0,0-.13,1.22v8.06h-3.94Z" transform="translate(-323.84 -194.63)"/><path class="cls-5" d="M950.59,583.67V602c0,1.6.07,3.33.13,4.38H947.2l-.16-2.46H947a5.61,5.61,0,0,1-5.09,2.81c-3.71,0-6.65-3.16-6.65-8,0-5.22,3.23-8.32,7-8.32a4.94,4.94,0,0,1,4.38,2h.07v-8.84Zm-3.93,13.64a5.14,5.14,0,0,0-.1-1,3.45,3.45,0,0,0-3.39-2.78c-2.53,0-3.94,2.24-3.94,5.15s1.41,4.93,3.91,4.93a3.47,3.47,0,0,0,3.39-2.79,4.18,4.18,0,0,0,.13-1.15Z" transform="translate(-323.84 -194.63)"/><path class="cls-5" d="M966.88,589.15h-.06L963,591.07l-.67-3,5-2.5h3.3v20.8h-3.81Z" transform="translate(-323.84 -194.63)"/><path class="cls-6" d="M1204.9,646.27H1067c-10.66,0-19.3-9.07-19.3-20.26V529.59c0-11.19,8.64-20.26,19.3-20.26H1204.9c10.65,0,19.29,9.07,19.29,20.26V626C1224.19,637.2,1215.55,646.27,1204.9,646.27Z" transform="translate(-323.84 -194.63)"/><path class="cls-5" d="M1112,558.43h-8.13v6.33h9.09V568h-13V546.43h12.55v3.23h-8.61v5.57H1112Z" transform="translate(-323.84 -194.63)"/><path class="cls-5" d="M1118.39,552.41l2.53,7.9c.45,1.38.76,2.63,1,3.91h.1c.29-1.28.64-2.5,1-3.91l2.47-7.9h4.16l-6,15.58h-3.88l-5.79-15.58Z" transform="translate(-323.84 -194.63)"/><path class="cls-5" d="M1134.52,561.31c.09,2.81,2.3,4,4.8,4a11.7,11.7,0,0,0,4.32-.71l.57,2.72a14.54,14.54,0,0,1-5.44,1c-5,0-8-3.1-8-7.87,0-4.32,2.63-8.38,7.62-8.38s6.72,4.16,6.72,7.58a10.2,10.2,0,0,1-.13,1.67Zm6.85-2.76c0-1.44-.61-3.8-3.24-3.8-2.43,0-3.45,2.2-3.61,3.8Z" transform="translate(-323.84 -194.63)"/><path class="cls-5" d="M1148.24,557.05c0-1.79,0-3.3-.12-4.64h3.45l.19,2.34h.1a5.61,5.61,0,0,1,5-2.69c2.72,0,5.54,1.76,5.54,6.69V568h-3.94v-8.8c0-2.24-.83-3.93-3-3.93a3.32,3.32,0,0,0-3.08,2.3,3.94,3.94,0,0,0-.16,1.28V568h-4Z" transform="translate(-323.84 -194.63)"/><path class="cls-5" d="M1170.9,548v4.45h3.74v2.94h-3.74v6.88c0,1.89.51,2.88,2,2.88a5.61,5.61,0,0,0,1.53-.19l.07,3a8.8,8.8,0,0,1-2.85.38,4.54,4.54,0,0,1-3.39-1.28c-.83-.89-1.22-2.3-1.22-4.35v-7.33h-2.24v-2.94h2.24v-3.52Z" transform="translate(-323.84 -194.63)"/><path class="cls-5" d="M1082.07,595.83c0-2.11,0-3.61-.13-5h3.43l.12,3h.13a4.65,4.65,0,0,1,4.26-3.33,4.45,4.45,0,0,1,.93.09v3.72a5.17,5.17,0,0,0-1.16-.13,3.48,3.48,0,0,0-3.52,3,7.3,7.3,0,0,0-.12,1.22v8.06h-3.94Z" transform="translate(-323.84 -194.63)"/><path class="cls-5" d="M1096,599.71c.09,2.81,2.3,4,4.8,4a11.7,11.7,0,0,0,4.32-.71l.57,2.72a14.54,14.54,0,0,1-5.44,1c-5,0-8-3.1-8-7.87,0-4.32,2.63-8.38,7.62-8.38s6.72,4.16,6.72,7.58a10.2,10.2,0,0,1-.13,1.67Zm6.85-2.76c0-1.44-.61-3.8-3.24-3.8-2.43,0-3.45,2.2-3.61,3.8Z" transform="translate(-323.84 -194.63)"/><path class="cls-5" d="M1121.14,605.91a11.25,11.25,0,0,1-4.41.8c-4.87,0-8-3.1-8-7.93,0-4.67,3.2-8.32,8.68-8.32a9.91,9.91,0,0,1,3.8.73l-.7,2.95a6.91,6.91,0,0,0-3-.61c-3,0-4.8,2.21-4.76,5.06,0,3.2,2.08,5,4.76,5a7.72,7.72,0,0,0,3.11-.61Z" transform="translate(-323.84 -194.63)"/><path class="cls-5" d="M1138.58,598.46c0,5.73-4,8.28-8,8.28-4.41,0-7.81-3-7.81-8s3.36-8.25,8.07-8.25S1138.58,593.72,1138.58,598.46Zm-11.74.16c0,3,1.47,5.28,3.87,5.28,2.24,0,3.81-2.21,3.81-5.35,0-2.43-1.09-5.21-3.78-5.21S1126.84,596,1126.84,598.62Z" transform="translate(-323.84 -194.63)"/><path class="cls-5" d="M1141.81,595.83c0-2.11,0-3.61-.12-5h3.42l.13,3h.13a4.64,4.64,0,0,1,4.25-3.33,4.45,4.45,0,0,1,.93.09v3.72a5.07,5.07,0,0,0-1.15-.13,3.46,3.46,0,0,0-3.52,3,6.34,6.34,0,0,0-.13,1.22v8.06h-3.94Z" transform="translate(-323.84 -194.63)"/><path class="cls-5" d="M1167.28,583.67V602c0,1.6.07,3.33.13,4.38h-3.52l-.16-2.46h-.06a5.61,5.61,0,0,1-5.09,2.81c-3.71,0-6.65-3.16-6.65-8,0-5.22,3.23-8.32,7-8.32a4.94,4.94,0,0,1,4.38,2h.07v-8.84Zm-3.93,13.64a5.14,5.14,0,0,0-.1-1,3.45,3.45,0,0,0-3.39-2.78c-2.53,0-3.93,2.24-3.93,5.15s1.4,4.93,3.9,4.93a3.47,3.47,0,0,0,3.39-2.79,4.18,4.18,0,0,0,.13-1.15Z" transform="translate(-323.84 -194.63)"/><path class="cls-5" d="M1177.4,606.39V604l2.46-2.27c4.9-4.54,7.2-7,7.23-9.79,0-1.85-1-3.49-3.71-3.49a7.6,7.6,0,0,0-4.45,1.73l-1.15-2.78a10.27,10.27,0,0,1,6.4-2.15c4.61,0,6.85,2.92,6.85,6.31,0,3.64-2.63,6.59-6.24,10l-1.83,1.57v.06h8.55v3.26Z" transform="translate(-323.84 -194.63)"/><path class="cls-6" d="M1501.9,646.27H1266c-10.66,0-19.3-9.07-19.3-20.26V529.59c0-11.19,8.64-20.26,19.3-20.26H1501.9c10.65,0,19.29,9.07,19.29,20.26V626C1521.19,637.2,1512.55,646.27,1501.9,646.27Z" transform="translate(-323.84 -194.63)"/><path class="cls-5" d="M1359.32,558.43h-8.13v6.33h9.09V568h-13V546.43h12.55v3.23h-8.61v5.57h8.13Z" transform="translate(-323.84 -194.63)"/><path class="cls-5" d="M1365.75,552.41l2.53,7.9a39.52,39.52,0,0,1,1,3.91h.1c.29-1.28.64-2.5,1.06-3.91l2.46-7.9h4.16L1371.16,568h-3.87l-5.8-15.58Z" transform="translate(-323.84 -194.63)"/><path class="cls-5" d="M1381.88,561.31c.1,2.81,2.3,4,4.8,4a11.66,11.66,0,0,0,4.32-.71l.58,2.72a14.62,14.62,0,0,1-5.44,1c-5.06,0-8-3.1-8-7.87,0-4.32,2.63-8.38,7.62-8.38s6.72,4.16,6.72,7.58a10.2,10.2,0,0,1-.13,1.67Zm6.85-2.76c0-1.44-.61-3.8-3.24-3.8-2.43,0-3.45,2.2-3.61,3.8Z" transform="translate(-323.84 -194.63)"/><path class="cls-5" d="M1395.61,557.05c0-1.79,0-3.3-.13-4.64h3.45l.2,2.34h.09a5.62,5.62,0,0,1,5-2.69c2.72,0,5.54,1.76,5.54,6.69V568h-3.94v-8.8c0-2.24-.83-3.93-3-3.93a3.29,3.29,0,0,0-3.07,2.3,3.94,3.94,0,0,0-.16,1.28V568h-4Z" transform="translate(-323.84 -194.63)"/><path class="cls-5" d="M1418.26,548v4.45H1422v2.94h-3.75v6.88c0,1.89.51,2.88,2,2.88a5.76,5.76,0,0,0,1.54-.19l.06,3a8.8,8.8,0,0,1-2.85.38,4.56,4.56,0,0,1-3.39-1.28c-.83-.89-1.22-2.3-1.22-4.35v-7.33h-2.24v-2.94h2.24v-3.52Z" transform="translate(-323.84 -194.63)"/><path class="cls-5" d="M1329.43,595.83c0-2.11,0-3.61-.13-5h3.43l.13,3h.12a4.66,4.66,0,0,1,4.26-3.33,4.45,4.45,0,0,1,.93.09v3.72a5.14,5.14,0,0,0-1.15-.13,3.46,3.46,0,0,0-3.52,3,6.34,6.34,0,0,0-.13,1.22v8.06h-3.94Z" transform="translate(-323.84 -194.63)"/><path class="cls-5" d="M1343.32,599.71c.1,2.81,2.3,4,4.8,4a11.7,11.7,0,0,0,4.32-.71l.57,2.72a14.48,14.48,0,0,1-5.43,1c-5.06,0-8-3.1-8-7.87,0-4.32,2.63-8.38,7.62-8.38s6.72,4.16,6.72,7.58a9.18,9.18,0,0,1-.13,1.67Zm6.85-2.76c0-1.44-.61-3.8-3.23-3.8-2.44,0-3.46,2.2-3.62,3.8Z" transform="translate(-323.84 -194.63)"/><path class="cls-5" d="M1368.5,605.91a11.25,11.25,0,0,1-4.41.8c-4.87,0-8-3.1-8-7.93,0-4.67,3.2-8.32,8.67-8.32a9.87,9.87,0,0,1,3.8.73l-.7,2.95a6.9,6.9,0,0,0-3-.61c-3,0-4.8,2.21-4.77,5.06,0,3.2,2.08,5,4.77,5a7.7,7.7,0,0,0,3.1-.61Z" transform="translate(-323.84 -194.63)"/><path class="cls-5" d="M1385.94,598.46c0,5.73-4,8.28-8,8.28-4.41,0-7.8-3-7.8-8s3.35-8.25,8.06-8.25S1385.94,593.72,1385.94,598.46Zm-11.74.16c0,3,1.47,5.28,3.87,5.28,2.24,0,3.81-2.21,3.81-5.35,0-2.43-1.09-5.21-3.78-5.21S1374.2,596,1374.2,598.62Z" transform="translate(-323.84 -194.63)"/><path class="cls-5" d="M1389.18,595.83c0-2.11,0-3.61-.13-5h3.42l.13,3h.13a4.64,4.64,0,0,1,4.25-3.33,4.38,4.38,0,0,1,.93.09v3.72a5.07,5.07,0,0,0-1.15-.13,3.46,3.46,0,0,0-3.52,3,6.34,6.34,0,0,0-.13,1.22v8.06h-3.93Z" transform="translate(-323.84 -194.63)"/><path class="cls-5" d="M1414.65,583.67V602c0,1.6.06,3.33.12,4.38h-3.52l-.16-2.46H1411a5.6,5.6,0,0,1-5.09,2.81c-3.71,0-6.65-3.16-6.65-8,0-5.22,3.23-8.32,7-8.32a5,5,0,0,1,4.39,2h.06v-8.84Zm-3.94,13.64a6,6,0,0,0-.09-1,3.47,3.47,0,0,0-3.4-2.78c-2.52,0-3.93,2.24-3.93,5.15s1.41,4.93,3.9,4.93a3.47,3.47,0,0,0,3.39-2.79,4.18,4.18,0,0,0,.13-1.15Z" transform="translate(-323.84 -194.63)"/><path class="cls-5" d="M1425.56,602.33a10.28,10.28,0,0,0,4.73,1.28c3,0,4.23-1.7,4.2-3.33,0-2.46-2.31-3.52-4.71-3.52H1428v-2.88h1.76c1.82,0,4.13-.83,4.13-2.91,0-1.41-1.06-2.59-3.33-2.59a8.45,8.45,0,0,0-4.26,1.31l-.89-2.85a11.21,11.21,0,0,1,6-1.6c4.29,0,6.5,2.37,6.5,5.09,0,2.18-1.28,4-3.84,4.86v.07a5.26,5.26,0,0,1,4.57,5.18c0,3.52-2.94,6.3-8.09,6.3a11.44,11.44,0,0,1-5.83-1.43Z" transform="translate(-323.84 -194.63)"/><path class="cls-6" d="M1698.9,646.27H1563c-10.66,0-19.3-9.07-19.3-20.26V529.59c0-11.19,8.64-20.26,19.3-20.26H1698.9c10.65,0,19.29,9.07,19.29,20.26V626C1718.19,637.2,1709.55,646.27,1698.9,646.27Z" transform="translate(-323.84 -194.63)"/><path class="cls-5" d="M1607,558.43h-8.13v6.33h9.09V568h-13V546.43h12.55v3.23h-8.61v5.57H1607Z" transform="translate(-323.84 -194.63)"/><path class="cls-5" d="M1613.39,552.41l2.53,7.9c.45,1.38.76,2.63,1,3.91h.1c.29-1.28.64-2.5,1-3.91l2.47-7.9h4.16l-6,15.58h-3.88l-5.79-15.58Z" transform="translate(-323.84 -194.63)"/><path class="cls-5" d="M1629.52,561.31c.09,2.81,2.3,4,4.8,4a11.7,11.7,0,0,0,4.32-.71l.57,2.72a14.54,14.54,0,0,1-5.44,1c-5,0-8-3.1-8-7.87,0-4.32,2.63-8.38,7.62-8.38s6.72,4.16,6.72,7.58a10.2,10.2,0,0,1-.13,1.67Zm6.85-2.76c0-1.44-.61-3.8-3.24-3.8-2.43,0-3.45,2.2-3.61,3.8Z" transform="translate(-323.84 -194.63)"/><path class="cls-5" d="M1643.24,557.05c0-1.79,0-3.3-.12-4.64h3.45l.19,2.34h.1a5.61,5.61,0,0,1,5-2.69c2.72,0,5.54,1.76,5.54,6.69V568h-3.94v-8.8c0-2.24-.83-3.93-3-3.93a3.32,3.32,0,0,0-3.08,2.3,3.94,3.94,0,0,0-.16,1.28V568h-4Z" transform="translate(-323.84 -194.63)"/><path class="cls-5" d="M1665.9,548v4.45h3.74v2.94h-3.74v6.88c0,1.89.51,2.88,2,2.88a5.61,5.61,0,0,0,1.53-.19l.07,3a8.8,8.8,0,0,1-2.85.38,4.54,4.54,0,0,1-3.39-1.28c-.83-.89-1.22-2.3-1.22-4.35v-7.33h-2.24v-2.94h2.24v-3.52Z" transform="translate(-323.84 -194.63)"/><path class="cls-5" d="M1577.07,595.83c0-2.11,0-3.61-.13-5h3.43l.12,3h.13a4.65,4.65,0,0,1,4.26-3.33,4.45,4.45,0,0,1,.93.09v3.72a5.17,5.17,0,0,0-1.16-.13,3.48,3.48,0,0,0-3.52,3,7.3,7.3,0,0,0-.12,1.22v8.06h-3.94Z" transform="translate(-323.84 -194.63)"/><path class="cls-5" d="M1591,599.71c.09,2.81,2.3,4,4.8,4a11.7,11.7,0,0,0,4.32-.71l.57,2.72a14.54,14.54,0,0,1-5.44,1c-5,0-8-3.1-8-7.87,0-4.32,2.63-8.38,7.62-8.38s6.72,4.16,6.72,7.58a10.2,10.2,0,0,1-.13,1.67Zm6.85-2.76c0-1.44-.61-3.8-3.24-3.8-2.43,0-3.45,2.2-3.61,3.8Z" transform="translate(-323.84 -194.63)"/><path class="cls-5" d="M1616.14,605.91a11.25,11.25,0,0,1-4.41.8c-4.87,0-8-3.1-8-7.93,0-4.67,3.2-8.32,8.68-8.32a9.91,9.91,0,0,1,3.8.73l-.7,2.95a6.91,6.91,0,0,0-3-.61c-3,0-4.8,2.21-4.76,5.06,0,3.2,2.08,5,4.76,5a7.72,7.72,0,0,0,3.11-.61Z" transform="translate(-323.84 -194.63)"/><path class="cls-5" d="M1633.58,598.46c0,5.73-4,8.28-8,8.28-4.41,0-7.81-3-7.81-8s3.36-8.25,8.07-8.25S1633.58,593.72,1633.58,598.46Zm-11.74.16c0,3,1.47,5.28,3.87,5.28,2.24,0,3.81-2.21,3.81-5.35,0-2.43-1.09-5.21-3.78-5.21S1621.84,596,1621.84,598.62Z" transform="translate(-323.84 -194.63)"/><path class="cls-5" d="M1636.81,595.83c0-2.11,0-3.61-.12-5h3.42l.13,3h.13a4.64,4.64,0,0,1,4.25-3.33,4.45,4.45,0,0,1,.93.09v3.72a5.07,5.07,0,0,0-1.15-.13,3.46,3.46,0,0,0-3.52,3,6.34,6.34,0,0,0-.13,1.22v8.06h-3.94Z" transform="translate(-323.84 -194.63)"/><path class="cls-5" d="M1662.28,583.67V602c0,1.6.07,3.33.13,4.38h-3.52l-.16-2.46h-.06a5.61,5.61,0,0,1-5.09,2.81c-3.71,0-6.65-3.16-6.65-8,0-5.22,3.23-8.32,7-8.32a4.94,4.94,0,0,1,4.38,2h.07v-8.84Zm-3.93,13.64a5.14,5.14,0,0,0-.1-1,3.45,3.45,0,0,0-3.39-2.78c-2.53,0-3.93,2.24-3.93,5.15s1.4,4.93,3.9,4.93a3.47,3.47,0,0,0,3.39-2.79,4.18,4.18,0,0,0,.13-1.15Z" transform="translate(-323.84 -194.63)"/><path class="cls-5" d="M1681.07,606.39v-5.28h-9.41v-2.56l8.48-13h4.64v12.55h2.69v3h-2.69v5.28Zm0-8.25v-5.67c0-1.18,0-2.39.13-3.61h-.13c-.64,1.31-1.19,2.37-1.83,3.52l-3.8,5.69,0,.07Z" transform="translate(-323.84 -194.63)"/><path class="cls-7" d="M972.93,712.48a13.66,13.66,0,0,1-5.57,1c-6.85,0-11-4.29-11-10.85,0-7.1,4.93-11.39,11.52-11.39a12.35,12.35,0,0,1,5.25,1l-.87,3.14a10.4,10.4,0,0,0-4.22-.84c-4.38,0-7.55,2.75-7.55,7.94,0,4.73,2.78,7.77,7.52,7.77a11.05,11.05,0,0,0,4.29-.8Z" transform="translate(-323.84 -194.63)"/><path class="cls-7" d="M981.05,694.85h-6.14v-3.3H991.2v3.3H985v18.27h-3.94Z" transform="translate(-323.84 -194.63)"/><path class="cls-7" d="M993.73,691.55h12.44v3.23h-8.51v6h7.94V704h-7.94v9.15h-3.93Z" transform="translate(-323.84 -194.63)"/><path class="cls-7" d="M1016.48,702.72c0-2.05-.07-3.71-.13-5.18h3.45l.2,2.4h.06a6.05,6.05,0,0,1,5.34-2.76c3.59,0,6.56,3.07,6.56,7.94,0,5.63-3.55,8.35-7.1,8.35a5.11,5.11,0,0,1-4.38-2.08h-.07v8.06h-3.93Zm3.93,3.87a3.92,3.92,0,0,0,.13,1.09,3.55,3.55,0,0,0,3.46,2.75c2.49,0,4-2.08,4-5.15,0-2.75-1.34-5-3.87-5a3.67,3.67,0,0,0-3.52,2.91,3.79,3.79,0,0,0-.16,1Z" transform="translate(-323.84 -194.63)"/><path class="cls-7" d="M1044,713.12l-.25-1.73h-.1a5.77,5.77,0,0,1-4.6,2.08,4.63,4.63,0,0,1-4.9-4.64c0-3.94,3.49-5.92,9.25-5.89v-.25c0-1-.42-2.72-3.17-2.72a8.24,8.24,0,0,0-4.19,1.15l-.77-2.56a11.26,11.26,0,0,1,5.63-1.38c5,0,6.43,3.17,6.43,6.56v5.63a25,25,0,0,0,.23,3.75Zm-.51-7.62c-2.78-.06-5.44.55-5.44,2.91a2.07,2.07,0,0,0,2.24,2.24,3.2,3.2,0,0,0,3.08-2.14,3,3,0,0,0,.12-.86Z" transform="translate(-323.84 -194.63)"/><path class="cls-7" d="M1062.91,712.64a11.45,11.45,0,0,1-4.42.8c-4.86,0-8-3.11-8-7.94,0-4.67,3.2-8.32,8.67-8.32a9.77,9.77,0,0,1,3.81.74l-.7,2.94a7.07,7.07,0,0,0-3-.61c-3,0-4.8,2.21-4.77,5.06,0,3.2,2.08,5,4.77,5a7.74,7.74,0,0,0,3.11-.6Z" transform="translate(-323.84 -194.63)"/><path class="cls-7" d="M1069.76,704.38h.06c.38-.61.83-1.28,1.25-1.82l3.77-5h4.74l-5.76,6.36,6.59,9.22h-4.83l-4.48-6.88-1.34,1.57v5.31h-3.94V690.4h3.94Z" transform="translate(-323.84 -194.63)"/><path class="cls-7" d="M1084.67,706.43c.09,2.82,2.3,4,4.8,4a11.71,11.71,0,0,0,4.32-.7l.57,2.72a14.74,14.74,0,0,1-5.44,1c-5.05,0-8-3.11-8-7.87,0-4.32,2.63-8.39,7.62-8.39s6.72,4.16,6.72,7.59a10.05,10.05,0,0,1-.13,1.66Zm6.85-2.75c0-1.44-.61-3.81-3.24-3.81-2.43,0-3.45,2.21-3.61,3.81Z" transform="translate(-323.84 -194.63)"/><path class="cls-7" d="M1102.91,693.09v4.45h3.74v2.94h-3.74v6.88c0,1.89.51,2.88,2,2.88a6.07,6.07,0,0,0,1.54-.19l.06,3a8.41,8.41,0,0,1-2.84.39,4.58,4.58,0,0,1-3.4-1.28c-.83-.9-1.21-2.31-1.21-4.35v-7.33h-2.24v-2.94h2.24V694Z" transform="translate(-323.84 -194.63)"/><line class="cls-8" x1="1403.73" y1="298.32" x2="768.27" y2="108.39"/><line class="cls-8" x1="11.71" y1="298.09" x2="686.41" y2="108.09"/><path class="cls-9" d="M960.84,211.19a10.28,10.28,0,0,1-4.18.72c-5.14,0-8.26-3.22-8.26-8.14,0-5.33,3.7-8.54,8.64-8.54A9.33,9.33,0,0,1,961,196l-.65,2.35a7.79,7.79,0,0,0-3.17-.62c-3.29,0-5.66,2.06-5.66,5.95,0,3.55,2.09,5.83,5.64,5.83a8.29,8.29,0,0,0,3.22-.6Z" transform="translate(-323.84 -194.63)"/><path class="cls-9" d="M966.93,198h-4.61v-2.47h12.22V198h-4.66v13.71h-3Z" transform="translate(-323.84 -194.63)"/><path class="cls-9" d="M976.43,195.49h9.34v2.43h-6.38v4.46h6v2.42h-6v6.87h-3Z" transform="translate(-323.84 -194.63)"/><path class="cls-9" d="M1004.27,194.63v13.75c0,1.2.05,2.5.1,3.29h-2.64l-.12-1.85h-.05a4.19,4.19,0,0,1-3.81,2.11c-2.79,0-5-2.37-5-6,0-3.92,2.43-6.24,5.24-6.24a3.71,3.71,0,0,1,3.28,1.53h.05v-6.62Zm-2.95,10.22a4,4,0,0,0-.07-.77,2.58,2.58,0,0,0-2.54-2.08c-1.9,0-3,1.68-3,3.86s1.06,3.7,2.93,3.7a2.62,2.62,0,0,0,2.55-2.09,3.42,3.42,0,0,0,.09-.87Z" transform="translate(-323.84 -194.63)"/><path class="cls-9" d="M1014,211.67l-.19-1.3h-.08a4.31,4.31,0,0,1-3.45,1.56,3.48,3.48,0,0,1-3.68-3.48c0-2.95,2.62-4.44,6.94-4.41v-.2c0-.76-.31-2-2.37-2a6.13,6.13,0,0,0-3.15.87l-.58-1.92a8.43,8.43,0,0,1,4.23-1c3.74,0,4.82,2.37,4.82,4.92v4.22a18.71,18.71,0,0,0,.17,2.81Zm-.39-5.71c-2.08-.05-4.08.4-4.08,2.18a1.55,1.55,0,0,0,1.68,1.68,2.4,2.4,0,0,0,2.31-1.61,2.12,2.12,0,0,0,.09-.65Z" transform="translate(-323.84 -194.63)"/><path class="cls-9" d="M1022.87,196.64V200h2.81v2.21h-2.81v5.16c0,1.41.39,2.16,1.52,2.16a4.05,4.05,0,0,0,1.15-.15l0,2.26a6.47,6.47,0,0,1-2.14.29,3.4,3.4,0,0,1-2.54-1,4.63,4.63,0,0,1-.92-3.27v-5.49h-1.68V200H1020v-2.64Z" transform="translate(-323.84 -194.63)"/><path class="cls-9" d="M1034.49,211.67l-.19-1.3h-.07a4.33,4.33,0,0,1-3.46,1.56,3.47,3.47,0,0,1-3.67-3.48c0-2.95,2.61-4.44,6.93-4.41v-.2c0-.76-.31-2-2.37-2a6.13,6.13,0,0,0-3.15.87l-.57-1.92a8.36,8.36,0,0,1,4.22-1c3.75,0,4.83,2.37,4.83,4.92v4.22a18.86,18.86,0,0,0,.16,2.81Zm-.38-5.71c-2.09-.05-4.08.4-4.08,2.18a1.55,1.55,0,0,0,1.67,1.68,2.4,2.4,0,0,0,2.31-1.61,2.14,2.14,0,0,0,.1-.65Z" transform="translate(-323.84 -194.63)"/><path class="cls-9" d="M1044.93,209a6.66,6.66,0,0,0,3,.84c1.29,0,1.87-.53,1.87-1.3s-.48-1.2-1.92-1.7c-2.28-.8-3.24-2-3.22-3.41,0-2.07,1.71-3.67,4.42-3.67a6.9,6.9,0,0,1,3.1.69l-.58,2.09a5.21,5.21,0,0,0-2.47-.67c-1.06,0-1.63.5-1.63,1.22s.55,1.11,2,1.63c2.11.77,3.09,1.85,3.12,3.58,0,2.11-1.66,3.65-4.75,3.65a7.58,7.58,0,0,1-3.56-.82Z" transform="translate(-323.84 -194.63)"/><path class="cls-9" d="M1058.46,196.64V200h2.81v2.21h-2.81v5.16c0,1.41.39,2.16,1.52,2.16a4,4,0,0,0,1.15-.15l0,2.26a6.47,6.47,0,0,1-2.14.29,3.4,3.4,0,0,1-2.54-1,4.63,4.63,0,0,1-.92-3.27v-5.49h-1.68V200h1.68v-2.64Z" transform="translate(-323.84 -194.63)"/><path class="cls-9" d="M1063.5,203.75c0-1.59,0-2.71-.09-3.77H1066l.09,2.23h.1a3.48,3.48,0,0,1,3.19-2.49,3,3,0,0,1,.7.07v2.78a4.08,4.08,0,0,0-.87-.09,2.61,2.61,0,0,0-2.64,2.23,4.83,4.83,0,0,0-.09.91v6h-3Z" transform="translate(-323.84 -194.63)"/><path class="cls-9" d="M1073.92,206.65c.07,2.11,1.73,3,3.6,3a8.91,8.91,0,0,0,3.24-.53l.43,2a10.93,10.93,0,0,1-4.08.72c-3.79,0-6-2.33-6-5.91,0-3.24,2-6.28,5.71-6.28s5,3.12,5,5.68a6.9,6.9,0,0,1-.1,1.25Zm5.14-2.06c0-1.08-.46-2.86-2.43-2.86a2.89,2.89,0,0,0-2.71,2.86Z" transform="translate(-323.84 -194.63)"/><path class="cls-9" d="M1090.79,211.67l-.19-1.3h-.07a4.33,4.33,0,0,1-3.46,1.56,3.47,3.47,0,0,1-3.67-3.48c0-2.95,2.62-4.44,6.94-4.41v-.2c0-.76-.32-2-2.38-2a6.12,6.12,0,0,0-3.14.87l-.58-1.92a8.39,8.39,0,0,1,4.22-1c3.75,0,4.83,2.37,4.83,4.92v4.22a18.71,18.71,0,0,0,.17,2.81Zm-.38-5.71c-2.09-.05-4.08.4-4.08,2.18a1.55,1.55,0,0,0,1.68,1.68,2.39,2.39,0,0,0,2.3-1.61,2.14,2.14,0,0,0,.1-.65Z" transform="translate(-323.84 -194.63)"/><path class="cls-9" d="M1096.41,203.46c0-1.34,0-2.47-.1-3.48h2.55l.12,1.73h.07a4,4,0,0,1,3.6-2,3.38,3.38,0,0,1,3.24,2.16h0a4.41,4.41,0,0,1,1.44-1.47,3.94,3.94,0,0,1,2.35-.69c1.94,0,3.91,1.32,3.91,5.06v6.89h-2.88v-6.46c0-1.94-.67-3.09-2.09-3.09a2.24,2.24,0,0,0-2.06,1.56,4.19,4.19,0,0,0-.15,1v7h-2.88V204.9c0-1.63-.64-2.78-2-2.78a2.29,2.29,0,0,0-2.11,1.68,2.49,2.49,0,0,0-.17,1v6.91h-2.88Z" transform="translate(-323.84 -194.63)"/></svg>
\ No newline at end of file
diff --git a/docs/modules/how-barectf-works/images/ctf-trace.svg b/docs/modules/how-barectf-works/images/ctf-trace.svg
new file mode 100644 (file)
index 0000000..0650dcb
--- /dev/null
@@ -0,0 +1 @@
+<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576.19 494.24"><defs><style>.cls-1{fill:#f2f2f3;}.cls-15,.cls-2,.cls-4{fill:none;}.cls-15,.cls-2{stroke:#231f20;}.cls-12,.cls-15,.cls-2{stroke-miterlimit:10;}.cls-2{stroke-width:3px;stroke-dasharray:11.97 11.97;}.cls-3{opacity:0.75;}.cls-5{fill:#ffe2bd;}.cls-6{fill:#f8a794;}.cls-7{opacity:0.7;}.cls-8{fill:#f47859;}.cls-9{fill:#ffe9cc;}.cls-10{opacity:0.85;}.cls-11{fill:#231f20;}.cls-12{fill:#d1edf3;stroke:#89cbd3;stroke-width:1.81px;}.cls-13{fill:#c93f63;}.cls-14{opacity:0.5;}.cls-15{stroke-width:2px;}</style></defs><title>ctf-trace</title><rect class="cls-1" x="1.5" y="87.59" width="573.19" height="362.18" rx="29.85"/><rect class="cls-2" x="1.5" y="87.59" width="573.19" height="362.18" rx="29.85"/><g class="cls-3"><path class="cls-4" d="M685,325.57" transform="translate(-240.98 -216.06)"/></g><g class="cls-3"><path class="cls-4" d="M385.3,325.57" transform="translate(-240.98 -216.06)"/></g><g id="surface1"><path class="cls-5" d="M372.5,375.86h67.21V363.05a6.42,6.42,0,0,0-6.4-6.4H334.09v32a6.4,6.4,0,0,1-6.4,6.4H292.48V516.69a6.42,6.42,0,0,0,6.4,6.4h32V414.26Z" transform="translate(-240.98 -216.06)"/><path class="cls-6" d="M334.09,388.66v-32l-41.61,38.41h35.2A6.4,6.4,0,0,0,334.09,388.66Z" transform="translate(-240.98 -216.06)"/><g class="cls-7"><path class="cls-8" d="M323.64,418.94c0,4.23-1.66,6.88-4.79,6.88s-4.65-2.75-4.67-6.76,1.73-6.83,4.81-6.83S323.64,415.06,323.64,418.94Zm-7,.12c0,3.2.87,4.85,2.25,4.85s2.22-1.77,2.22-4.93-.73-4.85-2.22-4.85S316.66,415.77,316.68,419.06Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M329.1,414.7h-.05l-2.4,1.21-.43-1.88,3.2-1.58h2.08v13.14h-2.4Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M339.93,414.7h0l-2.4,1.21-.43-1.88,3.2-1.58h2.08v13.14h-2.41Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M356.15,418.94c0,4.23-1.66,6.88-4.8,6.88s-4.65-2.75-4.67-6.76,1.74-6.83,4.82-6.83S356.15,415.06,356.15,418.94Zm-7,.12c0,3.2.87,4.85,2.24,4.85s2.23-1.77,2.23-4.93-.73-4.85-2.23-4.85C350.1,414.13,349.17,415.77,349.19,419.06Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M361.6,414.7h0l-2.4,1.21-.43-1.88,3.2-1.58H364v13.14H361.6Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M377.82,418.94c0,4.23-1.66,6.88-4.79,6.88s-4.65-2.75-4.67-6.76,1.73-6.83,4.81-6.83S377.82,415.06,377.82,418.94Zm-7,.12c0,3.2.87,4.85,2.25,4.85s2.22-1.77,2.22-4.93-.73-4.85-2.22-4.85S370.84,415.77,370.86,419.06Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M388.65,418.94c0,4.23-1.65,6.88-4.79,6.88s-4.65-2.75-4.67-6.76,1.74-6.83,4.81-6.83S388.65,415.06,388.65,418.94Zm-6.95.12c0,3.2.87,4.85,2.24,4.85s2.23-1.77,2.23-4.93-.73-4.85-2.23-4.85C382.61,414.13,381.68,415.77,381.7,419.06Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M399.49,418.94c0,4.23-1.66,6.88-4.79,6.88s-4.65-2.75-4.67-6.76,1.74-6.83,4.81-6.83S399.49,415.06,399.49,418.94Zm-6.95.12c0,3.2.86,4.85,2.24,4.85S397,422.14,397,419s-.72-4.85-2.22-4.85C393.45,414.13,392.51,415.77,392.54,419.06Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M405,414.7h0l-2.41,1.21-.42-1.88,3.19-1.58h2.08v13.14H405Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M415.78,414.7h0l-2.4,1.21-.43-1.88,3.2-1.58h2.08v13.14h-2.41Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M318.26,431h0l-2.41,1.21-.42-1.88,3.19-1.58h2.09v13.14h-2.41Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M334.47,435.2c0,4.23-1.66,6.88-4.79,6.88s-4.65-2.75-4.67-6.76,1.74-6.83,4.81-6.83S334.47,431.32,334.47,435.2Zm-7,.12c0,3.2.87,4.86,2.24,4.86s2.23-1.78,2.23-4.94-.73-4.85-2.23-4.85C328.43,430.39,327.5,432,327.52,435.32Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M345.31,435.2c0,4.23-1.66,6.88-4.79,6.88s-4.65-2.75-4.67-6.76,1.74-6.83,4.81-6.83S345.31,431.32,345.31,435.2Zm-7,.12c0,3.2.87,4.86,2.25,4.86s2.22-1.78,2.22-4.94-.72-4.85-2.22-4.85C339.26,430.39,338.33,432,338.35,435.32Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M350.77,431h0l-2.41,1.21-.42-1.88,3.19-1.58h2.08v13.14h-2.4Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M367,435.2c0,4.23-1.66,6.88-4.79,6.88s-4.65-2.75-4.67-6.76,1.74-6.83,4.81-6.83S367,431.32,367,435.2Zm-7,.12c0,3.2.87,4.86,2.24,4.86s2.22-1.78,2.22-4.94-.72-4.85-2.22-4.85C360.94,430.39,360,432,360,435.32Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M372.44,431h0L370,432.17l-.42-1.88,3.19-1.58h2.09v13.14h-2.41Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M388.65,435.2c0,4.23-1.65,6.88-4.79,6.88s-4.65-2.75-4.67-6.76,1.74-6.83,4.81-6.83S388.65,431.32,388.65,435.2Zm-6.95.12c0,3.2.87,4.86,2.24,4.86s2.23-1.78,2.23-4.94-.73-4.85-2.23-4.85C382.61,430.39,381.68,432,381.7,435.32Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M394.11,431h0l-2.4,1.21-.43-1.88,3.2-1.58h2.08v13.14h-2.41Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M410.33,435.2c0,4.23-1.66,6.88-4.8,6.88s-4.64-2.75-4.67-6.76,1.74-6.83,4.82-6.83S410.33,431.32,410.33,435.2Zm-7,.12c0,3.2.87,4.86,2.25,4.86s2.22-1.78,2.22-4.94-.73-4.85-2.22-4.85S403.35,432,403.37,435.32Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M415.78,431h0l-2.4,1.21-.43-1.88,3.2-1.58h2.08v13.14h-2.41Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M323.64,451.46c0,4.23-1.66,6.88-4.79,6.88s-4.65-2.75-4.67-6.76,1.73-6.83,4.81-6.83S323.64,447.58,323.64,451.46Zm-7,.12c0,3.2.87,4.86,2.25,4.86s2.22-1.78,2.22-4.94-.73-4.85-2.22-4.85S316.66,448.29,316.68,451.58Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M334.47,451.46c0,4.23-1.66,6.88-4.79,6.88s-4.65-2.75-4.67-6.76,1.74-6.83,4.81-6.83S334.47,447.58,334.47,451.46Zm-7,.12c0,3.2.87,4.86,2.24,4.86s2.23-1.78,2.23-4.94-.73-4.85-2.23-4.85C328.43,446.65,327.5,448.29,327.52,451.58Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M339.93,447.22h0l-2.4,1.21-.43-1.88,3.2-1.58h2.08v13.14h-2.41Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M356.15,451.46c0,4.23-1.66,6.88-4.8,6.88s-4.65-2.75-4.67-6.76,1.74-6.83,4.82-6.83S356.15,447.58,356.15,451.46Zm-7,.12c0,3.2.87,4.86,2.24,4.86s2.23-1.78,2.23-4.94-.73-4.85-2.23-4.85C350.1,446.65,349.17,448.29,349.19,451.58Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M361.6,447.22h0l-2.4,1.21-.43-1.88,3.2-1.58H364v13.14H361.6Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M377.82,451.46c0,4.23-1.66,6.88-4.79,6.88s-4.65-2.75-4.67-6.76,1.73-6.83,4.81-6.83S377.82,447.58,377.82,451.46Zm-7,.12c0,3.2.87,4.86,2.25,4.86s2.22-1.78,2.22-4.94-.73-4.85-2.22-4.85S370.84,448.29,370.86,451.58Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M383.28,447.22h0l-2.41,1.21-.42-1.88L383.6,445h2.08v13.14h-2.4Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M399.49,451.46c0,4.23-1.66,6.88-4.79,6.88s-4.65-2.75-4.67-6.76,1.74-6.83,4.81-6.83S399.49,447.58,399.49,451.46Zm-6.95.12c0,3.2.86,4.86,2.24,4.86s2.22-1.78,2.22-4.94-.72-4.85-2.22-4.85C393.45,446.65,392.51,448.29,392.54,451.58Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M410.33,451.46c0,4.23-1.66,6.88-4.8,6.88s-4.64-2.75-4.67-6.76,1.74-6.83,4.82-6.83S410.33,447.58,410.33,451.46Zm-7,.12c0,3.2.87,4.86,2.25,4.86s2.22-1.78,2.22-4.94-.73-4.85-2.22-4.85S403.35,448.29,403.37,451.58Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M415.78,447.22h0l-2.4,1.21-.43-1.88,3.2-1.58h2.08v13.14h-2.41Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M318.26,463.48h0l-2.41,1.21-.42-1.88,3.19-1.58h2.09v13.14h-2.41Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M334.47,467.72c0,4.23-1.66,6.88-4.79,6.88s-4.65-2.75-4.67-6.76,1.74-6.83,4.81-6.83S334.47,463.84,334.47,467.72Zm-7,.12c0,3.2.87,4.86,2.24,4.86s2.23-1.78,2.23-4.94-.73-4.85-2.23-4.85C328.43,462.91,327.5,464.55,327.52,467.84Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M339.93,463.48h0l-2.4,1.21-.43-1.88,3.2-1.58h2.08v13.14h-2.41Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M356.15,467.72c0,4.23-1.66,6.88-4.8,6.88s-4.65-2.75-4.67-6.76,1.74-6.83,4.82-6.83S356.15,463.84,356.15,467.72Zm-7,.12c0,3.2.87,4.86,2.24,4.86s2.23-1.78,2.23-4.94-.73-4.85-2.23-4.85C350.1,462.91,349.17,464.55,349.19,467.84Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M367,467.72c0,4.23-1.66,6.88-4.79,6.88s-4.65-2.75-4.67-6.76,1.74-6.83,4.81-6.83S367,463.84,367,467.72Zm-7,.12c0,3.2.87,4.86,2.24,4.86s2.22-1.78,2.22-4.94-.72-4.85-2.22-4.85C360.94,462.91,360,464.55,360,467.84Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M372.44,463.48h0L370,464.69l-.42-1.88,3.19-1.58h2.09v13.14h-2.41Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M388.65,467.72c0,4.23-1.65,6.88-4.79,6.88s-4.65-2.75-4.67-6.76S380.93,461,384,461,388.65,463.84,388.65,467.72Zm-6.95.12c0,3.2.87,4.86,2.24,4.86s2.23-1.78,2.23-4.94-.73-4.85-2.23-4.85C382.61,462.91,381.68,464.55,381.7,467.84Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M399.49,467.72c0,4.23-1.66,6.88-4.79,6.88s-4.65-2.75-4.67-6.76,1.74-6.83,4.81-6.83S399.49,463.84,399.49,467.72Zm-6.95.12c0,3.2.86,4.86,2.24,4.86s2.22-1.78,2.22-4.94-.72-4.85-2.22-4.85C393.45,462.91,392.51,464.55,392.54,467.84Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M405,463.48h0l-2.41,1.21-.42-1.88,3.19-1.58h2.08v13.14H405Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M421.16,467.72c0,4.23-1.66,6.88-4.79,6.88s-4.65-2.75-4.67-6.76,1.74-6.83,4.81-6.83S421.16,463.84,421.16,467.72Zm-7,.12c0,3.2.87,4.86,2.24,4.86s2.23-1.78,2.23-4.94-.73-4.85-2.23-4.85C415.12,462.91,414.19,464.55,414.21,467.84Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M323.64,484c0,4.23-1.66,6.88-4.79,6.88s-4.65-2.75-4.67-6.76,1.73-6.83,4.81-6.83S323.64,480.1,323.64,484Zm-7,.12c0,3.2.87,4.86,2.25,4.86s2.22-1.78,2.22-4.94-.73-4.85-2.22-4.85S316.66,480.81,316.68,484.1Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M334.47,484c0,4.23-1.66,6.88-4.79,6.88S325,488.11,325,484.1s1.74-6.83,4.81-6.83S334.47,480.1,334.47,484Zm-7,.12c0,3.2.87,4.86,2.24,4.86S332,487.18,332,484s-.73-4.85-2.23-4.85C328.43,479.17,327.5,480.81,327.52,484.1Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M339.93,479.74h0l-2.4,1.21-.43-1.88,3.2-1.58h2.08v13.14h-2.41Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M350.77,479.74h0L348.32,481l-.42-1.88,3.19-1.58h2.08v13.14h-2.4Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M367,484c0,4.23-1.66,6.88-4.79,6.88s-4.65-2.75-4.67-6.76,1.74-6.83,4.81-6.83S367,480.1,367,484Zm-7,.12c0,3.2.87,4.86,2.24,4.86s2.22-1.78,2.22-4.94-.72-4.85-2.22-4.85C360.94,479.17,360,480.81,360,484.1Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M372.44,479.74h0L370,481l-.42-1.88,3.19-1.58h2.09v13.14h-2.41Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M383.28,479.74h0L380.83,481l-.42-1.88,3.19-1.58h2.08v13.14h-2.4Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M394.11,479.74h0l-2.4,1.21-.43-1.88,3.2-1.58h2.08v13.14h-2.41Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M410.33,484c0,4.23-1.66,6.88-4.8,6.88s-4.64-2.75-4.67-6.76,1.74-6.83,4.82-6.83S410.33,480.1,410.33,484Zm-7,.12c0,3.2.87,4.86,2.25,4.86s2.22-1.78,2.22-4.94-.73-4.85-2.22-4.85S403.35,480.81,403.37,484.1Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M415.78,479.74h0l-2.4,1.21-.43-1.88,3.2-1.58h2.08v13.14h-2.41Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M318.26,496h0l-2.41,1.21-.42-1.88,3.19-1.58h2.09v13.14h-2.41Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M329.1,496h-.05l-2.4,1.21-.43-1.88,3.2-1.58h2.08v13.14h-2.4Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M345.31,500.24c0,4.23-1.66,6.88-4.79,6.88s-4.65-2.75-4.67-6.76,1.74-6.83,4.81-6.83S345.31,496.36,345.31,500.24Zm-7,.12c0,3.2.87,4.86,2.25,4.86s2.22-1.78,2.22-4.94-.72-4.85-2.22-4.85C339.26,495.43,338.33,497.07,338.35,500.36Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M350.77,496h0l-2.41,1.21-.42-1.88,3.19-1.58h2.08v13.14h-2.4Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M367,500.24c0,4.23-1.66,6.88-4.79,6.88s-4.65-2.75-4.67-6.76,1.74-6.83,4.81-6.83S367,496.36,367,500.24Zm-7,.12c0,3.2.87,4.86,2.24,4.86s2.22-1.78,2.22-4.94-.72-4.85-2.22-4.85C360.94,495.43,360,497.07,360,500.36Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M377.82,500.24c0,4.23-1.66,6.88-4.79,6.88s-4.65-2.75-4.67-6.76,1.73-6.83,4.81-6.83S377.82,496.36,377.82,500.24Zm-7,.12c0,3.2.87,4.86,2.25,4.86s2.22-1.78,2.22-4.94-.73-4.85-2.22-4.85S370.84,497.07,370.86,500.36Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M383.28,496h0l-2.41,1.21-.42-1.88,3.19-1.58h2.08v13.14h-2.4Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M394.11,496h0l-2.4,1.21-.43-1.88,3.2-1.58h2.08v13.14h-2.41Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M410.33,500.24c0,4.23-1.66,6.88-4.8,6.88s-4.64-2.75-4.67-6.76,1.74-6.83,4.82-6.83S410.33,496.36,410.33,500.24Zm-7,.12c0,3.2.87,4.86,2.25,4.86s2.22-1.78,2.22-4.94-.73-4.85-2.22-4.85S403.35,497.07,403.37,500.36Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M415.78,496h0l-2.4,1.21-.43-1.88,3.2-1.58h2.08v13.14h-2.41Z" transform="translate(-240.98 -216.06)"/></g><path class="cls-9" d="M471.72,375.86H372.5v32a6.4,6.4,0,0,1-6.41,6.4h-35.2V535.89a6.42,6.42,0,0,0,6.4,6.4H471.72a6.42,6.42,0,0,0,6.4-6.4V382.26A6.42,6.42,0,0,0,471.72,375.86Z" transform="translate(-240.98 -216.06)"/><path class="cls-6" d="M366.09,414.26a6.4,6.4,0,0,0,6.41-6.4v-32l-41.61,38.4Z" transform="translate(-240.98 -216.06)"/><path class="cls-5" d="M372.5,542.29h99.22a6.4,6.4,0,0,0,6.4-6.4V443.36A160.38,160.38,0,0,1,372.5,542.29Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M362,439c0,4.23-1.66,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.74-6.83,4.81-6.83S362,435.13,362,439Zm-7,.12c0,3.2.86,4.85,2.24,4.85s2.22-1.78,2.22-4.93-.72-4.85-2.22-4.85C356,434.2,355.07,435.83,355.09,439.13Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M367.5,434.76h0L365.05,436l-.42-1.88,3.19-1.58h2.09v13.14H367.5Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M378.34,434.76h0L375.89,436l-.43-1.88,3.2-1.58h2.08v13.14h-2.4Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M394.55,439c0,4.23-1.66,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.74-6.83,4.81-6.83S394.55,435.13,394.55,439Zm-7,.12c0,3.2.87,4.85,2.25,4.85s2.22-1.78,2.22-4.93-.73-4.85-2.22-4.85C388.5,434.2,387.57,435.83,387.59,439.13Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M400,434.76h0L397.56,436l-.42-1.88,3.19-1.58h2.08v13.14H400Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M416.22,439c0,4.23-1.66,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.74-6.83,4.81-6.83S416.22,435.13,416.22,439Zm-7,.12c0,3.2.87,4.85,2.24,4.85s2.22-1.78,2.22-4.93-.72-4.85-2.22-4.85C410.18,434.2,409.25,435.83,409.27,439.13Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M427.06,439c0,4.23-1.66,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.73-6.83,4.81-6.83S427.06,435.13,427.06,439Zm-7,.12c0,3.2.87,4.85,2.25,4.85s2.22-1.78,2.22-4.93-.73-4.85-2.22-4.85S420.08,435.83,420.1,439.13Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M437.89,439c0,4.23-1.65,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.74-6.83,4.81-6.83S437.89,435.13,437.89,439Zm-6.95.12c0,3.2.87,4.85,2.24,4.85s2.23-1.78,2.23-4.93-.73-4.85-2.23-4.85C431.85,434.2,430.92,435.83,430.94,439.13Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M443.35,434.76h0l-2.4,1.22-.43-1.88,3.2-1.58h2.08v13.14h-2.41Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M454.19,434.76h0L451.74,436l-.42-1.88,3.19-1.58h2.08v13.14h-2.4Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M356.66,451h0l-2.4,1.22-.43-1.88,3.2-1.58h2.08v13.14h-2.41Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M372.88,455.27c0,4.23-1.66,6.87-4.8,6.87s-4.64-2.75-4.67-6.75,1.74-6.83,4.82-6.83S372.88,451.39,372.88,455.27Zm-7,.12c0,3.2.87,4.85,2.25,4.85s2.22-1.78,2.22-4.93-.73-4.85-2.22-4.85S365.9,452.1,365.92,455.39Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M383.71,455.27c0,4.23-1.65,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.74-6.83,4.81-6.83S383.71,451.39,383.71,455.27Zm-6.95.12c0,3.2.87,4.85,2.24,4.85s2.23-1.78,2.23-4.93-.73-4.85-2.23-4.85C377.67,450.46,376.74,452.1,376.76,455.39Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M389.17,451h0l-2.4,1.22-.43-1.88,3.19-1.58h2.09v13.14h-2.41Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M405.39,455.27c0,4.23-1.66,6.87-4.8,6.87s-4.65-2.75-4.67-6.75,1.74-6.83,4.82-6.83S405.39,451.39,405.39,455.27Zm-7,.12c0,3.2.87,4.85,2.24,4.85s2.23-1.78,2.23-4.93-.73-4.85-2.23-4.85C399.34,450.46,398.41,452.1,398.43,455.39Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M410.84,451h0l-2.4,1.22-.43-1.88,3.2-1.58h2.08v13.14h-2.41Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M427.06,455.27c0,4.23-1.66,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.73-6.83,4.81-6.83S427.06,451.39,427.06,455.27Zm-7,.12c0,3.2.87,4.85,2.25,4.85s2.22-1.78,2.22-4.93-.73-4.85-2.22-4.85S420.08,452.1,420.1,455.39Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M432.52,451h0l-2.41,1.22-.42-1.88,3.19-1.58h2.08v13.14h-2.4Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M448.73,455.27c0,4.23-1.66,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.74-6.83,4.81-6.83S448.73,451.39,448.73,455.27Zm-7,.12c0,3.2.86,4.85,2.24,4.85s2.22-1.78,2.22-4.93-.72-4.85-2.22-4.85C442.69,450.46,441.75,452.1,441.78,455.39Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M454.19,451h0l-2.41,1.22-.42-1.88,3.19-1.58h2.08v13.14h-2.4Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M362,471.53c0,4.23-1.66,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.74-6.83,4.81-6.83S362,467.65,362,471.53Zm-7,.12c0,3.2.86,4.85,2.24,4.85s2.22-1.78,2.22-4.93-.72-4.85-2.22-4.85C356,466.72,355.07,468.36,355.09,471.65Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M372.88,471.53c0,4.23-1.66,6.87-4.8,6.87s-4.64-2.75-4.67-6.75,1.74-6.83,4.82-6.83S372.88,467.65,372.88,471.53Zm-7,.12c0,3.2.87,4.85,2.25,4.85s2.22-1.78,2.22-4.93-.73-4.85-2.22-4.85S365.9,468.36,365.92,471.65Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M378.34,467.28h0l-2.41,1.22-.43-1.88,3.2-1.58h2.08v13.14h-2.4Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M394.55,471.53c0,4.23-1.66,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.74-6.83,4.81-6.83S394.55,467.65,394.55,471.53Zm-7,.12c0,3.2.87,4.85,2.25,4.85s2.22-1.78,2.22-4.93-.73-4.85-2.22-4.85C388.5,466.72,387.57,468.36,387.59,471.65Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M400,467.28h0l-2.41,1.22-.42-1.88,3.19-1.58h2.08v13.14H400Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M416.22,471.53c0,4.23-1.66,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.74-6.83,4.81-6.83S416.22,467.65,416.22,471.53Zm-7,.12c0,3.2.87,4.85,2.24,4.85s2.22-1.78,2.22-4.93-.72-4.85-2.22-4.85C410.18,466.72,409.25,468.36,409.27,471.65Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M421.68,467.28h0l-2.41,1.22-.42-1.88L422,465h2.09v13.14h-2.41Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M437.89,471.53c0,4.23-1.65,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.74-6.83,4.81-6.83S437.89,467.65,437.89,471.53Zm-6.95.12c0,3.2.87,4.85,2.24,4.85s2.23-1.78,2.23-4.93-.73-4.85-2.23-4.85C431.85,466.72,430.92,468.36,430.94,471.65Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M448.73,471.53c0,4.23-1.66,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.74-6.83,4.81-6.83S448.73,467.65,448.73,471.53Zm-7,.12c0,3.2.86,4.85,2.24,4.85s2.22-1.78,2.22-4.93-.72-4.85-2.22-4.85C442.69,466.72,441.75,468.36,441.78,471.65Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M454.19,467.28h0l-2.41,1.22-.42-1.88,3.19-1.58h2.08v13.14h-2.4Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M356.66,483.54h0l-2.4,1.22-.43-1.88,3.2-1.58h2.08v13.14h-2.41Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M372.88,487.79c0,4.23-1.66,6.87-4.8,6.87s-4.64-2.75-4.67-6.75,1.74-6.83,4.82-6.83S372.88,483.91,372.88,487.79Zm-7,.12c0,3.2.87,4.85,2.25,4.85s2.22-1.77,2.22-4.93-.73-4.85-2.22-4.85S365.9,484.62,365.92,487.91Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M378.34,483.54h0l-2.41,1.22-.43-1.88,3.2-1.58h2.08v13.14h-2.4Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M394.55,487.79c0,4.23-1.66,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.74-6.83,4.81-6.83S394.55,483.91,394.55,487.79Zm-7,.12c0,3.2.87,4.85,2.25,4.85s2.22-1.77,2.22-4.93-.73-4.85-2.22-4.85C388.5,483,387.57,484.62,387.59,487.91Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M405.39,487.79c0,4.23-1.66,6.87-4.8,6.87s-4.65-2.75-4.67-6.75,1.74-6.83,4.82-6.83S405.39,483.91,405.39,487.79Zm-7,.12c0,3.2.87,4.85,2.24,4.85s2.23-1.77,2.23-4.93-.73-4.85-2.23-4.85C399.34,483,398.41,484.62,398.43,487.91Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M410.84,483.54h0l-2.4,1.22-.43-1.88,3.2-1.58h2.08v13.14h-2.41Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M427.06,487.79c0,4.23-1.66,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.73-6.83,4.81-6.83S427.06,483.91,427.06,487.79Zm-7,.12c0,3.2.87,4.85,2.25,4.85s2.22-1.77,2.22-4.93-.73-4.85-2.22-4.85S420.08,484.62,420.1,487.91Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M437.89,487.79c0,4.23-1.65,6.87-4.79,6.87s-4.65-2.75-4.67-6.75,1.74-6.83,4.81-6.83S437.89,483.91,437.89,487.79Zm-6.95.12c0,3.2.87,4.85,2.24,4.85s2.23-1.77,2.23-4.93-.73-4.85-2.23-4.85C431.85,483,430.92,484.62,430.94,487.91Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M443.35,483.54h0l-2.4,1.22-.43-1.88,3.2-1.58h2.08v13.14h-2.41Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M459.57,487.79c0,4.23-1.66,6.87-4.8,6.87s-4.65-2.75-4.67-6.75,1.74-6.83,4.82-6.83S459.57,483.91,459.57,487.79Zm-7,.12c0,3.2.87,4.85,2.25,4.85s2.22-1.77,2.22-4.93-.73-4.85-2.22-4.85S452.59,484.62,452.61,487.91Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M362,504.05c0,4.23-1.66,6.88-4.79,6.88s-4.65-2.75-4.67-6.76,1.74-6.83,4.81-6.83S362,500.17,362,504.05Zm-7,.12c0,3.2.86,4.86,2.24,4.86s2.22-1.78,2.22-4.94-.72-4.85-2.22-4.85C356,499.24,355.07,500.88,355.09,504.17Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M372.88,504.05c0,4.23-1.66,6.88-4.8,6.88s-4.64-2.75-4.67-6.76,1.74-6.83,4.82-6.83S372.88,500.17,372.88,504.05Zm-7,.12c0,3.2.87,4.86,2.25,4.86s2.22-1.78,2.22-4.94-.73-4.85-2.22-4.85S365.9,500.88,365.92,504.17Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M378.34,499.81h0L375.89,501l-.43-1.88,3.2-1.58h2.08V510.7h-2.4Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M389.17,499.81h0l-2.4,1.21-.43-1.88,3.19-1.58h2.09V510.7h-2.41Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M405.39,504.05c0,4.23-1.66,6.88-4.8,6.88s-4.65-2.75-4.67-6.76,1.74-6.83,4.82-6.83S405.39,500.17,405.39,504.05Zm-7,.12c0,3.2.87,4.86,2.24,4.86s2.23-1.78,2.23-4.94-.73-4.85-2.23-4.85C399.34,499.24,398.41,500.88,398.43,504.17Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M410.84,499.81h0L408.4,501l-.43-1.88,3.2-1.58h2.08V510.7h-2.41Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M421.68,499.81h0L419.23,501l-.42-1.88,3.19-1.58h2.09V510.7h-2.41Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M432.52,499.81h0L430.07,501l-.42-1.88,3.19-1.58h2.08V510.7h-2.4Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M448.73,504.05c0,4.23-1.66,6.88-4.79,6.88s-4.65-2.75-4.67-6.76,1.74-6.83,4.81-6.83S448.73,500.17,448.73,504.05Zm-7,.12c0,3.2.86,4.86,2.24,4.86s2.22-1.78,2.22-4.94-.72-4.85-2.22-4.85C442.69,499.24,441.75,500.88,441.78,504.17Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M454.19,499.81h0L451.74,501l-.42-1.88,3.19-1.58h2.08V510.7h-2.4Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M356.66,516.07h0l-2.4,1.21-.43-1.88,3.2-1.58h2.08V527h-2.41Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M367.5,516.07h0l-2.41,1.21-.42-1.88,3.19-1.58h2.09V527H367.5Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M383.71,520.31c0,4.23-1.65,6.88-4.79,6.88s-4.65-2.75-4.67-6.76,1.74-6.83,4.81-6.83S383.71,516.43,383.71,520.31Zm-6.95.12c0,3.2.87,4.86,2.24,4.86s2.23-1.78,2.23-4.94-.73-4.85-2.23-4.85C377.67,515.5,376.74,517.14,376.76,520.43Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M389.17,516.07h0l-2.4,1.21-.43-1.88,3.19-1.58h2.09V527h-2.41Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M405.39,520.31c0,4.23-1.66,6.88-4.8,6.88s-4.65-2.75-4.67-6.76,1.74-6.83,4.82-6.83S405.39,516.43,405.39,520.31Zm-7,.12c0,3.2.87,4.86,2.24,4.86s2.23-1.78,2.23-4.94-.73-4.85-2.23-4.85C399.34,515.5,398.41,517.14,398.43,520.43Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M416.22,520.31c0,4.23-1.66,6.88-4.79,6.88s-4.65-2.75-4.67-6.76,1.74-6.83,4.81-6.83S416.22,516.43,416.22,520.31Zm-7,.12c0,3.2.87,4.86,2.24,4.86s2.22-1.78,2.22-4.94-.72-4.85-2.22-4.85C410.18,515.5,409.25,517.14,409.27,520.43Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M421.68,516.07h0l-2.41,1.21-.42-1.88,3.19-1.58h2.09V527h-2.41Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M432.52,516.07h0l-2.41,1.21-.42-1.88,3.19-1.58h2.08V527h-2.4Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M448.73,520.31c0,4.23-1.66,6.88-4.79,6.88s-4.65-2.75-4.67-6.76,1.74-6.83,4.81-6.83S448.73,516.43,448.73,520.31Zm-7,.12c0,3.2.86,4.86,2.24,4.86s2.22-1.78,2.22-4.94-.72-4.85-2.22-4.85C442.69,515.5,441.75,517.14,441.78,520.43Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M454.19,516.07h0l-2.41,1.21-.42-1.88,3.19-1.58h2.08V527h-2.4Z" transform="translate(-240.98 -216.06)"/></g><g class="cls-10"><path class="cls-11" d="M342.37,583.65a13.66,13.66,0,0,1-5.57,1c-6.85,0-11-4.29-11-10.85,0-7.1,4.93-11.39,11.52-11.39a12.31,12.31,0,0,1,5.25,1l-.86,3.13a10.64,10.64,0,0,0-4.23-.83c-4.38,0-7.55,2.75-7.55,7.94,0,4.73,2.79,7.77,7.52,7.77a11.05,11.05,0,0,0,4.29-.8Z" transform="translate(-240.98 -216.06)"/><path class="cls-11" d="M350.5,566h-6.15v-3.3h16.29V566h-6.21v18.27H350.5Z" transform="translate(-240.98 -216.06)"/><path class="cls-11" d="M363.17,562.72h12.45V566h-8.51v5.95H375v3.24h-7.93v9.15h-3.94Z" transform="translate(-240.98 -216.06)"/><path class="cls-11" d="M400.29,561.57V579.9c0,1.6.06,3.33.12,4.39H396.9l-.16-2.47h-.07a5.61,5.61,0,0,1-5.09,2.82c-3.71,0-6.65-3.17-6.65-8,0-5.21,3.23-8.32,7-8.32a5,5,0,0,1,4.39,2h.06v-8.83Zm-3.94,13.63a5.86,5.86,0,0,0-.09-1,3.46,3.46,0,0,0-3.4-2.79c-2.52,0-3.93,2.24-3.93,5.15s1.41,4.93,3.9,4.93a3.47,3.47,0,0,0,3.39-2.78,4.22,4.22,0,0,0,.13-1.15Z" transform="translate(-240.98 -216.06)"/><path class="cls-11" d="M413.28,584.29l-.26-1.73h-.09a5.77,5.77,0,0,1-4.61,2.08,4.63,4.63,0,0,1-4.9-4.64c0-3.94,3.49-5.92,9.25-5.89v-.25c0-1-.41-2.72-3.17-2.72a8.29,8.29,0,0,0-4.19,1.15l-.77-2.56a11.3,11.3,0,0,1,5.64-1.38c5,0,6.43,3.17,6.43,6.56v5.63a25.12,25.12,0,0,0,.22,3.75Zm-.51-7.62c-2.79-.06-5.44.55-5.44,2.91a2.06,2.06,0,0,0,2.24,2.24,3.18,3.18,0,0,0,3.07-2.14,2.73,2.73,0,0,0,.13-.86Z" transform="translate(-240.98 -216.06)"/><path class="cls-11" d="M425.09,564.26v4.44h3.74v2.95h-3.74v6.88c0,1.89.51,2.88,2,2.88a6.07,6.07,0,0,0,1.54-.19l.06,3a8.41,8.41,0,0,1-2.84.39,4.58,4.58,0,0,1-3.4-1.28c-.83-.9-1.21-2.31-1.21-4.35v-7.33H419V568.7h2.24v-3.51Z" transform="translate(-240.98 -216.06)"/><path class="cls-11" d="M440.58,584.29l-.26-1.73h-.1a5.77,5.77,0,0,1-4.6,2.08,4.63,4.63,0,0,1-4.9-4.64c0-3.94,3.49-5.92,9.25-5.89v-.25c0-1-.42-2.72-3.17-2.72a8.24,8.24,0,0,0-4.19,1.15l-.77-2.56a11.26,11.26,0,0,1,5.63-1.38c5,0,6.43,3.17,6.43,6.56v5.63a25,25,0,0,0,.23,3.75Zm-.52-7.62c-2.78-.06-5.44.55-5.44,2.91a2.07,2.07,0,0,0,2.25,2.24,3.2,3.2,0,0,0,3.07-2.14,3,3,0,0,0,.12-.86Z" transform="translate(-240.98 -216.06)"/><path class="cls-11" d="M332.75,611.07a8.75,8.75,0,0,0,4,1.12c1.73,0,2.5-.7,2.5-1.73s-.64-1.6-2.56-2.27c-3-1.05-4.32-2.72-4.29-4.54,0-2.75,2.27-4.9,5.89-4.9a9.16,9.16,0,0,1,4.13.93l-.77,2.78a7,7,0,0,0-3.3-.89c-1.4,0-2.17.67-2.17,1.63s.73,1.47,2.72,2.18c2.81,1,4.13,2.46,4.16,4.76,0,2.82-2.21,4.87-6.34,4.87a10,10,0,0,1-4.73-1.09Z" transform="translate(-240.98 -216.06)"/><path class="cls-11" d="M350.8,594.66v4.44h3.74v2.95H350.8v6.88c0,1.89.51,2.88,2,2.88a6,6,0,0,0,1.53-.19l.07,3a8.48,8.48,0,0,1-2.85.39,4.54,4.54,0,0,1-3.39-1.28c-.83-.9-1.22-2.31-1.22-4.35v-7.33h-2.24V599.1H347v-3.52Z" transform="translate(-240.98 -216.06)"/><path class="cls-11" d="M357.52,604.13c0-2.11,0-3.62-.13-5h3.43l.13,3h.12a4.66,4.66,0,0,1,4.26-3.33,4.42,4.42,0,0,1,.93.1v3.71a5.8,5.8,0,0,0-1.15-.13,3.47,3.47,0,0,0-3.52,3,6.23,6.23,0,0,0-.13,1.21v8.07h-3.94Z" transform="translate(-240.98 -216.06)"/><path class="cls-11" d="M371.41,608c.09,2.82,2.3,4,4.8,4a11.71,11.71,0,0,0,4.32-.7l.57,2.72a14.7,14.7,0,0,1-5.44,1c-5.05,0-8-3.11-8-7.87,0-4.32,2.63-8.39,7.62-8.39s6.72,4.16,6.72,7.59a10.05,10.05,0,0,1-.13,1.66Zm6.85-2.75c0-1.44-.61-3.81-3.23-3.81-2.44,0-3.46,2.21-3.62,3.81Z" transform="translate(-240.98 -216.06)"/><path class="cls-11" d="M393.9,614.69l-.25-1.73h-.1A5.77,5.77,0,0,1,389,615a4.63,4.63,0,0,1-4.9-4.64c0-3.94,3.49-5.92,9.25-5.89v-.25c0-1-.42-2.72-3.17-2.72a8.24,8.24,0,0,0-4.19,1.15l-.77-2.56a11.15,11.15,0,0,1,5.63-1.38c5,0,6.43,3.17,6.43,6.56v5.63a25,25,0,0,0,.23,3.75Zm-.51-7.62c-2.78-.06-5.44.55-5.44,2.91a2.07,2.07,0,0,0,2.24,2.24,3.18,3.18,0,0,0,3.07-2.14,2.73,2.73,0,0,0,.13-.86Z" transform="translate(-240.98 -216.06)"/><path class="cls-11" d="M401.39,603.74c0-1.79,0-3.29-.13-4.64h3.4l.16,2.31h.09a5.39,5.39,0,0,1,4.8-2.66,4.5,4.5,0,0,1,4.32,2.88h.07a5.87,5.87,0,0,1,1.92-2,5.16,5.16,0,0,1,3.13-.93c2.59,0,5.22,1.76,5.22,6.75v9.19h-3.84v-8.61c0-2.59-.9-4.13-2.79-4.13A3,3,0,0,0,415,604a6.08,6.08,0,0,0-.19,1.31v9.35H411v-9c0-2.17-.86-3.71-2.69-3.71a3.06,3.06,0,0,0-2.81,2.24,3.38,3.38,0,0,0-.23,1.28v9.22h-3.84Z" transform="translate(-240.98 -216.06)"/><path class="cls-11" d="M428.34,611.07a8.68,8.68,0,0,0,4,1.12c1.72,0,2.49-.7,2.49-1.73s-.64-1.6-2.56-2.27c-3-1.05-4.32-2.72-4.28-4.54,0-2.75,2.27-4.9,5.88-4.9a9.16,9.16,0,0,1,4.13.93l-.77,2.78a7,7,0,0,0-3.29-.89c-1.41,0-2.18.67-2.18,1.63s.74,1.47,2.72,2.18c2.82,1,4.13,2.46,4.16,4.76,0,2.82-2.21,4.87-6.34,4.87a10,10,0,0,1-4.73-1.09Z" transform="translate(-240.98 -216.06)"/></g><g id="surface1-2" data-name="surface1"><path class="cls-9" d="M745.45,380.33a5.81,5.81,0,0,0-5.79-5.79H649.93v28.94a5.79,5.79,0,0,1-5.79,5.79H612.3V536.63a5.81,5.81,0,0,0,5.79,5.79H739.66a5.81,5.81,0,0,0,5.79-5.79Z" transform="translate(-240.98 -216.06)"/><path class="cls-5" d="M649.93,542.42h89.73a5.79,5.79,0,0,0,5.79-5.79V453A145.05,145.05,0,0,1,649.93,542.42Z" transform="translate(-240.98 -216.06)"/><path class="cls-6" d="M649.93,403.48V374.54L612.3,409.27h31.84A5.79,5.79,0,0,0,649.93,403.48Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M693.35,452.69H632.57a2.9,2.9,0,1,1,0-5.79h60.78a2.9,2.9,0,0,1,0,5.79Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M705.91,470.06H632.57a2.9,2.9,0,1,1,0-5.79h73.34a2.9,2.9,0,1,1,0,5.79Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M667.79,487.42H632.57a2.9,2.9,0,1,1,0-5.79h35.22a2.9,2.9,0,1,1,0,5.79Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M710.72,435.32h-55a2.9,2.9,0,0,1,0-5.79h55a2.9,2.9,0,0,1,0,5.79Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M644.14,435.32H632.57a2.9,2.9,0,1,1,0-5.79h11.57a2.9,2.9,0,1,1,0,5.79Z" transform="translate(-240.98 -216.06)"/></g><path class="cls-12" d="M761.07,391.9H673.83a4.61,4.61,0,0,0-4.59,4.6v41.32a4.6,4.6,0,0,0,4.59,4.59h87.24a4.6,4.6,0,0,0,4.59-4.59V396.5A4.61,4.61,0,0,0,761.07,391.9Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M688,504.79H632.57a2.9,2.9,0,1,1,0-5.79H688a2.9,2.9,0,0,1,0,5.79Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M658.62,522.16h-26a2.9,2.9,0,1,1,0-5.79h26a2.9,2.9,0,0,1,0,5.79Z" transform="translate(-240.98 -216.06)"/><path class="cls-8" d="M700.35,487.42H679.6a2.9,2.9,0,0,1,0-5.79h20.75a2.9,2.9,0,1,1,0,5.79Z" transform="translate(-240.98 -216.06)"/><path class="cls-13" d="M688.68,409.69h-6.14v-3.3h16.29v3.3h-6.21V428h-3.94Z" transform="translate(-240.98 -216.06)"/><path class="cls-13" d="M701,423.67a10.86,10.86,0,0,0,5.22,1.38c2.53,0,3.93-1.19,3.93-2.95s-1.08-2.59-3.84-3.58c-3.55-1.28-5.82-3.17-5.82-6.27,0-3.52,2.94-6.21,7.62-6.21a11.34,11.34,0,0,1,5.18,1.09l-1,3.17a9.07,9.07,0,0,0-4.29-1c-2.49,0-3.58,1.35-3.58,2.59,0,1.67,1.25,2.44,4.13,3.56,3.74,1.4,5.56,3.29,5.56,6.4,0,3.45-2.62,6.46-8.19,6.46a12.7,12.7,0,0,1-5.82-1.35Z" transform="translate(-240.98 -216.06)"/><path class="cls-13" d="M717.71,406.68a39.34,39.34,0,0,1,6.27-.45c4,0,6.81.83,8.8,2.5s3.36,4.25,3.36,7.93c0,3.84-1.31,6.72-3.36,8.58s-5.57,2.94-9.76,2.94a42.8,42.8,0,0,1-5.31-.29ZM721.64,425a14.18,14.18,0,0,0,2.18.1c5.12,0,8.16-2.79,8.16-8.26,0-4.77-2.72-7.49-7.65-7.49a12.42,12.42,0,0,0-2.69.23Z" transform="translate(-240.98 -216.06)"/><path class="cls-13" d="M739.56,406.39h3.94v18.27h8.86V428h-12.8Z" transform="translate(-240.98 -216.06)"/><g class="cls-10"><path class="cls-11" d="M632.3,586.3V575a9.9,9.9,0,0,0-.06-1.21,2.8,2.8,0,0,0-.17-.74.8.8,0,0,0-.3-.38.78.78,0,0,0-.44-.11,1,1,0,0,0-.58.19,2.37,2.37,0,0,0-.57.6,10.64,10.64,0,0,0-.67,1.12q-.37.71-.87,1.71V586.3h-2.48v-11a13,13,0,0,0-.06-1.39,3.41,3.41,0,0,0-.17-.83.77.77,0,0,0-.31-.4.79.79,0,0,0-.45-.11,1,1,0,0,0-.53.15,2.32,2.32,0,0,0-.55.57,7.94,7.94,0,0,0-.68,1.11c-.25.46-.55,1.06-.9,1.79V586.3H620V570.61h2.08l.13,3a13.14,13.14,0,0,1,.79-1.52,4.73,4.73,0,0,1,.79-1,2.58,2.58,0,0,1,1.89-.74,2.32,2.32,0,0,1,1.92.83,4.09,4.09,0,0,1,.65,2.56c.25-.54.5-1,.74-1.44a5.78,5.78,0,0,1,.77-1.07,3,3,0,0,1,.92-.65,2.78,2.78,0,0,1,1.15-.23q3,0,3,4.55V586.3Z" transform="translate(-240.98 -216.06)"/><path class="cls-11" d="M652,577.63c0,.38,0,.71,0,1s0,.5-.05.73h-11a4.87,4.87,0,0,0,1.35,3.7,5.37,5.37,0,0,0,3.87,1.29q.69,0,1.38-.06c.46,0,.9-.08,1.33-.15s.83-.13,1.22-.21.75-.16,1.09-.26v2.24a18.79,18.79,0,0,1-2.51.51,21,21,0,0,1-2.9.19,10,10,0,0,1-3.47-.54,6,6,0,0,1-2.38-1.59,6.39,6.39,0,0,1-1.37-2.55,11.88,11.88,0,0,1-.45-3.41,10,10,0,0,1,.48-3.13,7.74,7.74,0,0,1,1.39-2.6,6.61,6.61,0,0,1,5.26-2.43,7.5,7.5,0,0,1,2.9.52,5.66,5.66,0,0,1,2.13,1.46,6.2,6.2,0,0,1,1.32,2.3A9.78,9.78,0,0,1,652,577.63Zm-2.83-.39a5.65,5.65,0,0,0-.2-1.92,4.14,4.14,0,0,0-.77-1.49,3.65,3.65,0,0,0-1.31-1,4.27,4.27,0,0,0-1.81-.36,3.74,3.74,0,0,0-1.62.35,3.65,3.65,0,0,0-1.27,1,5,5,0,0,0-.86,1.5,7.1,7.1,0,0,0-.41,1.92Z" transform="translate(-240.98 -216.06)"/><path class="cls-11" d="M668.94,586.08a13.14,13.14,0,0,1-1.91.34,18.86,18.86,0,0,1-2,.1,6.34,6.34,0,0,1-4.41-1.34,5.33,5.33,0,0,1-1.45-4.1v-8.19h-4.39v-2.28h4.39V566.3l2.72-.7v5h7.05v2.28h-7.05v8a3.29,3.29,0,0,0,.9,2.53,3.79,3.79,0,0,0,2.65.83,14.24,14.24,0,0,0,1.64-.11,15.66,15.66,0,0,0,1.86-.37Z" transform="translate(-240.98 -216.06)"/><path class="cls-11" d="M684,586.3l-.06-2.11A8.59,8.59,0,0,1,681.3,586a7.07,7.07,0,0,1-2.77.56,6.8,6.8,0,0,1-2.3-.34,4.37,4.37,0,0,1-1.57-1,3.63,3.63,0,0,1-.9-1.41,5.06,5.06,0,0,1-.29-1.77,4.36,4.36,0,0,1,1.76-3.69,8.49,8.49,0,0,1,5.19-1.34h3.25v-1.37a2.93,2.93,0,0,0-.89-2.23,3.84,3.84,0,0,0-2.72-.84,11.57,11.57,0,0,0-2.62.3,18.49,18.49,0,0,0-2.66.85v-2.46c.34-.12.73-.25,1.15-.37s.87-.22,1.33-.32,1-.16,1.47-.22a13.3,13.3,0,0,1,1.55-.09,10,10,0,0,1,2.56.31,5.15,5.15,0,0,1,1.93,1,4.13,4.13,0,0,1,1.21,1.61,5.65,5.65,0,0,1,.43,2.28V586.3Zm-.3-7.14h-3.45a6.85,6.85,0,0,0-1.75.2,3.5,3.5,0,0,0-1.21.58,2.32,2.32,0,0,0-.69.9,3,3,0,0,0-.23,1.18,2.83,2.83,0,0,0,.14.87,2,2,0,0,0,.46.73,2.25,2.25,0,0,0,.81.51,3.59,3.59,0,0,0,1.22.19,5.19,5.19,0,0,0,2.15-.57,10.82,10.82,0,0,0,2.55-1.81Z" transform="translate(-240.98 -216.06)"/><path class="cls-11" d="M690.69,578.79a10.83,10.83,0,0,1,.54-3.56,7.34,7.34,0,0,1,1.56-2.62,6.52,6.52,0,0,1,2.42-1.63,8.54,8.54,0,0,1,3.15-.55,12.12,12.12,0,0,1,1.48.09,8.54,8.54,0,0,1,1.42.3v-6.6H704V586.3h-2.44l-.09-3a8.35,8.35,0,0,1-2.47,2.46,5.5,5.5,0,0,1-2.88.79,4.87,4.87,0,0,1-2.36-.56,4.81,4.81,0,0,1-1.71-1.59,7.65,7.65,0,0,1-1-2.46A13.66,13.66,0,0,1,690.69,578.79Zm2.78-.18a8.6,8.6,0,0,0,.83,4.25,2.62,2.62,0,0,0,2.37,1.39,3.5,3.5,0,0,0,2.18-.92,12.76,12.76,0,0,0,2.41-2.73v-7.28a6.42,6.42,0,0,0-1.48-.48,8.06,8.06,0,0,0-1.61-.16,4.35,4.35,0,0,0-3.46,1.43A6.78,6.78,0,0,0,693.47,578.61Z" transform="translate(-240.98 -216.06)"/><path class="cls-11" d="M719.16,586.3l-.07-2.11a8.44,8.44,0,0,1-2.6,1.83,7.07,7.07,0,0,1-2.77.56,6.8,6.8,0,0,1-2.3-.34,4.37,4.37,0,0,1-1.57-1,3.77,3.77,0,0,1-.91-1.41,5.3,5.3,0,0,1-.28-1.77,4.37,4.37,0,0,1,1.75-3.69,8.54,8.54,0,0,1,5.2-1.34h3.25v-1.37a2.93,2.93,0,0,0-.89-2.23,3.85,3.85,0,0,0-2.72-.84,11.51,11.51,0,0,0-2.62.3,17.73,17.73,0,0,0-2.66.85v-2.46c.34-.12.72-.25,1.15-.37s.86-.22,1.33-.32,1-.16,1.47-.22a13.3,13.3,0,0,1,1.55-.09,10,10,0,0,1,2.56.31,5.22,5.22,0,0,1,1.93,1,4.13,4.13,0,0,1,1.21,1.61,5.66,5.66,0,0,1,.42,2.28V586.3Zm-.3-7.14h-3.45a6.8,6.8,0,0,0-1.75.2,3.41,3.41,0,0,0-1.21.58,2.32,2.32,0,0,0-.69.9,3,3,0,0,0-.23,1.18,2.83,2.83,0,0,0,.14.87,2,2,0,0,0,.45.73,2.3,2.3,0,0,0,.82.51,3.59,3.59,0,0,0,1.22.19,5.11,5.11,0,0,0,2.14-.57,10.65,10.65,0,0,0,2.56-1.81Z" transform="translate(-240.98 -216.06)"/><path class="cls-11" d="M739.31,586.08a13,13,0,0,1-1.9.34,19,19,0,0,1-2,.1,6.34,6.34,0,0,1-4.41-1.34,5.29,5.29,0,0,1-1.45-4.1v-8.19h-4.39v-2.28h4.39V566.3l2.71-.7v5h7v2.28h-7v8a3.29,3.29,0,0,0,.9,2.53,3.79,3.79,0,0,0,2.65.83,14.1,14.1,0,0,0,1.64-.11,15.27,15.27,0,0,0,1.86-.37Z" transform="translate(-240.98 -216.06)"/><path class="cls-11" d="M754.34,586.3l-.06-2.11a8.44,8.44,0,0,1-2.6,1.83,7.1,7.1,0,0,1-2.77.56,6.76,6.76,0,0,1-2.3-.34,4.28,4.28,0,0,1-1.57-1,3.65,3.65,0,0,1-.91-1.41,5.3,5.3,0,0,1-.29-1.77,4.38,4.38,0,0,1,1.76-3.69,8.5,8.5,0,0,1,5.2-1.34h3.25v-1.37a2.93,2.93,0,0,0-.89-2.23,3.85,3.85,0,0,0-2.72-.84,11.51,11.51,0,0,0-2.62.3,17.73,17.73,0,0,0-2.66.85v-2.46c.34-.12.72-.25,1.14-.37s.87-.22,1.34-.32,1-.16,1.47-.22a13.17,13.17,0,0,1,1.55-.09,10.09,10.09,0,0,1,2.56.31,5.22,5.22,0,0,1,1.93,1,4.23,4.23,0,0,1,1.21,1.61,5.66,5.66,0,0,1,.42,2.28V586.3Zm-.29-7.14h-3.46a6.85,6.85,0,0,0-1.75.2,3.36,3.36,0,0,0-1.2.58,2.34,2.34,0,0,0-.7.9,3,3,0,0,0-.22,1.18,2.56,2.56,0,0,0,.14.87,1.86,1.86,0,0,0,.45.73,2.34,2.34,0,0,0,.81.51,3.63,3.63,0,0,0,1.22.19,5.15,5.15,0,0,0,2.15-.57,10.65,10.65,0,0,0,2.56-1.81Z" transform="translate(-240.98 -216.06)"/></g><g class="cls-10"><path class="cls-11" d="M482.62,709.31a13.62,13.62,0,0,1-5.57,1c-6.84,0-11-4.29-11-10.85,0-7.1,4.92-11.39,11.52-11.39a12.45,12.45,0,0,1,5.24,1l-.86,3.14a10.42,10.42,0,0,0-4.22-.83c-4.39,0-7.55,2.75-7.55,7.93,0,4.74,2.78,7.78,7.51,7.78a11,11,0,0,0,4.29-.8Z" transform="translate(-240.98 -216.06)"/><path class="cls-11" d="M490.75,691.68h-6.14v-3.29h16.28v3.29h-6.2V710h-3.94Z" transform="translate(-240.98 -216.06)"/><path class="cls-11" d="M503.42,688.39h12.45v3.23h-8.51v6h7.93v3.23h-7.93V710h-3.94Z" transform="translate(-240.98 -216.06)"/><path class="cls-11" d="M530.68,689.92v4.45h3.75v2.94h-3.75v6.88c0,1.89.52,2.88,2,2.88a5.7,5.7,0,0,0,1.54-.19l.06,3a8.8,8.8,0,0,1-2.85.38,4.56,4.56,0,0,1-3.39-1.28c-.83-.89-1.21-2.3-1.21-4.35v-7.33h-2.24v-2.94h2.24v-3.52Z" transform="translate(-240.98 -216.06)"/><path class="cls-11" d="M537.41,699.39c0-2.11,0-3.61-.13-5h3.42l.13,3H541a4.65,4.65,0,0,1,4.25-3.33,4.38,4.38,0,0,1,.93.09v3.72a5.07,5.07,0,0,0-1.15-.13,3.46,3.46,0,0,0-3.52,3,7.25,7.25,0,0,0-.13,1.22V710h-3.93Z" transform="translate(-240.98 -216.06)"/><path class="cls-11" d="M557.28,710l-.26-1.73h-.09a5.79,5.79,0,0,1-4.61,2.08,4.63,4.63,0,0,1-4.9-4.64c0-3.93,3.49-5.92,9.25-5.88v-.26c0-1-.42-2.72-3.17-2.72a8.29,8.29,0,0,0-4.19,1.15l-.77-2.56a11.27,11.27,0,0,1,5.63-1.37c5,0,6.43,3.17,6.43,6.56v5.63a24.83,24.83,0,0,0,.23,3.74Zm-.52-7.61c-2.78-.07-5.43.54-5.43,2.91a2.07,2.07,0,0,0,2.24,2.24,3.2,3.2,0,0,0,3.07-2.15,2.92,2.92,0,0,0,.12-.86Z" transform="translate(-240.98 -216.06)"/><path class="cls-11" d="M576.22,709.47a11.26,11.26,0,0,1-4.42.8c-4.86,0-8-3.1-8-7.93S567,694,572.44,694a9.89,9.89,0,0,1,3.81.73l-.7,3a6.91,6.91,0,0,0-3-.61c-3,0-4.8,2.21-4.77,5,0,3.2,2.09,5,4.77,5a7.72,7.72,0,0,0,3.11-.61Z" transform="translate(-240.98 -216.06)"/><path class="cls-11" d="M581.63,703.26c.09,2.82,2.3,4,4.8,4a11.7,11.7,0,0,0,4.32-.71l.57,2.72a14.48,14.48,0,0,1-5.43,1c-5.06,0-8-3.1-8-7.87,0-4.32,2.63-8.38,7.62-8.38s6.72,4.16,6.72,7.58a10,10,0,0,1-.13,1.66Zm6.85-2.75c0-1.44-.61-3.81-3.23-3.81-2.44,0-3.46,2.21-3.62,3.81Z" transform="translate(-240.98 -216.06)"/></g><g class="cls-14"><path class="cls-15" d="M685,346.87c-21.34-133.59-282.68-133.42-298.9-12" transform="translate(-240.98 -216.06)"/><path class="cls-11" d="M385.3,346.87c-1.69-5.82-4.76-13.11-8.23-17.75l9.23,4.13,9.74-2.73C391.92,334.6,387.81,341.36,385.3,346.87Z" transform="translate(-240.98 -216.06)"/></g><g class="cls-14"><path class="cls-11" d="M481.41,217.14a30.4,30.4,0,0,1,4.44-.33c3,0,5.14.69,6.56,2a7.44,7.44,0,0,1,2.28,5.8,8.57,8.57,0,0,1-2.33,6.29c-1.51,1.51-4,2.33-7.15,2.33a33.93,33.93,0,0,1-3.8-.19Zm2.09,14.31a12.76,12.76,0,0,0,2.11.12c4.47,0,6.89-2.5,6.89-6.86,0-3.82-2.13-6.24-6.55-6.24a12,12,0,0,0-2.45.21Z" transform="translate(-240.98 -216.06)"/><path class="cls-11" d="M498.6,227.68a3.71,3.71,0,0,0,4,4,7.6,7.6,0,0,0,3.22-.6l.36,1.52a9.56,9.56,0,0,1-3.87.72c-3.57,0-5.71-2.36-5.71-5.86s2.06-6.26,5.45-6.26c3.79,0,4.8,3.33,4.8,5.47a8.79,8.79,0,0,1-.07,1Zm6.19-1.51c0-1.34-.55-3.43-2.93-3.43-2.14,0-3.07,2-3.24,3.43Z" transform="translate(-240.98 -216.06)"/><path class="cls-11" d="M509.16,231a5.61,5.61,0,0,0,2.78.84c1.54,0,2.26-.77,2.26-1.73s-.6-1.56-2.16-2.14C510,227.18,509,226,509,224.63c0-1.87,1.52-3.4,4-3.4a5.74,5.74,0,0,1,2.86.72l-.53,1.53a4.46,4.46,0,0,0-2.37-.67c-1.25,0-1.95.72-1.95,1.58s.7,1.4,2.21,2c2,.77,3,1.78,3,3.51,0,2-1.59,3.48-4.35,3.48a6.6,6.6,0,0,1-3.26-.8Z" transform="translate(-240.98 -216.06)"/><path class="cls-11" d="M527.23,232.67a7.74,7.74,0,0,1-3.34.68c-3.5,0-5.78-2.38-5.78-5.93a5.9,5.9,0,0,1,6.24-6.17,7,7,0,0,1,2.93.6l-.48,1.63a4.91,4.91,0,0,0-2.45-.55c-2.67,0-4.11,2-4.11,4.39,0,2.69,1.73,4.35,4,4.35a6,6,0,0,0,2.59-.58Z" transform="translate(-240.98 -216.06)"/><path class="cls-11" d="M529.7,225.11c0-1.37,0-2.54-.1-3.62h1.85l.07,2.28h.1a3.48,3.48,0,0,1,3.22-2.54,2.2,2.2,0,0,1,.6.07v2a3.08,3.08,0,0,0-.72-.07,3,3,0,0,0-2.83,2.71,5.69,5.69,0,0,0-.1,1v6.2H529.7Z" transform="translate(-240.98 -216.06)"/><path class="cls-11" d="M540,218.22a1.31,1.31,0,0,1-2.62,0,1.28,1.28,0,0,1,1.32-1.31A1.25,1.25,0,0,1,540,218.22Zm-2.36,14.89V221.49h2.12v11.62Z" transform="translate(-240.98 -216.06)"/><path class="cls-11" d="M543.16,233.11c.05-.8.1-2,.1-3V216.06h2.09v7.3h0a4.32,4.32,0,0,1,4-2.13c2.88,0,4.92,2.4,4.89,5.92,0,4.16-2.61,6.22-5.21,6.22a4.13,4.13,0,0,1-3.88-2.18h-.08l-.09,1.92Zm2.19-4.66a4.77,4.77,0,0,0,.09.77,3.27,3.27,0,0,0,3.17,2.47c2.21,0,3.53-1.8,3.53-4.46,0-2.33-1.2-4.32-3.46-4.32a3.35,3.35,0,0,0-3.21,2.59,4,4,0,0,0-.12.86Z" transform="translate(-240.98 -216.06)"/><path class="cls-11" d="M558.09,227.68a3.72,3.72,0,0,0,4,4,7.54,7.54,0,0,0,3.21-.6l.36,1.52a9.46,9.46,0,0,1-3.86.72c-3.58,0-5.71-2.36-5.71-5.86s2.06-6.26,5.44-6.26c3.8,0,4.81,3.33,4.81,5.47a6.57,6.57,0,0,1-.08,1Zm6.19-1.51c0-1.34-.55-3.43-2.92-3.43-2.14,0-3.08,2-3.24,3.43Z" transform="translate(-240.98 -216.06)"/><path class="cls-11" d="M568.65,231a5.65,5.65,0,0,0,2.79.84c1.53,0,2.25-.77,2.25-1.73s-.6-1.56-2.16-2.14c-2.09-.74-3.07-1.89-3.07-3.29,0-1.87,1.51-3.4,4-3.4a5.7,5.7,0,0,1,2.85.72l-.52,1.53a4.53,4.53,0,0,0-2.38-.67c-1.25,0-1.94.72-1.94,1.58s.69,1.4,2.2,2c2,.77,3.05,1.78,3.05,3.51,0,2-1.58,3.48-4.34,3.48a6.67,6.67,0,0,1-3.27-.8Z" transform="translate(-240.98 -216.06)"/></g></svg>
\ No newline at end of file
diff --git a/docs/modules/how-barectf-works/pages/ctf-primer.adoc b/docs/modules/how-barectf-works/pages/ctf-primer.adoc
new file mode 100644 (file)
index 0000000..1305d9f
--- /dev/null
@@ -0,0 +1,215 @@
+= CTF primer
+
+The https://diamon.org/ctf/[_**Common Trace Format**_] (CTF) is a binary
+https://en.wikipedia.org/wiki/Tracing_(software)[trace] format which is
+designed to be very fast to write while offering many field types to
+represent data.
+
+A barectf configuration can use the following CTF field types:
+
+* Unsigned/signed xref:yaml:int-ft-obj.adoc[integer] (1 to 64 bits).
+* Unsigned/signed xref:yaml:enum-ft-obj.adoc[enumeration] (1 to
+  64 bits).
+* xref:yaml:real-ft-obj.adoc[Real] (single or double precision).
+* Null-terminated xref:yaml:str-ft-obj.adoc[string].
+* xref:yaml:struct-ft-obj.adoc[Structure] (zero or more named members).
+* xref:yaml:static-array-ft-obj.adoc[Static array] of any field type
+  except structure and dynamic array.
+* xref:yaml:dyn-array-ft-obj.adoc[Dynamic array] of any field type
+  except structure and dynamic array.
+
+CTF makes it possible to describe the alignment and byte order of
+integer, enumeration, and real fields.
+
+A system which produces CTF streams is known as a _CTF producer_.
+
+A system which consumes CTF streams is known as a _CTF consumer_.
+
+[[trace]]
+== CTF trace structure
+
+A _**CTF trace**_ is exactly one metadata stream and one or more
+<<ds,data streams>>:
+
+[.width-50]
+image::ctf-trace.svg[]
+
+The metadata stream describes the trace's data streams with the TSDL
+language. On the file system, its file name must be `metadata`.
+
+The metadata stream describes things such as:
+
+* The xref:yaml:clk-type-obj.adoc[type] of the data stream default clocks.
+* The names of xref:yaml:ert-obj.adoc[event record types].
+* The types of event record fields.
+* The xref:yaml:trace-obj.adoc[trace]'s environment variables.
+
+[[ds]]
+=== Data stream
+
+A _**CTF data stream**_ is a sequence of one or more data
+<<pkt,packets>>:
+
+A xref:yaml:dst-obj.adoc[data stream type] describes data streams.
+
+[.width-100]
+image::ctf-data-stream.svg[]
+
+A packet contains one or more bytes of data.
+
+Although a packet can contain padding itself, from the data stream's
+point of view, there's no padding between packets.
+
+A data stream can have, conceptually:
+
+[[def-clk]]A default clock::
+    Described by a xref:yaml:clk-type-obj.adoc[clock type] in the trace's
+    metadata stream.
++
+<<pkt,Packets>> and event records can contain snapshots, named
+_timestamps_, of their data stream's clock.
+
+[[disc-er-counter]]A counter of discarded event records::
+    Indicates the number of event records which the generated tracer
+    needed to discard for different reasons.
++
+For example, the tracer discards an event record when it doesn't fit the
+current packet and the back end is full (see
+xref:platform:index.adoc[]).
++
+A <<pkt,packet>> can contain a snapshot of this counter.
+
+On the file system, a data stream file:
+
+* Can have any name, except `metadata` and anything which begins with
+  `.`.
+
+* Must be in the same directory as the `metadata` file.
+
+[[pkt]]
+=== Packet
+
+A _**CTF packet**_ is a part of a <<ds,data stream>>.
+
+[.width-100]
+image::ctf-packet.svg[]
+
+A packet contains, in this order:
+
+. [.opt]##Optional##A header structure field, which contains:
++
+** [.opt]##Optional##The CTF magic number.
++
+See the trace type features object's
+xref:yaml:trace-type-obj.adoc#magic-ft-prop[`magic-field-type`
+property].
+
+** [.opt]##Optional##A trace type UUID.
++
+See the trace type object's
+xref:yaml:trace-type-obj.adoc#uuid-prop[`uuid` property] and the
+trace type features object's
+xref:yaml:trace-type-obj.adoc#uuid-ft-prop[`uuid-field-type`
+property].
+
+** [.opt]##Optional##The numeric ID of the data stream type which, in the
+   metadata stream, describes this packet's data stream.
++
+See the trace type features object's
+xref:yaml:trace-type-obj.adoc#dst-id-ft-prop[`data-stream-type-id-field-type`
+property].
+
+** [.opt]##Optional##The numeric ID of this packet's data stream.
+
+. A context structure field, which contains:
++
+** The packet's total size, in bits (always a multiple of{nbsp}8).
++
+See the data stream type packet features object's
+xref:yaml:dst-obj.adoc#total-size-ft-prop[`total-size-field-type`
+property].
+
+** The packet's content size, in bits.
++
+See the data stream type packet features object's
+xref:yaml:dst-obj.adoc#content-size-ft-prop[`content-size-field-type`
+property].
+
+** [.opt]##Optional##The packet's beginning timestamp.
++
+See the data stream type packet features object's
+xref:yaml:dst-obj.adoc#beginning-ts-ft-prop[`beginning-timestamp-field-type`
+property].
+
+** [.opt]##Optional##The packet's end timestamp.
++
+See the data stream type packet features object's
+xref:yaml:dst-obj.adoc#end-ts-ft-prop[`end-timestamp-field-type`
+property].
+
+** [.opt]##Optional##A discarded event record counter snapshot.
++
+See the data stream type packet features object's
+xref:yaml:dst-obj.adoc#disc-er-counter-snapshot-ft-prop[`discarded-event-records-counter-snapshot-field-type`
+property].
+
+** [.opt]##Optional##A packet sequence number.
+** [.opt]##Optional##User fields.
++
+See the data stream type object's
+xref:yaml:dst-obj.adoc#pkt-ctx-ft-extra-members-prop[`packet-context-field-type-extra-members`
+property].
+
+. Zero or more <<er,event records>>.
+
+A packet contains one or more bytes of data.
+
+A packet can have padding (garbage data) after its last event record if
+its total size is different from its content size.
+
+[[er]]
+=== Event record
+
+A _**CTF event record**_ is the result of a tracer writing a
+time-stamped record with user data when an event occurs during a user
+application's execution.
+
+An xref:yaml:ert-obj.adoc[event record type] describes event records.
+
+[.width-80]
+image::ctf-event-record.svg[]
+
+An event record contains, in this order:
+
+. [.opt]##Optional##A header structure field, which contains:
++
+** [.opt]##Optional##The numeric ID of the event record type which, in the
+   metadata stream, describes this event record.
++
+See the data stream type event record features object's
+xref:yaml:dst-obj.adoc#type-id-ft-prop[`type-id-field-type` property].
+
+** [.opt]##Optional##A timestamp.
++
+See the data stream type event record features object's
+xref:yaml:dst-obj.adoc#ts-prop[`timestamp-field-type` property].
+
+. [.opt]##Optional##A common context structure field, which contains
+  user fields.
++
+See the data stream type object's
+xref:yaml:dst-obj.adoc#er-common-ctx-ft-prop[`event-record-common-context-field-type`
+property].
+
+. [.opt]##Optional##A specific context structure field, which contains user
+  fields.
++
+See the event record type object's
+xref:yaml:ert-obj.adoc#spec-ctx-ft-prop[`specific-context-field-type`
+property].
+
+. [.opt]##Optional##A payload structure field, which contains user
+  fields.
++
+See the event record type object's
+xref:yaml:ert-obj.adoc#payload-ft-prop[`payload-field-type` property].
diff --git a/docs/modules/how-barectf-works/pages/index.adoc b/docs/modules/how-barectf-works/pages/index.adoc
new file mode 100644 (file)
index 0000000..d1d2c9c
--- /dev/null
@@ -0,0 +1,100 @@
+= How barectf works
+
+barectf generates a CTF metadata stream and C{nbsp}source files
+from a xref:yaml:index.adoc[**configuration**].
+
+A barectf configuration specifies a xref:yaml:trace-type-obj.adoc[trace
+type], xref:yaml:clk-type-obj.adoc[clock types],
+xref:yaml:dst-obj.adoc[data stream types], xref:yaml:ert-obj.adoc[event
+record types], and other options to generate the files.
+
+With the `barectf` Python package, you build the barectf configuration
+programatically by assembling configuration objects. This documentation
+is _not_ about the Python package.
+
+The xref:cli:index.adoc[`barectf` CLI tool] can read a
+xref:yaml:index.adoc[YAML configuration file] and generate files out of
+it.
+
+[[generated-files]]
+== Generated files
+
+barectf generates the following files from a configuration:
+
+[%autowidth.stretch, cols="d,a"]
+|===
+|File name |Description
+
+|[[metadata]]`metadata`
+|The CTF metadata stream file.
+
+You'll need to place this file in a directory with the
+xref:how-barectf-works:ctf-primer.adoc#ds[data stream] files which your
+application will write through the generated tracer.
+
+See xref:how-barectf-works:index.adoc[] to learn more.
+
+|[[barectf.h]]`barectf.h`
+|The generated tracer's public C{nbsp}header file.
+
+This header contains the prototypes of the packet opening, packet
+closing, and xref:tracing-funcs:index.adoc[tracing functions].
+
+barectf generates one packet opening/closing function per configured
+xref:yaml:dst-obj.adoc[data stream type] and one tracing function per
+configured xref:yaml:ert-obj.adoc[event record type].
+
+Your application and xref:platform:index.adoc[platforms] need to
+include this file.
+
+|`barectf-bitfield.h`
+|Internal macros for the generated tracer (included by `barectf.c`).
+
+|[[barectf.c]]`barectf.c`
+|The generated tracer's C{nbsp}source code.
+|===
+
+Those file names assume that the configuration uses the default
+xref:yaml:cfg-obj.adoc#prefix-prop[prefixes].
+
+All C{nbsp}files are written in ANSI{nbsp}C.
+
+[[ctf-data-stream-file-creation]]
+== CTF data stream file creation
+
+Your application calls the xref:tracing-funcs:index.adoc[tracing
+functions] found in <<barectf.h,`barectf.h`>> to write
+xref:ctf-primer.adoc#er[event records] to CTF
+xref:ctf-primer.adoc#ds[data streams] of
+xref:ctf-primer.adoc#pkt[packets]. Those CTF data streams and the
+generated <<metadata,CTF metadata stream>> form a complete
+xref:ctf-primer.adoc#trace[CTF trace].
+
+How exactly the event timestamps are sourced and the CTF packets are
+appended to some file or memory buffer is controlled by the
+xref:platform:index.adoc[**platform**].
+
+== Data flow
+
+The typical data flow with barectf is:
+
+[.width-80]
+image::barectf-data-flow.svg[]
+
+. barectf reads your xref:yaml:index.adoc[YAML configuration file].
+
+. barectf <<generated-files,generates>> the CTF metadata stream file.
+
+. barectf also generates the tracer's C{nbsp}files.
+
+. You pass your application's C{nbsp}source file(s),
+  xref:platform:index.adoc[platform]
+  C{nbsp}source files, and the generated tracer's C{nbsp}source file to
+  a xref:build:index.adoc[C{nbsp}compiler to create your final
+  application].
+
+. Your application <<ctf-data-stream-file-creation,creates CTF data
+  stream files>> during its execution.
++
+Those data stream files and the metadata stream file of step{nbsp}2 form
+a complete xref:ctf-primer.adoc#trace[CTF trace].
diff --git a/docs/modules/platform/pages/api.adoc b/docs/modules/platform/pages/api.adoc
new file mode 100644 (file)
index 0000000..bf1fa34
--- /dev/null
@@ -0,0 +1,312 @@
+= Platform API
+:us: _
+
+include::ROOT:partial$def-prefix-note.adoc[]
+
+The public header (usually named `barectf.h`) which barectf
+xref:cli:index.adoc[generates] offers an API to write a
+barectf platform.
+
+[[ctx]]
+== Context structure
+
+For a given xref:yaml:dst-obj.adoc[data stream type] named `__NAME__`:
+
+[source,c]
+----
+struct barectf_NAME_ctx {
+    /* ... */
+};
+----
+
+A barectf platform is responsible for allocating and deallocating such
+a structure for each data stream type.
+
+What this structure actually contains is not important; a barectf
+platform only needs to store it.
+
+[[cbs]]
+== Platform callback functions structure
+
+[source,c]
+----
+struct barectf_platform_callbacks {
+    /* Clock source callback functions here */
+
+    /*
+     * Returns whether or not the back end is full.
+     */
+    int (*is_backend_full)(void *user_data);
+
+    /*
+     * Opens the current packet.
+     */
+    void (*open_packet)(void *user_data);
+
+    /*
+     * Closes the current packet.
+     */
+    void (*close_packet)(void *user_data);
+};
+----
+
+Each callback function receives as its `user_data` parameter what you
+passed to the <<init,barectf context initialization function>> as the
+`user_data` parameter.
+
+[[cb-clk-src]]
+=== Clock source
+
+For each xref:yaml:clk-type-obj.adoc[clock type object] `__NAME__`
+within the trace type's
+xref:yaml:trace-type-obj.adoc#clk-types-prop[`clock-types` property],
+the platform callback functions structure contains one clock source
+callback function:
+
+[source,c]
+----
+CTYPE (*NAME_clock_get_value)(void *user_data);
+----
+
+`__CTYPE__` is the clock type object's
+xref:yaml:clk-type-obj.adoc#c-type-prop[`$c-type` property] (`uint32_t`
+by default).
+
+A clock source function returns the clock's current value. The clock
+value must be monotonic.
+
+[[cb-open]]
+=== Packet opening
+
+[source,c]
+----
+void (*open_packet)(void *user_data);
+----
+
+This function must call the <<open,packet opening function>>.
+
+[[cb-close]]
+=== Packet closing
+
+[source,c]
+----
+void (*close_packet)(void *user_data);
+----
+
+This function must:
+
+. Call the <<close,packet closing function>>.
+
+. Copy or move the current packet to the back end.
+
+After step{nbsp}2, this function _can_ set a new packet buffer with
+<<barectf-packet-set-buf-func,`+barectf_packet_set_buf()+`>>. If it
+doesn't, the next calls to the <<open,packet opening function>> and
+xref:tracing-funcs:index.adoc[tracing functions] will write to the
+current packet buffer.
+
+[[cb-is-back-end-full]]
+=== Is the back end full?
+
+[source,c]
+----
+int (*is_backend_full)(void *user_data);
+----
+
+This function returns whether or not the back end is full.
+
+In other words, if a new packet is <<cb-open,opened>> now, does this
+packet have its reserved space in the back end?
+
+[[accessors]]
+== Context property accessors
+
+* {empty}
++
+[source,c]
+----
+uint8_t *barectf_packet_buf_addr(const void *vctx);
+----
++
+Returns the packet buffer address of the barectf context `vctx`.
+
+* {empty}
++
+[source,c]
+----
+uint32_t barectf_packet_buf_size(const void *vctx);
+----
++
+Returns the packet buffer size (bytes) of the barectf context `vctx`.
+
+* {empty}
++
+[source,c]
+----
+int barectf_packet_is_full(const void *vctx);
+----
++
+Returns whether or not the packet of the barectf context `vctx` is full.
+
+* {empty}
++
+[source,c]
+----
+int barectf_packet_is_empty(const void *vctx);
+----
++
+Returns whether or not the packet of the barectf context `vctx` is empty.
+
+* {empty}
++
+[source,c]
+----
+int barectf_packet_is_open(const void *vctx);
+----
++
+Returns whether or not the packet of the barectf context `vctx` is
+open.
+
+* [[barectf-packet-set-buf-func]]{empty}
++
+[source,c]
+----
+void barectf_packet_set_buf(void *vctx, uint8_t *addr, uint32_t size);
+----
++
+Sets the packet buffer of the barectf context `vctx` to the address `addr`
+and the size `size` bytes.
++
+You can only call this function from the <<cb-close,packet closing
+callback function>>.
+
+* {empty}
++
+[source,c]
+----
+uint32_t barectf_discarded_event_records_count(const void *vctx);
+----
++
+Returns the number of
+xref:how-barectf-works:ctf-primer.adoc#disc-er-counter[discarded event
+records] in the barectf context `vctx`.
+
+* {empty}
++
+[source,c]
+----
+int barectf_is_in_tracing_section(const void *vctx);
+----
++
+Returns whether or not there's a current
+xref:tracing-funcs:index.adoc[tracing function] call for the barectf
+context `vctx`.
+
+* {empty}
++
+[source,c]
+----
+volatile const int *barectf_is_in_tracing_section_ptr(const void *vctx);
+----
++
+Returns a pointer to an `int` variable which indicates whether or not
+there's a current xref:tracing-funcs:index.adoc[tracing function] call
+for the barectf context `vctx`.
+
+[[init]]
+== Context initialization
+
+Initializes the <<ctx,barectf context>> `vctx` with the initial packet
+buffer located at the address `buf_addr` and having `buf_size` bytes,
+the <<cbs,platform callback functions>> `cbs`, and the
+user data `data`.
+
+[source,c]
+----
+void barectf_init(void *vctx, uint8_t *buf_addr, uint32_t buf_size,
+                  struct barectf_platform_callbacks cbs, void *user_data);
+----
+
+`user_data` is what the platform callback functions receive as
+their first parameter.
+
+[[open]]
+== Packet opening
+
+For a given xref:yaml:dst-obj.adoc[data stream type] named `__NAME__`, a
+packet opening function opens the current
+xref:how-barectf-works:ctf-primer.adoc#pkt[packet] of a
+<<ctx,barectf context>> `sctx`:
+
+[source,c]
+----
+void barectf_NAME_open_packet(struct barectf_NAME_ctx *sctx);
+----
+
+[[open-params]]
+=== Parameters
+
+For each member `__MNAME__` of the data stream type object's
+xref:yaml:dst-obj.adoc#pkt-ctx-ft-extra-members-prop[`packet-context-field-type-extra-members`
+property], this function has an additional parameter named
+`pc{us}__MNAME__`.
+
+See xref:yaml:ft-obj.adoc#gen-c-types[Generated C{nbsp}types] to
+determine the exact C{nbsp}type of each parameter.
+
+Note that a member with a xref:yaml:dyn-array-ft-obj.adoc[dynamic array
+field type] actually makes barectf generate _two_ adjacent parameters:
+
+. One for the dynamic array's length.
++
+Example: `uint32_t pc___my_array_len`
+
+. One for the dynamic array's data.
++
+Example: `const uint8_t *pc_my_array`
+
+=== Role
+
+A packet opening function:
+
+. Writes initial
+  xref:how-barectf-works:ctf-primer.adoc#pkt[packet header and context]
+  fields.
++
+The source of some of those fields can be <<open-params,parameters>>.
+
+. Saves the offsets of some packet context field to write them at
+  <<close,packet closing>> time.
+
+. Marks the current packet as being open.
+
+In general, a <<cb-open,packet opening platform callback function>> and
+a platform initialization function (for the first packet) call this
+function.
+
+[[close]]
+== Packet closing
+
+For a given xref:yaml:dst-obj.adoc[data stream type] named `__NAME__`, a
+packet closing function closes the current
+xref:how-barectf-works:ctf-primer.adoc#pkt[packet] of a
+<<ctx,barectf context>> `sctx`:
+
+[source,c]
+----
+void barectf_NAME_close_packet(struct barectf_NAME_ctx *sctx);
+----
+
+=== Role
+
+A packet closing function:
+
+. Writes some
+  xref:how-barectf-works:ctf-primer.adoc#pkt[packet context]
+  fields.
+
+. Marks the current packet as being closed.
+
+In general, a <<cb-close,packet closing platform callback function>> and
+a platform finalization function (for the last packet) call this
+function.
diff --git a/docs/modules/platform/pages/example.adoc b/docs/modules/platform/pages/example.adoc
new file mode 100644 (file)
index 0000000..fe45af3
--- /dev/null
@@ -0,0 +1,280 @@
+= Platform example
+:us: _
+
+This barectf platform example is a stripped-down version of the
+https://github.com/efficios/barectf/tree/stable-{page-component-version}/platforms/linux-fs[Linux FS]
+demonstration platform.
+
+== Header
+
+.`my-platform.h`
+[source,c]
+----
+#ifndef _MY_PLATFORM_H
+#define _MY_PLATFORM_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Platform context */
+struct my_platform_ctx;
+
+/* barectf context */
+struct barectf_my_stream_ctx;
+
+/* Platform initialization function */
+struct my_platform_ctx *my_platform_init(unsigned int buf_size,
+                                         const char *data_stream_file_path);
+
+/* Platform finalization function */
+void my_platform_fini(struct my_platform_ctx *platform_ctx);
+
+/* barectf context pointer access function */
+struct barectf_my_stream_ctx *my_platform_get_barectf_ctx(
+    struct my_platform_ctx *platform_ctx);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _MY_PLATFORM_H */
+----
+
+== Source
+
+.`my-platform.c`
+[source,c]
+----
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <assert.h>
+#include <time.h>
+
+#include "barectf.h"
+
+/* Platform context */
+struct my_platform_ctx {
+    struct barectf_my_stream_ctx ctx;
+    FILE *fh;
+};
+
+/* Clock source platform function */
+static uint64_t my_clock_get_value(void * const data)
+{
+    struct timespec ts;
+
+    clock_gettime(CLOCK_REALTIME, &ts);
+    return ts.tv_sec * 1000000000ULL + ts.tv_nsec;
+}
+
+static void write_packet(const struct my_platform_ctx * const platform_ctx)
+{
+    /* Append current packet to data stream file */
+    const size_t nmemb = fwrite(barectf_packet_buf_addr(&platform_ctx->ctx),
+                                barectf_packet_buf_size(&platform_ctx->ctx),
+                                1, platform_ctx->fh);
+
+    assert(nmemb == 1);
+}
+
+/* Full back end check platform function */
+static int is_backend_full(void * const data)
+{
+    return 0;
+}
+
+/* Packet opening platform function */
+static void open_packet(void * const data)
+{
+    struct my_platform_ctx * const platform_ctx = data;
+
+    barectf_my_stream_open_packet(&platform_ctx->ctx);
+}
+
+/* Packet closing platform function */
+static void close_packet(void * const data)
+{
+    struct my_platform_ctx * const platform_ctx = data;
+
+    /* Close packet now */
+    barectf_my_stream_close_packet(&platform_ctx->ctx);
+
+    /* Write packet to file */
+    write_packet(platform_ctx);
+}
+
+/* Platform initialization function */
+struct my_platform_ctx *my_platform_init(const unsigned int buf_size,
+    const char * const data_stream_file_path)
+{
+    char stream_path[256];
+    uint8_t *buf = NULL;
+    struct my_platform_ctx *platform_ctx;
+    struct barectf_platform_callbacks cbs;
+
+    /* Set platform callback functions */
+    cbs.my_clock_clock_get_value = my_clock_get_value;
+    cbs.is_backend_full = is_backend_full;
+    cbs.open_packet = open_packet;
+    cbs.close_packet = close_packet;
+
+    /* Allocate platform context (which contains a barectf context) */
+    platform_ctx = malloc(sizeof(*platform_ctx));
+
+    if (!platform_ctx) {
+        goto error;
+    }
+
+    /* Allocate packet buffer */
+    buf = malloc(buf_size);
+
+    if (!buf) {
+        goto error;
+    }
+
+    /* Open data stream file */
+    platform_ctx->fh = fopen(data_stream_file_path, "wb");
+
+    if (!platform_ctx->fh) {
+        goto error;
+    }
+
+    /* Initialize barectf context */
+    barectf_init(&platform_ctx->ctx, buf, buf_size, cbs, platform_ctx);
+
+    /* Open the first packet */
+    open_packet(platform_ctx);
+
+    goto end;
+
+error:
+    free(platform_ctx);
+    free(buf);
+
+end:
+    /* Return platform context to user */
+    return platform_ctx;
+}
+
+/* Platform finalization function */
+void my_platform_fini(struct my_platform_ctx * const platform_ctx)
+{
+    /* Close current packet if needed */
+    if (barectf_packet_is_open(&platform_ctx->ctx) &&
+            !barectf_packet_is_empty(&platform_ctx->ctx)) {
+        close_packet(platform_ctx);
+    }
+
+    /* Close data stream file */
+    fclose(platform_ctx->fh);
+
+    /* Deallocate packet buffer */
+    free(barectf_packet_buf(&platform_ctx->ctx));
+
+    /* Deallocate platform context */
+    free(platform_ctx);
+}
+
+/* barectf context pointer access function */
+struct barectf_my_stream_ctx *my_platform_get_barectf_ctx(
+    struct my_platform_ctx * const platform_ctx)
+{
+    return &platform_ctx->ctx;
+}
+----
+
+== Components
+
+In this example, you can find all the required components of a barectf
+platform:
+
+xref:api.adoc#cbs[Platform callback functions]::
+    xref:api.adoc#cb-clk-src[Clock source]:::
++
+[source,c]
+----
+static uint64_t my_clock_get_value(void * const data)
+{
+    struct timespec ts;
+
+    clock_gettime(CLOCK_REALTIME, &ts);
+    return ts.tv_sec * 1000000000ULL + ts.tv_nsec;
+}
+----
+
+    xref:api.adoc#cb-open[Packet opening]:::
++
+[source,c]
+----
+static void open_packet(void * const data)
+{
+    struct my_platform_ctx * const platform_ctx = data;
+
+    barectf_my_stream_open_packet(&platform_ctx->ctx);
+}
+----
+
+    xref:api.adoc#cb-close[Packet closing]:::
++
+[source,c]
+----
+static void close_packet(void * const data)
+{
+    struct my_platform_ctx * const platform_ctx = data;
+
+    barectf_my_stream_close_packet(&platform_ctx->ctx);
+    write_packet(platform_ctx);
+}
+----
+
+    xref:api.adoc#cb-is-back-end-full[Is the back end full?]:::
++
+[source,c]
+----
+static int is_backend_full(void * const data)
+{
+    return 0;
+}
+----
++
+This one always returns 0 as we assume that we can always append a
+packet to the data stream file.
+
+Platform initialization function::
++
+[source,c]
+----
+struct my_platform_ctx *my_platform_init(const unsigned int buf_size,
+    const char * const data_stream_file_path)
+{
+    /* ... */
+}
+----
+
+Platform finalization function::
++
+[source,c]
+----
+void my_platform_fini(struct my_platform_ctx * const platform_ctx)
+{
+    if (barectf_packet_is_open(&platform_ctx->ctx) &&
+            !barectf_packet_is_empty(&platform_ctx->ctx)) {
+        close_packet(platform_ctx);
+    }
+
+    /* ... */
+}
+----
+
+barectf context pointer access function::
++
+[source,c]
+----
+struct barectf_my_stream_ctx *my_platform_get_barectf_ctx(
+    struct my_platform_ctx * const platform_ctx)
+{
+    return &platform_ctx->ctx;
+}
+----
diff --git a/docs/modules/platform/pages/index.adoc b/docs/modules/platform/pages/index.adoc
new file mode 100644 (file)
index 0000000..83de4bd
--- /dev/null
@@ -0,0 +1,165 @@
+= Write a barectf platform
+:us: _
+
+A **_barectf platform_** is:
+
+* Callback functions to xref:api.adoc#cb-open[open] and
+  xref:api.adoc#cb-close[close]
+  xref:how-barectf-works:ctf-primer.adoc#pkt[packets].
++
+Those functions allow the platform to control
+where the xref:how-barectf-works:ctf-primer.adoc#ds[data streams]
+are stored (called the _back end_) and how full packets are appended to
+them.
++
+The back end can be anything: files, memory, network, serial, and more.
+
+* A callback function to indicate
+  xref:api.adoc#cb-is-back-end-full[whether or not the back end is full].
+
+* Data stream xref:how-barectf-works:ctf-primer.adoc#def-clk[default
+  clock] xref:api.adoc#cb-clk-src[source callback functions].
+
+* An API for applications to:
+** Initialize the platform.
+** xref:tracing-funcs:index.adoc#obtain-ctx-ptr[Obtain a barectf context
+   pointer].
+** Finalize the platform.
+
+The purpose of a barectf platform is to decouple the packet storing
+and clock sourcing operations from
+the xref:how-barectf-works:ctf-primer.adoc#er[event record] writing
+operations. xref:tracing-funcs:index.adoc[Tracing functions], which the
+application calls, handle the latter.
+
+See xref:example.adoc[] for a complete barectf platform example.
+
+== Steps
+
+To write a barectf platform:
+
+. Write the xref:api.adoc#cbs[platform callback functions].
++
+Each function receives some platform context pointer as its first
+parameter.
+
+. Write a platform initialization function.
++
+This function needs to allocate one or more xref:api.adoc#ctx[barectf
+contexts], xref:api.adoc#init[initialize them] with the platform
+callback functions of step{nbsp}1, and store them.
++
+This function typically xref:api.adoc#open[opens] the first packet.
++
+This function can return a pointer to a platform context structure. This
+structure can also be global if needed.
+
+. Write a platform finalization function.
++
+This function can accept a platform context pointer parameter.
++
+This function typically starts with this, for each barectf context
+of the platform:
++
+[source,c]
+----
+if (barectf_packet_is_open(barectf_ctx) &&
+        !barectf_packet_is_empty(barectf_ctx)) {
+    /* Close the packet here */
+}
+----
++
+where `barectf_ctx` is a pointer to a xref:api.adoc#ctx[barectf
+context].
++
+This function also needs to deallocate the platform's
+xref:api.adoc#ctx[barectf contexts].
+
+. Write one or more xref:api.adoc#ctx[barectf context] pointer accessor
+  functions.
++
+This function can accept a platform context pointer parameter. It
+returns the requested barectf context pointer.
+
+See xref:example.adoc[] for a complete barectf platform example.
+
+== YAML configuration file recommandation
+
+The barectf project recommends that you create a
+partial YAML file containing a base xref:yaml:trace-type-obj.adoc[trace
+type object] as its document for your platform.
+
+This platform's base trace type object can be configured so that it
+matches what your platform expects, for example:
+
+* The xref:yaml:trace-type-obj.adoc#native-bo[native byte order]
+* Specific xref:yaml:clk-type-obj.adoc[clock type objects]
+
+* Specific xref:yaml:dst-obj.adoc[Data stream type objects], possibly
+  with:
+** xref:yaml:dst-obj.adoc#def-clk-type-name-prop[Default clock types]
+** xref:yaml:dst-obj.adoc#pkt-ctx-ft-extra-members-prop[Extra packet
+   context field type members]
+
+An application-specific
+xref:yaml:index.adoc[YAML configuration files]
+can then xref:yaml:include.adoc[include] the platform's trace type
+partial YAML file and augment it.
+
+====
+Consider this partial YAML file:
+
+.`my-platform-trace-type.yaml`
+[source,yaml]
+----
+native-byte-order: little-endian
+clock-types:
+  sys3:
+    frequency: 8000000
+    precision: 80
+    origin-is-unix-epoch: false
+data-stream-types:
+  main:
+    $default-clock-type-name: sys3
+    packet-context-field-type-extra-members:
+      - load: int8
+      - node_id: uint16
+----
+
+An application-specific YAML configuration file can
+xref:yaml:include.adoc[include]
+`my-platform-trace-type.yaml` at the xref:yaml:trace-type-obj.adoc[trace type
+object] level:
+
+[source,yaml]
+----
+--- !<tag:barectf.org,2020/3/config>
+trace:
+  type:
+    $include:
+      - my-platform-trace-type.yaml
+      - stdint.yaml
+      - stdmisc.yaml
+    $field-type-aliases:
+      ipv4-addr:
+        class: static-array
+        length: 4
+        element-field-type: uint8
+    data-stream-types:
+      main:
+        $is-default: true
+        event-record-types:
+          on_send:
+            payload-field-type:
+              class: structure
+              members:
+                - msg: string
+                - dst_ip_addr: ipv4-addr
+          on_recv:
+            payload-field-type:
+              class: structure
+              members:
+                - msg: string
+                - src_ip_addr: ipv4-addr
+----
+====
diff --git a/docs/modules/tracing-funcs/pages/index.adoc b/docs/modules/tracing-funcs/pages/index.adoc
new file mode 100644 (file)
index 0000000..31f21e8
--- /dev/null
@@ -0,0 +1,202 @@
+= Use the generated C{nbsp}tracing functions
+:us: _
+
+include::ROOT:partial$def-prefix-note.adoc[]
+
+The public `barectf.h` header which barectf
+xref:cli:index.adoc[generates] contains two groups of function
+prototypes:
+
+[[tracing-funcs]]Tracing functions::
+    barectf generates one tracing function per configured
+    xref:yaml:ert-obj.adoc[event record type].
++
+A tracing function is named `barectf_trace{us}__DSTNAME__{us}__ERTNAME__()`,
+where `__DSTNAME__` is the xref:yaml:dst-obj.adoc[data stream type] name
+and `__ERTNAME__` the event record type name.
++
+NOTE: If your configuration has a xref:yaml:dst-obj.adoc#is-def-prop[default
+data stream type] named `__DEFDSTNAME__`, then barectf also generates
+C{nbsp}preprocessor definitions named `barectf_trace{us}__ERTNAME__`
+which are set to `barectf_trace{us}__DEFDSTNAME__{us}__ERTNAME__`.
++
+Those are the functions which your application can call to write
+xref:how-barectf-works:ctf-primer.adoc#er[CTF event records] to
+xref:how-barectf-works:ctf-primer.adoc#ds[data streams].
+
+Tracing control functions::
+    barectf generates the `+barectf_is_tracing_enabled()+` and
+    `+barectf_enable_tracing()+` functions to
+    <<control,control>> the tracing activity for a given
+    barectf context.
+
+xref:platform:api.adoc[Platform API] functions::
+    barectf generates one
+    xref:platform:api.adoc#open[packet opening] and one
+    xref:platform:api.adoc#close[packet closing] function
+    per configured xref:yaml:dst-obj.adoc[data stream type].
++
+It also generates a xref:platform:api.adoc#init[barectf context
+initialization] function and a few
+xref:platform:api.adoc#accessors[context property getters and setters].
++
+The suggested barectf approach is for a
+xref:platform:index.adoc[platform] to handle the barectf context
+initialization, packet opening and packet closing operations.
++
+This hides the details of how packets are written to the back end from
+the application so that it only calls <<tracing-funcs,tracing>> and
+<<control,tracing control>> functions.
+
+[[obtain-ctx-ptr]]
+== Obtain a barectf context pointer
+
+<<tracing-funcs,Tracing>> and <<control,tracing control>> functions
+accept a **_barectf context_** pointer as their first parameter.
+
+For example:
+
+[source,c]
+----
+void barectf_my_stream_trace_my_event(struct barectf_my_stream_ctx *sctx,
+                                      uint8_t p_user_id, const char *p_msg);
+
+int barectf_is_tracing_enabled(const void *vctx);
+
+void barectf_enable_tracing(void *vctx, int enable);
+----
+
+A barectf context represents a
+xref:how-barectf-works:ctf-primer.adoc#ds[CTF data stream].
+
+The suggested barectf approach is for a
+xref:platform:index.adoc[platform]'s API to offer a function to obtain
+a pointer to an initialized barectf context.
+
+For example, the
+https://github.com/efficios/barectf/tree/stable-{page-component-version}/platforms/linux-fs[Linux
+FS] demonstration platform offers the
+`+barectf_platform_linux_fs_get_barectf_ctx()+` function to obtain a
+barectf context pointer from a platform context.
+
+== Tracing function parameters
+
+As explained in <<obtain-ctx-ptr>>, a tracing function's first parameter
+is always a barectf context pointer.
+
+The other parameters depend on the xref:yaml:index.adoc[configuration].
+
+For a given xref:yaml:dst-obj.adoc[data stream type] and
+xref:yaml:ert-obj.adoc[event record type], the generated tracing
+function parameters are, in this order:
+
+. For each member `__NAME__` of the
+  xref:yaml:dst-obj.adoc#er-common-ctx-ft-prop[event record common
+  context structure field type], a parameter named `cc{us}__NAME__`.
+
+. For each member `__NAME__` of the
+  xref:yaml:ert-obj.adoc#spec-ctx-ft-prop[event record specific
+  context structure field type], a parameter named `sc{us}__NAME__`.
+
+. For each member `__NAME__` of the
+  xref:yaml:ert-obj.adoc#payload-ft-prop[event record payload structure
+  field type], a parameter named `p{us}__NAME__`.
+
+See xref:yaml:ft-obj.adoc#gen-c-types[Generated C{nbsp}types] to
+determine the exact C{nbsp}type of each parameter.
+
+Note that a member with a xref:yaml:dyn-array-ft-obj.adoc[dynamic array
+field type] actually makes barectf generate _two_ adjacent parameters:
+
+. One for the dynamic array's length.
++
+Example: `uint32_t p___my_array_len`
+
+. One for the dynamic array's data.
++
+Example: `const uint8_t *p_my_array`
+
+====
+Consider this xref:yaml:dst-obj.adoc[data stream type object]
+named `my_stream`:
+
+[source,yaml]
+----
+event-record-common-context-field-type:
+  class: structure
+  members:
+    - pid: uint32
+    - t_level: double
+event-record-types:
+  my_event:
+    specific-context-field-type:
+      class: structure
+      members:
+        - count: uint16
+    payload-field-type:
+      class: structure
+      members:
+        - msg: string
+        - src_ip_addr:
+            field-type:
+              class: static-array
+              length: 4
+              element-field-type: uint8
+----
+
+The generated tracing prototype for the `my_event` event record type
+is:
+
+[source,c]
+----
+void barectf_my_stream_trace_my_event(struct barectf_my_stream_ctx *sctx,
+                                      uint32_t cc_pid, double cc_t_level,
+                                      uint16_t sc_count, const char *p_msg,
+                                      const uint8_t *p_src_ip_addr);
+----
+====
+
+[[control]]
+== Control tracing
+
+You can control the tracing activity for a given
+<<obtain-ctx-ptr,barectf context>> with the following functions:
+
+* {empty}
++
+[source,c]
+----
+int barectf_is_tracing_enabled(const void *vctx);
+----
++
+Returns whether or not tracing is currenty enabled for the barectf
+context `vctx`.
+
+* {empty}
++
+[source,c]
+----
+void barectf_enable_tracing(void *vctx, int enable);
+----
++
+Enables (if `enable` is{nbsp}1) or disables (if `enable` is{nbsp}0)
+tracing for the barectf context `vctx`.
+
+When tracing is disabled for a given barectf context, the
+<<tracing-funcs,tracing functions>> have no effect for this context.
+
+== Concurrent access safety
+
+The C{nbsp}source code which barectf generates doesn't guarantee any
+concurrent access safety (thread safety, reentrancy).
+
+Because barectf generates general ANSI{nbsp}C code with no dependencies,
+it can't know how to synchronize accesses to <<obtain-ctx-ptr,barectf
+context>> structures. As of barectf{nbsp}{page-component-version}, you
+need to protect tracing function calls for a given barectf context with
+your own synchronization primitives.
+
+Note, however, that xref:how-barectf-works:ctf-primer.adoc[CTF] is
+designed for fast multicore/multithread tracing: dedicate one barectf
+context (one xref:how-barectf-works:ctf-primer.adoc#ds[data stream]) per
+core/thread to avoid tracing function locking.
diff --git a/docs/modules/yaml/pages/cfg-obj.adoc b/docs/modules/yaml/pages/cfg-obj.adoc
new file mode 100644 (file)
index 0000000..2ca9da7
--- /dev/null
@@ -0,0 +1,198 @@
+= YAML configuration object
+
+The _**configuration object**_ is the root of a barectf YAML
+configuration document. It describes a complete barectf configuration.
+
+The configuration object must have the YAML tag
+`tag:barectf.org,2020/3/config`.
+
+The configuration object has a mandatory xref:trace-obj.adoc[trace
+object] and <<opts-obj,options>>.
+
+== Properties
+
+[%autowidth.stretch]
+|===
+|Name |Type |Description |{req-abbr} |Default
+
+|`options`
+|<<opts-obj>>
+|Configuration options.
+|No
+|See <<opts-obj>> for default values.
+
+|[[trace-prop]]`trace`
+|xref:trace-obj.adoc[Trace object]
+|Configuration's trace.
+|Yes
+|
+|===
+
+[[opts-obj]]
+== Options object
+
+The options of a configuration object.
+
+=== Properties
+
+[%autowidth.stretch]
+|===
+|Name |Type |Description |Default
+
+|`code-generation`
+|<<code-gen-opts-obj>>
+|Code generation options.
+|See <<code-gen-opts-obj>> for default values.
+|===
+
+[[code-gen-opts-obj]]
+== Code generation options object
+
+The code generation options of a configuration object.
+
+=== Properties
+
+All the properties are optional.
+
+[%autowidth.stretch, cols="d,d,a,d"]
+|===
+|Name |Type |Description |Default
+
+|[[prefix-prop]]`prefix`
+|String or <<prefix-obj,prefix object>>
+|Identifier and file name prefixes.
+
+If the value is the string `__PREFIX__`, then the identifier prefix is
+`__PREFIX___` and the file name prefix is `__PREFIX__`.
+|The identifier prefix `barectf_` and the file name prefix `barectf`.
+
+|`header`
+|<<code-gen-header-opts-obj>>
+|C{nbsp}header generation options.
+|See <<code-gen-header-opts-obj>> default values.
+|===
+
+[[prefix-obj]]
+== Prefix object
+
+Identifier and file name prefixes.
+
+=== Properties
+
+All the properties are required.
+
+[%autowidth.stretch, cols="d,d,a"]
+|===
+|Name |Type |Description
+
+|`file-name`
+|String
+|Prefix of any C{nbsp}file which barectf generates.
+
+barectf adds `-` between this prefix and other file name parts if
+needed.
+
+This prefix must only contain valid characters for a file name.
+
+|`identifier`
+|String
+|Prefix of any public C identifier which barectf generates.
+
+barectf does _not_ add anything between this prefix and the rest of the
+identifier.
+
+For example, if this prefix is `acme_corp_`, then a tracing function
+name could be `+acme_corp_trace_my_event()+`.
+
+This prefix must be a valid C{nbsp}identifier.
+|===
+
+[[code-gen-header-opts-obj]]
+== Code generation header options object
+
+The C{nbsp}header generation options of a configuration object.
+
+=== Properties
+
+All the properties are optional.
+
+[%autowidth.stretch, cols="d,d,a,d", role="can-break"]
+|===
+|Name |Type |Description |Default
+
+|`identifier-prefix-definition`
+|Boolean
+|If this property is true, then barectf generates a public
+C{nbsp}preprocessor definition named `_BARECTF_IDENTIFIER_PREFIX` which
+is set to the configuration's <<prefix-prop,identifier prefix>>.
+|False
+
+|[[def-dst-name-def-prop]]`default-data-stream-type-name-definition`
+|Boolean
+|If this property is true, then barectf generates a public
+C{nbsp}preprocessor definition named
+`_BARECTF_DEFAULT_DATA_STREAM_TYPE_NAME` which is set to the name of the
+trace type's
+xref:dst-obj.adoc#is-def-prop[default data stream type].
+|False
+|===
+
+== Examples
+
+NOTE: The following examples omit the <<trace-prop,trace object>> for
+clarity.
+
+.Basic configuration object.
+====
+[source,yaml]
+----
+--- !<tag:barectf.org,2020/3/config>
+trace:
+  # ...
+----
+====
+
+.Configuration object with custom <<prefix-obj,prefixes>>.
+====
+[source,yaml]
+----
+--- !<tag:barectf.org,2020/3/config>
+options:
+  code-generation:
+    prefix:
+      file-name: acme-corp
+      identifier: acme_corp_
+trace:
+  # ...
+----
+====
+
+.Configuration object with <<code-gen-header-opts-obj,identifier and default data stream type name C{nbsp}preprocessor definitions>>.
+====
+[source,yaml]
+----
+--- !<tag:barectf.org,2020/3/config>
+options:
+  code-generation:
+    header:
+      identifier-prefix-definition: true
+      default-data-stream-type-name-definition: true
+trace:
+  # ...
+----
+====
+
+.Basic configuration object with a YAML directive.
+====
+This https://yaml.org/spec/1.2/spec.html#id2781553[YAML directive]
+indicates that the YAML document honours the YAML{nbsp}1.2
+specification.
+
+[source,yaml]
+----
+%YAML 1.2
+--- !<tag:barectf.org,2020/3/config>
+trace:
+  # ...
+----
+====
diff --git a/docs/modules/yaml/pages/clk-type-obj.adoc b/docs/modules/yaml/pages/clk-type-obj.adoc
new file mode 100644 (file)
index 0000000..41c31cd
--- /dev/null
@@ -0,0 +1,151 @@
+= YAML clock type object
+
+A _**clock type object**_ is the type of data stream
+xref:how-barectf-works:ctf-primer.adoc#def-clk[clocks].
+
+Clock type objects are only found under the
+xref:trace-type-obj.adoc#clk-types-prop[`clock-types` property] of a
+trace type object.
+
+The only purpose of a clock type is to be a
+xref:dst-obj.adoc[data stream type object]'s default
+clock type.
+
+[[props]]
+== Properties
+
+All the properties are optional.
+
+[%autowidth.stretch, cols="d,d,a,d", role="can-break"]
+|===
+|Name |Type |Description |Default
+
+|[[freq-prop]]`frequency`
+|Integer, greater than{nbsp}0
+|Frequency of instances (Hz).
+|1,000,000,000 (1{nbsp}GHz)
+
+|[[offset-prop]]`offset`
+|<<offset-obj>>
+|Offset of instances.
+|See <<offset-obj>> for default values.
+
+|`origin-is-unix-epoch`
+|Boolean
+|True if the origin of instances is the Unix epoch.
+|True
+
+|`precision`
+|Positive integer
+|Precision of instances (cycles).
+|0
+
+|`uuid`
+|xref:common-values.adoc#uuid[UUID]
+|Clock type's UUID.
+|No UUID
+
+|`description`
+|String
+|Clock type's description.
+|No description
+
+|[[c-type-prop]]`$c-type`
+|String
+|Return C{nbsp}type of the clock source function for this clock type.
+
+See xref:platform:index.adoc[] to learn more.
+|`uint32_t`
+
+|[[include-prop]]`$include`
+|Sequence of strings.
+|See xref:include.adoc[].
+|No inclusions
+|===
+
+[[offset-obj]]
+== Clock type offset object
+
+Offset information of a clock type's instances.
+
+=== Properties
+
+All the properties are optional.
+
+[%autowidth.stretch, cols="d,d,a,d"]
+|===
+|Name |Type |Description |Default
+
+|`seconds`
+|Integer
+|Offset in seconds.
+|0
+
+|`cycles`
+|Positive integer
+|Offset in cycles.
+|0
+|===
+
+The two properties form an effective offset (from the clock's origin) as
+such:
+
+----
+seconds + cycles / frequency
+----
+
+`frequency` is a <<freq-prop,clock type property>>.
+
+== Examples
+
+.Basic 1{nbsp}GHz clock type object.
+====
+This empty mapping, when used where a clock type is expected, is a
+valid, default clock type.
+
+[source,yaml]
+----
+{}
+----
+====
+
+.Basic <<freq-prop,100{nbsp}kHz>> clock type object.
+====
+[source,yaml]
+----
+frequency: 100000
+----
+====
+
+.Basic <<freq-prop,1{nbsp}GHz>> clock type object with an `unsigned long long` <<c-type-prop,C{nbsp}type>>.
+====
+[source,yaml]
+----
+$c-type: unsigned long long
+----
+====
+
+.Complete clock type object.
+====
+[source,yaml]
+----
+frequency: 8000000
+offset:
+  seconds: 1600463226
+  cycles: 200000
+origin-is-unix-epoch: false
+precision: 8
+uuid: 79e49040-21b5-42d4-a873-677261696e65
+description: System clock
+$c-type: uint64_t
+----
+====
+
+.Clock type object with an <<include-prop,inclusion>>.
+====
+[source,yaml]
+----
+$include: [base-clock-type.yaml]
+frequency: 8000000
+----
+====
diff --git a/docs/modules/yaml/pages/common-values.adoc b/docs/modules/yaml/pages/common-values.adoc
new file mode 100644 (file)
index 0000000..dbf002d
--- /dev/null
@@ -0,0 +1,40 @@
+= Common YAML values
+
+As of barectf{nbsp}{page-component-version}, the only common values are
+the <<byte-order,byte order>> and the <<uuid,UUID>>.
+
+[[byte-order]]
+== Byte order
+
+A byte order or endianness.
+
+Type::
+    String
+
+Value::
+    One of:
+`little-endian`:::
+`little`:::
+`le`:::
+    Little-endian byte order.
+
+`big-endian`:::
+`big`:::
+`be`:::
+    Big-endian byte order.
+
+[[uuid]]
+== UUID
+
+A https://en.wikipedia.org/wiki/Universally_unique_identifier[universally
+unique identifier].
+
+Type::
+    String
+
+Value::
+    The canonical textual representation of the UUID, for example:
++
+----
+79e49040-21b5-42d4-a873-677261696e65
+----
diff --git a/docs/modules/yaml/pages/dst-obj.adoc b/docs/modules/yaml/pages/dst-obj.adoc
new file mode 100644 (file)
index 0000000..fa63da7
--- /dev/null
@@ -0,0 +1,398 @@
+= YAML data stream type object
+
+A _**data stream type object**_ is the type of a
+xref:how-barectf-works:ctf-primer.adoc#ds[data stream].
+
+A data stream type describes everything a CTF consumer needs to decode
+its instances (data streams).
+
+Data stream type objects are only found under the
+xref:trace-type-obj.adoc#dsts-prop[`data-stream-types` property] of a
+trace type object.
+
+[[props]]
+== Properties
+
+[%autowidth.stretch, cols="d,d,a,d,d", role="can-break"]
+|===
+|Name |Type |Description |{req-abbr} |Default
+
+|[[is-def-prop]]`$is-default`
+|Boolean
+|If this property is true, then this data stream type is its
+xref:trace-type-obj.adoc[trace type]'s default data stream type.
+
+For a generated tracing function `__F__` named
+`+barectf_trace_my_stream_my_event()+`, where `my_stream` is the name of
+the default data stream type, barectf also generates a public
+C{nbsp}preprocessor definition named `barectf_trace_my_event` and set to
+`__F__`.
+
+For a given trace type object, a single data stream type object can
+have this property set to true.
+
+See also the code generation header option object's
+xref:cfg-obj.adoc#def-dst-name-def-prop[`def-dst-name-def-prop`
+property].
+|No
+|False
+
+|[[def-clk-type-name-prop]]`$default-clock-type-name`
+|String
+|Name of the xref:clk-type-obj.adoc[clock type] which describes the
+default clock of this data stream type's instances.
+
+This property's value must be an existing key within this trace type's
+xref:trace-type-obj.adoc#clk-types-prop[`clock-types`] mapping.
+
+When a data stream type has a default clock type, all its instances
+(xref:how-barectf-works:ctf-primer.adoc#ds[data streams])
+have their own default clock.
+
+A data stream clock is an integral counter of _cycles_. With the clock's
+type's xref:clk-type-obj.adoc#freq-prop[frequency] and
+type's xref:clk-type-obj.adoc#offset-prop[offset] properties, you can
+convert a clock value to seconds from its origin.
+
+The header fields of CTF
+xref:how-barectf-works:ctf-primer.adoc#pkt[packets] and
+xref:how-barectf-works:ctf-primer.adoc#er[event records] can contain
+snapshots, named _timestamps_, of the value of their data stream's
+default clock.
+|No
+|No default clock type
+
+|`$features`
+|<<features-obj>>
+|Features of this data stream type's instances.
+|No
+|See <<features-obj>> for default values.
+
+|[[pkt-ctx-ft-extra-members-prop]]`packet-context-field-type-extra-members`
+|Type of the structure field type object's
+xref:struct-ft-obj.adoc#members-prop[`members` property]
+|Extra, user-defined members to be appended to this data stream type's
+packet context structure field type.
+
+For each member name `__NAME__` of this property, the packet opening
+function which barectf generates for this data stream type has an
+additional parameter named `pc___NAME__`.
+
+Member names must be valid xref:index.adoc#tsdl-ident[TSDL identifiers].
+|No
+|No packet context field type extra members
+
+|[[er-common-ctx-ft-prop]]`event-record-common-context-field-type`
+|xref:struct-ft-obj.adoc[Structure field type object] or string
+|
+xref:how-barectf-works:ctf-primer.adoc#er[Event record common context
+field] type of this data stream type.
+
+If this property's value is a string, it must be the name of an existing
+xref:trace-type-obj.adoc#ft-aliases-prop[field type alias].
+
+For each member `__NAME__` of this property, all the
+xref:tracing-funcs:index.adoc[tracing functions] which barectf generates
+for this data stream type have an additional parameter named
+`cc___NAME__`.
+
+Member names must be valid xref:index.adoc#tsdl-ident[TSDL identifiers].
+|No
+|No event record common context field type
+
+|[[erts-prop]]`event-record-types`
+|Mapping of string keys to xref:ert-obj.adoc[event record type objects]
+|Event record types of this data stream type.
+
+Keys of this mapping are event record type names. They must be valid
+C{nbsp}identifiers.
+
+This mapping must contain at least one entry.
+|Yes
+|
+
+|[[include-prop]]`$include`
+|Sequence of strings.
+|See xref:include.adoc[].
+|No
+|No inclusions
+|===
+
+[[features-obj]]
+== Features object
+
+The features of a data stream type object.
+
+=== Properties
+
+All the properties are optional.
+
+[%autowidth.stretch]
+|===
+|Name |Type |Description |Default
+
+|`packet`
+|<<pkt-features-obj>>
+|Features related to xref:how-barectf-works:ctf-primer.adoc#pkt[CTF packets].
+|See <<pkt-features-obj>> for default values.
+
+|`event-record`
+|<<er-features-obj>>
+|Features related to xref:how-barectf-works:ctf-primer.adoc#er[CTF
+event records].
+|See <<er-features-obj>> for default values.
+|===
+
+[[pkt-features-obj]]
+== Packet features object
+
+The packet features of a data stream type object.
+
+As of barectf{nbsp}{page-component-version}, each feature controls
+whether or not some information will be part of the context of each
+xref:how-barectf-works:ctf-primer.adoc#pkt[CTF packet] which the generated
+tracer produces.
+
+You can enable or disable a feature. When you enable one, you can set
+its xref:ft-obj.adoc[field type] explicitly or make barectf choose a
+sane default.
+
+=== Properties
+
+For all the feature properties below, if the value is a boolean:
+
+True::
+    Make barectf use a default field type.
+
+False::
+    Disable the feature (if possible).
+
+All the properties are optional.
+
+[%autowidth.stretch, cols="d,d,a,d", role="can-break"]
+|===
+|Name |Type |Description |Default
+
+|[[total-size-ft-prop]]`total-size-field-type`
+|Unsigned xref:int-ft-obj.adoc[integer field type object], string,
+or boolean
+|Type of packet context's total size field.
+
+If this property's value is a string, it must be the name of an existing
+xref:trace-type-obj.adoc#ft-aliases-prop[field type alias].
+
+The size of this feature's integer field type must be greater than or
+equal to the size of the `content-size-field-type` property's field
+type.
+
+You **can't** disable this feature.
+|True
+
+|[[content-size-ft-prop]]`content-size-field-type`
+|Unsigned xref:int-ft-obj.adoc[integer field type object], string,
+or boolean
+|Type of packet context's content size field.
+
+If this property's value is a string, it must be the name of an existing
+xref:trace-type-obj.adoc#ft-aliases-prop[field type alias].
+
+The size of this feature's integer field type must be less than or equal
+to the size of the `total-size-field-type` property's field type.
+
+You **can't** disable this feature.
+|True
+
+|[[beginning-ts-ft-prop]]`beginning-timestamp-field-type`
+|Unsigned xref:int-ft-obj.adoc[integer field type object], string,
+or boolean
+|Type of packet context's beginning timestamp field.
+
+If this property's value is a string, it must be the name of an existing
+xref:trace-type-obj.adoc#ft-aliases-prop[field type alias].
+|True if this data stream type has a <<def-clk-type-name-prop,default
+clock type>>, or false otherwise.
+
+|[[end-ts-ft-prop]]`end-timestamp-field-type`
+|Unsigned xref:int-ft-obj.adoc[integer field type object], string,
+or boolean
+|Type of packet context's end timestamp field.
+
+If this property's value is a string, it must be the name of an existing
+xref:trace-type-obj.adoc#ft-aliases-prop[field type alias].
+|True if this data stream type has a <<def-clk-type-name-prop,default
+clock type>>, or false otherwise.
+
+|[[disc-er-counter-snapshot-ft-prop]]`discarded-event-records-counter-snapshot-field-type`
+|Unsigned xref:int-ft-obj.adoc[integer field type object], string,
+or boolean
+|Type of packet context's
+xref:how-barectf-works:ctf-primer.adoc#disc-er-counter[discarded event
+record counter] snapshot field.
+
+If this property's value is a string, it must be the name of an existing
+xref:trace-type-obj.adoc#ft-aliases-prop[field type alias].
+|True
+|===
+
+[[er-features-obj]]
+== Event record features object
+
+The event records features of a data stream type object.
+
+As of barectf{nbsp}{page-component-version}, each feature controls
+whether or not some information will be part of the header of each
+xref:how-barectf-works:ctf-primer.adoc#er[CTF event record] which the
+generated tracer produces.
+
+You can enable or disable a feature. When you enable one, you can set
+its xref:ft-obj.adoc[field type] explicitly or make barectf choose a
+sane default.
+
+=== Properties
+
+For all the feature properties below, if the value is a boolean:
+
+True::
+    Make barectf use a default field type.
+
+False::
+    Disable the feature.
+
+All the properties are optional.
+
+[%autowidth.stretch, cols="d,d,a,d", role="can-break"]
+|===
+|Name |Type |Description |Default
+
+|[[type-id-ft-prop]]`type-id-field-type`
+|Unsigned xref:int-ft-obj.adoc[integer field type object], string,
+or boolean
+|Type of event header's xref:ert-obj.adoc[event record type] ID field.
+
+If this property's value is a string, it must be the name of an existing
+xref:trace-type-obj.adoc#ft-aliases-prop[field type alias].
+
+This feature is required when this data stream type has more than one
+event record type (<<erts-prop,`event-record-types` property>>).
+|True
+
+|[[ts-prop]]`timestamp-field-type`
+|Unsigned xref:int-ft-obj.adoc[integer field type object], string,
+or boolean
+|Type of event header's timestamp field.
+
+If this property's value is a string, it must be the name of an existing
+xref:trace-type-obj.adoc#ft-aliases-prop[field type alias].
+|True if this data stream type has a <<def-clk-type-name-prop,default
+clock type>>, or false otherwise.
+|===
+
+== Examples
+
+NOTE: The following examples can omit <<erts-prop,event record type
+objects>> for clarity.
+
+.Basic data stream type object.
+====
+[source,yaml]
+----
+event-record-types:
+  # ...
+----
+====
+
+.Basic <<is-def-prop,default>> data stream type object.
+====
+[source,yaml]
+----
+$is-default: true
+event-record-types:
+  # ...
+----
+====
+
+.Data stream type object with a <<def-clk-type-name-prop,default clock type>>.
+====
+[source,yaml]
+----
+$default-clock-type-name: sys_clock2
+event-record-types:
+  # ...
+----
+====
+
+.Data stream type object with a disabled packet <<disc-er-counter-snapshot-ft-prop,discarded event records counter snapshot field type feature>>.
+====
+[source,yaml]
+----
+$features:
+  packet:
+    discarded-event-records-counter-snapshot-field-type: false
+event-record-types:
+  # ...
+----
+====
+
+.Data stream type object with 16-bit packet <<total-size-ft-prop,total>> and <<content-size-ft-prop,content size field type features>>.
+====
+[source,yaml]
+----
+$features:
+  packet:
+    total-size-field-type: uint16
+    content-size-field-type: uint16
+event-record-types:
+  # ...
+----
+====
+
+.Data stream type object with a disabled event record <<ts-prop,timestamp field type feature>>.
+====
+[source,yaml]
+----
+$features:
+  event-record:
+    timestamp-field-type: false
+event-record-types:
+  # ...
+----
+====
+
+.Data stream type object with <<pkt-ctx-ft-extra-members-prop,packet context field type extra members>>.
+====
+[source,yaml]
+----
+packet-context-field-type-extra-members:
+  - cur_load: int8
+  - node_id: uint16
+  - node_addr: string
+event-record-types:
+  # ...
+----
+====
+
+.Data stream type object with an <<er-common-ctx-ft-prop,event record common context field type>>.
+====
+[source,yaml]
+----
+event-record-common-context-field-type:
+  class: structure
+  members:
+    - pid: uint32
+    - level: double
+event-record-types:
+  # ...
+----
+====
+
+.Data stream type object with <<include-prop,inclusions>>.
+====
+[source,yaml]
+----
+event-record-types:
+  # ...
+$include:
+  - project-b-event-record-types.yaml
+  - common-data-stream-type-features.yaml
+----
+====
diff --git a/docs/modules/yaml/pages/dyn-array-ft-obj.adoc b/docs/modules/yaml/pages/dyn-array-ft-obj.adoc
new file mode 100644 (file)
index 0000000..8822ac2
--- /dev/null
@@ -0,0 +1,119 @@
+= YAML dynamic array field type objects
+
+A _**dynamic array field type object**_ is the type of dynamic
+(variable-length) array data fields, found in
+xref:how-barectf-works:ctf-primer.adoc#ds[data streams].
+
+A dynamic array data field is a sequence of data fields, or _elements_.
+In CTF, the number of elements in a dynamic array data field (its
+length) is the value of a prior integer data field.
+
+[[props]]
+== Properties
+
+[%autowidth.stretch, cols="d,d,a,d"]
+|===
+|Name |Type |Description |{req-abbr}
+
+|[[class-prop]]`class`
+|String
+|This property's value must be `dynamic-array`.
+|Yes if the <<inherit-prop,`$inherit`>> property is not set.
+
+include::partial$ft-obj-inherit-prop.adoc[]
+
+|[[element-ft-prop]]`element-field-type`
+|xref:ft-obj.adoc[Field type object] (except a
+xref:struct-ft-obj.adoc[structure field type object] and a
+dynamic array field type object) or string
+|Type of each element (data fields) in this field type's instances.
+
+If this property's value is a string, it must be the name of an existing
+xref:trace-type-obj.adoc#ft-aliases-prop[field type alias]. This
+field type must _not_ be a structure field type or a dynamic array
+field type.
+|Yes
+|===
+
+== Generated C{nbsp}types
+
+barectf always generates two packet opening or tracing function
+parameters for a dynamic array field type object. Their C{nbsp}types
+are:
+
+Dynamic array's length::
+    `uint32_t`
+
+Dynamic array's data::
+    Pointer to `const __T__`, where `__T__` is the generated C{nbsp}type
+    for the field type object of the
+    <<element-ft-prop,`element-field-type` property>>.
++
+Examples:
++
+[%autowidth.stretch]
+|===
+|Element field type |Generated C{nbsp}type
+
+|8-bit unsigned xref:int-ft-obj.adoc[integer]
+|`const uint8_t *`
+
+|32-bit signed integer
+|`const int32_t *`
+
+|Single-precision xref:real-ft-obj.adoc[real]
+|`const float *`
+
+|xref:str-ft-obj.adoc[String]
+|`const char * const *`
+
+|Static array of 16-bit signed integers
+|`const int16_t * const *`
+
+|Static array of double-precision reals
+|`const double * const *`
+
+|Static array of strings
+|`const char * const * const *`
+
+|Static array of static arrays of 32-bit unsigned integers
+|`const uint32_t * const * const *`
+|===
+
+== Examples
+
+.Dynamic array field type object: <<length-prop,four>> 8-bit unsigned xref:int-ft-obj.adoc[integers].
+====
+[source,yaml]
+----
+class: dynamic-array
+length: 4
+element-field-type: uint8
+----
+====
+
+.Dynamic array field type object: <<length-prop,22>>{nbsp}xref:str-ft-obj.adoc[strings].
+====
+[source,yaml]
+----
+class: dynamic-array
+length: 22
+element-field-type:
+  class: string
+----
+====
+
+.Dynamic array field type object: <<length-prop,five>> xref:static-array-ft-obj.adoc[static arrays] of 32{nbsp}double-precision xref:real-ft-obj.adoc[reals].
+====
+[source,yaml]
+----
+class: dynamic-array
+length: 5
+element-field-type:
+  class: static-array
+  length: 32
+  element-field-type:
+    class: real
+    size: 64
+----
+====
diff --git a/docs/modules/yaml/pages/enum-ft-obj.adoc b/docs/modules/yaml/pages/enum-ft-obj.adoc
new file mode 100644 (file)
index 0000000..6cacd52
--- /dev/null
@@ -0,0 +1,125 @@
+= YAML enumeration field type objects
+
+_**Enumeration field type objects**_ are the types of enumeration data
+fields, found in xref:how-barectf-works:ctf-primer.adoc#ds[data
+streams].
+
+An enumeration data field is an integer data field.
+
+An enumeration field type is an integer field type with
+<<mappings-prop,_mappings_>>. An enumeration field type mapping is a labeled
+set of integer ranges. An enumeration data field can have zero or more
+labels depending on its value.
+
+[[props]]
+== Properties
+
+[%autowidth.stretch, cols="d,d,a,d,a", role="can-break"]
+|===
+|Name |Type |Description |{req-abbr} |Default
+
+|[[class-prop]]`class`
+|String
+|This property's value must be one of:
+
+`unsigned-enumeration`::
+`unsigned-enum`::
+`uenum`::
+    Unsigned enumeration field type
+
+`signed-enumeration`::
+`signed-enum`::
+`senum`::
+    Signed enumeration field type
+|Yes if the <<inherit-prop,`$inherit`>> property is not set.
+|
+
+include::partial$int-ft-obj-base-props.adoc[]
+
+|[[mappings-prop]]`mappings`
+|Mapping of string keys to
+<<enum-ft-mapping-seq,enumeration field type mapping sequences>>
+|Mappings of this enumeration field type.
+
+Each mapping assigns a label to a set of integer ranges.
+|No
+|No mappings
+|===
+
+[[enum-ft-mapping-seq]]
+== Enumeration field type mapping sequence
+
+A YAML sequence of integer ranges, which can be:
+
+A sequence of two integers::
+    The first integer is the range's lower value (included).
++
+The second integer is the range's upper value (included).
+
+An integer::
+    This is equivalent to a sequence of two identical integers.
++
+In other words, `17` is equivalent to `+[17, 17]+`.
+
+== Generated C{nbsp}types
+
+include::partial$int-ft-obj-c-types-table.adoc[]
+
+== Examples
+
+.Basic <<size-prop,8-bit>> unsigned enumeration field type object.
+====
+[source,yaml]
+----
+class: unsigned-enumeration
+size: 8
+----
+====
+
+.<<size-prop,23-bit>> signed enumeration field type object with simple <<mappings-prop,mappings>>.
+====
+[source,yaml]
+----
+class: signed-enumeration
+size: 23
+mappings:
+  A: [2]
+  B: [5]
+  C: [9]
+----
+====
+
+.32-bit-<<align-prop,aligned>> <<size-prop,16-bit>> signed enumeration field type object with <<mappings-prop,mappings>>.
+====
+[source,yaml]
+----
+class: signed-enumeration
+size: 16
+alignment: 32
+mappings:
+  RUNNING:
+    - 17
+    - [19, 24]
+    - -144
+  WAITING:
+    - 18
+    - [-32, -25]
+  STOPPED: [202]
+----
+====
+
+.<<size-prop,32-bit>> unsigned enumeration field type object with a hexadecimal <<pref-disp-base-prop,preferred display base>> and <<mappings-prop,mappings>>.
+====
+[source,yaml]
+----
+class: unsigned-enumeration
+size: 32
+preferred-display-base: hexadecimal
+mappings:
+  steam-machine: [18]
+  on/off:
+    - 15
+    - [200, 1000]
+  the-prime-time-of-your-life: [2]
+----
+====
diff --git a/docs/modules/yaml/pages/ert-obj.adoc b/docs/modules/yaml/pages/ert-obj.adoc
new file mode 100644 (file)
index 0000000..c925350
--- /dev/null
@@ -0,0 +1,146 @@
+= YAML event record type object
+
+An _**event record type object**_ is the type of an
+xref:how-barectf-works:ctf-primer.adoc#er[event record].
+
+An event record type describes parts (specific context and payload
+fields) of what a CTF consumer needs to decode its instances (event
+records). The other parts (header and common context) are described by
+the xref:dst-obj.adoc[data stream type] which contains the event record
+type.
+
+Event record type objects are only found under the
+xref:dst-obj.adoc#erts-prop[`event-record-types` property] of a data
+stream type object.
+
+barectf generates one xref:tracing-funcs:index.adoc[tracing function]
+per event record type.
+
+[[props]]
+== Properties
+
+All the properties are optional.
+
+[%autowidth.stretch, cols="d,d,a,d", role="can-break"]
+|===
+|Name |Type |Description |Default
+
+|[[ll-prop]]`log-level`
+|Positive integer or string
+|Numeric log level of this event record type's instances.
+
+If this property's value is a string, it's the name of an existing
+xref:trace-type-obj.adoc#ll-aliases-prop[log level alias].
+|No log level
+
+|[[spec-ctx-ft-prop]]`specific-context-field-type`
+|xref:struct-ft-obj.adoc[Structure field type object] or string
+|
+xref:how-barectf-works:ctf-primer.adoc#er[Specific context
+field] type of this event record type.
+
+If this property's value is a string, it must be the name of an existing
+xref:trace-type-obj.adoc#ft-aliases-prop[field type alias].
+
+For each member `__NAME__` of this property, the
+xref:tracing-funcs:index.adoc[tracing function] which barectf generates
+for this event record type has an additional parameter named
+`sc___NAME__`.
+
+Member names must be valid xref:index.adoc#tsdl-ident[TSDL identifiers].
+|No specific context field type
+
+|[[payload-ft-prop]]`payload-field-type`
+|xref:struct-ft-obj.adoc[Structure field type object] or string
+|
+xref:how-barectf-works:ctf-primer.adoc#er[Payload field] type of
+this event record type.
+
+If this property's value is a string, it must be the name of an existing
+xref:trace-type-obj.adoc#ft-aliases-prop[field type alias].
+
+For each member `__NAME__` of this property, the
+xref:tracing-funcs:index.adoc[tracing function] which barectf generates
+for this event record type has an additional parameter named
+`p___NAME__`.
+
+Member names must be valid xref:index.adoc#tsdl-ident[TSDL identifiers].
+|No payload field type
+
+|[[include-prop]]`$include`
+|Sequence of strings.
+|See xref:include.adoc[].
+|No inclusions
+|===
+
+== Examples
+
+.Basic event record type object.
+====
+[source,yaml]
+----
+payload-field-type:
+  class: structure
+  members:
+    - msg: string
+----
+====
+
+.Event record type object with a <<ll-prop,log level>>.
+====
+[source,yaml]
+----
+log-level: 12
+payload-field-type:
+  class: structure
+  members:
+    - msg: string
+----
+====
+
+.Event record type object with a <<ll-prop,log level>> (using a xref:trace-type-obj.adoc#ll-aliases-prop[log level alias]).
+====
+[source,yaml]
+----
+log-level: CRITICAL
+payload-field-type:
+  class: structure
+  members:
+    - msg: string
+----
+====
+
+.Event record type object with a <<spec-ctx-ft-prop,specific context field type>>.
+====
+[source,yaml]
+----
+specific-context-field-type:
+  class: structure
+  members:
+    - count:
+        field-type:
+          class: signed-integer
+          size: 32
+payload-field-type:
+  class: structure
+  members:
+    - msg: string
+----
+====
+
+.Event record type object with <<include-prop,inclusions>>.
+====
+[source,yaml]
+----
+payload-field-type:
+  class: structure
+  members:
+    - msg: string
+    - ip_addr:
+        field-type:
+          class: static-array
+          length: 4
+          element-field-type: uint8
+$include: [net-ctx.yaml]
+----
+====
diff --git a/docs/modules/yaml/pages/ft-obj.adoc b/docs/modules/yaml/pages/ft-obj.adoc
new file mode 100644 (file)
index 0000000..4bafbc9
--- /dev/null
@@ -0,0 +1,371 @@
+= YAML field type object
+
+A _**field type object**_ is the type of data field, found in
+xref:how-barectf-works:ctf-primer.adoc#ds[data streams].
+
+A field type object describes what a CTF consumer needs to decode a data
+field.
+
+You can use a xref:trace-type-obj.adoc#ft-aliases-prop[field type alias]
+name (a string) anywhere a field type object is expected.
+
+== Expected usage locations
+
+A field type object is expected at the following locations:
+
+Within another field type object::
++
+--
+* The xref:struct-ft-obj.adoc#member-ft-prop[`field-type` property]
+  of a structure field type member object.
+
+* The `element-field-type` property of a
+  xref:static-array-ft-obj.adoc#element-ft-prop[static] or
+  xref:dyn-array-ft-obj.adoc#element-ft-prop[dynamic field type object].
+--
+
+Within a xref:trace-type-obj.adoc[trace type object]::
++
+--
+* A value of a xref:trace-type-obj.adoc#ft-aliases-prop[field type
+  alias] mapping entry.
+
+* Any property of a
+  xref:trace-type-obj.adoc#features-obj[features object].
+--
+
+Within a xref:dst-obj.adoc[data stream type object]::
++
+--
+* Any property of a
+  xref:dst-obj.adoc#pkt-features-obj[packet features object].
+
+* Any property of an
+  xref:dst-obj.adoc#er-features-obj[event record features object].
+
+* The
+  xref:dst-obj.adoc#er-common-ctx-ft-prop[`event-record-common-context-field-type`
+  property].
+--
+
+Within an xref:ert-obj.adoc[event record type object]::
++
+--
+* The xref:ert-obj.adoc#spec-ctx-ft-prop[`specific-context-field-type`
+  property].
+
+* The xref:ert-obj.adoc#payload-ft-prop[`payload-field-type`
+  property].
+--
+
+== Available field type objects
+
+As of barectf{nbsp}{page-component-version}, the available field type
+objects are:
+
+xref:int-ft-obj.adoc[Integer field type objects]::
+    Describes unsigned and signed integer data fields.
+
+xref:enum-ft-obj.adoc[Enumeration field type objects]::
+    Describes unsigned and signed enumeration data fields.
+
+xref:real-ft-obj.adoc[Real field type object]::
+    Describes single-precision and double-precision real data fields.
+
+xref:str-ft-obj.adoc[String field type object]::
+    Describes null-terminated string data fields.
+
+xref:struct-ft-obj.adoc[Structure field type object]::
+    Describes structure data fields.
+
+xref:static-array-ft-obj.adoc[Static array field type object]::
+    Describes array data fields with a static length.
+
+xref:dyn-array-ft-obj.adoc[Dynamic array field type object]::
+    Describes array data fields with a dynamic (variable) length.
+
+[[gen-c-types]]
+== Generated C{nbsp}types
+
+barectf uses configured field types to generate user data parameters of
+packet opening and tracing functions.
+
+Each field type object page indicates the field type's corresponding
+C{nbsp}type(s).
+
+Here's a summary:
+
+[%autowidth.stretch, cols="d,a"]
+|===
+|Field type |C&#160;type
+
+|Unsigned
+xref:int-ft-obj.adoc[integer]/xref:enum-ft-obj.adoc[enumeration field
+type]
+|Depending on the `size` property:
+
+[1,{nbsp}8]::
+  `uint8_t`
+
+[9,{nbsp}16]::
+  `uint16_t`
+
+[17,{nbsp}32]::
+  `uint32_t`
+
+[33,{nbsp}64]::
+  `uint64_t`
+
+|Signed
+ xref:int-ft-obj.adoc[integer]/xref:enum-ft-obj.adoc[enumeration field
+ type]
+|Depending on the `size` property:
+
+[1,{nbsp}8]::
+  `int8_t`
+
+[9,{nbsp}16]::
+  `int16_t`
+
+[17,{nbsp}32]::
+  `int32_t`
+
+[33,{nbsp}64]::
+  `int64_t`
+
+|xref:real-ft-obj.adoc[Real field type]
+|Depending on the xref:real-ft-obj.adoc#size-prop[`size` property]:
+
+32::
+  `float`
+
+64::
+  `double`
+
+|xref:str-ft-obj.adoc[String field type]
+|`const char *`
+
+|xref:static-array-ft-obj.adoc[Static array field type]
+|Pointer to `const __T__`, where `__T__` is the generated C{nbsp}type
+ for the field type object of the
+ xref:static-array-ft-obj.adoc#element-ft-prop[`element-field-type`
+ property].
+
+|xref:dyn-array-ft-obj.adoc[Dynamic array field type]
+|Two adjacent parameters:
+
+Dynamic length::
+    `uint32_t`
+
+Element::
+    Pointer to `const __T__`, where `__T__` is the generated C{nbsp}type
+    for the field type object of the
+    xref:dyn-array-ft-obj.adoc#element-ft-prop[`element-field-type`
+    property].
+|===
+
+[[inherit]]
+== Inherit a field type object
+
+A field type object can _inherit_ the properties of another field type
+object with the common <<inherit-prop,`$inherit` property>>.
+
+When a field type object __**A**__ inherits another field type object
+__**B**__, the _effective_ field type object is __**A**__ "`patching`"
+__**B**__.
+
+include::partial$patching-rules-table.adoc[]
+
+=== Examples
+
+In the examples below, the name of the base field type object's alias is
+`base`.
+
+.Override scalar property.
+====
+.Base field type object
+[source,yaml]
+----
+class: unsigned-integer
+size: 32
+alignment: 8
+----
+
+.Overlay field type object
+[source,yaml]
+----
+$inherit: base
+size: 16
+----
+
+.Effective field type object
+[source,yaml]
+----
+class: unsigned-integer
+size: 16
+alignment: 8
+----
+====
+
+.Add and override scalar properties.
+====
+.Base field type object
+[source,yaml]
+----
+class: unsigned-integer
+size: 32
+alignment: 8
+----
+
+.Overlay field type object
+[source,yaml]
+----
+$inherit: base
+size: 16
+preferred-display-base: hexadecimal
+----
+
+.Effective field type object
+[source,yaml]
+----
+class: unsigned-integer
+size: 16
+alignment: 8
+preferred-display-base: hexadecimal
+----
+====
+
+.Append to sequence property.
+====
+.Base field type object
+[source,yaml]
+----
+class: signed-enumeration
+mappings:
+  COMPOSE:
+    - 56
+    - [100, 299]
+  DIRTY: [0]
+----
+
+.Overlay field type object
+[source,yaml]
+----
+$inherit: base
+size: 16
+mappings:
+  COMPOSE:
+    - -22
+----
+
+.Effective field type object
+[source,yaml]
+----
+class: signed-enumeration
+size: 16
+mappings:
+  COMPOSE:
+    - 56
+    - [100, 299]
+    - -22
+  DIRTY: [0]
+----
+====
+
+.Add to nested mapping property.
+====
+.Base field type object
+[source,yaml]
+----
+class: structure
+members:
+  - msg: string
+  - user_id: uint16
+----
+
+.Overlay field type object
+[source,yaml]
+----
+$inherit: base
+members:
+  - src_ip_addr:
+      field-type:
+        class: static-array
+        length: 4
+        element-field-type: uint8
+  - user_id: int8
+----
+
+.Effective field type object
+[source,yaml]
+----
+class: structure
+members:
+  - msg: string
+  - user_id: int8
+  - src_ip_addr:
+      field-type:
+        class: static-array
+        length: 4
+        element-field-type: uint8
+----
+====
+
+[[props]]
+== Common properties
+
+All field type objects require that the <<class-prop,`class`>> _or_ the
+<<inherit-prop,`$inherit` property>> be set, but not both.
+
+[%autowidth.stretch, cols="d,d,a,d"]
+|===
+|Name |Type |Description |Required?
+
+|[[class-prop]]`class`
+|String
+|Class of this field type amongst:
+
+`unsigned-integer`::
+`unsigned-int`::
+`uint`::
+    Unsigned xref:int-ft-obj.adoc[integer field type]
+
+`signed-integer`::
+`signed-int`::
+`sint`::
+    Signed xref:int-ft-obj.adoc[integer field type]
+
+`unsigned-enumeration`::
+`unsigned-enum`::
+`uenum`::
+    Unsigned xref:enum-ft-obj.adoc[enumeration field type]
+
+`signed-enumeration`::
+`signed-enum`::
+`senum`::
+    Signed xref:enum-ft-obj.adoc[enumeration field type]
+
+`real`::
+    xref:real-ft-obj.adoc[Real field type]
+
+`string`::
+`str`::
+    xref:str-ft-obj.adoc[String field type]
+
+`structure`::
+`struct`::
+    xref:struct-ft-obj.adoc[Structure field type]
+
+`static-array`::
+    xref:static-array-ft-obj.adoc[Static array field type]
+
+`dynamic-array`::
+    xref:dyn-array-ft-obj.adoc[Dynamic array field type]
+|Yes if the <<inherit-prop,`$inherit`>> property is not set.
+
+|[[inherit-prop]]`$inherit`
+|String
+|Name of a xref:trace-type-obj.adoc#ft-aliases-prop[field type alias]
+from which to <<inherit,inherit>>.
+|Yes if the <<class-prop,`class`>> property is not set.
+|===
diff --git a/docs/modules/yaml/pages/include.adoc b/docs/modules/yaml/pages/include.adoc
new file mode 100644 (file)
index 0000000..28eb2f7
--- /dev/null
@@ -0,0 +1,228 @@
+= Include partial YAML files
+
+You can include a partial YAML file from specific objects within the
+xref:cfg-obj.adoc[configuration object]:
+
+* xref:trace-obj.adoc[Trace object]
+* xref:trace-type-obj.adoc[Trace type object]
+* xref:clk-type-obj.adoc[Clock type object]
+* xref:dst-obj.adoc[Data stream type object]
+* xref:ert-obj.adoc[Event record type object]
+
+Each of the objects above can have an `$include` property which is a
+sequence of names of files to include.
+
+By choosing where to include partial YAML files strategically, you can
+split a configuration object into multiple reusable parts for different
+systems or projects.
+
+== Inclusion file search
+
+barectf tries to find each file of an `$include` property sequence in
+specific directories.
+
+When using the `barectf` CLI tool's
+xref:cli:usage.adoc#generate-command[`generate`] or
+xref:cli:usage.adoc#show-effective-configuration-command[`show-effective-configuration`]
+commands, the inclusion directory search order is:
+
+. The value of each
+  xref:cli:usage.adoc#generate-include-dir-option[`+--include-dir+`]
+  option, in order.
+
+. The current working directory.
+
+. The directory containing the <<std,standard inclusion files>> (like
+  `stdint.yaml` and `stdmisc.yaml`).
+
+By default, if `barectf` can't find an inclusion file, the command
+prints an error and xref:cli:usage.adoc#exit-status[exits] with a
+non-zero status. Force `barectf` to continue silently instead with its
+xref:cli:usage.adoc#generate-ignore-include-not-found-option[`+--ignore-include-not-found+`]
+option.
+
+== Inclusion rules
+
+With the `$include` property, an object _includes_ the properties of
+one or more YAML documents.
+
+barectf processes the items of the `$include` property sequence
+in order.
+
+When an object __**A**__ includes a YAML document __**B**__, the
+_effective_ object is __**A**__ "`patching`" __**B**__.
+
+include::partial$patching-rules-table.adoc[]
+
+=== Examples
+
+.Override scalar property (xref:ert-obj.adoc[event record type object]).
+====
+.`base.yaml`
+[source,yaml]
+----
+log-level: WARN
+payload-field-type:
+  class: structure
+  members:
+    - msg: string
+    - msg_id: uint16
+----
+
+.Overlay event record type object
+[source,yaml]
+----
+$include: [base.yaml]
+log-level: ERROR
+----
+
+.Effective event record type object
+[source,yaml]
+----
+log-level: ERROR
+payload-field-type:
+  class: structure
+  members:
+    - msg: string
+    - msg_id: uint16
+----
+====
+
+.Add and override scalar properties (xref:clk-type-obj.adoc[clock type object]).
+====
+.`base.yaml`
+[source,yaml]
+----
+frequency: 1000000
+offset:
+  seconds: 1992839
+----
+
+.Overlay clock type object
+[source,yaml]
+----
+$include: [base.yaml]
+frequency: 8000000
+origin-is-unix-epoch: false
+----
+
+.Effective clock type object
+[source,yaml]
+----
+frequency: 8000000
+offset:
+  seconds: 1992839
+origin-is-unix-epoch: false
+----
+====
+
+.Append to sequence property (xref:trace-type-obj.adoc[trace type object]).
+====
+.`base.yaml`
+[source,yaml]
+----
+$field-type-aliases:
+  my-enum:
+    class: signed-enumeration
+    mappings:
+      COMPOSE:
+        - 56
+        - [100, 299]
+      DIRTY: [0]
+----
+
+.Overlay trace type object
+[source,yaml]
+----
+$include: [base.yaml]
+$field-type-aliases:
+  my-enum:
+    size: 16
+    mappings:
+      COMPOSE:
+        - -22
+# ...
+----
+
+.Effective trace type object
+[source,yaml]
+----
+$field-type-aliases:
+  my-enum:
+    class: signed-enumeration
+    size: 16
+    mappings:
+      COMPOSE:
+        - 56
+        - [100, 299]
+        - -22
+      DIRTY: [0]
+# ...
+----
+====
+
+.Add to nested mapping property (event record type object).
+====
+.`base.yaml`
+[source,yaml]
+----
+specific-context-field-type:
+  class: structure
+  members:
+    - msg: string
+    - user_id: uint16
+----
+
+.Overlay event record type object
+[source,yaml]
+----
+$include: [base.yaml]
+specific-context-field-type:
+  class: structure
+  members:
+    - src_ip_addr:
+        field-type:
+          class: static-array
+          length: 4
+          element-field-type: uint8
+    - user_id: int8
+----
+
+.Effective event record type object
+[source,yaml]
+----
+specific-context-field-type:
+  class: structure
+  members:
+    - msg: string
+    - user_id: int8
+    - src_ip_addr:
+        field-type:
+          class: static-array
+          length: 4
+          element-field-type: uint8
+----
+====
+
+[[std]]
+== Standard partial YAML files
+
+The barectf project ships with a few "`standard`" partial YAML files
+to be included from a xref:trace-type-obj.adoc[trace type object]:
+
+https://github.com/efficios/barectf/blob/stable-{page-component-version}/barectf/include/3/stdint.yaml[`stdint.yaml`]::
+    Standard xref:int-ft-obj.adoc[integer]
+    xref:trace-type-obj.adoc#ft-aliases-prop[field type aliases], like
+    `uint8`, `byte-packed-sint16`, and `bit-packed-uint64`.
+
+https://github.com/efficios/barectf/blob/stable-{page-component-version}/barectf/include/3/stdreal.yaml[`stdreal.yaml`]::
+    Standard xref:real-ft-obj.adoc[real] field type aliases, like
+    `float` and `double`.
+
+https://github.com/efficios/barectf/blob/stable-{page-component-version}/barectf/include/3/stdmisc.yaml[`stdmisc.yaml`]::
+    The `string` and `str` xref:str-ft-obj.adoc[string] field type
+    aliases.
+
+https://github.com/efficios/barectf/blob/stable-{page-component-version}/barectf/include/3/lttng-ust-log-levels.yaml[`lttng-ust-log-levels.yaml`]::
+    xref:trace-type-obj.adoc#ll-aliases-prop[Log level aliases] which
+    correspond to the https://lttng.org/[LTTng-UST] log levels.
diff --git a/docs/modules/yaml/pages/index.adoc b/docs/modules/yaml/pages/index.adoc
new file mode 100644 (file)
index 0000000..9ef5f73
--- /dev/null
@@ -0,0 +1,113 @@
+= Write a barectf YAML configuration file
+
+A barectf configuration controls how barectf generates a tracer, for
+example:
+
+* What are the event record types for which to generate
+  xref:tracing-funcs:index.adoc[tracing functions]?
++
+In other words, what are the tracing function names and what are their
+parameter types and names?
+
+* Does a data stream have a clock source? If so, what's the clock source
+  function's return C{nbsp}type?
+
+* What's the identifier prefix for the C{nbsp}source code which barectf
+  generates?
++
+By default, a tracing function name could be
+`+barectf_trace_my_stream_my_event()+`, but it can also be
+`+my_company_trace_my_stream_my_event()+`.
+
+barectf supports two methods to write a configuration:
+
+. Create and assemble configuration objects with the barectf Python API
+  (`barectf` package).
+
+. Write a configuration in https://yaml.org/[YAML].
+
+This section is about method{nbsp}2.
+
+Read xref:yaml-primer.adoc[] to learn more about the YAML language.
+
+A barectf YAML configuration document is a
+xref:yaml:cfg-obj.adoc[configuration object].
+
+[NOTE]
+====
+In a barectf YAML configuration, a xref:yaml-primer.adoc#scalar[null
+value] always means to use the default value.
+
+This is useful when taking into account the xref:include.adoc[partial
+YAML file inclusion] or xref:ft-obj.adoc#inherit[field type object
+inheritance] features: the overriding object can reset properties to
+their default values.
+====
+
+[[stages]]
+== Processing stages
+
+barectf goes through the following stages when it processes a YAML
+configuration:
+
+. xref:include.adoc[Include], recursively, partial YAML files.
+
+. Expand xref:trace-type-obj.adoc#ft-aliases-prop[field type aliases].
++
+Replace every field type alias with its full xref:ft-obj.adoc[field type
+object], recursively.
+
+. Apply xref:ft-obj.adoc#inherit[field type object inheritance].
+
+. Expand xref:trace-type-obj.adoc#ll-aliases-prop[log level aliases].
++
+Replace every log level alias with its numeric value.
+
+. Normalize property values.
++
+If more than one value mean the same thing (for example,
+xref:common-values.adoc#byte-order[`be` and
+`big-endian`]), prefer one version.
+
+A xref:cfg-obj.adoc[configuration object], after step{nbsp}5, is known
+as an _effective configuration object_. The
+xref:cli:usage.adoc#show-effective-configuration-command[`barectf show-effective-configuration`
+CLI command] shows the effective version of a YAML configuration file.
+
+[[tsdl-ident]]
+== TSDL identifier
+
+Many barectf YAML objects require that a given string key or value
+be a valid TSDL identifier.
+
+As per https://diamon.org/ctf/v1.8.3/[CTF{nbsp}1.8.3], a valid TSDL
+identifier is any valid C{nbsp}identifier which is __not__ one of:
+
+* `align`
+* `callsite`
+* `const`
+* `char`
+* `clock`
+* `double`
+* `enum`
+* `env`
+* `event`
+* `floating_point`
+* `float`
+* `integer`
+* `int`
+* `long`
+* `short`
+* `signed`
+* `stream`
+* `string`
+* `struct`
+* `trace`
+* `typealias`
+* `typedef`
+* `unsigned`
+* `variant`
+* `void`
+* `_Bool`
+* `_Complex`
+* `_Imaginary`
diff --git a/docs/modules/yaml/pages/int-ft-obj.adoc b/docs/modules/yaml/pages/int-ft-obj.adoc
new file mode 100644 (file)
index 0000000..59ee44e
--- /dev/null
@@ -0,0 +1,75 @@
+= YAML integer field type objects
+
+_**Integer field type objects**_ are the types of integer data fields,
+found in xref:how-barectf-works:ctf-primer.adoc#ds[data streams].
+
+[[props]]
+== Properties
+
+[%autowidth.stretch, cols="d,d,a,d,a", role="can-break"]
+|===
+|Name |Type |Description |{req-abbr} |Default
+
+|[[class-prop]]`class`
+|String
+|This property's value must be one of:
+
+`unsigned-integer`::
+`unsigned-int`::
+`uint`::
+    Unsigned integer field type
+
+`signed-integer`::
+`signed-int`::
+`sint`::
+    Signed integer field type
+|Yes if the <<inherit-prop,`$inherit`>> property is not set.
+|
+
+include::partial$int-ft-obj-base-props.adoc[]
+
+|===
+
+== Generated C{nbsp}types
+
+include::partial$int-ft-obj-c-types-table.adoc[]
+
+== Examples
+
+.Basic <<size-prop,8-bit>> unsigned integer field type object.
+====
+[source,yaml]
+----
+class: unsigned-integer
+size: 8
+----
+====
+
+.<<size-prop,23-bit>> signed integer field type object.
+====
+[source,yaml]
+----
+class: signed-integer
+size: 23
+----
+====
+
+.32-bit-<<align-prop,aligned>> <<size-prop,16-bit>> signed integer field type object.
+====
+[source,yaml]
+----
+class: signed-integer
+size: 16
+alignment: 32
+----
+====
+
+.<<size-prop,32-bit>> unsigned integer field type object with a hexadecimal <<pref-disp-base-prop,preferred display base>>.
+====
+[source,yaml]
+----
+class: unsigned-integer
+size: 32
+preferred-display-base: hexadecimal
+----
+====
diff --git a/docs/modules/yaml/pages/real-ft-obj.adoc b/docs/modules/yaml/pages/real-ft-obj.adoc
new file mode 100644 (file)
index 0000000..c065d67
--- /dev/null
@@ -0,0 +1,85 @@
+= YAML real field type object
+
+A _**real field type object**_ is the type of floating point number data
+fields, found in xref:how-barectf-works:ctf-primer.adoc#ds[data
+streams].
+
+[[props]]
+== Properties
+
+[%autowidth.stretch, cols="d,d,a,d,a"]
+|===
+|Name |Type |Description |{req-abbr} |Default
+
+|[[class-prop]]`class`
+|String
+|This property's value must be `real`.
+|Yes if the <<inherit-prop,`$inherit`>> property is not set.
+|
+
+include::partial$ft-obj-inherit-prop.adoc[]
+|
+
+|[[size-prop]]`size`
+|Positive integer
+|Size of this field type's instances (bits).
+
+This property's value must be one of:
+
+32::
+    https://en.wikipedia.org/wiki/Single-precision_floating-point_format[Single-precision floating point number]
+    instances (binary32).
+
+64::
+    https://en.wikipedia.org/wiki/Double-precision_floating-point_format[Double-precision floating point number]
+    instances (binary64).
+|Yes
+|
+
+|[[align-prop]]`alignment`
+|Power-of-two integer
+|Alignment of the first bit of this field type's instances within a
+xref:how-barectf-works:ctf-primer.adoc#pkt[CTF{nbsp}packet] (bits).
+|No
+|8
+|===
+
+== Generated C{nbsp}types
+
+Depending on the value of the <<size-prop,`size` property>>:
+
+32::
+    `float`
+
+64::
+    `double`
+
+== Examples
+
+.Basic <<size-prop,single-precision>> real field type object.
+====
+[source,yaml]
+----
+class: real
+size: 32
+----
+====
+
+.Basic <<size-prop,double-precision>> real field type object.
+====
+[source,yaml]
+----
+class: real
+size: 64
+----
+====
+
+.64-bit-<<align-prop,aligned>> <<size-prop,single-precision>> real field type object.
+====
+[source,yaml]
+----
+class: real
+size: 32
+alignment: 64
+----
+====
diff --git a/docs/modules/yaml/pages/static-array-ft-obj.adoc b/docs/modules/yaml/pages/static-array-ft-obj.adoc
new file mode 100644 (file)
index 0000000..df2a509
--- /dev/null
@@ -0,0 +1,117 @@
+= YAML static array field type objects
+
+A _**static array field type object**_ is the type of static array data
+fields, found in xref:how-barectf-works:ctf-primer.adoc#ds[data
+streams].
+
+A static array data field is a sequence of data fields, or
+_elements_. In CTF, the number of elements in a static array data field
+(its length) is found in the
+xref:how-barectf-works:ctf-primer.adoc#trace[metadata stream].
+
+[[props]]
+== Properties
+
+[%autowidth.stretch, cols="d,d,a,d"]
+|===
+|Name |Type |Description |{req-abbr}
+
+|[[class-prop]]`class`
+|String
+|This property's value must be `static-array`.
+|Yes if the <<inherit-prop,`$inherit`>> property is not set.
+
+include::partial$ft-obj-inherit-prop.adoc[]
+
+|[[length-prop]]`length`
+|Positive integer
+|Number of elements in this field type's instances.
+|Yes
+
+|[[element-ft-prop]]`element-field-type`
+|xref:ft-obj.adoc[Field type object] (except a
+xref:struct-ft-obj.adoc[structure field type object] and a
+xref:dyn-array-ft-obj.adoc[dynamic array field type object]) or string
+|Type of each element (data fields) in this field type's instances.
+
+If this property's value is a string, it must be the name of an existing
+xref:trace-type-obj.adoc#ft-aliases-prop[field type alias]. This
+field type must _not_ be a structure field type or a dynamic array
+field type.
+|Yes
+|===
+
+== Generated C{nbsp}types
+
+Pointer to `const __T__`, where `__T__` is the generated C{nbsp}type for
+the field type object of the <<element-ft-prop,`element-field-type`
+property>>.
+
+Examples:
+
+[%autowidth.stretch]
+|===
+|Element field type |Generated C{nbsp}type
+
+|8-bit unsigned xref:int-ft-obj.adoc[integer]
+|`const uint8_t *`
+
+|32-bit signed integer
+|`const int32_t *`
+
+|Single-precision xref:real-ft-obj.adoc[real]
+|`const float *`
+
+|xref:str-ft-obj.adoc[String]
+|`const char * const *`
+
+|Static array of 16-bit signed integers
+|`const int16_t * const *`
+
+|Static array of double-precision reals
+|`const double * const *`
+
+|Static array of strings
+|`const char * const * const *`
+
+|Static array of static arrays of 32-bit unsigned integers
+|`const uint32_t * const * const *`
+|===
+
+== Examples
+
+.Static array field type object: <<length-prop,four>> 8-bit unsigned xref:int-ft-obj.adoc[integers].
+====
+[source,yaml]
+----
+class: static-array
+length: 4
+element-field-type: uint8
+----
+====
+
+.Static array field type object: <<length-prop,22>>{nbsp}xref:str-ft-obj.adoc[strings].
+====
+[source,yaml]
+----
+class: static-array
+length: 22
+element-field-type:
+  class: string
+----
+====
+
+.Static array field type object: <<length-prop,five>> static arrays of 32{nbsp}double-precision xref:real-ft-obj.adoc[reals].
+====
+[source,yaml]
+----
+class: static-array
+length: 5
+element-field-type:
+  class: static-array
+  length: 32
+  element-field-type:
+    class: real
+    size: 64
+----
+====
diff --git a/docs/modules/yaml/pages/str-ft-obj.adoc b/docs/modules/yaml/pages/str-ft-obj.adoc
new file mode 100644 (file)
index 0000000..83e07e8
--- /dev/null
@@ -0,0 +1,37 @@
+= YAML string field type object
+
+A _**string field type object**_ is the type of null-terminated string
+data fields, found in xref:how-barectf-works:ctf-primer.adoc#ds[data
+streams].
+
+[[props]]
+== Properties
+
+[%autowidth.stretch, cols="d,d,a,d"]
+|===
+|Name |Type |Description |Required?
+
+|[[class-prop]]`class`
+|String
+|This property's value must be one of:
+
+* `string`
+* `str`
+|Yes if the <<inherit-prop,`$inherit`>> property is not set.
+
+include::partial$ft-obj-inherit-prop.adoc[]
+|===
+
+== Generated C{nbsp}type
+
+`const char *`
+
+== Example
+
+.Basic string field type object.
+====
+[source,yaml]
+----
+class: string
+----
+====
diff --git a/docs/modules/yaml/pages/struct-ft-obj.adoc b/docs/modules/yaml/pages/struct-ft-obj.adoc
new file mode 100644 (file)
index 0000000..6223440
--- /dev/null
@@ -0,0 +1,130 @@
+= YAML structure field type objects
+
+A _**structure field type object**_ is the type of structure data
+fields, found in xref:how-barectf-works:ctf-primer.adoc#ds[data
+streams].
+
+A structure data field is a sequence of named data fields, or
+_members_. In CTF, the names of those members are found in the
+xref:how-barectf-works:ctf-primer.adoc#trace[metadata stream].
+
+[[props]]
+== Properties
+
+[%autowidth.stretch, cols="d,a,a,d,a"]
+|===
+|Name |Type |Description |{req-abbr} |Default
+
+|[[class-prop]]`class`
+|String
+|This property's value must be one of:
+
+* `structure`
+* `struct`
+|Yes if the <<inherit-prop,`$inherit`>> property is not set.
+|
+
+include::partial$ft-obj-inherit-prop.adoc[]
+|
+
+|[[min-align-prop]]`minimum-alignment`
+|Power-of-two integer
+|_Minimum_ alignment of the first bit of this field type's instances
+within a xref:how-barectf-works:ctf-primer.adoc#pkt[CTF{nbsp}packet]
+(bits).
+|No
+|1
+
+|[[members-prop]]`members`
+|Sequence of mappings, where each mapping has a single entry:
+
+Key::
+    Member's name.
+
+Value::
+    <<struct-ft-member-obj,Structure field type member object>>
+    or string.
+
+This sequence is considered to be an _ordered mapping_, similar to
+YAML's https://yaml.org/type/omap.html[`+!!omap+`] type. Therefore,
+each mapping key must be unique.
+|Members of this structure field type.
+
+If a mapping's value is a string, it must be the name of an existing
+xref:trace-type-obj.adoc#ft-aliases-prop[field type alias]. This
+field type must _not_ be a structure field type.
+|No
+|No members
+|===
+
+[[struct-ft-member-obj]]
+== Structure field type member object
+
+A member within a structure field type object.
+
+=== Properties
+
+[%autowidth.stretch, cols="d,d,a,d"]
+|===
+|Name |Type |Description |{req-abbr}
+
+|[[member-ft-prop]]`field-type`
+|xref:ft-obj.adoc[Field type object] (except a structure field type
+object) or string
+|Member's field type.
+
+If this property's value is a string, it must be the name of an existing
+xref:trace-type-obj.adoc#ft-aliases-prop[field type alias]. This
+field type must _not_ be a structure field type.
+|Yes
+|===
+
+== Examples
+
+.Basic structure field type object with no <<members-prop,members>>.
+====
+[source,yaml]
+----
+class: structure
+----
+====
+
+.Structure field type object with three <<members-prop,members>> using xref:trace-type-obj.adoc#ft-aliases-prop[field type aliases].
+====
+[source,yaml]
+----
+class: structure
+members:
+  - msg: string
+  - msg_id: uint32
+  - src_ip_addr: ipv4
+----
+====
+
+.Structure field type object with one <<struct-ft-member-obj,member object>>.
+====
+[source,yaml]
+----
+class: structure
+members:
+  - msg: string
+  - msg_id:
+      field-type:
+        class: unsigned-integer
+        size: 32
+  - src_ip_addr: ipv4
+----
+====
+
+.Structure field type object with an explicit <<min-align-prop,minimum alignment>>.
+====
+[source,yaml]
+----
+class: structure
+minimum-alignment: 64
+members:
+  - msg: string
+  - msg_id: uint32
+  - src_ip_addr: ipv4
+----
+====
diff --git a/docs/modules/yaml/pages/trace-obj.adoc b/docs/modules/yaml/pages/trace-obj.adoc
new file mode 100644 (file)
index 0000000..74dccd5
--- /dev/null
@@ -0,0 +1,77 @@
+= YAML trace object
+
+A _**trace object**_ represents a
+xref:how-barectf-works:ctf-primer.adoc[CTF trace].
+
+A trace object has a xref:trace-type-obj.adoc[type] and an
+optional environment.
+
+As of barectf{nbsp}{page-component-version}, a
+xref:cfg-obj.adoc[configuration object] has a single trace object.
+
+== Properties
+
+[%autowidth.stretch, cols="d,d,a,d,d"]
+|===
+|Name |Type |Description |{req-abbr} |Default
+
+|[[type-prop]]`type`
+|xref:trace-type-obj.adoc[Trace type object]
+|Type of this trace (metadata part).
+|Yes
+|
+
+|[[env-prop]]`environment`
+|Mapping of string keys to integer or string values
+|This trace's environment variables.
+
+Keys of this mapping are environment variable names. They must be valid
+xref:index.adoc#tsdl-ident[TSDL identifiers].
+
+A CTF trace reader can read the variables of this mapping.
+|No
+|Empty mapping
+
+|[[include-prop]]`$include`
+|Sequence of strings.
+|See xref:include.adoc[].
+|No
+|No inclusions
+|===
+
+== Examples
+
+NOTE: The following examples omit the <<type-prop,trace type object>>
+for clarity.
+
+.Basic trace object.
+====
+[source,yaml]
+----
+type:
+  # ...
+----
+====
+
+.Trace object with <<env-prop,environment variables>>.
+====
+[source,yaml]
+----
+type:
+  # ...
+environment:
+  my_program_version_major: 1
+  my_program_version_minor: 6
+  os: Palm OS
+----
+====
+
+.Trace object with an <<include-prop,inclusion>>.
+====
+[source,yaml]
+----
+type:
+  # ...
+$include: [my-env.yaml]
+----
+====
diff --git a/docs/modules/yaml/pages/trace-type-obj.adoc b/docs/modules/yaml/pages/trace-type-obj.adoc
new file mode 100644 (file)
index 0000000..2bc780f
--- /dev/null
@@ -0,0 +1,308 @@
+= YAML trace type object
+
+A _**trace type object**_ is the type of a xref:trace-obj.adoc[trace
+object].
+
+A trace type describes everything a CTF consumer needs to decode all the
+trace's xref:how-barectf-works:ctf-primer.adoc#ds[data
+streams].
+
+A trace type object is only found as the
+xref:trace-obj.adoc#type-prop[`type` property] of a trace object.
+
+[[props]]
+== Properties
+
+[%autowidth.stretch, cols="d,d,a,d,d", role="can-break"]
+|===
+|Name |Type |Description |{req-abbr} |Default
+
+|[[native-bo]]`native-byte-order`
+|xref:common-values.adoc#byte-order[Byte order]
+|Native byte order of the system which produces this trace type's
+instance's xref:how-barectf-works:ctf-primer.adoc#ds[data streams].
+|Yes
+|
+
+|[[uuid-prop]]`uuid`
+|xref:common-values.adoc#uuid[UUID] or string
+|UUID of this trace type.
+
+If this property's value is the string `auto`, barectf generates a UUID.
+
+|No
+|No UUID
+
+|[[ft-aliases-prop]]`$field-type-aliases`
+|Mapping of string keys to xref:ft-obj.adoc[field type objects]
+or strings
+|Field type aliases.
+
+Keys of this mapping are field type alias names.
+
+If an entry's value is a string, it must be the name of an existing
+field type alias.
+
+You can use a field type alias name anywhere you can use a
+xref:ft-obj.adoc[field type object].
+|No
+|Empty mapping
+
+|[[ll-aliases-prop]]`$log-level-aliases`
+|Mapping of string keys to integers
+|Log level aliases.
+
+Keys of this mapping are log level alias names.
+
+Values of this mapping are positive integral log levels.
+
+You can use a log level alias name as the value of an event record type
+object's xref:ert-obj.adoc#ll-prop[`log-level` property].
+|No
+|Empty mapping
+
+|`$features`
+|<<features-obj>>
+|Features of this trace type's instance (trace).
+|No
+|See <<features-obj>> for default values.
+
+|[[clk-types-prop]]`clock-types`
+|Mapping of string keys to xref:clk-type-obj.adoc[clock type objects]
+|Clock type store for this trace type.
+
+Keys of this mapping are clock type names. They must be valid
+xref:index.adoc#tsdl-ident[TSDL identifiers].
+
+The
+xref:dst-obj.adoc#def-clk-type-name-prop[`$default-clock-type-name`
+property] of a data stream type object refers to a key of this mapping.
+|No
+|No clock type store
+
+|[[dsts-prop]]`data-stream-types`
+|Mapping of string keys to xref:dst-obj.adoc[data stream
+type objects]
+|Data stream types of this trace type.
+
+Keys of this mapping are data stream type names. They must be valid
+C{nbsp}identifiers.
+
+This mapping must contain at least one entry.
+|Yes
+|
+
+|[[include-prop]]`$include`
+|Sequence of strings.
+|See xref:include.adoc[].
+|No
+|No inclusions
+|===
+
+[[features-obj]]
+== Features object
+
+The features of a trace type object.
+
+As of barectf{nbsp}{page-component-version}, each feature controls
+whether or not some information will be part of the header of each
+xref:how-barectf-works:ctf-primer.adoc#pkt[CTF packet] which the
+generated tracer produces.
+
+You can enable or disable a feature. When you enable one, you can set
+its xref:ft-obj.adoc[field type] explicitly or make barectf choose a
+sane default.
+
+=== Properties
+
+For all the feature properties below, if the value is a boolean:
+
+True::
+    Make barectf use a default field type.
+
+False::
+    Disable the feature.
+
+All the properties are optional.
+
+[%autowidth.stretch, cols="d,d,a,d", role="can-break"]
+|===
+|Name |Type |Description |Default
+
+|[[magic-ft-prop]]`magic-field-type`
+|32-bit{nbsp}unsigned xref:int-ft-obj.adoc[integer field type object],
+string, or boolean
+|Type of packet header's magic number field.
+
+If this property's value is a string, it must be the name of an existing
+<<ft-aliases-prop,field type alias>>.
+|True
+
+|[[uuid-ft-prop]]`uuid-field-type`
+|xref:static-array-ft-obj.adoc[Static array field type object] of
+16{nbsp}8-bit{nbsp}unsigned xref:int-ft-obj.adoc[integer field
+type objects] (8-bit{nbsp}alignment), string, or boolean
+|Type of packet header's trace type UUID field.
+
+If this property's value is a string, it must be the name of an existing
+<<ft-aliases-prop,field type alias>>.
+|True if this trace type has a <<uuid-prop,`uuid` property>>, or false
+otherwise.
+
+|[[dst-id-ft-prop]]`data-stream-type-id-field-type`
+|Unsigned xref:int-ft-obj.adoc[integer field type object], string,
+or boolean
+|Type of packet header's xref:dst-obj.adoc[data stream type] ID field.
+
+If this property's value is a string, it must be the name of an existing
+<<ft-aliases-prop,field type alias>>.
+
+This feature is required when this trace type has more than one
+data stream type (<<dsts-prop,`data-stream-types` property>>).
+|True
+|===
+
+== Examples
+
+NOTE: The following examples can omit <<dsts-prop,data stream type
+objects>> for clarity.
+
+.Basic trace type object.
+====
+[source,yaml]
+----
+native-byte-order: little-endian
+data-stream-types:
+  # ...
+----
+====
+
+.Trace type object with a specific <<uuid-prop,UUID>>.
+====
+[source,yaml]
+----
+native-byte-order: little-endian
+uuid: 1b706833-b56c-4960-b5f7-e43651ff01fb
+data-stream-types:
+  # ...
+----
+====
+
+.Trace type object with an automatic <<uuid-prop,UUID>>.
+====
+[source,yaml]
+----
+native-byte-order: little-endian
+uuid: auto
+data-stream-types:
+  # ...
+----
+====
+
+.Trace type object with a disabled <<magic-ft-prop,magic field type feature>>.
+====
+[source,yaml]
+----
+native-byte-order: little-endian
+$features:
+  magic-field-type: false
+data-stream-types:
+  # ...
+----
+====
+
+.Trace type object with a specific <<dst-id-ft-prop,data stream type ID field type feature>>.
+====
+[source,yaml]
+----
+native-byte-order: little-endian
+$features:
+  data-stream-type-id-field-type:
+    class: unsigned-integer
+    size: 8
+data-stream-types:
+  # ...
+----
+====
+
+.Trace type object with a <<clk-types-prop,clock type object>>.
+====
+[source,yaml]
+----
+native-byte-order: little-endian
+clock-types:
+  sys_clock:
+    frequency: 8000000
+    description: Clock A13 (8 MHz)
+    origin-is-unix-epoch: false
+data-stream-types:
+  my_stream:
+    $default-clock-type-name: sys_clock
+    # ...
+  # ...
+----
+====
+
+.Trace type object with <<ft-aliases-prop,field type aliases>>.
+====
+[source,yaml]
+----
+native-byte-order: little-endian
+$field-type-aliases:
+  hex-uint8:
+    $inherit: uint8
+    preferred-display-base: hexadecimal
+  string-array:
+    class: dynamic-array
+    element-field-type:
+      class: string
+$features:
+  magic-field-type: hex-uint8
+data-stream-types:
+  my_stream:
+    event-record-types:
+      my_event:
+        payload-field-type:
+          client_id: hex-uint8
+          messages: string-array
+      # ...
+    # ...
+  # ...
+----
+====
+
+.Trace type object with a <<ll-aliases-prop,log level alias>>.
+====
+[source,yaml]
+----
+native-byte-order: little-endian
+$log-level-aliases:
+  WARN: 17
+data-stream-types:
+  my_stream:
+    event-record-types:
+      my_event:
+        log-level: WARN
+        # ...
+      # ...
+    # ...
+  # ...
+----
+====
+
+.Trace type object with <<include-prop,inclusions>>.
+====
+[source,yaml]
+----
+native-byte-order: little-endian
+data-stream-types:
+  # ...
+$include:
+  - stdint.yaml
+  - stdmisc.yaml
+  - network-field-type-aliases.yaml
+  - sched-field-type-aliases.yaml
+  - default-log-levels.yaml
+  - project-b-data-stream-types.yaml
+----
+====
diff --git a/docs/modules/yaml/pages/yaml-primer.adoc b/docs/modules/yaml/pages/yaml-primer.adoc
new file mode 100644 (file)
index 0000000..3b6fe0b
--- /dev/null
@@ -0,0 +1,238 @@
+= YAML primer
+
+https://yaml.org/[YAML] is a human-readable data serialization format,
+like https://www.json.org/json-en.html[JSON].
+
+In fact, YAML is a superset of JSON: you can also write a barectf
+configuration in JSON.
+
+YAML has many features which are outside the scope of the barectf
+documentation. This page is a simple introduction to the
+https://yaml.org/spec/1.2/spec.html[YAML{nbsp}1.2] language.
+
+YAML uses indentation for scoping, much like Python.
+
+The root of a YAML document is a <<mapping,mapping>>.
+
+[[mapping]]
+== Mapping
+
+A YAML mapping is an unordered list of key-value pairs.
+
+Within a mapping, `:` delimits the value from the key.
+
+.A YAML mapping with four entries.
+====
+[source,yaml]
+----
+Castonguay: Huguette Delisle
+Létourneau: Gaétan Delisle
+Robitaille: Serge Paquette
+Gonthier-Hyndman: Micheline Paquette
+----
+====
+
+.A YAML mapping with a nested mapping.
+====
+[source,yaml]
+----
+title: C'est comme ça que je t'aime
+country: Canada
+language: French
+release-date: 6 March 2020
+cast:
+  Castonguay: Huguette Delisle
+  Létourneau: Gaétan Delisle
+  Robitaille: Serge Paquette
+  Gonthier-Hyndman: Micheline Paquette
+----
+====
+
+You can also write a mapping on a single line, delimiting key-value
+pairs with `,`, beginning with `{` and ending with `}`:
+
+.A single-line YAML mapping with four entries.
+====
+[source,yaml]
+----
+{Marilyn: Huguette, François: Gaétan, Karine: Micheline, Patrice: Serge}
+----
+====
+
+.A YAML mapping with a nested single-line mapping.
+====
+[source,yaml]
+----
+title: C'est comme ça que je t'aime
+country: Canada
+language: French
+release-date: 6 March 2020
+cast: {Marilyn: Huguette, François: Gaétan, Karine: Micheline, Patrice: Serge}
+----
+====
+
+Although the keys of a mapping can be any value, barectf only uses
+strings.
+
+Each key of a given mapping must be unique.
+
+[[sequence]]
+== Sequence
+
+A YAML sequence is an ordered list of values.
+
+Each item begins with `-`.
+
+.A YAML sequence with four items.
+====
+[source,yaml]
+----
+- Corvette Express
+- Québec Deli
+- Boulangerie Fanfare
+- Marché Méli-Mélo
+----
+====
+
+.A YAML sequence. The third item is a <<mapping,mapping>>.
+====
+[source,yaml]
+----
+- Le poète des temps gris
+- Aidez-moi
+- name: Granby
+  album: Toutte est temporaire
+  year: 2014
+- La patente
+----
+====
+
+You can also write a sequence on a single line, delimiting items
+with a comma (`,`), beginning with `[` and ending with `]`:
+
+.A single-line YAML sequence with four items.
+====
+[source,yaml]
+----
+[Corvette Express, Québec Deli, Boulangerie Fanfare, Marché Méli-Mélo]
+----
+====
+
+.A single-line YAML sequence. The third item is a single-line <<mapping,mapping>>.
+====
+[source,yaml]
+----
+[Le poète des temps gris, Aidez-moi, {name: Granby, year: 2014}, La patente]
+----
+====
+
+[[scalar]]
+== Null, boolean, integer, and string values
+
+The basic YAML scalar values which are of interest to write a barectf
+configuration are:
+
+Null::
+    `null`, `Null`, `NULL`, `+~+`, or nothing.
++
+In a barectf YAML configuration, a null value always means to use the
+default value.
+
+Boolean::
+    `true`, `True`, `TRUE`, `false`, `False`, or `FALSE`.
+
+Integer::
+    Anything matching:
++
+** `+[-+]?[0-9]++` (decimal)
+** `+0o[0-7]++` (octal)
+** `+0x[0-9a-fA-F]++` (hexadecimal)
+
++
+Examples: `23`, `0x45fc1`, `-17`, `0o644`.
+
+String::
+    Double-quoted or single-quoted sequence of characters, or unquoted
+    sequence of characters when it doesn't match the form of another
+    value.
++
+Examples:
++
+** `+"Whoever is happy will make others happy too."+`
+** `+'Life is either a daring adventure or nothing at all.'+`
+** `+Only a life lived for others is a life worthwhile.+`
+
+.A YAML mapping with null, boolean, integer, and string values.
+====
+[source,yaml]
+----
+'null': null
+booleans: [true, false]
+integers: [23, 0x45fc1, -17, 0o644]
+strings:
+  - "Whoever is happy will make others happy too."
+  - 'Life is either a daring adventure or nothing at all.'
+  - Only a life lived for others is a life worthwhile
+----
+====
+
+== Comment
+
+A YAML comment starts with `+#+` and ends at the end of the line.
+
+.A YAML mapping with comments.
+====
+[source,yaml]
+----
+title: C'est comme ça que je t'aime
+
+# This is actually a Québec production.
+country: Canada
+
+language: French
+release-date: 6 March 2020
+cast:
+  Castonguay: Huguette Delisle
+  Létourneau: Gaétan Delisle # also cowrote Série noire
+  Robitaille: Serge Paquette
+  Gonthier-Hyndman: Micheline Paquette
+----
+====
+
+== Tags
+
+Any YAML value has a tag to indicate its meaning.
+
+If you don't write any tag, it's implicit from the value's form.
+
+.A YAML value with a tag.
+====
+The second `true` value below is actually a string instead of a boolean
+because it has an explicit YAML string tag:
+
+[source,yaml]
+----
+a boolean: true
+actually a string: !<tag:yaml.org,2002:str> true
+----
+====
+
+In the example above, `tag:yaml.org,2002:str` is the standard YAML tag
+for string values.
+
+barectf requires that the configuration file's root <<mapping,mapping>>
+be tagged with `tag:barectf.org,2020/3/config` to identify the whole
+mapping as a barectf configuration object.
+
+You can tag the root mapping by tagging the YAML document itself:
+
+.A tagged YAML document.
+====
+[source,yaml]
+----
+--- !<tag:barectf.org,2020/3/config>
+trace:
+  type:
+    # ...
+----
+====
diff --git a/docs/modules/yaml/partials/ft-obj-inherit-prop.adoc b/docs/modules/yaml/partials/ft-obj-inherit-prop.adoc
new file mode 100644 (file)
index 0000000..47a4770
--- /dev/null
@@ -0,0 +1,5 @@
+|[[inherit-prop]]`$inherit`
+|String
+|Name of a xref:trace-type-obj.adoc#ft-aliases-prop[field type alias]
+from which to xref:ft-obj.adoc#inherit[inherit].
+|Yes if the <<class-prop,`class`>> property is not set.
diff --git a/docs/modules/yaml/partials/int-ft-obj-base-props.adoc b/docs/modules/yaml/partials/int-ft-obj-base-props.adoc
new file mode 100644 (file)
index 0000000..84ec81c
--- /dev/null
@@ -0,0 +1,47 @@
+include::partial$ft-obj-inherit-prop.adoc[]
+|
+
+|[[size-prop]]`size`
+|Positive integer
+|Size of this field type's instances (bits).
+
+This property's value must be in the [1,{nbsp}64] range.
+|Yes
+|
+
+|[[align-prop]]`alignment`
+|Power-of-two integer
+|Alignment of the first bit of this field type's instances within a
+xref:how-barectf-works:ctf-primer.adoc#pkt[CTF{nbsp}packet] (bits).
+|No
+|8 if the <<size-prop,`size` property>> is a multiple of{nbsp}8,
+or{nbsp}1 otherwise.
+
+|[[pref-disp-base-prop]]`preferred-display-base`
+|String
+|
+The preferred base (radix) to use when displaying this field type's
+instances.
+
+The value of this property is only a _hint_ to CTF consumers; they don't
+have to consider it.
+
+This property's value must be one of:
+
+`bin`::
+`binary`::
+    Binary.
+
+`oct`::
+`octal`::
+    Octal.
+`dec`::
+`decimal`::
+    Decimal.
+
+`hex`::
+`hexadecimal`::
+    Hexadecimal.
+
+|No
+|Decimal preferred display base
diff --git a/docs/modules/yaml/partials/int-ft-obj-c-types-table.adoc b/docs/modules/yaml/partials/int-ft-obj-c-types-table.adoc
new file mode 100644 (file)
index 0000000..450f4c1
--- /dev/null
@@ -0,0 +1,19 @@
+Depending on the signedness of the integer field type and on the
+value of its <<size-prop,`size` property>>:
+
+[%autowidth.stretch]
+|===
+|__Signedness__{nbsp}/{nbsp}__Size (bits)__ |[1,{nbsp}8] |[9,{nbsp}16] |[17,{nbsp}32] |[33,{nbsp}64]
+
+|**Unsigned**
+|`uint8_t`
+|`uint16_t`
+|`uint32_t`
+|`uint64_t`
+
+|**Signed**
+|`int8_t`
+|`int16_t`
+|`int32_t`
+|`int64_t`
+|===
diff --git a/docs/modules/yaml/partials/patching-rules-table.adoc b/docs/modules/yaml/partials/patching-rules-table.adoc
new file mode 100644 (file)
index 0000000..16b6871
--- /dev/null
@@ -0,0 +1,39 @@
+For a given property of __**A**__, the patching rules are:
+
+[%autowidth.stretch, cols="d,a,a"]
+|===
+|__**A**__'s property type |<em>A</em>'s property exists in&#160;<em>B</em> |<em>A</em>'s property doesn't exist in&#160;<em>B</em>
+
+|Null, boolean, integer, and string
+|Replace __**B**__'s property with __**A**__'s property.
+|Keep __**A**__'s property.
+
+|Sequence
+|
+__**B**__'s property is also a sequence::
+    Append the items of __**A**__'s property to __**B**__'s
+    property.
++
+A structure field type object's
+xref:struct-ft-obj.adoc#members-prop[`members` property] is an
+exception: __**A**__'s property is considered to be an _ordered
+mapping_, therefore apply the mapping patching rules.
+
+__**B**__'s property is _not_ a sequence::
+    Replace __**B**__'s property with __**A**__'s property.
+|Keep __**A**__'s property.
+
+|Mapping
+|
+__**B**__'s property is also a mapping::
+    Patch __**A**__'s property over __**B**__'s property according to
+    those rules.
+
+__**B**__'s property is _not_ a mapping::
+    Replace __**B**__'s property with __**A**__'s property.
+|Keep __**A**__'s property.
+|===
+
+NOTE: When __**A**__'s property replaces __**B**__'s property and the
+value of __**A**__'s property is null, this effectively "`resets`" the
+property to its default value.
This page took 0.105669 seconds and 4 git commands to generate.