diff --git a/Doxyfile b/Doxyfile
new file mode 100644
index 0000000000000000000000000000000000000000..6ebac896000cf1d071448e84e63774cfa9b81edf
--- /dev/null
+++ b/Doxyfile
@@ -0,0 +1,2406 @@
+# Doxyfile 1.8.12
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project.
+#
+# All text after a double hash (##) is considered a comment and is placed in
+# front of the TAG it is preceding.
+#
+# All text after a single hash (#) is considered a comment and will be ignored.
+# The format is:
+# TAG = value [value, ...]
+# For lists, items can also be appended using:
+# TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (\" \").
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+
+# This tag specifies the encoding used for all characters in the config file
+# that follow. The default is UTF-8 which is also the encoding used for all text
+# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv
+# built into libc) for the transcoding. See http://www.gnu.org/software/libiconv
+# for the list of possible encodings.
+# The default value is: UTF-8.
+
+DOXYFILE_ENCODING      = UTF-8
+
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by
+# double-quotes, unless you are using Doxywizard) that should identify the
+# project for which the documentation is generated. This name is used in the
+# title of most generated pages and in a few other places.
+# The default value is: My Project.
+
+PROJECT_NAME           = "Status Site"
+
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. This
+# could be handy for archiving the generated documentation or if some version
+# control system is used.
+
+PROJECT_NUMBER         =
+
+# Using the PROJECT_BRIEF tag one can provide an optional one line description
+# for a project that appears at the top of each page and should give viewer a
+# quick idea about the purpose of the project. Keep the description short.
+
+PROJECT_BRIEF          =
+
+# With the PROJECT_LOGO tag one can specify a logo or an icon that is included
+# in the documentation. The maximum height of the logo should not exceed 55
+# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy
+# the logo to the output directory.
+
+PROJECT_LOGO           =
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path
+# into which the generated documentation will be written. If a relative path is
+# entered, it will be relative to the location where doxygen was started. If
+# left blank the current directory will be used.
+
+OUTPUT_DIRECTORY       = src/web/wwwroot/docs/server
+
+# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub-
+# directories (in 2 levels) under the output directory of each output format and
+# will distribute the generated files over these directories. Enabling this
+# option can be useful when feeding doxygen a huge amount of source files, where
+# putting all generated files in the same directory would otherwise causes
+# performance problems for the file system.
+# The default value is: NO.
+
+CREATE_SUBDIRS         = NO
+
+# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII
+# characters to appear in the names of generated files. If set to NO, non-ASCII
+# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode
+# U+3044.
+# The default value is: NO.
+
+ALLOW_UNICODE_NAMES    = NO
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all
+# documentation generated by doxygen is written. Doxygen will use this
+# information to generate all constant output in the proper language.
+# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese,
+# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States),
+# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian,
+# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages),
+# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian,
+# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian,
+# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish,
+# Ukrainian and Vietnamese.
+# The default value is: English.
+
+OUTPUT_LANGUAGE        = English
+
+# If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member
+# descriptions after the members that are listed in the file and class
+# documentation (similar to Javadoc). Set to NO to disable this.
+# The default value is: YES.
+
+BRIEF_MEMBER_DESC      = YES
+
+# If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief
+# description of a member or function before the detailed description
+#
+# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
+# brief descriptions will be completely suppressed.
+# The default value is: YES.
+
+REPEAT_BRIEF           = YES
+
+# This tag implements a quasi-intelligent brief description abbreviator that is
+# used to form the text in various listings. Each string in this list, if found
+# as the leading text of the brief description, will be stripped from the text
+# and the result, after processing the whole list, is used as the annotated
+# text. Otherwise, the brief description is used as-is. If left blank, the
+# following values are used ($name is automatically replaced with the name of
+# the entity):The $name class, The $name widget, The $name file, is, provides,
+# specifies, contains, represents, a, an and the.
+
+ABBREVIATE_BRIEF       =
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
+# doxygen will generate a detailed section even if there is only a brief
+# description.
+# The default value is: NO.
+
+ALWAYS_DETAILED_SEC    = NO
+
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
+# inherited members of a class in the documentation of that class as if those
+# members were ordinary class members. Constructors, destructors and assignment
+# operators of the base classes will not be shown.
+# The default value is: NO.
+
+INLINE_INHERITED_MEMB  = NO
+
+# If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path
+# before files name in the file list and in the header files. If set to NO the
+# shortest path that makes the file name unique will be used
+# The default value is: YES.
+
+FULL_PATH_NAMES        = YES
+
+# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path.
+# Stripping is only done if one of the specified strings matches the left-hand
+# part of the path. The tag can be used to show relative paths in the file list.
+# If left blank the directory from which doxygen is run is used as the path to
+# strip.
+#
+# Note that you can specify absolute paths here, but also relative paths, which
+# will be relative from the directory where doxygen is started.
+# This tag requires that the tag FULL_PATH_NAMES is set to YES.
+
+STRIP_FROM_PATH        =
+
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the
+# path mentioned in the documentation of a class, which tells the reader which
+# header file to include in order to use a class. If left blank only the name of
+# the header file containing the class definition is used. Otherwise one should
+# specify the list of include paths that are normally passed to the compiler
+# using the -I flag.
+
+STRIP_FROM_INC_PATH    =
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but
+# less readable) file names. This can be useful is your file systems doesn't
+# support long names like on DOS, Mac, or CD-ROM.
+# The default value is: NO.
+
+SHORT_NAMES            = NO
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the
+# first line (until the first dot) of a Javadoc-style comment as the brief
+# description. If set to NO, the Javadoc-style will behave just like regular Qt-
+# style comments (thus requiring an explicit @brief command for a brief
+# description.)
+# The default value is: NO.
+
+JAVADOC_AUTOBRIEF      = NO
+
+# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first
+# line (until the first dot) of a Qt-style comment as the brief description. If
+# set to NO, the Qt-style will behave just like regular Qt-style comments (thus
+# requiring an explicit \brief command for a brief description.)
+# The default value is: NO.
+
+QT_AUTOBRIEF           = NO
+
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a
+# multi-line C++ special comment block (i.e. a block of //! or /// comments) as
+# a brief description. This used to be the default behavior. The new default is
+# to treat a multi-line C++ comment block as a detailed description. Set this
+# tag to YES if you prefer the old behavior instead.
+#
+# Note that setting this tag to YES also means that rational rose comments are
+# not recognized any more.
+# The default value is: NO.
+
+MULTILINE_CPP_IS_BRIEF = NO
+
+# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the
+# documentation from any documented member that it re-implements.
+# The default value is: YES.
+
+INHERIT_DOCS           = YES
+
+# If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new
+# page for each member. If set to NO, the documentation of a member will be part
+# of the file/class/namespace that contains it.
+# The default value is: NO.
+
+SEPARATE_MEMBER_PAGES  = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen
+# uses this value to replace tabs by spaces in code fragments.
+# Minimum value: 1, maximum value: 16, default value: 4.
+
+TAB_SIZE               = 4
+
+# This tag can be used to specify a number of aliases that act as commands in
+# the documentation. An alias has the form:
+# name=value
+# For example adding
+# "sideeffect=@par Side Effects:\n"
+# will allow you to put the command \sideeffect (or @sideeffect) in the
+# documentation, which will result in a user-defined paragraph with heading
+# "Side Effects:". You can put \n's in the value part of an alias to insert
+# newlines.
+
+ALIASES                =
+
+# This tag can be used to specify a number of word-keyword mappings (TCL only).
+# A mapping has the form "name=value". For example adding "class=itcl::class"
+# will allow you to use the command class in the itcl::class meaning.
+
+TCL_SUBST              =
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources
+# only. Doxygen will then generate output that is more tailored for C. For
+# instance, some of the names that are used will be different. The list of all
+# members will be omitted, etc.
+# The default value is: NO.
+
+OPTIMIZE_OUTPUT_FOR_C  = NO
+
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or
+# Python sources only. Doxygen will then generate output that is more tailored
+# for that language. For instance, namespaces will be presented as packages,
+# qualified scopes will look different, etc.
+# The default value is: NO.
+
+OPTIMIZE_OUTPUT_JAVA   = NO
+
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
+# sources. Doxygen will then generate output that is tailored for Fortran.
+# The default value is: NO.
+
+OPTIMIZE_FOR_FORTRAN   = NO
+
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
+# sources. Doxygen will then generate output that is tailored for VHDL.
+# The default value is: NO.
+
+OPTIMIZE_OUTPUT_VHDL   = NO
+
+# Doxygen selects the parser to use depending on the extension of the files it
+# parses. With this tag you can assign which parser to use for a given
+# extension. Doxygen has a built-in mapping, but you can override or extend it
+# using this tag. The format is ext=language, where ext is a file extension, and
+# language is one of the parsers supported by doxygen: IDL, Java, Javascript,
+# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran:
+# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran:
+# Fortran. In the later case the parser tries to guess whether the code is fixed
+# or free formatted code, this is the default for Fortran type files), VHDL. For
+# instance to make doxygen treat .inc files as Fortran files (default is PHP),
+# and .f files as C (default is Fortran), use: inc=Fortran f=C.
+#
+# Note: For files without extension you can use no_extension as a placeholder.
+#
+# Note that for custom extensions you also need to set FILE_PATTERNS otherwise
+# the files are not read by doxygen.
+
+EXTENSION_MAPPING      =
+
+# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments
+# according to the Markdown format, which allows for more readable
+# documentation. See http://daringfireball.net/projects/markdown/ for details.
+# The output of markdown processing is further processed by doxygen, so you can
+# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in
+# case of backward compatibilities issues.
+# The default value is: YES.
+
+MARKDOWN_SUPPORT       = YES
+
+# When enabled doxygen tries to link words that correspond to documented
+# classes, or namespaces to their corresponding documentation. Such a link can
+# be prevented in individual cases by putting a % sign in front of the word or
+# globally by setting AUTOLINK_SUPPORT to NO.
+# The default value is: YES.
+
+AUTOLINK_SUPPORT       = YES
+
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
+# to include (a tag file for) the STL sources as input, then you should set this
+# tag to YES in order to let doxygen match functions declarations and
+# definitions whose arguments contain STL classes (e.g. func(std::string);
+# versus func(std::string) {}). This also make the inheritance and collaboration
+# diagrams that involve STL classes more complete and accurate.
+# The default value is: NO.
+
+BUILTIN_STL_SUPPORT    = NO
+
+# If you use Microsoft's C++/CLI language, you should set this option to YES to
+# enable parsing support.
+# The default value is: NO.
+
+CPP_CLI_SUPPORT        = NO
+
+# Set the SIP_SUPPORT tag to YES if your project consists of sip (see:
+# http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen
+# will parse them like normal C++ but will assume all classes use public instead
+# of private inheritance when no explicit protection keyword is present.
+# The default value is: NO.
+
+SIP_SUPPORT            = NO
+
+# For Microsoft's IDL there are propget and propput attributes to indicate
+# getter and setter methods for a property. Setting this option to YES will make
+# doxygen to replace the get and set methods by a property in the documentation.
+# This will only work if the methods are indeed getting or setting a simple
+# type. If this is not the case, or you want to show the methods anyway, you
+# should set this option to NO.
+# The default value is: YES.
+
+IDL_PROPERTY_SUPPORT   = YES
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
+# tag is set to YES then doxygen will reuse the documentation of the first
+# member in the group (if any) for the other members of the group. By default
+# all members of a group must be documented explicitly.
+# The default value is: NO.
+
+DISTRIBUTE_GROUP_DOC   = NO
+
+# If one adds a struct or class to a group and this option is enabled, then also
+# any nested class or struct is added to the same group. By default this option
+# is disabled and one has to add nested compounds explicitly via \ingroup.
+# The default value is: NO.
+
+GROUP_NESTED_COMPOUNDS = NO
+
+# Set the SUBGROUPING tag to YES to allow class member groups of the same type
+# (for instance a group of public functions) to be put as a subgroup of that
+# type (e.g. under the Public Functions section). Set it to NO to prevent
+# subgrouping. Alternatively, this can be done per class using the
+# \nosubgrouping command.
+# The default value is: YES.
+
+SUBGROUPING            = YES
+
+# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions
+# are shown inside the group in which they are included (e.g. using \ingroup)
+# instead of on a separate page (for HTML and Man pages) or section (for LaTeX
+# and RTF).
+#
+# Note that this feature does not work in combination with
+# SEPARATE_MEMBER_PAGES.
+# The default value is: NO.
+
+INLINE_GROUPED_CLASSES = NO
+
+# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions
+# with only public data fields or simple typedef fields will be shown inline in
+# the documentation of the scope in which they are defined (i.e. file,
+# namespace, or group documentation), provided this scope is documented. If set
+# to NO, structs, classes, and unions are shown on a separate page (for HTML and
+# Man pages) or section (for LaTeX and RTF).
+# The default value is: NO.
+
+INLINE_SIMPLE_STRUCTS  = NO
+
+# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or
+# enum is documented as struct, union, or enum with the name of the typedef. So
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct
+# with name TypeT. When disabled the typedef will appear as a member of a file,
+# namespace, or class. And the struct will be named TypeS. This can typically be
+# useful for C code in case the coding convention dictates that all compound
+# types are typedef'ed and only the typedef is referenced, never the tag name.
+# The default value is: NO.
+
+TYPEDEF_HIDES_STRUCT   = NO
+
+# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This
+# cache is used to resolve symbols given their name and scope. Since this can be
+# an expensive process and often the same symbol appears multiple times in the
+# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small
+# doxygen will become slower. If the cache is too large, memory is wasted. The
+# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range
+# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536
+# symbols. At the end of a run doxygen will report the cache usage and suggest
+# the optimal cache size from a speed point of view.
+# Minimum value: 0, maximum value: 9, default value: 0.
+
+LOOKUP_CACHE_SIZE      = 0
+
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+
+# If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in
+# documentation are documented, even if no documentation was available. Private
+# class members and static file members will be hidden unless the
+# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES.
+# Note: This will also disable the warnings about undocumented members that are
+# normally produced when WARNINGS is set to YES.
+# The default value is: NO.
+
+EXTRACT_ALL            = NO
+
+# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will
+# be included in the documentation.
+# The default value is: NO.
+
+EXTRACT_PRIVATE        = NO
+
+# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal
+# scope will be included in the documentation.
+# The default value is: NO.
+
+EXTRACT_PACKAGE        = NO
+
+# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be
+# included in the documentation.
+# The default value is: NO.
+
+EXTRACT_STATIC         = NO
+
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined
+# locally in source files will be included in the documentation. If set to NO,
+# only classes defined in header files are included. Does not have any effect
+# for Java sources.
+# The default value is: YES.
+
+EXTRACT_LOCAL_CLASSES  = YES
+
+# This flag is only useful for Objective-C code. If set to YES, local methods,
+# which are defined in the implementation section but not in the interface are
+# included in the documentation. If set to NO, only methods in the interface are
+# included.
+# The default value is: NO.
+
+EXTRACT_LOCAL_METHODS  = NO
+
+# If this flag is set to YES, the members of anonymous namespaces will be
+# extracted and appear in the documentation as a namespace called
+# 'anonymous_namespace{file}', where file will be replaced with the base name of
+# the file that contains the anonymous namespace. By default anonymous namespace
+# are hidden.
+# The default value is: NO.
+
+EXTRACT_ANON_NSPACES   = NO
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all
+# undocumented members inside documented classes or files. If set to NO these
+# members will be included in the various overviews, but no documentation
+# section is generated. This option has no effect if EXTRACT_ALL is enabled.
+# The default value is: NO.
+
+HIDE_UNDOC_MEMBERS     = NO
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all
+# undocumented classes that are normally visible in the class hierarchy. If set
+# to NO, these classes will be included in the various overviews. This option
+# has no effect if EXTRACT_ALL is enabled.
+# The default value is: NO.
+
+HIDE_UNDOC_CLASSES     = NO
+
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend
+# (class|struct|union) declarations. If set to NO, these declarations will be
+# included in the documentation.
+# The default value is: NO.
+
+HIDE_FRIEND_COMPOUNDS  = NO
+
+# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any
+# documentation blocks found inside the body of a function. If set to NO, these
+# blocks will be appended to the function's detailed documentation block.
+# The default value is: NO.
+
+HIDE_IN_BODY_DOCS      = NO
+
+# The INTERNAL_DOCS tag determines if documentation that is typed after a
+# \internal command is included. If the tag is set to NO then the documentation
+# will be excluded. Set it to YES to include the internal documentation.
+# The default value is: NO.
+
+INTERNAL_DOCS          = NO
+
+# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file
+# names in lower-case letters. If set to YES, upper-case letters are also
+# allowed. This is useful if you have classes or files whose names only differ
+# in case and if your file system supports case sensitive file names. Windows
+# and Mac users are advised to set this option to NO.
+# The default value is: system dependent.
+
+CASE_SENSE_NAMES       = NO
+
+# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with
+# their full class and namespace scopes in the documentation. If set to YES, the
+# scope will be hidden.
+# The default value is: NO.
+
+HIDE_SCOPE_NAMES       = NO
+
+# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will
+# append additional text to a page's title, such as Class Reference. If set to
+# YES the compound reference will be hidden.
+# The default value is: NO.
+
+HIDE_COMPOUND_REFERENCE= NO
+
+# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of
+# the files that are included by a file in the documentation of that file.
+# The default value is: YES.
+
+SHOW_INCLUDE_FILES     = YES
+
+# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each
+# grouped member an include statement to the documentation, telling the reader
+# which file to include in order to use the member.
+# The default value is: NO.
+
+SHOW_GROUPED_MEMB_INC  = NO
+
+# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include
+# files with double quotes in the documentation rather than with sharp brackets.
+# The default value is: NO.
+
+FORCE_LOCAL_INCLUDES   = NO
+
+# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the
+# documentation for inline members.
+# The default value is: YES.
+
+INLINE_INFO            = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the
+# (detailed) documentation of file and class members alphabetically by member
+# name. If set to NO, the members will appear in declaration order.
+# The default value is: YES.
+
+SORT_MEMBER_DOCS       = YES
+
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief
+# descriptions of file, namespace and class members alphabetically by member
+# name. If set to NO, the members will appear in declaration order. Note that
+# this will also influence the order of the classes in the class list.
+# The default value is: NO.
+
+SORT_BRIEF_DOCS        = NO
+
+# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the
+# (brief and detailed) documentation of class members so that constructors and
+# destructors are listed first. If set to NO the constructors will appear in the
+# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS.
+# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief
+# member documentation.
+# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting
+# detailed member documentation.
+# The default value is: NO.
+
+SORT_MEMBERS_CTORS_1ST = NO
+
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy
+# of group names into alphabetical order. If set to NO the group names will
+# appear in their defined order.
+# The default value is: NO.
+
+SORT_GROUP_NAMES       = NO
+
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by
+# fully-qualified names, including namespaces. If set to NO, the class list will
+# be sorted only by class name, not including the namespace part.
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
+# Note: This option applies only to the class list, not to the alphabetical
+# list.
+# The default value is: NO.
+
+SORT_BY_SCOPE_NAME     = NO
+
+# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper
+# type resolution of all parameters of a function it will reject a match between
+# the prototype and the implementation of a member function even if there is
+# only one candidate or it is obvious which candidate to choose by doing a
+# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still
+# accept a match between prototype and implementation in such cases.
+# The default value is: NO.
+
+STRICT_PROTO_MATCHING  = NO
+
+# The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo
+# list. This list is created by putting \todo commands in the documentation.
+# The default value is: YES.
+
+GENERATE_TODOLIST      = YES
+
+# The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test
+# list. This list is created by putting \test commands in the documentation.
+# The default value is: YES.
+
+GENERATE_TESTLIST      = YES
+
+# The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug
+# list. This list is created by putting \bug commands in the documentation.
+# The default value is: YES.
+
+GENERATE_BUGLIST       = YES
+
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO)
+# the deprecated list. This list is created by putting \deprecated commands in
+# the documentation.
+# The default value is: YES.
+
+GENERATE_DEPRECATEDLIST= YES
+
+# The ENABLED_SECTIONS tag can be used to enable conditional documentation
+# sections, marked by \if <section_label> ... \endif and \cond <section_label>
+# ... \endcond blocks.
+
+ENABLED_SECTIONS       =
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the
+# initial value of a variable or macro / define can have for it to appear in the
+# documentation. If the initializer consists of more lines than specified here
+# it will be hidden. Use a value of 0 to hide initializers completely. The
+# appearance of the value of individual variables and macros / defines can be
+# controlled using \showinitializer or \hideinitializer command in the
+# documentation regardless of this setting.
+# Minimum value: 0, maximum value: 10000, default value: 30.
+
+MAX_INITIALIZER_LINES  = 30
+
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at
+# the bottom of the documentation of classes and structs. If set to YES, the
+# list will mention the files that were used to generate the documentation.
+# The default value is: YES.
+
+SHOW_USED_FILES        = YES
+
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This
+# will remove the Files entry from the Quick Index and from the Folder Tree View
+# (if specified).
+# The default value is: YES.
+
+SHOW_FILES             = YES
+
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces
+# page. This will remove the Namespaces entry from the Quick Index and from the
+# Folder Tree View (if specified).
+# The default value is: YES.
+
+SHOW_NAMESPACES        = YES
+
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that
+# doxygen should invoke to get the current version for each file (typically from
+# the version control system). Doxygen will invoke the program by executing (via
+# popen()) the command command input-file, where command is the value of the
+# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided
+# by doxygen. Whatever the program writes to standard output is used as the file
+# version. For an example see the documentation.
+
+FILE_VERSION_FILTER    =
+
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed
+# by doxygen. The layout file controls the global structure of the generated
+# output files in an output format independent way. To create the layout file
+# that represents doxygen's defaults, run doxygen with the -l option. You can
+# optionally specify a file name after the option, if omitted DoxygenLayout.xml
+# will be used as the name of the layout file.
+#
+# Note that if you run doxygen from a directory containing a file called
+# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE
+# tag is left empty.
+
+LAYOUT_FILE            =
+
+# The CITE_BIB_FILES tag can be used to specify one or more bib files containing
+# the reference definitions. This must be a list of .bib files. The .bib
+# extension is automatically appended if omitted. This requires the bibtex tool
+# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info.
+# For LaTeX the style of the bibliography can be controlled using
+# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the
+# search path. See also \cite for info how to create references.
+
+CITE_BIB_FILES         =
+
+#---------------------------------------------------------------------------
+# Configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated to
+# standard output by doxygen. If QUIET is set to YES this implies that the
+# messages are off.
+# The default value is: NO.
+
+QUIET                  = YES
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are
+# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES
+# this implies that the warnings are on.
+#
+# Tip: Turn warnings on while writing the documentation.
+# The default value is: YES.
+
+WARNINGS               = YES
+
+# If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate
+# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag
+# will automatically be disabled.
+# The default value is: YES.
+
+WARN_IF_UNDOCUMENTED   = NO
+
+# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for
+# potential errors in the documentation, such as not documenting some parameters
+# in a documented function, or documenting parameters that don't exist or using
+# markup commands wrongly.
+# The default value is: YES.
+
+WARN_IF_DOC_ERROR      = YES
+
+# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that
+# are documented, but have no documentation for their parameters or return
+# value. If set to NO, doxygen will only warn about wrong or incomplete
+# parameter documentation, but not about the absence of documentation.
+# The default value is: NO.
+
+WARN_NO_PARAMDOC       = NO
+
+# If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when
+# a warning is encountered.
+# The default value is: NO.
+
+WARN_AS_ERROR          = NO
+
+# The WARN_FORMAT tag determines the format of the warning messages that doxygen
+# can produce. The string should contain the $file, $line, and $text tags, which
+# will be replaced by the file and line number from which the warning originated
+# and the warning text. Optionally the format may contain $version, which will
+# be replaced by the version of the file (if it could be obtained via
+# FILE_VERSION_FILTER)
+# The default value is: $file:$line: $text.
+
+WARN_FORMAT            = "$file:$line: $text"
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning and error
+# messages should be written. If left blank the output is written to standard
+# error (stderr).
+
+WARN_LOGFILE           =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag is used to specify the files and/or directories that contain
+# documented source files. You may enter file names like myfile.cpp or
+# directories like /usr/src/myproject. Separate the files or directories with
+# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING
+# Note: If this tag is empty the current directory is searched.
+
+INPUT                  =
+
+# This tag can be used to specify the character encoding of the source files
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
+# libiconv (or the iconv built into libc) for the transcoding. See the libiconv
+# documentation (see: http://www.gnu.org/software/libiconv) for the list of
+# possible encodings.
+# The default value is: UTF-8.
+
+INPUT_ENCODING         = UTF-8
+
+# If the value of the INPUT tag contains directories, you can use the
+# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and
+# *.h) to filter out the source-files in the directories.
+#
+# Note that for custom extensions or not directly supported extensions you also
+# need to set EXTENSION_MAPPING for the extension otherwise the files are not
+# read by doxygen.
+#
+# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp,
+# *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h,
+# *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc,
+# *.m, *.markdown, *.md, *.mm, *.dox, *.py, *.pyw, *.f90, *.f, *.for, *.tcl,
+# *.vhd, *.vhdl, *.ucf, *.qsf, *.as and *.js.
+
+FILE_PATTERNS          = *.cs
+
+# The RECURSIVE tag can be used to specify whether or not subdirectories should
+# be searched for input files as well.
+# The default value is: NO.
+
+RECURSIVE              = YES
+
+# The EXCLUDE tag can be used to specify files and/or directories that should be
+# excluded from the INPUT source files. This way you can easily exclude a
+# subdirectory from a directory tree whose root is specified with the INPUT tag.
+#
+# Note that relative paths are relative to the directory from which doxygen is
+# run.
+
+EXCLUDE                =
+
+# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
+# directories that are symbolic links (a Unix file system feature) are excluded
+# from the input.
+# The default value is: NO.
+
+EXCLUDE_SYMLINKS       = NO
+
+# If the value of the INPUT tag contains directories, you can use the
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
+# certain files from those directories.
+#
+# Note that the wildcards are matched against the file with absolute path, so to
+# exclude all test directories for example use the pattern */test/*
+
+EXCLUDE_PATTERNS       =
+
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
+# (namespaces, classes, functions, etc.) that should be excluded from the
+# output. The symbol name can be a fully qualified name, a word, or if the
+# wildcard * is used, a substring. Examples: ANamespace, AClass,
+# AClass::ANamespace, ANamespace::*Test
+#
+# Note that the wildcards are matched against the file with absolute path, so to
+# exclude all test directories use the pattern */test/*
+
+EXCLUDE_SYMBOLS        =
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or directories
+# that contain example code fragments that are included (see the \include
+# command).
+
+EXAMPLE_PATH           =
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and
+# *.h) to filter out the source-files in the directories. If left blank all
+# files are included.
+
+EXAMPLE_PATTERNS       =
+
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
+# searched for input files to be used with the \include or \dontinclude commands
+# irrespective of the value of the RECURSIVE tag.
+# The default value is: NO.
+
+EXAMPLE_RECURSIVE      = NO
+
+# The IMAGE_PATH tag can be used to specify one or more files or directories
+# that contain images that are to be included in the documentation (see the
+# \image command).
+
+IMAGE_PATH             =
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should
+# invoke to filter for each input file. Doxygen will invoke the filter program
+# by executing (via popen()) the command:
+#
+# <filter> <input-file>
+#
+# where <filter> is the value of the INPUT_FILTER tag, and <input-file> is the
+# name of an input file. Doxygen will then use the output that the filter
+# program writes to standard output. If FILTER_PATTERNS is specified, this tag
+# will be ignored.
+#
+# Note that the filter must not add or remove lines; it is applied before the
+# code is scanned, but not when the output code is generated. If lines are added
+# or removed, the anchors will not be placed correctly.
+#
+# Note that for custom extensions or not directly supported extensions you also
+# need to set EXTENSION_MAPPING for the extension otherwise the files are not
+# properly processed by doxygen.
+
+INPUT_FILTER           =
+
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
+# basis. Doxygen will compare the file name with each pattern and apply the
+# filter if there is a match. The filters are a list of the form: pattern=filter
+# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how
+# filters are used. If the FILTER_PATTERNS tag is empty or if none of the
+# patterns match the file name, INPUT_FILTER is applied.
+#
+# Note that for custom extensions or not directly supported extensions you also
+# need to set EXTENSION_MAPPING for the extension otherwise the files are not
+# properly processed by doxygen.
+
+FILTER_PATTERNS        =
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
+# INPUT_FILTER) will also be used to filter the input files that are used for
+# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES).
+# The default value is: NO.
+
+FILTER_SOURCE_FILES    = NO
+
+# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file
+# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and
+# it is also possible to disable source filtering for a specific pattern using
+# *.ext= (so without naming a filter).
+# This tag requires that the tag FILTER_SOURCE_FILES is set to YES.
+
+FILTER_SOURCE_PATTERNS =
+
+# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that
+# is part of the input, its contents will be placed on the main page
+# (index.html). This can be useful if you have a project on for instance GitHub
+# and want to reuse the introduction page also for the doxygen output.
+
+USE_MDFILE_AS_MAINPAGE =
+
+#---------------------------------------------------------------------------
+# Configuration options related to source browsing
+#---------------------------------------------------------------------------
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will be
+# generated. Documented entities will be cross-referenced with these sources.
+#
+# Note: To get rid of all source code in the generated output, make sure that
+# also VERBATIM_HEADERS is set to NO.
+# The default value is: NO.
+
+SOURCE_BROWSER         = NO
+
+# Setting the INLINE_SOURCES tag to YES will include the body of functions,
+# classes and enums directly into the documentation.
+# The default value is: NO.
+
+INLINE_SOURCES         = NO
+
+# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any
+# special comment blocks from generated source code fragments. Normal C, C++ and
+# Fortran comments will always remain visible.
+# The default value is: YES.
+
+STRIP_CODE_COMMENTS    = YES
+
+# If the REFERENCED_BY_RELATION tag is set to YES then for each documented
+# function all documented functions referencing it will be listed.
+# The default value is: NO.
+
+REFERENCED_BY_RELATION = NO
+
+# If the REFERENCES_RELATION tag is set to YES then for each documented function
+# all documented entities called/used by that function will be listed.
+# The default value is: NO.
+
+REFERENCES_RELATION    = NO
+
+# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set
+# to YES then the hyperlinks from functions in REFERENCES_RELATION and
+# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will
+# link to the documentation.
+# The default value is: YES.
+
+REFERENCES_LINK_SOURCE = YES
+
+# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the
+# source code will show a tooltip with additional information such as prototype,
+# brief description and links to the definition and documentation. Since this
+# will make the HTML file larger and loading of large files a bit slower, you
+# can opt to disable this feature.
+# The default value is: YES.
+# This tag requires that the tag SOURCE_BROWSER is set to YES.
+
+SOURCE_TOOLTIPS        = YES
+
+# If the USE_HTAGS tag is set to YES then the references to source code will
+# point to the HTML generated by the htags(1) tool instead of doxygen built-in
+# source browser. The htags tool is part of GNU's global source tagging system
+# (see http://www.gnu.org/software/global/global.html). You will need version
+# 4.8.6 or higher.
+#
+# To use it do the following:
+# - Install the latest version of global
+# - Enable SOURCE_BROWSER and USE_HTAGS in the config file
+# - Make sure the INPUT points to the root of the source tree
+# - Run doxygen as normal
+#
+# Doxygen will invoke htags (and that will in turn invoke gtags), so these
+# tools must be available from the command line (i.e. in the search path).
+#
+# The result: instead of the source browser generated by doxygen, the links to
+# source code will now point to the output of htags.
+# The default value is: NO.
+# This tag requires that the tag SOURCE_BROWSER is set to YES.
+
+USE_HTAGS              = NO
+
+# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a
+# verbatim copy of the header file for each class for which an include is
+# specified. Set to NO to disable this.
+# See also: Section \class.
+# The default value is: YES.
+
+VERBATIM_HEADERS       = YES
+
+#---------------------------------------------------------------------------
+# Configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all
+# compounds will be generated. Enable this if the project contains a lot of
+# classes, structs, unions or interfaces.
+# The default value is: YES.
+
+ALPHABETICAL_INDEX     = YES
+
+# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in
+# which the alphabetical index list will be split.
+# Minimum value: 1, maximum value: 20, default value: 5.
+# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
+
+COLS_IN_ALPHA_INDEX    = 5
+
+# In case all classes in a project start with a common prefix, all classes will
+# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag
+# can be used to specify a prefix (or a list of prefixes) that should be ignored
+# while generating the index headers.
+# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
+
+IGNORE_PREFIX          =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output
+# The default value is: YES.
+
+GENERATE_HTML          = YES
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it.
+# The default directory is: html.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_OUTPUT            = html
+
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each
+# generated HTML page (for example: .htm, .php, .asp).
+# The default value is: .html.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_FILE_EXTENSION    = .html
+
+# The HTML_HEADER tag can be used to specify a user-defined HTML header file for
+# each generated HTML page. If the tag is left blank doxygen will generate a
+# standard header.
+#
+# To get valid HTML the header file that includes any scripts and style sheets
+# that doxygen needs, which is dependent on the configuration options used (e.g.
+# the setting GENERATE_TREEVIEW). It is highly recommended to start with a
+# default header using
+# doxygen -w html new_header.html new_footer.html new_stylesheet.css
+# YourConfigFile
+# and then modify the file new_header.html. See also section "Doxygen usage"
+# for information on how to generate the default header that doxygen normally
+# uses.
+# Note: The header is subject to change so you typically have to regenerate the
+# default header when upgrading to a newer version of doxygen. For a description
+# of the possible markers and block names see the documentation.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_HEADER            =
+
+# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each
+# generated HTML page. If the tag is left blank doxygen will generate a standard
+# footer. See HTML_HEADER for more information on how to generate a default
+# footer and what special commands can be used inside the footer. See also
+# section "Doxygen usage" for information on how to generate the default footer
+# that doxygen normally uses.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_FOOTER            =
+
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style
+# sheet that is used by each HTML page. It can be used to fine-tune the look of
+# the HTML output. If left blank doxygen will generate a default style sheet.
+# See also section "Doxygen usage" for information on how to generate the style
+# sheet that doxygen normally uses.
+# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as
+# it is more robust and this tag (HTML_STYLESHEET) will in the future become
+# obsolete.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_STYLESHEET        =
+
+# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined
+# cascading style sheets that are included after the standard style sheets
+# created by doxygen. Using this option one can overrule certain style aspects.
+# This is preferred over using HTML_STYLESHEET since it does not replace the
+# standard style sheet and is therefore more robust against future updates.
+# Doxygen will copy the style sheet files to the output directory.
+# Note: The order of the extra style sheet files is of importance (e.g. the last
+# style sheet in the list overrules the setting of the previous ones in the
+# list). For an example see the documentation.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_EXTRA_STYLESHEET  =
+
+# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
+# other source files which should be copied to the HTML output directory. Note
+# that these files will be copied to the base HTML output directory. Use the
+# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these
+# files. In the HTML_STYLESHEET file, use the file name only. Also note that the
+# files will be copied as-is; there are no commands or markers available.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_EXTRA_FILES       =
+
+# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen
+# will adjust the colors in the style sheet and background images according to
+# this color. Hue is specified as an angle on a colorwheel, see
+# http://en.wikipedia.org/wiki/Hue for more information. For instance the value
+# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300
+# purple, and 360 is red again.
+# Minimum value: 0, maximum value: 359, default value: 220.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_COLORSTYLE_HUE    = 220
+
+# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors
+# in the HTML output. For a value of 0 the output will use grayscales only. A
+# value of 255 will produce the most vivid colors.
+# Minimum value: 0, maximum value: 255, default value: 100.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_COLORSTYLE_SAT    = 100
+
+# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the
+# luminance component of the colors in the HTML output. Values below 100
+# gradually make the output lighter, whereas values above 100 make the output
+# darker. The value divided by 100 is the actual gamma applied, so 80 represents
+# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not
+# change the gamma.
+# Minimum value: 40, maximum value: 240, default value: 80.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_COLORSTYLE_GAMMA  = 80
+
+# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
+# page will contain the date and time when the page was generated. Setting this
+# to YES can help to show when doxygen was last run and thus if the
+# documentation is up to date.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_TIMESTAMP         = NO
+
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
+# documentation will contain sections that can be hidden and shown after the
+# page has loaded.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_DYNAMIC_SECTIONS  = NO
+
+# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries
+# shown in the various tree structured indices initially; the user can expand
+# and collapse entries dynamically later on. Doxygen will expand the tree to
+# such a level that at most the specified number of entries are visible (unless
+# a fully collapsed tree already exceeds this amount). So setting the number of
+# entries 1 will produce a full collapsed tree by default. 0 is a special value
+# representing an infinite number of entries and will result in a full expanded
+# tree by default.
+# Minimum value: 0, maximum value: 9999, default value: 100.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_INDEX_NUM_ENTRIES = 100
+
+# If the GENERATE_DOCSET tag is set to YES, additional index files will be
+# generated that can be used as input for Apple's Xcode 3 integrated development
+# environment (see: http://developer.apple.com/tools/xcode/), introduced with
+# OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a
+# Makefile in the HTML output directory. Running make will produce the docset in
+# that directory and running make install will install the docset in
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at
+# startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html
+# for more information.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_DOCSET        = NO
+
+# This tag determines the name of the docset feed. A documentation feed provides
+# an umbrella under which multiple documentation sets from a single provider
+# (such as a company or product suite) can be grouped.
+# The default value is: Doxygen generated docs.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
+
+DOCSET_FEEDNAME        = "Doxygen generated docs"
+
+# This tag specifies a string that should uniquely identify the documentation
+# set bundle. This should be a reverse domain-name style string, e.g.
+# com.mycompany.MyDocSet. Doxygen will append .docset to the name.
+# The default value is: org.doxygen.Project.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
+
+DOCSET_BUNDLE_ID       = org.doxygen.Project
+
+# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify
+# the documentation publisher. This should be a reverse domain-name style
+# string, e.g. com.mycompany.MyDocSet.documentation.
+# The default value is: org.doxygen.Publisher.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
+
+DOCSET_PUBLISHER_ID    = org.doxygen.Publisher
+
+# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher.
+# The default value is: Publisher.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
+
+DOCSET_PUBLISHER_NAME  = Publisher
+
+# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three
+# additional HTML index files: index.hhp, index.hhc, and index.hhk. The
+# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop
+# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on
+# Windows.
+#
+# The HTML Help Workshop contains a compiler that can convert all HTML output
+# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML
+# files are now used as the Windows 98 help format, and will replace the old
+# Windows help format (.hlp) on all Windows platforms in the future. Compressed
+# HTML files also contain an index, a table of contents, and you can search for
+# words in the documentation. The HTML workshop also contains a viewer for
+# compressed HTML files.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_HTMLHELP      = NO
+
+# The CHM_FILE tag can be used to specify the file name of the resulting .chm
+# file. You can add a path in front of the file if the result should not be
+# written to the html output directory.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+CHM_FILE               =
+
+# The HHC_LOCATION tag can be used to specify the location (absolute path
+# including file name) of the HTML help compiler (hhc.exe). If non-empty,
+# doxygen will try to run the HTML help compiler on the generated index.hhp.
+# The file has to be specified with full path.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+HHC_LOCATION           =
+
+# The GENERATE_CHI flag controls if a separate .chi index file is generated
+# (YES) or that it should be included in the master .chm file (NO).
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+GENERATE_CHI           = NO
+
+# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc)
+# and project file content.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+CHM_INDEX_ENCODING     =
+
+# The BINARY_TOC flag controls whether a binary table of contents is generated
+# (YES) or a normal table of contents (NO) in the .chm file. Furthermore it
+# enables the Previous and Next buttons.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+BINARY_TOC             = NO
+
+# The TOC_EXPAND flag can be set to YES to add extra items for group members to
+# the table of contents of the HTML help documentation and to the tree view.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+TOC_EXPAND             = NO
+
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and
+# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that
+# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help
+# (.qch) of the generated HTML documentation.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_QHP           = NO
+
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify
+# the file name of the resulting .qch file. The path specified is relative to
+# the HTML output folder.
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QCH_FILE               =
+
+# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help
+# Project output. For more information please see Qt Help Project / Namespace
+# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace).
+# The default value is: org.doxygen.Project.
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_NAMESPACE          = org.doxygen.Project
+
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt
+# Help Project output. For more information please see Qt Help Project / Virtual
+# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual-
+# folders).
+# The default value is: doc.
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_VIRTUAL_FOLDER     = doc
+
+# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom
+# filter to add. For more information please see Qt Help Project / Custom
+# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-
+# filters).
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_CUST_FILTER_NAME   =
+
+# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the
+# custom filter to add. For more information please see Qt Help Project / Custom
+# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-
+# filters).
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_CUST_FILTER_ATTRS  =
+
+# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this
+# project's filter section matches. Qt Help Project / Filter Attributes (see:
+# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes).
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_SECT_FILTER_ATTRS  =
+
+# The QHG_LOCATION tag can be used to specify the location of Qt's
+# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the
+# generated .qhp file.
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHG_LOCATION           =
+
+# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be
+# generated, together with the HTML files, they form an Eclipse help plugin. To
+# install this plugin and make it available under the help contents menu in
+# Eclipse, the contents of the directory containing the HTML and XML files needs
+# to be copied into the plugins directory of eclipse. The name of the directory
+# within the plugins directory should be the same as the ECLIPSE_DOC_ID value.
+# After copying Eclipse needs to be restarted before the help appears.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_ECLIPSEHELP   = NO
+
+# A unique identifier for the Eclipse help plugin. When installing the plugin
+# the directory name containing the HTML and XML files should also have this
+# name. Each documentation set should have its own identifier.
+# The default value is: org.doxygen.Project.
+# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES.
+
+ECLIPSE_DOC_ID         = org.doxygen.Project
+
+# If you want full control over the layout of the generated HTML pages it might
+# be necessary to disable the index and replace it with your own. The
+# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top
+# of each HTML page. A value of NO enables the index and the value YES disables
+# it. Since the tabs in the index contain the same information as the navigation
+# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+DISABLE_INDEX          = NO
+
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
+# structure should be generated to display hierarchical information. If the tag
+# value is set to YES, a side panel will be generated containing a tree-like
+# index structure (just like the one that is generated for HTML Help). For this
+# to work a browser that supports JavaScript, DHTML, CSS and frames is required
+# (i.e. any modern browser). Windows users are probably better off using the
+# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can
+# further fine-tune the look of the index. As an example, the default style
+# sheet generated by doxygen has an example that shows how to put an image at
+# the root of the tree instead of the PROJECT_NAME. Since the tree basically has
+# the same information as the tab index, you could consider setting
+# DISABLE_INDEX to YES when enabling this option.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_TREEVIEW      = NO
+
+# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that
+# doxygen will group on one line in the generated HTML documentation.
+#
+# Note that a value of 0 will completely suppress the enum values from appearing
+# in the overview section.
+# Minimum value: 0, maximum value: 20, default value: 4.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+ENUM_VALUES_PER_LINE   = 4
+
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used
+# to set the initial width (in pixels) of the frame in which the tree is shown.
+# Minimum value: 0, maximum value: 1500, default value: 250.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+TREEVIEW_WIDTH         = 250
+
+# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to
+# external symbols imported via tag files in a separate window.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+EXT_LINKS_IN_WINDOW    = NO
+
+# Use this tag to change the font size of LaTeX formulas included as images in
+# the HTML documentation. When you change the font size after a successful
+# doxygen run you need to manually remove any form_*.png images from the HTML
+# output directory to force them to be regenerated.
+# Minimum value: 8, maximum value: 50, default value: 10.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+FORMULA_FONTSIZE       = 10
+
+# Use the FORMULA_TRANPARENT tag to determine whether or not the images
+# generated for formulas are transparent PNGs. Transparent PNGs are not
+# supported properly for IE 6.0, but are supported on all modern browsers.
+#
+# Note that when changing this option you need to delete any form_*.png files in
+# the HTML output directory before the changes have effect.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+FORMULA_TRANSPARENT    = YES
+
+# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see
+# http://www.mathjax.org) which uses client side Javascript for the rendering
+# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX
+# installed or if you want to formulas look prettier in the HTML output. When
+# enabled you may also need to install MathJax separately and configure the path
+# to it using the MATHJAX_RELPATH option.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+USE_MATHJAX            = NO
+
+# When MathJax is enabled you can set the default output format to be used for
+# the MathJax output. See the MathJax site (see:
+# http://docs.mathjax.org/en/latest/output.html) for more details.
+# Possible values are: HTML-CSS (which is slower, but has the best
+# compatibility), NativeMML (i.e. MathML) and SVG.
+# The default value is: HTML-CSS.
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
+MATHJAX_FORMAT         = HTML-CSS
+
+# When MathJax is enabled you need to specify the location relative to the HTML
+# output directory using the MATHJAX_RELPATH option. The destination directory
+# should contain the MathJax.js script. For instance, if the mathjax directory
+# is located at the same level as the HTML output directory, then
+# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax
+# Content Delivery Network so you can quickly see the result without installing
+# MathJax. However, it is strongly recommended to install a local copy of
+# MathJax from http://www.mathjax.org before deployment.
+# The default value is: http://cdn.mathjax.org/mathjax/latest.
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
+MATHJAX_RELPATH        = http://cdn.mathjax.org/mathjax/latest
+
+# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax
+# extension names that should be enabled during MathJax rendering. For example
+# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
+MATHJAX_EXTENSIONS     =
+
+# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces
+# of code that will be used on startup of the MathJax code. See the MathJax site
+# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an
+# example see the documentation.
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
+MATHJAX_CODEFILE       =
+
+# When the SEARCHENGINE tag is enabled doxygen will generate a search box for
+# the HTML output. The underlying search engine uses javascript and DHTML and
+# should work on any modern browser. Note that when using HTML help
+# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET)
+# there is already a search function so this one should typically be disabled.
+# For large projects the javascript based search engine can be slow, then
+# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to
+# search using the keyboard; to jump to the search box use <access key> + S
+# (what the <access key> is depends on the OS and browser, but it is typically
+# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down
+# key> to jump into the search results window, the results can be navigated
+# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel
+# the search. The filter options can be selected when the cursor is inside the
+# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys>
+# to select a filter and <Enter> or <escape> to activate or cancel the filter
+# option.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+SEARCHENGINE           = YES
+
+# When the SERVER_BASED_SEARCH tag is enabled the search engine will be
+# implemented using a web server instead of a web client using Javascript. There
+# are two flavors of web server based searching depending on the EXTERNAL_SEARCH
+# setting. When disabled, doxygen will generate a PHP script for searching and
+# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing
+# and searching needs to be provided by external tools. See the section
+# "External Indexing and Searching" for details.
+# The default value is: NO.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+SERVER_BASED_SEARCH    = NO
+
+# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP
+# script for searching. Instead the search results are written to an XML file
+# which needs to be processed by an external indexer. Doxygen will invoke an
+# external search engine pointed to by the SEARCHENGINE_URL option to obtain the
+# search results.
+#
+# Doxygen ships with an example indexer (doxyindexer) and search engine
+# (doxysearch.cgi) which are based on the open source search engine library
+# Xapian (see: http://xapian.org/).
+#
+# See the section "External Indexing and Searching" for details.
+# The default value is: NO.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+EXTERNAL_SEARCH        = NO
+
+# The SEARCHENGINE_URL should point to a search engine hosted by a web server
+# which will return the search results when EXTERNAL_SEARCH is enabled.
+#
+# Doxygen ships with an example indexer (doxyindexer) and search engine
+# (doxysearch.cgi) which are based on the open source search engine library
+# Xapian (see: http://xapian.org/). See the section "External Indexing and
+# Searching" for details.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+SEARCHENGINE_URL       =
+
+# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed
+# search data is written to a file for indexing by an external tool. With the
+# SEARCHDATA_FILE tag the name of this file can be specified.
+# The default file is: searchdata.xml.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+SEARCHDATA_FILE        = searchdata.xml
+
+# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the
+# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is
+# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple
+# projects and redirect the results back to the right project.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+EXTERNAL_SEARCH_ID     =
+
+# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen
+# projects other than the one defined by this configuration file, but that are
+# all added to the same external search index. Each project needs to have a
+# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of
+# to a relative location where the documentation can be found. The format is:
+# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ...
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+EXTRA_SEARCH_MAPPINGS  =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output.
+# The default value is: YES.
+
+GENERATE_LATEX         = NO
+
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it.
+# The default directory is: latex.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_OUTPUT           = latex
+
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
+# invoked.
+#
+# Note that when enabling USE_PDFLATEX this option is only used for generating
+# bitmaps for formulas in the HTML output, but not in the Makefile that is
+# written to the output directory.
+# The default file is: latex.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_CMD_NAME         = latex
+
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate
+# index for LaTeX.
+# The default file is: makeindex.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+MAKEINDEX_CMD_NAME     = makeindex
+
+# If the COMPACT_LATEX tag is set to YES, doxygen generates more compact LaTeX
+# documents. This may be useful for small projects and may help to save some
+# trees in general.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+COMPACT_LATEX          = NO
+
+# The PAPER_TYPE tag can be used to set the paper type that is used by the
+# printer.
+# Possible values are: a4 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x
+# 14 inches) and executive (7.25 x 10.5 inches).
+# The default value is: a4.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+PAPER_TYPE             = a4
+
+# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names
+# that should be included in the LaTeX output. The package can be specified just
+# by its name or with the correct syntax as to be used with the LaTeX
+# \usepackage command. To get the times font for instance you can specify :
+# EXTRA_PACKAGES=times or EXTRA_PACKAGES={times}
+# To use the option intlimits with the amsmath package you can specify:
+# EXTRA_PACKAGES=[intlimits]{amsmath}
+# If left blank no extra packages will be included.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+EXTRA_PACKAGES         =
+
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for the
+# generated LaTeX document. The header should contain everything until the first
+# chapter. If it is left blank doxygen will generate a standard header. See
+# section "Doxygen usage" for information on how to let doxygen write the
+# default header to a separate file.
+#
+# Note: Only use a user-defined header if you know what you are doing! The
+# following commands have a special meaning inside the header: $title,
+# $datetime, $date, $doxygenversion, $projectname, $projectnumber,
+# $projectbrief, $projectlogo. Doxygen will replace $title with the empty
+# string, for the replacement values of the other commands the user is referred
+# to HTML_HEADER.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_HEADER           =
+
+# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the
+# generated LaTeX document. The footer should contain everything after the last
+# chapter. If it is left blank doxygen will generate a standard footer. See
+# LATEX_HEADER for more information on how to generate a default footer and what
+# special commands can be used inside the footer.
+#
+# Note: Only use a user-defined footer if you know what you are doing!
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_FOOTER           =
+
+# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined
+# LaTeX style sheets that are included after the standard style sheets created
+# by doxygen. Using this option one can overrule certain style aspects. Doxygen
+# will copy the style sheet files to the output directory.
+# Note: The order of the extra style sheet files is of importance (e.g. the last
+# style sheet in the list overrules the setting of the previous ones in the
+# list).
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_EXTRA_STYLESHEET =
+
+# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or
+# other source files which should be copied to the LATEX_OUTPUT output
+# directory. Note that the files will be copied as-is; there are no commands or
+# markers available.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_EXTRA_FILES      =
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is
+# prepared for conversion to PDF (using ps2pdf or pdflatex). The PDF file will
+# contain links (just like the HTML output) instead of page references. This
+# makes the output suitable for online browsing using a PDF viewer.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+PDF_HYPERLINKS         = YES
+
+# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate
+# the PDF file directly from the LaTeX files. Set this option to YES, to get a
+# higher quality PDF documentation.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+USE_PDFLATEX           = YES
+
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \batchmode
+# command to the generated LaTeX files. This will instruct LaTeX to keep running
+# if errors occur, instead of asking the user for help. This option is also used
+# when generating formulas in HTML.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_BATCHMODE        = NO
+
+# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the
+# index chapters (such as File Index, Compound Index, etc.) in the output.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_HIDE_INDICES     = NO
+
+# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source
+# code with syntax highlighting in the LaTeX output.
+#
+# Note that which sources are shown also depends on other settings such as
+# SOURCE_BROWSER.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_SOURCE_CODE      = NO
+
+# The LATEX_BIB_STYLE tag can be used to specify the style to use for the
+# bibliography, e.g. plainnat, or ieeetr. See
+# http://en.wikipedia.org/wiki/BibTeX and \cite for more info.
+# The default value is: plain.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_BIB_STYLE        = plain
+
+# If the LATEX_TIMESTAMP tag is set to YES then the footer of each generated
+# page will contain the date and time when the page was generated. Setting this
+# to NO can help when comparing the output of multiple runs.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_TIMESTAMP        = NO
+
+#---------------------------------------------------------------------------
+# Configuration options related to the RTF output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_RTF tag is set to YES, doxygen will generate RTF output. The
+# RTF output is optimized for Word 97 and may not look too pretty with other RTF
+# readers/editors.
+# The default value is: NO.
+
+GENERATE_RTF           = NO
+
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it.
+# The default directory is: rtf.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
+RTF_OUTPUT             = rtf
+
+# If the COMPACT_RTF tag is set to YES, doxygen generates more compact RTF
+# documents. This may be useful for small projects and may help to save some
+# trees in general.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
+COMPACT_RTF            = NO
+
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated will
+# contain hyperlink fields. The RTF file will contain links (just like the HTML
+# output) instead of page references. This makes the output suitable for online
+# browsing using Word or some other Word compatible readers that support those
+# fields.
+#
+# Note: WordPad (write) and others do not support links.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
+RTF_HYPERLINKS         = NO
+
+# Load stylesheet definitions from file. Syntax is similar to doxygen's config
+# file, i.e. a series of assignments. You only have to provide replacements,
+# missing definitions are set to their default value.
+#
+# See also section "Doxygen usage" for information on how to generate the
+# default style sheet that doxygen normally uses.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
+RTF_STYLESHEET_FILE    =
+
+# Set optional variables used in the generation of an RTF document. Syntax is
+# similar to doxygen's config file. A template extensions file can be generated
+# using doxygen -e rtf extensionFile.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
+RTF_EXTENSIONS_FILE    =
+
+# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code
+# with syntax highlighting in the RTF output.
+#
+# Note that which sources are shown also depends on other settings such as
+# SOURCE_BROWSER.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
+RTF_SOURCE_CODE        = NO
+
+#---------------------------------------------------------------------------
+# Configuration options related to the man page output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for
+# classes and files.
+# The default value is: NO.
+
+GENERATE_MAN           = NO
+
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it. A directory man3 will be created inside the directory specified by
+# MAN_OUTPUT.
+# The default directory is: man.
+# This tag requires that the tag GENERATE_MAN is set to YES.
+
+MAN_OUTPUT             = man
+
+# The MAN_EXTENSION tag determines the extension that is added to the generated
+# man pages. In case the manual section does not start with a number, the number
+# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is
+# optional.
+# The default value is: .3.
+# This tag requires that the tag GENERATE_MAN is set to YES.
+
+MAN_EXTENSION          = .3
+
+# The MAN_SUBDIR tag determines the name of the directory created within
+# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by
+# MAN_EXTENSION with the initial . removed.
+# This tag requires that the tag GENERATE_MAN is set to YES.
+
+MAN_SUBDIR             =
+
+# If the MAN_LINKS tag is set to YES and doxygen generates man output, then it
+# will generate one additional man file for each entity documented in the real
+# man page(s). These additional files only source the real man page, but without
+# them the man command would be unable to find the correct page.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_MAN is set to YES.
+
+MAN_LINKS              = NO
+
+#---------------------------------------------------------------------------
+# Configuration options related to the XML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_XML tag is set to YES, doxygen will generate an XML file that
+# captures the structure of the code including all documentation.
+# The default value is: NO.
+
+GENERATE_XML           = NO
+
+# The XML_OUTPUT tag is used to specify where the XML pages will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it.
+# The default directory is: xml.
+# This tag requires that the tag GENERATE_XML is set to YES.
+
+XML_OUTPUT             = xml
+
+# If the XML_PROGRAMLISTING tag is set to YES, doxygen will dump the program
+# listings (including syntax highlighting and cross-referencing information) to
+# the XML output. Note that enabling this will significantly increase the size
+# of the XML output.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_XML is set to YES.
+
+XML_PROGRAMLISTING     = YES
+
+#---------------------------------------------------------------------------
+# Configuration options related to the DOCBOOK output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files
+# that can be used to generate PDF.
+# The default value is: NO.
+
+GENERATE_DOCBOOK       = NO
+
+# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in
+# front of it.
+# The default directory is: docbook.
+# This tag requires that the tag GENERATE_DOCBOOK is set to YES.
+
+DOCBOOK_OUTPUT         = docbook
+
+# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the
+# program listings (including syntax highlighting and cross-referencing
+# information) to the DOCBOOK output. Note that enabling this will significantly
+# increase the size of the DOCBOOK output.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_DOCBOOK is set to YES.
+
+DOCBOOK_PROGRAMLISTING = NO
+
+#---------------------------------------------------------------------------
+# Configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an
+# AutoGen Definitions (see http://autogen.sf.net) file that captures the
+# structure of the code including all documentation. Note that this feature is
+# still experimental and incomplete at the moment.
+# The default value is: NO.
+
+GENERATE_AUTOGEN_DEF   = NO
+
+#---------------------------------------------------------------------------
+# Configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_PERLMOD tag is set to YES, doxygen will generate a Perl module
+# file that captures the structure of the code including all documentation.
+#
+# Note that this feature is still experimental and incomplete at the moment.
+# The default value is: NO.
+
+GENERATE_PERLMOD       = NO
+
+# If the PERLMOD_LATEX tag is set to YES, doxygen will generate the necessary
+# Makefile rules, Perl scripts and LaTeX code to be able to generate PDF and DVI
+# output from the Perl module output.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_PERLMOD is set to YES.
+
+PERLMOD_LATEX          = NO
+
+# If the PERLMOD_PRETTY tag is set to YES, the Perl module output will be nicely
+# formatted so it can be parsed by a human reader. This is useful if you want to
+# understand what is going on. On the other hand, if this tag is set to NO, the
+# size of the Perl module output will be much smaller and Perl will parse it
+# just the same.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_PERLMOD is set to YES.
+
+PERLMOD_PRETTY         = YES
+
+# The names of the make variables in the generated doxyrules.make file are
+# prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. This is useful
+# so different doxyrules.make files included by the same Makefile don't
+# overwrite each other's variables.
+# This tag requires that the tag GENERATE_PERLMOD is set to YES.
+
+PERLMOD_MAKEVAR_PREFIX =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor
+#---------------------------------------------------------------------------
+
+# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all
+# C-preprocessor directives found in the sources and include files.
+# The default value is: YES.
+
+ENABLE_PREPROCESSING   = YES
+
+# If the MACRO_EXPANSION tag is set to YES, doxygen will expand all macro names
+# in the source code. If set to NO, only conditional compilation will be
+# performed. Macro expansion can be done in a controlled way by setting
+# EXPAND_ONLY_PREDEF to YES.
+# The default value is: NO.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+MACRO_EXPANSION        = NO
+
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES then
+# the macro expansion is limited to the macros specified with the PREDEFINED and
+# EXPAND_AS_DEFINED tags.
+# The default value is: NO.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+EXPAND_ONLY_PREDEF     = NO
+
+# If the SEARCH_INCLUDES tag is set to YES, the include files in the
+# INCLUDE_PATH will be searched if a #include is found.
+# The default value is: YES.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+SEARCH_INCLUDES        = YES
+
+# The INCLUDE_PATH tag can be used to specify one or more directories that
+# contain include files that are not input files but should be processed by the
+# preprocessor.
+# This tag requires that the tag SEARCH_INCLUDES is set to YES.
+
+INCLUDE_PATH           =
+
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
+# patterns (like *.h and *.hpp) to filter out the header-files in the
+# directories. If left blank, the patterns specified with FILE_PATTERNS will be
+# used.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+INCLUDE_FILE_PATTERNS  =
+
+# The PREDEFINED tag can be used to specify one or more macro names that are
+# defined before the preprocessor is started (similar to the -D option of e.g.
+# gcc). The argument of the tag is a list of macros of the form: name or
+# name=definition (no spaces). If the definition and the "=" are omitted, "=1"
+# is assumed. To prevent a macro definition from being undefined via #undef or
+# recursively expanded use the := operator instead of the = operator.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+PREDEFINED             =
+
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this
+# tag can be used to specify a list of macro names that should be expanded. The
+# macro definition that is found in the sources will be used. Use the PREDEFINED
+# tag if you want to use a different macro definition that overrules the
+# definition found in the source code.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+EXPAND_AS_DEFINED      =
+
+# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will
+# remove all references to function-like macros that are alone on a line, have
+# an all uppercase name, and do not end with a semicolon. Such function macros
+# are typically used for boiler-plate code, and will confuse the parser if not
+# removed.
+# The default value is: YES.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+SKIP_FUNCTION_MACROS   = YES
+
+#---------------------------------------------------------------------------
+# Configuration options related to external references
+#---------------------------------------------------------------------------
+
+# The TAGFILES tag can be used to specify one or more tag files. For each tag
+# file the location of the external documentation should be added. The format of
+# a tag file without this location is as follows:
+# TAGFILES = file1 file2 ...
+# Adding location for the tag files is done as follows:
+# TAGFILES = file1=loc1 "file2 = loc2" ...
+# where loc1 and loc2 can be relative or absolute paths or URLs. See the
+# section "Linking to external documentation" for more information about the use
+# of tag files.
+# Note: Each tag file must have a unique name (where the name does NOT include
+# the path). If a tag file is not located in the directory in which doxygen is
+# run, you must also specify the path to the tagfile here.
+
+TAGFILES               =
+
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create a
+# tag file that is based on the input files it reads. See section "Linking to
+# external documentation" for more information about the usage of tag files.
+
+GENERATE_TAGFILE       =
+
+# If the ALLEXTERNALS tag is set to YES, all external class will be listed in
+# the class index. If set to NO, only the inherited external classes will be
+# listed.
+# The default value is: NO.
+
+ALLEXTERNALS           = NO
+
+# If the EXTERNAL_GROUPS tag is set to YES, all external groups will be listed
+# in the modules index. If set to NO, only the current project's groups will be
+# listed.
+# The default value is: YES.
+
+EXTERNAL_GROUPS        = YES
+
+# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in
+# the related pages index. If set to NO, only the current project's pages will
+# be listed.
+# The default value is: YES.
+
+EXTERNAL_PAGES         = YES
+
+# The PERL_PATH should be the absolute path and name of the perl script
+# interpreter (i.e. the result of 'which perl').
+# The default file (with absolute path) is: /usr/bin/perl.
+
+PERL_PATH              = /usr/bin/perl
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool
+#---------------------------------------------------------------------------
+
+# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram
+# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to
+# NO turns the diagrams off. Note that this option also works with HAVE_DOT
+# disabled, but it is recommended to install and use dot, since it yields more
+# powerful graphs.
+# The default value is: YES.
+
+CLASS_DIAGRAMS         = YES
+
+# You can define message sequence charts within doxygen comments using the \msc
+# command. Doxygen will then run the mscgen tool (see:
+# http://www.mcternan.me.uk/mscgen/)) to produce the chart and insert it in the
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where
+# the mscgen tool resides. If left empty the tool is assumed to be found in the
+# default search path.
+
+MSCGEN_PATH            =
+
+# You can include diagrams made with dia in doxygen documentation. Doxygen will
+# then run dia to produce the diagram and insert it in the documentation. The
+# DIA_PATH tag allows you to specify the directory where the dia binary resides.
+# If left empty dia is assumed to be found in the default search path.
+
+DIA_PATH               =
+
+# If set to YES the inheritance and collaboration graphs will hide inheritance
+# and usage relations if the target is undocumented or is not a class.
+# The default value is: YES.
+
+HIDE_UNDOC_RELATIONS   = YES
+
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
+# available from the path. This tool is part of Graphviz (see:
+# http://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent
+# Bell Labs. The other options in this section have no effect if this option is
+# set to NO
+# The default value is: NO.
+
+HAVE_DOT               = NO
+
+# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed
+# to run in parallel. When set to 0 doxygen will base this on the number of
+# processors available in the system. You can set it explicitly to a value
+# larger than 0 to get control over the balance between CPU load and processing
+# speed.
+# Minimum value: 0, maximum value: 32, default value: 0.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_NUM_THREADS        = 0
+
+# When you want a differently looking font in the dot files that doxygen
+# generates you can specify the font name using DOT_FONTNAME. You need to make
+# sure dot is able to find the font, which can be done by putting it in a
+# standard location or by setting the DOTFONTPATH environment variable or by
+# setting DOT_FONTPATH to the directory containing the font.
+# The default value is: Helvetica.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_FONTNAME           = Helvetica
+
+# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of
+# dot graphs.
+# Minimum value: 4, maximum value: 24, default value: 10.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_FONTSIZE           = 10
+
+# By default doxygen will tell dot to use the default font as specified with
+# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set
+# the path where dot can find it using this tag.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_FONTPATH           =
+
+# If the CLASS_GRAPH tag is set to YES then doxygen will generate a graph for
+# each documented class showing the direct and indirect inheritance relations.
+# Setting this tag to YES will force the CLASS_DIAGRAMS tag to NO.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+CLASS_GRAPH            = YES
+
+# If the COLLABORATION_GRAPH tag is set to YES then doxygen will generate a
+# graph for each documented class showing the direct and indirect implementation
+# dependencies (inheritance, containment, and class references variables) of the
+# class with other documented classes.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+COLLABORATION_GRAPH    = YES
+
+# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for
+# groups, showing the direct groups dependencies.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+GROUP_GRAPHS           = YES
+
+# If the UML_LOOK tag is set to YES, doxygen will generate inheritance and
+# collaboration diagrams in a style similar to the OMG's Unified Modeling
+# Language.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+UML_LOOK               = NO
+
+# If the UML_LOOK tag is enabled, the fields and methods are shown inside the
+# class node. If there are many fields or methods and many nodes the graph may
+# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the
+# number of items for each type to make the size more manageable. Set this to 0
+# for no limit. Note that the threshold may be exceeded by 50% before the limit
+# is enforced. So when you set the threshold to 10, up to 15 fields may appear,
+# but if the number exceeds 15, the total amount of fields shown is limited to
+# 10.
+# Minimum value: 0, maximum value: 100, default value: 10.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+UML_LIMIT_NUM_FIELDS   = 10
+
+# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and
+# collaboration graphs will show the relations between templates and their
+# instances.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+TEMPLATE_RELATIONS     = NO
+
+# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are set to
+# YES then doxygen will generate a graph for each documented file showing the
+# direct and indirect include dependencies of the file with other documented
+# files.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+INCLUDE_GRAPH          = YES
+
+# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are
+# set to YES then doxygen will generate a graph for each documented file showing
+# the direct and indirect include dependencies of the file with other documented
+# files.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+INCLUDED_BY_GRAPH      = YES
+
+# If the CALL_GRAPH tag is set to YES then doxygen will generate a call
+# dependency graph for every global function or class method.
+#
+# Note that enabling this option will significantly increase the time of a run.
+# So in most cases it will be better to enable call graphs for selected
+# functions only using the \callgraph command. Disabling a call graph can be
+# accomplished by means of the command \hidecallgraph.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+CALL_GRAPH             = NO
+
+# If the CALLER_GRAPH tag is set to YES then doxygen will generate a caller
+# dependency graph for every global function or class method.
+#
+# Note that enabling this option will significantly increase the time of a run.
+# So in most cases it will be better to enable caller graphs for selected
+# functions only using the \callergraph command. Disabling a caller graph can be
+# accomplished by means of the command \hidecallergraph.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+CALLER_GRAPH           = NO
+
+# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical
+# hierarchy of all classes instead of a textual one.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+GRAPHICAL_HIERARCHY    = YES
+
+# If the DIRECTORY_GRAPH tag is set to YES then doxygen will show the
+# dependencies a directory has on other directories in a graphical way. The
+# dependency relations are determined by the #include relations between the
+# files in the directories.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DIRECTORY_GRAPH        = YES
+
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
+# generated by dot. For an explanation of the image formats see the section
+# output formats in the documentation of the dot tool (Graphviz (see:
+# http://www.graphviz.org/)).
+# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order
+# to make the SVG files visible in IE 9+ (other browsers do not have this
+# requirement).
+# Possible values are: png, jpg, gif, svg, png:gd, png:gd:gd, png:cairo,
+# png:cairo:gd, png:cairo:cairo, png:cairo:gdiplus, png:gdiplus and
+# png:gdiplus:gdiplus.
+# The default value is: png.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_IMAGE_FORMAT       = png
+
+# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to
+# enable generation of interactive SVG images that allow zooming and panning.
+#
+# Note that this requires a modern browser other than Internet Explorer. Tested
+# and working are Firefox, Chrome, Safari, and Opera.
+# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make
+# the SVG files visible. Older versions of IE do not have SVG support.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+INTERACTIVE_SVG        = NO
+
+# The DOT_PATH tag can be used to specify the path where the dot tool can be
+# found. If left blank, it is assumed the dot tool can be found in the path.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_PATH               =
+
+# The DOTFILE_DIRS tag can be used to specify one or more directories that
+# contain dot files that are included in the documentation (see the \dotfile
+# command).
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOTFILE_DIRS           =
+
+# The MSCFILE_DIRS tag can be used to specify one or more directories that
+# contain msc files that are included in the documentation (see the \mscfile
+# command).
+
+MSCFILE_DIRS           =
+
+# The DIAFILE_DIRS tag can be used to specify one or more directories that
+# contain dia files that are included in the documentation (see the \diafile
+# command).
+
+DIAFILE_DIRS           =
+
+# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the
+# path where java can find the plantuml.jar file. If left blank, it is assumed
+# PlantUML is not used or called during a preprocessing step. Doxygen will
+# generate a warning when it encounters a \startuml command in this case and
+# will not generate output for the diagram.
+
+PLANTUML_JAR_PATH      =
+
+# When using plantuml, the specified paths are searched for files specified by
+# the !include statement in a plantuml block.
+
+PLANTUML_INCLUDE_PATH  =
+
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes
+# that will be shown in the graph. If the number of nodes in a graph becomes
+# larger than this value, doxygen will truncate the graph, which is visualized
+# by representing a node as a red box. Note that doxygen if the number of direct
+# children of the root node in a graph is already larger than
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note that
+# the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
+# Minimum value: 0, maximum value: 10000, default value: 50.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_GRAPH_MAX_NODES    = 50
+
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the graphs
+# generated by dot. A depth value of 3 means that only nodes reachable from the
+# root by following a path via at most 3 edges will be shown. Nodes that lay
+# further from the root node will be omitted. Note that setting this option to 1
+# or 2 may greatly reduce the computation time needed for large code bases. Also
+# note that the size of a graph can be further restricted by
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
+# Minimum value: 0, maximum value: 1000, default value: 0.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+MAX_DOT_GRAPH_DEPTH    = 0
+
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
+# background. This is disabled by default, because dot on Windows does not seem
+# to support this out of the box.
+#
+# Warning: Depending on the platform used, enabling this option may lead to
+# badly anti-aliased labels on the edges of a graph (i.e. they become hard to
+# read).
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_TRANSPARENT        = NO
+
+# Set the DOT_MULTI_TARGETS tag to YES to allow dot to generate multiple output
+# files in one run (i.e. multiple -o and -T options on the command line). This
+# makes dot run faster, but since only newer versions of dot (>1.8.10) support
+# this, this feature is disabled by default.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_MULTI_TARGETS      = NO
+
+# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page
+# explaining the meaning of the various boxes and arrows in the dot generated
+# graphs.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+GENERATE_LEGEND        = YES
+
+# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot
+# files that are used to generate the various graphs.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_CLEANUP            = YES
diff --git a/README.md b/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..dc4077a86ead8a1df52e30d78c2511bdc268cecf
--- /dev/null
+++ b/README.md
@@ -0,0 +1,190 @@
+# Status Monitor
+
+## Config
+
+Configuration is read from `appsettings.json` file that needs to be placed in the same directory as the `docker-compose.yml`.
+Application reads two AppSettings files - internal `appsettings.json` (`src/appsettings.json`) with default values and then the one provided by user.
+Values in the second file override values in the first one.
+
+Bellow is the configuration file with all options explained in comments:
+
+```
+{
+	"CompanyName": "Orange Inc.", // Company / organization name. Appears in the UI.
+	"Secrets": { // This section needs to be overridden and kept in secret
+		"ApiKey": "needs-to-be-set", // API Key to be used for API requests
+		"AdminPassword": "needs-to-be-set", // Plain text password for administrator user
+		"ReCaptcha": { // Settings for Google ReCaptcha (https://www.google.com/recaptcha/)
+			"Enabled": false, // if false, ReCaptcha will not be displayed and checked
+			"SiteKey": "needs-to-be-set", // Site key provided by Google
+			"SecretKey": "needs-to-be-set" // Secret key provided by Google
+		},
+		"ConnectionString": "needs-to-be-set", // Connection string to PostgreSQL database
+		"Email": {
+			"Enabled": true, // If false, all messages sent to email service will be logged to STDOUT instead
+			"ToEmail": "needs-to-be-set", // email of the recipient
+			"FromTitle": "Status site notificator", // Title of sender
+			"FromEmail": "needs-to-be-set", // Email of sender (also serves as login to SMTP server)
+			"Password": "needs-to-be-set", // Password for SMTP server
+			"Host": "needs-to-be-set", // Hostname / IP of SMTP server
+			"SMTP": {
+				"Port": -1, // SMTP port
+				"Security": "needs-to-be-set" // SMTP Security option (one of Auto, None, SslOnConnect, StartTls, StartTlsWhenAvailable)
+			}
+		},
+		"Slack": {
+			"Enabled": true, // If false, all messages sent to slack service will be logged to STDOUT instead
+			"WebHook": "needs-to-be-set" // Slack webhook URL which uniquely defines chanel (https://api.slack.com/incoming-webhooks)
+		}
+	},
+	"Data": { // Static data put into DB during app initialization. Rarely override this section
+		"PingSettings": [{ // Array of servers to ping
+			"ServerUrl": "https://google.com", // URL to ping (FQDN required)
+			"MaxResponseTime": 2000, // The time after which to consider service unavailable, milliseconds
+			"MaxFailures": 3, // Allowed number of consecutive failures before call server dead
+			"GetMethodRequired": false // If true, HTTP GET method will be used to ping, HTTP HEAD otherwise
+		}],
+		"AutoLabels": { // Human readable titles for AutoLabels enum
+			"Normal": "Normal operation",
+			"Warning": "Minor degradation",
+			"Critical": "Critical Problem"
+		},
+		"ManualLabels": { // Human readable titles for ManualLabels enum
+			"None": "",
+			"Investigating": "Investigating the issue"
+		},
+		"CompilationStages": { // Human readable titles for CompilationStages enum
+			"M4": "M4 Stage",
+			"SandPiper": "SandPiper",
+			"Simulation": "Simulation"
+		},
+		"UserActions": { // Human readable titles for UserActions enum
+			"Login": "Login",
+			"Logout": "Logout",
+			"Register": "Register",
+			"ProjectCreated": "Created a project",
+			"ProjectEdited": "Edited a project",
+			"Visit": "Visit"
+		},
+		"LogEntrySeverities": { // Human readable titles for LogEntrySeverities enum
+			"Debug": "Debug",
+			"Detail": "Detail",
+			"User": "User",
+			"Info": "Info",
+			"Warn": "Warning",
+			"Error": "Error",
+			"Fatal": "Fatal"
+		},
+		"Metrics": { // Human readable titles for Metrics enum
+			"CpuLoad": "CPU Load",
+			"UserAction": "User Actions",
+			"Compilation": "Compilations",
+			"Log": "Log Messages",
+			"Ping": "Response time"
+		}
+	},
+	"Logging": { // This section (except "LogSeverityReported") refers to status site own internal logging as an application (not API logging)
+		"MinLogLevel": "Information", // Minimal log level of status site itself to send to STDOUT
+		"LogSeverityReported": "Error", // Minimal log entry severity to notify user about
+		"Exclude": [ // Array of strings which if contained in the status site log source to ignore
+			"Microsoft."
+		]
+	},
+	"Guard": { // This section defines protection settings for some API endpoints
+		"Logging": { // Protection of /api/logmessage endpoint from SPAMing
+			"Requests": 10, // Number of requests to allow from a single source and category per timeframe
+			"PerSeconds": 10 // Timeframe in seconds
+		}
+	},
+	"ServiceManager": {
+		"CacheService": {
+			"Enabled": true, // Whether to use the service
+			"Interval": 30 // How many seconds to wait between re-runs of the service
+		},
+		"CleanService": {
+			"Enabled": true, // Whether to use the service
+			"Interval": 900, // How many seconds to wait between re-runs of the service
+			"MaxAge": 18000 // A number of seconds that defines a maximum age of data points and log entries before they are cleaned by the service
+		},
+		"PingService": {
+			"Enabled": true, // Whether to use the service
+			"Interval": 60 // How many seconds to wait between re-runs of the service
+		},
+		"DemoService": {
+			"Enabled": true, // Whether to use the service
+			"Interval": 30, // How many seconds to wait between re-runs of the service
+			"Gaps": {
+				"Enabled": false, // If true, then the gaps in data will be periodically generated
+				"Frequency": 10 // N, where once in N runs a gap is generated
+			}
+		},
+		"DiscrepancyService": {
+			"Enabled": true, // Whether to use the service
+			"Interval": 60, // How many seconds to wait between re-runs of the service
+			"DataTimeframe": 1800, // Number of seconds of data to consider counting from the time of running the service when looking for discrepancies
+			"Gaps": {
+				"MaxDifference": 60 // Number of seconds multiplied by 1.5 to consider as gap
+			},
+			"Load": {
+				"Threshold": 90, // From which load to consider server high-loaded (only CPU)
+				"MaxFailures": 5 // Max allowed number of consecutive high loads before it gets reported
+			}
+		},
+		"NotificationService": {
+			"Enabled": true, // Whether to use the service
+			"Interval": 30, // How many seconds to wait between re-runs of the service
+			"Frequencies": { // Number of seconds to wait before sending out notifications of given severity
+				"Low": 86400,
+				"Medium": 360,
+				"High": 60 // Example: notifications of high severity will be sent no more than once in 60 seconds
+			}
+		}
+	}
+}
+```
+
+## Files and directories
+
+### Confirguration / Dependencies
+
+* `bower.json` / `.bowerrc` - define packages and configuration for Bower (front-end libraries manager). 
+Do not manage them manually, use `bower ...` command.
+* `appsettings.json` - configuration for the app. 
+The app will read it during the initialization. 
+The most important thing it ontains is a database connections string **with sensitive information**.
+* `build.sh` - contains build commands to produce a set of binaries executable in a runtime environemnt. 
+Does **not** install any dev dependencies.
+* `docker-compose.*` - configuration for Docker Compose. 
+Defines which containers need to be created and how they connect to each other. 
+*build* version will try to build a container for the app, rather than pull it from the registry. 
+Therefore, `./build.sh` needs to be executed before.
+* `nginx.conf` - contains configuration for app's server block. 
+This file is mounted by NGINX Docker container when deploying.
+* `status-site.csproj` - app's project file. Only *Packages* section shall be manually modified.
+* `version.json` - this file is recreated during each build. 
+It contains a current commit's hash. 
+This file is used to display the build hash in the app itself.
+
+### Application
+
+* `Program.cs` - entry point. Builds and runs a server object.
+* `Startup.cs` - configuration for server.
+* `Controllers/` - controller classes. 
+Primary purpose is to accept external web requests.
+The fefault routing is /{controller-name}/{action-name}.
+Default routing may be extended in Startup.ConfigureServices() method.
+* `Services/` - service classes. 
+Each service is responsible for a single bit of functionality. 
+Each service has to be defined as an interface and implementation. 
+Services are autoinjectible into controllers (see `Startup.cs`).
+* `Views/` - Razor files. 
+Razor is a markup/templating language. 
+Razor C#-like constructions are used in HTML markup. 
+For autodiscovery, views that belong to a controller need to be placed inside a folder named after that controller.
+* `Views/Shared/` - master page, common layout.
+* `Models` - model classes for the app.
+* `Models/Entities` - models that get mapped to database tables 
+(see [Entity Framework](https://docs.microsoft.com/en-us/ef/core/)).
+* `Models/DataContext.cs` - class responsible for managing entities 
+(see [Entity Framework](https://docs.microsoft.com/en-us/ef/core/)).
+* `Extensions` - adds methods to buit-in .NET classes.
diff --git a/api.yml b/api.yml
new file mode 100644
index 0000000000000000000000000000000000000000..4bd1195f19551a8237a0d9fb50bb97e804729eb6
--- /dev/null
+++ b/api.yml
@@ -0,0 +1,754 @@
+# Status Site API
+swagger: '2.0'
+info:
+  title: Status Site API
+  description: |
+    Collects, processes and provides various data regarding the status of 
+    the services.
+  version: "1.0.0"
+host: status.makerchip.com
+securityDefinitions:
+  apiauth:
+    type: apiKey
+    description: |
+      The API key needed for authentication and authorization.
+    name: apikey
+    in: header
+  userauth:
+    type: basic
+    authorizationUrl: /account/login
+    description: |
+      Cookie based authrization.
+      User should login here: `/account/login` and upon succesful login the cookie is returned.
+schemes:
+  - https
+  - http
+basePath: /api
+produces:
+  - application/json
+  - text/plain
+paths:
+  
+  /cpuload:
+    post:
+      summary: CPU Load data
+      description: |
+        CPU Load enpoint collects data regarding CPU load from different 
+        sources. Particularly, a single number, CPU load percentage is expected.
+      consumes:
+        - application/x-www-form-urlencoded
+      produces:
+        - text/plain
+      parameters:
+        - name: value
+          in: formData
+          description: Value of CPU load, percentage
+          required: true
+          type: integer
+          format: int32
+          example: 25
+        - &SOURCE_PARAM
+          name: source
+          in: formData
+          description: |
+            The source of data. 
+            Should uniquely represent the entity which sends the data. 
+            For example, server identifier or website URL. 
+            Has to satisfy regexp `[a-z0-9\\.\\-]+` and be no more than 32 characters long.
+          required: true
+          type: string
+          format: string
+          example: "the-server"
+      security:
+        - apiauth: ["status"]
+        - userauth: ["status"]
+      responses:
+        401:
+          &401
+          description: Unauthorized. API Key is invalid or missing.
+        400:
+          &400
+          description: Bad Request. One or more parameters are invalid or missing.
+        200:
+          &200
+          description: OK. The data has been saved.
+        default:
+          &500
+          description: Internal server error (500)
+  
+  /compilation:
+    post:
+      summary: Compilation stage completion report
+      description: |
+        Compilation enpoint collects data regarding completed compilations from different 
+        sources. Particularly, source size, compilation time for a particular stage are expected.
+      consumes:
+        - application/x-www-form-urlencoded
+      produces:
+        - text/plain
+      parameters:
+        - name: stage
+          in: formData
+          description: Compilation stage completed
+          required: true
+          type: string
+          format: string
+          enum:
+            - "m4"
+            - "sandpiper"
+            - "simulation"
+          example: "m4"
+        - name: sourcesize
+          in: formData
+          description: Size of the source code in bytes
+          required: true
+          type: number
+          format: int32
+          example: "512256"
+        - name: compiletime
+          in: formData
+          description: Time spent for compilation stage in milliseconds
+          required: true
+          type: number
+          format: int32
+          example: "659"
+        - <<: *SOURCE_PARAM
+      security:
+        - apiauth: ["status"]
+        - userauth: ["status"]
+      responses:
+        401:
+          <<: *401
+        400:
+          <<: *400
+        200:
+          <<: *200
+        default:
+          <<: *500
+  
+  /logdata:
+    post:
+      summary: Report number and severity of generated log messages
+      description: |
+        Log Data enpoint collects data regarding log messsages generated by different 
+        sources. Particularly, message severity and count are expected.
+      consumes:
+        - application/x-www-form-urlencoded
+      produces:
+        - text/plain
+      parameters:
+        - &SEVERITY_PARAM
+          name: severity
+          in: formData
+          description: Message severity
+          required: true
+          type: string
+          format: string
+          enum:
+            - "debug"
+            - "detail"
+            - "user"
+            - "info"
+            - "warn"
+            - "error"
+            - "fatal"
+          example: "debug"
+        - name: count
+          in: formData
+          description: Number of message of given severity generated
+          required: false
+          default: 1
+          type: number
+          format: int32
+          example: 6
+        - <<: *SOURCE_PARAM
+      security:
+        - apiauth: ["status"]
+        - userauth: ["status"]
+      responses:
+        401:
+          <<: *401
+        400:
+          <<: *400
+        200:
+          description: OK. The data has been saved.
+        default:
+          description: Internal server error (500)
+
+  /logmessage:
+    post:
+      summary: Record a log message
+      description: |
+        Log Message enpoint collects log messages of different severities from differenrt sources.
+      consumes:
+        - application/x-www-form-urlencoded
+      produces:
+        - text/plain
+      parameters:
+        - <<: *SEVERITY_PARAM
+        - name: auxiliarydata
+          in: formData
+          description: |
+            Additional data, like metadata, not required for the log message.
+            If provided, must be in a JSON format.
+          required: false
+          default: ""
+          type: string
+          format: string
+          example: |
+            {
+              "Exception": "Cannot bind to port 80. Address already in use."
+            }
+        - name: message
+          in: formData
+          description: A message part of the log entry.
+          required: true
+          type: string
+          format: string
+          example: User with id 4568 has created a project with id 6868.
+        - name: category
+          in: formData
+          description: |
+            An integer representing a category (or type) of the log entry.
+            Categorization is scoped and is up to the source.
+          required: false
+          default: 0
+          type: number
+          format: int32
+          example: 6
+        - <<: *SOURCE_PARAM
+      security:
+        - apiauth: ["status"]
+        - userauth: ["status"]
+      responses:
+        401:
+          <<: *401
+        400:
+          <<: *400
+        200:
+          <<: *200
+        default:
+          <<: *500
+
+  /useraction:
+    post:
+      summary: User action report
+      description: |
+        User action enpoint collects data regarding user actions performed on different 
+        sources. Particularly, user action and count are expected.
+      consumes:
+        - application/x-www-form-urlencoded
+      produces:
+        - text/plain
+      parameters:
+        - name: action
+          in: formData
+          description: User Action
+          required: true
+          type: string
+          format: string
+          enum:
+            - "login"
+            - "logout"
+            - "register"
+            - "visit"
+            - "projectcreated"
+            - "projectedited"
+          example: "login"
+        - name: count
+          in: formData
+          description: Nuimber of times given action was performed
+          required: false
+          default: 1
+          type: number
+          format: int32
+          example: "6"
+        - <<: *SOURCE_PARAM
+      security:
+        - apiauth: ["status"]
+        - userauth: ["status"]
+      responses:
+        401:
+          <<: *401
+        400:
+          <<: *400
+        200:
+          <<: *200
+        default:
+          <<: *500
+  
+  /getdata:
+    get:
+      summary: Retrieve status data
+      description: |
+        Get Data endpoint returns all available data that matches parameters.
+      parameters:
+        - &METRICTYPE_PARAM
+          name: metrictype
+          in: query
+          description: |
+            Metric type for which data is requested. 
+          required: true
+          type: string
+          format: string
+          enum:
+            - "cpuload"
+            - "useraction"
+            - "compilation"
+            - "log"
+            - "ping"
+          example: "cpuload"
+        - <<: *SOURCE_PARAM
+          in: query
+        - name: timeperiod
+          in: query
+          description: |
+            Number of seconds ago from which data is requested. 
+            Default value is roughly a month.
+          required: false
+          default: 2592000
+          type: integer
+          fomat: int32
+          example: 604800
+      responses:
+        401:
+          <<: *401
+        400:
+          <<: *400
+        404:
+          description: |
+            Not Found. The metric of given type (CPU load) and source does not 
+            exist.
+        200:
+          description: OK. The data points are retrieved.
+          schema:
+            type: array
+            items:
+              $ref: '#/definitions/DataPoint'
+          example:
+            &DATAPOINT_EXAMPLE
+              - timestamp: "2017-01-27T11:30:40.510739-05:00"
+                value: 65
+              - timestamp: "2017-01-27T11:30:40.510739-05:00"
+                severity: "fatal"
+                count: 5
+              - timestamp: "2017-01-27T11:30:40.510739-05:00"
+                severity: "login"
+                count: 6
+              - timestamp: "2017-01-27T11:30:40.510739-05:00"
+                compiletime: 65482
+                sourcesize: 4984634
+                stage: "m4"
+              - timestamp: "2017-01-27T11:30:40.510739-05:00"
+                responsetime: 522
+                httpstatuscode: 200
+        204:
+          &204
+          description: |
+            No Content. No errors are encountered and there are no data points 
+            matching given criteria.
+        default:
+          <<: *500
+
+  /getmetrics:
+    get:
+      summary: Retrieve available metrics
+      description: |
+        Get Metrics endpoint returns available metrics (optionally filtered 
+        by source and/or type parameters) which include metadata (eq. title)
+        and numeric data (day-, hour- average, min, max, current value).
+        <b>Note:</b> current value is always up-to-date (regardless of last 
+        updated value).
+      parameters:
+        - <<: *METRICTYPE_PARAM
+          required: false
+        - <<: *SOURCE_PARAM
+          required: false
+          in: query
+      responses:
+        401:
+          <<: *401
+        200:
+          description: OK. The metrics are retrieved.
+          schema:
+            type: array
+            items:
+              $ref: '#/definitions/Metric'
+          example:
+            &METRIC_EXAMPLES
+              - source: "http://makerchip.com"
+                title: "Webservice response time"
+                autolabel:
+                  &LABEL_EXAMPLE_1
+                    title: Minor degradation
+                    severity: warning
+                manuallabel: 
+                  &LABEL_EXAMPLE_2
+                    title: We are investingating
+                    severity: investigating
+                daymin: 100
+                daymax: 500
+                dayavg: 300
+                hourmin: 150
+                hourmax: 400
+                houravg: 200
+                currentvalue: 350
+                lastupdated: "2017-01-27T11:30:40.510739-05:00"
+              - source: "compilation-server-13"
+                title: "CPU Load"
+                autolabel:
+                  &LABEL_EXAMPLE_3
+                    title: Normal operation
+                    severity: normal
+                manuallabel:
+                  &LABEL_EXAMPLE_4
+                    title: ""
+                    severity: none
+                daymin: 1
+                daymax: 70
+                dayavg: 25
+                hourmin: 1
+                hourmax: 30
+                houravg: 20
+                currentvalue: 15
+                lastupdated: "2017-01-27T11:30:45.510739-05:00"
+        204:
+          <<: *204
+        default:
+          <<: *500
+
+  /getlogmessages:
+    get:
+      summary: Retrieve available log messages
+      description: |
+        Get Log Messages endpoint returns all available log messages.
+      parameters:
+        - name: sources
+          in: query
+          description: |
+            Coma separated collection of source names used to filter log messages.
+            If not provided, log messages will not be filtered by source.
+          required: false
+          default: ""
+          type: string
+          fomat: string
+          example: "source-1,source-2"
+        - name: categories
+          in: query
+          description: |
+            Coma separated collection of categories used to filter log messages.
+            If not provided, log messages will not be filtered by category.
+          required: false
+          default: ""
+          type: string
+          fomat: string
+          example: "1,2"
+        - name: severities
+          in: query
+          description: |
+            Coma separated collection of severities used to filter log messages.
+            If not provided, log messages will not be filtered by severity.
+            List of severities is the same as input enumeration for "logmessage" endpoint.
+          required: false
+          default: ""
+          type: string
+          fomat: string
+          example: "info,warn"
+        - name: keywords
+          in: query
+          description: |
+            Coma separated collection of words used to filter log messages.
+            If not provided, log messages will not be filtered by keywords.
+            Log message body and auxillary data will be searched for keywords.
+            If and only if any keyword exists in log message, the message will be included in the output.
+            Keywords may not contain whitspaces.
+          required: false
+          default: ""
+          type: string
+          fomat: string
+          example: "user,login"
+        - name: start
+          in: query
+          description: |
+            Date and time from which to include log messages.
+            Timestamp is formatted as the number of milliseconds since Jan 1, 1970.
+            If not provided, log messages will not be filtered by start date.
+          required: false
+          default: ""
+          type: string
+          fomat: string
+          example: "1494440378000"
+        - name: end
+          in: query
+          description: |
+            Date and time to which to include log messages.
+            Timestamp is formatted as the number of milliseconds since Jan 1, 1970.
+            If not provided, log messages will not be filtered by end date.
+          required: false
+          default: ""
+          type: string
+          fomat: string
+          example: "1494440378000"
+      security:
+        - apiauth: ["status"]
+        - userauth: ["status"]
+      responses:
+        401:
+          <<: *401
+        200:
+          description: OK. The log messages are retrieved.
+          schema:
+            type: array
+            items:
+              $ref: '#/definitions/LogMessage'
+          example:
+            &LOGMESSAGE_EXAMPLES
+              - source: compilation-server-13
+                id: 4564
+                message: User with id 4568 has created a project with id 6868.
+                auxiliarydata: ""
+                severity: "Information"
+                category: 5
+                timestamp: "2017-01-27T11:30:40.510739-05:00"
+              - source: http-server-15
+                id: 1002
+                message: Server startup failed.
+                auxiliarydata: |
+                  {
+                    "Exception": "Cannot bind to port 80. Address already in use."
+                  }
+                severity: "Fatal error"
+                category: 6
+                timestamp: "2017-01-27T11:30:45.510739-05:00"
+        204:
+          <<: *204
+        default:
+          <<: *500
+        
+  /removemetric:
+    delete:
+      summary: Remove a metric
+      description: |
+        Remove Metric endpoint removes a metric from the system.
+      produces:
+        - text/plain
+      parameters:
+        - <<: *METRICTYPE_PARAM
+        - <<: *SOURCE_PARAM
+          in: query
+      security:
+        - apiauth: ["status"]
+        - userauth: ["status"]
+      responses:
+        401:
+          <<: *401
+        400:
+          <<: *400
+        404:
+          description: |
+            Not Found. The metric of given type and source does not 
+            exist.
+        200:
+          description: OK. The metric has been removed.
+        default:
+          <<: *500
+  
+  /metricupdate:
+    patch:
+      summary: Modify a metric
+      description: |
+        Metric Update endpoint changes the existing metric in the system.
+      consumes:
+        - application/x-www-form-urlencoded
+      produces:
+        - text/plain
+      parameters:
+        - <<: *METRICTYPE_PARAM
+          in: formData
+        - <<: *SOURCE_PARAM
+        - name: manuallabelid
+          in: formData
+          description: |
+            An ID of the manual label to set for the metric.
+          required: true
+          type: integer
+          fomat: int32
+          example: "2"
+        - name: public
+          in: formData
+          description: |
+            A boolean indicating if the metric should be public or not.
+            Tru for public, false for private.
+          required: true
+          type: boolean
+          example: "true"
+      security:
+        - apiauth: ["status"]
+        - userauth: ["status"]
+      responses:
+        401:
+          <<: *401
+        400:
+          <<: *400
+        404:
+          description: |
+            Not Found. The metric of given type and source does not 
+            exist. Or the manual label of given ID does not exist.
+        200:
+          description: OK. The metric has been updated.
+        default:
+          <<: *500
+
+definitions:
+
+  LogMessage:
+    type: object
+    required:
+      - source
+      - id
+      - message
+      - auxiliarydata
+      - severity
+      - category
+      - timestamp
+    properties:
+      source:
+        type: string        
+        description: The source of the metric (eq. server identifier or url)
+      timestamp:
+        type: string
+        description: Timestamp when log entry was recorded.
+      id:
+        type: number
+        description: Unique identifier for the log entry.
+      message:
+        type: string
+        description: A message part of the log entry.
+      auxiliarydata:
+        type: string
+        description: |
+          Additional data, like metadata, not required for the log message.
+          Given in a JSON format.
+      severity:
+        type: string
+        description: Log entry severity (eq. warn or error)
+      category:
+        type: number
+        description: |
+          An integer representing a category (or type) of the log entry.
+          Categorization is scoped and is up to the source.
+    example:
+      *LOGMESSAGE_EXAMPLES
+
+  Label:
+    type: object
+    required:
+      - title
+      - severity
+    properties:
+      title:
+        type: string
+        description: text part of the label
+      severity:
+        type: string
+        description: string representation of severity of the label
+    example:
+      - <<: *LABEL_EXAMPLE_1
+      - <<: *LABEL_EXAMPLE_2
+      - <<: *LABEL_EXAMPLE_3
+      - <<: *LABEL_EXAMPLE_4
+
+  Metric:
+    type: object
+    required:
+      - source
+      - title
+      - autolabel
+      - manuallabel
+      - daymin
+      - daymax
+      - dayavg
+      - hourmin
+      - hourmax
+      - houravg
+      - currentvalue
+    properties:
+      source:
+        type: string        
+        description: The source of the metric (eq. server identifier or url)
+      title:
+        type: string
+        description: Human readable title of the metric (eq. CPU Load).
+      autolabel:
+        type: Label
+        description: The label assigned to the metric automatically by the system (eq. Normal operation)
+      manuallabel:
+        type: Label
+        description: The label assigned to the metric manually by the administrator (eq. We are investigating the issue)
+      daymin:
+        type: number
+        description: The lowest numberic value of the metric in a timerange from now to a day ago
+      daymax:
+        type: number
+        description: The highest numberic value of the metric in a timerange from now to a day ago
+      dayavg:
+        type: number
+        description: The average of the numberic values of the metric in a timerange from now to a day ago
+      hourmin:
+        type: number
+        description: The lowest numberic value of the metric in a timerange from now to an hour ago
+      hourmax:
+        type: number
+        description: The highest numberic value of the metric in a timerange from now to an hour ago
+      houravg:
+        type: number
+        description: The average of the numberic values of the metric in a timerange from now to an hour ago
+      currentvalue:
+        type: number
+        description: The most recent value of the metric
+      lastupdated:
+        type: string
+        description: |
+          Timestamp when metric values (except currentvalue) were updated.
+          currentvalue is always up to date.
+    example:
+      *METRIC_EXAMPLES
+
+  DataPoint:
+    # Wanted oneOf thing, but here is the PR: https://github.com/OAI/OpenAPI-Specification/pull/741
+    type: object
+    required:
+      - timestamp
+    properties:
+      timestamp:
+        type: string        
+        description: Timestamp when data point was recorded.
+      value:
+        type: integer
+        description: The value of a **numeric** data point.
+      severity:
+        type: string
+        description: The severity of a log message in a **log** data point.
+      count:
+        type: number
+        description: The number of items in a **log** or **useraction** data point.
+      useraction:
+        type: string
+        description: The action performed by user in a **useraction** data point.
+      compiletime:
+        type: number
+        description: The number of milliseconds taken for compilation in a **compilation** data point.
+      sourcesize: 
+        type: number
+        description: The size of the source file in bytes in a **compilation** data point.
+      stage:
+        type: string
+        description: The compilation stage in a **compilation** data point.
+      responsetime:
+        type: number
+        description: The response time in milliseconds in a **ping** data point.
+      httpstatuscode:
+        type: number
+        description: The status code of a response in a **ping** data point.
+    example:
+      *DATAPOINT_EXAMPLE
diff --git a/build.sh b/build.sh
new file mode 100755
index 0000000000000000000000000000000000000000..93c7b4a5a4bb24f1027f2b499f252014a3949796
--- /dev/null
+++ b/build.sh
@@ -0,0 +1,244 @@
+#!/bin/bash
+set -e
+
+# Ensure that the CWD is set to script's location
+cd "${0%/*}"
+CWD=$(pwd)
+
+## TASKS
+
+install-doc-generators () {
+
+	cd $CWD
+
+	echo "Installing node modules... Requires Yarn"
+	yarn --ignore-engines > /dev/null
+
+}
+
+gen-server-docs () { 
+
+	cd $CWD
+
+	echo "Generating server side code documentation... Requires Doxygen"
+	
+	rm -rf src/web/wwwroot/docs/server
+	mkdir -p src/web/wwwroot/docs/server
+	doxygen Doxyfile > /dev/null
+	mv src/web/wwwroot/docs/server/html/* src/web/wwwroot/docs/server
+
+}
+
+gen-client-docs () { 
+
+	cd $CWD
+
+	echo "Generating client side code documentation... Requires TypeDoc (Installed by Yarn)"
+	mkdir -p src/web/wwwroot/docs/client
+	$(yarn bin)/typedoc --logger none client/ts/ > /dev/null
+	printf "\n"
+	
+}
+
+gen-api-docs () {
+
+	cd $CWD
+
+	echo "Generating API documentation... Requires Spectacle (Installed by Yarn)"
+	mkdir -p src/web/wwwroot/docs/api
+	$(yarn bin)/spectacle api.yml -t src/web/wwwroot/docs/api > /dev/null
+
+}
+
+install-client-libs () {
+
+	cd $CWD/client
+
+	echo "Installing front-end libraries... Requires Yarn"
+	yarn --ignore-engines > /dev/null
+
+}
+
+install-typings () {
+
+	cd $CWD
+
+	echo "Installing TypeScript typings... Requires Typings (Installed by Yarn)"
+	mkdir -p client/typings
+	$(yarn bin)/typings install > /dev/null
+
+}
+
+generate-client-bundle () {
+
+	cd $CWD
+
+	echo "Bundling front-end libraries... Requires Webpack (Installed by Yarn)"
+	rm -rf src/web/wwwroot/{js,css}/*
+
+	$(yarn bin)/webpack --context client/ --env prod --config client/webpack.config.js --output-path src/web/wwwroot/js > /dev/null
+
+	mkdir -p src/web/wwwroot/css/
+	mv src/web/wwwroot/js/app.min.css src/web/wwwroot/css/
+	rm src/web/wwwroot/js/less.*
+
+}
+
+restore-dotnet () {
+
+	cd $CWD/src
+
+	echo "Restoring .NET dependencies... Requires .NET SDK"
+	dotnet restore daemons/daemons.csproj > /dev/null
+	dotnet restore web/web.csproj > /dev/null
+}
+
+build-dotnet () {
+
+	cd $CWD/src
+
+	echo "Building and publishing .NET app... Requires .NET SDK"
+	dotnet publish -c release daemons/daemons.csproj > /dev/null
+	dotnet publish -c release web/web.csproj > /dev/null
+}
+
+build-dev-client () {
+
+	cd $CWD
+
+	echo "Cleaning dist/"
+	rm -rf client/dist/
+
+	echo "Copying source files"
+	mkdir -p client/dist/{ts,less}
+	cp -R client/ts/* client/dist/ts/
+	cp -R client/less/* client/dist/less/
+
+	echo "Bundling front-end libraries... Requires Webpack (Installed globally)"
+	webpack --env dev --display-error-details --output-path client/dist/ts --config client/webpack.config.js --context client/
+
+	echo "Copying generated code"
+	mkdir -p src/web/wwwroot/js/ts
+	cp -R client/dist/ts/* src/web/wwwroot/js/ts/
+	cp client/dist/ts/app.css src/web/wwwroot/css/app.css
+
+	echo "Removing temporary directory"
+	rm -rf client/dist/
+
+	echo "Done!"
+}
+
+build-docker-images () {
+
+	cd $CWD/src
+
+	if [ -z "$DOTNET_TAG" ]; then
+		DOTNET_TAG="local"
+	fi
+
+	echo "Building web-$DOTNET_TAG"
+	docker build -f web/Dockerfile -t registry.gitlab.com/rweda/status-site:web-$DOTNET_TAG web/
+
+	echo "Building daemons-$DOTNET_TAG"
+	docker build -f daemons/Dockerfile -t registry.gitlab.com/rweda/status-site:daemons-$DOTNET_TAG daemons/
+
+	echo "Done!"
+}
+
+push-docker-images () {
+
+	if [ -z "$DOTNET_TAG" ]; then
+		DOTNET_TAG="local"
+	fi
+
+	echo "Pushing web-$DOTNET_TAG"
+	docker push registry.gitlab.com/rweda/status-site:web-$DOTNET_TAG
+
+	echo "Pushing daemons-$DOTNET_TAG"
+	docker push registry.gitlab.com/rweda/status-site:daemons-$DOTNET_TAG
+
+	echo "Done!"
+}
+
+build-for-compose () {
+	build-dotnet
+	build-docker-images
+}
+
+## APP BUILDERS
+
+# Unstable
+build-app-parallel () {
+
+	install-doc-generators &
+	install-client-libs &
+	restore-dotnet &
+	gen-server-docs &
+
+	wait %install-doc-generators
+	
+	gen-client-docs &
+	gen-api-docs &
+
+	wait %install-client-libs
+	
+	install-typings &
+
+	wait %install-typings
+	
+	generate-client-bundle &
+
+	wait
+	
+	build-dotnet
+
+	echo "Build completed!"
+
+}
+
+build-app-sequential () {
+
+	install-doc-generators
+	install-client-libs
+
+	gen-server-docs
+	gen-client-docs
+	gen-api-docs
+
+	install-typings
+	generate-client-bundle
+	restore-dotnet
+
+	build-dotnet
+
+	echo "Build completed!"
+
+}
+
+usage () { 
+	echo "Usage: $0 [-d -f <string>]" 1>&2 
+}
+
+while getopts "f:d" o; do
+	case "${o}" in
+		f)
+			eval $OPTARG
+			exit 0
+			;;
+		d)
+			build-dev-client
+			exit 0
+			;;
+		h)
+			usage
+			exit 0
+			;;
+		*)
+			usage
+			exit 1
+			;;
+	esac
+done
+shift $((OPTIND-1))
+
+build-app-sequential
diff --git a/cSpell.json b/cSpell.json
new file mode 100644
index 0000000000000000000000000000000000000000..c62f181d9aeef75a659de900ca063c7e6b74eeba
--- /dev/null
+++ b/cSpell.json
@@ -0,0 +1,22 @@
+// cSpell Settings
+{
+    // Version of the setting file.  Always 0.1
+    "version": "0.1",
+    // language - current active spelling language
+    "language": "en",
+    // words - list of words to be always considered correct
+    "words": [
+        "IPing",
+        "statususer",
+        "statussite",
+        "getlogmessages",
+        "Xunit",
+        "Expando"
+    ],
+    // flagWords - list of words to be always considered incorrect
+    // This is useful for offensive words and common spelling errors.
+    // For example "hte" should be "the"
+    "flagWords": [
+        "hte"
+    ]
+}
\ No newline at end of file
diff --git a/client/less/app.less b/client/less/app.less
new file mode 100755
index 0000000000000000000000000000000000000000..a64e82b5d36f923aa6a44fa55f9420040ee65324
--- /dev/null
+++ b/client/less/app.less
@@ -0,0 +1,4 @@
+@import 'custom';
+
+@import "imports";
+
diff --git a/client/less/custom.less b/client/less/custom.less
new file mode 100644
index 0000000000000000000000000000000000000000..428c327930da1612acdf9ca0a00eb597738ec645
--- /dev/null
+++ b/client/less/custom.less
@@ -0,0 +1,132 @@
+@text-muted: #777;
+
+.metric-current-value {
+	padding: 13px 17px 12px;
+	text-align: center;
+	strong {
+		font-size: 30px;
+		font-weight: normal;
+		color: #333;
+		line-height: 100%;
+	}
+	small {
+		display: block;
+		margin-top: 3px;
+		color: @text-muted;
+	}
+}
+
+.metric-stat-value {
+	padding: 8px 10px 8px;
+	strong {
+		font-size: 15px;
+		font-weight: normal;
+		color: #333;
+		line-height: 100%;
+	}
+	small {
+		display: block;
+		margin-top: 3px;
+		color: @text-muted;
+	}
+}
+
+.metric {
+	padding: 5px;
+	.card-header {
+		padding-top: 20px;
+		padding-bottom: 5px;
+	}
+}
+
+#metric-detailed-plot {
+	height: 300px;
+}
+
+#metric-overview-plot {
+	height: 50px;
+}
+
+.metric-labels {
+	div {
+		text-align: center;
+	}
+	span {
+		display: inline-block;
+		border: 1px solid #f0f0f0;
+		margin: 2px 2px 2px 0;
+		padding: 2px 5px;
+		text-align: center;
+	}
+}
+
+.table-text-color-white {
+	color: white;
+	a {
+		color: white;
+	}
+}
+
+.table-text-color-black {
+	color: black;
+	a {
+		color: black;
+	}
+}
+
+.modal-color-white {
+	h5 {
+		color: white !important;
+	}
+	h4 {
+		color: white !important;
+	}
+	color: white !important;
+}
+
+.modal-color-black {
+	h5 {
+		color: black !important;
+	}
+	h4 {
+		color: black !important;
+	}
+	color: black !important;
+}
+
+div.dataTables_wrapper div.dataTables_filter input {
+	width: 100%;
+}
+
+.ellipsis {
+	text-overflow: ellipsis;
+	/* Required for text-overflow to do anything */
+	white-space: nowrap;
+	overflow: hidden;
+}
+
+#logs-dt {
+	table-layout: fixed;
+}
+
+@media only screen and (max-width: 900px) {
+	#logs-dt {
+		.variable-width {
+			width: 300px;
+		}
+		.fixed-width {
+			width: 70px;
+		}
+	}
+}
+
+@media only screen and (min-width: 900px) {
+	#logs-dt {
+		.fixed-width {
+			width: 15% !important;
+		}
+		.variable-width {
+			width: 25% !important;
+		}
+	}
+}
diff --git a/client/less/data-tables-override.less b/client/less/data-tables-override.less
new file mode 100644
index 0000000000000000000000000000000000000000..f0c05fdd17521529e6daa069b15219c7516c2572
--- /dev/null
+++ b/client/less/data-tables-override.less
@@ -0,0 +1,470 @@
+table.dataTable {
+    width: 100%;
+    margin: 0 auto;
+    clear: both;
+    border-collapse: separate;
+    border-spacing: 0
+}
+
+table.dataTable thead th, table.dataTable tfoot th {
+    font-weight: bold
+}
+
+table.dataTable thead th, table.dataTable thead td {
+    padding: 10px 18px;
+    border-bottom: 1px solid #111111
+}
+
+table.dataTable thead th:active, table.dataTable thead td:active {
+    outline: none
+}
+
+table.dataTable tfoot th, table.dataTable tfoot td {
+    padding: 10px 18px 6px 18px;
+    border-top: 1px solid #111111
+}
+
+table.dataTable thead .sorting, table.dataTable thead .sorting_asc,
+table.dataTable thead .sorting_desc {
+    cursor: pointer;
+    * cursor: hand
+}
+
+table.dataTable thead .sorting, table.dataTable thead .sorting_asc,
+table.dataTable thead .sorting_desc, table.dataTable thead .sorting_asc_disabled,
+table.dataTable thead .sorting_desc_disabled {
+    background-repeat: no-repeat;
+    background-position: center right
+}
+
+table.dataTable thead .sorting {
+    background-image: url("/images/datatables/sort_both.png")
+}
+
+table.dataTable thead .sorting_asc {
+    background-image: url("/images/datatables/sort_asc.png")
+}
+
+table.dataTable thead .sorting_desc {
+    background-image: url("/images/datatables/sort_desc.png")
+}
+
+table.dataTable thead .sorting_asc_disabled {
+    background-image: url("/images/datatables/sort_asc_disabled.png")
+}
+
+table.dataTable thead .sorting_desc_disabled {
+    background-image: url("/images/datatables/sort_desc_disabled.png")
+}
+
+table.dataTable tbody tr {
+    background-color: white
+}
+
+table.dataTable tbody tr.selected {
+    background-color: #b0bed9
+}
+
+table.dataTable tbody th, table.dataTable tbody td {
+    padding: 8px 10px
+}
+
+table.dataTable.row-border tbody th, table.dataTable.row-border tbody td,
+table.dataTable.display tbody th, table.dataTable.display tbody td {
+    border-top: 1px solid #dddddd
+}
+
+table.dataTable.row-border tbody tr:first-child th, table.dataTable.row-border tbody tr:first-child td,
+table.dataTable.display tbody tr:first-child th, table.dataTable.display tbody tr:first-child td {
+    border-top: none
+}
+
+table.dataTable.cell-border tbody th, table.dataTable.cell-border tbody td {
+    border-top: 1px solid #dddddd;
+    border-right: 1px solid #dddddd
+}
+
+table.dataTable.cell-border tbody tr th:first-child, table.dataTable.cell-border tbody tr td:first-child {
+    border-left: 1px solid #dddddd
+}
+
+table.dataTable.cell-border tbody tr:first-child th, table.dataTable.cell-border tbody tr:first-child td {
+    border-top: none
+}
+
+table.dataTable.stripe tbody tr.odd, table.dataTable.display tbody tr.odd {
+    background-color: #f9f9f9
+}
+
+table.dataTable.stripe tbody tr.odd.selected, table.dataTable.display tbody tr.odd.selected {
+    background-color: #abb9d3
+}
+
+table.dataTable.hover tbody tr:hover, table.dataTable.display tbody tr:hover {
+    background-color: whitesmoke
+}
+
+table.dataTable.hover tbody tr:hover.selected, table.dataTable.display tbody tr:hover.selected {
+    background-color: #a9b7d1
+}
+
+table.dataTable.order-column tbody tr > .sorting_1, table.dataTable.order-column tbody tr > .sorting_2,
+table.dataTable.order-column tbody tr > .sorting_3, table.dataTable.display tbody tr > .sorting_1,
+table.dataTable.display tbody tr > .sorting_2, table.dataTable.display tbody tr > .sorting_3 {
+    background-color: #f9f9f9
+}
+
+table.dataTable.order-column tbody tr.selected > .sorting_1, table.dataTable.order-column tbody tr.selected > .sorting_2,
+table.dataTable.order-column tbody tr.selected > .sorting_3, table.dataTable.display tbody tr.selected > .sorting_1,
+table.dataTable.display tbody tr.selected > .sorting_2, table.dataTable.display tbody tr.selected > .sorting_3 {
+    background-color: #acbad4
+}
+
+table.dataTable.display tbody tr.odd > .sorting_1, table.dataTable.order-column.stripe tbody tr.odd > .sorting_1 {
+    background-color: #f1f1f1
+}
+
+table.dataTable.display tbody tr.odd > .sorting_2, table.dataTable.order-column.stripe tbody tr.odd > .sorting_2 {
+    background-color: #f3f3f3
+}
+
+table.dataTable.display tbody tr.odd > .sorting_3, table.dataTable.order-column.stripe tbody tr.odd > .sorting_3 {
+    background-color: whitesmoke
+}
+
+table.dataTable.display tbody tr.odd.selected > .sorting_1, table.dataTable.order-column.stripe tbody tr.odd.selected > .sorting_1 {
+    background-color: #a6b3cd
+}
+
+table.dataTable.display tbody tr.odd.selected > .sorting_2, table.dataTable.order-column.stripe tbody tr.odd.selected > .sorting_2 {
+    background-color: #a7b5ce
+}
+
+table.dataTable.display tbody tr.odd.selected > .sorting_3, table.dataTable.order-column.stripe tbody tr.odd.selected > .sorting_3 {
+    background-color: #a9b6d0
+}
+
+table.dataTable.display tbody tr.even > .sorting_1, table.dataTable.order-column.stripe tbody tr.even > .sorting_1 {
+    background-color: #f9f9f9
+}
+
+table.dataTable.display tbody tr.even > .sorting_2, table.dataTable.order-column.stripe tbody tr.even > .sorting_2 {
+    background-color: #fbfbfb
+}
+
+table.dataTable.display tbody tr.even > .sorting_3, table.dataTable.order-column.stripe tbody tr.even > .sorting_3 {
+    background-color: #fdfdfd
+}
+
+table.dataTable.display tbody tr.even.selected > .sorting_1, table.dataTable.order-column.stripe tbody tr.even.selected > .sorting_1 {
+    background-color: #acbad4
+}
+
+table.dataTable.display tbody tr.even.selected > .sorting_2, table.dataTable.order-column.stripe tbody tr.even.selected > .sorting_2 {
+    background-color: #adbbd6
+}
+
+table.dataTable.display tbody tr.even.selected > .sorting_3, table.dataTable.order-column.stripe tbody tr.even.selected > .sorting_3 {
+    background-color: #afbdd8
+}
+
+table.dataTable.display tbody tr:hover > .sorting_1, table.dataTable.order-column.hover tbody tr:hover > .sorting_1 {
+    background-color: #eaeaea
+}
+
+table.dataTable.display tbody tr:hover > .sorting_2, table.dataTable.order-column.hover tbody tr:hover > .sorting_2 {
+    background-color: #ebebeb
+}
+
+table.dataTable.display tbody tr:hover > .sorting_3, table.dataTable.order-column.hover tbody tr:hover > .sorting_3 {
+    background-color: #eeeeee
+}
+
+table.dataTable.display tbody tr:hover.selected > .sorting_1, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_1 {
+    background-color: #a1aec7
+}
+
+table.dataTable.display tbody tr:hover.selected > .sorting_2, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_2 {
+    background-color: #a2afc8
+}
+
+table.dataTable.display tbody tr:hover.selected > .sorting_3, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_3 {
+    background-color: #a4b2cb
+}
+
+table.dataTable.no-footer {
+    border-bottom: 1px solid #111111
+}
+
+table.dataTable.nowrap th, table.dataTable.nowrap td {
+    white-space: nowrap
+}
+
+table.dataTable.compact thead th, table.dataTable.compact thead td {
+    padding: 4px 17px 4px 4px
+}
+
+table.dataTable.compact tfoot th, table.dataTable.compact tfoot td {
+    padding: 4px
+}
+
+table.dataTable.compact tbody th, table.dataTable.compact tbody td {
+    padding: 4px
+}
+
+table.dataTable th.dt-left, table.dataTable td.dt-left {
+    text-align: left
+}
+
+table.dataTable th.dt-center, table.dataTable td.dt-center, table.dataTable td.dataTables_empty {
+    text-align: center
+}
+
+table.dataTable th.dt-right, table.dataTable td.dt-right {
+    text-align: right
+}
+
+table.dataTable th.dt-justify, table.dataTable td.dt-justify {
+    text-align: justify
+}
+
+table.dataTable th.dt-nowrap, table.dataTable td.dt-nowrap {
+    white-space: nowrap
+}
+
+table.dataTable thead th.dt-head-left, table.dataTable thead td.dt-head-left,
+table.dataTable tfoot th.dt-head-left, table.dataTable tfoot td.dt-head-left {
+    text-align: left
+}
+
+table.dataTable thead th.dt-head-center, table.dataTable thead td.dt-head-center,
+table.dataTable tfoot th.dt-head-center, table.dataTable tfoot td.dt-head-center {
+    text-align: center
+}
+
+table.dataTable thead th.dt-head-right, table.dataTable thead td.dt-head-right,
+table.dataTable tfoot th.dt-head-right, table.dataTable tfoot td.dt-head-right {
+    text-align: right
+}
+
+table.dataTable thead th.dt-head-justify, table.dataTable thead td.dt-head-justify,
+table.dataTable tfoot th.dt-head-justify, table.dataTable tfoot td.dt-head-justify {
+    text-align: justify
+}
+
+table.dataTable thead th.dt-head-nowrap, table.dataTable thead td.dt-head-nowrap,
+table.dataTable tfoot th.dt-head-nowrap, table.dataTable tfoot td.dt-head-nowrap {
+    white-space: nowrap
+}
+
+table.dataTable tbody th.dt-body-left, table.dataTable tbody td.dt-body-left {
+    text-align: left
+}
+
+table.dataTable tbody th.dt-body-center, table.dataTable tbody td.dt-body-center {
+    text-align: center
+}
+
+table.dataTable tbody th.dt-body-right, table.dataTable tbody td.dt-body-right {
+    text-align: right
+}
+
+table.dataTable tbody th.dt-body-justify, table.dataTable tbody td.dt-body-justify {
+    text-align: justify
+}
+
+table.dataTable tbody th.dt-body-nowrap, table.dataTable tbody td.dt-body-nowrap {
+    white-space: nowrap
+}
+
+table.dataTable, table.dataTable th, table.dataTable td {
+    -webkit-box-sizing: content-box;
+    box-sizing: content-box
+}
+
+.dataTables_wrapper {
+    position: relative;
+    clear: both;
+    * zoom: 1;
+    zoom: 1
+}
+
+.dataTables_wrapper .dataTables_length {
+    float: left
+}
+
+.dataTables_wrapper .dataTables_filter {
+    float: right;
+    text-align: right
+}
+
+.dataTables_wrapper .dataTables_filter input {
+    margin-left: 0.5em
+}
+
+.dataTables_wrapper .dataTables_info {
+    clear: both;
+    float: left;
+    padding-top: 0.755em
+}
+
+.dataTables_wrapper .dataTables_paginate {
+    float: right;
+    text-align: right;
+    padding-top: 0.25em
+}
+
+.dataTables_wrapper .dataTables_paginate .paginate_button {
+    box-sizing: border-box;
+    display: inline-block;
+    min-width: 1.5em;
+    padding: 0.5em 1em;
+    margin-left: 2px;
+    text-align: center;
+    text-decoration: none !important;
+    cursor: pointer;
+    * cursor: hand;
+    color: #333333 !important;
+    border: 1px solid transparent;
+    border-radius: 2px
+}
+
+.dataTables_wrapper .dataTables_paginate .paginate_button.current,
+.dataTables_wrapper .dataTables_paginate .paginate_button.current:hover {
+    color: #333333 !important;
+    border: 1px solid #979797;
+    background-color: white;
+    background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fff), color-stop(100%, #dcdcdc));
+    background: -webkit-linear-gradient(top, #fff 0%, #dcdcdc 100%);
+    background: -moz-linear-gradient(top, #fff 0%, #dcdcdc 100%);
+    background: -ms-linear-gradient(top, #fff 0%, #dcdcdc 100%);
+    background: -o-linear-gradient(top, #fff 0%, #dcdcdc 100%);
+    background: linear-gradient(to bottom, #fff 0%, #dcdcdc 100%)
+}
+
+.dataTables_wrapper .dataTables_paginate .paginate_button.disabled,
+.dataTables_wrapper .dataTables_paginate .paginate_button.disabled:hover,
+.dataTables_wrapper .dataTables_paginate .paginate_button.disabled:active {
+    cursor: default;
+    color: #666 !important;
+    border: 1px solid transparent;
+    background: transparent;
+    box-shadow: none
+}
+
+.dataTables_wrapper .dataTables_paginate .paginate_button:hover {
+    color: white !important;
+    border: 1px solid #111111;
+    background-color: #585858;
+    background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #585858), color-stop(100%, #111));
+    background: -webkit-linear-gradient(top, #585858 0%, #111 100%);
+    background: -moz-linear-gradient(top, #585858 0%, #111 100%);
+    background: -ms-linear-gradient(top, #585858 0%, #111 100%);
+    background: -o-linear-gradient(top, #585858 0%, #111 100%);
+    background: linear-gradient(to bottom, #585858 0%, #111 100%)
+}
+
+.dataTables_wrapper .dataTables_paginate .paginate_button:active {
+    outline: none;
+    background-color: #2b2b2b;
+    background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #2b2b2b), color-stop(100%, #0c0c0c));
+    background: -webkit-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);
+    background: -moz-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);
+    background: -ms-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);
+    background: -o-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);
+    background: linear-gradient(to bottom, #2b2b2b 0%, #0c0c0c 100%);
+    box-shadow: inset 0 0 3px #111
+}
+
+.dataTables_wrapper .dataTables_paginate .ellipsis {
+    padding: 0 1em
+}
+
+.dataTables_wrapper .dataTables_processing {
+    position: absolute;
+    top: 50%;
+    left: 50%;
+    width: 100%;
+    height: 40px;
+    margin-left: -50%;
+    margin-top: -25px;
+    padding-top: 20px;
+    text-align: center;
+    font-size: 1.2em;
+    background-color: white;
+    background: -webkit-gradient(linear, left top, right top, color-stop(0%, rgba(255, 255, 255, 0)), color-stop(25%, rgba(255, 255, 255, 0.9)), color-stop(75%, rgba(255, 255, 255, 0.9)), color-stop(100%, rgba(255, 255, 255, 0)));
+    background: -webkit-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%);
+    background: -moz-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%);
+    background: -ms-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%);
+    background: -o-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%);
+    background: linear-gradient(to right, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%)
+}
+
+.dataTables_wrapper .dataTables_length, .dataTables_wrapper .dataTables_filter,
+.dataTables_wrapper .dataTables_info, .dataTables_wrapper .dataTables_processing,
+.dataTables_wrapper .dataTables_paginate {
+    color: #333333
+}
+
+.dataTables_wrapper .dataTables_scroll {
+    clear: both
+}
+
+.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody {
+    * margin-top: -1px;
+    -webkit-overflow-scrolling: touch
+}
+
+.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody th,
+.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody td {
+    vertical-align: middle
+}
+
+.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody th > div.dataTables_sizing,
+.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody td > div.dataTables_sizing {
+    height: 0;
+    overflow: hidden;
+    margin: 0 !important;
+    padding: 0 !important
+}
+
+.dataTables_wrapper.no-footer .dataTables_scrollBody {
+    border-bottom: 1px solid #111111
+}
+
+.dataTables_wrapper.no-footer div.dataTables_scrollHead table,
+.dataTables_wrapper.no-footer div.dataTables_scrollBody table {
+    border-bottom: none
+}
+
+.dataTables_wrapper:after {
+    visibility: hidden;
+    display: block;
+    content: "";
+    clear: both;
+    height: 0
+}
+
+@media screen and (max-width: 767px) {
+    .dataTables_wrapper .dataTables_info, .dataTables_wrapper .dataTables_paginate {
+        float: none;
+        text-align: center
+    }
+
+    .dataTables_wrapper .dataTables_paginate {
+        margin-top: 0.5em
+    }
+}
+
+@media screen and (max-width: 640px) {
+    .dataTables_wrapper .dataTables_length, .dataTables_wrapper .dataTables_filter {
+        float: none;
+        text-align: center
+    }
+
+    .dataTables_wrapper .dataTables_filter {
+        margin-top: 0.5em
+    }
+}
+
+
diff --git a/client/less/imports.less b/client/less/imports.less
new file mode 100644
index 0000000000000000000000000000000000000000..0f825d1fe74e2a22a482ce41b4df0ab170a52e96
--- /dev/null
+++ b/client/less/imports.less
@@ -0,0 +1,10 @@
+@import "~jquery.json-viewer/json-viewer/jquery.json-viewer.css";
+@import "~material-design-iconic-font/dist/css/material-design-iconic-font.min.css";
+@import "~bootstrap-select/dist/css/bootstrap-select.min.css";
+@import "~eonasdan-bootstrap-datetimepicker/build/css/bootstrap-datetimepicker.min.css";
+
+@import "data-tables-override";
+
+// @import "~datatables.net-dt/css/jquery.dataTables.css";
+// @import "~datatables.net-bs/css/dataTables.bootstrap.css";
+
diff --git a/client/package.json b/client/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..c00fc69370fbf736e224a70437be18a8d3c3288e
--- /dev/null
+++ b/client/package.json
@@ -0,0 +1,41 @@
+{
+  "name": "status-site",
+  "version": "1.0.0",
+  "license": "UNLICENSED",
+  "dependencies": {
+    "Waves": "fians/Waves#^0.7.5",
+    "animate.css": "^3.5.2",
+    "autosize": "^3.0.17",
+    "bootstrap": "^3.3.7",
+    "bootstrap-notify": "^3.1.3",
+    "bootstrap-select": "^1.12.2",
+    "chosen": "^1.6.2",
+    "datatables.net": "^1.10.13",
+    "datatables.net-bs": "^1.10.12",
+    "datatables.net-dt": "^1.10.12",
+    "dropzone": "^4.3.0",
+    "easy-pie-chart": "^2.1.6",
+    "eonasdan-bootstrap-datetimepicker": "^4.17.47",
+    "flot": "^0.8.0-alpha",
+    "fullcalendar": "~3.0.0",
+    "install": "~1.0.4",
+    "jquery": "2.2.4",
+    "jquery-mask-plugin": "igorescobar/jQuery-Mask-Plugin#^1.14.0",
+    "jquery-placeholder": "^2.3.1",
+    "jquery-sparkline": "^2.4.0",
+    "jquery.json-viewer": "^1.1.0",
+    "jqvmap": "manifestinteractive/jqvmap#^1.5.1",
+    "lightgallery": "^1.3.2",
+    "malihu-custom-scrollbar-plugin": "^3.1.3",
+    "material-design-iconic-font": "^2.2.0",
+    "mediaelement": "^2.22.1",
+    "moment": "^2.15.1",
+    "nouislider": "^8.5.1",
+    "simpleweather": "^3.1.0",
+    "summernote": "^0.8.2",
+    "sweetalert2": "^5.0.7",
+    "timeago": "^1.5.4",
+    "ts-loader": "^2.0.0",
+    "typeahead.js": "^0.11.1"
+  }
+}
diff --git a/client/ts/admin.ts b/client/ts/admin.ts
new file mode 100644
index 0000000000000000000000000000000000000000..41c24d13e1be0ced6cde93b6b354a32e3fd8d0de
--- /dev/null
+++ b/client/ts/admin.ts
@@ -0,0 +1,23 @@
+// Entry point for log page
+
+import { Utility } from "./modules/utility";
+
+import "bootstrap-select"
+import * as Waves from "Waves"
+import "bootstrap"
+
+declare global {
+	interface JQuery {
+		jsonViewer(any): void;
+	}
+}
+
+$(async () => {
+
+	$('.selectpicker').selectpicker();
+
+	
+
+	Utility.fixUtcTime();
+
+});
diff --git a/client/ts/log.ts b/client/ts/log.ts
new file mode 100644
index 0000000000000000000000000000000000000000..dd8e8f8afea9ec82d4847084faf11578fe66ec6f
--- /dev/null
+++ b/client/ts/log.ts
@@ -0,0 +1,22 @@
+// Entry point for log page
+
+import "jquery.json-viewer/json-viewer/jquery.json-viewer.js"
+import { Utility } from "./modules/utility";
+
+declare global {
+	interface JQuery {
+		jsonViewer(any): void;
+	}
+}
+
+$(async () => {
+
+	$(".json-renderer").each(function () {
+		var data = JSON.parse($(this).text());
+		$(this).html("");
+		$(this).jsonViewer(data);
+	});
+
+	Utility.fixUtcTime();
+
+});
diff --git a/client/ts/logs.ts b/client/ts/logs.ts
new file mode 100644
index 0000000000000000000000000000000000000000..aa861c525ee45c47754178deb78e05fa550fe9f9
--- /dev/null
+++ b/client/ts/logs.ts
@@ -0,0 +1,96 @@
+// Entry point for logs page
+
+import "eonasdan-bootstrap-datetimepicker"
+import "datatables.net"
+import "bootstrap"
+import "jquery.json-viewer/json-viewer/jquery.json-viewer.js"
+import "bootstrap-select"
+import * as Waves from "Waves"
+import { Utility } from "./modules/utility";
+
+declare global {
+	interface JQuery {
+		jsonViewer(any): void;
+		modal(any?): void;
+		datetimepicker(any?): void;
+		selectpicker(...any): void;
+	}
+}
+
+declare var filterModel: any;
+
+$(async () => {
+
+	$('#logs-dt').DataTable({
+		order: [
+			[0, "desc"]
+		],
+		lengthChange: false,
+		searching: false,
+		pageLength: 50,
+		columnDefs: [{
+			targets: 5,
+			render: function (data, type, full, meta) {
+				return Utility.toHHMMSS(
+					Utility.toLocalTimezone(
+						new Date(data)
+					)
+				);
+			}
+		}]
+	});
+
+	$(".json-renderer").each(function () {
+		var data = JSON.parse($(this).text());
+		$(this).html("");
+		$(this).jsonViewer(data);
+	});
+
+	Waves.init();
+
+	// Restore filter data
+	$('#sources-ui').selectpicker('val', filterModel.sources.split(","));
+	$('#categories-ui').selectpicker('val', filterModel.categories.split(","));
+	$('#severities-ui').selectpicker('val', filterModel.severities.split(","));
+
+	var startDate = new Date(0);
+	startDate.setUTCMilliseconds(parseInt(filterModel.start));
+	let start = (filterModel.start === "") ? {} : {
+		date: startDate
+	};
+
+	var endDate = new Date(0);
+	endDate.setUTCMilliseconds(parseInt(filterModel.end));
+	let end = (filterModel.end === "") ? {} : {
+		date: endDate
+	};
+
+	$('#start-ui').datetimepicker(start);
+	$('#end-ui').datetimepicker(end);
+
+	$("input[name=keywords]").val(filterModel.keywords);
+
+	// Before submitting the form set values from select2 and datetimepicker
+	$('#filter-form').on('submit', (e) => {
+
+		$('input[name=sources]').val($('#sources-ui').val());
+		$('input[name=categories]').val($('#categories-ui').val());
+		$('input[name=severities]').val($('#severities-ui').val());
+
+		$('input[name=start]').val(
+			$("#start-ui").val() === "" ?
+				"" :
+				Utility.toUtcDate(new Date($("#start-ui").val()))
+		);
+
+		$('input[name=end]').val(
+			$("#end-ui").val() === "" ?
+				"" :
+				Utility.toUtcDate(new Date($("#end-ui").val()))
+		);
+
+	});
+
+	Utility.fixUtcTime();
+
+});
diff --git a/client/ts/metric.ts b/client/ts/metric.ts
new file mode 100644
index 0000000000000000000000000000000000000000..5e6de39373fac8400a5b95ca6c8819eb61aa8083
--- /dev/null
+++ b/client/ts/metric.ts
@@ -0,0 +1,29 @@
+// Entry point for metric page
+
+import { MetricPage } from "./modules/metric-page";
+import { Utility } from "./modules/utility";
+
+import "bootstrap-select"
+import * as Waves from "Waves"
+import "bootstrap"
+
+declare var source: string;
+declare var type: number;
+
+let metricPage : MetricPage;
+
+$(async () => {
+
+	Utility.fixUtcTime();
+
+	Waves.init();
+
+	$('.selectpicker').selectpicker();
+
+    metricPage = new MetricPage(source, type);
+
+    $(window).resize(() => {
+		metricPage.render();
+	});
+
+});
diff --git a/client/ts/modules/abstract-metric.ts b/client/ts/modules/abstract-metric.ts
new file mode 100644
index 0000000000000000000000000000000000000000..5963553d9800765ef705dc246b28fc72b662d2e5
--- /dev/null
+++ b/client/ts/modules/abstract-metric.ts
@@ -0,0 +1,512 @@
+import { Constants } from "./constants";
+import { Utility, UIHelper } from "./utility";
+import { AutoLabel, ManualLabel } from "./metric-label";
+
+
+/**
+ * Types of metrics
+ * 
+ * @export
+ * @enum {number}
+ */
+export enum MetricType {
+	CpuLoad = 1, UserAction, Compilation, Log, Ping
+}
+
+
+/**
+ * Data structure represents common fields for data points
+ * 
+ * @export
+ * @abstract
+ * @class DataPoint
+ */
+export abstract class DataPoint {
+	public timestamp: Date;
+}
+
+type jsonLabelValue = {
+	Title: string;
+	Severity: string;
+}
+
+type JsonMetricValues = {
+	LastUpdated: string;
+
+	CurrentValue: number;
+
+	DayMin: number;
+	DayMax: number;
+	DayAvg: number;
+
+	HourMin: number;
+	HourMax: number;
+	HourAvg: number;
+
+	AutoLabel: jsonLabelValue;
+	ManualLabel: jsonLabelValue;
+}
+
+
+/**
+ * Data structure represents a label
+ * 
+ * @export
+ * @class LabelValue
+ */
+export class LabelValue {
+
+	/**
+	 * Text part of the label
+	 * 
+	 * @type {string}
+	 * @memberOf LabelValue
+	 */
+	public title: string;
+
+	/**
+	 * Severity of the label
+	 * 
+	 * @type {string}
+	 * @memberOf LabelValue
+	 */
+	public severity: string;
+
+
+	/**
+	 * Creates an instance of LabelValue.
+	 * @param {jsonLabelValue} json - parsed JSON object representing a label
+	 * 
+	 * @memberOf LabelValue
+	 */
+	constructor(json : jsonLabelValue) {
+		this.title = json.Title;
+		this.severity = json.Severity;
+	}
+}
+
+
+/**
+ * Data structure that represents metric values
+ * 
+ * @export
+ * @class MetricValues
+ */
+export class MetricValues {
+
+	/**
+	 * 
+	 * 
+	 * @type {Date}
+	 * @memberOf MetricValues
+	 */
+	public lastUpdated: Date;
+
+
+	/**
+	 * 
+	 * 
+	 * @type {number}
+	 * @memberOf MetricValues
+	 */
+	public currentValue: number;
+
+
+	/**
+	 * 
+	 * 
+	 * @type {number}
+	 * @memberOf MetricValues
+	 */
+	
+	/**
+	 * 
+	 * 
+	 * @type {number}
+	 * @memberOf MetricValues
+	 */
+	public dayMin: number;
+	/**
+	 * 
+	 * 
+	 * @type {number}
+	 * @memberOf MetricValues
+	 */
+	public dayMax: number;
+	/**
+	 * 
+	 * 
+	 * @type {number}
+	 * @memberOf MetricValues
+	 */
+	public dayAvg: number;
+
+	/**
+	 * 
+	 * 
+	 * @type {number}
+	 * @memberOf MetricValues
+	 */
+	public hourMin: number;
+	/**
+	 * 
+	 * 
+	 * @type {number}
+	 * @memberOf MetricValues
+	 */
+	public hourMax: number;
+	/**
+	 * 
+	 * 
+	 * @type {number}
+	 * @memberOf MetricValues
+	 */
+	public hourAvg: number;
+
+	/**
+	 * 
+	 * 
+	 * @type {LabelValue}
+	 * @memberOf MetricValues
+	 */
+	public autoLabel: LabelValue;
+	/**
+	 * 
+	 * 
+	 * @type {LabelValue}
+	 * @memberOf MetricValues
+	 */
+	public manualLabel: LabelValue;
+
+	/**
+	 * Creates an instance of MetricValues.
+	 * @param {JsonMetricValues} json - parsed JSON object representing a metric
+	 * 
+	 * @memberOf MetricValues
+	 */
+	constructor(json: JsonMetricValues) {
+		this.lastUpdated = Utility.toDate(json.LastUpdated);
+
+		this.currentValue = json.CurrentValue;
+
+		this.dayMin = json.DayMin;
+		this.dayMax = json.DayMax;
+		this.dayAvg = json.DayAvg;
+
+		this.hourMin = json.HourMin;
+		this.hourMax = json.HourMax;
+		this.hourAvg = json.HourAvg;
+
+		this.autoLabel = new LabelValue(json.AutoLabel);
+		this.manualLabel = new LabelValue(json.ManualLabel);
+	}
+}
+
+
+/**
+ * Abstract class representing a metric in the UI.
+ * 
+ * @export
+ * @abstract
+ * @class Metric
+ * @template T - Data Point type for the specific metric
+ */
+export abstract class Metric<T extends DataPoint> {
+
+
+	/**
+	 * Type of the metric
+	 * 
+	 * @protected
+	 * @type {MetricType}
+	 * @memberOf Metric
+	 */
+	protected _metricType: MetricType;
+	public get metricType(): MetricType {
+		return this._metricType;
+	}
+	/**
+	 * The source of the metric
+	 * 
+	 * @protected
+	 * @type {string}
+	 * @memberOf Metric
+	 */
+	protected _source: string;
+	public get source(): string {
+		return this._source;
+	}
+
+
+	/**
+	 * Automatic label of the metric
+	 * 
+	 * @protected
+	 * @type {AutoLabel}
+	 * @memberOf Metric
+	 */
+	protected _autoLabel: AutoLabel;
+	public get autoLabel(): AutoLabel {
+		return this._autoLabel;
+	}
+
+	/**
+	 * Manual label of the metric
+	 * 
+	 * @protected
+	 * @type {ManualLabel}
+	 * @memberOf Metric
+	 */
+	protected _manualLabel: ManualLabel;
+	public get manualLabel(): ManualLabel {
+		return this._manualLabel;
+	}
+
+	/**
+	 * Array of data points for the metric
+	 * 
+	 * @protected
+	 * @type {Array<T>}
+	 * @memberOf Metric
+	 */
+	protected _data: Array<T>;
+	public get data(): Array<T> {
+		return this._data;
+	}
+
+	/**
+	 * Numeric values for the metric
+	 * 
+	 * @protected
+	 * @type {MetricValues}
+	 * @memberOf Metric
+	 */
+	protected _values: MetricValues;
+	public get values(): MetricValues {
+		return this._values;
+	}
+
+	/**
+	 * Identifier of the load and render task repetition
+	 * 
+	 * @private
+	 * @type {number}
+	 * @memberOf Metric
+	 */
+	private repetitionId: number;
+	/**
+	 * Flag representing if load and render task is running
+	 * 
+	 * @private
+	 * @type {boolean}
+	 * @memberOf Metric
+	 */
+	private isRunning: boolean = false;
+
+	/**
+	 * Creates an instance of Metric.
+	 * @param {string} source - source of the metric
+	 * 
+	 * @memberOf Metric
+	 */
+	constructor(source: string) {
+		this._source = source;
+	}
+
+	/**
+	 * Renders plot in the UI (does not load data)
+	 * 
+	 * @protected
+	 * @abstract
+	 * 
+	 * @memberOf Metric
+	 */
+	protected abstract renderPlot(): void;
+	/**
+	 * Returns data point for the metric from json object
+	 * 
+	 * @protected
+	 * @abstract
+	 * @param {*} json - JSON object of the data point for the metric
+	 * @returns {T} - data point for the metric
+	 * 
+	 * @memberOf Metric
+	 */
+	protected abstract getDataPointFromJson(json: any): T;
+
+	/**
+	 * Renders labels in the UI (does not load data)
+	 * 
+	 * @protected
+	 * 
+	 * @memberOf Metric
+	 */
+	protected renderLabels(): void {
+		this.autoLabel.render();
+		this.manualLabel.render();
+	}
+
+	/**
+	 * Render metric numeric values in the UI (does not load data)
+	 * 
+	 * @protected
+	 * 
+	 * @memberOf Metric
+	 */
+	protected renderValues(): void {
+		$(`[data-identifier="${this.getMetricIdentifier()}"] .last-updated`).text(
+			`at ${Utility.toHHMMSS(this.values.lastUpdated)}`
+		);
+
+		$(`[data-identifier="${this.getMetricIdentifier()}"] .metric-current-value strong`)
+			.text(this.values.currentValue);
+
+		$(`[data-identifier="${this.getMetricIdentifier()}"] .day-avg strong`).text(this.values.dayAvg);
+		$(`[data-identifier="${this.getMetricIdentifier()}"] .day-min strong`).text(this.values.dayMin);
+		$(`[data-identifier="${this.getMetricIdentifier()}"] .day-max strong`).text(this.values.dayMax);
+
+		$(`[data-identifier="${this.getMetricIdentifier()}"] .hour-avg strong`).text(this.values.hourAvg);
+		$(`[data-identifier="${this.getMetricIdentifier()}"] .hour-min strong`).text(this.values.hourMin);
+		$(`[data-identifier="${this.getMetricIdentifier()}"] .hour-max strong`).text(this.values.hourMax);
+	};
+
+	/**
+	 * Loads data from the API and stores it in properties.
+	 * Does not render anything.
+	 * 
+	 * @param {number} [interval] - time interval representing how old data to load
+	 * @returns {Promise<void>}
+	 * 
+	 * @memberOf Metric
+	 */
+	public async loadData(interval?: number): Promise<void> {
+
+		this._data =
+			(<Array<any>>(await Utility.get(
+				Utility.generateQuery(
+					Constants.GET_DATA_ENDPOINT,
+					["Type", MetricType[this.metricType]],
+					["Source", this.source],
+					["TimePeriod", `${interval ? interval : 30 * Constants.UPDATE_INTERVAL}`]
+				)
+			))).map((element) => {
+				return this.getDataPointFromJson(element);
+			});
+
+		this._values = new MetricValues(
+			(await Utility.get(
+				Utility.generateQuery(
+					Constants.GET_METRICS_ENDPOINT,
+					["Type", MetricType[this.metricType]],
+					["Source", this.source]
+				)
+			))[0] // array of one element is expected
+		);
+
+		this._autoLabel = new AutoLabel(
+			this.values.autoLabel.title, 
+			this.values.autoLabel.severity, 
+			this.getMetricIdentifier()
+		);
+		this._manualLabel = new ManualLabel(
+			this.values.manualLabel.title, 
+			this.values.manualLabel.severity, 
+			this.getMetricIdentifier()
+		);
+	}
+
+
+	/**
+	 * 
+	 * Starts load and render task.
+	 * Executes the task immediately.
+	 * 
+	 * @memberOf Metric
+	 */
+	public turnOn(): void {
+		let task = async () => {
+			await this.loadData();
+			this.render();
+			UIHelper.notify(`Metric ${MetricType[this.metricType]} of ${this.source} has been updated!`, "inverse");
+		};
+
+		if (!this.isRunning) {
+			this.repetitionId = window.setInterval(
+				task, Constants.UPDATE_INTERVAL * 1000
+			);
+
+			window.setTimeout(task, 0);
+
+			this.isRunning = true;
+		}
+	}
+
+
+	/**
+	 * 
+	 * Stop load and render task.
+	 * 
+	 * @memberOf Metric
+	 */
+	public turnOff(): void {
+		if (this.isRunning) {
+			window.clearInterval(this.repetitionId);
+			this.isRunning = false;
+		}
+	}
+
+
+	/**
+	 * 
+	 * Renders all UI components of the metric.
+	 * Does not load the data.
+	 * 
+	 * @memberOf Metric
+	 */
+	public render(): void {
+		this.renderValues();
+		this.renderPlot();
+		this.renderLabels();
+	}
+
+
+	/**
+	 * Stops load and render task.
+	 * Send delete request to remove metric from the system.
+	 * Nullifies (helps GC) its members.
+	 * 
+	 * @returns {Promise<void>} 
+	 * 
+	 * @memberOf Metric
+	 */
+	public async destroy() : Promise<void> {
+		this.turnOff();
+		$(`[data-identifier="${this.getMetricIdentifier()}"]`)
+			.parent()
+			.fadeOut(200, function() {
+				$(this).remove();
+			});
+
+		await Utility.delete(Constants.REMOVE_METRIC_ENDPOINT, {
+			source: this.source,
+			type: MetricType[this.metricType]
+		});
+
+		this._data = null;
+		this._values = null;
+		this._autoLabel = null;
+		this._manualLabel = null;
+	}
+
+	/**
+	 * Returns a unique metric identifier used in data-identifier attribute of HTML
+	 * 
+	 * @public
+	 * @returns {string} - unique identifier
+	 * 
+	 * @memberOf Metric
+	 */
+	public getMetricIdentifier(): string {
+		return `${this.metricType}-${this.source}`;
+	}
+}
diff --git a/client/ts/modules/concrete-metrics.ts b/client/ts/modules/concrete-metrics.ts
new file mode 100644
index 0000000000000000000000000000000000000000..7386d3cbfbf1a31b3ebba61056d6e448aae98e16
--- /dev/null
+++ b/client/ts/modules/concrete-metrics.ts
@@ -0,0 +1,140 @@
+import { Metric, MetricType, DataPoint } from "./abstract-metric";
+import { Utility } from "./utility";
+import "flot";
+import "../vendor/jquery.flot.threshold.js";
+import "../vendor/jquery.flot.tooltip.js";
+
+type JsonCpuLoadDataPoint = {
+	Timestamp: string;
+	Value: number;
+}
+
+
+/**
+ * Data type representing CPU Load data point
+ * 
+ * @export
+ * @class CpuLoadDataPoint
+ * @extends {DataPoint}
+ */
+export class CpuLoadDataPoint extends DataPoint {
+
+	/**
+	 * Value of load of CPU 0-100 percents
+	 * 
+	 * @type {number}
+	 * @memberOf CpuLoadDataPoint
+	 */
+	public value: number;
+
+
+	/**
+	 * Creates an instance of CpuLoadDataPoint.
+	 * @param {JsonCpuLoadDataPoint} json - JSON object representing CPU Load data point
+	 * 
+	 * @memberOf CpuLoadDataPoint
+	 */
+	constructor(json: JsonCpuLoadDataPoint) {
+		super();
+
+		this.timestamp = Utility.toDate(json.Timestamp);
+		this.value = json.Value;
+	}
+}
+
+
+/**
+ * Class responsible for manipulating and rendering CPU Load metric
+ * 
+ * @export
+ * @class CpuLoadMetric
+ * @extends {Metric<CpuLoadDataPoint>}
+ */
+export class CpuLoadMetric extends Metric<CpuLoadDataPoint> {
+
+
+	/**
+	 * Creates an instance of CpuLoadMetric.
+	 * @param {string} source - source of the metric
+	 * 
+	 * @memberOf CpuLoadMetric
+	 */
+	constructor(source: string) {
+		super(source);
+		
+		this._metricType = MetricType.CpuLoad;
+	}
+
+
+	/**
+	 * 
+	 * 
+	 * @protected
+	 * 
+	 * @memberOf CpuLoadMetric
+	 */
+	protected renderPlot(): void {
+		var data = [];
+		this
+			.data
+			.sort(dp => dp.timestamp.getMilliseconds())
+			.reverse()
+			.forEach((value, index, array) => data.push([index, value.value]));
+
+		let plotOptions: any = {
+			yaxis: {
+				max: 100,
+				min: 0
+			},
+			xaxis: {
+				tickDecimals: 0,
+				ticks: false
+			},
+			grid: {
+				borderWidth: 0,
+				labelMargin: 10,
+				hoverable: true,
+				clickable: true,
+				mouseActiveRadius: 6
+			},
+			tooltip: {
+				show: true,
+				content: "Load %y%",
+				defaultTheme: false,
+				cssClass: "flot-tooltip"
+			}
+		};
+
+		$.plot(
+			$(`[data-identifier="${this.getMetricIdentifier()}"] .metric-chart`),
+			[
+				{
+					data: data,
+					lines: {
+						show: true,
+						fill: 0.50
+					},
+					color: 'rgb(200, 20, 30)',
+					threshold: {
+						below: 90,
+						color: "#FFC107"
+					}
+				}
+			],
+			plotOptions
+		);
+	}
+
+	/**
+	 * 
+	 * 
+	 * @protected
+	 * @param {*} json 
+	 * @returns {CpuLoadDataPoint} 
+	 * 
+	 * @memberOf CpuLoadMetric
+	 */
+	protected getDataPointFromJson(json: any): CpuLoadDataPoint {
+		return new CpuLoadDataPoint(json);
+	}
+}
diff --git a/client/ts/modules/constants.ts b/client/ts/modules/constants.ts
new file mode 100644
index 0000000000000000000000000000000000000000..6b5d4c759321eca02c63ed019e49b9f52a0aaeb2
--- /dev/null
+++ b/client/ts/modules/constants.ts
@@ -0,0 +1,42 @@
+/**
+ * Data structure representing application level constants
+ * 
+ * @export
+ * @class Constants
+ */
+export class Constants {
+    /**
+	 * Root API URL
+	 * 
+	 * @static
+	 * @type {string}
+	 * @memberOf Constants
+	 */
+	static API_URL : string = "/api";
+    /**
+	 * Get data API URL
+	 * 
+	 * @static
+	 * @type {string}
+	 * @memberOf Constants
+	 */
+	static GET_DATA_ENDPOINT : string = `${Constants.API_URL}/getData`;
+	/**
+	 * Get metric API URL
+	 * 
+	 * @static
+	 * @type {string}
+	 * @memberOf Constants
+	 */
+	static GET_METRICS_ENDPOINT : string = `${Constants.API_URL}/getMetrics`;
+	/**
+	 * How often metrics need to be reloaded and re-rendered (in seconds)
+	 * 
+	 * @static
+	 * @type {number}
+	 * @memberOf Constants
+	 */
+	static UPDATE_INTERVAL : number = 20;
+
+	static REMOVE_METRIC_ENDPOINT : string = `${Constants.API_URL}/removeMetric`;
+}
diff --git a/client/ts/modules/extensions.ts b/client/ts/modules/extensions.ts
new file mode 100644
index 0000000000000000000000000000000000000000..f87add5e4351ada98481a699c63303ff748d8542
--- /dev/null
+++ b/client/ts/modules/extensions.ts
@@ -0,0 +1,15 @@
+// These are the extensions to native JavaScript objects
+
+// Ensure this is treated as a module.
+export { };
+
+
+declare global {
+	interface Array<T> {
+		sortByProperty(delegate: (el: T) => number): T[];
+	}
+}
+
+Array.prototype.sortByProperty = function (delegate: (el) => number) {
+	return this.sort((a, b) => delegate(a) - delegate(b));
+};
diff --git a/client/ts/modules/metric-label.ts b/client/ts/modules/metric-label.ts
new file mode 100644
index 0000000000000000000000000000000000000000..8fae8802b5206a2eb70ffbf33f7b2a52cc38a159
--- /dev/null
+++ b/client/ts/modules/metric-label.ts
@@ -0,0 +1,288 @@
+/**
+ * 
+ * Abstract class responsible for labels displayed withing the metric card.
+ * Renders as SPAN in the UI.
+ * 
+ * @export
+ * @abstract
+ * @class MetricLabel
+ * @template T - Type of severity for label
+ */
+export abstract class MetricLabel<T>  {
+
+	/**
+	 * Severity of a the label
+	 * 
+	 * @protected
+	 * @type {T}
+	 * @memberOf MetricLabel
+	 */
+	protected severity: T;
+
+	/**
+	 * Color of the text for the label
+	 * 
+	 * @protected
+	 * @type {string}
+	 * @memberOf MetricLabel
+	 */
+	protected textColor: string;
+	/**
+	 * Background color of the label
+	 * 
+	 * @protected
+	 * @type {string}
+	 * @memberOf MetricLabel
+	 */
+	protected backgroundColor: string;
+	
+	/**
+	 * Text part of the label
+	 * 
+	 * @private
+	 * @type {string}
+	 * @memberOf MetricLabel
+	 */
+	private text: string;
+	/**
+	 * jQuery element representing a SPAN in which label is displayed.
+	 * 
+	 * @private
+	 * @type {JQuery}
+	 * @memberOf MetricLabel
+	 */
+	private domElement: JQuery;
+
+
+	/**
+	 * Creates an instance of MetricLabel.
+	 * @param {string} text - label's text
+	 * @param {string} severity - label's severity
+	 * @param {string} cssSelector - selector which will resolve to label's span element
+	 * 
+	 * @memberOf MetricLabel
+	 */
+	constructor(text: string, severity: string, cssSelector: string) {
+		this.text = text;
+		this.setSeverity(severity);
+		this.domElement = $(cssSelector);
+	}
+
+	/**
+	 * 
+	 * Renders (properly displays or hides) label in the UI.
+	 * 
+	 * @memberOf MetricLabel
+	 */
+	public render(): void {
+		this.setColor();
+		this.renderText();
+
+		this.shouldShow() ? this.domElement.show() : this.domElement.hide();
+	}
+
+	/**
+	 * Set's the color property of the label
+	 * 
+	 * @protected
+	 * @abstract
+	 * 
+	 * @memberOf MetricLabel
+	 */
+	protected abstract setColor() : void;
+	/**
+	 * Set the severity property of the label
+	 * 
+	 * @protected
+	 * @abstract
+	 * @param {string} severity - text representation of severity (usually received from server)
+	 * 
+	 * @memberOf MetricLabel
+	 */
+	protected abstract setSeverity(severity: string) : void;
+	/**
+	 * Returns true if metric needs to be displayed in UI, and false otherwise
+	 * 
+	 * @protected
+	 * @abstract
+	 * @returns {boolean} - whether metric should be displayed or not
+	 * 
+	 * @memberOf MetricLabel
+	 */
+	protected abstract shouldShow() : boolean;
+
+	/**
+	 * Renders text along with foreground and background color in the UI
+	 * 
+	 * @private
+	 * 
+	 * @memberOf MetricLabel
+	 */
+	private renderText() : void {
+		this.domElement.text(this.text);
+		this.domElement.css("background-color", this.backgroundColor);
+		this.domElement.css("color", this.textColor);
+	}
+}
+
+
+/**
+ * Severity options for AutoLabel.
+ * 
+ * @enum {number}
+ */
+enum AutoLabelSeverity {
+	Normal = 1, Warning, Critical
+}
+
+
+/**
+ * Responsible for automatic labels displayed withing the metric card.
+ * 
+ * @export
+ * @class AutoLabel
+ * @extends {MetricLabel<AutoLabelSeverity>}
+ */
+export class AutoLabel extends MetricLabel<AutoLabelSeverity> {
+
+
+	/**
+	 * Creates an instance of AutoLabel.
+	 * @param {string} text - Text part of the label
+	 * @param {string} severity - String representation of severity of the label 
+	 * @param {string} metricIdentifier - UI identifier (the one in data-identifier attribute) of the containing metric
+	 * 
+	 * @memberOf AutoLabel
+	 */
+	constructor(text: string, severity: string, metricIdentifier: string) {
+		super(text, severity, `[data-identifier="${metricIdentifier}"].metric-auto-label`);
+	}
+
+
+	/**
+	 * 
+	 * 
+	 * @protected
+	 * 
+	 * @memberOf AutoLabel
+	 */
+	protected setColor() : void {
+		switch (this.severity) {
+			case AutoLabelSeverity.Normal:
+				this.backgroundColor = "aquamarine";
+				this.textColor = "black";
+				break;
+			case AutoLabelSeverity.Warning:
+				this.backgroundColor = "gold";
+				this.textColor = "black";
+				break;
+			case AutoLabelSeverity.Critical:
+				this.backgroundColor = "crimson";
+				this.textColor = "white";
+				break;
+		}
+	}
+
+
+	/**
+	 * 
+	 * 
+	 * @protected
+	 * @param {string} severity 
+	 * 
+	 * @memberOf AutoLabel
+	 */
+	protected setSeverity(severity: string) : void {
+		this.severity = AutoLabelSeverity[severity];
+	};
+
+
+	/**
+	 * 
+	 * 
+	 * @protected
+	 * @returns {boolean} 
+	 * 
+	 * @memberOf AutoLabel
+	 */
+	protected shouldShow() : boolean {
+		return true;
+	}
+}
+
+
+/**
+ * Severity options for ManualLabel.
+ * 
+ * @enum {number}
+ */
+enum ManualLabelSeverity {
+	None = 1, Investigating
+}
+
+
+/**
+ * Responsible for manual labels displayed withing the metric card.
+ * 
+ * @export
+ * @class ManualLabel
+ * @extends {MetricLabel<ManualLabelSeverity>}
+ */
+export class ManualLabel extends MetricLabel<ManualLabelSeverity> {
+
+
+	/**
+	 * Creates an instance of AutoLabel.
+	 * @param {string} text - Text part of the label
+	 * @param {string} severity - String representation of severity of the label 
+	 * @param {string} metricIdentifier - UI identifier (the one in data-identifier attribute) of the containing metric
+	 * 
+	 * @memberOf ManualLabel
+	 */
+	constructor(text: string, severity: string, metricIdentifier: string) {
+		super(text, severity, `[data-identifier="${metricIdentifier}"].metric-manual-label`);
+	}
+
+
+	/**
+	 * 
+	 * 
+	 * @protected
+	 * 
+	 * @memberOf ManualLabel
+	 */
+	protected setColor() : void {
+		switch (this.severity) {
+			case ManualLabelSeverity.Investigating:
+				this.backgroundColor = "gold";
+				this.textColor = "black";
+				break;
+		}
+	}
+
+
+	/**
+	 * 
+	 * 
+	 * @protected
+	 * @param {string} severity 
+	 * 
+	 * @memberOf ManualLabel
+	 */
+	protected setSeverity(severity: string) : void {
+		this.severity = ManualLabelSeverity[severity];
+	};
+
+
+	/**
+	 * 
+	 * 
+	 * @protected
+	 * @returns {boolean} 
+	 * 
+	 * @memberOf ManualLabel
+	 */
+	protected shouldShow() : boolean {
+		return this.severity != ManualLabelSeverity.None;
+	}
+}
diff --git a/client/ts/modules/metric-page.ts b/client/ts/modules/metric-page.ts
new file mode 100644
index 0000000000000000000000000000000000000000..5669e7df0f4438997d16a8c078b52f78063ad228
--- /dev/null
+++ b/client/ts/modules/metric-page.ts
@@ -0,0 +1,260 @@
+import { CpuLoadMetric } from "./concrete-metrics";
+import { Metric, DataPoint, MetricType } from "./abstract-metric";
+import { Utility } from "./utility";
+import "./extensions";
+
+import "flot";
+import "datatables.net"
+import "../vendor/jquery.flot.time.js";
+import "../vendor/jquery.flot.selection.js";
+import "../vendor/jquery.flot.threshold.js";
+import "../vendor/jquery.flot.tooltip.js";
+
+
+/**
+ * Represents set of procedures for rendering metric page.
+ * 
+ * @export
+ * @class MetricPage
+ */
+export class MetricPage {
+
+	/**
+	 * Source of the metric
+	 * 
+	 * @private
+	 * @type {string}
+	 * @memberOf MetricPage
+	 */
+	private source: string;
+	/**
+	 * Type of the metric
+	 * 
+	 * @private
+	 * @type {MetricType}
+	 * @memberOf MetricPage
+	 */
+	private type: MetricType;
+
+	/**
+	 * Data points of the metric
+	 * 
+	 * @private
+	 * @type {Metric<DataPoint>}
+	 * @memberOf MetricPage
+	 */
+	private metric: Metric<DataPoint>;
+
+	/**
+	 * Flag representing if data tables have been already rendered.
+	 * We cannot easily re-render data tables.
+	 * 
+	 * @private
+	 * @type {boolean}
+	 * @memberOf MetricPage
+	 */
+	private dataTablesRendered: boolean = false;
+
+	/**
+	 * Creates an instance of MetricPage.
+	 * @param {string} source - source of the metric
+	 * @param {MetricType} type - type of the metric
+	 * 
+	 * @memberOf MetricPage
+	 */
+	constructor(source: string, type: MetricType) {
+		this.source = source;
+		this.type = type;
+
+		this.metric = new CpuLoadMetric(source);
+
+		window.setTimeout(async () => {
+
+			await this.metric.loadData(60 * 60 * 24 * 7); // week
+
+			this.render();
+
+		}, 0);
+	}
+
+	/**
+	 * Renders plot in the UI.
+	 * Does not load the data.
+	 * 
+	 * @private
+	 * 
+	 * @memberOf MetricPage
+	 */
+	private renderPlot(): void {
+
+		var data = [];
+		(<CpuLoadMetric>this.metric)
+			.data
+			.sortByProperty(dp => dp.timestamp.getTime())
+			.reverse()
+			.forEach((value, index, array) => data.push([value.timestamp.getTime(), value.value]));
+
+		let detailedPlotOptions: any = {
+			yaxis: {
+				max: 100,
+				min: 0
+			},
+			xaxis: {
+				mode: "time",
+				tickLength: 5,
+				timezone: "browser"
+			},
+			grid: {
+				borderWidth: 0,
+				labelMargin: 10,
+				hoverable: true,
+				clickable: true,
+				mouseActiveRadius: 6
+			},
+			tooltip: {
+				show: true,
+				content: "%x: %y%",
+				defaultTheme: false,
+				cssClass: "flot-tooltip"
+			},
+			selection: {
+				mode: "x"
+			}
+		};
+
+		var formattedData = [
+			{
+				data: data,
+				lines: {
+					show: true,
+					fill: 0.50
+				},
+				color: 'rgb(200, 20, 30)',
+				threshold: {
+					below: 90,
+					color: "#FFC107"
+				}
+			}
+		];
+
+		var overviewPlotOptions = {
+			series: {
+				lines: {
+					show: true,
+					lineWidth: 1
+				},
+				shadowSize: 0
+			},
+			xaxis: {
+				ticks: [],
+				mode: "time"
+			},
+			yaxis: {
+				ticks: [],
+				min: 0,
+				autoscaleMargin: 0.1
+			},
+			selection: {
+				mode: "x"
+			}
+		};
+
+		var plot: any = $.plot(
+			$("#metric-detailed-plot"),
+			formattedData,
+			detailedPlotOptions
+		);
+
+		var overview: any = $.plot(
+			$("#metric-overview-plot"),
+			formattedData,
+			overviewPlotOptions
+		);
+
+		// now connect the two
+
+		$("#metric-detailed-plot").bind("plotselected", <any>((event, ranges) => {
+
+			// do the zooming
+			$.each(plot.getXAxes(), function (_, axis) {
+				var opts = axis.options;
+				opts.min = ranges.xaxis.from;
+				opts.max = ranges.xaxis.to;
+			});
+			plot.setupGrid();
+			plot.draw();
+			plot.clearSelection();
+
+			// don't fire event on the overview to prevent eternal loop
+			overview.setSelection(ranges, true);
+		}));
+
+		$("#metric-overview-plot").bind("plotselected", <any>((event, ranges) => {
+			plot.setSelection(ranges);
+		}));
+	};
+
+	/**
+	 * Renders data tables in the UI.
+	 * Does not load the data.
+	 * 
+	 * @private
+	 * 
+	 * @memberOf MetricPage
+	 */
+	private renderTable(): void {
+
+		if (!this.dataTablesRendered) {
+
+			$("#metric-data tbody").html(
+				(<CpuLoadMetric>this.metric)
+					.data
+					.map(
+					dp => `
+						<tr>
+							<td>${dp.timestamp}</td>
+							<td>${dp.value}</td>
+						</tr>
+					`
+					)
+					.join()
+			);
+
+			$('#metric-data').DataTable({
+				"order": [[0, "desc"]],
+				lengthChange: false,
+				searching: false,
+				pageLength: 10
+			});
+		}
+
+		this.dataTablesRendered = true;
+	};
+
+	/**
+	 * Renders numeric values in the UI.
+	 * Does not load the data.
+	 * 
+	 * @private
+	 * 
+	 * @memberOf MetricPage
+	 */
+	private renderValues(): void {
+		this.metric.autoLabel.render();
+		this.metric.manualLabel.render();
+	}
+
+	/**
+	 * Renders all components in the UI.
+	 * Does not load the data.
+	 * 
+	 * @private
+	 * 
+	 * @memberOf MetricPage
+	 */
+	public render(): void {
+		this.renderPlot();
+		this.renderValues();
+		this.renderTable();
+	}
+}
diff --git a/client/ts/modules/utility.ts b/client/ts/modules/utility.ts
new file mode 100644
index 0000000000000000000000000000000000000000..a081490aac98e75f17284e033fe1710e37cc9374
--- /dev/null
+++ b/client/ts/modules/utility.ts
@@ -0,0 +1,218 @@
+import "bootstrap-notify";
+
+
+/**
+ * Static class that provides useful utility methods.
+ * 
+ * @export
+ * @class Utility
+ */
+export class Utility {
+
+	/**
+	 * Returns properly formatted GET request query URL.
+	 * 
+	 * @static
+	 * @param {string} url - URL of the endpoint
+	 * @param {...[string, string][]} parameters - set of tuples: param - value
+	 * @returns {string} - proper URL for GET request
+	 * 
+	 * @memberOf Utility
+	 */
+	public static generateQuery(url: string, ...parameters: [string, string][]): string {
+
+		let result = `${url}?`;
+		for (var param of parameters) {
+			result += `${param[0]}=${param[1]}&`;
+		}
+
+		if (result.charAt(result.length - 1) == '&') {
+			result.substr(0, result.length - 1);
+		}
+
+		return result;
+	}
+
+	/**
+	 * GET request AJAX wrapper that works on promises
+	 * 
+	 * @static
+	 * @param {string} url - endpoint URL
+	 * @returns {Promise<any>} - promise of get request result
+	 * 
+	 * @memberOf Utility
+	 */
+	public static async get(url: string): Promise<any> {
+		return new Promise((resolve, reject) => {
+
+			$.ajax(url, {
+				type: "GET",
+				dataType: "json",
+				statusCode: {
+					204: (result) => { resolve([]) },
+					200: (result) => { resolve(result) }
+				},
+				error: (result) => { reject(result) }
+			});
+		});
+	}
+
+
+	/**
+	 * DELETE request AJAX wrapper that works on promises
+	 * 
+	 * @static
+	 * @param {string} url - endpoint URL
+	 * @param {*} data - request parameters
+	 * @returns {Promise<any>} - promise of delete request result
+	 * 
+	 * @memberOf Utility
+	 */
+	public static async delete(url: string, data: any): Promise<any> {
+		return new Promise((resolve, reject) => {
+
+			$.ajax(url, {
+				type: "DELETE",
+				data: data,
+				statusCode: {
+					200: (result) => { resolve(result) }
+				},
+				error: (result) => { reject(result) }
+			});
+		});
+	}
+
+	/**
+	 * Converts .NET timestamp string to TS Date
+	 * 
+	 * @static
+	 * @param {string} dotNetDate - .NET formatted timestamp
+	 * @returns {Date} - equivalent TS Date object
+	 * 
+	 * @memberOf Utility
+	 */
+	public static toDate(dotNetDate: string): Date {
+		return new Date(Date.parse(dotNetDate));
+	}
+
+	/**
+	 * Mutes thread for a time interval
+	 * 
+	 * @static
+	 * @param {number} time - time interval in milliseconds
+	 * @returns {Promise<any>} 
+	 * 
+	 * @memberOf Utility
+	 */
+	public static async sleep(time: number): Promise<any> {
+		return new Promise(resolve => window.setTimeout(resolve, time));
+	}
+
+	/**
+	 * Returns nicely looking string representing time.
+	 * Example: 3:09:05 PM
+	 * 
+	 * @static
+	 * @param {Date} date - date to display
+	 * @returns {string} - string representation of the date
+	 * 
+	 * @memberOf Utility
+	 */
+	public static toHHMMSS(date: Date): string {
+		let hours = date.getHours();
+
+		let ampm = hours >= 12 ? 'PM' : 'AM';
+
+		hours = hours % 12;
+		hours = hours ? hours : 12; // the hour '0' should be '12'
+
+		let minutes = date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes();
+		let seconds = date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds();
+
+		return `${hours}:${minutes}:${seconds} ${ampm}`;
+	}
+
+	// http://stackoverflow.com/a/18330682/1644554
+	public static toLocalTimezone(date: Date): Date {
+		let newDate = new Date(date.getTime() + date.getTimezoneOffset() * 60 * 1000);
+
+		let offset = date.getTimezoneOffset() / 60;
+		let hours = date.getHours();
+
+		newDate.setHours(hours - offset);
+
+		return newDate;
+	}
+
+	public static fixUtcTime(): void {
+
+		$(".utc-time").each(function () {
+			$(this).text(
+				Utility.toHHMMSS(
+					Utility.toLocalTimezone(
+						new Date($(this).text())
+					)
+				)
+			);
+		});
+
+	}
+
+	public static toUtcDate(date : Date): number {
+		return Date.UTC(
+			date.getUTCFullYear(), 
+			date.getUTCMonth(), 
+			date.getUTCDate(),  
+			date.getUTCHours(), 
+			date.getUTCMinutes(), 
+			date.getUTCSeconds(), 
+			date.getUTCMilliseconds()
+		);
+	}
+}
+
+/**
+ * Static class that provides useful UI related methods.
+ * 
+ * @export
+ * @class UIHelper
+ */
+export class UIHelper {
+
+	/**
+	 * Triggers notification message in the UI.
+	 * Uses "bootstrap-notify" library.
+	 * 
+	 * @static
+	 * @param {any} message 
+	 * @param {any} type 
+	 * 
+	 * @memberOf UIHelper
+	 */
+	public static notify(message, type) {
+		$.notify(
+			{
+				message: message
+			},
+			{
+				type: type,
+				allow_dismiss: true,
+				allow_duplicates: false,
+				timer: 1000,
+				placement: {
+					from: 'bottom',
+					align: 'left'
+				},
+				delay: 500,
+				animate: {
+					enter: 'animated fadeInUp',
+					exit: 'animated fadeOutDown'
+				},
+				offset: {
+					x: 30,
+					y: 30
+				}
+			}
+		);
+	};
+}
diff --git a/client/ts/overview.ts b/client/ts/overview.ts
new file mode 100644
index 0000000000000000000000000000000000000000..a1848302056970a315e92541fa0bb5f867de085a
--- /dev/null
+++ b/client/ts/overview.ts
@@ -0,0 +1,47 @@
+// Entry point for overview page
+
+import $ = require('jquery');
+import { CpuLoadMetric } from "./modules/concrete-metrics";
+import { Metric, DataPoint, MetricType } from "./modules/abstract-metric";
+import "bootstrap"
+
+let metrics = new Array<Metric<DataPoint>>();
+
+$(() => {
+
+	$(".metric").each((index, element) => {
+
+		let source = $(element)
+			.data("identifier")
+			.substring("0-".length);
+
+		// Because we render only CPU metric for now
+		// Should be MetricFactory when we render multiple types of metrics
+		let metric = new CpuLoadMetric(source);
+
+		// Handler for remove metric click
+		// Tells metric to remove itself and excludes it from the array of metrics
+		$(`[data-identifier="${metric.getMetricIdentifier()}"] .remove-metric`).click(
+			async (e) => {
+				// Do not follow the link
+				e.preventDefault();
+
+				if (confirm(`Are sure you want to remove this metric {${metric.source}, ${MetricType[metric.metricType]}}?`)) {
+					// Tell metric to destroy itself (gracefully)
+					await metric.destroy();
+					// Remove metric object form global array
+					metrics.splice(metrics.indexOf(metric), 1);	
+				}
+			}
+		);
+
+		metrics.push(metric);
+	});
+
+	metrics.forEach((mt) => mt.turnOn());
+
+	$(window).resize(() => {
+		metrics.forEach((metric) => metric.render());
+	});
+
+});
diff --git a/client/ts/vendor/jquery.flot.selection.js b/client/ts/vendor/jquery.flot.selection.js
new file mode 100644
index 0000000000000000000000000000000000000000..2256ba350012fd7eaabbe88eb7d50797c76a4461
--- /dev/null
+++ b/client/ts/vendor/jquery.flot.selection.js
@@ -0,0 +1,360 @@
+/* Flot plugin for selecting regions of a plot.
+
+Copyright (c) 2007-2014 IOLA and Ole Laursen.
+Licensed under the MIT license.
+
+The plugin supports these options:
+
+selection: {
+	mode: null or "x" or "y" or "xy",
+	color: color,
+	shape: "round" or "miter" or "bevel",
+	minSize: number of pixels
+}
+
+Selection support is enabled by setting the mode to one of "x", "y" or "xy".
+In "x" mode, the user will only be able to specify the x range, similarly for
+"y" mode. For "xy", the selection becomes a rectangle where both ranges can be
+specified. "color" is color of the selection (if you need to change the color
+later on, you can get to it with plot.getOptions().selection.color). "shape"
+is the shape of the corners of the selection.
+
+"minSize" is the minimum size a selection can be in pixels. This value can
+be customized to determine the smallest size a selection can be and still
+have the selection rectangle be displayed. When customizing this value, the
+fact that it refers to pixels, not axis units must be taken into account.
+Thus, for example, if there is a bar graph in time mode with BarWidth set to 1
+minute, setting "minSize" to 1 will not make the minimum selection size 1
+minute, but rather 1 pixel. Note also that setting "minSize" to 0 will prevent
+"plotunselected" events from being fired when the user clicks the mouse without
+dragging.
+
+When selection support is enabled, a "plotselected" event will be emitted on
+the DOM element you passed into the plot function. The event handler gets a
+parameter with the ranges selected on the axes, like this:
+
+	placeholder.bind( "plotselected", function( event, ranges ) {
+		alert("You selected " + ranges.xaxis.from + " to " + ranges.xaxis.to)
+		// similar for yaxis - with multiple axes, the extra ones are in
+		// x2axis, x3axis, ...
+	});
+
+The "plotselected" event is only fired when the user has finished making the
+selection. A "plotselecting" event is fired during the process with the same
+parameters as the "plotselected" event, in case you want to know what's
+happening while it's happening,
+
+A "plotunselected" event with no arguments is emitted when the user clicks the
+mouse to remove the selection. As stated above, setting "minSize" to 0 will
+destroy this behavior.
+
+The plugin allso adds the following methods to the plot object:
+
+- setSelection( ranges, preventEvent )
+
+  Set the selection rectangle. The passed in ranges is on the same form as
+  returned in the "plotselected" event. If the selection mode is "x", you
+  should put in either an xaxis range, if the mode is "y" you need to put in
+  an yaxis range and both xaxis and yaxis if the selection mode is "xy", like
+  this:
+
+	setSelection({ xaxis: { from: 0, to: 10 }, yaxis: { from: 40, to: 60 } });
+
+  setSelection will trigger the "plotselected" event when called. If you don't
+  want that to happen, e.g. if you're inside a "plotselected" handler, pass
+  true as the second parameter. If you are using multiple axes, you can
+  specify the ranges on any of those, e.g. as x2axis/x3axis/... instead of
+  xaxis, the plugin picks the first one it sees.
+
+- clearSelection( preventEvent )
+
+  Clear the selection rectangle. Pass in true to avoid getting a
+  "plotunselected" event.
+
+- getSelection()
+
+  Returns the current selection in the same format as the "plotselected"
+  event. If there's currently no selection, the function returns null.
+
+*/
+
+(function ($) {
+    function init(plot) {
+        var selection = {
+                first: { x: -1, y: -1}, second: { x: -1, y: -1},
+                show: false,
+                active: false
+            };
+
+        // FIXME: The drag handling implemented here should be
+        // abstracted out, there's some similar code from a library in
+        // the navigation plugin, this should be massaged a bit to fit
+        // the Flot cases here better and reused. Doing this would
+        // make this plugin much slimmer.
+        var savedhandlers = {};
+
+        var mouseUpHandler = null;
+        
+        function onMouseMove(e) {
+            if (selection.active) {
+                updateSelection(e);
+                
+                plot.getPlaceholder().trigger("plotselecting", [ getSelection() ]);
+            }
+        }
+
+        function onMouseDown(e) {
+            if (e.which != 1)  // only accept left-click
+                return;
+            
+            // cancel out any text selections
+            document.body.focus();
+
+            // prevent text selection and drag in old-school browsers
+            if (document.onselectstart !== undefined && savedhandlers.onselectstart == null) {
+                savedhandlers.onselectstart = document.onselectstart;
+                document.onselectstart = function () { return false; };
+            }
+            if (document.ondrag !== undefined && savedhandlers.ondrag == null) {
+                savedhandlers.ondrag = document.ondrag;
+                document.ondrag = function () { return false; };
+            }
+
+            setSelectionPos(selection.first, e);
+
+            selection.active = true;
+
+            // this is a bit silly, but we have to use a closure to be
+            // able to whack the same handler again
+            mouseUpHandler = function (e) { onMouseUp(e); };
+            
+            $(document).one("mouseup", mouseUpHandler);
+        }
+
+        function onMouseUp(e) {
+            mouseUpHandler = null;
+            
+            // revert drag stuff for old-school browsers
+            if (document.onselectstart !== undefined)
+                document.onselectstart = savedhandlers.onselectstart;
+            if (document.ondrag !== undefined)
+                document.ondrag = savedhandlers.ondrag;
+
+            // no more dragging
+            selection.active = false;
+            updateSelection(e);
+
+            if (selectionIsSane())
+                triggerSelectedEvent();
+            else {
+                // this counts as a clear
+                plot.getPlaceholder().trigger("plotunselected", [ ]);
+                plot.getPlaceholder().trigger("plotselecting", [ null ]);
+            }
+
+            return false;
+        }
+
+        function getSelection() {
+            if (!selectionIsSane())
+                return null;
+            
+            if (!selection.show) return null;
+
+            var r = {}, c1 = selection.first, c2 = selection.second;
+            $.each(plot.getAxes(), function (name, axis) {
+                if (axis.used) {
+                    var p1 = axis.c2p(c1[axis.direction]), p2 = axis.c2p(c2[axis.direction]); 
+                    r[name] = { from: Math.min(p1, p2), to: Math.max(p1, p2) };
+                }
+            });
+            return r;
+        }
+
+        function triggerSelectedEvent() {
+            var r = getSelection();
+
+            plot.getPlaceholder().trigger("plotselected", [ r ]);
+
+            // backwards-compat stuff, to be removed in future
+            if (r.xaxis && r.yaxis)
+                plot.getPlaceholder().trigger("selected", [ { x1: r.xaxis.from, y1: r.yaxis.from, x2: r.xaxis.to, y2: r.yaxis.to } ]);
+        }
+
+        function clamp(min, value, max) {
+            return value < min ? min: (value > max ? max: value);
+        }
+
+        function setSelectionPos(pos, e) {
+            var o = plot.getOptions();
+            var offset = plot.getPlaceholder().offset();
+            var plotOffset = plot.getPlotOffset();
+            pos.x = clamp(0, e.pageX - offset.left - plotOffset.left, plot.width());
+            pos.y = clamp(0, e.pageY - offset.top - plotOffset.top, plot.height());
+
+            if (o.selection.mode == "y")
+                pos.x = pos == selection.first ? 0 : plot.width();
+
+            if (o.selection.mode == "x")
+                pos.y = pos == selection.first ? 0 : plot.height();
+        }
+
+        function updateSelection(pos) {
+            if (pos.pageX == null)
+                return;
+
+            setSelectionPos(selection.second, pos);
+            if (selectionIsSane()) {
+                selection.show = true;
+                plot.triggerRedrawOverlay();
+            }
+            else
+                clearSelection(true);
+        }
+
+        function clearSelection(preventEvent) {
+            if (selection.show) {
+                selection.show = false;
+                plot.triggerRedrawOverlay();
+                if (!preventEvent)
+                    plot.getPlaceholder().trigger("plotunselected", [ ]);
+            }
+        }
+
+        // function taken from markings support in Flot
+        function extractRange(ranges, coord) {
+            var axis, from, to, key, axes = plot.getAxes();
+
+            for (var k in axes) {
+                axis = axes[k];
+                if (axis.direction == coord) {
+                    key = coord + axis.n + "axis";
+                    if (!ranges[key] && axis.n == 1)
+                        key = coord + "axis"; // support x1axis as xaxis
+                    if (ranges[key]) {
+                        from = ranges[key].from;
+                        to = ranges[key].to;
+                        break;
+                    }
+                }
+            }
+
+            // backwards-compat stuff - to be removed in future
+            if (!ranges[key]) {
+                axis = coord == "x" ? plot.getXAxes()[0] : plot.getYAxes()[0];
+                from = ranges[coord + "1"];
+                to = ranges[coord + "2"];
+            }
+
+            // auto-reverse as an added bonus
+            if (from != null && to != null && from > to) {
+                var tmp = from;
+                from = to;
+                to = tmp;
+            }
+            
+            return { from: from, to: to, axis: axis };
+        }
+        
+        function setSelection(ranges, preventEvent) {
+            var axis, range, o = plot.getOptions();
+
+            if (o.selection.mode == "y") {
+                selection.first.x = 0;
+                selection.second.x = plot.width();
+            }
+            else {
+                range = extractRange(ranges, "x");
+
+                selection.first.x = range.axis.p2c(range.from);
+                selection.second.x = range.axis.p2c(range.to);
+            }
+
+            if (o.selection.mode == "x") {
+                selection.first.y = 0;
+                selection.second.y = plot.height();
+            }
+            else {
+                range = extractRange(ranges, "y");
+
+                selection.first.y = range.axis.p2c(range.from);
+                selection.second.y = range.axis.p2c(range.to);
+            }
+
+            selection.show = true;
+            plot.triggerRedrawOverlay();
+            if (!preventEvent && selectionIsSane())
+                triggerSelectedEvent();
+        }
+
+        function selectionIsSane() {
+            var minSize = plot.getOptions().selection.minSize;
+            return Math.abs(selection.second.x - selection.first.x) >= minSize &&
+                Math.abs(selection.second.y - selection.first.y) >= minSize;
+        }
+
+        plot.clearSelection = clearSelection;
+        plot.setSelection = setSelection;
+        plot.getSelection = getSelection;
+
+        plot.hooks.bindEvents.push(function(plot, eventHolder) {
+            var o = plot.getOptions();
+            if (o.selection.mode != null) {
+                eventHolder.mousemove(onMouseMove);
+                eventHolder.mousedown(onMouseDown);
+            }
+        });
+
+
+        plot.hooks.drawOverlay.push(function (plot, ctx) {
+            // draw selection
+            if (selection.show && selectionIsSane()) {
+                var plotOffset = plot.getPlotOffset();
+                var o = plot.getOptions();
+
+                ctx.save();
+                ctx.translate(plotOffset.left, plotOffset.top);
+
+                var c = $.color.parse(o.selection.color);
+
+                ctx.strokeStyle = c.scale('a', 0.8).toString();
+                ctx.lineWidth = 1;
+                ctx.lineJoin = o.selection.shape;
+                ctx.fillStyle = c.scale('a', 0.4).toString();
+
+                var x = Math.min(selection.first.x, selection.second.x) + 0.5,
+                    y = Math.min(selection.first.y, selection.second.y) + 0.5,
+                    w = Math.abs(selection.second.x - selection.first.x) - 1,
+                    h = Math.abs(selection.second.y - selection.first.y) - 1;
+
+                ctx.fillRect(x, y, w, h);
+                ctx.strokeRect(x, y, w, h);
+
+                ctx.restore();
+            }
+        });
+        
+        plot.hooks.shutdown.push(function (plot, eventHolder) {
+            eventHolder.unbind("mousemove", onMouseMove);
+            eventHolder.unbind("mousedown", onMouseDown);
+            
+            if (mouseUpHandler)
+                $(document).unbind("mouseup", mouseUpHandler);
+        });
+
+    }
+
+    $.plot.plugins.push({
+        init: init,
+        options: {
+            selection: {
+                mode: null, // one of null, "x", "y" or "xy"
+                color: "#e8cfac",
+                shape: "round", // one of "round", "miter", or "bevel"
+                minSize: 5 // minimum number of pixels
+            }
+        },
+        name: 'selection',
+        version: '1.1'
+    });
+})(jQuery);
\ No newline at end of file
diff --git a/client/ts/vendor/jquery.flot.threshold.js b/client/ts/vendor/jquery.flot.threshold.js
new file mode 100644
index 0000000000000000000000000000000000000000..b620163a6acb4aa7ce2f5cd59dda7afe4ac1022d
--- /dev/null
+++ b/client/ts/vendor/jquery.flot.threshold.js
@@ -0,0 +1,143 @@
+/* Flot plugin for thresholding data.
+
+Copyright (c) 2007-2014 IOLA and Ole Laursen.
+Licensed under the MIT license.
+
+The plugin supports these options:
+
+	series: {
+		threshold: {
+			below: number
+			color: colorspec
+		}
+	}
+
+It can also be applied to a single series, like this:
+
+	$.plot( $("#placeholder"), [{
+		data: [ ... ],
+		threshold: { ... }
+	}])
+
+An array can be passed for multiple thresholding, like this:
+
+	threshold: [{
+		below: number1
+		color: color1
+	},{
+		below: number2
+		color: color2
+	}]
+
+These multiple threshold objects can be passed in any order since they are
+sorted by the processing function.
+
+The data points below "below" are drawn with the specified color. This makes
+it easy to mark points below 0, e.g. for budget data.
+
+Internally, the plugin works by splitting the data into two series, above and
+below the threshold. The extra series below the threshold will have its label
+cleared and the special "originSeries" attribute set to the original series.
+You may need to check for this in hover events.
+
+*/
+
+(function ($) {
+    var options = {
+        series: { threshold: null } // or { below: number, color: color spec}
+    };
+    
+    function init(plot) {
+        function thresholdData(plot, s, datapoints, below, color) {
+            var ps = datapoints.pointsize, i, x, y, p, prevp,
+                thresholded = $.extend({}, s); // note: shallow copy
+
+            thresholded.datapoints = { points: [], pointsize: ps, format: datapoints.format };
+            thresholded.label = null;
+            thresholded.color = color;
+            thresholded.threshold = null;
+            thresholded.originSeries = s;
+            thresholded.data = [];
+ 
+            var origpoints = datapoints.points,
+                addCrossingPoints = s.lines.show;
+
+            var threspoints = [];
+            var newpoints = [];
+            var m;
+
+            for (i = 0; i < origpoints.length; i += ps) {
+                x = origpoints[i];
+                y = origpoints[i + 1];
+
+                prevp = p;
+                if (y < below)
+                    p = threspoints;
+                else
+                    p = newpoints;
+
+                if (addCrossingPoints && prevp != p && x != null
+                    && i > 0 && origpoints[i - ps] != null) {
+                    var interx = x + (below - y) * (x - origpoints[i - ps]) / (y - origpoints[i - ps + 1]);
+                    prevp.push(interx);
+                    prevp.push(below);
+                    for (m = 2; m < ps; ++m)
+                        prevp.push(origpoints[i + m]);
+                    
+                    p.push(null); // start new segment
+                    p.push(null);
+                    for (m = 2; m < ps; ++m)
+                        p.push(origpoints[i + m]);
+                    p.push(interx);
+                    p.push(below);
+                    for (m = 2; m < ps; ++m)
+                        p.push(origpoints[i + m]);
+                }
+
+                p.push(x);
+                p.push(y);
+                for (m = 2; m < ps; ++m)
+                    p.push(origpoints[i + m]);
+            }
+
+            datapoints.points = newpoints;
+            thresholded.datapoints.points = threspoints;
+            
+            if (thresholded.datapoints.points.length > 0) {
+                var origIndex = $.inArray(s, plot.getData());
+                // Insert newly-generated series right after original one (to prevent it from becoming top-most)
+                plot.getData().splice(origIndex + 1, 0, thresholded);
+            }
+                
+            // FIXME: there are probably some edge cases left in bars
+        }
+        
+        function processThresholds(plot, s, datapoints) {
+            if (!s.threshold)
+                return;
+            
+            if (s.threshold instanceof Array) {
+                s.threshold.sort(function(a, b) {
+                    return a.below - b.below;
+                });
+                
+                $(s.threshold).each(function(i, th) {
+                    thresholdData(plot, s, datapoints, th.below, th.color);
+                });
+            }
+            else {
+                thresholdData(plot, s, datapoints, s.threshold.below, s.threshold.color);
+            }
+        }
+        
+        plot.hooks.processDatapoints.push(processThresholds);
+    }
+    
+    $.plot.plugins.push({
+        init: init,
+        options: options,
+        name: 'threshold',
+        version: '1.2'
+    });
+})(jQuery);
+
diff --git a/client/ts/vendor/jquery.flot.time.js b/client/ts/vendor/jquery.flot.time.js
new file mode 100644
index 0000000000000000000000000000000000000000..b06cca72f00ac153cb9055c943b8242e3144a7a3
--- /dev/null
+++ b/client/ts/vendor/jquery.flot.time.js
@@ -0,0 +1,432 @@
+/* Pretty handling of time axes.
+
+Copyright (c) 2007-2014 IOLA and Ole Laursen.
+Licensed under the MIT license.
+
+Set axis.mode to "time" to enable. See the section "Time series data" in
+API.txt for details.
+
+*/
+
+(function($) {
+
+	var options = {
+		xaxis: {
+			timezone: null,		// "browser" for local to the client or timezone for timezone-js
+			timeformat: null,	// format string to use
+			twelveHourClock: false,	// 12 or 24 time in time mode
+			monthNames: null	// list of names of months
+		}
+	};
+
+	// round to nearby lower multiple of base
+
+	function floorInBase(n, base) {
+		return base * Math.floor(n / base);
+	}
+
+	// Returns a string with the date d formatted according to fmt.
+	// A subset of the Open Group's strftime format is supported.
+
+	function formatDate(d, fmt, monthNames, dayNames) {
+
+		if (typeof d.strftime == "function") {
+			return d.strftime(fmt);
+		}
+
+		var leftPad = function(n, pad) {
+			n = "" + n;
+			pad = "" + (pad == null ? "0" : pad);
+			return n.length == 1 ? pad + n : n;
+		};
+
+		var r = [];
+		var escape = false;
+		var hours = d.getHours();
+		var isAM = hours < 12;
+
+		if (monthNames == null) {
+			monthNames = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
+		}
+
+		if (dayNames == null) {
+			dayNames = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
+		}
+
+		var hours12;
+
+		if (hours > 12) {
+			hours12 = hours - 12;
+		} else if (hours == 0) {
+			hours12 = 12;
+		} else {
+			hours12 = hours;
+		}
+
+		for (var i = 0; i < fmt.length; ++i) {
+
+			var c = fmt.charAt(i);
+
+			if (escape) {
+				switch (c) {
+					case 'a': c = "" + dayNames[d.getDay()]; break;
+					case 'b': c = "" + monthNames[d.getMonth()]; break;
+					case 'd': c = leftPad(d.getDate()); break;
+					case 'e': c = leftPad(d.getDate(), " "); break;
+					case 'h':	// For back-compat with 0.7; remove in 1.0
+					case 'H': c = leftPad(hours); break;
+					case 'I': c = leftPad(hours12); break;
+					case 'l': c = leftPad(hours12, " "); break;
+					case 'm': c = leftPad(d.getMonth() + 1); break;
+					case 'M': c = leftPad(d.getMinutes()); break;
+					// quarters not in Open Group's strftime specification
+					case 'q':
+						c = "" + (Math.floor(d.getMonth() / 3) + 1); break;
+					case 'S': c = leftPad(d.getSeconds()); break;
+					case 'y': c = leftPad(d.getFullYear() % 100); break;
+					case 'Y': c = "" + d.getFullYear(); break;
+					case 'p': c = (isAM) ? ("" + "am") : ("" + "pm"); break;
+					case 'P': c = (isAM) ? ("" + "AM") : ("" + "PM"); break;
+					case 'w': c = "" + d.getDay(); break;
+				}
+				r.push(c);
+				escape = false;
+			} else {
+				if (c == "%") {
+					escape = true;
+				} else {
+					r.push(c);
+				}
+			}
+		}
+
+		return r.join("");
+	}
+
+	// To have a consistent view of time-based data independent of which time
+	// zone the client happens to be in we need a date-like object independent
+	// of time zones.  This is done through a wrapper that only calls the UTC
+	// versions of the accessor methods.
+
+	function makeUtcWrapper(d) {
+
+		function addProxyMethod(sourceObj, sourceMethod, targetObj, targetMethod) {
+			sourceObj[sourceMethod] = function() {
+				return targetObj[targetMethod].apply(targetObj, arguments);
+			};
+		};
+
+		var utc = {
+			date: d
+		};
+
+		// support strftime, if found
+
+		if (d.strftime != undefined) {
+			addProxyMethod(utc, "strftime", d, "strftime");
+		}
+
+		addProxyMethod(utc, "getTime", d, "getTime");
+		addProxyMethod(utc, "setTime", d, "setTime");
+
+		var props = ["Date", "Day", "FullYear", "Hours", "Milliseconds", "Minutes", "Month", "Seconds"];
+
+		for (var p = 0; p < props.length; p++) {
+			addProxyMethod(utc, "get" + props[p], d, "getUTC" + props[p]);
+			addProxyMethod(utc, "set" + props[p], d, "setUTC" + props[p]);
+		}
+
+		return utc;
+	};
+
+	// select time zone strategy.  This returns a date-like object tied to the
+	// desired timezone
+
+	function dateGenerator(ts, opts) {
+		if (opts.timezone == "browser") {
+			return new Date(ts);
+		} else if (!opts.timezone || opts.timezone == "utc") {
+			return makeUtcWrapper(new Date(ts));
+		} else if (typeof timezoneJS != "undefined" && typeof timezoneJS.Date != "undefined") {
+			var d = new timezoneJS.Date();
+			// timezone-js is fickle, so be sure to set the time zone before
+			// setting the time.
+			d.setTimezone(opts.timezone);
+			d.setTime(ts);
+			return d;
+		} else {
+			return makeUtcWrapper(new Date(ts));
+		}
+	}
+	
+	// map of app. size of time units in milliseconds
+
+	var timeUnitSize = {
+		"second": 1000,
+		"minute": 60 * 1000,
+		"hour": 60 * 60 * 1000,
+		"day": 24 * 60 * 60 * 1000,
+		"month": 30 * 24 * 60 * 60 * 1000,
+		"quarter": 3 * 30 * 24 * 60 * 60 * 1000,
+		"year": 365.2425 * 24 * 60 * 60 * 1000
+	};
+
+	// the allowed tick sizes, after 1 year we use
+	// an integer algorithm
+
+	var baseSpec = [
+		[1, "second"], [2, "second"], [5, "second"], [10, "second"],
+		[30, "second"], 
+		[1, "minute"], [2, "minute"], [5, "minute"], [10, "minute"],
+		[30, "minute"], 
+		[1, "hour"], [2, "hour"], [4, "hour"],
+		[8, "hour"], [12, "hour"],
+		[1, "day"], [2, "day"], [3, "day"],
+		[0.25, "month"], [0.5, "month"], [1, "month"],
+		[2, "month"]
+	];
+
+	// we don't know which variant(s) we'll need yet, but generating both is
+	// cheap
+
+	var specMonths = baseSpec.concat([[3, "month"], [6, "month"],
+		[1, "year"]]);
+	var specQuarters = baseSpec.concat([[1, "quarter"], [2, "quarter"],
+		[1, "year"]]);
+
+	function init(plot) {
+		plot.hooks.processOptions.push(function (plot, options) {
+			$.each(plot.getAxes(), function(axisName, axis) {
+
+				var opts = axis.options;
+
+				if (opts.mode == "time") {
+					axis.tickGenerator = function(axis) {
+
+						var ticks = [];
+						var d = dateGenerator(axis.min, opts);
+						var minSize = 0;
+
+						// make quarter use a possibility if quarters are
+						// mentioned in either of these options
+
+						var spec = (opts.tickSize && opts.tickSize[1] ===
+							"quarter") ||
+							(opts.minTickSize && opts.minTickSize[1] ===
+							"quarter") ? specQuarters : specMonths;
+
+						if (opts.minTickSize != null) {
+							if (typeof opts.tickSize == "number") {
+								minSize = opts.tickSize;
+							} else {
+								minSize = opts.minTickSize[0] * timeUnitSize[opts.minTickSize[1]];
+							}
+						}
+
+						for (var i = 0; i < spec.length - 1; ++i) {
+							if (axis.delta < (spec[i][0] * timeUnitSize[spec[i][1]]
+											  + spec[i + 1][0] * timeUnitSize[spec[i + 1][1]]) / 2
+								&& spec[i][0] * timeUnitSize[spec[i][1]] >= minSize) {
+								break;
+							}
+						}
+
+						var size = spec[i][0];
+						var unit = spec[i][1];
+
+						// special-case the possibility of several years
+
+						if (unit == "year") {
+
+							// if given a minTickSize in years, just use it,
+							// ensuring that it's an integer
+
+							if (opts.minTickSize != null && opts.minTickSize[1] == "year") {
+								size = Math.floor(opts.minTickSize[0]);
+							} else {
+
+								var magn = Math.pow(10, Math.floor(Math.log(axis.delta / timeUnitSize.year) / Math.LN10));
+								var norm = (axis.delta / timeUnitSize.year) / magn;
+
+								if (norm < 1.5) {
+									size = 1;
+								} else if (norm < 3) {
+									size = 2;
+								} else if (norm < 7.5) {
+									size = 5;
+								} else {
+									size = 10;
+								}
+
+								size *= magn;
+							}
+
+							// minimum size for years is 1
+
+							if (size < 1) {
+								size = 1;
+							}
+						}
+
+						axis.tickSize = opts.tickSize || [size, unit];
+						var tickSize = axis.tickSize[0];
+						unit = axis.tickSize[1];
+
+						var step = tickSize * timeUnitSize[unit];
+
+						if (unit == "second") {
+							d.setSeconds(floorInBase(d.getSeconds(), tickSize));
+						} else if (unit == "minute") {
+							d.setMinutes(floorInBase(d.getMinutes(), tickSize));
+						} else if (unit == "hour") {
+							d.setHours(floorInBase(d.getHours(), tickSize));
+						} else if (unit == "month") {
+							d.setMonth(floorInBase(d.getMonth(), tickSize));
+						} else if (unit == "quarter") {
+							d.setMonth(3 * floorInBase(d.getMonth() / 3,
+								tickSize));
+						} else if (unit == "year") {
+							d.setFullYear(floorInBase(d.getFullYear(), tickSize));
+						}
+
+						// reset smaller components
+
+						d.setMilliseconds(0);
+
+						if (step >= timeUnitSize.minute) {
+							d.setSeconds(0);
+						}
+						if (step >= timeUnitSize.hour) {
+							d.setMinutes(0);
+						}
+						if (step >= timeUnitSize.day) {
+							d.setHours(0);
+						}
+						if (step >= timeUnitSize.day * 4) {
+							d.setDate(1);
+						}
+						if (step >= timeUnitSize.month * 2) {
+							d.setMonth(floorInBase(d.getMonth(), 3));
+						}
+						if (step >= timeUnitSize.quarter * 2) {
+							d.setMonth(floorInBase(d.getMonth(), 6));
+						}
+						if (step >= timeUnitSize.year) {
+							d.setMonth(0);
+						}
+
+						var carry = 0;
+						var v = Number.NaN;
+						var prev;
+
+						do {
+
+							prev = v;
+							v = d.getTime();
+							ticks.push(v);
+
+							if (unit == "month" || unit == "quarter") {
+								if (tickSize < 1) {
+
+									// a bit complicated - we'll divide the
+									// month/quarter up but we need to take
+									// care of fractions so we don't end up in
+									// the middle of a day
+
+									d.setDate(1);
+									var start = d.getTime();
+									d.setMonth(d.getMonth() +
+										(unit == "quarter" ? 3 : 1));
+									var end = d.getTime();
+									d.setTime(v + carry * timeUnitSize.hour + (end - start) * tickSize);
+									carry = d.getHours();
+									d.setHours(0);
+								} else {
+									d.setMonth(d.getMonth() +
+										tickSize * (unit == "quarter" ? 3 : 1));
+								}
+							} else if (unit == "year") {
+								d.setFullYear(d.getFullYear() + tickSize);
+							} else {
+								d.setTime(v + step);
+							}
+						} while (v < axis.max && v != prev);
+
+						return ticks;
+					};
+
+					axis.tickFormatter = function (v, axis) {
+
+						var d = dateGenerator(v, axis.options);
+
+						// first check global format
+
+						if (opts.timeformat != null) {
+							return formatDate(d, opts.timeformat, opts.monthNames, opts.dayNames);
+						}
+
+						// possibly use quarters if quarters are mentioned in
+						// any of these places
+
+						var useQuarters = (axis.options.tickSize &&
+								axis.options.tickSize[1] == "quarter") ||
+							(axis.options.minTickSize &&
+								axis.options.minTickSize[1] == "quarter");
+
+						var t = axis.tickSize[0] * timeUnitSize[axis.tickSize[1]];
+						var span = axis.max - axis.min;
+						var suffix = (opts.twelveHourClock) ? " %p" : "";
+						var hourCode = (opts.twelveHourClock) ? "%I" : "%H";
+						var fmt;
+
+						if (t < timeUnitSize.minute) {
+							fmt = hourCode + ":%M:%S" + suffix;
+						} else if (t < timeUnitSize.day) {
+							if (span < 2 * timeUnitSize.day) {
+								fmt = hourCode + ":%M" + suffix;
+							} else {
+								fmt = "%b %d " + hourCode + ":%M" + suffix;
+							}
+						} else if (t < timeUnitSize.month) {
+							fmt = "%b %d";
+						} else if ((useQuarters && t < timeUnitSize.quarter) ||
+							(!useQuarters && t < timeUnitSize.year)) {
+							if (span < timeUnitSize.year) {
+								fmt = "%b";
+							} else {
+								fmt = "%b %Y";
+							}
+						} else if (useQuarters && t < timeUnitSize.year) {
+							if (span < timeUnitSize.year) {
+								fmt = "Q%q";
+							} else {
+								fmt = "Q%q %Y";
+							}
+						} else {
+							fmt = "%Y";
+						}
+
+						var rt = formatDate(d, fmt, opts.monthNames, opts.dayNames);
+
+						return rt;
+					};
+				}
+			});
+		});
+	}
+
+	$.plot.plugins.push({
+		init: init,
+		options: options,
+		name: 'time',
+		version: '1.0'
+	});
+
+	// Time-axis support used to be in Flot core, which exposed the
+	// formatDate function on the plot object.  Various plugins depend
+	// on the function, so we need to re-expose it here.
+
+	$.plot.formatDate = formatDate;
+	$.plot.dateGenerator = dateGenerator;
+
+})(jQuery);
\ No newline at end of file
diff --git a/client/ts/vendor/jquery.flot.tooltip.js b/client/ts/vendor/jquery.flot.tooltip.js
new file mode 100755
index 0000000000000000000000000000000000000000..ff606c61985ec17956aa4f3707c314e67053eeed
--- /dev/null
+++ b/client/ts/vendor/jquery.flot.tooltip.js
@@ -0,0 +1,606 @@
+/*
+ * jquery.flot.tooltip
+ * 
+ * description: easy-to-use tooltips for Flot charts
+ * version: 0.9.0
+ * authors: Krzysztof Urbas @krzysu [myviews.pl],Evan Steinkerchner @Roundaround
+ * website: https://github.com/krzysu/flot.tooltip
+ * 
+ * build on 2016-07-26
+ * released under MIT License, 2012
+*/ 
+(function ($) {
+    // plugin options, default values
+    var defaultOptions = {
+        tooltip: {
+            show: false,
+            cssClass: "flotTip",
+            content: "%s | X: %x | Y: %y",
+            // allowed templates are:
+            // %s -> series label,
+            // %c -> series color,
+            // %lx -> x axis label (requires flot-axislabels plugin https://github.com/markrcote/flot-axislabels),
+            // %ly -> y axis label (requires flot-axislabels plugin https://github.com/markrcote/flot-axislabels),
+            // %x -> X value,
+            // %y -> Y value,
+            // %x.2 -> precision of X value,
+            // %p -> percent
+            // %n -> value (not percent) of pie chart
+            xDateFormat: null,
+            yDateFormat: null,
+            monthNames: null,
+            dayNames: null,
+            shifts: {
+                x: 10,
+                y: 20
+            },
+            defaultTheme: true,
+            snap: true,
+            lines: false,
+            clickTips: false,
+
+            // callbacks
+            onHover: function (flotItem, $tooltipEl) {},
+
+            $compat: false
+        }
+    };
+
+    // dummy default options object for legacy code (<0.8.5) - is deleted later
+    defaultOptions.tooltipOpts = defaultOptions.tooltip;
+
+    // object
+    var FlotTooltip = function (plot) {
+        // variables
+        this.tipPosition = {x: 0, y: 0};
+
+        this.init(plot);
+    };
+
+    // main plugin function
+    FlotTooltip.prototype.init = function (plot) {
+        var that = this;
+
+        // detect other flot plugins
+        var plotPluginsLength = $.plot.plugins.length;
+        this.plotPlugins = [];
+
+        if (plotPluginsLength) {
+            for (var p = 0; p < plotPluginsLength; p++) {
+                this.plotPlugins.push($.plot.plugins[p].name);
+            }
+        }
+
+        plot.hooks.bindEvents.push(function (plot, eventHolder) {
+
+            // get plot options
+            that.plotOptions = plot.getOptions();
+
+            // for legacy (<0.8.5) implementations
+            if (typeof(that.plotOptions.tooltip) === 'boolean') {
+                that.plotOptions.tooltipOpts.show = that.plotOptions.tooltip;
+                that.plotOptions.tooltip = that.plotOptions.tooltipOpts;
+                delete that.plotOptions.tooltipOpts;
+            }
+
+            // if not enabled return
+            if (that.plotOptions.tooltip.show === false || typeof that.plotOptions.tooltip.show === 'undefined') return;
+
+            // shortcut to access tooltip options
+            that.tooltipOptions = that.plotOptions.tooltip;
+
+            if (that.tooltipOptions.$compat) {
+                that.wfunc = 'width';
+                that.hfunc = 'height';
+            } else {
+                that.wfunc = 'innerWidth';
+                that.hfunc = 'innerHeight';
+            }
+
+            // create tooltip DOM element
+            var $tip = that.getDomElement();
+
+            // bind event
+            $( plot.getPlaceholder() ).bind("plothover", plothover);
+            if (that.tooltipOptions.clickTips) {
+                $( plot.getPlaceholder() ).bind("plotclick", plotclick);
+            }
+            that.clickmode = false;
+
+            $(eventHolder).bind('mousemove', mouseMove);
+        });
+
+        plot.hooks.shutdown.push(function (plot, eventHolder){
+            $(plot.getPlaceholder()).unbind("plothover", plothover);
+            $(plot.getPlaceholder()).unbind("plotclick", plotclick);
+            plot.removeTooltip();
+            $(eventHolder).unbind("mousemove", mouseMove);
+        });
+
+        function mouseMove(e){
+            var pos = {};
+            pos.x = e.pageX;
+            pos.y = e.pageY;
+            plot.setTooltipPosition(pos);
+        }
+
+        /**
+         *  open the tooltip (if not already open) and freeze it on the current position till the next click
+         */
+        function plotclick(event, pos, item) {
+            if (! that.clickmode) {
+                // it is the click activating the clicktip
+                plothover(event, pos, item);
+                if (that.getDomElement().is(":visible")) {
+                    $(plot.getPlaceholder()).unbind("plothover", plothover);
+                    that.clickmode = true;
+                }
+            } else {
+                // it is the click deactivating the clicktip
+                $( plot.getPlaceholder() ).bind("plothover", plothover);
+                plot.hideTooltip();
+                that.clickmode = false;
+            }
+        }
+
+        function plothover(event, pos, item) {
+            // Simple distance formula.
+            var lineDistance = function (p1x, p1y, p2x, p2y) {
+                return Math.sqrt((p2x - p1x) * (p2x - p1x) + (p2y - p1y) * (p2y - p1y));
+            };
+
+            // Here is some voodoo magic for determining the distance to a line form a given point {x, y}.
+            var dotLineLength = function (x, y, x0, y0, x1, y1, o) {
+                if (o && !(o =
+                    function (x, y, x0, y0, x1, y1) {
+                        if (typeof x0 !== 'undefined') return { x: x0, y: y };
+                        else if (typeof y0 !== 'undefined') return { x: x, y: y0 };
+
+                        var left,
+                            tg = -1 / ((y1 - y0) / (x1 - x0));
+
+                        return {
+                            x: left = (x1 * (x * tg - y + y0) + x0 * (x * -tg + y - y1)) / (tg * (x1 - x0) + y0 - y1),
+                            y: tg * left - tg * x + y
+                        };
+                    } (x, y, x0, y0, x1, y1),
+                    o.x >= Math.min(x0, x1) && o.x <= Math.max(x0, x1) && o.y >= Math.min(y0, y1) && o.y <= Math.max(y0, y1))
+                ) {
+                    var l1 = lineDistance(x, y, x0, y0), l2 = lineDistance(x, y, x1, y1);
+                    return l1 > l2 ? l2 : l1;
+                } else {
+                    var a = y0 - y1, b = x1 - x0, c = x0 * y1 - y0 * x1;
+                    return Math.abs(a * x + b * y + c) / Math.sqrt(a * a + b * b);
+                }
+            };
+
+            if (item) {
+                plot.showTooltip(item, that.tooltipOptions.snap ? item : pos);
+            } else if (that.plotOptions.series.lines.show && that.tooltipOptions.lines === true) {
+                var maxDistance = that.plotOptions.grid.mouseActiveRadius;
+
+                var closestTrace = {
+                    distance: maxDistance + 1
+                };
+
+                var ttPos = pos;
+
+                $.each(plot.getData(), function (i, series) {
+                    var xBeforeIndex = 0,
+                        xAfterIndex = -1;
+
+                    // Our search here assumes our data is sorted via the x-axis.
+                    // TODO: Improve efficiency somehow - search smaller sets of data.
+                    for (var j = 1; j < series.data.length; j++) {
+                        if (series.data[j - 1][0] <= pos.x && series.data[j][0] >= pos.x) {
+                            xBeforeIndex = j - 1;
+                            xAfterIndex = j;
+                        }
+                    }
+
+                    if (xAfterIndex === -1) {
+                        plot.hideTooltip();
+                        return;
+                    }
+
+                    var pointPrev = { x: series.data[xBeforeIndex][0], y: series.data[xBeforeIndex][1] },
+                        pointNext = { x: series.data[xAfterIndex][0], y: series.data[xAfterIndex][1] };
+
+                    var distToLine = dotLineLength(series.xaxis.p2c(pos.x), series.yaxis.p2c(pos.y), series.xaxis.p2c(pointPrev.x),
+                        series.yaxis.p2c(pointPrev.y), series.xaxis.p2c(pointNext.x), series.yaxis.p2c(pointNext.y), false);
+
+                    if (distToLine < closestTrace.distance) {
+
+                        var closestIndex = lineDistance(pointPrev.x, pointPrev.y, pos.x, pos.y) <
+                            lineDistance(pos.x, pos.y, pointNext.x, pointNext.y) ? xBeforeIndex : xAfterIndex;
+
+                        var pointSize = series.datapoints.pointsize;
+
+                        // Calculate the point on the line vertically closest to our cursor.
+                        var pointOnLine = [
+                            pos.x,
+                            pointPrev.y + ((pointNext.y - pointPrev.y) * ((pos.x - pointPrev.x) / (pointNext.x - pointPrev.x)))
+                        ];
+
+                        var item = {
+                            datapoint: pointOnLine,
+                            dataIndex: closestIndex,
+                            series: series,
+                            seriesIndex: i
+                        };
+
+                        closestTrace = {
+                            distance: distToLine,
+                            item: item
+                        };
+
+                        if (that.tooltipOptions.snap) {
+                            ttPos = {
+                                pageX: series.xaxis.p2c(pointOnLine[0]),
+                                pageY: series.yaxis.p2c(pointOnLine[1])
+                            };
+                        }
+                    }
+                });
+
+                if (closestTrace.distance < maxDistance + 1)
+                    plot.showTooltip(closestTrace.item, ttPos);
+                else
+                    plot.hideTooltip();
+            } else {
+                plot.hideTooltip();
+            }
+        }
+
+        // Quick little function for setting the tooltip position.
+        plot.setTooltipPosition = function (pos) {
+            var $tip = that.getDomElement();
+
+            var totalTipWidth = $tip.outerWidth() + that.tooltipOptions.shifts.x;
+            var totalTipHeight = $tip.outerHeight() + that.tooltipOptions.shifts.y;
+            if ((pos.x - $(window).scrollLeft()) > ($(window)[that.wfunc]() - totalTipWidth)) {
+                pos.x -= totalTipWidth;
+                pos.x = Math.max(pos.x, 0);
+            }
+            if ((pos.y - $(window).scrollTop()) > ($(window)[that.hfunc]() - totalTipHeight)) {
+                pos.y -= totalTipHeight;
+            }
+
+	    /*
+	       The section applies the new positioning ONLY if pos.x and pos.y
+	       are numbers. If they are undefined or not a number, use the last
+	       known numerical position. This hack fixes a bug that kept pie
+	       charts from keeping their tooltip positioning.
+	     */
+
+            if (isNaN(pos.x)) {
+		that.tipPosition.x = that.tipPosition.xPrev;
+	    }
+	    else {
+		that.tipPosition.x = pos.x;
+		that.tipPosition.xPrev = pos.x;
+	    }
+	    if (isNaN(pos.y)) {
+		that.tipPosition.y = that.tipPosition.yPrev;
+	    }
+	    else {
+		that.tipPosition.y = pos.y;
+		that.tipPosition.yPrev = pos.y;
+	    }
+
+        };
+
+        // Quick little function for showing the tooltip.
+        plot.showTooltip = function (target, position, targetPosition) {
+            var $tip = that.getDomElement();
+
+            // convert tooltip content template to real tipText
+            var tipText = that.stringFormat(that.tooltipOptions.content, target);
+            if (tipText === '')
+                return;
+
+            $tip.html(tipText);
+            plot.setTooltipPosition({ x: that.tipPosition.x, y: that.tipPosition.y });
+            $tip.css({
+                left: that.tipPosition.x + that.tooltipOptions.shifts.x,
+                top: that.tipPosition.y + that.tooltipOptions.shifts.y
+            }).show();
+
+            // run callback
+            if (typeof that.tooltipOptions.onHover === 'function') {
+                that.tooltipOptions.onHover(target, $tip);
+            }
+        };
+
+        // Quick little function for hiding the tooltip.
+        plot.hideTooltip = function () {
+            that.getDomElement().hide().html('');
+        };
+
+        plot.removeTooltip = function() {
+            that.getDomElement().remove();
+        };
+    };
+
+    /**
+     * get or create tooltip DOM element
+     * @return jQuery object
+     */
+    FlotTooltip.prototype.getDomElement = function () {
+        var $tip = $('<div>');
+        if (this.tooltipOptions && this.tooltipOptions.cssClass) {
+            $tip = $('.' + this.tooltipOptions.cssClass);
+
+            if( $tip.length === 0 ){
+                $tip = $('<div />').addClass(this.tooltipOptions.cssClass);
+                $tip.appendTo('body').hide().css({position: 'absolute'});
+
+                if(this.tooltipOptions.defaultTheme) {
+                    $tip.css({
+                        'background': '#fff',
+                        'z-index': '1040',
+                        'padding': '0.4em 0.6em',
+                        'border-radius': '0.5em',
+                        'font-size': '0.8em',
+                        'border': '1px solid #111',
+                        'display': 'none',
+                        'white-space': 'nowrap'
+                    });
+                }
+            }
+        }
+
+        return $tip;
+    };
+
+    /**
+     * core function, create tooltip content
+     * @param  {string} content - template with tooltip content
+     * @param  {object} item - Flot item
+     * @return {string} real tooltip content for current item
+     */
+    FlotTooltip.prototype.stringFormat = function (content, item) {
+        var percentPattern = /%p\.{0,1}(\d{0,})/;
+        var seriesPattern = /%s/;
+        var colorPattern = /%c/;
+        var xLabelPattern = /%lx/; // requires flot-axislabels plugin https://github.com/markrcote/flot-axislabels, will be ignored if plugin isn't loaded
+        var yLabelPattern = /%ly/; // requires flot-axislabels plugin https://github.com/markrcote/flot-axislabels, will be ignored if plugin isn't loaded
+        var xPattern = /%x\.{0,1}(\d{0,})/;
+        var yPattern = /%y\.{0,1}(\d{0,})/;
+        var xPatternWithoutPrecision = "%x";
+        var yPatternWithoutPrecision = "%y";
+        var customTextPattern = "%ct";
+	var nPiePattern = "%n";
+
+        var x, y, customText, p, n;
+
+        // for threshold plugin we need to read data from different place
+        if (typeof item.series.threshold !== "undefined") {
+            x = item.datapoint[0];
+            y = item.datapoint[1];
+            customText = item.datapoint[2];
+	}
+
+	// for CurvedLines plugin we need to read data from different place
+	    else if (typeof item.series.curvedLines !== "undefined") {
+		x = item.datapoint[0];
+		y = item.datapoint[1];
+	    }
+
+        else if (typeof item.series.lines !== "undefined" && item.series.lines.steps) {
+            x = item.series.datapoints.points[item.dataIndex * 2];
+            y = item.series.datapoints.points[item.dataIndex * 2 + 1];
+            // TODO: where to find custom text in this variant?
+            customText = "";
+        } else {
+            x = item.series.data[item.dataIndex][0];
+            y = item.series.data[item.dataIndex][1];
+            customText = item.series.data[item.dataIndex][2];
+        }
+
+        // I think this is only in case of threshold plugin
+        if (item.series.label === null && item.series.originSeries) {
+            item.series.label = item.series.originSeries.label;
+        }
+
+        // if it is a function callback get the content string
+        if (typeof(content) === 'function') {
+            content = content(item.series.label, x, y, item);
+        }
+
+        // the case where the passed content is equal to false
+        if (typeof(content) === 'boolean' && !content) {
+            return '';
+        }
+
+        /* replacement of %ct and other multi-character templates must
+           precede the replacement of single-character templates
+           to avoid conflict between '%c' and '%ct'  and similar substrings
+        */
+        if (customText) {
+            content = content.replace(customTextPattern, customText);
+        }
+
+        // percent match for pie charts and stacked percent
+        if (typeof (item.series.percent) !== 'undefined') {
+            p = item.series.percent;
+        } else if (typeof (item.series.percents) !== 'undefined') {
+            p = item.series.percents[item.dataIndex];
+        }
+        if (typeof p === 'number') {
+            content = this.adjustValPrecision(percentPattern, content, p);
+        }
+
+        // replace %n with number of items represented by slice in pie charts
+        if (item.series.hasOwnProperty('pie')) {
+            if (typeof item.series.data[0][1] !== 'undefined') {
+                n = item.series.data[0][1];
+            }
+        }
+        if (typeof n === 'number') {
+            content = content.replace(nPiePattern, n);
+        }
+
+        // series match
+        if (typeof(item.series.label) !== 'undefined') {
+            content = content.replace(seriesPattern, item.series.label);
+        } else {
+            //remove %s if label is undefined
+            content = content.replace(seriesPattern, "");
+        }
+
+        // color match
+        if (typeof(item.series.color) !== 'undefined') {
+            content = content.replace(colorPattern, item.series.color);
+        } else {
+            //remove %s if color is undefined
+            content = content.replace(colorPattern, "");
+        }
+
+        // x axis label match
+        if (this.hasAxisLabel('xaxis', item)) {
+            content = content.replace(xLabelPattern, item.series.xaxis.options.axisLabel);
+        } else {
+            //remove %lx if axis label is undefined or axislabels plugin not present
+            content = content.replace(xLabelPattern, "");
+        }
+
+        // y axis label match
+        if (this.hasAxisLabel('yaxis', item)) {
+            content = content.replace(yLabelPattern, item.series.yaxis.options.axisLabel);
+        } else {
+            //remove %ly if axis label is undefined or axislabels plugin not present
+            content = content.replace(yLabelPattern, "");
+        }
+
+        // time mode axes with custom dateFormat
+        if (this.isTimeMode('xaxis', item) && this.isXDateFormat(item)) {
+            content = content.replace(xPattern, this.timestampToDate(x, this.tooltipOptions.xDateFormat, item.series.xaxis.options));
+        }
+        if (this.isTimeMode('yaxis', item) && this.isYDateFormat(item)) {
+            content = content.replace(yPattern, this.timestampToDate(y, this.tooltipOptions.yDateFormat, item.series.yaxis.options));
+        }
+
+        // set precision if defined
+        if (typeof x === 'number') {
+            content = this.adjustValPrecision(xPattern, content, x);
+        }
+        if (typeof y === 'number') {
+            content = this.adjustValPrecision(yPattern, content, y);
+        }
+
+        // change x from number to given label, if given
+        if (typeof item.series.xaxis.ticks !== 'undefined') {
+
+            var ticks;
+            if (this.hasRotatedXAxisTicks(item)) {
+                // xaxis.ticks will be an empty array if tickRotor is being used, but the values are available in rotatedTicks
+                ticks = 'rotatedTicks';
+            } else {
+                ticks = 'ticks';
+            }
+
+            // see https://github.com/krzysu/flot.tooltip/issues/65
+            var tickIndex = item.dataIndex + item.seriesIndex;
+
+            for (var xIndex in item.series.xaxis[ticks]) {
+                if (item.series.xaxis[ticks].hasOwnProperty(tickIndex) && !this.isTimeMode('xaxis', item)) {
+                    var valueX = (this.isCategoriesMode('xaxis', item)) ? item.series.xaxis[ticks][tickIndex].label : item.series.xaxis[ticks][tickIndex].v;
+                    if (valueX === x) {
+                        content = content.replace(xPattern, item.series.xaxis[ticks][tickIndex].label.replace(/\$/g, '$$$$'));
+                    }
+                }
+            }
+        }
+
+        // change y from number to given label, if given
+        if (typeof item.series.yaxis.ticks !== 'undefined') {
+            for (var yIndex in item.series.yaxis.ticks) {
+                if (item.series.yaxis.ticks.hasOwnProperty(yIndex)) {
+                    var valueY = (this.isCategoriesMode('yaxis', item)) ? item.series.yaxis.ticks[yIndex].label : item.series.yaxis.ticks[yIndex].v;
+                    if (valueY === y) {
+                        content = content.replace(yPattern, item.series.yaxis.ticks[yIndex].label.replace(/\$/g, '$$$$'));
+                    }
+                }
+            }
+        }
+
+        // if no value customization, use tickFormatter by default
+        if (typeof item.series.xaxis.tickFormatter !== 'undefined') {
+            //escape dollar
+            content = content.replace(xPatternWithoutPrecision, item.series.xaxis.tickFormatter(x, item.series.xaxis).replace(/\$/g, '$$'));
+        }
+        if (typeof item.series.yaxis.tickFormatter !== 'undefined') {
+            //escape dollar
+            content = content.replace(yPatternWithoutPrecision, item.series.yaxis.tickFormatter(y, item.series.yaxis).replace(/\$/g, '$$'));
+        }
+
+        return content;
+    };
+
+    // helpers just for readability
+    FlotTooltip.prototype.isTimeMode = function (axisName, item) {
+        return (typeof item.series[axisName].options.mode !== 'undefined' && item.series[axisName].options.mode === 'time');
+    };
+
+    FlotTooltip.prototype.isXDateFormat = function (item) {
+        return (typeof this.tooltipOptions.xDateFormat !== 'undefined' && this.tooltipOptions.xDateFormat !== null);
+    };
+
+    FlotTooltip.prototype.isYDateFormat = function (item) {
+        return (typeof this.tooltipOptions.yDateFormat !== 'undefined' && this.tooltipOptions.yDateFormat !== null);
+    };
+
+    FlotTooltip.prototype.isCategoriesMode = function (axisName, item) {
+        return (typeof item.series[axisName].options.mode !== 'undefined' && item.series[axisName].options.mode === 'categories');
+    };
+
+    //
+    FlotTooltip.prototype.timestampToDate = function (tmst, dateFormat, options) {
+        var theDate = $.plot.dateGenerator(tmst, options);
+        return $.plot.formatDate(theDate, dateFormat, this.tooltipOptions.monthNames, this.tooltipOptions.dayNames);
+    };
+
+    //
+    FlotTooltip.prototype.adjustValPrecision = function (pattern, content, value) {
+
+        var precision;
+        var matchResult = content.match(pattern);
+        if( matchResult !== null ) {
+            if(RegExp.$1 !== '') {
+                precision = RegExp.$1;
+                value = value.toFixed(precision);
+
+                // only replace content if precision exists, in other case use thickformater
+                content = content.replace(pattern, value);
+            }
+        }
+        return content;
+    };
+
+    // other plugins detection below
+
+    // check if flot-axislabels plugin (https://github.com/markrcote/flot-axislabels) is used and that an axis label is given
+    FlotTooltip.prototype.hasAxisLabel = function (axisName, item) {
+        return ($.inArray('axisLabels', this.plotPlugins) !== -1 && typeof item.series[axisName].options.axisLabel !== 'undefined' && item.series[axisName].options.axisLabel.length > 0);
+    };
+
+    // check whether flot-tickRotor, a plugin which allows rotation of X-axis ticks, is being used
+    FlotTooltip.prototype.hasRotatedXAxisTicks = function (item) {
+        return ($.inArray('tickRotor',this.plotPlugins) !== -1 && typeof item.series.xaxis.rotatedTicks !== 'undefined');
+    };
+
+    //
+    var init = function (plot) {
+      new FlotTooltip(plot);
+    };
+
+    // define Flot plugin
+    $.plot.plugins.push({
+        init: init,
+        options: defaultOptions,
+        name: 'tooltip',
+        version: '0.8.5'
+    });
+
+})(jQuery);
diff --git a/client/tsconfig.json b/client/tsconfig.json
new file mode 100644
index 0000000000000000000000000000000000000000..162e8f1d14a65cc48f7d915980f2cf46cc94a21c
--- /dev/null
+++ b/client/tsconfig.json
@@ -0,0 +1,13 @@
+{
+	"compilerOptions": {
+		"module": "commonjs",
+		"sourceMap": true,
+		"pretty": true,
+		"target": "ES6",
+		"allowJs": true
+	},
+	"include": [
+		"ts/**/*.ts",
+		"typings/index.d.ts"
+	]
+}
diff --git a/client/typings/globals/bootstrap-notify/index.d.ts b/client/typings/globals/bootstrap-notify/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..c00f33ba6960e465fb5f5c7e3aca086bde549751
--- /dev/null
+++ b/client/typings/globals/bootstrap-notify/index.d.ts
@@ -0,0 +1,58 @@
+// Generated by typings
+// Source: https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/253e456e3c0bf4bd34afaceb7dcbae282da14066/bootstrap-notify/index.d.ts
+interface JQueryStatic {
+	/* tslint:enable: interface-name */
+    notify(message: string): NotifyReturn;
+	notify(opts: NotifyOptions, settings?: NotifySettings): NotifyReturn;
+	notifyDefaults(settings: NotifySettings): void;
+	notifyClose(): void;
+	notifyClose(command: string): void;
+}
+
+interface NotifyOptions {
+	message: string;
+	title?: string;
+	icon?: string;
+	url?: string;
+	target?: string;
+}
+
+interface NotifySettings {
+	element?: string;
+	position?: string;
+	type?: string;
+	allow_dismiss?: boolean;
+	allow_duplicates?: boolean;
+	newest_on_top?: boolean;
+	showProgressbar?: boolean;
+	placement?: {
+		from?: string;
+		align?: string;
+	};
+	offset?: number | {
+		x?: number;
+		y?: number;
+	};
+	spacing?: number;
+	z_index?: number;
+	delay?: number;
+	timer?: number;
+	url_target?: string;
+	mouse_over?: string;
+	animate?: {
+		enter?: string;
+		exit?: string;
+	};
+	onShow?: () => void;
+	onShown?: () => void;
+	onClose?: () => void;
+	onClosed?: () => void;
+	icon_type?: string;
+	template?: string;
+}
+
+interface NotifyReturn {
+	$ele: JQueryStatic;
+	close: () => void;
+	update: (command: string, update: any) => void;
+}
diff --git a/client/typings/globals/bootstrap-notify/typings.json b/client/typings/globals/bootstrap-notify/typings.json
new file mode 100644
index 0000000000000000000000000000000000000000..458bed46e7835a1c89d0bff67b960db18362441a
--- /dev/null
+++ b/client/typings/globals/bootstrap-notify/typings.json
@@ -0,0 +1,8 @@
+{
+  "resolution": "main",
+  "tree": {
+    "src": "https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/253e456e3c0bf4bd34afaceb7dcbae282da14066/bootstrap-notify/index.d.ts",
+    "raw": "registry:dt/bootstrap-notify#3.1.3+20161119044246",
+    "typings": "https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/253e456e3c0bf4bd34afaceb7dcbae282da14066/bootstrap-notify/index.d.ts"
+  }
+}
diff --git a/client/typings/globals/bootstrap-select/index.d.ts b/client/typings/globals/bootstrap-select/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..d753f8e778d678ab9689377774540d8eaf06916f
--- /dev/null
+++ b/client/typings/globals/bootstrap-select/index.d.ts
@@ -0,0 +1,39 @@
+// Generated by typings
+// Source: https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/cadf4eb74f91198db85648e82375131e1ba55c5c/bootstrap-select/index.d.ts
+interface BootstrapSelectOptions {
+    actionsBox?: boolean
+    container?: string | boolean
+    countSelectedText?: string | Function
+    deselectAllText?: string
+    dropdownAlignRight?: string | boolean
+    dropupAuto?: boolean
+    header?: string
+    hideDisabled?: boolean
+    iconBase?: string
+    liveSearch?: boolean
+    liveSearchNormalize?: boolean
+    liveSearchPlaceholder?: string
+    liveSearchStyle?: string
+    maxOptions?: number | boolean
+    maxOptionsText?: string | Array<any> | Function
+    mobile?: boolean
+    multipleSeparator?: string
+    noneSelectedText?: string
+    selectAllText?: string
+    selectedTextFormat?: string
+    selectOnTab?: boolean
+    showContent?: boolean
+    showIcon?: boolean
+    showSubtext?: boolean
+    showTick?: boolean
+    size?: string | number | boolean
+    style?: string
+    tickIcon?: string
+    title?: string
+    width?: string | boolean
+}
+
+interface JQuery {
+    selectpicker(opts?: BootstrapSelectOptions): void
+    selectpicker(method: string, ...args: Array<string | Array<string>>): void
+}
diff --git a/client/typings/globals/bootstrap-select/typings.json b/client/typings/globals/bootstrap-select/typings.json
new file mode 100644
index 0000000000000000000000000000000000000000..f590a5026a7db99df93ba74bfe1c59f89686fe35
--- /dev/null
+++ b/client/typings/globals/bootstrap-select/typings.json
@@ -0,0 +1,8 @@
+{
+  "resolution": "main",
+  "tree": {
+    "src": "https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/cadf4eb74f91198db85648e82375131e1ba55c5c/bootstrap-select/index.d.ts",
+    "raw": "registry:dt/bootstrap-select#1.11.2+20161110161159",
+    "typings": "https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/cadf4eb74f91198db85648e82375131e1ba55c5c/bootstrap-select/index.d.ts"
+  }
+}
diff --git a/client/typings/globals/flot/index.d.ts b/client/typings/globals/flot/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..f1d9c144d257ead5266677c5e188d6246ea1c7c9
--- /dev/null
+++ b/client/typings/globals/flot/index.d.ts
@@ -0,0 +1,237 @@
+// Generated by typings
+// Source: https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/50387d40462301d54cda62e24d3b2ee46540f24a/flot/index.d.ts
+declare namespace jquery.flot {
+    interface plotOptions {
+        colors?: any[];
+        series?: seriesOptions;
+        legend?: legendOptions;
+        xaxis?: axisOptions;
+        yaxis?: axisOptions;
+        xaxes?: axisOptions[];
+        yaxes?: axisOptions[];
+        grid?: gridOptions;
+        interaction?: interaction;
+        hooks?: hooks;
+    }
+
+    interface hooks {
+        processOptions: { (plot: plot, options: plotOptions): void; } [];
+        processRawData: { (plot: plot, series: dataSeries, data: any[], datapoints: datapoints): void; }[];
+        processDatapoints: { (plot: plot, series: dataSeries, datapoints: datapoints): void; }[];
+        processOffset: { (plot: plot, offset: canvasPoint): void; }[];
+        drawBackground: { (plot: plot, context: CanvasRenderingContext2D): void; }[];
+        drawSeries: { (plot: plot, context: CanvasRenderingContext2D, series: dataSeries): void; }[];
+        draw: { (plot: plot, context: CanvasRenderingContext2D): void; }[];
+        bindEvents: { (plot: plot, eventHolder: JQuery): void; }[];
+        drawOverlay: { (plot: plot, context: CanvasRenderingContext2D): void; }[];
+        shutdown: { (plot: plot, eventHolder: JQuery): void; }[];
+    }
+
+    interface interaction {
+        redrawOverlayInterval?: number;
+    }
+
+    interface gridOptions {
+        show?: boolean;
+        aboveData?: boolean;
+        color?: any;                // color
+        backgroundColor?: any;      //color/gradient or null
+        margin?: any;                // number or margin object
+        labelMargin?: number;
+        axisMargin?: number;
+        markings?: any;             //array of markings or (fn: axes -> array of markings)
+        borderWidth?: any;          // number or width object
+        borderColor?: any;          // color or null
+        minBorderMargin?: number;       // or null
+        clickable?: boolean;
+        hoverable?: boolean;
+        autoHighlight?: boolean;
+        mouseActiveRadius?: number;
+        tickColor?: any;
+        markingsColor?: any;
+        markingsLineWidth?: number;
+    }
+
+    interface legendOptions {
+        show?: boolean;
+        labelFormatter?: (label: string, series: any) => string; //  null or (fn: string, series object -> string)
+        labelBoxBorderColor?: any;   //color
+        noColumns?: number;
+        position?: string;           //"ne" or "nw" or "se" or "sw"
+        margin?: any;                //number of pixels or [x margin, y margin]
+        backgroundColor?: any;       //null or color
+        backgroundOpacity?: number;  // between 0 and 1
+        container?: JQuery;         // null or jQuery object/DOM element/jQuery expression
+        sorted?: any;                //null/false, true, "ascending", "descending" or a comparator
+    }
+
+    interface seriesOptions {
+        color?: any;            // color or number
+        label?: string;
+        lines?: linesOptions;
+        bars?: barsOptions;
+        points?: pointsOptions;
+        xaxis?: number;
+        yaxis?: number;
+        clickable?: boolean;
+        hoverable?: boolean;
+        shadowSize?: number;
+        highlightColor?: any;
+    }
+
+    interface dataSeries extends seriesOptions {
+        data: any[];
+    }
+
+    interface axisOptions {
+        show?: boolean;            // null or true/false
+        position?: string;      // "bottom" or "top" or "left" or "right"
+        mode?: string;          // "time"
+        monthNames?: string[];  // array of month names
+
+        color?: any;            // null or color spec
+        tickColor?: any;        // null or color spec
+        font?: any;             // null or font spec object
+
+        min?: number;
+        max?: number;
+        autoscaleMargin?: number;
+
+        transform?: (v: number) => number;              // null or fn: number -> number
+        inverseTransform?: (v: number) => number;       // null or fn: number -> number
+
+        ticks?: any;                                    // null or number or ticks array or (fn: axis -> ticks array)
+        tickSize?: any;                                 // number or array
+        minTickSize?: any;                              // number or array
+        tickFormatter?: (t: number, a?: axis) => string;                            // (fn: number, object -> string) or string
+        tickDecimals?: number;
+
+        labelWidth?: number;
+        labelHeight?: number;
+        reserveSpace?: boolean;
+
+        tickLength?: number;
+
+        alignTicksWithAxis?: number;
+    }
+
+    interface seriesTypeBase {
+        show?: boolean;
+        lineWidth?: number;
+        fill?: any;              //boolean or number
+        fillColor?: any;         //null or color/gradient
+    }
+
+    interface linesOptions extends seriesTypeBase {
+        steps?: boolean;
+    }
+
+    interface barsOptions extends seriesTypeBase {
+        barWidth?: number;
+        align?: string;
+        horizontal?: boolean;
+    }
+
+    interface pointsOptions extends seriesTypeBase {
+        radius?: number;
+        symbol?: any;
+    }
+
+    interface gradient {
+        colors: any[];
+    }
+
+    interface item {
+        datapoint: number[];        // the point, e.g. [0, 2]
+        dataIndex: number;          // the index of the point in the data array
+        series: dataSeries;             //the series object
+        seriesIndex: number;        //the index of the series
+        pageX: number;
+        pageY: number;              //the global screen coordinates of the point
+    }
+
+    interface datapoints {
+        points: number[];
+        pointsize: number;
+        format: datapointFormat[];
+    }
+
+    interface datapointFormat {
+        x?: boolean;
+        y?: boolean;
+        number: boolean;
+        required: boolean;
+        defaultValue?: number;
+    }
+
+    interface point {
+        x: number;
+        y: number;
+    }
+
+    interface offset {
+        left: number;
+        top: number;
+    }
+
+    interface canvasPoint {
+        top: number;
+        left: number;
+        bottom?: number;
+        right?: number;
+    }
+
+    interface axes {
+        xaxis: axis;
+        yaxis: axis;
+        x2axis?: axis;
+        y2axis?: axis;
+    }
+
+    interface axis extends axisOptions {
+        options: axisOptions;
+        p2c(point: point):canvasPoint;
+        c2p(canvasPoint: canvasPoint):point;
+    }
+
+    interface plugin {
+        init(options: plotOptions): any;
+        options?: any;
+        name?: string;
+        version?: string;
+    }
+
+    interface plot {
+        highlight(series: dataSeries, datapoint: item): void;
+        unhighlight(): void;
+        unhighlight(series: dataSeries, datapoint: item): void;
+        setData(data: any): void;
+        setupGrid(): void;
+        draw(): void;
+        triggerRedrawOverlay(): void;
+        width(): number;
+        height(): number;
+        offset(): JQueryCoordinates;
+        pointOffset(point: point): offset;
+        resize(): void;
+        shutdown(): void;
+        getData(): dataSeries[];
+        getAxes(): axes;
+        getXAxes(): axis[];
+        getYAxes(): axis[];
+        getPlaceholder(): JQuery;
+        getCanvas(): HTMLCanvasElement;
+        getPlotOffset(): canvasPoint;
+        getOptions(): plotOptions;
+    }
+
+    interface plotStatic {
+        (placeholder: JQuery, data: dataSeries[], options?: plotOptions): plot;
+        (placeholder: JQuery, data: any[], options?: plotOptions): plot;
+        plugins: plugin[];
+    }
+}
+
+interface JQueryStatic {
+    plot: jquery.flot.plotStatic;
+}
diff --git a/client/typings/globals/flot/typings.json b/client/typings/globals/flot/typings.json
new file mode 100644
index 0000000000000000000000000000000000000000..cf3a318a1cb712c33ded2c2d78508a1ef259d28e
--- /dev/null
+++ b/client/typings/globals/flot/typings.json
@@ -0,0 +1,8 @@
+{
+  "resolution": "main",
+  "tree": {
+    "src": "https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/50387d40462301d54cda62e24d3b2ee46540f24a/flot/index.d.ts",
+    "raw": "registry:dt/flot#0.0.0+20160510010627",
+    "typings": "https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/50387d40462301d54cda62e24d3b2ee46540f24a/flot/index.d.ts"
+  }
+}
diff --git a/client/typings/globals/jquery.datatables/index.d.ts b/client/typings/globals/jquery.datatables/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..614e7ce3ee9c055ad00972b9d71e865cdc82f2b1
--- /dev/null
+++ b/client/typings/globals/jquery.datatables/index.d.ts
@@ -0,0 +1,1925 @@
+// Generated by typings
+// Source: https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/91ffde5df1f7067254394d117d3654faea23c862/jquery.datatables/index.d.ts
+interface JQuery {
+    DataTable(param?: DataTables.Settings): DataTables.DataTable;
+}
+
+//TODO: Wrong, as jquery.d.ts has no interface for fn
+//interface JQueryStatic {
+//    dataTable: DataTables.StaticFunctions;
+//}
+
+declare namespace DataTables {
+    export interface DataTable extends DataTableCore {
+        /**
+        * Get the data for the whole table.
+        */
+        data(): DataTable;
+
+        /**
+        * Order Methods / Object
+        */
+        order: OrderMethods;
+
+        //#region "Cell/Cells"
+
+        /**
+        * Select the cell found by a cell selector
+        *
+        * @param cellSelector Cell selector.
+        * @param Option used to specify how the cells should be ordered, and if paging or filtering in the table should be taken into account.
+        */
+        cell(cellSelector: (string | Node | Function | JQuery | Object) | (string | Node | Function | JQuery | Object)[], modifier?: ObjectSelectorModifier): CellMethods;
+
+        /**
+        * Select the cell found by a cell selector
+        *
+        * @param rowSelector Row selector.
+        * @param cellSelector Cell selector.
+        * @param Option used to specify how the cells should be ordered, and if paging or filtering in the table should be taken into account.
+        */
+        cell(rowSelector: (string | Node | Function | JQuery | Object) | (string | Node | Function | JQuery | Object)[], cellSelector: (string | Node | Function | JQuery | Object) | (string | Node | Function | JQuery | Object)[], modifier?: ObjectSelectorModifier): CellMethods;
+
+        /**
+        * Select all cells
+        *
+        * @param Option used to specify how the cells should be ordered, and if paging or filtering in the table should be taken into account.
+        */
+        cells(modifier?: ObjectSelectorModifier): CellsMethods;
+
+        /**
+        * Select cells found by a cell selector
+        *
+        * @param cellSelector Cell selector.
+        * @param Option used to specify how the cells should be ordered, and if paging or filtering in the table should be taken into account.
+        */
+        cells(cellSelector: (string | Node | Function | JQuery | Object) | (string | Node | Function | JQuery | Object)[], modifier?: ObjectSelectorModifier): CellsMethods;
+
+        /**
+        * Select cells found by both row and column selectors
+        *
+        * @param rowSelector Row selector.
+        * @param cellSelector Cell selector.
+        * @param Option used to specify how the cells should be ordered, and if paging or filtering in the table should be taken into account.
+        */
+        cells(rowSelector: (string | Node | Function | JQuery | Object) | (string | Node | Function | JQuery | Object)[], cellSelector: (string | Node | Function | JQuery | Object) | (string | Node | Function | JQuery | Object)[], modifier?: ObjectSelectorModifier): CellsMethods;
+        //#endregion "Cell/Cells"
+
+        //#region "Column/Columns"
+
+        /**
+        * Column Methods / Object
+        */
+        column: ColumnMethodsModel;
+
+        /**
+        * Columns Methods / Object
+        */
+        columns: ColumnsMethodsModel;
+
+        //#endregion "Column/Columns"
+
+        //#region "Row/Rows"
+
+        /**
+        * Row Methode / Object
+        */
+        row: RowMethodsModel
+
+        /**
+        * Rows Methods / Object
+        */
+        rows: RowsMethodsModel
+
+        //#endregion "Row/Rows"
+
+        //#region "Table/Tables"
+
+        /**
+        * Select a table based on a selector from the API's context
+        *
+        * @param tableSelector Table selector.
+        */
+        table(tableSelector: (string | Node | Function | JQuery | Object) | (string | Node | Function | JQuery | Object)[]): TableMethods;
+
+        /**
+        * Select all tables
+        */
+        tables(): TablesMethods;
+
+        /**
+        * Select tables based on the given selector
+        *
+        * @param tableSelector Table selector.
+        */
+        tables(tableSelector: (string | Node | Function | JQuery | Object) | (string | Node | Function | JQuery | Object)[]): TablesMethods;
+
+        //#endregion "Table/Tables"
+    }
+
+    export interface DataTables extends DataTableCore {
+        [index: number]: DataTable;
+    }
+
+    interface ObjectSelectorModifier {
+        /**
+        * The order modifier provides the ability to control which order the rows are processed in.
+        * Values: 'current', 'applied', 'index',  'original'
+        */
+        order?: string;
+
+        /**
+        * The search modifier provides the ability to govern which rows are used by the selector using the search options that are applied to the table.
+        * Values: 'none', 'applied', 'removed'
+        */
+        search?: string;
+
+        /**
+        * The page modifier allows you to control if the selector should consider all data in the table, regardless of paging, or if only the rows in the currently disabled page should be used.
+        * Values: 'all', 'current'
+        */
+        page?: string;
+    }
+
+    //#region "Namespaces"
+
+    //#region "core-methods"
+
+    interface DataTableCore extends UtilityMethods {
+        /**
+        * Get jquery object
+        */
+        $(selector: string | Node | Node[] | JQuery, modifier?: ObjectSelectorModifier): JQuery;
+
+        ///// Almost identical to $ in operation, but in this case returns the data for the matched rows.
+        //_(selector: string | Node | Node[] | JQuery, modifier?: ObjectSelectorModifier): JQuery;
+
+        /**
+        * Ajax Methods
+        */
+        ajax: AjaxMethodModel;
+
+        /**
+        * Clear the table of all data.
+        */
+        clear(): DataTable;
+
+        /**
+        * Destroy the DataTables in the current context.
+        *
+        * @param remove Completely remove the table from the DOM (true) or leave it in the DOM in its original plain un-enhanced HTML state (default, false).
+        */
+        destroy(remove?: boolean): DataTable;
+
+        /**
+        * Redraw the DataTables in the current context, optionally updating ordering, searching and paging as required.
+        *
+        * @param paging This parameter is used to determine what kind of draw DataTables will perform.
+        */
+        draw(paging?: boolean | string): DataTable;
+
+        /*
+        * Look up a language token that was defined in the DataTables' language initialisation object.
+        *
+        * @param token The language token to lookup from the language object.
+        * @param def The default value to use if the DataTables initialisation has not specified a value.
+        * @param numeric If handling numeric output, the number to be presented should be given in this parameter. If not numeric operator is required (for example button label text) this parameter is not required.
+        *
+        * @returns Resulting internationalised string.
+        */
+        i18n(token: string, def: any | string, numeric?: number): string;
+
+        /*
+        * Get the initialisation options used for the table. Since: DataTables 1.10.6
+        */
+        init(): Settings;
+
+        /**
+        * Table events removal.
+        *
+        * @param event Event name to remove.
+        * @param callback Specific callback function to remove if you want to unbind a single event listener.
+        */
+        off(event: string, callback?: Function): DataTable;
+
+        /**
+        * Table events listener.
+        *
+        * @param event Event to listen for.
+        * @param callback Specific callback function to remove if you want to unbind a single event listener.
+        */
+        on(event: string, callback: Function): DataTable;
+
+        /**
+        * Listen for a table event once and then remove the listener.
+        *
+        * @param event Event to listen for.
+        * @param callback Specific callback function to remove if you want to unbind a single event listener.
+        */
+        one(event: string, callback: Function): DataTable;
+
+        /**
+        * Page Methods / Object
+        */
+        page: PageMethods;
+
+        /**
+        * Get current search
+        */
+        search(): string;
+
+        /**
+        * Search for data in the table.
+        *
+        * @param input Search string to apply to the table.
+        * @param regex Treat as a regular expression (true) or not (default, false).
+        * @param smart Perform smart search.
+        * @param caseInsen Do case-insensitive matching (default, true) or not (false).
+        */
+        search(input: string, regex?: boolean, smart?: boolean, caseInsen?: boolean): DataTable;
+
+        /**
+        * Obtain the table's settings object
+        */
+        settings(): DataTable;
+
+        /**
+        * Page Methods / Object
+        */
+        state: StateMethods;
+    }
+
+    //#region "ajax-methods"
+
+    interface AjaxMethods extends DataTable {
+        /**
+        * Reload the table data from the Ajax data source.
+        *
+        * @param callback Function which is executed when the data as been reloaded and the table fully redrawn.
+        * @param resetPaging Reset (default action or true) or hold the current paging position (false).
+        */
+        load(callback?: Function, resetPaging?: boolean): DataTable;
+    }
+
+    interface AjaxMethodModel {
+        /**
+        * Get the latest JSON data obtained from the last Ajax request DataTables made
+        */
+        json(): Object;
+
+        /**
+        * Get the data submitted by DataTables to the server in the last Ajax request
+        */
+        params(): Object;
+
+        /**
+        * Reload the table data from the Ajax data source.
+        *
+        * @param callback Function which is executed when the data as been reloaded and the table fully redrawn.
+        * @param resetPaging Reset (default action or true) or hold the current paging position (false).
+        */
+        reload(callback?: Function, resetPaging?: boolean): DataTable;
+
+        /**
+        * Reload the table data from the Ajax data source
+        */
+        url(): string;
+
+        /**
+        * Reload the table data from the Ajax data source
+        *
+        * @param url URL to set to be the Ajax data source for the table.
+        */
+        url(url: string): AjaxMethods;
+    }
+
+    //#endregion "ajax-methods"
+
+    //#region "order-methods"
+
+    interface OrderMethods {
+        /**
+        * Get the ordering applied to the table.
+        */
+        (): (string | number)[][];
+
+        /**
+        * Set the ordering applied to the table.
+        *
+        * @param order Order Model
+        */
+        (order?: (string | number)[]): DataTable;
+        (order?: (string | number)[][]): DataTable;
+        (order: (string | number)[], ...args: any[]): DataTable;
+
+        /**
+        * Add an ordering listener to an element, for a given column.
+        *
+        * @param node Selector
+        * @param column Column index
+        * @param callback Callback function
+        */
+        listener(node: string | Node | JQuery, column: number, callback: Function): DataTable;
+    }
+    //#endregion "order-methods"
+
+    //#region "page-methods"
+
+    interface PageMethods {
+        /**
+        * Get the current page of the table.
+        */
+        (): number;
+
+        /**
+        * Set the current page of the table.
+        *
+        * @param page Index or 'first', 'next', 'previous', 'last'
+        */
+        (page: number | string): DataTable;
+
+        /**
+        * Get paging information about the table
+        */
+        info(): PageMethodeModelInfoReturn;
+
+        /**
+        * Get the table's page length.
+        */
+        len(): number;
+
+        /**
+        * Set the table's page length.
+        *
+        * @param length Page length to set. use -1 to show all records.
+        */
+        len(length: number): DataTable;
+    }
+
+    interface PageMethodeModelInfoReturn {
+        page: number;
+        pages: number;
+        start: number;
+        end: number;
+        length: number;
+        recordsTotal: number;
+        recordsDisplay: number;
+        serverSide: boolean
+    }
+
+    //#endregion "page-methods"
+
+    //#region "state-methods"
+
+    interface StateMethods {
+        /**
+        * Get the last saved state of the table
+        */
+        (): StateReturnModel;
+
+        /**
+        * Clear the saved state of the table.
+        */
+        clear(): DataTable;
+
+        /**
+        * Get the table state that was loaded during initialisation.
+        */
+        loaded(): StateReturnModel;
+
+        /**
+        * Trigger a state save.
+        */
+        save(): DataTable;
+    }
+
+    interface StateReturnModel {
+        time: number;
+        start: number;
+        length: number;
+        order: (string | number)[][];
+        search: SearchSettings;
+        columns: StateReturnModelColumns[];
+    }
+
+    interface StateReturnModelColumns {
+        search: SearchSettings;
+        visible: boolean;
+    }
+
+    //#endregion "state-methods"
+
+    //#endregion "core-methods"
+
+    //#region "util-methods"
+
+    interface UtilityMethods {
+        /*
+        * Get a boolean value to indicate if there are any entries in the API instance's result set (i.e. any data, selected rows, etc).
+        */
+        any(): boolean;
+
+        /**
+        * Concatenate two or more API instances together
+        *
+        * @param a API instance to concatenate to the initial instance.
+        * @param b Additional API instance(s) to concatenate to the initial instance.
+        */
+        concat(a: Object, ...b: Object[]): DataTable;
+
+        /**
+        * Get the number of entries in an API instance's result set, regardless of multi-table grouping (e.g. any data, selected rows, etc). Since: 1.10.8
+        */
+        count(): number;
+
+        /**
+        * Iterate over the contents of the API result set.
+        *
+        * @param fn Callback function which is called for each item in the API instance result set. The callback is called with three parameters
+        */
+        each(fn: Function): DataTable;
+
+        /**
+        * Reduce an Api instance to a single context and result set.
+        *
+        * @param idx Index to select
+        */
+        eq(idx: number): DataTable;
+
+        /**
+        * Iterate over the result set of an API instance and test each item, creating a new instance from those items which pass.
+        *
+        * @param fn Callback function which is called for each item in the API instance result set. The callback is called with three parameters.
+        */
+        filter(fn: Function): DataTable;
+
+        /**
+        * Flatten a 2D array structured API instance to a 1D array structure.
+        */
+        flatten(): DataTable;
+
+        /**
+        * Find the first instance of a value in the API instance's result set.
+        *
+        * @param value Value to find in the instance's result set.
+        */
+        indexOf(value: any): number;
+
+        /**
+        * Join the elements in the result set into a string.
+        *
+        * @param separator The string that will be used to separate each element of the result set.
+        */
+        join(separator: string): string;
+
+        /**
+        * Find the last instance of a value in the API instance's result set.
+        *
+        * @param value Value to find in the instance's result set.
+        */
+        lastIndexOf(value: any): number;
+
+        /**
+        * Number of elements in an API instance's result set.
+        */
+        length: number;
+
+        /**
+        * Iterate over the result set of an API instance, creating a new API instance from the values returned by the callback.
+        *
+        * @param fn Callback function which is called for each item in the API instance result set. The callback is called with three parameters.
+        */
+        map(fn: Function): DataTable;
+
+        /**
+        * Iterate over the result set of an API instance, creating a new API instance from the values retrieved from the original elements.
+        *
+        * @param property Object property name to use from the element in the original result set for the new result set.
+        */
+        pluck(property: number | string): DataTable;
+
+        /**
+        * Remove the last item from an API instance's result set.
+        */
+        pop(): any;
+
+        /**
+        * Add one or more items to the end of an API instance's result set.
+        *
+        * @param value_1 Item to add to the API instance's result set.
+        */
+        push(value_1: any | any[], ...value_2: any[]): number;
+
+        /**
+        * Apply a callback function against and accumulator and each element in the Api's result set (left-to-right).
+        *
+        * @param fn Callback function which is called for each item in the API instance result set. The callback is called with four parameters.
+        * @param initialValue Value to use as the first argument of the first call to the fn callback.
+        */
+        reduce(fn: Function, initialValue?: any): any;
+
+        /**
+        * Apply a callback function against and accumulator and each element in the Api's result set (right-to-left).
+        *
+        * @param fn Callback function which is called for each item in the API instance result set. The callback is called with four parameters.
+        * @param initialValue Value to use as the first argument of the first call to the fn callback.
+        */
+        reduceRight(fn: Function, initialValue?: any): any;
+
+        /**
+        * Reverse the result set of the API instance and return the original array.
+        */
+        reverse(): DataTable;
+
+        /**
+        * Remove the first item from an API instance's result set.
+        */
+        shift(): any;
+
+        /**
+        * Sort the elements of the API instance's result set.
+        *
+        * @param fn This is a standard Javascript sort comparison function. It accepts two parameters.
+        */
+        sort(fn?: Function): DataTable;
+
+        /**
+        * Modify the contents of an Api instance's result set, adding or removing items from it as required.
+        *
+        * @param index Index at which to start modifying the Api instance's result set.
+        * @param howMany Number of elements to remove from the result set.
+        * @param value_1 Item to add to the result set at the index specified by the first parameter.
+        */
+        splice(index: number, howMany: number, value_1?: any | any[], ...value_2: any[]): any[];
+
+        /**
+        * Convert the API instance to a jQuery object, with the objects from the instance's result set in the jQuery result set.
+        */
+        to$(): JQuery;
+
+        /**
+        * Create a native Javascript array object from an API instance.
+        */
+        toArray(): any[];
+
+        /**
+        * Convert the API instance to a jQuery object, with the objects from the instance's result set in the jQuery result set.
+        */
+        toJQuery(): JQuery;
+
+        /**
+        * Create a new API instance containing only the unique items from a the elements in an instance's result set.
+        */
+        unique(): DataTable;
+
+        /**
+        * Add one or more items to the start of an API instance's result set.
+        *
+        * @param value_1 Item to add to the API instance's result set.
+        */
+        unshift(value_1: any | any[], ...value_2: any[]): number;
+    }
+
+    //#endregion "util-methods"
+
+    interface CommonSubMethods {
+        /**
+        * Get the DataTables cached data for the selected cell
+        *
+        * @param t Specify which cache the data should be read from. Can take one of two values: search or order
+        */
+        cache(t: string): DataTable;
+    }
+
+    //#region "cell-methods"
+
+    interface CommonCellMethods extends CommonSubMethods {
+        /**
+        * Invalidate the data held in DataTables for the selected cells
+        *
+        * @param source Data source to read the new data from.
+        */
+        invalidate(source?: string): DataTable;
+
+        /**
+        * Get data for the selected cell
+        *
+        * @param f Data type to get. This can be one of: 'display', 'filter', 'sort', 'type'
+        */
+        render(t: string): any;
+    }
+
+    interface CellMethods extends DataTableCore, CommonCellMethods {
+        /**
+        * Get data for the selected cell
+        */
+        data(): any;
+
+        /**
+        * Get data for the selected cell
+        *
+        * @param data Value to assign to the data for the cell
+        */
+        data(data: any): DataTable;
+
+        /**
+        * Get index information about the selected cell
+        */
+        index(): CellIndexReturn;
+
+        /**
+        * Get the DOM element for the selected cell
+        */
+        node(): Node;
+    }
+
+    interface CellIndexReturn {
+        row: number;
+        column: number;
+        columnVisible: number;
+    }
+
+    interface CellsMethods extends DataTableCore, CommonCellMethods {
+        /**
+        * Get data for the selected cells
+        */
+        data(): DataTable;
+
+        /**
+        * Iterate over each selected cell, with the function context set to be the cell in question. Since: DataTables 1.10.6
+        *
+        * @param fn Function to execute for every cell selected.
+        */
+        every(fn: (cellRowIdx: number, cellColIdx: number, tableLoop: number, cellLoop: number) => void): DataTable;
+
+        /**
+        * Get index information about the selected cells
+        */
+        indexes(): DataTable;
+
+        /**
+        * Get the DOM elements for the selected cells
+        */
+        nodes(): DataTable;
+    }
+    //#endregion "cell-methods"
+
+    //#region "column-methods"
+
+    interface CommonColumnMethod extends CommonSubMethods {
+        /**
+        * Get the footer th / td cell for the selected column.
+        */
+        footer(): any;
+
+        /**
+        * Get the header th / td cell for a column.
+        */
+        header(): Node;
+
+        /**
+        * Order the table, in the direction specified, by the column selected by the column()DT selector.
+        *
+        * @param direction Direction of sort to apply to the selected column - desc (descending) or asc (ascending).
+        */
+        order(direction: string): DataTable;
+
+        /**
+        * Get the visibility of the selected column.
+        */
+        visible(): boolean;
+
+        /**
+        * Set the visibility of the selected column.
+        *
+        * @param show Specify if the column should be visible (true) or not (false).
+        * @param redrawCalculations Indicate if DataTables should recalculate the column layout (true - default) or not (false). Typically this would be left as the default value, but it can be useful to disable when using the method in a loop - so the calculations are performed on every call as they can hamper performance.
+        */
+        visible(show: boolean, redrawCalculations?: boolean): DataTable;
+    }
+
+    interface ColumnMethodsModel {
+        /**
+        * Select the column found by a column selector
+        *
+        * @param cellSelector Cell selector.
+        * @param Option used to specify how the cells should be ordered, and if paging or filtering in the table should be taken into account.
+        */
+        (columnSelector: any, modifier?: ObjectSelectorModifier): ColumnMethods;
+
+        /**
+        * Convert from the input column index type to that required.
+        *
+        * @param t The type on conversion that should take place: 'fromVisible', 'toData', 'fromData', 'toVisible'
+        * @param index The index to be converted
+        */
+        index(t: string, index: number): number;
+    }
+
+    interface ColumnMethods extends DataTableCore, CommonColumnMethod {
+        /**
+        * Get the data for the cells in the selected column.
+        */
+        data(): DataTable;
+
+        /**
+        * Get the data source property for the selected column
+        */
+        dataSrc(): number | string | Function;
+
+        /**
+        * Get index information about the selected cell
+        *
+        * @param t Specify if you want to get the column data index (default) or the visible index (visible).
+        */
+        index(t?: string): DataTable;
+
+        /**
+        * Obtain the th / td nodes for the selected column
+        */
+        nodes(): DataTable[];
+    }
+
+    interface ColumnsMethodsModel {
+        /**
+        * Select all columns
+        *
+        * @param Option used to specify how the cells should be ordered, and if paging or filtering in the table should be taken into account.
+        */
+        (modifier?: ObjectSelectorModifier): ColumnsMethods;
+
+        /**
+        * Select columns found by a cell selector
+        *
+        * @param cellSelector Cell selector.
+        * @param Option used to specify how the cells should be ordered, and if paging or filtering in the table should be taken into account.
+        */
+        (columnSelector: any, modifier?: ObjectSelectorModifier): ColumnsMethods;
+
+        /**
+        * Recalculate the column widths for layout.
+        */
+        adjust(): DataTable;
+    }
+
+    interface ColumnsMethods extends DataTableCore, CommonColumnMethod {
+        /**
+        * Obtain the data for the columns from the selector
+        */
+        data(): DataTable;
+
+        /**
+        * Get the data source property for the selected columns.
+        */
+        dataSrc(): DataTable;
+
+        /**
+        * Iterate over each selected column, with the function context set to be the column in question. Since: DataTables 1.10.6
+        *
+        * @param fn Function to execute for every column selected.
+        */
+        every(fn: (colIdx: number, tableLoop: number, colLoop: number) => void): DataTable;
+
+        /**
+        * Get the column indexes of the selected columns.
+        *
+        * @param t Specify if you want to get the column data index (default) or the visible index (visible).
+        */
+        indexes(t?: string): DataTable;
+
+        /**
+        * Obtain the th / td nodes for the selected columns
+        */
+        nodes(): DataTable[][];
+    }
+    //#endregion "column-methods"
+
+    //#region "row-methods"
+
+    interface CommonRowMethod extends CommonSubMethods {
+        /**
+        * Obtain the th / td nodes for the selected column
+        *
+        * @param source Data source to read the new data from. Values: 'auto', 'data', 'dom'
+        */
+        invalidate(source?: string): DataTable;
+    }
+
+    interface RowChildMethodModel {
+        /**
+        * Get the child row(s) that have been set for a parent row
+        */
+        (): JQuery;
+
+        /**
+        * Get the child row(s) that have been set for a parent row
+        *
+        * @param showRemove This parameter can be given as true or false
+        */
+        (showRemove: boolean): RowChildMethods;
+
+        /**
+        * Set the data to show in the child row(s). Note that calling this method will replace any child rows which are already attached to the parent row.
+        *
+        * @param data The data to be shown in the child row can be given in multiple different ways.
+        * @param className Class name that is added to the td cell node(s) of the child row(s). As of 1.10.1 it is also added to the tr row node of the child row(s).
+        */
+        (data: (string | Node | JQuery) | (string | Node | JQuery)[], className?: string): RowChildMethods;
+
+        /**
+        * Hide the child row(s) of a parent row
+        */
+        hide(): DataTable;
+
+        /**
+        * Check if the child rows of a parent row are visible
+        */
+        isShown(): DataTable;
+
+        /**
+        * Remove child row(s) from display and release any allocated memory
+        */
+        remove(): DataTable;
+
+        /**
+        * Show the child row(s) of a parent row
+        */
+        show(): DataTable;
+    }
+
+    interface RowChildMethods extends DataTableCore {
+        /**
+        * Hide the child row(s) of a parent row
+        */
+        hide(): DataTable;
+
+        /**
+        * Remove child row(s) from display and release any allocated memory
+        */
+        remove(): DataTable;
+
+        /**
+        * Make newly defined child rows visible
+        */
+        show(): DataTable;
+    }
+
+    interface RowMethodsModel {
+        /**
+        * Select a row found by a row selector
+        *
+        * @param rowSelector Row selector.
+        * @param Option used to specify how the cells should be ordered, and if paging or filtering in the table should be taken into account.
+        */
+        (rowSelector: any, modifier?: ObjectSelectorModifier): RowMethods;
+
+        /**
+        * Add a new row to the table using the given data
+        *
+        * @param data Data to use for the new row. This may be an array, object or Javascript object instance, but must be in the same format as the other data in the table
+        */
+        add(data: any[] | Object): DataTable;
+    }
+
+    interface RowMethods extends DataTableCore, CommonRowMethod {
+        /**
+        * Order Methods / Object
+        */
+        child: RowChildMethodModel;
+
+        /**
+        * Get the data for the selected row
+        */
+        data(): any[] | Object;
+
+        /**
+        * Set the data for the selected row
+        *
+        * @param d Data to use for the row.
+        */
+        data(d: any[] | Object): DataTable;
+
+        /**
+
+        * Get the id of the selected row. Since: 1.10.8
+        *
+        * @param hash true - Append a hash (#) to the start of the row id. This can be useful for then using the id as a selector
+        * false - Do not modify the id value.
+        * @returns Row id. If the row does not have an id available 'undefined' will be returned.
+        */
+        id(hash?: boolean): string;
+
+        /**
+        * Get the row index of the row column.
+        */
+        index(): number;
+
+        /**
+        * Obtain the tr node for the selected row
+        */
+        node(): Node;
+
+        /**
+        * Delete the selected row from the DataTable.
+        */
+        remove(): Node;
+    }
+
+    interface RowsMethodsModel {
+        /**
+        * Select all rows
+        *
+        * @param Option used to specify how the cells should be ordered, and if paging or filtering in the table should be taken into account.
+        */
+        (modifier?: ObjectSelectorModifier): RowsMethods;
+
+        /**
+        * Select rows found by a row selector
+        *
+        * @param cellSelector Row selector.
+        * @param Option used to specify how the cells should be ordered, and if paging or filtering in the table should be taken into account.
+        */
+        (rowSelector: any, modifier?: ObjectSelectorModifier): RowsMethods;
+
+        /**
+        * Add new rows to the table using the data given
+        *
+        * @param data Array of data elements, with each one describing a new row to be added to the table
+        */
+        add(data: any[]): DataTable;
+    }
+
+    interface RowsMethods extends DataTableCore, CommonRowMethod {
+        /**
+        * Get the data for the rows from the selector
+        */
+        data(): DataTable;
+
+        /**
+        * Set the data for the selected row
+        *
+        * @param d Data to use for the row.
+        */
+        data(d: any[] | Object): DataTable;
+
+        /**
+        * Iterate over each selected row, with the function context set to be the row in question. Since: DataTables 1.10.6
+        *
+        * @param fn Function to execute for every row selected.
+        */
+        every(fn: (rowIdx: number, tableLoop: number, rowLoop: number) => void): DataTable;
+
+        /**
+        * Get the ids of the selected rows. Since: 1.10.8
+        *
+        * @param hash true - Append a hash (#) to the start of each row id. This can be useful for then using the ids as selectors
+        * false - Do not modify the id value.
+        * @returns Api instance with the selected rows in its result set. If a row does not have an id available 'undefined' will be returned as the value.
+        */
+        ids(hash?: boolean): DataTable;
+
+        /**
+        * Get the row indexes of the selected rows.
+        */
+        indexes(): DataTable;
+
+        /**
+        * Obtain the tr nodes for the selected rows
+        */
+        nodes(): DataTable;
+
+        /**
+        * Delete the selected rows from the DataTable.
+        */
+        remove(): DataTable;
+    }
+    //#endregion "row-methods"
+
+    //#region "table-methods"
+
+    interface TableMethods extends DataTableCore {
+        /**
+        * Get the tfoot node for the table in the API's context
+        */
+        footer(): Node;
+
+        /**
+        * Get the thead node for the table in the API's context
+        */
+        header(): Node;
+
+        /**
+        * Get the tbody node for the table in the API's context
+        */
+        body(): Node;
+
+        /**
+        * Get the div container node for the table in the API's context
+        */
+        container(): Node;
+
+        /**
+        * Get the table node for the table in the API's context
+        */
+        node(): Node;
+    }
+
+    interface TablesMethods extends DataTableCore {
+        /**
+        * Get the tfoot nodes for the tables in the API's context
+        */
+        footer(): DataTable;
+
+        /**
+        * Get the thead nodes for the tables in the API's context
+        */
+        header(): DataTable;
+
+        /**
+        * Get the tbody nodes for the tables in the API's context
+        */
+        body(): DataTable;
+
+        /**
+        * Get the div container nodes for the tables in the API's context
+        */
+        containers(): DataTable;
+
+        /**
+        * Get the table nodes for the tables in the API's context
+        */
+        nodes(): DataTable;
+    }
+    //#endregion "table-methods"
+
+    //#endregion "Namespaces"
+
+    //#region "Static-Methods"
+
+    export interface StaticFunctions {
+        /**
+        * Check is a table node is a DataTable or not
+        *
+        * @param table Selector string for table
+        */
+        isDataTable(table: string): boolean;
+
+        /**
+        * Get all DataTable tables that have been initialised - optionally you can select to get only currently visible tables and / or retrieve the tables as API instances.
+        *
+        * @param visible As a boolean value this options is used to indicate if you want all tables on the page should be returned (false), or visible tables only (true).
+        * Since 1.10.8 this option can also be given as an object.
+        */
+        tables(visible?: boolean | ObjectTablesStatic): DataTables.DataTable[] | DataTables.DataTable;
+
+        /**
+        * Version number compatibility check function
+        *
+        * @param version Version string
+        */
+        versionCheck(version: string): boolean;
+
+        /**
+        * Utils
+        */
+        util: StaticUtilFunctions;
+
+        /**
+        * Check is a table node is a DataTable or not
+        *
+        * @param table Selector string for table
+        */
+        Api(selector: string | Node | Node[] | JQuery): DataTables.DataTable;
+    }
+
+    export interface StaticUtilFunctions {
+        /**
+        * Escape special characters in a regular expression string. Since: 1.10.4
+        *
+        * @param str String to escape
+        */
+        escapeRegex(str: string): string;
+
+        /**
+        * Throttle the calls to a method to reduce call frequency. Since: 1.10.3
+        *
+        * @param fn Function
+        * @param period ms
+        */
+        throttle(fn: Function, period?: number): Function;
+    }
+
+    interface ObjectTablesStatic {
+        /**
+        * Get only visible tables (true) or all tables regardless of visibility (false).
+        */
+        visible: boolean
+
+        /**
+        * Return a DataTables API instance for the selected tables (true) or an array (false).
+        */
+        api: boolean
+    }
+
+    //#endregion "Static-Methods"
+
+    //#region "Settings"
+
+    export interface Settings {
+
+        //#region "Features"
+
+        /**
+        * Feature control DataTables' smart column width handling. Since: 1.10
+        */
+        autoWidth?: boolean;
+
+        /**
+        * Feature control deferred rendering for additional speed of initialisation. Since: 1.10
+        */
+        deferRender?: boolean;
+
+        /**
+        * Feature control table information display field. Since: 1.10
+        */
+        info?: boolean;
+
+        /**
+        * Use markup and classes for the table to be themed by jQuery UI ThemeRoller. Since: 1.10
+        */
+        jQueryUI?: boolean;
+
+        /**
+        * Feature control the end user's ability to change the paging display length of the table. Since: 1.10
+        */
+        lengthChange?: boolean;
+
+        /**
+        * Feature control ordering (sorting) abilities in DataTables. Since: 1.10
+        */
+        ordering?: boolean;
+
+        /**
+        * Enable or disable table pagination. Since: 1.10
+        */
+        paging?: boolean;
+
+        /**
+        * Feature control the processing indicator. Since: 1.10
+        */
+        processing?: boolean;
+
+        /**
+        * Horizontal scrolling. Since: 1.10
+        */
+        scrollX?: boolean;
+
+        /**
+        * Vertical scrolling. Since: 1.10 Exp: "200px"
+        */
+        scrollY?: string;
+
+        /**
+        * Feature control search (filtering) abilities Since: 1.10
+        */
+        searching?: boolean;
+
+        /**
+        * Feature control DataTables' server-side processing mode. Since: 1.10
+        */
+        serverSide?: boolean;
+
+        /**
+        * State saving - restore table state on page reload. Since: 1.10
+        */
+        stateSave?: boolean;
+
+        //#endregion "Features"
+
+        //#region "Data"
+
+        /**
+        * Load data for the table's content from an Ajax source. Since: 1.10
+        */
+        ajax?: string | AjaxSettings | FunctionAjax;
+
+        /**
+        * Data to use as the display data for the table. Since: 1.10
+        */
+        data?: Object;
+
+        //#endregion "Data"
+
+        //#region "Options"
+
+        /**
+        * Data to use as the display data for the table. Since: 1.10
+        */
+        columns?: ColumnSettings[];
+
+        /**
+        * Assign a column definition to one or more columns.. Since: 1.10
+        */
+        columnDefs?: ColumnDefsSettings[];
+
+        /**
+        * Delay the loading of server-side data until second draw
+        */
+        deferLoading?: number | number[];
+
+        /**
+        * Destroy any existing table matching the selector and replace with the new options. Since: 1.10
+        */
+        destroy?: boolean;
+
+        /**
+        * Initial paging start point. Since: 1.10
+        */
+        displayStart?: number;
+
+        /**
+        * Define the table control elements to appear on the page and in what order. Since: 1.10
+        */
+        dom?: string;
+
+        /**
+        * Change the options in the page length select list. Since: 1.10
+        */
+        lengthMenu?: (number | string)[] | (number | string)[][];
+
+        /**
+        * Control which cell the order event handler will be applied to in a column. Since: 1.10
+        */
+        orderCellsTop?: boolean;
+
+        /**
+        * Highlight the columns being ordered in the table's body. Since: 1.10
+        */
+        orderClasses?: boolean;
+
+        /**
+        * Initial order (sort) to apply to the table. Since: 1.10
+        */
+        order?: (string | number)[] | (string | number)[][];
+
+        /**
+        * Ordering to always be applied to the table. Since: 1.10
+        */
+        orderFixed?: (string | number)[] | (string | number)[][] | Object;
+
+        /**
+        * Multiple column ordering ability control. Since: 1.10
+        */
+        orderMulti?: boolean;
+
+        /**
+        * Change the initial page length (number of rows per page). Since: 1.10
+        */
+        pageLength?: number;
+
+        /**
+        * Pagination button display options. Basic Types: numbers (1.10.8) simple, simple_numbers, full, full_numbers
+        */
+        pagingType?: string;
+
+        /**
+        * Retrieve an existing DataTables instance. Since: 1.10
+        */
+        retrieve?: boolean
+
+        /**
+        * Display component renderer types. Since: 1.10
+        */
+        renderer?: string | RendererSettings;
+
+        /**
+        * Data property name that DataTables will use to set <tr> element DOM IDs. Since: 1.10.8
+        */
+        rowId?: string;
+
+        /**
+        * Allow the table to reduce in height when a limited number of rows are shown. Since: 1.10
+        */
+        scrollCollapse?: boolean;
+
+        /**
+        * Set an initial filter in DataTables and / or filtering options. Since: 1.10
+        */
+        search?: SearchSettings;
+
+        /**
+        * Define an initial search for individual columns. Since: 1.10
+        */
+        searchCols?: SearchSettings[];
+
+        /**
+        * Set a throttle frequency for searching. Since: 1.10
+        */
+        searchDelay?: number;
+
+        /**
+        * Saved state validity duration. Since: 1.10
+        */
+        stateDuration?: number;
+
+        /**
+        * Set the zebra stripe class names for the rows in the table. Since: 1.10
+        */
+        stripeClasses?: string[];
+
+        /**
+        * Tab index control for keyboard navigation. Since: 1.10
+        */
+        tabIndex?: number;
+
+        //#endregion "Options"
+
+        //#region "Callbacks"
+
+        /**
+        * Callback for whenever a TR element is created for the table's body. Since: 1.10
+        */
+        createdRow?: FunctionCreateRow;
+
+        /**
+        * Function that is called every time DataTables performs a draw. Since: 1.10
+        */
+        drawCallback?: FunctionDrawCallback;
+
+        /**
+        * Footer display callback function. Since: 1.10
+        */
+        footerCallback?: FunctionFooterCallback;
+
+        /**
+        * Number formatting callback function. Since: 1.10
+        */
+        formatNumber?: FunctionFormatNumber;
+
+        /**
+        * Header display callback function. Since: 1.10
+        */
+        headerCallback?: FunctionHeaderCallback;
+
+        /**
+        * Table summary information display callback. Since: 1.10
+        */
+        infoCallback?: FunctionInfoCallback;
+
+        /**
+        * Initialisation complete callback. Since: 1.10
+        */
+        initComplete?: FunctionInitComplete;
+
+        /**
+        * Pre-draw callback. Since: 1.10
+        */
+        preDrawCallback?: FunctionPreDrawCallback;
+
+        /**
+        * Row draw callback.. Since: 1.10
+        */
+        rowCallback?: FunctionRowCallback;
+
+        /**
+        * Callback that defines where and how a saved state should be loaded. Since: 1.10
+        */
+        stateLoadCallback?: FunctionStateLoadCallback;
+
+        /**
+        * State loaded callback. Since: 1.10
+        */
+        stateLoaded?: FunctionStateLoaded;
+
+        /**
+        * State loaded - data manipulation callback. Since: 1.10
+        */
+        stateLoadParams?: FunctionStateLoadParams;
+
+        /**
+        * Callback that defines how the table state is stored and where. Since: 1.10
+        */
+        stateSaveCallback?: FunctionStateSaveCallback;
+
+        /**
+        * State save - data manipulation callback. Since: 1.10
+        */
+        stateSaveParams?: FunctionStateSaveParams;
+
+        //#endregion "Callbacks"
+
+        //#region "Language"
+
+        language?: LanguageSettings;
+
+        //#endregion "Language"
+    }
+
+    //#region "ajax-settings"
+
+    export interface AjaxDataRequest {
+        draw: number;
+        start: number;
+        length: number;
+        data: any;
+        order: AjaxDataRequestOrder[];
+        columns: AjaxDataRequestColumn[];
+        search: AjaxDataRequestSearch;
+    }
+
+    export interface AjaxDataRequestSearch {
+        value: string;
+        regex: boolean;
+    }
+
+    export interface AjaxDataRequestOrder {
+        column: number;
+        dir: string;
+    }
+
+    export interface AjaxDataRequestColumn {
+        data: string | number;
+        name: string;
+        searchable: boolean;
+        orderable: boolean;
+        search: AjaxDataRequestSearch;
+    }
+
+    export interface AjaxData {
+        draw?: number;
+        recordsTotal?: number;
+        recordsFiltered?: number;
+        data: any;
+        error?: string;
+    }
+
+    interface AjaxSettings extends JQueryAjaxSettings {
+        /**
+        * Add or modify data submitted to the server upon an Ajax request. Since: 1.10
+        */
+        data?: Object | FunctionAjaxData;
+
+        /**
+        * Data property or manipulation method for table data. Since: 1.10
+        */
+        dataSrc?: string | Function;
+    }
+
+    interface FunctionAjax {
+        (data: Object, callback: Function, settings: SettingsLegacy): void;
+    }
+
+    interface FunctionAjaxData {
+        /*
+        * @param data Data that DataTables has constructed for the request.
+        * @param settings DataTables settings object. Since 1.10.6
+        */
+        (data: Object, settings: Settings): string | Object;
+    }
+
+    //#endregion "ajax-settings"
+
+    //#region "colunm-settings"
+
+    export interface ColumnSettings {
+        /**
+        * Cell type to be created for a column. th/td Since: 1.10
+        */
+        cellType?: string;
+
+        /**
+        * Class to assign to each cell in the column. Since: 1.10
+        */
+        className?: string;
+
+        /**
+        * Add padding to the text content used when calculating the optimal with for a table. Since: 1.10
+        */
+        contentPadding?: string;
+
+        /**
+        * Cell created callback to allow DOM manipulation. Since: 1.10
+        */
+        createdCell?: FunctionColumnCreatedCell;
+
+        /**
+        * Class to assign to each cell in the column. Since: 1.10
+        */
+        data?: number | string | ObjectColumnData | FunctionColumnData;
+
+        /**
+        * Set default, static, content for a column. Since: 1.10
+        */
+        defaultContent?: string;
+
+        /**
+        * Set a descriptive name for a column. Since: 1.10
+        */
+        name?: string;
+
+        /**
+        * Enable or disable ordering on this column. Since: 1.10
+        */
+        orderable?: boolean;
+
+        /**
+        * Define multiple column ordering as the default order for a column. Since: 1.10
+        */
+        orderData?: number | number[];
+
+        /**
+        * Live DOM sorting type assignment. Since: 1.10
+        */
+        orderDataType?: string;
+
+        /**
+        * Order direction application sequence. Since: 1.10
+        */
+        orderSequence?: string[];
+
+        /**
+        * Render (process) the data for use in the table. Since: 1.10
+        */
+        render?: number | string | ObjectColumnRender | FunctionColumnRender;
+
+        /**
+        * Enable or disable filtering on the data in this column. Since: 1.10
+        */
+        searchable?: boolean;
+
+        /**
+        * Set the column title. Since: 1.10
+        */
+        title?: string;
+
+        /**
+        * Set the column type - used for filtering and sorting string processing. Since: 1.10
+        */
+        type?: string;
+
+        /**
+        * Enable or disable the display of this column. Since: 1.10
+        */
+        visible?: boolean;
+
+        /**
+        * Column width assignment. Since: 1.10
+        */
+        width?: string;
+    }
+
+    interface ColumnDefsSettings extends ColumnSettings {
+        targets: string | number | (number | string)[]
+    }
+
+    interface FunctionColumnCreatedCell {
+        (cell: Node, cellData: any, rowData: any, row: number, col: number): void;
+    }
+
+    interface FunctionColumnData {
+        (row: any, t: 'set', s: any, meta: CellMetaSettings): void;
+        (row: any, t: 'display' | 'sort' | 'filter' | 'type', s: undefined, meta: CellMetaSettings): any;
+    }
+
+    interface ObjectColumnData {
+        _: string;
+        filter?: string;
+        display?: string;
+        type?: string;
+        sort?: string;
+    }
+
+    interface ObjectColumnRender extends ObjectColumnData {
+    }
+
+    interface FunctionColumnRender {
+        (data: any, t: string, row: any, meta: CellMetaSettings): void;
+    }
+
+    interface CellMetaSettings {
+        row: number;
+        col: number;
+        settings: DataTables.Settings;
+    }
+
+    //#endregion "colunm-settings"
+
+    //#region "other-settings"
+
+    export interface RendererSettings {
+        header?: string;
+        pageButton?: string;
+    }
+
+    export interface SearchSettings {
+        /**
+        * Control case-sensitive filtering option. Since: 1.10
+        */
+        caseInsensitive?: boolean;
+
+        /**
+        * Enable / disable escaping of regular expression characters in the search term. Since: 1.10
+        */
+        regex?: boolean;
+
+        /**
+        * Enable / disable DataTables' smart filtering. Since: 1.10
+        */
+        smart?: boolean;
+
+        /**
+        * Set an initial filtering condition on the table. Since: 1.10
+        */
+        search?: string;
+    }
+
+    //#endregion "other-settings"
+
+    //#region "callback-functions"
+
+    interface FunctionCreateRow {
+        (row: Node, data: any[] | Object, dataIndex: number): void;
+    }
+
+    interface FunctionDrawCallback {
+        (settings: SettingsLegacy): void;
+    }
+
+    interface FunctionFooterCallback {
+        (tfoot: Node, data: any[], start: number, end: number, display: any[]): void;
+    }
+
+    interface FunctionFormatNumber {
+        (formatNumber: number): void;
+    }
+
+    interface FunctionHeaderCallback {
+        (thead: Node, data: any[], start: number, end: number, display: any[]): void;
+    }
+
+    interface FunctionInfoCallback {
+        (settings: SettingsLegacy, start: number, end: number, mnax: number, total: number, pre: string): void;
+    }
+
+    interface FunctionInitComplete {
+        (settings: SettingsLegacy, json: Object): void;
+    }
+
+    interface FunctionPreDrawCallback {
+        (settings: SettingsLegacy): void;
+    }
+
+    interface FunctionRowCallback {
+        (row: Node, data: any[] | Object, index: number): void;
+    }
+
+    interface FunctionStateLoadCallback {
+        (settings: SettingsLegacy): void;
+    }
+
+    interface FunctionStateLoaded {
+        (settings: SettingsLegacy, data: Object): void;
+    }
+
+    interface FunctionStateLoadParams {
+        (settings: SettingsLegacy, data: Object): void;
+    }
+
+    interface FunctionStateSaveCallback {
+        (settings: SettingsLegacy, data: Object): void;
+    }
+
+    interface FunctionStateSaveParams {
+        (settings: SettingsLegacy, data: Object): void;
+    }
+
+    //#endregion "callback-functions"
+
+    //#region "language-settings"
+
+    // these are all optional
+    interface LanguageSettings {
+        emptyTable?: string;
+        info?: string;
+        infoEmpty?: string;
+        infoFiltered?: string;
+        infoPostFix?: string;
+        thousands?: string;
+        lengthMenu?: string;
+        loadingRecords?: string;
+        processing?: string;
+        search?: string;
+        zeroRecords?: string;
+        paginate?: LanguagePaginateSettings;
+        aria?: LanguageAriaSettings;
+        url?: string;
+    }
+
+    interface LanguagePaginateSettings {
+        first: string;
+        last: string;
+        next: string;
+        previous: string;
+    }
+
+    interface LanguageAriaSettings {
+        sortAscending: string;
+        sortDescending: string;
+    }
+
+    //#endregion "language-settings"
+
+    //#endregion "Settings"
+
+    //#region "SettingsLegacy"
+
+    interface ArrayStringNode {
+        [index: string]: Node;
+    }
+
+    export interface SettingsLegacy {
+        ajax: any;
+        oApi: any;
+        oFeatures: FeaturesLegacy;
+        oScroll: ScrollingLegacy;
+        oLanguage: LanguageLegacy; // | { fnInfoCallback: FunctionInfoCallback; };
+        oBrowser: BrowserLegacy;
+        aanFeatures: ArrayStringNode[][];
+        aoData: RowLegacy[];
+        aIds: any;
+        aiDisplay: number[];
+        aiDisplayMaster: number[];
+        aoColumns: ColumnLegacy[];
+        aoHeader: any[];
+        aoFooter: any[];
+        asDataSearch: string[];
+        oPreviousSearch: any;
+        aoPreSearchCols: any[];
+        aaSorting: any[][];
+        aaSortingFixed: any[][];
+        asStripeClasses: string[];
+        asDestroyStripes: string[];
+        sDestroyWidth: number;
+        aoRowCallback: FunctionRowCallback[];
+        aoHeaderCallback: FunctionHeaderCallback[];
+        aoFooterCallback: FunctionFooterCallback[];
+        aoDrawCallback: FunctionDrawCallback[];
+        aoRowCreatedCallback: FunctionCreateRow[];
+        aoPreDrawCallback: FunctionPreDrawCallback[];
+        aoInitComplete: FunctionInitComplete[];
+        aoStateSaveParams: FunctionStateSaveParams[];
+        aoStateLoadParams: FunctionStateLoadParams[];
+        aoStateLoaded: FunctionStateLoaded[];
+        sTableId: string;
+        nTable: Node;
+        nTHead: Node;
+        nTFoot: Node;
+        nTBody: Node;
+        nTableWrapper: Node;
+        bDeferLoading: boolean;
+        bInitialized: boolean;
+        aoOpenRows: any[];
+        sDom: string;
+        sPaginationType: string;
+        iCookieDuration: number;
+        sCookiePrefix: string;
+        fnCookieCallback: CookieCallbackLegacy;
+        aoStateSave: FunctionStateSaveCallback[];
+        aoStateLoad: FunctionStateLoadCallback[];
+        oLoadedState: any;
+        sAjaxSource: string;
+        sAjaxDataProp: string;
+        bAjaxDataGet: boolean;
+        jqXHR: any;
+        fnServerData: any;
+        aoServerParams: any[];
+        sServerMethod: string;
+        fnFormatNumber: FunctionFormatNumber;
+        aLengthMenu: any[];
+        iDraw: number;
+        bDrawing: boolean;
+        iDrawError: number;
+        _iDisplayLength: number;
+        _iDisplayStart: number;
+        _iDisplayEnd: number;
+        _iRecordsTotal: number;
+        _iRecordsDisplay: number;
+        bJUI: boolean;
+        oClasses: any;
+        bFiltered: boolean;
+        bSorted: boolean;
+        bSortCellsTop: boolean;
+        oInit: any;
+        aoDestroyCallback: any[];
+        fnRecordsTotal: () => number;
+        fnRecordsDisplay: () => number;
+        fnDisplayEnd: () => number;
+        oInstance: any;
+        sInstance: string;
+        iTabIndex: number;
+        nScrollHead: Node;
+        nScrollFoot: Node;
+        rowIdFn: (mSource: string | number | Function) => Function;
+    }
+
+    export interface BrowserLegacy {
+        barWidth: number,
+        bBounding: boolean,
+        bScrollbarLeft: boolean,
+        bScrollOversize: boolean
+    }
+
+    export interface FeaturesLegacy {
+        bAutoWidth: boolean;
+        bDeferRender: boolean;
+        bFilter: boolean;
+        bInfo: boolean;
+        bLengthChange: boolean;
+        bPaginate: boolean;
+        bProcessing: boolean;
+        bServerSide: boolean;
+        bSort: boolean;
+        bSortClasses: boolean;
+        bStateSave: boolean;
+    }
+
+    export interface ScrollingLegacy {
+        bAutoCss: boolean;
+        bCollapse: boolean;
+        bInfinite: boolean;
+        iBarWidth: number;
+        iLoadGap: number;
+        sX: string;
+        sY: string;
+    }
+
+    export interface RowLegacy {
+        nTr: Node;
+        _aData: any;
+        _aSortData: any[];
+        _anHidden: Node[];
+        _sRowStripe: string;
+    }
+
+    export interface ColumnLegacy {
+        aDataSort: any;
+        asSorting: string[];
+        bSearchable: boolean;
+        bSortable: boolean;
+        bVisible: boolean;
+        _bAutoType: boolean;
+        fnCreatedCell: FunctionColumnCreatedCell;
+        fnGetData: (data: any, specific: string) => any;
+        fnSetData: (data: any, value: any) => void;
+        mData: any;
+        mRender: any;
+        nTh: Node;
+        nIf: Node;
+        sClass: string;
+        sContentPadding: string;
+        sDefaultContent: string;
+        sName: string;
+        sSortDataType: string;
+        sSortingClass: string;
+        sSortingClassJUI: string;
+        sTitle: string;
+        sType: string;
+        sWidth: string;
+        sWidthOrig: string;
+    }
+
+    export interface CookieCallbackLegacy {
+        (name: string, data: any, expires: string, path: string, cookie: string): void;
+    }
+
+    export interface LanguageLegacy {
+        oAria?: LanguageAriaLegacy;
+        oPaginate?: LanguagePaginateLegacy;
+        sEmptyTable?: string;
+        sInfo?: string;
+        sInfoEmpty?: string;
+        sInfoFiltered?: string;
+        sInfoPostFix?: string;
+        sInfoThousands?: string;
+        sLengthMenu?: string;
+        sLoadingRecords?: string;
+        sProcessing?: string;
+        sSearch?: string;
+        sUrl?: string;
+        sZeroRecords?: string;
+    }
+
+    export interface LanguageAriaLegacy {
+        sSortAscending?: string;
+        sSortDescending?: string;
+    }
+
+    export interface LanguagePaginateLegacy {
+        sFirst?: string;
+        sLast?: string;
+        sNext?: string;
+        sPrevious?: string;
+    }
+    //#endregion "SettingsLegacy"
+
+}
diff --git a/client/typings/globals/jquery.datatables/typings.json b/client/typings/globals/jquery.datatables/typings.json
new file mode 100644
index 0000000000000000000000000000000000000000..01c72cb48a96047c50f5d995af2a5178c23a4d91
--- /dev/null
+++ b/client/typings/globals/jquery.datatables/typings.json
@@ -0,0 +1,8 @@
+{
+  "resolution": "main",
+  "tree": {
+    "src": "https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/91ffde5df1f7067254394d117d3654faea23c862/jquery.datatables/index.d.ts",
+    "raw": "registry:dt/jquery.datatables#1.10.9+20170207101311",
+    "typings": "https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/91ffde5df1f7067254394d117d3654faea23c862/jquery.datatables/index.d.ts"
+  }
+}
diff --git a/client/typings/globals/jquery.timeago/index.d.ts b/client/typings/globals/jquery.timeago/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..272e73d211581f907ae49baf74494e99be8a63ff
--- /dev/null
+++ b/client/typings/globals/jquery.timeago/index.d.ts
@@ -0,0 +1,56 @@
+// Generated by typings
+// Source: https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/cd4debea25a280da0808d4ff2ca5a4bdb34bd28b/jquery.timeago/index.d.ts
+interface TimeagoSetings {
+    refreshMillis?: number;
+    allowFuture?: boolean;
+    strings?: {
+        prefixAgo?: string;
+        prefixFromNow?: string;
+        suffixAgo?: string;
+        suffixFromNow?: string;
+
+        // Those can be string or Function
+        seconds?: any;
+        minute?: any;
+        minutes?: any;
+        hour?: any;
+        hours?: any;
+        day?: any;
+        days?: any;
+        month?: any;
+        months?: any;
+        year?: any;
+        years?: any;
+        
+        wordSeparator?: string;
+        numbers?: any[];
+    };
+}
+
+interface TimeagoStatic {
+    (timestamp: Date): string;
+    (timestamp: number): string;
+    (timestamp: string): string;
+    (timestamp: Element): string;
+    (timestamp: JQuery): string;
+    settings: TimeagoSetings;
+    inWords(distanceMillis: Date): string;
+    inWords(distanceMillis: number): string;
+    parse(iso8601: string): Date;
+    datetime(element: Element): Date;
+    datetime(element: JQuery): Date;
+    isTime(element: Element): boolean;
+    isTime(element: JQuery): boolean;
+}
+
+interface Timeago {
+    (): JQuery;
+}
+
+interface JQueryStatic {
+    timeago: TimeagoStatic;
+}
+
+interface JQuery {
+    timeago: Timeago;
+}
diff --git a/client/typings/globals/jquery.timeago/typings.json b/client/typings/globals/jquery.timeago/typings.json
new file mode 100644
index 0000000000000000000000000000000000000000..ab562dd31e94ab2836b1e3323200cce0f47d5e58
--- /dev/null
+++ b/client/typings/globals/jquery.timeago/typings.json
@@ -0,0 +1,8 @@
+{
+  "resolution": "main",
+  "tree": {
+    "src": "https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/cd4debea25a280da0808d4ff2ca5a4bdb34bd28b/jquery.timeago/index.d.ts",
+    "raw": "registry:dt/jquery.timeago#1.0.2+20161128184045",
+    "typings": "https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/cd4debea25a280da0808d4ff2ca5a4bdb34bd28b/jquery.timeago/index.d.ts"
+  }
+}
diff --git a/client/typings/globals/jquery/index.d.ts b/client/typings/globals/jquery/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..203b8a38a43e5f940d9a980fa866b4151216dab0
--- /dev/null
+++ b/client/typings/globals/jquery/index.d.ts
@@ -0,0 +1,3756 @@
+// Generated by typings
+// Source: https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/39772baa2c32da872c8482088c784eb497e303c0/jquery/index.d.ts
+interface JQueryAjaxSettings {
+    /**
+     * The content type sent in the request header that tells the server what kind of response it will accept in return. If the accepts setting needs modification, it is recommended to do so once in the $.ajaxSetup() method.
+     */
+    accepts?: any;
+    /**
+     * By default, all requests are sent asynchronously (i.e. this is set to true by default). If you need synchronous requests, set this option to false. Cross-domain requests and dataType: "jsonp" requests do not support synchronous operation. Note that synchronous requests may temporarily lock the browser, disabling any actions while the request is active. As of jQuery 1.8, the use of async: false with jqXHR ($.Deferred) is deprecated; you must use the success/error/complete callback options instead of the corresponding methods of the jqXHR object such as jqXHR.done() or the deprecated jqXHR.success().
+     */
+    async?: boolean;
+    /**
+     * A pre-request callback function that can be used to modify the jqXHR (in jQuery 1.4.x, XMLHTTPRequest) object before it is sent. Use this to set custom headers, etc. The jqXHR and settings objects are passed as arguments. This is an Ajax Event. Returning false in the beforeSend function will cancel the request. As of jQuery 1.5, the beforeSend option will be called regardless of the type of request.
+     */
+    beforeSend? (jqXHR: JQueryXHR, settings: JQueryAjaxSettings): any;
+    /**
+     * If set to false, it will force requested pages not to be cached by the browser. Note: Setting cache to false will only work correctly with HEAD and GET requests. It works by appending "_={timestamp}" to the GET parameters. The parameter is not needed for other types of requests, except in IE8 when a POST is made to a URL that has already been requested by a GET.
+     */
+    cache?: boolean;
+    /**
+     * A function to be called when the request finishes (after success and error callbacks are executed). The function gets passed two arguments: The jqXHR (in jQuery 1.4.x, XMLHTTPRequest) object and a string categorizing the status of the request ("success", "notmodified", "error", "timeout", "abort", or "parsererror"). As of jQuery 1.5, the complete setting can accept an array of functions. Each function will be called in turn. This is an Ajax Event.
+     */
+    complete? (jqXHR: JQueryXHR, textStatus: string): any;
+    /**
+     * An object of string/regular-expression pairs that determine how jQuery will parse the response, given its content type. (version added: 1.5)
+     */
+    contents?: { [key: string]: any; };
+    //According to jQuery.ajax source code, ajax's option actually allows contentType to set to "false"
+    // https://github.com/DefinitelyTyped/DefinitelyTyped/issues/742
+    /**
+     * When sending data to the server, use this content type. Default is "application/x-www-form-urlencoded; charset=UTF-8", which is fine for most cases. If you explicitly pass in a content-type to $.ajax(), then it is always sent to the server (even if no data is sent). The W3C XMLHttpRequest specification dictates that the charset is always UTF-8; specifying another charset will not force the browser to change the encoding.
+     */
+    contentType?: any;
+    /**
+     * This object will be made the context of all Ajax-related callbacks. By default, the context is an object that represents the ajax settings used in the call ($.ajaxSettings merged with the settings passed to $.ajax).
+     */
+    context?: any;
+    /**
+     * An object containing dataType-to-dataType converters. Each converter's value is a function that returns the transformed value of the response. (version added: 1.5)
+     */
+    converters?: { [key: string]: any; };
+    /**
+     * If you wish to force a crossDomain request (such as JSONP) on the same domain, set the value of crossDomain to true. This allows, for example, server-side redirection to another domain. (version added: 1.5)
+     */
+    crossDomain?: boolean;
+    /**
+     * Data to be sent to the server. It is converted to a query string, if not already a string. It's appended to the url for GET-requests. See processData option to prevent this automatic processing. Object must be key-value pairs. If value is an Array, jQuery serializes multiple values with same key based on the value of the traditional setting (described below).
+     */
+    data?: any;
+    /**
+     * A function to be used to handle the raw response data of XMLHttpRequest.This is a pre-filtering function to sanitize the response. You should return the sanitized data. The function accepts two arguments: The raw data returned from the server and the 'dataType' parameter.
+     */
+    dataFilter? (data: any, ty: any): any;
+    /**
+     * The type of data that you're expecting back from the server. If none is specified, jQuery will try to infer it based on the MIME type of the response (an XML MIME type will yield XML, in 1.4 JSON will yield a JavaScript object, in 1.4 script will execute the script, and anything else will be returned as a string).
+     */
+    dataType?: string;
+    /**
+     * A function to be called if the request fails. The function receives three arguments: The jqXHR (in jQuery 1.4.x, XMLHttpRequest) object, a string describing the type of error that occurred and an optional exception object, if one occurred. Possible values for the second argument (besides null) are "timeout", "error", "abort", and "parsererror". When an HTTP error occurs, errorThrown receives the textual portion of the HTTP status, such as "Not Found" or "Internal Server Error." As of jQuery 1.5, the error setting can accept an array of functions. Each function will be called in turn. Note: This handler is not called for cross-domain script and cross-domain JSONP requests. This is an Ajax Event.
+     */
+    error? (jqXHR: JQueryXHR, textStatus: string, errorThrown: string): any;
+    /**
+     * Whether to trigger global Ajax event handlers for this request. The default is true. Set to false to prevent the global handlers like ajaxStart or ajaxStop from being triggered. This can be used to control various Ajax Events.
+     */
+    global?: boolean;
+    /**
+     * An object of additional header key/value pairs to send along with requests using the XMLHttpRequest transport. The header X-Requested-With: XMLHttpRequest is always added, but its default XMLHttpRequest value can be changed here. Values in the headers setting can also be overwritten from within the beforeSend function. (version added: 1.5)
+     */
+    headers?: { [key: string]: any; };
+    /**
+     * Allow the request to be successful only if the response has changed since the last request. This is done by checking the Last-Modified header. Default value is false, ignoring the header. In jQuery 1.4 this technique also checks the 'etag' specified by the server to catch unmodified data.
+     */
+    ifModified?: boolean;
+    /**
+     * Allow the current environment to be recognized as "local," (e.g. the filesystem), even if jQuery does not recognize it as such by default. The following protocols are currently recognized as local: file, *-extension, and widget. If the isLocal setting needs modification, it is recommended to do so once in the $.ajaxSetup() method. (version added: 1.5.1)
+     */
+    isLocal?: boolean;
+    /**
+     * Override the callback function name in a jsonp request. This value will be used instead of 'callback' in the 'callback=?' part of the query string in the url. So {jsonp:'onJSONPLoad'} would result in 'onJSONPLoad=?' passed to the server. As of jQuery 1.5, setting the jsonp option to false prevents jQuery from adding the "?callback" string to the URL or attempting to use "=?" for transformation. In this case, you should also explicitly set the jsonpCallback setting. For example, { jsonp: false, jsonpCallback: "callbackName" }
+     */
+    jsonp?: any;
+    /**
+     * Specify the callback function name for a JSONP request. This value will be used instead of the random name automatically generated by jQuery. It is preferable to let jQuery generate a unique name as it'll make it easier to manage the requests and provide callbacks and error handling. You may want to specify the callback when you want to enable better browser caching of GET requests. As of jQuery 1.5, you can also use a function for this setting, in which case the value of jsonpCallback is set to the return value of that function.
+     */
+    jsonpCallback?: any;
+    /**
+     * The HTTP method to use for the request (e.g. "POST", "GET", "PUT"). (version added: 1.9.0)
+     */
+    method?: string;
+    /**
+     * A MIME type to override the XHR MIME type. (version added: 1.5.1)
+     */
+    mimeType?: string;
+    /**
+     * A password to be used with XMLHttpRequest in response to an HTTP access authentication request.
+     */
+    password?: string;
+    /**
+     * By default, data passed in to the data option as an object (technically, anything other than a string) will be processed and transformed into a query string, fitting to the default content-type "application/x-www-form-urlencoded". If you want to send a DOMDocument, or other non-processed data, set this option to false.
+     */
+    processData?: boolean;
+    /**
+     * Only applies when the "script" transport is used (e.g., cross-domain requests with "jsonp" or "script" dataType and "GET" type). Sets the charset attribute on the script tag used in the request. Used when the character set on the local page is not the same as the one on the remote script.
+     */
+    scriptCharset?: string;
+    /**
+     * An object of numeric HTTP codes and functions to be called when the response has the corresponding code. f the request is successful, the status code functions take the same parameters as the success callback; if it results in an error (including 3xx redirect), they take the same parameters as the error callback. (version added: 1.5)
+     */
+    statusCode?: { [key: string]: any; };
+    /**
+     * A function to be called if the request succeeds. The function gets passed three arguments: The data returned from the server, formatted according to the dataType parameter; a string describing the status; and the jqXHR (in jQuery 1.4.x, XMLHttpRequest) object. As of jQuery 1.5, the success setting can accept an array of functions. Each function will be called in turn. This is an Ajax Event.
+     */
+    success? (data: any, textStatus: string, jqXHR: JQueryXHR): any;
+    /**
+     * Set a timeout (in milliseconds) for the request. This will override any global timeout set with $.ajaxSetup(). The timeout period starts at the point the $.ajax call is made; if several other requests are in progress and the browser has no connections available, it is possible for a request to time out before it can be sent. In jQuery 1.4.x and below, the XMLHttpRequest object will be in an invalid state if the request times out; accessing any object members may throw an exception. In Firefox 3.0+ only, script and JSONP requests cannot be cancelled by a timeout; the script will run even if it arrives after the timeout period.
+     */
+    timeout?: number;
+    /**
+     * Set this to true if you wish to use the traditional style of parameter serialization.
+     */
+    traditional?: boolean;
+    /**
+     * The type of request to make ("POST" or "GET"), default is "GET". Note: Other HTTP request methods, such as PUT and DELETE, can also be used here, but they are not supported by all browsers.
+     */
+    type?: string;
+    /**
+     * A string containing the URL to which the request is sent.
+     */
+    url?: string;
+    /**
+     * A username to be used with XMLHttpRequest in response to an HTTP access authentication request.
+     */
+    username?: string;
+    /**
+     * Callback for creating the XMLHttpRequest object. Defaults to the ActiveXObject when available (IE), the XMLHttpRequest otherwise. Override to provide your own implementation for XMLHttpRequest or enhancements to the factory.
+     */
+    xhr?: any;
+    /**
+     * An object of fieldName-fieldValue pairs to set on the native XHR object. For example, you can use it to set withCredentials to true for cross-domain requests if needed. In jQuery 1.5, the withCredentials property was not propagated to the native XHR and thus CORS requests requiring it would ignore this flag. For this reason, we recommend using jQuery 1.5.1+ should you require the use of it. (version added: 1.5.1)
+     */
+    xhrFields?: { [key: string]: any; };
+}
+
+/**
+ * Interface for the jqXHR object
+ * @see {@link https://api.jquery.com/jQuery.ajax/#jqXHR}
+ */
+interface JQueryXHR extends XMLHttpRequest, JQueryPromise<any> {
+    /**
+     * The .overrideMimeType() method may be used in the beforeSend() callback function, for example, to modify the response content-type header. As of jQuery 1.5.1, the jqXHR object also contains the overrideMimeType() method (it was available in jQuery 1.4.x, as well, but was temporarily removed in jQuery 1.5).
+     */
+    overrideMimeType(mimeType: string): any;
+    /**
+     * Cancel the request.
+     *
+     * @param statusText A string passed as the textStatus parameter for the done callback. Default value: "canceled"
+     */
+    abort(statusText?: string): void;
+    /**
+     * Incorporates the functionality of the .done() and .fail() methods, allowing (as of jQuery 1.8) the underlying Promise to be manipulated. Refer to deferred.then() for implementation details.
+     */
+    then<R>(doneCallback: (data: any, textStatus: string, jqXHR: JQueryXHR) => R|JQueryPromise<R>, failCallback?: (jqXHR: JQueryXHR, textStatus: string, errorThrown: any) => void): JQueryPromise<R>;
+    /**
+     * Property containing the parsed response if the response content type is json
+     */
+    responseJSON?: any;
+    /**
+     * A function to be called if the request fails.
+     */
+    error(xhr: JQueryXHR, textStatus: string, errorThrown: string): void;
+}
+
+/**
+ * Interface for the JQuery callback
+ * @see {@link https://api.jquery.com/category/callbacks-object/}
+ */
+interface JQueryCallback {
+    /**
+     * Add a callback or a collection of callbacks to a callback list.
+     *
+     * @param callbacks A function, or array of functions, that are to be added to the callback list.
+     * @see {@link https://api.jquery.com/callbacks.add/}
+     */
+    add(callbacks: Function): JQueryCallback;
+    /**
+     * Add a callback or a collection of callbacks to a callback list.
+     *
+     * @param callbacks A function, or array of functions, that are to be added to the callback list.
+     * @see {@link https://api.jquery.com/callbacks.add/}
+     */
+    add(callbacks: Function[]): JQueryCallback;
+
+    /**
+     * Disable a callback list from doing anything more.
+     * @see {@link https://api.jquery.com/callbacks.disable/}
+     */
+    disable(): JQueryCallback;
+
+    /**
+     * Determine if the callbacks list has been disabled.
+     * @see {@link https://api.jquery.com/callbacks.disabled/}
+     */
+    disabled(): boolean;
+
+    /**
+     * Remove all of the callbacks from a list.
+     * @see {@link https://api.jquery.com/callbacks.empty/}
+     */
+    empty(): JQueryCallback;
+
+    /**
+     * Call all of the callbacks with the given arguments
+     *
+     * @param arguments The argument or list of arguments to pass back to the callback list.
+     * @see {@link https://api.jquery.com/callbacks.fire/}
+     */
+    fire(...arguments: any[]): JQueryCallback;
+
+    /**
+     * Determine if the callbacks have already been called at least once.
+     * @see {@link https://api.jquery.com/callbacks.fired/}
+     */
+    fired(): boolean;
+
+    /**
+     * Call all callbacks in a list with the given context and arguments.
+     *
+     * @param context A reference to the context in which the callbacks in the list should be fired.
+     * @param arguments An argument, or array of arguments, to pass to the callbacks in the list.
+     * @see {@link https://api.jquery.com/callbacks.fireWith/}
+     */
+    fireWith(context?: any, args?: any[]): JQueryCallback;
+
+    /**
+     * Determine whether a supplied callback is in a list
+     *
+     * @param callback The callback to search for.
+     * @see {@link https://api.jquery.com/callbacks.has/}
+     */
+    has(callback: Function): boolean;
+
+    /**
+     * Lock a callback list in its current state.
+     * @see {@link https://api.jquery.com/callbacks.lock/}
+     */
+    lock(): JQueryCallback;
+
+    /**
+     * Determine if the callbacks list has been locked.
+     * @see {@link https://api.jquery.com/callbacks.locked/}
+     */
+    locked(): boolean;
+
+    /**
+     * Remove a callback or a collection of callbacks from a callback list.
+     *
+     * @param callbacks A function, or array of functions, that are to be removed from the callback list.
+     * @see {@link https://api.jquery.com/callbacks.remove/}
+     */
+    remove(callbacks: Function): JQueryCallback;
+    /**
+     * Remove a callback or a collection of callbacks from a callback list.
+     *
+     * @param callbacks A function, or array of functions, that are to be removed from the callback list.
+     * @see {@link https://api.jquery.com/callbacks.remove/}
+     */
+    remove(callbacks: Function[]): JQueryCallback;
+}
+
+/**
+ * Allows jQuery Promises to interop with non-jQuery promises
+ */
+interface JQueryGenericPromise<T> {
+    /**
+     * Add handlers to be called when the Deferred object is resolved, rejected, or still in progress.
+     *
+     * @param doneFilter A function that is called when the Deferred is resolved.
+     * @param failFilter An optional function that is called when the Deferred is rejected.
+     * @see {@link https://api.jquery.com/deferred.then/#deferred-then-doneFilter-failFilter-progressFilter}
+     */
+    then<U>(doneFilter: (value?: T, ...values: any[]) => U|JQueryPromise<U>, failFilter?: (...reasons: any[]) => any, progressFilter?: (...progression: any[]) => any): JQueryPromise<U>;
+
+    /**
+     * Add handlers to be called when the Deferred object is resolved, rejected, or still in progress.
+     *
+     * @param doneFilter A function that is called when the Deferred is resolved.
+     * @param failFilter An optional function that is called when the Deferred is rejected.
+     * @see {@link https://api.jquery.com/deferred.then/#deferred-then-doneFilter-failFilter-progressFilter}
+     */
+    then(doneFilter: (value?: T, ...values: any[]) => void, failFilter?: (...reasons: any[]) => any, progressFilter?: (...progression: any[]) => any): JQueryPromise<void>;
+}
+
+/**
+ * Interface for the JQuery promise/deferred callbacks
+ */
+interface JQueryPromiseCallback<T> {
+    (value?: T, ...args: any[]): void;
+}
+
+interface JQueryPromiseOperator<T, U> {
+    (callback1: JQueryPromiseCallback<T>|JQueryPromiseCallback<T>[], ...callbacksN: Array<JQueryPromiseCallback<any>|JQueryPromiseCallback<any>[]>): JQueryPromise<U>;
+}
+
+/**
+ * Interface for the JQuery promise, part of callbacks
+ * @see {@link https://api.jquery.com/category/deferred-object/}
+ */
+interface JQueryPromise<T> extends JQueryGenericPromise<T> {
+    /**
+     * Determine the current state of a Deferred object.
+     * @see {@link https://api.jquery.com/deferred.state/}
+     */
+    state(): string;
+    /**
+     * Add handlers to be called when the Deferred object is either resolved or rejected.
+     *
+     * @param alwaysCallback1 A function, or array of functions, that is called when the Deferred is resolved or rejected.
+     * @param alwaysCallbackN Optional additional functions, or arrays of functions, that are called when the Deferred is resolved or rejected.
+     * @see {@link https://api.jquery.com/deferred.always/}
+     */
+    always(alwaysCallback1?: JQueryPromiseCallback<any>|JQueryPromiseCallback<any>[], ...alwaysCallbackN: Array<JQueryPromiseCallback<any>|JQueryPromiseCallback<any>[]>): JQueryPromise<T>;
+    /**
+     * Add handlers to be called when the Deferred object is resolved.
+     *
+     * @param doneCallback1 A function, or array of functions, that are called when the Deferred is resolved.
+     * @param doneCallbackN Optional additional functions, or arrays of functions, that are called when the Deferred is resolved.
+     * @see {@link https://api.jquery.com/deferred.done/}
+     */
+    done(doneCallback1?: JQueryPromiseCallback<T>|JQueryPromiseCallback<T>[], ...doneCallbackN: Array<JQueryPromiseCallback<T>|JQueryPromiseCallback<T>[]>): JQueryPromise<T>;
+    /**
+     * Add handlers to be called when the Deferred object is rejected.
+     *
+     * @param failCallback1 A function, or array of functions, that are called when the Deferred is rejected.
+     * @param failCallbackN Optional additional functions, or arrays of functions, that are called when the Deferred is rejected.
+     * @see {@link https://api.jquery.com/deferred.fail/}
+     */
+    fail(failCallback1?: JQueryPromiseCallback<any>|JQueryPromiseCallback<any>[], ...failCallbackN: Array<JQueryPromiseCallback<any>|JQueryPromiseCallback<any>[]>): JQueryPromise<T>;
+    /**
+     * Add handlers to be called when the Deferred object generates progress notifications.
+     *
+     * @param progressCallback1 A function, or array of functions, to be called when the Deferred generates progress notifications.
+     * @param progressCallbackN Optional additional functions, or arrays of functions, to be called when the Deferred generates progress notifications.
+     * @see {@link https://api.jquery.com/deferred.progress/}
+     */
+    progress(progressCallback1?: JQueryPromiseCallback<any>|JQueryPromiseCallback<any>[], ...progressCallbackN: Array<JQueryPromiseCallback<any>|JQueryPromiseCallback<any>[]>): JQueryPromise<T>;
+
+    // Deprecated - given no typings
+    pipe(doneFilter?: (x: any) => any, failFilter?: (x: any) => any, progressFilter?: (x: any) => any): JQueryPromise<any>;
+
+    /**
+     * Return a Deferred's Promise object.
+     *
+     * @param target Object onto which the promise methods have to be attached
+     * @see {@link https://api.jquery.com/deferred.promise/}
+     */
+    promise(target?: any): JQueryPromise<T>;
+}
+
+/**
+ * Interface for the JQuery deferred, part of callbacks
+ * @see {@link https://api.jquery.com/category/deferred-object/}
+ */
+interface JQueryDeferred<T> extends JQueryGenericPromise<T> {
+    /**
+     * Determine the current state of a Deferred object.
+     * @see {@link https://api.jquery.com/deferred.state/}
+     */
+    state(): string;
+    /**
+     * Add handlers to be called when the Deferred object is either resolved or rejected.
+     *
+     * @param alwaysCallback1 A function, or array of functions, that is called when the Deferred is resolved or rejected.
+     * @param alwaysCallbackN Optional additional functions, or arrays of functions, that are called when the Deferred is resolved or rejected.
+     * @see {@link https://api.jquery.com/deferred.always/}
+     */
+    always(alwaysCallback1?: JQueryPromiseCallback<any>|JQueryPromiseCallback<any>[], ...alwaysCallbackN: Array<JQueryPromiseCallback<any>|JQueryPromiseCallback<any>[]>): JQueryDeferred<T>;
+    /**
+     * Add handlers to be called when the Deferred object is resolved.
+     *
+     * @param doneCallback1 A function, or array of functions, that are called when the Deferred is resolved.
+     * @param doneCallbackN Optional additional functions, or arrays of functions, that are called when the Deferred is resolved.
+     * @see {@link https://api.jquery.com/deferred.done/}
+     */
+    done(doneCallback1?: JQueryPromiseCallback<T>|JQueryPromiseCallback<T>[], ...doneCallbackN: Array<JQueryPromiseCallback<T>|JQueryPromiseCallback<T>[]>): JQueryDeferred<T>;
+    /**
+     * Add handlers to be called when the Deferred object is rejected.
+     *
+     * @param failCallback1 A function, or array of functions, that are called when the Deferred is rejected.
+     * @param failCallbackN Optional additional functions, or arrays of functions, that are called when the Deferred is rejected.
+     * @see {@link https://api.jquery.com/deferred.fail/}
+     */
+    fail(failCallback1?: JQueryPromiseCallback<any>|JQueryPromiseCallback<any>[], ...failCallbackN: Array<JQueryPromiseCallback<any>|JQueryPromiseCallback<any>[]>): JQueryDeferred<T>;
+    /**
+     * Add handlers to be called when the Deferred object generates progress notifications.
+     *
+     * @param progressCallback1 A function, or array of functions, to be called when the Deferred generates progress notifications.
+     * @param progressCallbackN Optional additional functions, or arrays of functions, to be called when the Deferred generates progress notifications.
+     * @see {@link https://api.jquery.com/deferred.progress/}
+     */
+    progress(progressCallback1?: JQueryPromiseCallback<any>|JQueryPromiseCallback<any>[], ...progressCallbackN: Array<JQueryPromiseCallback<any>|JQueryPromiseCallback<any>[]>): JQueryDeferred<T>;
+
+    /**
+     * Call the progressCallbacks on a Deferred object with the given args.
+     *
+     * @param args Optional arguments that are passed to the progressCallbacks.
+     * @see {@link https://api.jquery.com/deferred.notify/}
+     */
+    notify(value?: any, ...args: any[]): JQueryDeferred<T>;
+
+    /**
+     * Call the progressCallbacks on a Deferred object with the given context and args.
+     *
+     * @param context Context passed to the progressCallbacks as the this object.
+     * @param args Optional arguments that are passed to the progressCallbacks.
+     * @see {@link https://api.jquery.com/deferred.notifyWith/}
+     */
+    notifyWith(context: any, args?: any[]): JQueryDeferred<T>;
+
+    /**
+     * Reject a Deferred object and call any failCallbacks with the given args.
+     *
+     * @param args Optional arguments that are passed to the failCallbacks.
+     * @see {@link https://api.jquery.com/deferred.reject/}
+     */
+    reject(value?: any, ...args: any[]): JQueryDeferred<T>;
+    /**
+     * Reject a Deferred object and call any failCallbacks with the given context and args.
+     *
+     * @param context Context passed to the failCallbacks as the this object.
+     * @param args An optional array of arguments that are passed to the failCallbacks.
+     * @see {@link https://api.jquery.com/deferred.rejectWith/}
+     */
+    rejectWith(context: any, args?: any[]): JQueryDeferred<T>;
+
+    /**
+     * Resolve a Deferred object and call any doneCallbacks with the given args.
+     *
+     * @param value First argument passed to doneCallbacks.
+     * @param args Optional subsequent arguments that are passed to the doneCallbacks.
+     * @see {@link https://api.jquery.com/deferred.resolve/}
+     */
+    resolve(value?: T, ...args: any[]): JQueryDeferred<T>;
+
+    /**
+     * Resolve a Deferred object and call any doneCallbacks with the given context and args.
+     *
+     * @param context Context passed to the doneCallbacks as the this object.
+     * @param args An optional array of arguments that are passed to the doneCallbacks.
+     * @see {@link https://api.jquery.com/deferred.resolveWith/}
+     */
+    resolveWith(context: any, args?: T[]): JQueryDeferred<T>;
+
+    /**
+     * Return a Deferred's Promise object.
+     *
+     * @param target Object onto which the promise methods have to be attached
+     * @see {@link https://api.jquery.com/deferred.promise/}
+     */
+    promise(target?: any): JQueryPromise<T>;
+
+    // Deprecated - given no typings
+    pipe(doneFilter?: (x: any) => any, failFilter?: (x: any) => any, progressFilter?: (x: any) => any): JQueryPromise<any>;
+}
+
+/**
+ * Interface of the JQuery extension of the W3C event object
+ * @see {@link https://api.jquery.com/category/events/event-object/}
+ */
+interface BaseJQueryEventObject extends Event {
+    /**
+     * The current DOM element within the event bubbling phase.
+     * @see {@link https://api.jquery.com/event.currentTarget/}
+     */
+    currentTarget: Element;
+    /**
+     * An optional object of data passed to an event method when the current executing handler is bound.
+     * @see {@link https://api.jquery.com/event.data/}
+     */
+    data: any;
+    /**
+     * The element where the currently-called jQuery event handler was attached.
+     * @see {@link https://api.jquery.com/event.delegateTarget/}
+     */
+    delegateTarget: Element;
+    /**
+     * Returns whether event.preventDefault() was ever called on this event object.
+     * @see {@link https://api.jquery.com/event.isDefaultPrevented/}
+     */
+    isDefaultPrevented(): boolean;
+    /**
+     * Returns whether event.stopImmediatePropagation() was ever called on this event object.
+     * @see {@link https://api.jquery.com/event.isImmediatePropagationStopped/}
+     */
+    isImmediatePropagationStopped(): boolean;
+    /**
+     * Returns whether event.stopPropagation() was ever called on this event object.
+     * @see {@link https://api.jquery.com/event.isPropagationStopped/}
+     */
+    isPropagationStopped(): boolean;
+    /**
+     * The namespace specified when the event was triggered.
+     * @see {@link https://api.jquery.com/event.namespace/}
+     */
+    namespace: string;
+    /**
+     * The browser's original Event object.
+     * @see {@link https://api.jquery.com/category/events/event-object/}
+     */
+    originalEvent: Event;
+    /**
+     * If this method is called, the default action of the event will not be triggered.
+     * @see {@link https://api.jquery.com/event.preventDefault/}
+     */
+    preventDefault(): any;
+    /**
+     * The other DOM element involved in the event, if any.
+     * @see {@link https://api.jquery.com/event.relatedTarget/}
+     */
+    relatedTarget: Element;
+    /**
+     * The last value returned by an event handler that was triggered by this event, unless the value was undefined.
+     * @see {@link https://api.jquery.com/event.result/}
+     */
+    result: any;
+    /**
+     * Keeps the rest of the handlers from being executed and prevents the event from bubbling up the DOM tree.
+     * @see {@link https://api.jquery.com/event.stopImmediatePropagation/}
+     */
+    stopImmediatePropagation(): void;
+    /**
+     * Prevents the event from bubbling up the DOM tree, preventing any parent handlers from being notified of the event.
+     * @see {@link https://api.jquery.com/event.stopPropagation/}
+     */
+    stopPropagation(): void;
+    /**
+     * The DOM element that initiated the event.
+     * @see {@link https://api.jquery.com/event.target/}
+     */
+    target: Element;
+    /**
+     * The mouse position relative to the left edge of the document.
+     * @see {@link https://api.jquery.com/event.pageX/}
+     */
+    pageX: number;
+    /**
+     * The mouse position relative to the top edge of the document.
+     * @see {@link https://api.jquery.com/event.pageY/}
+     */
+    pageY: number;
+    /**
+     * For key or mouse events, this property indicates the specific key or button that was pressed.
+     * @see {@link https://api.jquery.com/event.which/}
+     */
+    which: number;
+    /**
+     * Indicates whether the META key was pressed when the event fired.
+     * @see {@link https://api.jquery.com/event.metaKey/}
+     */
+    metaKey: boolean;
+}
+
+interface JQueryInputEventObject extends BaseJQueryEventObject {
+    altKey: boolean;
+    ctrlKey: boolean;
+    metaKey: boolean;
+    shiftKey: boolean;
+}
+
+interface JQueryMouseEventObject extends JQueryInputEventObject {
+    button: number;
+    clientX: number;
+    clientY: number;
+    offsetX: number;
+    offsetY: number;
+    pageX: number;
+    pageY: number;
+    screenX: number;
+    screenY: number;
+}
+
+interface JQueryKeyEventObject extends JQueryInputEventObject {
+    char: any;
+    charCode: number;
+    key: any;
+    keyCode: number;
+}
+
+interface JQueryEventObject extends BaseJQueryEventObject, JQueryInputEventObject, JQueryMouseEventObject, JQueryKeyEventObject{
+}
+
+/**
+ * A collection of properties that represent the presence of different browser features or bugs.
+ *
+ * Intended for jQuery's internal use; specific properties may be removed when they are no longer needed internally
+ * to improve page startup performance. For your own project's feature-detection needs, we strongly recommend the
+ * use of an external library such as {@link http://modernizr.com/|Modernizr} instead of dependency on properties
+ * in jQuery.support.
+ *
+ * @deprecated since version 1.9
+ */
+interface JQuerySupport {
+    ajax?: boolean;
+    boxModel?: boolean;
+    changeBubbles?: boolean;
+    checkClone?: boolean;
+    checkOn?: boolean;
+    cors?: boolean;
+    cssFloat?: boolean;
+    hrefNormalized?: boolean;
+    htmlSerialize?: boolean;
+    leadingWhitespace?: boolean;
+    noCloneChecked?: boolean;
+    noCloneEvent?: boolean;
+    opacity?: boolean;
+    optDisabled?: boolean;
+    optSelected?: boolean;
+    scriptEval? (): boolean;
+    style?: boolean;
+    submitBubbles?: boolean;
+    tbody?: boolean;
+}
+
+interface JQueryParam {
+    /**
+     * Create a serialized representation of an array or object, suitable for use in a URL query string or Ajax request.
+     *
+     * @param obj An array or object to serialize.
+     */
+    (obj: any): string;
+
+    /**
+     * Create a serialized representation of an array or object, suitable for use in a URL query string or Ajax request.
+     *
+     * @param obj An array or object to serialize.
+     * @param traditional A Boolean indicating whether to perform a traditional "shallow" serialization.
+     */
+    (obj: any, traditional: boolean): string;
+}
+
+/**
+ * The interface used to construct jQuery events (with $.Event). It is
+ * defined separately instead of inline in JQueryStatic to allow
+ * overriding the construction function with specific strings
+ * returning specific event objects.
+ */
+interface JQueryEventConstructor {
+    (name: string, eventProperties?: any): JQueryEventObject;
+    new (name: string, eventProperties?: any): JQueryEventObject;
+}
+
+/**
+ * The interface used to specify coordinates.
+ */
+interface JQueryCoordinates {
+    left: number;
+    top: number;
+}
+
+/**
+ * Elements in the array returned by serializeArray()
+ */
+interface JQuerySerializeArrayElement {
+    name: string;
+    value: string;
+}
+
+/**
+ * @see {@link https://api.jquery.com/animate/}
+ */
+interface JQueryAnimationOptions {
+    /**
+     * A string or number determining how long the animation will run.
+     */
+    duration?: any;
+    /**
+     * A string indicating which easing function to use for the transition.
+     */
+    easing?: string;
+    /**
+     * A function to call once the animation is complete.
+     */
+    complete?: Function;
+    /**
+     * A function to be called for each animated property of each animated element. This function provides an opportunity to modify the Tween object to change the value of the property before it is set.
+     */
+    step?: (now: number, tween: any) => any;
+    /**
+     * A function to be called after each step of the animation, only once per animated element regardless of the number of animated properties. (version added: 1.8)
+     */
+    progress?: (animation: JQueryPromise<any>, progress: number, remainingMs: number) => any;
+    /**
+     * A function to call when the animation begins. (version added: 1.8)
+     */
+    start?: (animation: JQueryPromise<any>) => any;
+    /**
+     * A function to be called when the animation completes (its Promise object is resolved). (version added: 1.8)
+     */
+    done?: (animation: JQueryPromise<any>, jumpedToEnd: boolean) => any;
+    /**
+     * A function to be called when the animation fails to complete (its Promise object is rejected). (version added: 1.8)
+     */
+    fail?: (animation: JQueryPromise<any>, jumpedToEnd: boolean) => any;
+    /**
+     * A function to be called when the animation completes or stops without completing (its Promise object is either resolved or rejected). (version added: 1.8)
+     */
+    always?: (animation: JQueryPromise<any>, jumpedToEnd: boolean) => any;
+    /**
+     * A Boolean indicating whether to place the animation in the effects queue. If false, the animation will begin immediately. As of jQuery 1.7, the queue option can also accept a string, in which case the animation is added to the queue represented by that string. When a custom queue name is used the animation does not automatically start; you must call .dequeue("queuename") to start it.
+     */
+    queue?: any;
+    /**
+     * A map of one or more of the CSS properties defined by the properties argument and their corresponding easing functions. (version added: 1.4)
+     */
+    specialEasing?: Object;
+}
+
+interface JQueryEasingFunction {
+    ( percent: number ): number;
+}
+
+interface JQueryEasingFunctions {
+    [ name: string ]: JQueryEasingFunction;
+    linear: JQueryEasingFunction;
+    swing: JQueryEasingFunction;
+}
+
+/**
+ * Static members of jQuery (those on $ and jQuery themselves)
+ *
+ * @see {@link https://api.jquery.com/Types/#jQuery}
+ */
+interface JQueryStatic {
+
+    /**
+     * Perform an asynchronous HTTP (Ajax) request.
+     *
+     * @param settings A set of key/value pairs that configure the Ajax request. All settings are optional. A default can be set for any option with $.ajaxSetup().
+     * @see {@link https://api.jquery.com/jQuery.ajax/#jQuery-ajax-settings}
+     */
+    ajax(settings: JQueryAjaxSettings): JQueryXHR;
+    /**
+     * Perform an asynchronous HTTP (Ajax) request.
+     *
+     * @param url A string containing the URL to which the request is sent.
+     * @param settings A set of key/value pairs that configure the Ajax request. All settings are optional. A default can be set for any option with $.ajaxSetup().
+     * @see {@link https://api.jquery.com/jQuery.ajax/#jQuery-ajax-url-settings}
+     */
+    ajax(url: string, settings?: JQueryAjaxSettings): JQueryXHR;
+
+    /**
+     * Handle custom Ajax options or modify existing options before each request is sent and before they are processed by $.ajax().
+     *
+     * @param dataTypes An optional string containing one or more space-separated dataTypes
+     * @param handler A handler to set default values for future Ajax requests.
+     * @see {@link https://api.jquery.com/jQuery.ajaxPrefilter/}
+     */
+    ajaxPrefilter(dataTypes: string, handler: (opts: any, originalOpts: JQueryAjaxSettings, jqXHR: JQueryXHR) => any): void;
+    /**
+     * Handle custom Ajax options or modify existing options before each request is sent and before they are processed by $.ajax().
+     *
+     * @param handler A handler to set default values for future Ajax requests.
+     * @see {@link https://api.jquery.com/jQuery.ajaxPrefilter/}
+     */
+    ajaxPrefilter(handler: (opts: any, originalOpts: JQueryAjaxSettings, jqXHR: JQueryXHR) => any): void;
+
+     /**
+     * Creates an object that handles the actual transmission of Ajax data.
+     *
+     * @param dataType A string identifying the data type to use.
+     * @param handler A handler to return the new transport object to use with the data type provided in the first argument.
+     * @see {@link https://api.jquery.com/jQuery.ajaxTransport/}
+     */
+    ajaxTransport(dataType: string, handler: (opts: any, originalOpts: JQueryAjaxSettings, jqXHR: JQueryXHR) => any): void;
+    
+    ajaxSettings: JQueryAjaxSettings;
+
+     /**
+      * Set default values for future Ajax requests. Its use is not recommended.
+      *
+      * @param options A set of key/value pairs that configure the default Ajax request. All options are optional.
+      * @see {@link https://api.jquery.com/jQuery.ajaxSetup/}
+      */
+    ajaxSetup(options: JQueryAjaxSettings): void;
+
+    /**
+     * Load data from the server using a HTTP GET request.
+     *
+     * @param url A string containing the URL to which the request is sent.
+     * @param success A callback function that is executed if the request succeeds.
+     * @param dataType The type of data expected from the server. Default: Intelligent Guess (xml, json, script, or html).
+     * @see {@link https://api.jquery.com/jQuery.get/#jQuery-get-url-data-success-dataType}
+     */
+    get(url: string, success?: (data: any, textStatus: string, jqXHR: JQueryXHR) => any, dataType?: string): JQueryXHR;
+    /**
+     * Load data from the server using a HTTP GET request.
+     *
+     * @param url A string containing the URL to which the request is sent.
+     * @param data A plain object or string that is sent to the server with the request.
+     * @param success A callback function that is executed if the request succeeds.
+     * @param dataType The type of data expected from the server. Default: Intelligent Guess (xml, json, script, or html).
+     * @see {@link https://api.jquery.com/jQuery.get/#jQuery-get-url-data-success-dataType}
+     */
+    get(url: string, data?: Object|string, success?: (data: any, textStatus: string, jqXHR: JQueryXHR) => any, dataType?: string): JQueryXHR;
+    /**
+     * Load data from the server using a HTTP GET request.
+     *
+     * @param settings The JQueryAjaxSettings to be used for the request
+     * @see {@link https://api.jquery.com/jQuery.get/#jQuery-get-settings}
+     */
+    get(settings : JQueryAjaxSettings): JQueryXHR;
+    /**
+     * Load JSON-encoded data from the server using a GET HTTP request.
+     *
+     * @param url A string containing the URL to which the request is sent.
+     * @param success A callback function that is executed if the request succeeds.
+     * @see {@link https://api.jquery.com/jQuery.getJSON/}
+     */
+    getJSON(url: string, success?: (data: any, textStatus: string, jqXHR: JQueryXHR) => any): JQueryXHR;
+    /**
+     * Load JSON-encoded data from the server using a GET HTTP request.
+     *
+     * @param url A string containing the URL to which the request is sent.
+     * @param data A plain object or string that is sent to the server with the request.
+     * @param success A callback function that is executed if the request succeeds.
+     * @see {@link https://api.jquery.com/jQuery.getJSON/}
+     */
+    getJSON(url: string, data?: Object|string, success?: (data: any, textStatus: string, jqXHR: JQueryXHR) => any): JQueryXHR;
+    /**
+     * Load a JavaScript file from the server using a GET HTTP request, then execute it.
+     *
+     * @param url A string containing the URL to which the request is sent.
+     * @param success A callback function that is executed if the request succeeds.
+     * @see {@link https://api.jquery.com/jQuery.getScript/}
+     */
+    getScript(url: string, success?: (script: string, textStatus: string, jqXHR: JQueryXHR) => any): JQueryXHR;
+
+    /**
+     * Create a serialized representation of an array or object, suitable for use in a URL query string or Ajax request.
+     *
+     * @see {@link https://api.jquery.com/jQuery.param/}
+     */
+    param: JQueryParam;
+
+    /**
+     * Load data from the server using a HTTP POST request.
+     *
+     * @param url A string containing the URL to which the request is sent.
+     * @param success A callback function that is executed if the request succeeds. Required if dataType is provided, but can be null in that case.
+     * @param dataType The type of data expected from the server. Default: Intelligent Guess (xml, json, script, text, html).
+     * @see {@link https://api.jquery.com/jQuery.post/#jQuery-post-url-data-success-dataType}
+     */
+    post(url: string, success?: (data: any, textStatus: string, jqXHR: JQueryXHR) => any, dataType?: string): JQueryXHR;
+    /**
+     * Load data from the server using a HTTP POST request.
+     *
+     * @param url A string containing the URL to which the request is sent.
+     * @param data A plain object or string that is sent to the server with the request.
+     * @param success A callback function that is executed if the request succeeds. Required if dataType is provided, but can be null in that case.
+     * @param dataType The type of data expected from the server. Default: Intelligent Guess (xml, json, script, text, html).
+     * @see {@link https://api.jquery.com/jQuery.post/#jQuery-post-url-data-success-dataType}
+     */
+    post(url: string, data?: Object|string, success?: (data: any, textStatus: string, jqXHR: JQueryXHR) => any, dataType?: string): JQueryXHR;
+    /**
+     * Load data from the server using a HTTP POST request.
+     *
+     * @param settings The JQueryAjaxSettings to be used for the request
+     * @see {@link https://api.jquery.com/jQuery.post/#jQuery-post-settings}
+     */
+    post(settings : JQueryAjaxSettings): JQueryXHR;
+    /**
+     * A multi-purpose callbacks list object that provides a powerful way to manage callback lists.
+     *
+     * @param flags An optional list of space-separated flags that change how the callback list behaves.
+     * @see {@link https://api.jquery.com/jQuery.Callbacks/}
+     */
+    Callbacks(flags?: string): JQueryCallback;
+
+    /**
+     * Holds or releases the execution of jQuery's ready event.
+     *
+     * @param hold Indicates whether the ready hold is being requested or released
+     * @see {@link https://api.jquery.com/jQuery.holdReady/}
+     */
+    holdReady(hold: boolean): void;
+
+    /**
+     * Accepts a string containing a CSS selector which is then used to match a set of elements.
+     *
+     * @param selector A string containing a selector expression
+     * @param context A DOM Element, Document, or jQuery to use as context
+     * @see {@link https://api.jquery.com/jQuery/#jQuery-selector-context}
+     */
+    (selector: string, context?: Element|JQuery): JQuery;
+
+    /**
+     * Accepts a string containing a CSS selector which is then used to match a set of elements.
+     *
+     * @param element A DOM element to wrap in a jQuery object.
+     * @see {@link https://api.jquery.com/jQuery/#jQuery-element}
+     */
+    (element: Element): JQuery;
+
+    /**
+     * Accepts a string containing a CSS selector which is then used to match a set of elements.
+     *
+     * @param elementArray An array containing a set of DOM elements to wrap in a jQuery object.
+     * @see {@link https://api.jquery.com/jQuery/#jQuery-elementArray}
+     */
+    (elementArray: Element[]): JQuery;
+
+    /**
+     * Binds a function to be executed when the DOM has finished loading.
+     *
+     * @param callback A function to execute after the DOM is ready.
+     * @see {@link https://api.jquery.com/jQuery/#jQuery-callback}
+     */
+    (callback: (jQueryAlias?: JQueryStatic) => any): JQuery;
+
+    /**
+     * Accepts a string containing a CSS selector which is then used to match a set of elements.
+     *
+     * @param object A plain object to wrap in a jQuery object.
+     * @see {@link https://api.jquery.com/jQuery/#jQuery-object}
+     */
+    (object: {}): JQuery;
+
+    /**
+     * Accepts a string containing a CSS selector which is then used to match a set of elements.
+     *
+     * @param object An existing jQuery object to clone.
+     * @see {@link https://api.jquery.com/jQuery/#jQuery-object}
+     */
+    (object: JQuery): JQuery;
+
+    /**
+     * Specify a function to execute when the DOM is fully loaded.
+     * @see {@link https://api.jquery.com/jQuery/#jQuery}
+     */
+    (): JQuery;
+
+    /**
+     * Creates DOM elements on the fly from the provided string of raw HTML.
+     *
+     * @param html A string of HTML to create on the fly. Note that this parses HTML, not XML.
+     * @param ownerDocument A document in which the new elements will be created.
+     * @see {@link https://api.jquery.com/jQuery/#jQuery-html-ownerDocument}
+     */
+    (html: string, ownerDocument?: Document): JQuery;
+
+    /**
+     * Creates DOM elements on the fly from the provided string of raw HTML.
+     *
+     * @param html A string defining a single, standalone, HTML element (e.g. <div/> or <div></div>).
+     * @param attributes An object of attributes, events, and methods to call on the newly-created element.
+     * @see {@link https://api.jquery.com/jQuery/#jQuery-html-attributes}
+     */
+    (html: string, attributes: Object): JQuery;
+
+    /**
+     * Relinquish jQuery's control of the $ variable.
+     *
+     * @param removeAll A Boolean indicating whether to remove all jQuery variables from the global scope (including jQuery itself).
+     * @see {@link https://api.jquery.com/jQuery.noConflict/}
+     */
+    noConflict(removeAll?: boolean): JQueryStatic;
+
+    /**
+     * Provides a way to execute callback functions based on one or more objects, usually Deferred objects that represent asynchronous events.
+     *
+     * @param deferreds One or more Deferred objects, or plain JavaScript objects.
+     * @see {@link https://api.jquery.com/jQuery.when/}
+     */
+    when<T>(...deferreds: Array<T|JQueryPromise<T>/* as JQueryDeferred<T> */>): JQueryPromise<T>;
+
+    /**
+     * Hook directly into jQuery to override how particular CSS properties are retrieved or set, normalize CSS property naming, or create custom properties.
+     * @see {@link https://api.jquery.com/jQuery.cssHooks/}
+     */
+    cssHooks: { [key: string]: any; };
+
+    /**
+     * An object containing all CSS properties that may be used without a unit. The .css() method uses this object to see if it may append px to unitless values.
+     * @see {@link https://api.jquery.com/jQuery.cssNumber/}
+     */
+    cssNumber: any;
+
+    /**
+     * Store arbitrary data associated with the specified element. Returns the value that was set.
+     *
+     * @param element The DOM element to associate with the data.
+     * @param key A string naming the piece of data to set.
+     * @param value The new data value.
+     * @see {@link https://api.jquery.com/jQuery.data/#jQuery-data-element-key-value}
+     */
+    data<T>(element: Element, key: string, value: T): T;
+    /**
+     * Returns value at named data store for the element, as set by jQuery.data(element, name, value), or the full data store for the element.
+     *
+     * @param element The DOM element to associate with the data.
+     * @param key A string naming the piece of data to set.
+     * @see {@link https://api.jquery.com/jQuery.data/#jQuery-data-element-key}
+     */
+    data(element: Element, key: string): any;
+    /**
+     * Returns value at named data store for the element, as set by jQuery.data(element, name, value), or the full data store for the element.
+     *
+     * @param element The DOM element to associate with the data.
+     * @see {@link https://api.jquery.com/jQuery.data/#jQuery-data-element}
+     */
+    data(element: Element): any;
+
+    /**
+     * Execute the next function on the queue for the matched element.
+     *
+     * @param element A DOM element from which to remove and execute a queued function.
+     * @param queueName A string containing the name of the queue. Defaults to fx, the standard effects queue.
+     * @see {@link https://api.jquery.com/jQuery.dequeue/}
+     */
+    dequeue(element: Element, queueName?: string): void;
+
+    /**
+     * Determine whether an element has any jQuery data associated with it.
+     *
+     * @param element A DOM element to be checked for data.
+     * @see {@link https://api.jquery.com/jQuery.hasData/}
+     */
+    hasData(element: Element): boolean;
+
+    /**
+     * Show the queue of functions to be executed on the matched element.
+     *
+     * @param element A DOM element to inspect for an attached queue.
+     * @param queueName A string containing the name of the queue. Defaults to fx, the standard effects queue.
+     * @see {@link https://api.jquery.com/jQuery.queue/#jQuery-queue-element-queueName}
+     */
+    queue(element: Element, queueName?: string): any[];
+    /**
+     * Manipulate the queue of functions to be executed on the matched element.
+     *
+     * @param element A DOM element where the array of queued functions is attached.
+     * @param queueName A string containing the name of the queue. Defaults to fx, the standard effects queue.
+     * @param newQueue An array of functions to replace the current queue contents.
+     * @see {@link https://api.jquery.com/jQuery.queue/#jQuery-queue-element-queueName-newQueue}
+     */
+    queue(element: Element, queueName: string, newQueue: Function[]): JQuery;
+    /**
+     * Manipulate the queue of functions to be executed on the matched element.
+     *
+     * @param element A DOM element on which to add a queued function.
+     * @param queueName A string containing the name of the queue. Defaults to fx, the standard effects queue.
+     * @param callback The new function to add to the queue.
+     * @see {@link https://api.jquery.com/jQuery.queue/#jQuery-queue-element-queueName-callback}
+     */
+    queue(element: Element, queueName: string, callback: Function): JQuery;
+
+    /**
+     * Remove a previously-stored piece of data.
+     *
+     * @param element A DOM element from which to remove data.
+     * @param name A string naming the piece of data to remove.
+     * @see {@link https://api.jquery.com/jQuery.removeData/}
+     */
+    removeData(element: Element, name?: string): JQuery;
+
+    /**
+     * A constructor function that returns a chainable utility object with methods to register multiple callbacks into callback queues, invoke callback queues, and relay the success or failure state of any synchronous or asynchronous function.
+     *
+     * @param beforeStart A function that is called just before the constructor returns.
+     * @see {@link https://api.jquery.com/jQuery.Deferred/}
+     */
+    Deferred<T>(beforeStart?: (deferred: JQueryDeferred<T>) => any): JQueryDeferred<T>;
+
+    /**
+     * Effects
+     */
+
+    easing: JQueryEasingFunctions;
+
+    fx: {
+        tick: () => void;
+        /**
+         * The rate (in milliseconds) at which animations fire.
+         * @see {@link https://api.jquery.com/jQuery.fx.interval/}
+         */
+        interval: number;
+        stop: () => void;
+        speeds: { slow: number; fast: number; };
+        /**
+         * Globally disable all animations.
+         * @see {@link https://api.jquery.com/jQuery.fx.off/}
+         */
+        off: boolean;
+        step: any;
+    };
+
+    /**
+     * Takes a function and returns a new one that will always have a particular context.
+     *
+     * @param func The function whose context will be changed.
+     * @param context The object to which the context (this) of the function should be set.
+     * @param additionalArguments Any number of arguments to be passed to the function referenced in the function argument.
+     * @see {@link https://api.jquery.com/jQuery.proxy/#jQuery-proxy-function-context-additionalArguments}
+     */
+    proxy(func: (...args: any[]) => any, context: Object, ...additionalArguments: any[]): any;
+    /**
+     * Takes a function and returns a new one that will always have a particular context.
+     *
+     * @param context The object to which the context (this) of the function should be set.
+     * @param name The name of the function whose context will be changed (should be a property of the context object).
+     * @param additionalArguments Any number of arguments to be passed to the function named in the name argument.
+     * @see {@link https://api.jquery.com/jQuery.proxy/#jQuery-proxy-context-name-additionalArguments}
+     */
+    proxy(context: Object, name: string, ...additionalArguments: any[]): any;
+
+    Event: JQueryEventConstructor;
+
+    /**
+     * Takes a string and throws an exception containing it.
+     *
+     * @param message The message to send out.
+     * @see {@link https://api.jquery.com/jQuery.error/}
+     */
+    error(message: any): JQuery;
+
+    expr: any;
+    fn: any;  //TODO: Decide how we want to type this
+
+    isReady: boolean;
+
+    // Properties
+    support: JQuerySupport;
+
+    /**
+     * Check to see if a DOM element is a descendant of another DOM element.
+     *
+     * @param container The DOM element that may contain the other element.
+     * @param contained The DOM element that may be contained by (a descendant of) the other element.
+     * @see {@link https://api.jquery.com/jQuery.contains/}
+     */
+    contains(container: Element, contained: Element): boolean;
+
+    /**
+     * A generic iterator function, which can be used to seamlessly iterate over both objects and arrays. Arrays and array-like objects with a length property (such as a function's arguments object) are iterated by numeric index, from 0 to length-1. Other objects are iterated via their named properties.
+     *
+     * @param collection The object or array to iterate over.
+     * @param callback The function that will be executed on every object.
+     * @see {@link https://api.jquery.com/jQuery.each/#jQuery-each-array-callback}
+     */
+    each<T>(
+        collection: T[],
+        callback: (indexInArray: number, valueOfElement: T) => any
+        ): any;
+
+    /**
+     * A generic iterator function, which can be used to seamlessly iterate over both objects and arrays. Arrays and array-like objects with a length property (such as a function's arguments object) are iterated by numeric index, from 0 to length-1. Other objects are iterated via their named properties.
+     *
+     * @param collection The object or array to iterate over.
+     * @param callback The function that will be executed on every object.
+     * @see {@link https://api.jquery.com/jQuery.each/#jQuery-each-object-callback}
+     */
+    each(
+        collection: any,
+        callback: (indexInArray: any, valueOfElement: any) => any
+        ): any;
+
+    /**
+     * Merge the contents of two or more objects together into the first object.
+     *
+     * @param target An object that will receive the new properties if additional objects are passed in or that will extend the jQuery namespace if it is the sole argument.
+     * @param object1 An object containing additional properties to merge in.
+     * @param objectN Additional objects containing properties to merge in.
+     * @see {@link https://api.jquery.com/jQuery.extend/#jQuery-extend-target-object1-objectN}
+     */
+    extend(target: any, object1?: any, ...objectN: any[]): any;
+    /**
+     * Merge the contents of two or more objects together into the first object.
+     *
+     * @param deep If true, the merge becomes recursive (aka. deep copy).
+     * @param target The object to extend. It will receive the new properties.
+     * @param object1 An object containing additional properties to merge in.
+     * @param objectN Additional objects containing properties to merge in.
+     * @see {@link https://api.jquery.com/jQuery.extend/#jQuery-extend-deep-target-object1-objectN}
+     */
+    extend(deep: boolean, target: any, object1?: any, ...objectN: any[]): any;
+
+    /**
+     * Execute some JavaScript code globally.
+     *
+     * @param code The JavaScript code to execute.
+     * @see {@link https://api.jquery.com/jQuery.globalEval/}
+     */
+    globalEval(code: string): any;
+
+    /**
+     * Finds the elements of an array which satisfy a filter function. The original array is not affected.
+     *
+     * @param array The array to search through.
+     * @param func The function to process each item against. The first argument to the function is the item, and the second argument is the index. The function should return a Boolean value.  this will be the global window object.
+     * @param invert If "invert" is false, or not provided, then the function returns an array consisting of all elements for which "callback" returns true. If "invert" is true, then the function returns an array consisting of all elements for which "callback" returns false.
+     * @see {@link https://api.jquery.com/jQuery.grep/}
+     */
+    grep<T>(array: T[], func: (elementOfArray?: T, indexInArray?: number) => boolean, invert?: boolean): T[];
+
+    /**
+     * Search for a specified value within an array and return its index (or -1 if not found).
+     *
+     * @param value The value to search for.
+     * @param array An array through which to search.
+     * @param fromIndex The index of the array at which to begin the search. The default is 0, which will search the whole array.
+     * @see {@link https://api.jquery.com/jQuery.inArray/}
+     */
+    inArray<T>(value: T, array: T[], fromIndex?: number): number;
+
+    /**
+     * Determine whether the argument is an array.
+     *
+     * @param obj Object to test whether or not it is an array.
+     * @see {@link https://api.jquery.com/jQuery.isArray/}
+     */
+    isArray(obj: any): boolean;
+    /**
+     * Check to see if an object is empty (contains no enumerable properties).
+     *
+     * @param obj The object that will be checked to see if it's empty.
+     * @see {@link https://api.jquery.com/jQuery.isEmptyObject/}
+     */
+    isEmptyObject(obj: any): boolean;
+    /**
+     * Determine if the argument passed is a JavaScript function object.
+     *
+     * @param obj Object to test whether or not it is a function.
+     * @see {@link https://api.jquery.com/jQuery.isFunction/}
+     */
+    isFunction(obj: any): boolean;
+    /**
+     * Determines whether its argument is a number.
+     *
+     * @param value The value to be tested.
+     * @see {@link https://api.jquery.com/jQuery.isNumeric/}
+     */
+    isNumeric(value: any): boolean;
+    /**
+     * Check to see if an object is a plain object (created using "{}" or "new Object").
+     *
+     * @param obj The object that will be checked to see if it's a plain object.
+     * @see {@link https://api.jquery.com/jQuery.isPlainObject/}
+     */
+    isPlainObject(obj: any): boolean;
+    /**
+     * Determine whether the argument is a window.
+     *
+     * @param obj Object to test whether or not it is a window.
+     * @see {@link https://api.jquery.com/jQuery.isWindow/}
+     */
+    isWindow(obj: any): boolean;
+    /**
+     * Check to see if a DOM node is within an XML document (or is an XML document).
+     *
+     * @param node The DOM node that will be checked to see if it's in an XML document.
+     * @see {@link https://api.jquery.com/jQuery.isXMLDoc/}
+     */
+    isXMLDoc(node: Node): boolean;
+
+    /**
+     * Convert an array-like object into a true JavaScript array.
+     *
+     * @param obj Any object to turn into a native Array.
+     * @see {@link https://api.jquery.com/jQuery.makeArray/}
+     */
+    makeArray(obj: any): any[];
+
+    /**
+     * Translate all items in an array or object to new array of items.
+     *
+     * @param array The Array to translate.
+     * @param callback The function to process each item against. The first argument to the function is the array item, the second argument is the index in array The function can return any value. Within the function, this refers to the global (window) object.
+     * @see {@link https://api.jquery.com/jQuery.map/#jQuery-map-array-callback}
+     */
+    map<T, U>(array: T[], callback: (elementOfArray?: T, indexInArray?: number) => U): U[];
+    /**
+     * Translate all items in an array or object to new array of items.
+     *
+     * @param arrayOrObject The Array or Object to translate.
+     * @param callback The function to process each item against. The first argument to the function is the value; the second argument is the index or key of the array or object property. The function can return any value to add to the array. A returned array will be flattened into the resulting array. Within the function, this refers to the global (window) object.
+     * @see {@link https://api.jquery.com/jQuery.map/#jQuery-map-object-callback}
+     */
+    map(arrayOrObject: any, callback: (value?: any, indexOrKey?: any) => any): any;
+
+    /**
+     * Merge the contents of two arrays together into the first array.
+     *
+     * @param first The first array to merge, the elements of second added.
+     * @param second The second array to merge into the first, unaltered.
+     * @see {@link https://api.jquery.com/jQuery.merge/}
+     */
+    merge<T>(first: T[], second: T[]): T[];
+
+    /**
+     * An empty function.
+     * @see {@link https://api.jquery.com/jQuery.noop/}
+     */
+    noop(): any;
+
+    /**
+     * Return a number representing the current time.
+     * @see {@link https://api.jquery.com/jQuery.now/}
+     */
+    now(): number;
+
+    /**
+     * Takes a well-formed JSON string and returns the resulting JavaScript object.
+     *
+     * @param json The JSON string to parse.
+     * @see {@link https://api.jquery.com/jQuery.parseJSON/}
+     */
+    parseJSON(json: string): any;
+
+    /**
+     * Parses a string into an XML document.
+     *
+     * @param data a well-formed XML string to be parsed
+     * @see {@link https://api.jquery.com/jQuery.parseXML/}
+     */
+    parseXML(data: string): XMLDocument;
+
+    /**
+     * Remove the whitespace from the beginning and end of a string.
+     *
+     * @param str Remove the whitespace from the beginning and end of a string.
+     * @see {@link https://api.jquery.com/jQuery.trim/}
+     */
+    trim(str: string): string;
+
+    /**
+     * Determine the internal JavaScript [[Class]] of an object.
+     *
+     * @param obj Object to get the internal JavaScript [[Class]] of.
+     * @see {@link https://api.jquery.com/jQuery.type/}
+     */
+    type(obj: any): string;
+
+    /**
+     * Sorts an array of DOM elements, in place, with the duplicates removed. Note that this only works on arrays of DOM elements, not strings or numbers.
+     *
+     * @param array The Array of DOM elements.
+     * @see {@link https://api.jquery.com/jQuery.unique/}
+     */
+    unique(array: Element[]): Element[];
+
+    /**
+     * Parses a string into an array of DOM nodes.
+     *
+     * @param data HTML string to be parsed
+     * @param context DOM element to serve as the context in which the HTML fragment will be created
+     * @param keepScripts A Boolean indicating whether to include scripts passed in the HTML string
+     * @see {@link https://api.jquery.com/jQuery.parseHTML/}
+     */
+    parseHTML(data: string, context?: HTMLElement, keepScripts?: boolean): any[];
+
+    /**
+     * Parses a string into an array of DOM nodes.
+     *
+     * @param data HTML string to be parsed
+     * @param context DOM element to serve as the context in which the HTML fragment will be created
+     * @param keepScripts A Boolean indicating whether to include scripts passed in the HTML string
+     * @see {@link https://api.jquery.com/jQuery.parseHTML/}
+     */
+    parseHTML(data: string, context?: Document, keepScripts?: boolean): any[];
+}
+
+/**
+ * The jQuery instance members
+ *
+ * @see {@link https://api.jquery.com/Types/#jQuery}
+ */
+interface JQuery {
+    /**
+     * Register a handler to be called when Ajax requests complete. This is an AjaxEvent.
+     *
+     * @param handler The function to be invoked.
+     * @see {@link https://api.jquery.com/ajaxComplete/}
+     */
+    ajaxComplete(handler: (event: JQueryEventObject, XMLHttpRequest: XMLHttpRequest, ajaxOptions: any) => any): JQuery;
+    /**
+     * Register a handler to be called when Ajax requests complete with an error. This is an Ajax Event.
+     *
+     * @param handler The function to be invoked.
+     * @see {@link https://api.jquery.com/ajaxError/}
+     */
+    ajaxError(handler: (event: JQueryEventObject, jqXHR: JQueryXHR, ajaxSettings: JQueryAjaxSettings, thrownError: any) => any): JQuery;
+    /**
+     * Attach a function to be executed before an Ajax request is sent. This is an Ajax Event.
+     *
+     * @param handler The function to be invoked.
+     * @see {@link https://api.jquery.com/ajaxSend/}
+     */
+    ajaxSend(handler: (event: JQueryEventObject, jqXHR: JQueryXHR, ajaxOptions: JQueryAjaxSettings) => any): JQuery;
+    /**
+     * Register a handler to be called when the first Ajax request begins. This is an Ajax Event.
+     *
+     * @param handler The function to be invoked.
+     * @see {@link https://api.jquery.com/ajaxStart/}
+     */
+    ajaxStart(handler: () => any): JQuery;
+    /**
+     * Register a handler to be called when all Ajax requests have completed. This is an Ajax Event.
+     *
+     * @param handler The function to be invoked.
+     * @see {@link https://api.jquery.com/ajaxStop/}
+     */
+    ajaxStop(handler: () => any): JQuery;
+    /**
+     * Attach a function to be executed whenever an Ajax request completes successfully. This is an Ajax Event.
+     *
+     * @param handler The function to be invoked.
+     * @see {@link https://api.jquery.com/ajaxSuccess/}
+     */
+    ajaxSuccess(handler: (event: JQueryEventObject, XMLHttpRequest: XMLHttpRequest, ajaxOptions: JQueryAjaxSettings) => any): JQuery;
+
+    /**
+     * Load data from the server and place the returned HTML into the matched element.
+     *
+     * @param url A string containing the URL to which the request is sent.
+     * @param data A plain object or string that is sent to the server with the request.
+     * @param complete A callback function that is executed when the request completes.
+     * @see {@link https://api.jquery.com/load/}
+     */
+    load(url: string, data?: string|Object, complete?: (responseText: string, textStatus: string, XMLHttpRequest: XMLHttpRequest) => any): JQuery;
+
+    /**
+     * Encode a set of form elements as a string for submission.
+     * @see {@link https://api.jquery.com/serialize/}
+     */
+    serialize(): string;
+    /**
+     * Encode a set of form elements as an array of names and values.
+     * @see {@link https://api.jquery.com/serializeArray/}
+     */
+    serializeArray(): JQuerySerializeArrayElement[];
+
+    /**
+     * Adds the specified class(es) to each of the set of matched elements.
+     *
+     * @param className One or more space-separated classes to be added to the class attribute of each matched element.
+     * @see {@link https://api.jquery.com/addClass/#addClass-className}
+     */
+    addClass(className: string): JQuery;
+    /**
+     * Adds the specified class(es) to each of the set of matched elements.
+     *
+     * @param func A function returning one or more space-separated class names to be added to the existing class name(s). Receives the index position of the element in the set and the existing class name(s) as arguments. Within the function, this refers to the current element in the set.
+     * @see {@link https://api.jquery.com/addClass/#addClass-function}
+     */
+    addClass(func: (index: number, className: string) => string): JQuery;
+
+    /**
+     * Add the previous set of elements on the stack to the current set, optionally filtered by a selector.
+     * @see {@link https://api.jquery.com/addBack/}
+     */
+    addBack(selector?: string): JQuery;
+
+    /**
+     * Get the value of an attribute for the first element in the set of matched elements.
+     *
+     * @param attributeName The name of the attribute to get.
+     * @see {@link https://api.jquery.com/attr/#attr-attributeName}
+     */
+    attr(attributeName: string): string;
+    /**
+     * Set one or more attributes for the set of matched elements.
+     *
+     * @param attributeName The name of the attribute to set.
+     * @param value A value to set for the attribute. If this is `null`, the attribute will be deleted.
+     * @see {@link https://api.jquery.com/attr/#attr-attributeName-value}
+     */
+    attr(attributeName: string, value: string|number|null): JQuery;
+    /**
+     * Set one or more attributes for the set of matched elements.
+     *
+     * @param attributeName The name of the attribute to set.
+     * @param func A function returning the value to set. this is the current element. Receives the index position of the element in the set and the old attribute value as arguments.
+     * @see {@link https://api.jquery.com/attr/#attr-attributeName-function}
+     */
+    attr(attributeName: string, func: (index: number, attr: string) => string|number): JQuery;
+    /**
+     * Set one or more attributes for the set of matched elements.
+     *
+     * @param attributes An object of attribute-value pairs to set.
+     * @see {@link https://api.jquery.com/attr/#attr-attributes}
+     */
+    attr(attributes: Object): JQuery;
+
+    /**
+     * Determine whether any of the matched elements are assigned the given class.
+     *
+     * @param className The class name to search for.
+     * @see {@link https://api.jquery.com/hasClass/}
+     */
+    hasClass(className: string): boolean;
+
+    /**
+     * Get the HTML contents of the first element in the set of matched elements.
+     * @see {@link https://api.jquery.com/html/#html}
+     */
+    html(): string;
+    /**
+     * Set the HTML contents of each element in the set of matched elements.
+     *
+     * @param htmlString A string of HTML to set as the content of each matched element.
+     * @see {@link https://api.jquery.com/html/#html-htmlString}
+     */
+    html(htmlString: string): JQuery;
+    /**
+     * Set the HTML contents of each element in the set of matched elements.
+     *
+     * @param func A function returning the HTML content to set. Receives the index position of the element in the set and the old HTML value as arguments. jQuery empties the element before calling the function; use the oldhtml argument to reference the previous content. Within the function, this refers to the current element in the set.
+     * @see {@link https://api.jquery.com/html/#html-function}
+     */
+    html(func: (index: number, oldhtml: string) => string): JQuery;
+
+    /**
+     * Get the value of a property for the first element in the set of matched elements.
+     *
+     * @param propertyName The name of the property to get.
+     * @see {@link https://api.jquery.com/prop/#prop-propertyName}
+     */
+    prop(propertyName: string): any;
+    /**
+     * Set one or more properties for the set of matched elements.
+     *
+     * @param propertyName The name of the property to set.
+     * @param value A value to set for the property.
+     * @see {@link https://api.jquery.com/prop/#prop-propertyName-value}
+     */
+    prop(propertyName: string, value: string|number|boolean): JQuery;
+    /**
+     * Set one or more properties for the set of matched elements.
+     *
+     * @param properties An object of property-value pairs to set.
+     * @see {@link https://api.jquery.com/prop/#prop-properties}
+     */
+    prop(properties: Object): JQuery;
+    /**
+     * Set one or more properties for the set of matched elements.
+     *
+     * @param propertyName The name of the property to set.
+     * @param func A function returning the value to set. Receives the index position of the element in the set and the old property value as arguments. Within the function, the keyword this refers to the current element.
+     * @see {@link https://api.jquery.com/prop/#prop-propertyName-function}
+     */
+    prop(propertyName: string, func: (index: number, oldPropertyValue: any) => any): JQuery;
+
+    /**
+     * Remove an attribute from each element in the set of matched elements.
+     *
+     * @param attributeName An attribute to remove; as of version 1.7, it can be a space-separated list of attributes.
+     * @see {@link https://api.jquery.com/removeAttr/}
+     */
+    removeAttr(attributeName: string): JQuery;
+
+    /**
+     * Remove a single class, multiple classes, or all classes from each element in the set of matched elements.
+     *
+     * @param className One or more space-separated classes to be removed from the class attribute of each matched element.
+     * @see {@link https://api.jquery.com/removeClass/#removeClass-className}
+     */
+    removeClass(className?: string): JQuery;
+    /**
+     * Remove a single class, multiple classes, or all classes from each element in the set of matched elements.
+     *
+     * @param func A function returning one or more space-separated class names to be removed. Receives the index position of the element in the set and the old class value as arguments.
+     * @see {@link https://api.jquery.com/removeClass/#removeClass-function}
+     */
+    removeClass(func: (index: number, className: string) => string): JQuery;
+
+    /**
+     * Remove a property for the set of matched elements.
+     *
+     * @param propertyName The name of the property to remove.
+     * @see {@link https://api.jquery.com/removeProp/}
+     */
+    removeProp(propertyName: string): JQuery;
+
+    /**
+     * Add or remove one or more classes from each element in the set of matched elements, depending on either the class's presence or the value of the switch argument.
+     *
+     * @param className One or more class names (separated by spaces) to be toggled for each element in the matched set.
+     * @param swtch A Boolean (not just truthy/falsy) value to determine whether the class should be added or removed.
+     * @see {@link https://api.jquery.com/toggleClass/#toggleClass-className}
+     */
+    toggleClass(className: string, swtch?: boolean): JQuery;
+    /**
+     * Add or remove one or more classes from each element in the set of matched elements, depending on either the class's presence or the value of the switch argument.
+     *
+     * @param swtch A boolean value to determine whether the class should be added or removed.
+     * @see {@link https://api.jquery.com/toggleClass/#toggleClass-state}
+     */
+    toggleClass(swtch?: boolean): JQuery;
+    /**
+     * Add or remove one or more classes from each element in the set of matched elements, depending on either the class's presence or the value of the switch argument.
+     *
+     * @param func A function that returns class names to be toggled in the class attribute of each element in the matched set. Receives the index position of the element in the set, the old class value, and the switch as arguments.
+     * @param swtch A boolean value to determine whether the class should be added or removed.
+     * @see {@link https://api.jquery.com/toggleClass/#toggleClass-function-state}
+     */
+    toggleClass(func: (index: number, className: string, swtch: boolean) => string, swtch?: boolean): JQuery;
+
+    /**
+     * Get the current value of the first element in the set of matched elements.
+     * @see {@link https://api.jquery.com/val/#val}
+     */
+    val(): any;
+    /**
+     * Set the value of each element in the set of matched elements.
+     *
+     * @param value A string of text, an array of strings or number corresponding to the value of each matched element to set as selected/checked.
+     * @see {@link https://api.jquery.com/val/#val-value}
+     */
+    val(value: string|string[]|number): JQuery;
+    /**
+     * Set the value of each element in the set of matched elements.
+     *
+     * @param func A function returning the value to set. this is the current element. Receives the index position of the element in the set and the old value as arguments.
+     * @see {@link https://api.jquery.com/val/#val-function}
+     */
+    val(func: (index: number, value: string) => string): JQuery;
+
+    /**
+     * Get the value of style properties for the first element in the set of matched elements.
+     *
+     * @param propertyName A CSS property.
+     * @see {@link https://api.jquery.com/css/#css-propertyName}
+     */
+    css(propertyName: string): string;
+    /**
+     * Set one or more CSS properties for the set of matched elements.
+     *
+     * @param propertyName A CSS property name.
+     * @param value A value to set for the property.
+     * @see {@link https://api.jquery.com/css/#css-propertyName-value}
+     */
+    css(propertyName: string, value: string|number): JQuery;
+    /**
+     * Set one or more CSS properties for the set of matched elements.
+     *
+     * @param propertyName A CSS property name.
+     * @param value A function returning the value to set. this is the current element. Receives the index position of the element in the set and the old value as arguments.
+     * @see {@link https://api.jquery.com/css/#css-propertyName-function}
+     */
+    css(propertyName: string, value: (index: number, value: string) => string|number): JQuery;
+    /**
+     * Set one or more CSS properties for the set of matched elements.
+     *
+     * @param properties An object of property-value pairs to set.
+     * @see {@link https://api.jquery.com/css/#css-properties}
+     */
+    css(properties: Object): JQuery;
+
+    /**
+     * Get the current computed height for the first element in the set of matched elements.
+     * @see {@link https://api.jquery.com/height/#height}
+     */
+    height(): number;
+    /**
+     * Set the CSS height of every matched element.
+     *
+     * @param value An integer representing the number of pixels, or an integer with an optional unit of measure appended (as a string).
+     * @see {@link https://api.jquery.com/height/#height-value}
+     */
+    height(value: number|string): JQuery;
+    /**
+     * Set the CSS height of every matched element.
+     *
+     * @param func A function returning the height to set. Receives the index position of the element in the set and the old height as arguments. Within the function, this refers to the current element in the set.
+     * @see {@link https://api.jquery.com/height/#height-function}
+     */
+    height(func: (index: number, height: number) => number|string): JQuery;
+
+    /**
+     * Get the current computed height for the first element in the set of matched elements, including padding but not border.
+     * @see {@link https://api.jquery.com/innerHeight/#innerHeight}
+     */
+    innerHeight(): number;
+
+    /**
+     * Sets the inner height on elements in the set of matched elements, including padding but not border.
+     *
+     * @param value An integer representing the number of pixels, or an integer along with an optional unit of measure appended (as a string).
+     * @see {@link https://api.jquery.com/innerHeight/#innerHeight-value}
+     */
+    innerHeight(value: number|string): JQuery;
+
+    /**
+     * Get the current computed width for the first element in the set of matched elements, including padding but not border.
+     * @see {@link https://api.jquery.com/innerWidth/#innerWidth}
+     */
+    innerWidth(): number;
+
+    /**
+     * Sets the inner width on elements in the set of matched elements, including padding but not border.
+     *
+     * @param value An integer representing the number of pixels, or an integer along with an optional unit of measure appended (as a string).
+     * @see {@link https://api.jquery.com/innerWidth/#innerWidth-value}
+     */
+    innerWidth(value: number|string): JQuery;
+
+    /**
+     * Get the current coordinates of the first element in the set of matched elements, relative to the document.
+     * @see {@link https://api.jquery.com/offset/#offset}
+     */
+    offset(): JQueryCoordinates;
+    /**
+     * An object containing the properties top and left, which are integers indicating the new top and left coordinates for the elements.
+     *
+     * @param coordinates An object containing the properties top and left, which are integers indicating the new top and left coordinates for the elements.
+     * @see {@link https://api.jquery.com/offset/#offset-coordinates}
+     */
+    offset(coordinates: JQueryCoordinates): JQuery;
+    /**
+     * An object containing the properties top and left, which are integers indicating the new top and left coordinates for the elements.
+     *
+     * @param func A function to return the coordinates to set. Receives the index of the element in the collection as the first argument and the current coordinates as the second argument. The function should return an object with the new top and left properties.
+     * @see {@link https://api.jquery.com/offset/#offset-function}
+     */
+    offset(func: (index: number, coords: JQueryCoordinates) => JQueryCoordinates): JQuery;
+
+    /**
+     * Get the current computed height for the first element in the set of matched elements, including padding, border, and optionally margin. Returns an integer (without "px") representation of the value or null if called on an empty set of elements.
+     *
+     * @param includeMargin A Boolean indicating whether to include the element's margin in the calculation.
+     * @see {@link https://api.jquery.com/outerHeight/#outerHeight-includeMargin}
+     */
+    outerHeight(includeMargin?: boolean): number;
+
+    /**
+     * Sets the outer height on elements in the set of matched elements, including padding and border.
+     *
+     * @param value An integer representing the number of pixels, or an integer along with an optional unit of measure appended (as a string).
+     * @see {@link https://api.jquery.com/outerHeight/#outerHeight-value}
+     */
+    outerHeight(value: number|string): JQuery;
+
+    /**
+     * Get the current computed width for the first element in the set of matched elements, including padding and border.
+     *
+     * @param includeMargin A Boolean indicating whether to include the element's margin in the calculation.
+     * @see {@link https://api.jquery.com/outerWidth/#outerWidth-includeMargin}
+     */
+    outerWidth(includeMargin?: boolean): number;
+
+    /**
+     * Sets the outer width on elements in the set of matched elements, including padding and border.
+     *
+     * @param value An integer representing the number of pixels, or an integer along with an optional unit of measure appended (as a string).
+     * @see {@link https://api.jquery.com/outerWidth/#outerWidth-value}
+     */
+    outerWidth(value: number|string): JQuery;
+
+    /**
+     * Get the current coordinates of the first element in the set of matched elements, relative to the offset parent.
+     * @see {@link https://api.jquery.com/position/}
+     */
+    position(): JQueryCoordinates;
+
+    /**
+     * Get the current horizontal position of the scroll bar for the first element in the set of matched elements or set the horizontal position of the scroll bar for every matched element.
+     * @see {@link https://api.jquery.com/scrollLeft/#scrollLeft}
+     */
+    scrollLeft(): number;
+    /**
+     * Set the current horizontal position of the scroll bar for each of the set of matched elements.
+     *
+     * @param value An integer indicating the new position to set the scroll bar to.
+     * @see {@link https://api.jquery.com/scrollLeft/#scrollLeft-value}
+     */
+    scrollLeft(value: number): JQuery;
+
+    /**
+     * Get the current vertical position of the scroll bar for the first element in the set of matched elements or set the vertical position of the scroll bar for every matched element.
+     * @see {@link https://api.jquery.com/scrollTop/#scrollTop}
+     */
+    scrollTop(): number;
+    /**
+     * Set the current vertical position of the scroll bar for each of the set of matched elements.
+     *
+     * @param value An integer indicating the new position to set the scroll bar to.
+     * @see {@link https://api.jquery.com/scrollTop/#scrollTop-value}
+     */
+    scrollTop(value: number): JQuery;
+
+    /**
+     * Get the current computed width for the first element in the set of matched elements.
+     * @see {@link https://api.jquery.com/width/#width}
+     */
+    width(): number;
+    /**
+     * Set the CSS width of each element in the set of matched elements.
+     *
+     * @param value An integer representing the number of pixels, or an integer along with an optional unit of measure appended (as a string).
+     * @see {@link https://api.jquery.com/width/#width-value}
+     */
+    width(value: number|string): JQuery;
+    /**
+     * Set the CSS width of each element in the set of matched elements.
+     *
+     * @param func A function returning the width to set. Receives the index position of the element in the set and the old width as arguments. Within the function, this refers to the current element in the set.
+     * @see {@link https://api.jquery.com/width/#width-function}
+     */
+    width(func: (index: number, width: number) => number|string): JQuery;
+
+    /**
+     * Remove from the queue all items that have not yet been run.
+     *
+     * @param queueName A string containing the name of the queue. Defaults to fx, the standard effects queue.
+     * @see {@link https://api.jquery.com/clearQueue/}
+     */
+    clearQueue(queueName?: string): JQuery;
+
+    /**
+     * Store arbitrary data associated with the matched elements.
+     *
+     * @param key A string naming the piece of data to set.
+     * @param value The new data value; it can be any JavaScript type including Array or Object.
+     * @see {@link https://api.jquery.com/data/#data-key-value}
+     */
+    data(key: string, value: any): JQuery;
+    /**
+     * Return the value at the named data store for the first element in the jQuery collection, as set by data(name, value) or by an HTML5 data-* attribute.
+     *
+     * @param key Name of the data stored.
+     * @see {@link https://api.jquery.com/data/#data-key}
+     */
+    data(key: string): any;
+    /**
+     * Store arbitrary data associated with the matched elements.
+     *
+     * @param obj An object of key-value pairs of data to update.
+     * @see {@link https://api.jquery.com/data/#data-obj}
+     */
+    data(obj: { [key: string]: any; }): JQuery;
+    /**
+     * Return the value at the named data store for the first element in the jQuery collection, as set by data(name, value) or by an HTML5 data-* attribute.
+     * @see {@link https://api.jquery.com/data/#data}
+     */
+    data(): any;
+
+    /**
+     * Execute the next function on the queue for the matched elements.
+     *
+     * @param queueName A string containing the name of the queue. Defaults to fx, the standard effects queue.
+     * @see {@link https://api.jquery.com/dequeue/}
+     */
+    dequeue(queueName?: string): JQuery;
+
+    /**
+     * Remove a previously-stored piece of data.
+     *
+     * @param name A string naming the piece of data to delete or space-separated string naming the pieces of data to delete.
+     * @see {@link https://api.jquery.com/removeData/#removeData-name}
+     */
+    removeData(name: string): JQuery;
+    /**
+     * Remove a previously-stored piece of data.
+     *
+     * @param list An array of strings naming the pieces of data to delete.
+     * @see {@link https://api.jquery.com/removeData/#removeData-list}
+     */
+    removeData(list: string[]): JQuery;
+    /**
+     * Remove all previously-stored piece of data.
+     * @see {@link https://api.jquery.com/removeData/}
+     */
+    removeData(): JQuery;
+
+    /**
+     * Return a Promise object to observe when all actions of a certain type bound to the collection, queued or not, have finished.
+     *
+     * @param type The type of queue that needs to be observed. (default: fx)
+     * @param target Object onto which the promise methods have to be attached
+     * @see {@link https://api.jquery.com/promise/}
+     */
+    promise(type?: string, target?: Object): JQueryPromise<any>;
+
+    /**
+     * Perform a custom animation of a set of CSS properties.
+     *
+     * @param properties An object of CSS properties and values that the animation will move toward.
+     * @param duration A string or number determining how long the animation will run.
+     * @param complete A function to call once the animation is complete.
+     * @see {@link https://api.jquery.com/animate/#animate-properties-duration-easing-complete}
+     */
+    animate(properties: Object, duration?: string|number, complete?: Function): JQuery;
+    /**
+     * Perform a custom animation of a set of CSS properties.
+     *
+     * @param properties An object of CSS properties and values that the animation will move toward.
+     * @param duration A string or number determining how long the animation will run.
+     * @param easing A string indicating which easing function to use for the transition. (default: swing)
+     * @param complete A function to call once the animation is complete.
+     * @see {@link https://api.jquery.com/animate/#animate-properties-duration-easing-complete}
+     */
+    animate(properties: Object, duration?: string|number, easing?: string, complete?: Function): JQuery;
+    /**
+     * Perform a custom animation of a set of CSS properties.
+     *
+     * @param properties An object of CSS properties and values that the animation will move toward.
+     * @param options A map of additional options to pass to the method.
+     * @see {@link https://api.jquery.com/animate/#animate-properties-options}
+     */
+    animate(properties: Object, options: JQueryAnimationOptions): JQuery;
+
+    /**
+     * Set a timer to delay execution of subsequent items in the queue.
+     *
+     * @param duration An integer indicating the number of milliseconds to delay execution of the next item in the queue.
+     * @param queueName A string containing the name of the queue. Defaults to fx, the standard effects queue.
+     * @see {@link https://api.jquery.com/delay/}
+     */
+    delay(duration: number, queueName?: string): JQuery;
+
+    /**
+     * Display the matched elements by fading them to opaque.
+     *
+     * @param duration A string or number determining how long the animation will run.
+     * @param complete A function to call once the animation is complete.
+     * @see {@link https://api.jquery.com/fadeIn/#fadeIn-duration-complete}
+     */
+    fadeIn(duration?: number|string, complete?: Function): JQuery;
+    /**
+     * Display the matched elements by fading them to opaque.
+     *
+     * @param duration A string or number determining how long the animation will run.
+     * @param easing A string indicating which easing function to use for the transition.
+     * @param complete A function to call once the animation is complete.
+     * @see {@link https://api.jquery.com/fadeIn/#fadeIn-duration-easing-complete}
+     */
+    fadeIn(duration?: number|string, easing?: string, complete?: Function): JQuery;
+    /**
+     * Display the matched elements by fading them to opaque.
+     *
+     * @param options A map of additional options to pass to the method.
+     * @see {@link https://api.jquery.com/fadeIn/#fadeIn-options}
+     */
+    fadeIn(options: JQueryAnimationOptions): JQuery;
+
+    /**
+     * Hide the matched elements by fading them to transparent.
+     *
+     * @param duration A string or number determining how long the animation will run.
+     * @param complete A function to call once the animation is complete.
+     * @see {@link https://api.jquery.com/fadeOut/#fadeOut-duration-complete}
+     */
+    fadeOut(duration?: number|string, complete?: Function): JQuery;
+    /**
+     * Hide the matched elements by fading them to transparent.
+     *
+     * @param duration A string or number determining how long the animation will run.
+     * @param easing A string indicating which easing function to use for the transition.
+     * @param complete A function to call once the animation is complete.
+     * @see {@link https://api.jquery.com/fadeOut/#fadeOut-duration-easing-complete}
+     */
+    fadeOut(duration?: number|string, easing?: string, complete?: Function): JQuery;
+    /**
+     * Hide the matched elements by fading them to transparent.
+     *
+     * @param options A map of additional options to pass to the method.
+     * @see {@link https://api.jquery.com/fadeOut/#fadeOut-options}
+     */
+    fadeOut(options: JQueryAnimationOptions): JQuery;
+
+    /**
+     * Adjust the opacity of the matched elements.
+     *
+     * @param duration A string or number determining how long the animation will run.
+     * @param opacity A number between 0 and 1 denoting the target opacity.
+     * @param complete A function to call once the animation is complete.
+     * @see {@link https://api.jquery.com/fadeTo/#fadeTo-duration-opacity-complete}
+     */
+    fadeTo(duration: string|number, opacity: number, complete?: Function): JQuery;
+    /**
+     * Adjust the opacity of the matched elements.
+     *
+     * @param duration A string or number determining how long the animation will run.
+     * @param opacity A number between 0 and 1 denoting the target opacity.
+     * @param easing A string indicating which easing function to use for the transition.
+     * @param complete A function to call once the animation is complete.
+     * @see {@link https://api.jquery.com/fadeTo/#fadeTo-duration-opacity-easing-complete}
+     */
+    fadeTo(duration: string|number, opacity: number, easing?: string, complete?: Function): JQuery;
+
+    /**
+     * Display or hide the matched elements by animating their opacity.
+     *
+     * @param duration A string or number determining how long the animation will run.
+     * @param complete A function to call once the animation is complete.
+     * @see {@link https://api.jquery.com/fadeToggle/#fadeToggle-duration-easing-complete}
+     */
+    fadeToggle(duration?: number|string, complete?: Function): JQuery;
+    /**
+     * Display or hide the matched elements by animating their opacity.
+     *
+     * @param duration A string or number determining how long the animation will run.
+     * @param easing A string indicating which easing function to use for the transition.
+     * @param complete A function to call once the animation is complete.
+     * @see {@link https://api.jquery.com/fadeToggle/#fadeToggle-duration-easing-complete}
+     */
+    fadeToggle(duration?: number|string, easing?: string, complete?: Function): JQuery;
+    /**
+     * Display or hide the matched elements by animating their opacity.
+     *
+     * @param options A map of additional options to pass to the method.
+     * @see {@link https://api.jquery.com/fadeToggle/#fadeToggle-options}
+     */
+    fadeToggle(options: JQueryAnimationOptions): JQuery;
+
+    /**
+     * Stop the currently-running animation, remove all queued animations, and complete all animations for the matched elements.
+     *
+     * @param queue The name of the queue in which to stop animations.
+     * @see {@link https://api.jquery.com/finish/}
+     */
+    finish(queue?: string): JQuery;
+
+    /**
+     * Hide the matched elements.
+     *
+     * @param duration A string or number determining how long the animation will run.
+     * @param complete A function to call once the animation is complete.
+     * @see {@link https://api.jquery.com/hide/#hide}
+     */
+    hide(duration?: number|string, complete?: Function): JQuery;
+    /**
+     * Hide the matched elements.
+     *
+     * @param duration A string or number determining how long the animation will run.
+     * @param easing A string indicating which easing function to use for the transition.
+     * @param complete A function to call once the animation is complete.
+     * @see {@link https://api.jquery.com/hide/#hide-duration-easing-complete}
+     */
+    hide(duration?: number|string, easing?: string, complete?: Function): JQuery;
+    /**
+     * Hide the matched elements.
+     *
+     * @param options A map of additional options to pass to the method.
+     * @see {@link https://api.jquery.com/hide/#hide-options}
+     */
+    hide(options: JQueryAnimationOptions): JQuery;
+
+    /**
+     * Display the matched elements.
+     *
+     * @param duration A string or number determining how long the animation will run.
+     * @param complete A function to call once the animation is complete.
+     * @see {@link https://api.jquery.com/show/#show}
+     */
+    show(duration?: number|string, complete?: Function): JQuery;
+    /**
+     * Display the matched elements.
+     *
+     * @param duration A string or number determining how long the animation will run.
+     * @param easing A string indicating which easing function to use for the transition.
+     * @param complete A function to call once the animation is complete.
+     * @see {@link https://api.jquery.com/show/#show-duration-easing-complete}
+     */
+    show(duration?: number|string, easing?: string, complete?: Function): JQuery;
+    /**
+     * Display the matched elements.
+     *
+     * @param options A map of additional options to pass to the method.
+     * @see {@link https://api.jquery.com/show/#show-options}
+     */
+    show(options: JQueryAnimationOptions): JQuery;
+
+    /**
+     * Display the matched elements with a sliding motion.
+     *
+     * @param duration A string or number determining how long the animation will run.
+     * @param complete A function to call once the animation is complete.
+     * @see {@link https://api.jquery.com/slideDown/#slideDown-duration-complete}
+     */
+    slideDown(duration?: number|string, complete?: Function): JQuery;
+    /**
+     * Display the matched elements with a sliding motion.
+     *
+     * @param duration A string or number determining how long the animation will run.
+     * @param easing A string indicating which easing function to use for the transition.
+     * @param complete A function to call once the animation is complete.
+     * @see {@link https://api.jquery.com/slideDown/#slideDown-duration-easing-complete}
+     */
+    slideDown(duration?: number|string, easing?: string, complete?: Function): JQuery;
+    /**
+     * Display the matched elements with a sliding motion.
+     *
+     * @param options A map of additional options to pass to the method.
+     * @see {@link https://api.jquery.com/slideDown/#slideDown-options}
+     */
+    slideDown(options: JQueryAnimationOptions): JQuery;
+
+    /**
+     * Display or hide the matched elements with a sliding motion.
+     *
+     * @param duration A string or number determining how long the animation will run.
+     * @param complete A function to call once the animation is complete.
+     * @see {@link https://api.jquery.com/slideToggle/#slideToggle-duration-complete}
+     */
+    slideToggle(duration?: number|string, complete?: Function): JQuery;
+    /**
+     * Display or hide the matched elements with a sliding motion.
+     *
+     * @param duration A string or number determining how long the animation will run.
+     * @param easing A string indicating which easing function to use for the transition.
+     * @param complete A function to call once the animation is complete.
+     * @see {@link https://api.jquery.com/slideToggle/#slideToggle-duration-easing-complete}
+     */
+    slideToggle(duration?: number|string, easing?: string, complete?: Function): JQuery;
+    /**
+     * Display or hide the matched elements with a sliding motion.
+     *
+     * @param options A map of additional options to pass to the method.
+     * @see {@link https://api.jquery.com/slideToggle/#slideToggle-options}
+     */
+    slideToggle(options: JQueryAnimationOptions): JQuery;
+
+    /**
+     * Hide the matched elements with a sliding motion.
+     *
+     * @param duration A string or number determining how long the animation will run.
+     * @param complete A function to call once the animation is complete.
+     * @see {@link https://api.jquery.com/slideUp/#slideUp-duration-complete}
+     */
+    slideUp(duration?: number|string, complete?: Function): JQuery;
+    /**
+     * Hide the matched elements with a sliding motion.
+     *
+     * @param duration A string or number determining how long the animation will run.
+     * @param easing A string indicating which easing function to use for the transition.
+     * @param complete A function to call once the animation is complete.
+     * @see {@link https://api.jquery.com/slideUp/#slideUp-duration-easing-complete}
+     */
+    slideUp(duration?: number|string, easing?: string, complete?: Function): JQuery;
+    /**
+     * Hide the matched elements with a sliding motion.
+     *
+     * @param options A map of additional options to pass to the method.
+     * @see {@link https://api.jquery.com/slideUp/#slideUp-options}
+     */
+    slideUp(options: JQueryAnimationOptions): JQuery;
+
+    /**
+     * Stop the currently-running animation on the matched elements.
+     *
+     * @param clearQueue A Boolean indicating whether to remove queued animation as well. Defaults to false.
+     * @param jumpToEnd A Boolean indicating whether to complete the current animation immediately. Defaults to false.
+     * @see {@link https://api.jquery.com/stop/#stop-clearQueue-jumpToEnd}
+     */
+    stop(clearQueue?: boolean, jumpToEnd?: boolean): JQuery;
+    /**
+     * Stop the currently-running animation on the matched elements.
+     *
+     * @param queue The name of the queue in which to stop animations.
+     * @param clearQueue A Boolean indicating whether to remove queued animation as well. Defaults to false.
+     * @param jumpToEnd A Boolean indicating whether to complete the current animation immediately. Defaults to false.
+     * @see {@link https://api.jquery.com/stop/#stop-queue-clearQueue-jumpToEnd}
+     */
+    stop(queue?: string, clearQueue?: boolean, jumpToEnd?: boolean): JQuery;
+
+    /**
+     * Display or hide the matched elements.
+     *
+     * @param duration A string or number determining how long the animation will run.
+     * @param complete A function to call once the animation is complete.
+     * @see {@link https://api.jquery.com/toggle/#toggle-duration-complete}
+     */
+    toggle(duration?: number|string, complete?: Function): JQuery;
+    /**
+     * Display or hide the matched elements.
+     *
+     * @param duration A string or number determining how long the animation will run.
+     * @param easing A string indicating which easing function to use for the transition.
+     * @param complete A function to call once the animation is complete.
+     * @see {@link https://api.jquery.com/toggle/#toggle-duration-easing-complete}
+     */
+    toggle(duration?: number|string, easing?: string, complete?: Function): JQuery;
+    /**
+     * Display or hide the matched elements.
+     *
+     * @param options A map of additional options to pass to the method.
+     * @see {@link https://api.jquery.com/toggle/#toggle-options}
+     */
+    toggle(options: JQueryAnimationOptions): JQuery;
+    /**
+     * Display or hide the matched elements.
+     *
+     * @param showOrHide A Boolean indicating whether to show or hide the elements.
+     * @see {@link https://api.jquery.com/toggle/#toggle-display}
+     */
+    toggle(showOrHide: boolean): JQuery;
+
+    /**
+     * Attach a handler to an event for the elements.
+     *
+     * @param eventType A string containing one or more DOM event types, such as "click" or "submit," or custom event names.
+     * @param eventData An object containing data that will be passed to the event handler.
+     * @param handler A function to execute each time the event is triggered.
+     * @see {@link https://api.jquery.com/bind/#bind-eventType-eventData-handler}
+     */
+    bind(eventType: string, eventData: any, handler: (eventObject: JQueryEventObject) => any): JQuery;
+    /**
+     * Attach a handler to an event for the elements.
+     *
+     * @param eventType A string containing one or more DOM event types, such as "click" or "submit," or custom event names.
+     * @param handler A function to execute each time the event is triggered.
+     * @see {@link https://api.jquery.com/bind/#bind-eventType-eventData-handler}
+     */
+    bind(eventType: string, handler: (eventObject: JQueryEventObject) => any): JQuery;
+    /**
+     * Attach a handler to an event for the elements.
+     *
+     * @param eventType A string containing one or more DOM event types, such as "click" or "submit," or custom event names.
+     * @param eventData An object containing data that will be passed to the event handler.
+     * @param preventBubble Setting the third argument to false will attach a function that prevents the default action from occurring and stops the event from bubbling. The default is true.
+     * @see {@link https://api.jquery.com/bind/#bind-eventType-eventData-preventBubble}
+     */
+    bind(eventType: string, eventData: any, preventBubble: boolean): JQuery;
+    /**
+     * Attach a handler to an event for the elements.
+     *
+     * @param eventType A string containing one or more DOM event types, such as "click" or "submit," or custom event names.
+     * @param preventBubble Setting the third argument to false will attach a function that prevents the default action from occurring and stops the event from bubbling. The default is true.
+     * @see {@link https://api.jquery.com/bind/#bind-eventType-eventData-preventBubble}
+     */
+    bind(eventType: string, preventBubble: boolean): JQuery;
+    /**
+     * Attach a handler to an event for the elements.
+     *
+     * @param events An object containing one or more DOM event types and functions to execute for them.
+     * @see {@link https://api.jquery.com/bind/#bind-events}
+     */
+    bind(events: any): JQuery;
+
+    /**
+     * Trigger the "blur" event on an element
+     * @see {@link https://api.jquery.com/blur/#blur}
+     */
+    blur(): JQuery;
+    /**
+     * Bind an event handler to the "blur" JavaScript event
+     *
+     * @param handler A function to execute each time the event is triggered.
+     * @see {@link https://api.jquery.com/blur/#blur-handler}
+     */
+    blur(handler: (eventObject: JQueryEventObject) => any): JQuery;
+    /**
+     * Bind an event handler to the "blur" JavaScript event
+     *
+     * @param eventData An object containing data that will be passed to the event handler.
+     * @param handler A function to execute each time the event is triggered.
+     * @see {@link https://api.jquery.com/blur/#blur-eventData-handler}
+     */
+    blur(eventData?: any, handler?: (eventObject: JQueryEventObject) => any): JQuery;
+
+    /**
+     * Trigger the "change" event on an element.
+     * @see {@link https://api.jquery.com/change/#change}
+     */
+    change(): JQuery;
+    /**
+     * Bind an event handler to the "change" JavaScript event
+     *
+     * @param handler A function to execute each time the event is triggered.
+     * @see {@link https://api.jquery.com/change/#change-handler}
+     */
+    change(handler: (eventObject: JQueryEventObject) => any): JQuery;
+    /**
+     * Bind an event handler to the "change" JavaScript event
+     *
+     * @param eventData An object containing data that will be passed to the event handler.
+     * @param handler A function to execute each time the event is triggered.
+     * @see {@link https://api.jquery.com/change/#change-eventData-handler}
+     */
+    change(eventData?: any, handler?: (eventObject: JQueryEventObject) => any): JQuery;
+
+    /**
+     * Trigger the "click" event on an element.
+     * @see {@link https://api.jquery.com/click/#click}
+     */
+    click(): JQuery;
+    /**
+     * Bind an event handler to the "click" JavaScript event
+     *
+     * @param handler A function to execute each time the event is triggered.
+     * @see {@link https://api.jquery.com/click/#click-handler}
+     */
+    click(handler: (eventObject: JQueryEventObject) => any): JQuery;
+    /**
+     * Bind an event handler to the "click" JavaScript event
+     *
+     * @param eventData An object containing data that will be passed to the event handler.
+     * @param handler A function to execute each time the event is triggered.
+     * @see {@link https://api.jquery.com/click/#click-eventData-handler}
+     */
+    click(eventData?: any, handler?: (eventObject: JQueryEventObject) => any): JQuery;
+
+    /**
+     * Trigger the "contextmenu" event on an element.
+     * @see {@link https://api.jquery.com/contextmenu/#contextmenu}
+     */
+    contextmenu(): JQuery;
+    /**
+     * Bind an event handler to the "contextmenu" JavaScript event.
+     *
+     * @param handler A function to execute when the event is triggered.
+     * @see {@link https://api.jquery.com/contextmenu/#contextmenu-handler}
+     */
+    contextmenu(handler: (eventObject: JQueryMouseEventObject) => any): JQuery;
+    /**
+     * Bind an event handler to the "contextmenu" JavaScript event.
+     *
+     * @param eventData An object containing data that will be passed to the event handler.
+     * @param handler A function to execute when the event is triggered.
+     * @see {@link https://api.jquery.com/contextmenu/#contextmenu-eventData-handler}
+     */
+    contextmenu(eventData: Object, handler: (eventObject: JQueryMouseEventObject) => any): JQuery;
+
+    /**
+     * Trigger the "dblclick" event on an element.
+     * @see {@link https://api.jquery.com/dblclick/#dblclick}
+     */
+    dblclick(): JQuery;
+    /**
+     * Bind an event handler to the "dblclick" JavaScript event
+     *
+     * @param handler A function to execute each time the event is triggered.
+     * @see {@link https://api.jquery.com/dblclick/#dblclick-handler}
+     */
+    dblclick(handler: (eventObject: JQueryEventObject) => any): JQuery;
+    /**
+     * Bind an event handler to the "dblclick" JavaScript event
+     *
+     * @param eventData An object containing data that will be passed to the event handler.
+     * @param handler A function to execute each time the event is triggered.
+     * @see {@link https://api.jquery.com/dblclick/#dblclick-eventData-handler}
+     */
+    dblclick(eventData?: any, handler?: (eventObject: JQueryEventObject) => any): JQuery;
+
+    /**
+     * Attach a handler to one or more events for all elements that match the selector, now or in the future, based on a specific set of root elements.
+     * @see {@link https://api.jquery.com/delegate/#delegate-selector-eventType-handler}
+     */
+    delegate(selector: any, eventType: string, handler: (eventObject: JQueryEventObject) => any): JQuery;
+    /**
+     * Attach a handler to one or more events for all elements that match the selector, now or in the future, based on a specific set of root elements.
+     * @see {@link https://api.jquery.com/delegate/#delegate-selector-eventType-eventData-handler}
+     */
+    delegate(selector: any, eventType: string, eventData: any, handler: (eventObject: JQueryEventObject) => any): JQuery;
+
+    /**
+     * Trigger the "focus" event on an element.
+     * @see {@link https://api.jquery.com/focus/#focus}
+     */
+    focus(): JQuery;
+    /**
+     * Bind an event handler to the "focus" JavaScript event
+     *
+     * @param handler A function to execute each time the event is triggered.
+     * @see {@link https://api.jquery.com/focus/#focus-handler}
+     */
+    focus(handler: (eventObject: JQueryEventObject) => any): JQuery;
+    /**
+     * Bind an event handler to the "focus" JavaScript event
+     *
+     * @param eventData An object containing data that will be passed to the event handler.
+     * @param handler A function to execute each time the event is triggered.
+     * @see {@link https://api.jquery.com/focus/#focus-eventData-handler}
+     */
+    focus(eventData?: any, handler?: (eventObject: JQueryEventObject) => any): JQuery;
+
+    /**
+     * Trigger the "focusin" event on an element.
+     * @see {@link https://api.jquery.com/focusin/#focusin}
+     */
+    focusin(): JQuery;
+    /**
+     * Bind an event handler to the "focusin" JavaScript event
+     *
+     * @param handler A function to execute each time the event is triggered.
+     * @see {@link https://api.jquery.com/focusin/#focusin-handler}
+     */
+    focusin(handler: (eventObject: JQueryEventObject) => any): JQuery;
+    /**
+     * Bind an event handler to the "focusin" JavaScript event
+     *
+     * @param eventData An object containing data that will be passed to the event handler.
+     * @param handler A function to execute each time the event is triggered.
+     * @see {@link https://api.jquery.com/focusin/#focusin-eventData-handler}
+     */
+    focusin(eventData: Object, handler: (eventObject: JQueryEventObject) => any): JQuery;
+
+    /**
+     * Trigger the "focusout" event on an element.
+     * @see {@link https://api.jquery.com/focusout/#focusout}
+     */
+    focusout(): JQuery;
+    /**
+     * Bind an event handler to the "focusout" JavaScript event
+     *
+     * @param handler A function to execute each time the event is triggered.
+     * @see {@link https://api.jquery.com/focusout/#focusout-handler}
+     */
+    focusout(handler: (eventObject: JQueryEventObject) => any): JQuery;
+    /**
+     * Bind an event handler to the "focusout" JavaScript event
+     *
+     * @param eventData An object containing data that will be passed to the event handler.
+     * @param handler A function to execute each time the event is triggered.
+     * @see {@link https://api.jquery.com/focusout/#focusout-eventData-handler}
+     */
+    focusout(eventData: Object, handler: (eventObject: JQueryEventObject) => any): JQuery;
+
+    /**
+     * Bind two handlers to the matched elements, to be executed when the mouse pointer enters and leaves the elements.
+     *
+     * @param handlerIn A function to execute when the mouse pointer enters the element.
+     * @param handlerOut A function to execute when the mouse pointer leaves the element.
+     * @see {@link https://api.jquery.com/hover/#hover-handlerIn-handlerOut}
+     */
+    hover(handlerIn: (eventObject: JQueryEventObject) => any, handlerOut: (eventObject: JQueryEventObject) => any): JQuery;
+    /**
+     * Bind a single handler to the matched elements, to be executed when the mouse pointer enters or leaves the elements.
+     *
+     * @param handlerInOut A function to execute when the mouse pointer enters or leaves the element.
+     * @see {@link https://api.jquery.com/hover/#hover-handlerInOut}
+     */
+    hover(handlerInOut: (eventObject: JQueryEventObject) => any): JQuery;
+
+    /**
+     * Trigger the "keydown" event on an element.
+     * @see {@link https://api.jquery.com/keydown/#keydown}
+     */
+    keydown(): JQuery;
+    /**
+     * Bind an event handler to the "keydown" JavaScript event
+     *
+     * @param handler A function to execute each time the event is triggered.
+     * @see {@link https://api.jquery.com/keydown/#keydown-handler}
+     */
+    keydown(handler: (eventObject: JQueryKeyEventObject) => any): JQuery;
+    /**
+     * Bind an event handler to the "keydown" JavaScript event
+     *
+     * @param eventData An object containing data that will be passed to the event handler.
+     * @param handler A function to execute each time the event is triggered.
+     * @see {@link https://api.jquery.com/keydown/#keydown-eventData-handler}
+     */
+    keydown(eventData?: any, handler?: (eventObject: JQueryKeyEventObject) => any): JQuery;
+
+    /**
+     * Trigger the "keypress" event on an element.
+     * @see {@link https://api.jquery.com/keypress/#keypress}
+     */
+    keypress(): JQuery;
+    /**
+     * Bind an event handler to the "keypress" JavaScript event
+     *
+     * @param handler A function to execute each time the event is triggered.
+     * @see {@link https://api.jquery.com/keypress/#keypress-handler}
+     */
+    keypress(handler: (eventObject: JQueryKeyEventObject) => any): JQuery;
+    /**
+     * Bind an event handler to the "keypress" JavaScript event
+     *
+     * @param eventData An object containing data that will be passed to the event handler.
+     * @param handler A function to execute each time the event is triggered.
+     * @see {@link https://api.jquery.com/keypress/#keypress-eventData-handler}
+     */
+    keypress(eventData?: any, handler?: (eventObject: JQueryKeyEventObject) => any): JQuery;
+
+    /**
+     * Trigger the "keyup" event on an element.
+     * @see {@link https://api.jquery.com/keyup/#keyup}
+     */
+    keyup(): JQuery;
+    /**
+     * Bind an event handler to the "keyup" JavaScript event
+     *
+     * @param handler A function to execute each time the event is triggered.
+     * @see {@link https://api.jquery.com/keyup/#keyup-handler}
+     */
+    keyup(handler: (eventObject: JQueryKeyEventObject) => any): JQuery;
+    /**
+     * Bind an event handler to the "keyup" JavaScript event
+     *
+     * @param eventData An object containing data that will be passed to the event handler.
+     * @param handler A function to execute each time the event is triggered.
+     * @see {@link https://api.jquery.com/keyup/#keyup-eventData-handler}
+     */
+    keyup(eventData?: any, handler?: (eventObject: JQueryKeyEventObject) => any): JQuery;
+
+    /**
+     * Bind an event handler to the "load" JavaScript event.
+     *
+     * @param handler A function to execute when the event is triggered.
+     * @see {@link https://api.jquery.com/load/}
+     */
+    load(handler: (eventObject: JQueryEventObject) => any): JQuery;
+    /**
+     * Bind an event handler to the "load" JavaScript event.
+     *
+     * @param eventData An object containing data that will be passed to the event handler.
+     * @param handler A function to execute when the event is triggered.
+     * @see {@link https://api.jquery.com/load/}
+     */
+    load(eventData?: any, handler?: (eventObject: JQueryEventObject) => any): JQuery;
+
+    /**
+     * Trigger the "mousedown" event on an element.
+     * @see {@link https://api.jquery.com/mousedown/#mousedown}
+     */
+    mousedown(): JQuery;
+    /**
+     * Bind an event handler to the "mousedown" JavaScript event.
+     *
+     * @param handler A function to execute when the event is triggered.
+     * @see {@link https://api.jquery.com/mousedown/#mousedown-handler}
+     */
+    mousedown(handler: (eventObject: JQueryMouseEventObject) => any): JQuery;
+    /**
+     * Bind an event handler to the "mousedown" JavaScript event.
+     *
+     * @param eventData An object containing data that will be passed to the event handler.
+     * @param handler A function to execute when the event is triggered.
+     * @see {@link https://api.jquery.com/mousedown/#mousedown-eventData-handler}
+     */
+    mousedown(eventData: Object, handler: (eventObject: JQueryMouseEventObject) => any): JQuery;
+
+    /**
+     * Trigger the "mouseenter" event on an element.
+     * @see {@link https://api.jquery.com/mouseenter/#mouseenter}
+     */
+    mouseenter(): JQuery;
+    /**
+     * Bind an event handler to be fired when the mouse enters an element.
+     *
+     * @param handler A function to execute when the event is triggered.
+     * @see {@link https://api.jquery.com/mouseenter/#mouseenter-handler}
+     */
+    mouseenter(handler: (eventObject: JQueryMouseEventObject) => any): JQuery;
+    /**
+     * Bind an event handler to be fired when the mouse enters an element.
+     *
+     * @param eventData An object containing data that will be passed to the event handler.
+     * @param handler A function to execute when the event is triggered.
+     * @see {@link https://api.jquery.com/mouseenter/#mouseenter-eventData-handler}
+     */
+    mouseenter(eventData: Object, handler: (eventObject: JQueryMouseEventObject) => any): JQuery;
+
+    /**
+     * Trigger the "mouseleave" event on an element.
+     * @see {@link https://api.jquery.com/mouseleave/#mouseleave}
+     */
+    mouseleave(): JQuery;
+    /**
+     * Bind an event handler to be fired when the mouse leaves an element.
+     *
+     * @param handler A function to execute when the event is triggered.
+     * @see {@link https://api.jquery.com/mouseleave/#mouseleave-handler}
+     */
+    mouseleave(handler: (eventObject: JQueryMouseEventObject) => any): JQuery;
+    /**
+     * Bind an event handler to be fired when the mouse leaves an element.
+     *
+     * @param eventData An object containing data that will be passed to the event handler.
+     * @param handler A function to execute when the event is triggered.
+     * @see {@link https://api.jquery.com/mouseleave/#mouseleave-eventData-handler}
+     */
+    mouseleave(eventData: Object, handler: (eventObject: JQueryMouseEventObject) => any): JQuery;
+
+    /**
+     * Trigger the "mousemove" event on an element.
+     * @see {@link https://api.jquery.com/mousemove/#mousemove}
+     */
+    mousemove(): JQuery;
+    /**
+     * Bind an event handler to the "mousemove" JavaScript event.
+     *
+     * @param handler A function to execute when the event is triggered.
+     * @see {@link https://api.jquery.com/mousemove/#mousemove-handler}
+     */
+    mousemove(handler: (eventObject: JQueryMouseEventObject) => any): JQuery;
+    /**
+     * Bind an event handler to the "mousemove" JavaScript event.
+     *
+     * @param eventData An object containing data that will be passed to the event handler.
+     * @param handler A function to execute when the event is triggered.
+     * @see {@link https://api.jquery.com/mousemove/#mousemove-eventData-handler}
+     */
+    mousemove(eventData: Object, handler: (eventObject: JQueryMouseEventObject) => any): JQuery;
+
+    /**
+     * Trigger the "mouseout" event on an element.
+     * @see {@link https://api.jquery.com/mouseout/#mouseout}
+     */
+    mouseout(): JQuery;
+    /**
+     * Bind an event handler to the "mouseout" JavaScript event.
+     *
+     * @param handler A function to execute when the event is triggered.
+     * @see {@link https://api.jquery.com/mouseout/#mouseout-handler}
+     */
+    mouseout(handler: (eventObject: JQueryMouseEventObject) => any): JQuery;
+    /**
+     * Bind an event handler to the "mouseout" JavaScript event.
+     *
+     * @param eventData An object containing data that will be passed to the event handler.
+     * @param handler A function to execute when the event is triggered.
+     * @see {@link https://api.jquery.com/mouseout/#mouseout-eventData-handler}
+     */
+    mouseout(eventData: Object, handler: (eventObject: JQueryMouseEventObject) => any): JQuery;
+
+    /**
+     * Trigger the "mouseover" event on an element.
+     * @see {@link https://api.jquery.com/mouseover/#mouseover}
+     */
+    mouseover(): JQuery;
+    /**
+     * Bind an event handler to the "mouseover" JavaScript event.
+     *
+     * @param handler A function to execute when the event is triggered.
+     * @see {@link https://api.jquery.com/mouseover/#mouseover-handler}
+     */
+    mouseover(handler: (eventObject: JQueryMouseEventObject) => any): JQuery;
+    /**
+     * Bind an event handler to the "mouseover" JavaScript event.
+     *
+     * @param eventData An object containing data that will be passed to the event handler.
+     * @param handler A function to execute when the event is triggered.
+     * @see {@link https://api.jquery.com/mouseover/#mouseover-eventData-handler}
+     */
+    mouseover(eventData: Object, handler: (eventObject: JQueryMouseEventObject) => any): JQuery;
+
+    /**
+     * Trigger the "mouseup" event on an element.
+     * @see {@link https://api.jquery.com/mouseup/#mouseup}
+     */
+    mouseup(): JQuery;
+    /**
+     * Bind an event handler to the "mouseup" JavaScript event.
+     *
+     * @param handler A function to execute when the event is triggered.
+     * @see {@link https://api.jquery.com/mouseup/#mouseup-handler}
+     */
+    mouseup(handler: (eventObject: JQueryMouseEventObject) => any): JQuery;
+    /**
+     * Bind an event handler to the "mouseup" JavaScript event.
+     *
+     * @param eventData An object containing data that will be passed to the event handler.
+     * @param handler A function to execute when the event is triggered.
+     * @see {@link https://api.jquery.com/mouseup/#mouseup-eventData-handler}
+     */
+    mouseup(eventData: Object, handler: (eventObject: JQueryMouseEventObject) => any): JQuery;
+
+    /**
+     * Remove an event handler.
+     * @see {@link https://api.jquery.com/off/#off}
+     */
+    off(): JQuery;
+    /**
+     * Remove an event handler.
+     *
+     * @param events One or more space-separated event types and optional namespaces, or just namespaces, such as "click", "keydown.myPlugin", or ".myPlugin".
+     * @param selector A selector which should match the one originally passed to .on() when attaching event handlers.
+     * @param handler A handler function previously attached for the event(s), or the special value false.
+     * @see {@link https://api.jquery.com/off/#off-events-selector-handler}
+     */
+    off(events: string, selector?: string, handler?: (eventObject: JQueryEventObject) => any): JQuery;
+    /**
+     * Remove an event handler.
+     *
+     * @param events One or more space-separated event types and optional namespaces, or just namespaces, such as "click", "keydown.myPlugin", or ".myPlugin".
+     * @param handler A handler function previously attached for the event(s), or the special value false. Takes handler with extra args that can be attached with on().
+     * @see {@link https://api.jquery.com/off/#off-events-selector-handler}
+     */
+    off(events: string, handler: (eventObject: JQueryEventObject, ...args: any[]) => any): JQuery;
+    /**
+     * Remove an event handler.
+     *
+     * @param events One or more space-separated event types and optional namespaces, or just namespaces, such as "click", "keydown.myPlugin", or ".myPlugin".
+     * @param handler A handler function previously attached for the event(s), or the special value false.
+     * @see {@link https://api.jquery.com/off/#off-events-selector-handler}
+     */
+    off(events: string, handler: (eventObject: JQueryEventObject) => any): JQuery;
+    /**
+     * Remove an event handler.
+     *
+     * @param events An object where the string keys represent one or more space-separated event types and optional namespaces, and the values represent handler functions previously attached for the event(s).
+     * @param selector A selector which should match the one originally passed to .on() when attaching event handlers.
+     * @see {@link https://api.jquery.com/off/#off-events-selector}
+     */
+    off(events: { [key: string]: any; }, selector?: string): JQuery;
+
+    /**
+     * Attach an event handler function for one or more events to the selected elements.
+     *
+     * @param events One or more space-separated event types and optional namespaces, such as "click" or "keydown.myPlugin".
+     * @param handler A function to execute when the event is triggered. The value false is also allowed as a shorthand for a function that simply does return false. Rest parameter args is for optional parameters passed to jQuery.trigger(). Note that the actual parameters on the event handler function must be marked as optional (? syntax).
+     * @see {@link https://api.jquery.com/on/#on-events-selector-data-handler}
+     */
+    on(events: string, handler: (eventObject: JQueryEventObject, ...args: any[]) => any): JQuery;
+    /**
+     * Attach an event handler function for one or more events to the selected elements.
+     *
+     * @param events One or more space-separated event types and optional namespaces, such as "click" or "keydown.myPlugin".
+     * @param data Data to be passed to the handler in event.data when an event is triggered.
+     * @param handler A function to execute when the event is triggered. The value false is also allowed as a shorthand for a function that simply does return false.
+     * @see {@link https://api.jquery.com/on/#on-events-selector-data-handler}
+    */
+    on(events: string, data : any, handler: (eventObject: JQueryEventObject, ...args: any[]) => any): JQuery;
+    /**
+     * Attach an event handler function for one or more events to the selected elements.
+     *
+     * @param events One or more space-separated event types and optional namespaces, such as "click" or "keydown.myPlugin".
+     * @param selector A selector string to filter the descendants of the selected elements that trigger the event. If the selector is null or omitted, the event is always triggered when it reaches the selected element.
+     * @param handler A function to execute when the event is triggered. The value false is also allowed as a shorthand for a function that simply does return false.
+     * @see {@link https://api.jquery.com/on/#on-events-selector-data-handler}
+     */
+    on(events: string, selector: string, handler: (eventObject: JQueryEventObject, ...eventData: any[]) => any): JQuery;
+    /**
+     * Attach an event handler function for one or more events to the selected elements.
+     *
+     * @param events One or more space-separated event types and optional namespaces, such as "click" or "keydown.myPlugin".
+     * @param selector A selector string to filter the descendants of the selected elements that trigger the event. If the selector is null or omitted, the event is always triggered when it reaches the selected element.
+     * @param data Data to be passed to the handler in event.data when an event is triggered.
+     * @param handler A function to execute when the event is triggered. The value false is also allowed as a shorthand for a function that simply does return false.
+     * @see {@link https://api.jquery.com/on/#on-events-selector-data-handler}
+     */
+    on(events: string, selector: string, data: any, handler: (eventObject: JQueryEventObject, ...eventData: any[]) => any): JQuery;
+    /**
+     * Attach an event handler function for one or more events to the selected elements.
+     *
+     * @param events An object in which the string keys represent one or more space-separated event types and optional namespaces, and the values represent a handler function to be called for the event(s).
+     * @param selector A selector string to filter the descendants of the selected elements that will call the handler. If the selector is null or omitted, the handler is always called when it reaches the selected element.
+     * @param data Data to be passed to the handler in event.data when an event occurs.
+     * @see {@link https://api.jquery.com/on/#on-events-selector-data}
+     */
+    on(events: { [key: string]: any; }, selector?: string, data?: any): JQuery;
+    /**
+     * Attach an event handler function for one or more events to the selected elements.
+     *
+     * @param events An object in which the string keys represent one or more space-separated event types and optional namespaces, and the values represent a handler function to be called for the event(s).
+     * @param data Data to be passed to the handler in event.data when an event occurs.
+     * @see {@link https://api.jquery.com/on/#on-events-selector-data}
+     */
+    on(events: { [key: string]: any; }, data?: any): JQuery;
+
+    /**
+     * Attach a handler to an event for the elements. The handler is executed at most once per element per event type.
+     *
+     * @param events A string containing one or more JavaScript event types, such as "click" or "submit," or custom event names.
+     * @param handler A function to execute at the time the event is triggered.
+     * @see {@link https://api.jquery.com/one/#one-events-data-handler}
+     */
+    one(events: string, handler: (eventObject: JQueryEventObject) => any): JQuery;
+    /**
+     * Attach a handler to an event for the elements. The handler is executed at most once per element per event type.
+     *
+     * @param events A string containing one or more JavaScript event types, such as "click" or "submit," or custom event names.
+     * @param data An object containing data that will be passed to the event handler.
+     * @param handler A function to execute at the time the event is triggered.
+     * @see {@link https://api.jquery.com/one/#one-events-data-handler}
+     */
+    one(events: string, data: Object, handler: (eventObject: JQueryEventObject) => any): JQuery;
+
+    /**
+     * Attach a handler to an event for the elements. The handler is executed at most once per element per event type.
+     *
+     * @param events One or more space-separated event types and optional namespaces, such as "click" or "keydown.myPlugin".
+     * @param selector A selector string to filter the descendants of the selected elements that trigger the event. If the selector is null or omitted, the event is always triggered when it reaches the selected element.
+     * @param handler A function to execute when the event is triggered. The value false is also allowed as a shorthand for a function that simply does return false.
+     * @see {@link https://api.jquery.com/one/#one-events-selector-data-handler}
+     */
+    one(events: string, selector: string, handler: (eventObject: JQueryEventObject) => any): JQuery;
+    /**
+     * Attach a handler to an event for the elements. The handler is executed at most once per element per event type.
+     *
+     * @param events One or more space-separated event types and optional namespaces, such as "click" or "keydown.myPlugin".
+     * @param selector A selector string to filter the descendants of the selected elements that trigger the event. If the selector is null or omitted, the event is always triggered when it reaches the selected element.
+     * @param data Data to be passed to the handler in event.data when an event is triggered.
+     * @param handler A function to execute when the event is triggered. The value false is also allowed as a shorthand for a function that simply does return false.
+     * @see {@link https://api.jquery.com/one/#one-events-selector-data-handler}
+     */
+    one(events: string, selector: string, data: any, handler: (eventObject: JQueryEventObject) => any): JQuery;
+
+    /**
+     * Attach a handler to an event for the elements. The handler is executed at most once per element per event type.
+     *
+     * @param events An object in which the string keys represent one or more space-separated event types and optional namespaces, and the values represent a handler function to be called for the event(s).
+     * @param selector A selector string to filter the descendants of the selected elements that will call the handler. If the selector is null or omitted, the handler is always called when it reaches the selected element.
+     * @param data Data to be passed to the handler in event.data when an event occurs.
+     * @see {@link https://api.jquery.com/one/#one-events-selector-data}
+     */
+    one(events: { [key: string]: any; }, selector?: string, data?: any): JQuery;
+
+    /**
+     * Attach a handler to an event for the elements. The handler is executed at most once per element per event type.
+     *
+     * @param events An object in which the string keys represent one or more space-separated event types and optional namespaces, and the values represent a handler function to be called for the event(s).
+     * @param data Data to be passed to the handler in event.data when an event occurs.
+     * @see {@link https://api.jquery.com/one/#one-events-selector-data}
+     */
+    one(events: { [key: string]: any; }, data?: any): JQuery;
+
+
+    /**
+     * Specify a function to execute when the DOM is fully loaded.
+     *
+     * @param handler A function to execute after the DOM is ready.
+     * @see {@link https://api.jquery.com/ready/}
+     */
+    ready(handler: (jQueryAlias?: JQueryStatic) => any): JQuery;
+
+    /**
+     * Trigger the "resize" event on an element.
+     * @see {@link https://api.jquery.com/resize/#resize}
+     */
+    resize(): JQuery;
+    /**
+     * Bind an event handler to the "resize" JavaScript event.
+     *
+     * @param handler A function to execute each time the event is triggered.
+     * @see {@link https://api.jquery.com/resize/#resize-handler}
+     */
+    resize(handler: (eventObject: JQueryEventObject) => any): JQuery;
+    /**
+     * Bind an event handler to the "resize" JavaScript event.
+     *
+     * @param eventData An object containing data that will be passed to the event handler.
+     * @param handler A function to execute each time the event is triggered.
+     * @see {@link https://api.jquery.com/resize/#resize-eventData-handler}
+     */
+    resize(eventData: Object, handler: (eventObject: JQueryEventObject) => any): JQuery;
+
+    /**
+     * Trigger the "scroll" event on an element.
+     * @see {@link https://api.jquery.com/scroll/#scroll}
+     */
+    scroll(): JQuery;
+    /**
+     * Bind an event handler to the "scroll" JavaScript event.
+     *
+     * @param handler A function to execute each time the event is triggered.
+     * @see {@link https://api.jquery.com/scroll/#scroll-handler}
+     */
+    scroll(handler: (eventObject: JQueryEventObject) => any): JQuery;
+    /**
+     * Bind an event handler to the "scroll" JavaScript event.
+     *
+     * @param eventData An object containing data that will be passed to the event handler.
+     * @param handler A function to execute each time the event is triggered.
+     * @see {@link https://api.jquery.com/scroll/#scroll-eventData-handler}
+     */
+    scroll(eventData: Object, handler: (eventObject: JQueryEventObject) => any): JQuery;
+
+    /**
+     * Trigger the "select" event on an element.
+     * @see {@link https://api.jquery.com/select/#select}
+     */
+    select(): JQuery;
+    /**
+     * Bind an event handler to the "select" JavaScript event.
+     *
+     * @param handler A function to execute each time the event is triggered.
+     * @see {@link https://api.jquery.com/select/#select-handler}
+     */
+    select(handler: (eventObject: JQueryEventObject) => any): JQuery;
+    /**
+     * Bind an event handler to the "select" JavaScript event.
+     *
+     * @param eventData An object containing data that will be passed to the event handler.
+     * @param handler A function to execute each time the event is triggered.
+     * @see {@link https://api.jquery.com/select/#select-eventData-handler}
+     */
+    select(eventData: Object, handler: (eventObject: JQueryEventObject) => any): JQuery;
+
+    /**
+     * Trigger the "submit" event on an element.
+     * @see {@link https://api.jquery.com/submit/#submit}
+     */
+    submit(): JQuery;
+    /**
+     * Bind an event handler to the "submit" JavaScript event
+     *
+     * @param handler A function to execute each time the event is triggered.
+     * @see {@link https://api.jquery.com/submit/#submit-handler}
+     */
+    submit(handler: (eventObject: JQueryEventObject) => any): JQuery;
+    /**
+     * Bind an event handler to the "submit" JavaScript event
+     *
+     * @param eventData An object containing data that will be passed to the event handler.
+     * @param handler A function to execute each time the event is triggered.
+     * @see {@link https://api.jquery.com/submit/#submit-eventData-handler}
+     */
+    submit(eventData?: any, handler?: (eventObject: JQueryEventObject) => any): JQuery;
+
+    /**
+     * Execute all handlers and behaviors attached to the matched elements for the given event type.
+     *
+     * @param eventType A string containing a JavaScript event type, such as click or submit.
+     * @param extraParameters Additional parameters to pass along to the event handler.
+     * @see {@link https://api.jquery.com/trigger/#trigger-eventType-extraParameters}
+     */
+    trigger(eventType: string, extraParameters?: any[]|Object): JQuery;
+    /**
+     * Execute all handlers and behaviors attached to the matched elements for the given event type.
+     *
+     * @param event A jQuery.Event object.
+     * @param extraParameters Additional parameters to pass along to the event handler.
+     * @see {@link https://api.jquery.com/trigger/#trigger-event-extraParameters}
+     */
+    trigger(event: JQueryEventObject, extraParameters?: any[]|Object): JQuery;
+
+    /**
+     * Execute all handlers attached to an element for an event.
+     *
+     * @param eventType A string containing a JavaScript event type, such as click or submit.
+     * @param extraParameters An array of additional parameters to pass along to the event handler.
+     * @see {@link https://api.jquery.com/triggerHandler/#triggerHandler-eventType-extraParameters}
+     */
+    triggerHandler(eventType: string, ...extraParameters: any[]): Object;
+
+    /**
+     * Execute all handlers attached to an element for an event.
+     *
+     * @param event A jQuery.Event object.
+     * @param extraParameters An array of additional parameters to pass along to the event handler.
+     * @see {@link https://api.jquery.com/triggerHandler/#triggerHandler-event-extraParameters}
+     */
+    triggerHandler(event: JQueryEventObject, ...extraParameters: any[]): Object;
+
+    /**
+     * Remove a previously-attached event handler from the elements.
+     *
+     * @param eventType A string containing a JavaScript event type, such as click or submit.
+     * @param handler The function that is to be no longer executed.
+     * @see {@link https://api.jquery.com/unbind/#unbind-eventType-handler}
+     */
+    unbind(eventType?: string, handler?: (eventObject: JQueryEventObject) => any): JQuery;
+    /**
+     * Remove a previously-attached event handler from the elements.
+     *
+     * @param eventType A string containing a JavaScript event type, such as click or submit.
+     * @param fls Unbinds the corresponding 'return false' function that was bound using .bind( eventType, false ).
+     * @see {@link https://api.jquery.com/unbind/#unbind-eventType-false}
+     */
+    unbind(eventType: string, fls: boolean): JQuery;
+    /**
+     * Remove a previously-attached event handler from the elements.
+     *
+     * @param evt A JavaScript event object as passed to an event handler.
+     * @see {@link https://api.jquery.com/unbind/#unbind-event}
+     */
+    unbind(evt: any): JQuery;
+
+    /**
+     * Remove a handler from the event for all elements which match the current selector, based upon a specific set of root elements.
+     * @see {@link https://api.jquery.com/undelegate/#undelegate}
+     */
+    undelegate(): JQuery;
+    /**
+     * Remove a handler from the event for all elements which match the current selector, based upon a specific set of root elements.
+     *
+     * @param selector A selector which will be used to filter the event results.
+     * @param eventType A string containing a JavaScript event type, such as "click" or "keydown"
+     * @param handler A function to execute at the time the event is triggered.
+     * @see {@link https://api.jquery.com/undelegate/#undelegate-selector-eventType}
+     */
+    undelegate(selector: string, eventType: string, handler?: (eventObject: JQueryEventObject) => any): JQuery;
+    /**
+     * Remove a handler from the event for all elements which match the current selector, based upon a specific set of root elements.
+     *
+     * @param selector A selector which will be used to filter the event results.
+     * @param events An object of one or more event types and previously bound functions to unbind from them.
+     * @see {@link https://api.jquery.com/undelegate/#undelegate-selector-events}
+     */
+    undelegate(selector: string, events: Object): JQuery;
+    /**
+     * Remove a handler from the event for all elements which match the current selector, based upon a specific set of root elements.
+     *
+     * @param namespace A string containing a namespace to unbind all events from.
+     * @see {@link https://api.jquery.com/undelegate/#undelegate-namespace}
+     */
+    undelegate(namespace: string): JQuery;
+
+    /**
+     * Bind an event handler to the "unload" JavaScript event. (DEPRECATED from v1.8)
+     *
+     * @param handler A function to execute when the event is triggered.
+     * @see {@link https://api.jquery.com/unload/#unload-handler}
+     */
+    unload(handler: (eventObject: JQueryEventObject) => any): JQuery;
+    /**
+     * Bind an event handler to the "unload" JavaScript event. (DEPRECATED from v1.8)
+     *
+     * @param eventData A plain object of data that will be passed to the event handler.
+     * @param handler A function to execute when the event is triggered.
+     * @see {@link https://api.jquery.com/unload/#unload-eventData-handler}
+     */
+    unload(eventData?: any, handler?: (eventObject: JQueryEventObject) => any): JQuery;
+
+    /**
+     * The DOM node context originally passed to jQuery(); if none was passed then context will likely be the document. (DEPRECATED from v1.10)
+     * @see {@link https://api.jquery.com/context/}
+     */
+    context: Element;
+
+    jquery: string;
+
+    /**
+     * Bind an event handler to the "error" JavaScript event. (DEPRECATED from v1.8)
+     *
+     * @param handler A function to execute when the event is triggered.
+     * @see {@link https://api.jquery.com/error/#error-handler}
+     */
+    error(handler: (eventObject: JQueryEventObject) => any): JQuery;
+    /**
+     * Bind an event handler to the "error" JavaScript event. (DEPRECATED from v1.8)
+     *
+     * @param eventData A plain object of data that will be passed to the event handler.
+     * @param handler A function to execute when the event is triggered.
+     * @see {@link https://api.jquery.com/error/#error-eventData-handler}
+     */
+    error(eventData: any, handler: (eventObject: JQueryEventObject) => any): JQuery;
+
+    /**
+     * Add a collection of DOM elements onto the jQuery stack.
+     *
+     * @param elements An array of elements to push onto the stack and make into a new jQuery object.
+     * @see {@link https://api.jquery.com/pushStack/#pushStack-elements}
+     */
+    pushStack(elements: any[]): JQuery;
+    /**
+     * Add a collection of DOM elements onto the jQuery stack.
+     *
+     * @param elements An array of elements to push onto the stack and make into a new jQuery object.
+     * @param name The name of a jQuery method that generated the array of elements.
+     * @param arguments The arguments that were passed in to the jQuery method (for serialization).
+     * @see {@link https://api.jquery.com/pushStack/#pushStack-elements-name-arguments}
+     */
+    pushStack(elements: any[], name: string, arguments: any[]): JQuery;
+
+    /**
+     * Insert content, specified by the parameter, after each element in the set of matched elements.
+     *
+     * @param content1 HTML string, DOM element, DocumentFragment, array of elements, or jQuery object to insert after each element in the set of matched elements.
+     * @param content2 One or more additional DOM elements, arrays of elements, HTML strings, or jQuery objects to insert after each element in the set of matched elements.
+     * @see {@link https://api.jquery.com/after/#after-content-content}
+     */
+    after(content1: JQuery|any[]|Element|DocumentFragment|Text|string, ...content2: any[]): JQuery;
+    /**
+     * Insert content, specified by the parameter, after each element in the set of matched elements.
+     *
+     * @param func A function that returns an HTML string, DOM element(s), or jQuery object to insert after each element in the set of matched elements. Receives the index position of the element in the set as an argument. Within the function, this refers to the current element in the set.
+     * @see {@link https://api.jquery.com/after/#after-function}
+     */
+    after(func: (index: number, html: string) => string|Element|JQuery): JQuery;
+
+    /**
+     * Insert content, specified by the parameter, to the end of each element in the set of matched elements.
+     *
+     * @param content1 DOM element, DocumentFragment, array of elements, HTML string, or jQuery object to insert at the end of each element in the set of matched elements.
+     * @param content2 One or more additional DOM elements, arrays of elements, HTML strings, or jQuery objects to insert at the end of each element in the set of matched elements.
+     * @see {@link https://api.jquery.com/append/#append-content-content}
+     */
+    append(content1: JQuery|any[]|Element|DocumentFragment|Text|string, ...content2: any[]): JQuery;
+    /**
+     * Insert content, specified by the parameter, to the end of each element in the set of matched elements.
+     *
+     * @param func A function that returns an HTML string, DOM element(s), or jQuery object to insert at the end of each element in the set of matched elements. Receives the index position of the element in the set and the old HTML value of the element as arguments. Within the function, this refers to the current element in the set.
+     * @see {@link https://api.jquery.com/append/#append-function}
+     */
+    append(func: (index: number, html: string) => string|Element|JQuery): JQuery;
+
+    /**
+     * Insert every element in the set of matched elements to the end of the target.
+     *
+     * @param target A selector, element, HTML string, array of elements, or jQuery object; the matched set of elements will be inserted at the end of the element(s) specified by this parameter.
+     * @see {@link https://api.jquery.com/appendTo/}
+     */
+    appendTo(target: JQuery|any[]|Element|string): JQuery;
+
+    /**
+     * Insert content, specified by the parameter, before each element in the set of matched elements.
+     *
+     * @param content1 HTML string, DOM element, DocumentFragment, array of elements, or jQuery object to insert before each element in the set of matched elements.
+     * @param content2 One or more additional DOM elements, arrays of elements, HTML strings, or jQuery objects to insert before each element in the set of matched elements.
+     * @see {@link https://api.jquery.com/before/#before-content-content}
+     */
+    before(content1: JQuery|any[]|Element|DocumentFragment|Text|string, ...content2: any[]): JQuery;
+    /**
+     * Insert content, specified by the parameter, before each element in the set of matched elements.
+     *
+     * @param func A function that returns an HTML string, DOM element(s), or jQuery object to insert before each element in the set of matched elements. Receives the index position of the element in the set as an argument. Within the function, this refers to the current element in the set.
+     * @see {@link https://api.jquery.com/before/#before-function}
+     */
+    before(func: (index: number, html: string) => string|Element|JQuery): JQuery;
+
+    /**
+     * Create a deep copy of the set of matched elements.
+     *
+     * @param withDataAndEvents A Boolean indicating whether event handlers and data should be copied along with the elements. The default value is false.
+     * @param deepWithDataAndEvents A Boolean indicating whether event handlers and data for all children of the cloned element should be copied. By default its value matches the first argument's value (which defaults to false).
+     * @see {@link https://api.jquery.com/clone/}
+     */
+    clone(withDataAndEvents?: boolean, deepWithDataAndEvents?: boolean): JQuery;
+
+    /**
+     * Remove the set of matched elements from the DOM.
+     *
+     * @param selector A selector expression that filters the set of matched elements to be removed.
+     * @see {@link https://api.jquery.com/detach/}
+     */
+    detach(selector?: string): JQuery;
+
+    /**
+     * Remove all child nodes of the set of matched elements from the DOM.
+     * @see {@link https://api.jquery.com/empty/}
+     */
+    empty(): JQuery;
+
+    /**
+     * Insert every element in the set of matched elements after the target.
+     *
+     * @param target A selector, element, array of elements, HTML string, or jQuery object; the matched set of elements will be inserted after the element(s) specified by this parameter.
+     * @see {@link https://api.jquery.com/insertAfter/}
+     */
+    insertAfter(target: JQuery|any[]|Element|Text|string): JQuery;
+
+    /**
+     * Insert every element in the set of matched elements before the target.
+     *
+     * @param target A selector, element, array of elements, HTML string, or jQuery object; the matched set of elements will be inserted before the element(s) specified by this parameter.
+     * @see {@link https://api.jquery.com/insertBefore/}
+     */
+    insertBefore(target: JQuery|any[]|Element|Text|string): JQuery;
+
+    /**
+     * Insert content, specified by the parameter, to the beginning of each element in the set of matched elements.
+     *
+     * @param content1 DOM element, DocumentFragment, array of elements, HTML string, or jQuery object to insert at the beginning of each element in the set of matched elements.
+     * @param content2 One or more additional DOM elements, arrays of elements, HTML strings, or jQuery objects to insert at the beginning of each element in the set of matched elements.
+     * @see {@link https://api.jquery.com/prepend/#prepend-content-content}
+     */
+    prepend(content1: JQuery|any[]|Element|DocumentFragment|Text|string, ...content2: any[]): JQuery;
+    /**
+     * Insert content, specified by the parameter, to the beginning of each element in the set of matched elements.
+     *
+     * @param func A function that returns an HTML string, DOM element(s), or jQuery object to insert at the beginning of each element in the set of matched elements. Receives the index position of the element in the set and the old HTML value of the element as arguments. Within the function, this refers to the current element in the set.
+     * @see {@link https://api.jquery.com/prepend/#prepend-function}
+     */
+    prepend(func: (index: number, html: string) => string|Element|JQuery): JQuery;
+
+    /**
+     * Insert every element in the set of matched elements to the beginning of the target.
+     *
+     * @param target A selector, element, HTML string, array of elements, or jQuery object; the matched set of elements will be inserted at the beginning of the element(s) specified by this parameter.
+     * @see {@link https://api.jquery.com/prependTo/}
+     */
+    prependTo(target: JQuery|any[]|Element|string): JQuery;
+
+    /**
+     * Remove the set of matched elements from the DOM.
+     *
+     * @param selector A selector expression that filters the set of matched elements to be removed.
+     * @see {@link https://api.jquery.com/remove/}
+     */
+    remove(selector?: string): JQuery;
+
+    /**
+     * Replace each target element with the set of matched elements.
+     *
+     * @param target A selector string, jQuery object, DOM element, or array of elements indicating which element(s) to replace.
+     * @see {@link https://api.jquery.com/replaceAll/}
+     */
+    replaceAll(target: JQuery|any[]|Element|string): JQuery;
+
+    /**
+     * Replace each element in the set of matched elements with the provided new content and return the set of elements that was removed.
+     *
+     * @param newContent The content to insert. May be an HTML string, DOM element, array of DOM elements, or jQuery object.
+     * @see {@link https://api.jquery.com/replaceWith/#replaceWith-newContent}
+     */
+    replaceWith(newContent: JQuery|any[]|Element|Text|string): JQuery;
+    /**
+     * Replace each element in the set of matched elements with the provided new content and return the set of elements that was removed.
+     *
+     * @param func A function that returns content with which to replace the set of matched elements.
+     * @see {@link https://api.jquery.com/replaceWith/#replaceWith-function}
+     */
+    replaceWith(func: () => Element|JQuery): JQuery;
+
+    /**
+     * Get the combined text contents of each element in the set of matched elements, including their descendants.
+     * @see {@link https://api.jquery.com/text/#text}
+     */
+    text(): string;
+    /**
+     * Set the content of each element in the set of matched elements to the specified text.
+     *
+     * @param text The text to set as the content of each matched element. When Number or Boolean is supplied, it will be converted to a String representation.
+     * @see {@link https://api.jquery.com/text/#text-text}
+     */
+    text(text: string|number|boolean): JQuery;
+    /**
+     * Set the content of each element in the set of matched elements to the specified text.
+     *
+     * @param func A function returning the text content to set. Receives the index position of the element in the set and the old text value as arguments.
+     * @see {@link https://api.jquery.com/text/#text-function}
+     */
+    text(func: (index: number, text: string) => string): JQuery;
+
+    /**
+     * Retrieve all the elements contained in the jQuery set, as an array.
+     * @name toArray
+     * @see {@link https://api.jquery.com/toArray/}
+     */
+    toArray(): HTMLElement[];
+
+    /**
+     * Remove the parents of the set of matched elements from the DOM, leaving the matched elements in their place.
+     * @see {@link https://api.jquery.com/unwrap/}
+     */
+    unwrap(): JQuery;
+
+    /**
+     * Wrap an HTML structure around each element in the set of matched elements.
+     *
+     * @param wrappingElement A selector, element, HTML string, or jQuery object specifying the structure to wrap around the matched elements.
+     * @see {@link https://api.jquery.com/wrap/#wrap-wrappingElement}
+     */
+    wrap(wrappingElement: JQuery|Element|string): JQuery;
+    /**
+     * Wrap an HTML structure around each element in the set of matched elements.
+     *
+     * @param func A callback function returning the HTML content or jQuery object to wrap around the matched elements. Receives the index position of the element in the set as an argument. Within the function, this refers to the current element in the set.
+     * @see {@link https://api.jquery.com/wrap/#wrap-function}
+     */
+    wrap(func: (index: number) => string|JQuery): JQuery;
+
+    /**
+     * Wrap an HTML structure around all elements in the set of matched elements.
+     *
+     * @param wrappingElement A selector, element, HTML string, or jQuery object specifying the structure to wrap around the matched elements.
+     * @see {@link https://api.jquery.com/wrapAll/#wrapAll-wrappingElement}
+     */
+    wrapAll(wrappingElement: JQuery|Element|string): JQuery;
+    /**
+     * Wrap an HTML structure around all elements in the set of matched elements.
+     *
+     * @param func A callback function returning the HTML content or jQuery object to wrap around all the matched elements. Within the function, this refers to the first element in the set.
+     * @see {@link https://api.jquery.com/wrapAll/#wrapAll-function}
+     */
+    wrapAll(func: (index: number) => string): JQuery;
+
+    /**
+     * Wrap an HTML structure around the content of each element in the set of matched elements.
+     *
+     * @param wrappingElement An HTML snippet, selector expression, jQuery object, or DOM element specifying the structure to wrap around the content of the matched elements.
+     * @see {@link https://api.jquery.com/wrapInner/#wrapInner-wrappingElement}
+     */
+    wrapInner(wrappingElement: JQuery|Element|string): JQuery;
+    /**
+     * Wrap an HTML structure around the content of each element in the set of matched elements.
+     *
+     * @param func A callback function which generates a structure to wrap around the content of the matched elements. Receives the index position of the element in the set as an argument. Within the function, this refers to the current element in the set.
+     * @see {@link https://api.jquery.com/wrapInner/#wrapInner-function}
+     */
+    wrapInner(func: (index: number) => string): JQuery;
+
+    /**
+     * Iterate over a jQuery object, executing a function for each matched element.
+     *
+     * @param func A function to execute for each matched element.
+     * @see {@link https://api.jquery.com/each/}
+     */
+    each(func: (index: number, elem: Element) => any): JQuery;
+
+    /**
+     * Retrieve one of the elements matched by the jQuery object.
+     *
+     * @param index A zero-based integer indicating which element to retrieve.
+     * @see {@link https://api.jquery.com/get/#get-index}
+     */
+    get(index: number): HTMLElement;
+    /**
+     * Retrieve the elements matched by the jQuery object.
+     * @alias toArray
+     * @see {@link https://api.jquery.com/get/#get}
+     */
+    get(): HTMLElement[];
+
+    /**
+     * Search for a given element from among the matched elements.
+     * @see {@link https://api.jquery.com/index/#index}
+     */
+    index(): number;
+    /**
+     * Search for a given element from among the matched elements.
+     *
+     * @param selector A selector representing a jQuery collection in which to look for an element.
+     * @see {@link https://api.jquery.com/index/#index-selector}
+     */
+    index(selector: string|JQuery|Element): number;
+
+    /**
+     * The number of elements in the jQuery object.
+     * @see {@link https://api.jquery.com/length/}
+     */
+    length: number;
+    /**
+     * A selector representing selector passed to jQuery(), if any, when creating the original set.
+     * version deprecated: 1.7, removed: 1.9
+     * @see {@link https://api.jquery.com/selector/}
+     */
+    selector: string;
+    [index: string]: any;
+    [index: number]: HTMLElement;
+
+    /**
+     * Add elements to the set of matched elements.
+     *
+     * @param selector A string representing a selector expression to find additional elements to add to the set of matched elements.
+     * @param context The point in the document at which the selector should begin matching; similar to the context argument of the $(selector, context) method.
+     * @see {@link https://api.jquery.com/add/#add-selector}
+     */
+    add(selector: string, context?: Element): JQuery;
+    /**
+     * Add elements to the set of matched elements.
+     *
+     * @param elements One or more elements to add to the set of matched elements.
+     * @see {@link https://api.jquery.com/add/#add-elements}
+     */
+    add(...elements: Element[]): JQuery;
+    /**
+     * Add elements to the set of matched elements.
+     *
+     * @param html An HTML fragment to add to the set of matched elements.
+     * @see {@link https://api.jquery.com/add/#add-html}
+     */
+    add(html: string): JQuery;
+    /**
+     * Add elements to the set of matched elements.
+     *
+     * @param obj An existing jQuery object to add to the set of matched elements.
+     * @see {@link https://api.jquery.com/add/#add-selection}
+     */
+    add(obj: JQuery): JQuery;
+
+    /**
+     * Get the children of each element in the set of matched elements, optionally filtered by a selector.
+     *
+     * @param selector A string containing a selector expression to match elements against.
+     * @see {@link https://api.jquery.com/children/}
+     */
+    children(selector?: string): JQuery;
+
+    /**
+     * For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.
+     *
+     * @param selector A string containing a selector expression to match elements against.
+     * @see {@link https://api.jquery.com/closest/#closest-selector}
+     */
+    closest(selector: string): JQuery;
+    /**
+     * For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.
+     *
+     * @param selector A string containing a selector expression to match elements against.
+     * @param context A DOM element within which a matching element may be found. If no context is passed in then the context of the jQuery set will be used instead.
+     * @see {@link https://api.jquery.com/closest/#closest-selector-context}
+     */
+    closest(selector: string, context?: Element): JQuery;
+    /**
+     * For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.
+     *
+     * @param obj A jQuery object to match elements against.
+     * @see {@link https://api.jquery.com/closest/#closest-selection}
+     */
+    closest(obj: JQuery): JQuery;
+    /**
+     * For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.
+     *
+     * @param element An element to match elements against.
+     * @see {@link https://api.jquery.com/closest/#closest-element}
+     */
+    closest(element: Element): JQuery;
+
+    /**
+     * Get an array of all the elements and selectors matched against the current element up through the DOM tree.
+     *
+     * @param selectors An array or string containing a selector expression to match elements against (can also be a jQuery object).
+     * @param context A DOM element within which a matching element may be found. If no context is passed in then the context of the jQuery set will be used instead.
+     * @see {@link https://api.jquery.com/closest/#closest-selectors-context}
+     */
+    closest(selectors: any, context?: Element): any[];
+
+    /**
+     * Get the children of each element in the set of matched elements, including text and comment nodes.
+     * @see {@link https://api.jquery.com/contents/}
+     */
+    contents(): JQuery;
+
+    /**
+     * End the most recent filtering operation in the current chain and return the set of matched elements to its previous state.
+     * @see {@link https://api.jquery.com/end/}
+     */
+    end(): JQuery;
+
+    /**
+     * Reduce the set of matched elements to the one at the specified index.
+     *
+     * @param index An integer indicating the 0-based position of the element. OR An integer indicating the position of the element, counting backwards from the last element in the set.
+     * @see {@link https://api.jquery.com/eq/}
+     */
+    eq(index: number): JQuery;
+
+    /**
+     * Reduce the set of matched elements to those that match the selector or pass the function's test.
+     *
+     * @param selector A string containing a selector expression to match the current set of elements against.
+     * @see {@link https://api.jquery.com/filter/#filter-selector}
+     */
+    filter(selector: string): JQuery;
+    /**
+     * Reduce the set of matched elements to those that match the selector or pass the function's test.
+     *
+     * @param func A function used as a test for each element in the set. this is the current DOM element.
+     * @see {@link https://api.jquery.com/filter/#filter-function}
+     */
+    filter(func: (index: number, element: Element) => any): JQuery;
+    /**
+     * Reduce the set of matched elements to those that match the selector or pass the function's test.
+     *
+     * @param element An element to match the current set of elements against.
+     * @see {@link https://api.jquery.com/filter/#filter-elements}
+     */
+    filter(element: Element): JQuery;
+    /**
+     * Reduce the set of matched elements to those that match the selector or pass the function's test.
+     *
+     * @param obj An existing jQuery object to match the current set of elements against.
+     * @see {@link https://api.jquery.com/filter/#filter-selection}
+     */
+    filter(obj: JQuery): JQuery;
+
+    /**
+     * Get the descendants of each element in the current set of matched elements, filtered by a selector, jQuery object, or element.
+     *
+     * @param selector A string containing a selector expression to match elements against.
+     * @see {@link https://api.jquery.com/find/#find-selector}
+     */
+    find(selector: string): JQuery;
+    /**
+     * Get the descendants of each element in the current set of matched elements, filtered by a selector, jQuery object, or element.
+     *
+     * @param element An element to match elements against.
+     * @see {@link https://api.jquery.com/find/#find-element}
+     */
+    find(element: Element): JQuery;
+    /**
+     * Get the descendants of each element in the current set of matched elements, filtered by a selector, jQuery object, or element.
+     *
+     * @param obj A jQuery object to match elements against.
+     * @see {@link https://api.jquery.com/find/#find-element}
+     */
+    find(obj: JQuery): JQuery;
+
+    /**
+     * Reduce the set of matched elements to the first in the set.
+     * @see {@link https://api.jquery.com/first/}
+     */
+    first(): JQuery;
+
+    /**
+     * Reduce the set of matched elements to those that have a descendant that matches the selector or DOM element.
+     *
+     * @param selector A string containing a selector expression to match elements against.
+     * @see {@link https://api.jquery.com/has/#has-selector}
+     */
+    has(selector: string): JQuery;
+    /**
+     * Reduce the set of matched elements to those that have a descendant that matches the selector or DOM element.
+     *
+     * @param contained A DOM element to match elements against.
+     * @see {@link https://api.jquery.com/has/#has-contained}
+     */
+    has(contained: Element): JQuery;
+
+    /**
+     * Check the current matched set of elements against a selector, element, or jQuery object and return true if at least one of these elements matches the given arguments.
+     *
+     * @param selector A string containing a selector expression to match elements against.
+     * @see {@link https://api.jquery.com/is/#is-selector}
+     */
+    is(selector: string): boolean;
+    /**
+     * Check the current matched set of elements against a selector, element, or jQuery object and return true if at least one of these elements matches the given arguments.
+     *
+     * @param func A function used as a test for the set of elements. It accepts one argument, index, which is the element's index in the jQuery collection.Within the function, this refers to the current DOM element.
+     * @see {@link https://api.jquery.com/is/#is-function}
+     */
+    is(func: (index: number, element: Element) => boolean): boolean;
+    /**
+     * Check the current matched set of elements against a selector, element, or jQuery object and return true if at least one of these elements matches the given arguments.
+     *
+     * @param obj An existing jQuery object to match the current set of elements against.
+     * @see {@link https://api.jquery.com/is/#is-selection}
+     */
+    is(obj: JQuery): boolean;
+    /**
+     * Check the current matched set of elements against a selector, element, or jQuery object and return true if at least one of these elements matches the given arguments.
+     *
+     * @param elements One or more elements to match the current set of elements against.
+     * @see {@link https://api.jquery.com/is/#is-elements}
+     */
+    is(elements: any): boolean;
+
+    /**
+     * Reduce the set of matched elements to the final one in the set.
+     * @see {@link https://api.jquery.com/last/}
+     */
+    last(): JQuery;
+
+    /**
+     * Pass each element in the current matched set through a function, producing a new jQuery object containing the return values.
+     *
+     * @param callback A function object that will be invoked for each element in the current set.
+     * @see {@link https://api.jquery.com/map/}
+     */
+    map(callback: (index: number, domElement: Element) => any): JQuery;
+
+    /**
+     * Get the immediately following sibling of each element in the set of matched elements. If a selector is provided, it retrieves the next sibling only if it matches that selector.
+     *
+     * @param selector A string containing a selector expression to match elements against.
+     * @see {@link https://api.jquery.com/next/}
+     */
+    next(selector?: string): JQuery;
+
+    /**
+     * Get all following siblings of each element in the set of matched elements, optionally filtered by a selector.
+     *
+     * @param selector A string containing a selector expression to match elements against.
+     * @see {@link https://api.jquery.com/nextAll/}
+     */
+    nextAll(selector?: string): JQuery;
+
+    /**
+     * Get all following siblings of each element up to but not including the element matched by the selector, DOM node, or jQuery object passed.
+     *
+     * @param selector A string containing a selector expression to indicate where to stop matching following sibling elements.
+     * @param filter A string containing a selector expression to match elements against.
+     * @see {@link https://api.jquery.com/nextUntil/#nextUntil-selector-filter}
+     */
+    nextUntil(selector?: string, filter?: string): JQuery;
+    /**
+     * Get all following siblings of each element up to but not including the element matched by the selector, DOM node, or jQuery object passed.
+     *
+     * @param element A DOM node or jQuery object indicating where to stop matching following sibling elements.
+     * @param filter A string containing a selector expression to match elements against.
+     * @see {@link https://api.jquery.com/nextUntil/#nextUntil-element-filter}
+     */
+    nextUntil(element?: Element, filter?: string): JQuery;
+    /**
+     * Get all following siblings of each element up to but not including the element matched by the selector, DOM node, or jQuery object passed.
+     *
+     * @param obj A DOM node or jQuery object indicating where to stop matching following sibling elements.
+     * @param filter A string containing a selector expression to match elements against.
+     * @see {@link https://api.jquery.com/nextUntil/#nextUntil-element-filter}
+     */
+    nextUntil(obj?: JQuery, filter?: string): JQuery;
+
+    /**
+     * Remove elements from the set of matched elements.
+     *
+     * @param selector A string containing a selector expression to match elements against.
+     * @see {@link https://api.jquery.com/not/#not-selector}
+     */
+    not(selector: string): JQuery;
+    /**
+     * Remove elements from the set of matched elements.
+     *
+     * @param func A function used as a test for each element in the set. this is the current DOM element.
+     * @see {@link https://api.jquery.com/not/#not-function}
+     */
+    not(func: (index: number, element: Element) => boolean): JQuery;
+    /**
+     * Remove elements from the set of matched elements.
+     *
+     * @param elements One or more DOM elements to remove from the matched set.
+     * @see {@link https://api.jquery.com/not/#not-selection}
+     */
+    not(elements: Element|Element[]): JQuery;
+    /**
+     * Remove elements from the set of matched elements.
+     *
+     * @param obj An existing jQuery object to match the current set of elements against.
+     * @see {@link https://api.jquery.com/not/#not-selection}
+     */
+    not(obj: JQuery): JQuery;
+
+    /**
+     * Get the closest ancestor element that is positioned.
+     * @see {@link https://api.jquery.com/offsetParent/}
+     */
+    offsetParent(): JQuery;
+
+    /**
+     * Get the parent of each element in the current set of matched elements, optionally filtered by a selector.
+     *
+     * @param selector A string containing a selector expression to match elements against.
+     * @see {@link https://api.jquery.com/parent/}
+     */
+    parent(selector?: string): JQuery;
+
+    /**
+     * Get the ancestors of each element in the current set of matched elements, optionally filtered by a selector.
+     *
+     * @param selector A string containing a selector expression to match elements against.
+     * @see {@link https://api.jquery.com/parents/}
+     */
+    parents(selector?: string): JQuery;
+
+    /**
+     * Get the ancestors of each element in the current set of matched elements, up to but not including the element matched by the selector, DOM node, or jQuery object.
+     *
+     * @param selector A string containing a selector expression to indicate where to stop matching ancestor elements.
+     * @param filter A string containing a selector expression to match elements against.
+     * @see {@link https://api.jquery.com/parentsUntil/#parentsUntil-selector-filter}
+     */
+    parentsUntil(selector?: string, filter?: string): JQuery;
+    /**
+     * Get the ancestors of each element in the current set of matched elements, up to but not including the element matched by the selector, DOM node, or jQuery object.
+     *
+     * @param element A DOM node or jQuery object indicating where to stop matching ancestor elements.
+     * @param filter A string containing a selector expression to match elements against.
+     * @see {@link https://api.jquery.com/parentsUntil/#parentsUntil-element-filter}
+     */
+    parentsUntil(element?: Element, filter?: string): JQuery;
+    /**
+     * Get the ancestors of each element in the current set of matched elements, up to but not including the element matched by the selector, DOM node, or jQuery object.
+     *
+     * @param obj A DOM node or jQuery object indicating where to stop matching ancestor elements.
+     * @param filter A string containing a selector expression to match elements against.
+     * @see {@link https://api.jquery.com/parentsUntil/#parentsUntil-element-filter}
+     */
+    parentsUntil(obj?: JQuery, filter?: string): JQuery;
+
+    /**
+     * Get the immediately preceding sibling of each element in the set of matched elements, optionally filtered by a selector.
+     *
+     * @param selector A string containing a selector expression to match elements against.
+     * @see {@link https://api.jquery.com/prev/}
+     */
+    prev(selector?: string): JQuery;
+
+    /**
+     * Get all preceding siblings of each element in the set of matched elements, optionally filtered by a selector.
+     *
+     * @param selector A string containing a selector expression to match elements against.
+     * @see {@link https://api.jquery.com/prevAll/}
+     */
+    prevAll(selector?: string): JQuery;
+
+    /**
+     * Get all preceding siblings of each element up to but not including the element matched by the selector, DOM node, or jQuery object.
+     *
+     * @param selector A string containing a selector expression to indicate where to stop matching preceding sibling elements.
+     * @param filter A string containing a selector expression to match elements against.
+     * @see {@link https://api.jquery.com/prevUntil/#prevUntil-selector-filter}
+     */
+    prevUntil(selector?: string, filter?: string): JQuery;
+    /**
+     * Get all preceding siblings of each element up to but not including the element matched by the selector, DOM node, or jQuery object.
+     *
+     * @param element A DOM node or jQuery object indicating where to stop matching preceding sibling elements.
+     * @param filter A string containing a selector expression to match elements against.
+     * @see {@link https://api.jquery.com/prevUntil/#prevUntil-element-filter}
+     */
+    prevUntil(element?: Element, filter?: string): JQuery;
+    /**
+     * Get all preceding siblings of each element up to but not including the element matched by the selector, DOM node, or jQuery object.
+     *
+     * @param obj A DOM node or jQuery object indicating where to stop matching preceding sibling elements.
+     * @param filter A string containing a selector expression to match elements against.
+     * @see {@link https://api.jquery.com/prevUntil/#prevUntil-element-filter}
+     */
+    prevUntil(obj?: JQuery, filter?: string): JQuery;
+
+    /**
+     * Get the siblings of each element in the set of matched elements, optionally filtered by a selector.
+     *
+     * @param selector A string containing a selector expression to match elements against.
+     * @see {@link https://api.jquery.com/siblings/}
+     */
+    siblings(selector?: string): JQuery;
+
+    /**
+     * Reduce the set of matched elements to a subset specified by a range of indices.
+     *
+     * @param start An integer indicating the 0-based position at which the elements begin to be selected. If negative, it indicates an offset from the end of the set.
+     * @param end An integer indicating the 0-based position at which the elements stop being selected. If negative, it indicates an offset from the end of the set. If omitted, the range continues until the end of the set.
+     * @see {@link https://api.jquery.com/slice/}
+     */
+    slice(start: number, end?: number): JQuery;
+
+    /**
+     * Show the queue of functions to be executed on the matched elements.
+     *
+     * @param queueName A string containing the name of the queue. Defaults to fx, the standard effects queue.
+     * @see {@link https://api.jquery.com/queue/#queue-queueName}
+     */
+    queue(queueName?: string): any[];
+    /**
+     * Manipulate the queue of functions to be executed, once for each matched element.
+     *
+     * @param newQueue An array of functions to replace the current queue contents.
+     * @see {@link https://api.jquery.com/queue/#queue-queueName-newQueue}
+     */
+    queue(newQueue: Function[]): JQuery;
+    /**
+     * Manipulate the queue of functions to be executed, once for each matched element.
+     *
+     * @param callback The new function to add to the queue, with a function to call that will dequeue the next item.
+     * @see {@link https://api.jquery.com/queue/#queue-queueName-callback}
+     */
+    queue(callback: Function): JQuery;
+    /**
+     * Manipulate the queue of functions to be executed, once for each matched element.
+     *
+     * @param queueName A string containing the name of the queue. Defaults to fx, the standard effects queue.
+     * @param newQueue An array of functions to replace the current queue contents.
+     * @see {@link https://api.jquery.com/queue/#queue-queueName-newQueue}
+     */
+    queue(queueName: string, newQueue: Function[]): JQuery;
+    /**
+     * Manipulate the queue of functions to be executed, once for each matched element.
+     *
+     * @param queueName A string containing the name of the queue. Defaults to fx, the standard effects queue.
+     * @param callback The new function to add to the queue, with a function to call that will dequeue the next item.
+     * @see {@link https://api.jquery.com/queue/#queue-queueName-callback}
+     */
+    queue(queueName: string, callback: Function): JQuery;
+}
+declare module "jquery" {
+    export = $;
+}
+declare var jQuery: JQueryStatic;
+declare var $: JQueryStatic;
diff --git a/client/typings/globals/jquery/typings.json b/client/typings/globals/jquery/typings.json
new file mode 100644
index 0000000000000000000000000000000000000000..21e25aac0a510156e08cf0bf97c45412b60308f7
--- /dev/null
+++ b/client/typings/globals/jquery/typings.json
@@ -0,0 +1,8 @@
+{
+  "resolution": "main",
+  "tree": {
+    "src": "https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/39772baa2c32da872c8482088c784eb497e303c0/jquery/index.d.ts",
+    "raw": "registry:dt/jquery#1.10.0+20170123093700",
+    "typings": "https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/39772baa2c32da872c8482088c784eb497e303c0/jquery/index.d.ts"
+  }
+}
diff --git a/client/typings/index.d.ts b/client/typings/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..c7d4e271dbe644a4bd2357ed65dae6973a8eaba2
--- /dev/null
+++ b/client/typings/index.d.ts
@@ -0,0 +1,6 @@
+/// <reference path="globals/bootstrap-notify/index.d.ts" />
+/// <reference path="globals/bootstrap-select/index.d.ts" />
+/// <reference path="globals/flot/index.d.ts" />
+/// <reference path="globals/jquery.datatables/index.d.ts" />
+/// <reference path="globals/jquery.timeago/index.d.ts" />
+/// <reference path="globals/jquery/index.d.ts" />
diff --git a/client/webpack.config.js b/client/webpack.config.js
new file mode 100644
index 0000000000000000000000000000000000000000..c2093f1647ee0d9bcde13e6b5a484141f5cf32b0
--- /dev/null
+++ b/client/webpack.config.js
@@ -0,0 +1,81 @@
+var webpack = require('webpack');
+var ExtractTextPlugin = require('extract-text-webpack-plugin');
+var UglifyJSPlugin = require('uglifyjs-webpack-plugin');
+var OptimizeCssAssetsPlugin = require('optimize-css-assets-webpack-plugin');
+
+// Different configurations are used for development and production
+// Development produces sourcemaps, production minifies/uglifies js output
+// They also use different output paths
+module.exports = function (env) {
+
+	var tsPath = env == "prod" ? "ts/" : "dist/ts/";
+	var lessPath = env == "prod" ? "" : "dist/";
+	var outFile = env == "prod" ? ".min" : "";
+	var cssName = env == "prod" ? ".min" : "";
+
+	var plugins = [
+		new webpack.ProvidePlugin({
+			jQuery: 'jquery',
+			$: 'jquery',
+			jquery: 'jquery'
+		}),
+		// Webpack produces JS from LESS, this plugin extracts CSS from it
+		new ExtractTextPlugin("app" + cssName + ".css")
+	];
+	var devtool = "";
+
+	if (env == "prod") {
+		plugins.push(new UglifyJSPlugin());
+		plugins.push(
+			new OptimizeCssAssetsPlugin({
+				cssProcessor: require('cssnano'),
+				cssProcessorOptions: {
+					discardComments: {
+						removeAll: true
+					}
+				},
+				canPrint: true
+			})
+		);
+	} else {
+		// Turn on sourcemaps
+		devtool = "source-map";
+	}
+
+	return {
+		entry: {
+			overview: './' + tsPath + 'overview.ts',
+			metric: './' + tsPath + 'metric.ts',
+			logs: './' + tsPath + 'logs.ts',
+			log: './' + tsPath + 'log.ts',
+			admin: './' + tsPath + 'admin.ts',
+			less: './' + lessPath + 'less/app.less'
+		},
+		output: {
+			filename: '[name]' + outFile + '.js'
+		},
+		devtool: devtool,
+		resolve: {
+			extensions: ['.webpack.js', '.web.js', '.ts', '.js', '.less']
+		},
+		plugins: plugins,
+		module: {
+			loaders: [{
+					test: /\.ts$/,
+					loader: 'ts-loader'
+				},
+				{
+					test: /\.less$/,
+					use: ExtractTextPlugin.extract({
+						fallback: 'style-loader',
+						use: ['css-loader', 'less-loader']
+					})
+				},
+				{
+					test: /\.(png|woff|woff2|eot|ttf|svg)$/,
+					loader: 'url-loader?limit=100000'
+				}
+			]
+		}
+	}
+}
diff --git a/client/yarn.lock b/client/yarn.lock
new file mode 100644
index 0000000000000000000000000000000000000000..66ee6220e9924325d2efbec5ed5ab696a8f2b434
--- /dev/null
+++ b/client/yarn.lock
@@ -0,0 +1,299 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
+Waves@fians/Waves#^0.7.5:
+  version "0.7.5"
+  resolved "https://codeload.github.com/fians/Waves/tar.gz/5ce37da75c9e1c41b0344afd4a8dd6eea92424e7"
+
+animate.css@^3.5.2:
+  version "3.5.2"
+  resolved "https://registry.yarnpkg.com/animate.css/-/animate.css-3.5.2.tgz#91e668dc069a808e5e499514867b97aae0166c36"
+
+autosize@^3.0.17:
+  version "3.0.20"
+  resolved "https://registry.yarnpkg.com/autosize/-/autosize-3.0.20.tgz#e343ea7c5603834738169420f0349dc953e62a9e"
+
+big.js@^3.1.3:
+  version "3.1.3"
+  resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.1.3.tgz#4cada2193652eb3ca9ec8e55c9015669c9806978"
+
+bootstrap-notify@^3.1.3:
+  version "3.1.3"
+  resolved "https://registry.yarnpkg.com/bootstrap-notify/-/bootstrap-notify-3.1.3.tgz#7e98b3a696cf452a7b56727f0b3316a90037c10b"
+
+bootstrap-select@^1.12.2:
+  version "1.12.2"
+  resolved "https://registry.yarnpkg.com/bootstrap-select/-/bootstrap-select-1.12.2.tgz#58d095b3fd584b31443866fbe39b6fdd4e4e12a4"
+  dependencies:
+    jquery ">=1.8"
+
+bootstrap@^3.3, bootstrap@^3.3.7:
+  version "3.3.7"
+  resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-3.3.7.tgz#5a389394549f23330875a3b150656574f8a9eb71"
+
+buffer-shims@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51"
+
+chosen@^1.6.2:
+  version "0.0.2"
+  resolved "https://registry.yarnpkg.com/chosen/-/chosen-0.0.2.tgz#217701668ffb3bc26f1d80a4cf0300db2ad66794"
+
+colors@^1.0.3:
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63"
+
+core-util-is@~1.0.0:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
+
+datatables.net-bs@^1.10.12:
+  version "1.10.13"
+  resolved "https://registry.yarnpkg.com/datatables.net-bs/-/datatables.net-bs-1.10.13.tgz#794ab40a21afdf8b40ff762f7ea9a06ead9f8a2c"
+  dependencies:
+    datatables.net ">=1.10.9"
+    jquery ">=1.7"
+
+datatables.net-dt@^1.10.12:
+  version "1.10.13"
+  resolved "https://registry.yarnpkg.com/datatables.net-dt/-/datatables.net-dt-1.10.13.tgz#56836af12d980a162c7152422cb07cd535980d73"
+  dependencies:
+    datatables.net ">=1.10.9"
+    jquery ">=1.7"
+
+datatables.net@>=1.10.9, datatables.net@^1.10.13:
+  version "1.10.13"
+  resolved "https://registry.yarnpkg.com/datatables.net/-/datatables.net-1.10.13.tgz#6ac584ba6fc2dff1195e5c66d3e3b051a4b52b96"
+  dependencies:
+    jquery ">=1.7"
+
+dropzone@^4.3.0:
+  version "4.3.0"
+  resolved "https://registry.yarnpkg.com/dropzone/-/dropzone-4.3.0.tgz#48b0b8f2ad092872e4b535b672a7c3f1a1d67c91"
+
+easy-pie-chart@^2.1.6:
+  version "2.1.7"
+  resolved "https://registry.yarnpkg.com/easy-pie-chart/-/easy-pie-chart-2.1.7.tgz#35e49fb7daf9a94e52b8294f51626919bcaee7cc"
+
+emojis-list@^2.0.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389"
+
+enhanced-resolve@^3.0.0:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-3.1.0.tgz#9f4b626f577245edcf4b2ad83d86e17f4f421dec"
+  dependencies:
+    graceful-fs "^4.1.2"
+    memory-fs "^0.4.0"
+    object-assign "^4.0.1"
+    tapable "^0.2.5"
+
+eonasdan-bootstrap-datetimepicker@^4.17.47:
+  version "4.17.47"
+  resolved "https://registry.yarnpkg.com/eonasdan-bootstrap-datetimepicker/-/eonasdan-bootstrap-datetimepicker-4.17.47.tgz#7a49970044065276e7965efd16f822735219e735"
+  dependencies:
+    bootstrap "^3.3"
+    jquery "^1.8.3 || ^2.0 || ^3.0"
+    moment "^2.10"
+    moment-timezone "^0.4.0"
+
+errno@^0.1.3:
+  version "0.1.4"
+  resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.4.tgz#b896e23a9e5e8ba33871fc996abd3635fc9a1c7d"
+  dependencies:
+    prr "~0.0.0"
+
+es6-promise@latest:
+  version "4.0.5"
+  resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.0.5.tgz#7882f30adde5b240ccfa7f7d78c548330951ae42"
+
+flot@^0.8.0-alpha:
+  version "0.8.0-alpha"
+  resolved "https://registry.yarnpkg.com/flot/-/flot-0.8.0-alpha.tgz#9cbbc7147c10a47d2549db90bd2987ec1ba784ba"
+
+fullcalendar@~3.0.0:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/fullcalendar/-/fullcalendar-3.0.1.tgz#61494ccde98d3921529cf7b808aaf49d3ef32cf7"
+  dependencies:
+    jquery ">=2.0.0"
+    moment ">=2.9.0"
+
+graceful-fs@^4.1.2:
+  version "4.1.11"
+  resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658"
+
+inherits@~2.0.1:
+  version "2.0.3"
+  resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
+
+install@~1.0.4:
+  version "0.8.7"
+  resolved "https://registry.yarnpkg.com/install/-/install-0.8.7.tgz#f6a8a0e5d696208e8811574031b6e96a7c4c77b2"
+
+isarray@~1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
+
+jquery-mask-plugin@igorescobar/jQuery-Mask-Plugin#^1.14.0:
+  version "1.14.10"
+  resolved "https://codeload.github.com/igorescobar/jQuery-Mask-Plugin/tar.gz/3eb5756db932f47349dc46312b217673bde9e920"
+
+jquery-mousewheel@>=3.0.6:
+  version "3.1.13"
+  resolved "https://registry.yarnpkg.com/jquery-mousewheel/-/jquery-mousewheel-3.1.13.tgz#06f0335f16e353a695e7206bf50503cb523a6ee5"
+
+jquery-placeholder@^2.3.1:
+  version "2.3.1"
+  resolved "https://registry.yarnpkg.com/jquery-placeholder/-/jquery-placeholder-2.3.1.tgz#6025a1241019c08a8fb3ab8ed076285c05ba5e91"
+
+jquery-sparkline@^2.4.0:
+  version "2.4.0"
+  resolved "https://registry.yarnpkg.com/jquery-sparkline/-/jquery-sparkline-2.4.0.tgz#1be8b7b704dd3857152708aefb1d4a4b3a69fb33"
+
+jquery.json-viewer@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/jquery.json-viewer/-/jquery.json-viewer-1.1.0.tgz#e97878cfa64c938a1eaf8d25cdf61f04d53df78d"
+
+jquery@2.2.4, jquery@>=1.2.3, jquery@>=1.7, jquery@>=1.7.0, jquery@>=1.8, jquery@>=2.0.0, "jquery@^1.8.3 || ^2.0 || ^3.0":
+  version "2.2.4"
+  resolved "https://registry.yarnpkg.com/jquery/-/jquery-2.2.4.tgz#2c89d6889b5eac522a7eea32c14521559c6cbf02"
+
+jquery@~1.11.3:
+  version "1.11.3"
+  resolved "https://registry.yarnpkg.com/jquery/-/jquery-1.11.3.tgz#dd8b74278b27102d29df63eae28308a8cfa1b583"
+
+jqvmap@manifestinteractive/jqvmap#^1.5.1:
+  version "1.5.1"
+  resolved "https://codeload.github.com/manifestinteractive/jqvmap/tar.gz/cf36e84beed7f90f3ea60b574e3b49f91faf7428"
+  dependencies:
+    jquery "~1.11.3"
+
+json5@^0.5.0:
+  version "0.5.1"
+  resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821"
+
+lightgallery@^1.3.2:
+  version "1.3.9"
+  resolved "https://registry.yarnpkg.com/lightgallery/-/lightgallery-1.3.9.tgz#98ffae0bb106b59ed9fb59363da1121784ce9a97"
+  dependencies:
+    jquery ">=1.7.0"
+
+loader-utils@^0.2.6:
+  version "0.2.16"
+  resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.16.tgz#f08632066ed8282835dff88dfb52704765adee6d"
+  dependencies:
+    big.js "^3.1.3"
+    emojis-list "^2.0.0"
+    json5 "^0.5.0"
+    object-assign "^4.0.1"
+
+malihu-custom-scrollbar-plugin@^3.1.3:
+  version "3.1.5"
+  resolved "https://registry.yarnpkg.com/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.1.5.tgz#310cecc5e59415a1c29e9dfb5d2b6e01d66a29ef"
+  dependencies:
+    jquery-mousewheel ">=3.0.6"
+
+material-design-iconic-font@^2.2.0:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/material-design-iconic-font/-/material-design-iconic-font-2.2.0.tgz#66c3b1c880ef0cb87c02ca2a0f900ff0fe7f480d"
+
+mediaelement@^2.22.1:
+  version "2.23.5"
+  resolved "https://registry.yarnpkg.com/mediaelement/-/mediaelement-2.23.5.tgz#f29c119bdf074421959719a385a214cabd285c9f"
+
+memory-fs@^0.4.0:
+  version "0.4.1"
+  resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552"
+  dependencies:
+    errno "^0.1.3"
+    readable-stream "^2.0.1"
+
+moment-timezone@^0.4.0:
+  version "0.4.1"
+  resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.4.1.tgz#81f598c3ad5e22cdad796b67ecd8d88d0f5baa06"
+  dependencies:
+    moment ">= 2.6.0"
+
+"moment@>= 2.6.0", moment@>=2.9.0, moment@^2.10, moment@^2.15.1:
+  version "2.17.1"
+  resolved "https://registry.yarnpkg.com/moment/-/moment-2.17.1.tgz#fed9506063f36b10f066c8b59a144d7faebe1d82"
+
+nouislider@^8.5.1:
+  version "8.5.1"
+  resolved "https://registry.yarnpkg.com/nouislider/-/nouislider-8.5.1.tgz#df8dedd0e0de1afb074c33be1e6cf4d2919662e4"
+
+object-assign@^4.0.1:
+  version "4.1.1"
+  resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
+
+process-nextick-args@~1.0.6:
+  version "1.0.7"
+  resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3"
+
+prr@~0.0.0:
+  version "0.0.0"
+  resolved "https://registry.yarnpkg.com/prr/-/prr-0.0.0.tgz#1a84b85908325501411853d0081ee3fa86e2926a"
+
+readable-stream@^2.0.1:
+  version "2.2.2"
+  resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.2.tgz#a9e6fec3c7dda85f8bb1b3ba7028604556fc825e"
+  dependencies:
+    buffer-shims "^1.0.0"
+    core-util-is "~1.0.0"
+    inherits "~2.0.1"
+    isarray "~1.0.0"
+    process-nextick-args "~1.0.6"
+    string_decoder "~0.10.x"
+    util-deprecate "~1.0.1"
+
+semver@^5.0.1:
+  version "5.3.0"
+  resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f"
+
+simpleweather@^3.1.0:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/simpleweather/-/simpleweather-3.1.0.tgz#d2a11d22cc2a33abd2d1f7f9227ba80b9c92d944"
+
+string_decoder@~0.10.x:
+  version "0.10.31"
+  resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
+
+summernote@^0.8.2:
+  version "0.8.2"
+  resolved "https://registry.yarnpkg.com/summernote/-/summernote-0.8.2.tgz#5be7bbc56e8db83c3804fa2dc8c46e5061cfb7bd"
+
+sweetalert2@^5.0.7:
+  version "5.3.8"
+  resolved "https://registry.yarnpkg.com/sweetalert2/-/sweetalert2-5.3.8.tgz#6002c18453d060c40b9cc54bf83a010c71e39629"
+  dependencies:
+    es6-promise latest
+
+tapable@^0.2.5:
+  version "0.2.6"
+  resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.2.6.tgz#206be8e188860b514425375e6f1ae89bfb01fd8d"
+
+timeago@^1.5.4:
+  version "1.5.4"
+  resolved "https://registry.yarnpkg.com/timeago/-/timeago-1.5.4.tgz#89dbccdb715a5529416fb2e2de0f60e0f2f47e9a"
+  dependencies:
+    jquery ">=1.2.3"
+
+ts-loader@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-2.0.0.tgz#26f382b51951bf5db4c88ea5f3b156c1cfdd813f"
+  dependencies:
+    colors "^1.0.3"
+    enhanced-resolve "^3.0.0"
+    loader-utils "^0.2.6"
+    semver "^5.0.1"
+
+typeahead.js@^0.11.1:
+  version "0.11.1"
+  resolved "https://registry.yarnpkg.com/typeahead.js/-/typeahead.js-0.11.1.tgz#4e64e671b22310a8606f4aec805924ba84b015b8"
+  dependencies:
+    jquery ">=1.7"
+
+util-deprecate@~1.0.1:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
diff --git a/deploy.sh b/deploy.sh
new file mode 100755
index 0000000000000000000000000000000000000000..52c8884ee5bc38a4e7525a18f2868fddbc7dc5e1
--- /dev/null
+++ b/deploy.sh
@@ -0,0 +1,116 @@
+#!/bin/bash
+
+# Abort if any command returns non-zero code
+set -e
+
+# Prints a message (required first parameter) in blue color  
+function echo_info {
+	COLOR="\033[0;36m"
+	NOCOLOR="\033[0m"
+
+	printf "${COLOR}${1}${NOCOLOR}\n"
+}
+
+# Prints a message (required first parameter) in red color
+function echo_success {
+	COLOR="\033[0;32m"
+	NOCOLOR="\033[0m"
+
+	printf "${COLOR}${1}${NOCOLOR}\n"
+}
+
+# Prints the error message into the error stream and exists with non-zero code
+# Requires first argumnent - error message
+# Second argument is optional - exit code
+function die {
+    [[ $1 ]] || {
+        printf >&2 -- 'Usage:\n\tdie <message> [return code]\n'
+        [[ $- == *i* ]] && return 1 || exit 1
+    }
+
+	COLOR="\033[0;31m"
+	NOCOLOR="\033[0m"
+
+    printf >&2 -- "${COLOR}${1}${NOCOLOR}\n"
+	usage
+    exit ${2:-1}
+}
+
+function usage { 
+	NOCOLOR="\033[0m"
+	CYAN="\033[0;36m"
+	GREEN="\033[0;32m"
+	RED="\033[0;31m"
+
+	printf "Usage: ${RED}$0${NOCOLOR} -t ${GREEN}<string | gitlab-access-token>${NOCOLOR} [-b ${CYAN}<string | branch>${NOCOLOR}] [-e]\n"
+	
+	printf "Example: ${RED}$0${NOCOLOR} -t ${GREEN}slfkSKDF-asdasas-879${NOCOLOR} -b ${CYAN}19-separate-web-component-from-demons${NOCOLOR} -e\n"
+
+	printf "where:\n"
+
+	printf "\t-t ${GREEN}gitlab-access-token${NOCOLOR} is gitlab access token needed to access the project repo.\n"
+	printf "\t-b ${CYAN}branch${NOCOLOR} is a branch name from whcih to download artifacts.\n"
+	printf "\t-e is a flag that causes script to use example settings from artifacts archive.\n"
+	
+	exit 1
+}
+
+BRANCH="master"
+EXAMPLE=false
+
+# Process command line arguments
+while getopts "t:b:e" o; do
+	case "${o}" in
+		t)
+			TOKEN=$OPTARG
+			;;
+		b)
+			BRANCH=$OPTARG
+			;;
+		e)
+			EXAMPLE=true
+			;;
+		*)
+			usage
+			;;
+	esac
+done
+shift $((OPTIND-1))
+
+[[ -n "$TOKEN" ]] || die "-t is required"
+
+PROJECT_ID="2252178" # lookup in repo settings
+JOB="release" # change if necessary
+
+echo_info "Downloading artifacts into temporary directory"
+curl \
+	--header "PRIVATE-TOKEN: $TOKEN" \
+	"https://gitlab.com/api/v4/projects/$PROJECT_ID/jobs/artifacts/$BRANCH/download?job=$JOB" \
+> artifacts.zip \
+|| die "Could not download artifacts"
+
+echo_info "Extracting files"
+unzip -o artifacts.zip \
+|| die "Could not extract files"
+
+[ -f ./docker-compose.yml ] || die "docker-compose.yml file is not found in artifacts archive"
+
+[[ "$EXAMPLE" = false ]] || {
+	echo_info "-e was specified, so overriding .env and appsetting.json"
+	find . -name '*.example' -type f | while read NAME ; do mv "${NAME}" "${NAME%.example}" ; done
+}
+
+[ -f ./appsettings.json ] || die "appsettings.json file is required (use -e option to use example files)"
+[ -f ./.env ] || die ".env file is required (use -e option to use example files)"
+
+if ! grep -q "DOTNET_TAG=" ".env"; then
+	printf "\n\nDOTNET_TAG=$BRANCH" >> .env
+fi
+
+echo_info "Running composition"
+docker-compose -p statussite pull && \
+docker-compose -p statussite stop && \
+docker-compose -p statussite up -d || \
+die "Could not running a composition"
+
+echo_success "All done!"
diff --git a/docker-compose.yml b/docker-compose.yml
new file mode 100644
index 0000000000000000000000000000000000000000..b11b532b4e1b12935a7ed8fb2d3c91e18c922197
--- /dev/null
+++ b/docker-compose.yml
@@ -0,0 +1,54 @@
+version: '2'
+services:
+  nginx:
+    image: nginx:latest
+    ports:
+      - 5555:5555
+    links:
+      - "web:web"
+      - "logging:logging"
+    volumes:
+      - ./nginx/web.conf:/etc/nginx/conf.d/default.conf
+      - ./nginx/nginx.conf:/etc/nginx/nginx.conf
+    depends_on:
+      - web
+      - logging
+  web:
+    image: registry.gitlab.com/rweda/status-site:web-${DOTNET_TAG} # if DOTNET_TAG not set, use ""
+    environment:
+      - ASPNETCORE_ENVIRONMENT=Production
+    depends_on:
+      - postgres
+    links:
+      - "postgres:database"
+    volumes:
+      - ./appsettings.json:/srv/appsettings.production.json
+    restart: on-failure
+  logging:
+    image: registry.gitlab.com/rweda/status-site:web-${DOTNET_TAG}
+    environment:
+      - ASPNETCORE_ENVIRONMENT=Production
+    depends_on:
+      - postgres
+    links:
+      - "postgres:database"
+    volumes:
+      - ./appsettings.json:/srv/appsettings.production.json
+    restart: on-failure
+  daemons:
+    image: registry.gitlab.com/rweda/status-site:daemons-${DOTNET_TAG}
+    environment:
+      - ASPNETCORE_ENVIRONMENT=Production
+    depends_on:
+      - postgres
+    links:
+      - "postgres:database"
+    volumes:
+      - ./appsettings.json:/srv/appsettings.production.json
+    restart: on-failure
+  postgres:
+    image: postgres:latest
+    environment: # define connection credentials to be used in app
+      - POSTGRES_DB=${POSTGRES_DB}
+      - POSTGRES_USER=${POSTGRES_USER}
+      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
diff --git a/nginx/nginx.conf b/nginx/nginx.conf
new file mode 100644
index 0000000000000000000000000000000000000000..3b26a6769a44e1601b2374b2340f114a948b80c4
--- /dev/null
+++ b/nginx/nginx.conf
@@ -0,0 +1,42 @@
+user nginx;
+worker_processes auto;
+
+error_log /var/log/nginx/error.log warn;
+pid /var/run/nginx.pid;
+
+
+events {
+	worker_connections  1024;
+}
+
+
+http {
+	limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;
+	limit_req_status 444;
+
+	include /etc/nginx/mime.types;
+	default_type application/octet-stream;
+
+	log_format main '$remote_addr - $remote_user [$time_local] "$request" '
+						'$status $body_bytes_sent "$http_referer" '
+						'"$http_user_agent" "$http_x_forwarded_for"';
+
+	# extended log format may be used for NGINX AMPLIFY monitoring
+	log_format  main_ext  '$remote_addr - $remote_user [$time_local] "$request" '
+                            '$status $body_bytes_sent "$http_referer" '
+			    '"$http_user_agent" "$http_x_forwarded_for" '
+			    '"$host" sn="$server_name" '
+			    'rt=$request_time '
+			    'ua="$upstream_addr" us="$upstream_status" '
+			    'ut="$upstream_response_time" ul="$upstream_response_length" '
+			    'cs=$upstream_cache_status' ;
+
+	access_log /var/log/nginx/access.log main_ext;
+	error_log /var/log/nginx/error.log warn;
+
+	sendfile on;
+
+	keepalive_timeout 65;
+
+	include /etc/nginx/conf.d/*.conf;
+}
diff --git a/nginx/web.conf b/nginx/web.conf
new file mode 100644
index 0000000000000000000000000000000000000000..0b4f44d9b56bc21a4c2c1ebd7b7b4eb13ea48e86
--- /dev/null
+++ b/nginx/web.conf
@@ -0,0 +1,52 @@
+server {
+	listen 5555;
+
+	access_log /var/log/nginx/status-site.out.log main_ext;
+	error_log /var/log/nginx/status-site.err.log warn;
+
+	# all requests proxy to web
+	location / {
+		proxy_pass http://web:5555;
+		proxy_set_header Connection keep-alive;
+	}
+
+	# however, log message should proxy to logging part
+	location /api/LogMessage {
+		proxy_pass http://logging:5555;
+		proxy_set_header Connection keep-alive;
+	}
+
+	# api should be brute-force protected
+	# 1 request per second with up to 5 more requestrs delayed and above that dropped
+	location /api {
+		limit_req zone=one burst=5;
+		proxy_pass http://web:5555;
+		proxy_set_header Connection keep-alive;
+	}
+
+	# cache assets
+
+	location ~*  \.(jpg|jpeg|png|gif|ico)$ {
+		expires 30d;
+		proxy_pass http://web:5555;
+		proxy_set_header Connection keep-alive;
+	}
+
+	location ~*  \.(css|js)$ {
+		expires 7d;
+		proxy_pass http://web:5555;
+		proxy_set_header Connection keep-alive;
+	}
+
+	location ~*  \.(woff)$ {
+		expires 1y;
+		proxy_pass http://web:5555;
+		proxy_set_header Connection keep-alive;
+	}
+
+	location ~*  \.(pdf)$ {
+		expires 15d;
+		proxy_pass http://web:5555;
+		proxy_set_header Connection keep-alive;
+	}
+}
diff --git a/package.json b/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..fb9619793a31ed26a4fa8227beccc34558a09154
--- /dev/null
+++ b/package.json
@@ -0,0 +1,21 @@
+{
+  "name": "status-site",
+  "version": "1.0.0",
+  "license": "UNLICENSED",
+  "devDependencies": {
+    "css-loader": "^0.26.1",
+    "extract-text-webpack-plugin": "^2.0.0-beta",
+    "less": "^2.7.2",
+    "less-loader": "^2.2.3",
+    "optimize-css-assets-webpack-plugin": "^1.3.1",
+    "spectacle-docs": "^0.8.2",
+    "style-loader": "^0.13.1",
+    "typedoc": "^0.5.7",
+    "typescript": "^2.1.6",
+    "typings": "^2.1.0",
+    "uglify-js": "git://github.com/mishoo/UglifyJS2#harmony",
+    "uglifyjs-webpack-plugin": "^0.4.3",
+    "url-loader": "^0.5.7",
+    "webpack": "^2.2.1"
+  }
+}
diff --git a/src/appsettings.development.json b/src/appsettings.development.json
new file mode 100755
index 0000000000000000000000000000000000000000..6abb56f743e4b7f890131ab74409d70bee1aa4c3
--- /dev/null
+++ b/src/appsettings.development.json
@@ -0,0 +1,65 @@
+{
+	"Secrets": {
+		"ApiKey": "set-yourself",
+		"AdminPassword": "set-yourself",
+		"Email": {
+			"Enabled": false,
+			"ToEmail": "set-yourself",
+			"FromEmail": "set-yourself",
+			"Password": "set-yourself",
+			"Host": "set-yourself",
+			"SMTP": {
+				"Port": -1,
+				"Security": "StartTls"
+			}
+		},
+		"Slack": {
+			"Enabled": false,
+			"WebHook": "set-yourself"
+		}
+
+	},
+	"Data": {
+		"PingSettings": [{
+				"ServerUrl": "https://google.com",
+				"MaxResponseTime": 2000,
+				"MaxFailures": 3,
+				"GetMethodRequired": false
+			}
+		]
+	},
+	"Logging": {
+		"MinLogLevel": "Debug"
+	},
+	"ServiceManager": {
+		"CacheService": {
+			"Enabled": true,
+			"Interval": 20
+		},
+		"CleanService": {
+			"Enabled": true,
+			"Interval": 600,
+			"MaxAge": 21600
+		},
+		"PingService": {
+			"Enabled": true,
+			"Interval": 60
+		},
+		"DemoService": {
+			"Enabled": true,
+			"Interval": 20
+		},
+		"DiscrepancyService": {
+			"Enabled": true,
+			"Interval": 20,
+			"MaxDifference": 20
+		},
+		"NotificationService": {
+			"Enabled": true,
+			"Interval": 20,
+			"Frequencies": {
+				"High": 300
+			}
+		}
+	}
+}
diff --git a/src/appsettings.json b/src/appsettings.json
new file mode 100755
index 0000000000000000000000000000000000000000..1939f549e260287e8c9d6212539d9f695645125c
--- /dev/null
+++ b/src/appsettings.json
@@ -0,0 +1,129 @@
+{
+	"CompanyName": "needs-to-be-set",
+	"Secrets": {
+		"ApiKey": "needs-to-be-set",
+		"AdminPassword": "needs-to-be-set",
+		"ReCaptcha": {
+			"Enabled": false,
+			"SiteKey": "needs-to-be-set",
+			"SecretKey": "needs-to-be-set"
+		},
+		"ConnectionString": "needs-to-be-set",
+		"Email": {
+			"Enabled": true,
+			"ToEmail": "needs-to-be-set",
+			"FromTitle": "Status site notificator",
+			"FromEmail": "needs-to-be-set",
+			"Password": "needs-to-be-set",
+			"Host": "needs-to-be-set",
+			"SMTP": {
+				"Port": -1,
+				"Security": "needs-to-be-set"
+			}
+		},
+		"Slack": {
+			"Enabled": true,
+			"WebHook": "needs-to-be-set"
+		}
+	},
+	"Data": {
+		"PingSettings": [{
+			"ServerUrl": "https://google.com"
+		}],
+		"AutoLabels": {
+			"Normal": "Normal operation",
+			"Warning": "Minor degradation",
+			"Critical": "Critical Problem"
+		},
+		"ManualLabels": {
+			"None": "",
+			"Investigating": "Investigating the issue"
+		},
+		"CompilationStages": {
+			"M4": "M4 Stage",
+			"SandPiper": "SandPiper",
+			"Simulation": "Simulation"
+		},
+		"UserActions": {
+			"Login": "Login",
+			"Logout": "Logout",
+			"Register": "Register",
+			"ProjectCreated": "Created a project",
+			"ProjectEdited": "Edited a project",
+			"Visit": "Visit"
+		},
+		"LogEntrySeverities": {
+			"Debug": "Debug",
+			"Detail": "Detail",
+			"User": "User",
+			"Info": "Info",
+			"Warn": "Warning",
+			"Error": "Error",
+			"Fatal": "Fatal"
+		},
+		"Metrics": {
+			"CpuLoad": "CPU Load",
+			"UserAction": "User Actions",
+			"Compilation": "Compilations",
+			"Log": "Log Messages",
+			"Ping": "Response time"
+		}
+	},
+	"Logging": {
+		"MinLogLevel": "Information",
+		"LogSeverityReported": "Error",
+		"Exclude": [
+			"Microsoft."
+		]
+	},
+	"Guard": {
+		"Logging": {
+			"Requests": 10,
+			"PerSeconds": 10
+		}
+	},
+	"ServiceManager": {
+		"CacheService": {
+			"Enabled": true,
+			"Interval": 30
+		},
+		"CleanService": {
+			"Enabled": true,
+			"Interval": 900,
+			"MaxAge": 18000
+		},
+		"PingService": {
+			"Enabled": true,
+			"Interval": 60
+		},
+		"DemoService": {
+			"Enabled": true,
+			"Interval": 30,
+			"Gaps": {
+				"Enabled": false,
+				"Frequency": 10
+			}
+		},
+		"DiscrepancyService": {
+			"Enabled": true,
+			"Interval": 60,
+			"DataTimeframe": 1800,
+			"Gaps": {
+				"MaxDifference": 60
+			},
+			"Load": {
+				"Threshold": 90,
+				"MaxFailures": 5
+			}
+		},
+		"NotificationService": {
+			"Enabled": true,
+			"Interval": 30,
+			"Frequencies": {
+				"Low": 86400,
+				"Medium": 360,
+				"High": 60
+			}
+		}
+	}
+}
diff --git a/src/appsettings.production.json b/src/appsettings.production.json
new file mode 100644
index 0000000000000000000000000000000000000000..a1c3071594dee27adc53e6e6ca4e4884004a428f
--- /dev/null
+++ b/src/appsettings.production.json
@@ -0,0 +1,26 @@
+{
+	"Secrets": {
+		"ApiKey": "needs-to-be-set",
+		"AdminPassword": "needs-to-be-set",
+		"ReCaptcha": {
+			"Enabled": false,
+			"SiteKey": "needs-to-be-set",
+			"SecretKey": "needs-to-be-set"
+		},
+		"ConnectionString": "needs-to-be-set",
+		"Email": {
+			"Enabled": false
+		},
+		"Slack": {
+			"WebHook": "needs-to-be-set"
+		}
+	},
+	"ServiceManager": {
+		"DemoService": {
+			"Enabled": false
+		},
+		"CleanService": {
+			"MaxAge": 259200
+		}
+	}
+}
diff --git a/src/appsettings.testing.json b/src/appsettings.testing.json
new file mode 100644
index 0000000000000000000000000000000000000000..47f5771b89d745ddaeb6ac0228d470dc177b59e2
--- /dev/null
+++ b/src/appsettings.testing.json
@@ -0,0 +1,8 @@
+{
+	"Guard": {
+		"Logging": {
+			"Requests": 5,
+			"PerSeconds": 5
+		}
+	}
+}
diff --git a/src/daemons/Dockerfile b/src/daemons/Dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..74d1b7f86f8d02799d028bca4852ba15c90138b4
--- /dev/null
+++ b/src/daemons/Dockerfile
@@ -0,0 +1,9 @@
+FROM microsoft/dotnet:1.1.1-runtime
+
+# Create directory for the app source code
+WORKDIR /srv
+
+# Copy the binary
+COPY bin/release/netcoreapp1.1/publish/ /srv
+
+ENTRYPOINT /bin/bash -c "dotnet daemons.dll"
diff --git a/src/daemons/Program.cs b/src/daemons/Program.cs
new file mode 100755
index 0000000000000000000000000000000000000000..a8ad5dbf91a9a91c3b8314a4142deb6a16d13567
--- /dev/null
+++ b/src/daemons/Program.cs
@@ -0,0 +1,107 @@
+using Microsoft.Extensions.Configuration;
+using Microsoft.Extensions.DependencyInjection;
+using StatusMonitor.Daemons.Services;
+using StatusMonitor.Shared.Models;
+using StatusMonitor.Shared.Services;
+using Microsoft.Extensions.Logging;
+using StatusMonitor.Shared.Extensions;
+using System.Linq;
+using Microsoft.AspNetCore.Hosting;
+using Moq;
+using System.Threading.Tasks;
+using System;
+using System.Threading;
+
+namespace StatusMonitor.Daemons
+{
+	/// <summary>
+	/// This class contains the entry point for the application.
+	/// </summary>
+	public class Program
+	{
+		/// <summary>
+		/// The entry point.
+		/// The program will try to start a number of times until it succeeds.
+		/// For example, it may not connect to the database from the first attempt, because of network issues, or
+		/// the database may not be ready at the time of application start.
+		/// </summary>
+		/// <param name="args">Arguments passed to the application through the command line. At the moment not used. </param>
+		public static int Main(string[] args) => MainAsync(args).GetAwaiter().GetResult();
+
+		private static async Task<int> MainAsync(string[] args)
+		{
+			var mockEnv = new Mock<IHostingEnvironment>();
+			mockEnv.
+				SetupGet(environment => environment.EnvironmentName).
+				Returns(Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT"));
+			var env = mockEnv.Object;
+
+
+			var builder = new ConfigurationBuilder()
+				.AddJsonFile("appsettings.json", optional: !env.IsProduction()) // read defaults first
+				.AddJsonFile(
+					$"appsettings.{env.EnvironmentName.ToLower()}.json",
+					optional: true
+				) // override with specific settings file
+				.AddEnvironmentVariables();
+			var configuration = builder.Build();
+
+			var services = new ServiceCollection();
+
+			services.RegisterSharedServices(env, configuration);
+
+			services.AddScoped<IPingService, PingService>();
+			services.AddScoped<ICacheService, CacheService>();
+			services.AddScoped<ICleanService, CleanService>();
+			services.AddScoped<IDemoService, DemoService>();
+			services.AddScoped<IDiscrepancyService, DiscrepancyService>();
+			services.AddTransient<IServiceManagerService, ServiceManagerService>();
+
+			services.AddLogging();
+
+			var provider = services.BuildServiceProvider();
+
+			provider
+				.GetService<ILoggerFactory>()
+				.AddStatusLogger(
+					provider.GetService<ILoggingService>(),
+					configuration["Logging:MinLogLevel"].ToEnum<LogLevel>(),
+					configuration.StringsFromArray("Logging:Exclude").ToArray()
+				);
+
+			/// <summary>
+			/// A number of times app tries to connect to the database before quiting
+			/// </summary>
+			var connectionRetryNumber = 6;
+
+			/// <summary>
+			/// A number of seconds before trying to connect to db again
+			/// </summary>
+			var connectionRetryInterval = 10;
+
+			for (int i = 0; i < connectionRetryNumber; i++)
+			{
+				try
+				{
+					using (var context = provider.GetService<IDataContext>())
+					{
+						// create scheme if it does not exist
+						context.Database.EnsureCreated();
+					}
+
+					await provider.GetRequiredService<IDataSeedService>().SeedDataAsync();
+
+					await provider.GetRequiredService<IServiceManagerService>().StartServices();
+				}
+				catch (System.Net.Sockets.SocketException)
+				{
+					Console.WriteLine("Failed to connect to DB, retrying...");
+					Thread.Sleep(connectionRetryInterval * 1000);
+				}
+			}
+
+			ColoredConsole.WriteLine($"Could not connect to DB after {connectionRetryNumber} times.", ConsoleColor.Red);
+			return 1;
+		}
+	}
+}
diff --git a/src/daemons/Services/CacheService.cs b/src/daemons/Services/CacheService.cs
new file mode 100644
index 0000000000000000000000000000000000000000..d94c16d8c78db248714e452bbdbce65c9f2bc46e
--- /dev/null
+++ b/src/daemons/Services/CacheService.cs
@@ -0,0 +1,197 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.Extensions.Logging;
+using StatusMonitor.Shared.Extensions;
+using StatusMonitor.Shared.Models;
+using StatusMonitor.Shared.Models.Entities;
+
+namespace StatusMonitor.Daemons.Services
+{
+	/// <summary>
+	/// Service used to populate data into Metric objects.
+	/// </summary>
+	public interface ICacheService
+	{
+		/// <summary>
+		/// Updates a given Metric with pre-computed values (including averages, min and max of recent DataPoints)
+		/// The updated metric is returned after the changes have been made in the data provider.
+		/// Uses the `Type` and `Source` fields of the given metric object to re-fetch the metric from the database,
+		/// which ensures that the old metric object is properly disposed of.
+		/// Throws runtime exception if `Type` and `Source` fields don't reference an existing metric.
+		/// </summary>
+		/// <param name="metric">Metric to update data for.</param>
+		/// <returns>New Metric with the data updated.</returns>
+		Task<Metric> CacheMetricAsync(Metric metric);
+	}
+
+	public class CacheService : ICacheService
+	{
+		private readonly IDataContext _context;
+		private readonly ILogger<CacheService> _logger;
+
+		public CacheService(IDataContext context, ILogger<CacheService> logger)
+		{
+			_context = context;
+			_logger = logger;
+		}
+
+		public async Task<Metric> CacheMetricAsync(Metric metric)
+		{
+			_context.Metrics.Attach(metric);
+
+			List<TimeValuePair> values = null;
+
+			// Normalize values depending on Metric type.
+			switch ((Metrics)metric.Type)
+			{
+				case Metrics.CpuLoad:
+					values = await NormalizedValues(metric, _context.NumericDataPoints);
+					break;
+				case Metrics.Ping:
+					values = await NormalizedValues(metric, _context.PingDataPoints);
+					break;
+				case Metrics.UserAction:
+					values = await NormalizedValues(metric, _context.UserActionDataPoints);
+					break;
+				case Metrics.Log:
+					values = await NormalizedValues(metric, _context.LogDataPoints);
+					break;
+				case Metrics.Compilation:
+					values = await NormalizedValues(metric, _context.CompilationDataPoints);
+					break;
+				default:
+					var ex = new ArgumentOutOfRangeException($"Unknown metric type: {metric.Type}");
+					_logger.LogCritical(LoggingEvents.Metrics.AsInt(), ex, "Unknown metric in CacheMetric");
+					throw ex;
+			}
+
+			if (values.Count() == 0)
+			{
+				return metric;
+			}
+
+			// Update metric
+			ComputeNumericValues(values, metric);
+			metric.AutoLabel = await _context.AutoLabels.FindAsync(GetLabel(metric).AsInt());
+
+			_logger.LogDebug(
+				LoggingEvents.Cache.AsInt(),
+				$@"Metric {metric.Source} of type {(Metrics)metric.Type} updated. 
+				New CurrentValue is {metric.CurrentValue}."
+				.RemoveWhitespaces()
+			);
+
+			return metric;
+		}
+
+		/// <summary>
+		/// Helper that normalizes the data for the given metric.
+		/// The output is the list of pairs - integer value and timestamp.
+		/// </summary>
+		/// <param name="metric">Metric for which to normalize data.</param>
+		/// <param name="dataPoints">DbSet of data points which need to be normalized.</param>
+		/// <returns>A list of data pieces.</returns>
+		private async Task<List<TimeValuePair>> NormalizedValues<T>(Metric metric, DbSet<T> dataPoints) where T : DataPoint
+		{
+			return
+				(await FilterData(metric, dataPoints))
+				.Select(dp => new TimeValuePair
+				{
+					Value = dp.NormalizedValue(),
+					Timestamp = dp.Timestamp
+				})
+				.ToList();
+		}
+
+		/// <summary>
+		/// Helper that filters data point to include only those no older than timestamp.
+		/// </summary>
+		/// <param name="metric">Metric for which to filter data.</param>
+		/// <param name="dataPoints">Data point to filter.</param>
+		/// <returns>Filtered data points as list (no longer DbSet.</returns>
+		private async Task<List<T>> FilterData<T>(Metric metric, DbSet<T> dataPoints) where T : DataPoint
+		{
+			// Compute the timestamp from which data is requested (1 day ago)
+			var fromTimestamp = DateTime.UtcNow - new TimeSpan(1, 0, 0, 0);
+
+			return await dataPoints
+				.Where(dp =>
+					dp.Metric == metric &&
+					dp.Timestamp >= fromTimestamp
+				).ToListAsync();
+		}
+
+		/// <summary>
+		/// Traverse data pieces and compute numeric values (averages, min, max, etc)
+		/// </summary>
+		/// <param name="values">Input list of data pieces from which to compute values</param>
+		/// <param name="metric">Metric for which to compute values</param>
+		/// <param name="context">Context for data provider (source of data)</param>
+		private void ComputeNumericValues(List<TimeValuePair> values, Metric metric)
+		{
+			var latestDatapoint = values.OrderByDescending(dp => dp.Timestamp).First();
+			metric.CurrentValue = latestDatapoint.Value;
+			metric.LastUpdated = latestDatapoint.Timestamp;
+
+			metric.DayMin = values.Min(dp => dp.Value);
+			metric.DayMax = values.Max(dp => dp.Value);
+			metric.DayAvg = Convert.ToInt32(values.Average(dp => dp.Value));
+
+			var fromTimestamp = DateTime.UtcNow - new TimeSpan(0, 1, 0, 0);
+
+			values = values.Where(dp => dp.Timestamp >= fromTimestamp).ToList();
+
+			if (values.Count() == 0)
+			{
+				metric.HourMin = 0;
+				metric.HourMax = 0;
+				metric.HourAvg = 0;
+			}
+			else
+			{
+				metric.HourMin = values.Min(dp => dp.Value);
+				metric.HourMax = values.Max(dp => dp.Value);
+				metric.HourAvg = Convert.ToInt32(values.Average(dp => dp.Value));
+			}
+		}
+
+		/// <summary>
+		/// Set metric labels' value
+		/// </summary>
+		/// <returns>This object with metric labels set</returns>
+		private AutoLabels GetLabel(Metric metric)
+		{
+			// TODO: read from config
+
+			var label = AutoLabels.Normal;
+
+			switch ((Metrics)metric.Type)
+			{
+				case Metrics.CpuLoad:
+					if (metric.CurrentValue >= 90)
+					{
+						label = AutoLabels.Critical;
+					}
+					else if (metric.CurrentValue >= 50)
+					{
+						label = AutoLabels.Warning;
+					}
+					break;
+			}
+
+			return label;
+		}
+	}
+
+	/// <summary>
+	/// Helper class holding simple construct to represent data value with its timestamp.
+	/// </summary>
+	internal class TimeValuePair
+	{
+		public int Value { get; set; }
+		public DateTime Timestamp { get; set; }
+	}
+}
diff --git a/src/daemons/Services/DemoService.cs b/src/daemons/Services/DemoService.cs
new file mode 100644
index 0000000000000000000000000000000000000000..79ebef22377e84d2b46faf8a6bc965faafeb642a
--- /dev/null
+++ b/src/daemons/Services/DemoService.cs
@@ -0,0 +1,216 @@
+using System;
+using StatusMonitor.Shared.Extensions;
+using StatusMonitor.Shared.Models;
+using System.Threading.Tasks;
+using Microsoft.Extensions.Logging;
+using System.Linq;
+using StatusMonitor.Shared.Models.Entities;
+using System.Net;
+using StatusMonitor.Shared.Services;
+using Newtonsoft.Json;
+using System.Collections.Generic;
+
+namespace StatusMonitor.Daemons.Services
+{
+	/// <summary>
+	/// Used to periodically add datapoints and log entries mimicing the servers sending their stat data.
+	/// </summary>
+	public interface IDemoService
+	{
+		/// <summary>
+		/// Generates, stores in data provider and returns a data point for a given metric with random values.
+		/// </summary>
+		/// <param name="type">Type of the metric for which to generate data point</param>
+		/// <param name="source">Source of the metric for which to generate data point</param>
+		/// <param name="timestamp">Optional timestamp that will be set for data point. By default, DateTime.UtcNow</param>
+		/// <returns>Random data point for the metric</returns>
+		Task<DataPoint> GenerateDemoDataAsync(Metrics type, string source, DateTime? timestamp = null);
+
+		/// <summary>
+		/// Generates, stores in data provider and returns a log entry for a given source.
+		/// </summary>
+		/// <param name="source">Source for which to generate log entry</param>
+		/// <returns>generated log entry</returns>
+		Task<LogEntry> GenerateDemoLogAsync(string source = null);
+	}
+
+	public class DemoService : IDemoService
+	{
+		private readonly ILogger<DemoService> _logger;
+		private readonly IDataContext _context;
+		private readonly IMetricService _metricService;
+
+		public DemoService(
+			ILogger<DemoService> logger,
+			IDataContext context,
+			IMetricService metricService
+		)
+		{
+			_logger = logger;
+			_context = context;
+			_metricService = metricService;
+		}
+
+		public async Task<DataPoint> GenerateDemoDataAsync(Metrics type, string source, DateTime? timestamp = null)
+		{
+			var metric = await _metricService.GetOrCreateMetricAsync(type, source);
+
+			// Using plain new Random() will result in the same number if called multiple times in short time period
+			var random = new Random(
+				Convert.ToInt32(
+					(DateTime.UtcNow.Ticks + type.GetHashCode() + source.GetHashCode()) % Int32.MaxValue
+				)
+			);
+
+			DataPoint result = null;
+
+			switch (type)
+			{
+				case Metrics.CpuLoad:
+					result = new NumericDataPoint
+					{
+						Timestamp = timestamp ?? DateTime.UtcNow,
+						Metric = metric,
+						Value = random.Next(5, 100)
+					};
+					await _context.NumericDataPoints.AddAsync((NumericDataPoint)result);
+					break;
+				case Metrics.Ping:
+					var success = random.Next(100) % 10 != 0;
+					result = new PingDataPoint
+					{
+						Timestamp = timestamp ?? DateTime.UtcNow,
+						Metric = metric,
+						HttpStatusCode = success ? HttpStatusCode.OK.AsInt() : HttpStatusCode.ServiceUnavailable.AsInt(),
+						ResponseTime = new TimeSpan(0, 0, 0, 0, success ? random.Next(100, 900) : 0)
+					};
+					await _context.PingDataPoints.AddAsync((PingDataPoint)result);
+					break;
+				case Metrics.UserAction:
+					var action = _context
+						.UserActions
+						.Skip(random.Next(0, _context.UserActions.Count()))
+						.Take(1)
+						.First();
+
+					result = new UserActionDataPoint
+					{
+						Timestamp = timestamp ?? DateTime.UtcNow,
+						Metric = metric,
+						Action = action,
+						Count = random.Next(1, 10)
+					};
+
+					await _context.UserActionDataPoints.AddAsync((UserActionDataPoint)result);
+					break;
+				case Metrics.Log:
+					var severity = _context
+						.LogEntrySeverities
+						.Skip(random.Next(0, _context.LogEntrySeverities.Count()))
+						.Take(1)
+						.First();
+
+					result = new LogDataPoint
+					{
+						Timestamp = timestamp ?? DateTime.UtcNow,
+						Metric = metric,
+						Severity = severity,
+						Count = random.Next(1, 10)
+					};
+
+					await _context.LogDataPoints.AddAsync((LogDataPoint)result);
+					break;
+				case Metrics.Compilation:
+					var stage = _context
+						.CompilationStages
+						.Skip(random.Next(0, _context.CompilationStages.Count()))
+						.Take(1)
+						.First();
+
+					result = new CompilationDataPoint
+					{
+						Timestamp = timestamp ?? DateTime.UtcNow,
+						Metric = metric,
+						Stage = stage,
+						SourceSize = random.Next(1000, 10000),
+						CompileTime = new TimeSpan(0, 0, 0, 0, random.Next(100, 900))
+					};
+
+					await _context.CompilationDataPoints.AddAsync((CompilationDataPoint)result);
+					break;
+				default:
+					var ex = new ArgumentOutOfRangeException($"Unknown metric type: {type}");
+					_logger.LogCritical(LoggingEvents.Metrics.AsInt(), ex, "Unknown metric in CacheMetric");
+					throw ex;
+			}
+
+			await _context.SaveChangesAsync();
+
+			_logger.LogDebug(
+				LoggingEvents.Demo.AsInt(),
+				$"Data point for metric of type {type} and source {source} has been generated."
+			);
+
+			return result;
+		}
+
+		public async Task<LogEntry> GenerateDemoLogAsync(string source = null)
+		{
+			// Using plain new Random() will result in the same number if called multiple times in short time period
+			var random = new Random(
+				Convert.ToInt32(
+					(DateTime.UtcNow.Ticks + (source == null ? 0 : + source.GetHashCode())) % Int32.MaxValue
+				)
+			);
+
+			var logSource = source ?? $"source-{random.Next(1, 10)}";
+
+			var severity = _context
+				.LogEntrySeverities
+				.Skip(random.Next(0, _context.LogEntrySeverities.Count()))
+				.Take(1)
+				.First();
+
+			var lipsum = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.";
+
+			var logEntry = new LogEntry
+			{
+				Message = lipsum,
+				Severity = severity,
+				Category = random.Next(1, 10),
+				AuxiliaryData =
+					random.Next() % 5 == 0 ?
+					JsonConvert.SerializeObject(new
+					{
+						SomeDataPiece = new {
+							StringProperty =  "here is the string",
+							NumberProperty = 56,
+							ArrayProperty = new List<object> {
+								new {
+									String = "string",
+									Number = 45
+								},
+								new {
+									String = "another string",
+									Number = 455
+								}
+							}
+						},
+						Exception = $"Exception trace:\n at and so on..."
+					}) :
+					"",
+				Source = source
+			};
+
+			logEntry = (await _context.LogEntries.AddAsync(logEntry)).Entity;
+			await _context.SaveChangesAsync();
+
+			_logger.LogDebug(
+				LoggingEvents.Demo.AsInt(),
+				$"Log entry for source {source} has been generated."
+			);
+
+			return logEntry;
+		}
+	}
+}
diff --git a/src/daemons/Services/DiscrepancyService.cs b/src/daemons/Services/DiscrepancyService.cs
new file mode 100644
index 0000000000000000000000000000000000000000..078a50c91bbc6e160119c6812d12c16455312f17
--- /dev/null
+++ b/src/daemons/Services/DiscrepancyService.cs
@@ -0,0 +1,366 @@
+using System;
+using StatusMonitor.Shared.Extensions;
+using StatusMonitor.Shared.Models.Entities;
+using System.Threading.Tasks;
+using System.Net.Http;
+using System.Diagnostics;
+using System.Net;
+using Microsoft.Extensions.Logging;
+using StatusMonitor.Shared.Services;
+using StatusMonitor.Shared.Services.Factories;
+using System.Collections.Generic;
+using System.Linq;
+using StatusMonitor.Shared.Models;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.Extensions.Configuration;
+using System.Runtime.CompilerServices;
+
+[assembly: InternalsVisibleTo("test")]
+
+namespace StatusMonitor.Daemons.Services
+{
+	/// <summary>
+	/// Service used to analyze series of datapoints looking for certain discrepancies
+	/// </summary>
+	public interface IDiscrepancyService
+	{
+		/// <summary>
+		/// Stores in database and schedules notifications for those discrepancies from input
+		/// that do not yet exist in data provider.
+		/// </summary>
+		/// <param name="discrepancies">List of discrepancies to store and notify</param>
+		/// <returns>List of discrepancies from input, which has just been added to data provider</returns>
+		Task<List<Discrepancy>> RecordDiscrepanciesAsync(IEnumerable<Discrepancy> discrepancies);
+
+		/// <summary>
+		/// Returns a list of discrepancies of type DiscrepancyType.HighLoad 
+		/// in the data for given metric for given timeframe.
+		/// </summary>
+		/// <param name="metric">Metric for which to find discrepancies. Must be of type Metrics.CpuLoad.</param>
+		/// <param name="ago">Time ago from now which defines a timeframe of data to analyze</param>
+		/// <returns>A list of found discrepancies</returns>
+		Task<List<Discrepancy>> FindHighLoadsAsync(Metric metric, TimeSpan ago);
+
+		/// <summary>
+		/// Returns a list of discrepancies of type DiscrepancyType.GapInData 
+		/// in the data for given metric for given timeframe.
+		/// </summary>
+		/// <param name="metric">Metric for which to find discrepancies. Must be of type Metrics.CpuLoad.</param>
+		/// <param name="ago">Time ago from now which defines a timeframe of data to analyze</param>
+		/// <returns>A list of found discrepancies</returns>
+		Task<List<Discrepancy>> FindGapsAsync(Metric metric, TimeSpan ago);
+
+		/// <summary>
+		/// Returns a list of discrepancies of type DiscrepancyType.PingFailedNTimes 
+		/// in the data for given metric for given timeframe.
+		/// </summary>
+		/// <param name="metric">Metric for which to find discrepancies. Must be of type Metrics.Ping.</param>
+		/// <param name="ago">Time ago from now which defines a timeframe of data to analyze</param>
+		/// <returns>A list of found discrepancies</returns>
+		Task<List<Discrepancy>> FindPingFailuresAsync(Metric metric, TimeSpan ago);
+	}
+
+	public class DiscrepancyService : IDiscrepancyService
+	{
+		private readonly object _locker = new object();
+
+		private readonly ILogger<DiscrepancyService> _logger;
+		private readonly IDataContext _context;
+		private readonly INotificationService _notification;
+		private readonly IConfiguration _config;
+
+		public DiscrepancyService(
+			ILogger<DiscrepancyService> logger,
+			IDataContext context,
+			INotificationService notification,
+			IConfiguration config
+		)
+		{
+			_context = context;
+			_logger = logger;
+			_notification = notification;
+			_config = config;
+		}
+
+		public async Task<List<Discrepancy>> RecordDiscrepanciesAsync(IEnumerable<Discrepancy> discrepancies)
+		{
+			var unique = new List<Discrepancy>();
+
+			foreach (var discrepancy in discrepancies)
+			{
+				lock (_locker)
+				{
+					if (
+						!_context.
+							Discrepancies.
+							Any(d =>
+								d.MetricType == discrepancy.MetricType &&
+								d.MetricSource == discrepancy.MetricSource &&
+								d.DateFirstOffense == discrepancy.DateFirstOffense &&
+								d.Type == discrepancy.Type
+							)
+					)
+					{
+						_context.Discrepancies.Add(discrepancy);
+						_context.SaveChanges();
+
+						unique.Add(discrepancy);
+					}
+				}
+			}
+
+			foreach (var discrepancy in unique)
+			{
+				await _notification.ScheduleNotificationAsync(
+					discrepancy.ToString(),
+					NotificationSeverity.High
+				);
+			}
+
+			return unique;
+		}
+
+		public async Task<List<Discrepancy>> FindGapsAsync(Metric metric, TimeSpan ago)
+		{
+			if (metric.Type != Metrics.CpuLoad.AsInt())
+			{
+				throw new ArgumentException($"Metric for FindGapsAsync has to be of type {Metrics.CpuLoad}");
+			}
+
+			_context.Metrics.Attach(metric);
+
+			var timeAgo = DateTime.UtcNow - ago;
+
+			return FindGapsInDataPoints(
+				await _context
+					.NumericDataPoints
+					.Where(dp => dp.Metric == metric && dp.Timestamp >= timeAgo)
+					.Select(dp => dp.Timestamp)
+					.ToListAsync(),
+				metric
+			);
+		}
+
+		public async Task<List<Discrepancy>> FindPingFailuresAsync(Metric metric, TimeSpan ago)
+		{
+			if (metric.Type != Metrics.Ping.AsInt())
+			{
+				throw new ArgumentException($"Metric for FindPingFailuresAsync has to be of type {Metrics.Ping}");
+			}
+
+			_context.Metrics.Attach(metric);
+
+			var timeAgo = DateTime.UtcNow - ago;
+
+			return FindPingFailuresFromDataPoints(
+				await _context
+					.PingDataPoints
+					.Where(dp => dp.Metric == metric && dp.Timestamp >= timeAgo)
+					.ToListAsync(),
+				await _context
+					.PingSettings
+					.FirstAsync(s => s.ServerUrl == metric.Source),
+				metric
+			);
+		}
+
+		public async Task<List<Discrepancy>> FindHighLoadsAsync(Metric metric, TimeSpan ago)
+		{
+			if (metric.Type != Metrics.CpuLoad.AsInt())
+			{
+				throw new ArgumentException($"Metric for FindHighLoadsAsync has to be of type {Metrics.CpuLoad}");
+			}
+
+			_context.Metrics.Attach(metric);
+
+			var timeAgo = DateTime.UtcNow - ago;
+
+			return FindHighLoadInDataPoints(
+				await _context
+					.NumericDataPoints
+					.Where(dp => dp.Metric == metric && dp.Timestamp >= timeAgo)
+					.ToListAsync(),
+				metric
+			);
+		}
+
+		/// <summary>
+		/// Traverses the lists of timestamps looking for places where the difference between two consecutive
+		/// values is greater than the value defined in config ServiceManager:DiscrepancyService:Gaps:MaxDifference
+		/// times 1.5
+		/// </summary>
+		/// <param name="timestamps">List of timestamps to traverse</param>
+		/// <param name="metric">Metric which will appear in a resulting discrepancy object</param>
+		/// <returns>A list of discrepancies of type DiscrepancyType.GapInData found</returns>
+		internal List<Discrepancy> FindGapsInDataPoints(List<DateTime> timestamps, Metric metric)
+		{
+			if (timestamps.Count() == 0)
+			{
+				return new List<Discrepancy>();
+			}
+
+			var ordered = timestamps.OrderBy(dp => dp);
+
+			return ordered
+				.Zip(
+					ordered.Skip(1),
+					(x, y) => new
+					{
+						Difference = y - x,
+						DateFirstOffense = x
+					}
+				)
+				.Where(
+					x => x.Difference >= new TimeSpan(
+						0,
+						0,
+						(int)Math.Round(Convert.ToInt32(_config["ServiceManager:DiscrepancyService:Gaps:MaxDifference"]) * 1.5)
+					)
+				)
+				.Select(x => new Discrepancy
+				{
+					DateFirstOffense = x.DateFirstOffense,
+					Type = DiscrepancyType.GapInData,
+					MetricType = (Metrics)metric.Type,
+					MetricSource = metric.Source
+				})
+				.ToList();
+		}
+
+		/// <summary>
+		/// Traverses the lists of ping datapoints looking for places where ping failed a number of times defined
+		/// in setting. 
+		/// </summary>
+		/// <param name="pings">List of ping datapoints to traverse</param>
+		/// <param name="setting">Ping setting used to determine how many times it is permissible to fail a ping</param>
+		/// <param name="metric">Metric which will appear in a resulting discrepancy object</param>
+		/// <returns>A list of discrepancies of type DiscrepancyType.PingFailedNTimes found</returns>
+		internal List<Discrepancy> FindPingFailuresFromDataPoints(IEnumerable<PingDataPoint> pings, PingSetting setting, Metric metric)
+		{
+			if (pings.Count() == 0)
+			{
+				return new List<Discrepancy>();
+			}
+
+			var failures = pings
+				.Select(p => new
+				{
+					StatusOK = p.HttpStatusCode == HttpStatusCode.OK.AsInt(),
+					Timestamp = p.Timestamp
+				});
+
+			if (!failures.Any(l => l.StatusOK))
+			{
+				// Means that server is dead for the whole timeframe
+				// Discrepancy has been noticed already
+				return new List<Discrepancy>();
+			}
+
+			return failures
+				.OrderBy(p => p.Timestamp)
+				.Aggregate(
+					new Stack<BoolIntDateTuple>(),
+					(rest, self) =>
+					{
+						if (rest.Count == 0 || rest.Peek().StateGood != self.StatusOK)
+						{
+							rest.Push(new BoolIntDateTuple
+							{
+								StateGood = self.StatusOK,
+								DateFirstOffense = self.Timestamp
+							});
+						}
+						else
+						{
+							rest.Peek().Count++;
+						}
+						return rest;
+					}
+				)
+				.Where(t => !t.StateGood && t.Count > setting.MaxFailures)
+				.Select(x => new Discrepancy
+				{
+					DateFirstOffense = x.DateFirstOffense,
+					Type = DiscrepancyType.PingFailedNTimes,
+					MetricType = (Metrics)metric.Type,
+					MetricSource = metric.Source
+				})
+				.ToList();
+		}
+
+		/// <summary>
+		/// Traverses the lists of numeric datapoints looking for places where the value is greater than or equal to
+		/// the value defined in config ServiceManager:DiscrepancyService:Load:Threshold for more than 
+		/// ServiceManager:DiscrepancyService:Load:MaxFailures consecutive datapoints.
+		/// </summary>
+		/// <param name="datapoints">List of numeric datapoints to traverse</param>
+		/// <param name="metric">Metric which will appear in a resulting discrepancy object</param>
+		/// <returns>A list of discrepancies of type DiscrepancyType.HighLoad found</returns>
+		internal List<Discrepancy> FindHighLoadInDataPoints(List<NumericDataPoint> datapoints, Metric metric)
+		{
+			if (datapoints.Count() == 0)
+			{
+				return new List<Discrepancy>();
+			}
+
+			var loads = datapoints
+				.Select(d => new
+				{
+					NormalLoad = d.Value < Convert.ToInt32(_config["ServiceManager:DiscrepancyService:Load:Threshold"]),
+					Timestamp = d.Timestamp
+				});
+			
+			if (!loads.Any(l => l.NormalLoad))
+			{
+				// Means that server is overloaded for the whole timeframe
+				// Discrepancy has been noticed already
+				return new List<Discrepancy>();
+			}
+
+			return loads
+				.OrderBy(p => p.Timestamp)
+				.Aggregate(
+					new Stack<BoolIntDateTuple>(),
+					(rest, self) =>
+					{
+						if (rest.Count == 0 || rest.Peek().StateGood != self.NormalLoad)
+						{
+							rest.Push(new BoolIntDateTuple
+							{
+								StateGood = self.NormalLoad,
+								DateFirstOffense = self.Timestamp
+							});
+						}
+						else
+						{
+							rest.Peek().Count++;
+						}
+						return rest;
+					}
+				)
+				.Where(
+					t => 
+						!t.StateGood && 
+						t.Count > Convert.ToInt32(_config["ServiceManager:DiscrepancyService:Load:MaxFailures"])
+				)
+				.Select(x => new Discrepancy
+				{
+					DateFirstOffense = x.DateFirstOffense,
+					Type = DiscrepancyType.HighLoad,
+					MetricType = (Metrics)metric.Type,
+					MetricSource = metric.Source
+				})
+				.ToList();
+		}
+	}
+
+	/// <summary>
+	/// Simple POCO class for holding a tuple of bool, int and DateTime
+	/// </summary>
+	internal class BoolIntDateTuple
+	{
+		public bool StateGood { get; set; }
+		public int Count { get; set; } = 1;
+		public DateTime DateFirstOffense { get; set; }
+	}
+}
diff --git a/src/daemons/Services/PingService.cs b/src/daemons/Services/PingService.cs
new file mode 100644
index 0000000000000000000000000000000000000000..15e9cc9887abc2d91c4a93eeed8e7b010d1787d7
--- /dev/null
+++ b/src/daemons/Services/PingService.cs
@@ -0,0 +1,102 @@
+using System;
+using StatusMonitor.Shared.Extensions;
+using StatusMonitor.Shared.Models.Entities;
+using System.Threading.Tasks;
+using System.Net.Http;
+using System.Diagnostics;
+using System.Net;
+using Microsoft.Extensions.Logging;
+using StatusMonitor.Shared.Services;
+using StatusMonitor.Shared.Services.Factories;
+
+namespace StatusMonitor.Daemons.Services
+{
+	/// <summary>
+	/// Service used to "ping" or check status of specific web servers by sending an HTTP request and recording
+	/// the response code and time.
+	/// </summary>
+	public interface IPingService
+	{
+		/// <summary>
+		/// Pings a server specifies in settings.
+		/// Sends a web request (GET or HEAD), records response time and status code.
+		/// </summary>
+		/// <param name="setting">Set of parameters needed to ping a server.</param>
+		/// <returns>Ping data point with recorded response time and status code.</returns>
+		Task<PingDataPoint> PingServerAsync(PingSetting setting);
+	}
+
+	public class PingService : IPingService
+	{
+		private readonly IMetricService _metrics;
+		private readonly ILogger<PingService> _logger;
+		private readonly IHttpClientFactory _factory;
+
+		public PingService(
+			IMetricService metrics,
+			ILogger<PingService> logger,
+			IHttpClientFactory httpClientFactory
+		)
+		{
+			_factory = httpClientFactory;
+			_logger = logger;
+			_metrics = metrics;
+		}
+
+		public async Task<PingDataPoint> PingServerAsync(PingSetting setting)
+		{
+			using (var httpClient = _factory.BuildClient())
+			{
+				TimeSpan responseTime;
+				HttpStatusCode statusCode = HttpStatusCode.OK;
+
+				// Generate a request
+				var httpContent = new HttpRequestMessage(
+					setting.GetMethodRequired ? HttpMethod.Get : HttpMethod.Head,
+					setting.ServerUrl
+				);
+
+				var timer = new Stopwatch();
+				timer.Start();
+
+				var task = httpClient.SendAsync(httpContent);
+				// Make sure task finishes in TotalMilliseconds milliseconds
+				if (
+					await Task.WhenAny(
+						task, 
+						Task.Delay(Convert.ToInt32(setting.MaxResponseTime.TotalMilliseconds))
+					) == task
+				)
+				{
+					var response = await task;
+
+					timer.Stop();
+
+					// Record time and code
+					responseTime = timer.Elapsed;
+					statusCode = response.StatusCode;
+				}
+				else
+				{
+					// Timeout/cancellation logic
+					// If problem occurred then set service unavailable.
+					responseTime = new TimeSpan(0);
+					statusCode = HttpStatusCode.ServiceUnavailable;
+
+					_logger.LogWarning(LoggingEvents.Ping.AsInt(), $"Resource {setting.ServerUrl} is unavailable. See stack trace.");
+				}
+
+				_logger.LogDebug(LoggingEvents.Ping.AsInt(), $"Ping completed for {setting.ServerUrl}");
+
+				var metric = await _metrics.GetOrCreateMetricAsync(Metrics.Ping, setting.ServerUrl);
+
+				return new PingDataPoint
+				{
+					Metric = metric,
+					ResponseTime = responseTime,
+					HttpStatusCode = statusCode.AsInt()
+				};
+			}
+		}
+	}
+}
diff --git a/src/daemons/Services/ServiceManagerService.cs b/src/daemons/Services/ServiceManagerService.cs
new file mode 100644
index 0000000000000000000000000000000000000000..ffb67f0f71820c557ebe246395a3b4e552ca876b
--- /dev/null
+++ b/src/daemons/Services/ServiceManagerService.cs
@@ -0,0 +1,573 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading;
+using System.Threading.Tasks;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.Extensions.Configuration;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Logging;
+using StatusMonitor.Shared.Extensions;
+using StatusMonitor.Shared.Models;
+using StatusMonitor.Shared.Models.Entities;
+using StatusMonitor.Shared.Services;
+
+namespace StatusMonitor.Daemons.Services
+{
+	/// <summary>
+	/// Enum of available demonable services
+	/// </summary>
+	public enum ServiceManagerServices
+	{
+		Ping, Cache, Clean, Demo, Notification, Discrepancy
+	}
+
+	/// <summary>
+	/// Service used to run some other services as daemons.
+	/// </summary>
+	public interface IServiceManagerService
+	{
+		/// <summary>
+		/// Runs all available demonable services.
+		/// Does NOT return until services are stopped.
+		/// This method is NOT recommended to be awaited.
+		/// </summary>
+		Task StartServices();
+
+		/// <summary>
+		/// Stops all services gracefully.
+		/// It may take a few ticks until those services actually stop.
+		/// Returns immediately, does NOT wait until services are stopped.
+		/// </summary>
+		void StopServices();
+	}
+
+	public class ServiceManagerService : IServiceManagerService
+	{
+		private readonly ILogger<ServiceManagerService> _logger;
+		private readonly IServiceProvider _serviceProvider;
+		private readonly IConfiguration _config;
+
+		/// <summary>
+		/// Holds flags whether services should run or stop.
+		/// Used by the service itself.
+		/// </summary>
+		private Dictionary<ServiceManagerServices, bool> _status = new Dictionary<ServiceManagerServices, bool>() { };
+
+		/// <summary>
+		/// Holds intervals to wait for each service.
+		/// Interval says how much time to wait between runing the task again.
+		/// </summary>
+		private Dictionary<ServiceManagerServices, TimeSpan> _intervals =
+			new Dictionary<ServiceManagerServices, TimeSpan>();
+
+		/// <summary>
+		/// A collection of metrics for which to generate demo data points
+		/// </summary>
+		private IEnumerable<Tuple<Metrics, string>> _demoMetrics =
+			new List<Tuple<Metrics, string>>() {
+				new Tuple<Metrics, string>(Metrics.CpuLoad, "source-1"),
+				new Tuple<Metrics, string>(Metrics.CpuLoad, "source-2"),
+				new Tuple<Metrics, string>(Metrics.CpuLoad, "source-3"),
+				// no Ping because it does not require demo data points
+			};
+
+		public ServiceManagerService(
+			ILogger<ServiceManagerService> logger,
+			IServiceProvider serviceProvider,
+			IConfiguration config
+		)
+		{
+			_logger = logger;
+			_serviceProvider = serviceProvider;
+			_config = config;
+
+			// Sets all services to run.
+			// Does NOT run the services.
+			var services = Enum.GetValues(typeof(ServiceManagerServices)).Cast<ServiceManagerServices>();
+			foreach (var service in services)
+			{
+				_intervals[service] = new TimeSpan(
+					0,
+					0,
+					Convert.ToInt32(config[$"ServiceManager:{service.ToString()}Service:Interval"])
+				);
+				_status[service] = Convert.ToBoolean(config[$"ServiceManager:{service.ToString()}Service:Enabled"]);
+			}
+		}
+
+		/// <summary>
+		/// Starts INotificationService service.
+		/// Does NOT return until _status is set to false.
+		/// </summary>
+		private async Task RunNotificationServiceAsync()
+		{
+			_logger.LogInformation(LoggingEvents.ServiceManager.AsInt(), "Notification service started.");
+
+			while (true)
+			{
+				// Check exit condition
+				if (!_status[ServiceManagerServices.Notification])
+				{
+					_logger.LogInformation(LoggingEvents.ServiceManager.AsInt(), "Notification service stopped.");
+					break;
+				}
+
+				try
+				{
+					using (var scope = _serviceProvider.CreateScope())
+					{
+						// Run the task, wait to completion
+						await scope
+							.ServiceProvider
+							.GetRequiredService<INotificationService>()
+							.ProcessNotificationQueueAsync();
+					}
+
+					// Wait
+					Thread.Sleep(_intervals[ServiceManagerServices.Notification]);
+
+					_logger.LogInformation(LoggingEvents.ServiceManager.AsInt(), "Notification service run complete");
+				}
+				catch (System.Exception e)
+				{
+					_logger.LogError(
+						LoggingEvents.ServiceManager.AsInt(),
+						e,
+						"Something terribly wrong happend to Notification Service run in Service Manager"
+					);
+					Thread.Sleep(_intervals[ServiceManagerServices.Notification]);
+				}
+			}
+		}
+
+		/// <summary>
+		/// Starts ICleanService service.
+		/// Does NOT return until _status is set to false.
+		/// </summary>
+		private async Task RunCleanServiceAsync()
+		{
+			_logger.LogInformation(LoggingEvents.ServiceManager.AsInt(), "Clean service started.");
+
+			while (true)
+			{
+				// Check exit condition
+				if (!_status[ServiceManagerServices.Clean])
+				{
+					_logger.LogInformation(LoggingEvents.ServiceManager.AsInt(), "Clean service stopped.");
+					break;
+				}
+
+				try
+				{
+					using (var scope = _serviceProvider.CreateScope())
+					{
+						// Run the task, wait to completion
+						await scope
+							.ServiceProvider
+							.GetRequiredService<ICleanService>()
+							.CleanDataPointsAsync();
+					}
+					// Wait
+					Thread.Sleep(_intervals[ServiceManagerServices.Clean]);
+
+					_logger.LogInformation(LoggingEvents.ServiceManager.AsInt(), "Clean service run complete");
+				}
+				catch (System.Exception e)
+				{
+					_logger.LogError(
+						LoggingEvents.ServiceManager.AsInt(),
+						e,
+						"Something terribly wrong happend to Clean Service run in Service Manager"
+					);
+					Thread.Sleep(_intervals[ServiceManagerServices.Clean]);
+				}
+			}
+		}
+
+		/// <summary>
+		/// Starts ICacheService service.
+		/// Does NOT return until _status is set to false.
+		/// </summary>
+		private async Task RunCacheServiceAsync()
+		{
+			_logger.LogInformation(LoggingEvents.ServiceManager.AsInt(), "Cache service started.");
+
+			while (true)
+			{
+				// Check exit condition
+				if (!_status[ServiceManagerServices.Cache])
+				{
+					_logger.LogInformation(LoggingEvents.ServiceManager.AsInt(), "Cache service stopped.");
+					break;
+				}
+
+				try
+				{
+					using (var contextScope = _serviceProvider.CreateScope())
+					{
+						var context = contextScope.ServiceProvider.GetRequiredService<IDataContext>();
+
+						var metrics = await context
+							.Metrics
+							.Include(m => m.AutoLabel)
+							.Include(m => m.ManualLabel)
+							.ToListAsync();
+
+						// Run the tasks
+						var tasks = metrics
+							.Select(metric =>
+								Task.Run(async () =>
+								{
+									using (var scope = _serviceProvider.CreateScope())
+									{
+										return await scope
+											.ServiceProvider
+											.GetRequiredService<ICacheService>()
+											.CacheMetricAsync(metric);
+									}
+								})
+							);
+
+						// Wait completion of all tasks
+						var updatedMetrics = await Task.WhenAll(tasks.ToArray());
+
+						foreach (var metric in updatedMetrics)
+						{
+							metric.AutoLabel = await context.AutoLabels.FindAsync(metric.AutoLabel.Id);
+						}
+
+						context.Metrics.UpdateRange(updatedMetrics);
+
+						await context.SaveChangesAsync();
+
+						// Wait
+						Thread.Sleep(_intervals[ServiceManagerServices.Cache]);
+
+						_logger.LogInformation(LoggingEvents.ServiceManager.AsInt(), "Cache service run complete");
+					}
+				}
+				catch (System.Exception e)
+				{
+					_logger.LogError(
+						LoggingEvents.ServiceManager.AsInt(),
+						e,
+						"Something terribly wrong happend to Cache Service run in Service Manager"
+					);
+				}
+			}
+		}
+
+		/// <summary>
+		/// Starts IPingService service.
+		/// Retrieves a list of PingSetting from the data provider and for each 
+		/// setting runs a PingServerAsync method on the IPingService.
+		/// Stores resulting PingDataPoint in the data provider.
+		/// Does NOT return until _status is set to false.
+		/// </summary>
+		private async Task RunPingServiceAsync()
+		{
+			_logger.LogInformation(LoggingEvents.ServiceManager.AsInt(), "Ping service started.");
+
+			while (true)
+			{
+				// Check exit condition
+				if (!_status[ServiceManagerServices.Ping])
+				{
+					_logger.LogInformation(LoggingEvents.ServiceManager.AsInt(), "Ping service stopped.");
+					break;
+				}
+
+				try
+				{
+					using (var contextScope = _serviceProvider.CreateScope())
+					{
+						var context = contextScope.ServiceProvider.GetRequiredService<IDataContext>();
+
+						var settings = await context.PingSettings.ToListAsync();
+
+						// Run the tasks
+						var tasks = settings
+							.Select(setting =>
+								Task.Run(async () =>
+								{
+									using (var scope = _serviceProvider.CreateScope())
+									{
+										return await scope
+											.ServiceProvider
+											.GetRequiredService<IPingService>()
+											.PingServerAsync(setting);
+									}
+								})
+							);
+
+						// Wait completion of all tasks
+						var pingDataPoints = await Task.WhenAll(tasks.ToArray());
+
+						await context.PingDataPoints.AddRangeAsync(pingDataPoints);
+
+						// Wait
+						Thread.Sleep(_intervals[ServiceManagerServices.Ping]);
+
+						_logger.LogInformation(LoggingEvents.ServiceManager.AsInt(), "Ping service run complete");
+
+						// Check exit condition
+						if (!_status[ServiceManagerServices.Ping])
+						{
+							break;
+						}
+					}
+				}
+				catch (System.Exception e)
+				{
+					_logger.LogError(
+						LoggingEvents.ServiceManager.AsInt(),
+						e,
+						"Something terribly wrong happend to Ping Service run in Service Manager"
+					);
+					Thread.Sleep(_intervals[ServiceManagerServices.Ping]);
+				}
+			}
+		}
+
+		/// <summary>
+		/// Starts IDiscrepancyService service.
+		/// Looks for discrepancies of all type for all applicable metrics.
+		/// Does NOT return until _status is set to false.
+		/// </summary>
+		private async Task RunDiscrepancyServiceAsync()
+		{
+			_logger.LogInformation(LoggingEvents.ServiceManager.AsInt(), "Discrepancy service started.");
+
+			while (true)
+			{
+				// Check exit condition
+				if (!_status[ServiceManagerServices.Discrepancy])
+				{
+					_logger.LogInformation(LoggingEvents.ServiceManager.AsInt(), "Discrepancy service stopped.");
+					break;
+				}
+
+				try
+				{
+					using (var contextScope = _serviceProvider.CreateScope())
+					{
+						var context = contextScope.ServiceProvider.GetRequiredService<IDataContext>();
+
+						var cpuMetrics = await context
+							.Metrics
+							.Where(mt => mt.Type == Metrics.CpuLoad.AsInt())
+							.ToListAsync();
+
+						var pingMetrics = await context
+						   .Metrics
+						   .Where(mt => mt.Type == Metrics.Ping.AsInt())
+						   .ToListAsync();
+
+						// Find GapInData discrepancies
+						var gapTasks = cpuMetrics
+							.Select(metric =>
+								Task.Run(async () =>
+								{
+									using (var scope = _serviceProvider.CreateScope())
+									{
+										return await scope
+											.ServiceProvider
+											.GetRequiredService<IDiscrepancyService>()
+											.FindGapsAsync(
+												metric, 
+												new TimeSpan(
+													0,
+													0,
+													Convert.ToInt32(_config["ServiceManager:DiscrepancyService:DataTimeframe"])
+												)
+											);
+									}
+								})
+							);
+
+						// Find HighLoad discrepancies
+						var highLoadTasks = cpuMetrics
+							.Select(metric =>
+								Task.Run(async () =>
+								{
+									using (var scope = _serviceProvider.CreateScope())
+									{
+										return await scope
+											.ServiceProvider
+											.GetRequiredService<IDiscrepancyService>()
+											.FindHighLoadsAsync(
+												metric, 
+												new TimeSpan(
+													0,
+													0,
+													Convert.ToInt32(_config["ServiceManager:DiscrepancyService:DataTimeframe"])
+												)
+											);
+									}
+								})
+							);
+
+						// Find PingFailedNTimes discrepancies
+						var pingTasks = pingMetrics
+							.Select(metric =>
+								Task.Run(async () =>
+								{
+									using (var scope = _serviceProvider.CreateScope())
+									{
+										return await scope
+											.ServiceProvider
+											.GetRequiredService<IDiscrepancyService>()
+											.FindPingFailuresAsync(
+												metric, 
+												new TimeSpan(
+													0,
+													0,
+													Convert.ToInt32(_config["ServiceManager:DiscrepancyService:DataTimeframe"])
+												)
+											);
+									}
+								})
+							);
+
+						// Wait completion of all tasks
+						var discrepancies = await Task.WhenAll(
+							new Task<List<Discrepancy>>[] {}
+								.Concat(gapTasks).ToArray()
+								.Concat(pingTasks).ToArray()
+								.Concat(highLoadTasks).ToArray())
+						;
+
+						using (var scope = _serviceProvider.CreateScope())
+						{
+							await scope
+								.ServiceProvider
+								.GetRequiredService<IDiscrepancyService>()
+								.RecordDiscrepanciesAsync(discrepancies.SelectMany(d => d));
+						}
+
+						// Wait
+						Thread.Sleep(_intervals[ServiceManagerServices.Discrepancy]);
+
+						_logger.LogInformation(LoggingEvents.ServiceManager.AsInt(), "Discrepancy service run complete");
+					}
+				}
+				catch (System.Exception e)
+				{
+					_logger.LogError(
+						LoggingEvents.ServiceManager.AsInt(),
+						e,
+						"Something terribly wrong happend to Discrepancy Service run in Service Manager"
+					);
+					Thread.Sleep(_intervals[ServiceManagerServices.Discrepancy]);
+				}
+			}
+		}
+
+		/// <summary>
+		/// Starts IDemoService service.
+		/// Does NOT return until _status is set to false.
+		/// </summary>
+		private async Task RunDemoServiceAsync()
+		{
+			_logger.LogInformation(LoggingEvents.ServiceManager.AsInt(), "Demo service started.");
+
+			while (true)
+			{
+				// Check exit condition
+				if (!_status[ServiceManagerServices.Demo])
+				{
+					_logger.LogInformation(LoggingEvents.ServiceManager.AsInt(), "Demo service stopped.");
+					break;
+				}
+
+				try
+				{
+					// Run the task, wait to completion
+					var tasks = _demoMetrics
+						.Select(demoMetric =>
+							Task.Run(async () =>
+							{
+								using (var scope = _serviceProvider.CreateScope())
+								{
+									var generate = true;
+
+									// If gaps generation is enabled, decide if gap needs to be generated this run
+									if (Convert.ToBoolean(_config["ServiceManager:DemoService:Gaps:Enabled"]))
+									{
+										if (
+											new Random()
+											.Next(
+												Convert.ToInt32(_config["ServiceManager:DemoService:Gaps:Frequency"])
+											) == 0
+										)
+										{
+											generate = false;
+											_logger.LogDebug(LoggingEvents.ServiceManager.AsInt(), "Gap generated");
+										}
+									}
+
+									if (generate)
+									{
+										await scope
+												.ServiceProvider
+												.GetRequiredService<IDemoService>()
+												.GenerateDemoDataAsync(demoMetric.Item1, demoMetric.Item2);
+
+										await scope
+											.ServiceProvider
+											.GetRequiredService<IDemoService>()
+											.GenerateDemoLogAsync(demoMetric.Item2);
+									}
+								}
+							})
+						);
+
+					// Wait completion of all tasks
+					await Task.WhenAll(tasks.ToArray());
+
+					// Wait
+					Thread.Sleep(_intervals[ServiceManagerServices.Demo]);
+
+					_logger.LogInformation(LoggingEvents.ServiceManager.AsInt(), "Demo service run complete");
+				}
+				catch (System.Exception e)
+				{
+					_logger.LogError(
+						LoggingEvents.ServiceManager.AsInt(),
+						e,
+						"Something terribly wrong happend to Demo Service run in Service Manager"
+					);
+					Thread.Sleep(_intervals[ServiceManagerServices.Demo]);
+				}
+			}
+		}
+
+		public async Task StartServices()
+		{
+			// Define tasks and run them
+			var tasks = new List<Task>() {
+				Task.Run(RunPingServiceAsync),
+				Task.Run(RunCacheServiceAsync),
+				Task.Run(RunCleanServiceAsync),
+				Task.Run(RunDemoServiceAsync),
+				Task.Run(RunNotificationServiceAsync),
+				Task.Run(RunDiscrepancyServiceAsync)
+			}.ToArray();
+
+			await Task.WhenAll(tasks);
+
+			_logger.LogInformation(LoggingEvents.ServiceManager.AsInt(), "All services stopped");
+		}
+
+		public void StopServices()
+		{
+			// Set all statuses to stop
+			foreach (var key in _status.Keys.ToList())
+			{
+				_status[key] = false;
+			}
+		}
+	}
+}
+
diff --git a/src/daemons/daemons.csproj b/src/daemons/daemons.csproj
new file mode 100644
index 0000000000000000000000000000000000000000..bc15787d053639092ddad7b062357eaad3cf090d
--- /dev/null
+++ b/src/daemons/daemons.csproj
@@ -0,0 +1,54 @@
+<Project ToolsVersion="15.0" Sdk="Microsoft.NET.Sdk.Web">
+	<PropertyGroup>
+		<OutputType>Exe</OutputType>
+		<TargetFramework>netcoreapp1.1</TargetFramework>
+		<PreserveCompilationContext>true</PreserveCompilationContext>
+	</PropertyGroup>
+	<PropertyGroup>
+		<PackageTargetFallback>$(PackageTargetFallback);portable-net45+win8+wp8+wpa81;</PackageTargetFallback>
+	</PropertyGroup>
+	<ItemGroup>
+		<ProjectReference Include="../shared/shared.csproj">
+			<Name>shared</Name>
+		</ProjectReference>
+		<PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="1.1.0" />
+		<PackageReference Include="Npgsql" Version="3.1.9" />
+		<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="1.1.0" />
+		<PackageReference Include="Microsoft.EntityFrameworkCore" Version="1.1.0" />
+		<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL.Design" Version="1.1.0" />
+		<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="1.1.0" />
+		<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer.Design" Version="1.1.0" />
+		<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="1.1.0" />
+		<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite.Design" Version="1.1.0" />
+		<PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="1.1.0" />
+		<PackageReference Include="Microsoft.AspNetCore.Authentication.Cookies" Version="1.1.0" />
+		<PackageReference Include="Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore" Version="1.1.0" />
+		<PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="1.1.0" />
+		<PackageReference Include="Microsoft.AspNetCore.Mvc.TagHelpers" Version="1.1.0" />
+		<PackageReference Include="Microsoft.AspNetCore.Http.Abstractions" Version="1.1.0" />
+		<PackageReference Include="Microsoft.Extensions.Logging" Version="1.1.0" />
+		<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="1.1.0" />
+		<PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="1.1.0" />
+		<PackageReference Include="CommonMark.NET" Version="0.14.0" />
+		<PackageReference Include="Microsoft.AspNetCore.Diagnostics" Version="1.1.0" />
+		<PackageReference Include="Microsoft.AspNetCore.Mvc" Version="1.1.0" />
+		<PackageReference Include="Microsoft.AspNetCore.Razor.Tools" Version="1.1.0-preview4-final" />
+		<PackageReference Include="Microsoft.AspNetCore.Routing" Version="1.1.0" />
+		<PackageReference Include="Microsoft.AspNetCore.Server.IISIntegration" Version="1.1.0" />
+		<PackageReference Include="Microsoft.AspNetCore.Server.Kestrel" Version="1.1.0" />
+		<PackageReference Include="Microsoft.AspNetCore.StaticFiles" Version="1.1.0" />
+		<PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="1.1.0" />
+		<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="1.1.0" />
+		<PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="1.1.0" />
+		<PackageReference Include="Moq" Version="4.6.38-alpha" />
+		<PackageReference Include="Microsoft.AspNetCore.TestHost" Version="1.1.0" />
+		<PackageReference Include="Microsoft.AspNetCore.Cors" Version="1.1.0" />
+	</ItemGroup>
+	<ItemGroup>
+		<AppSettings Include="../appsettings*.json;../version.json"/>
+	</ItemGroup>
+	<Target Name="CopyAppsettings" AfterTargets="Build">
+		<Copy SourceFiles="@(AppSettings)" DestinationFolder="$(OutputPath)/publish" ContinueOnError="false" />
+		<Copy SourceFiles="@(AppSettings)" DestinationFolder="$(OutputPath)/" ContinueOnError="false" />
+	</Target>
+</Project>
diff --git a/src/shared/Extensions/ConfigurationExtensions.cs b/src/shared/Extensions/ConfigurationExtensions.cs
new file mode 100644
index 0000000000000000000000000000000000000000..e1f2f6549b7fa6808b5d6f8f391afb681404a001
--- /dev/null
+++ b/src/shared/Extensions/ConfigurationExtensions.cs
@@ -0,0 +1,72 @@
+using System.Collections.Generic;
+using System.Linq;
+using Microsoft.Extensions.Configuration;
+
+namespace StatusMonitor.Shared.Extensions
+{
+	public static class ConfigurationExtensions
+	{
+		/// <summary>
+		/// This helper methods returns an enumerable (list) of sections for the section of config.
+		/// For example, if config contains a JSON array like this:
+		/// 
+		/// Data : [
+		/// 	{
+		/// 		FirstName: Dmytro
+		/// 		LastName: Bogatov
+		/// 	},
+		/// 	{
+		/// 		FirstName: Ryan
+		/// 		LastName: Leonard
+		/// 	}
+		/// ]
+		/// 
+		/// then for the section "Data", the resulting enumerable will contain two sections (names tuples)
+		/// </summary>
+		/// <param name="section">The section for which to extract content as enumerable of sections.</param>
+		/// <returns>Enumerable of sections for given section.</returns>
+		public static IEnumerable<IConfigurationSection> SectionsFromArray(this IConfiguration config, string section)
+		{
+			var sections = config.GetSection(section);
+
+			if (
+				sections == null ||
+				(string.IsNullOrEmpty(config[section]) && sections.AsEnumerable().Count() == 1)
+			)
+			{
+				return Enumerable.Empty<IConfigurationSection>();
+			}
+
+			// This snippet computes the number of sections in the array of interest.
+			// Dirty but necessary.
+			var count = config
+				.GetSection(section)
+				.AsEnumerable()
+				.Count(
+					pair => !pair
+						.Key
+						.Replace($"{section}:", "")
+						.Contains(":")
+				);
+
+			// This snippet returns an enumerable of sections for the given section
+			return Enumerable
+				.Range(0, count)
+				.Select(num => config.GetSection($"{section}:{num}"));
+		}
+
+		/// <summary>
+		/// This helper method should be applied to section which contain an array of strings.
+		/// In this case, the emthod returns that array of string as enumerable.
+		/// </summary>
+		/// <param name="section">The section for which to extract content as enumerable of strings.</param>
+		/// <returns>Enumerable of strings for given section.</returns>
+		public static IEnumerable<string> StringsFromArray(this IConfiguration config, string section)
+		{
+			return config
+				.SectionsFromArray(section)
+				.Select(sect => sect.Value);
+		}
+	}
+
+}
diff --git a/src/shared/Extensions/ConsoleExtensions.cs b/src/shared/Extensions/ConsoleExtensions.cs
new file mode 100644
index 0000000000000000000000000000000000000000..ced7d2be3adcacedea257f772e7c1e3ced9577c0
--- /dev/null
+++ b/src/shared/Extensions/ConsoleExtensions.cs
@@ -0,0 +1,50 @@
+using System;
+
+namespace StatusMonitor.Shared.Extensions
+{
+	/// <summary>
+	/// This class is wrapper for a standard System.Console providing convenient helpers for colored output.
+	/// </summary>
+	public static class ColoredConsole
+	{
+		/// <summary>
+		/// Writes colored text to the output. Resets color when done.
+		/// </summary>
+		/// <param name="message">Text to be put to output.</param>
+		/// <param name="foreground">Foreground color.</param>
+		/// <param name="background">Background color.</param>
+		public static void Write(
+			string message,
+			ConsoleColor? foreground = null,
+			ConsoleColor? background = null)
+		{
+			if (background.HasValue)
+			{
+				Console.BackgroundColor = background.Value;
+			}
+
+			if (foreground.HasValue)
+			{
+				Console.ForegroundColor = foreground.Value;
+			}
+
+			Console.Write(message);
+
+			Console.ResetColor();
+		}
+
+		/// <summary>
+		/// Writes colored text to the output. Appends new line. Resets color when done.
+		/// </summary>
+		/// <param name="message">Text to be put to output.</param>
+		/// <param name="foreground">Foreground color.</param>
+		/// <param name="background">Background color.</param>
+		public static void WriteLine(
+			string message,
+			ConsoleColor? foreground = null,
+			ConsoleColor? background = null)
+		{
+			ColoredConsole.Write(message + Environment.NewLine, foreground, background);
+		}
+	}
+}
diff --git a/src/shared/Extensions/DbSetExtensions.cs b/src/shared/Extensions/DbSetExtensions.cs
new file mode 100644
index 0000000000000000000000000000000000000000..b7b624b2fc66ab01293d54d06960028c3b501924
--- /dev/null
+++ b/src/shared/Extensions/DbSetExtensions.cs
@@ -0,0 +1,15 @@
+using Microsoft.EntityFrameworkCore;
+
+namespace StatusMonitor.Shared.Extensions
+{
+	public static class DbSetExtensions
+	{
+		/// <summary>
+		/// Removes all records from the set. Does not execute changes in the data provider. Use SaveChanges() for that.
+		/// </summary>
+		public static void Clear<T>(this DbSet<T> dbSet) where T : class
+		{
+			dbSet.RemoveRange(dbSet);
+		}
+	}
+}
diff --git a/src/shared/Extensions/EnumExtensions.cs b/src/shared/Extensions/EnumExtensions.cs
new file mode 100644
index 0000000000000000000000000000000000000000..ac0d4a32304dd68ce4dfea2197465aa0f6f5303b
--- /dev/null
+++ b/src/shared/Extensions/EnumExtensions.cs
@@ -0,0 +1,115 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using Microsoft.Extensions.Logging;
+using StatusMonitor.Shared.Models.Entities;
+
+namespace StatusMonitor.Shared.Extensions
+{
+	public static class EnumExtensions
+	{
+		/// <summary>
+		/// Returns the int value of the enum
+		/// </summary>
+		/// <returns>The int value of the enum</returns>
+		public static int AsInt(this Enum value)
+		{
+			return Convert.ToInt32(value);
+		}
+
+		/// <summary>
+		/// This helper method converts Microsoft LogLevel to the StatusMonitor LogEntrySeverities
+		/// </summary>
+		/// <returns>StatusMonitor LogEntrySeverities counterpart of the LogLevel</returns>
+		public static LogEntrySeverities GetSeverity(this LogLevel level)
+		{
+			var tuples = new Dictionary<LogLevel, LogEntrySeverities>() {
+				{ LogLevel.None, LogEntrySeverities.Debug },
+				{ LogLevel.Trace, LogEntrySeverities.Detail },
+				{ LogLevel.Debug, LogEntrySeverities.Debug },
+				{ LogLevel.Information, LogEntrySeverities.Info },
+				{ LogLevel.Warning, LogEntrySeverities.Warn },
+				{ LogLevel.Error, LogEntrySeverities.Error },
+				{ LogLevel.Critical, LogEntrySeverities.Fatal }
+			};
+
+			return tuples[level];
+		}
+
+		/// <summary>
+		/// Returns a LogLevelLabel object for a given LogLevel (severity)
+		/// </summary>
+		/// <param name="level">Log message severity</param>
+		/// <returns>LogLevelLabel object which defines how to print a label for a given severity.</returns>
+		public static LogLevelLabel GetLabel(this LogLevel level)
+		{
+			var tuples = new Dictionary<LogLevel, LogLevelLabel>() {
+				{ 
+					LogLevel.Information, 
+					new LogLevelLabel {
+						Text = "INFO",
+						ForegroundColor = ConsoleColor.Green
+					}
+				},
+				{ 
+					LogLevel.Error, 
+					new LogLevelLabel {
+						Text = "ERROR",
+						ForegroundColor = ConsoleColor.Red
+					}
+				},
+				{ 
+					LogLevel.Critical, 
+					new LogLevelLabel {
+						Text = "FATAL",
+						BackgroundColor = ConsoleColor.DarkRed,
+						ForegroundColor = ConsoleColor.White
+					}
+				},
+				{ 
+					LogLevel.Debug, 
+					new LogLevelLabel {
+						Text = "DEBUG",
+						ForegroundColor = ConsoleColor.White
+					}
+				},
+				{ 
+					LogLevel.Trace, 
+					new LogLevelLabel {
+						Text = "TRACE",
+						ForegroundColor = ConsoleColor.Gray
+					}
+				},
+				{ 
+					LogLevel.Warning, 
+					new LogLevelLabel {
+						Text = "WARN",
+						ForegroundColor = ConsoleColor.Yellow
+					}
+				}
+			};
+			
+			// Make all label equal width - the width of the longest label
+			var wordLength = tuples.Values.Max((label) => label.Text.Length);
+			foreach (var tuple in tuples)
+			{
+				tuples[tuple.Key].Text = tuples[tuple.Key].Text.PadLeft(wordLength);
+			}
+
+			return tuples[level];
+		}
+	}
+
+	/// <summary>
+	/// Helper class defining parameters on how to print a label for log message
+	/// </summary>
+	public class LogLevelLabel
+	{
+		/// <summary>
+		/// Human readable representation of severity
+		/// </summary>
+		public string Text { get; set; }
+		public ConsoleColor? BackgroundColor { get; set; }
+		public ConsoleColor? ForegroundColor { get; set; }
+	}
+}
diff --git a/src/shared/Extensions/EnvironmentExtensions.cs b/src/shared/Extensions/EnvironmentExtensions.cs
new file mode 100644
index 0000000000000000000000000000000000000000..f30fb0abb4d91136c71f8a26a5e7ca762607e46f
--- /dev/null
+++ b/src/shared/Extensions/EnvironmentExtensions.cs
@@ -0,0 +1,17 @@
+using Microsoft.AspNetCore.Hosting;
+
+namespace StatusMonitor.Shared.Extensions
+{
+	public static class EnvironmentExtensions
+	{
+		/// <summary>
+		/// Convenient shortcut to check if EnvironmentName is "Testing"
+		/// </summary>
+		/// <param name="env">Environment object to check</param>
+		/// <returns>True if EnvironmentName is "Testing", false otherwise</returns>
+		public static bool IsTesting(this IHostingEnvironment env)
+		{
+			return env.EnvironmentName == "Testing";
+		}
+	}
+}
diff --git a/src/shared/Extensions/ExtendedObject.cs b/src/shared/Extensions/ExtendedObject.cs
new file mode 100644
index 0000000000000000000000000000000000000000..9b733e1f5e9bc18c0cf2b21508517088e73612a4
--- /dev/null
+++ b/src/shared/Extensions/ExtendedObject.cs
@@ -0,0 +1,70 @@
+using System;
+using System.Linq;
+using System.Reflection;
+
+namespace StatusMonitor.Shared.Extensions
+{
+	/// <summary>
+	/// Redefines some of the Object methods
+	/// </summary>
+	public class ExtendedObject
+	{
+		/// <summary>
+		/// Iterates over non-static public properties of the object invoking 
+		/// ToString on each of them.
+		/// </summary>
+		/// <returns>A string representation of the object</returns>
+		public override string ToString()
+		{
+			return
+				this.GetType().ToShortString() + ":" +
+				Environment.NewLine +
+				this.GetType()
+					.GetProperties(BindingFlags.Public | BindingFlags.Instance)
+					.Select(pi => $"\t{pi.Name}: {pi.GetValue(this)}")
+					.Aggregate(
+						(self, next) => $"{self}{Environment.NewLine}{next}"
+					);
+		}
+
+		/// <summary>
+		/// Verifies that all non-static public properties of the object are pairwise equal.
+		/// Deep equality check.
+		/// </summary>
+		/// <param name="obj">Another object to which to compare</param>
+		/// <returns>True if objects are equal and false otherwise</returns>
+		public override bool Equals(object obj)
+		{
+			if (obj == null || GetType() != obj.GetType())
+			{
+				return false;
+			}
+
+			return this.GetType()
+				.GetProperties(BindingFlags.Public | BindingFlags.Instance)
+				.Aggregate(true, (accumulator, self) => self.GetValue(this).Equals(self.GetValue(obj)) && accumulator);
+		}
+
+		/// <summary>
+		/// Generates hash of the objects as a derivative of hashes of its non-static public properties.
+		/// </summary>
+		/// <returns>Hash of the object</returns>
+		public override int GetHashCode()
+		{
+			return this.GetType()
+				.GetProperties(BindingFlags.Public | BindingFlags.Instance)
+				.Aggregate(
+					new
+					{
+						Hash = 1,
+						Count = 1
+					},
+					(accumulator, self) => new
+					{
+						Hash = self.GetValue(this).GetHashCode() * accumulator.Count + accumulator.Hash,
+						Count = accumulator.Count + 1
+					}
+				).Hash;
+		}
+	}
+}
diff --git a/src/shared/Extensions/HttpClientExtension.cs b/src/shared/Extensions/HttpClientExtension.cs
new file mode 100644
index 0000000000000000000000000000000000000000..4dd9d41e8afca62255263da8afb0f05062642e63
--- /dev/null
+++ b/src/shared/Extensions/HttpClientExtension.cs
@@ -0,0 +1,47 @@
+using System;
+using System.Diagnostics;
+using System.Net.Http;
+using System.Threading.Tasks;
+
+public static class HttpClientExtensions
+{
+	/// <summary>
+	/// Wrapper around PatchAsync which takes Uri, not string
+	/// </summary>
+	/// <param name="client">The client from which to send</param>
+	/// <param name="requestUri">URI to which to send</param>
+	/// <param name="iContent">Data to include in the request</param>
+	/// <returns>Response object</returns>
+	public static async Task<HttpResponseMessage> PatchAsync(this HttpClient client, string requestUrl, HttpContent iContent)
+	{
+		return await client.PatchAsync(new Uri(requestUrl, UriKind.Relative), iContent);
+	}
+
+	/// <summary>
+	/// Sends a PATCH HTTP request
+	/// </summary>
+	/// <param name="client">The client from which to send</param>
+	/// <param name="requestUri">URI to which to send</param>
+	/// <param name="iContent">Data to include in the request</param>
+	/// <returns>Response object</returns>
+	public static async Task<HttpResponseMessage> PatchAsync(this HttpClient client, Uri requestUri, HttpContent iContent)
+	{
+		var method = new HttpMethod("PATCH");
+		var request = new HttpRequestMessage(method, requestUri)
+		{
+			Content = iContent
+		};
+
+		HttpResponseMessage response = new HttpResponseMessage();
+		try
+		{
+			response = await client.SendAsync(request);
+		}
+		catch (TaskCanceledException e)
+		{
+			Debug.WriteLine("ERROR: " + e.ToString());
+		}
+
+		return response;
+	}
+}
diff --git a/src/shared/Extensions/IServiceCollectionExtensions.cs b/src/shared/Extensions/IServiceCollectionExtensions.cs
new file mode 100644
index 0000000000000000000000000000000000000000..600566496c77e370864a225e1dd14b54d4f33eaa
--- /dev/null
+++ b/src/shared/Extensions/IServiceCollectionExtensions.cs
@@ -0,0 +1,77 @@
+using Microsoft.Extensions.DependencyInjection;
+using StatusMonitor.Shared.Services;
+using Microsoft.AspNetCore.Hosting;
+using Microsoft.Extensions.Configuration;
+using Microsoft.EntityFrameworkCore;
+using StatusMonitor.Shared.Models;
+using StatusMonitor.Shared.Services.Factories;
+
+namespace StatusMonitor.Shared.Extensions
+{
+	/// <summary>
+	/// Utility class for testing methods
+	/// </summary>
+	public static class IServiceCollectionExtensions
+	{
+		/// <summary>
+		/// Registers all available services for testing environment.
+		/// </summary>
+		/// <returns>Service provider with all services registered</returns>
+		public static IServiceCollection RegisterSharedServices(
+			this IServiceCollection services, 
+			IHostingEnvironment env, 
+			IConfiguration config)
+		{
+
+			// Create service of DataContext with inMemory data provider
+			// Use Entity Framework
+			if (env.IsProduction())
+			{
+				services
+					.AddEntityFrameworkNpgsql()
+					.AddDbContext<DataContext>(
+						b => b.UseNpgsql(config["Secrets:ConnectionString"])
+					);
+			}
+			else if (env.IsDevelopment())
+			{
+				services
+					.AddEntityFrameworkSqlite()
+					.AddDbContext<DataContext>(
+						b => b.UseSqlite("Data Source=../../../../../development.db")
+					);
+			}
+			else // Testing and Staging
+			{
+				services
+					.AddEntityFrameworkInMemoryDatabase()
+					.AddDbContext<DataContext>(
+						b => b
+							.UseInMemoryDatabase()
+							.UseInternalServiceProvider(
+								new ServiceCollection()
+									.AddEntityFrameworkInMemoryDatabase()
+									.BuildServiceProvider()
+							)
+					);
+			}
+
+			services.AddTransient<IDataContext, DataContext>();
+
+			services.AddTransient<IDataSeedService, DataSeedService>();
+			services.AddTransient<IMetricService, MetricService>();
+			services.AddTransient<ILoggingService, LoggingService>();
+			services.AddTransient<ICleanService, CleanService>();
+			services.AddTransient<IEmailService, EmailService>();
+			services.AddTransient<ISlackService, SlackService>();
+			services.AddTransient<INotificationService, NotificationService>();
+			
+			services.AddSingleton<IHttpClientFactory, HttpClientFactory>();
+			
+			services.AddSingleton<IConfiguration>(config);
+			services.AddSingleton<IHostingEnvironment>(env);
+
+			return services;
+		}
+	}
+}
diff --git a/src/shared/Extensions/LoggerExtensions.cs b/src/shared/Extensions/LoggerExtensions.cs
new file mode 100644
index 0000000000000000000000000000000000000000..14fc303b1b4bcea925ae49a4d929b44ae8f160f7
--- /dev/null
+++ b/src/shared/Extensions/LoggerExtensions.cs
@@ -0,0 +1,240 @@
+using System;
+using System.Linq;
+using System.Threading;
+using Microsoft.Extensions.Logging;
+using Newtonsoft.Json;
+using StatusMonitor.Shared.Services;
+
+namespace StatusMonitor.Shared.Extensions
+{
+	public static class LoggerExtensions
+	{
+		/// <summary>
+		/// Helper method to add StatusLogger as a logging provider.
+		/// </summary>
+		/// <param name="factory">The factory to which to add a provider</param>
+		/// <param name="context">Data context which will be used by StatusLogger</param>
+		/// <param name="filter">Filter function that decides which messages to log</param>
+		/// <returns>Factory object (chaining)</returns>
+		public static ILoggerFactory AddStatusLogger(
+			this ILoggerFactory factory,
+			ILoggingService loggingService,
+			Func<string, LogLevel, bool> filter = null)
+		{
+			factory.AddProvider(new StatusLoggerProvider(filter, loggingService));
+			return factory;
+		}
+
+		/// <summary>
+		/// Helper method to add StatusLogger as a logging provider.
+		/// </summary>
+		/// <param name="factory">The factory to which to add a provider</param>
+		/// <param name="context">Data context which will be used by StatusLogger</param>
+		/// <param name="minLevel">Minimal log level to print (eq. INFO)</param>
+		/// <param name="exclusions">An array of strings for which if log category starts with it, 
+		/// it should not be logged.</param>
+		/// <returns>Factory object (chaining)</returns>
+		public static ILoggerFactory AddStatusLogger(
+			this ILoggerFactory factory,
+			ILoggingService loggingService,
+			LogLevel minLevel,
+			string[] exclusions = null)
+		{
+			Func<string, LogLevel, bool> func;
+
+			if (exclusions != null)
+			{
+				func = (category, logLevel) =>
+					logLevel >= minLevel &&
+					!exclusions.Any((str) => category.StartsWith(str));
+			}
+			else
+			{
+				func = (category, logLevel) => logLevel >= minLevel;
+			}
+
+			return AddStatusLogger(factory, loggingService, func);
+		}
+	}
+
+	/// <summary>
+	/// My custom logger provider.
+	/// Mostly scaffolded code to fit the framework.
+	/// </summary>
+	public class StatusLoggerProvider : ILoggerProvider
+	{
+		private readonly Func<string, LogLevel, bool> _filter;
+		private readonly ILoggingService _loggingService;
+
+		public StatusLoggerProvider(Func<string, LogLevel, bool> filter, ILoggingService loggingService)
+		{
+			_loggingService = loggingService;
+			_filter = filter;
+		}
+
+		public ILogger CreateLogger(string categoryName)
+		{
+			return new StatusLogger(categoryName, _filter, _loggingService);
+		}
+
+		public void Dispose() { }
+	}
+
+	/// <summary>
+	/// Custom implementation of ILooger.
+	/// </summary>
+	public class StatusLogger : ILogger
+	{
+		private static Object _lockKey = new Object();
+
+		private string _categoryName;
+		private Func<string, LogLevel, bool> _filter;
+		private ILoggingService _loggingService;
+
+		public StatusLogger(string categoryName, Func<string, LogLevel, bool> filter, ILoggingService loggingService)
+		{
+			_categoryName = categoryName;
+			_filter = filter;
+			_loggingService = loggingService;
+		}
+
+		/// <summary>
+		/// Returns a status of the logger depending on the log level (severity).
+		/// </summary>
+		public bool IsEnabled(LogLevel logLevel)
+		{
+			return (_filter == null || _filter(_categoryName, logLevel));
+		}
+
+		/// <summary>
+		/// Main method in the ILogger interface that defines how to print a message.
+		/// </summary>
+		/// <param name="logLevel">Log severity</param>
+		/// <param name="eventId">Event category (no used in this project)</param>
+		/// <param name="state">Actual message wrapped</param>
+		/// <param name="exception">Associated exception</param>
+		/// <param name="formatter">Function that defines how to format a message.</param>
+		public void Log<TState>(
+			LogLevel logLevel,
+			EventId eventId,
+			TState state,
+			Exception exception,
+			Func<TState, Exception, string> formatter
+		)
+		{
+			/// <summary>
+			/// Return immediately is logging is not enabled for this log level
+			/// </summary>
+			if (!IsEnabled(logLevel))
+			{
+				return;
+			}
+
+			// Exception has to be set (by framework)
+			if (formatter == null)
+			{
+				throw new ArgumentNullException(nameof(formatter));
+			}
+
+			// Generate actual message
+			var message = formatter(state, exception);
+
+			// Return for empty message
+			if (string.IsNullOrEmpty(message))
+			{
+				return;
+			}
+
+			if (logLevel >= LogLevel.Error)
+			{
+				_loggingService.RecordLogMessageAsync(
+					message,
+					exception != null ? 
+					JsonConvert.SerializeObject(new
+					{
+						Exception = exception.ToString()
+					}) :
+					"",
+					"status-site",
+					eventId.Id,
+					logLevel.GetSeverity()
+				);
+			}
+
+			// Define colors for thread identifiers
+			var threadColors = new ConsoleColor[] {
+				ConsoleColor.Cyan,
+				ConsoleColor.DarkCyan,
+				ConsoleColor.Blue,
+				ConsoleColor.DarkBlue,
+				ConsoleColor.DarkGreen,
+				ConsoleColor.DarkMagenta,
+				ConsoleColor.DarkYellow,
+				ConsoleColor.DarkRed
+			};
+
+			// Generate thread label text
+			var thread = Thread.CurrentThread;
+			var threadLabel =
+				string.IsNullOrEmpty(thread.Name) ?
+				$"ThreadID: {thread.ManagedThreadId.ToString().PadLeft(3)}" :
+				thread.Name.Substring(0, 12);
+
+			// Generate a thread label color
+			var threadColor = threadColors[Math.Abs(threadLabel.GetHashCode()) % threadColors.Length];
+
+			var label = logLevel.GetLabel();
+
+			// Do not let multiple threads enter the actual print section
+			lock (StatusLogger._lockKey)
+			{
+				// Print everything (watch for pads and new lines)
+				ColoredConsole.Write($"{threadLabel}", threadColor);
+
+				Console.Write("".PadLeft(6 - label.Text.Length));
+
+				ColoredConsole.Write($"{label.Text}", label.ForegroundColor, label.BackgroundColor);
+
+				Console.Write(" | ");
+
+				Console.Write($"[{eventId.ToString().PadRight(2)}] {_categoryName}");
+
+				Console.WriteLine();
+
+				Console.Write($"[{DateTime.UtcNow.ToString("MM/dd/yy HH:mm:ss")}]");
+
+				Console.Write(" | ");
+
+				if (exception != null)
+				{
+					message += Environment.NewLine + Environment.NewLine + exception.ToString();
+				}
+
+				if (message.Contains(Environment.NewLine))
+				{
+					message = 
+						"See multiline message:" + 
+						Environment.NewLine + "\t" +
+						message.Replace(Environment.NewLine, $"{Environment.NewLine}\t");
+				}
+
+				Console.WriteLine(message);
+
+				Console.WriteLine();
+			}
+		}
+
+		public IDisposable BeginScope<TState>(TState state)
+		{
+			return null;
+		}
+	}
+
+	/// <summary>
+	/// Type of events that the system logs
+	/// </summary>
+	public enum LoggingEvents
+	{
+		Ping = 1, ModelState, ApiCheck, Startup, ServiceManager, Metrics, Clean, Cache, Demo, HomeController, ActionFilters, GenericError, Notifications
+	}
+}
diff --git a/src/shared/Extensions/ObjectExtensions.cs b/src/shared/Extensions/ObjectExtensions.cs
new file mode 100644
index 0000000000000000000000000000000000000000..b6e2db6bb28e3defbff9ac810a41f42f416edaa3
--- /dev/null
+++ b/src/shared/Extensions/ObjectExtensions.cs
@@ -0,0 +1,28 @@
+using System;
+using System.Collections.Generic;
+using System.Dynamic;
+using System.Globalization;
+using Microsoft.AspNetCore.Routing;
+
+namespace StatusMonitor.Shared.Extensions
+{
+	public static class ObjectExtensions
+	{
+		/// <summary>
+		/// Hack to convert an object to dynamic type.
+		/// Needed for Razor views which complain that "object does not have ... property"
+		/// </summary>
+		/// <param name="anonymousObject">Object to convert</param>
+		/// <returns>Dynamic object</returns>
+		public static ExpandoObject ToExpando(this object anonymousObject)
+		{
+			IDictionary<string, object> anonymousDictionary = new RouteValueDictionary(anonymousObject);
+			IDictionary<string, object> expando = new ExpandoObject();
+			foreach (var item in anonymousDictionary)
+			{
+				expando.Add(item);
+			}
+			return (ExpandoObject)expando;
+		}
+	}
+}
diff --git a/src/shared/Extensions/StringExtensions.cs b/src/shared/Extensions/StringExtensions.cs
new file mode 100644
index 0000000000000000000000000000000000000000..03388b1afd09c215e530e75fc6e4596f4e08e181
--- /dev/null
+++ b/src/shared/Extensions/StringExtensions.cs
@@ -0,0 +1,51 @@
+using System;
+using System.Globalization;
+
+namespace StatusMonitor.Shared.Extensions
+{
+	public static class StringExtensions
+	{
+		/// <summary>
+		/// Parses string into enum of given type T.
+		/// </summary>
+		public static T ToEnum<T>(this string value)
+		{
+			return (T)Enum.Parse(typeof(T), value, true);
+		}
+
+		/// <summary>
+		/// Removes tabs and linebreaks from the string.
+		/// </summary>
+		/// <param name="input">String to be modified.</param>
+		/// <returns>New string with all tabs and linebreaks removed.</returns>
+		public static string RemoveWhitespaces(this string input)
+		{
+			return input
+				.Replace(Environment.NewLine, string.Empty)
+				.Replace("\t", string.Empty);
+		}
+
+		/// <summary>
+		/// Truncates the string replacing all characters beyond maxChars with ...
+		/// </summary>
+		/// <param name="maxChars">The maximum length of the string after which it will be truncated</param>
+		/// <returns>Truncated string</returns>
+		public static string Truncate(this string value, int maxChars)
+		{
+			return new StringInfo(value).LengthInTextElements <= maxChars ? value : value.Substring(0, maxChars) + "...";
+		}
+
+		/// <summary>
+		/// Contains method that honors StringComparison options.
+		/// Needed for non-latin comparisons.
+		/// </summary>
+		/// <param name="source">String in which to find an occurrence</param>
+		/// <param name="toCheck">Substring to find in source</param>
+		/// <param name="comp">StringComparison options</param>
+		/// <returns>True if toCheck is found in source and false otherwise</returns>
+		public static bool Contains(this string source, string toCheck, StringComparison comp)
+		{
+			return source.IndexOf(toCheck, comp) >= 0;
+		}
+	}
+}
diff --git a/src/shared/Extensions/TypeExtensions.cs b/src/shared/Extensions/TypeExtensions.cs
new file mode 100644
index 0000000000000000000000000000000000000000..89bd2aae7017e3d575258b6efcfc76863098a512
--- /dev/null
+++ b/src/shared/Extensions/TypeExtensions.cs
@@ -0,0 +1,21 @@
+using System;
+
+namespace StatusMonitor.Shared.Extensions
+{
+	public static class TypeExtensions
+	{
+		/// <summary>
+		/// Returns the short description of Type leaving only the class/interface name (no namespaces).
+		/// For example, StatusMonitor.Extensions.TypeExtensions will be TypeExtensions.
+		/// </summary>
+		/// <param name="type">Type to be stringified.</param>
+		/// <returns>Short description of the type.</returns>
+		public static string ToShortString(this Type type)
+		{
+			var typeString = type.ToString();
+			var index = typeString.LastIndexOf(".");
+			return typeString.Substring(index + 1);
+		}
+	}
+
+}
diff --git a/src/shared/Models/DataContext.cs b/src/shared/Models/DataContext.cs
new file mode 100644
index 0000000000000000000000000000000000000000..5e59972a24dc180c000db881510ce1ab7b21eb2f
--- /dev/null
+++ b/src/shared/Models/DataContext.cs
@@ -0,0 +1,141 @@
+using StatusMonitor.Shared.Models.Entities;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Metadata.Builders;
+using Microsoft.EntityFrameworkCore.Metadata;
+using System.Linq;
+using System.Threading.Tasks;
+using System.Threading;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using System;
+using Microsoft.EntityFrameworkCore.ChangeTracking;
+
+namespace StatusMonitor.Shared.Models
+{
+	public interface IDataContext : IDisposable
+	{
+		DbSet<Metric> Metrics { get; set; }
+		DbSet<AbstractMetric> AbstractMetrics { get; set; }
+		DbSet<AutoLabel> AutoLabels { get; set; }
+		DbSet<ManualLabel> ManualLabels { get; set; }
+		DbSet<NumericDataPoint> NumericDataPoints { get; set; }
+		DbSet<LogDataPoint> LogDataPoints { get; set; }
+		DbSet<CompilationDataPoint> CompilationDataPoints { get; set; }
+		DbSet<PingDataPoint> PingDataPoints { get; set; }
+		DbSet<UserActionDataPoint> UserActionDataPoints { get; set; }
+		DbSet<LogEntry> LogEntries { get; set; }
+		DbSet<LogEntrySeverity> LogEntrySeverities { get; set; }
+		DbSet<CompilationStage> CompilationStages { get; set; }
+		DbSet<UserAction> UserActions { get; set; }
+		DbSet<PingSetting> PingSettings { get; set; }
+		DbSet<Notification> Notifications { get; set; }
+		DbSet<Discrepancy> Discrepancies { get; set; }
+
+		DatabaseFacade Database { get; }
+
+		Task<int> SaveChangesAsync(CancellationToken token = default(CancellationToken));
+		int SaveChanges();
+		void RemoveRange(params object[] entities);
+		EntityEntry Remove(object entity);
+		EntityEntry Entry(object entity);
+	}
+
+	/// <summary>
+	/// %Models the database. 
+	/// DbSet's represent tables. 
+	/// See https://msdn.microsoft.com/en-us/library/jj729737(v=vs.113).aspx
+	/// </summary>
+	public class DataContext : DbContext, IDataContext
+	{
+		public DataContext(DbContextOptions options) : base(options) { }
+
+		public DbSet<Metric> Metrics { get; set; }
+		public DbSet<AbstractMetric> AbstractMetrics { get; set; }
+		public DbSet<AutoLabel> AutoLabels { get; set; }
+		public DbSet<ManualLabel> ManualLabels { get; set; }
+		public DbSet<NumericDataPoint> NumericDataPoints { get; set; }
+		public DbSet<LogDataPoint> LogDataPoints { get; set; }
+		public DbSet<CompilationDataPoint> CompilationDataPoints { get; set; }
+		public DbSet<PingDataPoint> PingDataPoints { get; set; }
+		public DbSet<UserActionDataPoint> UserActionDataPoints { get; set; }
+		public DbSet<LogEntry> LogEntries { get; set; }
+		public DbSet<LogEntrySeverity> LogEntrySeverities { get; set; }
+		public DbSet<CompilationStage> CompilationStages { get; set; }
+		public DbSet<UserAction> UserActions { get; set; }
+		public DbSet<PingSetting> PingSettings { get; set; }
+		public DbSet<Notification> Notifications { get; set; }
+		public DbSet<Discrepancy> Discrepancies { get; set; }
+
+		/// <summary>
+		/// This method gets called by the framework.
+		/// Use FluentAPI to set up relations.
+		/// See https://msdn.microsoft.com/en-us/library/jj591617(v=vs.113).aspx
+		/// </summary>
+		protected override void OnModelCreating(ModelBuilder builder)
+		{
+			// Create compound primary key
+			builder
+				.Entity<Metric>()
+				.HasKey(metric => new { metric.Type, metric.Source });
+
+			builder
+				.Entity<Discrepancy>()
+				.HasKey(disc => new { 
+					disc.Type, 
+					disc.DateFirstOffense, 
+					disc.MetricSource, 
+					disc.MetricType
+				});
+
+			// Add indexes for timestamps since data points are frequently
+			// searched and filtered by timestamps.
+			AddIndexToDataPoint(builder.Entity<NumericDataPoint>());
+			AddIndexToDataPoint(builder.Entity<LogDataPoint>());
+			AddIndexToDataPoint(builder.Entity<CompilationDataPoint>());
+			AddIndexToDataPoint(builder.Entity<PingDataPoint>());
+			AddIndexToDataPoint(builder.Entity<UserActionDataPoint>());
+			builder
+				.Entity<LogEntry>()
+					.HasIndex(msg => msg.Timestamp)
+					.IsUnique(false);
+
+			builder
+				.Entity<LogEntry>()
+					.HasIndex(msg => msg.Source)
+					.IsUnique(false);
+
+			builder
+				.Entity<LogEntry>()
+					.HasIndex(msg => msg.Category)
+					.IsUnique(false);
+
+			builder
+				.Entity<Notification>()
+					.HasIndex(ntf => ntf.IsSent)
+					.IsUnique(false);
+
+			builder
+				.Entity<Notification>()
+					.HasIndex(ntf => ntf.DateCreated)
+					.IsUnique(false);
+
+			foreach (var relationship in builder.Model.GetEntityTypes().SelectMany(e => e.GetForeignKeys()))
+			{
+				relationship.DeleteBehavior = DeleteBehavior.Cascade;
+			}
+
+			base.OnModelCreating(builder);
+		}
+
+		/// <summary>
+		/// Helper that adds non-unique index to the timestamp of DataPoint DbSet.
+		/// </summary>
+		/// <param name="builder">Model builder to which to add index.</param>
+		/// <returns></returns>
+		private IndexBuilder AddIndexToDataPoint<T>(EntityTypeBuilder<T> builder) where T : DataPoint
+		{
+			return builder
+				.HasIndex(dp => dp.Timestamp)
+				.IsUnique(false);
+		}
+	}
+}
diff --git a/src/shared/Models/Entities/DataPoints.cs b/src/shared/Models/Entities/DataPoints.cs
new file mode 100644
index 0000000000000000000000000000000000000000..b54b08a55bea551aa1f100f5eb4471d5bc0d7378
--- /dev/null
+++ b/src/shared/Models/Entities/DataPoints.cs
@@ -0,0 +1,160 @@
+using System;
+using System.ComponentModel.DataAnnotations;
+
+namespace StatusMonitor.Shared.Models.Entities
+{
+	/// <summary>
+	/// Abstract entity for a piece of information displayed in Metric.
+	/// </summary>
+	public abstract class DataPoint
+	{
+		[Key]
+		public int Id { get; set; }
+		public DateTime Timestamp { get; set; } = DateTime.UtcNow;
+		public Metric Metric { get; set; }
+
+		/// <summary>
+		/// Generates an object which contains the fields of DataPoint visible to public
+		/// </summary>
+		/// <returns>An object which contains the fields of DataPoint visible to public</returns>
+		public abstract object PublicFields();
+
+		/// <summary>
+		/// Returns an integer value that represents the CurrentValue of the metric associated with the data point.
+		/// </summary>
+		/// <returns>
+		/// Integer value that represents the CurrentValue of the metric associated with the data point.
+		/// </returns>
+		public abstract int NormalizedValue();
+	}
+
+	/// <summary>
+	/// The most basic data point. Contains a value - real number. Suitable for simple metrics, like CPU load.
+	/// </summary>
+	public class NumericDataPoint : DataPoint
+	{
+		public int Value { get; set; }
+
+		public override int NormalizedValue()
+		{
+			return Value;
+		}
+
+		public override object PublicFields()
+		{
+			return new
+			{
+				Timestamp,
+				Value
+			};
+		}
+	}
+
+	/// <summary>
+	/// Simple data point that stores a generic message
+	/// </summary>
+	public class LogDataPoint : DataPoint
+	{
+		public LogEntrySeverity Severity { get; set; }
+		/// <summary>
+		/// A number of log messages of given severity
+		/// </summary>
+		public int Count { get; set; }
+
+		public override int NormalizedValue()
+		{
+			return Count;
+		}
+
+		public override object PublicFields()
+		{
+			return new
+			{
+				Timestamp,
+				Severity = Severity.Description,
+				Count
+			};
+		}
+	}
+
+	/// <summary>
+	/// Data point for compilation metrics.
+	/// </summary>
+	public class CompilationDataPoint : DataPoint
+	{
+		/// <summary>
+		/// Number of bytes
+		/// </summary>
+		public int SourceSize { get; set; }
+		public TimeSpan CompileTime { get; set; }
+		public CompilationStage Stage { get; set; }
+
+		public override int NormalizedValue()
+		{
+			return Convert.ToInt32(CompileTime.TotalMilliseconds);
+		}
+
+		public override object PublicFields()
+		{
+			return new
+			{
+				Timestamp,
+				SourceSize,
+				CompileTime = Convert.ToInt32(CompileTime.TotalMilliseconds),
+				Stage = Stage.Name
+			};
+		}
+	}
+
+	/// <summary>
+	/// Data point for website status metrics. Records a response time for a given website (stored in Source field).
+	/// </summary>
+	public class PingDataPoint : DataPoint
+	{
+		/// <summary>
+		/// Time it took for a request to complete.
+		/// 0 for ServiceUnavailable status code.
+		/// </summary>
+		public TimeSpan ResponseTime { get; set; }
+		public int HttpStatusCode { get; set; }
+
+		public override int NormalizedValue()
+		{
+			return Convert.ToInt32(ResponseTime.TotalMilliseconds);
+		}
+
+		public override object PublicFields()
+		{
+			return new
+			{
+				Timestamp,
+				ResponseTime = Convert.ToInt32(ResponseTime.TotalMilliseconds),
+				HttpStatusCode
+			};
+		}
+	}
+
+	/// <summary>
+	/// Data point for user actions, like login / logout.
+	/// </summary>
+	public class UserActionDataPoint : DataPoint
+	{
+		public int Count { get; set; }
+		public UserAction Action { get; set; }
+
+		public override int NormalizedValue()
+		{
+			return Count;
+		}
+
+		public override object PublicFields()
+		{
+			return new
+			{
+				Timestamp,
+				Count,
+				Action = Action.Name
+			};
+		}
+	}
+}
diff --git a/src/shared/Models/Entities/Discrepancies.cs b/src/shared/Models/Entities/Discrepancies.cs
new file mode 100644
index 0000000000000000000000000000000000000000..9461f1475398f612ddbcff8d9e9157d41170007e
--- /dev/null
+++ b/src/shared/Models/Entities/Discrepancies.cs
@@ -0,0 +1,45 @@
+using System;
+using StatusMonitor.Shared.Extensions;
+
+namespace StatusMonitor.Shared.Models.Entities
+{
+	/// <summary>
+	/// Model describing a generic in data set problem that needs to be reported
+	/// </summary>
+	public class Discrepancy : ExtendedObject
+	{
+		/// <summary>
+		/// The well-defined start of the problem
+		/// </summary>
+		public DateTime DateFirstOffense { get; set; }
+		public DiscrepancyType Type { get; set; }
+		/// <summary>
+		/// Source of associated metric
+		/// </summary>
+		public string MetricSource { get; set; }
+		/// <summary>
+		/// Type of associated metric
+		/// </summary>
+		public Metrics MetricType { get; set; }
+
+		public override string ToString()
+		{
+			switch(Type)
+			{
+				case DiscrepancyType.GapInData:
+					return $"Gap in data from {MetricSource} has been detected. The gap starts on {DateFirstOffense}.";
+				case DiscrepancyType.HighLoad:
+					return $"{MetricSource} reported high load starting from {DateFirstOffense}.";
+				case DiscrepancyType.PingFailedNTimes:
+					return $"Requests to {MetricSource} failed too many consecutive times. First failure occurred on {DateFirstOffense}.";
+				default:
+					return $"Discrepancy of an unknown type from {MetricSource} has been detected. It started on {DateFirstOffense}.";
+			}
+		}
+	}
+
+	public enum DiscrepancyType
+	{
+		GapInData, PingFailedNTimes, HighLoad
+	}
+}
diff --git a/src/shared/Models/Entities/Enumerations.cs b/src/shared/Models/Entities/Enumerations.cs
new file mode 100644
index 0000000000000000000000000000000000000000..1d7881703923de7210142c50a74de04cc0333abd
--- /dev/null
+++ b/src/shared/Models/Entities/Enumerations.cs
@@ -0,0 +1,84 @@
+using System.ComponentModel.DataAnnotations;
+
+namespace StatusMonitor.Shared.Models.Entities
+{
+	/// <summary>
+	/// Represents a current status of a metric (like, "CPU Load"), eq. "Normal operation" or 
+	/// "We are investigating the issue". Since labels are not arbitrary, but predefined, we use them as entities 
+	/// in the database.
+	/// </summary>
+	public abstract class Label
+	{
+		[Key]
+		public int Id { get; set; }
+		/// <summary>
+		/// Human readable string
+		/// </summary>
+		public string Title { get; set; }
+	}
+
+	/// <summary>
+	/// Represents the label which is set automatically depending on resource status.
+	/// </summary>
+	public class AutoLabel : Label { }
+	public enum AutoLabels
+	{
+		Normal = 1, Warning, Critical
+	}
+
+	/// <summary>
+	/// Represents a label which is set manually by developers.
+	/// </summary>
+	public class ManualLabel : Label { }
+	public enum ManualLabels
+	{
+		None = 1, Investigating
+	}
+
+	/// <summary>
+	/// Represents a stage of a compilation pipeline. Since stages are not arbitrary, but predefined, we use them 
+	/// as entities in the database.
+	/// </summary>
+	public class CompilationStage
+	{
+		[Key]
+		public int Id { get; set; }
+		public string Name { get; set; }
+	}
+	public enum CompilationStages
+	{
+		M4 = 1, SandPiper, Simulation
+	}
+
+	/// <summary>
+	/// Represents a user action which we record in log.
+	/// </summary>
+	public class UserAction
+	{
+		[Key]
+		public int Id { get; set; }
+		public string Name { get; set; }
+	}
+	public enum UserActions
+	{
+		Login = 1, Logout, Register, Visit, ProjectCreated, ProjectEdited
+	}
+
+	/// <summary>
+	/// Represents a severity for generic log entries.
+	/// </summary>
+	public class LogEntrySeverity
+	{
+		[Key]
+		public int Id { get; set; }
+		/// <summary>
+		/// Human readable description of severity, like "Warning"
+		/// </summary>
+		public string Description { get; set; }
+	}
+	
+	public enum LogEntrySeverities
+	{
+		Debug = 1, Detail, User, Info, Warn, Error, Fatal
+	}
+}
diff --git a/src/shared/Models/Entities/Logs.cs b/src/shared/Models/Entities/Logs.cs
new file mode 100644
index 0000000000000000000000000000000000000000..f8f27d662b963b6f1f99ca60dbdb2410d005402f
--- /dev/null
+++ b/src/shared/Models/Entities/Logs.cs
@@ -0,0 +1,21 @@
+using System;
+using System.ComponentModel.DataAnnotations;
+using Newtonsoft.Json;
+
+namespace StatusMonitor.Shared.Models.Entities
+{
+	/// <summary>
+	/// Represents a generic log entry.
+	/// </summary>
+	public class LogEntry
+	{
+		[Key]
+		public int Id { get; set; }
+		public string Message { get; set; }
+		public string AuxiliaryData { get; set; } = "";
+		public LogEntrySeverity Severity { get; set; }
+		public string Source { get; set; }
+		public DateTime Timestamp { get; set; } = DateTime.UtcNow;
+		public int Category { get; set; } = 0;
+	}
+}
diff --git a/src/shared/Models/Entities/Metrics.cs b/src/shared/Models/Entities/Metrics.cs
new file mode 100644
index 0000000000000000000000000000000000000000..ca1785851a716adea6613fa655b8b0c81a93485c
--- /dev/null
+++ b/src/shared/Models/Entities/Metrics.cs
@@ -0,0 +1,66 @@
+using System;
+using System.ComponentModel.DataAnnotations;
+
+namespace StatusMonitor.Shared.Models.Entities
+{
+	/// <summary>
+	/// Represents a building block for Metric objects.
+	/// This is the data given in configuration, while Metric is a "snapshot" or "current state" of dynamic data.!--
+	/// This class is used to create Metric objects by giving them initial static data like Title and Type.
+	/// </summary>
+	public class AbstractMetric
+	{
+		/// <summary>
+		/// Type of the Metric. Must be one of Metrics enum. 
+		/// </summary>
+		[Key]
+		public int Type { get; set; }
+
+		public string Title { get; set; }
+		public bool Public { get; set; } = true;
+	}
+
+	/// <summary>
+	/// Represents a Metric which is then displayed to the user.
+	/// Metric is NOT a DataPoint, Metric is rather a category for DataPoint's.
+	/// For example, CPU Load is a Metric, and 25% is a specific DataPoint for that Metric.
+	/// 
+	/// Numeric properties (CurrentValue, DayMin, DayMax, DayAvg, HourMin, HourMax, HourAvg)
+	/// along with LastUpdated and AutoLabel are set by ICacheService.
+	/// </summary>
+	public class Metric
+	{
+		/// <summary>
+		/// Type of the Metric. Must be one of Metrics enum. 
+		/// Type is a part of a compound key. See DataContext.OnModelcreating
+		/// </summary>
+		public int Type { get; set; }
+		/// <summary>
+		/// Represents a source from which this metric gets its data. 
+		/// May be a server identifier, or a website URL.
+		/// Source is a part of a compound key. See DataContext.OnModelcreating
+		/// </summary>
+		public string Source { get; set; }
+
+		public string Title { get; set; }
+		public AutoLabel AutoLabel { get; set; }
+		public ManualLabel ManualLabel { get; set; }
+		public DateTime LastUpdated { get; set; }
+		public bool Public { get; set; }
+
+		public int CurrentValue { get; set; }
+
+		public int HourMin { get; set; }
+		public int HourMax { get; set; }
+		public int HourAvg { get; set; }
+
+		public int DayMin { get; set; }
+		public int DayMax { get; set; }
+		public int DayAvg { get; set; }
+	}
+
+	public enum Metrics
+	{
+		CpuLoad = 1, UserAction, Compilation, Log, Ping
+	}
+}
diff --git a/src/shared/Models/Entities/Notification.cs b/src/shared/Models/Entities/Notification.cs
new file mode 100644
index 0000000000000000000000000000000000000000..87bcfd2091d3573c10d07e6ecc7dc89dc8cf2428
--- /dev/null
+++ b/src/shared/Models/Entities/Notification.cs
@@ -0,0 +1,25 @@
+using System;
+using System.ComponentModel.DataAnnotations;
+
+namespace StatusMonitor.Shared.Models.Entities
+{
+	/// <summary>
+	/// Model describing generic notification
+	/// </summary>
+	public class Notification
+	{
+		[Key]
+		public int Id { get; set; }
+		public string Message { get; set; }
+		public NotificationSeverity Severity { get; set; }
+		public bool IsSent { get; set; } = false;
+		public DateTime DateCreated { get; set; } = DateTime.UtcNow;
+		public DateTime DateSent { get; set; }
+	}
+
+	public enum NotificationSeverity
+	{
+		Low, Medium, High
+	}
+
+}
diff --git a/src/shared/Models/Entities/Settings.cs b/src/shared/Models/Entities/Settings.cs
new file mode 100644
index 0000000000000000000000000000000000000000..951736e37021ead18d83b0f3c4eb7b21cc115961
--- /dev/null
+++ b/src/shared/Models/Entities/Settings.cs
@@ -0,0 +1,27 @@
+using System;
+using System.ComponentModel.DataAnnotations;
+
+namespace StatusMonitor.Shared.Models.Entities
+{
+	/// <summary>
+	/// Entity representing a set of parameters for one ping target.
+	/// </summary>
+	public class PingSetting
+	{
+		[Key]
+		public string ServerUrl { get; set; }
+		/// <summary>
+		/// Time period after which the server needs to be considered unresponsive
+		/// </summary>
+		public TimeSpan MaxResponseTime { get; set; } = new TimeSpan(0, 0, 0, 0, 2000);
+		/// <summary>
+		/// Number of times to try to ping the server before calling it dead.
+		/// </summary>
+		public int MaxFailures { get; set; } = 3;
+		/// <summary>
+		/// Whether or not the server needs to be ping by GET request instead of HEAD.
+		/// </summary>
+		public bool GetMethodRequired { get; set; } = false;
+	}
+
+}
diff --git a/src/shared/Models/Entities/User.cs b/src/shared/Models/Entities/User.cs
new file mode 100644
index 0000000000000000000000000000000000000000..469fdd1cdf06c08ab77380356f7e8c44059308e9
--- /dev/null
+++ b/src/shared/Models/Entities/User.cs
@@ -0,0 +1,13 @@
+using System.ComponentModel.DataAnnotations;
+
+namespace StatusMonitor.Shared.Models.Entities
+{
+	/// <summary>
+	/// Workaround to enable Identity service which requires User model
+	/// </summary>
+	public class User
+	{
+		[Key]
+		public int Id { get; set; }
+	}
+}
diff --git a/src/shared/Services/CleanService.cs b/src/shared/Services/CleanService.cs
new file mode 100644
index 0000000000000000000000000000000000000000..7527d16b8a95e24557d0f4fad646e2aa9e9114d1
--- /dev/null
+++ b/src/shared/Services/CleanService.cs
@@ -0,0 +1,103 @@
+using System;
+using StatusMonitor.Shared.Extensions;
+using StatusMonitor.Shared.Models;
+using System.Threading.Tasks;
+using Microsoft.Extensions.Logging;
+using System.Linq;
+using Microsoft.Extensions.Configuration;
+using Microsoft.EntityFrameworkCore;
+using StatusMonitor.Shared.Models.Entities;
+
+namespace StatusMonitor.Shared.Services
+{
+	/// <summary>
+	/// Used to clean up database removing old datapoints and log entries
+	/// </summary>
+	public interface ICleanService
+	{
+		/// <summary>
+		/// Removes all data points and log entries older than the configured timestamp
+		/// </summary>
+		/// <param name="maxAge">Time ago earlier than which to consider data too old</param>
+		Task CleanDataPointsAsync(TimeSpan? maxAge = null);
+	}
+
+	public class CleanService : ICleanService
+	{
+		private readonly ILogger<CleanService> _logger;
+		private readonly IDataContext _context;
+
+		/// <summary>
+		/// The maximum age of a data point.
+		/// </summary>
+		private readonly TimeSpan _maxAge = new TimeSpan();
+
+		public CleanService(
+			ILogger<CleanService> logger,
+			IDataContext context,
+			IConfiguration config
+		)
+		{
+			_logger = logger;
+			_context = context;
+			_maxAge = new TimeSpan(
+				0, 0, Convert.ToInt32(
+					config["ServiceManager:CleanService:MaxAge"]
+				)
+			);
+		}
+
+		public async Task CleanDataPointsAsync(TimeSpan? maxAge = null)
+		{
+			var toTimestamp = DateTime.UtcNow - (maxAge ?? _maxAge);
+
+			// Remove data of all types
+
+			await RemoveDataPoints(_context.NumericDataPoints, toTimestamp);
+			await RemoveDataPoints(_context.LogDataPoints, toTimestamp);
+			await RemoveDataPoints(_context.CompilationDataPoints, toTimestamp);
+			await RemoveDataPoints(_context.UserActionDataPoints, toTimestamp);
+			await RemoveDataPoints(_context.PingDataPoints, toTimestamp);
+
+			if (await _context.LogEntries.AnyAsync(dp => dp.Timestamp < toTimestamp))
+			{
+				_context.LogEntries.RemoveRange(
+					_context.LogEntries.Where(dp => dp.Timestamp < toTimestamp)
+				);
+			}
+
+			if (await _context.Notifications.AnyAsync(dp => dp.IsSent && dp.DateCreated < toTimestamp))
+			{
+				_context.Notifications.RemoveRange(
+					_context.Notifications.Where(dp => dp.IsSent && dp.DateCreated < toTimestamp)
+				);
+			}
+
+			if (await _context.Discrepancies.AnyAsync(dp => dp.DateFirstOffense < toTimestamp))
+			{
+				_context.Discrepancies.RemoveRange(
+					_context.Discrepancies.Where(dp => dp.DateFirstOffense < toTimestamp)
+				);
+			}
+
+			await _context.SaveChangesAsync();
+
+			_logger.LogDebug(LoggingEvents.Clean.AsInt(), "Cleaned old data.");
+		}
+
+		/// <summary>
+		/// Helper to remove datapoints
+		/// </summary>
+		/// <param name="dataPoints">Data points to remove</param>
+		/// <param name="toTimestamp">Timestamp earlier than which to remove data</param>
+		private async Task RemoveDataPoints<T>(DbSet<T> dataPoints, DateTime toTimestamp) where T : DataPoint
+		{
+			if (await dataPoints.AnyAsync(dp => dp.Timestamp < toTimestamp))
+			{
+				dataPoints.RemoveRange(
+					dataPoints.Where(dp => dp.Timestamp < toTimestamp)
+				);
+			}
+		}
+	}
+}
diff --git a/src/shared/Services/CryptoService.cs b/src/shared/Services/CryptoService.cs
new file mode 100644
index 0000000000000000000000000000000000000000..46c85821a06a78c30258040aae6c1657fe4447a8
--- /dev/null
+++ b/src/shared/Services/CryptoService.cs
@@ -0,0 +1,36 @@
+using System.Security.Cryptography;
+using System.Text;
+
+namespace StatusMonitor.Shared.Services
+{
+	public interface ICryptoService
+	{
+		/// <summary>
+		/// Generates MD5 hash of given input
+		/// </summary>
+		/// <param name="input">Input for which to compute hash</param>
+		/// <returns>MD5 hash</returns>
+		string CalculateHash(string input);
+	}
+
+	public class CryptoService : ICryptoService
+	{
+		public string CalculateHash(string input)
+		{
+			// step 1, calculate MD5 hash from input
+			MD5 md5 = System.Security.Cryptography.MD5.Create();
+			byte[] inputBytes = System.Text.Encoding.ASCII.GetBytes(input);
+			byte[] hash = md5.ComputeHash(inputBytes);
+
+			// step 2, convert byte array to hex string
+			StringBuilder sb = new StringBuilder();
+
+			for (int i = 0; i < hash.Length; i++)
+			{
+				sb.Append(hash[i].ToString("X2"));
+			}
+
+			return sb.ToString();
+		}
+	}
+}
diff --git a/src/shared/Services/DataSeedService.cs b/src/shared/Services/DataSeedService.cs
new file mode 100644
index 0000000000000000000000000000000000000000..83ce4df00a74d5fefd5ae0da544cf26f08884605
--- /dev/null
+++ b/src/shared/Services/DataSeedService.cs
@@ -0,0 +1,236 @@
+using System;
+using System.Collections.Generic;
+using StatusMonitor.Shared.Extensions;
+using StatusMonitor.Shared.Models.Entities;
+using StatusMonitor.Shared.Models;
+using System.Linq;
+using Microsoft.EntityFrameworkCore;
+using System.Threading.Tasks;
+using Microsoft.Extensions.Logging;
+using Microsoft.Extensions.Configuration;
+
+namespace StatusMonitor.Shared.Services
+{
+	/// <summary>
+	/// Service used to initialize some values in the database. Called each time app starts.
+	/// </summary>
+	public interface IDataSeedService
+	{
+		/// <summary>
+		/// Populates data provider with initial set of records (like enums)
+		/// </summary>
+		Task SeedDataAsync();
+
+		/// <summary>
+		/// A synchronous version of SeedDataAsync.
+		/// Does NOT populate data points.
+		/// Should NOT be used in production.
+		/// </summary>
+		void SeedData();
+	}
+
+	public class DataSeedService : IDataSeedService
+	{
+		private readonly IDataContext _context;
+		private readonly ILogger<DataSeedService> _logger;
+		private readonly IConfiguration _configuration;
+
+		private List<AutoLabel> _autoLabels = new List<AutoLabel>();
+		private List<ManualLabel> _manualLabels = new List<ManualLabel>();
+		private List<CompilationStage> _compilationStages = new List<CompilationStage>();
+		private List<UserAction> _userActions = new List<UserAction>();
+		private List<LogEntrySeverity> _logEntrySeverities = new List<LogEntrySeverity>();
+		private List<AbstractMetric> _abstractMetrics = new List<AbstractMetric>();
+
+		private List<PingSetting> _pingSettings = new List<PingSetting>();
+
+		public DataSeedService(
+			IDataContext context,
+			ILogger<DataSeedService> logger,
+			IConfiguration configuration
+		)
+		{
+			_context = context;
+			_logger = logger;
+			_configuration = configuration;
+
+			ReadConfiguration();
+		}
+
+		public void SeedData()
+		{
+			_logger.LogInformation(LoggingEvents.Startup.AsInt(), "Data Seed started.");
+
+			SeedSpecificEntity(_autoLabels, _context.AutoLabels);
+			SeedSpecificEntity(_manualLabels, _context.ManualLabels);
+			SeedSpecificEntity(_compilationStages, _context.CompilationStages);
+			SeedSpecificEntity(_userActions, _context.UserActions);
+			SeedSpecificEntity(_logEntrySeverities, _context.LogEntrySeverities);
+			SeedSpecificEntity(_abstractMetrics, _context.AbstractMetrics);
+
+			SeedSpecificEntity(_pingSettings, _context.PingSettings);
+
+			_logger.LogInformation(LoggingEvents.Startup.AsInt(), "Data Seed completed.");
+		}
+
+		public async Task SeedDataAsync()
+		{
+			// Put the data into the data provider
+			_logger.LogInformation(LoggingEvents.Startup.AsInt(), "DataSeed started");
+
+			await SeedSpecificEntityAsync(_autoLabels, _context.AutoLabels);
+			await SeedSpecificEntityAsync(_manualLabels, _context.ManualLabels);
+			await SeedSpecificEntityAsync(_compilationStages, _context.CompilationStages);
+			await SeedSpecificEntityAsync(_userActions, _context.UserActions);
+			await SeedSpecificEntityAsync(_logEntrySeverities, _context.LogEntrySeverities);
+			await SeedSpecificEntityAsync(_abstractMetrics, _context.AbstractMetrics);
+
+			await SeedSpecificEntityAsync(_pingSettings, _context.PingSettings);
+
+			_logger.LogInformation(LoggingEvents.Startup.AsInt(), "DataSeed finished");
+		}
+
+		/// <summary>
+		/// Populate properties with values read from config
+		/// </summary>
+		private void ReadConfiguration()
+		{
+			_autoLabels = ReadStaticValueFromConfiguration<AutoLabel, AutoLabels>(
+				(label) => new AutoLabel
+				{
+					Id = label.AsInt(),
+					Title = _configuration[$"Data:AutoLabels:{label.ToString()}"]
+				}
+			);
+
+			_manualLabels = ReadStaticValueFromConfiguration<ManualLabel, ManualLabels>(
+				(label) => new ManualLabel
+				{
+					Id = label.AsInt(),
+					Title = _configuration[$"Data:ManualLabels:{label.ToString()}"]
+				}
+			);
+
+			_compilationStages = ReadStaticValueFromConfiguration<CompilationStage, CompilationStages>(
+				(label) => new CompilationStage
+				{
+					Id = label.AsInt(),
+					Name = _configuration[$"Data:CompilationStages:{label.ToString()}"]
+				}
+			);
+
+			_userActions = ReadStaticValueFromConfiguration<UserAction, UserActions>(
+				(label) => new UserAction
+				{
+					Id = label.AsInt(),
+					Name = _configuration[$"Data:UserActions:{label.ToString()}"]
+				}
+			);
+
+			_logEntrySeverities = ReadStaticValueFromConfiguration<LogEntrySeverity, LogEntrySeverities>(
+				(label) => new LogEntrySeverity
+				{
+					Id = label.AsInt(),
+					Description = _configuration[$"Data:LogEntrySeverities:{label.ToString()}"]
+				}
+			);
+
+			_abstractMetrics = ReadStaticValueFromConfiguration<AbstractMetric, Metrics>(
+				(label) => new AbstractMetric
+				{
+					Type = label.AsInt(),
+					Public = label == Metrics.CpuLoad || label == Metrics.Ping,
+					Title = _configuration[$"Data:Metrics:{label.ToString()}"]
+				}
+			);
+
+			var pingConfig = _configuration.SectionsFromArray("Data:PingSettings");
+
+			if (pingConfig.Count() > 0)
+			{
+				_pingSettings =
+					pingConfig
+					.Select(section =>
+					{
+						var setting = new PingSetting
+						{
+							ServerUrl = section["ServerUrl"]
+						};
+						if (section["MaxResponseTime"] != null)
+						{
+							setting.MaxResponseTime = new TimeSpan(0, 0, 0, 0, Convert.ToInt32(section["MaxResponseTime"]));
+						}
+						if (section["MaxFailures"] != null)
+						{
+							setting.MaxFailures = Convert.ToInt32(section["MaxFailures"]);
+						}
+						if (section["GetMethodRequired"] != null)
+						{
+							setting.GetMethodRequired = Convert.ToBoolean(section["GetMethodRequired"]);
+						}
+
+						return setting;
+					})
+					.ToList();
+			}
+		}
+
+		/// <summary>
+		/// Helper that reads value from config for each Enum
+		/// </summary>
+		/// <param name="transformer">Delegate that defines how to extract value from config</param>
+		/// <returns></returns>
+		private List<TEntity> ReadStaticValueFromConfiguration<TEntity, TEnum>(
+			Func<TEnum, TEntity> transformer
+		) where TEnum : struct, IConvertible
+		{
+			return Enum
+				.GetValues(typeof(TEnum))
+				.Cast<TEnum>()
+				.Select(transformer)
+				.ToList();
+		}
+
+		/// <summary>
+		/// A synchronous version of SeedSpecificEntityAsync.
+		/// </summary>
+		private bool SeedSpecificEntity<T>(List<T> values, DbSet<T> dbSets) where T : class
+		{
+			if (values.Count != dbSets.Count())
+			{
+				dbSets.Clear();
+				_context.SaveChanges();
+				dbSets.AddRange(values);
+				_context.SaveChanges();
+				return true;
+			}
+			return false;
+		}
+
+		/// <summary>
+		/// Replace the existing entities of the T type with the supplied one.
+		/// As optimization, it does it only if the number of records in the data provider is different from the number
+		/// in the supplied list.
+		/// </summary>
+		/// <param name="values">List of supplied values to be inserted/replaced</param>
+		/// <param name="dbSets">The set of entities of this type in the data provider. 
+		/// These are to be replaced by values.</param>
+		/// <returns>True if values has been replaced, false if values were in sync and did not require 
+		/// replacement.</returns>
+		private async Task<bool> SeedSpecificEntityAsync<T>(List<T> values, DbSet<T> dbSets, bool ignoreCount = false) where T : class
+		{
+			if (values.Count != await dbSets.CountAsync() || ignoreCount)
+			{
+				if (!ignoreCount)
+				{
+					dbSets.Clear();
+				}
+				await _context.SaveChangesAsync();
+				await dbSets.AddRangeAsync(values);
+				await _context.SaveChangesAsync();
+				return true;
+			}
+			return false;
+		}
+	}
+}
diff --git a/src/shared/Services/EmailService.cs b/src/shared/Services/EmailService.cs
new file mode 100644
index 0000000000000000000000000000000000000000..bea482368f9bc419e4b1a26dca3d9b8c2c9b85ee
--- /dev/null
+++ b/src/shared/Services/EmailService.cs
@@ -0,0 +1,112 @@
+using System;
+using StatusMonitor.Shared.Extensions;
+using StatusMonitor.Shared.Models;
+using System.Threading.Tasks;
+using Microsoft.Extensions.Logging;
+using System.Linq;
+using Microsoft.Extensions.Configuration;
+using Microsoft.EntityFrameworkCore;
+using StatusMonitor.Shared.Models.Entities;
+using MailKit.Net.Smtp;
+using MimeKit;
+using MailKit.Security;
+using System.Security.Cryptography.X509Certificates;
+using System.Net.Security;
+
+namespace StatusMonitor.Shared.Services
+{
+	/// <summary>
+	/// Service used to send email messages
+	/// </summary>
+	public interface IEmailService
+	{
+		/// <summary>
+		/// Connects to SMTP server and send the email.
+		/// </summary>
+		/// <param name="to">Array of emails of recipients</param>
+		/// <param name="subject">Subject of the message</param>
+		/// <param name="message">Body of the massage</param>
+		Task SendEmailAsync(string[] to, string subject, string message);
+	}
+
+	public class EmailService : IEmailService
+	{
+		private readonly ILogger<EmailService> _logger;
+		private readonly IConfiguration _config;
+
+		public EmailService(
+			ILogger<EmailService> logger,
+			IConfiguration config
+		)
+		{
+			_logger = logger;
+			_config = config;
+		}
+
+		public async Task SendEmailAsync(string[] to, string subject, string message)
+		{
+			if (to.Count() == 0)
+			{
+				throw new ArgumentException("Empty list of recipients.");
+			}
+
+			if (Convert.ToBoolean(_config["Secrets:Email:Enabled"]))
+			{
+				var emailMessage = new MimeMessage();
+
+				emailMessage.From.Add(
+					new MailboxAddress(
+						_config["Secrets:Email:FromTitle"],
+						_config["Secrets:Email:FromEmail"]
+					)
+				);
+
+				foreach (var recipient in to)
+				{
+					emailMessage.To.Add(new MailboxAddress(recipient, recipient));
+				}
+
+				emailMessage.Subject = subject;
+				emailMessage.Body = new TextPart("plain") { Text = message };
+
+				using (var client = new SmtpClient())
+				{
+					// TODO: security
+					client.ServerCertificateValidationCallback = (
+						object s,
+						X509Certificate certificate,
+						X509Chain chain,
+						SslPolicyErrors sslPolicyErrors
+					) => true;
+
+					await client.ConnectAsync(
+						_config["Secrets:Email:Host"],
+						Convert.ToInt32(_config["Secrets:Email:SMTP:Port"]),
+						(SecureSocketOptions)Enum.Parse(
+							typeof(SecureSocketOptions),
+							_config["Secrets:Email:SMTP:Security"]
+						)
+					).ConfigureAwait(false);
+
+					// Note: since we don't have an OAuth2 token, disable 	
+					// the XOAUTH2 authentication mechanism.     
+					client.AuthenticationMechanisms.Remove("XOAUTH2");
+					
+					await client.AuthenticateAsync(
+						_config["Secrets:Email:FromEmail"],
+						_config["Secrets:Email:Password"]
+					);
+
+					await client.SendAsync(emailMessage).ConfigureAwait(false);
+					await client.DisconnectAsync(true).ConfigureAwait(false);
+
+					_logger.LogDebug($"Message '{subject}' has been sent to {to.Aggregate((self, next) => $"{next}, {self}")}");
+				}
+			}
+			else
+			{
+				_logger.LogInformation($"Message '{subject}' was supposed to be  sent to {to.Aggregate((self, next) => $"{next}, {self}")}");
+			}
+		}
+	}
+}
diff --git a/src/shared/Services/Factories/IHttpClientFactory.cs b/src/shared/Services/Factories/IHttpClientFactory.cs
new file mode 100644
index 0000000000000000000000000000000000000000..17fdbb20596bde16f83fca53342cf0ba3562998e
--- /dev/null
+++ b/src/shared/Services/Factories/IHttpClientFactory.cs
@@ -0,0 +1,24 @@
+using System.Net.Http;
+
+namespace StatusMonitor.Shared.Services.Factories
+{
+	/// <summary>
+	/// Simple factory returning HttpClient
+	/// </summary>
+	public interface IHttpClientFactory
+	{
+		/// <summary>
+		/// Returns an HttpClient
+		/// </summary>
+		/// <returns>Newly created HttpClient</returns>
+		HttpClient BuildClient();
+	}
+
+	public class HttpClientFactory : IHttpClientFactory
+	{
+		public HttpClient BuildClient()
+		{
+			return new HttpClient();
+		}
+	}
+}
diff --git a/src/shared/Services/LoggingService.cs b/src/shared/Services/LoggingService.cs
new file mode 100644
index 0000000000000000000000000000000000000000..93310c3ca1ff5c8b9280a39b1dfd1e7bfe3a8d1d
--- /dev/null
+++ b/src/shared/Services/LoggingService.cs
@@ -0,0 +1,224 @@
+using StatusMonitor.Shared.Extensions;
+using StatusMonitor.Shared.Models;
+using System.Threading.Tasks;
+using Microsoft.EntityFrameworkCore;
+using StatusMonitor.Shared.Models.Entities;
+using System.Collections.Generic;
+using System;
+using System.Linq;
+
+namespace StatusMonitor.Shared.Services
+{
+	/// <summary>
+	/// Service used to record log messages into data provider.
+	/// </summary>
+	public interface ILoggingService
+	{
+		/// <summary>
+		/// Records a log message given by the model into data provider.
+		/// </summary>
+		/// <param name="message">Message part of the model</param>
+		/// <param name="auxData">Auxiliary data part of the model</param>
+		/// <param name="source">Source part of the model</param>
+		/// <param name="category">Category part of the model</param>
+		/// <param name="severity">Severity part of the model</param>
+		/// <returns>An identifier (Id) of a recorded message in the data provider.</returns> 
+		Task<int> RecordLogMessageAsync(
+			string message,
+			string auxData,
+			string source,
+			int category,
+			LogEntrySeverities severity
+		);
+
+		/// <summary>
+		/// Returns log messages filtered according to filter model
+		/// </summary>
+		/// <param name="filterModel">Model used to filter the entries</param>
+		/// <returns>Filtered log entries</returns>
+		Task<IEnumerable<LogEntry>> GetLogMessagesAsync(LogMessagesFilterModel filterModel);
+
+		/// <summary>
+		/// Returns a single log entry given by ID
+		/// </summary>
+		/// <param name="id">ID of the log entry to find</param>
+		/// <returns>Log entry with given ID, or null if there is no such log entry</returns>
+		Task<LogEntry> GetMessageByIdAsync(int id);
+
+		/// <summary>
+		/// Returns a filter model that describes which properties are available for filtering
+		/// </summary>
+		/// <returns>Model that describes which properties are available for filtering</returns>
+		Task<LogMessagesFilterModel> GetAvailableFilterDataAsync();
+	}
+
+	public class LoggingService : ILoggingService
+	{
+		private readonly IDataContext _context;
+
+		public LoggingService(IDataContext context)
+		{
+			_context = context;
+		}
+
+		public async Task<LogMessagesFilterModel> GetAvailableFilterDataAsync()
+		{
+			return new LogMessagesFilterModel
+			{
+				Severities = await _context
+					.LogEntries
+					.GroupBy(e => e.Severity)
+					.Select(s => (LogEntrySeverities)s.Key.Id)
+					.ToListAsync(),
+				Categories = await _context
+					.LogEntries
+					.GroupBy(e => e.Category)
+					.Select(c => c.Key)
+					.ToListAsync(),
+				Sources = await _context
+					.LogEntries
+					.GroupBy(e => e.Source)
+					.Select(c => c.Key)
+					.ToListAsync(),
+				Start = (await _context
+					.LogEntries
+					.OrderBy(e => e.Timestamp)
+					.FirstOrDefaultAsync())?
+					.Timestamp,
+				End = (await _context
+					.LogEntries
+					.OrderByDescending(e => e.Timestamp)
+					.FirstOrDefaultAsync())?
+					.Timestamp
+			};
+		}
+
+		public async Task<IEnumerable<LogEntry>> GetLogMessagesAsync(LogMessagesFilterModel filterModel)
+		{
+			var logs = _context.LogEntries.Include(e => e.Severity).AsQueryable();
+
+			if (filterModel.Sources.Count() > 0)
+			{
+				logs = logs.Where(e => filterModel.Sources.Contains(e.Source));
+				if (await logs.CountAsync() == 0)
+				{
+					return new List<LogEntry>();
+				}
+			}
+
+			if (filterModel.Categories.Count() > 0)
+			{
+				logs = logs.Where(e => filterModel.Categories.Contains(e.Category));
+				if (await logs.CountAsync() == 0)
+				{
+					return new List<LogEntry>();
+				}
+			}
+
+			if (filterModel.Severities.Count() > 0)
+			{
+				var severities = await _context
+					.LogEntrySeverities
+					.Where(s => filterModel.Severities.Contains((LogEntrySeverities)s.Id))
+					.ToListAsync();
+
+				logs = logs.Where(e => severities.Contains(e.Severity));
+				if (await logs.CountAsync() == 0)
+				{
+					return new List<LogEntry>();
+				}
+			}
+
+			if (filterModel.Start.HasValue)
+			{
+				logs = logs.Where(e => e.Timestamp >= filterModel.Start.Value);
+				if (await logs.CountAsync() == 0)
+				{
+					return new List<LogEntry>();
+				}
+			}
+
+			if (filterModel.End.HasValue)
+			{
+				logs = logs.Where(e => e.Timestamp <= filterModel.End.Value);
+				if (await logs.CountAsync() == 0)
+				{
+					return new List<LogEntry>();
+				}
+			}
+
+			var results = await logs.ToListAsync();
+
+			if (filterModel.Keywords.Count() > 0)
+			{
+				var keywordResults = new HashSet<LogEntry>();
+				foreach (var keyword in filterModel.Keywords)
+				{
+					keywordResults
+						.UnionWith(
+							results
+								.Where(e => e.Message.Contains(keyword) || e.AuxiliaryData.Contains(keyword))
+						);
+				}
+
+				results = keywordResults.ToList();
+			}
+
+			return results;
+		}
+
+		public async Task<LogEntry> GetMessageByIdAsync(int id)
+		{
+			return await _context
+				.LogEntries
+				.Include(e => e.Severity)
+				.FirstOrDefaultAsync(e => e.Id == id);
+		}
+
+		public async Task<int> RecordLogMessageAsync(
+			string message,
+			string auxData,
+			string source,
+			int category,
+			LogEntrySeverities severity
+		)
+		{
+			// Retrieve requested user action
+			var logSeverity =
+				await _context
+					.LogEntrySeverities
+					.FirstAsync(act => act.Id == severity.AsInt());
+
+			var entry = new LogEntry
+			{
+				Severity = logSeverity,
+				Message = message,
+				AuxiliaryData = auxData,
+				Source = source,
+				Category = category
+			};
+
+			// Record data
+			await _context.LogEntries.AddAsync(entry);
+
+			// Submit changes to data provider
+			await _context.SaveChangesAsync();
+
+			// Return Id of a created object in the data provider.
+			return entry.Id;
+		}
+	}
+
+	/// <summary>
+	/// Helper model that describes filter criteria for log entries
+	/// </summary>
+	public class LogMessagesFilterModel
+	{
+		public IEnumerable<LogEntrySeverities> Severities { get; set; } = new List<LogEntrySeverities>();
+		public IEnumerable<int> Categories { get; set; } = new List<int>();
+		public IEnumerable<string> Sources { get; set; } = new List<string>();
+		public DateTime? Start { get; set; }
+		public DateTime? End { get; set; }
+		public IEnumerable<string> Keywords { get; set; } = new List<string>();
+	}
+}
diff --git a/src/shared/Services/MetricService.cs b/src/shared/Services/MetricService.cs
new file mode 100644
index 0000000000000000000000000000000000000000..88fcc8b1014ce0ac8bff30f6f4bf3db01294b040
--- /dev/null
+++ b/src/shared/Services/MetricService.cs
@@ -0,0 +1,203 @@
+using System;
+using StatusMonitor.Shared.Extensions;
+using StatusMonitor.Shared.Models.Entities;
+using StatusMonitor.Shared.Models;
+using Microsoft.EntityFrameworkCore;
+using System.Threading.Tasks;
+using Microsoft.Extensions.Logging;
+using System.Linq;
+using System.Collections.Generic;
+
+namespace StatusMonitor.Shared.Services
+{
+	/// <summary>
+	/// Service used to access and create Metric objects.
+	/// </summary>
+	public interface IMetricService
+	{
+		/// <summary>
+		/// Returns the list of metrics that match given parameters
+		/// </summary>
+		/// <param name="type">Metric type requested</param>
+		/// <param name="source">Metric source requested (eq. server id or URL)</param>
+		/// <returns>List of metrics that match given parameters</returns>
+		Task<IEnumerable<Metric>> GetMetricsAsync(Metrics? type = null, string source = null);
+
+		/// <summary>
+		/// Returns the metric if it exists, or creates it for the specified type and source otherwise
+		/// </summary>
+		/// <param name="type">Metric type requested</param>
+		/// <param name="source">Metric source requested (eq. server id or URL)</param>
+		/// <returns>Returns the metric (already existing or newly created)</returns>
+		/// <exception cref="ArgumentException">Thrown if there is no AbstractMetric of this type.</exception> 
+		Task<Metric> GetOrCreateMetricAsync(Metrics type, string source);
+
+		/// <summary>
+		/// Returns a current (numeric) value for the given metric bypassing caches (directly from the data provider).
+		/// </summary>
+		/// <param name="metric">Metric for which to return the current value.</param>
+		/// <returns>Current numeric value (always the most current).</returns>
+		Task<int> GetCurrentValueForMetricAsync(Metric metric);
+	}
+
+	/// <summary>
+	/// Specific implementation of IMetricService.
+	/// </summary>
+	public class MetricService : IMetricService
+	{
+		private readonly IDataContext _context;
+		private readonly ILogger<MetricService> _logger;
+
+		public MetricService(
+			IDataContext context,
+			ILogger<MetricService> logger
+		)
+		{
+			_context = context;
+			_logger = logger;
+		}
+
+		public async Task<int> GetCurrentValueForMetricAsync(Metric metric)
+		{
+			switch ((Metrics)metric.Type)
+			{
+				case Metrics.CpuLoad:
+					return await GetCurrentValueForMetricFromDataPointsAsync(metric, _context.NumericDataPoints);
+				case Metrics.Compilation:
+					return await GetCurrentValueForMetricFromDataPointsAsync(metric, _context.CompilationDataPoints);
+				case Metrics.Ping:
+					return await GetCurrentValueForMetricFromDataPointsAsync(metric, _context.PingDataPoints);
+				case Metrics.Log:
+					return await GetCurrentValueForMetricFromDataPointsAsync(metric, _context.LogDataPoints);
+				case Metrics.UserAction:
+					return await GetCurrentValueForMetricFromDataPointsAsync(metric, _context.UserActionDataPoints);
+				default:
+					var ex = new ArgumentOutOfRangeException($"Unknown metric type: {metric.Type}");
+					_logger.LogCritical(
+						LoggingEvents.Metrics.AsInt(),
+						ex,
+						"Unknown metric in GetCurrentValueForMetricAsync"
+					);
+					throw ex;
+			}
+		}
+
+		/// <summary>
+		/// Helper method that returns the most current numeric (normalized) value
+		/// for the metric and the set of data points.
+		/// </summary>
+		/// <returns>Current numeric value (always the most current).</returns>
+		private async Task<int> GetCurrentValueForMetricFromDataPointsAsync<T>(
+			Metric metric, DbSet<T> dataPoints
+		) where T : DataPoint
+		{
+			_context.Metrics.Attach(metric);
+
+			return (await dataPoints
+				.Where(dp => dp.Metric == metric)
+				.OrderByDescending(dp => dp.Timestamp)
+				.FirstAsync())
+				.NormalizedValue();
+		}
+
+		public async Task<Metric> GetOrCreateMetricAsync(Metrics type, string source)
+		{
+			if (await _context.Metrics.AnyAsync(mt => mt.Type == type.AsInt() && mt.Source == source))
+			{
+				return await _context
+					.Metrics
+					.FirstOrDefaultAsync(
+						mt => mt.Type == type.AsInt() && mt.Source == source
+					);
+			}
+
+			var abstractMetric = await _context.AbstractMetrics.FirstOrDefaultAsync(mt => mt.Type == type.AsInt());
+			if (abstractMetric == null)
+			{
+				throw new ArgumentException($"No generic metric exists with the type {type}");
+			}
+
+			var autoLabel = await _context.AutoLabels.FirstOrDefaultAsync(lbl => lbl.Id == AutoLabels.Normal.AsInt());
+			if (autoLabel == null)
+			{
+				throw new ArgumentException($"No AutoLabel exists with the Id {AutoLabels.Normal}");
+			}
+
+			var manualLabel = await _context.
+				ManualLabels.
+				FirstOrDefaultAsync(lbl => lbl.Id == ManualLabels.None.AsInt());
+			if (manualLabel == null)
+			{
+				throw new ArgumentException($"No ManualLabel exists with the Id {ManualLabels.Investigating}");
+			}
+
+			var metric = new Metric
+			{
+				Type = abstractMetric.Type,
+				Public = abstractMetric.Public,
+				AutoLabel = autoLabel,
+				ManualLabel = manualLabel,
+				Title = abstractMetric.Title,
+				Source = source
+			};
+
+			await _context.Metrics.AddAsync(metric);
+			await _context.SaveChangesAsync();
+
+			_logger.LogInformation(LoggingEvents.Metrics.AsInt(), $"New metric created: {(Metrics)metric.Type}, {metric.Source}");
+
+			return metric;
+		}
+
+		public async Task<IEnumerable<Metric>> GetMetricsAsync(Metrics? type, string source)
+		{
+			var metrics = await _context
+				.Metrics
+				.Include(mt => mt.AutoLabel)
+				.Include(mt => mt.ManualLabel)
+				.ToListAsync();
+
+			if (metrics.Count == 0)
+			{
+				return metrics;
+			}
+
+			if (type.HasValue)
+			{
+				metrics = metrics.Where(mt => mt.Type == type.AsInt()).ToList();
+				if (metrics.Count == 0)
+				{
+					return metrics;
+				}
+			}
+
+			if (source != null)
+			{
+				metrics = metrics.Where(mt => mt.Source == source).ToList();
+				if (metrics.Count == 0)
+				{
+					return metrics;
+				}
+			}
+
+			try
+			{
+				foreach (var metric in metrics)
+				{
+					metric.CurrentValue = await GetCurrentValueForMetricAsync(metric);
+				}
+			}
+			catch (System.Exception ex)
+			{
+				// Its alright for testing
+				_logger.LogWarning(
+					LoggingEvents.Metrics.AsInt(),
+					ex,
+					"GetMetric called for metric without data"
+				);
+			}
+
+			return metrics;
+		}
+	}
+}
diff --git a/src/shared/Services/NotificationService.cs b/src/shared/Services/NotificationService.cs
new file mode 100644
index 0000000000000000000000000000000000000000..a9d77bbd7f27b69d961a5532ac9f0d0cdf9c4359
--- /dev/null
+++ b/src/shared/Services/NotificationService.cs
@@ -0,0 +1,182 @@
+using System;
+using StatusMonitor.Shared.Extensions;
+using StatusMonitor.Shared.Models;
+using System.Threading.Tasks;
+using Microsoft.Extensions.Logging;
+using System.Linq;
+using Microsoft.Extensions.Configuration;
+using Microsoft.EntityFrameworkCore;
+using StatusMonitor.Shared.Models.Entities;
+using MailKit.Net.Smtp;
+using MimeKit;
+using MailKit.Security;
+using System.Security.Cryptography.X509Certificates;
+using System.Net.Security;
+using System.Collections.Generic;
+using System.Runtime.CompilerServices;
+
+[assembly: InternalsVisibleTo("test")]
+
+namespace StatusMonitor.Shared.Services
+{
+	/// <summary>
+	/// Service used to schedule and send notifications
+	/// </summary>
+	public interface INotificationService
+	{
+		/// <summary>
+		/// Generates a notification with given message of given severity and puts it in a queue
+		/// </summary>
+		/// <param name="message">Notification body</param>
+		/// <param name="severity">Notification severity</param>
+		/// <returns>Newly created notification</returns>
+		Task<Notification> ScheduleNotificationAsync(string message, NotificationSeverity severity);
+
+		/// <summary>
+		/// Traverses queues of notifications and sends them out if necessary
+		/// </summary>
+		/// <returns>True if notification queue has been flushed and false otherwise</returns>
+		Task<bool> ProcessNotificationQueueAsync();
+	}
+
+	public class NotificationService : INotificationService
+	{
+		private readonly ILogger<NotificationService> _logger;
+		private readonly IConfiguration _config;
+		private readonly IDataContext _context;
+		private readonly IEmailService _email;
+		private readonly ISlackService _slack;
+
+		public NotificationService(
+			ILogger<NotificationService> logger,
+			IConfiguration config,
+			IDataContext context,
+			IEmailService email,
+			ISlackService slack
+		)
+		{
+			_logger = logger;
+			_config = config;
+			_context = context;
+			_email = email;
+			_slack = slack;
+		}
+
+		public async Task<bool> ProcessNotificationQueueAsync()
+		{
+			var send = Enum
+				.GetValues(typeof(NotificationSeverity))
+				.Cast<object>()
+				.Select(async severity => await CheckIfNeedToSendAsync((NotificationSeverity)severity))
+				.Select(task => task.Result)
+				.Aggregate((self, next) => self || next);
+
+			if (send && await _context.Notifications.AnyAsync(ntf => !ntf.IsSent))
+			{
+				var notifications = await _context
+					.Notifications
+					.Where(ntf => !ntf.IsSent)
+					.OrderBy(ntf => ntf.DateCreated)
+					.ToListAsync();
+
+				var message = ComposeMessage(notifications);
+
+				await _email.SendEmailAsync(
+					new string[] { _config["Secrets:Email:ToEmail"] },
+					"Status site notifications",
+					message
+				);
+
+				await _slack.SendMessageAsync(message);
+
+				notifications
+					.ForEach(ntf =>
+					{
+						ntf.DateSent = DateTime.UtcNow;
+						ntf.IsSent = true;
+					});
+				await _context.SaveChangesAsync();
+
+				return true;
+			}
+			else
+			{
+				return false;
+			}
+		}
+
+		public async Task<Notification> ScheduleNotificationAsync(string message, NotificationSeverity severity)
+		{
+			var notification = await _context
+				.Notifications
+				.AddAsync(new Notification
+				{
+					Message = message,
+					Severity = severity
+				});
+
+			await _context.SaveChangesAsync();
+
+			return notification.Entity;
+		}
+
+		/// <summary>
+		/// Verifies if notifications of given severity need to be sent considering the configuration
+		/// </summary>
+		/// <param name="severity">Severity for which to check</param>
+		/// <returns>True if it is time to send this severity and false otherwise</returns>
+		internal async Task<bool> CheckIfNeedToSendAsync(NotificationSeverity severity)
+		{
+			if (await _context.Notifications.AnyAsync(ntf => ntf.IsSent && ntf.Severity == severity))
+			{
+				var interval = new TimeSpan(
+					0,
+					0,
+					Convert.ToInt32(_config[$"ServiceManager:NotificationService:Frequencies:{severity.ToString()}"])
+				);
+
+				var lastSentDate = (await _context
+					.Notifications
+					.Where(ntf => ntf.IsSent && ntf.Severity == severity)
+					.OrderByDescending(ntf => ntf.DateSent)
+					.FirstAsync())
+					.DateSent;
+
+				return lastSentDate < DateTime.UtcNow - interval;
+			}
+
+			return true;
+		}
+
+		/// <summary>
+		/// Generate a message containing all given notifications grouped by severities
+		/// </summary>
+		/// <param name="notifications">List of notifications to include in the message</param>
+		/// <returns>The composed message</returns>
+		internal string ComposeMessage(IEnumerable<Notification> notifications) =>
+			$@"
+				Dear recipient,
+
+				Following are the notification messages from Status Site.
+
+				{
+					notifications
+						.GroupBy(ntf => ntf.Severity)
+						.Select(			
+							(value, key) => $@"Severity {(NotificationSeverity)value.Key}:{Environment.NewLine}			
+								{
+									value
+										.Select(ntf => $"[{ntf.DateCreated}] {ntf.Message}")
+										.Aggregate((self, next) => $"{self}{Environment.NewLine}{next}")
+								}
+							"
+						)
+						.Aggregate((self, next) => $"{self}{Environment.NewLine}{next}")
+				}
+
+				Always yours, 
+				Notificator
+			"
+			.Replace("\t", "");
+	}
+}
diff --git a/src/shared/Services/SlackService.cs b/src/shared/Services/SlackService.cs
new file mode 100644
index 0000000000000000000000000000000000000000..921baf299a7caaa1994c895e57f86dc631259c71
--- /dev/null
+++ b/src/shared/Services/SlackService.cs
@@ -0,0 +1,86 @@
+using System;
+using StatusMonitor.Shared.Extensions;
+using StatusMonitor.Shared.Models;
+using System.Threading.Tasks;
+using Microsoft.Extensions.Logging;
+using System.Linq;
+using Microsoft.Extensions.Configuration;
+using Microsoft.EntityFrameworkCore;
+using StatusMonitor.Shared.Models.Entities;
+using MailKit.Net.Smtp;
+using MimeKit;
+using MailKit.Security;
+using System.Security.Cryptography.X509Certificates;
+using System.Net.Security;
+using System.Net.Http;
+using System.Collections.Generic;
+using System.Text;
+using Newtonsoft.Json;
+using StatusMonitor.Shared.Services.Factories;
+
+namespace StatusMonitor.Shared.Services
+{
+	/// <summary>
+	/// Service used to send Slack messages to channels.
+	/// </summary>
+	public interface ISlackService
+	{
+		/// <summary>
+		/// Sends a slack message to the configured channel
+		/// </summary>
+		/// <param name="message">Message to send</param>
+		Task SendMessageAsync(string message);
+	}
+
+	public class SlackService : ISlackService
+	{
+		private readonly ILogger<SlackService> _logger;
+		private readonly IConfiguration _config;
+		private readonly IHttpClientFactory _factory;
+
+		public SlackService(
+			ILogger<SlackService> logger,
+			IConfiguration config,
+			IHttpClientFactory factory
+		)
+		{
+			_logger = logger;
+			_config = config;
+			_factory = factory;
+		}
+
+		public async Task SendMessageAsync(string message)
+		{
+			if (Convert.ToBoolean(_config["Secrets:Slack:Enabled"]))
+			{
+				using (var client = _factory.BuildClient())
+				{
+					try
+					{
+						var response = await client.PostAsync(
+							_config["Secrets:Slack:WebHook"],
+							new StringContent(
+								JsonConvert.SerializeObject(new { text = message }),
+								Encoding.UTF8,
+								"application/json"
+							)
+						);
+
+						response.EnsureSuccessStatusCode();
+
+						_logger.LogDebug($"Message '{message.Truncate(20)}' has been sent through Slack");
+					}
+					catch (System.Exception e)
+					{
+						_logger.LogError(LoggingEvents.Notifications.AsInt(), e, "Could not send slack message");
+					}
+
+				}
+			}
+			else
+			{
+				_logger.LogInformation(LoggingEvents.Notifications.AsInt(), $"Message '{message}' was supposed to be sent through Slack");
+			}
+		}
+	}
+}
diff --git a/src/shared/shared.csproj b/src/shared/shared.csproj
new file mode 100755
index 0000000000000000000000000000000000000000..d548ca80b24f6b8810734c3e2dbdfdfe4e29f5ea
--- /dev/null
+++ b/src/shared/shared.csproj
@@ -0,0 +1,41 @@
+<Project ToolsVersion="15.0" Sdk="Microsoft.NET.Sdk.Web">
+	<PropertyGroup>
+		<TargetFramework>netcoreapp1.1</TargetFramework>
+		<OutputType>Library</OutputType>
+	</PropertyGroup>
+	<ItemGroup>
+		<PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="1.1.0" />
+		<PackageReference Include="Npgsql" Version="3.1.9" />
+		<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="1.1.0" />
+		<PackageReference Include="Microsoft.EntityFrameworkCore" Version="1.1.0" />
+		<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL.Design" Version="1.1.0" />
+		<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="1.1.0" />
+		<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer.Design" Version="1.1.0" />
+		<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="1.1.0" />
+		<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite.Design" Version="1.1.0" />
+		<PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="1.1.0" />
+		<PackageReference Include="Microsoft.AspNetCore.Authentication.Cookies" Version="1.1.0" />
+		<PackageReference Include="Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore" Version="1.1.0" />
+		<PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="1.1.0" />
+		<PackageReference Include="Microsoft.AspNetCore.Mvc.TagHelpers" Version="1.1.0" />
+		<PackageReference Include="Microsoft.AspNetCore.Http.Abstractions" Version="1.1.0" />
+		<PackageReference Include="Microsoft.Extensions.Logging" Version="1.1.0" />
+		<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="1.1.0" />
+		<PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="1.1.0" />
+		<PackageReference Include="CommonMark.NET" Version="0.14.0" />
+		<PackageReference Include="Microsoft.AspNetCore.Diagnostics" Version="1.1.0" />
+		<PackageReference Include="Microsoft.AspNetCore.Mvc" Version="1.1.0" />
+		<PackageReference Include="Microsoft.AspNetCore.Razor.Tools" Version="1.1.0-preview4-final" />
+		<PackageReference Include="Microsoft.AspNetCore.Routing" Version="1.1.0" />
+		<PackageReference Include="Microsoft.AspNetCore.Server.IISIntegration" Version="1.1.0" />
+		<PackageReference Include="Microsoft.AspNetCore.Server.Kestrel" Version="1.1.0" />
+		<PackageReference Include="Microsoft.AspNetCore.StaticFiles" Version="1.1.0" />
+		<PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="1.1.0" />
+		<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="1.1.0" />
+		<PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="1.1.0" />
+		<PackageReference Include="Moq" Version="4.6.38-alpha" />
+		<PackageReference Include="Microsoft.AspNetCore.TestHost" Version="1.1.0" />
+		<PackageReference Include="Microsoft.AspNetCore.Cors" Version="1.1.0" />
+		<PackageReference Include="MailKit" Version="1.16.0" />		
+	</ItemGroup>
+</Project>
diff --git a/src/web/ActionFilters/ApiKeyCheck.cs b/src/web/ActionFilters/ApiKeyCheck.cs
new file mode 100644
index 0000000000000000000000000000000000000000..a9d1d220bb1301dbaf08210a1aa1fde65517546f
--- /dev/null
+++ b/src/web/ActionFilters/ApiKeyCheck.cs
@@ -0,0 +1,75 @@
+using System.Linq;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.AspNetCore.Mvc.Filters;
+using Microsoft.Extensions.Configuration;
+using Microsoft.Extensions.Logging;
+using StatusMonitor.Shared.Extensions;
+
+namespace StatusMonitor.Web.ActionFilters
+{
+	/// <summary>
+	/// Underlying class for ApiKeyCheck attribute.
+	/// Adds model error if API key is wrong or missing.
+	/// See https://docs.microsoft.com/en-us/aspnet/core/mvc/controllers/filters for documentation on Action Filters
+	/// </summary>
+	public class ApiKeyCheck : ActionFilterAttribute
+	{
+		/// <summary>
+		/// API Key provided by configuration (appsettings.json).
+		/// </summary>
+		private readonly string _apiKey = "set-by-config";
+		private readonly ILoggerFactory _factory;
+
+		public ApiKeyCheck(
+			ILoggerFactory factory,
+			IConfiguration config
+		)
+		{
+			_factory = factory;
+			_apiKey = config["Secrets:ApiKey"];
+		}
+
+		/// <summary>
+		/// This method is called by the framework.
+		/// Perform actions that need to be done before control flow reaches the actual action where attribute is put.
+		/// </summary>
+		/// <param name="context">Execution context. Most importantly, HttpContext.</param>
+		/// <param name="next">Delegate to the next stage in the pipeline. If not called, action body
+		/// will not be executed.</param>
+		public override async Task OnActionExecutionAsync(
+			ActionExecutingContext context,
+			ActionExecutionDelegate next)
+		{
+			var request = $"{context.HttpContext.Request.Method}: {context.HttpContext.Request.Path}";
+			var logger = _factory.CreateLogger($"{context.Controller.GetType().ToShortString()} | {this.GetType().ToShortString()} | {request}");
+
+			if (context.HttpContext.User.Claims.Any(c => c.Type == "UserId"))
+			{
+				logger.LogInformation(LoggingEvents.ApiCheck.AsInt(), "Api key check bypassed for admin");
+			}
+			else
+			{
+				// Get API key from the headers
+				var key = context.HttpContext.Request.Headers["apikey"];
+
+				// Add error for missing key
+				if (string.IsNullOrEmpty(key))
+				{
+					logger.LogWarning(LoggingEvents.ApiCheck.AsInt(), "Authentication failed: API key missing");
+					((Controller)context.Controller).ModelState.AddModelError("Authentication", "API key missing");
+				}
+
+				// Add error for invalid key
+				if (key != _apiKey)
+				{
+					logger.LogWarning(LoggingEvents.ApiCheck.AsInt(), "Authentication failed: wrong API key");
+					((Controller)context.Controller).ModelState.AddModelError("Authentication", "Wrong API key");
+				}
+			}
+
+			// Continue pipeline
+			await next();
+		}
+	}
+}
diff --git a/src/web/ActionFilters/LogModel.cs b/src/web/ActionFilters/LogModel.cs
new file mode 100644
index 0000000000000000000000000000000000000000..d427ff506bac615b61d23e5e8e5f34f5fb62e152
--- /dev/null
+++ b/src/web/ActionFilters/LogModel.cs
@@ -0,0 +1,37 @@
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.AspNetCore.Mvc.Filters;
+using Microsoft.Extensions.Logging;
+using StatusMonitor.Shared.Extensions;
+
+namespace StatusMonitor.Web.ActionFilters
+{
+	/// <summary>
+	/// Action filter that prints out view model
+	/// </summary>
+	public class LogModel : ActionFilterAttribute
+	{
+		private readonly ILoggerFactory _factory;
+
+		public LogModel(ILoggerFactory factory)
+		{
+			_factory = factory;
+		}
+
+		public override void OnResultExecuted(ResultExecutedContext context)
+		{
+			var request = $"{context.HttpContext.Request.Method}: {context.HttpContext.Request.Path}";
+
+			var logger = _factory.CreateLogger(
+				$"{context.Controller.GetType().ToShortString()} | {this.GetType().ToShortString()} | {request}"
+			);
+			try
+			{
+				logger.LogDebug(LoggingEvents.ModelState.AsInt(), ((Controller)context.Controller).ViewData.Model.ToString());
+			}
+			catch (System.Exception e)
+			{
+				logger.LogError(LoggingEvents.ModelState.AsInt(), e, "Model error");
+			}
+		}
+	}
+}
diff --git a/src/web/ActionFilters/ModelValidation.cs b/src/web/ActionFilters/ModelValidation.cs
new file mode 100644
index 0000000000000000000000000000000000000000..2fa44ab1ab75281d1cb40f4e5a5403e89f9824f7
--- /dev/null
+++ b/src/web/ActionFilters/ModelValidation.cs
@@ -0,0 +1,65 @@
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.AspNetCore.Mvc.Filters;
+using Microsoft.Extensions.Logging;
+using StatusMonitor.Shared.Extensions;
+
+namespace StatusMonitor.Web.ActionFilters
+{
+	/// <summary>
+	/// Underlying class for ModelValidation attribute.
+	/// Returns (short-circuits pipeline) if model state is invalid. 
+	/// </summary>
+	public class ModelValidation : ActionFilterAttribute
+	{
+		private readonly ILoggerFactory _factory;
+
+		public ModelValidation(ILoggerFactory factory)
+		{
+			_factory = factory;
+		}
+
+		/// <summary>
+		/// This method is called by the framework.
+		/// Perform actions that need to be done before control flow reaches the actual action where attribute is put.
+		/// </summary>
+		/// <param name="context">Execution context. Most importantly, HttpContext.</param>
+		/// <param name="next">Delegate to the next stage in the pipeline. If not called, action body
+		/// will not be executed.</param>
+		public override async Task OnActionExecutionAsync(
+			ActionExecutingContext context,
+			ActionExecutionDelegate next)
+		{
+			var request = $"{context.HttpContext.Request.Method}: {context.HttpContext.Request.Path}";
+
+			var logger = _factory.CreateLogger(
+				$"{context.Controller.GetType().ToShortString()} | {this.GetType().ToShortString()} | {request}"
+			);
+
+			// logger.LogDebug(LoggingEvents.ModelState.AsInt(), ((Controller)context.Controller).ViewData.Model.ToString());
+
+			if (((Controller)context.Controller).ModelState.IsValid)
+			{
+				logger.LogInformation(LoggingEvents.ModelState.AsInt(), "Model state is valid.");
+
+				// Continue pipeline
+				await next();
+			}
+			else
+			{
+				// Set result if models state has error
+				// Setting result is equivalent to shorting a circuit (returning)
+				if (((Controller)context.Controller).ModelState.ContainsKey("Authentication"))
+				{
+					logger.LogWarning(LoggingEvents.ModelState.AsInt(), "Model state invalid: authentication failed.");
+					context.Result = new UnauthorizedResult();
+				}
+				else
+				{
+					logger.LogWarning(LoggingEvents.ModelState.AsInt(), "Model state invalid: required parameter missing or malformed.");
+					context.Result = new BadRequestObjectResult("Required parameter missing or malformed.");
+				}
+			}
+		}
+	}
+}
diff --git a/src/web/ActionFilters/ReCaptcha.cs b/src/web/ActionFilters/ReCaptcha.cs
new file mode 100644
index 0000000000000000000000000000000000000000..3de5aaa67b072514e8da68fdce59ad9f377d4e17
--- /dev/null
+++ b/src/web/ActionFilters/ReCaptcha.cs
@@ -0,0 +1,89 @@
+using System.Collections.Generic;
+using System.Net.Http;
+using StatusMonitor.Web.ViewModels;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.AspNetCore.Mvc.Filters;
+using Newtonsoft.Json;
+using Microsoft.Extensions.Configuration;
+using System;
+using System.Threading.Tasks;
+using Microsoft.Extensions.Logging;
+using StatusMonitor.Shared.Extensions;
+
+namespace StatusMonitor.Web.ActionFilters
+{
+	/// <summary>
+	/// Action filter that extracts ReCaptcha challenge response and verifies it with Google
+	/// </summary>
+	public class ReCaptcha : ActionFilterAttribute
+	{
+		private readonly string CAPTCHA_URL = "https://www.google.com/recaptcha/api/siteverify";
+		private readonly string SECRET = "set-by-config";
+		private readonly IConfiguration _config;
+		private readonly ILogger _logger;
+
+		public ReCaptcha(IConfiguration config, ILogger<ReCaptcha> logger)
+		{
+			_config = config;
+			_logger = logger;
+
+			SECRET = config["Secrets:ReCaptcha:SecretKey"];
+		}
+
+		public override async Task OnActionExecutionAsync(ActionExecutingContext filterContext, ActionExecutionDelegate next)
+		{
+			// No need for localhost
+			if (Convert.ToBoolean(_config["Secrets:ReCaptcha:Enabled"]))
+			{
+				try
+				{
+					// Get recaptcha value
+					var captchaResponse = filterContext.HttpContext.Request.Form["g-recaptcha-response"];
+
+					using (var client = new HttpClient())
+					{
+						var values = new Dictionary<string, string>
+						{
+							{ "secret", SECRET },
+							{ "response", captchaResponse },
+							{ "remoteip", filterContext.HttpContext.Request.HttpContext.Connection.RemoteIpAddress.ToString() }
+						};
+
+						var content = new FormUrlEncodedContent(values);
+
+						var result = await client.PostAsync(CAPTCHA_URL, content);
+
+						if (result.IsSuccessStatusCode)
+						{
+							string responseString = await result.Content.ReadAsStringAsync();
+
+							var captchaResult = JsonConvert.DeserializeObject<CaptchaResponseViewModel>(responseString);
+
+							if (!captchaResult.Success)
+							{
+								_logger.LogWarning(LoggingEvents.ActionFilters.AsInt(), "Captcha not solved");
+
+								((Controller)filterContext.Controller).ModelState.AddModelError("ReCaptcha", "Captcha not solved");
+							}
+						}
+						else
+						{
+							_logger.LogWarning(LoggingEvents.ActionFilters.AsInt(), "Unknown captcha error");
+
+							((Controller)filterContext.Controller).ModelState.AddModelError("ReCaptcha", "Captcha error");
+						}
+					}
+
+				}
+				catch (System.Exception e)
+				{
+					_logger.LogError(LoggingEvents.ActionFilters.AsInt(), e, "Unknown error");
+
+					((Controller)filterContext.Controller).ModelState.AddModelError("ReCaptcha", "Unknown error");
+				}
+			}
+			
+			await next();
+		}
+	}
+}
diff --git a/src/web/Controllers/ApiController/ApiController.cs b/src/web/Controllers/ApiController/ApiController.cs
new file mode 100644
index 0000000000000000000000000000000000000000..8e49ac86903400fb8c128cca76deb291e3061286
--- /dev/null
+++ b/src/web/Controllers/ApiController/ApiController.cs
@@ -0,0 +1,66 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Linq.Expressions;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.Extensions.Configuration;
+using Microsoft.Extensions.Logging;
+using StatusMonitor.Shared.Models;
+using StatusMonitor.Shared.Models.Entities;
+using StatusMonitor.Shared.Services;
+using StatusMonitor.Web.Services;
+using StatusMonitor.Web.ViewModels;
+
+namespace StatusMonitor.Web.Controllers.Api
+{
+	/// <summary>
+	/// Methods that we want to expose for classes directly using API Controller
+	/// withing framework (eq. controller.RemoveMetric(...) )
+	/// </summary>
+	public interface IApiController
+	{
+		Task<IActionResult> RemoveMetric(MetricRemovalViewModel model);
+		Task<IActionResult> MetricUpdate(MetricUpdateViewModel model);
+		Task<IActionResult> CpuLoad(CpuLoadViewModel model);
+	}
+
+	[Produces("text/plain")]
+	/// <summary>
+	/// This controller is responsible for API endpoints.
+	/// The routing works as follows /{controller}/{action}, so in this case /api/cpuload will lead to 
+	/// ApiController.CpuLoad method.
+	/// Documentation for the endpoints is in Swagger YML file.
+	/// </summary>
+	public partial class ApiController : Controller, IApiController
+	{
+		// Context for data provider
+		private readonly IDataContext _context;
+		private readonly IMetricService _metricService;
+		private readonly ILogger<ApiController> _logger;
+		private readonly ILoggingService _loggingService;
+		private readonly IConfiguration _config;
+		private readonly INotificationService _notify;
+		private readonly IAuthService _auth;
+
+		public ApiController(
+			IDataContext context,
+			IMetricService metricService,
+			ILogger<ApiController> logger,
+			ILoggingService loggingService,
+			IConfiguration config,
+			INotificationService notify,
+			IAuthService auth
+		)
+		{
+			_context = context;
+			_metricService = metricService;
+			_logger = logger;
+			_loggingService = loggingService;
+			_config = config;
+			_notify = notify;
+			_auth = auth;
+		}
+	}
+}
diff --git a/src/web/Controllers/ApiController/Delete/RemoveMetric.cs b/src/web/Controllers/ApiController/Delete/RemoveMetric.cs
new file mode 100644
index 0000000000000000000000000000000000000000..b6de3fc3b69df8708940618442a5cf500a9dd05f
--- /dev/null
+++ b/src/web/Controllers/ApiController/Delete/RemoveMetric.cs
@@ -0,0 +1,38 @@
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.Extensions.Logging;
+using StatusMonitor.Web.ActionFilters;
+using StatusMonitor.Shared.Extensions;
+using StatusMonitor.Web.ViewModels;
+
+namespace StatusMonitor.Web.Controllers.Api
+{
+	public partial class ApiController
+	{
+		[HttpDelete]
+		[ServiceFilter(typeof(ApiKeyCheck))]
+		[ServiceFilter(typeof(ModelValidation))]
+		public async Task<IActionResult> RemoveMetric(MetricRemovalViewModel model)
+		{
+			var metric = await _context
+				.Metrics
+				.FirstOrDefaultAsync(mt =>
+					mt.Source == model.Source &&
+					mt.Type == model.MetricType.AsInt()
+				);
+
+			if (metric == null)
+			{
+				return NotFound();
+			}
+
+			_context.Remove(metric);
+			await _context.SaveChangesAsync();
+
+			_logger.LogWarning(LoggingEvents.Metrics.AsInt(), $"Metric {model.MetricType} of {model.Source} has been deleted.");
+
+			return Ok("Metric has successfully been removed.");
+		}
+	}
+}
diff --git a/src/web/Controllers/ApiController/Get/GetData.cs b/src/web/Controllers/ApiController/Get/GetData.cs
new file mode 100644
index 0000000000000000000000000000000000000000..7e9673db6a455949d4be748dfbf080500cb5f7bf
--- /dev/null
+++ b/src/web/Controllers/ApiController/Get/GetData.cs
@@ -0,0 +1,127 @@
+using System;
+using System.Collections.Generic;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.Extensions.Logging;
+using StatusMonitor.Web.ActionFilters;
+using StatusMonitor.Shared.Extensions;
+using StatusMonitor.Shared.Models.Entities;
+using StatusMonitor.Web.ViewModels;
+using System.Linq;
+using Microsoft.EntityFrameworkCore;
+using System.Linq.Expressions;
+
+namespace StatusMonitor.Web.Controllers.Api
+{
+	public partial class ApiController
+	{
+		[HttpGet]
+		[Produces("application/json")]
+		[ServiceFilter(typeof(ModelValidation))]
+		public async Task<IActionResult> GetData(DataRequestViewModel model)
+		{
+			// Retrieve requested metric
+			var metrics = await _metricService.GetMetricsAsync(model.MetricType, model.Source);
+
+			// Return appropriate status code if metric does not exist
+			if (metrics.Count() == 0)
+			{
+				return NotFound();
+			}
+
+			var metric = metrics.First();
+
+			if (!_auth.IsAuthenticated() && !metric.Public)
+			{
+				return Unauthorized();
+			}
+
+			// Compute the timestamp from which data is requested
+			var fromTimestamp = DateTime.UtcNow - new TimeSpan(0, 0, model.TimePeriod);
+			var data = new List<object>();
+
+			switch ((Metrics)metric.Type)
+			{
+				case Metrics.CpuLoad:
+					data = await GrabDataAsync<NumericDataPoint, Object>(
+						_context.NumericDataPoints,
+						metric,
+						fromTimestamp
+					);
+					break;
+				case Metrics.Compilation:
+					data = await GrabDataAsync<CompilationDataPoint, Object>(
+						_context.CompilationDataPoints,
+						metric,
+						fromTimestamp
+					);
+					break;
+				case Metrics.Ping:
+					data = await GrabDataAsync<PingDataPoint, Object>(
+						_context.PingDataPoints,
+						metric,
+						fromTimestamp
+					);
+					break;
+				case Metrics.Log:
+					data = await GrabDataAsync<LogDataPoint, Object>(
+						_context.LogDataPoints,
+						metric,
+						fromTimestamp
+					);
+					break;
+				case Metrics.UserAction:
+					data = await GrabDataAsync<UserActionDataPoint, Object>(
+						_context.UserActionDataPoints,
+						metric,
+						fromTimestamp
+					);
+					break;
+				default:
+					var ex = new ArgumentOutOfRangeException($"Unknown metric type: {metric.Type}");
+					_logger.LogCritical(LoggingEvents.Metrics.AsInt(), ex, "Unknown metric in GetData");
+					throw ex;
+			}
+
+			return data != null ? (IActionResult)Json(data) : NoContent();
+		}
+
+		[NonAction]
+		/// <summary>
+		/// Queries the data provider set (database table) of data points
+		/// and returns matched results or null.
+		/// </summary>
+		/// <param name="points">Reference to the data provider set (database table) with DataPoint's</param>
+		/// <param name="metric">Metric for which data points are requested</param>
+		/// <param name="includeExpression">Functional expression indicating which related property of T
+		///  needs to be loaded from the data provider</param>
+		/// <param name="fromTimestamp">Number of seconds ago from which data points are requested</param>
+		/// <returns>List of objects of data points exposed to users (see DataPoint.PublicFields())
+		/// or null if there is no data matching criteria.</returns>
+		private async Task<List<object>> GrabDataAsync<T, TProperty>(
+			DbSet<T> points,
+			Metric metric,
+			DateTime fromTimestamp,
+			Expression<Func<T, TProperty>> includeExpression = null) where T : DataPoint
+		{
+			var data = points
+				.Where(dp => dp.Metric == metric && dp.Timestamp > fromTimestamp);
+
+			if (includeExpression != null)
+			{
+				data = data.Include(includeExpression);
+			}
+
+			if (data.Count() > 0)
+			{
+				return
+					await data
+						.OrderByDescending(dp => dp.Timestamp)
+						.Select(dp => dp.PublicFields())
+						.ToListAsync();
+			}
+
+			return null;
+		}
+	}
+}
diff --git a/src/web/Controllers/ApiController/Get/GetLogMessages.cs b/src/web/Controllers/ApiController/Get/GetLogMessages.cs
new file mode 100644
index 0000000000000000000000000000000000000000..f31eadc11da7304cdbc7e5c7e631f0b14f3f4ceb
--- /dev/null
+++ b/src/web/Controllers/ApiController/Get/GetLogMessages.cs
@@ -0,0 +1,43 @@
+using System.Linq;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.EntityFrameworkCore;
+using StatusMonitor.Web.ActionFilters;
+using StatusMonitor.Web.ViewModels;
+
+namespace StatusMonitor.Web.Controllers.Api
+{
+	public partial class ApiController
+	{
+		[HttpGet]
+		[Produces("application/json")]
+		[ServiceFilter(typeof(ApiKeyCheck))]
+		[ServiceFilter(typeof(ModelValidation))]
+		public async Task<IActionResult> GetLogMessages(LogMessagesFilterViewModel model)
+		{
+			var messages = (await _loggingService
+				.GetLogMessagesAsync(
+					model.ToLogMessagesFilterModel()
+				))
+				.Select(msg => new
+				{
+					msg.AuxiliaryData,
+					msg.Id,
+					msg.Message,
+					Severity = msg.Severity.Description,
+					msg.Source,
+					msg.Timestamp,
+					msg.Category
+				});		
+
+			if (messages.Count() == 0)
+			{
+				return NoContent();
+			}
+			else
+			{
+				return Json(messages);
+			}
+		}
+	}
+}
diff --git a/src/web/Controllers/ApiController/Get/GetMetrics.cs b/src/web/Controllers/ApiController/Get/GetMetrics.cs
new file mode 100644
index 0000000000000000000000000000000000000000..1794b89cefff105f0cb7141f877e0af79f57e75a
--- /dev/null
+++ b/src/web/Controllers/ApiController/Get/GetMetrics.cs
@@ -0,0 +1,61 @@
+using System.Linq;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Mvc;
+using StatusMonitor.Web.ActionFilters;
+using StatusMonitor.Shared.Models.Entities;
+using StatusMonitor.Web.ViewModels;
+
+namespace StatusMonitor.Web.Controllers.Api
+{
+	public partial class ApiController
+	{
+		[HttpGet]
+		[Produces("application/json")]
+		[ServiceFilter(typeof(ModelValidation))]
+		public async Task<IActionResult> GetMetrics(MetricRequestViewModel model)
+		{
+			var metrics = await _metricService.GetMetricsAsync(
+				model.MetricType == 0 ? (Metrics?)null : model.MetricType,
+				model.Source
+			);
+
+			if (!_auth.IsAuthenticated())
+			{
+				metrics = metrics.Where(mt => mt.Public).ToList();
+			}
+
+			if (metrics.Count() == 0)
+			{
+				return NoContent();
+			}
+
+			return Json(
+				metrics.Select(mt => new
+				{
+					mt.Source,
+					mt.Title,
+					Type = mt.Type.ToString(),
+					AutoLabel = new
+					{
+						Title = mt.AutoLabel.Title,
+						Severity = ((AutoLabels)mt.AutoLabel.Id).ToString()
+					},
+					ManualLabel = new
+					{
+						Title = mt.ManualLabel.Title,
+						Severity = ((ManualLabels)mt.ManualLabel.Id).ToString()
+					},
+					mt.LastUpdated,
+					mt.DayAvg,
+					mt.DayMax,
+					mt.DayMin,
+					mt.HourAvg,
+					mt.HourMax,
+					mt.HourMin,
+					mt.CurrentValue
+				})
+				.ToList()
+			);
+		}
+	}
+}
diff --git a/src/web/Controllers/ApiController/Patch/MetricUpdate.cs b/src/web/Controllers/ApiController/Patch/MetricUpdate.cs
new file mode 100644
index 0000000000000000000000000000000000000000..8fc12c9f2054af31c22074863d77ff5c8c9a3ca3
--- /dev/null
+++ b/src/web/Controllers/ApiController/Patch/MetricUpdate.cs
@@ -0,0 +1,46 @@
+using System;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.EntityFrameworkCore;
+using StatusMonitor.Web.ActionFilters;
+using StatusMonitor.Shared.Extensions;
+using StatusMonitor.Shared.Models.Entities;
+using StatusMonitor.Web.ViewModels;
+using System.Linq;
+using Microsoft.Extensions.Logging;
+
+namespace StatusMonitor.Web.Controllers.Api
+{
+	public partial class ApiController
+	{
+		[HttpPatch]
+		[ServiceFilter(typeof(ApiKeyCheck))]
+		[ServiceFilter(typeof(ModelValidation))]
+		public async Task<IActionResult> MetricUpdate(MetricUpdateViewModel model)
+		{
+			if (await _context.Metrics.AnyAsync(mt => mt.Source == model.Source && mt.Type == model.MetricType.AsInt()))
+			{
+				if (await _context.ManualLabels.AnyAsync(lbl => lbl.Id == model.ManualLabelId))
+				{
+					var manualLabel = await _context.ManualLabels.FirstAsync(lbl => lbl.Id == model.ManualLabelId);
+					var metric = await _context.Metrics.FirstAsync(mt => mt.Source == model.Source && mt.Type == model.MetricType.AsInt());
+
+					metric.ManualLabel = manualLabel;
+					metric.Public = model.Public;
+
+					await _context.SaveChangesAsync();
+
+					return Ok("Metric manual label has been updated.");
+				}
+				else
+				{
+					return NotFound($"Manual label with id {model.ManualLabelId} is not found");
+				}
+			}
+			else
+			{
+				return NotFound($"Metric of type {model.MetricType} and source {model.Source} is not found");
+			}
+		}
+	}
+}
diff --git a/src/web/Controllers/ApiController/Post/Compilation.cs b/src/web/Controllers/ApiController/Post/Compilation.cs
new file mode 100644
index 0000000000000000000000000000000000000000..e0f776c35e0336629dce6aea77bb0a48249ba4d3
--- /dev/null
+++ b/src/web/Controllers/ApiController/Post/Compilation.cs
@@ -0,0 +1,47 @@
+using System;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.EntityFrameworkCore;
+using StatusMonitor.Web.ActionFilters;
+using StatusMonitor.Shared.Extensions;
+using StatusMonitor.Shared.Models.Entities;
+using StatusMonitor.Web.ViewModels;
+
+namespace StatusMonitor.Web.Controllers.Api
+{
+	public partial class ApiController
+	{
+		[HttpPost]
+		[ServiceFilter(typeof(ApiKeyCheck))]
+		[ServiceFilter(typeof(ModelValidation))]
+		public async Task<IActionResult> Compilation(CompilationViewModel model)
+		{
+			// Retrieve requested metric
+			var metric = await _metricService.GetOrCreateMetricAsync(Metrics.Compilation, model.Source);
+
+			// Retrieve requested user action
+			var compilationStage =
+				await _context
+				.CompilationStages
+				.FirstAsync(act => act.Id == model.CompilationStage.AsInt());
+
+			// Record data
+			await _context
+				.CompilationDataPoints
+				.AddAsync(
+					new CompilationDataPoint
+					{
+						SourceSize = model.SourceSize,
+						Stage = compilationStage,
+						CompileTime = new TimeSpan(0, 0, model.CompileTime),
+						Metric = metric
+					}
+				);
+
+			// Submit changes to data provider
+			await _context.SaveChangesAsync();
+
+			return Ok("Data point has been recorded.");
+		}
+	}
+}
diff --git a/src/web/Controllers/ApiController/Post/CpuLoad.cs b/src/web/Controllers/ApiController/Post/CpuLoad.cs
new file mode 100644
index 0000000000000000000000000000000000000000..970641a9a56f54ffba36c7280d42d618a37b1f1c
--- /dev/null
+++ b/src/web/Controllers/ApiController/Post/CpuLoad.cs
@@ -0,0 +1,36 @@
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Mvc;
+using StatusMonitor.Web.ActionFilters;
+using StatusMonitor.Shared.Models.Entities;
+using StatusMonitor.Web.ViewModels;
+
+namespace StatusMonitor.Web.Controllers.Api
+{
+	public partial class ApiController
+	{
+		[HttpPost]
+		[ServiceFilter(typeof(ApiKeyCheck))]
+		[ServiceFilter(typeof(ModelValidation))]
+		public async Task<IActionResult> CpuLoad(CpuLoadViewModel model)
+		{
+			// Retrieve requested metric
+			var metric = await _metricService.GetOrCreateMetricAsync(Metrics.CpuLoad, model.Source);
+
+			// Record data
+			await _context
+				.NumericDataPoints
+				.AddAsync(
+					new NumericDataPoint
+					{
+						Value = model.Value,
+						Metric = metric
+					}
+				);
+
+			// Submit changes to data provider
+			await _context.SaveChangesAsync();
+
+			return Ok("Data point has been recorded.");
+		}
+	}
+}
diff --git a/src/web/Controllers/ApiController/Post/LogData.cs b/src/web/Controllers/ApiController/Post/LogData.cs
new file mode 100644
index 0000000000000000000000000000000000000000..d713d6a97159f5652967bfef11edfbea5a7c205b
--- /dev/null
+++ b/src/web/Controllers/ApiController/Post/LogData.cs
@@ -0,0 +1,45 @@
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.EntityFrameworkCore;
+using StatusMonitor.Web.ActionFilters;
+using StatusMonitor.Shared.Extensions;
+using StatusMonitor.Shared.Models.Entities;
+using StatusMonitor.Web.ViewModels;
+
+namespace StatusMonitor.Web.Controllers.Api
+{
+	public partial class ApiController
+	{
+		[HttpPost]
+		[ServiceFilter(typeof(ApiKeyCheck))]
+		[ServiceFilter(typeof(ModelValidation))]
+		public async Task<IActionResult> LogData(LogDataViewModel model)
+		{
+			// Retrieve requested metric
+			var metric = await _metricService.GetOrCreateMetricAsync(Metrics.Log, model.Source);
+
+			// Retrieve requested user action
+			var logSeverity =
+				await _context
+					.LogEntrySeverities
+					.FirstAsync(act => act.Id == model.MessageSeverity.AsInt());
+
+			// Record data
+			await _context
+				.LogDataPoints
+				.AddAsync(
+					new LogDataPoint
+					{
+						Severity = logSeverity,
+						Count = model.Count,
+						Metric = metric
+					}
+				);
+
+			// Submit changes to data provider
+			await _context.SaveChangesAsync();
+
+			return Ok("Data point has been recorded.");
+		}
+	}
+}
diff --git a/src/web/Controllers/ApiController/Post/LogMessage.cs b/src/web/Controllers/ApiController/Post/LogMessage.cs
new file mode 100644
index 0000000000000000000000000000000000000000..1c6815fb16cbe1c41104bec299b4a3fbec4ddb6c
--- /dev/null
+++ b/src/web/Controllers/ApiController/Post/LogMessage.cs
@@ -0,0 +1,159 @@
+using System;
+using System.Collections.Generic;
+using System.Net;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.Extensions.Logging;
+using StatusMonitor.Shared.Extensions;
+using StatusMonitor.Shared.Models.Entities;
+using StatusMonitor.Web.ActionFilters;
+using StatusMonitor.Web.ViewModels;
+
+namespace StatusMonitor.Web.Controllers.Api
+{
+	public partial class ApiController
+	{
+		private readonly object _logLocker = new object();
+		static private readonly Dictionary<SourceCategory, Counter> _guard =
+			new Dictionary<SourceCategory, Counter>(new SourceCategoryEqualityComparer());
+
+		[HttpPost]
+		[ServiceFilter(typeof(ApiKeyCheck))]
+		[ServiceFilter(typeof(ModelValidation))]
+		public async Task<IActionResult> LogMessage(LogMessageViewModel model)
+		{
+			if (UpdateCounter(model.Source, model.Category))
+			{
+				await _loggingService.RecordLogMessageAsync(
+					model.Message,
+					model.AuxiliaryData,
+					model.Source,
+					model.Category,
+					model.MessageSeverity
+				);
+
+				if (model.MessageSeverity >= _config["Logging:LogSeverityReported"].ToEnum<LogEntrySeverities>())
+				{
+					await _notify.ScheduleNotificationAsync(
+						$"Log message of severity {model.MessageSeverity} has been received from {model.Source}",
+						NotificationSeverity.High
+					);
+				}
+
+				return Ok("Log message has been recorded.");
+			}
+			else
+			{
+				return StatusCode(
+					429,
+					$"Too may requests. Limit to {_config["Guard:Logging:Requests"]} per {_config["Guard:Logging:PerSeconds"]} seconds."
+				);
+			}
+		}
+
+		[NonAction]
+		/// <summary>
+		/// Increments (or sets) counter for given source and category in thread-safe manner
+		/// </summary>
+		/// <param name="source">Source part of key</param>
+		/// <param name="category">Category part of key</param>
+		/// <returns>True if request may pass, or false if request needs to be rejected</returns>
+		private bool UpdateCounter(string source, int category)
+		{
+			lock (_logLocker)
+			{
+				var key = new SourceCategory
+				{
+					Source = source,
+					Category = category
+				};
+
+				var intervalAgo = DateTime.UtcNow - new TimeSpan(0, 0, Convert.ToInt32(_config["Guard:Logging:PerSeconds"]));
+
+				if (_guard.ContainsKey(key))
+				{
+					var value = _guard[key];
+
+					if (value.Timestamp < intervalAgo)
+					{
+						_guard[key] = new Counter();
+						return true;
+					}
+
+					_guard[key].Count++;
+
+					if (value.Count <= Convert.ToInt32(_config["Guard:Logging:Requests"]))
+					{
+						return true;
+					}
+					else
+					{
+						if (!_guard[key].Notified)
+						{
+							_guard[key].Notified = true;
+
+							var errorMessage = $"{source} is SPAMing logs with category {category}";
+
+							_notify.ScheduleNotificationAsync(errorMessage, NotificationSeverity.High).Wait();
+							_logger.LogWarning(LoggingEvents.GenericError.AsInt(), errorMessage);
+						}
+
+						return false;
+					}
+				}
+				else
+				{
+					_guard.Add(key, new Counter());
+					return true;
+				}
+			}
+		}
+	}
+
+	/// <summary>
+	/// Helper model for value of guard dictionary
+	/// </summary>
+	internal class Counter
+	{
+		public int Count { get; set; } = 1;
+		public DateTime Timestamp { get; set; } = DateTime.UtcNow;
+		public bool Notified { get; set; } = false;
+	}
+
+	/// <summary>
+	/// Helper model for key of guard dictionary
+	/// </summary>
+	internal class SourceCategory
+	{
+		public string Source { get; set; }
+		public int Category { get; set; }
+	}
+
+	/// <summary>
+	/// Implementation of IEqualityComparer for SourceCategory so that it may be used as key in guard dictionary
+	/// </summary>
+	class SourceCategoryEqualityComparer : IEqualityComparer<SourceCategory>
+	{
+		public bool Equals(SourceCategory sc1, SourceCategory sc2)
+		{
+			if (sc1 == null && sc1 == null)
+			{
+				return true;
+			}
+
+			if (sc2 == null | sc2 == null)
+			{
+				return false;
+			}
+
+			return sc1.Category.Equals(sc2.Category) && sc1.Source.Equals(sc2.Source);
+		}
+
+		public int GetHashCode(SourceCategory sc)
+		{
+			return
+				sc.Source.GetHashCode() * 2 +
+				sc.Category.GetHashCode() * 3;
+		}
+	}
+}
diff --git a/src/web/Controllers/ApiController/Post/UserAction.cs b/src/web/Controllers/ApiController/Post/UserAction.cs
new file mode 100644
index 0000000000000000000000000000000000000000..17fa0c27b9169d145b008a36889d20427e9ec8eb
--- /dev/null
+++ b/src/web/Controllers/ApiController/Post/UserAction.cs
@@ -0,0 +1,42 @@
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.EntityFrameworkCore;
+using StatusMonitor.Web.ActionFilters;
+using StatusMonitor.Shared.Extensions;
+using StatusMonitor.Shared.Models.Entities;
+using StatusMonitor.Web.ViewModels;
+
+namespace StatusMonitor.Web.Controllers.Api
+{
+	public partial class ApiController
+	{
+		[HttpPost]
+		[ServiceFilter(typeof(ApiKeyCheck))]
+		[ServiceFilter(typeof(ModelValidation))]
+		public async Task<IActionResult> UserAction(UserActionViewModel model)
+		{
+			// Retrieve requested metric
+			var metric = await _metricService.GetOrCreateMetricAsync(Metrics.UserAction, model.Source);
+
+			// Retrieve requested user action
+			var userAction = await _context.UserActions.FirstAsync(act => act.Id == model.UserAction.AsInt());
+
+			// Record data
+			await _context
+				.UserActionDataPoints
+				.AddAsync(
+					new UserActionDataPoint
+					{
+						Count = model.Count,
+						Action = userAction,
+						Metric = metric
+					}
+				);
+
+			// Submit changes to data provider
+			await _context.SaveChangesAsync();
+
+			return Ok("Data point has been recorded.");
+		}
+	}
+}
diff --git a/src/web/Controllers/View/AccountController.cs b/src/web/Controllers/View/AccountController.cs
new file mode 100644
index 0000000000000000000000000000000000000000..f6cd84cc8fe6d8d87e6e02a04a5f24dc4d462d16
--- /dev/null
+++ b/src/web/Controllers/View/AccountController.cs
@@ -0,0 +1,99 @@
+using System.Collections.Generic;
+using System.Linq;
+using System.Security.Claims;
+using StatusMonitor.Web.ActionFilters;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.Extensions.Configuration;
+using StatusMonitor.Web.ViewModels;
+using System.Threading.Tasks;
+using StatusMonitor.Web.Services;
+
+namespace StatusMonitor.Web.Controllers.View
+{
+	/// <summary>
+	/// Controller responsible for authentication endpoints - /account
+	/// </summary>
+	public class AccountController : Controller
+	{
+		private readonly IConfiguration _config;
+		private readonly IAuthService _auth;
+
+		public AccountController(
+			IConfiguration config,
+			IAuthService auth
+		)
+		{
+			_config = config;
+			_auth = auth;
+		}
+
+		public IActionResult Login()
+		{
+			return View(new ReturnUrlViewModel
+			{
+				ReturnUrl = Request.Query["returnurl"].FirstOrDefault() ?? "",
+				IsError = false
+			});
+		}
+
+		public async Task<IActionResult> Logout()
+		{
+			await _auth.SignOutAsync();
+
+			TempData["MessageSeverity"] = "info";
+			TempData["MessageContent"] = $"You have logged out.";
+
+			if (string.IsNullOrEmpty(Request.Query["returnurl"]))
+			{
+				return RedirectToAction("Index", "Home");
+			}
+			else
+			{
+				return Redirect(Request.Query["returnurl"]);
+			}
+		}
+
+		[ServiceFilter(typeof(ReCaptcha))]
+		public async Task<IActionResult> Authenticate()
+		{
+			if (!ModelState.IsValid)
+			{
+				return View(
+					"Login",
+					new ReturnUrlViewModel
+					{
+						ReturnUrl = Request.Query["returnurl"],
+						IsError = true,
+						Error = "Wrong reCAPTCHA"
+					}
+				);
+			}
+
+			if (Request.Form["password"] == _config["Secrets:AdminPassword"])
+			{
+				await _auth.SignInAsync();
+
+				TempData["MessageSeverity"] = "info";
+				TempData["MessageContent"] = $"You have logged in.";
+
+				if (string.IsNullOrEmpty(Request.Query["returnurl"]))
+				{
+					return RedirectToAction("Index", "Home");
+				}
+				else
+				{
+					return Redirect(Request.Query["returnurl"]);
+				}
+			}
+			else
+			{
+				return View("Login", new ReturnUrlViewModel
+				{
+					ReturnUrl = Request.Query["returnurl"],
+					IsError = true,
+					Error = "Wrong password"
+				});
+			}
+		}
+	}
+}
diff --git a/src/web/Controllers/View/AdminController.cs b/src/web/Controllers/View/AdminController.cs
new file mode 100644
index 0000000000000000000000000000000000000000..a5bf362a3f48b55b50f2ba099c8663d5f86be44d
--- /dev/null
+++ b/src/web/Controllers/View/AdminController.cs
@@ -0,0 +1,170 @@
+using System.Collections.Generic;
+using System.Linq;
+using System.Security.Claims;
+using StatusMonitor.Web.ActionFilters;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.Extensions.Configuration;
+using StatusMonitor.Web.ViewModels;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Authorization;
+using StatusMonitor.Shared.Services;
+using Microsoft.Extensions.Logging;
+using StatusMonitor.Shared.Models;
+using System;
+using Microsoft.Extensions.DependencyInjection;
+using StatusMonitor.Web.Controllers.Api;
+using StatusMonitor.Shared.Extensions;
+using StatusMonitor.Shared.Models.Entities;
+using Microsoft.AspNetCore.Mvc.Routing;
+using Microsoft.AspNetCore.Mvc.Infrastructure;
+using Microsoft.EntityFrameworkCore;
+using StatusMonitor.Web.Services;
+
+namespace StatusMonitor.Web.Controllers.View
+{
+	[Authorize]
+	/// <summary>
+	/// Controller responsible for admin endpoints - /admin
+	/// </summary>
+	public class AdminController : Controller
+	{
+		private readonly ILoggingService _loggingService;
+		private readonly ILogger<AdminController> _logger;
+		private readonly IMetricService _metricService;
+		private readonly IServiceProvider _provider;
+		private readonly ICleanService _cleanService;
+
+
+		public AdminController(
+			ILoggingService loggingService,
+			ILogger<AdminController> logger,
+			IMetricService metricService,
+			IServiceProvider provider,
+			ICleanService cleanService
+		)
+		{
+			_metricService = metricService;
+			_logger = logger;
+			_loggingService = loggingService;
+			_provider = provider;
+			_cleanService = cleanService;
+		}
+
+		public async Task<IActionResult> Index()
+		{
+			ViewBag.Metrics = await _metricService
+				.GetMetricsAsync();
+
+			return View();
+		}
+
+		[HttpPost]
+		[ServiceFilter(typeof(ModelValidation))]
+		public async Task<IActionResult> DeleteMetric(MetricRemovalViewModel model)
+		{
+			var response = await _provider.GetRequiredService<IApiController>().RemoveMetric(model);
+			if (response is OkObjectResult)
+			{
+				TempData["MessageSeverity"] = "success";
+				TempData["MessageContent"] = $"Metric {model.Type} from {model.Source} and its data have been deleted.";
+
+				return RedirectToAction("Index", "Home");
+			}
+			else
+			{
+				return response;
+			}
+		}
+
+		public IActionResult Metric([FromQuery] string metric)
+		{
+			if (metric == null)
+			{
+				return BadRequest("Metric is not specified");
+			}
+
+			return RedirectToAction("Metric", "Home", new { Type = metric.Split('@')[0], Source = metric.Split('@')[1] });
+		}
+
+		[HttpPost]
+		public async Task<IActionResult> Clean(int? maxAge)
+		{
+			if (!maxAge.HasValue)
+			{
+				return BadRequest("Max age is not specified");
+			}
+
+			await _cleanService.CleanDataPointsAsync(new TimeSpan(0, maxAge.Value, 0));
+
+			TempData["MessageSeverity"] = "success";
+			TempData["MessageContent"] = $"Data older than {maxAge} minutes has been cleaned.";
+
+			return RedirectToAction("Index");
+		}
+
+		[HttpPost]
+		[ServiceFilter(typeof(ModelValidation))]
+		public async Task<IActionResult> UpdateMetric(MetricUpdateViewModel model)
+		{
+			var response = await _provider.GetRequiredService<IApiController>().MetricUpdate(model);
+			if (response is OkObjectResult)
+			{
+				TempData["MessageSeverity"] = "success";
+				TempData["MessageContent"] = $"Metric has been updated.";
+
+				return RedirectToAction("Metric", "Home", new { type = model.Type.ToString(), source = model.Source });
+			}
+			else
+			{
+				return response;
+			}
+		}
+
+		public async Task<IActionResult> Log(int? id)
+		{
+			if (id.HasValue)
+			{
+				var selectedMessage = await _loggingService.GetMessageByIdAsync(id.Value);
+
+				if (selectedMessage == null)
+				{
+					return NotFound($"Log Entry with ID {id.Value} does not exist.");
+				}
+
+				return View(selectedMessage);
+			}
+			else
+			{
+				return RedirectToAction("Logs");
+			}
+		}
+
+		public async Task<IActionResult> Logs(LogMessagesFilterViewModel model)
+		{
+			if (model.Id.HasValue)
+			{
+				return RedirectToActionPermanent("Log", new { id = model.Id.Value });
+			}
+
+			try
+			{
+				ViewBag.Messages = await _loggingService.GetLogMessagesAsync(model.ToLogMessagesFilterModel());
+			}
+			catch (System.Exception e)
+			{
+				_logger.LogWarning(LoggingEvents.HomeController.AsInt(), e, "Bad filter for logs");
+				return BadRequest("Bad filter parameters");
+			}
+
+			ViewBag.FilterData = await _loggingService.GetAvailableFilterDataAsync();
+
+			if (ViewBag.Messages.Count == 0)
+			{
+				TempData["MessageSeverity"] = "warning";
+				TempData["MessageContent"] = $"No log messages found in the system.";
+			}
+
+			return View(model);
+		}
+	}
+}
diff --git a/src/web/Controllers/View/ErrorController.cs b/src/web/Controllers/View/ErrorController.cs
new file mode 100644
index 0000000000000000000000000000000000000000..7b6c60898712635137af4dc537fb7081f1888fb5
--- /dev/null
+++ b/src/web/Controllers/View/ErrorController.cs
@@ -0,0 +1,35 @@
+using StatusMonitor.Web.ViewModels;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.Extensions.Logging;
+using StatusMonitor.Shared.Extensions;
+
+namespace StatusMonitor.Web.Controllers.View
+{
+	/// <summary>
+	/// Controller responsible for error endpoints - /error
+	/// </summary>
+	public class ErrorController : Controller
+	{
+		private readonly ILogger<ErrorController> _logger;
+
+		public ErrorController(ILogger<ErrorController> logger)
+		{
+			_logger = logger;
+		}
+
+		/// <summary>
+		/// Show error page for specific code
+		/// </summary>
+		/// <param name="code">HTTP error code</param>
+		[Route("/error/{code?}")]
+		public IActionResult Error(int? code)
+		{
+			_logger.LogWarning(
+				LoggingEvents.GenericError.AsInt(), 
+				$"Error page is invoked with code {(code.HasValue ? code.Value : 404)}"
+			);
+
+			return View(new ErrorViewModel(code.HasValue ? code.Value : 404));
+		}
+	}
+}
diff --git a/src/web/Controllers/View/HomeController.cs b/src/web/Controllers/View/HomeController.cs
new file mode 100755
index 0000000000000000000000000000000000000000..ebdd8030a1b3446843ae37a22b398ec1850ae173
--- /dev/null
+++ b/src/web/Controllers/View/HomeController.cs
@@ -0,0 +1,93 @@
+using System.Linq;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Mvc;
+using StatusMonitor.Web.ActionFilters;
+using StatusMonitor.Shared.Extensions;
+using StatusMonitor.Shared.Models.Entities;
+using StatusMonitor.Shared.Services;
+using Microsoft.AspNetCore.Authorization;
+using StatusMonitor.Web.ViewModels;
+using System.Collections.Generic;
+using System;
+using Microsoft.Extensions.Logging;
+using StatusMonitor.Shared.Models;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.Extensions.DependencyInjection;
+using StatusMonitor.Web.Controllers.Api;
+using System.Net;
+using StatusMonitor.Web.Services;
+
+namespace StatusMonitor.Web.Controllers.View
+{
+	[ServiceFilter(typeof(ModelValidation))]
+	/// <summary>
+	/// Controller responsible for home endpoints - /home
+	/// </summary>
+	public class HomeController : Controller
+	{
+		private readonly IMetricService _metricService;
+		private readonly IDataContext _context;
+		private readonly IAuthService _auth;
+
+		public HomeController(
+			IMetricService metricService,
+			IDataContext context,
+			IAuthService auth
+		)
+		{
+			_metricService = metricService;
+			_context = context;
+			_auth = auth;
+		}
+
+		public async Task<IActionResult> Index()
+		{
+			var model = await _metricService.GetMetricsAsync(Metrics.CpuLoad);
+
+			if (!_auth.IsAuthenticated())
+			{
+				model = model.Where(mt => mt.Public).ToList();
+			}
+
+			if (model.Count() == 0)
+			{
+				TempData["MessageSeverity"] = "warning";
+				TempData["MessageContent"] = $"No public metrics found in the system.";
+			}
+
+			return View(model);
+		}
+
+		[Route("Home/Metric/{type}/{source}")]
+		public async Task<IActionResult> Metric(string type, string source)
+		{
+			Metrics metricType;
+
+			try
+			{
+				metricType = type.ToEnum<Metrics>();
+			}
+			catch (System.Exception)
+			{
+				return BadRequest("Bad type. Needs to be one of Metrics type.");
+			}
+
+			var model = await _metricService.GetMetricsAsync(metricType, source);
+
+			if (model.Count() == 0)
+			{
+				return NotFound();
+			}
+
+			if (!_auth.IsAuthenticated() && !model.First().Public)
+			{
+				return Unauthorized();
+			}
+
+			ViewBag.ManualLabels = await _context.ManualLabels.ToListAsync();
+
+			return View(model.First());
+		}
+
+	}
+}
diff --git a/src/web/Dockerfile b/src/web/Dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..5ae622f47b0b0215bb2a7228cf8df04611b3aba5
--- /dev/null
+++ b/src/web/Dockerfile
@@ -0,0 +1,12 @@
+FROM microsoft/dotnet:1.1.1-runtime
+
+# Create directory for the app source code
+WORKDIR /srv
+
+# Copy the binary
+COPY bin/release/netcoreapp1.1/publish/ /srv
+
+# Expose the port and start the app
+EXPOSE 5555
+
+ENTRYPOINT /bin/bash -c "dotnet web.dll"
diff --git a/src/web/Program.cs b/src/web/Program.cs
new file mode 100755
index 0000000000000000000000000000000000000000..a3f00536a062ec9555ad6e5145afe76f11be9aee
--- /dev/null
+++ b/src/web/Program.cs
@@ -0,0 +1,68 @@
+using System;
+using System.IO;
+using System.Threading;
+using Microsoft.AspNetCore.Hosting;
+using StatusMonitor.Shared.Extensions;
+
+namespace StatusMonitor.Web
+{
+	/// <summary>
+	/// This class contains the entry point for the application.
+	/// </summary>
+	public class Program
+	{
+		/// <summary>
+		/// The entry point.
+		/// This function is responsible for starting up the server object.
+		/// The server will try to start a number of times until it succeeds.
+		/// For example, it may not connect to the database from the first attempt, because of network issues, or
+		/// the database may not be ready at the time of application start.
+		/// </summary>
+		/// <param name="args">Arguments passed to the application through the command line. At the moment not used. </param>
+		public static int Main(string[] args)
+		{
+			int port = 5555;
+            if (args.Length != 0 && (!Int32.TryParse(args[0], out port) || port < 1024 || port > 65534))
+			{
+				ColoredConsole.WriteLine("Usage: dotnet web.dll [port | number 1024-65534]", ConsoleColor.Red);
+				return 1;
+			}
+
+			/// <summary>
+			/// A number of times app tries to connect to the database before quiting
+			/// </summary>
+			var _connectionRetryNumber = 6;
+
+			/// <summary>
+			/// A number of seconds before trying to connect to db again
+			/// </summary>
+			var _connectionRetryInterval = 10;
+
+			for (int i = 0; i < _connectionRetryNumber; i++)
+			{
+				try
+				{
+					var host = new WebHostBuilder()
+						.UseKestrel()
+						.UseContentRoot(Directory.GetCurrentDirectory())
+						.UseIISIntegration()
+						.UseStartup<Startup>()
+						.UseUrls($"http://*:{port}")
+						.Build(); // Connection to the database happens in .Build()
+
+					host.Run();
+
+					return 0;
+				}
+				catch (System.Net.Sockets.SocketException)
+				{
+					Console.WriteLine("Failed to connect to DB, retrying...");
+					Thread.Sleep(_connectionRetryInterval * 1000);
+				}
+			}
+
+			ColoredConsole.WriteLine($"Could not connect to DB after {_connectionRetryNumber} times.", ConsoleColor.Red);
+			return 1;
+		}
+	}
+}
diff --git a/src/web/Services/AuthService.cs b/src/web/Services/AuthService.cs
new file mode 100644
index 0000000000000000000000000000000000000000..d13c670bac7633e9648ca0a5457fca9a6443f7ea
--- /dev/null
+++ b/src/web/Services/AuthService.cs
@@ -0,0 +1,74 @@
+using System;
+using System.Collections.Generic;
+using System.Security.Claims;
+using System.Security.Cryptography;
+using System.Text;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Http;
+using Microsoft.Extensions.Configuration;
+
+namespace StatusMonitor.Web.Services
+{
+	/// <summary>
+	/// Service responsible for performing and verifying user authentication
+	/// through MS Identity mechanism using Cookie based auth.
+	/// </summary>
+	public interface IAuthService
+	{
+		/// <summary>
+		/// Verifies if the user is authenticated
+		/// </summary>
+		/// <returns>Tru if the user is authenticated, false otherwise</returns>
+		bool IsAuthenticated();
+
+		/// <summary>
+		/// Signs in the user
+		/// </summary>
+		Task SignInAsync();
+
+		/// <summary>
+		/// Signs out the user
+		/// </summary>
+		Task SignOutAsync();
+	}
+
+	public class AuthService : IAuthService
+	{
+		private readonly IHttpContextAccessor _http;
+		private readonly IConfiguration _config;
+
+		public AuthService(
+			IHttpContextAccessor http,
+			IConfiguration config
+		)
+		{
+			_http = http;
+			_config = config;
+		}
+
+		public bool IsAuthenticated()
+		{
+			return 
+				_http.HttpContext.User.Identity.IsAuthenticated ||
+				_http.HttpContext.Request.Headers["apikey"] ==  _config["Secrets:ApiKey"];
+		}
+
+		public async Task SignInAsync()
+		{
+			var principal = new ClaimsPrincipal(
+					new ClaimsIdentity(
+						new List<Claim> {
+							new Claim("UserId", "Admin"),
+						}, "Admin"
+					)
+				);
+				
+			await _http.HttpContext.Authentication.SignInAsync("CookieMiddlewareInstance", principal);
+		}
+
+		public async Task SignOutAsync()
+		{
+			await _http.HttpContext.Authentication.SignOutAsync("CookieMiddlewareInstance");
+		}
+	}
+}
diff --git a/src/web/Startup.cs b/src/web/Startup.cs
new file mode 100755
index 0000000000000000000000000000000000000000..082ffd576e23c2dd8b396f71f1478dcafde27347
--- /dev/null
+++ b/src/web/Startup.cs
@@ -0,0 +1,213 @@
+using System;
+using Microsoft.AspNetCore.Builder;
+using Microsoft.AspNetCore.Hosting;
+using Microsoft.Extensions.Configuration;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Logging;
+using Newtonsoft.Json.Serialization;
+using StatusMonitor.Shared.Services;
+using StatusMonitor.Shared.Models;
+using StatusMonitor.Shared.Extensions;
+using StatusMonitor.Web.ActionFilters;
+using System.Linq;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Authentication.Cookies;
+using System.Threading.Tasks;
+using System.Net;
+using StatusMonitor.Shared.Models.Entities;
+using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
+using StatusMonitor.Web.Controllers.Api;
+using StatusMonitor.Web.Controllers.View;
+using Microsoft.AspNetCore.Mvc.Infrastructure;
+using StatusMonitor.Web.Services;
+using StatusMonitor.Web.ViewModels;
+
+namespace StatusMonitor.Web
+{
+	/// <summary>
+	/// Framework class used to configure the application.
+	/// </summary>
+	public class Startup
+	{
+		/// <summary>
+		/// This method gets called by the runtime. Used to build a global configuration object.
+		/// </summary>
+		/// <param name="env"></param>
+		public Startup(IHostingEnvironment env)
+		{
+			var builder = new ConfigurationBuilder()
+				.AddJsonFile("appsettings.json", optional: false) // read defaults first
+				.AddJsonFile(
+					$"appsettings.{env.EnvironmentName.ToLower()}.json",
+					optional: env.IsStaging()
+				) // override with specific settings file
+				.AddJsonFile("version.json", optional: true)
+				.AddEnvironmentVariables();
+			Configuration = builder.Build();
+
+			CurrentEnvironment = env;
+		}
+
+		/// <summary>
+		/// Global configuration object.
+		/// Gets built by Startup method.
+		/// </summary>
+		public IConfigurationRoot Configuration { get; }
+
+		private IHostingEnvironment CurrentEnvironment { get; set; }
+
+
+		/// <summary>
+		/// This method gets called by the runtime. Used to add services to the container.
+		/// </summary>
+		public void ConfigureServices(IServiceCollection services)
+		{
+			services.RegisterSharedServices(CurrentEnvironment, Configuration);
+
+			services.AddIdentity<User, IdentityRole>();
+
+			services.Configure<IdentityOptions>(options =>
+			{
+				// Cookie settings
+				options.Cookies.ApplicationCookie.AuthenticationScheme = "CookieMiddlewareInstance";
+				options.Cookies.ApplicationCookie.LoginPath = new PathString("/account/login");
+				options.Cookies.ApplicationCookie.AccessDeniedPath = new PathString("/account/login");
+				options.Cookies.ApplicationCookie.AutomaticAuthenticate = true;
+				options.Cookies.ApplicationCookie.AutomaticChallenge = true;
+				options.Cookies.ApplicationCookie.CookieName = "AUTHCOOKIE";
+				options.Cookies.ApplicationCookie.ExpireTimeSpan = new TimeSpan(1, 0, 0);
+				options.Cookies.ApplicationCookie.CookieHttpOnly = true;
+
+				var cookie = options.Cookies.ApplicationCookie;
+				var events = cookie.Events;
+				cookie.Events = new CookieAuthenticationEvents
+				{
+					OnRedirectToAccessDenied = context =>
+					{
+						if (context.Request.Path.StartsWithSegments("/api"))
+						{
+							context.Response.StatusCode = (int)HttpStatusCode.Forbidden;
+							return Task.CompletedTask;
+						}
+						return events.RedirectToAccessDenied(context);
+					},
+					OnRedirectToLogin = context =>
+					{
+						// if (context.Request.Path.StartsWithSegments("/api"))
+Console.WriteLine($"Path: {context.Request.Path.Value}"); // TODO: remove
+						if (context.Request.Path.Value.Contains("/api"))
+						{
+Console.WriteLine($"Trapped path: {context.Request.Path.Value}"); // TODO: remove
+							context.Response.StatusCode = (int)HttpStatusCode.Unauthorized;
+							return Task.CompletedTask;
+						}
+						return events.RedirectToLogin(context);
+					}
+				};
+			});
+
+			services.AddMemoryCache();
+			services.AddSession();
+
+			// Add framework services.
+			services.AddMvc().AddJsonOptions(opt =>
+			{
+				var resolver = opt.SerializerSettings.ContractResolver;
+				if (resolver != null)
+				{
+					var res = resolver as DefaultContractResolver;
+					res.NamingStrategy = null;  // this removes the camelcasing
+				}
+			});
+
+			// lowercase all generated url within the app
+			services.AddRouting(options => { options.LowercaseUrls = true; });
+
+			// Add Cross Origin Security service
+			services.AddCors();
+
+			// Add application services.
+
+			services.AddTransient<IApiController, ApiController>();
+			services.AddTransient<HomeController>();
+			services.AddTransient<AccountController>();
+
+			services.AddTransient<IAuthService, AuthService>();
+
+			services.AddTransient<ModelValidation>();
+			services.AddTransient<ApiKeyCheck>();
+			services.AddTransient<LogModel>();
+			services.AddTransient<ReCaptcha>();
+		}
+
+		/// <summary>
+		/// This method gets called by the runtime. Used to configure the HTTP request pipeline.
+		/// </summary>
+		public void Configure(
+			IApplicationBuilder app,
+			IHostingEnvironment env,
+			ILoggerFactory loggerFactory,
+			IServiceProvider serviceProvider
+		)
+		{
+			loggerFactory
+				.AddStatusLogger(
+					serviceProvider.GetService<ILoggingService>(),
+					env.IsTesting() ? LogLevel.Error : Configuration["Logging:MinLogLevel"].ToEnum<LogLevel>(),
+					Configuration.StringsFromArray("Logging:Exclude").ToArray()
+				);
+
+			if (env.IsProduction())
+			{
+				app.UseExceptionHandler("/error"); // All serverside exceptions redirect to error page
+				app.UseStatusCodePagesWithReExecute("/error/{0}");
+			}
+			else
+			{
+				app.UseDatabaseErrorPage();
+				app.UseDeveloperExceptionPage(); // Print full stack trace
+			}
+			
+			app.UseSession();
+
+			app.UseCors(builder => builder.WithOrigins("*"));
+
+			app.UseDefaultFiles(); // in wwwroot folder, index.html is served when opening a directory
+			app.UseStaticFiles(); // make accessible and cache wwwroot files
+
+			app.UseIdentity();
+
+			// define routes
+			app.UseMvc(routes =>
+			{
+				routes.MapRoute(
+					name: "default",
+					template: "{controller=Home}/{action=Index}/{id?}");
+			});
+
+
+			if (env.IsTesting() || env.IsStaging())
+			{
+				using (var context = serviceProvider.GetService<IDataContext>())
+				{
+					// create scheme if it does not exist
+					context.Database.EnsureCreated();
+				}
+
+				// Testing requires synchronous code
+				// Test runner (at least XUnit) tends to run tests in parallel
+				// When 2+ threads try to setup a virtual server in an async environment,
+				// deadlock usually happens.
+				serviceProvider.GetRequiredService<IDataSeedService>().SeedData();
+
+				// Seed one CpuLoad data point 
+				if (env.IsStaging())
+				{
+					serviceProvider
+						.GetRequiredService<IApiController>()
+						.CpuLoad(new CpuLoadViewModel { Source = "the-source", Value = 50 });
+				}
+			}
+		}
+	}
+}
diff --git a/src/web/TagHelpers/MetricCardTagHelper.cs b/src/web/TagHelpers/MetricCardTagHelper.cs
new file mode 100644
index 0000000000000000000000000000000000000000..1222a92285c319c33d8a7f9e39975d0a623e9350
--- /dev/null
+++ b/src/web/TagHelpers/MetricCardTagHelper.cs
@@ -0,0 +1,72 @@
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Mvc.Rendering;
+using Microsoft.AspNetCore.Mvc.ViewFeatures;
+using Microsoft.AspNetCore.Razor.TagHelpers;
+using StatusMonitor.Shared.Models.Entities;
+
+namespace StatusMonitor.Web.TagHelpers
+{
+	[HtmlTargetElement("metric-card", Attributes = "metric")]
+	/// <summary>
+	/// Underlying class for <metric-card> tag.
+	/// </summary>
+	public class MetricCardTagHelper : TagHelper
+	{
+		public Metric Metric { get; set; }
+
+		[ViewContext]
+		public ViewContext ViewContext { get; set; }
+
+		/// <summary>
+		/// Called by the framework. Renders tag helper.
+		/// </summary>
+		public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
+		{
+			output.TagName = "div";
+			output.TagMode = TagMode.StartTagAndEndTag;
+
+			output.Attributes.Clear();
+			output.Attributes.Add("class", $"card metric");
+			output.Attributes.Add("data-identifier", $"{Metric.Type}-{Metric.Source}");
+
+			var visibilityIcon = $@"
+				<li>
+					<a>
+						<i class='zmdi zmdi-eye{ (Metric.Public ? "" : "-off") }'><!-- --></i>
+					</a>
+				</li>
+			";
+
+			output.Content.SetHtmlContent(
+				$@"
+					<div class='card-header'>
+						<h2>
+							{Metric.Source}
+							<small>Last updated <span class='last-updated utc-time'>{Metric.LastUpdated}</span></small>
+						</h2>
+
+						<ul class='actions'>
+							{ (ViewContext.HttpContext.User.Identity.IsAuthenticated ? visibilityIcon : "") }
+							<li>
+								<a href='/home/metric/{((Metrics)Metric.Type).ToString()}/{Metric.Source}'>
+									<i class='zmdi zmdi-open-in-new'><!-- --></i>
+								</a>
+							</li>
+						</ul>
+					</div>
+
+					<div class='card-body'>
+						<div class='row'>
+							<div class='col-md-12'>
+								{(await output.GetChildContentAsync()).GetContent()}
+							</div>
+							<div class='col-md-12'>
+								<div class='metric-chart flot-chart line-chart'></div>
+							</div>
+						</div>
+					</div>
+				"
+			);
+		}
+	}
+}
diff --git a/src/web/TagHelpers/MetricValuesTagHelper.cs b/src/web/TagHelpers/MetricValuesTagHelper.cs
new file mode 100644
index 0000000000000000000000000000000000000000..8a8712c8a3a820c7ee078e5264fdd0dce6b5d082
--- /dev/null
+++ b/src/web/TagHelpers/MetricValuesTagHelper.cs
@@ -0,0 +1,119 @@
+using System;
+using Microsoft.AspNetCore.Razor.TagHelpers;
+using StatusMonitor.Shared.Models.Entities;
+
+namespace StatusMonitor.Web.TagHelpers
+{
+	[HtmlTargetElement("metric-values", Attributes = "metric")]
+	/// <summary>
+	/// Underlying class for <metric-values> tag.
+	/// </summary>
+	public class MetricValuesTagHelper : TagHelper
+	{
+		public Metric Metric { get; set; }
+
+		/// <summary>
+		/// Called by the framework. Renders tag helper.
+		/// </summary>
+		public override void Process(TagHelperContext context, TagHelperOutput output)
+		{
+			output.TagName = "div";
+			output.TagMode = TagMode.StartTagAndEndTag;
+
+			output.Attributes.Clear();
+			output.Attributes.Add("class", $"row");
+
+			output.Content.SetHtmlContent(
+				$@"
+					{GenerateLabels(Metric.AutoLabel, Metric.ManualLabel)}
+					{GenerateCurrentValue(Metric.CurrentValue)}
+					{GenerateStatValues(
+						new Tuple<int, string>(Metric.DayAvg, "Day avg"),
+						new Tuple<int, string>(Metric.HourAvg, "Hour avg")
+					)}
+					{GenerateStatValues(
+						new Tuple<int, string>(Metric.DayMax, "Day max"),
+						new Tuple<int, string>(Metric.HourMax, "Hour max")
+					)}
+					{GenerateStatValues(
+						new Tuple<int, string>(Metric.DayMin, "Day min"),
+						new Tuple<int, string>(Metric.HourMin, "Hour min")
+					)}
+				"
+			);
+		}
+
+		/// <summary>
+		/// Returns HTML code for labels part of the card.
+		/// </summary>
+		/// <param name="auto">Auto label to print</param>
+		/// <param name="manual">Manual label to print</param>
+		/// <returns>HTML code</returns>
+		private string GenerateLabels(AutoLabel auto, ManualLabel manual)
+		{
+			return $@"
+				<div class='col-md-12 col-sm-12 col-xs-12'>
+					<div class='row metric-labels'>
+						<div class='col-md-6 col-sm-6 col-xs-12'>
+							<span data-identifier='{Metric.Type}-{Metric.Source}' class='metric-auto-label'>{auto.Title}<!-- --></span>
+						</div>
+						<div class='col-md-6 col-sm-6 col-xs-12'>
+							<span data-identifier='{Metric.Type}-{Metric.Source}' class='metric-manual-label'>{manual.Title}<!-- --></span>
+						</div>
+					</div>
+				</div>
+			";
+		}
+
+		/// <summary>
+		/// Returns HTML code for current value part of the card.
+		/// </summary>
+		/// <param name="value">Current value to print</param>
+		/// <returns>HTML code</returns>
+		private string GenerateCurrentValue(int value)
+		{
+			return $@"
+				<div class='col-md-3 col-sm-3 col-xs-12'>
+					<div class='metric-current-value'>
+						<strong>{value}</strong>
+						<small>Current value</small>
+					</div>
+				</div>
+			";
+		}
+
+		/// <summary>
+		/// Returns HTML code for statistical value part of the card.
+		/// </summary>
+		/// <param name="top">A tuple containing numeric value and description of stat 
+		/// value for the top part of the card</param>
+		/// <param name="bottom">A tuple containing numeric value and description of stat 
+		/// value for the bottom part of the card</param>
+		/// <returns>HTML code</returns>
+		private string GenerateStatValues(Tuple<int, string> top, Tuple<int, string> bottom)
+		{
+			return $@"
+				<div class='col-md-3 col-sm-3 col-xs-4'>
+					<div class='metric-stat-value {GenerateStatClassName(top.Item2)}'>
+						<strong>{top.Item1}</strong>
+						<small>{top.Item2}</small>
+					</div>
+					<div class='metric-stat-value {GenerateStatClassName(bottom.Item2)}'>
+						<strong>{bottom.Item1}</strong>
+						<small>{bottom.Item2}</small>
+					</div>
+				</div>
+			";
+		}
+
+		/// <summary>
+		/// Returns class name for the given stat value description
+		/// </summary>
+		/// <param name="description">Description of the stat value</param>
+		/// <returns>Class name for the sat value</returns>
+		private string GenerateStatClassName(string description)
+		{
+			return description.Replace(" ", "-").ToLower();
+		}
+	}
+}
diff --git a/src/web/TagHelpers/SettingsViewer.cs b/src/web/TagHelpers/SettingsViewer.cs
new file mode 100644
index 0000000000000000000000000000000000000000..a3a16d9abc4681251a29845b0fbc0dac7295bfb0
--- /dev/null
+++ b/src/web/TagHelpers/SettingsViewer.cs
@@ -0,0 +1,296 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Mvc.Rendering;
+using Microsoft.AspNetCore.Mvc.ViewFeatures;
+using Microsoft.AspNetCore.Razor.TagHelpers;
+using Microsoft.Extensions.Configuration;
+using StatusMonitor.Shared.Extensions;
+using StatusMonitor.Shared.Models.Entities;
+
+namespace StatusMonitor.Web.TagHelpers
+{
+	[HtmlTargetElement("settings-viewer")]
+	/// <summary>
+	/// Underlying class for <settings-viewer> tag.
+	/// </summary>
+	public class SettingsViewerTagHelper : TagHelper
+	{
+		private IConfiguration _config;
+
+		public SettingsViewerTagHelper(IConfiguration config)
+		{
+			_config = config;
+		}
+
+		/// <summary>
+		/// Called by the framework. Renders tag helper.
+		/// </summary>
+		public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
+		{
+			output.TagName = "div";
+			output.TagMode = TagMode.StartTagAndEndTag;
+
+			output.Attributes.Clear();
+			output.Attributes.Add("class", "settings-viewer");
+
+			output.Content.SetHtmlContent(GenerateContent());
+
+			await Task.CompletedTask;
+		}
+
+		private string GenerateContent()
+		{
+			return $@"
+				{GenerateHeading("General settings", "")}
+				{GenerateTableSettings(new Dictionary<string, string> {
+					{ "Company name", _config["CompanyName"] }
+				})}
+
+				{GenerateHeading("Sensitive settings", "Passwords, keys, tokens...")}
+				{GenerateTableSettings(new Dictionary<string, string> {
+					{ "API Key", _config["Secrets:ApiKey"] },
+					{ "Admin password", _config["Secrets:AdminPassword"] },
+					{ "Database connection string", _config["Secrets:ConnectionString"] },
+					{ "ReCaptcha", GenerateReCaptchaInfo() },
+					{ "Email", GenerateEmailInfo() },
+					{ "Slack", GenerateSlackInfo() }
+				})}
+
+				{GenerateHeading("Logging settings", "Log level, exclusions...")}
+				{GenerateTableSettings(new Dictionary<string, string> {
+					{ "Minimal log level", _config["Logging:MinLogLevel"] },
+					{ "Log entry severities to notify", $"{_config["Logging:LogSeverityReported"]} and higher" },
+					{
+						"Exclusions",
+						_config
+							.StringsFromArray("Logging:Exclude")
+							.Aggregate((self, next) => $"{next}, {self}")
+					}
+				})}
+
+				{GenerateHeading("Log guard", "Settings that controll log message requests throttling")}
+				{GenerateTableSettings(new Dictionary<string, string> {
+					{ "Number of requests per timeframe", _config["Guard:Logging:Requests"] },
+					{ "Timeframe (seconds)", _config["Guard:Logging:PerSeconds"] }
+				})}
+
+				{GenerateHeading("Enumerations values", "Metrics, labels, severities...")}
+				{GenerateTableSettings(new Dictionary<string, string> {
+					{ "Auto labels", GenerateEnumConfigValues(typeof(AutoLabels)) },
+					{ "Manual labels", GenerateEnumConfigValues(typeof(ManualLabels)) },
+					{ "Compilation stages", GenerateEnumConfigValues(typeof(CompilationStages)) },
+					{ "User actions", GenerateEnumConfigValues(typeof(UserActions)) },
+					{ "Log entry severities", GenerateEnumConfigValues(typeof(LogEntrySeverities)) },
+					{ "Metrics", GenerateEnumConfigValues(typeof(Metrics)) }
+				})}
+
+				{GenerateHeading("Service manager settings", "Cache, clean, demo...")}
+				{GenerateTableSettings(new Dictionary<string, string> {
+					{ "Cache service", GenerateCacheServiceInfo() },
+					{ "Clean service", GenerateCleanServiceInfo() },
+					{ "Ping service", GeneratePingServiceInfo() },
+					{ "Demo service", GenerateDemoServiceInfo() },
+					{ "Discrepancy service", GenerateDiscrepancyServiceInfo() },
+					{ "Notification service", GenerateNotificationServiceInfo() }
+				})}
+
+				{(
+					_config.SectionsFromArray("Data:PingSettings").Count() > 0 ?
+					$@"
+						{GenerateHeading("Ping settings", "Which servers to ping")}	
+						{
+							GenerateTableSettings(
+								_config
+									.SectionsFromArray("Data:PingSettings")
+									.ToDictionary(
+										section => section["ServerUrl"],
+										section => GeneratePingSettingValue(section))
+							)
+						}
+					" :
+					""
+				)}
+			";
+		}
+
+		private string GenerateHeading(string title, string description)
+		{
+			return $@"
+				<h5>{title}</h5>
+				<small>{description}</small>
+			";
+		}
+
+		private string GenerateTableSettings(Dictionary<string, string> data)
+		{
+			return $@"
+				<div class='table-responsive' style='padding-top: 10px;'>
+					<table class='table table-hover table-condensed'>
+						<tbody>
+							{
+								data
+									.Select(pair => $@"
+										<tr>
+											<td>{pair.Key}</td>
+											<td>{pair.Value}</td>
+										</tr>"
+									)
+									.Aggregate((self, next) => $"{self}{next}")
+							}
+						</tbody>
+					</table>
+				</div>
+			";
+		}
+
+		private string GenerateEnumConfigValues(Type type)
+		{
+			return Enum
+				.GetValues(type)
+				.Cast<object>()
+				.Select(obj => _config[$"Data:{type.ToShortString()}:{obj.ToString()}"])
+				.Aggregate((self, next) => $"{next}, {(string.IsNullOrWhiteSpace(self) ? "(empty)" : self)}");
+		}
+
+		private string GenerateEnabledDisabled(string setting)
+		{
+			return Convert.ToBoolean(_config[setting]) ? "Enabled": "Disbaled";
+		}
+
+		private string GenerateEnabledDisabledInfo(string service, string setting, string info)
+		{
+			return $@"
+				{service} is {GenerateEnabledDisabled(setting).ToLower()}. 
+				{(
+					Convert.ToBoolean(_config[setting]) ? 
+					info : 
+					""
+				)}";
+		}
+
+
+		private string GeneratePingSettingValue(IConfigurationSection section)
+		{
+			return $@"
+				URL is {section["ServerUrl"]}
+				{(section["MaxResponseTime"] != null ? $", max response time is {section["MaxResponseTime"]}" : "")}
+				{(section["MaxFailures"] != null ? $", max number of failures is {section["MaxFailures"]}" : "")}
+				{(section["GetMethodRequired"] != null ? $", should be accessed by {(Convert.ToBoolean(section["GetMethodRequired"]) ? "GET" : "POST")} method" : "")}
+				.
+			"
+			.Replace(Environment.NewLine, "")
+			.Replace(" ,", ",")
+			.Replace(" .", ".");
+		}
+
+		private string GenerateReCaptchaInfo()
+		{
+			return GenerateEnabledDisabledInfo(
+				"ReCaptcha",
+				"Secrets:ReCaptcha:Enabled",
+				$"Site key is {_config["Secrets:ReCaptcha:SiteKey"]}, secret key is {_config["Secrets:ReCaptcha:SecretKey"]}."
+			);
+		}
+
+		private string GenerateEmailInfo()
+		{
+			return GenerateEnabledDisabledInfo(
+				"Email",
+				"Secrets:Email:Enabled",
+				$@"Messages will be sent to {_config["Secrets:Email:ToEmail"]} 
+				from {_config["Secrets:Email:FromEmail"]} (will appear as '{_config["Secrets:Email:FromTitle"]}').
+				SMTP authentication uses port {_config["Secrets:Email:SMTP:Port"]} on host {_config["Secrets:Email:Host"]} with password '{_config["Secrets:Email:Password"]}' and security '{_config["Secrets:Email:SMTP:Security"]}'."
+			);
+		}
+
+		private string GenerateSlackInfo()
+		{
+			return GenerateEnabledDisabledInfo(
+				"Slack",
+				"Secrets:Slack:Enabled",
+				$"Webhook is {_config["Secrets:Slack:Webhook"]}."
+			);
+		}
+
+		private string GenerateCacheServiceInfo()
+		{
+			return GenerateEnabledDisabledInfo(
+				"Cache service",
+				"ServiceManager:CacheService:Enabled",
+				$"The interval is {_config["ServiceManager:CacheService:Interval"]} seconds."
+			);
+		}
+
+		private string GeneratePingServiceInfo()
+		{
+			return GenerateEnabledDisabledInfo(
+				"Ping service",
+				"ServiceManager:PingService:Enabled",
+				$"The interval is {_config["ServiceManager:PingService:Interval"]} seconds."
+			);
+		}
+
+		private string GenerateCleanServiceInfo()
+		{
+			return GenerateEnabledDisabledInfo(
+				"Clean service",
+				"ServiceManager:CleanService:Enabled",
+				$"The interval is {_config["ServiceManager:CleanService:Interval"]} seconds with logs and datapoints max age set to {_config["ServiceManager:CleanService:MaxAge"]} seconds."
+			);
+		}
+
+		private string GenerateDemoServiceInfo()
+		{
+			return GenerateEnabledDisabledInfo(
+				"Demo service",
+				"ServiceManager:DemoService:Enabled",
+				$@"The interval is {_config["ServiceManager:DemoService:Interval"]} seconds with gaps {GenerateEnabledDisabled("ServiceManager:DemoService:Gaps:Enabled").ToLower()}. 
+				{(
+					Convert.ToBoolean(_config["ServiceManager:DemoService:Gaps:Enabled"]) ?
+					$"Gaps will be generated once per {_config["ServiceManager:DemoService:Gaps:Frequency"]} runs." :
+					""
+				)}"
+			);
+		}
+
+		private string GenerateDiscrepancyServiceInfo()
+		{
+			return GenerateEnabledDisabledInfo(
+				"Discrepancy service",
+				"ServiceManager:DiscrepancyService:Enabled",
+				$@"
+					The interval is {_config["ServiceManager:DiscrepancyService:Interval"]}.
+					Service will analyze {_config["ServiceManager:DiscrepancyService:DataTimeframe"]} seconds of data per run.
+					'Gap in data' discrepancy will be reported if time difference between any two consecutive datapoints is more than 1.5x of {_config["ServiceManager:DiscrepancyService:Gaps:MaxDifference"]} seconds.
+					'High load' discrepancy will be reported if load of {_config["ServiceManager:DiscrepancyService:Load:Threshold"]}+ occurs for more than {_config["ServiceManager:DiscrepancyService:Load:MaxFailures"]} consecutive recordings."
+			);
+		}
+
+		private string GenerateNotificationServiceInfo()
+		{
+			return GenerateEnabledDisabledInfo(
+				"Notification service",
+				"ServiceManager:NotificationService:Enabled",
+				$@"
+					The interval is {_config["ServiceManager:NotificationService:Interval"]} seconds.
+					{
+						Enum
+							.GetValues(typeof(NotificationSeverity))
+							.Cast<object>()
+							.Select(obj => new { 
+								Severity = obj.ToString(),
+								Frequency = _config[$"ServiceManager:NotificationService:Frequencies:{obj.ToString()}"] 
+							})
+							.Select(obj => $"Recipient will get notifications of severity {obj.Severity} no more than once in {obj.Frequency} seconds.")
+							.Aggregate(
+								(self, next) => $"{next}{Environment.NewLine}{self}"
+							)
+					}
+				"
+			);
+		}
+	}
+}
diff --git a/src/web/TagHelpers/UtcTimeTagHelper.cs b/src/web/TagHelpers/UtcTimeTagHelper.cs
new file mode 100644
index 0000000000000000000000000000000000000000..f098874e699b9153c0734854535fb732bab287a5
--- /dev/null
+++ b/src/web/TagHelpers/UtcTimeTagHelper.cs
@@ -0,0 +1,36 @@
+using System;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Mvc.Rendering;
+using Microsoft.AspNetCore.Mvc.ViewFeatures;
+using Microsoft.AspNetCore.Razor.TagHelpers;
+
+namespace StatusMonitor.Web.TagHelpers
+{
+	[HtmlTargetElement("utc-time", Attributes = "time")]
+	/// <summary>
+	/// Underlying class for <local-time> tag.
+	/// </summary>
+	public class UtcTimeTagHelper : TagHelper
+	{
+		public DateTime Time { get; set; }
+
+		[ViewContext]
+		public ViewContext ViewContext { get; set; }
+
+		/// <summary>
+		/// Called by the framework. Renders tag helper.
+		/// </summary>
+		public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
+		{
+			output.TagName = "span";
+			output.TagMode = TagMode.StartTagAndEndTag;
+
+			output.Attributes.Clear();
+			output.Attributes.Add("class", "utc-time");
+
+			output.Content.SetHtmlContent(Time.ToString());
+
+			await Task.CompletedTask;
+		}
+	}
+}
diff --git a/src/web/ViewModels/Authentication.cs b/src/web/ViewModels/Authentication.cs
new file mode 100644
index 0000000000000000000000000000000000000000..2afea41af0a5cd21ca3cb0f5cfc342c6dbdd2f67
--- /dev/null
+++ b/src/web/ViewModels/Authentication.cs
@@ -0,0 +1,20 @@
+using System.Collections.Generic;
+
+namespace StatusMonitor.Web.ViewModels
+{
+	public class LoginViewModel
+	{
+		public string Password { get; set; }
+	}
+	public class ReturnUrlViewModel
+	{
+		public string ReturnUrl { get; set; }
+		public bool IsError { get; set; }
+		public string Error { get; set; }
+	}
+	public class CaptchaResponseViewModel
+	{
+		public bool Success { get; set; }
+		public IEnumerable<string> ErrorCodes { get; set; }
+	}
+}
diff --git a/src/web/ViewModels/CompilationViewModel.cs b/src/web/ViewModels/CompilationViewModel.cs
new file mode 100644
index 0000000000000000000000000000000000000000..bb8ab1e484c9c55eed6ff4caca4599ae6f4ff43d
--- /dev/null
+++ b/src/web/ViewModels/CompilationViewModel.cs
@@ -0,0 +1,55 @@
+using System;
+using System.ComponentModel.DataAnnotations;
+using StatusMonitor.Shared.Extensions;
+using StatusMonitor.Shared.Models.Entities;
+
+namespace StatusMonitor.Web.ViewModels
+{
+	/// <summary>
+	/// View model identifying parameters for Compilation API endpoint.
+	/// </summary>
+	public class CompilationViewModel
+	{
+		public CompilationStages CompilationStage { get; set; }
+
+		[Required]
+		public string Stage
+		{
+			get
+			{
+				return CompilationStage.ToString();
+			}
+			set
+			{
+				try
+				{
+					CompilationStage = value.ToEnum<CompilationStages>();
+				}
+				catch (System.Exception)
+				{
+					throw new ArgumentException("Invalid Action parameter.");
+				}
+			}
+		}
+
+		[Required]
+		[StringLength(32)]
+		[RegularExpression("[a-z0-9\\.\\-]+")]
+		/// <summary>
+		/// Required. Source identifier. May be server id or website URL.
+		/// </summary>
+		public string Source { get; set; }
+
+		[Required]
+		/// <summary>
+		/// Required. The size of the the source in bytes.
+		/// <returns></returns>
+		public int SourceSize { get; set; }
+
+		[Required]
+		/// <summary>
+		/// Required. The compilation time in milliseconds.
+		/// </summary>
+		public int CompileTime { get; set; }
+	}
+}
diff --git a/src/web/ViewModels/CpuLoadViewModel.cs b/src/web/ViewModels/CpuLoadViewModel.cs
new file mode 100644
index 0000000000000000000000000000000000000000..e1d53174c834252cb193c77479ec3a20751e862e
--- /dev/null
+++ b/src/web/ViewModels/CpuLoadViewModel.cs
@@ -0,0 +1,24 @@
+using System.ComponentModel.DataAnnotations;
+
+namespace StatusMonitor.Web.ViewModels
+{
+	/// <summary>
+	/// View model identifying parameters for CPU Load API endpoint.
+	/// </summary>
+	public class CpuLoadViewModel
+	{
+		[Required]
+		/// <summary>
+		/// Required. A numeric value for CPU Load (like percentage).
+		/// </summary>
+		public int Value { get; set; }
+
+		[Required]
+		[StringLength(32)]
+		[RegularExpression("[a-z0-9\\.\\-]+")]
+		/// <summary>
+		/// Required. Source identifier. Should be server id in the case of CPU Load.
+		/// </summary>
+		public string Source { get; set; }
+	}
+}
diff --git a/src/web/ViewModels/DataRequestViewModel.cs b/src/web/ViewModels/DataRequestViewModel.cs
new file mode 100644
index 0000000000000000000000000000000000000000..e6e31f9838589e0f75e22c3e0290833f08081975
--- /dev/null
+++ b/src/web/ViewModels/DataRequestViewModel.cs
@@ -0,0 +1,55 @@
+using System;
+using System.ComponentModel.DataAnnotations;
+using StatusMonitor.Shared.Extensions;
+using StatusMonitor.Shared.Models.Entities;
+
+namespace StatusMonitor.Web.ViewModels
+{
+	/// <summary>
+	/// View model identifying parameters for Get Data API endpoint.
+	/// </summary>
+	public class DataRequestViewModel
+	{
+		/// <summary>
+		/// Required. A type of the metric for which data is requested.
+		/// </summary>
+		public Metrics MetricType { get; set; }
+
+		[Required]
+		/// <summary>
+		/// Alias for MetricType.
+		/// </summary>
+		public string Type
+		{
+			get
+			{
+				return MetricType.ToString();
+			}
+			set
+			{
+				try
+				{
+					MetricType = value.ToEnum<Metrics>();
+				}
+				catch (System.Exception)
+				{
+					throw new ArgumentException("Invalid Type parameter.");
+				}
+			}
+		}
+
+		[Required]
+		[StringLength(32)]
+		[RegularExpression("[a-z0-9\\.\\-]+")]
+		/// <summary>
+		/// Required. Source identifier. May be server id or website URL.
+		/// </summary>
+		public string Source { get; set; }
+
+		/// <summary>
+		/// Optional. Number of seconds ago from which data is requested.
+		/// Default value is roughly a month.
+		/// </summary>
+		public int TimePeriod { get; set; } = 60 * 60 * 24 * 30;
+	}
+}
diff --git a/src/web/ViewModels/ErrorViewModel.cs b/src/web/ViewModels/ErrorViewModel.cs
new file mode 100644
index 0000000000000000000000000000000000000000..6e5c9b1dcbf37aa5123a18e7ef69becbff5c22d6
--- /dev/null
+++ b/src/web/ViewModels/ErrorViewModel.cs
@@ -0,0 +1,36 @@
+using StatusMonitor.Shared.Extensions;
+
+namespace StatusMonitor.Web.ViewModels
+{
+	public class ErrorViewModel : ExtendedObject
+	{
+		public ErrorViewModel(int code)
+		{
+			this.Code = code;
+			switch (code)
+			{
+				case 404:
+					this.Message = "The page requested is not found";
+					break;
+				case 400:
+					this.Message = "Bad request";
+					break;
+				case 403:
+					this.Message = "Forbidden";
+					break;
+				case 401:
+					this.Message = "You are not authorized to view this page";
+					break;
+				case 500:
+					this.Message = "We've got an internal server error";
+					break;
+				default:
+					this.Message = "Unexpected error occurred";
+					break;
+			}
+		}
+
+		public int Code { get; set; }
+		public string Message { get; set; }
+	}
+}
diff --git a/src/web/ViewModels/LogDataViewModel.cs b/src/web/ViewModels/LogDataViewModel.cs
new file mode 100644
index 0000000000000000000000000000000000000000..a3d247628e2281bc5834c882465cb573c5328bf1
--- /dev/null
+++ b/src/web/ViewModels/LogDataViewModel.cs
@@ -0,0 +1,52 @@
+using System;
+using System.ComponentModel.DataAnnotations;
+using StatusMonitor.Shared.Extensions;
+using StatusMonitor.Shared.Models.Entities;
+
+namespace StatusMonitor.Web.ViewModels
+{
+	/// <summary>
+	/// View model identifying parameters for LogData API endpoint.
+	/// </summary>
+	public class LogDataViewModel
+	{
+		public LogEntrySeverities MessageSeverity { get; set; }
+
+		[Required]
+		/// <summary>
+		/// Alias for MessageSeverity.
+		/// </summary>
+		public string Severity
+		{
+			get
+			{
+				return MessageSeverity.ToString();
+			}
+			set
+			{
+				try
+				{
+					MessageSeverity = value.ToEnum<LogEntrySeverities>();
+				}
+				catch (System.Exception)
+				{
+					throw new ArgumentException("Invalid Severity parameter.");
+				}
+			}
+		}
+
+		/// <summary>
+		/// Number of messages of given severity.
+		/// By default: 1.
+		/// </summary>
+		public int Count { get; set; } = 1;
+
+		[Required]
+		[StringLength(32)]
+		[RegularExpression("[a-z0-9\\.\\-]+")]
+		/// <summary>
+		/// Required. Source identifier. Should be server id in the case of CPU Load.
+		/// </summary>
+		public string Source { get; set; }
+	}
+}
diff --git a/src/web/ViewModels/LogMessageViewModel.cs b/src/web/ViewModels/LogMessageViewModel.cs
new file mode 100644
index 0000000000000000000000000000000000000000..08418edfb9cc0da8bef0654457303df37f505347
--- /dev/null
+++ b/src/web/ViewModels/LogMessageViewModel.cs
@@ -0,0 +1,53 @@
+using System;
+using System.ComponentModel.DataAnnotations;
+using StatusMonitor.Shared.Extensions;
+using StatusMonitor.Shared.Models.Entities;
+
+namespace StatusMonitor.Web.ViewModels
+{
+	/// <summary>
+	/// View model identifying parameters for LogMessage API endpoint.
+	/// </summary>
+	public class LogMessageViewModel
+	{
+		public LogEntrySeverities MessageSeverity { get; set; }
+
+		[Required]
+		/// <summary>
+		/// Alias for MessageSeverity.
+		/// </summary>
+		public string Severity
+		{
+			get
+			{
+				return MessageSeverity.ToString();
+			}
+			set
+			{
+				try
+				{
+					MessageSeverity = value.ToEnum<LogEntrySeverities>();
+				}
+				catch (System.Exception)
+				{
+					throw new ArgumentException("Invalid Severity parameter.");
+				}
+			}
+		}
+
+		[Required]
+		[StringLength(32)]
+		[RegularExpression("[a-z0-9\\.\\-]+")]
+		/// <summary>
+		/// Required. Source identifier. Should be server id in the case of CPU Load.
+		/// </summary>
+		public string Source { get; set; }
+
+		public string AuxiliaryData { get; set; } = "";
+
+		[Required]
+		public string Message { get; set; }
+
+		public int Category { get; set; } = 0;
+	}
+}
diff --git a/src/web/ViewModels/LogMessagesFilterViewModel.cs b/src/web/ViewModels/LogMessagesFilterViewModel.cs
new file mode 100644
index 0000000000000000000000000000000000000000..42bb83e00635320b107e36c30674b69abf9cdbb3
--- /dev/null
+++ b/src/web/ViewModels/LogMessagesFilterViewModel.cs
@@ -0,0 +1,57 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using StatusMonitor.Shared.Extensions;
+using StatusMonitor.Shared.Models.Entities;
+using StatusMonitor.Shared.Services;
+
+namespace StatusMonitor.Web.ViewModels
+{
+	public class LogMessagesFilterViewModel : ExtendedObject
+	{
+		public string Sources { get; set; }
+		public string Categories { get; set; }
+		public string Severities { get; set; }
+		public string Keywords { get; set; }
+
+		public string Start { get; set; }
+		public string End { get; set; }
+
+		public int? Id { get; set; }
+
+		/// <summary>
+		/// Generates LogMessagesFilterModel from LogMessagesFilterViewModel
+		/// </summary>
+		/// <returns>LogMessagesFilterModel with this model's data</returns>
+		public LogMessagesFilterModel ToLogMessagesFilterModel()
+		{
+			return new LogMessagesFilterModel
+			{
+				Severities =
+					string.IsNullOrEmpty(Severities) ?
+					new List<LogEntrySeverities>() :
+					Severities.Split(',').Select(s => s.ToEnum<LogEntrySeverities>()).ToList(),
+				Categories =
+					string.IsNullOrEmpty(Categories) ?
+					new List<int>() :
+					Categories.Split(',').Select(s => Convert.ToInt32(s)).ToList(),
+				Sources =
+					string.IsNullOrEmpty(Sources) ?
+					new List<string>() :
+					Sources.Split(',').ToList(),
+				Keywords =
+					string.IsNullOrEmpty(Keywords) ?
+					new List<string>() :
+					Keywords.Split(',').ToList(),
+				Start =
+					string.IsNullOrEmpty(Start) ?
+					(DateTime?)null :
+					new DateTime(1970, 1, 1, 0, 0, 0, 0).AddMilliseconds(Convert.ToInt64(Start)),
+				End =
+					string.IsNullOrEmpty(End) ?
+					(DateTime?)null :
+					new DateTime(1970, 1, 1, 0, 0, 0, 0).AddMilliseconds(Convert.ToInt64(End))
+			};
+		}
+	}
+}
diff --git a/src/web/ViewModels/MetricRemovalViewModel.cs b/src/web/ViewModels/MetricRemovalViewModel.cs
new file mode 100644
index 0000000000000000000000000000000000000000..62a70ffbe698cc7a4cc11203fd18f94c55376158
--- /dev/null
+++ b/src/web/ViewModels/MetricRemovalViewModel.cs
@@ -0,0 +1,49 @@
+using System;
+using System.ComponentModel.DataAnnotations;
+using StatusMonitor.Shared.Extensions;
+using StatusMonitor.Shared.Models.Entities;
+
+namespace StatusMonitor.Web.ViewModels
+{
+	/// <summary>
+	/// View model identifying parameters for Remove Metric API endpoint.
+	/// </summary>
+	public class MetricRemovalViewModel
+	{
+		/// <summary>
+		/// A type of the metric which will be removed.
+		/// </summary>
+		public Metrics MetricType { get; set; }
+
+		/// <summary>
+		/// Alias for MetricType.
+		/// </summary>
+		[Required]
+		public string Type
+		{
+			get
+			{
+				return MetricType.ToString();
+			}
+			set
+			{
+				try
+				{
+					MetricType = value.ToEnum<Metrics>();
+				}
+				catch (System.Exception)
+				{
+					throw new ArgumentException("Invalid Type parameter.");
+				}
+			}
+		}
+
+		/// <summary>
+		/// Source identifier. May be server id or website URL.
+		/// </summary>
+		[Required]
+		[StringLength(32)]
+		[RegularExpression("[a-z0-9\\.\\-]+")]
+		public string Source { get; set; }
+	}
+}
diff --git a/src/web/ViewModels/MetricRequestViewModel.cs b/src/web/ViewModels/MetricRequestViewModel.cs
new file mode 100644
index 0000000000000000000000000000000000000000..9eb39b773dfe677e4d1c1072d4a21657640f4353
--- /dev/null
+++ b/src/web/ViewModels/MetricRequestViewModel.cs
@@ -0,0 +1,47 @@
+using System;
+using System.ComponentModel.DataAnnotations;
+using StatusMonitor.Shared.Extensions;
+using StatusMonitor.Shared.Models.Entities;
+
+namespace StatusMonitor.Web.ViewModels
+{
+	/// <summary>
+	/// View model identifying parameters for Get Metrics API endpoint.
+	/// </summary>
+	public class MetricRequestViewModel
+	{
+		/// <summary>
+		/// A type of the metric for which data is requested.
+		/// </summary>
+		public Metrics MetricType { get; set; }
+
+		/// <summary>
+		/// Alias for MetricType.
+		/// </summary>
+		public string Type
+		{
+			get
+			{
+				return MetricType.ToString();
+			}
+			set
+			{
+				try
+				{
+					MetricType = value.ToEnum<Metrics>();
+				}
+				catch (System.Exception)
+				{
+					throw new ArgumentException("Invalid Type parameter.");
+				}
+			}
+		}
+
+		/// <summary>
+		/// Source identifier. May be server id or website URL.
+		/// </summary>
+		[StringLength(32)]
+		[RegularExpression("[a-z0-9\\.\\-]+")]
+		public string Source { get; set; }
+	}
+}
diff --git a/src/web/ViewModels/MetricUpdateViewModel.cs b/src/web/ViewModels/MetricUpdateViewModel.cs
new file mode 100644
index 0000000000000000000000000000000000000000..17b3c7d044ccccf1b2deac2283e31bbc92a01e2e
--- /dev/null
+++ b/src/web/ViewModels/MetricUpdateViewModel.cs
@@ -0,0 +1,52 @@
+using System;
+using System.ComponentModel.DataAnnotations;
+using StatusMonitor.Shared.Extensions;
+using StatusMonitor.Shared.Models.Entities;
+
+namespace StatusMonitor.Web.ViewModels
+{
+	public class MetricUpdateViewModel
+	{
+		[Required]
+		public int ManualLabelId { get; set; }
+
+		[Required]
+		public bool Public { get; set; }
+
+		[Required]
+		[StringLength(32)]
+		[RegularExpression("[a-z0-9\\.\\-]+")]
+		/// <summary>
+		/// Required. Source identifier. May be server id or website URL.
+		/// </summary>
+		public string Source { get; set; }
+
+		/// <summary>
+		/// Required. A type of the metric for which data is requested.
+		/// </summary>
+		public Metrics MetricType { get; set; }
+
+		[Required]
+		/// <summary>
+		/// Alias for MetricType.
+		/// </summary>
+		public string Type
+		{
+			get
+			{
+				return MetricType.ToString();
+			}
+			set
+			{
+				try
+				{
+					MetricType = value.ToEnum<Metrics>();
+				}
+				catch (System.Exception)
+				{
+					throw new ArgumentException("Invalid Type parameter.");
+				}
+			}
+		}
+	}
+}
diff --git a/src/web/ViewModels/UserActionViewModel.cs b/src/web/ViewModels/UserActionViewModel.cs
new file mode 100644
index 0000000000000000000000000000000000000000..5a6bfc6a264510fe433f1fd4959b8288bf7607a5
--- /dev/null
+++ b/src/web/ViewModels/UserActionViewModel.cs
@@ -0,0 +1,49 @@
+using System;
+using System.ComponentModel.DataAnnotations;
+using StatusMonitor.Shared.Extensions;
+using StatusMonitor.Shared.Models.Entities;
+
+namespace StatusMonitor.Web.ViewModels
+{
+	/// <summary>
+	/// View model identifying parameters for User Action API endpoint.
+	/// </summary>
+	public class UserActionViewModel
+	{
+		public UserActions UserAction { get; set; }
+
+		[Required]
+		public string Action
+		{
+			get
+			{
+				return UserAction.ToString();
+			}
+			set
+			{
+				try
+				{
+					UserAction = value.ToEnum<UserActions>();
+				}
+				catch (System.Exception)
+				{
+					throw new ArgumentException("Invalid Action parameter.");
+				}
+			}
+		}
+
+		[Required]
+		[StringLength(32)]
+		[RegularExpression("[a-z0-9\\.\\-]+")]
+		/// <summary>
+		/// Required. Source identifier. May be server id or website URL.
+		/// </summary>
+		public string Source { get; set; }
+
+		/// <summary>
+		/// Number of times Action has been performed.
+		/// By default: 1.
+		/// </summary>
+		public int Count { get; set; } = 1;
+	}
+}
diff --git a/src/web/Views/Account/Login.cshtml b/src/web/Views/Account/Login.cshtml
new file mode 100644
index 0000000000000000000000000000000000000000..29f5e07d28135b0fa864b4aac6b6dc826341eaa2
--- /dev/null
+++ b/src/web/Views/Account/Login.cshtml
@@ -0,0 +1,87 @@
+@using Microsoft.Extensions.Configuration
+
+@inject IConfiguration Config
+
+@{
+	Layout = null;
+}
+
+<!DOCTYPE html>
+	<!--[if IE 9 ]><html class="ie9"><![endif]-->
+	<head>
+		<meta charset="utf-8">
+		<meta http-equiv="X-UA-Compatible" content="IE=edge">
+		<meta name="viewport" content="width=device-width, initial-scale=1">
+		<title>@Config["CompanyName"] Status Server | Login</title>
+
+		<!-- CSS -->
+		<environment names="Development">
+			<link href="/css/app.css" rel="stylesheet">
+		</environment>
+		<environment names="Staging,Production">
+			<link href="/css/app.min.css" rel="stylesheet">
+		</environment>
+	</head>
+
+	<body>
+
+		<div class="login-content">
+
+            <div class="lc-block lc-block-alt toggled" id="l-lockscreen">
+
+				@if (Model.IsError)
+				{
+					<div class="alert alert-danger" role="alert">
+						<span class="glyphicon glyphicon-exclamation-sign" aria-hidden="true"></span>
+						<span class="sr-only">Error:</span>
+						@(Model.Error)
+					</div>
+				}
+
+                <div class="lcb-form">
+
+					<form 
+						role="form" 
+						id="loginForm" 
+						asp-controller="Account" 
+						asp-action="Authenticate" 
+						asp-route-returnurl="@(Model.ReturnUrl)" 
+						novalidate
+					>
+
+						@if (!Model.IsError)
+						{
+							<img class="lcb-user" src="/images/smily-face.png" alt="Smily face">
+						}
+
+						<div class="fg-line">
+							<input type="text" value="@@admin" hidden name="login" />
+							<input type="password" class="form-control text-center" name="password" placeholder="Password" required />
+						</div>
+
+						@if (Convert.ToBoolean(Config["Secrets:ReCaptcha:Enabled"])) 
+						{
+							<div class="p-t-15" style="width: 304px; display: block; margin: 0 auto;">
+									<div class="g-recaptcha" data-sitekey="@Config["Secrets:ReCaptcha:SiteKey"]"></div>
+							</div>
+							<script src='https://www.google.com/recaptcha/api.js'></script>	
+						}
+
+						<button type="submit" class="btn btn-login btn-success btn-float">
+							<i class="zmdi zmdi-arrow-forward"></i>
+						</button>
+					
+					</form>
+                </div>
+
+				<div class="alert alert-info alert-dismissible" role="alert">
+					Employees only.
+				</div>
+
+            </div>
+        </div>
+
+	</body>
+</html>
+
+
diff --git a/src/web/Views/Admin/Index.cshtml b/src/web/Views/Admin/Index.cshtml
new file mode 100644
index 0000000000000000000000000000000000000000..a01a95b2b3a899954dbbde05ce2691325decef4d
--- /dev/null
+++ b/src/web/Views/Admin/Index.cshtml
@@ -0,0 +1,129 @@
+@using StatusMonitor.Shared.Models.Entities
+
+@{ 
+    ViewData["Title"] = "Admin panel"; 
+} 
+
+<div class="container">
+
+	<div class="block-header">
+		<h2>Admin panel</h2>
+	</div>
+
+	<div class="row">
+		<div class="col-md-3">
+			<div class="card">
+				<div class="card-header">
+					<h2>
+						Manual cleaunup
+						<small>
+							Run clean service manually with a specified max age
+						</small>
+					</h2>
+				</div>
+				<div class="card-body card-padding">
+					<div class="row">
+						<form 
+							role="form" 
+							asp-controller="Admin" 
+							asp-action="Clean" 
+							method="post"
+							novalidate
+						>
+							<div class="col-md-8 col-sm-12">
+
+								<h5>Set max age</h5>
+
+								<select class="selectpicker" name="maxAge">
+									<option value="0">Everything</option>
+									<option value="1">1 minutes</option>
+									<option value="10">10 minutes</option>
+									<option value="20">30 minutes</option>
+									<option value="60">1 hour</option>
+									<option value="240">4 hours</option>
+									<option value="720">12 hours</option>
+									<option value="1440">1 day</option>
+									<option value="4320">3 days</option>
+									<option value="10080">1 week</option>
+									<option value="43200">1 month</option>
+								</select>
+							</div>
+							<div class="col-md-4 col-sm-12">
+								<button type="submit" class="btn btn-danger btn-md waves-effect">Clean</button>
+							</div>
+						</form>
+					</div>
+				</div>
+			</div>
+		</div>
+
+		<div class="col-md-3">
+			<div class="card">
+				<div class="card-header">
+					<h2>
+						Go to metric
+						<small>
+							Go to the metric's page
+						</small>
+					</h2>
+				</div>
+				<div class="card-body card-padding">
+					<div class="row">
+						<form 
+							role="form" 
+							asp-controller="Admin" 
+							asp-action="Metric" 
+							method="get"
+							novalidate
+						>
+							<div class="col-md-8 col-sm-12">
+
+								<h5>Metric</h5>
+
+								<select class="selectpicker" name="metric" data-live-search="true">
+									@foreach (var metric in ViewBag.Metrics)
+									{
+										<option value="@((Metrics)metric.Type)@@@(metric.Source)">@(metric.Title) from @(metric.Source)</option>
+									}
+								</select>
+							</div>
+							<div class="col-md-4 col-sm-12">
+								<button type="submit" class="btn btn-primary btn-md waves-effect">Go</button>
+							</div>
+						</form>
+					</div>
+				</div>
+			</div>
+		</div>
+
+
+		<div class="col-md-6">
+			<div class="card">
+				<div class="card-header">
+					<h2>
+						Current settings
+						<small>
+							These are the settings read from <em>appsettings.json</em>.
+							Modify the file to update them.
+						</small>
+					</h2>
+				</div>
+				<div class="card-body card-padding">
+					<settings-viewer />
+				</div>
+			</div>
+		</div>
+	</div>
+
+</div>
+
+@section scripts {
+
+	<environment names="Development">
+		<script src="/js/ts/admin.js"></script>
+	</environment>
+	<environment names="Staging,Production">
+		<script src="/js/admin.min.js"></script>
+	</environment>
+
+}
diff --git a/src/web/Views/Admin/Log.cshtml b/src/web/Views/Admin/Log.cshtml
new file mode 100644
index 0000000000000000000000000000000000000000..dc9bfa5b22044c9abed54f535b472c9ef1f977c9
--- /dev/null
+++ b/src/web/Views/Admin/Log.cshtml
@@ -0,0 +1,30 @@
+@{ 
+    ViewData["Title"] = $"Log #{Model.Id}"; 
+} 
+
+@model StatusMonitor.Shared.Models.Entities.LogEntry
+
+<div class="container">
+	
+	<div class="block-header">
+		<h2>Log Message</h2>
+	</div>
+
+	<div class="row">
+		<div class="card col-md-8 col-md-offset-2">
+			@await Component.InvokeAsync("LogView", new { model = Model })
+		</div>
+	</div>
+
+</div>
+
+@section scripts {
+
+	<environment names="Development">
+		<script src="/js/ts/log.js"></script>
+	</environment>
+	<environment names="Staging,Production">
+		<script src="/js/log.min.js"></script>
+	</environment>
+
+}
diff --git a/src/web/Views/Admin/Logs.cshtml b/src/web/Views/Admin/Logs.cshtml
new file mode 100644
index 0000000000000000000000000000000000000000..3d2ec1b875ac9357352c86a0f21c3d19d9b079d1
--- /dev/null
+++ b/src/web/Views/Admin/Logs.cshtml
@@ -0,0 +1,306 @@
+@using StatusMonitor.Shared.Models.Entities
+@using StatusMonitor.Shared.Extensions
+
+@{ 
+    ViewData["Title"] = "Logs"; 
+} 
+
+@model StatusMonitor.Web.ViewModels.LogMessagesFilterViewModel
+
+@functions {
+
+	public string GetSeverityClass(int severityId)
+    {
+		switch((LogEntrySeverities)severityId)
+		{
+			case LogEntrySeverities.Error:
+			case LogEntrySeverities.Fatal:
+				return "danger table-text-color-white";
+			case LogEntrySeverities.Info:
+			case LogEntrySeverities.User:
+				return "info table-text-color-black";
+			case LogEntrySeverities.Warn:
+				return "warning table-text-color-white";
+			case LogEntrySeverities.Detail:
+			case LogEntrySeverities.Debug:
+				return "table-text-color-black";
+			default:
+				return "";
+		}
+	}
+}
+
+
+<div class="container">
+
+	<div class="block-header">
+		<h2>Log Messages</h2>
+	</div>
+
+	@if (ViewBag.Messages.Count > 0)
+	{
+		<div class="card">
+			<div class="card-header">
+				<h2>Log Messages Filter
+					<small>
+						Use this form to filter the log messages.
+						This setup us preserved if you share the link.
+					</small>
+				</h2>
+			</div>
+
+			<div class="card-body card-padding">
+				<form 
+					role="form" 
+					id="filter-form"
+					asp-controller="Admin" 
+					asp-action="Logs" 
+					method="get"
+					novalidate
+				>
+
+					<h4>Filter by ...</h4>
+
+					<div class="row">
+
+						<div class="col-sm-4">
+							<h5>Sources</h5>
+
+							<select class="selectpicker" id="sources-ui" multiple data-live-search="true">
+								@foreach (var source in @ViewBag.FilterData.Sources)
+								{
+									<option value="@source">@source</option>
+								}
+							</select>
+
+							<input type="text" hidden name="sources" />
+						</div>
+
+						<div class="col-sm-4">
+							<h5>Categories</h5>
+
+							<select class="selectpicker" id="categories-ui" multiple>
+								@foreach (var category in @ViewBag.FilterData.Categories)
+								{
+									<option>@category</option>
+								}
+							</select>
+
+							<input type="text" hidden name="categories" />
+						</div>
+
+						<div class="col-sm-4">
+							<h5>Severities</h5>
+
+							<select class="selectpicker" id="severities-ui" multiple data-live-search="true">
+								@foreach (var severity in Enum.GetValues(typeof(LogEntrySeverities)))
+								{
+									var disabled = string.Empty;
+									@if (!ViewBag.FilterData.Severities.Contains((LogEntrySeverities)severity))
+									{
+										disabled = "disabled='disabled'";
+									}
+									@: <option @disabled>@((LogEntrySeverities)severity)</option>
+								}
+							</select>
+
+							<input type="text" hidden name="severities" />
+						</div>
+					</div>
+
+					<br />
+
+					<div class="row">
+						<div class="col-sm-4">
+							<h5>Start timestamp</h5>
+
+							<div class="input-group form-group">
+								<span class="input-group-addon"><i class="zmdi zmdi-calendar"></i></span>
+								<div class="dtp-container">
+									<input type='text' id="start-ui" class="form-control date-time-picker" placeholder="Click here...">
+
+									<input type="text" hidden name="start" />
+								</div>
+							</div>
+						</div>
+
+						<div class="col-sm-4">
+							<h5>End timestamp</h5>
+
+							<div class="input-group form-group">
+								<span class="input-group-addon"><i class="zmdi zmdi-calendar"></i></span>
+								<div class="dtp-container">
+									<input type='text' id="end-ui" class="form-control date-time-picker" placeholder="Click here...">
+
+									<input type="text" hidden name="end" />
+								</div>
+							</div>
+						</div>
+
+						<div class="col-sm-4">
+							<h5>Keywords (case-sensitive, coma separated, no whitespace)</h5>
+
+							<div class="input-group">
+								<span class="input-group-addon"><i class="zmdi zmdi-account"></i></span>
+								<div class="fg-line">
+									<input type="text" name="keywords" class="form-control" placeholder="user,sign,...">
+								</div>
+							</div>
+						</div>
+					</div>
+
+					<h4>... or select single</h4>
+
+					<div class="row">
+						<div class="col-sm-6">
+							<h5>Identifier</h5>
+
+							<div class="input-group">
+								<span class="input-group-addon"><i class="zmdi zmdi-account"></i></span>
+								<div class="fg-line">
+									<input type="text" name="id" class="form-control" placeholder="Unique identifier, eq: 3232">
+								</div>
+							</div>
+						</div>
+
+						<div class="col-sm-6" style="text-align: right;">
+							<button type="submit" class="btn btn-primary btn-lg waves-effect">Apply filter</button>
+						</div>
+					</div>
+
+				</form>
+
+			</div>
+
+		</div>
+
+		<div class="card">
+			<div class="card-header">
+				<h2>Log Messages
+					<small>
+						These are all log messages collected by the status server including status server's own log messages.
+					</small>
+				</h2>
+			</div>
+
+			<div class="card-body card-padding">
+
+				@if (ViewBag.SelectedMessage != null)
+				{
+					<h1>Id: @ViewBag.SelectedMessage.Id</h1>
+				}
+
+				@if (ViewBag.Messages != null)
+				{
+					<div class="table-responsive">
+						<table id="logs-dt" class="table table-striped">
+							<thead>
+							<tr>
+								<th class="fixed-width">Id</th>
+								<th class="fixed-width">Source</th>
+								<th class="fixed-width">Category</th>
+								<th class="fixed-width">Severity</th>
+								<th class="variable-width">Message</th>
+								<th class="fixed-width">Timestamp</th>
+							</tr>
+							</thead>
+							<tfoot>
+							<tr>
+								<th>Id</th>
+								<th>Source</th>
+								<th>Category</th>
+								<th>Severity</th>
+								<th>Message</th>
+								<th>Timestamp</th>
+							</tr>
+							</tfoot>
+							<tbody>
+								@foreach (var logEntry in @ViewBag.Messages)
+								{
+									<tr class="@(GetSeverityClass(logEntry.Severity.Id))">
+										<td>
+											<a data-toggle="modal" href="#modal-view-@(logEntry.Id)" class="view-log" data-log-id="@(logEntry.Id)">
+												<u>@(logEntry.Id)</u>
+											</a>
+										</td>
+										<td>
+											<strong>@(logEntry.Source.ToUpper())</strong>
+										</td>
+										<td>@(logEntry.Category)</td>
+										<td>@(logEntry.Severity.Description)</td>
+										<td class="ellipsis">@(logEntry.Message)</td>
+										<!--<td><utc-time time="@(logEntry.Timestamp)" /></td>-->
+										<td>@(logEntry.Timestamp)</td>
+									</tr>
+								}
+							</tbody>
+						</table>
+					</div>
+				}
+
+			</div>
+		</div>
+	}
+
+</div>
+
+@if (ViewBag.Messages.Count > 0)
+{
+	@foreach (var logEntry in ViewBag.Messages)
+	{
+		<div 
+			class="modal fade" 
+			data-log-id="@(logEntry.Id)" 
+			id="modal-view-@(logEntry.Id)" 
+			tabindex="-1" 
+			role="dialog" 
+			aria-hidden="true" 
+			style="display: none;"
+		>
+			<div class="modal-dialog modal-lg">
+				<div class="modal-content">
+
+					@await Component.InvokeAsync("LogView", new { model = logEntry, modal = true })
+
+					<div class="modal-footer">
+						<button type="button" class="btn btn-link waves-effect" data-dismiss="modal">
+							Close
+						</button>
+						<a 
+							asp-controller="Admin" 
+							asp-action="Log" 
+							asp-route-id="@(logEntry.Id)" 
+							class="btn btn-link waves-effect"
+						>
+							View
+						</a>
+					</div>
+				</div>
+			</div>
+		</div>
+	}
+}
+
+@section scripts {
+
+	<script>
+
+		var filterModel = {
+			sources: "@(Model.Sources)",
+			categories: "@(Model.Categories)",
+			severities: "@(Model.Severities)",
+			start: "@(Model.Start)",
+			end: "@(Model.End)",
+			keywords: "@(Model.Keywords)"
+		};
+        
+    </script>
+
+	<environment names="Development">
+		<script src="/js/ts/logs.js"></script>
+	</environment>
+	<environment names="Staging,Production">
+		<script src="/js/logs.min.js"></script>
+	</environment>
+
+}
diff --git a/src/web/Views/Home/Index.cshtml b/src/web/Views/Home/Index.cshtml
new file mode 100755
index 0000000000000000000000000000000000000000..f22764ae2707123a8123d041651d97616e555ced
--- /dev/null
+++ b/src/web/Views/Home/Index.cshtml
@@ -0,0 +1,35 @@
+@{ 
+	ViewData["Title"] = "Overview"; 
+}
+@model System.Collections.Generic.List<StatusMonitor.Shared.Models.Entities.Metric>
+
+<div class="container">
+	<div class="block-header">
+		<h2>CPU Load</h2>
+	</div>
+
+	<div class="row">
+		
+		@foreach (var metric in Model)
+		{
+			<div class="col-md-3">
+				<metric-card metric="@metric">
+					<metric-values metric="@metric"></metric-values>
+				</metric-card>
+			</div>
+		}
+	</div>
+
+</div>
+
+@section scripts {
+	
+	<environment names="Development">
+		<script src="/js/ts/overview.js"></script>
+	</environment>
+	<environment names="Staging,Production">
+		<script src="/js/overview.min.js"></script>
+	</environment>
+
+}
+
diff --git a/src/web/Views/Home/Metric.cshtml b/src/web/Views/Home/Metric.cshtml
new file mode 100644
index 0000000000000000000000000000000000000000..cc410844cf7b6374fb00f529693877c83a6bbb50
--- /dev/null
+++ b/src/web/Views/Home/Metric.cshtml
@@ -0,0 +1,197 @@
+@{ 
+    ViewData["Title"] = Model.Title; 
+} 
+
+@model StatusMonitor.Shared.Models.Entities.Metric
+
+<div class="container">
+    <div class="block-header">
+        <h2>
+			@Model.Title from @Model.Source | 
+			Report generated on <utc-time time="@Model.LastUpdated" /> | 
+			<a href="javascript:window.location.href=window.location.href">Reload</a>
+		</h2>
+    </div>
+
+    <div class="row">
+        <div class="col-md-12 col-sm-12 col-xs-12">
+
+            <div class="card">
+                <div class="card-header">
+                    <h2>Plotted data <small>Data is requested for a day back.</small></h2>
+                </div>
+                <div class="card-body card-padding">
+                    <div id="metric-detailed-plot" class="flot-chart"></div>
+                    <div id="metric-overview-plot" class="flc-visits"></div>
+                </div>
+            </div>
+
+        </div>
+    </div>
+    <div class="row">
+        
+        <div class="col-md-8 col-sm-12 col-xs-12">
+
+            <div class="card">
+                <div class="card-header">
+                    <h2>Data points <small>Data is requested for a day back.</small></h2>
+                </div>
+                <div class="card-body card-padding">
+
+                    <div class="table-responsive">
+                        <table id="metric-data" class="table table-striped">
+                            <thead>
+                                <tr>
+                                    <th>Timestamp</th>
+                                    <th>Value</th>
+                                </tr>
+                            </thead>
+                            <tfoot>
+                                <tr>
+                                    <th>Timestamp</th>
+                                    <th>Value</th>
+                                </tr>
+                            </tfoot>
+                            <tbody>
+								<!-- -->
+                            </tbody>
+                        </table>
+                    </div>
+
+                </div>
+            </div>
+
+        </div>
+
+        <div class="col-md-4 col-sm-12 col-xs-12">
+
+			<div class="row">
+				<div class="col-md-12">
+
+					<div class="card metric">
+						<div class="card-header">
+							<h2>
+								Metric metadata 
+								<small>Last updated at <utc-time time="@Model.LastUpdated" />. Current value is up-to-date.</small>
+							</h2>
+						</div>
+						<div class="card-body card-padding">
+							<metric-values metric="@Model"></metric-values>
+						</div>
+					</div>
+
+				</div>
+
+				@if (Context.User.Identity.IsAuthenticated)
+				{
+
+					<div class="col-md-12">
+
+						<div class="card metric">
+							<div class="card-header">
+								<h2>
+									Metric settings 
+									<small>Use this controlls to change setting for this particular metric.</small>
+								</h2>
+							</div>
+							<div class="card-body card-padding">
+
+								<div class="row">
+									<div class="col-md-6">
+								
+										<form 
+											role="form" 
+											asp-controller="Admin" 
+											asp-action="UpdateMetric" 
+											method="post"
+											novalidate
+										>
+
+											<div class="row">
+
+												<div class="col-md-12">
+													<h5>Set manual label</h5>
+
+													<select class="selectpicker" name="manualLabelId">
+														@foreach (var label in @ViewBag.ManualLabels)
+														{
+															@: <option @(Model.ManualLabel.Id == label.Id ? "selected": "")  value="@(label.Id)">
+																	@( string.IsNullOrWhiteSpace(label.Title) ? "none" : label.Title )
+															@: </option>
+														}
+													</select>
+												</div>
+
+												<div class="col-md-12">
+													<h5>Show to public</h5>
+
+													<div class="checkbox">
+														<label>
+															<input type="checkbox" asp-for="Public" @(Model.Public ? "checked" : "") value="@(Model.Public)" />
+															<i class="input-helper"></i>
+														</label>
+													</div>
+
+												</div>
+
+												<div class="col-md-12">
+													<button type="submit" class="btn btn-primary btn-md waves-effect">Apply changes</button>
+												</div>
+											</div>
+
+											<input hidden type="text" name="source" value="@(Model.Source)" />
+											<input hidden type="text" name="type" value="@(Model.Type)" />
+										</form>
+									</div>
+
+								<br>
+
+									<div class="col-md-6">
+
+										<form 
+											role="form" 
+											asp-controller="Admin" 
+											asp-action="DeleteMetric" 
+											method="post"
+											novalidate
+										>
+											<div class="row">
+												<div class="col-md-6">
+													<h5>Remove metric (cannot be undone)</h5>
+
+													<button type="submit" class="btn btn-danger btn-md waves-effect">Remove metric</button>
+												</div>
+											</div>
+
+											<input hidden type="text" name="source" value="@(Model.Source)" />
+											<input hidden type="text" name="type" value="@(Model.Type)" />
+										</form>
+									</div>
+								</div>
+							</div>
+						</div>
+						
+					</div>
+				}
+			</div>
+        </div>
+
+    </div>
+
+</div>
+
+@section scripts {
+
+    <script>
+        var source = "@Model.Source";
+        var type = @Model.Type;
+    </script>
+
+    <environment names="Development">
+        <script src="/js/ts/metric.js"></script>
+    </environment>
+    <environment names="Staging,Production">
+        <script src="/js/metric.min.js"></script>
+    </environment>
+
+}
diff --git a/src/web/Views/Shared/Components/LogView/Default.cshtml b/src/web/Views/Shared/Components/LogView/Default.cshtml
new file mode 100644
index 0000000000000000000000000000000000000000..7e46de6e80b1564b2e5518758cdfb953ec6354ab
--- /dev/null
+++ b/src/web/Views/Shared/Components/LogView/Default.cshtml
@@ -0,0 +1,89 @@
+@using Microsoft.AspNetCore.Html
+
+@using StatusMonitor.Shared.Models.Entities
+
+@functions {
+
+	public string GetSeverityColor(int severityId)
+    {
+		switch((LogEntrySeverities)severityId)
+		{
+			case LogEntrySeverities.Error:
+			case LogEntrySeverities.Fatal:
+				return "#FF5722";
+			case LogEntrySeverities.Info:
+			case LogEntrySeverities.User:
+				return "#607D8B";
+			case LogEntrySeverities.Warn:
+				return "#FF9800";
+			case LogEntrySeverities.Detail:
+			case LogEntrySeverities.Debug:
+				return "#9E9E9E";
+			default:
+				return "";
+		}
+	}
+}
+
+<div class="@(ViewBag.Modal ? "modal-header" : "card-header")">
+	@(new HtmlString(ViewBag.Modal ? "<h4 class='modal-title'>" : "<h2>"))
+		Log message #@(Model.Id) received on <utc-time time="@(Model.Timestamp)" />
+		<small>
+			This is a log message #@(Model.Id).
+			Use <a asp-controller="Admin" asp-action="Log" asp-route-id="@(Model.Id)">permanent link</a> to share the message.
+			Keep in mind that log message will be cleaned from the database after some time.
+		</small>
+	@(new HtmlString(ViewBag.Modal ? "</h4>" : "</h2>"))
+	@if (!ViewBag.Modal)
+	{
+		<ul class="actions">
+			<li>
+				<a asp-controller="Admin" asp-action="Log" asp-route-id="@(Model.Id)">
+					<i class="zmdi zmdi-link"></i>
+				</a>
+			</li>
+		</ul>
+	}
+</div>
+
+<div class="@(ViewBag.Modal ? "modal-body" : "card-body card-padding")">
+
+	<div class="row" style="background-color: @GetSeverityColor(Model.Severity.Id)">
+		<br />
+	</div>
+
+	<div class="row">
+		<div class="col-md-4 col-xs-4">
+			<h5>Source:</h5> 
+			<strong>@(Model.Source.ToUpper())</strong>
+		</div>
+		<div class="col-md-4 col-xs-4">
+			<h5>Category:</h5> 
+			@(Model.Category)
+		</div>
+		<div class="col-md-4 col-xs-4">
+			<h5>Severity:</h5> 
+			<strong>@(Model.Severity.Description.ToUpper())</strong>
+		</div>
+		
+	</div>
+	<div class="row">
+		<div class="col-md-6">
+			<h5>Message:</h5>
+			@(Model.Message)
+		</div>
+		<div class="col-md-6">
+			<h5>Auxiliary Data:</h5>
+			@if (string.IsNullOrWhiteSpace(Model.AuxiliaryData))
+			{
+				<p>No data</p>
+			}
+			else
+			{
+				<pre style="padding-left: 15px;" class="json-renderer">
+					@(Model.AuxiliaryData.Replace("\n", "").Replace("\t", ""))
+				</pre>
+			}
+		</div>
+	</div>
+</div>
diff --git a/src/web/Views/Shared/Components/VersionHash/Default.cshtml b/src/web/Views/Shared/Components/VersionHash/Default.cshtml
new file mode 100644
index 0000000000000000000000000000000000000000..405d49f5d98c01a6406e0c8fd050c1dd93f4ac40
--- /dev/null
+++ b/src/web/Views/Shared/Components/VersionHash/Default.cshtml
@@ -0,0 +1 @@
+| Build hash <i>@(Model)</i>
diff --git a/src/web/Views/Shared/Error.cshtml b/src/web/Views/Shared/Error.cshtml
new file mode 100755
index 0000000000000000000000000000000000000000..d40f1a38b0271baa8b93aa41760cb8395d092660
--- /dev/null
+++ b/src/web/Views/Shared/Error.cshtml
@@ -0,0 +1,39 @@
+@using Microsoft.Extensions.Configuration
+
+@inject IConfiguration Config
+
+@{
+    Layout = null;
+}
+
+@model StatusMonitor.Web.ViewModels.ErrorViewModel
+
+<!DOCTYPE html>
+    <!--[if IE 9 ]><html class="ie9"><![endif]-->
+    <head>
+        <meta charset="utf-8">
+        <meta http-equiv="X-UA-Compatible" content="IE=edge">
+        <meta name="viewport" content="width=device-width, initial-scale=1">
+        <title>@Config["CompanyName"] Status Server | @Model.Code</title>
+        
+		<environment names="Development">
+			<link href="/css/app.css" rel="stylesheet">
+		</environment>
+		<environment names="Staging,Production">
+			<link href="/css/app.min.css" rel="stylesheet">
+		</environment>
+    </head>
+    
+    <body>
+        <div class="four-zero">
+            <div class="fz-block">
+                <h2>@Model.Code</h2>
+                <small>@Model.Message</small>
+
+                <div class="fzb-links">
+                    <a asp-action="Index" asp-controller="Home"><i class="zmdi zmdi-home"></i></a>
+                </div>
+            </div>
+        </div>
+    </body>
+</html>
diff --git a/src/web/Views/Shared/_Layout.cshtml b/src/web/Views/Shared/_Layout.cshtml
new file mode 100755
index 0000000000000000000000000000000000000000..dd598179bc5da0b12e5265a997eafae052f5dbaf
--- /dev/null
+++ b/src/web/Views/Shared/_Layout.cshtml
@@ -0,0 +1,188 @@
+@using Microsoft.Extensions.Configuration
+
+@inject IConfiguration Config
+
+<!DOCTYPE html>
+<!--[if IE 9 ]><html class="ie9"><![endif]-->
+
+	<head>
+		<meta charset="utf-8">
+		<meta http-equiv="X-UA-Compatible" content="IE=edge">
+		<meta name="viewport" content="width=device-width, initial-scale=1">
+		<title>@Config["CompanyName"] Status Server | @ViewData["Title"]</title>
+
+		<!-- CSS -->
+		<environment names="Development">
+			<link href="/css/app.css" rel="stylesheet">
+		</environment>
+		<environment names="Staging,Production">
+			<link href="/css/app.min.css" rel="stylesheet">
+		</environment>
+		
+		@RenderSection("styles", required: false)
+
+	</head>
+
+	<body>
+		<header id="header" class="clearfix" data-ma-theme="blue">
+			<ul class="h-inner">
+				<li class="hi-trigger ma-trigger" data-ma-action="sidebar-open" data-ma-target="#sidebar">
+					<div class="line-wrap">
+						<div class="line top"></div>
+						<div class="line center"></div>
+						<div class="line bottom"></div>
+					</div>
+				</li>
+
+				<li class="hi-logo hidden-xs">
+					<a asp-controller="Home" asp-action="Index">@Config["CompanyName"] | Status</a>
+				</li>
+
+				<li class="pull-right">
+
+					<ul class="hi-menu">
+
+							@if (Context.User.Identity.IsAuthenticated)
+							{
+								<li>
+									<a asp-controller="Admin" asp-action="Index" >
+										<i class="him-icon zmdi zmdi-settings"><!-- --></i>
+									</a>
+								</li>
+								<li>
+									<a asp-controller="Admin" asp-action="Logs" >
+										<i class="him-icon zmdi zmdi-comment-alert"><!-- --></i>
+									</a>
+								</li>
+								<li>
+									<a 
+										asp-controller="Account" 
+										asp-action="Logout" 
+										asp-route-returnurl="@(Context.Request.GetDisplayUrl())"
+									>
+										<i class="him-icon zmdi zmdi-power"><!-- --></i>
+									</a>
+								</li>
+							}
+							else
+							{
+								<li>
+									<a 
+										asp-controller="Account" 
+										asp-action="Login" 
+										asp-route-returnurl="@(Context.Request.GetDisplayUrl())"
+									>
+										<i class="him-icon zmdi zmdi-sign-in"><!-- --></i>
+									</a>
+								</li>
+							}
+					</ul>
+					
+				</li>
+
+
+			</ul>
+		</header>
+
+		<section id="main">
+			<section id="content">
+
+				@if (TempData["MessageContent"] != null)
+				{
+					<div class="alert alert-@(TempData["MessageSeverity"]) alert-dismissible" role="alert">
+						<button type="button" class="close" data-dismiss="alert" aria-label="Close">
+							<span aria-hidden="true">×</span>
+						</button>
+						@(TempData["MessageContent"])
+					</div>
+				}
+
+				@RenderBody()
+			</section>
+		</section>
+
+		<footer id="footer">
+			Copyright &copy; @Html.DisplayTextFor(model => DateTime.Now.Year) @Config["CompanyName"] @await Component.InvokeAsync("VersionHash")
+
+			<ul class="f-menu">
+				<li><a asp-controller="Home" asp-action="Index">Home</a></li>
+				@if (Context.User.Identity.IsAuthenticated)
+				{
+					<li>
+						<a 
+							asp-controller="Account" 
+							asp-action="Logout" 
+							asp-route-returnurl="@(Context.Request.GetDisplayUrl())"
+						>
+							Logout
+						</a>
+					</li>
+				}
+				else
+				{
+					<li>
+						<a 
+							asp-controller="Account" 
+							asp-action="Login" 
+							asp-route-returnurl="@(Context.Request.GetDisplayUrl())"
+						>
+							Login
+						</a>
+					</li>
+				}
+				<li><a href="/">Contact</a></li> <!-- TODO: -->
+			</ul>
+		</footer>
+
+		<!-- Page Loader -->
+		<div id="page-loader" class="page-loader">
+			<div class="preloader pls-blue">
+				<svg class="pl-circular" viewBox="25 25 50 50">
+					<circle class="plc-path" cx="50" cy="50" r="20" />
+				</svg>
+
+				<p>Please wait...</p>
+			</div>
+		</div>
+
+		@RenderSection("scripts", required: false)
+
+		<script>
+			document.addEventListener('DOMContentLoaded', function () {
+				
+				// Borrowed from http://stackoverflow.com/questions/13733912/javascript-fade-in-fade-out-without-jquery-and-css3
+				var fadeOut = function fadeOut(elem, ms) {
+					if (!elem)
+						return;
+
+					if (ms) {
+						var opacity = 1;
+						var timer = setInterval(function () {
+							opacity -= 50 / ms;
+							if (opacity <= 0) {
+								clearInterval(timer);
+								opacity = 0;
+								elem.style.display = "none";
+								elem.style.visibility = "hidden";
+							}
+							elem.style.opacity = opacity;
+							elem.style.filter = "alpha(opacity=" + opacity * 100 + ")";
+						}, 50);
+					}
+					else {
+						elem.style.opacity = 0;
+						elem.style.filter = "alpha(opacity=0)";
+						elem.style.display = "none";
+						elem.style.visibility = "hidden";
+					}
+				};
+
+				setTimeout(function () {
+					fadeOut(document.getElementById("page-loader"), 400);
+				}, 500);
+			});
+		</script>
+
+	</body>
+
+</html>
diff --git a/src/web/Views/ViewComponents/LogViewViewComponent.cs b/src/web/Views/ViewComponents/LogViewViewComponent.cs
new file mode 100644
index 0000000000000000000000000000000000000000..4ee52494e9d6ffbbb7203055204928f81f175930
--- /dev/null
+++ b/src/web/Views/ViewComponents/LogViewViewComponent.cs
@@ -0,0 +1,22 @@
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Mvc;
+using StatusMonitor.Shared.Models.Entities;
+
+namespace StatusMonitor.Web.Views.ViewComponents
+{
+	/// <summary>
+	/// View component responsible for rendering build hash.
+	/// </summary>
+	public class LogViewViewComponent : ViewComponent
+	{
+		public async Task<IViewComponentResult> InvokeAsync(LogEntry model, bool modal = false)
+		{
+			// hack
+			await Task.CompletedTask;
+
+			ViewBag.Modal = modal;
+
+			return View(model);
+		}
+	}
+}
diff --git a/src/web/Views/ViewComponents/VersionHashViewComponent.cs b/src/web/Views/ViewComponents/VersionHashViewComponent.cs
new file mode 100644
index 0000000000000000000000000000000000000000..2cc197be257208faf05c735308924e82a957a1fe
--- /dev/null
+++ b/src/web/Views/ViewComponents/VersionHashViewComponent.cs
@@ -0,0 +1,39 @@
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Hosting;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.Extensions.Configuration;
+using StatusMonitor.Shared.Extensions;
+
+namespace StatusMonitor.Web.Views.ViewComponents
+{
+	/// <summary>
+	/// View component responsible for rendering build hash.
+	/// </summary>
+	public class VersionHashViewComponent : ViewComponent
+	{
+		private readonly IConfiguration _configuration;
+		private readonly IHostingEnvironment _env;
+
+		public VersionHashViewComponent(
+			IHostingEnvironment env,
+			IConfiguration configuration
+		)
+		{
+			_configuration = configuration;
+			_env = env;
+		}
+
+		/// <summary>
+		/// Called by the framework. Returns a view for the version hash.
+		/// </summary>
+		/// <returns>View for the version hash</returns>
+		public async Task<IViewComponentResult> InvokeAsync()
+		{
+			await Task.CompletedTask;
+
+			var hash = _env.IsProduction() ? _configuration["Version:GitHash"] ?? "not-set" : "dev";
+
+			return View((object)hash.Truncate(8));
+		}
+	}
+}
diff --git a/src/web/Views/_ViewImports.cshtml b/src/web/Views/_ViewImports.cshtml
new file mode 100755
index 0000000000000000000000000000000000000000..9ba7c3695b136c52b9233c3f47d3e44010b6d6fa
--- /dev/null
+++ b/src/web/Views/_ViewImports.cshtml
@@ -0,0 +1,8 @@
+@using StatusMonitor.Web
+@using Microsoft.AspNetCore.Http.Extensions
+
+@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
+
+@addTagHelper "*, web"
+
+@inject IUrlHelper Url;
diff --git a/src/web/Views/_ViewStart.cshtml b/src/web/Views/_ViewStart.cshtml
new file mode 100755
index 0000000000000000000000000000000000000000..a5f10045db97461e9565c3273fdb9252687aa4f1
--- /dev/null
+++ b/src/web/Views/_ViewStart.cshtml
@@ -0,0 +1,3 @@
+@{
+    Layout = "_Layout";
+}
diff --git a/src/web/web.csproj b/src/web/web.csproj
new file mode 100644
index 0000000000000000000000000000000000000000..95f8325d176b11c84d0c5f5e9f9cfce60ac5a14a
--- /dev/null
+++ b/src/web/web.csproj
@@ -0,0 +1,55 @@
+<Project ToolsVersion="15.0" Sdk="Microsoft.NET.Sdk.Web">
+	<PropertyGroup>
+		<OutputType>Exe</OutputType>
+		<TargetFramework>netcoreapp1.1</TargetFramework>
+		<PreserveCompilationContext>true</PreserveCompilationContext>
+	</PropertyGroup>
+	<PropertyGroup>
+		<PackageTargetFallback>$(PackageTargetFallback);portable-net45+win8+wp8+wpa81;</PackageTargetFallback>
+	</PropertyGroup>
+	<ItemGroup>
+		<ProjectReference Include="../shared/shared.csproj">
+			<Name>shared</Name>
+		</ProjectReference>
+		<PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="1.1.0" />
+		<PackageReference Include="Npgsql" Version="3.1.9" />
+		<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="1.1.0" />
+		<PackageReference Include="Microsoft.EntityFrameworkCore" Version="1.1.0" />
+		<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL.Design" Version="1.1.0" />
+		<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="1.1.0" />
+		<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer.Design" Version="1.1.0" />
+		<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="1.1.0" />
+		<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite.Design" Version="1.1.0" />
+		<PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="1.1.0" />
+		<PackageReference Include="Microsoft.AspNetCore.Authentication.Cookies" Version="1.1.0" />
+		<PackageReference Include="Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore" Version="1.1.0" />
+		<PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="1.1.0" />
+		<PackageReference Include="Microsoft.AspNetCore.Mvc.TagHelpers" Version="1.1.0" />
+		<PackageReference Include="Microsoft.AspNetCore.Http.Abstractions" Version="1.1.0" />
+		<PackageReference Include="Microsoft.Extensions.Logging" Version="1.1.0" />
+		<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="1.1.0" />
+		<PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="1.1.0" />
+		<PackageReference Include="CommonMark.NET" Version="0.14.0" />
+		<PackageReference Include="Microsoft.AspNetCore.Diagnostics" Version="1.1.0" />
+		<PackageReference Include="Microsoft.AspNetCore.Mvc" Version="1.1.0" />
+		<PackageReference Include="Microsoft.AspNetCore.Razor.Tools" Version="1.1.0-preview4-final" />
+		<PackageReference Include="Microsoft.AspNetCore.Routing" Version="1.1.0" />
+		<PackageReference Include="Microsoft.AspNetCore.Server.IISIntegration" Version="1.1.0" />
+		<PackageReference Include="Microsoft.AspNetCore.Server.Kestrel" Version="1.1.0" />
+		<PackageReference Include="Microsoft.AspNetCore.StaticFiles" Version="1.1.0" />
+		<PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="1.1.0" />
+		<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="1.1.0" />
+		<PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="1.1.0" />
+		<PackageReference Include="Moq" Version="4.6.38-alpha" />
+		<PackageReference Include="Microsoft.AspNetCore.TestHost" Version="1.1.0" />
+		<PackageReference Include="Microsoft.AspNetCore.Cors" Version="1.1.0" />
+		<PackageReference Include="Microsoft.AspNetCore.Session" Version="1.1.0" />
+	</ItemGroup>
+	<ItemGroup>
+		<AppSettings Include="../appsettings*.json;../version.json"/>
+	</ItemGroup>
+	<Target Name="CopyAppsettings" AfterTargets="Build">
+		<Copy SourceFiles="@(AppSettings)" DestinationFolder="$(OutputPath)/publish" ContinueOnError="false" />
+		<Copy SourceFiles="@(AppSettings)" DestinationFolder="$(OutputPath)/" ContinueOnError="false" />
+	</Target>
+</Project>
diff --git a/src/web/wwwroot/favicon.ico b/src/web/wwwroot/favicon.ico
new file mode 100755
index 0000000000000000000000000000000000000000..a3a799985c43bc7309d701b2cad129023377dc71
Binary files /dev/null and b/src/web/wwwroot/favicon.ico differ
diff --git a/src/web/wwwroot/fonts/Material-Design-Iconic-Font.eot b/src/web/wwwroot/fonts/Material-Design-Iconic-Font.eot
new file mode 100755
index 0000000000000000000000000000000000000000..5e25191502db8ed043d76ebad6d32bc87f32989f
Binary files /dev/null and b/src/web/wwwroot/fonts/Material-Design-Iconic-Font.eot differ
diff --git a/src/web/wwwroot/fonts/Material-Design-Iconic-Font.svg b/src/web/wwwroot/fonts/Material-Design-Iconic-Font.svg
new file mode 100755
index 0000000000000000000000000000000000000000..1d3d2eaa28340b4a1a22447a0d5070abe3f1a9ef
--- /dev/null
+++ b/src/web/wwwroot/fonts/Material-Design-Iconic-Font.svg
@@ -0,0 +1,787 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
+<svg xmlns="http://www.w3.org/2000/svg">
+<metadata></metadata>
+<defs>
+<font id="material-desidesigniconicfont" horiz-adv-x="427" >
+<font-face units-per-em="512" ascent="448" descent="-64" />
+<missing-glyph horiz-adv-x="500" />
+<glyph unicode="&#xf101;" horiz-adv-x="510" d="M159 -10l29 28l81 -81l-14 -1q-100 0 -173.5 68t-81.5 167h32q6 -60 40 -108t87 -73zM178 129q14 0 21 7t7 20q0 7 -2 12t-6 8q-4 4 -9.5 5.5t-13.5 1.5h-16v22h16q8 0 13 2t8 5q4 3 6 8t2 10q0 12 -7 19q-6 6 -19 6q-5 0 -10 -2q-4 -1 -8 -4q-3 -3 -5 -8q-2 -4 -2 -9 h-28q0 10 4 18t11 14t17 10q9 3 21 3q11 0 22 -3q10 -3 16 -9q7 -6 11 -15t4 -20q0 -5 -2 -10q-1 -5 -4 -10q-4 -5 -8 -9q-5 -4 -11 -7q7 -3 13 -7q5 -4 8 -9q3 -4 5 -11q2 -5 2 -12q0 -11 -5 -20q-4 -9 -11.5 -15.5t-17.5 -9.5t-22 -3q-11 0 -21 3q-9 3 -17 9t-12 14.5 t-4 20.5h27q0 -6 2 -10.5t6 -7.5q3 -3 8 -5t11 -2zM360.5 255.5q10.5 -10.5 16.5 -25.5q5 -16 5 -34v-8q0 -19 -5 -34q-6 -15 -16 -25q-10 -11 -25 -17q-14 -5 -32 -5h-49v170h50q18 0 31.5 -5.5t24 -16zM352 188v8q0 28 -12 43q-12 14 -35 14h-20v-123h19q12 0 21 4t15 11 q6 8 9 19t3 24zM255 448q100 0 173.5 -68t81.5 -166h-32q-6 59 -40.5 107t-86.5 73l-29 -28l-81 81z" />
+<glyph unicode="&#xf102;" horiz-adv-x="405" d="M235 256l170 -107v-42l-67 21l-167 167v78q0 14 9 23t22.5 9t23 -9t9.5 -23v-117zM21 336l27 27l336 -336l-27 -27l-122 122v-79l42 -32v-32l-74 21l-75 -21v32l43 32v117l-171 -53v42l128 80z" />
+<glyph unicode="&#xf103;" horiz-adv-x="405" d="M175 256zM405 107l-170 53v-117l42 -32v-32l-74 21l-75 -21v32l43 32v117l-171 -53v42l171 107v117q0 14 9 23t22.5 9t23 -9t9.5 -23v-117l170 -107v-42z" />
+<glyph unicode="&#xf104;" d="M213.5 405q88.5 0 151 -62.5t62.5 -150.5t-62.5 -150.5t-151 -62.5t-151 62.5t-62.5 150.5t62.5 150.5t151 62.5zM213 96q40 0 68 28t28 68t-28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28zM213.5 213q8.5 0 15 -6t6.5 -15t-6.5 -15t-15 -6t-15 6t-6.5 15t6.5 15t15 6z " />
+<glyph unicode="&#xf105;" horiz-adv-x="384" d="M374 336q10 -11 10 -27v-266q0 -18 -12.5 -30.5t-30.5 -12.5h-298q-18 0 -30.5 12.5t-12.5 30.5v266q0 16 10 27l29 36q10 12 25 12h256q15 0 25 -12zM192 75l117 117h-74v43h-86v-43h-74zM45 341h294l-20 22h-256z" />
+<glyph unicode="&#xf106;" horiz-adv-x="384" d="M341 384q18 0 30.5 -12.5t12.5 -30.5v-298q0 -18 -12.5 -30.5t-30.5 -12.5h-298q-18 0 -30.5 12.5t-12.5 30.5v298q0 18 12.5 30.5t30.5 12.5h89q7 19 23.5 31t36.5 12t36.5 -12t23.5 -31h89zM192 384q-9 0 -15 -6.5t-6 -15t6 -15t15 -6.5t15 6.5t6 15t-6 15t-15 6.5z M192 299q-27 0 -45.5 -19t-18.5 -45.5t18.5 -45t45.5 -18.5t45.5 18.5t18.5 45t-18.5 45.5t-45.5 19zM320 43v30q0 19 -23.5 35t-52.5 23.5t-52 7.5t-52 -7.5t-52.5 -23.5t-23.5 -35v-30h256z" />
+<glyph unicode="&#xf107;" horiz-adv-x="384" d="M341 384q18 0 30.5 -12.5t12.5 -30.5v-298q0 -18 -12.5 -30.5t-30.5 -12.5h-298q-18 0 -30.5 12.5t-12.5 30.5v298q0 18 12.5 30.5t30.5 12.5h89q7 19 23.5 31t36.5 12t36.5 -12t23.5 -31h89zM213 64v43h-42v-43h42zM213 149v128h-42v-128h42zM192 341q9 0 15 6.5t6 15 t-6 15t-15 6.5t-15 -6.5t-6 -15t6 -15t15 -6.5z" />
+<glyph unicode="&#xf108;" horiz-adv-x="384" d="M341 384q18 0 30.5 -12.5t12.5 -30.5v-298q0 -18 -12.5 -30.5t-30.5 -12.5h-298q-18 0 -30.5 12.5t-12.5 30.5v298q0 18 12.5 30.5t30.5 12.5h89q7 19 23.5 31t36.5 12t36.5 -12t23.5 -31h89zM192 384q-9 0 -15 -6.5t-6 -15t6 -15t15 -6.5t15 6.5t6 15t-6 15t-15 6.5z M149 85l171 171l-30 30l-141 -140l-55 55l-30 -30z" />
+<glyph unicode="&#xf109;" horiz-adv-x="384" d="M341 405q18 0 30.5 -12.5t12.5 -29.5v-342q0 -17 -12.5 -29.5t-30.5 -12.5h-298q-18 0 -30.5 12.5t-12.5 29.5v342q0 17 12.5 29.5t30.5 12.5h89q7 19 23.5 31t36.5 12t36.5 -12t23.5 -31h89zM192 405q-9 0 -15 -6t-6 -15t6 -15t15 -6t15 6t6 15t-6 15t-15 6zM341 21v342 h-42v-64h-214v64h-42v-342h298z" />
+<glyph unicode="&#xf10a;" horiz-adv-x="384" d="M341 384q18 0 30.5 -12.5t12.5 -30.5v-298q0 -18 -12.5 -30.5t-30.5 -12.5h-298q-18 0 -30.5 12.5t-12.5 30.5v298q0 18 12.5 30.5t30.5 12.5h89q7 19 23.5 31t36.5 12t36.5 -12t23.5 -31h89zM192 384q-9 0 -15 -6.5t-6 -15t6 -15t15 -6.5t15 6.5t6 15t-6 15t-15 6.5z M277 128v85h-85v64l-107 -106l107 -107v64h85z" />
+<glyph unicode="&#xf10b;" horiz-adv-x="384" d="M341 384q18 0 30.5 -12.5t12.5 -30.5v-298q0 -18 -12.5 -30.5t-30.5 -12.5h-298q-18 0 -30.5 12.5t-12.5 30.5v298q0 18 12.5 30.5t30.5 12.5h89q7 19 23.5 31t36.5 12t36.5 -12t23.5 -31h89zM192 384q-9 0 -15 -6.5t-6 -15t6 -15t15 -6.5t15 6.5t6 15t-6 15t-15 6.5z M192 64l107 107h-64v85h-86v-85h-64z" />
+<glyph unicode="&#xf10c;" horiz-adv-x="384" d="M341 363q18 0 30.5 -12.5t12.5 -30.5v-299q0 -17 -12.5 -29.5t-30.5 -12.5h-298q-18 0 -30.5 12.5t-12.5 29.5v299q0 18 12.5 30.5t30.5 12.5h89q7 19 23.5 30.5t36.5 11.5t36.5 -11.5t23.5 -30.5h89zM192 363q-9 0 -15 -6.5t-6 -15t6 -15t15 -6.5t15 6.5t6 15t-6 15 t-15 6.5zM235 64v43h-150v-43h150zM299 149v43h-214v-43h214zM299 235v42h-214v-42h214z" />
+<glyph unicode="&#xf10d;" horiz-adv-x="235" d="M203 320h32v-245q0 -49 -34.5 -83.5t-83 -34.5t-83 34.5t-34.5 83.5v266q0 36 25 61t60.5 25t60.5 -25t25 -61v-224q0 -22 -16 -37.5t-38 -15.5t-37.5 15.5t-15.5 37.5v203h32v-203q0 -8 6.5 -14.5t15 -6.5t15 6.5t6.5 14.5v224q0 22 -16 38t-38 16t-37.5 -16t-15.5 -38 v-266q0 -36 25 -61t60.5 -25t60.5 25t25 61v245z" />
+<glyph unicode="&#xf10e;" d="M117 75q-48 0 -82.5 34t-34.5 83t34.5 83t82.5 34h224q36 0 61 -25t25 -60t-25 -60t-61 -25h-181q-22 0 -37.5 15.5t-15.5 37.5t15.5 37.5t37.5 15.5h160v-32h-160q-9 0 -15 -6t-6 -15t6 -15t15 -6h181q22 0 38 15.5t16 37.5t-16 37.5t-38 15.5h-224q-35 0 -60 -25 t-25 -60t25 -60t60 -25h203v-32h-203z" />
+<glyph unicode="&#xf10f;" horiz-adv-x="277" d="M128 384h149v-64h-85v-235h-1q-4 -36 -31 -60.5t-64 -24.5q-40 0 -68 28t-28 68t28 68t68 28q15 0 32 -6v198z" />
+<glyph unicode="&#xf110;" horiz-adv-x="384" d="M341 427q18 0 30.5 -12.5t12.5 -30.5v-276q0 -23 -19 -35l-173 -116l-173 116q-19 12 -19 35v276q0 18 12.5 30.5t30.5 12.5h298zM149 107l192 192l-30 30l-162 -162l-76 76l-30 -30z" />
+<glyph unicode="&#xf111;" horiz-adv-x="405" d="M384 64v-21q0 -18 -12.5 -30.5t-30.5 -12.5h-298q-18 0 -30.5 12.5t-12.5 30.5v298q0 18 12.5 30.5t30.5 12.5h298q18 0 30.5 -12.5t12.5 -30.5v-21h-192q-18 0 -30.5 -12.5t-12.5 -30.5v-170q0 -18 12.5 -30.5t30.5 -12.5h192zM192 107v170h213v-170h-213zM277.5 160 q13.5 0 22.5 9.5t9 22.5t-9 22.5t-22.5 9.5t-23 -9.5t-9.5 -22.5t9.5 -22.5t23 -9.5z" />
+<glyph unicode="&#xf112;" horiz-adv-x="405" d="M43 235h64v-150h-64v150zM171 235h64v-150h-64v150zM0 -21v64h405v-64h-405zM299 235h64v-150h-64v150zM203 427l202 -107v-43h-405v43z" />
+<glyph unicode="&#xf113;" horiz-adv-x="213" d="M185 363q12 0 20 -8.5t8 -20.5v-327q0 -12 -8 -20t-20 -8h-157q-11 0 -19.5 8t-8.5 20v327q0 12 8.5 20.5t19.5 8.5h36v42h85v-42h36zM128 64v43h-43v-43h43zM128 149v107h-43v-107h43z" />
+<glyph unicode="&#xf114;" horiz-adv-x="213" d="M185 363q12 0 20 -8.5t8 -20.5v-327q0 -12 -8 -20t-20 -8h-157q-11 0 -19.5 8t-8.5 20v327q0 12 8.5 20.5t19.5 8.5h36v42h85v-42h36zM85 21l86 160h-43v118l-85 -160h42v-118z" />
+<glyph unicode="&#xf115;" horiz-adv-x="213" d="M185 363q12 0 20 -8.5t8 -20.5v-327q0 -12 -8 -20t-20 -8h-157q-11 0 -19.5 8t-8.5 20v327q0 12 8.5 20.5t19.5 8.5h36v42h85v-42h36zM127 65v41h-41v-41h41zM156 177q15 15 15 36q0 27 -19 45.5t-45.5 18.5t-45 -18.5t-18.5 -45.5h32q0 14 9 23t22.5 9t23 -9t9.5 -22.5 t-10 -22.5l-20 -20q-19 -21 -19 -43h34q0 16 17 34z" />
+<glyph unicode="&#xf116;" horiz-adv-x="213" d="M185 363q12 0 20 -8.5t8 -20.5v-327q0 -12 -8 -20t-20 -8h-157q-11 0 -19.5 8t-8.5 20v327q0 12 8.5 20.5t19.5 8.5h36v42h85v-42h36z" />
+<glyph unicode="&#xf117;" horiz-adv-x="512" d="M330.5 331q-17.5 0 -30 12.5t-12.5 30t12.5 30t30 12.5t30 -12.5t12.5 -30t-12.5 -30t-30 -12.5zM106.5 192q44.5 0 75.5 -31t31 -75.5t-31 -75.5t-75.5 -31t-75.5 31t-31 75.5t31 75.5t75.5 31zM106.5 11q30.5 0 52.5 22t22 52.5t-22 52.5t-52.5 22t-52.5 -22t-22 -52.5 t22 -52.5t52.5 -22zM230 224l47 -49v-132h-42v106l-69 60q-12 10 -12 30q0 17 12 30l60 60q10 12 30 12q18 0 34 -12l41 -41q32 -32 76 -32v-43q-64 0 -108 45l-17 17zM405.5 192q44.5 0 75.5 -31t31 -75.5t-31 -75.5t-75.5 -31t-75.5 31t-31 75.5t31 75.5t75.5 31z M405.5 11q30.5 0 52.5 22t22 52.5t-22 52.5t-52.5 22t-52.5 -22t-22 -52.5t22 -52.5t52.5 -22z" />
+<glyph unicode="&#xf118;" d="M213.5 405q88.5 0 151 -62.5t62.5 -150.5t-62.5 -150.5t-151 -62.5t-151 62.5t-62.5 150.5t62.5 150.5t151 62.5zM213 21q58 0 105 36l-239 240q-36 -47 -36 -105q0 -71 50 -121t120 -50zM348 87q36 47 36 105q0 71 -50 121t-121 50q-58 0 -104 -36z" />
+<glyph unicode="&#xf119;" d="M213.5 405q88.5 0 151 -62.5t62.5 -150.5t-62.5 -150.5t-151 -62.5t-151 62.5t-62.5 150.5t62.5 150.5t151 62.5zM43 192q0 -59 36 -105l239 240q-46 36 -105 36q-70 0 -120 -50t-50 -121zM213 21q71 0 121 50t50 121q0 59 -36 105l-239 -240q46 -36 104 -36z" />
+<glyph unicode="&#xf11a;" d="M384 0h43v-43h-43q-44 0 -85 21q-41 -20 -86 -20t-85 20q-42 -21 -85 -21h-43v43h43q45 0 85 28q39 -27 85.5 -27t85.5 27q40 -28 85 -28zM42 43l-41 142q-3 8 1 17q4 8 13 10l28 9v99q0 18 12.5 30.5t29.5 12.5h64v64h128v-64h64q18 0 30.5 -12.5t12.5 -30.5v-99l27 -9 q9 -2 13 -10t1 -17l-40 -142h-1q-48 0 -85 42q-38 -42 -86 -42t-85 42q-37 -42 -85 -42h-1zM85 320v-85l128 42l128 -42v85h-256z" />
+<glyph unicode="&#xf11b;" horiz-adv-x="341" d="M299 405q17 0 29.5 -12.5t12.5 -29.5v-342q0 -17 -12.5 -29.5t-29.5 -12.5h-256q-18 0 -30.5 12.5t-12.5 29.5v342q0 17 12.5 29.5t30.5 12.5h256zM43 363v-171l53 32l53 -32v171h-106zM43 43h256l-83 109l-64 -82l-45 55z" />
+<glyph unicode="&#xf11c;" horiz-adv-x="341" d="M299 405q17 0 29.5 -12.5t12.5 -29.5v-342q0 -17 -12.5 -29.5t-29.5 -12.5h-256q-18 0 -30.5 12.5t-12.5 29.5v342q0 17 12.5 29.5t30.5 12.5h256zM43 363v-171l53 32l53 -32v171h-106z" />
+<glyph unicode="&#xf11d;" horiz-adv-x="299" d="M256 384q18 0 30.5 -12.5t12.5 -30.5v-341l-150 64l-149 -64v341q0 18 12.5 30.5t30.5 12.5h213zM256 64v277h-213v-277l106 47z" />
+<glyph unicode="&#xf11e;" horiz-adv-x="299" d="M256 384q18 0 30.5 -12.5t12.5 -30.5v-341l-150 64l-149 -64v341q0 18 12.5 30.5t30.5 12.5h213z" />
+<glyph unicode="&#xf11f;" horiz-adv-x="405" d="M106.5 149q26.5 0 45.5 -18.5t19 -45.5q0 -35 -25 -60t-61 -25q-24 0 -47 11.5t-38 31.5q15 0 29 11.5t14 30.5q0 27 18.5 45.5t45 18.5zM399 349q6 -6 6 -15t-6 -15l-191 -191l-59 59l191 191q7 6 15.5 6t15.5 -6z" />
+<glyph unicode="&#xf120;" horiz-adv-x="341" d="M341 277v-42h-44q2 -13 2 -22v-21h42v-43h-42v-21q0 -9 -2 -21h44v-43h-60q-17 -29 -46 -46.5t-64 -17.5t-64.5 17.5t-46.5 46.5h-60v43h45q-2 12 -2 21v21h-43v43h43v21q0 9 2 22h-45v42h60q15 26 39 42l-35 35l30 30l47 -46q14 3 29.5 3t30.5 -3l46 46l30 -30l-34 -35 q24 -16 38 -42h60zM213 107v42h-85v-42h85zM213 192v43h-85v-43h85z" />
+<glyph unicode="&#xf121;" horiz-adv-x="341" d="M0 107v213q0 27 12.5 44.5t38 26t53 11.5t67 3t67 -3t53 -11.5t38 -26t12.5 -44.5v-213q0 -28 -21 -48v-38q0 -8 -6.5 -14.5t-14.5 -6.5h-22q-8 0 -14.5 6.5t-6.5 14.5v22h-171v-22q0 -8 -6 -14.5t-15 -6.5h-21q-9 0 -15.5 6.5t-6.5 14.5v38q-21 20 -21 48zM74.5 85 q13.5 0 23 9.5t9.5 23t-9.5 22.5t-23 9t-22.5 -9t-9 -22.5t9 -23t22.5 -9.5zM266.5 85q13.5 0 23 9.5t9.5 23t-9.5 22.5t-23 9t-22.5 -9t-9 -22.5t9 -23t22.5 -9.5zM299 213v107h-256v-107h256z" />
+<glyph unicode="&#xf122;" horiz-adv-x="384" d="M192 320q-18 0 -30.5 12.5t-12.5 30.5q0 12 7 22l36 63l36 -63q7 -10 7 -22q0 -18 -12.5 -30.5t-30.5 -12.5zM290 107q22 -22 52 -22q23 0 42 13v-98q0 -9 -6.5 -15t-14.5 -6h-342q-8 0 -14.5 6t-6.5 15v98q19 -13 42 -13q30 0 52 22l23 23l23 -23q21 -21 52 -21t52 21 l23 23zM320 256q27 0 45.5 -18.5t18.5 -45.5v-33q0 -17 -12.5 -29.5t-29.5 -12.5t-29 12l-46 46l-46 -46q-11 -11 -29 -11t-30 11l-45 46l-46 -46q-12 -12 -29 -12t-29.5 12.5t-12.5 29.5v33q0 27 18.5 45.5t45.5 18.5h107v43h42v-43h107z" />
+<glyph unicode="&#xf123;" horiz-adv-x="384" d="M340 320l44 -128v-171q0 -8 -6.5 -14.5t-14.5 -6.5h-22q-8 0 -14.5 6.5t-6.5 14.5v22h-256v-22q0 -8 -6.5 -14.5t-14.5 -6.5h-22q-8 0 -14.5 6.5t-6.5 14.5v171l44 128q8 21 31 21h53v43h128v-43h53q23 0 31 -21zM74.5 107q13.5 0 23 9t9.5 22.5t-9.5 23t-23 9.5 t-22.5 -9.5t-9 -23t9 -22.5t22.5 -9zM309.5 107q13.5 0 22.5 9t9 22.5t-9 23t-22.5 9.5t-23 -9.5t-9.5 -23t9.5 -22.5t23 -9zM43 213h298l-32 96h-234z" />
+<glyph unicode="&#xf124;" horiz-adv-x="384" d="M298.5 341q-13.5 0 -22.5 9.5t-9 22.5q0 10 8 24.5t16 23.5l8 10q32 -36 32 -58q0 -13 -9.5 -22.5t-23 -9.5zM192 341q-13 0 -22.5 9.5t-9.5 22.5q0 10 8 24.5t16 23.5l8 10q32 -36 32 -58q0 -13 -9.5 -22.5t-22.5 -9.5zM85.5 341q-13.5 0 -23 9.5t-9.5 22.5q0 10 8 24.5 t16 23.5l8 10q32 -36 32 -58q0 -13 -9 -22.5t-22.5 -9.5zM340 277l44 -128v-170q0 -9 -6.5 -15.5t-14.5 -6.5h-22q-8 0 -14.5 6.5t-6.5 15.5v21h-256v-21q0 -9 -6.5 -15.5t-14.5 -6.5h-22q-8 0 -14.5 6.5t-6.5 15.5v170l44 128q8 22 31 22h234q23 0 31 -22zM74.5 64 q13.5 0 23 9.5t9.5 22.5t-9.5 22.5t-23 9.5t-22.5 -9.5t-9 -22.5t9 -22.5t22.5 -9.5zM309.5 64q13.5 0 22.5 9.5t9 22.5t-9 22.5t-22.5 9.5t-23 -9.5t-9.5 -22.5t9.5 -22.5t23 -9.5zM43 171h298l-32 96h-234z" />
+<glyph unicode="&#xf125;" horiz-adv-x="384" d="M340 320l44 -128v-171q0 -8 -6.5 -14.5t-14.5 -6.5h-22q-8 0 -14.5 6.5t-6.5 14.5v22h-256v-22q0 -8 -6.5 -14.5t-14.5 -6.5h-22q-8 0 -14.5 6.5t-6.5 14.5v171l44 128q8 21 31 21h234q23 0 31 -21zM74.5 107q13.5 0 23 9t9.5 22.5t-9.5 23t-23 9.5t-22.5 -9.5t-9 -23 t9 -22.5t22.5 -9zM309.5 107q13.5 0 22.5 9t9 22.5t-9 23t-22.5 9.5t-23 -9.5t-9.5 -23t9.5 -22.5t23 -9zM43 213h298l-32 96h-234z" />
+<glyph unicode="&#xf126;" d="M384 320q18 0 30.5 -12.5t12.5 -30.5v-234q0 -18 -12.5 -30.5t-30.5 -12.5h-341q-18 0 -30.5 12.5t-12.5 30.5v234q0 18 12.5 30.5t30.5 12.5h46q-4 11 -4 21q0 27 19 45.5t45 18.5q34 0 54 -28l10 -15l11 15q19 28 53 28q27 0 45.5 -18.5t18.5 -45.5q0 -10 -4 -21h47z M277.5 363q-8.5 0 -15 -6.5t-6.5 -15t6.5 -15t15 -6.5t15 6.5t6.5 15t-6.5 15t-15 6.5zM149.5 363q-8.5 0 -15 -6.5t-6.5 -15t6.5 -15t15 -6.5t15 6.5t6.5 15t-6.5 15t-15 6.5zM384 43v42h-341v-42h341zM384 149v128h-108l44 -60l-35 -25l-50 69l-22 29l-21 -29l-51 -69 l-34 25l44 60h-108v-128h341z" />
+<glyph unicode="&#xf127;" d="M384 405q18 0 30.5 -12.5t12.5 -29.5v-235q0 -18 -12.5 -30.5t-30.5 -12.5h-85v-106l-86 42l-85 -42v106h-85q-18 0 -30.5 12.5t-12.5 30.5v235q0 17 12.5 29.5t30.5 12.5h341zM384 128v43h-341v-43h341zM384 235v128h-341v-128h341z" />
+<glyph unicode="&#xf128;" d="M384 320q18 0 30.5 -12.5t12.5 -30.5v-234q0 -18 -12.5 -30.5t-30.5 -12.5h-341q-18 0 -30.5 12.5t-12.5 30.5v234q0 18 12.5 30.5t30.5 12.5h64v43q0 17 12.5 29.5t29.5 12.5h128q18 0 30.5 -12.5t12.5 -29.5v-43h64zM149 363v-43h128v43h-128zM384 43v42h-341v-42h341z M384 149v128h-64v-42h-43v42h-128v-42h-42v42h-64v-128h341z" />
+<glyph unicode="&#xf129;" d="M384 363q18 0 30.5 -12.5t12.5 -30.5v-256q0 -18 -12.5 -30.5t-30.5 -12.5h-341q-18 0 -30.5 12.5t-12.5 30.5v256q0 18 12.5 30.5t30.5 12.5h341zM384 64v128h-341v-128h341zM384 277v43h-341v-43h341z" />
+<glyph unicode="&#xf12a;" d="M384 309q18 0 30.5 -12.5t12.5 -29.5v-235q0 -18 -12.5 -30.5t-30.5 -12.5h-341q-18 0 -30.5 12.5t-12.5 30.5v235q0 17 12.5 29.5t30.5 12.5h85v43l43 43h85l43 -43v-43h85zM171 352v-43h85v43h-85zM181 64l141 141l-30 30l-111 -111l-44 45l-30 -30z" />
+<glyph unicode="&#xf12b;" d="M384 309q18 0 30.5 -12.5t12.5 -29.5v-235q0 -18 -12.5 -30.5t-30.5 -12.5h-341q-18 0 -30.5 12.5t-12.5 30.5v235q0 17 12.5 29.5t30.5 12.5h85v43l43 43h85l43 -43v-43h85zM171 352v-43h85v43h-85zM213 32l107 107h-64v85h-85v-85h-64z" />
+<glyph unicode="&#xf12c;" d="M299 320h128v-277q0 -18 -12.5 -30.5t-30.5 -12.5h-341q-18 0 -30.5 12.5t-12.5 30.5v277h128v43q0 17 12.5 29.5t30.5 12.5h85q18 0 30.5 -12.5t12.5 -29.5v-43zM171 363v-43h85v43h-85zM149 64l160 107l-160 85v-192z" />
+<glyph unicode="&#xf12d;" d="M384 320q18 0 30.5 -12.5t12.5 -30.5v-234q0 -18 -12.5 -30.5t-30.5 -12.5h-341q-18 0 -30.5 12.5t-12.5 30.5v234q0 18 12.5 30.5t30.5 12.5h85v43q0 17 12.5 29.5t30.5 12.5h85q18 0 30.5 -12.5t12.5 -29.5v-43h85zM256 320v43h-85v-43h85z" />
+<glyph unicode="&#xf12e;" horiz-adv-x="469" d="M0 64q27 0 45.5 -18.5t18.5 -45.5h-64v64zM0 149q62 0 105.5 -43.5t43.5 -105.5h-42q0 44 -31.5 75.5t-75.5 31.5v42zM384 299v-214h-120q-21 64 -68 111t-111 68v35h299zM0 235q97 0 166 -69t69 -166h-43q0 80 -56 136t-136 56v43zM427 384q17 0 29.5 -12.5t12.5 -30.5 v-298q0 -18 -12.5 -30.5t-29.5 -12.5h-150v43h150v298h-384v-64h-43v64q0 18 12.5 30.5t30.5 12.5h384z" />
+<glyph unicode="&#xf12f;" horiz-adv-x="469" d="M427 384q17 0 29.5 -12.5t12.5 -30.5v-298q0 -18 -12.5 -30.5t-29.5 -12.5h-150v43h150v298h-384v-64h-43v64q0 18 12.5 30.5t30.5 12.5h384zM0 64q27 0 45.5 -18.5t18.5 -45.5h-64v64zM0 149q62 0 105.5 -43.5t43.5 -105.5h-42q0 44 -31.5 75.5t-75.5 31.5v42zM0 235 q97 0 166 -69t69 -166h-43q0 80 -56 136t-136 56v43z" />
+<glyph unicode="&#xf130;" d="M235 404q81 -8 136.5 -68.5t55.5 -143.5q0 -45 -19 -87l-56 33q11 27 11 54q0 56 -37 98t-91 50v64zM213 43q72 0 117 56l55 -33q-30 -41 -75 -64t-97 -23q-88 0 -150.5 62.5t-62.5 150.5q0 83 55.5 143.5t136.5 68.5v-64q-55 -8 -91.5 -50t-36.5 -98q0 -62 43.5 -105.5 t105.5 -43.5z" />
+<glyph unicode="&#xf131;" horiz-adv-x="384" d="M341 384q18 0 30.5 -12.5t12.5 -30.5v-298q0 -18 -12.5 -30.5t-30.5 -12.5h-298q-18 0 -30.5 12.5t-12.5 30.5v298q0 18 12.5 30.5t30.5 12.5h298zM128 85v150h-43v-150h43zM213 85v214h-42v-214h42zM299 85v86h-43v-86h43z" />
+<glyph unicode="&#xf132;" d="M213 299h214v-299h-427v384h213v-85zM85 43v42h-42v-42h42zM85 128v43h-42v-43h42zM85 213v43h-42v-43h42zM85 299v42h-42v-42h42zM171 43v42h-43v-42h43zM171 128v43h-43v-43h43zM171 213v43h-43v-43h43zM171 299v42h-43v-42h43zM384 43v213h-171v-43h43v-42h-43v-43h43 v-43h-43v-42h171zM341 213v-42h-42v42h42zM341 128v-43h-42v43h42z" />
+<glyph unicode="&#xf133;" horiz-adv-x="384" d="M256 213h128v-213h-384v299h128v42l64 64l64 -64v-128zM85 43v42h-42v-42h42zM85 128v43h-42v-43h42zM85 213v43h-42v-43h42zM213 43v42h-42v-42h42zM213 128v43h-42v-43h42zM213 213v43h-42v-43h42zM213 299v42h-42v-42h42zM341 43v42h-42v-42h42zM341 128v43h-42v-43 h42z" />
+<glyph unicode="&#xf134;" d="M269 277l30 -30l-56 -55l56 -55l-30 -30l-56 55l-55 -55l-30 30l55 55l-55 55l30 30l55 -55zM213.5 405q88.5 0 151 -62.5t62.5 -150.5t-62.5 -150.5t-151 -62.5t-151 62.5t-62.5 150.5t62.5 150.5t151 62.5zM213.5 21q70.5 0 120.5 50t50 121t-50 121t-120.5 50 t-120.5 -50t-50 -121t50 -121t120.5 -50z" />
+<glyph unicode="&#xf135;" d="M213.5 405q88.5 0 151 -62.5t62.5 -150.5t-62.5 -150.5t-151 -62.5t-151 62.5t-62.5 150.5t62.5 150.5t151 62.5zM320 115l-77 77l77 77l-30 30l-77 -77l-76 77l-30 -30l76 -77l-76 -77l30 -30l76 77l77 -77z" />
+<glyph unicode="&#xf136;" horiz-adv-x="299" d="M299 311l-120 -119l120 -119l-30 -30l-120 119l-119 -119l-30 30l119 119l-119 119l30 30l119 -119l120 119z" />
+<glyph unicode="&#xf137;" horiz-adv-x="384" d="M171 171l-171 170v43h384v-43l-171 -170v-128h107v-43h-256v43h107v128zM96 299h192l43 42h-278z" />
+<glyph unicode="&#xf138;" horiz-adv-x="477" d="M148 304l-93 -112l93 -112l-33 -27l-115 139l115 139zM132 171v42h43v-42h-43zM345 213v-42h-42v42h42zM217 171v42h43v-42h-43zM362 331l115 -139l-115 -139l-33 27l93 112l-93 112z" />
+<glyph unicode="&#xf139;" horiz-adv-x="341" d="M64 341v-42h-43v85q0 18 12.5 30.5t30.5 12.5l213 -1q18 0 30.5 -12t12.5 -30v-85h-43v42h-213zM243 94l-30 30l68 68l-68 68l30 30l98 -98zM128 124l-30 -30l-98 98l98 98l30 -30l-68 -68zM277 43v42h43v-85q0 -18 -12.5 -30.5t-30.5 -12.5h-213q-18 0 -30.5 12.5 t-12.5 30.5v85h43v-42h213z" />
+<glyph unicode="&#xf13a;" d="M158 94l-30 -30l-128 128l128 128l30 -30l-98 -98zM269 94l98 98l-98 98l30 30l128 -128l-128 -128z" />
+<glyph unicode="&#xf13b;" d="M384 384q18 0 30.5 -12.5t12.5 -30.5v-64q0 -17 -12.5 -29.5t-30.5 -12.5h-43v-64q0 -36 -25 -61t-60 -25h-128q-35 0 -60 25t-25 61v213h341zM384 277v64h-43v-64h43zM0 0v43h384v-43h-384z" />
+<glyph unicode="&#xf13c;" d="M43 320v-299h298v-42h-298q-18 0 -30.5 12.5t-12.5 29.5v299h43zM384 405q18 0 30.5 -12.5t12.5 -29.5v-256q0 -18 -12.5 -30.5t-30.5 -12.5h-256q-18 0 -30.5 12.5t-12.5 30.5v256q0 17 12.5 29.5t30.5 12.5h256zM384 192v171h-107v-171l54 32z" />
+<glyph unicode="&#xf13d;" horiz-adv-x="469" d="M43 256v-235h341q0 -17 -12.5 -29.5t-30.5 -12.5h-298q-18 0 -30.5 12.5t-12.5 29.5v235h43zM363 341h106v-234q0 -18 -12.5 -30.5t-29.5 -12.5h-299q-18 0 -30.5 12.5t-12.5 30.5v234h107v43q0 18 12.5 30.5t30.5 12.5h85q18 0 30.5 -12.5t12.5 -30.5v-43zM235 384v-43 h85v43h-85zM235 128l117 85l-117 64v-149z" />
+<glyph unicode="&#xf13e;" horiz-adv-x="512" d="M43 320v-299h384v-42h-384q-18 0 -30.5 12.5t-12.5 29.5v192v107h43zM469 363q18 0 30.5 -12.5t12.5 -30.5v-213q0 -18 -12.5 -30.5t-30.5 -12.5h-341q-18 0 -30.5 12.5t-12.5 30.5l1 256q0 17 12 29.5t30 12.5h128l43 -42h170zM149 128h299l-75 96l-53 -64l-75 96z" />
+<glyph unicode="&#xf13f;" horiz-adv-x="469" d="M319 228l76 -100h-235l59 75l41 -50zM43 341v-341h341v-43h-341q-18 0 -30.5 12.5t-12.5 30.5v341h43zM427 427q17 0 29.5 -12.5t12.5 -30.5v-299q0 -17 -12.5 -29.5t-29.5 -12.5h-299q-18 0 -30.5 12.5t-12.5 29.5v299q0 18 12.5 30.5t30.5 12.5h299zM427 85v299h-299 v-299h299z" />
+<glyph unicode="&#xf140;" d="M427 107q0 -18 -12.5 -30.5t-30.5 -12.5h-256q-18 0 -30.5 12.5t-12.5 30.5v256q0 17 12.5 29.5t30.5 12.5h256q18 0 30.5 -12.5t12.5 -29.5v-256zM192 192l-64 -85h256l-85 106l-64 -79zM0 320h43v-299h298v-42h-298q-18 0 -30.5 12.5t-12.5 29.5v299z" />
+<glyph unicode="&#xf141;" horiz-adv-x="469" d="M43 341v-341h341v-43h-341q-18 0 -30.5 12.5t-12.5 30.5v341h43zM277 128v171h-42v42h85v-213h-43zM427 427q17 0 29.5 -12.5t12.5 -30.5v-299q0 -17 -12.5 -29.5t-29.5 -12.5h-299q-18 0 -30.5 12.5t-12.5 29.5v299q0 18 12.5 30.5t30.5 12.5h299zM427 85v299h-299v-299 h299z" />
+<glyph unicode="&#xf142;" horiz-adv-x="469" d="M43 341v-341h341v-43h-341q-18 0 -30.5 12.5t-12.5 30.5v341h43zM427 427q17 0 29.5 -12.5t12.5 -30.5v-299q0 -17 -12.5 -29.5t-29.5 -12.5h-299q-18 0 -30.5 12.5t-12.5 29.5v299q0 18 12.5 30.5t30.5 12.5h299zM427 85v299h-299v-299h299zM341 171v-43h-128v85 q0 18 12.5 30.5t30.5 12.5h43v43h-86v42h86q17 0 29.5 -12.5t12.5 -29.5v-43q0 -18 -12.5 -30.5t-29.5 -12.5h-43v-42h85z" />
+<glyph unicode="&#xf143;" horiz-adv-x="469" d="M427 427q17 0 29.5 -12.5t12.5 -30.5v-299q0 -17 -12.5 -29.5t-29.5 -12.5h-299q-18 0 -30.5 12.5t-12.5 29.5v299q0 18 12.5 30.5t30.5 12.5h299zM427 85v299h-299v-299h299zM43 341v-341h341v-43h-341q-18 0 -30.5 12.5t-12.5 30.5v341h43zM341 171q0 -18 -12.5 -30.5 t-29.5 -12.5h-86v43h86v42h-43v43h43v43h-86v42h86q17 0 29.5 -12.5t12.5 -29.5v-32q0 -14 -9 -23t-23 -9q14 0 23 -9.5t9 -22.5v-32z" />
+<glyph unicode="&#xf144;" horiz-adv-x="469" d="M43 341v-341h341v-43h-341q-18 0 -30.5 12.5t-12.5 30.5v341h43zM299 128v85h-86v128h43v-85h43v85h42v-213h-42zM427 427q17 0 29.5 -12.5t12.5 -30.5v-299q0 -17 -12.5 -29.5t-29.5 -12.5h-299q-18 0 -30.5 12.5t-12.5 29.5v299q0 18 12.5 30.5t30.5 12.5h299zM427 85 v299h-299v-299h299z" />
+<glyph unicode="&#xf145;" horiz-adv-x="469" d="M427 427q17 0 29.5 -12.5t12.5 -30.5v-299q0 -17 -12.5 -29.5t-29.5 -12.5h-299q-18 0 -30.5 12.5t-12.5 29.5v299q0 18 12.5 30.5t30.5 12.5h299zM427 85v299h-299v-299h299zM43 341v-341h341v-43h-341q-18 0 -30.5 12.5t-12.5 30.5v341h43zM341 171q0 -18 -12.5 -30.5 t-29.5 -12.5h-86v43h86v42h-86v128h128v-42h-85v-43h43q17 0 29.5 -12.5t12.5 -30.5v-42z" />
+<glyph unicode="&#xf146;" horiz-adv-x="469" d="M43 341v-341h341v-43h-341q-18 0 -30.5 12.5t-12.5 30.5v341h43zM427 427q17 0 29.5 -12.5t12.5 -30.5v-299q0 -17 -12.5 -29.5t-29.5 -12.5h-299q-18 0 -30.5 12.5t-12.5 29.5v299q0 18 12.5 30.5t30.5 12.5h299zM427 85v299h-299v-299h299zM256 128q-18 0 -30.5 12.5 t-12.5 30.5v128q0 17 12.5 29.5t30.5 12.5h85v-42h-85v-43h43q17 0 29.5 -12.5t12.5 -30.5v-42q0 -18 -12.5 -30.5t-29.5 -12.5h-43zM256 213v-42h43v42h-43z" />
+<glyph unicode="&#xf147;" horiz-adv-x="469" d="M43 341v-341h341v-43h-341q-18 0 -30.5 12.5t-12.5 30.5v341h43zM427 427q17 0 29.5 -12.5t12.5 -30.5v-299q0 -17 -12.5 -29.5t-29.5 -12.5h-299q-18 0 -30.5 12.5t-12.5 29.5v299q0 18 12.5 30.5t30.5 12.5h299zM427 85v299h-299v-299h299zM256 128h-43l86 171h-86v42 h128v-42z" />
+<glyph unicode="&#xf148;" horiz-adv-x="469" d="M43 341v-341h341v-43h-341q-18 0 -30.5 12.5t-12.5 30.5v341h43zM427 427q17 0 29.5 -12.5t12.5 -30.5v-299q0 -17 -12.5 -29.5t-29.5 -12.5h-299q-18 0 -30.5 12.5t-12.5 29.5v299q0 18 12.5 30.5t30.5 12.5h299zM427 85v299h-299v-299h299zM256 128q-18 0 -30.5 12.5 t-12.5 30.5v32q0 13 9.5 22.5t22.5 9.5q-13 0 -22.5 9t-9.5 23v32q0 17 12.5 29.5t30.5 12.5h43q17 0 29.5 -12.5t12.5 -29.5v-32q0 -14 -9 -23t-23 -9q14 0 23 -9.5t9 -22.5v-32q0 -18 -12.5 -30.5t-29.5 -12.5h-43zM256 299v-43h43v43h-43zM256 213v-42h43v42h-43z" />
+<glyph unicode="&#xf149;" horiz-adv-x="469" d="M43 341v-341h341v-43h-341q-18 0 -30.5 12.5t-12.5 30.5v341h43zM277 192q0 -18 -12.5 -30.5t-29.5 -12.5h-64v43h64v21h-22q-17 0 -29.5 12.5t-12.5 30.5v21q0 18 12.5 30.5t29.5 12.5h22q17 0 29.5 -12.5t12.5 -30.5v-85zM213 256h22v21h-22v-21zM427 427 q17 0 29.5 -12.5t12.5 -30.5v-299q0 -17 -12.5 -29.5t-29.5 -12.5h-299q-18 0 -30.5 12.5t-12.5 29.5v299q0 18 12.5 30.5t30.5 12.5h299zM427 256v128h-299v-299h299v128h-43v-42h-43v42h-42v43h42v43h43v-43h43z" />
+<glyph unicode="&#xf14a;" horiz-adv-x="469" d="M43 341v-341h341v-43h-341q-18 0 -30.5 12.5t-12.5 30.5v341h43zM427 427q17 0 29.5 -12.5t12.5 -30.5v-299q0 -17 -12.5 -29.5t-29.5 -12.5h-299q-18 0 -30.5 12.5t-12.5 29.5v299q0 18 12.5 30.5t30.5 12.5h299zM427 85v299h-299v-299h299zM299 341q17 0 29.5 -12.5 t12.5 -29.5v-128q0 -18 -12.5 -30.5t-29.5 -12.5h-86v43h86v42h-43q-18 0 -30.5 12.5t-12.5 30.5v43q0 17 12.5 29.5t30.5 12.5h43zM299 256v43h-43v-43h43z" />
+<glyph unicode="&#xf14b;" horiz-adv-x="469" d="M43 341v-341h341v-43h-341q-18 0 -30.5 12.5t-12.5 30.5v341h43zM427 427q17 0 29.5 -12.5t12.5 -30.5v-299q0 -17 -12.5 -29.5t-29.5 -12.5h-299q-18 0 -30.5 12.5t-12.5 29.5v299q0 18 12.5 30.5t30.5 12.5h299zM427 85v299h-299v-299h299z" />
+<glyph unicode="&#xf14c;" d="M384 405q18 0 30.5 -12.5t12.5 -29.5v-256q0 -18 -12.5 -30.5t-30.5 -12.5h-256q-18 0 -30.5 12.5t-12.5 30.5v256q0 17 12.5 29.5t30.5 12.5h256zM341 299v42h-85v-117q-14 11 -32 11q-22 0 -37.5 -16t-15.5 -38t15.5 -37.5t37.5 -15.5t37.5 15.5t15.5 37.5v118h64z M43 320v-299h298v-42h-298q-18 0 -30.5 12.5t-12.5 29.5v299h43z" />
+<glyph unicode="&#xf14d;" d="M384 405q18 0 30.5 -12.5t12.5 -29.5v-256q0 -18 -12.5 -30.5t-30.5 -12.5h-256q-18 0 -30.5 12.5t-12.5 30.5v256q0 17 12.5 29.5t30.5 12.5h256zM203 245v22q0 13 -9.5 22.5t-22.5 9.5h-54v-128h32v42h22q13 0 22.5 9.5t9.5 22.5zM309 203v64q0 13 -9 22.5t-23 9.5h-53 v-128h53q14 0 23 9t9 23zM395 267v32h-64v-128h32v42h32v32h-32v22h32zM149 245v22h22v-22h-22zM43 320v-299h298v-42h-298q-18 0 -30.5 12.5t-12.5 29.5v299h43zM256 203v64h21v-64h-21z" />
+<glyph unicode="&#xf14e;" d="M43 320v-299h298v-42h-298q-18 0 -30.5 12.5t-12.5 29.5v299h43zM384 405q18 0 30.5 -12.5t12.5 -29.5v-256q0 -18 -12.5 -30.5t-30.5 -12.5h-256q-18 0 -30.5 12.5t-12.5 30.5v256q0 17 12.5 29.5t30.5 12.5h256zM363 213v43h-86v85h-42v-85h-86v-43h86v-85h42v85h86z " />
+<glyph unicode="&#xf14f;" horiz-adv-x="341" d="M303 427q16 0 27 -11.5t11 -27.5v-307q0 -16 -11 -27t-27 -11h-179q-16 0 -27.5 11t-11.5 27v307q0 16 11.5 27.5t27.5 11.5h179zM213.5 384q-17.5 0 -30 -12.5t-12.5 -30t12.5 -30t30 -12.5t30 12.5t12.5 30t-12.5 30t-30 12.5zM213.5 96q35.5 0 60.5 25t25 60.5 t-25 60.5t-60.5 25t-60.5 -25t-25 -60.5t25 -60.5t60.5 -25zM160 181.5q0 53.5 53.5 53.5t53.5 -53.5t-53.5 -53.5t-53.5 53.5zM43 341v-341h213v-43h-213q-18 0 -30.5 12.5t-12.5 30.5v341h43z" />
+<glyph unicode="&#xf150;" d="M43 320v-299h298v-42h-298q-18 0 -30.5 12.5t-12.5 29.5v299h43zM384 405q18 0 30.5 -12.5t12.5 -29.5v-256q0 -18 -12.5 -30.5t-30.5 -12.5h-256q-18 0 -30.5 12.5t-12.5 30.5v256q0 17 12.5 29.5t30.5 12.5h256zM363 213v43h-214v-43h214zM277 128v43h-128v-43h128z M363 299v42h-214v-42h214z" />
+<glyph unicode="&#xf151;" d="M43 320v-299h298v-42h-298q-18 0 -30.5 12.5t-12.5 29.5v299h43zM384 405q18 0 30.5 -12.5t12.5 -29.5v-256q0 -18 -12.5 -30.5t-30.5 -12.5h-256q-18 0 -30.5 12.5t-12.5 30.5v256q0 17 12.5 29.5t30.5 12.5h256zM213 139l128 96l-128 96v-192z" />
+<glyph unicode="&#xf152;" d="M213.5 215q9.5 0 16.5 -6.5t7 -16.5t-7 -16.5t-16.5 -6.5t-16.5 6.5t-7 16.5t7 16.5t16.5 6.5zM213.5 405q88.5 0 151 -62.5t62.5 -150.5t-62.5 -150.5t-151 -62.5t-151 62.5t-62.5 150.5t62.5 150.5t151 62.5zM260 145l81 175l-174 -81l-82 -175z" />
+<glyph unicode="&#xf153;" horiz-adv-x="408" d="M114 163l-89 90q-25 25 -25 60t25 60l150 -149zM259 202l-31 -31l146 -147l-30 -30l-146 147l-147 -147l-31 30l209 208q-12 24 -4 56t33 57q31 30 69 35t61.5 -18.5t18.5 -61.5t-36 -69q-25 -25 -56.5 -33t-55.5 4z" />
+<glyph unicode="&#xf154;" horiz-adv-x="299" d="M21 43v256h256v-256q0 -18 -12.5 -30.5t-29.5 -12.5h-171q-18 0 -30.5 12.5t-12.5 30.5zM299 363v-43h-299v43h75l21 21h107l21 -21h75z" />
+<glyph unicode="&#xf155;" horiz-adv-x="341" d="M170.5 43q17.5 0 30 -12.5t12.5 -30.5t-12.5 -30.5t-30 -12.5t-30 12.5t-12.5 30.5t12.5 30.5t30 12.5zM42.5 427q17.5 0 30 -12.5t12.5 -30.5t-12.5 -30.5t-30 -12.5t-30 12.5t-12.5 30.5t12.5 30.5t30 12.5zM42.5 299q17.5 0 30 -12.5t12.5 -30.5t-12.5 -30.5 t-30 -12.5t-30 12.5t-12.5 30.5t12.5 30.5t30 12.5zM42.5 171q17.5 0 30 -12.5t12.5 -30.5t-12.5 -30.5t-30 -12.5t-30 12.5t-12.5 30.5t12.5 30.5t30 12.5zM298.5 341q-17.5 0 -30 12.5t-12.5 30.5t12.5 30.5t30 12.5t30 -12.5t12.5 -30.5t-12.5 -30.5t-30 -12.5z M170.5 171q17.5 0 30 -12.5t12.5 -30.5t-12.5 -30.5t-30 -12.5t-30 12.5t-12.5 30.5t12.5 30.5t30 12.5zM298.5 171q17.5 0 30 -12.5t12.5 -30.5t-12.5 -30.5t-30 -12.5t-30 12.5t-12.5 30.5t12.5 30.5t30 12.5zM298.5 299q17.5 0 30 -12.5t12.5 -30.5t-12.5 -30.5 t-30 -12.5t-30 12.5t-12.5 30.5t12.5 30.5t30 12.5zM170.5 299q17.5 0 30 -12.5t12.5 -30.5t-12.5 -30.5t-30 -12.5t-30 12.5t-12.5 30.5t12.5 30.5t30 12.5zM170.5 427q17.5 0 30 -12.5t12.5 -30.5t-12.5 -30.5t-30 -12.5t-30 12.5t-12.5 30.5t12.5 30.5t30 12.5z" />
+<glyph unicode="&#xf156;" horiz-adv-x="384" d="M363 171q8 0 14.5 -6.5t6.5 -15.5v-128q0 -8 -6.5 -14.5t-14.5 -6.5h-342q-8 0 -14.5 6.5t-6.5 14.5v128q0 9 6.5 15.5t14.5 6.5h342zM85.5 43q17.5 0 30 12.5t12.5 30t-12.5 30t-30 12.5t-30 -12.5t-12.5 -30t12.5 -30t30 -12.5zM363 384q8 0 14.5 -6.5t6.5 -14.5v-128 q0 -9 -6.5 -15.5t-14.5 -6.5h-342q-8 0 -14.5 6.5t-6.5 15.5v128q0 8 6.5 14.5t14.5 6.5h342zM85.5 256q17.5 0 30 12.5t12.5 30t-12.5 30t-30 12.5t-30 -12.5t-12.5 -30t12.5 -30t30 -12.5z" />
+<glyph unicode="&#xf157;" horiz-adv-x="384" d="M0 405h384l-43 -389q-2 -16 -14 -26.5t-28 -10.5h-214q-16 0 -28 10.5t-14 26.5zM192 43q27 0 45.5 18.5t18.5 45.5q0 19 -16 47.5t-32 48.5l-16 19q-7 -8 -17.5 -21.5t-28.5 -44t-18 -49.5q0 -27 18.5 -45.5t45.5 -18.5zM327 277l9 86h-288l9 -86h270z" />
+<glyph unicode="&#xf158;" horiz-adv-x="384" d="M0 80l236 236l80 -80l-236 -236h-80v80zM378 298l-39 -39l-80 80l39 39q6 6 15 6t15 -6l50 -50q6 -6 6 -15t-6 -15z" />
+<glyph unicode="&#xf159;" d="M426 277l1 -213q0 -18 -12.5 -30.5t-30.5 -12.5h-341q-18 0 -30.5 12.5t-12.5 30.5v213q0 24 20 37l193 113l193 -113q20 -13 20 -37zM213 171l177 110l-177 103l-176 -103z" />
+<glyph unicode="&#xf15a;" d="M384 363q18 0 30.5 -12.5t12.5 -30.5v-256q0 -18 -12.5 -30.5t-30.5 -12.5h-341q-18 0 -30.5 12.5t-12.5 30.5v256q0 18 12.5 30.5t30.5 12.5h341zM384 277v43l-171 -107l-170 107v-43l170 -106z" />
+<glyph unicode="&#xf15b;" horiz-adv-x="469" d="M235 299q-20 0 -39 -8l-46 46q41 15 84 15q79 0 143 -44.5t92 -115.5q-23 -60 -73 -101l-62 62q7 19 7 39q0 44 -31 75.5t-75 31.5zM21 357l27 27l379 -378l-27 -27l-63 62l-9 9q-45 -18 -93 -18q-79 0 -143 44.5t-92 115.5q25 64 80 106l-10 10zM139 239 q-11 -23 -11 -47q0 -44 31.5 -75.5t75.5 -31.5q24 0 47 12l-33 33q-8 -2 -14 -2q-27 0 -45.5 18.5t-18.5 45.5q0 7 1 14zM231 256h4q26 0 45 -19t19 -45l-1 -4z" />
+<glyph unicode="&#xf15c;" horiz-adv-x="469" d="M235 352q79 0 142.5 -44.5t91.5 -115.5q-28 -71 -91.5 -115.5t-142.5 -44.5t-143 44.5t-92 115.5q28 71 92 115.5t143 44.5zM235 85q44 0 75 31.5t31 75.5t-31 75.5t-75 31.5t-75.5 -31.5t-31.5 -75.5t31.5 -75.5t75.5 -31.5zM234.5 256q26.5 0 45.5 -18.5t19 -45.5 t-19 -45.5t-45.5 -18.5t-45 18.5t-18.5 45.5t18.5 45.5t45 18.5z" />
+<glyph unicode="&#xf15d;" horiz-adv-x="384" d="M378 328q6 -6 6 -15t-6 -15l-67 -67l41 -41l-30 -30l-30 30l-191 -190h-101v101l190 191l-30 30l30 30l41 -41l67 67q6 6 15 6t15 -6zM84 43l172 172l-41 41l-172 -172z" />
+<glyph unicode="&#xf15e;" d="M309 384q50 0 84 -34t34 -83q0 -24 -10 -48.5t-22 -43.5t-40.5 -49t-48 -48.5t-62.5 -56.5l-31 -28l-31 27q-42 39 -62 57.5t-48.5 48.5t-40.5 49t-21.5 43.5t-9.5 48.5q0 49 34 83t83 34q58 0 96 -45q38 45 96 45zM215 52q49 44 71.5 65.5t49.5 51.5t37.5 52.5 t10.5 45.5q0 32 -21.5 53t-53.5 21q-24 0 -45.5 -14t-30.5 -36h-40q-8 22 -29.5 36t-46.5 14q-32 0 -53 -21t-21 -53q0 -23 10 -45.5t37.5 -52.5t50 -51.5t70.5 -65.5l2 -2z" />
+<glyph unicode="&#xf15f;" d="M213 -7l-31 28q-42 38 -62 56.5t-48 48.5t-40.5 49t-22 43.5t-9.5 48.5q0 49 34 83t83 34q58 0 96 -45q38 45 96 45q50 0 84 -34t34 -83q0 -24 -10 -48.5t-22 -43.5t-40.5 -49t-48 -48.5t-62.5 -57.5z" />
+<glyph unicode="&#xf160;" horiz-adv-x="384" d="M149 64v43h86v-43h-86zM0 320h384v-43h-384v43zM64 171v42h256v-42h-256z" />
+<glyph unicode="&#xf161;" horiz-adv-x="341" d="M203 434q64 -52 101 -126t37 -159q0 -70 -50 -120t-120.5 -50t-120.5 50t-50 120q0 108 69 190l-1 -8q0 -33 22.5 -56t55.5 -23q32 0 52 23t20 56q0 21 -3.5 46.5t-7.5 40.5zM164 43q43 0 73 30t30 72q0 45 -13 86q-30 -41 -98 -55q-29 -6 -44.5 -23.5t-15.5 -42.5 q0 -28 20 -47.5t48 -19.5z" />
+<glyph unicode="&#xf162;" horiz-adv-x="320" d="M201 320h119v-213h-149l-9 42h-119v-149h-43v363h192z" />
+<glyph unicode="&#xf163;" horiz-adv-x="469" d="M128 213v-42h-128v42h128zM174 282l-30 -30l-45 46l30 30zM256 427v-128h-43v128h43zM370 298l-45 -46l-30 30l45 46zM341 213h128v-42h-128v42zM234.5 256q26.5 0 45.5 -18.5t19 -45.5t-19 -45.5t-45.5 -18.5t-45 18.5t-18.5 45.5t18.5 45.5t45 18.5zM295 102l30 30 l45 -46l-30 -30zM99 86l45 46l30 -30l-45 -46zM213 -43v128h43v-128h-43z" />
+<glyph unicode="&#xf164;" horiz-adv-x="410" d="M0 405h213l-85 -192h85l-149 -256v192h-64v256zM341 405l69 -192h-41l-15 43h-68l-15 -43h-41l69 192h42zM295 285h50l-25 78z" />
+<glyph unicode="&#xf165;" horiz-adv-x="363" d="M27 384l336 -336l-27 -27l-89 89l-76 -131v192h-64v79l-107 107zM320 235l-33 -57l-180 181v46h213l-85 -170h85z" />
+<glyph unicode="&#xf166;" horiz-adv-x="213" d="M0 405h213l-85 -170h85l-149 -256v192h-64v234z" />
+<glyph unicode="&#xf167;" horiz-adv-x="384" d="M256 0v43h43v-43h-43zM341 256v43h43v-43h-43zM0 341q0 18 12.5 30.5t30.5 12.5h85v-43h-85v-298h85v-43h-85q-18 0 -30.5 12.5t-12.5 30.5v298zM341 384q18 0 30.5 -12.5t12.5 -30.5h-43v43zM171 -43v470h42v-470h-42zM341 85v43h43v-43h-43zM256 341v43h43v-43h-43z M341 171v42h43v-42h-43zM341 0v43h43q0 -18 -12.5 -30.5t-30.5 -12.5z" />
+<glyph unicode="&#xf168;" horiz-adv-x="384" d="M192 -21q0 79 56 135.5t136 56.5q0 -80 -56 -136t-136 -56zM55 229q0 34 31 48q-31 15 -31 48q0 22 16 38t38 16q17 0 30 -10v4q0 22 15.5 38t37.5 16t37.5 -16t15.5 -38v-4q14 10 30 10q22 0 38 -16t16 -38q0 -33 -31 -48q31 -14 31 -48q0 -22 -16 -37.5t-38 -15.5 q-17 0 -30 9v-4q0 -22 -15.5 -37.5t-37.5 -15.5t-37.5 15.5t-15.5 37.5v4q-14 -9 -30 -9q-22 0 -38 15.5t-16 37.5zM192 331q-22 0 -37.5 -16t-15.5 -38t15.5 -37.5t37.5 -15.5t37.5 15.5t15.5 37.5t-15.5 38t-37.5 16zM0 171q80 0 136 -56.5t56 -135.5q-80 0 -136 56 t-56 136z" />
+<glyph unicode="&#xf169;" horiz-adv-x="414" d="M350 183q30 -17 47 -47t17 -63q-29 -17 -63 -17.5t-65 17.5q-9 5 -17 11q2 -10 2 -20q0 -35 -17.5 -64.5t-46.5 -46.5q-29 17 -46.5 46.5t-17.5 64.5q0 10 2 20q-9 -7 -17 -11q-31 -17 -65 -17t-63 17q0 34 17 63.5t47 47.5q8 4 18 8q-10 4 -18 9q-30 17 -47 47t-17 63 q29 17 63 17.5t65 -17.5q8 -4 17 -11q-2 10 -2 20q0 35 17.5 64.5t46.5 46.5q29 -17 46.5 -46.5t17.5 -64.5q0 -10 -2 -20q9 7 17 11q31 18 65 17.5t63 -17.5q0 -33 -17 -63t-47 -47q-8 -5 -18 -9q10 -4 18 -9zM207 107q35 0 60 25t25 60t-25 60t-60 25t-60 -25t-25 -60 t25 -60t60 -25z" />
+<glyph unicode="&#xf16a;" d="M169 160l44 118l44 -118h-88zM384 405q18 0 30.5 -12.5t12.5 -29.5v-342q0 -17 -12.5 -29.5t-30.5 -12.5h-341q-18 0 -30.5 12.5t-12.5 29.5v342q0 17 12.5 29.5t30.5 12.5h341zM298 53h44l-109 278h-40l-109 -278h45l24 64h120z" />
+<glyph unicode="&#xf16b;" horiz-adv-x="469" d="M235 331l42 -54h-85zM363 235l53 -43l-53 -43v86zM107 235v-86l-54 43zM277 107l-42 -54l-43 54h85zM427 384q17 0 29.5 -12.5t12.5 -30.5v-298q0 -18 -12.5 -30.5t-29.5 -12.5h-384q-18 0 -30.5 12.5t-12.5 30.5v298q0 18 12.5 30.5t30.5 12.5h384zM427 42v300h-384 v-300h384z" />
+<glyph unicode="&#xf16c;" horiz-adv-x="299" d="M0 107v42h107v-106h-43v64h-64zM64 277v64h43v-106h-107v42h64zM192 43v106h107v-42h-64v-64h-43zM235 277h64v-42h-107v106h43v-64z" />
+<glyph unicode="&#xf16d;" horiz-adv-x="299" d="M43 149v-64h64v-42h-107v106h43zM0 235v106h107v-42h-64v-64h-43zM256 85v64h43v-106h-107v42h64zM192 341h107v-106h-43v64h-64v42z" />
+<glyph unicode="&#xf16e;" horiz-adv-x="256" d="M256 363v-64h-149l106 -107l-106 -107h149v-64h-256v43l139 128l-139 128v43h256z" />
+<glyph unicode="&#xf16f;" horiz-adv-x="352" d="M336 294q16 -16 16 -38v-203q0 -22 -15.5 -37.5t-37.5 -15.5t-38 15.5t-16 37.5v107h-32v-160h-213v341q0 18 12.5 30.5t30.5 12.5h128q17 0 29.5 -12.5t12.5 -30.5v-149h22q17 0 29.5 -12.5t12.5 -30.5v-96q0 -8 6.5 -14.5t15 -6.5t15 6.5t6.5 14.5v154q-11 -4 -21 -4 q-22 0 -38 15.5t-16 37.5q0 17 9.5 30.5t25.5 19.5l-45 45l22 22l80 -79h-1zM171 235v106h-128v-106h128zM298.5 235q8.5 0 15 6t6.5 15t-6.5 15t-15 6t-15 -6t-6.5 -15t6.5 -15t15 -6z" />
+<glyph unicode="&#xf170;" horiz-adv-x="387" d="M37 301l-37 36q5 6 19 20q26 27 58 27q18 0 35.5 -15t17.5 -46q0 -20 -6 -34t-21 -36q-29 -43 -40 -75q-5 -18 -2.5 -29.5t10.5 -11.5q9 0 24 18q16 17 48 58q18 22 46 41t60 19q42 0 62.5 -27.5t23.5 -61.5h52v-53h-52q-6 -69 -36.5 -100t-63.5 -31q-28 0 -48.5 19.5 t-20.5 46.5q0 33 30 69.5t85 45.5v3q-1 8 -2.5 12.5t-5 10.5t-11 9t-18.5 3q-18 0 -39 -20t-48 -53q-16 -19 -23.5 -28t-19.5 -18.5t-23 -12.5q-30 -10 -56 9q-29 22 -29 64q0 14 6 32.5t15 35.5t16.5 30t15.5 24.5t8 12.5q18 28 7 32q-8 3 -37 -26zM236 52q14 0 27.5 18 t17.5 57q-30 -8 -45.5 -27t-15.5 -32q0 -7 5 -11.5t11 -4.5z" />
+<glyph unicode="&#xf171;" d="M213.5 405q88.5 0 151 -62.5t62.5 -150.5t-62.5 -150.5t-151 -62.5t-151 62.5t-62.5 150.5t62.5 150.5t151 62.5zM361 277q-32 56 -92 76q19 -35 29 -76h63zM213 362q-27 -39 -40 -85h81q-14 46 -41 85zM48 149h72q-3 25 -3 43t3 43h-72q-5 -23 -5 -43t5 -43zM66 107 q32 -56 92 -76q-19 35 -29 76h-63zM129 277q10 41 29 76q-60 -20 -92 -76h63zM213 22q27 39 41 85h-81q13 -46 40 -85zM263 149q4 25 4 43t-4 43h-100q-3 -25 -3 -43t3 -43h100zM269 31q60 20 92 76h-63q-10 -41 -29 -76zM306 149h72q6 23 6 43t-6 43h-72q3 -25 3 -43 t-3 -43z" />
+<glyph unicode="&#xf172;" horiz-adv-x="469" d="M448 363q9 0 15 -6.5t6 -15.5v-85q0 -9 -6 -15t-15 -6h-107q-8 0 -14.5 6t-6.5 15v85q0 9 6.5 15.5t14.5 6.5v10q0 22 16 38t38 16t37.5 -16t15.5 -38v-10zM431 363v10q0 15 -10.5 26t-25.5 11t-26 -11t-11 -26v-10h73zM382 192h44q1 -12 1 -21q0 -89 -62.5 -151.5 t-151 -62.5t-151 62.5t-62.5 151t62.5 151t150.5 62.5q33 0 64 -10v-54q0 -18 -12.5 -30.5t-29.5 -12.5h-43v-42q0 -9 -6.5 -15.5t-14.5 -6.5h-43v-42h128q9 0 15 -6.5t6 -15.5v-64h22q14 0 25 -8t15 -21q45 49 45 115q0 7 -2 21zM192 1v42q-18 0 -30.5 12.5t-12.5 29.5v22 l-102 102q-4 -20 -4 -38q0 -65 42.5 -113.5t106.5 -56.5z" />
+<glyph unicode="&#xf173;" d="M213.5 405q88.5 0 151 -62.5t62.5 -150.5t-62.5 -150.5t-151 -62.5t-151 62.5t-62.5 150.5t62.5 150.5t151 62.5zM192 23v41q-18 0 -30.5 12.5t-12.5 30.5v21l-102 102q-4 -20 -4 -38q0 -65 42.5 -113t106.5 -56zM339 77q45 49 45 115q0 53 -29.5 96t-77.5 62v-9 q0 -17 -12.5 -29.5t-29.5 -12.5h-43v-43q0 -9 -6.5 -15t-14.5 -6h-43v-43h128q9 0 15 -6.5t6 -14.5v-64h22q14 0 25 -8.5t15 -21.5z" />
+<glyph unicode="&#xf174;" horiz-adv-x="469" d="M85 167l150 -82l149 82v-86l-149 -81l-150 81v86zM235 384l234 -128v-171h-42v148l-192 -105l-235 128z" />
+<glyph unicode="&#xf175;" d="M171 21h-107v171h-64l213 192l214 -192h-64v-171h-107v128h-85v-128z" />
+<glyph unicode="&#xf176;" horiz-adv-x="384" d="M384 341v-42l-43 -128l43 -128v-43h-384v43l43 128l-43 128v42h271l31 86l50 -19l-24 -67h56zM277 149v43h-64v64h-42v-64h-64v-43h64v-64h42v64h64z" />
+<glyph unicode="&#xf177;" horiz-adv-x="384" d="M341 384q18 0 30.5 -12.5t12.5 -30.5v-298q0 -18 -12.5 -30.5t-30.5 -12.5h-298q-18 0 -30.5 12.5t-12.5 30.5v298q0 18 12.5 30.5t30.5 12.5h298zM320 149v86h-85v85h-86v-85h-85v-86h85v-85h86v85h85z" />
+<glyph unicode="&#xf178;" horiz-adv-x="469" d="M128 171q-27 0 -45.5 18.5t-18.5 45t18.5 45.5t45.5 19t45.5 -19t18.5 -45.5t-18.5 -45t-45.5 -18.5zM384 299q35 0 60 -25t25 -61v-192h-42v64h-384v-64h-43v320h43v-192h170v150h171z" />
+<glyph unicode="&#xf179;" horiz-adv-x="256" d="M0 405h256v-128v0l-85 -85l85 -85v-1v-127h-256v127v1l85 85l-85 85v0v128zM213 96l-85 85l-85 -85h170zM43 288h170v75h-170v-75z" />
+<glyph unicode="&#xf17a;" horiz-adv-x="256" d="M0 405h256v-128v0l-85 -85l85 -85v-1v-127h-256v127v1l85 85l-85 85v0v128zM213 96l-85 85l-85 -85v-75h170v75zM128 203l85 85v75h-170v-75z" />
+<glyph unicode="&#xf17b;" horiz-adv-x="256" d="M0 405h256v-128v0l-85 -85l85 -85v-1v-127h-256v127v1l85 85l-85 85v0v128z" />
+<glyph unicode="&#xf17c;" horiz-adv-x="469" d="M75 213v43h32v-128h-32v53h-43v-53h-32v128h32v-43h43zM128 224v32h96v-32h-32v-96h-32v96h-32zM245 224v32h96v-32h-32v-96h-32v96h-32zM437 256q13 0 22.5 -9.5t9.5 -22.5v-21q0 -13 -9.5 -22.5t-22.5 -9.5h-42v-43h-32v128h74zM437 203v21h-42v-21h42z" />
+<glyph unicode="&#xf17d;" horiz-adv-x="469" d="M469 64q0 -18 -12.5 -30.5t-29.5 -12.5h-384q-18 0 -30.5 12.5t-12.5 30.5v256q0 18 12.5 30.5t30.5 12.5h384q17 0 29.5 -12.5t12.5 -30.5v-256zM160 181l-75 -96h299l-96 128l-75 -96z" />
+<glyph unicode="&#xf17e;" horiz-adv-x="384" d="M341 384q18 0 30.5 -12.5t12.5 -30.5v-298q0 -18 -12.5 -30.5t-30.5 -12.5h-298q-18 0 -30.5 12.5t-12.5 30.5v298q0 18 12.5 30.5t30.5 12.5h298zM341 43v298h-298v-298h298zM234 186l75 -101h-234l58 76l42 -51z" />
+<glyph unicode="&#xf17f;" horiz-adv-x="384" d="M384 43q0 -18 -12.5 -30.5t-30.5 -12.5h-298q-18 0 -30.5 12.5t-12.5 30.5v298q0 18 12.5 30.5t30.5 12.5h298q18 0 30.5 -12.5t12.5 -30.5v-298zM117 160l-74 -96h298l-96 128l-74 -96z" />
+<glyph unicode="&#xf180;" horiz-adv-x="384" d="M341 384q18 0 30.5 -12.5t12.5 -30.5v-298q0 -18 -12.5 -30.5t-30.5 -12.5h-299q-17 0 -29.5 12.5t-12.5 30.5v298q0 18 12.5 30.5t29.5 12.5h299zM341 128v213h-299v-213h86q0 -27 18.5 -45.5t45.5 -18.5t45.5 18.5t18.5 45.5h85zM277 235l-85 -86l-85 86h42v64h86v-64 h42z" />
+<glyph unicode="&#xf181;" horiz-adv-x="384" d="M377 3l7 -8l-27 -27l-58 58q-46 -38 -107 -38q-71 0 -121 50q-46 46 -49.5 112t37.5 116l-59 59l27 27l59 -59l30 -30l76 -76l134 -134zM192 30v103l-102 102q-26 -34 -26 -77q0 -53 38 -90q37 -38 90 -38zM192 339l-49 -48l-30 30l79 79l121 -121q38 -39 47 -92.5 t-13 -99.5l-155 154v98z" />
+<glyph unicode="&#xf182;" horiz-adv-x="341" d="M291 279q50 -50 50 -121t-50 -120.5t-120.5 -49.5t-120.5 49.5t-50 120.5t50 121l121 121zM171 30v309l-91 -90q-37 -38 -37 -91t37 -90q37 -38 91 -38z" />
+<glyph unicode="&#xf183;" horiz-adv-x="469" d="M249 235h220v-86h-42v-85h-86v85h-92q-14 -37 -47 -61t-74 -24q-53 0 -90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5q41 0 74 -24t47 -61zM128 149q18 0 30.5 12.5t12.5 30.5t-12.5 30.5t-30.5 12.5t-30.5 -12.5t-12.5 -30.5t12.5 -30.5t30.5 -12.5z" />
+<glyph unicode="&#xf184;" horiz-adv-x="405" d="M312 323l93 -131l-93 -131q-13 -18 -35 -18h-234q-18 0 -30.5 12.5t-12.5 29.5v214q0 17 12.5 29.5t30.5 12.5h234q22 0 35 -18zM277 85l76 107l-76 107h-234v-214h234z" />
+<glyph unicode="&#xf185;" horiz-adv-x="405" d="M312 323l93 -131l-93 -131q-13 -18 -35 -18h-234q-18 0 -30.5 12.5t-12.5 29.5v214q0 17 12.5 29.5t30.5 12.5h234q22 0 35 -18z" />
+<glyph unicode="&#xf186;" d="M414 201q13 -13 13 -30.5t-13 -29.5l-149 -150q-13 -12 -30.5 -12t-29.5 12l-192 192q-13 13 -13 30v150q0 17 12.5 29.5t30.5 12.5h149q18 0 30 -12zM74.5 299q13.5 0 23 9t9.5 22.5t-9.5 23t-23 9.5t-22.5 -9.5t-9 -23t9 -22.5t22.5 -9zM326 122q15 16 15 38 t-15.5 37.5t-37.5 15.5t-38 -15l-15 -16l-16 16q-15 15 -38 15q-22 0 -37.5 -15.5t-15.5 -37.5t16 -38l91 -91z" />
+<glyph unicode="&#xf187;" d="M414 201q13 -13 13 -30.5t-13 -29.5l-149 -150q-13 -12 -30.5 -12t-29.5 12l-192 192q-13 13 -13 30v150q0 17 12.5 29.5t30.5 12.5h149q18 0 30 -12zM74.5 299q13.5 0 23 9t9.5 22.5t-9.5 23t-23 9.5t-22.5 -9.5t-9 -23t9 -22.5t22.5 -9z" />
+<glyph unicode="&#xf188;" horiz-adv-x="446" d="M26 29q-16 7 -22.5 23t-0.5 32l52 125v-192zM442 108q7 -16 0 -32.5t-23 -23.5l-157 -65q-8 -3 -16 -3q-29 0 -39 26l-106 256q-4 8 -3 17q0 28 26 38l157 65q8 3 17 3q28 0 39 -26zM140.5 261q8.5 0 15 6.5t6.5 15t-6.5 15t-15 6.5t-15 -6.5t-6.5 -15t6.5 -15t15 -6.5z M98 27v135l73 -178h-31q-17 0 -29.5 12.5t-12.5 30.5z" />
+<glyph unicode="&#xf189;" horiz-adv-x="469" d="M54 52l39 39l30 -30l-39 -39zM213 -31v63h43v-63h-43zM64 224v-43h-64v43h64zM299 313q29 -17 46.5 -46t17.5 -64q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5q0 35 17 64t47 46v103h128v-103zM405 224h64v-43h-64v43zM346 61l30 29l39 -38l-30 -30z" />
+<glyph unicode="&#xf18a;" horiz-adv-x="469" d="M277 320l192 -256h-469l128 171l96 -128l34 25l-61 81z" />
+<glyph unicode="&#xf18b;" d="M380 128l-31 31l26 19l30 -30zM370 229l-51 -40l-168 168l62 48l192 -149zM27 427l400 -400l-27 -27l-81 81l-106 -82l-192 149l35 27l157 -123l76 59l-31 30l-45 -34l-157 122l-35 27l69 54l-90 90z" />
+<glyph unicode="&#xf18c;" horiz-adv-x="384" d="M192 52l157 123l35 -27l-192 -149l-192 149l35 27zM192 107l-157 122l-35 27l192 149l192 -149l-35 -27z" />
+<glyph unicode="&#xf18d;" horiz-adv-x="384" d="M192 202q81 75 192 75v-234q-110 0 -192 -76q-81 76 -192 76v234q111 0 192 -75zM192 277q-27 0 -45.5 19t-18.5 45.5t18.5 45t45.5 18.5t45.5 -18.5t18.5 -45t-18.5 -45.5t-45.5 -19z" />
+<glyph unicode="&#xf18e;" d="M41 192q0 -27 19 -46.5t47 -19.5h85v-41h-85q-44 0 -75.5 31.5t-31.5 75.5t31.5 75.5t75.5 31.5h85v-41h-85q-28 0 -47 -19.5t-19 -46.5zM128 171v42h171v-42h-171zM320 299q44 0 75.5 -31.5t31.5 -75.5t-31.5 -75.5t-75.5 -31.5h-85v41h85q27 0 46.5 19.5t19.5 46.5 t-19.5 46.5t-46.5 19.5h-85v41h85z" />
+<glyph unicode="&#xf18f;" horiz-adv-x="341" d="M170.5 85q-17.5 0 -30 12.5t-12.5 30.5t12.5 30.5t30 12.5t30 -12.5t12.5 -30.5t-12.5 -30.5t-30 -12.5zM299 277q17 0 29.5 -12.5t12.5 -29.5v-214q0 -17 -12.5 -29.5t-29.5 -12.5h-256q-18 0 -30.5 12.5t-12.5 29.5v214q0 17 12.5 29.5t30.5 12.5h194v43 q0 27 -19.5 46.5t-47 19.5t-46.5 -19.5t-19 -46.5h-41q0 44 31.5 75.5t75.5 31.5t75 -31.5t31 -75.5v-43h22zM299 21v214h-256v-214h256z" />
+<glyph unicode="&#xf190;" horiz-adv-x="341" d="M299 277q17 0 29.5 -12.5t12.5 -29.5v-214q0 -17 -12.5 -29.5t-29.5 -12.5h-256q-18 0 -30.5 12.5t-12.5 29.5v214q0 17 12.5 29.5t30.5 12.5h21v43q0 44 31.5 75.5t75.5 31.5t75 -31.5t31 -75.5v-43h22zM170.5 386q-27.5 0 -46.5 -19.5t-19 -46.5h2v-43h130v43 q0 27 -19.5 46.5t-47 19.5zM299 21v214h-256v-214h256zM170.5 85q-17.5 0 -30 12.5t-12.5 30.5t12.5 30.5t30 12.5t30 -12.5t12.5 -30.5t-12.5 -30.5t-30 -12.5z" />
+<glyph unicode="&#xf191;" horiz-adv-x="341" d="M299 277q17 0 29.5 -12.5t12.5 -29.5v-214q0 -17 -12.5 -29.5t-29.5 -12.5h-256q-18 0 -30.5 12.5t-12.5 29.5v214q0 17 12.5 29.5t30.5 12.5h21v43q0 44 31.5 75.5t75.5 31.5t75 -31.5t31 -75.5v-43h22zM170.5 85q17.5 0 30 12.5t12.5 30.5t-12.5 30.5t-30 12.5 t-30 -12.5t-12.5 -30.5t12.5 -30.5t30 -12.5zM237 277v43q0 27 -19.5 46.5t-47 19.5t-46.5 -19.5t-19 -46.5v-43h132z" />
+<glyph unicode="&#xf192;" horiz-adv-x="512" d="M149 277l-85 -85l85 -85v-64l-149 149l149 149v-64zM277 256q54 -8 96.5 -30.5t69.5 -55.5t43.5 -69.5t25.5 -79.5q-78 109 -235 109v-87l-149 149l149 149v-85z" />
+<glyph unicode="&#xf193;" horiz-adv-x="384" d="M149 256q54 -8 96.5 -30.5t69.5 -55.5t43.5 -69.5t25.5 -79.5q-78 109 -235 109v-87l-149 149l149 149v-85z" />
+<glyph unicode="&#xf194;" horiz-adv-x="448" d="M0 0v149l320 43l-320 43v149l448 -192z" />
+<glyph unicode="&#xf195;" horiz-adv-x="384" d="M341 320q18 0 30.5 -12.5t12.5 -30.5v-256q0 -17 -12.5 -29.5t-30.5 -12.5h-298q-18 0 -30.5 12.5t-12.5 29.5v256q0 18 12.5 30.5t30.5 12.5h42q0 44 31.5 75.5t75.5 31.5t75.5 -31.5t31.5 -75.5h42zM192 384q-27 0 -45.5 -18.5t-18.5 -45.5h128q0 27 -18.5 45.5 t-45.5 18.5zM192 171q44 0 75.5 31t31.5 75h-43q0 -26 -18.5 -45t-45.5 -19t-45.5 19t-18.5 45h-43q0 -44 31.5 -75t75.5 -31z" />
+<glyph unicode="&#xf196;" horiz-adv-x="384" d="M373 384q11 0 11 -11v-322q0 -8 -8 -10l-120 -41l-128 45l-114 -44l-3 -1q-11 0 -11 11v322q0 8 8 10l120 41l128 -45l114 44zM256 43v253l-128 45v-253z" />
+<glyph unicode="&#xf197;" horiz-adv-x="432" d="M0 48v48h432v-48h-432zM0 168v48h432v-48h-432zM0 336h432v-48h-432v48z" />
+<glyph unicode="&#xf198;" d="M192 85v22h-43v42h86v22h-64q-9 0 -15.5 6t-6.5 15v64q0 9 6.5 15t15.5 6h21v22h43v-22h42v-42h-85v-22h64q9 0 15 -6t6 -15v-64q0 -9 -6 -15t-15 -6h-21v-22h-43zM384 363q18 0 30.5 -12.5t12.5 -30.5v-256q0 -18 -12.5 -30.5t-30.5 -12.5h-341q-18 0 -30.5 12.5 t-12.5 30.5v256q0 18 12.5 30.5t30.5 12.5h341zM384 64v256h-341v-256h341z" />
+<glyph unicode="&#xf199;" horiz-adv-x="339" d="M180 301q-18 0 -32 -6l-32 31q15 8 32 12v46h64v-47q32 -8 49.5 -30t19.5 -51h-48q-2 45 -53 45zM27 361l312 -312l-27 -27l-48 48q-19 -18 -52 -24v-46h-64v46q-33 7 -55 28t-23 54h46q5 -45 64 -45q38 0 52 20l-75 74q-84 25 -84 84l-73 73z" />
+<glyph unicode="&#xf19a;" horiz-adv-x="217" d="M117 215q46 -11 73 -32t27 -61q0 -32 -20.5 -51t-53.5 -25v-46h-64v46q-34 7 -55.5 28t-23.5 54h47q4 -45 64 -45q31 0 44 12t13 26q0 17 -13.5 30t-50.5 22q-100 24 -100 88q0 29 21 49.5t54 27.5v46h64v-47q32 -8 49.5 -30t18.5 -51h-47q-2 45 -53 45q-27 0 -42.5 -11 t-15.5 -29q0 -15 14 -25.5t50 -20.5z" />
+<glyph unicode="&#xf19b;" horiz-adv-x="85" d="M42.5 277q-17.5 0 -30 12.5t-12.5 30.5t12.5 30.5t30 12.5t30 -12.5t12.5 -30.5t-12.5 -30.5t-30 -12.5zM42.5 235q17.5 0 30 -12.5t12.5 -30.5t-12.5 -30.5t-30 -12.5t-30 12.5t-12.5 30.5t12.5 30.5t30 12.5zM42.5 107q17.5 0 30 -12.5t12.5 -30.5t-12.5 -30.5 t-30 -12.5t-30 12.5t-12.5 30.5t12.5 30.5t30 12.5z" />
+<glyph unicode="&#xf19c;" horiz-adv-x="341" d="M42.5 235q17.5 0 30 -12.5t12.5 -30.5t-12.5 -30.5t-30 -12.5t-30 12.5t-12.5 30.5t12.5 30.5t30 12.5zM298.5 235q17.5 0 30 -12.5t12.5 -30.5t-12.5 -30.5t-30 -12.5t-30 12.5t-12.5 30.5t12.5 30.5t30 12.5zM170.5 235q17.5 0 30 -12.5t12.5 -30.5t-12.5 -30.5 t-30 -12.5t-30 12.5t-12.5 30.5t12.5 30.5t30 12.5z" />
+<glyph unicode="&#xf19d;" horiz-adv-x="341" d="M299 384h42v-384h-42v43h-43v-43h-171v43h-42v-43h-43v384h43v-43h42v43h171v-43h43v43zM85 85v43h-42v-43h42zM85 171v42h-42v-42h42zM85 256v43h-42v-43h42zM299 85v43h-43v-43h43zM299 171v42h-43v-42h43zM299 256v43h-43v-43h43z" />
+<glyph unicode="&#xf19e;" d="M341 363h86v-299q0 -18 -12.5 -30.5t-30.5 -12.5h-341q-18 0 -30.5 12.5t-12.5 30.5v256q0 18 12.5 30.5t30.5 12.5h21l43 -86h64l-43 86h43l42 -86h64l-42 86h42l43 -86h64z" />
+<glyph unicode="&#xf19f;" horiz-adv-x="430" d="M430 252q0 -57 -37.5 -99t-93.5 -49v-83h64v-42h-342v106h-21v86q0 8 6.5 14.5t14.5 6.5h64q9 0 15.5 -6.5t6.5 -14.5v-86h-22v-64h171v84q-53 9 -88.5 50.5t-35.5 96.5q0 62 43.5 106t105.5 44t105.5 -44t43.5 -106zM53.5 213q-13.5 0 -23 9.5t-9.5 23t9.5 22.5t23 9 t22.5 -9t9 -22.5t-9 -23t-22.5 -9.5z" />
+<glyph unicode="&#xf1a0;" horiz-adv-x="302" d="M171 104v-83h128v-42h-299v42h128v84q-53 9 -88.5 50.5t-35.5 96.5q0 62 43.5 106t105.5 44t105.5 -44t43.5 -106q0 -57 -37.5 -99t-93.5 -49z" />
+<glyph unicode="&#xf1a1;" horiz-adv-x="320" d="M160 405l160 -390l-15 -15l-145 64l-145 -64l-15 15z" />
+<glyph unicode="&#xf1a2;" horiz-adv-x="384" d="M341 363q18 0 30.5 -12.5t12.5 -30.5v-256q0 -18 -12.5 -30.5t-30.5 -12.5h-85v43h85v213h-298v-213h85v-43h-85q-18 0 -30.5 12.5t-12.5 30.5v256q0 18 12.5 30.5t30.5 12.5h298zM192 235l85 -86h-64v-128h-42v128h-64z" />
+<glyph unicode="&#xf1a3;" horiz-adv-x="384" d="M341 43v149h43v-149q0 -18 -12.5 -30.5t-30.5 -12.5h-298q-18 0 -30.5 12.5t-12.5 30.5v298q0 18 12.5 30.5t30.5 12.5h149v-43h-149v-298h298zM235 384h149v-149h-43v76l-209 -209l-30 30l209 209h-76v43z" />
+<glyph unicode="&#xf1a4;" horiz-adv-x="384" d="M192 384q80 0 136 -50t56 -121q0 -44 -31.5 -75t-75.5 -31h-37q-14 0 -23 -9.5t-9 -22.5q0 -12 8 -21q8 -10 8 -22q0 -13 -9.5 -22.5t-22.5 -9.5q-80 0 -136 56t-56 136t56 136t136 56zM74.5 192q13.5 0 23 9.5t9.5 22.5t-9.5 22.5t-23 9.5t-22.5 -9.5t-9 -22.5t9 -22.5 t22.5 -9.5zM138.5 277q13.5 0 23 9.5t9.5 23t-9.5 22.5t-23 9t-22.5 -9t-9 -22.5t9 -23t22.5 -9.5zM245.5 277q13.5 0 22.5 9.5t9 23t-9 22.5t-22.5 9t-23 -9t-9.5 -22.5t9.5 -23t23 -9.5zM309.5 192q13.5 0 22.5 9.5t9 22.5t-9 22.5t-22.5 9.5t-23 -9.5t-9.5 -22.5 t9.5 -22.5t23 -9.5z" />
+<glyph unicode="&#xf1a5;" horiz-adv-x="277" d="M149 384q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5h-64v-128h-85v384h149zM154 213q17 0 29.5 12.5t12.5 30.5t-12.5 30.5t-29.5 12.5h-69v-86h69z" />
+<glyph unicode="&#xf1a6;" horiz-adv-x="384" d="M341 405q18 0 30.5 -12.5t12.5 -29.5v-299q0 -18 -12.5 -30.5t-30.5 -12.5h-85l-64 -64l-64 64h-85q-18 0 -30.5 12.5t-12.5 30.5v299q0 17 12.5 29.5t30.5 12.5h298zM192 335q-24 0 -41 -17t-17 -41t17 -40.5t41 -16.5t41 16.5t17 40.5t-17 41t-41 17zM320 107v19 q0 20 -23.5 35.5t-52.5 23t-52 7.5t-52 -7.5t-52.5 -23t-23.5 -35.5v-19h256z" />
+<glyph unicode="&#xf1a7;" horiz-adv-x="384" d="M341 405q18 0 30.5 -12.5t12.5 -29.5v-299q0 -18 -12.5 -30.5t-30.5 -12.5h-85l-64 -64l-64 64h-85q-18 0 -30.5 12.5t-12.5 30.5v299q0 17 12.5 29.5t30.5 12.5h298zM232 173l88 40l-88 40l-40 88l-40 -88l-88 -40l88 -40l40 -88z" />
+<glyph unicode="&#xf1a8;" horiz-adv-x="299" d="M277 277q0 -27 -13 -61t-32 -63t-37.5 -55t-31.5 -40l-14 -15q-5 5 -13.5 15t-30.5 39t-39 56.5t-31 62t-14 61.5q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM107 277.5q0 -17.5 12.5 -30t30 -12.5t30 12.5t12.5 30t-12.5 30t-30 12.5t-30 -12.5t-12.5 -30zM0 21 h299v-42h-299v42z" />
+<glyph unicode="&#xf1a9;" horiz-adv-x="384" d="M341 405q18 0 30.5 -12.5t12.5 -29.5v-299q0 -18 -12.5 -30.5t-30.5 -12.5h-85l-64 -64l-64 64h-85q-18 0 -30.5 12.5t-12.5 30.5v299q0 17 12.5 29.5t30.5 12.5h298zM213 64v43h-42v-43h42zM257 229q20 20 20 48q0 36 -25 61t-60 25t-60 -25t-25 -61h42q0 18 12.5 30.5 t30.5 12.5t30.5 -12.5t12.5 -30.5q0 -17 -13 -30l-26 -27q-25 -25 -25 -60v-11h42q0 22 6 34.5t19 26.5z" />
+<glyph unicode="&#xf1aa;" horiz-adv-x="384" d="M213 309q-23 0 -39 -18l-68 68q44 46 107 46q62 0 106 -43.5t44 -105.5q0 -48 -37 -117l-77 78q18 16 18 39q0 22 -16 37.5t-38 15.5zM307 105l77 -78l-27 -27l-72 71q-16 -23 -34 -46.5t-28 -34.5l-10 -11q-6 6 -16 18t-35.5 46.5t-45.5 67t-36 73.5t-16 72q0 16 4 33 l-68 68l27 27l178 -178l3 -3z" />
+<glyph unicode="&#xf1ab;" horiz-adv-x="299" d="M149 405q62 0 106 -43.5t44 -105.5q0 -31 -15.5 -71.5t-37.5 -75t-44 -65t-37 -48.5l-16 -17q-6 6 -16 18t-35.5 46.5t-45.5 67t-36 73.5t-16 72q0 62 43.5 105.5t105.5 43.5zM149 203q22 0 38 15.5t16 37.5t-16 37.5t-38 15.5t-37.5 -15.5t-15.5 -37.5t15.5 -37.5 t37.5 -15.5z" />
+<glyph unicode="&#xf1ac;" horiz-adv-x="384" d="M192 405q56 0 105.5 -22.5t86.5 -62.5l-192 -341l-192 341q36 40 86 62.5t106 22.5zM85 298.5q0 -17.5 12.5 -30t30 -12.5t30 12.5t12.5 30t-12.5 30t-30 12.5t-30 -12.5t-12.5 -30zM191.5 128q17.5 0 30 12.5t12.5 30t-12.5 30t-30 12.5t-30 -12.5t-12.5 -30t12.5 -30 t30 -12.5z" />
+<glyph unicode="&#xf1ad;" horiz-adv-x="428" d="M336 192l86 -85q6 -7 6 -15.5t-6 -14.5l-93 -93q-6 -6 -15 -6t-15 6l-85 85l-85 -85q-6 -6 -15 -6t-15 6l-93 93q-6 6 -6 14.5t6 15.5l85 85l-85 84q-6 7 -6 15.5t6 15.5l93 92q6 6 14.5 6t15.5 -6l85 -85l85 85q6 6 15 6t15 -6l92 -92q7 -7 7 -15.5t-7 -15.5zM214 256 q-9 0 -15 -6.5t-6 -15t6 -15t15 -6.5t15.5 6.5t6.5 15t-6.5 15t-15.5 6.5zM114 214l77 78l-77 77l-78 -78zM171.5 171q8.5 0 15 6t6.5 15t-6.5 15t-15 6t-15 -6t-6.5 -15t6.5 -15t15 -6zM214 128q9 0 15.5 6.5t6.5 15t-6.5 15t-15.5 6.5t-15 -6.5t-6 -15t6 -15t15 -6.5z M257 213q-9 0 -15 -6t-6 -15t6 -15t15 -6t15 6t6 15t-6 15t-15 6zM314 14l77 78l-77 77l-78 -78z" />
+<glyph unicode="&#xf1ae;" horiz-adv-x="341" d="M64 -64v43h43v-43h-43zM149 -64v43h43v-43h-43zM192 405v-213h-43v213h43zM268 353q34 -23 53.5 -60t19.5 -80q0 -70 -50 -120t-120.5 -50t-120.5 50t-50 120q0 43 19.5 80t53.5 60l31 -30q-28 -18 -44.5 -47t-16.5 -63q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5 q0 34 -17 63t-45 46zM235 -64v43h42v-43h-42z" />
+<glyph unicode="&#xf1af;" horiz-adv-x="384" d="M213 384v-213h-42v213h42zM316 338q68 -58 68 -146q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 88 68 146l30 -30q-55 -45 -55 -116q0 -62 43.5 -105.5t105.5 -43.5t105.5 43.5t43.5 105.5q0 71 -55 115z" />
+<glyph unicode="&#xf1b0;" d="M363 277q26 0 45 -18.5t19 -45.5v-128h-86v-85h-256v85h-85v128q0 27 18.5 45.5t45.5 18.5h299zM299 43v106h-171v-106h171zM362.5 192q8.5 0 15 6.5t6.5 15t-6.5 15t-15 6.5t-15 -6.5t-6.5 -15t6.5 -15t15 -6.5zM341 384v-85h-256v85h256z" />
+<glyph unicode="&#xf1b1;" horiz-adv-x="448" d="M395 213q22 0 37.5 -15.5t15.5 -37.5t-15.5 -37.5t-37.5 -15.5h-32v-86q0 -17 -12.5 -29.5t-30.5 -12.5h-81v32q0 24 -17 40.5t-41 16.5t-40.5 -16.5t-16.5 -40.5v-32h-81q-18 0 -30.5 12.5t-12.5 29.5v81h32q24 0 41 17t17 41t-17 41t-41 17h-32v81q0 17 12.5 29.5 t30.5 12.5h85v32q0 22 15.5 38t37.5 16t38 -16t16 -38v-32h85q18 0 30.5 -12.5t12.5 -29.5v-86h32z" />
+<glyph unicode="&#xf1b2;" horiz-adv-x="299" d="M21 85l43 86h-64v128h128v-128l-43 -86h-64zM192 85l43 86h-64v128h128v-128l-43 -86h-64z" />
+<glyph unicode="&#xf1b3;" horiz-adv-x="341" d="M0 117v224q0 27 12.5 45t38 26.5t53 11.5t67 3t67 -3t53 -11.5t38 -26.5t12.5 -45v-224q0 -31 -21.5 -52.5t-52.5 -21.5l32 -32v-11h-256v11l32 32q-31 0 -53 21.5t-22 52.5zM170.5 85q17.5 0 30 12.5t12.5 30.5t-12.5 30.5t-30 12.5t-30 -12.5t-12.5 -30.5t12.5 -30.5 t30 -12.5zM299 235v106h-256v-106h256z" />
+<glyph unicode="&#xf1b4;" horiz-adv-x="384" d="M320 85v43h-256v-43h256zM320 171v42h-256v-42h256zM320 256v43h-256v-43h256zM0 -21v426l32 -32l32 32l32 -32l32 32l32 -32l32 32l32 -32l32 32l32 -32l32 32l32 -32l32 32v-426l-32 32l-32 -32l-32 32l-32 -32l-32 32l-32 -32l-32 32l-32 -32l-32 32l-32 -32l-32 32z " />
+<glyph unicode="&#xf1b5;" horiz-adv-x="469" d="M384 277l85 -85h-64q0 -71 -50 -121t-120 -50q-49 0 -91 27l31 31q27 -15 60 -15q53 0 90.5 37.5t37.5 90.5h-64zM107 192h64l-86 -85l-85 85h64q0 71 50 121t121 50q49 0 91 -27l-32 -31q-27 15 -59 15q-53 0 -90.5 -37.5t-37.5 -90.5z" />
+<glyph unicode="&#xf1b6;" horiz-adv-x="384" d="M0 192q0 59 36 105t92 60v-44q-38 -14 -61.5 -47t-23.5 -74q0 -53 37 -90l48 47v-128h-128l50 51q-50 50 -50 120zM171 85v43h42v-43h-42zM384 363l-50 -51q50 -50 50 -120q0 -59 -36 -105t-92 -60v44q38 14 61.5 47t23.5 74q0 53 -37 90l-48 -47v128h128zM171 171v128 h42v-128h-42z" />
+<glyph unicode="&#xf1b7;" horiz-adv-x="366" d="M152 313q-5 -2 -16 -8l-31 32q22 14 47 20v-44zM0 333l27 27l335 -336l-27 -27l-50 50q-22 -14 -48 -20v44q7 3 17 8l-173 172q-14 -28 -14 -59q0 -53 38 -90l47 47v-128h-128l51 51q-51 50 -51 120q0 49 26 90zM366 363l-51 -51q51 -50 51 -120q0 -49 -26 -90l-32 31 q15 28 15 59q0 53 -38 90l-47 -47v128h128z" />
+<glyph unicode="&#xf1b8;" horiz-adv-x="341" d="M171 363q70 0 120 -50t50 -121q0 -49 -26 -91l-31 31q15 28 15 60q0 53 -37.5 90.5t-90.5 37.5v-64l-86 85l86 86v-64zM171 64v64l85 -85l-85 -86v64q-71 0 -121 50t-50 121q0 49 26 91l32 -31q-15 -28 -15 -60q0 -53 37.5 -90.5t90.5 -37.5z" />
+<glyph unicode="&#xf1b9;" horiz-adv-x="341" d="M171 320q-53 0 -90.5 -37.5t-37.5 -90.5q0 -32 15 -60l-32 -31q-26 42 -26 91q0 71 50 121t121 50v64l85 -86l-85 -85v64zM315 283q26 -42 26 -91q0 -71 -50 -121t-120 -50v-64l-86 86l86 85v-64q53 0 90.5 37.5t37.5 90.5q0 31 -15 60z" />
+<glyph unicode="&#xf1ba;" horiz-adv-x="363" d="M299 363h64v-171h-171v-192q0 -9 -6.5 -15t-14.5 -6h-43q-9 0 -15 6t-6 15v235h213v85h-21v-21q0 -9 -6.5 -15.5t-15.5 -6.5h-256q-8 0 -14.5 6.5t-6.5 15.5v85q0 9 6.5 15t14.5 6h256q9 0 15.5 -6t6.5 -15v-21z" />
+<glyph unicode="&#xf1bb;" horiz-adv-x="469" d="M427 320q17 0 29.5 -12.5t12.5 -30.5v-170q0 -18 -12.5 -30.5t-29.5 -12.5h-384q-18 0 -30.5 12.5t-12.5 30.5v170q0 18 12.5 30.5t30.5 12.5h384zM427 107v170h-43v-85h-43v85h-42v-85h-43v85h-43v-85h-42v85h-43v-85h-43v85h-42v-170h384z" />
+<glyph unicode="&#xf1bc;" d="M163 285l264 -264v-21h-64l-150 149l-50 -50q8 -17 8 -35q0 -35 -25 -60t-60.5 -25t-60.5 25t-25 60t25 60t60 25q19 0 35 -7l51 50l-51 50q-16 -7 -35 -7q-35 0 -60 25t-25 60t25 60t60.5 25t60.5 -25t25 -60q0 -18 -8 -35zM85.5 277q17.5 0 30 12.5t12.5 30.5 t-12.5 30.5t-30 12.5t-30 -12.5t-12.5 -30.5t12.5 -30.5t30 -12.5zM85.5 21q17.5 0 30 12.5t12.5 30.5t-12.5 30.5t-30 12.5t-30 -12.5t-12.5 -30.5t12.5 -30.5t30 -12.5zM213.5 181q10.5 0 10.5 11t-10.5 11t-10.5 -11t10.5 -11zM363 384h64v-21l-150 -150l-42 43z" />
+<glyph unicode="&#xf1bd;" horiz-adv-x="484" d="M475 176q9 -10 9 -23t-9 -23l-136 -135q-9 -10 -22.5 -10t-22.5 10l-257 256q-9 9 -9 22.5t9 22.5l136 136q9 9 22.5 9t22.5 -9l53 -52l-31 -30l-44 44l-121 -120l241 -242l121 121l-47 47l30 30zM159 11l29 28l81 -81l-14 -1q-100 0 -173.5 68t-81.5 167h32 q6 -60 40 -108t87 -73zM320 256q-9 0 -15 6.5t-6 14.5v86q0 8 6 14.5t15 6.5v11q0 22 15.5 37.5t37.5 15.5t38 -15.5t16 -37.5v-11q8 0 14.5 -6.5t6.5 -14.5v-86q0 -8 -6.5 -14.5t-14.5 -6.5h-107zM337 395v-11h73v11q0 15 -11 25.5t-26 10.5t-25.5 -10.5t-10.5 -25.5z" />
+<glyph unicode="&#xf1be;" horiz-adv-x="510" d="M351 394l-29 -28l-81 81l14 1q100 0 173.5 -68t81.5 -167h-32q-6 60 -40.5 108t-86.5 73zM217 411l257 -257q9 -9 9 -22.5t-9 -22.5l-136 -136q-9 -9 -22.5 -9t-22.5 9l-257 257q-9 9 -9 22.5t9 22.5l136 136q9 9 22.5 9t22.5 -9zM315 -4l136 136l-256 256l-136 -136z M159 -10l29 28l81 -81l-14 -1q-100 0 -173.5 68t-81.5 167h32q6 -60 40 -108t87 -73z" />
+<glyph unicode="&#xf1bf;" d="M320 149l107 -106l-32 -32l-107 107v16l-6 6q-39 -33 -90 -33q-38 0 -70 19l31 31q19 -8 39 -8q40 0 68 28.5t28 68t-28 67.5t-68 28t-68 -28t-28 -68h75l-89 -85l-82 85h54q0 57 40.5 98t97.5 41q58 0 98.5 -40.5t40.5 -98.5q0 -51 -34 -90l6 -6h17z" />
+<glyph unicode="&#xf1c0;" horiz-adv-x="341" d="M341 30l-81 82q17 27 17 59q0 44 -31 75t-75 31t-75.5 -31t-31.5 -75t31.5 -75.5t75.5 -31.5q31 0 59 18l94 -95q-12 -8 -25 -8h-257q-17 0 -29.5 12.5t-12.5 29.5v342q0 17 12.5 29.5t30.5 12.5h170l128 -128v-247zM107 170.5q0 26.5 18.5 45.5t45 19t45.5 -19t19 -45.5 t-19 -45t-45.5 -18.5t-45 18.5t-18.5 45z" />
+<glyph unicode="&#xf1c1;" d="M203 256q22 0 37.5 -15.5t15.5 -37.5t-15.5 -38t-37.5 -16t-38 16t-16 38t16 37.5t38 15.5zM384 363q18 0 30.5 -12.5t12.5 -30.5v-256q0 -18 -12.5 -30.5t-30.5 -12.5h-341q-18 0 -30.5 12.5t-12.5 30.5v256q0 18 12.5 30.5t30.5 12.5h341zM316 60l30 30l-62 62 q15 23 15 51q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t67 -28q28 0 51 15z" />
+<glyph unicode="&#xf1c2;" horiz-adv-x="373" d="M149 320q-38 0 -67.5 -24.5t-36.5 -60.5h-43q8 54 49.5 91t97.5 37q62 0 106 -44l44 44v-128h-128l54 54q-32 31 -76 31zM270 125l103 -104l-32 -31l-103 103q-40 -29 -89 -29q-62 0 -105 44l-44 -44v128h128l-54 -54q31 -31 75 -31q39 0 68 24t37 61h43q-5 -37 -27 -67z " />
+<glyph unicode="&#xf1c3;" horiz-adv-x="373" d="M267 149l106 -106l-32 -32l-106 106v17l-6 6q-39 -33 -90 -33q-58 0 -98.5 40.5t-40.5 98t40.5 98t98 40.5t98 -40.5t40.5 -98.5q0 -51 -33 -90l6 -6h17zM139 149q40 0 68 28t28 68t-28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28z" />
+<glyph unicode="&#xf1c4;" d="M43 64v64h341v-128h-64v64h-213v-64h-64v64zM363 235h64v-64h-64v64zM0 235h64v-64h-64v64zM320 171h-213v170q0 18 12.5 30.5t29.5 12.5h128q18 0 30.5 -12.5t12.5 -30.5v-170z" />
+<glyph unicode="&#xf1c5;" horiz-adv-x="384" d="M192 235q18 0 30.5 -12.5t12.5 -30.5t-12.5 -30.5t-30.5 -12.5t-30.5 12.5t-12.5 30.5t12.5 30.5t30.5 12.5zM341 384q18 0 30.5 -12.5t12.5 -30.5v-298q0 -18 -12.5 -30.5t-30.5 -12.5h-298q-18 0 -30.5 12.5t-12.5 30.5v298q0 18 12.5 30.5t30.5 12.5h298zM304 192 q0 7 -1 15l32 24q4 5 1 10l-30 52q-3 5 -9 3l-37 -15q-12 9 -25 15l-6 39q-1 6 -7 6h-60q-6 0 -7 -6l-6 -40q-14 -5 -25 -14l-37 15q-6 2 -9 -4l-30 -51q-3 -6 1 -10l32 -24q-1 -8 -1 -15t1 -15l-32 -24q-4 -5 -1 -10l30 -52q3 -5 9 -3l37 15q12 -9 25 -15l6 -39q1 -6 7 -6 h60q6 0 7 6l6 40q14 5 25 14l37 -15q6 -2 9 4l30 51q3 6 -1 10l-32 24q1 8 1 15z" />
+<glyph unicode="&#xf1c6;" horiz-adv-x="415" d="M366 171l45 -35q7 -6 3 -14l-43 -74q-4 -8 -13 -4l-53 21q-18 -13 -36 -21l-8 -56q-1 -9 -11 -9h-85q-9 0 -11 9l-8 56q-19 8 -36 21l-53 -21q-9 -3 -13 4l-43 74q-4 8 3 14l45 35q-1 12 -1 21t1 21l-45 35q-7 6 -3 14l43 74q5 8 13 4l53 -21q18 13 36 21l8 56q2 9 11 9 h85q10 0 11 -9l8 -56q19 -8 36 -21l53 21q9 3 13 -4l43 -74q4 -8 -3 -14l-45 -35q2 -12 2 -21t-2 -21zM207.5 117q30.5 0 52.5 22t22 53t-22 53t-52.5 22t-52.5 -22t-22 -53t22 -53t52.5 -22z" />
+<glyph unicode="&#xf1c7;" horiz-adv-x="384" d="M192 427l192 -86v-128q0 -89 -55 -162.5t-137 -93.5q-82 20 -137 93.5t-55 162.5v128zM149 85l171 171l-30 30l-141 -140l-55 55l-30 -30z" />
+<glyph unicode="&#xf1c8;" horiz-adv-x="384" d="M192 427l192 -86v-128q0 -89 -55 -162.5t-137 -93.5q-82 20 -137 93.5t-55 162.5v128zM192 192v188l-149 -66v-122h149v-191q59 19 100 72t49 119h-149z" />
+<glyph unicode="&#xf1c9;" horiz-adv-x="469" d="M346 256h102q9 0 15 -6.5t6 -14.5v-6l-54 -198q-4 -13 -15.5 -22t-26.5 -9h-277q-15 0 -26 9t-15 22l-54 198q-1 2 -1 6q0 8 6.5 14.5t14.5 6.5h103l93 140q6 9 17.5 9t17.5 -9zM171 256h128l-64 94zM234.5 85q17.5 0 30 12.5t12.5 30.5t-12.5 30.5t-30 12.5t-30 -12.5 t-12.5 -30.5t12.5 -30.5t30 -12.5z" />
+<glyph unicode="&#xf1ca;" horiz-adv-x="430" d="M213 256v64h-64v43h64v64h43v-64h64v-43h-64v-64h-43zM128 64q18 0 30.5 -12.5t12.5 -30t-12.5 -30t-30.5 -12.5t-30 12.5t-12 30t12 30t30 12.5zM341.5 64q17.5 0 30 -12.5t12.5 -30t-12.5 -30t-30 -12.5t-30 12.5t-12.5 30t12.5 30t30 12.5zM132 133q0 -5 5 -5h247v-43 h-256q-18 0 -30.5 12.5t-12.5 30.5q0 11 6 20l28 53l-76 162h-43v42h70l20 -42l20 -43l48 -101l3 -6h149l59 107l24 43l37 -21l-82 -149q-12 -22 -38 -22h-159l-19 -35v-3z" />
+<glyph unicode="&#xf1cb;" d="M128 64q18 0 30.5 -12.5t12.5 -30t-12.5 -30t-30.5 -12.5t-30 12.5t-12 30t12 30t30 12.5zM0 405h70l20 -42h315q9 0 15.5 -6.5t6.5 -15.5q0 -5 -3 -10l-76 -138q-12 -22 -38 -22h-159l-19 -35v-3q0 -5 5 -5h247v-43h-256q-18 0 -30.5 12.5t-12.5 30.5q0 11 6 20l28 53 l-76 162h-43v42zM341.5 64q17.5 0 30 -12.5t12.5 -30t-12.5 -30t-30 -12.5t-30 12.5t-12.5 30t12.5 30t30 12.5z" />
+<glyph unicode="&#xf1cc;" horiz-adv-x="384" d="M151 115l55 56h-206v42h206l-55 56l30 30l107 -107l-107 -107zM341 384q18 0 30.5 -12.5t12.5 -30.5v-298q0 -18 -12.5 -30.5t-30.5 -12.5h-298q-18 0 -30.5 12.5t-12.5 30.5v85h43v-85h298v298h-298v-85h-43v85q0 18 12.5 30.5t30.5 12.5h298z" />
+<glyph unicode="&#xf1cd;" horiz-adv-x="384" d="M0 320h128v-43h-128v43zM0 64v43h384v-43h-384zM0 213h256v-42h-256v42z" />
+<glyph unicode="&#xf1ce;" horiz-adv-x="384" d="M0 64v43h128v-43h-128zM0 320h384v-43h-384v43zM0 171v42h256v-42h-256z" />
+<glyph unicode="&#xf1cf;" horiz-adv-x="417" d="M282 364h-147l74 73zM135 20h147l-73 -73zM70 157h81l-41 111zM93 315h35l93 -246h-38l-20 53h-106l-19 -53h-38zM285 103h132v-34h-184v28l128 183h-127v35h179v-27z" />
+<glyph unicode="&#xf1d0;" horiz-adv-x="417" d="M282 364h-147l74 73zM135 20h147l-73 -73zM266 157h81l-40 111zM290 315h34l93 -246h-38l-19 53h-106l-20 -53h-38zM52 103h132v-34h-184v28l128 183h-127v35h179v-27z" />
+<glyph unicode="&#xf1d1;" horiz-adv-x="438" d="M213 107l-24 64h-121l-23 -64h-45l109 277h40l109 -277h-45zM85 213h88l-44 118zM408 201l30 -30l-202 -203l-109 109l30 30l79 -79z" />
+<glyph unicode="&#xf1d2;" d="M0 21v86h427v-86h-427zM43 85v-42h42v42h-42zM0 363h427v-86h-427v86zM85 299v42h-42v-42h42zM0 149v86h427v-86h-427zM43 213v-42h42v42h-42z" />
+<glyph unicode="&#xf1d3;" d="M363 299h64v-278h-171v86h-85v-86h-171v278h64v64h299v-64zM192 235v64h-64v-22h43v-21h-43v-64h64v21h-43v22h43zM299 192v107h-22v-43h-21v43h-21v-64h42v-43h22z" />
+<glyph unicode="&#xf1d4;" horiz-adv-x="384" d="M363 363v-43h-342v43h342zM384 149h-21v-128h-43v128h-85v-128h-214v128h-21v43l21 107h342l21 -107v-43zM192 64v85h-128v-85h128z" />
+<glyph unicode="&#xf1d5;" horiz-adv-x="341" d="M170.5 405q39.5 0 67 -3t53 -11.5t38 -26t12.5 -44.5v-203q0 -31 -21.5 -52.5t-52.5 -21.5l32 -32v-11h-256v11l32 32q-31 0 -53 21.5t-22 52.5v203q0 27 12.5 44.5t38 26t53 11.5t67 3zM74.5 85q13.5 0 23 9.5t9.5 23t-9.5 22.5t-23 9t-22.5 -9t-9 -22.5t9 -23 t22.5 -9.5zM149 213v107h-106v-107h106zM266.5 85q13.5 0 23 9.5t9.5 23t-9.5 22.5t-23 9t-22.5 -9t-9 -22.5t9 -23t22.5 -9.5zM299 213v107h-107v-107h107z" />
+<glyph unicode="&#xf1d6;" horiz-adv-x="469" d="M123 345l-30 -30l-39 38l30 30zM64 224v-43h-64v43h64zM256 436v-63h-43v63h43zM415 353l-38 -38l-30 30l38 38zM346 61l30 29l39 -38l-30 -30zM405 224h64v-43h-64v43zM235 331q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5 t90.5 37.5zM213 -31v63h43v-63h-43zM54 52l39 39l30 -30l-39 -39z" />
+<glyph unicode="&#xf1d7;" horiz-adv-x="469" d="M0 256v43h43v-43h-43zM0 171v42h43v-42h-43zM0 341q0 18 12.5 30.5t30.5 12.5v-43h-43zM171 0v43h42v-43h-42zM0 85v43h43v-43h-43zM43 0q-18 0 -30.5 12.5t-12.5 30.5h43v-43zM427 384q17 0 29.5 -12.5t12.5 -30.5v-85h-213v128h171zM427 85v43h42v-43h-42zM171 341v43 h42v-43h-42zM85 0v43h43v-43h-43zM85 341v43h43v-43h-43zM427 0v43h42q0 -18 -12.5 -30.5t-29.5 -12.5zM427 171v42h42v-42h-42zM256 0v43h43v-43h-43zM341 0v43h43v-43h-43z" />
+<glyph unicode="&#xf1d8;" horiz-adv-x="469" d="M427 384q17 0 29.5 -12.5t12.5 -30.5v-298q0 -18 -12.5 -30.5t-29.5 -12.5h-384q-18 0 -30.5 12.5t-12.5 30.5v298q0 18 12.5 30.5t30.5 12.5h384zM427 43v213h-171v85h-213v-298h384z" />
+<glyph unicode="&#xf1d9;" horiz-adv-x="512" d="M469 384q18 0 30.5 -12.5t12.5 -30.5v-298q0 -18 -12.5 -30.5t-30.5 -12.5h-320q-21 0 -34 19l-115 173l115 173q13 19 34 19h320zM405 115l-76 77l76 77l-30 30l-76 -77l-77 77l-30 -30l77 -77l-77 -77l30 -30l77 77l76 -77z" />
+<glyph unicode="&#xf1da;" horiz-adv-x="512" d="M469 384q18 0 30.5 -12.5t12.5 -30.5v-298q0 -18 -12.5 -30.5t-30.5 -12.5h-318q-23 0 -36 19l-115 173l115 173q13 19 34 19h320zM192 160q13 0 22.5 9.5t9.5 22.5t-9.5 22.5t-22.5 9.5t-22.5 -9.5t-9.5 -22.5t9.5 -22.5t22.5 -9.5zM298.5 160q13.5 0 23 9.5t9.5 22.5 t-9.5 22.5t-23 9.5t-22.5 -9.5t-9 -22.5t9 -22.5t22.5 -9.5zM405.5 160q13.5 0 22.5 9.5t9 22.5t-9 22.5t-22.5 9.5t-23 -9.5t-9.5 -22.5t9.5 -22.5t23 -9.5z" />
+<glyph unicode="&#xf1db;" horiz-adv-x="512" d="M469 384q18 0 30.5 -12.5t12.5 -30.5v-298q0 -18 -12.5 -30.5t-30.5 -12.5h-320q-21 0 -34 19l-115 173l115 173q13 19 34 19h320z" />
+<glyph unicode="&#xf1dc;" horiz-adv-x="469" d="M299 384q17 0 29.5 -12.5t12.5 -30.5v-213q0 -18 -12 -30l-141 -141l-22 23q-10 9 -10 22l1 7l20 98h-134q-18 0 -30.5 12.5t-12.5 29.5v2v41q0 8 3 16l64 150q11 26 40 26h192zM384 384h85v-256h-85v256z" />
+<glyph unicode="&#xf1dd;" horiz-adv-x="512" d="M256 320v-27q0 -6 -2 -11l-49 -113q-8 -20 -29 -20h-144q-13 0 -22.5 9.5t-9.5 22.5v139q0 13 9 23l106 105l17 -17q7 -7 7 -17l-1 -5l-14 -68h111q8 0 14.5 -6t6.5 -15zM480 235q13 0 22.5 -9.5t9.5 -22.5v-139q0 -13 -9 -23l-106 -105l-17 17q-7 7 -7 17l1 5l14 68 h-111q-8 0 -14.5 6t-6.5 15v27q0 6 2 11l49 113q8 20 29 20h144z" />
+<glyph unicode="&#xf1de;" horiz-adv-x="469" d="M0 0v256h85v-256h-85zM469 235v-2v-41q0 -8 -3 -16l-64 -150q-11 -26 -39 -26h-192q-18 0 -30.5 12.5t-12.5 30.5v213q0 18 13 30l140 141l23 -23q9 -9 9 -22l-1 -7l-20 -98h135q17 0 29.5 -12.5t12.5 -29.5z" />
+<glyph unicode="&#xf1df;" d="M384 192q0 -18 12.5 -30.5t30.5 -12.5v-85q0 -18 -12.5 -30.5t-30.5 -12.5h-341q-18 0 -30.5 12.5t-12.5 30.5v85q18 0 30.5 12.5t12.5 30.5t-12.5 30.5t-30.5 12.5v85q0 18 12.5 30.5t30.5 12.5h341q18 0 30.5 -12.5t12.5 -30.5v-85q-18 0 -30.5 -12.5t-12.5 -30.5z M290 90l-24 87l71 58l-91 5l-33 84l-33 -84l-90 -5l70 -58l-23 -87l76 49z" />
+<glyph unicode="&#xf1e0;" horiz-adv-x="469" d="M298.5 363q70.5 0 120.5 -50t50 -121t-50 -121t-120.5 -50t-120.5 50t-50 121t50 121t120.5 50zM299 64q53 0 90.5 37.5t37.5 90.5t-37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5zM43 192q0 -41 23.5 -74t61.5 -47v-44q-56 14 -92 60t-36 105 t36 105t92 60v-44q-38 -14 -61.5 -47t-23.5 -74z" />
+<glyph unicode="&#xf1e1;" horiz-adv-x="469" d="M235 192q0 48 34.5 82.5t82.5 34.5t82.5 -34.5t34.5 -82.5h-234zM235 192q0 -48 -35 -82.5t-83 -34.5t-82.5 34.5t-34.5 82.5h235zM235 192q-48 0 -83 34.5t-35 82.5t35 83t83 35v-235zM235 192q48 0 82.5 -34.5t34.5 -82.5t-34.5 -83t-82.5 -35v235z" />
+<glyph unicode="&#xf1e2;" horiz-adv-x="341" d="M341 235q0 -30 -18 -52.5t-46 -30.5v-24h64q0 -29 -18 -52t-46 -30v-25q0 -8 -6 -14.5t-15 -6.5h-171q-8 0 -14.5 6.5t-6.5 14.5v25q-28 7 -46 30t-18 52h64v24q-28 8 -46 30.5t-18 52.5h64v24q-28 7 -46 30t-18 52h64v22q0 8 6.5 14.5t14.5 6.5h171q9 0 15 -6.5t6 -14.5 v-22h64q0 -29 -18 -52t-46 -30v-24h64zM170.5 43q17.5 0 30 12.5t12.5 30t-12.5 30t-30 12.5t-30 -12.5t-12.5 -30t12.5 -30t30 -12.5zM170.5 149q17.5 0 30 12.5t12.5 30.5t-12.5 30.5t-30 12.5t-30 -12.5t-12.5 -30.5t12.5 -30.5t30 -12.5zM170.5 256q17.5 0 30 12.5 t12.5 30t-12.5 30t-30 12.5t-30 -12.5t-12.5 -30t12.5 -30t30 -12.5z" />
+<glyph unicode="&#xf1e3;" horiz-adv-x="469" d="M253 127l-16 -44l-66 66l-107 -106l-30 30l108 107q-40 44 -63 97h42q20 -39 50 -71q45 50 67 114h-238v43h149v42h43v-42h149v-43h-62q-24 -78 -79 -139l-1 -1zM373 235l96 -256h-42l-24 64h-102l-24 -64h-42l96 256h42zM317 85h70l-35 93z" />
+<glyph unicode="&#xf1e4;" d="M213 78l137 219h-273zM213 -2l-213 341h427z" />
+<glyph unicode="&#xf1e5;" d="M213 282l-136 -218h273zM213 363l214 -342h-427z" />
+<glyph unicode="&#xf1e6;" horiz-adv-x="469" d="M405 277l64 -85v-107h-42q0 -26 -19 -45t-45.5 -19t-45 19t-18.5 45h-128q0 -26 -19 -45t-45.5 -19t-45 19t-18.5 45h-43v235q0 18 12.5 30.5t30.5 12.5h298v-86h64zM106.5 53q13.5 0 23 9.5t9.5 23t-9.5 22.5t-23 9t-22.5 -9t-9 -22.5t9 -23t22.5 -9.5zM395 245h-54v-53 h95zM362.5 53q13.5 0 23 9.5t9.5 23t-9.5 22.5t-23 9t-22.5 -9t-9 -22.5t9 -23t22.5 -9.5z" />
+<glyph unicode="&#xf1e7;" d="M420 207q7 -6 7 -15t-7 -15l-192 -192q-6 -6 -15 -6t-15 6l-192 192q-6 6 -6 15t6 15l192 192q6 6 15 6t15 -6zM256 139l75 74l-75 75v-53h-107q-9 0 -15 -6.5t-6 -15.5v-85h43v64h85v-53z" />
+<glyph unicode="&#xf1e8;" d="M43 363v-150h-43v150q0 17 12.5 29.5t30.5 12.5h149v-42h-149zM171 171l63 -79l43 57l64 -85h-256zM320 266.5q0 -13.5 -9.5 -22.5t-22.5 -9t-22.5 9t-9.5 22.5t9.5 23t22.5 9.5t22.5 -9.5t9.5 -23zM384 405q18 0 30.5 -12.5t12.5 -29.5v-150h-43v150h-149v42h149z M384 21v150h43v-150q0 -17 -12.5 -29.5t-30.5 -12.5h-149v42h149zM43 171v-150h149v-42h-149q-18 0 -30.5 12.5t-12.5 29.5v150h43z" />
+<glyph unicode="&#xf1e9;" horiz-adv-x="341" d="M110 89l121 121q25 -25 25 -60.5t-25 -60.5t-60.5 -25t-60.5 25zM299 405q17 0 29.5 -12.5t12.5 -29.5v-342q0 -17 -12.5 -29.5t-29.5 -12.5h-256q-18 0 -30.5 12.5t-12.5 29.5v342q0 17 12.5 29.5t30.5 12.5h256zM128 363q-9 0 -15 -6.5t-6 -15t6 -15t15 -6.5t15 6.5 t6 15t-6 15t-15 6.5zM64 363q-9 0 -15 -6.5t-6 -15t6 -15t15 -6.5t15 6.5t6 15t-6 15t-15 6.5zM171 21q53 0 90.5 37.5t37.5 90.5t-37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5z" />
+<glyph unicode="&#xf1ea;" horiz-adv-x="341" d="M0 363h341v-342h-341v342zM43 277v-213h256v213h-256z" />
+<glyph unicode="&#xf1eb;" horiz-adv-x="341" d="M341 21h-341v86h341v-86z" />
+<glyph unicode="&#xf1ec;" horiz-adv-x="341" d="M0 277h85v86h256v-256h-85v-86h-256v256zM256 277v-128h43v171h-171v-43h128zM43 192v-128h170v128h-170z" />
+<glyph unicode="&#xf1ed;" horiz-adv-x="470" d="M464 43q6 -5 6 -14.5t-8 -15.5l-49 -49q-7 -7 -15.5 -7t-14.5 7l-194 194q-37 -15 -77.5 -6.5t-70.5 38.5q-31 32 -39 75.5t12 82.5l94 -92l64 64l-92 92q38 18 82 10.5t76 -38.5q30 -30 38.5 -70.5t-6.5 -76.5z" />
+<glyph unicode="&#xf1ee;" horiz-adv-x="373" d="M267 149l106 -106l-32 -32l-106 106v17l-6 6q-39 -33 -90 -33q-58 0 -98.5 40.5t-40.5 98t40.5 98t98 40.5t98 -40.5t40.5 -98.5q0 -51 -33 -90l6 -6h17zM139 149q40 0 68 28t28 68t-28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28zM192 235h-43v-43h-21v43h-43v21h43v43 h21v-43h43v-21z" />
+<glyph unicode="&#xf1ef;" horiz-adv-x="373" d="M267 149l106 -106l-32 -32l-106 106v17l-6 6q-39 -33 -90 -33q-58 0 -98.5 40.5t-40.5 98t40.5 98t98 40.5t98 -40.5t40.5 -98.5q0 -51 -33 -90l6 -6h17zM139 149q40 0 68 28t28 68t-28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28zM85 256h107v-21h-107v21z" />
+<glyph unicode="&#xf1f0;" d="M192 128h43v-43h-43v43zM192 299h43v-128h-43v128zM213.5 405q88.5 0 151 -62.5t62.5 -150.5t-62.5 -150.5t-151 -62.5t-151 62.5t-62.5 150.5t62.5 150.5t151 62.5zM213.5 21q70.5 0 120.5 50t50 121t-50 121t-120.5 50t-120.5 -50t-50 -121t50 -121t120.5 -50z" />
+<glyph unicode="&#xf1f1;" d="M213.5 405q88.5 0 151 -62.5t62.5 -150.5t-62.5 -150.5t-151 -62.5t-151 62.5t-62.5 150.5t62.5 150.5t151 62.5zM235 85v43h-43v-43h43zM235 171v128h-43v-128h43z" />
+<glyph unicode="&#xf1f2;" horiz-adv-x="384" d="M272 384l112 -112v-160l-112 -112h-160l-112 112v160l112 112h160zM192 79q12 0 20 8t8 19.5t-8 19.5t-20 8t-20 -8t-8 -19.5t8 -19.5t20 -8zM213 171v128h-42v-128h42z" />
+<glyph unicode="&#xf1f3;" horiz-adv-x="469" d="M469 192l-52 -59l8 -79l-77 -17l-41 -68l-72 31l-73 -31l-40 67l-77 18l7 79l-52 59l52 60l-7 78l77 17l40 68l73 -31l72 31l41 -68l77 -17l-8 -79zM256 85v43h-43v-43h43zM256 171v128h-43v-128h43z" />
+<glyph unicode="&#xf1f4;" horiz-adv-x="469" d="M0 0l235 405l234 -405h-469zM256 64v43h-43v-43h43zM256 149v86h-43v-86h43z" />
+<glyph unicode="&#xf1f5;" d="M192 64v43h43v-43h-43zM213.5 405q88.5 0 151 -62.5t62.5 -150.5t-62.5 -150.5t-151 -62.5t-151 62.5t-62.5 150.5t62.5 150.5t151 62.5zM213.5 21q70.5 0 120.5 50t50 121t-50 121t-120.5 50t-120.5 -50t-50 -121t50 -121t120.5 -50zM213.5 320q35.5 0 60.5 -25t25 -60 q0 -18 -10 -32.5t-22 -23t-22 -22t-10 -29.5h-43q0 23 10 39.5t22 24t22 18.5t10 25q0 17 -12.5 29.5t-30 12.5t-30 -12.5t-12.5 -29.5h-43q0 35 25 60t60.5 25z" />
+<glyph unicode="&#xf1f6;" d="M213.5 405q88.5 0 151 -62.5t62.5 -150.5t-62.5 -150.5t-151 -62.5t-151 62.5t-62.5 150.5t62.5 150.5t151 62.5zM235 43v42h-43v-42h43zM279 208q20 20 20 48q0 35 -25 60t-60.5 25t-60.5 -25t-25 -60h43q0 18 12.5 30.5t30 12.5t30 -12.5t12.5 -30.5t-13 -30l-26 -27 q-25 -25 -25 -60v-11h43q0 22 5.5 34.5t19.5 25.5z" />
+<glyph unicode="&#xf1f7;" d="M192 85v128h43v-128h-43zM213.5 405q88.5 0 151 -62.5t62.5 -150.5t-62.5 -150.5t-151 -62.5t-151 62.5t-62.5 150.5t62.5 150.5t151 62.5zM213.5 21q70.5 0 120.5 50t50 121t-50 121t-120.5 50t-120.5 -50t-50 -121t50 -121t120.5 -50zM192 256v43h43v-43h-43z" />
+<glyph unicode="&#xf1f8;" d="M213.5 405q88.5 0 151 -62.5t62.5 -150.5t-62.5 -150.5t-151 -62.5t-151 62.5t-62.5 150.5t62.5 150.5t151 62.5zM235 85v128h-43v-128h43zM235 256v43h-43v-43h43z" />
+<glyph unicode="&#xf1f9;" horiz-adv-x="447" d="M118 372q-33 -24 -53 -60t-22 -77h-43q2 50 25.5 94t62.5 73zM404 235q-2 41 -22.5 77t-53.5 60l31 30q39 -29 62 -73t26 -94h-43zM362 224v-117l43 -43v-21h-363v21l43 43v117q0 49 30 86.5t76 48.5v14q0 14 9.5 23t23 9t22.5 -9t9 -23v-14q47 -11 77 -48.5t30 -86.5z M223 -21q-17 0 -29.5 12.5t-12.5 29.5h85q0 -8 -3 -16q-9 -21 -31 -25q-4 -1 -9 -1z" />
+<glyph unicode="&#xf1fa;" horiz-adv-x="384" d="M150 0h84q0 -18 -12 -30.5t-30 -12.5t-30 12.5t-12 30.5zM339 89l45 -45v-23h-384v23l45 45v124q0 52 32 91.5t81 51.5v15q0 14 10 24t24 10t24 -10t10 -24v-15q49 -12 81 -51.5t32 -91.5v-124zM277 170v43h-64v64h-42v-64h-64v-43h64v-64h42v64h64z" />
+<glyph unicode="&#xf1fb;" horiz-adv-x="363" d="M181.5 -21q-17.5 0 -30 12.5t-12.5 29.5h85q0 -17 -12.5 -29.5t-30 -12.5zM320 107l43 -43v-21h-363v21l43 43v117q0 49 30 86.5t76 48.5v14q0 14 9.5 23t23 9t22.5 -9t9 -23v-14q47 -11 77 -48.5t30 -86.5v-117zM277 85v139q0 40 -28 68t-68 28t-68 -28t-28 -68v-139 h192z" />
+<glyph unicode="&#xf1fc;" horiz-adv-x="384" d="M181.5 -21q-17.5 0 -30 12.5t-12.5 29.5h85q0 -17 -12.5 -29.5t-30 -12.5zM320 224v-79l-202 202q17 8 31 12v14q0 14 9.5 23t23 9t22.5 -9t9 -23v-14q47 -11 77 -48.5t30 -86.5zM314 43h-314v21l43 43v117q0 38 19 71l-62 62l27 27l357 -357l-27 -27z" />
+<glyph unicode="&#xf1fd;" horiz-adv-x="363" d="M181.5 -21q-17.5 0 -30 12.5t-12.5 29.5h85q0 -17 -12.5 -29.5t-30 -12.5zM320 107l43 -43v-21h-363v21l43 43v117q0 49 30 86.5t76 48.5v14q0 14 9.5 23t23 9t22.5 -9t9 -23v-14q47 -11 77 -48.5t30 -86.5v-117zM235 239v38h-107v-38h60l-60 -73v-38h107v38h-60z" />
+<glyph unicode="&#xf1fe;" horiz-adv-x="363" d="M181.5 -21q-17.5 0 -30 12.5t-12.5 29.5h85q0 -17 -12.5 -29.5t-30 -12.5zM320 107l43 -43v-21h-363v21l43 43v117q0 49 30 86.5t76 48.5v14q0 14 9.5 23t23 9t22.5 -9t9 -23v-14q47 -11 77 -48.5t30 -86.5v-117z" />
+<glyph unicode="&#xf1ff;" horiz-adv-x="469" d="M298.5 192q-35.5 0 -60.5 25t-25 60.5t25 60.5t60.5 25t60.5 -25t25 -60.5t-25 -60.5t-60.5 -25zM107 235h64v-43h-64v-64h-43v64h-64v43h64v64h43v-64zM298.5 149q31.5 0 69.5 -9t69.5 -29.5t31.5 -46.5v-43h-341v43q0 26 31.5 46.5t69.5 29.5t69.5 9z" />
+<glyph unicode="&#xf200;" horiz-adv-x="512" d="M448 277l-64 -42l-64 42v22l64 -43l64 43v-22zM469 384q18 0 30.5 -12.5t12.5 -30.5v-298q0 -18 -12.5 -30.5t-30.5 -12.5h-426q-18 0 -30.5 12.5t-12.5 30.5v298q0 18 12.5 30.5t30.5 12.5h426zM170.5 320q-26.5 0 -45 -18.5t-18.5 -45.5t18.5 -45.5t45 -18.5t45.5 18.5 t19 45.5t-19 45.5t-45.5 18.5zM299 64v21q0 20 -24 36t-52.5 23t-52 7t-52 -7t-52 -23t-23.5 -36v-21h256zM469 192v128h-170v-128h170z" />
+<glyph unicode="&#xf201;" horiz-adv-x="384" d="M192 187q-20 0 -34 14t-14 34t14 34t34 14t34 -14t14 -34t-14 -34t-34 -14zM288 101v-16h-192v16q0 22 33 35t63 13t63 -13t33 -35zM341 384q18 0 30.5 -12.5t12.5 -30.5v-298q0 -18 -12.5 -30.5t-30.5 -12.5h-298q-18 0 -30.5 12.5t-12.5 30.5v298q0 18 12.5 30.5 t30.5 12.5h298zM341 43v298h-298v-298h298z" />
+<glyph unicode="&#xf202;" horiz-adv-x="512" d="M469 384q18 0 30.5 -12.5t12.5 -30.5v-298q0 -18 -12.5 -30.5t-30.5 -12.5h-426q-18 0 -30.5 12.5t-12.5 30.5v298q0 18 12.5 30.5t30.5 12.5h426zM170.5 320q-26.5 0 -45 -18.5t-18.5 -45.5t18.5 -45.5t45 -18.5t45.5 18.5t19 45.5t-19 45.5t-45.5 18.5zM299 64v21 q0 20 -24 36t-52.5 23t-52 7t-52 -7t-52 -23t-23.5 -36v-21h256zM381 149q-8 22 -8 43t8 43h35l32 42l-42 43q-44 -33 -59 -85q-6 -22 -6 -43t6 -43q15 -52 59 -85l42 43l-32 42h-35z" />
+<glyph unicode="&#xf203;" horiz-adv-x="384" d="M0 341q0 18 12.5 30.5t30.5 12.5h298q18 0 30.5 -12.5t12.5 -30.5v-298q0 -18 -12.5 -30.5t-30.5 -12.5h-298q-18 0 -30.5 12.5t-12.5 30.5v298zM256 256q0 27 -18.5 45.5t-45.5 18.5t-45.5 -18.5t-18.5 -45.5t18.5 -45.5t45.5 -18.5t45.5 18.5t18.5 45.5zM64 85v-21h256 v21q0 20 -23.5 36t-52.5 23t-52 7t-52 -7t-52.5 -23t-23.5 -36z" />
+<glyph unicode="&#xf204;" horiz-adv-x="384" d="M341 384q18 0 30.5 -12.5t12.5 -30.5v-298q0 -18 -12.5 -30.5t-30.5 -12.5h-298q-18 0 -30.5 12.5t-12.5 30.5v298q0 18 12.5 30.5t30.5 12.5h21v43h43v-43h170v43h43v-43h21zM192 320q-27 0 -45.5 -18.5t-18.5 -45.5t18.5 -45.5t45.5 -18.5t45.5 18.5t18.5 45.5 t-18.5 45.5t-45.5 18.5zM320 64v21q0 20 -23.5 36t-52.5 23t-52 7t-52 -7t-52.5 -23t-23.5 -36v-21h256z" />
+<glyph unicode="&#xf205;" d="M213.5 405q88.5 0 151 -62.5t62.5 -150.5t-62.5 -150.5t-151 -62.5t-151 62.5t-62.5 150.5t62.5 150.5t151 62.5zM213.5 341q-26.5 0 -45.5 -18.5t-19 -45t19 -45.5t45.5 -19t45 19t18.5 45.5t-18.5 45t-45 18.5zM213.5 38q39.5 0 73 18.5t54.5 50.5q0 20 -23.5 35.5 t-52 23t-52 7.5t-52 -7.5t-52 -23t-24.5 -35.5q21 -32 55 -50.5t73.5 -18.5z" />
+<glyph unicode="&#xf206;" horiz-adv-x="341" d="M170.5 322q-18.5 0 -31.5 -13t-13 -31.5t13 -31.5t31.5 -13t31.5 13t13 31.5t-13 31.5t-31.5 13zM171 130q-44 0 -87 -16.5t-43 -28.5v-23h260v23q0 12 -43 28.5t-87 16.5zM170.5 363q35.5 0 60.5 -25t25 -60.5t-25 -60.5t-60.5 -25t-60.5 25t-25 60.5t25 60.5t60.5 25z M170.5 171q31.5 0 69.5 -9t69.5 -29.5t31.5 -47.5v-64h-341v64q0 27 31.5 47.5t69.5 29.5t69.5 9z" />
+<glyph unicode="&#xf207;" horiz-adv-x="341" d="M170.5 192q-35.5 0 -60.5 25t-25 60.5t25 60.5t60.5 25t60.5 -25t25 -60.5t-25 -60.5t-60.5 -25zM170.5 149q31.5 0 69.5 -9t69.5 -29.5t31.5 -46.5v-43h-341v43q0 26 31.5 46.5t69.5 29.5t69.5 9z" />
+<glyph unicode="&#xf208;" horiz-adv-x="512" d="M171 235v-43h-64v-64h-43v64h-64v43h64v64h43v-64h64zM384 213q-10 0 -19 3q19 28 19 61q0 34 -19 61q9 3 19 3q27 0 45.5 -18.5t18.5 -45t-18.5 -45.5t-45.5 -19zM277.5 213q-26.5 0 -45.5 19t-19 45.5t19 45t45.5 18.5t45 -18.5t18.5 -45t-18.5 -45.5t-45 -19zM419 167 q37 -6 65 -22t28 -38v-43h-64v43q0 34 -29 60zM277 171q40 0 84 -18t44 -46v-43h-256v43q0 28 44 46t84 18z" />
+<glyph unicode="&#xf209;" d="M309 192q-22 0 -37.5 15.5t-15.5 37.5t15.5 38t37.5 16t37.5 -16t15.5 -38t-15.5 -37.5t-37.5 -15.5zM149.5 213q-26.5 0 -45.5 19t-19 45.5t19 45t45.5 18.5t45 -18.5t18.5 -45t-18.5 -45.5t-45 -19zM309.5 149q36.5 0 77 -16t40.5 -42v-48h-235v48q0 26 40.5 42t77 16z M149 171q22 0 51 -6q-51 -28 -51 -74v-48h-149v53q0 23 27.5 41t61 26t60.5 8z" />
+<glyph unicode="&#xf20a;" d="M384 448v-43h-341v43h341zM43 -64v43h341v-43h-341zM384 363q18 0 30.5 -12.5t12.5 -30.5v-256q0 -18 -12.5 -30.5t-30.5 -12.5h-341q-18 0 -30.5 12.5t-12.5 30.5v256q0 18 12.5 30.5t30.5 12.5h341zM213 304q-20 0 -34 -14t-14 -34t14 -34t34 -14t34 14t14 34t-14 34 t-34 14zM320 85v32q0 24 -36.5 39t-70 15t-70 -15t-36.5 -39v-32h213z" />
+<glyph unicode="&#xf20b;" horiz-adv-x="469" d="M427 341h42v-298h-42v298zM341 43v298h43v-298h-43zM277 341q9 0 15.5 -6t6.5 -15v-256q0 -9 -6.5 -15t-15.5 -6h-256q-8 0 -14.5 6t-6.5 15v256q0 9 6.5 15t14.5 6h256zM149 283q-20 0 -34 -14t-14 -34t14 -34t34 -14t34 14t14 34t-14 34t-34 14zM245 85v16q0 22 -33 35 t-63 13t-63 -13t-33 -35v-16h192z" />
+<glyph unicode="&#xf20c;" horiz-adv-x="469" d="M331 171q25 0 56 -7.5t56.5 -24t25.5 -38.5v-58h-469v58q0 22 25.5 38.5t56.5 24t57 7.5q50 0 96 -22q46 22 96 22zM245 75v26q0 10 -35 24t-71.5 14t-71.5 -14t-35 -24v-26h213zM437 75v26q0 10 -35 24t-71 14q-32 0 -65 -12q11 -12 11 -26v-26h160zM139 192 q-31 0 -53 22t-22 53t22 52.5t53 21.5t52.5 -21.5t21.5 -52.5t-21.5 -53t-52.5 -22zM138.5 309q-17.5 0 -30 -12.5t-12.5 -30t12.5 -30t30 -12.5t30 12.5t12.5 30t-12.5 30t-30 12.5zM331 192q-31 0 -53 22t-22 53t22 52.5t53 21.5t52.5 -21.5t21.5 -52.5t-21.5 -53 t-52.5 -22zM330.5 309q-17.5 0 -30 -12.5t-12.5 -30t12.5 -30t30 -12.5t30 12.5t12.5 30t-12.5 30t-30 12.5z" />
+<glyph unicode="&#xf20d;" horiz-adv-x="469" d="M320 213q-27 0 -45.5 19t-18.5 45.5t18.5 45t45.5 18.5t45.5 -18.5t18.5 -45t-18.5 -45.5t-45.5 -19zM149.5 213q-26.5 0 -45.5 19t-19 45.5t19 45t45.5 18.5t45 -18.5t18.5 -45t-18.5 -45.5t-45 -19zM149.5 171q27.5 0 60.5 -8t61 -26t28 -41v-53h-299v53q0 23 27.5 41 t61 26t61 8zM320 171q28 0 61 -8t60.5 -26t27.5 -41v-53h-128v53q0 43 -42 74q13 1 21 1z" />
+<glyph unicode="&#xf20e;" d="M149 197q11 0 19 -7.5t8 -18.5t-8 -19t-19 -8t-18.5 8t-7.5 19t7.5 18.5t18.5 7.5zM277 197q11 0 19 -7.5t8 -18.5t-8 -19t-19 -8t-18.5 8t-7.5 19t7.5 18.5t18.5 7.5zM213.5 405q88.5 0 151 -62.5t62.5 -150.5t-62.5 -150.5t-151 -62.5t-151 62.5t-62.5 150.5 t62.5 150.5t151 62.5zM213.5 21q70.5 0 120.5 50t50 121q0 24 -7 48q-24 -5 -48 -5q-53 0 -99 24t-75 66q-33 -80 -111 -115q-1 -10 -1 -18q0 -71 50 -121t120.5 -50z" />
+<glyph unicode="&#xf20f;" horiz-adv-x="192" d="M128 -21h-64v128h-64l54 162q4 14 15.5 22t25.5 8h2q14 0 25 -8t16 -22l54 -162h-64v-128zM96 320q-18 0 -30.5 12.5t-12.5 30t12.5 30t30.5 12.5t30.5 -12.5t12.5 -30t-12.5 -30t-30.5 -12.5z" />
+<glyph unicode="&#xf210;" horiz-adv-x="149" d="M32 -21v160h-32v117q0 18 12.5 30.5t30.5 12.5h64q17 0 29.5 -12.5t12.5 -30.5v-117h-32v-160h-85zM74.5 320q-17.5 0 -30 12.5t-12.5 30t12.5 30t30 12.5t30 -12.5t12.5 -30t-12.5 -30t-30 -12.5z" />
+<glyph unicode="&#xf211;" horiz-adv-x="363" d="M32 -21v160h-32v117q0 18 12.5 30.5t30.5 12.5h64q17 0 29.5 -12.5t12.5 -30.5v-117h-32v-160h-85zM299 -21h-64v128h-64l54 162q4 14 15.5 22t24.5 8h3q14 0 25 -8t15 -22l55 -162h-64v-128zM74.5 320q-17.5 0 -30 12.5t-12.5 30t12.5 30t30 12.5t30 -12.5t12.5 -30 t-12.5 -30t-30 -12.5zM266.5 320q-17.5 0 -30 12.5t-12.5 30t12.5 30t30 12.5t30 -12.5t12.5 -30t-12.5 -30t-30 -12.5z" />
+<glyph unicode="&#xf212;" horiz-adv-x="384" d="M192 405q18 0 30.5 -12.5t12.5 -30t-12.5 -30t-30.5 -12.5t-30.5 12.5t-12.5 30t12.5 30t30.5 12.5zM384 256h-128v-277h-43v128h-42v-128h-43v277h-128v43h384v-43z" />
+<glyph unicode="&#xf213;" d="M213.5 405q88.5 0 151 -62.5t62.5 -150.5t-62.5 -150.5t-151 -62.5t-151 62.5t-62.5 150.5t62.5 150.5t151 62.5zM213.5 21q70.5 0 120.5 50t50 121t-50 121t-120.5 50t-120.5 -50t-50 -121t50 -121t120.5 -50zM288 213q-13 0 -22.5 9.5t-9.5 23t9.5 22.5t22.5 9t22.5 -9 t9.5 -22.5t-9.5 -23t-22.5 -9.5zM138.5 213q-13.5 0 -22.5 9.5t-9 23t9 22.5t22.5 9t23 -9t9.5 -22.5t-9.5 -23t-23 -9.5zM213.5 149q36.5 0 66 -20.5t42.5 -53.5h-218q13 33 43 53.5t66.5 20.5z" />
+<glyph unicode="&#xf214;" d="M213.5 405q88.5 0 151 -62.5t62.5 -150.5t-62.5 -150.5t-151 -62.5t-151 62.5t-62.5 150.5t62.5 150.5t151 62.5zM213.5 21q70.5 0 120.5 50t50 121t-50 121t-120.5 50t-120.5 -50t-50 -121t50 -121t120.5 -50zM288 213q-13 0 -22.5 9.5t-9.5 23t9.5 22.5t22.5 9t22.5 -9 t9.5 -22.5t-9.5 -23t-22.5 -9.5zM138.5 213q-13.5 0 -22.5 9.5t-9 23t9 22.5t22.5 9t23 -9t9.5 -22.5t-9.5 -23t-23 -9.5zM213.5 75q-36.5 0 -66.5 20.5t-43 53.5h218q-13 -33 -42.5 -53.5t-66 -20.5z" />
+<glyph unicode="&#xf215;" horiz-adv-x="343" d="M226.5 331q-17.5 0 -30.5 12.5t-13 30t13 30t30.5 12.5t30 -12.5t12.5 -30t-12.5 -30t-30 -12.5zM149 35l-149 29l9 43l104 -21l34 173l-38 -15v-73h-43v100l111 47q3 0 8.5 1t8.5 1q22 0 36 -21l22 -34q13 -23 37.5 -37t53.5 -14v-43q-71 0 -117 53l-13 -64l45 -42v-160 h-43v128l-44 42z" />
+<glyph unicode="&#xf216;" horiz-adv-x="277" d="M160 331q-18 0 -30.5 12.5t-12.5 30t12.5 30t30.5 12.5t30.5 -12.5t12.5 -30t-12.5 -30t-30.5 -12.5zM81 258l-60 -301h45l39 171l44 -43v-128h43v160l-45 43l13 64q46 -53 117 -53v42q-29 0 -53.5 14.5t-37.5 37.5l-22 34q-14 21 -36 21q-3 0 -8.5 -1t-8.5 -1l-111 -47 v-100h43v72l38 15v0z" />
+<glyph unicode="&#xf217;" horiz-adv-x="469" d="M171 107q-27 0 -45.5 18.5t-18.5 45.5q0 24 16.5 42.5t40.5 20.5h3q9 20 27.5 31.5t40.5 11.5q28 0 48.5 -18t24.5 -46h1q22 0 38 -15.5t16 -37.5t-16 -37.5t-38 -15.5h-138zM427 384q17 0 29.5 -12.5t12.5 -30.5v-298q0 -18 -12.5 -30.5t-29.5 -12.5h-384 q-18 0 -30.5 12.5t-12.5 30.5v298q0 18 12.5 30.5t30.5 12.5h384zM427 42v300h-384v-300h384z" />
+<glyph unicode="&#xf218;" d="M213.5 405q88.5 0 151 -62.5t62.5 -150.5t-62.5 -150.5t-151 -62.5t-151 62.5t-62.5 150.5t62.5 150.5t151 62.5zM309 107q22 0 38 15.5t16 37.5t-16 37.5t-38 15.5h-10q0 36 -25 61t-61 25q-29 0 -52 -18.5t-30 -46.5l-3 1q-27 0 -45.5 -19t-18.5 -45.5t18.5 -45 t45.5 -18.5h181z" />
+<glyph unicode="&#xf219;" horiz-adv-x="512" d="M413 234q42 -3 70.5 -33.5t28.5 -72.5q0 -44 -31.5 -75.5t-75.5 -31.5h-277q-53 0 -90.5 37.5t-37.5 90.5q0 50 33 86t81 41q20 40 58 63.5t84 23.5q58 0 102 -37t55 -92zM213 85l141 141l-30 30l-111 -110l-44 44l-30 -30z" />
+<glyph unicode="&#xf21a;" horiz-adv-x="512" d="M413 234q42 -3 70.5 -33.5t28.5 -72.5q0 -44 -31.5 -75.5t-75.5 -31.5h-277q-53 0 -90.5 37.5t-37.5 90.5q0 50 33 86t81 41q20 40 58 63.5t84 23.5q58 0 102 -37t55 -92zM363 171h-64v85h-86v-85h-64l107 -107z" />
+<glyph unicode="&#xf21b;" horiz-adv-x="512" d="M413 234q42 -3 70.5 -33.5t28.5 -72.5q0 -55 -45 -87l-31 31q33 19 33 56q0 27 -18.5 45.5t-45.5 18.5h-32v11q0 48 -34 82.5t-83 34.5q-29 0 -54 -13l-32 31q40 25 86 25q58 0 102 -37t55 -92zM64 336l27 27l357 -357l-27 -27l-43 42h-250q-53 0 -90.5 37.5t-37.5 90.5 q0 52 35.5 89t87.5 39zM165 235h-37q-35 0 -60 -25t-25 -60.5t25 -60.5t60 -25h208z" />
+<glyph unicode="&#xf21c;" horiz-adv-x="512" d="M413 234q42 -3 70.5 -33.5t28.5 -72.5q0 -44 -31.5 -75.5t-75.5 -31.5h-277q-53 0 -90.5 37.5t-37.5 90.5q0 50 33 86t81 41q21 40 59 63.5t83 23.5q58 0 102 -37t55 -92zM405 64q27 0 45.5 19t18.5 45t-18.5 45t-45.5 19h-32v11q0 48 -34.5 82.5t-82.5 34.5 q-58 0 -94 -47q41 -12 67.5 -46t26.5 -78h-43q0 36 -25 61t-60 25t-60 -25t-25 -60.5t25 -60.5t60 -25h277z" />
+<glyph unicode="&#xf21d;" horiz-adv-x="512" d="M413 234q42 -3 70.5 -33.5t28.5 -72.5q0 -44 -31.5 -75.5t-75.5 -31.5h-277q-53 0 -90.5 37.5t-37.5 90.5q0 50 33 86t81 41q20 40 58 63.5t84 23.5q58 0 102 -37t55 -92zM405 64q27 0 45.5 18.5t18.5 45.5t-18.5 45.5t-45.5 18.5h-32v11q0 48 -34 82.5t-83 34.5 q-40 0 -71 -24t-42 -61h-15q-35 0 -60 -25t-25 -60.5t25 -60.5t60 -25h277z" />
+<glyph unicode="&#xf21e;" horiz-adv-x="512" d="M413 234q42 -3 70.5 -33.5t28.5 -72.5q0 -44 -31.5 -75.5t-75.5 -31.5h-277q-53 0 -90.5 37.5t-37.5 90.5q0 50 33 86t81 41q20 40 58 63.5t84 23.5q58 0 102 -37t55 -92zM299 171h64l-107 106l-107 -106h64v-86h86v86z" />
+<glyph unicode="&#xf21f;" horiz-adv-x="512" d="M413 234q42 -3 70.5 -33.5t28.5 -72.5q0 -44 -31.5 -75.5t-75.5 -31.5h-277q-53 0 -90.5 37.5t-37.5 90.5q0 50 33 86t81 41q20 40 58 63.5t84 23.5q58 0 102 -37t55 -92z" />
+<glyph unicode="&#xf220;" horiz-adv-x="299" d="M299 256l-150 -149l-149 149h85v128h128v-128h86zM0 64h299v-43h-299v43z" />
+<glyph unicode="&#xf221;" horiz-adv-x="341" d="M213 405l128 -128v-256q0 -17 -12.5 -29.5t-29.5 -12.5h-257q-17 0 -29.5 12.5t-12.5 29.5v342q0 17 12.5 29.5t30.5 12.5h170zM256 107v42h-64v64h-43v-64h-64v-42h64v-64h43v64h64zM192 256h117l-117 117v-117z" />
+<glyph unicode="&#xf222;" horiz-adv-x="341" d="M213 405l128 -128v-256q0 -17 -12.5 -29.5t-29.5 -12.5h-257q-17 0 -29.5 12.5t-12.5 29.5v342q0 17 12.5 29.5t30.5 12.5h170zM256 64v43h-171v-43h171zM256 149v43h-171v-43h171zM192 256h117l-117 117v-117z" />
+<glyph unicode="&#xf223;" horiz-adv-x="341" d="M43 405h170l128 -128v-256q0 -17 -12.5 -29.5t-29.5 -12.5h-257q-17 0 -29.5 12.5t-12.5 29.5v342q0 17 12.5 29.5t30.5 12.5zM192 256h117l-117 117v-117z" />
+<glyph unicode="&#xf224;" d="M384 320q18 0 30.5 -12.5t12.5 -30.5v-213q0 -18 -12.5 -30.5t-30.5 -12.5h-341q-18 0 -30.5 12.5t-12.5 30.5v256q0 18 12.5 30.5t30.5 12.5h128l42 -43h171zM384 64v213h-341v-213h341z" />
+<glyph unicode="&#xf225;" d="M384 320q18 0 30.5 -12.5t12.5 -30.5v-213q0 -18 -12.5 -30.5t-30.5 -12.5h-341q-18 0 -30.5 12.5t-12.5 30.5v256q0 18 12.5 30.5t30.5 12.5h128l42 -43h171zM277.5 256q-17.5 0 -30 -12.5t-12.5 -30t12.5 -30t30 -12.5t30 12.5t12.5 30t-12.5 30t-30 12.5zM363 85v22 q0 19 -29.5 30.5t-56 11.5t-56 -11.5t-29.5 -30.5v-22h171z" />
+<glyph unicode="&#xf226;" d="M384 320q18 0 30.5 -12.5t12.5 -30.5v-213q0 -18 -12.5 -30.5t-30.5 -12.5h-341q-18 0 -30.5 12.5t-12.5 30.5v256q0 18 12.5 30.5t30.5 12.5h128l42 -43h171zM247 64l-20 87l67 58l-89 8l-34 82l-35 -82l-89 -8l68 -58l-21 -87l77 45z" />
+<glyph unicode="&#xf227;" d="M43 363h128l42 -43h171q18 0 30.5 -12.5t12.5 -30.5v-213q0 -18 -12.5 -30.5t-30.5 -12.5h-341q-18 0 -30.5 12.5t-12.5 30.5v256q0 18 12.5 30.5t30.5 12.5zM276 256l-25 -60l-65 -5l49 -43l-15 -63l56 33l56 -33l-14 63l49 43l-65 5z" />
+<glyph unicode="&#xf228;" d="M171 363l42 -43h171q18 0 30.5 -12.5t12.5 -30.5v-213q0 -18 -12.5 -30.5t-30.5 -12.5h-341q-18 0 -30.5 12.5t-12.5 30.5v256q0 18 12.5 30.5t30.5 12.5h128z" />
+<glyph unicode="&#xf229;" horiz-adv-x="299" d="M139 256h32v-128h-32v128zM85 256q10 0 16 -6.5t6 -14.5v-11h-75v-64h43v32h32v-43q0 -8 -6 -14.5t-16 -6.5h-64q-9 0 -15 6.5t-6 14.5v86q0 8 6 14.5t15 6.5h64zM299 224h-64v-21h42v-32h-42v-43h-32v128h96v-32z" />
+<glyph unicode="&#xf22a;" horiz-adv-x="299" d="M0 363h299v-43h-299v43zM0 149l149 150l150 -150h-86v-128h-128v128h-85z" />
+<glyph unicode="&#xf22b;" horiz-adv-x="384" d="M0 384h384v-384h-384v384zM171 43v128h-128v-128h128zM171 213v128h-128v-128h128zM341 43v128h-128v-128h128zM341 213v128h-128v-128h128z" />
+<glyph unicode="&#xf22c;" horiz-adv-x="384" d="M128 213v-42h-43v42h43zM213 128v-43h-42v43h42zM128 384v-43h-43v43h43zM213 213v-42h-42v42h42zM43 384v-43h-43v43h43zM213 299v-43h-42v43h42zM299 213v-42h-43v42h43zM213 384v-43h-42v43h42zM299 384v-43h-43v43h43zM341 171v42h43v-42h-43zM341 85v43h43v-43h-43z M43 299v-43h-43v43h43zM341 384h43v-43h-43v43zM341 256v43h43v-43h-43zM43 213v-42h-43v42h43zM0 0v43h384v-43h-384zM43 128v-43h-43v43h43z" />
+<glyph unicode="&#xf22d;" horiz-adv-x="384" d="M85 341v43h43v-43h-43zM85 171v42h43v-42h-43zM85 0v43h43v-43h-43zM171 85v43h42v-43h-42zM171 0v43h42v-43h-42zM0 0v43h43v-43h-43zM0 85v43h43v-43h-43zM0 171v42h43v-42h-43zM0 256v43h43v-43h-43zM0 341v43h43v-43h-43zM171 171v42h42v-42h-42zM341 85v43h43v-43 h-43zM341 171v42h43v-42h-43zM341 0v43h43v-43h-43zM341 256v43h43v-43h-43zM171 256v43h42v-43h-42zM341 384h43v-43h-43v43zM171 341v43h42v-43h-42zM256 0v43h43v-43h-43zM256 171v42h43v-42h-43zM256 341v43h43v-43h-43z" />
+<glyph unicode="&#xf22e;" horiz-adv-x="512" d="M379 299l-214 -214h-80v80l214 214zM442 362l-42 -42l-80 80l42 42q6 6 15 6t15 -6l50 -50q6 -6 6 -15t-6 -15zM0 21h512v-85h-512v85z" />
+<glyph unicode="&#xf22f;" horiz-adv-x="384" d="M0 0v43h43v-43h-43zM43 299v-43h-43v43h43zM0 85v43h43v-43h-43zM85 0v43h43v-43h-43zM43 384v-43h-43v43h43zM128 384v-43h-43v43h43zM299 384v-43h-43v43h43zM213 299v-43h-42v43h42zM213 384v-43h-42v43h42zM341 85v43h43v-43h-43zM171 0v43h42v-43h-42zM0 171v42h384 v-42h-384zM341 384h43v-43h-43v43zM341 256v43h43v-43h-43zM171 85v43h42v-43h-42zM256 0v43h43v-43h-43zM341 0v43h43v-43h-43z" />
+<glyph unicode="&#xf230;" horiz-adv-x="384" d="M0 0v43h43v-43h-43zM85 0v43h43v-43h-43zM43 299v-43h-43v43h43zM0 85v43h43v-43h-43zM128 384v-43h-43v43h43zM43 384v-43h-43v43h43zM299 384v-43h-43v43h43zM341 256v43h43v-43h-43zM341 384h43v-43h-43v43zM256 0v43h43v-43h-43zM213 384v-171h171v-42h-171v-171h-42 v171h-171v42h171v171h42zM341 0v43h43v-43h-43zM341 85v43h43v-43h-43z" />
+<glyph unicode="&#xf231;" horiz-adv-x="384" d="M171 0v43h42v-43h-42zM171 85v43h42v-43h-42zM171 341v43h42v-43h-42zM171 256v43h42v-43h-42zM171 171v42h42v-42h-42zM85 0v43h43v-43h-43zM85 341v43h43v-43h-43zM85 171v42h43v-42h-43zM0 0v384h43v-384h-43zM341 256v43h43v-43h-43zM256 0v43h43v-43h-43zM341 85v43 h43v-43h-43zM341 384h43v-43h-43v43zM341 171v42h43v-42h-43zM341 0v43h43v-43h-43zM256 171v42h43v-42h-43zM256 341v43h43v-43h-43z" />
+<glyph unicode="&#xf232;" horiz-adv-x="384" d="M213 299v-43h-42v43h42zM213 213v-42h-42v42h42zM299 213v-42h-43v42h43zM0 384h384v-384h-384v384zM341 43v298h-298v-298h298zM213 128v-43h-42v43h42zM128 213v-42h-43v42h43z" />
+<glyph unicode="&#xf233;" horiz-adv-x="384" d="M85 0v43h43v-43h-43zM0 341v43h43v-43h-43zM85 341v43h43v-43h-43zM85 171v42h43v-42h-43zM0 0v43h43v-43h-43zM171 0v43h42v-43h-42zM0 171v42h43v-42h-43zM0 85v43h43v-43h-43zM0 256v43h43v-43h-43zM171 85v43h42v-43h-42zM256 171v42h43v-42h-43zM341 384h43v-384 h-43v384zM256 0v43h43v-43h-43zM256 341v43h43v-43h-43zM171 171v42h42v-42h-42zM171 341v43h42v-43h-42zM171 256v43h42v-43h-42z" />
+<glyph unicode="&#xf234;" horiz-adv-x="384" d="M256 0v43h43v-43h-43zM341 0v43h43v-43h-43zM85 0v43h43v-43h-43zM171 0v43h42v-43h-42zM341 85v43h43v-43h-43zM341 171v42h43v-42h-43zM0 384h384v-43h-341v-341h-43v384zM341 256v43h43v-43h-43z" />
+<glyph unicode="&#xf235;" horiz-adv-x="384" d="M85 0v43h43v-43h-43zM85 171v42h43v-42h-43zM171 171v42h42v-42h-42zM171 0v43h42v-43h-42zM0 85v43h43v-43h-43zM0 0v43h43v-43h-43zM0 171v42h43v-42h-43zM0 256v43h43v-43h-43zM171 85v43h42v-43h-42zM341 256v43h43v-43h-43zM341 171v42h43v-42h-43zM0 384h384v-43 h-384v43zM341 85v43h43v-43h-43zM256 0v43h43v-43h-43zM171 256v43h42v-43h-42zM341 0v43h43v-43h-43zM256 171v42h43v-42h-43z" />
+<glyph unicode="&#xf236;" horiz-adv-x="384" d="M0 256v43h43v-43h-43zM0 341v43h43v-43h-43zM85 0v43h43v-43h-43zM85 171v42h43v-42h-43zM0 171v42h43v-42h-43zM0 0v43h43v-43h-43zM0 85v43h43v-43h-43zM85 341v43h43v-43h-43zM341 85v43h43v-43h-43zM171 0v384h42v-384h-42zM341 0v43h43v-43h-43zM341 171v42h43v-42 h-43zM341 384h43v-43h-43v43zM341 256v43h43v-43h-43zM256 341v43h43v-43h-43zM256 0v43h43v-43h-43zM256 171v42h43v-42h-43z" />
+<glyph unicode="&#xf237;" horiz-adv-x="405" d="M299 427v-43h-256v-299h-43v299q0 18 12.5 30.5t30.5 12.5h256zM363 341q17 0 29.5 -12.5t12.5 -29.5v-299q0 -18 -12.5 -30.5t-29.5 -12.5h-235q-18 0 -30.5 12.5t-12.5 30.5v299q0 17 12.5 29.5t30.5 12.5h235zM363 0v299h-235v-299h235z" />
+<glyph unicode="&#xf238;" horiz-adv-x="469" d="M341 128v171h-170v42h170q18 0 30.5 -12.5t12.5 -29.5v-171h-43zM128 85h341v-42h-85v-86h-43v86h-213q-18 0 -30.5 12.5t-12.5 29.5v214h-85v42h85v86h43v-342z" />
+<glyph unicode="&#xf239;" horiz-adv-x="384" d="M85 128h214v-43h-214v43zM0 0v43h384v-43h-384zM0 171v42h384v-42h-384zM85 299h214v-43h-214v43zM0 384h384v-43h-384v43z" />
+<glyph unicode="&#xf23a;" horiz-adv-x="384" d="M0 0v43h384v-43h-384zM0 85v43h384v-43h-384zM0 171v42h384v-42h-384zM0 256v43h384v-43h-384zM0 384h384v-43h-384v43z" />
+<glyph unicode="&#xf23b;" horiz-adv-x="384" d="M256 128v-43h-256v43h256zM256 299v-43h-256v43h256zM0 171v42h384v-42h-384zM0 0v43h384v-43h-384zM0 384h384v-43h-384v43z" />
+<glyph unicode="&#xf23c;" horiz-adv-x="384" d="M0 0v43h384v-43h-384zM128 85v43h256v-43h-256zM0 171v42h384v-42h-384zM128 256v43h256v-43h-256zM0 384h384v-43h-384v43z" />
+<glyph unicode="&#xf23d;" horiz-adv-x="229" d="M183 218q21 -10 33.5 -29.5t12.5 -43.5q0 -34 -23 -57.5t-56 -23.5h-150v299h133q36 0 61 -25t25 -61q0 -35 -36 -59zM64 309v-64h64q13 0 22.5 9.5t9.5 23t-9.5 22.5t-22.5 9h-64zM139 117q13 0 22.5 9.5t9.5 23t-9.5 22.5t-22.5 9h-75v-64h75z" />
+<glyph unicode="&#xf23e;" horiz-adv-x="384" d="M43 171v42h298v-42h-298zM0 85v43h299v-43h-299zM85 299h299v-43h-299v43z" />
+<glyph unicode="&#xf23f;" horiz-adv-x="384" d="M27 341l6 -5l308 -309l-27 -27l-121 121l-33 -78h-64l53 123l-149 148zM85 341h299v-64h-124l-34 -80l-45 44l16 36h-52l-60 60v4z" />
+<glyph unicode="&#xf240;" horiz-adv-x="512" d="M353 257q10 -9 10 -22.5t-10 -22.5l-117 -117q-9 -10 -22.5 -10t-22.5 10l-118 117q-9 9 -9 22.5t9 22.5l110 110l-51 51l31 30zM111 235h205l-103 102zM405 203q43 -47 43 -75q0 -18 -12.5 -30.5t-30 -12.5t-30 12.5t-12.5 30.5q0 13 10.5 31.5t21.5 30.5zM0 21h512v-85 h-512v85z" />
+<glyph unicode="&#xf241;" horiz-adv-x="338" d="M299 149q0 -14 -3 -28l-184 184q14 19 28.5 37.5t22.5 27.5l8 10q5 -6 13.5 -16.5t30.5 -40t39 -56.5t31 -60.5t14 -57.5zM280 83l58 -59l-27 -27l-56 56q-36 -32 -84 -32q-53 0 -90.5 37.5t-37.5 90.5q0 35 28 88l-71 71l27 28l154 -155z" />
+<glyph unicode="&#xf242;" horiz-adv-x="512" d="M0 21h512v-85h-512v85zM235 384h42l117 -299h-48l-23 64h-134l-24 -64h-48zM205 192h102l-51 135z" />
+<glyph unicode="&#xf243;" horiz-adv-x="384" d="M171 85v43h213v-43h-213zM0 192l85 85v-170zM0 0v43h384v-43h-384zM0 384h384v-43h-384v43zM171 256v43h213v-43h-213zM171 171v42h213v-42h-213z" />
+<glyph unicode="&#xf244;" horiz-adv-x="384" d="M0 0v43h384v-43h-384zM0 277l85 -85l-85 -85v170zM171 85v43h213v-43h-213zM0 384h384v-43h-384v43zM171 256v43h213v-43h-213zM171 171v42h213v-42h-213z" />
+<glyph unicode="&#xf245;" horiz-adv-x="256" d="M85 363h171v-64h-60l-72 -171h47v-64h-171v64h60l72 171h-47v64z" />
+<glyph unicode="&#xf246;" horiz-adv-x="437" d="M96 299v-214h53l-74 -74l-75 74h53v214h-53l75 74l74 -74h-53zM181 341h256v-42h-256v42zM181 43v42h256v-42h-256zM181 171v42h256v-42h-256z" />
+<glyph unicode="&#xf247;" horiz-adv-x="395" d="M32 224q13 0 22.5 -9.5t9.5 -22.5t-9.5 -22.5t-22.5 -9.5t-22.5 9.5t-9.5 22.5t9.5 22.5t22.5 9.5zM32 352q13 0 22.5 -9.5t9.5 -22.5t-9.5 -22.5t-22.5 -9.5t-22.5 9.5t-9.5 22.5t9.5 22.5t22.5 9.5zM32 92q12 0 20 -8t8 -20t-8 -20t-20 -8t-20 8t-8 20t8 20t20 8z M96 43v42h299v-42h-299zM96 171v42h299v-42h-299zM96 341h299v-42h-299v42z" />
+<glyph unicode="&#xf248;" horiz-adv-x="405" d="M0 85v22h64v-86h-64v22h43v10h-22v22h22v10h-43zM21 277v64h-21v22h43v-86h-22zM0 213v22h64v-20l-38 -44h38v-22h-64v20l38 44h-38zM107 341h298v-42h-298v42zM107 43v42h298v-42h-298zM107 171v42h298v-42h-298z" />
+<glyph unicode="&#xf249;" horiz-adv-x="341" d="M85 235q-35 0 -60 25t-25 60t25 60t60 25h171v-42h-43v-235h-42v235h-43v-235h-43v107zM341 64l-85 -85v64h-256v42h256v64z" />
+<glyph unicode="&#xf24a;" horiz-adv-x="341" d="M128 235q-35 0 -60 25t-25 60t25 60t60 25h171v-42h-43v-235h-43v235h-42v-235h-43v107zM85 85h256v-42h-256v-64l-85 85l85 85v-64z" />
+<glyph unicode="&#xf24b;" horiz-adv-x="405" d="M128 363h277v-64h-106v-256h-64v256h-107v64zM0 192v64h192v-64h-64v-149h-64v149h-64z" />
+<glyph unicode="&#xf24c;" horiz-adv-x="469" d="M105 235q-5 4 -7 8q-11 22 -11 47t13 47q8 18 30 36q19 14 49 24q26 8 62 8q40 0 66 -10q25 -6 49 -26q20 -16 30 -40q11 -25 11 -52h-86q0 11 -4 24q-3 13 -13 19q-10 10 -21 13q-17 4 -30 4t-30 -4q-8 -2 -21 -11q-10 -7 -13 -15q-4 -13 -4 -19q0 -22 21 -34 q14 -9 43 -19h-134zM469 192v-43h-91q1 -1 1.5 -2t1 -3t1.5 -3q8 -20 8 -47q0 -24 -10 -49q-8 -18 -30 -36q-21 -18 -47 -24q-26 -8 -62 -8q-15 0 -40 4q-13 2 -39 10q-13 7 -34 20q-14 8 -28 25q-13 17 -19 34q-6 20 -6 45h85q0 -21 6 -34q5 -8 17 -21q10 -10 26 -13 q21 -4 34 -4t30 4q3 2 10 5t9 6q10 6 13 15q4 12 4 19q0 13 -2 19q-3 11 -13 17q-17 12 -25 15q-2 1 -7.5 3t-7.5 3h-254v43h469z" />
+<glyph unicode="&#xf24d;" horiz-adv-x="384" d="M149 43v64h86v-64h-86zM43 363h298v-64h-106v-64h-86v64h-106v64zM0 149v43h384v-43h-384z" />
+<glyph unicode="&#xf24e;" horiz-adv-x="341" d="M213 85v-42h-213v42h213zM341 256v-43h-341v43h341zM0 128v43h341v-43h-341zM0 341h341v-42h-341v42z" />
+<glyph unicode="&#xf24f;" horiz-adv-x="299" d="M149 85q-53 0 -90.5 37.5t-37.5 90.5v171h54v-171q0 -31 21.5 -52.5t52.5 -21.5t53 21.5t22 52.5v171h53v-171q0 -53 -37.5 -90.5t-90.5 -37.5zM0 43h299v-43h-299v43z" />
+<glyph unicode="&#xf250;" horiz-adv-x="341" d="M256 171l-85 -86l-86 86h64v213h43v-213h64zM0 43h341v-43h-341v43z" />
+<glyph unicode="&#xf251;" horiz-adv-x="341" d="M85 43l86 85l85 -85h-64v-86h-43v86h-64zM256 341l-85 -85l-86 85h64v86h43v-86h64zM0 213h341v-42h-341v42z" />
+<glyph unicode="&#xf252;" horiz-adv-x="341" d="M85 213l86 86l85 -86h-64v-213h-43v213h-64zM0 384h341v-43h-341v43z" />
+<glyph unicode="&#xf253;" horiz-adv-x="436" d="M360 222l76 77v-192h-192l78 77q-48 40 -110 40q-56 0 -100.5 -33t-61.5 -84l-50 16q22 68 80.5 111t131.5 43q84 0 148 -55z" />
+<glyph unicode="&#xf254;" horiz-adv-x="384" d="M0 341q0 18 12.5 30.5t30.5 12.5v-43h-43zM0 171v42h43v-42h-43zM85 0v43h43v-43h-43zM0 256v43h43v-43h-43zM213 384v-43h-42v43h42zM341 384q18 0 30.5 -12.5t12.5 -30.5h-43v43zM43 0q-18 0 -30.5 12.5t-12.5 30.5h43v-43zM0 85v43h43v-43h-43zM128 384v-43h-43v43h43 zM171 0v43h42v-43h-42zM341 171v42h43v-42h-43zM341 0v43h43q0 -18 -12.5 -30.5t-30.5 -12.5zM341 256v43h43v-43h-43zM341 85v43h43v-43h-43zM256 0v43h43v-43h-43zM256 341v43h43v-43h-43zM85 85v214h214v-214h-214zM128 256v-128h128v128h-128z" />
+<glyph unicode="&#xf255;" horiz-adv-x="341" d="M299 256h42v-128h-341v128h43v-85h256v85z" />
+<glyph unicode="&#xf256;" horiz-adv-x="299" d="M0 85h299v-42h-299v42zM96 175l-19 -47h-45l101 235h32l102 -235h-45l-19 47h-107zM149 320l-40 -107h80z" />
+<glyph unicode="&#xf257;" d="M427 64h-86v-43h43l-64 -64l-64 64h43v43h-171q-18 0 -30.5 12.5t-12.5 30.5v170h-85v43h85v43h-42l64 64l64 -64h-43v-256h299v-43zM171 277v43h128q17 0 29.5 -12.5t12.5 -30.5v-128h-42v128h-128z" />
+<glyph unicode="&#xf258;" horiz-adv-x="437" d="M224 277q73 0 131.5 -43t81.5 -111l-51 -16q-17 51 -61.5 84t-100.5 33q-61 0 -109 -40l77 -77h-192v192l77 -77q64 55 147 55z" />
+<glyph unicode="&#xf259;" horiz-adv-x="363" d="M0 43v42h128v-42h-128zM341 341v-42h-341v42h341zM277 213q36 0 61 -25t25 -60t-25 -60t-61 -25h-42v-43l-64 64l64 64v-43h48q17 0 29.5 12.5t12.5 30.5t-12.5 30.5t-29.5 12.5h-283v42h277z" />
+<glyph unicode="&#xf25a;" d="M384 405q18 0 30.5 -12.5t12.5 -29.5v-256q0 -18 -12.5 -30.5t-30.5 -12.5h-299l-85 -85v384q0 17 12.5 29.5t30.5 12.5h341zM235 149v43h-43v-43h43zM235 235v85h-43v-85h43z" />
+<glyph unicode="&#xf25b;" d="M384 405q18 0 30.5 -12.5t12.5 -29.5v-384l-86 85h-298q-18 0 -30.5 12.5t-12.5 30.5v256q0 17 12.5 29.5t30.5 12.5h341zM341 149v43h-256v-43h256zM341 213v43h-256v-43h256zM341 277v43h-256v-43h256z" />
+<glyph unicode="&#xf25c;" d="M426 363l1 -384l-86 85h-298q-18 0 -30.5 12.5t-12.5 30.5v256q0 17 12.5 29.5t30.5 12.5h341q18 0 30 -12.5t12 -29.5z" />
+<glyph unicode="&#xf25d;" d="M384 405q18 0 30.5 -12.5t12.5 -29.5v-256q0 -18 -12.5 -30.5t-30.5 -12.5h-299l-85 -85v384q0 17 12.5 29.5t30.5 12.5h341zM85 149h53l147 147q8 7 0 15l-38 38q-7 7 -15 0l-147 -147v-53zM341 149v43h-117l-43 -43h160z" />
+<glyph unicode="&#xf25e;" d="M384 405q18 0 30.5 -12.5t12.5 -29.5v-256q0 -18 -12.5 -30.5t-30.5 -12.5h-299l-85 -85v384q0 17 12.5 29.5t30.5 12.5h341zM64 149h299l-96 128l-75 -96l-53 64z" />
+<glyph unicode="&#xf25f;" d="M384 405q18 0 30.5 -12.5t12.5 -29.5v-256q0 -18 -12.5 -30.5t-30.5 -12.5h-299l-85 -85v384q0 17 12.5 29.5t30.5 12.5h341zM128 149v43h-43v-43h43zM128 213v43h-43v-43h43zM128 277v43h-43v-43h43zM277 149v43h-106v-43h106zM341 213v43h-170v-43h170zM341 277v43 h-170v-43h170z" />
+<glyph unicode="&#xf260;" d="M384 405q18 0 30.5 -12.5t12.5 -29.5v-256q0 -18 -12.5 -30.5t-30.5 -12.5h-299l-85 -85v384q0 17 12.5 29.5t30.5 12.5h341zM149 213v43h-42v-43h42zM235 213v43h-43v-43h43zM320 213v43h-43v-43h43z" />
+<glyph unicode="&#xf261;" d="M384 405q18 0 30.5 -12.5t12.5 -29.5v-256q0 -18 -12.5 -30.5t-30.5 -12.5h-299l-85 -85v384q0 17 12.5 29.5t30.5 12.5h341zM384 107v256h-341v-299l42 43h299z" />
+<glyph unicode="&#xf262;" d="M384 405q18 0 30.5 -12.5t12.5 -29.5v-256q0 -18 -12.5 -30.5t-30.5 -12.5h-299l-85 -85v384q0 17 12.5 29.5t30.5 12.5h341zM85 256v-43h256v43h-256zM256 149v43h-171v-43h171zM341 277v43h-256v-43h256z" />
+<glyph unicode="&#xf263;" d="M384 405q18 0 30.5 -12.5t12.5 -29.5v-256q0 -18 -12.5 -30.5t-30.5 -12.5h-299l-85 -85v384q0 17 12.5 29.5t30.5 12.5h341zM341 149v43h-256v-43h256zM341 213v43h-256v-43h256zM341 277v43h-256v-43h256z" />
+<glyph unicode="&#xf264;" d="M384 405q18 0 30.5 -12.5t12.5 -29.5v-256q0 -18 -12.5 -30.5t-30.5 -12.5h-299l-85 -85v384q0 17 12.5 29.5t30.5 12.5h341zM341 149v171l-85 -68v68h-171v-171h171v69z" />
+<glyph unicode="&#xf265;" d="M384 405q18 0 30.5 -12.5t12.5 -29.5v-256q0 -18 -12.5 -30.5t-30.5 -12.5h-299l-85 -85v384q0 17 12.5 29.5t30.5 12.5h341z" />
+<glyph unicode="&#xf266;" d="M405 320q9 0 15.5 -6.5t6.5 -14.5v-320l-86 85h-234q-9 0 -15.5 6.5t-6.5 14.5v43h278v192h42zM320 192q0 -9 -6.5 -15t-14.5 -6h-214l-85 -86v299q0 9 6.5 15t14.5 6h278q8 0 14.5 -6t6.5 -15v-192z" />
+<glyph unicode="&#xf267;" horiz-adv-x="496" d="M375 299l-135 -136l-30 30l135 136zM466 329l30 -30l-256 -256l-119 119l30 30l89 -89zM0 162l30 30l119 -119l-30 -30z" />
+<glyph unicode="&#xf268;" d="M213 405q88 0 151 -62.5t63 -150.5t-63 -150.5t-151 -62.5t-150.5 62.5t-62.5 150.5t62.5 150.5t150.5 62.5zM320 64v43h-213v-43h213zM177 149l143 143l-30 30l-113 -113l-40 41l-30 -30z" />
+<glyph unicode="&#xf269;" d="M213.5 405q88.5 0 151 -62.5t62.5 -150.5t-62.5 -150.5t-151 -62.5t-151 62.5t-62.5 150.5t62.5 150.5t151 62.5zM171 85l192 192l-30 31l-162 -162l-77 76l-30 -30z" />
+<glyph unicode="&#xf26a;" horiz-adv-x="384" d="M341 384q18 0 30.5 -12.5t12.5 -30.5v-298q0 -18 -12.5 -30.5t-30.5 -12.5h-298q-18 0 -30.5 12.5t-12.5 30.5v298q0 18 12.5 30.5t30.5 12.5h298zM149 85l192 192l-30 31l-162 -162l-76 76l-30 -30z" />
+<glyph unicode="&#xf26b;" horiz-adv-x="375" d="M119 102l227 227l29 -30l-256 -256l-119 119l30 30z" />
+<glyph unicode="&#xf26c;" d="M213.5 405q88.5 0 151 -62.5t62.5 -150.5t-62.5 -150.5t-151 -62.5t-151 62.5t-62.5 150.5t62.5 150.5t151 62.5zM213.5 21q70.5 0 120.5 50t50 121t-50 121t-120.5 50t-120.5 -50t-50 -121t50 -121t120.5 -50z" />
+<glyph unicode="&#xf26d;" d="M213.5 405q88.5 0 151 -62.5t62.5 -150.5t-62.5 -150.5t-151 -62.5t-151 62.5t-62.5 150.5t62.5 150.5t151 62.5z" />
+<glyph unicode="&#xf26e;" d="M213 405q88 0 151 -62.5t63 -150.5t-63 -150.5t-151 -62.5t-150.5 62.5t-62.5 150.5t62.5 150.5t150.5 62.5zM213.5 21q70.5 0 120.5 50t50 121t-50 121t-120.5 50t-120.5 -50t-50 -121t50 -121t120.5 -50zM277 192q0 -27 -18.5 -45.5t-45 -18.5t-45.5 18.5t-19 45.5 t19 45.5t45.5 18.5t45 -18.5t18.5 -45.5z" />
+<glyph unicode="&#xf26f;" d="M213 299q44 0 75.5 -31.5t31.5 -75.5t-31.5 -75.5t-75.5 -31.5t-75 31.5t-31 75.5t31 75.5t75 31.5zM213.5 405q88.5 0 151 -62.5t62.5 -150.5t-62.5 -150.5t-151 -62.5t-151 62.5t-62.5 150.5t62.5 150.5t151 62.5zM213.5 21q70.5 0 120.5 50t50 121t-50 121t-120.5 50 t-120.5 -50t-50 -121t50 -121t120.5 -50z" />
+<glyph unicode="&#xf270;" d="M107 213h213v-42h-213v42zM213.5 405q88.5 0 151 -62.5t62.5 -150.5t-62.5 -150.5t-151 -62.5t-151 62.5t-62.5 150.5t62.5 150.5t151 62.5zM213.5 21q70.5 0 120.5 50t50 121t-50 121t-120.5 50t-120.5 -50t-50 -121t50 -121t120.5 -50z" />
+<glyph unicode="&#xf271;" d="M213.5 405q88.5 0 151 -62.5t62.5 -150.5t-62.5 -150.5t-151 -62.5t-151 62.5t-62.5 150.5t62.5 150.5t151 62.5zM320 171v42h-213v-42h213z" />
+<glyph unicode="&#xf272;" horiz-adv-x="384" d="M341 384q18 0 30.5 -12.5t12.5 -30.5v-298q0 -18 -12.5 -30.5t-30.5 -12.5h-298q-18 0 -30.5 12.5t-12.5 30.5v298q0 18 12.5 30.5t30.5 12.5h298zM299 171v42h-214v-42h214z" />
+<glyph unicode="&#xf273;" horiz-adv-x="299" d="M299 171h-299v42h299v-42z" />
+<glyph unicode="&#xf274;" horiz-adv-x="512" d="M341 277v-64h64v-42h-64v-64h-42v64h-64v42h64v64h42zM43 192q0 -44 23.5 -80.5t61.5 -54.5v-46q-56 20 -92 69.5t-36 111.5t36 111.5t92 69.5v-46q-38 -18 -61.5 -54.5t-23.5 -80.5zM320 384q79 0 135.5 -56.5t56.5 -135.5t-56.5 -135.5t-135.5 -56.5t-135.5 56.5 t-56.5 135.5t56.5 135.5t135.5 56.5zM320 43q62 0 105.5 43.5t43.5 105.5t-43.5 105.5t-105.5 43.5t-105.5 -43.5t-43.5 -105.5t43.5 -105.5t105.5 -43.5z" />
+<glyph unicode="&#xf275;" d="M235 299v-86h85v-42h-85v-86h-43v86h-85v42h85v86h43zM213 405q88 0 151 -62.5t63 -150.5t-63 -150.5t-151 -62.5t-150.5 62.5t-62.5 150.5t62.5 150.5t150.5 62.5zM213.5 21q70.5 0 120.5 50t50 121t-50 121t-120.5 50t-120.5 -50t-50 -121t50 -121t120.5 -50z" />
+<glyph unicode="&#xf276;" d="M213.5 405q88.5 0 151 -62.5t62.5 -150.5t-62.5 -150.5t-151 -62.5t-151 62.5t-62.5 150.5t62.5 150.5t151 62.5zM320 171v42h-85v86h-43v-86h-85v-42h85v-86h43v86h85z" />
+<glyph unicode="&#xf277;" horiz-adv-x="384" d="M341 384q18 0 30.5 -12.5t12.5 -30.5v-298q0 -18 -12.5 -30.5t-30.5 -12.5h-298q-18 0 -30.5 12.5t-12.5 30.5v298q0 18 12.5 30.5t30.5 12.5h298zM299 171v42h-86v86h-42v-86h-86v-42h86v-86h42v86h86z" />
+<glyph unicode="&#xf278;" horiz-adv-x="299" d="M299 171h-128v-128h-43v128h-128v42h128v128h43v-128h128v-42z" />
+<glyph unicode="&#xf279;" horiz-adv-x="384" d="M341 341h-298v-298h298v298zM341 384q18 0 30.5 -12.5t12.5 -30.5v-298q0 -18 -12.5 -30.5t-30.5 -12.5h-298q-18 0 -30.5 12.5t-12.5 30.5v298q0 18 12.5 30.5t30.5 12.5h298z" />
+<glyph unicode="&#xf27a;" d="M213.5 405q88.5 0 151 -62.5t62.5 -150.5t-62.5 -150.5t-151 -62.5t-151 62.5t-62.5 150.5t62.5 150.5t151 62.5zM304 64l-24 103l79 69l-105 9l-41 96l-41 -97l-105 -8l80 -69l-24 -103l90 54z" />
+<glyph unicode="&#xf27b;" d="M427 240l-117 -101l35 -150l-132 80l-132 -80l35 150l-116 101l153 13l60 142l60 -142zM213 109l81 -49l-22 91l71 62l-93 8l-37 86v-198z" />
+<glyph unicode="&#xf27c;" d="M427 251l-117 -101l35 -150l-132 80l-132 -80l35 150l-116 101l153 13l60 141l60 -141zM213 119l81 -48l-22 91l71 62l-93 8l-37 86l-36 -86l-93 -8l70 -62l-21 -91z" />
+<glyph unicode="&#xf27d;" d="M213 80l-132 -80l35 150l-116 101l153 13l60 141l60 -141l154 -13l-117 -101l35 -150z" />
+<glyph unicode="&#xf27e;" horiz-adv-x="384" d="M85 192l-42 -43l-43 43l43 43zM314 284l-92 -92l92 -92l-122 -121h-21v162l-98 -98l-30 30l119 119l-119 119l30 30l98 -98v162h21zM213 324v-81l40 41zM253 100l-40 41v-81zM341 235l43 -43l-43 -43l-42 43z" />
+<glyph unicode="&#xf27f;" horiz-adv-x="341" d="M192 324v-69l-43 43v107h22l121 -121l-64 -65l-30 30l34 35zM30 363l311 -312l-30 -30l-49 49l-91 -91h-22v162l-98 -98l-30 30l120 119l-141 141zM192 60l40 40l-40 41v-81z" />
+<glyph unicode="&#xf280;" horiz-adv-x="384" d="M240 192l49 49q10 -24 10 -49q0 -26 -10 -50zM353 305q31 -51 31 -111q0 -61 -33 -113l-25 25q21 41 21 86q0 46 -21 86zM271 284l-92 -92l92 -92l-122 -121h-21v162l-98 -98l-30 30l119 119l-119 119l30 30l98 -98v162h21zM171 324v-81l40 41zM211 100l-40 41v-81z" />
+<glyph unicode="&#xf281;" horiz-adv-x="271" d="M128 -64v43h43v-43h-43zM43 -64v43h42v-43h-42zM213 -64v43h43v-43h-43zM271 326l-92 -91l92 -92l-122 -122h-21v162l-98 -98l-30 30l119 120l-119 119l30 30l98 -98v162h21zM171 366v-80l40 40zM211 143l-40 40v-80z" />
+<glyph unicode="&#xf282;" horiz-adv-x="271" d="M271 284l-92 -92l92 -92l-122 -121h-21v162l-98 -98l-30 30l119 119l-119 119l30 30l98 -98v162h21zM171 324v-81l40 41zM211 100l-40 41v-81z" />
+<glyph unicode="&#xf283;" d="M149 384h128l39 -43h68q18 0 30.5 -12.5t12.5 -29.5v-256q0 -18 -12.5 -30.5t-30.5 -12.5h-341q-18 0 -30.5 12.5t-12.5 30.5v256q0 17 12.5 29.5t30.5 12.5h67zM213 64q44 0 75.5 31.5t31.5 75.5t-31.5 75t-75.5 31t-75 -31t-31 -75t31 -75.5t75 -31.5zM213 85l-26 59 l-59 27l59 26l26 59l27 -59l59 -26l-59 -27z" />
+<glyph unicode="&#xf284;" d="M158 224l-1 -2l-78 135q58 48 134 48q23 0 47 -5zM417 256h-206l78 135q46 -17 79.5 -52.5t48.5 -82.5zM422 235q5 -22 5 -43q0 -83 -57 -144l-101 176l-6 11h159zM140 192l24 -43h-160q-4 22 -4 43q0 82 56 144zM10 128h206l-78 -135q-46 17 -79.5 52.5t-48.5 82.5z M250 128l20 34l78 -135q-59 -48 -135 -48q-22 0 -46 5z" />
+<glyph unicode="&#xf285;" d="M384 341q18 0 30.5 -12.5t12.5 -29.5v-256q0 -18 -12.5 -30.5t-30.5 -12.5h-341q-18 0 -30.5 12.5t-12.5 30.5v256q0 17 12.5 29.5t30.5 12.5h68l38 43h128l39 -43h68zM384 43v256h-171v-22q-44 0 -75 -31t-31 -75.5t31 -75.5t75 -31v-21h171zM320 170.5 q0 -44.5 -31 -75.5t-76 -31v38q29 0 49 20t20 48.5t-20 48.5t-49 20v38q45 0 76 -31t31 -75.5zM145 170.5q0 28.5 20 48.5t48 20v-137q-28 0 -48 20t-20 48.5z" />
+<glyph unicode="&#xf286;" horiz-adv-x="299" d="M107 21v43l64 -64l-64 -64v43h-107v42h107zM192 21h107v-42h-107v42zM149.5 277q-17.5 0 -30 12.5t-12.5 30.5t12.5 30.5t30 12.5t30 -12.5t12.5 -30.5t-12.5 -30.5t-30 -12.5zM256 448q18 0 30.5 -12.5t12.5 -30.5v-298q0 -18 -12.5 -30.5t-30.5 -12.5h-213 q-18 0 -30.5 12.5t-12.5 30.5v298q0 18 12.5 30.5t30.5 12.5h213zM43 405v-224q0 24 36.5 39t70 15t70 -15t36.5 -39v224h-213z" />
+<glyph unicode="&#xf287;" d="M384 341q18 0 30.5 -12.5t12.5 -29.5v-256q0 -18 -12.5 -30.5t-30.5 -12.5h-149v45q45 7 75.5 43t30.5 83h-42q0 -36 -25 -61t-60.5 -25t-60.5 25t-25 61h-43q0 -47 30.5 -83t76.5 -43v-45h-149q-18 0 -30.5 12.5t-12.5 30.5v256q0 17 12.5 29.5t30.5 12.5h67l39 43h128 l39 -43h68zM256 171v85q0 18 -12.5 30.5t-30 12.5t-30 -12.5t-12.5 -30.5v-85q0 -18 12.5 -30.5t30 -12.5t30 12.5t12.5 30.5z" />
+<glyph unicode="&#xf288;" d="M384 363q18 0 30.5 -12.5t12.5 -30.5v-256q0 -18 -12.5 -30.5t-30.5 -12.5h-341q-18 0 -30.5 12.5t-12.5 30.5v256q0 18 12.5 30.5t30.5 12.5h67l39 42h128l39 -42h68zM213 299q-44 0 -75 -31.5t-31 -75.5q0 -10 2 -21h44q-4 10 -4 21q0 27 19 45.5t45 18.5h85 q-32 43 -85 43zM213 85q44 0 75.5 31.5t31.5 75.5q0 12 -2 21h-45q4 -10 4 -21q0 -27 -18.5 -45.5t-45.5 -18.5h-85q33 -43 85 -43z" />
+<glyph unicode="&#xf289;" horiz-adv-x="299" d="M107 21v43l64 -64l-64 -64v43h-107v42h107zM192 21h107v-42h-107v42zM256 448q18 0 30.5 -12.5t12.5 -30.5v-298q0 -18 -12.5 -30.5t-30.5 -12.5h-213q-18 0 -30.5 12.5t-12.5 30.5v298q0 18 12.5 30.5t30.5 12.5h213zM149.5 320q17.5 0 30 12.5t12.5 30t-12.5 30 t-30 12.5t-30 -12.5t-12.5 -30t12.5 -30t30 -12.5z" />
+<glyph unicode="&#xf28a;" d="M256 341h171v-320h-171q0 -17 -12.5 -29.5t-30.5 -12.5h-170q-18 0 -30.5 12.5t-12.5 29.5v320q0 18 12.5 30.5t30.5 12.5h21v21q0 9 6.5 15.5t14.5 6.5h86q8 0 14.5 -6.5t6.5 -15.5v-21h21q18 0 30.5 -12.5t12.5 -30.5zM213 64v43h-42v-43h42zM213 256v43h-42v-43h42z M299 64v43h-43v-43h43zM299 256v43h-43v-43h43zM384 64v43h-43v-43h43zM384 256v43h-43v-43h43z" />
+<glyph unicode="&#xf28b;" d="M384 363q18 0 30.5 -12.5t12.5 -30.5v-256q0 -18 -12.5 -30.5t-30.5 -12.5h-341q-18 0 -30.5 12.5t-12.5 30.5v256q0 18 12.5 30.5t30.5 12.5h67l39 42h128l39 -42h68zM277 117l75 75l-75 75v-54h-128v54l-74 -75l74 -75v54h128v-54z" />
+<glyph unicode="&#xf28c;" d="M145 192q0 68 68.5 68t68.5 -68t-68.5 -68t-68.5 68zM149 405h128l39 -42h68q18 0 30.5 -12.5t12.5 -30.5v-256q0 -18 -12.5 -30.5t-30.5 -12.5h-341q-18 0 -30.5 12.5t-12.5 30.5v256q0 18 12.5 30.5t30.5 12.5h67zM213 85q44 0 75.5 31.5t31.5 75.5t-31.5 75.5 t-75.5 31.5t-75 -31.5t-31 -75.5t31 -75.5t75 -31.5z" />
+<glyph unicode="&#xf28d;" horiz-adv-x="341" d="M299 405q17 0 29.5 -12.5t12.5 -29.5v-342q0 -17 -12.5 -29.5t-29.5 -12.5h-256q-18 0 -30.5 12.5t-12.5 29.5v256l128 128h171zM192 85v43h-43v-43h43zM192 171v106h-43v-106h43z" />
+<glyph unicode="&#xf28e;" horiz-adv-x="400" d="M354 341l1 -249l-242 242l50 50h149q17 0 29.5 -12.5t12.5 -30.5zM27 365l373 -372l-27 -28l-40 41q-10 -6 -21 -6h-213q-18 0 -30.5 12.5t-12.5 30.5v239l-56 56z" />
+<glyph unicode="&#xf28f;" horiz-adv-x="341" d="M299 405q17 0 29.5 -12.5t12.5 -29.5v-342q0 -17 -12.5 -29.5t-29.5 -12.5h-256q-18 0 -30.5 12.5t-12.5 29.5v256l128 128h171zM171 277v86h-43v-86h43zM235 277v86h-43v-86h43zM299 277v86h-43v-86h43z" />
+<glyph unicode="&#xf290;" horiz-adv-x="341" d="M341 363v-342q0 -17 -12.5 -29.5t-29.5 -12.5h-256q-18 0 -30.5 12.5t-12.5 29.5v256l128 128h171q17 0 29.5 -12.5t12.5 -29.5zM107 43v42h-43v-42h43zM277 43v42h-42v-42h42zM107 128v85h-43v-85h43zM192 43v85h-43v-85h43zM192 171v42h-43v-42h43zM277 128v85h-42v-85 h42z" />
+<glyph unicode="&#xf291;" horiz-adv-x="469" d="M427 405q17 0 29.5 -12.5t12.5 -29.5v-256q0 -18 -12.5 -30.5t-29.5 -12.5h-150l43 -64v-21h-171v21l43 64h-149q-18 0 -30.5 12.5t-12.5 30.5v256q0 17 12.5 29.5t30.5 12.5h384zM427 149v214h-384v-214h384z" />
+<glyph unicode="&#xf292;" horiz-adv-x="469" d="M427 405q17 0 29.5 -12.5t12.5 -29.5v-256q0 -18 -12.5 -30.5t-29.5 -12.5h-150v-43h43v-42h-171v42h43v43h-149q-18 0 -30.5 12.5t-12.5 30.5v256q0 17 12.5 29.5t30.5 12.5h384zM427 107v256h-384v-256h384z" />
+<glyph unicode="&#xf293;" horiz-adv-x="384" d="M299 107h85v-107h-107v65l-85 90l-85 -90v-65h-107v107h85l86 85v68q-19 7 -31 23.5t-12 36.5q0 27 18.5 45.5t45.5 18.5t45.5 -18.5t18.5 -45.5q0 -20 -12 -36.5t-31 -23.5v-68z" />
+<glyph unicode="&#xf294;" horiz-adv-x="512" d="M469 320h-281l-43 43h324v-43zM41 413l42 -42l372 -373l-27 -27l-50 50h-378v64h43v235q0 15 10 27l-39 39zM85 314v-229h229zM491 277q8 0 14.5 -6t6.5 -15v-213q0 -9 -6.5 -15.5t-14.5 -6.5h-4l-64 64h46v150h-85v-111l-43 43v89q0 9 6.5 15t15.5 6h128z" />
+<glyph unicode="&#xf295;" horiz-adv-x="512" d="M85 320v-235h214v-64h-299v64h43v235q0 18 12.5 30.5t29.5 12.5h384v-43h-384zM491 277q8 0 14.5 -6t6.5 -15v-213q0 -9 -6.5 -15.5t-14.5 -6.5h-128q-9 0 -15.5 6.5t-6.5 15.5v213q0 9 6.5 15t15.5 6h128zM469 85v150h-85v-150h85z" />
+<glyph unicode="&#xf296;" horiz-adv-x="256" d="M43 -43v43h170v-43h-170zM213 426q18 0 30.5 -12t12.5 -30v-299q0 -17 -12.5 -29.5t-30.5 -12.5h-170q-18 0 -30.5 12.5t-12.5 29.5v299q0 18 12.5 30.5t30.5 12.5zM213 128v213h-170v-213h170z" />
+<glyph unicode="&#xf297;" horiz-adv-x="384" d="M299 384l85 -85v-256q0 -18 -12.5 -30.5t-30.5 -12.5h-298q-18 0 -30.5 12.5t-12.5 30.5v298q0 18 12.5 30.5t30.5 12.5h256zM192 43q27 0 45.5 18.5t18.5 45t-18.5 45.5t-45.5 19t-45.5 -19t-18.5 -45.5t18.5 -45t45.5 -18.5zM256 256v85h-213v-85h213z" />
+<glyph unicode="&#xf298;" d="M277 288l-64 -64l-64 64v117h128v-117zM117 256l64 -64l-64 -64h-117v128h117zM149 96l64 64l64 -64v-117h-128v117zM309 256h118v-128h-118l-64 64z" />
+<glyph unicode="&#xf299;" horiz-adv-x="469" d="M234.5 277q35.5 0 60.5 -25t25 -60t-25 -60t-60.5 -25t-60.5 25t-25 60t25 60t60.5 25zM425 213h44v-42h-44q-7 -67 -54.5 -114.5t-114.5 -55.5v-44h-43v44q-66 8 -114 55.5t-55 114.5h-44v42h44q7 67 55 114.5t114 55.5v44h43v-44q67 -8 114.5 -55.5t54.5 -114.5z M235 43q62 0 105.5 43.5t43.5 105.5t-43.5 105.5t-105.5 43.5t-106 -43.5t-44 -105.5t44 -105.5t106 -43.5z" />
+<glyph unicode="&#xf29a;" horiz-adv-x="469" d="M425 213h44v-42h-43q-4 -36 -21 -68l-32 32q11 28 11 57q0 62 -43.5 105.5t-105.5 43.5q-30 0 -57 -11l-32 32q32 17 67 21v44h43v-44q67 -8 114.5 -55.5t54.5 -114.5zM43 357l27 27l357 -357l-27 -27l-44 44q-44 -36 -100 -43v-44h-43v44q-66 8 -114 55.5t-55 114.5h-44 v42h44q6 56 42 100zM326 74l-210 209q-31 -40 -31 -91q0 -62 44 -105.5t106 -43.5q50 0 91 31z" />
+<glyph unicode="&#xf29b;" horiz-adv-x="469" d="M425 213h44v-42h-44q-7 -67 -54.5 -114.5t-114.5 -55.5v-44h-43v44q-66 8 -114 55.5t-55 114.5h-44v42h44q7 67 55 114.5t114 55.5v44h43v-44q67 -8 114.5 -55.5t54.5 -114.5zM235 43q62 0 105.5 43.5t43.5 105.5t-43.5 105.5t-105.5 43.5t-106 -43.5t-44 -105.5 t44 -105.5t106 -43.5z" />
+<glyph unicode="&#xf29c;" horiz-adv-x="384" d="M192 427q80 0 136 -56.5t56 -135.5v-214q0 -26 -18.5 -45t-45.5 -19h-128v43h149v21h-85v171h85v43q0 62 -43.5 105.5t-105.5 43.5t-105.5 -43.5t-43.5 -105.5v-43h85v-171h-64q-27 0 -45.5 19t-18.5 45v150q0 79 56 135.5t136 56.5z" />
+<glyph unicode="&#xf29d;" horiz-adv-x="384" d="M192 427q80 0 136 -56.5t56 -135.5v-150q0 -26 -18.5 -45t-45.5 -19h-64v171h85v43q0 62 -43.5 105.5t-105.5 43.5t-105.5 -43.5t-43.5 -105.5v-43h85v-171h-64q-27 0 -45.5 19t-18.5 45v150q0 79 56 135.5t136 56.5z" />
+<glyph unicode="&#xf29e;" horiz-adv-x="469" d="M235 341q62 0 105.5 -43.5t43.5 -105.5h-43q0 44 -31 75.5t-75 31.5t-75.5 -31.5t-31.5 -75.5h-43q0 62 44 105.5t106 43.5zM256 143v-70l73 -73l-30 -30l-64 64l-64 -64l-30 30l72 73v70q-14 6 -23 19.5t-9 29.5q0 22 16 37.5t38 15.5t37.5 -15.5t15.5 -37.5 q0 -35 -32 -49zM235 427q97 0 165.5 -69t68.5 -166h-42q0 80 -56.5 136t-136 56t-135.5 -56t-56 -136h-43q0 97 69 166t166 69z" />
+<glyph unicode="&#xf29f;" horiz-adv-x="469" d="M85 405v-85h43v-128h-128v128h43v85q0 9 6 15.5t15 6.5t15 -6.5t6 -15.5zM171 107v42h128v-42q0 -21 -12 -37.5t-31 -22.5v-90h-43v90q-19 6 -30.5 22.5t-11.5 37.5zM0 107v42h128v-42q0 -21 -12 -37.5t-31 -22.5v-90h-42v90q-19 6 -31 22.5t-12 37.5zM427 320h42v-128 h-128v128h43v85q0 9 6.5 15.5t15 6.5t15 -6.5t6.5 -15.5v-85zM256 405v-85h43v-128h-128v128h42v85q0 9 6.5 15.5t15 6.5t15 -6.5t6.5 -15.5zM341 107v42h128v-42q0 -21 -11.5 -37.5t-30.5 -22.5v-90h-43v90q-19 6 -31 22.5t-12 37.5z" />
+<glyph unicode="&#xf2a0;" horiz-adv-x="299" d="M277 299h22v-128l-64 -128v-64h-171v64l-64 128v128h21v64q0 17 12.5 29.5t30.5 12.5h171q17 0 29.5 -12.5t12.5 -29.5v-64zM64 363v-64h43v42h21v-42h43v42h21v-42h43v64h-171z" />
+<glyph unicode="&#xf2a1;" horiz-adv-x="256" d="M214 299q15 0 28.5 -13.5t13.5 -29.5v-117l-75 -75v-64h-106v64l-75 75v117q0 16 13.5 29.5t28.5 13.5h1v85h42v-85h86v85h42z" />
+<glyph unicode="&#xf2a2;" horiz-adv-x="469" d="M149 202.5q0 -13.5 -9 -22.5t-22.5 -9t-23 9t-9.5 22.5t9.5 23t23 9.5t22.5 -9.5t9 -23zM299 309.5q0 -13.5 -9.5 -23t-22.5 -9.5h-64q-14 0 -23 9.5t-9 23t9 22.5t23 9h64q13 0 22.5 -9t9.5 -22.5zM160 128q13 0 22.5 -9.5t9.5 -22.5t-9.5 -22.5t-22.5 -9.5t-22.5 9.5 t-9.5 22.5t9.5 22.5t22.5 9.5zM235 427q97 0 165.5 -69t68.5 -166t-68.5 -166t-165.5 -69t-166 69t-69 166t69 166t166 69zM234.5 0q79.5 0 136 56.5t56.5 135.5t-56.5 135.5t-136 56.5t-135.5 -56.5t-56 -135.5t56 -135.5t135.5 -56.5zM352 235q13 0 22.5 -9.5t9.5 -23 t-9.5 -22.5t-22.5 -9t-22.5 9t-9.5 22.5t9.5 23t22.5 9.5zM309.5 128q13.5 0 22.5 -9.5t9 -22.5t-9 -22.5t-22.5 -9.5t-23 9.5t-9.5 22.5t9.5 22.5t23 9.5z" />
+<glyph unicode="&#xf2a3;" d="M384 384q18 0 30.5 -12.5t12.5 -30.5v-213q0 -18 -12.5 -30.5t-30.5 -12.5h-341q-18 0 -30.5 12.5t-12.5 30.5v213q0 18 12.5 30.5t30.5 12.5h341zM192 320v-43h43v43h-43zM192 256v-43h43v43h-43zM128 320v-43h43v43h-43zM128 256v-43h43v43h-43zM107 213v43h-43v-43h43 zM107 277v43h-43v-43h43zM299 128v43h-171v-43h171zM299 213v43h-43v-43h43zM299 277v43h-43v-43h43zM363 213v43h-43v-43h43zM363 277v43h-43v-43h43zM213 -43l-85 86h171z" />
+<glyph unicode="&#xf2a4;" d="M384 341q18 0 30.5 -12.5t12.5 -29.5v-214q0 -17 -12.5 -29.5t-30.5 -12.5h-341q-18 0 -30.5 12.5t-12.5 29.5v214q0 17 12.5 29.5t30.5 12.5h341zM192 277v-42h43v42h-43zM192 213v-42h43v42h-43zM128 277v-42h43v42h-43zM128 213v-42h43v42h-43zM107 171v42h-43v-42h43 zM107 235v42h-43v-42h43zM299 85v43h-171v-43h171zM299 171v42h-43v-42h43zM299 235v42h-43v-42h43zM363 171v42h-43v-42h43zM363 235v42h-43v-42h43z" />
+<glyph unicode="&#xf2a5;" horiz-adv-x="512" d="M469 64h43v-43h-512v43h43v320h426v-320zM299 64v21h-86v-21h86zM427 128v213h-342v-213h342z" />
+<glyph unicode="&#xf2a6;" horiz-adv-x="512" d="M427 64h85q0 -18 -12.5 -30.5t-30.5 -12.5h-426q-18 0 -30.5 12.5t-12.5 30.5h85q-17 0 -29.5 12.5t-12.5 30.5v234q0 18 12.5 30.5t29.5 12.5h342q17 0 29.5 -12.5t12.5 -30.5v-234q0 -18 -12.5 -30.5t-29.5 -12.5zM85 341v-234h342v234h-342zM256 43q9 0 15 6t6 15 t-6 15t-15 6t-15 -6t-6 -15t6 -15t15 -6z" />
+<glyph unicode="&#xf2a7;" horiz-adv-x="512" d="M427 64h85v-43h-512v43h85q-17 0 -29.5 12.5t-12.5 30.5v213q0 18 12.5 30.5t29.5 12.5h342q17 0 29.5 -12.5t12.5 -30.5v-213q0 -18 -12.5 -30.5t-29.5 -12.5zM85 320v-213h342v213h-342z" />
+<glyph unicode="&#xf2a8;" horiz-adv-x="384" d="M341 213q0 -36 -19 -70l-26 27q9 21 9 43h36zM256 210l-128 127v4q0 27 18.5 45.5t45.5 18.5t45.5 -18.5t18.5 -45.5v-128v-1.5v-1.5zM27 384l357 -357l-27 -27l-89 89q-26 -15 -55 -19v-70h-42v70q-54 8 -91 49t-37 94h36q0 -46 33.5 -77t79.5 -31q25 0 49 11l-35 35 q-7 -2 -14 -2q-27 0 -45.5 19t-18.5 45v16l-128 128z" />
+<glyph unicode="&#xf2a9;" horiz-adv-x="299" d="M149.5 139q-26.5 0 -45.5 18.5t-19 45.5v128q0 26 19 45t45.5 19t45 -19t18.5 -45v-128q0 -27 -18.5 -45.5t-45 -18.5zM124 333v-132q0 -11 7.5 -18.5t18 -7.5t18 7.5t7.5 18.5v132q0 10 -7.5 17.5t-18 7.5t-18 -7.5t-7.5 -17.5zM262 203h37q0 -54 -37.5 -95t-90.5 -49 v-70h-43v70q-53 8 -90.5 49t-37.5 95h36q0 -47 34 -78t79.5 -31t79 31t33.5 78z" />
+<glyph unicode="&#xf2aa;" horiz-adv-x="299" d="M43 -64v43h42v-43h-42zM149.5 171q-26.5 0 -45.5 18.5t-19 45.5v128q0 26 19 45t45.5 19t45 -19t18.5 -45v-128q0 -27 -18.5 -45.5t-45 -18.5zM128 -64v43h43v-43h-43zM213 -64v43h43v-43h-43zM299 235q0 -54 -37.5 -95t-90.5 -49v-70h-43v70q-53 8 -90.5 49t-37.5 95h36 q0 -47 34 -78t79.5 -31t79 31t33.5 78h37z" />
+<glyph unicode="&#xf2ab;" horiz-adv-x="299" d="M149.5 149q-26.5 0 -45.5 19t-19 45v128q0 27 19 45.5t45.5 18.5t45 -18.5t18.5 -45.5v-128q0 -26 -18.5 -45t-45 -19zM262 213h37q0 -54 -37.5 -94.5t-90.5 -48.5v-70h-43v70q-53 8 -90.5 49t-37.5 94h36q0 -46 34 -77t79.5 -31t79 31t33.5 77z" />
+<glyph unicode="&#xf2ac;" horiz-adv-x="341" d="M192 425q64 -8 106.5 -56t42.5 -113h-149v169zM0 128v85h341v-85q0 -71 -50 -121t-120.5 -50t-120.5 50t-50 121zM149 425v-169h-149q0 65 43 113t106 56z" />
+<glyph unicode="&#xf2ad;" d="M384 64v171h43v-171h-43zM384 -21v42h43v-42h-43zM0 -21l427 426v-128h-86v-298h-341z" />
+<glyph unicode="&#xf2ae;" horiz-adv-x="469" d="M395 235q-40 0 -68 -28.5t-28 -67.5v-6q-22 -19 -22 -48v-64h-277l405 406v-193q-9 1 -10 1zM448 107q9 0 15 -6.5t6 -15.5v-85q0 -9 -6 -15t-15 -6h-107q-8 0 -14.5 6t-6.5 15v85q0 9 6.5 15.5t14.5 6.5v32q0 22 16 37.5t38 15.5t37.5 -15.5t15.5 -37.5v-32zM427 107v32 q0 13 -9.5 22.5t-23 9.5t-22.5 -9.5t-9 -22.5v-32h64z" />
+<glyph unicode="&#xf2af;" horiz-adv-x="448" d="M427 427v-367l-184 183zM80 352l368 -368l-27 -27l-43 43h-378l189 189l-136 136z" />
+<glyph unicode="&#xf2b0;" d="M384 302l-281 -281h281v281zM427 405v-426h-427z" />
+<glyph unicode="&#xf2b1;" horiz-adv-x="509" d="M405 203q-66 0 -113 -47t-47 -113q0 -9 2 -22h-247l427 427l-1 -247q-12 2 -21 2zM484 32l23 -17q3 -3 1 -7l-21 -37q-2 -4 -7 -3l-26 11q-8 -6 -18 -10l-4 -29q-1 -4 -6 -4h-42q-5 0 -6 4l-4 29q-9 3 -18 10l-26 -11q-5 -1 -7 3l-21 37q-2 4 1 7l23 17q-1 5 -1 10.5 t1 10.5l-23 18q-3 3 -1 7l21 37q3 3 7 2l26 -11q8 6 18 11l4 28q1 4 6 4h42q5 0 6 -4l4 -28q9 -4 18 -11l26 11q5 1 7 -2l21 -37q2 -4 -1 -7l-23 -18q1 -4 1 -10q0 -4 -1 -11zM405 11q13 0 22.5 9t9.5 22.5t-9.5 23t-22.5 9.5t-22.5 -9.5t-9.5 -23t9.5 -22.5t22.5 -9z" />
+<glyph unicode="&#xf2b2;" d="M0 -21l427 426v-426h-427z" />
+<glyph unicode="&#xf2b3;" horiz-adv-x="384" d="M250 245l-15 15l59 60l-59 60l15 15l49 -49v81h10l61 -61l-46 -46l46 -46l-61 -61h-10v81zM320 386v-40l20 20zM320 294v-40l20 20zM363 117q8 0 14.5 -6t6.5 -15v-75q0 -8 -6.5 -14.5t-14.5 -6.5q-99 0 -182.5 48.5t-132 132t-48.5 182.5q0 8 6.5 14.5t14.5 6.5h75 q9 0 15 -6.5t6 -14.5q0 -40 12 -76q4 -13 -5 -22l-47 -47q47 -93 141 -141l47 47q9 9 22 5q36 -12 76 -12z" />
+<glyph unicode="&#xf2b4;" horiz-adv-x="512" d="M256 256q-51 0 -98 -15v-66q0 -14 -12 -20q-31 -15 -57 -39q-6 -6 -15 -6t-15 6l-53 53q-6 6 -6 15t6 15q105 100 250 100t250 -100q6 -6 6 -15t-6 -15l-53 -53q-6 -6 -15 -6t-15 6q-25 23 -57 39q-12 6 -12 19v66q-47 16 -98 16z" />
+<glyph unicode="&#xf2b5;" d="M320 213v64h-85v86h85v64l107 -107zM363 117q8 0 14.5 -6t6.5 -15v-75q0 -8 -6.5 -14.5t-14.5 -6.5q-99 0 -182.5 48.5t-132 132t-48.5 182.5q0 8 6.5 14.5t14.5 6.5h75q9 0 15 -6.5t6 -14.5q0 -40 12 -76q4 -13 -5 -22l-47 -47q47 -93 141 -141l47 47q9 9 22 5 q36 -12 76 -12z" />
+<glyph unicode="&#xf2b6;" horiz-adv-x="384" d="M363 117q8 0 14.5 -6t6.5 -15v-75q0 -8 -6.5 -14.5t-14.5 -6.5q-99 0 -182.5 48.5t-132 132t-48.5 182.5q0 8 6.5 14.5t14.5 6.5h75q9 0 15 -6.5t6 -14.5q0 -40 12 -76q4 -13 -5 -22l-47 -47q47 -93 141 -141l47 47q9 9 22 5q36 -12 76 -12zM341 192q0 62 -43.5 105.5 t-105.5 43.5v43q80 0 136 -56t56 -136h-43zM256 192q0 27 -18.5 45.5t-45.5 18.5v43q44 0 75.5 -31.5t31.5 -75.5h-43z" />
+<glyph unicode="&#xf2b7;" horiz-adv-x="384" d="M363 117q8 0 14.5 -6t6.5 -15v-75q0 -8 -6.5 -14.5t-14.5 -6.5q-99 0 -182.5 48.5t-132 132t-48.5 182.5q0 8 6.5 14.5t14.5 6.5h75q9 0 15 -6.5t6 -14.5q0 -40 12 -76q4 -13 -5 -22l-47 -47q47 -93 141 -141l47 47q9 9 22 5q36 -12 76 -12zM363 363q8 0 14.5 -6.5 t6.5 -15.5v-85q0 -9 -6.5 -15t-14.5 -6h-107q-9 0 -15 6t-6 15v85q0 9 6 15.5t15 6.5v10q0 22 15.5 38t37.5 16t38 -16t16 -38v-10zM346 363v10q0 15 -11 26t-26 11t-25.5 -11t-10.5 -26v-10h73z" />
+<glyph unicode="&#xf2b8;" horiz-adv-x="512" d="M139 331v-75h-32v128h128v-32h-75l96 -96l128 128l21 -21l-149 -150zM506 92q6 -6 6 -15t-6 -15l-53 -53q-6 -6 -15 -6t-15 6q-27 24 -57 40q-12 5 -12 19v66q-47 15 -98 15t-98 -15v-66q0 -14 -12 -20q-32 -16 -57 -39q-6 -6 -15 -6t-15 6l-53 53q-6 6 -6 15t6 15 q105 100 250 100t250 -100z" />
+<glyph unicode="&#xf2b9;" horiz-adv-x="384" d="M363 117q8 0 14.5 -6t6.5 -15v-75q0 -8 -6.5 -14.5t-14.5 -6.5q-99 0 -182.5 48.5t-132 132t-48.5 182.5q0 8 6.5 14.5t14.5 6.5h75q9 0 15 -6.5t6 -14.5q0 -40 12 -76q4 -13 -5 -22l-47 -47q47 -93 141 -141l47 47q9 9 22 5q36 -12 76 -12zM192 384h192v-149h-128 l-64 -64v213z" />
+<glyph unicode="&#xf2ba;" horiz-adv-x="384" d="M299 384v-149h-43v149h43zM363 117q8 0 14.5 -6t6.5 -15v-75q0 -8 -6.5 -14.5t-14.5 -6.5q-99 0 -182.5 48.5t-132 132t-48.5 182.5q0 8 6.5 14.5t14.5 6.5h75q9 0 15 -6.5t6 -14.5q0 -40 12 -76q4 -13 -5 -22l-47 -47q47 -93 141 -141l47 47q9 9 22 5q36 -12 76 -12z M341 384h43v-149h-43v149z" />
+<glyph unicode="&#xf2bb;" horiz-adv-x="512" d="M506 92q6 -6 6 -15t-6 -15l-53 -53q-6 -6 -15 -6t-15 6q-26 24 -57 40q-12 5 -12 19v66q-47 15 -98 15t-98 -15v-66q0 -14 -12 -20q-32 -16 -57 -39q-6 -6 -15 -6t-15 6l-53 53q-6 6 -6 15t6 15q105 100 250 100t250 -100zM451 314l-76 -75l-30 30l76 76zM277 405v-106 h-42v106h42zM137 239q-74 75 -76 75l30 31l76 -76z" />
+<glyph unicode="&#xf2bc;" horiz-adv-x="384" d="M213 256v-43h-42v43h42zM299 256v-43h-43v43h43zM363 117q8 0 14.5 -6t6.5 -15v-75q0 -8 -6.5 -14.5t-14.5 -6.5q-99 0 -182.5 48.5t-132 132t-48.5 182.5q0 8 6.5 14.5t14.5 6.5h75q9 0 15 -6.5t6 -14.5q0 -40 12 -76q4 -13 -5 -22l-47 -47q47 -93 141 -141l47 47 q9 9 22 5q36 -12 76 -12zM341 256h43v-43h-43v43z" />
+<glyph unicode="&#xf2bd;" horiz-adv-x="384" d="M299 384v-107h-22v107h22zM256 341v-64h-64v22h43v21h-43v64h64v-21h-43v-22h43zM320 384h64v-64h-43v-43h-21v107zM363 341v22h-22v-22h22zM363 117q8 0 14.5 -6t6.5 -15v-75q0 -8 -6.5 -14.5t-14.5 -6.5q-99 0 -182.5 48.5t-132 132t-48.5 182.5q0 8 6.5 14.5t14.5 6.5 h75q9 0 15 -6.5t6 -14.5q0 -40 12 -76q4 -13 -5 -22l-47 -47q48 -93 141 -141l47 47q9 9 22 5q36 -12 76 -12z" />
+<glyph unicode="&#xf2be;" horiz-adv-x="384" d="M77 218q47 -93 141 -141l47 47q9 10 22 5q36 -12 76 -12q8 0 14.5 -6t6.5 -15v-75q0 -8 -6.5 -14.5t-14.5 -6.5q-99 0 -182.5 48.5t-132 132t-48.5 182.5q0 8 6.5 14.5t14.5 6.5h75q9 0 15 -6.5t6 -14.5q0 -40 12 -76q4 -13 -5 -22z" />
+<glyph unicode="&#xf2bf;" d="M364 343q63 -63 63 -151t-62.5 -150.5t-151 -62.5t-151 62.5t-62.5 150.5t62.5 150.5t150.5 62.5h22v-176q21 -12 21 -37q0 -18 -12.5 -30.5t-30 -12.5t-30 12.5t-12.5 30.5q0 24 21 37v45q-28 -7 -46 -30t-18 -52q0 -35 25 -60t60.5 -25t60.5 25t25 60t-25 60l30 30 q37 -37 37 -90t-37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5q0 47 30.5 82.5t76.5 43.5v43q-64 -8 -106.5 -56t-42.5 -113q0 -71 50 -121t120.5 -50t120.5 50t50 121q0 70 -50 121z" />
+<glyph unicode="&#xf2c0;" d="M332 144l-34 35q1 7 1 13q0 35 -25 60t-61 25q-4 0 -13 -1l-34 35q23 9 47 9q53 0 90.5 -37.5t37.5 -90.5q0 -25 -9 -48zM213 363q-42 0 -80 -20l-31 31q52 31 111 31q89 0 151.5 -62.5t62.5 -150.5q0 -60 -32 -111l-31 31q20 38 20 80q0 71 -50 121t-121 50zM27 395 l21 -22l357 -357l-27 -27l-160 161l-5 -1q-17 0 -29.5 12.5t-12.5 30.5v4l-34 34q-9 -19 -9 -38q0 -49 43 -74l-22 -37q-29 17 -46.5 46.5t-17.5 64.5q0 38 21 69l-31 31q-32 -44 -32 -100q0 -47 23 -86t62 -62l-22 -37q-48 29 -77 78t-29 107q0 73 45 131l-45 45z" />
+<glyph unicode="&#xf2c1;" d="M213.5 213q17.5 0 30 -12.5t12.5 -30t-12.5 -30t-30 -12.5t-30 12.5t-12.5 30t12.5 30t30 12.5zM341 171q0 -35 -17 -64.5t-47 -46.5l-21 37q43 25 43 74q0 35 -25 60t-60.5 25t-60.5 -25t-25 -60q0 -49 43 -74l-22 -37q-29 17 -46.5 46.5t-17.5 64.5q0 53 37.5 90.5 t90.5 37.5t90.5 -37.5t37.5 -90.5zM213.5 384q88.5 0 151 -62.5t62.5 -150.5q0 -59 -29 -108t-78 -77l-21 37q39 23 62 62t23 86q0 70 -50 120t-120.5 50t-120.5 -50t-50 -120q0 -47 23 -86t62 -62l-22 -37q-48 28 -77 77t-29 108q0 88 62.5 150.5t151 62.5z" />
+<glyph unicode="&#xf2c2;" d="M26 317l270 110l15 -36l-177 -71h250q18 0 30.5 -12.5t12.5 -30.5v-256q0 -17 -12.5 -29.5t-30.5 -12.5h-341q-18 0 -30.5 12.5t-12.5 29.5v256q0 14 7.5 24.5t18.5 15.5zM106.5 21q26.5 0 45.5 19t19 45.5t-19 45t-45.5 18.5t-45 -18.5t-18.5 -45t18.5 -45.5t45 -19z M384 192v85h-341v-85h256v43h42v-43h43z" />
+<glyph unicode="&#xf2c3;" horiz-adv-x="469" d="M256 192h149v-32h-149v32zM256 213h149h-149zM256 107h149h-149zM427 363q17 0 29.5 -12.5t12.5 -30.5v-277q0 -18 -12.5 -30.5t-29.5 -12.5h-384q-18 0 -30.5 12.5t-12.5 30.5v277q0 18 12.5 30.5t30.5 12.5h384zM427 43v277h-192v-277h192z" />
+<glyph unicode="&#xf2c4;" horiz-adv-x="331" d="M59 297q44 44 106.5 44t106.5 -44l-31 -30q-31 31 -75.5 31t-76.5 -31zM165.5 427q96.5 0 165.5 -69l-30 -30q-56 56 -135.5 56t-135.5 -56l-30 30q69 69 165.5 69zM226 234q10 0 17.5 -7t6.5 -17v-207q0 -10 -7 -17t-17 -7h-122q-10 0 -17 7t-7 17v207q0 10 7 17.5 t17 7.5zM229 21v171h-128v-171h128z" />
+<glyph unicode="&#xf2c5;" horiz-adv-x="332" d="M230 256q9 0 15 -6.5t6 -14.5v-256q0 -9 -6 -15.5t-15 -6.5h-128q-9 0 -15 6.5t-6 15.5v256q0 8 6 14.5t15 6.5h128zM166 128q18 0 30.5 12.5t12.5 30t-12.5 30t-30.5 12.5t-30.5 -12.5t-12.5 -30t12.5 -30t30.5 -12.5zM60 319q44 44 106 44t106 -44l-31 -30 q-31 31 -75 31t-76 -31zM166 448q98 0 166 -69l-30 -30q-56 56 -136 56q-79 0 -136 -56l-30 30q69 69 166 69z" />
+<glyph unicode="&#xf2c6;" horiz-adv-x="384" d="M367 322q-40 36 -90 36t-89 -36l-17 17q44 45 106 45t107 -45zM348 305l-17 -17q-22 21 -54 21t-53 -21l-17 17q30 30 70.5 30t70.5 -30zM341 171q18 0 30.5 -12.5t12.5 -30.5v-85q0 -18 -12.5 -30.5t-30.5 -12.5h-298q-18 0 -30.5 12.5t-12.5 30.5v85q0 18 12.5 30.5 t30.5 12.5h213v85h43v-85h42zM107 64v43h-43v-43h43zM181 64v43h-42v-43h42zM256 64v43h-43v-43h43z" />
+<glyph unicode="&#xf2c7;" horiz-adv-x="384" d="M358 220q11 -3 18.5 -14.5t7.5 -24.5v-117q0 -18 -12.5 -30.5t-30.5 -12.5h-298q-18 0 -30.5 12.5t-12.5 30.5v85q0 18 12.5 30.5t30.5 12.5h268l-300 109l15 40zM85 85v43h-42v-43h42zM341 85v43h-213v-43h213z" />
+<glyph unicode="&#xf2c8;" horiz-adv-x="299" d="M235 427q26 0 45 -19t19 -45v-342q0 -26 -19 -45t-45 -19h-171q-27 0 -45.5 19t-18.5 45v342q0 26 18.5 45t45.5 19h171zM192 0v21h-85v-21h85zM261 64v299h-224v-299h224z" />
+<glyph unicode="&#xf2c9;" horiz-adv-x="299" d="M256 426q18 0 30.5 -12t12.5 -30v-384q0 -18 -12.5 -30.5t-30.5 -12.5h-213q-18 0 -30.5 12.5t-12.5 30.5v384q0 18 12.5 30.5t30.5 12.5zM256 43v298h-213v-298h213zM235 171l-86 -86l-85 86h64v106h43v-106h64z" />
+<glyph unicode="&#xf2ca;" horiz-adv-x="384" d="M213 273l-85 -85l85 -86l-21 -21l-85 85l-86 -85l-21 21l85 86l-85 85l21 21l86 -85l85 85zM341 427q18 0 30.5 -12.5t12.5 -30.5v-384q0 -18 -12.5 -30.5t-30.5 -12.5h-213q-18 0 -30.5 12.5t-12.5 30.5v64h43v-43h213v342h-213v-43h-43v64q0 18 12.5 30.5t30.5 12.5 h213z" />
+<glyph unicode="&#xf2cb;" horiz-adv-x="299" d="M171 299v-43h-43v43h43zM171 213v-128h-43v128h43zM256 426q18 0 30.5 -12t12.5 -30v-384q0 -18 -12.5 -30.5t-30.5 -12.5h-213q-18 0 -30.5 12.5t-12.5 30.5v384q0 18 12.5 30.5t30.5 12.5zM256 43v298h-213v-298h213z" />
+<glyph unicode="&#xf2cc;" horiz-adv-x="277" d="M224 427q22 0 37.5 -16t15.5 -38v-362q0 -22 -15.5 -38t-37.5 -16h-171q-22 0 -37.5 16t-15.5 38v362q0 22 15.5 38t37.5 16h171zM138.5 -21q13.5 0 23 9t9.5 22.5t-9.5 23t-23 9.5t-22.5 -9.5t-9 -23t9 -22.5t22.5 -9zM235 64v299h-192v-299h192z" />
+<glyph unicode="&#xf2cd;" horiz-adv-x="469" d="M427 341q17 0 29.5 -12.5t12.5 -29.5v-214q0 -17 -12.5 -29.5t-29.5 -12.5h-384q-18 0 -30.5 12.5t-12.5 29.5v214q0 17 12.5 29.5t30.5 12.5h384zM384 85v214h-299v-214h299zM192 107q-9 0 -15 6t-6 15v64q0 9 6 15t15 6v22q0 17 12.5 29.5t30 12.5t30 -12.5t12.5 -29.5 v-22q9 0 15.5 -6t6.5 -15v-64q0 -9 -6.5 -15t-15.5 -6h-85zM209 235v-22h51v22q0 10 -7.5 17.5t-18 7.5t-18 -7.5t-7.5 -17.5z" />
+<glyph unicode="&#xf2ce;" horiz-adv-x="469" d="M0 299q0 17 12.5 29.5t30.5 12.5h384q17 0 29.5 -12.5t12.5 -29.5v-214q0 -17 -12.5 -29.5t-29.5 -12.5h-384q-18 0 -30.5 12.5t-12.5 29.5v214zM384 299h-299v-214h299v214z" />
+<glyph unicode="&#xf2cf;" horiz-adv-x="363" d="M320 427q18 0 30.5 -12.5t12.5 -30.5v-384q0 -18 -12.5 -30.5t-30.5 -12.5h-213q-18 0 -30.5 12.5t-12.5 30.5v64h43v-43h213v342h-213v-43h-43v64q0 18 12.5 30.5t30.5 12.5h213zM145 213q10 0 18 -8t8 -19v-75q0 -10 -8.5 -18t-19.5 -8h-117q-10 0 -18 8.5t-8 19.5v75 q0 9 8 17t18 8v32q0 22 18 38t41 16t41.5 -16t18.5 -38v-32zM117 213v32q0 13 -9 20.5t-22.5 7.5t-23 -7.5t-9.5 -20.5v-32h64z" />
+<glyph unicode="&#xf2d0;" horiz-adv-x="299" d="M107 107q-9 0 -15.5 6t-6.5 15v64q0 9 6.5 15t15.5 6v22q0 17 12.5 29.5t30 12.5t30 -12.5t12.5 -29.5v-22q9 0 15 -6t6 -15v-64q0 -9 -6 -15t-15 -6h-85zM124 235v-22h51v22q0 10 -7.5 17.5t-18 7.5t-18 -7.5t-7.5 -17.5zM256 427q18 0 30.5 -12.5t12.5 -30.5v-384 q0 -18 -12.5 -30.5t-30.5 -12.5h-213q-18 0 -30.5 12.5t-12.5 30.5v384q0 18 12.5 30.5t30.5 12.5h213zM256 43v298h-213v-298h213z" />
+<glyph unicode="&#xf2d1;" horiz-adv-x="426" d="M386 284q40 -39 40 -92t-40 -90l-21 22q29 30 29 70t-29 68zM341 239q20 -21 20 -47t-20 -45l-21 22q18 24 0 49zM256 427q18 0 30.5 -12.5t12.5 -30.5v-384q0 -18 -12.5 -30.5t-30.5 -12.5h-213q-18 0 -30.5 12.5t-12.5 30.5v384q0 18 12.5 30.5t30.5 12.5h213zM256 21 v342h-213v-342h213z" />
+<glyph unicode="&#xf2d2;" horiz-adv-x="256" d="M21 -64v43h43v-43h-43zM107 -64v43h42v-43h-42zM192 -64v43h43v-43h-43zM213 448q18 0 30.5 -12.5t12.5 -30.5v-341q0 -18 -12.5 -30.5t-30.5 -12.5h-170q-18 0 -30.5 12.5t-12.5 30.5v341q0 18 12.5 30.5t30.5 12.5h170zM213 107v256h-170v-256h170z" />
+<glyph unicode="&#xf2d3;" horiz-adv-x="385" d="M189 181l23 -19q4 -4 2 -6l-21 -37q-2 -2 -7 -2l-27 11q-13 -9 -19 -11l-5 -27q-4 -5 -6 -5h-43q-2 0 -3.5 1.5t-0.5 3.5l-4 27q-7 2 -20 11l-29 -9q-3 -2 -7 3l-21 36q0 4 2 8l23 17v22l-23 17q-4 4 -2 6l21 37q2 2 7 2l27 -11q13 9 20 11l4 27q4 5 6 5h43q6 0 6 -5 l5 -27q6 -2 19 -11l27 9q3 2 7 -3l21 -36q0 -4 -2 -6l-23 -17v-22zM107.5 149q17.5 0 30 12.5t12.5 30.5t-12.5 30.5t-30 12.5t-30 -12.5t-12.5 -30.5t12.5 -30.5t30 -12.5zM342 427q18 0 30.5 -12.5t12.5 -30.5v-384q0 -18 -12.5 -30.5t-30.5 -12.5h-213q-18 0 -30.5 12.5 t-12.5 30.5v64h43v-43h213v342h-213v-43h-43v64q0 18 12.5 30.5t30.5 12.5h213z" />
+<glyph unicode="&#xf2d4;" horiz-adv-x="299" d="M256 426q18 0 30.5 -12t12.5 -30v-384q0 -18 -12.5 -30.5t-30.5 -12.5h-213q-18 0 -30.5 12.5t-12.5 30.5v384q0 18 12.5 30.5t30.5 12.5zM256 43v298h-213v-298h213z" />
+<glyph unicode="&#xf2d5;" horiz-adv-x="299" d="M256 405q18 0 30.5 -12.5t12.5 -29.5v-342q0 -17 -12.5 -29.5t-30.5 -12.5h-213q-18 0 -30.5 12.5t-12.5 29.5v342q0 17 12.5 29.5t30.5 12.5h213zM149.5 363q-17.5 0 -30 -12.5t-12.5 -30.5t12.5 -30.5t30 -12.5t30 12.5t12.5 30.5t-12.5 30.5t-30 12.5zM149 21 q44 0 75.5 31.5t31.5 75.5t-31.5 75.5t-75.5 31.5t-75 -31.5t-31 -75.5t31 -75.5t75 -31.5zM149.5 192q26.5 0 45 -18.5t18.5 -45.5t-18.5 -45.5t-45 -18.5t-45.5 18.5t-19 45.5t19 45.5t45.5 18.5z" />
+<glyph unicode="&#xf2d6;" horiz-adv-x="384" d="M320 448q27 0 45.5 -18.5t18.5 -45.5v-384q0 -27 -18.5 -45.5t-45.5 -18.5h-256q-27 0 -45.5 18.5t-18.5 45.5v384q0 27 18.5 45.5t45.5 18.5h256zM235 -21v21h-86v-21h86zM347 43v341h-310v-341h310z" />
+<glyph unicode="&#xf2d7;" horiz-adv-x="405" d="M352 448q22 0 37.5 -15.5t15.5 -37.5v-406q0 -22 -15.5 -37.5t-37.5 -15.5h-299q-22 0 -37.5 15.5t-15.5 37.5v406q0 22 15.5 37.5t37.5 15.5h299zM202.5 -43q13.5 0 23 9.5t9.5 23t-9.5 22.5t-23 9t-22.5 -9t-9 -22.5t9 -23t22.5 -9.5zM363 43v341h-320v-341h320z" />
+<glyph unicode="&#xf2d8;" horiz-adv-x="469" d="M427 363q17 0 29.5 -12.5t12.5 -30.5v-256q0 -18 -12.5 -30.5t-29.5 -12.5h-384q-18 0 -30.5 12.5t-12.5 30.5v256q0 18 12.5 30.5t30.5 12.5h384zM384 64v256h-299v-256h299z" />
+<glyph unicode="&#xf2d9;" horiz-adv-x="469" d="M427 320q17 0 29.5 -12.5t12.5 -30.5v-256q0 -17 -12.5 -29.5t-29.5 -12.5h-384q-18 0 -30.5 12.5t-12.5 29.5v256q0 18 12.5 30.5t30.5 12.5h162l-71 70l15 15l86 -85l85 85l15 -15l-70 -70h162zM427 21v256h-384v-256h384zM171 235l149 -86l-149 -85v171z" />
+<glyph unicode="&#xf2da;" horiz-adv-x="469" d="M427 384q17 0 29.5 -12.5t12.5 -30.5v-256q0 -17 -12.5 -29.5t-29.5 -12.5h-107v-43h-171v43h-106q-18 0 -30.5 12.5t-12.5 29.5v256q0 18 12.5 30.5t30.5 12.5h384zM427 85v256h-384v-256h384zM384 277v-42h-235v42h235zM384 192v-43h-235v43h235zM128 277v-42h-43v42 h43zM128 192v-43h-43v43h43z" />
+<glyph unicode="&#xf2db;" horiz-adv-x="469" d="M427 384q17 0 29.5 -12.5t12.5 -30.5v-256q0 -17 -12.5 -29.5t-29.5 -12.5h-107v-43h-171v43h-106q-18 0 -30.5 12.5t-12.5 29.5v256q0 18 12.5 30.5t30.5 12.5h384zM427 85v256h-384v-256h384zM320 213l-149 -85v171z" />
+<glyph unicode="&#xf2dc;" horiz-adv-x="469" d="M427 384q17 0 29.5 -12.5t12.5 -30.5v-256q0 -17 -12.5 -29.5t-29.5 -12.5h-107v-43h-171v43h-106q-18 0 -30.5 12.5t-12.5 29.5v256q0 18 12.5 30.5t30.5 12.5h384zM427 85v256h-384v-256h384z" />
+<glyph unicode="&#xf2dd;" horiz-adv-x="303" d="M218 299h85v-86h-21v-42q0 -18 -12.5 -30.5t-30.5 -12.5h-64v-65q26 -13 26 -42q0 -19 -14 -33t-33.5 -14t-33 14t-13.5 33q0 29 25 42v65h-64q-17 0 -29.5 12.5t-12.5 30.5v44q-26 13 -26 41q0 19 14 33t33 14t33 -14t14 -33q0 -28 -26 -41v-44h64v170h-42l64 86l64 -86 h-43v-170h64v42h-21v86z" />
+<glyph unicode="&#xf2de;" horiz-adv-x="405" d="M405 309v-228l-238 239h132q8 0 14.5 -6.5t6.5 -14.5v-75zM27 405l378 -378l-27 -27l-68 68q-6 -4 -11 -4h-256q-9 0 -15.5 6.5t-6.5 14.5v214q0 8 6.5 14.5t15.5 6.5h15l-58 58z" />
+<glyph unicode="&#xf2df;" d="M341 245l86 86v-278l-86 86v-75q0 -9 -6 -15t-15 -6h-299q-8 0 -14.5 6t-6.5 15v256q0 9 6.5 15t14.5 6h299q9 0 15 -6t6 -15v-75zM235 117l74 75l-74 75v-54h-128v54l-75 -75l75 -75v54h128v-54z" />
+<glyph unicode="&#xf2e0;" horiz-adv-x="384" d="M299 224l85 85v-234l-85 85v-75q0 -8 -6.5 -14.5t-15.5 -6.5h-256q-8 0 -14.5 6.5t-6.5 14.5v214q0 8 6.5 14.5t14.5 6.5h256q9 0 15.5 -6.5t6.5 -14.5v-75z" />
+<glyph unicode="&#xf2e1;" horiz-adv-x="341" d="M341 192q0 -40 -17 -75t-48 -59l-20 -122h-171l-20 122q-65 51 -65 134t65 134l20 122h171l20 -122q31 -24 48 -59t17 -75zM43 192q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5t-37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5z" />
+<glyph unicode="&#xf2e2;" horiz-adv-x="497" d="M249 350q-107 1 -190 -55l43 -53q49 29 107 38q108 15 187 -38l42 53q-83 56 -189 55zM248.5 389q138.5 0 248.5 -85l-248 -309l-249 309q110 85 248.5 85z" />
+<glyph unicode="&#xf2e3;" horiz-adv-x="469" d="M0 256q64 64 149.5 86.5t171 0t148.5 -86.5l-42 -43q-80 80 -192.5 80t-191.5 -80zM171 85q26 27 63.5 27t64.5 -27l-64 -64zM85 171q62 61 149.5 61t149.5 -61l-43 -43q-44 44 -106.5 44t-106.5 -44z" />
+<glyph unicode="&#xf2e4;" horiz-adv-x="512" d="M256 384q136 0 256 -91l-256 -314l-256 315q119 90 256 90zM277 107v128h-42v-128h42zM235 277h42v43h-42v-43z" />
+<glyph unicode="&#xf2e5;" horiz-adv-x="503" d="M482 107q8 0 14.5 -7t6.5 -15v-85q0 -8 -6.5 -14.5t-14.5 -6.5h-107q-8 0 -14.5 6.5t-6.5 14.5v85q0 8 6.5 15t14.5 7v32q0 22 15.5 37.5t38 15.5t38 -15.5t15.5 -37.5v-32zM461 107v32q0 12 -9.5 22t-22.5 10t-22.5 -10t-9.5 -22v-32h64zM322 139v-56l-75 -94l-247 310 q114 85 247.5 85t247.5 -85l-45 -56q-6 2 -21 2q-45 0 -76 -31t-31 -75z" />
+<glyph unicode="&#xf2e6;" horiz-adv-x="497" d="M497 299l-117 -145l-220 220q44 10 88 10q136 0 249 -85zM356 123l74 -74l-27 -27l-71 71l-83 -103l-1 -1v1l-248 309q35 27 79 47l-44 44l27 27z" />
+<glyph unicode="&#xf2e7;" horiz-adv-x="497" d="M249 350q-105 0 -190 -55l190 -237l189 237q-84 55 -189 55zM248.5 389q49.5 0 96 -11t80.5 -29.5t47 -27t25 -17.5l-248 -309v0l-249 309q12 9 25 17.5t47.5 27t80.5 29.5t95.5 11z" />
+<glyph unicode="&#xf2e8;" horiz-adv-x="497" d="M249 -10l-1 -1v1l-248 309q113 85 248.5 85t248.5 -85zM68 214q82 63 180.5 63t180.5 -63l-180 -224l-1 -1v1z" />
+<glyph unicode="&#xf2e9;" horiz-adv-x="320" d="M320 333l-247 -248h140v-42h-213v213h43v-141l247 248z" />
+<glyph unicode="&#xf2ea;" horiz-adv-x="341" d="M341 213v-42h-259l119 -120l-30 -30l-171 171l171 171l30 -30l-119 -120h259z" />
+<glyph unicode="&#xf2eb;" horiz-adv-x="273" d="M243 13l-72 72l30 30l72 -72zM41 277l96 96l96 -96h-75v-136l-128 -128l-30 30l115 115v119h-74z" />
+<glyph unicode="&#xf2ec;" horiz-adv-x="384" d="M354 299l30 -30l-192 -192l-149 149v-98h-43v171h171v-43h-98l119 -119z" />
+<glyph unicode="&#xf2ed;" horiz-adv-x="320" d="M107 341h213v-213h-43v141l-247 -248l-30 30l247 248h-140v42z" />
+<glyph unicode="&#xf2ee;" horiz-adv-x="341" d="M171 363l170 -171l-170 -171l-30 30l119 120h-260v42h260l-119 120z" />
+<glyph unicode="&#xf2ef;" horiz-adv-x="341" d="M213 363h128v-128l-49 49l-61 -62l-30 30l61 62zM128 363l-49 -49l113 -113v-180h-43v162l-100 101l-49 -49v128h128z" />
+<glyph unicode="&#xf2f0;" horiz-adv-x="469" d="M192 256v64h-64l107 107l106 -107h-64v-64h-85zM171 235v-86h-64v-64l-107 107l107 107v-64h64zM469 192l-106 -107v64h-64v86h64v64zM277 128v-64h64l-106 -107l-107 107h64v64h85z" />
+<glyph unicode="&#xf2f1;" d="M213.5 405q88.5 0 151 -62.5t62.5 -150.5t-62.5 -150.5t-151 -62.5t-151 62.5t-62.5 150.5t62.5 150.5t151 62.5zM107 235l106 -107l107 107h-213z" />
+<glyph unicode="&#xf2f2;" horiz-adv-x="213" d="M0 245h213l-106 -106z" />
+<glyph unicode="&#xf2f3;" d="M213.5 405q88.5 0 151 -62.5t62.5 -150.5t-62.5 -150.5t-151 -62.5t-151 62.5t-62.5 150.5t62.5 150.5t151 62.5zM256 299l-107 -107l107 -107v214z" />
+<glyph unicode="&#xf2f4;" horiz-adv-x="107" d="M107 299v-214l-107 107z" />
+<glyph unicode="&#xf2f5;" d="M213.5 405q88.5 0 151 -62.5t62.5 -150.5t-62.5 -150.5t-151 -62.5t-151 62.5t-62.5 150.5t62.5 150.5t151 62.5zM171 299v-214l106 107z" />
+<glyph unicode="&#xf2f6;" horiz-adv-x="107" d="M0 85v214l107 -107z" />
+<glyph unicode="&#xf2f7;" d="M213.5 405q88.5 0 151 -62.5t62.5 -150.5t-62.5 -150.5t-151 -62.5t-151 62.5t-62.5 150.5t62.5 150.5t151 62.5zM213 260l-106 -106h213z" />
+<glyph unicode="&#xf2f8;" horiz-adv-x="213" d="M213 139h-213l107 106z" />
+<glyph unicode="&#xf2f9;" horiz-adv-x="256" d="M226 265l30 -30l-128 -128l-128 128l30 30l98 -98z" />
+<glyph unicode="&#xf2fa;" horiz-adv-x="158" d="M158 290l-98 -98l98 -98l-30 -30l-128 128l128 128z" />
+<glyph unicode="&#xf2fb;" horiz-adv-x="158" d="M30 320l128 -128l-128 -128l-30 30l98 98l-98 98z" />
+<glyph unicode="&#xf2fc;" horiz-adv-x="256" d="M128 277l128 -128l-30 -30l-98 98l-98 -98l-30 30z" />
+<glyph unicode="&#xf2fd;" horiz-adv-x="341" d="M171 277v86l170 -171l-170 -171v86h-171v170h171z" />
+<glyph unicode="&#xf2fe;" horiz-adv-x="256" d="M149 384v-302l77 76l30 -30l-128 -128l-128 128l30 30l77 -76v302h42z" />
+<glyph unicode="&#xf2ff;" horiz-adv-x="384" d="M384 213v-42h-302l76 -77l-30 -30l-128 128l128 128l30 -30l-76 -77h302z" />
+<glyph unicode="&#xf300;" horiz-adv-x="405" d="M363 299h42v-128h-323l76 -77l-30 -30l-128 128l128 128l30 -30l-76 -77h281v86z" />
+<glyph unicode="&#xf301;" horiz-adv-x="384" d="M0 213h302l-76 77l30 30l128 -128l-128 -128l-30 30l76 77h-302v42z" />
+<glyph unicode="&#xf302;" horiz-adv-x="448" d="M226 290l30 30l128 -128l-128 -128l-30 30l76 77h-302v42h302zM405 320h43v-256h-43v256z" />
+<glyph unicode="&#xf303;" horiz-adv-x="256" d="M107 0v302l-77 -76l-30 30l128 128l128 -128l-30 -30l-77 76v-302h-42z" />
+<glyph unicode="&#xf304;" horiz-adv-x="451" d="M138 298l139 -138l-139 -139l-138 139zM60 160l78 -78l78 78l-78 78zM394 293q57 -56 57 -135.5t-57 -135.5q-56 -56 -135 -56q-49 0 -93 24l32 31q29 -13 61 -13q62 0 105.5 44t43.5 105.5t-43.5 105.5t-105.5 44v-69l-91 90l91 90v-69q79 0 135 -56z" />
+<glyph unicode="&#xf305;" horiz-adv-x="451" d="M312 298l139 -138l-139 -139l-138 139zM390 160l-78 78l-78 -78l78 -78zM56 293q56 56 136 56v69l90 -90l-90 -90v69q-62 0 -105.5 -44t-43.5 -105.5t43.5 -105.5t105.5 -44q31 0 60 13l32 -31q-43 -24 -92 -24q-80 0 -136 56t-56 135.5t56 135.5z" />
+<glyph unicode="&#xf306;" horiz-adv-x="340" d="M65 266q-17 -24 -22 -53h-43q6 46 35 83zM43 171q5 -28 22 -53l-30 -30q-29 37 -35 83h43zM65 57l30 31q24 -17 53 -22v-43q-46 5 -83 34zM191 361q63 -8 106 -56t43 -113t-43 -113t-106 -56v43q45 8 75.5 43.5t30.5 82.5t-30.5 82.5t-75.5 43.5v-83l-98 95l98 97v-66z " />
+<glyph unicode="&#xf307;" horiz-adv-x="340" d="M246 330l-97 -95v83q-45 -8 -75.5 -43.5t-30.5 -82.5t30.5 -82.5t75.5 -43.5v-43q-63 8 -106 56t-43 113t43 113t106 56v66zM340 213h-43q-5 29 -22 53l30 30q29 -37 35 -83zM192 66q28 5 52 22l31 -31q-37 -28 -83 -34v43zM275 118q17 24 22 53h43q-6 -46 -35 -83z" />
+<glyph unicode="&#xf308;" horiz-adv-x="469" d="M235 96l-86 85h64v192h43v-192h64zM427 373q17 0 29.5 -12.5t12.5 -29.5v-299q0 -18 -12.5 -30.5t-29.5 -12.5h-384q-18 0 -30.5 12.5t-12.5 30.5v299q0 17 12.5 29.5t30.5 12.5h128v-42h-128v-299h384v299h-128v42h128z" />
+<glyph unicode="&#xf309;" horiz-adv-x="469" d="M427 384q17 0 29.5 -12.5t12.5 -30.5v-299q0 -17 -12.5 -29.5t-29.5 -12.5h-384q-18 0 -30.5 12.5t-12.5 29.5v86h43v-86h384v300h-384v-86h-43v85q0 18 12.5 30.5t30.5 12.5h384zM213 107v64h-213v42h213v64l86 -85z" />
+<glyph unicode="&#xf30a;" d="M341 363l86 -86h-64v-149q0 -35 -25 -60t-60.5 -25t-60.5 25t-25 60v149q0 18 -12.5 30.5t-30 12.5t-30 -12.5t-12.5 -30.5v-149h64l-86 -85l-85 85h64v149q0 36 25 61t60.5 25t60.5 -25t25 -61v-149q0 -18 12.5 -30.5t30 -12.5t30 12.5t12.5 30.5v149h-64z" />
+<glyph unicode="&#xf30b;" d="M213.5 405q88.5 0 151 -62.5t62.5 -150.5t-62.5 -150.5t-151 -62.5t-151 62.5t-62.5 150.5t62.5 150.5t151 62.5zM96 256h53v-85h43v85h53l-74 75zM331 128h-54v85h-42v-85h-54l75 -75z" />
+<glyph unicode="&#xf30c;" horiz-adv-x="299" d="M235 85h64l-86 -85l-85 85h64v150h43v-150zM85 384l86 -85h-64v-150h-43v150h-64z" />
+<glyph unicode="&#xf30d;" horiz-adv-x="384" d="M85 213v-64h150v-42h-150v-64l-85 85zM384 256l-85 -85v64h-150v42h150v64z" />
+<glyph unicode="&#xf30e;" d="M299 64l49 49l-105 104l-85 -85l-158 158l30 30l128 -128l85 85l135 -134l49 49v-128h-128z" />
+<glyph unicode="&#xf30f;" horiz-adv-x="405" d="M405 192l-85 -85v64h-320v42h320v64z" />
+<glyph unicode="&#xf310;" d="M299 320h128v-128l-49 49l-135 -134l-85 85l-128 -128l-30 30l158 158l85 -85l105 104z" />
+<glyph unicode="&#xf311;" horiz-adv-x="196" d="M0 51l98 98l98 -98l-30 -30l-68 68l-68 -68zM196 333l-98 -98l-98 98l30 30l68 -68l68 68z" />
+<glyph unicode="&#xf312;" horiz-adv-x="196" d="M98 324l-68 -68l-30 30l98 98l98 -98l-30 -30zM98 60l68 68l30 -30l-98 -98l-98 98l30 30z" />
+<glyph unicode="&#xf313;" horiz-adv-x="341" d="M0 277v86h85v-86h-85zM128 21v86h85v-86h-85zM0 21v86h85v-86h-85zM0 149v86h85v-86h-85zM128 149v86h85v-86h-85zM256 363h85v-86h-85v86zM128 277v86h85v-86h-85zM256 149v86h85v-86h-85zM256 21v86h85v-86h-85z" />
+<glyph unicode="&#xf314;" horiz-adv-x="485" d="M171 363h-31l-43 42h330q17 0 29.5 -12.5t12.5 -29.5v-330l-42 43v31h-31l-43 42h74v86h-86v-74l-42 43v31h-31l-43 42h74v86h-86v-74l-42 43v31zM341 363v-86h86v86h-86zM27 421l458 -458l-27 -27l-43 43h-330q-17 0 -29.5 12.5t-12.5 29.5v330l-43 43zM213 180v-31h31z M85 308v-31h31zM171 21v86h-86v-86h86zM171 149v74l-12 12h-74v-86h86zM299 21v74l-12 12h-74v-86h86zM341 21h31l-31 31v-31z" />
+<glyph unicode="&#xf315;" d="M384 405q18 0 30.5 -12.5t12.5 -29.5v-342q0 -17 -12.5 -29.5t-30.5 -12.5h-341q-18 0 -30.5 12.5t-12.5 29.5v342q0 17 12.5 29.5t30.5 12.5h341zM128 21v86h-85v-86h85zM128 149v86h-85v-86h85zM128 277v86h-85v-86h85zM256 21v86h-85v-86h85zM256 149v86h-85v-86h85z M256 277v86h-85v-86h85zM384 21v86h-85v-86h85zM384 149v86h-85v-86h85zM384 277v86h-85v-86h85z" />
+<glyph unicode="&#xf316;" horiz-adv-x="405" d="M384 171q9 0 15 -6.5t6 -15.5v-128q0 -8 -6 -14.5t-15 -6.5h-363q-8 0 -14.5 6.5t-6.5 14.5v128q0 9 6.5 15.5t14.5 6.5h363zM384 384q9 0 15 -6.5t6 -14.5v-128q0 -9 -6 -15.5t-15 -6.5h-363q-8 0 -14.5 6.5t-6.5 15.5v128q0 8 6.5 14.5t14.5 6.5h363z" />
+<glyph unicode="&#xf317;" horiz-adv-x="363" d="M0 64v277h64v-277h-64zM299 341h64v-277h-64v277zM85 64v277h192v-277h-192z" />
+<glyph unicode="&#xf318;" d="M107 43v320h213v-320h-213zM0 85v235h85v-235h-85zM341 320h86v-235h-86v235z" />
+<glyph unicode="&#xf319;" horiz-adv-x="363" d="M128 64v277h107v-277h-107zM0 64v277h107v-277h-107zM256 341h107v-277h-107v277z" />
+<glyph unicode="&#xf31a;" horiz-adv-x="405" d="M0 256v85h85v-85h-85zM0 149v86h85v-86h-85zM107 149v86h85v-86h-85zM213 149v86h86v-86h-86zM107 256v85h85v-85h-85zM213 341h86v-85h-86v85zM320 149v86h85v-86h-85zM0 43v85h85v-85h-85zM107 43v85h85v-85h-85zM213 43v85h86v-85h-86zM320 43v85h85v-85h-85zM320 341 h85v-85h-85v85z" />
+<glyph unicode="&#xf31b;" horiz-adv-x="405" d="M0 43v149h128v-149h-128zM149 43v149h256v-149h-256zM0 341h405v-128h-405v128z" />
+<glyph unicode="&#xf31c;" horiz-adv-x="384" d="M0 171v213h171v-213h-171zM0 0v128h171v-128h-171zM213 0v213h171v-213h-171zM213 384h171v-128h-171v128z" />
+<glyph unicode="&#xf31d;" horiz-adv-x="405" d="M0 0v64h405v-64h-405zM384 277q9 0 15 -6t6 -15v-128q0 -9 -6 -15t-15 -6h-363q-8 0 -14.5 6t-6.5 15v128q0 9 6.5 15t14.5 6h363zM0 384h405v-64h-405v64z" />
+<glyph unicode="&#xf31e;" horiz-adv-x="341" d="M0 128v43h341v-43h-341zM0 43v42h341v-42h-341zM0 213v43h341v-43h-341zM0 341h341v-42h-341v42z" />
+<glyph unicode="&#xf31f;" horiz-adv-x="384" d="M0 171v42h43v-42h-43zM0 85v43h43v-43h-43zM0 256v43h43v-43h-43zM85 171v42h299v-42h-299zM85 85v43h299v-43h-299zM85 299h299v-43h-299v43z" />
+<glyph unicode="&#xf320;" horiz-adv-x="363" d="M0 149v86h85v-86h-85zM0 43v85h85v-85h-85zM0 256v85h85v-85h-85zM107 149v86h256v-86h-256zM107 43v85h256v-85h-256zM107 341h256v-85h-256v85z" />
+<glyph unicode="&#xf321;" horiz-adv-x="363" d="M0 213v128h107v-128h-107zM0 64v128h107v-128h-107zM128 64v128h107v-128h-107zM256 64v128h107v-128h-107zM128 213v128h107v-128h-107zM256 341h107v-128h-107v128z" />
+<glyph unicode="&#xf322;" horiz-adv-x="363" d="M128 64v128h107v-128h-107zM0 64v277h107v-277h-107zM256 64v128h107v-128h-107zM128 341h235v-128h-235v128z" />
+<glyph unicode="&#xf323;" horiz-adv-x="363" d="M0 64v128h363v-128h-363zM0 341h363v-128h-363v128z" />
+<glyph unicode="&#xf324;" d="M384 363q18 0 30.5 -12.5t12.5 -30.5v-256q0 -18 -12.5 -30.5t-30.5 -12.5h-341q-18 0 -30.5 12.5t-12.5 30.5v256q0 18 12.5 30.5t30.5 12.5h341zM43 192v-43h85v43h-85zM256 64v43h-213v-43h213zM384 64v43h-85v-43h85zM384 149v43h-213v-43h213z" />
+<glyph unicode="&#xf325;" horiz-adv-x="384" d="M0 256v43h299v-43h-299zM0 171v42h299v-42h-299zM0 85v43h299v-43h-299zM341 85v43h43v-43h-43zM341 299h43v-43h-43v43zM341 171v42h43v-42h-43z" />
+<glyph unicode="&#xf326;" d="M384 363q18 0 30.5 -12.5t12.5 -30.5v-256q0 -18 -12.5 -30.5t-30.5 -12.5h-341q-18 0 -30.5 12.5t-12.5 30.5v256q0 18 12.5 30.5t30.5 12.5h341zM277 64v85h-234v-85h234zM277 171v85h-234v-85h234zM384 64v192h-85v-192h85z" />
+<glyph unicode="&#xf327;" horiz-adv-x="405" d="M85 341q9 0 15.5 -6t6.5 -15v-256q0 -9 -6.5 -15t-15.5 -6h-64q-8 0 -14.5 6t-6.5 15v256q0 9 6.5 15t14.5 6h64zM384 341q9 0 15 -6t6 -15v-256q0 -9 -6 -15t-15 -6h-64q-9 0 -15 6t-6 15v256q0 9 6 15t15 6h64zM235 341q8 0 14.5 -6t6.5 -15v-256q0 -9 -6.5 -15 t-14.5 -6h-64q-9 0 -15.5 6t-6.5 15v256q0 9 6.5 15t15.5 6h64z" />
+<glyph unicode="&#xf328;" horiz-adv-x="412" d="M213 171h171v-171h-171v171zM0 0v171h171v-171h-171zM0 384h171v-171h-171v171zM291 412l121 -121l-121 -120l-120 120z" />
+<glyph unicode="&#xf329;" d="M427 326l-28 -33l-98 83l28 32zM125 376l-97 -82l-28 32l98 82zM213.5 363q79.5 0 135.5 -56.5t56 -136t-56 -135.5t-135.5 -56t-136 56t-56.5 135.5t56.5 136t136 56.5zM213 21q62 0 106 44t44 106t-44 105.5t-106 43.5t-105.5 -43.5t-43.5 -105.5t43.5 -106t105.5 -44z M182 138l105 106l23 -23l-128 -128l-68 68l23 22z" />
+<glyph unicode="&#xf32a;" horiz-adv-x="434" d="M221 320q-26 0 -51 -9l-33 32q40 20 84 20q79 0 135.5 -56.5t56.5 -135.5q0 -44 -20 -84l-32 32q9 26 9 52q0 62 -43.5 105.5t-105.5 43.5zM434 326l-27 -33l-99 83l28 32zM27 399l21 -21l372 -372l-27 -27l-47 47q-54 -47 -125 -47q-80 0 -136 56t-56 136q0 71 47 125 l-17 17l-24 -20l-30 31l23 19l-28 29zM316 56l-210 210q-35 -42 -35 -95q0 -62 44 -106t106 -44q54 0 95 35zM136 378l-18 -15l-31 30l19 15z" />
+<glyph unicode="&#xf32b;" d="M125 376l-97 -82l-28 32l98 82zM427 326l-28 -33l-98 83l28 32zM213.5 363q79.5 0 135.5 -56.5t56 -136t-56 -135.5t-135.5 -56t-136 56t-56.5 135.5t56.5 136t136 56.5zM213 21q62 0 106 44t44 106t-44 105.5t-106 43.5t-105.5 -43.5t-43.5 -105.5t43.5 -106t105.5 -44z M235 256v-64h64v-43h-64v-64h-43v64h-64v43h64v64h43z" />
+<glyph unicode="&#xf32c;" d="M125 376l-97 -82l-28 32l98 82zM427 326l-28 -33l-98 83l28 32zM213.5 363q79.5 0 135.5 -56.5t56 -136t-56 -135.5t-135.5 -56t-136 56t-56.5 135.5t56.5 136t136 56.5zM213 21q62 0 106 44t44 106t-44 105.5t-106 43.5t-105.5 -43.5t-43.5 -105.5t43.5 -106t105.5 -44z M149 213v43h128v-38l-77 -90h77v-43h-128v39l78 89h-78z" />
+<glyph unicode="&#xf32d;" d="M427 326l-28 -33l-98 83l28 32zM125 376l-97 -82l-28 32l98 82zM224 277v-112l85 -50l-16 -26l-101 60v128h32zM213.5 363q79.5 0 135.5 -56.5t56 -136t-56 -135.5t-135.5 -56t-136 56t-56.5 135.5t56.5 136t136 56.5zM213 21q62 0 106 44t44 106t-44 105.5t-106 43.5 t-105.5 -43.5t-43.5 -105.5t43.5 -106t105.5 -44z" />
+<glyph unicode="&#xf32e;" horiz-adv-x="384" d="M341 384q18 0 30.5 -12.5t12.5 -30.5v-298q0 -18 -12.5 -30.5t-30.5 -12.5h-298q-18 0 -30.5 12.5t-12.5 30.5v298q0 18 12.5 30.5t30.5 12.5h21v43h43v-43h170v43h43v-43h21zM341 43v234h-298v-234h298zM85 235h107v-107h-107v107z" />
+<glyph unicode="&#xf32f;" horiz-adv-x="384" d="M289 212l-127 -127l-68 68l23 23l45 -45l104 104zM341 384q18 0 30.5 -12.5t12.5 -30.5v-298q0 -18 -12.5 -30.5t-30.5 -12.5h-298q-18 0 -30.5 12.5t-12.5 30.5v298q0 18 12.5 30.5t30.5 12.5h21v43h43v-43h170v43h43v-43h21zM341 43v234h-298v-234h298z" />
+<glyph unicode="&#xf330;" horiz-adv-x="384" d="M135 85l-23 23l52 52l-52 52l23 23l52 -52l52 52l22 -23l-52 -52l52 -52l-22 -23l-52 52zM341 384q18 0 30.5 -12.5t12.5 -30.5v-298q0 -18 -12.5 -30.5t-30.5 -12.5h-298q-18 0 -30.5 12.5t-12.5 30.5v298q0 18 12.5 30.5t30.5 12.5h21v43h43v-43h170v43h43v-43h21z M341 43v234h-298v-234h298z" />
+<glyph unicode="&#xf331;" horiz-adv-x="384" d="M299 235v-43h-214v43h214zM341 384q18 0 30.5 -12.5t12.5 -30.5v-298q0 -18 -12.5 -30.5t-30.5 -12.5h-298q-18 0 -30.5 12.5t-12.5 30.5v298q0 18 12.5 30.5t30.5 12.5h21v43h43v-43h170v43h43v-43h21zM341 43v234h-298v-234h298zM235 149v-42h-150v42h150z" />
+<glyph unicode="&#xf332;" horiz-adv-x="384" d="M299 192v-107h-107v107h107zM277 427h43v-43h21q18 0 30.5 -12.5t12.5 -30.5v-298q0 -18 -12.5 -30.5t-30.5 -12.5h-298q-18 0 -30.5 12.5t-12.5 30.5v298q0 18 12.5 30.5t30.5 12.5h21v43h43v-43h170v43zM341 43v234h-298v-234h298z" />
+<glyph unicode="&#xf333;" horiz-adv-x="384" d="M171 85.5q0 8.5 6 15t15 6.5t15 -6.5t6 -15t-6 -15t-15 -6.5t-15 6.5t-6 15zM171 384h21q80 0 136 -56t56 -136t-56 -136t-136 -56t-136 56t-56 136q0 46 20.5 86.5t56.5 66.5v1l145 -145l-30 -30l-116 115q-33 -41 -33 -94q0 -62 43.5 -105.5t105.5 -43.5t105.5 43.5 t43.5 105.5q0 56 -36.5 98t-91.5 50v-41h-42v85zM320 192q0 -9 -6.5 -15t-15 -6t-15 6t-6.5 15t6.5 15t15 6t15 -6t6.5 -15zM64 192q0 9 6.5 15t15 6t15 -6t6.5 -15t-6.5 -15t-15 -6t-15 6t-6.5 15z" />
+<glyph unicode="&#xf334;" d="M303.5 282.5q37.5 -37.5 37.5 -90.5t-37.5 -90.5t-90.5 -37.5t-90 38l90 90v128q53 0 90.5 -37.5zM213.5 405q88.5 0 151 -62.5t62.5 -150.5t-62.5 -150.5t-151 -62.5t-151 62.5t-62.5 150.5t62.5 150.5t151 62.5zM213.5 21q70.5 0 120.5 50t50 121t-50 121t-120.5 50 t-120.5 -50t-50 -121t50 -121t120.5 -50z" />
+<glyph unicode="&#xf335;" horiz-adv-x="448" d="M299 192q0 -18 -12.5 -30.5t-30.5 -12.5t-30.5 12.5t-12.5 30.5t12.5 30.5t30.5 12.5t30.5 -12.5t12.5 -30.5zM256 384q80 0 136 -56t56 -136t-56 -136t-136 -56q-65 0 -117 40l30 30q40 -27 87 -27q62 0 105.5 43.5t43.5 105.5t-43.5 105.5t-105.5 43.5t-105.5 -43.5 t-43.5 -105.5h64l-86 -85l-85 85h64q0 80 56 136t136 56z" />
+<glyph unicode="&#xf336;" horiz-adv-x="448" d="M256 384q80 0 136 -56t56 -136t-56 -136t-136 -56q-79 0 -136 56l31 31q43 -44 105 -44t105.5 43.5t43.5 105.5t-43.5 105.5t-105.5 43.5t-105.5 -43.5t-43.5 -105.5h64l-87 -86l-1 3l-83 83h64q0 80 56 136t136 56zM235 277h32v-90l74 -45l-15 -26l-91 55v106z" />
+<glyph unicode="&#xf337;" d="M213.5 405q88.5 0 151 -62.5t62.5 -150.5t-62.5 -150.5t-151 -62.5t-151 62.5t-62.5 150.5t62.5 150.5t151 62.5zM213.5 21q70.5 0 120.5 50t50 121t-50 121t-120.5 50t-120.5 -50t-50 -121t50 -121t120.5 -50zM224 299v-112l96 -57l-16 -27l-112 68v128h32z" />
+<glyph unicode="&#xf338;" horiz-adv-x="411" d="M369 351l30 -30l-30 -31q42 -52 42 -119q0 -58 -32 -106l-31 31q20 35 20 75q0 62 -43.5 105.5t-105.5 43.5q-40 0 -75 -20l-31 31q48 32 106 32q67 0 120 -42zM283 427v-43h-128v43h128zM197 247v30h43v-73zM27 363l214 -214l164 -165l-27 -27l-53 54q-48 -32 -106 -32 q-80 0 -136 56t-56 136q0 58 32 106l-59 59zM219 21q40 0 75 21l-204 204q-21 -35 -21 -75q0 -62 44 -106t106 -44z" />
+<glyph unicode="&#xf339;" horiz-adv-x="384" d="M256 427v-43h-128v43h128zM171 149v128h42v-128h-42zM342 290q42 -52 42 -119q0 -80 -56 -136t-136 -56t-136 56t-56 135.5t56 136t136 56.5q67 0 120 -43l30 31q16 -13 30 -30zM192 21q62 0 105.5 44t43.5 106t-43.5 105.5t-105.5 43.5t-105.5 -43.5t-43.5 -105.5 t43.5 -106t105.5 -44z" />
+<glyph unicode="&#xf33a;" horiz-adv-x="299" d="M0 107v85h299v-85q0 -62 -44 -106t-106 -44t-105.5 44t-43.5 106zM237 355q29 -21 45.5 -52.5t16.5 -67.5v-22h-299v22q0 36 16.5 67.5t44.5 52.5l-44 45l17 17l49 -49q32 16 66 16t66 -16l50 49l17 -17zM85.5 256q8.5 0 15 6.5t6.5 15t-6.5 15t-15 6.5t-15 -6.5 t-6.5 -15t6.5 -15t15 -6.5zM213.5 256q8.5 0 15 6.5t6.5 15t-6.5 15t-15 6.5t-15 -6.5t-6.5 -15t6.5 -15t15 -6.5z" />
+<glyph unicode="&#xf33b;" d="M85 64v213h256v-213q0 -9 -6 -15t-15 -6h-21v-75q0 -13 -9.5 -22.5t-23 -9.5t-22.5 9.5t-9 22.5v75h-43v-75q0 -13 -9.5 -22.5t-22.5 -9.5t-22.5 9.5t-9.5 22.5v75h-21q-9 0 -15.5 6t-6.5 15zM32 277q13 0 22.5 -9t9.5 -23v-149q0 -13 -9.5 -22.5t-22.5 -9.5t-22.5 9.5 t-9.5 22.5v149q0 14 9.5 23t22.5 9zM394.5 277q13.5 0 23 -9t9.5 -23v-149q0 -13 -9.5 -22.5t-23 -9.5t-22.5 9.5t-9 22.5v149q0 14 9 23t22.5 9zM289 402q52 -38 52 -103h-256q0 64 53 103l-28 28q-8 7 -0.5 14.5t15.5 0.5l32 -32q26 14 56 14t57 -14l31 32q8 7 15.5 -0.5 t-0.5 -14.5zM171 341v22h-22v-22h22zM277 341v22h-21v-22h21z" />
+<glyph unicode="&#xf33c;" horiz-adv-x="363" d="M353 262q-21 -7 -35 -32.5t-14 -50.5q0 -31 16 -57.5t43 -33.5q-8 -27 -26.5 -55.5t-37.5 -42.5q-16 -11 -40 -11q-16 0 -37 8q-18 9 -31 9q-10 0 -40 -12q-18 -5 -26 -5q-24 0 -49 20q-36 34 -56 81t-20 98q0 53 30.5 93.5t77.5 40.5q26 0 48 -11q17 -11 34 -11 q16 0 31 6q39 16 52 16q35 0 61 -23q12 -12 19 -27zM179 309q0 32 25 63q25 27 61 33q0 -38 -24 -67q-27 -29 -62 -29z" />
+<glyph unicode="&#xf33d;" d="M384 281h-107v26h107v-26zM208 180.5q12 -17.5 12 -42.5q0 -20 -8 -35q-7 -14 -21 -23q-12 -9 -30 -14q-14 -4 -34 -4h-127v266h124q12 0 34 -5q13 -3 26 -12q11 -7 18 -20q6 -13 6 -31q0 -20 -9.5 -33.5t-26.5 -21.5q24 -7 36 -24.5zM55 221h61q17 0 26 6q10 7 10 23 q0 9 -3.5 15t-9.5 9q-6 4 -12 5q-9 2 -15 2h-57v-60zM162 141q0 20 -11 29q-11 8 -30 8h-66v-73h64q7 0 17 2q8 2 13.5 5.5t9.5 11.5q3 6 3 17zM426 144h-137q0 -24 13 -37q12 -11 34 -11q15 0 27 8q12 9 14 18h46q-10 -35 -34 -50q-24 -16 -55 -16q-22 0 -40 7t-31 21 q-13 13 -19 32q-7 18 -7 40t7 40.5t20 32.5q13 13 30 21q18 8 40 8q24 0 42 -9.5t30 -25.5q11 -15 17 -37q5 -21 3 -42zM374 178q-2 18 -12 30q-9 10 -29 10q-13 0 -21 -4.5t-13.5 -10.5t-6.5 -13q-3 -7 -3 -12h85z" />
+<glyph unicode="&#xf33e;" d="M390 161v62l-46 -31zM232 31l143 96l-64 43l-79 -53v-86zM213 149l65 43l-65 43l-65 -43zM195 31v86l-80 53l-64 -43zM37 223v-62l46 31zM195 353l-144 -96l64 -43l80 53v86zM232 353v-86l79 -53l64 43zM427 259v-2v-130v-2v-1q0 -1 -1 -2v-1q-1 0 -1 -1v-1l-1 -1v-1 l-0.5 -0.5l-0.5 -0.5q0 -1 -1 -1l-1 -1v0l-1 -1l-1 -1l-195 -130q-5 -3 -10.5 -3t-10.5 3l-195 130h-1v1l-1 0.5l-1 0.5v1h-1v1l-1 1v1h-1v1l-1 1v1v1q-1 1 -1 2v1v2v130v2v1q0 1 1 2v1v1l1 1v1l1 1l0.5 0.5l0.5 0.5v1q1 0 1 0.5v0.5h0.5t0.5 1h1l1 1l195 130q10 7 21 0 l195 -130v0l1 -1h1v-1q1 0 1 -1q1 0 1 -0.5v-0.5l1 -1v-1q1 0 1 -1v-1l1 -1v-1q1 -1 1 -2v-1z" />
+<glyph unicode="&#xf33f;" d="M308 42q56 40 69 107q-35 8 -66 8v0q-17 0 -34 -3q19 -57 31 -112zM213 13q31 0 59 11q-12 63 -32 121q-49 -16 -87 -52q-23 -22 -39 -47q44 -33 99 -33zM47 179q0 -60 39 -106q19 28 46 53q42 38 94 55q-4 10 -10 22q-67 -21 -151 -22q-13 0 -18 1v-3zM140 329 q-33 -16 -56 -45t-32 -64q3 -1 13 -1h3q70 0 131 19q-29 54 -59 91zM213 346q-16 0 -35 -4q32 -42 57 -91q53 23 82 58q-45 37 -104 37zM344 282q-36 -41 -92 -66q4 -8 11 -25q24 4 48 4v0q33 0 69 -8q-3 53 -36 95zM213.5 393q88.5 0 151 -62.5t62.5 -151t-62.5 -151 t-151 -62.5t-151 62.5t-62.5 151t62.5 151t151 62.5z" />
+<glyph unicode="&#xf340;" d="M126 389l87 -72l88 72l126 -81l-87 -69l87 -69l-126 -82l-88 73l-87 -73l-126 82l87 69l-87 69zM213 317l-126 -78l126 -78l127 78zM213 145l89 -73l37 25v-27l-126 -75l-125 75v27l38 -25z" />
+<glyph unicode="&#xf341;" horiz-adv-x="366" d="M249 200h50q3 10 -8 21q-12 12 -27 3.5t-15 -24.5zM332 348q11 -14 17.5 -34.5t8 -32t4.5 -38.5q4 -39 3.5 -88.5t-10.5 -87.5q-9 -61 -49 -80.5t-95 -4.5q-22 6 -32 27t-7 44q4 21 24 31.5t43 10.5v-21q2 -7 -1 -9.5t-8.5 -2t-11.5 -0.5q-8 -5 -9 -16.5t8.5 -21 t27.5 -9.5q33 1 40 12t5 48q2 19 -14 32t-36 14q-37 -3 -65 43q-1 -2 -1 -10.5v-16.5v-15q-1 -15 -15 -23.5t-31 -11.5q-60 -5 -84 19q-34 36 -43 120q-7 48 22 69h81q4 2 10.5 9.5t7.5 8.5v43q1 4 0.5 14.5t1 17t6.5 11.5q22 11 47 4t38 -28h27h28q43 -6 62 -27zM87 313 h-69l86 88v-70z" />
+<glyph unicode="&#xf342;" d="M363 320h-54q-31 0 -52.5 -22t-21.5 -53v-53h-43v-64h43v-149h64v149h64v64h-64v43q0 8 6 14.5t15 6.5h43v64zM0 405h427v-426h-427v426z" />
+<glyph unicode="&#xf343;" horiz-adv-x="224" d="M145 -21h-79v194h-66v76h66v56q0 48 27 74t72 26q36 0 59 -3v-67l-41 -1q-22 0 -30 -9t-8 -27v-49h76l-10 -76h-66v-194z" />
+<glyph unicode="&#xf344;" d="M43 405h341q18 0 30.5 -12.5t12.5 -29.5v-342q0 -17 -12.5 -29.5t-30.5 -12.5h-110q-7 1 -7 21v58q0 27 -15 40q44 5 70.5 27t26.5 78q0 33 -22 57q11 26 -2 57q-18 6 -58 -22q-26 7 -54 7t-53 -7q-18 12 -32.5 17.5t-20.5 4.5h-6q-12 -31 -2 -57q-22 -24 -22 -57 q0 -55 27 -77.5t70 -27.5q-11 -10 -13 -29q-42 -18 -62 18q-12 20 -33 22q-2 0 -4.5 -0.5t-5.5 -3.5t8 -9q15 -7 24 -31q1 -2 2 -4.5t6.5 -9.5t13 -10.5t20.5 -6.5t30 2v-36q0 -20 -8 -21h-109q-18 0 -30.5 12.5t-12.5 29.5v342q0 17 12.5 29.5t30.5 12.5z" />
+<glyph unicode="&#xf345;" d="M213.5 400q88.5 0 151 -62.5t62.5 -150.5q0 -70 -41 -125.5t-105 -77.5q-14 -2 -14 11v58q0 27 -15 40q44 5 70.5 27t26.5 77q0 34 -22 58q11 26 -2 57q-18 5 -58 -22q-26 7 -54 7t-53 -7q-18 12 -32.5 17.5t-20.5 4.5h-6q-12 -31 -2 -57q-22 -24 -22 -58q0 -55 27 -77 t70 -27q-11 -10 -13 -29q-42 -18 -62 18q-12 20 -33 22q-2 0 -4.5 -0.5t-5 -3.5t8.5 -9q14 -7 23 -31q1 -2 2 -4.5t6.5 -9.5t13 -10.5t20.5 -6.5t30 2v-36q0 -13 -14 -11q-64 22 -105 77.5t-41 125.5q0 88 62.5 150.5t151 62.5z" />
+<glyph unicode="&#xf346;" horiz-adv-x="463" d="M140 373l73 -128l-140 -245l-73 128zM183 128h280l-73 -128h-280zM451 149h-146l-147 256h1h145z" />
+<glyph unicode="&#xf347;" d="M222 287q114 -108 165 -114q1 11 1 19q0 25 -7 50q-4 -9 -11 -10t-15.5 5.5t-15.5 14.5t-14.5 18.5t-10 15t-3.5 6.5q-47 66 -163 62q-32 -13 -56 -36q65 30 130 -31zM365 105q11 20 16 39q-33 3 -85.5 29.5t-87.5 51.5l-35 25q-74 58 -127 -9q-8 -24 -8 -49 q0 -38 16 -73q9 26 25 26q15 0 40.5 -13.5t41.5 -18.5q10 -3 31 -10l31.5 -10.5t26.5 -6.5t30 -3q12 0 22 1.5t20 4.5t15.5 4.5t15.5 6t12 5.5zM213 17q76 0 128 56q-45 -13 -83.5 -13t-62.5 7l-25 8q-26 8 -31 -6t7 -38q32 -14 67 -14zM213 405q88 0 151 -62.5t63 -150.5 t-62.5 -150.5t-151 -62.5t-151 62.5t-62.5 150.5t62.5 150.5t150.5 62.5z" />
+<glyph unicode="&#xf348;" horiz-adv-x="416" d="M235 213h181v-21q0 -89 -58 -151t-145 -62q-88 0 -150.5 62.5t-62.5 150.5t62.5 150.5t150.5 62.5q89 0 148 -65l-38 -38q-43 50 -110 50q-66 0 -113 -47t-47 -113t47 -113t113 -47q56 0 96.5 36t50.5 92h-125v53z" />
+<glyph unicode="&#xf349;" horiz-adv-x="448" d="M341 427q44 0 75.5 -31.5t31.5 -75.5q0 -22 -26.5 -67.5t-52 -92.5t-22.5 -75q0 -5 -5.5 -5t-5.5 5q2 28 -23 75t-51.5 92.5t-26.5 67.5q0 44 31 75.5t75 31.5zM341.5 363q-17.5 0 -30 -12.5t-12.5 -30.5t12.5 -30.5t30 -12.5t30 12.5t12.5 30.5t-12.5 30.5t-30 12.5z M43 384h185q-20 -32 -20 -69q0 -26 32 -83l-239 -239l-1 7v341q0 18 12.5 30.5t30.5 12.5zM310 109l-51 51l14 15q24 -39 37 -66zM371 -43h-315l157 158zM427 205v-205l-1 -7l-72 72q3 9 7 18.5t9 20t9.5 19t12 21.5t11 19.5t12.5 21.5zM100 181q-17 0 -27 7t-10 19 q0 14 18 21q10 3 22 3h5q13 -10 18 -15t5 -12q0 -9 -9 -16t-22 -7zM75 303q0 10 5.5 15.5t12.5 5.5q13 0 20.5 -12t7.5 -25q0 -11 -6.5 -15.5t-13.5 -4.5q-11 0 -18.5 11.5t-7.5 24.5zM127 241l-7 6q-6 5 -6 9q0 7 7 12q17 13 17 29q0 14 -14 26h12l9 9h-43 q-21 0 -32.5 -11.5t-11.5 -27.5q0 -13 9 -23t25 -10h5l-2 -8q0 -7 6 -14q-24 -1 -40 -11q-16 -9 -16 -25q0 -13 11.5 -21.5t33.5 -8.5q25 0 39.5 12t14.5 27q0 16 -17 30z" />
+<glyph unicode="&#xf34a;" horiz-adv-x="384" d="M0 341q0 18 12.5 30.5t30.5 12.5h128v-107l-86 22l22 -86h-107v128zM107 171l-22 -86l86 22v-107h-128q-18 0 -30.5 12.5t-12.5 30.5v128h107zM299 85l-22 86h107v-128q0 -18 -12.5 -30.5t-30.5 -12.5h-128v107zM341 384q18 0 30.5 -12.5t12.5 -30.5v-128h-107l22 86 l-86 -22v107h128z" />
+<glyph unicode="&#xf34b;" horiz-adv-x="379" d="M0 11v362q0 21 18 29l210 -210l-210 -210q-18 9 -18 29zM295 125l-230 -132l181 181zM366 217q13 -10 13 -25t-12 -25l-49 -28l-54 53l54 53zM65 391l230 -132l-49 -49z" />
+<glyph unicode="&#xf34c;" d="M43 405h340q17 0 30.5 -17t13.5 -36v-330q0 -18 -12.5 -30.5t-30.5 -12.5h-341q-18 0 -30.5 12.5t-12.5 29.5v341q0 18 12.5 30.5t30.5 12.5zM151 301q-45 0 -76.5 -32t-31.5 -77t31.5 -77t76.5 -32q47 0 75.5 29.5t28.5 76.5q0 13 -2 19h-102v-38h62q-3 -17 -18 -31.5 t-44 -14.5q-28 0 -47.5 20t-19.5 48t19.5 48t47.5 20q27 0 43 -16l30 28q-29 29 -73 29zM322 239v-31h-31v-31h31v-31h31v31h30l1 31h-31v31h-31z" />
+<glyph unicode="&#xf34d;" d="M137 217h128q7 -37 -3 -72q-10 -34 -35 -57q-23 -21 -56 -29q-36 -8 -70 1q-27 7 -49 25q-24 19 -37 45q-22 42 -12 89q3 18 12 34q24 50 77 68q46 16 92 -1q24 -9 44 -27q-2 -3 -7 -7.5t-6 -6.5q-4 -3 -12.5 -11.5t-12.5 -13.5q-13 13 -30 18q-20 6 -40 1 q-24 -5 -41 -22q-13 -14 -20 -33q-9 -26 0 -53q9 -26 32 -42q14 -10 30 -13q15 -3 33 0q17 3 30 12q23 15 27 42h-74v26.5v26.5zM427 214v-34h-47v-46h-34v46h-47v34h47v47h34v-47h47z" />
+<glyph unicode="&#xf34e;" horiz-adv-x="418" d="M214 222v1h201q3 -12 3 -36q0 -93 -56.5 -150.5t-148.5 -57.5q-88 0 -150.5 62t-62.5 151t62 151t151 62q87 0 144 -57l-57 -56q-33 33 -86 33q-54 0 -92.5 -39.5t-38.5 -95t38.5 -94.5t92.5 -39q31 0 55 9.5t37.5 24.5t20.5 29.5t10 27.5h-123v74z" />
+<glyph unicode="&#xf34f;" d="M384 309v43q0 11 -11 11h-42q-11 0 -11 -11v-43q0 -10 11 -10h42q11 0 11 10zM53 21h320q11 0 11 11v181h-45q2 -12 2 -21q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5q0 11 2 21h-44v-181q0 -11 10 -11zM213.5 277q-35.5 0 -60.5 -25t-25 -60t25 -60t60.5 -25 t60.5 25t25 60t-25 60t-60.5 25zM384 405q18 0 30.5 -12.5t12.5 -29.5v-342q0 -17 -12.5 -29.5t-30.5 -12.5h-341q-18 0 -30.5 12.5t-12.5 29.5v342q0 17 12.5 29.5t30.5 12.5h341z" />
+<glyph unicode="&#xf350;" horiz-adv-x="401" d="M59 354h342l-31 -156l-5 -25l-24 -121l-183 -61l-158 61l16 80h67l-6 -33l95 -36l111 36l15 77h-274l13 67h274l9 44h-274z" />
+<glyph unicode="&#xf351;" horiz-adv-x="357" d="M179 50l91 25l13 138h-163l-4 45h171l4 45h-225l13 -135h155l-5 -58l-50 -14l-50 14l-4 37h-45l7 -72zM0 378h357l-32 -365l-146 -51l-147 51z" />
+<glyph unicode="&#xf352;" horiz-adv-x="384" d="M0 384h384v-384h-384v384zM101 63q15 -33 54 -33q25 0 39.5 13.5t14.5 40.5v124h-36v-123q0 -23 -19 -23q-13 0 -24 19zM228 67q19 -37 66 -37q27 0 43.5 13.5t16.5 36.5q0 22 -11.5 34t-36.5 23l-9 4q-12 5 -17 9.5t-5 12.5q0 6 4.5 10.5t12.5 4.5q15 0 24 -15l27 18 q-16 29 -51 29q-24 0 -38.5 -13.5t-14.5 -34.5t11 -33t33 -21l9 -4q10 -5 14.5 -7t8 -6.5t3.5 -10.5q0 -8 -6.5 -13t-17.5 -5q-23 0 -36 22z" />
+<glyph unicode="&#xf353;" horiz-adv-x="458" d="M0 294q45 29 82 35.5t60 -5.5t39 -35.5t23 -48t8 -49.5q3 -37 -18.5 -72.5t-57.5 -47.5t-83 16v-120l-53 34v293zM51 256v-121q41 -25 65.5 -21t35 24.5t10.5 56.5q0 47 -17 68t-41.5 17.5t-52.5 -24.5zM299 328q-4 -78 0 -155q3 -21 14.5 -30.5t26.5 -8t30 6t25 10.5 l10 5v155l53 -6v-207q0 -28 -8 -50.5t-20 -36t-27 -23t-30.5 -13.5t-27.5 -6t-20 -2h-8l-18 51q35 0 59 8.5t33 20t13.5 23.5t3.5 20l-1 8q-42 -16 -73.5 -17.5t-47.5 7.5t-25.5 20.5t-11.5 20.5l-2 10v155z" />
+<glyph unicode="&#xf354;" d="M366 288q25 0 43 -18t18 -43v-81q0 -25 -18 -43t-43 -18h-153q0 -6 5 -13t10 -7h92v-36q0 -25 -18 -43t-43 -18h-91q-26 0 -43.5 18t-17.5 43v80q0 25 17.5 43t43.5 18h112q25 0 42.5 18t17.5 43v57h26zM274 36q-15 0 -15 -19q0 -15 15 -15q7 0 11 4.5t4 10.5 q0 19 -15 19zM61 75q-25 0 -43 17.5t-18 43.5v80q0 26 18 43.5t43 17.5h152q0 7 -4.5 14t-10.5 7h-91v36q0 25 17.5 43t43.5 18h91q25 0 43 -18t18 -43v-80q0 -26 -18 -43.5t-43 -17.5h-112q-25 0 -43 -18t-18 -43v-57h-25zM152 326q16 0 16 19q0 15 -16 15q-15 0 -15 -15 q0 -19 15 -19z" />
+<glyph unicode="&#xf355;" d="M325 72q-58 0 -87 22.5t-42 64.5l-16 49q-11 32 -25 48t-44 16q-25 0 -42.5 -20t-17.5 -62q0 -35 16 -56t42 -21q17 0 33 7t23 14l8 7l15 -43q-3 -3 -9 -7t-27 -11.5t-45 -7.5q-52 0 -79.5 30t-27.5 86q0 59 28.5 91.5t81.5 32.5q49 0 76 -20t42 -68l16 -50 q10 -30 28.5 -46t53.5 -16q51 0 51 26q0 23 -33 30l-34 8q-56 14 -56 65q0 38 24.5 54.5t62.5 16.5q78 0 84 -63l-49 -6q-3 30 -38 30t-35 -26q0 -23 28 -29l31 -7q65 -15 65 -71q0 -68 -102 -68z" />
+<glyph unicode="&#xf356;" d="M363 43v121q0 31 -22 53t-53 22q-15 0 -30 -8.5t-23 -21.5v26h-64v-192h64v113q0 13 9 22.5t22.5 9.5t23 -9.5t9.5 -22.5v-113h64zM96 271q16 0 27.5 11t11.5 27t-11.5 27.5t-27.5 11.5t-27.5 -11.5t-11.5 -27.5t11.5 -27t27.5 -11zM128 43v192h-64v-192h64zM384 405 q18 0 30.5 -12.5t12.5 -29.5v-342q0 -17 -12.5 -29.5t-30.5 -12.5h-341q-18 0 -30.5 12.5t-12.5 29.5v342q0 17 12.5 29.5t30.5 12.5h341z" />
+<glyph unicode="&#xf357;" horiz-adv-x="371" d="M237 405q79 0 112 -39q30 -35 20 -99q-23 -146 -175 -146h-49q-8 0 -14 -5t-7 -13l-17 -106q-1 -8 -7 -13t-14 -5h-73q-6 0 -10 4.5t-3 9.5l62 394q2 8 7.5 13t13.5 5h154zM255 261q4 29 -8 43q-6 8 -18 11.5t-21.5 4t-27.5 0.5h-11q-11 0 -12 -11l-17 -103h23 q17 0 25.5 0.5t22 3.5t21 8.5t14 16.5t9.5 26z" />
+<glyph unicode="&#xf358;" d="M235 102q53 0 82 35t29 82q0 52 -39 89.5t-93.5 37.5t-93.5 -37.5t-39 -89.5q0 -34 18 -63q6 -11 18 -11q9 0 15.5 6.5t6.5 14.5q0 5 -4 11q-11 20 -11 42q0 35 26 59.5t63 24.5t63.5 -24.5t26.5 -59.5q0 -30 -16.5 -51.5t-51.5 -21.5q-12 0 -20 8.5t-8 20.5 q0 9 9.5 28.5t9.5 35.5q0 28 -31 28q-14 0 -24.5 -11.5t-10.5 -36.5q0 -8 1 -16t2 -12l1 -3l-39 -119l-1 -4v-1.5v-1.5q0 -10 6.5 -17t16.5 -7q14 0 20 12l1 -1l1 4l20 69q19 -20 46 -20zM384 405q18 0 30.5 -12.5t12.5 -29.5v-342q0 -17 -12.5 -29.5t-30.5 -12.5h-341 q-18 0 -30.5 12.5t-12.5 29.5v342q0 17 12.5 29.5t30.5 12.5h341z" />
+<glyph unicode="&#xf359;" d="M427 332v-37v-75q0 -39 -10 -69q-18 -60 -68 -102q-53 -44 -121 -48q-70 -5 -129 32q-54 35 -80 93q-15 33 -18 66q-1 18 -1 75v36.5v38.5q0 14 7.5 25t20.5 15q8 2 16 2h20h38h74h21h16q25 0 75.5 -0.5t75.5 -0.5q27 0 35 -2q14 -4 22 -17q6 -9 6 -32zM342 235 q5 15 -6 27q-10 13 -27 10q-5 0 -9.5 -3t-7 -5t-8 -7.5l-6.5 -6.5q-56 -55 -64 -62q-2 1 -56 53q-7 7 -15 14q-11 11 -14 13q-13 9 -27 2q-15 -6 -17.5 -21.5t8.5 -26.5q1 0 58 -56l28 -26q1 -2 5.5 -6.5t7 -6.5t7 -5t8.5 -4q15 -3 27 8q4 4 9 8.5t11 10.5l9 9q52 50 58 55 l5.5 5.5l6.5 6.5t5 6t4 8z" />
+<glyph unicode="&#xf35a;" horiz-adv-x="491" d="M395 363l96 -171l-96 -171h-86l96 171l-55 99l-169 -270h-85l-96 171l96 171h85l-96 -171l56 -99l168 270h86z" />
+<glyph unicode="&#xf35b;" horiz-adv-x="384" d="M320 105q26 0 44 -18.5t18 -44t-18 -44t-44 -18.5t-44 18.5t-18 44.5q0 6 1 14l-151 88q-19 -17 -44 -17q-27 0 -45.5 18.5t-18.5 45.5t18.5 45.5t45.5 18.5q25 0 44 -17l150 87q-2 9 -2 15q0 27 18.5 45.5t45.5 18.5t45.5 -18.5t18.5 -45t-18.5 -45.5t-45.5 -19 q-25 0 -44 18l-150 -88q2 -9 2 -15t-2 -15l152 -88q18 16 42 16z" />
+<glyph unicode="&#xf35c;" horiz-adv-x="336" d="M245 13v145h34v-179h-279v178l32 -1l-1 -143h214zM52 73h167v-35h-167v35zM57 136l168 -16l-4 -36l-168 16zM72 209l163 -46l-10 -35l-163 46zM112 291l144 -87l-19 -32l-144 87zM262 210l-98 137l30 21l98 -137zM272 399l36 6l28 -166l-36 -6z" />
+<glyph unicode="&#xf35d;" horiz-adv-x="439" d="M355 263q0 23 -16.5 39t-39 16t-39 -16t-16.5 -39t16.5 -39t39 -16t39 16t16.5 39zM181 95q0 -24 -17 -40t-40 -16q-16 0 -29.5 8t-20.5 22q15 -6 28 -12q17 -6 34 1t25 25q6 17 -1 34t-25 24l-23 9q6 2 12 2q23 0 40 -16.5t17 -40.5zM439 329v-274q0 -34 -24 -58 t-58 -24h-275q-34 0 -58 24t-24 58v44l49 -20q6 -26 27 -43.5t48 -17.5q30 0 52 20t25 50l98 72q43 0 73 30t30 73q0 42 -30 72.5t-73 30.5q-42 0 -72 -30t-31 -72l-64 -92h-8q-21 0 -39 -11l-85 34v134q0 34 24 58t58 24h275q34 0 58 -24t24 -58zM368 263q0 -29 -20 -49 t-48.5 -20t-49 20t-20.5 48.5t20.5 49t48.5 20.5q29 0 49 -20.5t20 -48.5z" />
+<glyph unicode="&#xf35e;" d="M372 273q0 -26 -18 -44.5t-44 -18.5t-44.5 18.5t-18.5 44.5t18.5 44.5t44.5 18.5t44 -18.5t18 -44.5zM0 73v110l65 -26q20 12 45 12h9l73 105q0 48 34.5 82t82.5 34q49 0 83.5 -34.5t34.5 -83t-34.5 -83t-83.5 -34.5l-112 -82q-3 -34 -28 -56.5t-59 -22.5q-32 0 -56 19.5 t-30 49.5zM309.5 352q-32.5 0 -55.5 -23.5t-23 -56t23 -55.5t55.5 -23t55.5 23t23 55.5t-23 56t-55.5 23.5zM110 146q-7 0 -14 -2l27 -10q19 -8 27.5 -27.5t0.5 -39.5t-27.5 -28t-39.5 -1q-6 3 -16.5 7.5t-14.5 5.5q18 -34 57 -34q26 0 45 19t19 45.5t-19 45.5t-45 19z" />
+<glyph unicode="&#xf35f;" d="M335 249q22 18 28 30q-13 -6 -31 -9q18 13 24 32q-20 -11 -37 -14q-12 14 -31 16.5t-35.5 -5t-26.5 -25t-5 -38.5q-67 4 -118 59q-11 -20 -4.5 -43.5t21.5 -32.5q-11 1 -24 7q1 -43 44 -57q-12 -3 -24 -1q12 -36 53 -40q-15 -13 -39 -19.5t-45 -3.5q45 -28 92 -26 q70 3 113.5 49.5t44.5 120.5zM384 405q18 0 30.5 -12.5t12.5 -29.5v-342q0 -17 -12.5 -29.5t-30.5 -12.5h-341q-18 0 -30.5 12.5t-12.5 29.5v342q0 17 12.5 29.5t30.5 12.5h341z" />
+<glyph unicode="&#xf360;" d="M383 279v-11q0 -45 -16.5 -88.5t-47 -79.5t-79 -58.5t-106.5 -22.5q-73 0 -134 39q10 -1 21 -1q61 0 109 37q-29 1 -51.5 18t-30.5 43q8 -2 16 -2q12 0 23 4q-30 6 -50 30t-20 55v1q19 -10 40 -11q-39 27 -39 73q0 24 12 44q33 -40 79.5 -64t100.5 -27q-2 10 -2 20 q0 36 25.5 61.5t61.5 25.5q38 0 64 -27q30 6 56 21q-10 -31 -39 -48q27 3 51 13q-18 -26 -44 -45z" />
+<glyph unicode="&#xf361;" horiz-adv-x="549" d="M548 299q7 -18 -43 -84q-7 -9 -18 -24q-23 -28 -26 -37q-5 -12 4 -23q5 -6 23 -24h1v-1q41 -37 55 -63l2 -4t2 -7.5t0 -9.5t-7 -7.5t-17 -3.5l-73 -2q-7 -1 -16.5 2t-14.5 6l-6 4q-9 6 -20 18t-19.5 22t-17.5 16.5t-16 4.5q-1 0 -2.5 -1t-5 -4.5t-6 -8.5t-4.5 -14.5 t-2 -22.5q0 -4 -1 -7.5t-2 -5.5l-1 -1q-6 -6 -16 -6h-32q-21 -2 -42.5 4t-37.5 15.5t-29 19t-20 16.5l-7 7q-3 2 -8 8t-20.5 26t-30.5 43t-35 60.5t-37 77.5q-2 5 -2 8t1 5l1 1q4 6 16 6h79q3 0 6 -1.5l5 -2.5l1 -1q5 -3 7 -9q6 -14 13.5 -29.5t11.5 -23.5l4 -8 q9 -17 16.5 -29.5t13.5 -19.5t12 -11t10 -4t8 1l1 1.5t3.5 6.5t4 13t2.5 23t0 36q-1 11 -3 20.5t-4 13.5l-1 3q-7 10 -25 13q-3 0 2 7q5 5 11 8q15 8 68 7q23 0 39 -4q5 -1 9 -3.5t6 -7t3 -9t1 -13v-15.5q-1 -8 -1 -20v-24q0 -3 -0.5 -12t-0.5 -14t1 -11.5t3.5 -11t6.5 -6.5 q2 -1 4.5 -1.5t7.5 3t11 10t15 19.5t19 30q17 30 31 65q1 2 2.5 4.5t3.5 3.5h1l1 1l4 1h6l82 1q11 1 18.5 -1t8.5 -5z" />
+<glyph unicode="&#xf362;" d="M40 280q-17 29 -38 37l-2 1v15h1h109v-15q-13 -1 -21.5 -7t-5.5 -17q14 -33 40.5 -94t38.5 -89l46 87q-7 14 -23 51.5t-27 58.5q-7 10 -36 11v14h102l1 -14q-6 -1 -10 -2t-7 -4.5t-2 -8.5l29 -64q28 60 28 61q3 11 -5 14.5t-21 3.5l-1 14h92v-14q-24 -2 -33 -15 q-14 -20 -46 -89q23 -53 43 -95l78 180q-6 13 -29 19l-1 14l87 -1v-14q-6 -1 -11 -3q-11 -5 -18 -17l-107 -247h-18l-52 120l-62 -120h-18q-16 33 -48 111t-53 118z" />
+<glyph unicode="&#xf363;" horiz-adv-x="363" d="M0 192v112l128 28v-138zM363 384v-187l-214 -3v143zM0 171l128 -2v-146l-128 25v123zM363 165v-186l-214 40v150z" />
+<glyph unicode="&#xf364;" horiz-adv-x="469" d="M384 192v-107h-107v43h64v64h43zM128 256v-64h-43v107h107v-43h-64zM427 384q17 0 29.5 -12.5t12.5 -30.5v-298q0 -18 -12.5 -30.5t-29.5 -12.5h-384q-18 0 -30.5 12.5t-12.5 30.5v298q0 18 12.5 30.5t30.5 12.5h384zM427 42v300h-384v-300h384z" />
+<glyph unicode="&#xf365;" d="M299 235v-43h-43v43h43zM299 149v-42h-43v42h43zM128 235v-43h-43v43h43zM213 235v-43h-42v43h42zM384 363q18 0 30.5 -12.5t12.5 -30.5v-256q0 -18 -12.5 -30.5t-30.5 -12.5h-341q-18 0 -30.5 12.5t-12.5 30.5v256q0 18 12.5 30.5t30.5 12.5h341zM384 64v256h-341v-256 h341z" />
+<glyph unicode="&#xf366;" d="M170.5 256q8.5 0 15 -6.5t6.5 -15t-6.5 -15t-15 -6.5t-15 6.5t-6.5 15t6.5 15t15 6.5zM170.5 171q8.5 0 15 -6.5t6.5 -15t-6.5 -15t-15 -6.5t-15 6.5t-6.5 15t6.5 15t15 6.5zM106.5 245q10.5 0 10.5 -10.5t-10.5 -10.5t-10.5 10.5t10.5 10.5zM170.5 96q10.5 0 10.5 -10.5 t-10.5 -10.5t-10.5 10.5t10.5 10.5zM106.5 160q10.5 0 10.5 -10.5t-10.5 -10.5t-10.5 10.5t10.5 10.5zM170.5 288q-10.5 0 -10.5 10.5t10.5 10.5t10.5 -10.5t-10.5 -10.5zM256 256q9 0 15 -6.5t6 -15t-6 -15t-15 -6.5t-15 6.5t-6 15t6 15t15 6.5zM256 288q-11 0 -11 10.5 t11 10.5t11 -10.5t-11 -10.5zM320 160q11 0 11 -10.5t-11 -10.5t-11 10.5t11 10.5zM320 245q11 0 11 -10.5t-11 -10.5t-11 10.5t11 10.5zM213.5 405q88.5 0 151 -62.5t62.5 -150.5t-62.5 -150.5t-151 -62.5t-151 62.5t-62.5 150.5t62.5 150.5t151 62.5zM213.5 21 q70.5 0 120.5 50t50 121t-50 121t-120.5 50t-120.5 -50t-50 -121t50 -121t120.5 -50zM256 96q11 0 11 -10.5t-11 -10.5t-11 10.5t11 10.5zM256 171q9 0 15 -6.5t6 -15t-6 -15t-15 -6.5t-15 6.5t-6 15t6 15t15 6.5z" />
+<glyph unicode="&#xf367;" horiz-adv-x="384" d="M42.5 75q-13.5 0 -22.5 9t-9 22.5t9 23t22.5 9.5t23 -9.5t9.5 -23t-9.5 -22.5t-23 -9zM128 171q-9 0 -15 6t-6 15t6 15t15 6t15 -6t6 -15t-6 -15t-15 -6zM128 256q-9 0 -15 6.5t-6 15t6 15t15 6.5t15 -6.5t6 -15t-6 -15t-15 -6.5zM0 0v43h384v-43h-384zM42.5 245 q-13.5 0 -22.5 9.5t-9 23t9 22.5t22.5 9t23 -9t9.5 -22.5t-9.5 -23t-23 -9.5zM42.5 160q-13.5 0 -22.5 9.5t-9 22.5t9 22.5t22.5 9.5t23 -9.5t9.5 -22.5t-9.5 -22.5t-23 -9.5zM128 85q-9 0 -15 6.5t-6 15t6 15t15 6.5t15 -6.5t6 -15t-6 -15t-15 -6.5zM298.5 96 q-10.5 0 -10.5 10.5t10.5 10.5t10.5 -10.5t-10.5 -10.5zM0 384h384v-43h-384v43zM298.5 267q-10.5 0 -10.5 10.5t10.5 10.5t10.5 -10.5t-10.5 -10.5zM298.5 181q-10.5 0 -10.5 11t10.5 11t10.5 -11t-10.5 -11zM213.5 256q-8.5 0 -15 6.5t-6.5 15t6.5 15t15 6.5t15 -6.5 t6.5 -15t-6.5 -15t-15 -6.5zM213.5 171q-8.5 0 -15 6t-6.5 15t6.5 15t15 6t15 -6t6.5 -15t-6.5 -15t-15 -6zM213.5 85q-8.5 0 -15 6.5t-6.5 15t6.5 15t15 6.5t15 -6.5t6.5 -15t-6.5 -15t-15 -6.5z" />
+<glyph unicode="&#xf368;" horiz-adv-x="405" d="M245.5 299q-8.5 0 -15 6t-6.5 15t6.5 15t15 6t15 -6t6.5 -15t-6.5 -15t-15 -6zM241 203q-11 2 -18.5 9.5t-8.5 17.5l-1 5q0 13 9.5 22.5t23 9.5t22.5 -9.5t9 -23t-9 -22.5t-23 -9h-4zM245.5 373q-10.5 0 -10.5 11t10.5 11t10.5 -11t-10.5 -11zM160 373q-11 0 -11 11 t11 11t11 -11t-11 -11zM394.5 224q-10.5 0 -10.5 10.5t10.5 10.5t10.5 -10.5t-10.5 -10.5zM160 299q-9 0 -15 6t-6 15t6 15t15 6t15 -6t6 -15t-6 -15t-15 -6zM330.5 128q-8.5 0 -15 6.5t-6.5 15t6.5 15t15 6.5t15 -6.5t6.5 -15t-6.5 -15t-15 -6.5zM330.5 213q-8.5 0 -15 6.5 t-6.5 15t6.5 15t15 6.5t15 -6.5t6.5 -15t-6.5 -15t-15 -6.5zM330.5 299q-8.5 0 -15 6t-6.5 15t6.5 15t15 6t15 -6t6.5 -15t-6.5 -15t-15 -6zM245.5 11q10.5 0 10.5 -11t-10.5 -11t-10.5 11t10.5 11zM0 336l27 27l346 -347l-27 -27l-81 81q2 -4 2 -6q0 -9 -6.5 -15t-15 -6 t-15 6t-6.5 15t6.5 15t14.5 6q2 0 6 -1l-60 60q-1 -11 -10 -19t-21 -8q-13 0 -22.5 9.5t-9.5 22.5q0 12 7.5 21t19.5 11l-60 60q1 -4 1 -6q0 -9 -6.5 -15.5t-15 -6.5t-15 6.5t-6.5 15t6.5 15t15.5 6.5l6 -1zM160 85q9 0 15 -6t6 -15t-6 -15t-15 -6t-15 6t-6 15t6 15t15 6z M394.5 160q10.5 0 10.5 -10.5t-10.5 -10.5t-10.5 10.5t10.5 10.5zM74.5 171q8.5 0 15 -6.5t6.5 -15t-6.5 -15t-15 -6.5t-15 6.5t-6.5 15t6.5 15t15 6.5zM10.5 245q10.5 0 10.5 -10.5t-10.5 -10.5t-10.5 10.5t10.5 10.5zM160 11q11 0 11 -11t-11 -11t-11 11t11 11zM74.5 85 q8.5 0 15 -6t6.5 -15t-6.5 -15t-15 -6t-15 6t-6.5 15t6.5 15t15 6zM10.5 160q10.5 0 10.5 -10.5t-10.5 -10.5t-10.5 10.5t10.5 10.5z" />
+<glyph unicode="&#xf369;" horiz-adv-x="405" d="M74.5 171q8.5 0 15 -6.5t6.5 -15t-6.5 -15t-15 -6.5t-15 6.5t-6.5 15t6.5 15t15 6.5zM74.5 85q8.5 0 15 -6t6.5 -15t-6.5 -15t-15 -6t-15 6t-6.5 15t6.5 15t15 6zM74.5 256q8.5 0 15 -6.5t6.5 -15t-6.5 -15t-15 -6.5t-15 6.5t-6.5 15t6.5 15t15 6.5zM10.5 245 q10.5 0 10.5 -10.5t-10.5 -10.5t-10.5 10.5t10.5 10.5zM74.5 341q8.5 0 15 -6t6.5 -15t-6.5 -15t-15 -6t-15 6t-6.5 15t6.5 15t15 6zM394.5 224q-10.5 0 -10.5 10.5t10.5 10.5t10.5 -10.5t-10.5 -10.5zM245.5 299q-8.5 0 -15 6t-6.5 15t6.5 15t15 6t15 -6t6.5 -15t-6.5 -15 t-15 -6zM245.5 373q-10.5 0 -10.5 11t10.5 11t10.5 -11t-10.5 -11zM10.5 160q10.5 0 10.5 -10.5t-10.5 -10.5t-10.5 10.5t10.5 10.5zM160 11q11 0 11 -11t-11 -11t-11 11t11 11zM160 373q-11 0 -11 11t11 11t11 -11t-11 -11zM160 299q-9 0 -15 6t-6 15t6 15t15 6t15 -6 t6 -15t-6 -15t-15 -6zM160 181q13 0 22.5 -9t9.5 -22.5t-9.5 -23t-22.5 -9.5t-22.5 9.5t-9.5 23t9.5 22.5t22.5 9zM330.5 171q8.5 0 15 -6.5t6.5 -15t-6.5 -15t-15 -6.5t-15 6.5t-6.5 15t6.5 15t15 6.5zM330.5 85q8.5 0 15 -6t6.5 -15t-6.5 -15t-15 -6t-15 6t-6.5 15t6.5 15 t15 6zM330.5 256q8.5 0 15 -6.5t6.5 -15t-6.5 -15t-15 -6.5t-15 6.5t-6.5 15t6.5 15t15 6.5zM330.5 341q8.5 0 15 -6t6.5 -15t-6.5 -15t-15 -6t-15 6t-6.5 15t6.5 15t15 6zM394.5 160q10.5 0 10.5 -10.5t-10.5 -10.5t-10.5 10.5t10.5 10.5zM245.5 85q8.5 0 15 -6t6.5 -15 t-6.5 -15t-15 -6t-15 6t-6.5 15t6.5 15t15 6zM245.5 11q10.5 0 10.5 -11t-10.5 -11t-10.5 11t10.5 11zM160 267q13 0 22.5 -9.5t9.5 -23t-9.5 -22.5t-22.5 -9t-22.5 9t-9.5 22.5t9.5 23t22.5 9.5zM160 85q9 0 15 -6t6 -15t-6 -15t-15 -6t-15 6t-6 15t6 15t15 6zM245.5 181 q13.5 0 22.5 -9t9 -22.5t-9 -23t-22.5 -9.5t-23 9.5t-9.5 23t9.5 22.5t23 9zM245.5 267q13.5 0 22.5 -9.5t9 -23t-9 -22.5t-22.5 -9t-23 9t-9.5 22.5t9.5 23t23 9.5z" />
+<glyph unicode="&#xf36a;" horiz-adv-x="320" d="M107 405q88 0 150.5 -62.5t62.5 -150.5t-62.5 -150.5t-150.5 -62.5q-57 0 -107 28q49 29 78 78t29 107t-29 107t-78 78q50 28 107 28z" />
+<glyph unicode="&#xf36b;" horiz-adv-x="277" d="M64 405q88 0 150.5 -62.5t62.5 -150.5t-62.5 -150.5t-150.5 -62.5q-33 0 -64 9q66 21 107.5 77t41.5 127t-41.5 127t-107.5 77q31 9 64 9z" />
+<glyph unicode="&#xf36c;" horiz-adv-x="483" d="M412 263l71 -71l-71 -71v-100h-100l-71 -70l-70 70h-100v100l-71 71l71 71v100h100l70 70l71 -70h100v-100zM241 64q53 0 90.5 37.5t37.5 90.5t-37.5 90.5t-90.5 37.5q-28 0 -53 -12q33 -15 54 -46.5t21 -69.5t-21 -69.5t-54 -46.5q25 -12 53 -12z" />
+<glyph unicode="&#xf36d;" horiz-adv-x="483" d="M412 121v-100h-100l-71 -70l-70 70h-100v100l-71 71l71 71v100h100l70 70l71 -70h100v-100l71 -71zM241 64q53 0 90.5 37.5t37.5 90.5t-37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5z" />
+<glyph unicode="&#xf36e;" horiz-adv-x="483" d="M412 121v-100h-100l-71 -70l-70 70h-100v100l-71 71l71 71v100h100l70 70l71 -70h100v-100l71 -71zM241 64q53 0 90.5 37.5t37.5 90.5t-37.5 90.5t-90.5 37.5v-256z" />
+<glyph unicode="&#xf36f;" horiz-adv-x="483" d="M412 263l71 -71l-71 -71v-100h-100l-71 -70l-70 70h-100v100l-71 71l71 71v100h100l70 70l71 -70h100v-100zM241 64q53 0 90.5 37.5t37.5 90.5t-37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5zM241.5 277q35.5 0 60.5 -25t25 -60t-25 -60 t-60.5 -25t-60.5 25t-25 60t25 60t60.5 25z" />
+<glyph unicode="&#xf370;" horiz-adv-x="483" d="M217 178l24 78l25 -78h-49zM412 263l71 -71l-71 -71v-100h-100l-71 -70l-70 70h-100v100l-71 71l71 71v100h100l70 70l71 -70h100v-100zM290 107h41l-68 192h-43l-68 -192h40l15 42h68z" />
+<glyph unicode="&#xf371;" horiz-adv-x="469" d="M427 384q17 0 29.5 -12.5t12.5 -30.5v-298q0 -18 -12.5 -30.5t-29.5 -12.5h-384q-18 0 -30.5 12.5t-12.5 30.5v298q0 18 12.5 30.5t30.5 12.5h384zM427 42v300h-384v-300h384zM149 107v53l-32 32l32 32v53h54l32 32l32 -32h53v-53l32 -32l-32 -32v-53h-53l-32 -32l-32 32 h-54zM235 256v-128q26 0 45 18.5t19 45.5t-19 45.5t-45 18.5z" />
+<glyph unicode="&#xf372;" horiz-adv-x="384" d="M384 341v-140l-64 64l-85 -86l-86 86l-85 -86l-64 65v97q0 18 12.5 30.5t30.5 12.5h298q18 0 30.5 -12.5t12.5 -30.5zM320 204l64 -64v-97q0 -18 -12.5 -30.5t-30.5 -12.5h-298q-18 0 -30.5 12.5t-12.5 30.5v140l64 -64l85 86l86 -86z" />
+<glyph unicode="&#xf373;" horiz-adv-x="384" d="M192 277q35 0 60 -25t25 -60t-25 -60t-60 -25t-60 25t-25 60t25 60t60 25zM43 128v-85h85v-43h-85q-18 0 -30.5 12.5t-12.5 30.5v85h43zM43 341v-85h-43v85q0 18 12.5 30.5t30.5 12.5h85v-43h-85zM341 384q18 0 30.5 -12.5t12.5 -30.5v-85h-43v85h-85v43h85zM341 43v85 h43v-85q0 -18 -12.5 -30.5t-30.5 -12.5h-85v43h85z" />
+<glyph unicode="&#xf374;" horiz-adv-x="384" d="M43 128v-85h85v-43h-85q-18 0 -30.5 12.5t-12.5 30.5v85h43zM43 341v-85h-43v85q0 18 12.5 30.5t30.5 12.5h85v-43h-85zM341 384q18 0 30.5 -12.5t12.5 -30.5v-85h-43v85h-85v43h85zM341 43v85h43v-85q0 -18 -12.5 -30.5t-30.5 -12.5h-85v43h85zM192 277q35 0 60 -25 t25 -60t-25 -60t-60 -25t-60 25t-25 60t25 60t60 25zM192 149q18 0 30.5 12.5t12.5 30.5t-12.5 30.5t-30.5 12.5t-30.5 -12.5t-12.5 -30.5t12.5 -30.5t30.5 -12.5z" />
+<glyph unicode="&#xf375;" horiz-adv-x="384" d="M149 384v43h43v-470h-43v43h-106q-18 0 -30.5 12.5t-12.5 30.5v298q0 18 12.5 30.5t30.5 12.5h106zM149 64v128l-106 -128h106zM341 384q18 0 30.5 -12.5t12.5 -30.5v-298q0 -18 -12.5 -30.5t-30.5 -12.5h-106v192l106 -128v277h-106v43h106z" />
+<glyph unicode="&#xf376;" horiz-adv-x="384" d="M341 320q18 0 30.5 -12.5t12.5 -30.5v-170q0 -18 -12.5 -30.5t-30.5 -12.5h-298q-18 0 -30.5 12.5t-12.5 30.5v170q0 18 12.5 30.5t30.5 12.5h298zM341 107v170h-298v-170h298z" />
+<glyph unicode="&#xf377;" horiz-adv-x="384" d="M341 363q18 0 30.5 -12.5t12.5 -30.5v-256q0 -18 -12.5 -30.5t-30.5 -12.5h-298q-18 0 -30.5 12.5t-12.5 30.5v256q0 18 12.5 30.5t30.5 12.5h298zM341 64v256h-298v-256h298z" />
+<glyph unicode="&#xf378;" horiz-adv-x="384" d="M341 341q18 0 30.5 -12.5t12.5 -29.5v-214q0 -17 -12.5 -29.5t-30.5 -12.5h-298q-18 0 -30.5 12.5t-12.5 29.5v214q0 17 12.5 29.5t30.5 12.5h298zM341 85v214h-298v-214h298z" />
+<glyph unicode="&#xf379;" horiz-adv-x="384" d="M341 299q18 0 30.5 -12.5t12.5 -30.5v-128q0 -18 -12.5 -30.5t-30.5 -12.5h-298q-18 0 -30.5 12.5t-12.5 30.5v128q0 18 12.5 30.5t30.5 12.5h298zM341 128v128h-298v-128h298z" />
+<glyph unicode="&#xf37a;" horiz-adv-x="384" d="M341 384q18 0 30.5 -12.5t12.5 -30.5v-298q0 -18 -12.5 -30.5t-30.5 -12.5h-298q-18 0 -30.5 12.5t-12.5 30.5v298q0 18 12.5 30.5t30.5 12.5h298zM341 43v298h-298v-298h298z" />
+<glyph unicode="&#xf37b;" horiz-adv-x="384" d="M0 341q0 18 12.5 30.5t30.5 12.5h85v-43h-85v-85h-43v85zM43 128v-85h85v-43h-85q-18 0 -30.5 12.5t-12.5 30.5v85h43zM341 43v85h43v-85q0 -18 -12.5 -30.5t-30.5 -12.5h-85v43h85zM341 384q18 0 30.5 -12.5t12.5 -30.5v-85h-43v85h-85v43h85z" />
+<glyph unicode="&#xf37c;" horiz-adv-x="384" d="M341 341q18 0 30.5 -12.5t12.5 -29.5v-214q0 -17 -12.5 -29.5t-30.5 -12.5h-298q-18 0 -30.5 12.5t-12.5 29.5v214q0 17 12.5 29.5t30.5 12.5h298zM341 85v214h-298v-214h298z" />
+<glyph unicode="&#xf37d;" horiz-adv-x="299" d="M256 384q18 0 30.5 -12.5t12.5 -30.5v-298q0 -18 -12.5 -30.5t-30.5 -12.5h-213q-18 0 -30.5 12.5t-12.5 30.5v298q0 18 12.5 30.5t30.5 12.5h213zM256 43v298h-213v-298h213z" />
+<glyph unicode="&#xf37e;" horiz-adv-x="341" d="M299 363q17 0 29.5 -12.5t12.5 -30.5v-256q0 -18 -12.5 -30.5t-29.5 -12.5h-256q-18 0 -30.5 12.5t-12.5 30.5v256q0 18 12.5 30.5t30.5 12.5h256zM299 64v256h-256v-256h256z" />
+<glyph unicode="&#xf37f;" horiz-adv-x="384" d="M341 384q18 0 30.5 -12.5t12.5 -30.5v-298q0 -18 -12.5 -30.5t-30.5 -12.5h-298q-18 0 -30.5 12.5t-12.5 30.5v298q0 18 12.5 30.5t30.5 12.5h298zM53 288v-32h43v-43h32v43h43v32h-43v43h-32v-43h-43zM341 43v298l-298 -298h298zM299 85h-107v32h107v-32z" />
+<glyph unicode="&#xf380;" d="M277 85h-42v43h42v43h43v-43h43v-43h-43v-42h-43v42zM384 405q18 0 30.5 -12.5t12.5 -29.5v-342q0 -17 -12.5 -29.5t-30.5 -12.5h-341q-18 0 -30.5 12.5t-12.5 29.5v342q0 17 12.5 29.5t30.5 12.5h341zM64 341v-42h128v42h-128zM384 21v342l-341 -342h341z" />
+<glyph unicode="&#xf381;" horiz-adv-x="384" d="M341 384q18 0 30.5 -12.5t12.5 -30.5v-298q0 -18 -12.5 -30.5t-30.5 -12.5h-298q-18 0 -30.5 12.5t-12.5 30.5v298q0 18 12.5 30.5t30.5 12.5h298zM341 43v298h-149v-128l-149 -170h149v170z" />
+<glyph unicode="&#xf382;" horiz-adv-x="384" d="M43 128v-85h85v-43h-85q-18 0 -30.5 12.5t-12.5 30.5v85h43zM43 341v-85h-43v85q0 18 12.5 30.5t30.5 12.5h85v-43h-85zM341 384q18 0 30.5 -12.5t12.5 -30.5v-85h-43v85h-85v43h85zM341 43v85h43v-85q0 -18 -12.5 -30.5t-30.5 -12.5h-85v43h85zM192 256q27 0 45.5 -18.5 t18.5 -45.5t-18.5 -45.5t-45.5 -18.5t-45.5 18.5t-18.5 45.5t18.5 45.5t45.5 18.5z" />
+<glyph unicode="&#xf383;" d="M384 363q18 0 30.5 -12.5t12.5 -30.5v-299q0 -17 -12.5 -29.5t-30.5 -12.5h-341q-18 0 -30.5 12.5t-12.5 29.5v299q0 18 12.5 30.5t30.5 12.5h85l85 85l86 -85h85zM384 21v299h-96l-74 75l-75 -75h-96v-299h341zM341 277h-256v-213h256v213z" />
+<glyph unicode="&#xf384;" horiz-adv-x="425" d="M191 361q-46 -5 -83 -34l-31 30q50 41 114 47v-43zM347 357l-30 -30q-38 29 -83 34v43q63 -6 113 -47zM381 213q-5 46 -34 84l30 30q41 -50 48 -114h-44zM78 297q-29 -38 -35 -84h-43q6 64 47 114zM43 171q6 -46 35 -83l-31 -31q-41 50 -47 114h43zM276 192 q0 -27 -18.5 -45.5t-45 -18.5t-45.5 18.5t-19 45.5t19 45.5t45.5 18.5t45 -18.5t18.5 -45.5zM347 87q29 38 34 83h44q-7 -63 -48 -113zM234 23q46 6 83 34l30 -30q-50 -41 -113 -47v43zM77 27l31 30q37 -29 83 -34v-43q-64 6 -114 47z" />
+<glyph unicode="&#xf385;" horiz-adv-x="384" d="M171 256h42v-43h-42v43zM128 213h43v-42h-43v42zM213 213h43v-42h-43v42zM256 256h43v-43h-43v43zM85 256h43v-43h-43v43zM341 384q18 0 30.5 -12.5t12.5 -30.5v-298q0 -18 -12.5 -30.5t-30.5 -12.5h-298q-18 0 -30.5 12.5t-12.5 30.5v298q0 18 12.5 30.5t30.5 12.5h298z M128 64v43h-43v-43h43zM213 64v43h-42v-43h42zM299 64v43h-43v-43h43zM341 213v128h-298v-128h42v-42h-42v-43h42v43h43v-43h43v43h42v-43h43v43h43v-43h42v43h-42v42h42z" />
+<glyph unicode="&#xf386;" horiz-adv-x="341" d="M128 192q18 0 30.5 -12.5t12.5 -30t-12.5 -30t-30.5 -12.5t-30.5 12.5t-12.5 30t12.5 30t30.5 12.5zM42.5 277q17.5 0 30 -12.5t12.5 -30t-12.5 -30t-30 -12.5t-30 12.5t-12.5 30t12.5 30t30 12.5zM42.5 107q17.5 0 30 -12.5t12.5 -30.5t-12.5 -30.5t-30 -12.5t-30 12.5 t-12.5 30.5t12.5 30.5t30 12.5zM298.5 277q-17.5 0 -30 12.5t-12.5 30.5t12.5 30.5t30 12.5t30 -12.5t12.5 -30.5t-12.5 -30.5t-30 -12.5zM213.5 107q17.5 0 30 -12.5t12.5 -30.5t-12.5 -30.5t-30 -12.5t-30 12.5t-12.5 30.5t12.5 30.5t30 12.5zM298.5 192q17.5 0 30 -12.5 t12.5 -30t-12.5 -30t-30 -12.5t-30 12.5t-12.5 30t12.5 30t30 12.5zM213.5 277q17.5 0 30 -12.5t12.5 -30t-12.5 -30t-30 -12.5t-30 12.5t-12.5 30t12.5 30t30 12.5zM128 363q18 0 30.5 -12.5t12.5 -30.5t-12.5 -30.5t-30.5 -12.5t-30.5 12.5t-12.5 30.5t12.5 30.5 t30.5 12.5z" />
+<glyph unicode="&#xf387;" horiz-adv-x="384" d="M85 64v256h43v-256h-43zM171 -21v426h42v-426h-42zM0 149v86h43v-86h-43zM256 64v256h43v-256h-43zM341 235h43v-86h-43v86z" />
+<glyph unicode="&#xf388;" horiz-adv-x="431" d="M343 128h-8l-24 23v105h75q13 0 22.5 -9.5t9.5 -22.5v-21q0 -10 -5.5 -18.5t-13.5 -11.5l19 -45h-32l-19 43h-24v-43zM343 224v-21h43v21h-43zM247 224h-8l-32 32h40q13 0 22.5 -9.5t9.5 -22.5v-41l-32 32v9zM173 245l258 -256l-24 -23l-162 162h-72v73l-32 32v-105h-32 v53h-43v-53h-32v128h32v-43h43v43h8l-117 117l23 22z" />
+<glyph unicode="&#xf389;" horiz-adv-x="469" d="M341 320q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5zM85.5 277q35.5 0 60.5 -25t25 -60t-25 -60t-60.5 -25t-60.5 25t-25 60t25 60t60.5 25zM85.5 149q17.5 0 30 12.5t12.5 30.5t-12.5 30.5t-30 12.5t-30 -12.5 t-12.5 -30.5t12.5 -30.5t30 -12.5z" />
+<glyph unicode="&#xf38a;" horiz-adv-x="469" d="M85.5 277q35.5 0 60.5 -25t25 -60t-25 -60t-60.5 -25t-60.5 25t-25 60t25 60t60.5 25zM341 320q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5zM341.5 107q35.5 0 60.5 25t25 60t-25 60t-60.5 25t-60.5 -25t-25 -60 t25 -60t60.5 -25z" />
+<glyph unicode="&#xf38b;" horiz-adv-x="384" d="M384 203q0 -19 -19 -30l19 -45h-32l-19 43h-24v-43h-32v128h75q13 0 22.5 -9.5t9.5 -22.5v-21zM352 203v21h-43v-21h43zM75 213v43h32v-128h-32v53h-43v-53h-32v128h32v-43h43zM213 256q13 0 22.5 -9.5t9.5 -22.5v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-74v128h74zM213 160 v64h-42v-64h42z" />
+<glyph unicode="&#xf38c;" horiz-adv-x="361" d="M31 139v128h299v-128h-299zM159 436h43v-63h-43v63zM330 383l31 -30l-39 -38l-30 30zM202 -31h-43v63h43v-63zM361 52l-31 -30l-38 39l30 30zM0 353l30 30l38 -38l-30 -30zM30 22l-30 31l38 38l30 -30z" />
+<glyph unicode="&#xf38d;" horiz-adv-x="384" d="M149 384q0 -30 -11 -57l-34 34q3 11 3 23h42zM0 357l27 27l357 -357l-27 -27l-61 61q-19 -28 -19 -61h-42q0 51 31 91l-31 30q-43 -52 -43 -121h-43q0 86 56 152l-53 53q-66 -56 -152 -56v43q68 0 122 43l-31 31q-40 -31 -91 -31v42q33 0 61 19zM235 384q0 -64 -34 -120 l-31 31q22 42 22 89h43zM361 104l-34 34q28 11 57 11v-42q-12 0 -23 -3zM264 201q56 34 120 34v-43q-47 0 -89 -22z" />
+<glyph unicode="&#xf38e;" horiz-adv-x="384" d="M64 384q0 -27 -18.5 -45.5t-45.5 -18.5v64h64zM235 384q0 -97 -69 -166t-166 -69v43q80 0 136 56t56 136h43zM149 384q0 -62 -43.5 -105.5t-105.5 -43.5v42q44 0 75.5 31.5t31.5 75.5h42zM149 0q0 97 69 166t166 69v-43q-80 0 -136 -56t-56 -136h-43zM320 0 q0 27 18.5 45.5t45.5 18.5v-64h-64zM235 0q0 62 43.5 105.5t105.5 43.5v-42q-44 0 -75.5 -31.5t-31.5 -75.5h-42z" />
+<glyph unicode="&#xf38f;" horiz-adv-x="469" d="M234.5 235q61.5 0 105.5 -44t44 -106h-43q0 44 -31 75.5t-75 31.5t-75.5 -31.5t-31.5 -75.5h-43q0 62 44 106t105.5 44zM235 320q97 0 165.5 -69t68.5 -166h-42q0 80 -56.5 136t-136 56t-135.5 -56t-56 -136h-43q0 97 69 166t166 69z" />
+<glyph unicode="&#xf390;" d="M235 299v-86h85v-42h-85v-86h-43v86h-85v42h85v86h43zM213 405q88 0 151 -62.5t63 -150.5v-171q0 -17 -12.5 -29.5t-30.5 -12.5h-171q-88 0 -150.5 62.5t-62.5 150.5t62.5 150.5t150.5 62.5zM213.5 21q70.5 0 120.5 50t50 121t-50 121t-120.5 50t-120.5 -50t-50 -121 t50 -121t120.5 -50z" />
+<glyph unicode="&#xf391;" d="M384 308q-84 -25 -171 -24q-87 0 -170 24v-232q83 24 170 24t171 -24v232zM415 363q12 0 12 -14v-314q0 -14 -12 -14q-4 0 -7 2q-94 35 -195 35t-194 -35q-4 -2 -7 -2q-12 0 -12 14v314q0 14 12 14q3 0 7 -2q94 -35 194 -35q101 0 195 35q3 2 7 2z" />
+<glyph unicode="&#xf392;" horiz-adv-x="342" d="M340 -3l2 -6q0 -12 -14 -12h-315q-13 0 -13 12q0 3 1 6q35 95 35 195t-35 195q-1 3 -1 6q0 12 13 12h315q13 0 13 -12q0 -3 -1 -6q-35 -95 -35 -195q0 -101 35 -195zM54 21h233q-25 84 -25 171t25 171h-233q25 -84 25 -171t-25 -171z" />
+<glyph unicode="&#xf393;" d="M213.5 320q-75.5 0 -155.5 -14q-15 -57 -15 -114t15 -114q80 -14 155.5 -14t155.5 14q15 57 15 114t-15 114q-80 14 -155.5 14zM213 363q83 0 170 -16l20 -3l5 -19q19 -67 19 -133t-19 -133l-5 -19l-20 -3q-87 -16 -170 -16t-169 16l-20 3l-5 19q-19 67 -19 133t19 133 l5 19l20 3q87 16 169 16z" />
+<glyph unicode="&#xf394;" horiz-adv-x="469" d="M427 128h42v-43h-42v43zM427 213h42v-42h-42v42zM469 43q0 -16 -13 -29.5t-29 -13.5v43h42zM256 384h43v-43h-43v43zM427 299h42v-43h-42v43zM427 384q16 0 29 -13.5t13 -29.5h-42v43zM0 299h43v-43h-43v43zM341 384h43v-43h-43v43zM341 43h43v-43h-43v43zM43 384v-43 h-43q0 16 13.5 29.5t29.5 13.5zM171 384h42v-43h-42v43zM85 384h43v-43h-43v43zM0 213h299v-213h-256q-18 0 -30.5 12.5t-12.5 30.5v170zM43 43h213l-68 91l-54 -69l-38 46z" />
+<glyph unicode="&#xf395;" horiz-adv-x="469" d="M469 128v-43h-42v43h42zM469 213v-42h-42v42h42zM469 43q0 -16 -13 -29.5t-29 -13.5v43h42zM299 384v-43h-43v43h43zM469 299v-43h-42v43h42zM427 384q16 0 29 -13.5t13 -29.5h-42v43zM43 0q-18 0 -30.5 12.5t-12.5 30.5v85h213v-128h-170zM43 299v-43h-43v43h43zM299 43 v-43h-43v43h43zM384 384v-43h-43v43h43zM384 43v-43h-43v43h43zM43 384v-43h-43q0 16 13.5 29.5t29.5 13.5zM43 213v-42h-43v42h43zM213 384v-43h-42v43h42zM128 384v-43h-43v43h43z" />
+<glyph unicode="&#xf396;" horiz-adv-x="469" d="M384 299v-128h-171v128h171zM427 384q17 0 29.5 -12.5t12.5 -30.5v-298q0 -18 -12.5 -30.5t-29.5 -12.5h-384q-18 0 -30.5 12.5t-12.5 30.5v298q0 18 12.5 30.5t30.5 12.5h384zM427 42v300h-384v-300h384z" />
+<glyph unicode="&#xf397;" horiz-adv-x="384" d="M149 277l107 -85l-107 -85v170zM341 384q18 0 30.5 -12.5t12.5 -30.5v-298q0 -18 -12.5 -30.5t-30.5 -12.5h-298q-18 0 -30.5 12.5t-12.5 30.5v298q0 18 12.5 30.5t30.5 12.5h298zM341 43v298h-298v-298h298z" />
+<glyph unicode="&#xf398;" horiz-adv-x="384" d="M352 382q24 -6 31 -30l-351 -350q-11 3 -19 11t-11 19zM189 384h61l-250 -250v61zM43 384h42l-85 -85v42q0 18 12.5 30.5t30.5 12.5zM341 0h-42l85 85v-42q0 -18 -13 -30q-12 -13 -30 -13zM134 0l250 250v-61l-189 -189h-61z" />
+<glyph unicode="&#xf399;" d="M213.5 405q88.5 0 151 -62.5t62.5 -150.5t-62.5 -150.5t-151 -62.5t-151 62.5t-62.5 150.5t62.5 150.5t151 62.5zM192 23v338q-64 -8 -106.5 -56t-42.5 -113t43 -113t106 -56zM235 361v-20h61q-29 16 -61 20zM235 299v-22h126q-7 12 -15 22h-111zM235 235v-22h148 q-2 9 -5 22h-143zM235 23q32 4 61 20h-61v-20zM346 85q8 10 15 22h-126v-22h111zM378 149q3 13 5 22h-148v-22h143z" />
+<glyph unicode="&#xf39a;" horiz-adv-x="469" d="M427 384q17 0 29.5 -12.5t12.5 -30.5v-298q0 -18 -12.5 -30.5t-29.5 -12.5h-384q-18 0 -30.5 12.5t-12.5 30.5v298q0 18 12.5 30.5t30.5 12.5h384zM234.5 64q70.5 0 120.5 37.5t50 90.5t-50 90.5t-120.5 37.5t-120.5 -37.5t-50 -90.5t50 -90.5t120.5 -37.5z" />
+<glyph unicode="&#xf39b;" horiz-adv-x="508" d="M146 178l25 78l24 -78h-49zM469 299h39l-44 -192h-37l-32 130l-32 -130h-38l-2 9q-21 -43 -62 -69t-90 -26q-71 0 -121 50t-50 121t50 121t121 50q81 0 133 -64h16l26 -135l32 135h34l32 -135zM220 107h40l-68 192h-43l-68 -192h41l15 42h68z" />
+<glyph unicode="&#xf39c;" horiz-adv-x="256" d="M128 269l-98 -98l-30 30l128 128l128 -128l-30 -30zM0 64v43h256v-43h-256z" />
+<glyph unicode="&#xf39d;" horiz-adv-x="299" d="M0 85h299v-42h-299v42zM149 299l143 -171h-285z" />
+<glyph unicode="&#xf39e;" horiz-adv-x="341" d="M128 21v342h85v-342h-85zM0 21v171h85v-171h-85zM256 256h85v-235h-85v235z" />
+<glyph unicode="&#xf39f;" horiz-adv-x="373" d="M0 64v256l181 -128zM192 320l181 -128l-181 -128v256z" />
+<glyph unicode="&#xf3a0;" horiz-adv-x="373" d="M181 64l-181 128l181 128v-256zM192 192l181 128v-256z" />
+<glyph unicode="&#xf3a1;" horiz-adv-x="341" d="M0 170.5q0 70.5 50 120.5t121 50v86l106 -107l-106 -107v86q-53 0 -90.5 -38t-37.5 -90.5t37.5 -90t90 -37.5t90.5 37.5t38 90.5h42q0 -71 -50 -121t-120.5 -50t-120.5 50t-50 120.5zM145 107h-17v70l-21 -6v15l38 12h2v-91h-2zM239 145q0 -13 -2 -17l-7 -13 q-6 -6 -10 -6q-2 0 -6.5 -1t-6.5 -1q-9 0 -13 2q-2 1 -5 3t-6 3q-2 1 -6 13q-2 6 -2 17v15q0 13 2 17l6 13q7 6 11 6q2 0 6.5 1t6.5 1q8 0 13 -2q2 -1 5 -3t5 -3q3 -1 7 -13q2 -6 2 -17v-15zM222 162v11q-2 4 -2 6l-5 4q-2 3 -6 3t-6 -3l-5 -4q-2 -4 -2 -6v-43q2 -4 2 -6 t2 -3t3 -2q2 -2 6 -2t6 2l5 5q2 4 2 6v32z" />
+<glyph unicode="&#xf3a2;" horiz-adv-x="341" d="M119 160h9q6 0 10.5 4.5t4.5 8.5v4q-2 2 -2 4t-4 2h-11q-2 -2 -4.5 -2t-2.5 -4v-4h-21q0 6 2 10.5t6.5 8.5t8.5 4q1 0 5.5 1t5.5 1q8 0 13 -2q2 -1 5 -2t5 -2q3 -1 7 -9q2 -4 2 -10v-7q-2 -4 -2 -6q0 -4 -5 -4q-2 0 -6 -5q9 -4 11 -8q4 -9 4 -13q0 -8 -2 -11q-1 -1 -3 -4 t-4 -4q-4 -4 -10 -4q-2 0 -6.5 -1t-6.5 -1q-9 0 -11 2q-1 1 -5 2t-5 2q-3 1 -7 8q-2 5 -2 13h17v-4q2 -2 2 -4t5 -2h10q2 2 4.5 2t2.5 4v11q-2 2 -2 4t-5 2h-13v15zM241 145q0 -13 -2 -17l-6 -13q-7 -6 -11 -6q-2 0 -6.5 -1t-6.5 -1q-8 0 -13 2q-2 1 -5 3t-5 3q-3 1 -7 13 q-2 6 -2 17v15q0 13 2 17l7 13q6 6 10 6q2 0 6.5 1t6.5 1q9 0 13 -2q2 -1 5 -3t6 -3q2 -1 6 -13q2 -6 2 -17v-15zM222 162v11q-2 4 -2 6l-5 4q-2 3 -6 3t-6 -3l-5 -4q-2 -4 -2 -6v-43q2 -4 2 -6l5 -5q2 -2 6 -2t6 2l5 5q2 4 2 6v32zM0 170.5q0 70.5 50 120.5t121 50v86 l106 -107l-106 -107v86q-53 0 -90.5 -38t-37.5 -90.5t37.5 -90t90 -37.5t90.5 37.5t38 90.5h42q0 -71 -50 -121t-120.5 -50t-120.5 50t-50 120.5z" />
+<glyph unicode="&#xf3a3;" horiz-adv-x="341" d="M0 170.5q0 70.5 50 120.5t121 50v86l106 -107l-106 -107v86q-53 0 -90.5 -38t-37.5 -90.5t37.5 -90t90 -37.5t90.5 37.5t38 90.5h42q0 -71 -50 -121t-120.5 -50t-120.5 50t-50 120.5zM143 151l4 47h51v-15h-36l-2 -19q2 0 2 2q0 1 1 1t1 2h5h4q8 0 10 -3q2 -1 5 -3t4 -3 q2 -2 6 -11q3 -4 3 -12.5t-3 -10.5q0 -1 -2 -4.5t-4 -6.5q-2 -2 -11 -6q-4 -2 -12.5 -2t-10.5 2q-1 1 -5 2t-6 2q-3 1 -6 9q-2 4 -2 10h17q0 -4 4 -8q2 -2 9 -2q4 0 6 2l4 4q2 4 2 6v13l-2 4l-4 5q-4 2 -6 2h-5q-2 0 -4 -2q-1 -1 -1.5 -1t-0.5 -1l-2 -3h-13z" />
+<glyph unicode="&#xf3a4;" horiz-adv-x="384" d="M299 21q17 0 29.5 12.5t12.5 30.5h43q0 -35 -25 -60t-60 -25q-19 0 -35 7q-41 21 -59 76q-4 14 -12 22.5t-24 21.5q-41 31 -61 67q-23 41 -23 83q0 63 43.5 106t106.5 43t106 -43t43 -106h-43q0 45 -31 76t-75.5 31t-75.5 -31t-31 -76q0 -31 17 -63q16 -27 50 -54 q13 -10 20 -16t16.5 -19t14.5 -29q13 -38 36 -50q8 -4 17 -4zM99 392q-56 -56 -56 -136q0 -79 56 -136l-30 -30q-69 69 -69 166t69 166zM181 256q0 22 16 37.5t38 15.5t37.5 -15.5t15.5 -37.5t-15.5 -37.5t-37.5 -15.5t-38 15.5t-16 37.5z" />
+<glyph unicode="&#xf3a5;" d="M149 107v170h43v-170h-43zM213.5 405q88.5 0 151 -62.5t62.5 -150.5t-62.5 -150.5t-151 -62.5t-151 62.5t-62.5 150.5t62.5 150.5t151 62.5zM213.5 21q70.5 0 120.5 50t50 121t-50 121t-120.5 50t-120.5 -50t-50 -121t50 -121t120.5 -50zM235 107v170h42v-170h-42z" />
+<glyph unicode="&#xf3a6;" d="M213.5 405q88.5 0 151 -62.5t62.5 -150.5t-62.5 -150.5t-151 -62.5t-151 62.5t-62.5 150.5t62.5 150.5t151 62.5zM192 107v170h-43v-170h43zM277 107v170h-42v-170h42z" />
+<glyph unicode="&#xf3a7;" horiz-adv-x="256" d="M0 43v298h85v-298h-85zM171 341h85v-298h-85v298z" />
+<glyph unicode="&#xf3a8;" d="M171 96v192l128 -96zM213.5 405q88.5 0 151 -62.5t62.5 -150.5t-62.5 -150.5t-151 -62.5t-151 62.5t-62.5 150.5t62.5 150.5t151 62.5zM213.5 21q70.5 0 120.5 50t50 121t-50 121t-120.5 50t-120.5 -50t-50 -121t50 -121t120.5 -50z" />
+<glyph unicode="&#xf3a9;" d="M213.5 405q88.5 0 151 -62.5t62.5 -150.5t-62.5 -150.5t-151 -62.5t-151 62.5t-62.5 150.5t62.5 150.5t151 62.5zM171 96l128 96l-128 96v-192z" />
+<glyph unicode="&#xf3aa;" horiz-adv-x="235" d="M0 341l235 -149l-235 -149v298z" />
+<glyph unicode="&#xf3ab;" horiz-adv-x="405" d="M256 320v-43h-256v43h256zM256 235v-43h-256v43h256zM0 107v42h171v-42h-171zM299 320h106v-43h-64v-192q0 -26 -18.5 -45t-45 -19t-45.5 19t-19 45.5t19 45t45 18.5q11 0 22 -4v175z" />
+<glyph unicode="&#xf3ac;" d="M256 235v-43h-256v43h256zM256 320v-43h-256v43h256zM341 149h86v-42h-86v-86h-42v86h-86v42h86v86h42v-86zM0 107v42h171v-42h-171z" />
+<glyph unicode="&#xf3ad;" horiz-adv-x="384" d="M85 299v-86h-42v128h256v64l85 -85l-85 -85v64h-214zM299 85v86h42v-128h-256v-64l-85 85l85 85v-64h214zM213 128h-32v85h-32v22l43 21h21v-128z" />
+<glyph unicode="&#xf3ae;" horiz-adv-x="384" d="M85 299v-86h-42v128h256v64l85 -85l-85 -85v64h-214zM299 85v86h42v-128h-256v-64l-85 85l85 85v-64h214z" />
+<glyph unicode="&#xf3af;" horiz-adv-x="341" d="M239 124q0 -20 -8 -30t-23 -10t-23 10t-8 29v17q0 19 8 29t23 10t23 -10t8 -28v-17zM221 142q0 12 -3 17t-10 5t-10 -5t-3 -15v-23q0 -11 3 -16.5t10 -5.5t10 5t3 16v22zM147 85h-19v71l-22 -7v15l39 14h2v-93zM171 320q70 0 120 -50t50 -120.5t-50 -120.5t-120.5 -50 t-120.5 50t-50 120h43q0 -52 37.5 -90t90 -38t90.5 38t38 90.5t-38 90t-90 37.5v-85l-107 107l107 106v-85z" />
+<glyph unicode="&#xf3b0;" horiz-adv-x="341" d="M239 123q0 -20 -8 -30t-23.5 -10t-23.5 10t-8 29v17q0 20 8 30t23.5 10t23.5 -10t8 -29v-17zM221 142q0 11 -3.5 16.5t-10 5.5t-9.5 -5t-3 -16v-23q0 -11 3 -16.5t10 -5.5t10 5t3 16v23zM120 139h10q7 0 10 3.5t3 9.5t-3 9t-9 3t-9.5 -3t-3.5 -8h-18q0 8 4 13.5t11 9 t15 3.5q15 0 23.5 -7t8.5 -20q0 -6 -4 -11.5t-10 -8.5q8 -3 11.5 -8.5t3.5 -13.5q0 -12 -9 -19.5t-24 -7.5q-14 0 -23 7t-9 20h19q0 -6 4 -9t10 -3t10 3.5t4 8.5q0 14 -16 14h-9v15zM171 320q70 0 120 -50t50 -120.5t-50 -120.5t-120.5 -50t-120.5 50t-50 120h43 q0 -52 37.5 -90t90 -38t90.5 38t38 90.5t-38 90t-90 37.5v-85l-107 107l107 106v-85z" />
+<glyph unicode="&#xf3b1;" horiz-adv-x="341" d="M142 131l5 46h51v-15h-36l-2 -20q6 4 13 4q13 0 20.5 -8t7.5 -23q0 -8 -4 -15t-10.5 -11t-16.5 -4q-8 0 -15 3.5t-11 9.5t-4 13h18q0 -5 3.5 -8t8.5 -3q6 0 9.5 4t3.5 12t-4 12t-11 4q-6 0 -10 -3l-2 -2zM171 320q70 0 120 -50t50 -120.5t-50 -120.5t-120.5 -50 t-120.5 50t-50 120h43q0 -52 37.5 -90t90 -38t90.5 38t38 90.5t-38 90t-90 37.5v-85l-107 107l107 106v-85z" />
+<glyph unicode="&#xf3b2;" horiz-adv-x="341" d="M171 341q70 0 120 -50t50 -120.5t-50 -120.5t-120.5 -50t-120.5 50t-50 121h43q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5t-37.5 90.5t-90.5 37.5v-86l-107 107l107 107v-86z" />
+<glyph unicode="&#xf3b3;" horiz-adv-x="341" d="M141 252l-31 -30l-110 111l30 30zM224 363h117v-118l-43 44l-268 -268l-30 30l268 268zM231 162l67 -67l43 44v-118h-117l44 44l-67 67z" />
+<glyph unicode="&#xf3b4;" horiz-adv-x="256" d="M0 64v256l181 -128zM213 320h43v-256h-43v256z" />
+<glyph unicode="&#xf3b5;" horiz-adv-x="256" d="M0 320h43v-256h-43v256zM75 192l181 128v-256z" />
+<glyph unicode="&#xf3b6;" horiz-adv-x="256" d="M0 320h256v-256h-256v256z" />
+<glyph unicode="&#xf3b7;" d="M384 363q18 0 30.5 -12.5t12.5 -30.5v-256q0 -18 -12.5 -30.5t-30.5 -12.5h-341q-18 0 -30.5 12.5t-12.5 30.5v256q0 18 12.5 30.5t30.5 12.5h341zM123 102q-38 37 -38 90t38 91l-30 30q-50 -50 -50 -121t50 -121zM213.5 107q35.5 0 60.5 25t25 60t-25 60t-60.5 25 t-60.5 -25t-25 -60t25 -60t60.5 -25zM334 71q50 50 50 121t-50 121l-30 -31q37 -37 37 -90t-37 -91zM213.5 235q17.5 0 30 -12.5t12.5 -30.5t-12.5 -30.5t-30 -12.5t-30 12.5t-12.5 30.5t12.5 30.5t30 12.5z" />
+<glyph unicode="&#xf3b8;" horiz-adv-x="384" d="M0 85h128v-42h-128v42zM0 341h213v-42h-213v42zM213 0h-42v128h42v-43h171v-42h-171v-43zM85 256h43v-128h-43v43h-85v42h85v43zM384 171h-213v42h213v-42zM256 256v128h43v-43h85v-42h-85v-43h-43z" />
+<glyph unicode="&#xf3b9;" horiz-adv-x="288" d="M288 192q0 -28 -14.5 -51t-38.5 -35v172q24 -12 38.5 -35t14.5 -51zM0 256h85l107 107v-342l-107 107h-85v128z" />
+<glyph unicode="&#xf3ba;" horiz-adv-x="192" d="M0 256h85l107 107v-342l-107 107h-85v128z" />
+<glyph unicode="&#xf3bb;" horiz-adv-x="384" d="M288 192q0 -6 -1 -13l-52 52v47q24 -12 38.5 -35t14.5 -51zM341 192q0 50 -30 89.5t-76 53.5v44q64 -15 106.5 -67t42.5 -120q0 -47 -22 -89l-32 33q11 27 11 56zM27 384l165 -165l192 -192l-27 -27l-44 44q-35 -29 -78 -39v44q25 8 48 25l-91 91v-144l-107 107h-85v128 h101l-101 101zM192 363v-90l-45 45z" />
+<glyph unicode="&#xf3bc;" horiz-adv-x="384" d="M0 256h85l107 107v-342l-107 107h-85v128zM288 192q0 -28 -14.5 -51t-38.5 -35v172q24 -12 38.5 -35t14.5 -51zM235 379q64 -15 106.5 -67t42.5 -120t-42.5 -120t-106.5 -67v44q46 14 76 53.5t30 89.5t-30 89.5t-76 53.5v44z" />
+<glyph unicode="&#xf3bd;" horiz-adv-x="384" d="M341 384q18 0 30.5 -12.5t12.5 -30.5v-298q0 -18 -12.5 -30.5t-30.5 -12.5h-298q-18 0 -30.5 12.5t-12.5 30.5v298q0 18 12.5 30.5t30.5 12.5h298zM235 85v214h-86v-43h43v-171h43z" />
+<glyph unicode="&#xf3be;" horiz-adv-x="384" d="M341 384q18 0 30.5 -12.5t12.5 -30.5v-298q0 -18 -12.5 -30.5t-30.5 -12.5h-298q-18 0 -30.5 12.5t-12.5 30.5v298q0 18 12.5 30.5t30.5 12.5h298zM256 213v43q0 18 -12.5 30.5t-30.5 12.5h-85v-43h85v-43h-42q-18 0 -30.5 -12.5t-12.5 -29.5v-86h128v43h-85v43h42 q18 0 30.5 12.5t12.5 29.5z" />
+<glyph unicode="&#xf3bf;" horiz-adv-x="384" d="M341 384q18 0 30.5 -12.5t12.5 -30.5v-298q0 -18 -12.5 -30.5t-30.5 -12.5h-298q-18 0 -30.5 12.5t-12.5 30.5v298q0 18 12.5 30.5t30.5 12.5h298zM256 224v32q0 18 -12.5 30.5t-30.5 12.5h-85v-43h85v-43h-42v-42h42v-43h-85v-43h85q18 0 30.5 12.5t12.5 30.5v32 q0 13 -9.5 22.5t-22.5 9.5q13 0 22.5 9.5t9.5 22.5z" />
+<glyph unicode="&#xf3c0;" horiz-adv-x="384" d="M341 384q18 0 30.5 -12.5t12.5 -30.5v-298q0 -18 -12.5 -30.5t-30.5 -12.5h-298q-18 0 -30.5 12.5t-12.5 30.5v298q0 18 12.5 30.5t30.5 12.5h298zM256 85v214h-43v-86h-42v86h-43v-128h85v-86h43z" />
+<glyph unicode="&#xf3c1;" horiz-adv-x="384" d="M341 384q18 0 30.5 -12.5t12.5 -30.5v-298q0 -18 -12.5 -30.5t-30.5 -12.5h-298q-18 0 -30.5 12.5t-12.5 30.5v298q0 18 12.5 30.5t30.5 12.5h298zM256 256v43h-128v-128h85v-43h-85v-43h85q18 0 30.5 12.5t12.5 30.5v43q0 17 -12.5 29.5t-30.5 12.5h-42v43h85z" />
+<glyph unicode="&#xf3c2;" horiz-adv-x="384" d="M171 128v43h42v-43h-42zM341 384q18 0 30.5 -12.5t12.5 -30.5v-298q0 -18 -12.5 -30.5t-30.5 -12.5h-298q-18 0 -30.5 12.5t-12.5 30.5v298q0 18 12.5 30.5t30.5 12.5h298zM256 256v43h-85q-18 0 -30.5 -12.5t-12.5 -30.5v-128q0 -18 12.5 -30.5t30.5 -12.5h42 q18 0 30.5 12.5t12.5 30.5v43q0 17 -12.5 29.5t-30.5 12.5h-42v43h85z" />
+<glyph unicode="&#xf3c3;" horiz-adv-x="320" d="M0 213h171v-42h-171v42zM320 64h-43v227l-64 -22v36l101 36h6v-277z" />
+<glyph unicode="&#xf3c4;" horiz-adv-x="405" d="M278 100h127v-36h-184v32l89 97q10 11 19 22q7 8 12 18q4 7 6 14q2 8 2 14q0 9 -3 18q-3 8 -8 13q-5 7 -12.5 10t-17.5 3q-12 0 -20 -4q-9 -4 -15 -10q-6 -8 -8 -16q-3 -9 -3 -19h-46q1 17 6 32q6 16 18 28t29 19q18 6 40 6q20 0 36 -5q17 -6 27 -15q11 -10 17 -24t6 -31 q0 -13 -4 -25q-5 -12 -12 -25q-8 -13 -17 -25q-13 -15 -23 -25zM0 213h171v-42h-171v42z" />
+<glyph unicode="&#xf3c5;" horiz-adv-x="341" d="M128 299v-86h85v-42h-85v-86h-43v86h-85v42h85v86h43zM341 64h-42v227l-64 -22v36l100 36h6v-277z" />
+<glyph unicode="&#xf3c6;" d="M300 100h127v-36h-184v32l89 97q10 11 18 22q7 8 12 18q4 7 6 14q2 8 2 14q0 9 -3 18q-3 8 -8 13q-5 7 -12 10t-17 3q-12 0 -21 -4t-14 -10q-6 -8 -9 -16q-2 -9 -3 -19h-45q0 17 6 32q6 16 17.5 28t29.5 19q17 6 39 6q20 0 37 -5q16 -6 27 -15q10 -10 16 -24t6 -31 q0 -13 -4 -25t-12 -25q-7 -13 -17 -25q-13 -15 -22 -25zM128 299v-86h85v-42h-85v-86h-43v86h-85v42h85v86h43z" />
+<glyph unicode="&#xf3c7;" horiz-adv-x="512" d="M0 283l101 37h6v-256h-43v205l-64 -22v36zM507 141q5 -8 5 -21t-5 -23q-6 -11 -15 -18q-10 -7 -24 -11q-13 -4 -30 -4q-20 0 -34.5 5t-24.5 14q-9 9 -14.5 20t-5.5 22h41q0 -8 3 -14q4 -6 9 -9q5 -4 12 -5q6 -2 14 -2q16 0 24.5 6t8.5 17q0 4 -1 8q-2 4 -6 7q-5 4 -12 6 q-8 3 -20 6q-16 3 -28 8t-20 11q-9 6 -14 15t-5 21t5 21q5 11 14 18.5t23 12.5q13 4 29 4q18 0 32 -5t23 -12q10 -8 15 -19t5 -23h-42q0 4 -2 10t-6 9q-5 4 -10 6q-7 3 -14.5 3t-13.5 -2t-10 -5q-3 -3 -6 -8q-1 -4 -1 -8.5t1.5 -8t5.5 -6.5t12 -5q8 -3 19 -5q15 -4 28 -8 q12 -5 22 -12q9 -6 13 -16zM295 298q11 -13 16 -34q6 -21 6 -51v-41q0 -30 -6 -51q-5 -21 -16 -34q-11 -14 -26 -19q-15 -6 -34 -6q-18 0 -34 6q-15 5 -26 19q-11 12 -17 34q-6 20 -6 51v41q0 29 6 51q6 21 16.5 34t26 18.5t34.5 5.5t34 -5.5t26 -18.5zM275 166v54 q0 18 -2 32q-3 13 -8 21t-13 11.5t-17 3.5q-10 0 -18 -3q-7 -4 -12.5 -12t-8.5 -21q-2 -13 -2 -33v-53q0 -20 2 -33q3 -13 9 -21q5 -9 12.5 -12.5t17.5 -3.5t17.5 3.5t12.5 12t7.5 22t2.5 32.5z" />
+<glyph unicode="&#xf3c8;" horiz-adv-x="361" d="M158 171q5 -7 8 -16q2 -9 2 -18q0 -18 -6.5 -32t-17.5 -23q-12 -10 -27 -15q-16 -5 -34 -5q-16 0 -31 4.5t-27 13.5t-18 23q-7 13 -7 31h42q0 -9 3 -16t8.5 -12t13.5 -7q7 -3 17 -3q20 0 31 10q11 11 11 31q0 10 -3 18t-10 13q-5 5 -14 8q-9 2 -20 2h-25v33h25q11 0 19 3 t13 8q6 5 8.5 12t2.5 16q0 18 -9 28q-10 10 -29 10q-9 0 -16 -2.5t-12 -6.5q-5 -5 -8 -11.5t-3 -14.5h-43q0 15 7 27q5 12 16 22t26 15q14 5 32 5t32.5 -4t25.5 -13.5t17 -22.5q6 -14 6 -32q0 -8 -2 -15t-8 -15q-4 -7 -12 -14q-6 -6 -17 -11q12 -4 20 -10t13 -14zM356 141 q4 -8 5 -21q0 -13 -5 -23q-6 -11 -16 -18q-9 -7 -23 -11t-31 -4q-19 0 -33.5 5t-24.5 14t-15 20t-5 22h40q0 -8 4 -14t9 -9q5 -4 12 -5q6 -2 13 -2q17 0 25.5 6t8.5 17q0 4 -2 8q-1 4 -5 7q-5 4 -13 6q-8 3 -20 6q-15 3 -27 8q-13 5 -21 11q-9 7 -14 15q-4 10 -4 21 q0 12 4 21q6 11 15 18.5t22 12.5q13 4 30 4q18 0 31 -5q14 -5 23 -12q10 -8 15 -19t5 -23h-41q0 4 -2 10q-3 6 -7 9q-4 4 -10 6q-6 3 -14 3t-13.5 -2t-9.5 -5t-6 -8q-2 -4 -2 -8.5t1.5 -8t6 -6.5t11.5 -5q9 -3 19 -5q15 -4 29 -8q12 -5 21 -12q9 -6 14 -16z" />
+<glyph unicode="&#xf3c9;" horiz-adv-x="177" d="M177 181q0 -32 -6.5 -54t-18 -36t-28 -20.5t-35.5 -6.5q-20 0 -37 6q-16 7 -27 21q-12 14 -19 36q-6 22 -6 54v44q0 32 6.5 54t18 36t28 20t36 6t36 -6t28 -20t18 -36t6.5 -54v-44zM132 232q0 19 -3 34q-3 14 -8 23q-6 8 -14 12t-18 4q-11 0 -19 -4t-13 -12 q-6 -9 -9 -22.5t-3 -34.5v-57q0 -20 3 -35q3 -13 9 -23q5 -9 13 -13t19 -4t19 4t13 13t8 23t3 35v57z" />
+<glyph unicode="&#xf3ca;" horiz-adv-x="448" d="M443 143l-15 -40l-264 95l45 121l182 -66q34 -12 49 -44t3 -66zM0 189l15 40l405 -146l-14 -40l-97 34v-34h-170v96zM124 230.5q-24 -11.5 -49 -3t-36.5 32.5t-3 49t32.5 36.5t49 3t36.5 -32.5t3 -49t-32.5 -36.5z" />
+<glyph unicode="&#xf3cb;" d="M427 213v-42h-278v128h192q36 0 61 -25t25 -61zM0 149h427v-42h-128v-43h-171v43h-128v42zM109.5 190q-18.5 -19 -45 -19.5t-45.5 18.5t-19 45t18.5 45t45 19.5t45.5 -18t19 -45t-18.5 -45.5z" />
+<glyph unicode="&#xf3cc;" horiz-adv-x="469" d="M128 171q-26 0 -45 18.5t-19 45t19 45.5t45 19t45 -19t19 -45.5t-19 -45t-45 -18.5zM384 299q35 0 60 -25t25 -61v-128h-469v214h43v-150h170v150h171z" />
+<glyph unicode="&#xf3cd;" horiz-adv-x="448" d="M43 192q0 -27 18.5 -45.5t45.5 -18.5h128v-43h-128q-44 0 -75.5 31.5t-31.5 75.5v192h43v-192zM444 80q7 -12 2.5 -25t-17.5 -19l-79 -36l-73 149h-149q-27 0 -45.5 19t-18.5 45v171h128v-128h75q26 0 38 -24l73 -149l23 11q12 5 24.5 1.5t18.5 -15.5z" />
+<glyph unicode="&#xf3ce;" horiz-adv-x="405" d="M43 192q0 -27 18.5 -45.5t45.5 -18.5h128v-43h-128q-44 0 -75.5 31.5t-31.5 75.5v192h43v-192zM373 64q14 0 23 -9.5t9 -22.5t-9 -22.5t-23 -9.5h-96v149h-149q-26 0 -45 19t-19 45v171h128v-128h107q17 0 29.5 -12.5t12.5 -30.5v-149h32z" />
+<glyph unicode="&#xf3cf;" horiz-adv-x="363" d="M362 38q3 -15 -6.5 -26.5t-24.5 -11.5h-96v64l21 85h-128q-26 0 -45 19t-19 45v171h128v-128h107q17 0 29.5 -12.5t12.5 -30.5l-42 -149h30q12 0 21.5 -7t11.5 -19zM43 192q0 -27 18.5 -45.5t45.5 -18.5h85v-43h-85q-44 0 -75.5 31.5t-31.5 75.5v192h43v-192z" />
+<glyph unicode="&#xf3d0;" d="M71.5 328q-14.5 10 -17.5 27.5t7 32t27.5 17.5t32 -7.5t17.5 -27.5t-7 -31.5t-27.5 -17.5t-32 7zM299 43v-43h-151q-39 0 -69 25.5t-37 64.5l-42 209h43l42 -202q3 -24 21 -39t42 -15h151zM304 128l123 -96l-32 -32l-82 64h-146q-23 0 -40.5 14.5t-22.5 37.5l-29 126 q-3 20 8.5 36.5t31.5 19.5q10 2 21 -1q10 -3 16 -8l35 -27q47 -37 100 -27v-46q-48 -8 -110 26l22 -87h105z" />
+<glyph unicode="&#xf3d1;" horiz-adv-x="341" d="M76.5 332.5q-12.5 12.5 -12.5 30t12.5 30t30 12.5t30 -12.5t12.5 -30t-12.5 -30t-30 -12.5t-30 12.5zM43 107q0 -27 18.5 -45.5t45.5 -18.5h128v-43h-128q-44 0 -75.5 31.5t-31.5 75.5v192h43v-192zM341 20l-30 -31l-75 75h-108q-27 0 -45.5 18.5t-18.5 45.5v123 q0 20 14 34t34 14h1q10 0 20 -5q9 -4 15 -11l30 -33q17 -19 45 -31.5t54 -11.5v-47q-29 0 -61 13.5t-56 33.5v-79h73z" />
+<glyph unicode="&#xf3d2;" horiz-adv-x="469" d="M107 -21l128 128l128 -128h-256zM427 384q17 0 29.5 -12.5t12.5 -30.5v-256q0 -17 -12.5 -29.5t-29.5 -12.5h-86v42h86v256h-384v-256h85v-42h-85q-18 0 -30.5 12.5t-12.5 29.5v256q0 18 12.5 30.5t30.5 12.5h384z" />
+<glyph unicode="&#xf3d3;" horiz-adv-x="384" d="M341 363q18 0 30.5 -12.5t12.5 -30.5v-256q0 -18 -12.5 -30.5t-30.5 -12.5h-298q-18 0 -30.5 12.5t-12.5 30.5v256q0 18 12.5 30.5t30.5 12.5h298zM171 213v22q0 8 -6.5 14.5t-15.5 6.5h-64q-8 0 -14.5 -6.5t-6.5 -14.5v-86q0 -8 6.5 -14.5t14.5 -6.5h64q9 0 15.5 6.5 t6.5 14.5v22h-32v-11h-43v64h43v-11h32zM320 213v22q0 8 -6.5 14.5t-14.5 6.5h-64q-9 0 -15.5 -6.5t-6.5 -14.5v-86q0 -8 6.5 -14.5t15.5 -6.5h64q8 0 14.5 6.5t6.5 14.5v22h-32v-11h-43v64h43v-11h32z" />
+<glyph unicode="&#xf3d4;" d="M427 235q-18 0 -30.5 -12.5t-12.5 -30.5t12.5 -30.5t30.5 -12.5v-85q0 -18 -12.5 -30.5t-30.5 -12.5h-341q-18 0 -30.5 12.5t-12.5 30.5v85q18 0 30.5 12.5t12.5 30.5t-12.5 30.5t-30.5 12.5v85q0 18 12.5 30.5t30.5 12.5h341q18 0 30.5 -12.5t12.5 -30.5v-85zM235 75v42 h-43v-42h43zM235 171v42h-43v-42h43zM235 267v42h-43v-42h43z" />
+<glyph unicode="&#xf3d5;" d="M427 256h-43v-43h43v-42h-43v-43h43v-43h-43v-42q0 -18 -12.5 -30.5t-30.5 -12.5h-298q-18 0 -30.5 12.5t-12.5 30.5v298q0 18 12.5 30.5t30.5 12.5h298q18 0 30.5 -12.5t12.5 -30.5v-42h43v-43zM341 43v298h-298v-298h298zM85 171h107v-86h-107v86zM213 213h86v-64h-86 v64zM85 299h107v-107h-107v107zM213 107h86v-128h-86v128z" />
+<glyph unicode="&#xf3d6;" d="M384 107v42h43v-42h-43zM384 299h43v-107h-43v107zM170.5 363q70.5 0 120.5 -50t50 -121t-50 -121t-120.5 -50t-120.5 50t-50 121t50 121t120.5 50zM170.5 149q17.5 0 30 12.5t12.5 30.5t-12.5 30.5t-30 12.5t-30 -12.5t-12.5 -30.5t12.5 -30.5t30 -12.5z" />
+<glyph unicode="&#xf3d7;" horiz-adv-x="384" d="M341 384q18 0 30.5 -12.5t12.5 -30.5v-298q0 -18 -12.5 -30.5t-30.5 -12.5h-298q-18 0 -30.5 12.5t-12.5 30.5v298q0 18 12.5 30.5t30.5 12.5h298zM256 256v43h-128v-214h128v43h-85v43h85v42h-85v43h85z" />
+<glyph unicode="&#xf3d8;" horiz-adv-x="405" d="M0 32h405v-43h-405v43zM153 154l-113 31l-34 9v110l31 -8l20 -50l106 -28v177l41 -11l59 -193l113 -30q13 -3 19.5 -14.5t3 -24.5t-15 -19.5t-24.5 -3.5l-113 30z" />
+<glyph unicode="&#xf3d9;" horiz-adv-x="433" d="M14 49h405v-43h-405v43zM431.5 248.5q3.5 -12.5 -3 -24t-19.5 -15.5l-114 -30l-92 -25l-114 -30l-34 -10l-16 29l-39 67l31 9l42 -33l106 28l-88 153l41 11l147 -137l113 30q13 4 24.5 -3t15 -19.5z" />
+<glyph unicode="&#xf3da;" horiz-adv-x="384" d="M128 299v-43h-43v43h43zM128 213v-42h-43v42h43zM128 384v-43h-43q0 18 12.5 30.5t30.5 12.5zM213 128v-43h-42v43h42zM341 384q18 0 30.5 -12.5t12.5 -30.5h-43v43zM213 384v-43h-42v43h42zM128 85q-18 0 -30.5 12.5t-12.5 30.5h43v-43zM341 171v42h43v-42h-43zM341 256 v43h43v-43h-43zM341 85v43h43q0 -18 -12.5 -30.5t-30.5 -12.5zM43 299v-256h256v-43h-256q-18 0 -30.5 12.5t-12.5 30.5v256h43zM256 341v43h43v-43h-43zM256 85v43h43v-43h-43z" />
+<glyph unicode="&#xf3db;" horiz-adv-x="384" d="M0 171v42h43v-42h-43zM0 85v43h43v-43h-43zM43 0q-18 0 -30.5 12.5t-12.5 30.5h43v-43zM0 256v43h43v-43h-43zM256 0v43h43v-43h-43zM341 384q18 0 30.5 -12.5t12.5 -30.5v-213q0 -18 -12.5 -30.5t-30.5 -12.5h-213q-18 0 -30.5 12.5t-12.5 30.5v213q0 18 12.5 30.5 t30.5 12.5h213zM341 128v213h-213v-213h213zM171 0v43h42v-43h-42zM85 0v43h43v-43h-43z" />
+<glyph unicode="&#xf3dc;" d="M213.5 405q88.5 0 151 -62.5t62.5 -150.5t-62.5 -150.5t-151 -62.5t-151 62.5t-62.5 150.5t62.5 150.5t151 62.5zM128 75q22 0 37.5 15.5t15.5 37.5t-15.5 37.5t-37.5 15.5t-37.5 -15.5t-15.5 -37.5t15.5 -37.5t37.5 -15.5zM160 277q0 -22 15.5 -37.5t37.5 -15.5t38 15.5 t16 37.5t-16 38t-38 16t-37.5 -16t-15.5 -38zM299 75q22 0 37.5 15.5t15.5 37.5t-15.5 37.5t-37.5 15.5t-38 -15.5t-16 -37.5t16 -37.5t38 -15.5z" />
+<glyph unicode="&#xf3dd;" horiz-adv-x="384" d="M341 384q18 0 30.5 -12.5t12.5 -30.5v-298q0 -18 -12.5 -30.5t-30.5 -12.5h-298q-18 0 -30.5 12.5t-12.5 30.5v298q0 18 12.5 30.5t30.5 12.5h298zM171 128v128h-32v-53h-43v53h-32v-128h32v43h43v-43h32zM213 256v-128h86q8 0 14.5 6.5t6.5 14.5v86q0 8 -6.5 14.5 t-14.5 6.5h-86zM245 160v64h43v-64h-43z" />
+<glyph unicode="&#xf3de;" horiz-adv-x="384" d="M341 363q18 0 30.5 -12.5t12.5 -30.5v-256q0 -18 -12.5 -30.5t-30.5 -12.5h-298q-18 0 -30.5 12.5t-12.5 30.5v256q0 18 12.5 30.5t30.5 12.5h298zM171 128v128h-32v-53h-43v53h-32v-128h32v43h43v-43h32zM320 149v86q0 8 -6.5 14.5t-14.5 6.5h-64q-9 0 -15.5 -6.5 t-6.5 -14.5v-86q0 -8 6.5 -14.5t15.5 -6.5h16v-32h32v32h16q8 0 14.5 6.5t6.5 14.5zM245 160v64h43v-64h-43z" />
+<glyph unicode="&#xf3df;" d="M384 320q18 0 30.5 -12.5t12.5 -30.5v-256q0 -17 -12.5 -29.5t-30.5 -12.5h-341q-18 0 -30.5 12.5t-12.5 29.5v256q0 18 12.5 30.5t30.5 12.5h42v128h171v-85h-128v-171h43v128h213z" />
+<glyph unicode="&#xf3e0;" horiz-adv-x="384" d="M256 256v-128h-128v128h128zM213 171v42h-42v-42h42zM384 213h-43v-42h43v-43h-43v-43q0 -17 -12.5 -29.5t-29.5 -12.5h-43v-43h-43v43h-42v-43h-43v43h-43q-17 0 -29.5 12.5t-12.5 29.5v43h-43v43h43v42h-43v43h43v43q0 17 12.5 29.5t29.5 12.5h43v43h43v-43h42v43h43 v-43h43q17 0 29.5 -12.5t12.5 -29.5v-43h43v-43zM299 85v214h-214v-214h214z" />
+<glyph unicode="&#xf3e1;" d="M384 405q18 0 30.5 -12.5t12.5 -29.5v-342q0 -17 -12.5 -29.5t-30.5 -12.5h-341q-18 0 -30.5 12.5t-12.5 29.5v342q0 17 12.5 29.5t30.5 12.5h341zM384 21v342h-341v-342h341zM341 320v-256h-256v256h86v-43h-43v-170h171v170h-64v-48q21 -12 21 -37q0 -18 -12.5 -30.5 t-30 -12.5t-30 12.5t-12.5 30.5q0 24 21 37v48q0 18 12.5 30.5t30.5 12.5h106z" />
+<glyph unicode="&#xf3e2;" horiz-adv-x="256" d="M107 341h42v-119h75l-96 -96l-96 96h75v119zM0 149h43q0 -35 25 -60t60 -25t60 25t25 60h43q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5z" />
+<glyph unicode="&#xf3e3;" horiz-adv-x="405" d="M0 256h405v-43h-405v43zM0 128v43h107v-43h-107zM149 128v43h107v-43h-107zM299 128v43h106v-43h-106z" />
+<glyph unicode="&#xf3e4;" horiz-adv-x="469" d="M427 384q17 0 29.5 -12.5t12.5 -30.5v-298q0 -18 -12.5 -30.5t-29.5 -12.5h-384q-18 0 -30.5 12.5t-12.5 30.5v298q0 18 12.5 30.5t30.5 12.5h384zM427 42v300h-384v-300h384zM192 192h-43l86 85l85 -85h-43v-85h-85v85z" />
+<glyph unicode="&#xf3e5;" horiz-adv-x="384" d="M341 384q18 0 30.5 -12.5t12.5 -30.5v-298q0 -18 -12.5 -30.5t-30.5 -12.5h-298q-18 0 -30.5 12.5t-12.5 30.5v298q0 18 12.5 30.5t30.5 12.5h298zM43 342v-65q26 0 45 19t19 46h-64zM43 192q62 0 105.5 44t43.5 106h-43q0 -45 -31 -76t-75 -31v-43zM43 64h298l-96 128 l-74 -96l-54 64z" />
+<glyph unicode="&#xf3e6;" horiz-adv-x="363" d="M0 107q62 0 105.5 -44t43.5 -106h-42q0 44 -31.5 75.5t-75.5 31.5v43zM0 21q27 0 45.5 -18.5t18.5 -45.5h-64v64zM0 192q97 0 166 -68.5t69 -166.5h-43q0 80 -56 136t-136 56v43zM320 426q18 0 30.5 -12t12.5 -30v-363q0 -17 -12.5 -29.5t-30.5 -12.5h-44q-4 45 -21 85 h65v277h-213v-128q-20 8 -43 14v157q0 18 12.5 30.5t30.5 12.5z" />
+<glyph unicode="&#xf3e7;" horiz-adv-x="512" d="M0 128v128h43v-128h-43zM64 85v214h43v-214h-43zM469 256h43v-128h-43v128zM405 85v214h43v-214h-43zM352 384q13 0 22.5 -9.5t9.5 -22.5v-320q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v320q0 13 9.5 22.5t22.5 9.5h192zM341 43v298h-170v-298h170z " />
+<glyph unicode="&#xf3e8;" horiz-adv-x="512" d="M394.5 320q48.5 0 83 -34.5t34.5 -83t-34.5 -83t-82.5 -34.5h-278q-48 0 -82.5 34.5t-34.5 83t34.5 83t83 34.5t83 -34.5t34.5 -82.5q0 -43 -27 -75h96q-27 32 -27 75q0 48 34.5 82.5t83 34.5zM117 128q31 0 53 22t22 53t-22 52.5t-53 21.5t-52.5 -21.5t-21.5 -52.5 t21.5 -53t52.5 -22zM395 128q31 0 52.5 22t21.5 53t-21.5 52.5t-52.5 21.5t-53 -21.5t-22 -52.5t22 -53t53 -22z" />
+<glyph unicode="&#xf3e9;" horiz-adv-x="469" d="M149 277v-85h107v85h-107zM0 427h85v-22h299v22h85v-86h-21v-298h21v-86h-85v22h-299v-22h-85v86h21v298h-21v86zM85 43v-22h299v22h21v298h-21v22h-299v-22h-21v-298h21zM107 320h192v-85h64v-171h-214v85h-42v171zM299 149h-107v-42h128v85h-21v-43z" />
+<glyph unicode="&#xf3ea;" horiz-adv-x="341" d="M47 115q19 0 33 -13.5t14 -33t-14 -33.5t-33 -14t-33 14t-14 33.5t14 33t33 13.5zM0 238q90 0 153.5 -63.5t63.5 -153.5h-62q0 64 -45.5 109.5t-109.5 45.5v62zM0 363q93 0 171.5 -46t124 -124.5t45.5 -171.5h-62q0 116 -81.5 198t-197.5 82v62z" />
+<glyph unicode="&#xf3eb;" horiz-adv-x="474" d="M79 384h164q16 2 29.5 -9t14.5 -28v-55.5v-55.5l36 59q30 -47 84 -135.5t67 -110.5h-241q-29 -30 -52 -39q-42 -18 -88 -4t-71 53q-27 39 -21 89t41 82v106q-2 18 8.5 33t28.5 15zM91 331v-72q40 13 82 -1t65 -49v122h-147zM131 217q-30 -1 -51 -18.5t-31 -47.5 q-8 -34 13 -65.5t56 -36.5q34 -6 64 17t32 58q5 36 -21 65t-62 28zM323 201l-62 -102h125z" />
+<glyph unicode="&#xf3ec;" horiz-adv-x="423" d="M212.5 409q18.5 0 31.5 -13.5t13 -31.5t-13 -31.5t-31.5 -13.5t-31.5 13.5t-13 31.5t13 31.5t31.5 13.5zM337 362q22 0 37.5 -16t15.5 -37.5t-15.5 -37.5t-37.5 -16t-38 16t-16 37.5t16 37.5t38 16zM91.5 352q16.5 0 28 -12t11.5 -28.5t-11.5 -28.5t-28 -12t-28.5 12 t-12 28.5t12 28.5t28.5 12zM34 218q14 0 24 -10t10 -24t-10 -24t-24 -10t-24 10t-10 24t10 24t24 10zM389 218q14 0 24 -10t10 -24t-10 -24t-24 -10t-24 10t-10 24t10 24t24 10zM85 91q14 0 24 -10t10 -24t-10 -24t-24 -10t-24 10t-10 24t10 24t24 10zM340 91q14 0 24 -10 t10 -24t-10 -24t-24 -10t-24 10t-10 24t10 24t24 10zM212 44q14 0 24.5 -10.5t10.5 -24.5t-10.5 -24t-24.5 -10t-24 10t-10 24t10 24.5t24 10.5z" />
+<glyph unicode="&#xf3ed;" d="M0 405h85v-21h150v21h85v-85h-21v-64h42v21h86v-85h-22v-128h22v-85h-86v21h-128v-21h-85v85h21v43h-64v-22h-85v86h21v149h-21v85zM341 192v21h-42v-42h21v-86h-85v22h-43v-43h21v-21h128v21h22v128h-22zM235 320v21h-150v-21h-21v-149h21v-22h64v43h-21v85h85v-21h43 v64h-21zM213 192h-21v-43h43v22h21v42h-43v-21z" />
+<glyph unicode="&#xf3ee;" d="M281 137q-12 -13 -12 -14q-14 -13 -21 -17q-26 -19 -59 -12q-30 6 -45 36q-1 2 -2 3q-8 -12 -8 -13q-21 -28 -57 -29q-23 -1 -40 6q-36 16 -37 56h40l1 -4q5 -20 21 -24q21 -5 35 9q9 10 10.5 25t-6.5 26q-8 12 -23 14.5t-26 -6.5q-4 -3 -6 -5q-3 -5 -11 -5h-29 q9 53 20 110h111v-33h-4h-75q-3 0 -4 -3q-1 -4 -7 -39v-3q21 19 52 14q27 -5 42 -34q1 1 1 3q2 2 2 3q21 43 69 36q26 -3 46 -22q1 -1 23 -24l2 2q22 23 24 25q17 16 38 19q23 3 43 -5.5t30 -30.5q16 -38 -2 -74q-16 -33 -55 -35q-29 -1 -51 17q-3 2 -25 22q0 1 -5 6z M205 132q12 0 24 7q8 4 28 23q1 2 0 4q-2 1 -9.5 8t-11.5 11q-9 8 -21 12q-14 4 -25 -2t-15 -20q-1 -4 -1 -8q-1 -16 8 -25.5t23 -9.5zM304 164q22 -20 24 -21q13 -12 30 -11q25 0 30 24q1 7 0 15q-2 13 -11.5 21t-22.5 6q-15 -1 -28 -13q-1 -1 -22 -21z" />
+<glyph unicode="&#xf3ef;" d="M117 213h193q31 0 53 22t22 53t-22 53.5t-53.5 22.5t-53.5 -22.5t-22 -53.5v-33h-42v33q0 49 34.5 83.5t83 34.5t83 -34.5t34.5 -83t-34.5 -83t-82.5 -34.5h-193q-31 0 -53 -22t-22 -53t22 -53t53 -22t53 22t22 53v34h42v-34q0 -48 -34 -82.5t-82.5 -34.5t-83 34.5 t-34.5 83t34.5 82.5t82.5 34z" />
+<glyph unicode="&#xf3f0;" d="M379 87q6 2 9 -2.5t-2 -8.5q-34 -25 -81 -39t-92 -14q-122 0 -211 81q-3 3 -1 5.5t6 0.5q96 -56 211 -56q83 0 161 33zM425 113q5 -6 -2.5 -31.5t-23.5 -39.5q-3 -3 -5 -2t-1 5q18 45 12 53t-54 2q-4 0 -4.5 2t2.5 4q18 13 46 13.5t30 -6.5zM237 271v6q0 22 -6 30 q-7 11 -23 11q-28 0 -33 -25q-2 -8 -8 -8l-40 4q-8 2 -6 9q6 34 32.5 49t60.5 15q41 0 63 -21q3 -3 5.5 -6t4.5 -7.5t3.5 -7t2 -8t1.5 -8t1 -9v-8v-9v-9.5v-65q0 -17 16 -38q5 -7 0 -12q-16 -12 -32 -27q-5 -4 -10 -1q-11 9 -24 28q-17 -18 -32 -24.5t-37 -6.5 q-27 0 -44.5 17t-17.5 48q0 49 44 69q17 7 79 14zM229 184q8 14 8 45v9q-62 0 -62 -42q0 -14 6.5 -22.5t18.5 -8.5q18 0 29 19z" />
+<glyph unicode="&#xf3f1;" d="M397 243q30 0 30 -31v-103q0 -53 -39.5 -91.5t-92.5 -38.5h-171q-48 0 -86 38.5t-38 90.5v162q0 57 39 96t96 39h90q44 0 84.5 -39.5t40.5 -85.5v-11q0 -11 7.5 -18.5t20.5 -7.5h19zM135 294q-10 0 -17.5 -7.5t-7.5 -18t7.5 -18t17.5 -7.5h78q10 0 17 8t7 18t-7 17.5 t-17 7.5h-78zM289 90q10 0 17.5 6.5t7.5 16.5t-7.5 17t-17.5 7h-154q-10 0 -17.5 -7t-7.5 -17t7.5 -16.5t17.5 -6.5h154z" />
+<glyph unicode="&#xf3f2;" d="M427 192h-214v-213h-213v213h213v213h214v-213z" />
+<glyph unicode="&#xf3f3;" d="M219 243q26 0 42 -13t16 -38t-16 -38t-42 -13h-23v102h23zM221 400q85 0 145.5 -61t60.5 -147t-60.5 -147t-145.5 -61q-75 0 -133 49l-88 -12l34 85q-18 41 -18 86q0 86 60 147t145 61zM333 193v0q0 46 -30.5 74t-83.5 28h-78v-206h76q54 0 85 29t31 75z" />
+<glyph unicode="&#xf3f4;" d="M426 145q0 -46 -13 -81q-25 -66 -96 -81q-20 -4 -43 -4h-240h-3v1l45 45l124 124l0.5 0.5t1.5 0.5q4 4 7 3q4 -2 4 -8v-63v-4q0 -1 2 -1q47 1 55 1q8 1 19 5q28 9 35 42q3 16 3 33v114q0 3 3 6l93 93q0 1 2 4l1 -1h1v-4q0 -24 -1 -225zM100 112q0 -3 -3 -6l-94 -94l-3 -3 v5v111.5v112.5q0 45 12 79q25 69 99 84q19 4 42 4h75h89h75h4q-1 0 -2 -2q0 -1 -1 -1q-27 -28 -82.5 -83.5l-83.5 -83.5q-3 -2 -3 -3q-4 -3 -7 -1q-1 2 -4 6v3v32v31v3q0 1 -1 1q-50 -1 -59 -2q-4 0 -13 -3q-31 -9 -37 -44q-3 -15 -3 -34q-1 -25 0 -112z" />
+<glyph unicode="&#xf3f5;" d="M97 95q-40 0 -68.5 28.5t-28.5 68t28.5 67.5t68.5 28t68 -28t28 -67.5t-28 -68t-68 -28.5zM330 95q-40 0 -68.5 28.5t-28.5 68t28.5 67.5t68.5 28t68.5 -28t28.5 -67.5t-28.5 -68t-68.5 -28.5z" />
+<glyph unicode="&#xf3f6;" horiz-adv-x="384" d="M384 257q0 -38 -10.5 -65t-30.5 -41.5t-40 -21t-47 -9.5q19 -16 19 -51v-55.5v-34.5h-139v14v26.5v24.5q-16 -3 -29.5 -3t-23 2.5t-17 6.5t-12 8.5t-7.5 8.5t-4 7l-1 3q-6 14 -13.5 24t-12.5 13l-5 3q-11 9 -11 12.5t7 4.5h6q12 -1 23 -8t15 -14l5 -6q27 -47 81 -23 q3 24 18 37q-27 3 -47 9.5t-39.5 21t-30.5 41.5t-11 65q0 43 29 74q-13 33 3 74q3 -1 8 0.5t25 -6t44 -23.5q33 9 70 10q36 -1 70 -10q23 16 42.5 23t26.5 7l7 -1q17 -41 3 -74q29 -31 29 -74zM32 121.5q1 2.5 -2.5 4t-4.5 -1t2.5 -4t4.5 1zM43.5 109q2.5 2 -1 5.5t-6 1.5 t1 -5.5t6 -1.5zM54 93q3 2 0 6.5t-6 2.5t0 -6.5t6 -2.5zM69.5 77q2.5 3 -1.5 7.5t-7 1.5t1.5 -7.5t7 -1.5zM90 68.5q1 3.5 -4.5 5.5t-6.5 -2t4.5 -5.5t6.5 2zM107 63q6 0 6 4t-6 4t-6 -4t6 -4zM129 65q3 1 4.5 2.5t0.5 2.5q0 5 -6 4q-3 -1 -4.5 -2.5t-0.5 -3.5q0 -4 6 -3z " />
+<glyph unicode="&#xf3f7;" horiz-adv-x="267" d="M147 5q36 0 59 17.5t23 41.5q0 20 -12 33.5t-48 39.5h-14q-33 0 -59 -9q-48 -17 -48 -57q0 -30 27 -48t72 -18zM81 329q0 -36 19 -66.5t50 -30.5q17 0 34.5 12.5t17.5 42.5q0 33 -20 66t-52 33q-21 0 -35 -14.5t-14 -42.5zM220 164q22 -19 33.5 -36t11.5 -43 q0 -43 -38.5 -74.5t-107.5 -31.5q-58 0 -88.5 23.5t-30.5 57.5q0 43 42 67q39 24 107 29q-17 19 -17 36q0 6 7 23h-15q-41 0 -65.5 26.5t-24.5 60.5q0 44 31.5 73.5t88.5 29.5h113l-23 -22h-32q37 -32 37 -71q0 -19 -7.5 -34.5t-15.5 -23.5t-23 -20q-18 -14 -18 -29 q0 -13 15 -26z" />
+<glyph unicode="&#xf3f8;" d="M319 186.5q-8 10.5 -30 10.5q-27 0 -38 -16t-11 -45v-146q0 -5 -3 -8t-8 -3h-76q-4 0 -7.5 3t-3.5 8v270q0 4 3.5 7.5t7.5 3.5h74q4 0 6.5 -2t3.5 -6v-5q1 -2 1 -7q28 27 76 27q53 0 83 -27t30 -79v-182q0 -5 -3.5 -8t-7.5 -3h-78q-4 0 -7.5 3t-3.5 8v164q0 22 -8 32.5z M88 316.5q-15 -15.5 -36.5 -15.5t-36.5 15.5t-15 37t15 36.5t36.5 15t36.5 -15t15 -36.5t-15 -37zM101 260v-270q0 -5 -3.5 -8t-7.5 -3h-76q-5 0 -8 3t-3 8v270q0 4 3 7.5t8 3.5h76q4 0 7.5 -3.5t3.5 -7.5z" />
+<glyph unicode="&#xf3f9;" horiz-adv-x="256" d="M128 189q-45 0 -76.5 32t-31.5 76.5t31.5 76t76.5 31.5t76.5 -31.5t31.5 -76t-31.5 -76.5t-76.5 -32zM128 350q-22 0 -37.5 -15.5t-15.5 -37.5t15.5 -37.5t37.5 -15.5t37.5 15.5t15.5 37.5t-15.5 37.5t-37.5 15.5zM252 176q8 -15 1 -24.5t-29 -24.5q-27 -17 -75 -22 l81 -81q7 -7 7 -17.5t-7 -17.5l-3 -3q-8 -7 -18 -7t-17 7q-12 11 -64 64l-63 -64q-7 -7 -17.5 -7t-17.5 7l-3 3q-7 7 -7 17.5t7 17.5l63 63l18 18q-48 4 -76 22q-22 15 -29 24.5t1 24.5q5 11 16 13.5t29 -8.5q14 -11 33.5 -17t32.5 -6l13 -1q49 0 79 24q18 11 29 8.5 t16 -13.5z" />
+<glyph unicode="&#xf3fa;" d="M267 315h145q4 0 9.5 -5t5.5 -12l-127 -85h-4l-29 18v84zM267 200l27 -18q2 -1 4 -1h3l1 1q-2 -1 29 19.5t64 41.5l32 21v-153q0 -12 -6.5 -18t-16.5 -6h-137v113v0zM128 239q13 0 20.5 -12.5t7.5 -34.5t-7.5 -34t-21.5 -12q-13 0 -21 12.5t-8 33.5t8 34t22 13zM0 357 l251 48v-426l-251 52v326zM168 139q16 21 16 54t-15.5 53.5t-40.5 20.5q-26 0 -42 -21t-16 -56q0 -32 16 -52t41 -20t41 21z" />
+<glyph unicode="&#xf3fb;" horiz-adv-x="356" d="M225 276q0 34 -52 34h-15q-7 0 -13 -4.5t-7 -11.5l-14 -60v-3q0 -5 3.5 -8.5t8.5 -3.5h12q15 0 28 3t24.5 9t18 17.5t6.5 27.5zM356 243q0 -58 -48 -93q-47 -35 -133 -35h-13q-7 0 -13 -4.5t-7 -11.5l-16 -69q-2 -7 -9 -12.5t-15 -5.5h-46q-7 0 -11.5 4t-4.5 11q0 2 3 14 h32q8 0 14.5 5t7.5 12l16 69q2 7 8.5 12t13.5 5h13q85 0 132 35t47 92q0 28 -11 44q40 -20 40 -72zM316 283q0 -57 -48 -93q-47 -35 -133 -35h-13q-7 0 -13 -4.5t-7 -11.5l-16 -68q-2 -8 -8.5 -13.5t-15.5 -5.5h-46q-7 0 -11.5 4t-4.5 11v4l66 283q1 7 8 12.5t15 5.5h97 q14 0 26.5 -0.5t26.5 -3t24.5 -6.5t21 -11t17 -16t10.5 -22.5t4 -29.5z" />
+<glyph unicode="&#xf3fc;" horiz-adv-x="341" d="M99 242q0 27 14 46t34 19q17 0 25.5 -11t8.5 -27q0 -10 -3 -25q-4 -14 -10 -34q-6 -19 -9 -31q-5 -20 7.5 -34.5t32.5 -14.5q35 0 57.5 39.5t22.5 95.5q0 43 -27.5 70t-77.5 27q-56 0 -90.5 -35.5t-34.5 -85.5q0 -29 17 -50q6 -6 4 -14q-2 -5 -5 -20q-2 -5 -5.5 -6.5 t-7.5 -0.5q-26 11 -39 37t-13 60q0 22 7 44t22 42.5t36 36.5t51 25.5t65 9.5t65.5 -12t51 -32t32 -46.5t11.5 -54.5q0 -75 -38 -124t-98 -49q-20 0 -37.5 9t-24.5 22q-15 -58 -18 -69q-8 -30 -36 -70h-17q-6 51 2 84l33 138q-8 17 -8 41z" />
+<glyph unicode="&#xf3fd;" d="M426 121q2 -9 -6.5 -18t-27.5 -15l-2 -1l-64 20l17 6q21 7 21 13q-2 10 -37 4l-36 -12l-61 -21v-22l96 32l64 -20l-99 -34l-61 -21v1v-1l-69 22v39v-19q-40 -14 -84 -6q-3 0 -11 1.5t-12 2t-11 1.5t-11.5 2.5t-10 3t-8.5 3t-6.5 4t-5 5t-1.5 5.5q-2 25 34 37l59 -18 l-15 -6q-15 -5 -6 -13q9 -9 25 -4l64 22v44l-27 8l27 9v177l88 -23q91 -24 90 -95q-1 -90 -82 -67v117q0 6 -7 9t-13.5 1t-6.5 -9v-148l6 2q58 20 104 17q80 -6 86 -35zM34 133h0.5h1.5l98 33l27 -8v-19l-68 -24z" />
+<glyph unicode="&#xf3fe;" d="M427 195q0 -28 -27 -39q2 -9 2 -19q0 -51 -55.5 -87.5t-134 -36.5t-134 36.5t-55.5 87.5q0 10 2 20q-25 11 -25 38q0 18 12.5 30.5t29.5 12.5q19 0 32 -15q52 36 129 39l35 104q3 7 10 5l83 -20q1 0 3 -1q8 20 30 20q13 0 23 -10t10 -23.5t-10 -23.5t-23 -10 q-14 0 -23.5 9.5t-9.5 23.5q-2 -1 -3 0l-77 18l-31 -92q79 -2 132 -40q13 16 33 16q17 0 29.5 -12.5t12.5 -30.5zM116 161.5q0 -12.5 9 -21.5t21.5 -9t21.5 9t9 21.5t-9 22t-21.5 9.5t-21.5 -9.5t-9 -22zM282 77q4 3 0.5 6.5t-7.5 0.5q-18 -19 -62 -19t-62 19 q-3 3 -6.5 -0.5t-0.5 -6.5q21 -22 70 -22q47 0 68 22zM280.5 131q12.5 0 21.5 9t9 21.5t-9 22t-21.5 9.5t-22 -9.5t-9.5 -22t9.5 -21.5t22 -9z" />
+<glyph unicode="&#xf3ff;" d="M414 147q13 -25 13 -52q0 -48 -34.5 -82t-83.5 -34q-30 0 -56 13q-19 -3 -37 -3q-85 0 -144.5 59t-59.5 142q0 20 4 40q-16 27 -16 59q0 48 34.5 82t83.5 34q34 0 63 -18q17 3 35 3q84 0 143.5 -58.5t59.5 -141.5q0 -22 -5 -43zM318.5 94.5q14.5 19.5 14.5 44.5 q0 21 -8.5 35.5t-23.5 23.5q-14 10 -34 16q-21 6 -45 12q-20 4 -29 7q-8 2 -16 6t-12 9t-4 12q0 11 12 19q14 8 36 8q23 0 34 -7q10 -8 18 -23q6 -11 12 -16t18 -5t20.5 8.5t8.5 19.5t-6.5 22.5t-20 22t-33.5 17t-47 6.5q-35 0 -60 -10q-26 -9 -39.5 -27t-13.5 -40 q0 -24 13 -41q13 -16 35 -25q21 -9 53 -16q23 -4 37 -9q14 -4 22 -11q8 -8 8 -20q0 -14 -15 -25q-16 -10 -41 -10q-18 0 -29.5 5t-17.5 13t-11 21q-5 11 -12 17q-8 6 -18 6q-13 0 -21.5 -8t-8.5 -19q0 -18 13 -36t34 -29q28 -15 72 -15q37 0 64 11t41.5 30.5z" />
+<glyph unicode="&#xf400;" horiz-adv-x="420" d="M153 276q21 0 35.5 -14t14.5 -33.5t-14.5 -33t-35.5 -13.5t-36 13.5t-15 33t15 33.5t36 14zM272 276q21 0 35.5 -13.5t14.5 -33t-14.5 -33.5t-35.5 -14t-36 14t-15 33.5t15 33t36 13.5zM403 202q10 7 15 0.5t-1 -15.5q-29 -36 -88 -60q26 -89 -22 -131q-32 -27 -64 -14 q-27 10 -26 42q0 -1 -0.5 24.5t-0.5 53.5l-4 1t-7 2v-36v-33t0 -12q1 -36 -32 -44q-36 -9 -65 23q-40 43 -16 124q-60 25 -89 60q-6 9 -1 15.5t14 -0.5l4 -3v165q0 17 12.5 29t28.5 12h300q16 0 26 -12t10 -29v-165q2 0 6 3zM376 186v159q0 22 -6.5 30.5t-24.5 8.5h-266 q-20 0 -26.5 -8.5t-6.5 -30.5v-160q23 -14 51 -19.5t46 -4.5t34 0q15 1 22 -6q1 0 1.5 -1l0.5 -1q9 -8 15 -12q1 22 27 20q16 1 34 0t46 5t53 20z" />
+<glyph unicode="&#xf401;" d="M9 124h-9v51h9v-51zM30 107h-9v81h9v-81zM47 103h-9v94h9v-94zM64 99h-9v94h9v-94zM85 99h-8v123h8v-123zM102 99h-8v140h8v-140zM124 99h-9v149h9v-149zM141 99h-9v153h9v-153zM162 99h-8v149h8v-149zM179 99h-8v145h8v-145zM196 99h-8v162h8v-162zM218 99h-9v175h9 v-175zM374 100h-146q-6 0 -6 6v167q0 4 5 6q17 6 34 6q36 0 62.5 -24.5t30.5 -59.5q9 4 20 4q22 0 37.5 -15.5t15.5 -37.5t-15.5 -37t-37.5 -15z" />
+<glyph unicode="&#xf402;" horiz-adv-x="265" d="M0 231v60q25 8 43 23.5t29 36.5t15 54h61v-108h102v-66h-102v-110q0 -37 4 -47.5t15 -16.5q14 -9 33 -9q32 0 65 21v-67q-28 -13 -50.5 -18t-48.5 -5q-29 0 -51.5 7t-38.5 21t-22.5 29.5t-6.5 44.5v149h-47v1z" />
+<glyph unicode="&#xf403;" horiz-adv-x="407" d="M296 34h-83l-56 -55h-55v55h-102v297l28 74h379v-259zM370 164v204h-305v-269h83v-55l56 55h102zM269 294h37v-111h-37v111zM167 183v111h37v-111h-37z" />
+<glyph unicode="&#xf404;" d="M276 284q-15 0 -32 -7q32 103 120 101q66 -2 62 -86q-2 -63 -87 -172q-87 -114 -147 -114q-37 0 -63 70q-18 66 -34 127q-19 69 -41 69q-5 0 -34 -20l-20 26q33 29 62 56q42 36 63 38q50 5 62 -68q12 -80 17 -99q14 -65 32 -65q13 0 40 42.5t29 64.5q3 37 -29 37z" />
+<glyph unicode="&#xf405;" d="M364.5 343q62.5 -62 62.5 -149.5t-62.5 -149.5t-150.5 -62v0q-54 0 -101 26l-113 -29l30 109q-28 49 -28 106q0 87 62 149t150 62t150.5 -62zM214 18q73 0 125 51.5t52 124.5t-52 124.5t-125 51.5t-124.5 -51.5t-51.5 -124.5q0 -51 27 -94l4 -6l-18 -65l67 17l6 -3 q42 -25 90 -25zM311 150q9 -5 10 -7q4 -6 -3 -25q-3 -8 -15 -15.5t-21 -9.5q-18 -2 -33 2q-17 6 -30 11q-8 4 -15.5 8.5t-14.5 9t-13 9.5t-11.5 10t-10.5 10.5t-8.5 9.5t-7 8.5t-5.5 7t-3.5 5l-1.5 2.5q-22 29 -22 55q0 24 19 44q6 7 14 7q6 0 10 -1q8 0 12 -9q2 -3 6 -13 l7 -17.5t3 -8.5q3 -5 1 -9q-3 -7 -5 -9l-3 -3t-3 -3.5t-2 -2.5q-6 -6 -3 -11q13 -22 30 -37q13 -11 43 -26q7 -3 11 1q12 15 17 21q4 6 12 3q6 -3 36 -17z" />
+<glyph unicode="&#xf406;" d="M213 323q-24 18 -47 27.5t-38.5 10.5t-28 0t-18.5 -4l-6 -3q59 51 138 51t139 -51q-3 1 -7 3t-17.5 4t-28.5 0t-38.5 -11t-47.5 -27v0zM157 282q-39 -40 -65 -78t-34.5 -63.5t-12 -44.5t-1.5 -28l3 -9q-47 58 -47 133q0 84 57 145q38 -16 100 -55zM427 192 q0 -75 -47 -133q1 3 2.5 9t-1.5 27.5t-12 45.5t-34.5 62.5t-65.5 78.5q28 17 53 31t36 19l11 5q58 -61 58 -145zM212 236q38 -27 67.5 -57t45 -53t26 -42t13.5 -29l3 -10q-62 -66 -153.5 -66t-154.5 66q2 4 5 11.5t15 30t28 44.5t44 51t61 54z" />
+<glyph unicode="&#xf407;" d="M414 271q-5 0 -49 -10q-10 -3 -62.5 -45.5t-56.5 -55.5q-2 -10 -2 -27l-1 -15q0 -9 4 -39q4 -1 32 -1t32 -1l-1 -20q-6 1 -105 1q-6 0 -44 -1t-49 -1l4 19h15.5t27 2t15.5 6q1 1 1.5 2t1 2.5t0.5 3v4.5v6v8v10v13q0 17 -1 27q-3 10 -51.5 69.5t-65.5 72.5q-3 1 -28.5 4 t-29.5 4l-1 18q2 1 17.5 1t35.5 -0.5t44 0.5q23 0 61 -0.5t45 -0.5l-3 -16q-4 -1 -30.5 -2.5t-31.5 -3.5q16 -24 50 -68.5t39 -51.5q2 3 41.5 36t40.5 43q-38 7 -54 7l-3 20h20h38.5h30.5q72 0 86 -2z" />
+<glyph unicode="&#xf408;" d="M422 277q5 -35 5 -69v-32l-5 -69q-4 -29 -17 -42q-14 -14 -42 -18q-27 -2 -64.5 -3t-61.5 -1h-24q-111 1 -145 4l-8 1t-13 2t-12.5 5t-13 10t-10 16.5t-5.5 18.5l-2 7q-4 35 -4 69v32l4 69q4 29 17 42q14 15 43 18q27 2 64 3t61 1h24q90 0 150 -4q28 -3 42 -18 q4 -4 7 -9.5t5 -11t3 -10.5t2 -8v-3zM271 189l14 7l-115 60v-120z" />
+<glyph unicode="&#xf409;" horiz-adv-x="352" d="M170 224q18 0 57.5 -1t59.5 -2q15 0 26 -3q28 -6 34 -40q5 -35 5 -59q0 -39 -3 -87q-1 -12 -7 -25q-11 -24 -43 -25q-103 -3 -152 -3q-17 0 -47.5 1t-40.5 1t-22 4q-20 5 -29 26q-6 17 -8 52q-1 41 2 94q1 15 5 31q9 31 42 33q31 0 121 3zM202 33q4 -3 13 -9 q9 -5 17.5 -1t10.5 15q2 9 2 14v60q0 8 -3 15q-3 13 -12 16.5t-20 -4.5q-2 -1 -4.5 -3.5l-3.5 -3.5v50h-21v-158h21q-1 4 0 9zM162 24v118h-22v-7v-76q0 -8 -6 -12q-4 -5 -9 -3q-3 1 -3 7v84v7h-22v-3v-96q0 -3 1 -9q4 -16 20 -11q4 1 13 7q2 1 6 6v-12h22zM323 79 q0 4 0.5 11t0.5 12.5t-1 10.5q-1 14 -9 22t-21 9q-14 1 -23.5 -6.5t-10.5 -21.5q-3 -33 0 -67q2 -15 14 -22.5t28 -3.5q13 3 19.5 15.5t2.5 26.5h-22q0 -10 -1 -14q-1 -9 -9 -9t-9 8q-1 9 -2 30q16 -1 43 -1zM103 159v23h-74v-23h24v-135h25v135h25zM247 364v-34v-59 q0 -6 4 -7q3 -1 7 2q7 5 7 14v26v31v27h22v-119h-22v12l-5 -5q-8 -6 -11 -7q-8 -4 -14.5 -0.5t-8.5 11.5q-1 4 -1 7v100q7 1 22 1zM66 405h22q2 0 4 -4q10 -34 14 -51q0 -1 2 -3q4 18 9 32q1 3 3 10.5t3 11.5q1 3 4 4h22q0 -1 -1 -4q-1 -1 -1 -2q-4 -14 -13 -42t-13 -42 q-2 -6 -2 -10v-59h-23q0 3 -0.5 8.5t-0.5 9.5t1 8q2 36 -13 78q-9 27 -17 55zM208 304v-11t-0.5 -13t-1.5 -11q-1 -11 -10 -18.5t-21 -7.5t-20 7.5t-11 18.5q-1 7 -1 21q0 38 1 49q4 27 31 27q26 0 31 -27q0 -1 0.5 -2.5t0.5 -2.5q0 -5 0.5 -15t0.5 -15zM167 305v-28 q0 -6 1 -8q4 -5 8 -5t8 5q1 2 1 8v49v12q-1 7 -9 7q-7 0 -9 -7q-1 -2 -1 -6t0.5 -13t0.5 -14zM206 83v31q0 9 11 9q8 0 8 -7v-5.5v-4.5v-50v-3.5v-3.5q-1 -7 -8 -7q-11 1 -11 9q-1 16 0 32zM299 97h-20q0 4 0.5 10.5t0.5 10.5q1 6 9 6q7 0 8 -6q2 -10 2 -21z" />
+</font>
+</defs></svg> 
\ No newline at end of file
diff --git a/src/web/wwwroot/fonts/Material-Design-Iconic-Font.ttf b/src/web/wwwroot/fonts/Material-Design-Iconic-Font.ttf
new file mode 100755
index 0000000000000000000000000000000000000000..5d489fdd1a04cf2169af5e4d29d2929432a73f04
Binary files /dev/null and b/src/web/wwwroot/fonts/Material-Design-Iconic-Font.ttf differ
diff --git a/src/web/wwwroot/fonts/Material-Design-Iconic-Font.woff b/src/web/wwwroot/fonts/Material-Design-Iconic-Font.woff
new file mode 100755
index 0000000000000000000000000000000000000000..933b2bf85f0bd4b006a4f9e6bf4ceaaf2cbf4360
Binary files /dev/null and b/src/web/wwwroot/fonts/Material-Design-Iconic-Font.woff differ
diff --git a/src/web/wwwroot/fonts/Material-Design-Iconic-Font.woff2 b/src/web/wwwroot/fonts/Material-Design-Iconic-Font.woff2
new file mode 100755
index 0000000000000000000000000000000000000000..35970e2773652fba4db2970fae5b1a2338babf42
Binary files /dev/null and b/src/web/wwwroot/fonts/Material-Design-Iconic-Font.woff2 differ
diff --git a/src/web/wwwroot/fonts/glyphicons-halflings-regular.eot b/src/web/wwwroot/fonts/glyphicons-halflings-regular.eot
new file mode 100755
index 0000000000000000000000000000000000000000..4a4ca865d67e86f961bc6e2ef00bffa4e34bb9ed
Binary files /dev/null and b/src/web/wwwroot/fonts/glyphicons-halflings-regular.eot differ
diff --git a/src/web/wwwroot/fonts/glyphicons-halflings-regular.svg b/src/web/wwwroot/fonts/glyphicons-halflings-regular.svg
new file mode 100755
index 0000000000000000000000000000000000000000..25691af8f193a67185a696cb6626ea6418ff6a20
--- /dev/null
+++ b/src/web/wwwroot/fonts/glyphicons-halflings-regular.svg
@@ -0,0 +1,229 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
+<svg xmlns="http://www.w3.org/2000/svg">
+<metadata></metadata>
+<defs>
+<font id="glyphicons_halflingsregular" horiz-adv-x="1200" >
+<font-face units-per-em="1200" ascent="960" descent="-240" />
+<missing-glyph horiz-adv-x="500" />
+<glyph />
+<glyph />
+<glyph unicode="&#xd;" />
+<glyph unicode=" " />
+<glyph unicode="*" d="M100 500v200h259l-183 183l141 141l183 -183v259h200v-259l183 183l141 -141l-183 -183h259v-200h-259l183 -183l-141 -141l-183 183v-259h-200v259l-183 -183l-141 141l183 183h-259z" />
+<glyph unicode="+" d="M0 400v300h400v400h300v-400h400v-300h-400v-400h-300v400h-400z" />
+<glyph unicode="&#xa0;" />
+<glyph unicode="&#x2000;" horiz-adv-x="652" />
+<glyph unicode="&#x2001;" horiz-adv-x="1304" />
+<glyph unicode="&#x2002;" horiz-adv-x="652" />
+<glyph unicode="&#x2003;" horiz-adv-x="1304" />
+<glyph unicode="&#x2004;" horiz-adv-x="434" />
+<glyph unicode="&#x2005;" horiz-adv-x="326" />
+<glyph unicode="&#x2006;" horiz-adv-x="217" />
+<glyph unicode="&#x2007;" horiz-adv-x="217" />
+<glyph unicode="&#x2008;" horiz-adv-x="163" />
+<glyph unicode="&#x2009;" horiz-adv-x="260" />
+<glyph unicode="&#x200a;" horiz-adv-x="72" />
+<glyph unicode="&#x202f;" horiz-adv-x="260" />
+<glyph unicode="&#x205f;" horiz-adv-x="326" />
+<glyph unicode="&#x20ac;" d="M100 500l100 100h113q0 47 5 100h-218l100 100h135q37 167 112 257q117 141 297 141q242 0 354 -189q60 -103 66 -209h-181q0 55 -25.5 99t-63.5 68t-75 36.5t-67 12.5q-24 0 -52.5 -10t-62.5 -32t-65.5 -67t-50.5 -107h379l-100 -100h-300q-6 -46 -6 -100h406l-100 -100 h-300q9 -74 33 -132t52.5 -91t62 -54.5t59 -29t46.5 -7.5q29 0 66 13t75 37t63.5 67.5t25.5 96.5h174q-31 -172 -128 -278q-107 -117 -274 -117q-205 0 -324 158q-36 46 -69 131.5t-45 205.5h-217z" />
+<glyph unicode="&#x2212;" d="M200 400h900v300h-900v-300z" />
+<glyph unicode="&#x25fc;" horiz-adv-x="500" d="M0 0z" />
+<glyph unicode="&#x2601;" d="M-14 494q0 -80 56.5 -137t135.5 -57h750q120 0 205 86.5t85 207.5t-85 207t-205 86q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5z" />
+<glyph unicode="&#x2709;" d="M0 100l400 400l200 -200l200 200l400 -400h-1200zM0 300v600l300 -300zM0 1100l600 -603l600 603h-1200zM900 600l300 300v-600z" />
+<glyph unicode="&#x270f;" d="M-13 -13l333 112l-223 223zM187 403l214 -214l614 614l-214 214zM887 1103l214 -214l99 92q13 13 13 32.5t-13 33.5l-153 153q-15 13 -33 13t-33 -13z" />
+<glyph unicode="&#xe001;" d="M0 1200h1200l-500 -550v-550h300v-100h-800v100h300v550z" />
+<glyph unicode="&#xe002;" d="M14 84q18 -55 86 -75.5t147 5.5q65 21 109 69t44 90v606l600 155v-521q-64 16 -138 -7q-79 -26 -122.5 -83t-25.5 -111q18 -55 86 -75.5t147 4.5q70 23 111.5 63.5t41.5 95.5v881q0 10 -7 15.5t-17 2.5l-752 -193q-10 -3 -17 -12.5t-7 -19.5v-689q-64 17 -138 -7 q-79 -25 -122.5 -82t-25.5 -112z" />
+<glyph unicode="&#xe003;" d="M23 693q0 200 142 342t342 142t342 -142t142 -342q0 -142 -78 -261l300 -300q7 -8 7 -18t-7 -18l-109 -109q-8 -7 -18 -7t-18 7l-300 300q-119 -78 -261 -78q-200 0 -342 142t-142 342zM176 693q0 -136 97 -233t234 -97t233.5 96.5t96.5 233.5t-96.5 233.5t-233.5 96.5 t-234 -97t-97 -233z" />
+<glyph unicode="&#xe005;" d="M100 784q0 64 28 123t73 100.5t104.5 64t119 20.5t120 -38.5t104.5 -104.5q48 69 109.5 105t121.5 38t118.5 -20.5t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-149.5 152.5t-126.5 127.5 t-94 124.5t-33.5 117.5z" />
+<glyph unicode="&#xe006;" d="M-72 800h479l146 400h2l146 -400h472l-382 -278l145 -449l-384 275l-382 -275l146 447zM168 71l2 1z" />
+<glyph unicode="&#xe007;" d="M-72 800h479l146 400h2l146 -400h472l-382 -278l145 -449l-384 275l-382 -275l146 447zM168 71l2 1zM237 700l196 -142l-73 -226l192 140l195 -141l-74 229l193 140h-235l-77 211l-78 -211h-239z" />
+<glyph unicode="&#xe008;" d="M0 0v143l400 257v100q-37 0 -68.5 74.5t-31.5 125.5v200q0 124 88 212t212 88t212 -88t88 -212v-200q0 -51 -31.5 -125.5t-68.5 -74.5v-100l400 -257v-143h-1200z" />
+<glyph unicode="&#xe009;" d="M0 0v1100h1200v-1100h-1200zM100 100h100v100h-100v-100zM100 300h100v100h-100v-100zM100 500h100v100h-100v-100zM100 700h100v100h-100v-100zM100 900h100v100h-100v-100zM300 100h600v400h-600v-400zM300 600h600v400h-600v-400zM1000 100h100v100h-100v-100z M1000 300h100v100h-100v-100zM1000 500h100v100h-100v-100zM1000 700h100v100h-100v-100zM1000 900h100v100h-100v-100z" />
+<glyph unicode="&#xe010;" d="M0 50v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5zM0 650v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5zM600 50v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5zM600 650v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400 q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5z" />
+<glyph unicode="&#xe011;" d="M0 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM0 450v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200 q-21 0 -35.5 14.5t-14.5 35.5zM0 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5 t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 450v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5 v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM800 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM800 450v200q0 21 14.5 35.5t35.5 14.5h200 q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM800 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5z" />
+<glyph unicode="&#xe012;" d="M0 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM0 450q0 -21 14.5 -35.5t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v200q0 21 -14.5 35.5t-35.5 14.5h-200q-21 0 -35.5 -14.5 t-14.5 -35.5v-200zM0 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 50v200q0 21 14.5 35.5t35.5 14.5h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5 t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5zM400 450v200q0 21 14.5 35.5t35.5 14.5h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5zM400 850v200q0 21 14.5 35.5t35.5 14.5h700q21 0 35.5 -14.5t14.5 -35.5 v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5z" />
+<glyph unicode="&#xe013;" d="M29 454l419 -420l818 820l-212 212l-607 -607l-206 207z" />
+<glyph unicode="&#xe014;" d="M106 318l282 282l-282 282l212 212l282 -282l282 282l212 -212l-282 -282l282 -282l-212 -212l-282 282l-282 -282z" />
+<glyph unicode="&#xe015;" d="M23 693q0 200 142 342t342 142t342 -142t142 -342q0 -142 -78 -261l300 -300q7 -8 7 -18t-7 -18l-109 -109q-8 -7 -18 -7t-18 7l-300 300q-119 -78 -261 -78q-200 0 -342 142t-142 342zM176 693q0 -136 97 -233t234 -97t233.5 96.5t96.5 233.5t-96.5 233.5t-233.5 96.5 t-234 -97t-97 -233zM300 600v200h100v100h200v-100h100v-200h-100v-100h-200v100h-100z" />
+<glyph unicode="&#xe016;" d="M23 694q0 200 142 342t342 142t342 -142t142 -342q0 -141 -78 -262l300 -299q7 -7 7 -18t-7 -18l-109 -109q-8 -8 -18 -8t-18 8l-300 300q-119 -78 -261 -78q-200 0 -342 142t-142 342zM176 694q0 -136 97 -233t234 -97t233.5 97t96.5 233t-96.5 233t-233.5 97t-234 -97 t-97 -233zM300 601h400v200h-400v-200z" />
+<glyph unicode="&#xe017;" d="M23 600q0 183 105 331t272 210v-166q-103 -55 -165 -155t-62 -220q0 -177 125 -302t302 -125t302 125t125 302q0 120 -62 220t-165 155v166q167 -62 272 -210t105 -331q0 -118 -45.5 -224.5t-123 -184t-184 -123t-224.5 -45.5t-224.5 45.5t-184 123t-123 184t-45.5 224.5 zM500 750q0 -21 14.5 -35.5t35.5 -14.5h100q21 0 35.5 14.5t14.5 35.5v400q0 21 -14.5 35.5t-35.5 14.5h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-400z" />
+<glyph unicode="&#xe018;" d="M100 1h200v300h-200v-300zM400 1v500h200v-500h-200zM700 1v800h200v-800h-200zM1000 1v1200h200v-1200h-200z" />
+<glyph unicode="&#xe019;" d="M26 601q0 -33 6 -74l151 -38l2 -6q14 -49 38 -93l3 -5l-80 -134q45 -59 105 -105l133 81l5 -3q45 -26 94 -39l5 -2l38 -151q40 -5 74 -5q27 0 74 5l38 151l6 2q46 13 93 39l5 3l134 -81q56 44 104 105l-80 134l3 5q24 44 39 93l1 6l152 38q5 40 5 74q0 28 -5 73l-152 38 l-1 6q-16 51 -39 93l-3 5l80 134q-44 58 -104 105l-134 -81l-5 3q-45 25 -93 39l-6 1l-38 152q-40 5 -74 5q-27 0 -74 -5l-38 -152l-5 -1q-50 -14 -94 -39l-5 -3l-133 81q-59 -47 -105 -105l80 -134l-3 -5q-25 -47 -38 -93l-2 -6l-151 -38q-6 -48 -6 -73zM385 601 q0 88 63 151t152 63t152 -63t63 -151q0 -89 -63 -152t-152 -63t-152 63t-63 152z" />
+<glyph unicode="&#xe020;" d="M100 1025v50q0 10 7.5 17.5t17.5 7.5h275v100q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5v-100h275q10 0 17.5 -7.5t7.5 -17.5v-50q0 -11 -7 -18t-18 -7h-1050q-11 0 -18 7t-7 18zM200 100v800h900v-800q0 -41 -29.5 -71t-70.5 -30h-700q-41 0 -70.5 30 t-29.5 71zM300 100h100v700h-100v-700zM500 100h100v700h-100v-700zM500 1100h300v100h-300v-100zM700 100h100v700h-100v-700zM900 100h100v700h-100v-700z" />
+<glyph unicode="&#xe021;" d="M1 601l656 644l644 -644h-200v-600h-300v400h-300v-400h-300v600h-200z" />
+<glyph unicode="&#xe022;" d="M100 25v1150q0 11 7 18t18 7h475v-500h400v-675q0 -11 -7 -18t-18 -7h-850q-11 0 -18 7t-7 18zM700 800v300l300 -300h-300z" />
+<glyph unicode="&#xe023;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM500 500v400h100 v-300h200v-100h-300z" />
+<glyph unicode="&#xe024;" d="M-100 0l431 1200h209l-21 -300h162l-20 300h208l431 -1200h-538l-41 400h-242l-40 -400h-539zM488 500h224l-27 300h-170z" />
+<glyph unicode="&#xe025;" d="M0 0v400h490l-290 300h200v500h300v-500h200l-290 -300h490v-400h-1100zM813 200h175v100h-175v-100z" />
+<glyph unicode="&#xe026;" d="M1 600q0 122 47.5 233t127.5 191t191 127.5t233 47.5t233 -47.5t191 -127.5t127.5 -191t47.5 -233t-47.5 -233t-127.5 -191t-191 -127.5t-233 -47.5t-233 47.5t-191 127.5t-127.5 191t-47.5 233zM188 600q0 -170 121 -291t291 -121t291 121t121 291t-121 291t-291 121 t-291 -121t-121 -291zM350 600h150v300h200v-300h150l-250 -300z" />
+<glyph unicode="&#xe027;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM350 600l250 300 l250 -300h-150v-300h-200v300h-150z" />
+<glyph unicode="&#xe028;" d="M0 25v475l200 700h800l199 -700l1 -475q0 -11 -7 -18t-18 -7h-1150q-11 0 -18 7t-7 18zM200 500h200l50 -200h300l50 200h200l-97 500h-606z" />
+<glyph unicode="&#xe029;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -172 121.5 -293t292.5 -121t292.5 121t121.5 293q0 171 -121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM500 397v401 l297 -200z" />
+<glyph unicode="&#xe030;" d="M23 600q0 -118 45.5 -224.5t123 -184t184 -123t224.5 -45.5t224.5 45.5t184 123t123 184t45.5 224.5h-150q0 -177 -125 -302t-302 -125t-302 125t-125 302t125 302t302 125q136 0 246 -81l-146 -146h400v400l-145 -145q-157 122 -355 122q-118 0 -224.5 -45.5t-184 -123 t-123 -184t-45.5 -224.5z" />
+<glyph unicode="&#xe031;" d="M23 600q0 118 45.5 224.5t123 184t184 123t224.5 45.5q198 0 355 -122l145 145v-400h-400l147 147q-112 80 -247 80q-177 0 -302 -125t-125 -302h-150zM100 0v400h400l-147 -147q112 -80 247 -80q177 0 302 125t125 302h150q0 -118 -45.5 -224.5t-123 -184t-184 -123 t-224.5 -45.5q-198 0 -355 122z" />
+<glyph unicode="&#xe032;" d="M100 0h1100v1200h-1100v-1200zM200 100v900h900v-900h-900zM300 200v100h100v-100h-100zM300 400v100h100v-100h-100zM300 600v100h100v-100h-100zM300 800v100h100v-100h-100zM500 200h500v100h-500v-100zM500 400v100h500v-100h-500zM500 600v100h500v-100h-500z M500 800v100h500v-100h-500z" />
+<glyph unicode="&#xe033;" d="M0 100v600q0 41 29.5 70.5t70.5 29.5h100v200q0 82 59 141t141 59h300q82 0 141 -59t59 -141v-200h100q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-900q-41 0 -70.5 29.5t-29.5 70.5zM400 800h300v150q0 21 -14.5 35.5t-35.5 14.5h-200 q-21 0 -35.5 -14.5t-14.5 -35.5v-150z" />
+<glyph unicode="&#xe034;" d="M100 0v1100h100v-1100h-100zM300 400q60 60 127.5 84t127.5 17.5t122 -23t119 -30t110 -11t103 42t91 120.5v500q-40 -81 -101.5 -115.5t-127.5 -29.5t-138 25t-139.5 40t-125.5 25t-103 -29.5t-65 -115.5v-500z" />
+<glyph unicode="&#xe035;" d="M0 275q0 -11 7 -18t18 -7h50q11 0 18 7t7 18v300q0 127 70.5 231.5t184.5 161.5t245 57t245 -57t184.5 -161.5t70.5 -231.5v-300q0 -11 7 -18t18 -7h50q11 0 18 7t7 18v300q0 116 -49.5 227t-131 192.5t-192.5 131t-227 49.5t-227 -49.5t-192.5 -131t-131 -192.5 t-49.5 -227v-300zM200 20v460q0 8 6 14t14 6h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14zM800 20v460q0 8 6 14t14 6h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14z" />
+<glyph unicode="&#xe036;" d="M0 400h300l300 -200v800l-300 -200h-300v-400zM688 459l141 141l-141 141l71 71l141 -141l141 141l71 -71l-141 -141l141 -141l-71 -71l-141 141l-141 -141z" />
+<glyph unicode="&#xe037;" d="M0 400h300l300 -200v800l-300 -200h-300v-400zM700 857l69 53q111 -135 111 -310q0 -169 -106 -302l-67 54q86 110 86 248q0 146 -93 257z" />
+<glyph unicode="&#xe038;" d="M0 401v400h300l300 200v-800l-300 200h-300zM702 858l69 53q111 -135 111 -310q0 -170 -106 -303l-67 55q86 110 86 248q0 145 -93 257zM889 951l7 -8q123 -151 123 -344q0 -189 -119 -339l-7 -8l81 -66l6 8q142 178 142 405q0 230 -144 408l-6 8z" />
+<glyph unicode="&#xe039;" d="M0 0h500v500h-200v100h-100v-100h-200v-500zM0 600h100v100h400v100h100v100h-100v300h-500v-600zM100 100v300h300v-300h-300zM100 800v300h300v-300h-300zM200 200v100h100v-100h-100zM200 900h100v100h-100v-100zM500 500v100h300v-300h200v-100h-100v-100h-200v100 h-100v100h100v200h-200zM600 0v100h100v-100h-100zM600 1000h100v-300h200v-300h300v200h-200v100h200v500h-600v-200zM800 800v300h300v-300h-300zM900 0v100h300v-100h-300zM900 900v100h100v-100h-100zM1100 200v100h100v-100h-100z" />
+<glyph unicode="&#xe040;" d="M0 200h100v1000h-100v-1000zM100 0v100h300v-100h-300zM200 200v1000h100v-1000h-100zM500 0v91h100v-91h-100zM500 200v1000h200v-1000h-200zM700 0v91h100v-91h-100zM800 200v1000h100v-1000h-100zM900 0v91h200v-91h-200zM1000 200v1000h200v-1000h-200z" />
+<glyph unicode="&#xe041;" d="M0 700l1 475q0 10 7.5 17.5t17.5 7.5h474l700 -700l-500 -500zM148 953q0 -42 29 -71q30 -30 71.5 -30t71.5 30q29 29 29 71t-29 71q-30 30 -71.5 30t-71.5 -30q-29 -29 -29 -71z" />
+<glyph unicode="&#xe042;" d="M1 700l1 475q0 11 7 18t18 7h474l700 -700l-500 -500zM148 953q0 -42 30 -71q29 -30 71 -30t71 30q30 29 30 71t-30 71q-29 30 -71 30t-71 -30q-30 -29 -30 -71zM701 1200h100l700 -700l-500 -500l-50 50l450 450z" />
+<glyph unicode="&#xe043;" d="M100 0v1025l175 175h925v-1000l-100 -100v1000h-750l-100 -100h750v-1000h-900z" />
+<glyph unicode="&#xe044;" d="M200 0l450 444l450 -443v1150q0 20 -14.5 35t-35.5 15h-800q-21 0 -35.5 -15t-14.5 -35v-1151z" />
+<glyph unicode="&#xe045;" d="M0 100v700h200l100 -200h600l100 200h200v-700h-200v200h-800v-200h-200zM253 829l40 -124h592l62 124l-94 346q-2 11 -10 18t-18 7h-450q-10 0 -18 -7t-10 -18zM281 24l38 152q2 10 11.5 17t19.5 7h500q10 0 19.5 -7t11.5 -17l38 -152q2 -10 -3.5 -17t-15.5 -7h-600 q-10 0 -15.5 7t-3.5 17z" />
+<glyph unicode="&#xe046;" d="M0 200q0 -41 29.5 -70.5t70.5 -29.5h1000q41 0 70.5 29.5t29.5 70.5v600q0 41 -29.5 70.5t-70.5 29.5h-150q-4 8 -11.5 21.5t-33 48t-53 61t-69 48t-83.5 21.5h-200q-41 0 -82 -20.5t-70 -50t-52 -59t-34 -50.5l-12 -20h-150q-41 0 -70.5 -29.5t-29.5 -70.5v-600z M356 500q0 100 72 172t172 72t172 -72t72 -172t-72 -172t-172 -72t-172 72t-72 172zM494 500q0 -44 31 -75t75 -31t75 31t31 75t-31 75t-75 31t-75 -31t-31 -75zM900 700v100h100v-100h-100z" />
+<glyph unicode="&#xe047;" d="M53 0h365v66q-41 0 -72 11t-49 38t1 71l92 234h391l82 -222q16 -45 -5.5 -88.5t-74.5 -43.5v-66h417v66q-34 1 -74 43q-18 19 -33 42t-21 37l-6 13l-385 998h-93l-399 -1006q-24 -48 -52 -75q-12 -12 -33 -25t-36 -20l-15 -7v-66zM416 521l178 457l46 -140l116 -317h-340 z" />
+<glyph unicode="&#xe048;" d="M100 0v89q41 7 70.5 32.5t29.5 65.5v827q0 28 -1 39.5t-5.5 26t-15.5 21t-29 14t-49 14.5v71l471 -1q120 0 213 -88t93 -228q0 -55 -11.5 -101.5t-28 -74t-33.5 -47.5t-28 -28l-12 -7q8 -3 21.5 -9t48 -31.5t60.5 -58t47.5 -91.5t21.5 -129q0 -84 -59 -156.5t-142 -111 t-162 -38.5h-500zM400 200h161q89 0 153 48.5t64 132.5q0 90 -62.5 154.5t-156.5 64.5h-159v-400zM400 700h139q76 0 130 61.5t54 138.5q0 82 -84 130.5t-239 48.5v-379z" />
+<glyph unicode="&#xe049;" d="M200 0v57q77 7 134.5 40.5t65.5 80.5l173 849q10 56 -10 74t-91 37q-6 1 -10.5 2.5t-9.5 2.5v57h425l2 -57q-33 -8 -62 -25.5t-46 -37t-29.5 -38t-17.5 -30.5l-5 -12l-128 -825q-10 -52 14 -82t95 -36v-57h-500z" />
+<glyph unicode="&#xe050;" d="M-75 200h75v800h-75l125 167l125 -167h-75v-800h75l-125 -167zM300 900v300h150h700h150v-300h-50q0 29 -8 48.5t-18.5 30t-33.5 15t-39.5 5.5t-50.5 1h-200v-850l100 -50v-100h-400v100l100 50v850h-200q-34 0 -50.5 -1t-40 -5.5t-33.5 -15t-18.5 -30t-8.5 -48.5h-49z " />
+<glyph unicode="&#xe051;" d="M33 51l167 125v-75h800v75l167 -125l-167 -125v75h-800v-75zM100 901v300h150h700h150v-300h-50q0 29 -8 48.5t-18 30t-33.5 15t-40 5.5t-50.5 1h-200v-650l100 -50v-100h-400v100l100 50v650h-200q-34 0 -50.5 -1t-39.5 -5.5t-33.5 -15t-18.5 -30t-8 -48.5h-50z" />
+<glyph unicode="&#xe052;" d="M0 50q0 -20 14.5 -35t35.5 -15h1100q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM0 350q0 -20 14.5 -35t35.5 -15h800q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-800q-21 0 -35.5 -14.5t-14.5 -35.5 v-100zM0 650q0 -20 14.5 -35t35.5 -15h1000q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1000q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM0 950q0 -20 14.5 -35t35.5 -15h600q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-600q-21 0 -35.5 -14.5 t-14.5 -35.5v-100z" />
+<glyph unicode="&#xe053;" d="M0 50q0 -20 14.5 -35t35.5 -15h1100q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM0 650q0 -20 14.5 -35t35.5 -15h1100q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5 v-100zM200 350q0 -20 14.5 -35t35.5 -15h700q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-700q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM200 950q0 -20 14.5 -35t35.5 -15h700q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-700q-21 0 -35.5 -14.5 t-14.5 -35.5v-100z" />
+<glyph unicode="&#xe054;" d="M0 50v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15t-14.5 35zM100 650v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1000q-21 0 -35.5 15 t-14.5 35zM300 350v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800q-21 0 -35.5 15t-14.5 35zM500 950v100q0 21 14.5 35.5t35.5 14.5h600q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-600 q-21 0 -35.5 15t-14.5 35z" />
+<glyph unicode="&#xe055;" d="M0 50v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15t-14.5 35zM0 350v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15 t-14.5 35zM0 650v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15t-14.5 35zM0 950v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100 q-21 0 -35.5 15t-14.5 35z" />
+<glyph unicode="&#xe056;" d="M0 50v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35zM0 350v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15 t-14.5 35zM0 650v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35zM0 950v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15 t-14.5 35zM300 50v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800q-21 0 -35.5 15t-14.5 35zM300 350v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800 q-21 0 -35.5 15t-14.5 35zM300 650v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800q-21 0 -35.5 15t-14.5 35zM300 950v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15 h-800q-21 0 -35.5 15t-14.5 35z" />
+<glyph unicode="&#xe057;" d="M-101 500v100h201v75l166 -125l-166 -125v75h-201zM300 0h100v1100h-100v-1100zM500 50q0 -20 14.5 -35t35.5 -15h600q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-600q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM500 350q0 -20 14.5 -35t35.5 -15h300q20 0 35 15t15 35 v100q0 21 -15 35.5t-35 14.5h-300q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM500 650q0 -20 14.5 -35t35.5 -15h500q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM500 950q0 -20 14.5 -35t35.5 -15h100q20 0 35 15t15 35v100 q0 21 -15 35.5t-35 14.5h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-100z" />
+<glyph unicode="&#xe058;" d="M1 50q0 -20 14.5 -35t35.5 -15h600q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-600q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM1 350q0 -20 14.5 -35t35.5 -15h300q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-300q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM1 650 q0 -20 14.5 -35t35.5 -15h500q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM1 950q0 -20 14.5 -35t35.5 -15h100q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM801 0v1100h100v-1100 h-100zM934 550l167 -125v75h200v100h-200v75z" />
+<glyph unicode="&#xe059;" d="M0 275v650q0 31 22 53t53 22h750q31 0 53 -22t22 -53v-650q0 -31 -22 -53t-53 -22h-750q-31 0 -53 22t-22 53zM900 600l300 300v-600z" />
+<glyph unicode="&#xe060;" d="M0 44v1012q0 18 13 31t31 13h1112q19 0 31.5 -13t12.5 -31v-1012q0 -18 -12.5 -31t-31.5 -13h-1112q-18 0 -31 13t-13 31zM100 263l247 182l298 -131l-74 156l293 318l236 -288v500h-1000v-737zM208 750q0 56 39 95t95 39t95 -39t39 -95t-39 -95t-95 -39t-95 39t-39 95z " />
+<glyph unicode="&#xe062;" d="M148 745q0 124 60.5 231.5t165 172t226.5 64.5q123 0 227 -63t164.5 -169.5t60.5 -229.5t-73 -272q-73 -114 -166.5 -237t-150.5 -189l-57 -66q-10 9 -27 26t-66.5 70.5t-96 109t-104 135.5t-100.5 155q-63 139 -63 262zM342 772q0 -107 75.5 -182.5t181.5 -75.5 q107 0 182.5 75.5t75.5 182.5t-75.5 182t-182.5 75t-182 -75.5t-75 -181.5z" />
+<glyph unicode="&#xe063;" d="M1 600q0 122 47.5 233t127.5 191t191 127.5t233 47.5t233 -47.5t191 -127.5t127.5 -191t47.5 -233t-47.5 -233t-127.5 -191t-191 -127.5t-233 -47.5t-233 47.5t-191 127.5t-127.5 191t-47.5 233zM173 600q0 -177 125.5 -302t301.5 -125v854q-176 0 -301.5 -125 t-125.5 -302z" />
+<glyph unicode="&#xe064;" d="M117 406q0 94 34 186t88.5 172.5t112 159t115 177t87.5 194.5q21 -71 57.5 -142.5t76 -130.5t83 -118.5t82 -117t70 -116t50 -125.5t18.5 -136q0 -89 -39 -165.5t-102 -126.5t-140 -79.5t-156 -33.5q-114 6 -211.5 53t-161.5 139t-64 210zM243 414q14 -82 59.5 -136 t136.5 -80l16 98q-7 6 -18 17t-34 48t-33 77q-15 73 -14 143.5t10 122.5l9 51q-92 -110 -119.5 -185t-12.5 -156z" />
+<glyph unicode="&#xe065;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5q366 -6 397 -14l-186 -186h-311q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v125l200 200v-225q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5 t-117.5 282.5zM436 341l161 50l412 412l-114 113l-405 -405zM995 1015l113 -113l113 113l-21 85l-92 28z" />
+<glyph unicode="&#xe066;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h261l2 -80q-133 -32 -218 -120h-145q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5l200 153v-53q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5 zM423 524q30 38 81.5 64t103 35.5t99 14t77.5 3.5l29 -1v-209l360 324l-359 318v-216q-7 0 -19 -1t-48 -8t-69.5 -18.5t-76.5 -37t-76.5 -59t-62 -88t-39.5 -121.5z" />
+<glyph unicode="&#xe067;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h300q61 0 127 -23l-178 -177h-349q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v69l200 200v-169q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5 t-117.5 282.5zM342 632l283 -284l567 567l-137 137l-430 -431l-146 147z" />
+<glyph unicode="&#xe068;" d="M0 603l300 296v-198h200v200h-200l300 300l295 -300h-195v-200h200v198l300 -296l-300 -300v198h-200v-200h195l-295 -300l-300 300h200v200h-200v-198z" />
+<glyph unicode="&#xe069;" d="M200 50v1000q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-437l500 487v-1100l-500 488v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5z" />
+<glyph unicode="&#xe070;" d="M0 50v1000q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-437l500 487v-487l500 487v-1100l-500 488v-488l-500 488v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5z" />
+<glyph unicode="&#xe071;" d="M136 550l564 550v-487l500 487v-1100l-500 488v-488z" />
+<glyph unicode="&#xe072;" d="M200 0l900 550l-900 550v-1100z" />
+<glyph unicode="&#xe073;" d="M200 150q0 -21 14.5 -35.5t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v800q0 21 -14.5 35.5t-35.5 14.5h-200q-21 0 -35.5 -14.5t-14.5 -35.5v-800zM600 150q0 -21 14.5 -35.5t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v800q0 21 -14.5 35.5t-35.5 14.5h-200 q-21 0 -35.5 -14.5t-14.5 -35.5v-800z" />
+<glyph unicode="&#xe074;" d="M200 150q0 -20 14.5 -35t35.5 -15h800q21 0 35.5 15t14.5 35v800q0 21 -14.5 35.5t-35.5 14.5h-800q-21 0 -35.5 -14.5t-14.5 -35.5v-800z" />
+<glyph unicode="&#xe075;" d="M0 0v1100l500 -487v487l564 -550l-564 -550v488z" />
+<glyph unicode="&#xe076;" d="M0 0v1100l500 -487v487l500 -487v437q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-1000q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v438l-500 -488v488z" />
+<glyph unicode="&#xe077;" d="M300 0v1100l500 -487v437q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-1000q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v438z" />
+<glyph unicode="&#xe078;" d="M100 250v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5zM100 500h1100l-550 564z" />
+<glyph unicode="&#xe079;" d="M185 599l592 -592l240 240l-353 353l353 353l-240 240z" />
+<glyph unicode="&#xe080;" d="M272 194l353 353l-353 353l241 240l572 -571l21 -22l-1 -1v-1l-592 -591z" />
+<glyph unicode="&#xe081;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM300 500h200v-200h200v200h200v200h-200v200h-200v-200h-200v-200z" />
+<glyph unicode="&#xe082;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM300 500h600v200h-600v-200z" />
+<glyph unicode="&#xe083;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM246 459l213 -213l141 142l141 -142l213 213l-142 141l142 141l-213 212l-141 -141l-141 142l-212 -213l141 -141 z" />
+<glyph unicode="&#xe084;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM270 551l276 -277l411 411l-175 174l-236 -236l-102 102z" />
+<glyph unicode="&#xe085;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM364 700h143q4 0 11.5 -1t11 -1t6.5 3t3 9t1 11t3.5 8.5t3.5 6t5.5 4t6.5 2.5t9 1.5t9 0.5h11.5h12.5 q19 0 30 -10t11 -26q0 -22 -4 -28t-27 -22q-5 -1 -12.5 -3t-27 -13.5t-34 -27t-26.5 -46t-11 -68.5h200q5 3 14 8t31.5 25.5t39.5 45.5t31 69t14 94q0 51 -17.5 89t-42 58t-58.5 32t-58.5 15t-51.5 3q-50 0 -90.5 -12t-75 -38.5t-53.5 -74.5t-19 -114zM500 300h200v100h-200 v-100z" />
+<glyph unicode="&#xe086;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM400 300h400v100h-100v300h-300v-100h100v-200h-100v-100zM500 800h200v100h-200v-100z" />
+<glyph unicode="&#xe087;" d="M0 500v200h195q31 125 98.5 199.5t206.5 100.5v200h200v-200q54 -20 113 -60t112.5 -105.5t71.5 -134.5h203v-200h-203q-25 -102 -116.5 -186t-180.5 -117v-197h-200v197q-140 27 -208 102.5t-98 200.5h-194zM290 500q24 -73 79.5 -127.5t130.5 -78.5v206h200v-206 q149 48 201 206h-201v200h200q-25 74 -75.5 127t-124.5 77v-204h-200v203q-75 -23 -130 -77t-79 -126h209v-200h-210z" />
+<glyph unicode="&#xe088;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM356 465l135 135 l-135 135l109 109l135 -135l135 135l109 -109l-135 -135l135 -135l-109 -109l-135 135l-135 -135z" />
+<glyph unicode="&#xe089;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM322 537l141 141 l87 -87l204 205l142 -142l-346 -345z" />
+<glyph unicode="&#xe090;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -115 62 -215l568 567q-100 62 -216 62q-171 0 -292.5 -121.5t-121.5 -292.5zM391 245q97 -59 209 -59q171 0 292.5 121.5t121.5 292.5 q0 112 -59 209z" />
+<glyph unicode="&#xe091;" d="M0 547l600 453v-300h600v-300h-600v-301z" />
+<glyph unicode="&#xe092;" d="M0 400v300h600v300l600 -453l-600 -448v301h-600z" />
+<glyph unicode="&#xe093;" d="M204 600l450 600l444 -600h-298v-600h-300v600h-296z" />
+<glyph unicode="&#xe094;" d="M104 600h296v600h300v-600h298l-449 -600z" />
+<glyph unicode="&#xe095;" d="M0 200q6 132 41 238.5t103.5 193t184 138t271.5 59.5v271l600 -453l-600 -448v301q-95 -2 -183 -20t-170 -52t-147 -92.5t-100 -135.5z" />
+<glyph unicode="&#xe096;" d="M0 0v400l129 -129l294 294l142 -142l-294 -294l129 -129h-400zM635 777l142 -142l294 294l129 -129v400h-400l129 -129z" />
+<glyph unicode="&#xe097;" d="M34 176l295 295l-129 129h400v-400l-129 130l-295 -295zM600 600v400l129 -129l295 295l142 -141l-295 -295l129 -130h-400z" />
+<glyph unicode="&#xe101;" d="M23 600q0 118 45.5 224.5t123 184t184 123t224.5 45.5t224.5 -45.5t184 -123t123 -184t45.5 -224.5t-45.5 -224.5t-123 -184t-184 -123t-224.5 -45.5t-224.5 45.5t-184 123t-123 184t-45.5 224.5zM456 851l58 -302q4 -20 21.5 -34.5t37.5 -14.5h54q20 0 37.5 14.5 t21.5 34.5l58 302q4 20 -8 34.5t-32 14.5h-207q-21 0 -33 -14.5t-8 -34.5zM500 300h200v100h-200v-100z" />
+<glyph unicode="&#xe102;" d="M0 800h100v-200h400v300h200v-300h400v200h100v100h-111q1 1 1 6.5t-1.5 15t-3.5 17.5l-34 172q-11 39 -41.5 63t-69.5 24q-32 0 -61 -17l-239 -144q-22 -13 -40 -35q-19 24 -40 36l-238 144q-33 18 -62 18q-39 0 -69.5 -23t-40.5 -61l-35 -177q-2 -8 -3 -18t-1 -15v-6 h-111v-100zM100 0h400v400h-400v-400zM200 900q-3 0 14 48t36 96l18 47l213 -191h-281zM700 0v400h400v-400h-400zM731 900l202 197q5 -12 12 -32.5t23 -64t25 -72t7 -28.5h-269z" />
+<glyph unicode="&#xe103;" d="M0 -22v143l216 193q-9 53 -13 83t-5.5 94t9 113t38.5 114t74 124q47 60 99.5 102.5t103 68t127.5 48t145.5 37.5t184.5 43.5t220 58.5q0 -189 -22 -343t-59 -258t-89 -181.5t-108.5 -120t-122 -68t-125.5 -30t-121.5 -1.5t-107.5 12.5t-87.5 17t-56.5 7.5l-99 -55z M238.5 300.5q19.5 -6.5 86.5 76.5q55 66 367 234q70 38 118.5 69.5t102 79t99 111.5t86.5 148q22 50 24 60t-6 19q-7 5 -17 5t-26.5 -14.5t-33.5 -39.5q-35 -51 -113.5 -108.5t-139.5 -89.5l-61 -32q-369 -197 -458 -401q-48 -111 -28.5 -117.5z" />
+<glyph unicode="&#xe104;" d="M111 408q0 -33 5 -63q9 -56 44 -119.5t105 -108.5q31 -21 64 -16t62 23.5t57 49.5t48 61.5t35 60.5q32 66 39 184.5t-13 157.5q79 -80 122 -164t26 -184q-5 -33 -20.5 -69.5t-37.5 -80.5q-10 -19 -14.5 -29t-12 -26t-9 -23.5t-3 -19t2.5 -15.5t11 -9.5t19.5 -5t30.5 2.5 t42 8q57 20 91 34t87.5 44.5t87 64t65.5 88.5t47 122q38 172 -44.5 341.5t-246.5 278.5q22 -44 43 -129q39 -159 -32 -154q-15 2 -33 9q-79 33 -120.5 100t-44 175.5t48.5 257.5q-13 -8 -34 -23.5t-72.5 -66.5t-88.5 -105.5t-60 -138t-8 -166.5q2 -12 8 -41.5t8 -43t6 -39.5 t3.5 -39.5t-1 -33.5t-6 -31.5t-13.5 -24t-21 -20.5t-31 -12q-38 -10 -67 13t-40.5 61.5t-15 81.5t10.5 75q-52 -46 -83.5 -101t-39 -107t-7.5 -85z" />
+<glyph unicode="&#xe105;" d="M-61 600l26 40q6 10 20 30t49 63.5t74.5 85.5t97 90t116.5 83.5t132.5 59t145.5 23.5t145.5 -23.5t132.5 -59t116.5 -83.5t97 -90t74.5 -85.5t49 -63.5t20 -30l26 -40l-26 -40q-6 -10 -20 -30t-49 -63.5t-74.5 -85.5t-97 -90t-116.5 -83.5t-132.5 -59t-145.5 -23.5 t-145.5 23.5t-132.5 59t-116.5 83.5t-97 90t-74.5 85.5t-49 63.5t-20 30zM120 600q7 -10 40.5 -58t56 -78.5t68 -77.5t87.5 -75t103 -49.5t125 -21.5t123.5 20t100.5 45.5t85.5 71.5t66.5 75.5t58 81.5t47 66q-1 1 -28.5 37.5t-42 55t-43.5 53t-57.5 63.5t-58.5 54 q49 -74 49 -163q0 -124 -88 -212t-212 -88t-212 88t-88 212q0 85 46 158q-102 -87 -226 -258zM377 656q49 -124 154 -191l105 105q-37 24 -75 72t-57 84l-20 36z" />
+<glyph unicode="&#xe106;" d="M-61 600l26 40q6 10 20 30t49 63.5t74.5 85.5t97 90t116.5 83.5t132.5 59t145.5 23.5q61 0 121 -17l37 142h148l-314 -1200h-148l37 143q-82 21 -165 71.5t-140 102t-109.5 112t-72 88.5t-29.5 43zM120 600q210 -282 393 -336l37 141q-107 18 -178.5 101.5t-71.5 193.5 q0 85 46 158q-102 -87 -226 -258zM377 656q49 -124 154 -191l47 47l23 87q-30 28 -59 69t-44 68l-14 26zM780 161l38 145q22 15 44.5 34t46 44t40.5 44t41 50.5t33.5 43.5t33 44t24.5 34q-97 127 -140 175l39 146q67 -54 131.5 -125.5t87.5 -103.5t36 -52l26 -40l-26 -40 q-7 -12 -25.5 -38t-63.5 -79.5t-95.5 -102.5t-124 -100t-146.5 -79z" />
+<glyph unicode="&#xe107;" d="M-97.5 34q13.5 -34 50.5 -34h1294q37 0 50.5 35.5t-7.5 67.5l-642 1056q-20 34 -48 36.5t-48 -29.5l-642 -1066q-21 -32 -7.5 -66zM155 200l445 723l445 -723h-345v100h-200v-100h-345zM500 600l100 -300l100 300v100h-200v-100z" />
+<glyph unicode="&#xe108;" d="M100 262v41q0 20 11 44.5t26 38.5l363 325v339q0 62 44 106t106 44t106 -44t44 -106v-339l363 -325q15 -14 26 -38.5t11 -44.5v-41q0 -20 -12 -26.5t-29 5.5l-359 249v-263q100 -91 100 -113v-64q0 -20 -13 -28.5t-32 0.5l-94 78h-222l-94 -78q-19 -9 -32 -0.5t-13 28.5 v64q0 22 100 113v263l-359 -249q-17 -12 -29 -5.5t-12 26.5z" />
+<glyph unicode="&#xe109;" d="M0 50q0 -20 14.5 -35t35.5 -15h1000q21 0 35.5 15t14.5 35v750h-1100v-750zM0 900h1100v150q0 21 -14.5 35.5t-35.5 14.5h-150v100h-100v-100h-500v100h-100v-100h-150q-21 0 -35.5 -14.5t-14.5 -35.5v-150zM100 100v100h100v-100h-100zM100 300v100h100v-100h-100z M100 500v100h100v-100h-100zM300 100v100h100v-100h-100zM300 300v100h100v-100h-100zM300 500v100h100v-100h-100zM500 100v100h100v-100h-100zM500 300v100h100v-100h-100zM500 500v100h100v-100h-100zM700 100v100h100v-100h-100zM700 300v100h100v-100h-100zM700 500 v100h100v-100h-100zM900 100v100h100v-100h-100zM900 300v100h100v-100h-100zM900 500v100h100v-100h-100z" />
+<glyph unicode="&#xe110;" d="M0 200v200h259l600 600h241v198l300 -295l-300 -300v197h-159l-600 -600h-341zM0 800h259l122 -122l141 142l-181 180h-341v-200zM678 381l141 142l122 -123h159v198l300 -295l-300 -300v197h-241z" />
+<glyph unicode="&#xe111;" d="M0 400v600q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-596l-304 -300v300h-100q-41 0 -70.5 29.5t-29.5 70.5z" />
+<glyph unicode="&#xe112;" d="M100 600v200h300v-250q0 -113 6 -145q17 -92 102 -117q39 -11 92 -11q37 0 66.5 5.5t50 15.5t36 24t24 31.5t14 37.5t7 42t2.5 45t0 47v25v250h300v-200q0 -42 -3 -83t-15 -104t-31.5 -116t-58 -109.5t-89 -96.5t-129 -65.5t-174.5 -25.5t-174.5 25.5t-129 65.5t-89 96.5 t-58 109.5t-31.5 116t-15 104t-3 83zM100 900v300h300v-300h-300zM800 900v300h300v-300h-300z" />
+<glyph unicode="&#xe113;" d="M-30 411l227 -227l352 353l353 -353l226 227l-578 579z" />
+<glyph unicode="&#xe114;" d="M70 797l580 -579l578 579l-226 227l-353 -353l-352 353z" />
+<glyph unicode="&#xe115;" d="M-198 700l299 283l300 -283h-203v-400h385l215 -200h-800v600h-196zM402 1000l215 -200h381v-400h-198l299 -283l299 283h-200v600h-796z" />
+<glyph unicode="&#xe116;" d="M18 939q-5 24 10 42q14 19 39 19h896l38 162q5 17 18.5 27.5t30.5 10.5h94q20 0 35 -14.5t15 -35.5t-15 -35.5t-35 -14.5h-54l-201 -961q-2 -4 -6 -10.5t-19 -17.5t-33 -11h-31v-50q0 -20 -14.5 -35t-35.5 -15t-35.5 15t-14.5 35v50h-300v-50q0 -20 -14.5 -35t-35.5 -15 t-35.5 15t-14.5 35v50h-50q-21 0 -35.5 15t-14.5 35q0 21 14.5 35.5t35.5 14.5h535l48 200h-633q-32 0 -54.5 21t-27.5 43z" />
+<glyph unicode="&#xe117;" d="M0 0v800h1200v-800h-1200zM0 900v100h200q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5h500v-100h-1200z" />
+<glyph unicode="&#xe118;" d="M1 0l300 700h1200l-300 -700h-1200zM1 400v600h200q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5h500v-200h-1000z" />
+<glyph unicode="&#xe119;" d="M302 300h198v600h-198l298 300l298 -300h-198v-600h198l-298 -300z" />
+<glyph unicode="&#xe120;" d="M0 600l300 298v-198h600v198l300 -298l-300 -297v197h-600v-197z" />
+<glyph unicode="&#xe121;" d="M0 100v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM31 400l172 739q5 22 23 41.5t38 19.5h672q19 0 37.5 -22.5t23.5 -45.5l172 -732h-1138zM800 100h100v100h-100v-100z M1000 100h100v100h-100v-100z" />
+<glyph unicode="&#xe122;" d="M-101 600v50q0 24 25 49t50 38l25 13v-250l-11 5.5t-24 14t-30 21.5t-24 27.5t-11 31.5zM100 500v250v8v8v7t0.5 7t1.5 5.5t2 5t3 4t4.5 3.5t6 1.5t7.5 0.5h200l675 250v-850l-675 200h-38l47 -276q2 -12 -3 -17.5t-11 -6t-21 -0.5h-8h-83q-20 0 -34.5 14t-18.5 35 q-55 337 -55 351zM1100 200v850q0 21 14.5 35.5t35.5 14.5q20 0 35 -14.5t15 -35.5v-850q0 -20 -15 -35t-35 -15q-21 0 -35.5 15t-14.5 35z" />
+<glyph unicode="&#xe123;" d="M74 350q0 21 13.5 35.5t33.5 14.5h18l117 173l63 327q15 77 76 140t144 83l-18 32q-6 19 3 32t29 13h94q20 0 29 -10.5t3 -29.5q-18 -36 -18 -37q83 -19 144 -82.5t76 -140.5l63 -327l118 -173h17q20 0 33.5 -14.5t13.5 -35.5q0 -20 -13 -40t-31 -27q-8 -3 -23 -8.5 t-65 -20t-103 -25t-132.5 -19.5t-158.5 -9q-125 0 -245.5 20.5t-178.5 40.5l-58 20q-18 7 -31 27.5t-13 40.5zM497 110q12 -49 40 -79.5t63 -30.5t63 30.5t39 79.5q-48 -6 -102 -6t-103 6z" />
+<glyph unicode="&#xe124;" d="M21 445l233 -45l-78 -224l224 78l45 -233l155 179l155 -179l45 233l224 -78l-78 224l234 45l-180 155l180 156l-234 44l78 225l-224 -78l-45 233l-155 -180l-155 180l-45 -233l-224 78l78 -225l-233 -44l179 -156z" />
+<glyph unicode="&#xe125;" d="M0 200h200v600h-200v-600zM300 275q0 -75 100 -75h61q124 -100 139 -100h250q46 0 83 57l238 344q29 31 29 74v100q0 44 -30.5 84.5t-69.5 40.5h-328q28 118 28 125v150q0 44 -30.5 84.5t-69.5 40.5h-50q-27 0 -51 -20t-38 -48l-96 -198l-145 -196q-20 -26 -20 -63v-400z M400 300v375l150 213l100 212h50v-175l-50 -225h450v-125l-250 -375h-214l-136 100h-100z" />
+<glyph unicode="&#xe126;" d="M0 400v600h200v-600h-200zM300 525v400q0 75 100 75h61q124 100 139 100h250q46 0 83 -57l238 -344q29 -31 29 -74v-100q0 -44 -30.5 -84.5t-69.5 -40.5h-328q28 -118 28 -125v-150q0 -44 -30.5 -84.5t-69.5 -40.5h-50q-27 0 -51 20t-38 48l-96 198l-145 196 q-20 26 -20 63zM400 525l150 -212l100 -213h50v175l-50 225h450v125l-250 375h-214l-136 -100h-100v-375z" />
+<glyph unicode="&#xe127;" d="M8 200v600h200v-600h-200zM308 275v525q0 17 14 35.5t28 28.5l14 9l362 230q14 6 25 6q17 0 29 -12l109 -112q14 -14 14 -34q0 -18 -11 -32l-85 -121h302q85 0 138.5 -38t53.5 -110t-54.5 -111t-138.5 -39h-107l-130 -339q-7 -22 -20.5 -41.5t-28.5 -19.5h-341 q-7 0 -90 81t-83 94zM408 289l100 -89h293l131 339q6 21 19.5 41t28.5 20h203q16 0 25 15t9 36q0 20 -9 34.5t-25 14.5h-457h-6.5h-7.5t-6.5 0.5t-6 1t-5 1.5t-5.5 2.5t-4 4t-4 5.5q-5 12 -5 20q0 14 10 27l147 183l-86 83l-339 -236v-503z" />
+<glyph unicode="&#xe128;" d="M-101 651q0 72 54 110t139 38l302 -1l-85 121q-11 16 -11 32q0 21 14 34l109 113q13 12 29 12q11 0 25 -6l365 -230q7 -4 17 -10.5t26.5 -26t16.5 -36.5v-526q0 -13 -86 -93.5t-94 -80.5h-341q-16 0 -29.5 20t-19.5 41l-130 339h-107q-84 0 -139 39t-55 111zM-1 601h222 q15 0 28.5 -20.5t19.5 -40.5l131 -339h293l107 89v502l-343 237l-87 -83l145 -184q10 -11 10 -26q0 -11 -5 -20q-1 -3 -3.5 -5.5l-4 -4t-5 -2.5t-5.5 -1.5t-6.5 -1t-6.5 -0.5h-7.5h-6.5h-476v-100zM1000 201v600h200v-600h-200z" />
+<glyph unicode="&#xe129;" d="M97 719l230 -363q4 -6 10.5 -15.5t26 -25t36.5 -15.5h525q13 0 94 83t81 90v342q0 15 -20 28.5t-41 19.5l-339 131v106q0 84 -39 139t-111 55t-110 -53.5t-38 -138.5v-302l-121 84q-15 12 -33.5 11.5t-32.5 -13.5l-112 -110q-22 -22 -6 -53zM172 739l83 86l183 -146 q22 -18 47 -5q3 1 5.5 3.5l4 4t2.5 5t1.5 5.5t1 6.5t0.5 6.5v7.5v6.5v456q0 22 25 31t50 -0.5t25 -30.5v-202q0 -16 20 -29.5t41 -19.5l339 -130v-294l-89 -100h-503zM400 0v200h600v-200h-600z" />
+<glyph unicode="&#xe130;" d="M2 585q-16 -31 6 -53l112 -110q13 -13 32 -13.5t34 10.5l121 85q0 -51 -0.5 -153.5t-0.5 -148.5q0 -84 38.5 -138t110.5 -54t111 55t39 139v106l339 131q20 6 40.5 19.5t20.5 28.5v342q0 7 -81 90t-94 83h-525q-17 0 -35.5 -14t-28.5 -28l-10 -15zM77 565l236 339h503 l89 -100v-294l-340 -130q-20 -6 -40 -20t-20 -29v-202q0 -22 -25 -31t-50 0t-25 31v456v14.5t-1.5 11.5t-5 12t-9.5 7q-24 13 -46 -5l-184 -146zM305 1104v200h600v-200h-600z" />
+<glyph unicode="&#xe131;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q162 0 299.5 -80t217.5 -218t80 -300t-80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM298 701l2 -201h300l-2 -194l402 294l-402 298v-197h-300z" />
+<glyph unicode="&#xe132;" d="M0 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t231.5 47.5q122 0 232.5 -47.5t190.5 -127.5t127.5 -190.5t47.5 -232.5q0 -162 -80 -299.5t-218 -217.5t-300 -80t-299.5 80t-217.5 217.5t-80 299.5zM200 600l402 -294l-2 194h300l2 201h-300v197z" />
+<glyph unicode="&#xe133;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q162 0 299.5 -80t217.5 -218t80 -300t-80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM300 600h200v-300h200v300h200l-300 400z" />
+<glyph unicode="&#xe134;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q162 0 299.5 -80t217.5 -218t80 -300t-80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM300 600l300 -400l300 400h-200v300h-200v-300h-200z" />
+<glyph unicode="&#xe135;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q121 0 231.5 -47.5t190.5 -127.5t127.5 -190.5t47.5 -232.5q0 -162 -80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM254 780q-8 -33 5.5 -92.5t7.5 -87.5q0 -9 17 -44t16 -60 q12 0 23 -5.5t23 -15t20 -13.5q24 -12 108 -42q22 -8 53 -31.5t59.5 -38.5t57.5 -11q8 -18 -15 -55t-20 -57q42 -71 87 -80q0 -6 -3 -15.5t-3.5 -14.5t4.5 -17q104 -3 221 112q30 29 47 47t34.5 49t20.5 62q-14 9 -37 9.5t-36 7.5q-14 7 -49 15t-52 19q-9 0 -39.5 -0.5 t-46.5 -1.5t-39 -6.5t-39 -16.5q-50 -35 -66 -12q-4 2 -3.5 25.5t0.5 25.5q-6 13 -26.5 17t-24.5 7q2 22 -2 41t-16.5 28t-38.5 -20q-23 -25 -42 4q-19 28 -8 58q6 16 22 22q6 -1 26 -1.5t33.5 -4t19.5 -13.5q12 -19 32 -37.5t34 -27.5l14 -8q0 3 9.5 39.5t5.5 57.5 q-4 23 14.5 44.5t22.5 31.5q5 14 10 35t8.5 31t15.5 22.5t34 21.5q-6 18 10 37q8 0 23.5 -1.5t24.5 -1.5t20.5 4.5t20.5 15.5q-10 23 -30.5 42.5t-38 30t-49 26.5t-43.5 23q11 39 2 44q31 -13 58 -14.5t39 3.5l11 4q7 36 -16.5 53.5t-64.5 28.5t-56 23q-19 -3 -37 0 q-15 -12 -36.5 -21t-34.5 -12t-44 -8t-39 -6q-15 -3 -45.5 0.5t-45.5 -2.5q-21 -7 -52 -26.5t-34 -34.5q-3 -11 6.5 -22.5t8.5 -18.5q-3 -34 -27.5 -90.5t-29.5 -79.5zM518 916q3 12 16 30t16 25q10 -10 18.5 -10t14 6t14.5 14.5t16 12.5q0 -24 17 -66.5t17 -43.5 q-9 2 -31 5t-36 5t-32 8t-30 14zM692 1003h1h-1z" />
+<glyph unicode="&#xe136;" d="M0 164.5q0 21.5 15 37.5l600 599q-33 101 6 201.5t135 154.5q164 92 306 -9l-259 -138l145 -232l251 126q13 -175 -151 -267q-123 -70 -253 -23l-596 -596q-15 -16 -36.5 -16t-36.5 16l-111 110q-15 15 -15 36.5z" />
+<glyph unicode="&#xe137;" horiz-adv-x="1220" d="M0 196v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM0 596v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5zM0 996v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM600 596h500v100h-500v-100zM800 196h300v100h-300v-100zM900 996h200v100h-200v-100z" />
+<glyph unicode="&#xe138;" d="M100 1100v100h1000v-100h-1000zM150 1000h900l-350 -500v-300l-200 -200v500z" />
+<glyph unicode="&#xe139;" d="M0 200v200h1200v-200q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM0 500v400q0 41 29.5 70.5t70.5 29.5h300v100q0 41 29.5 70.5t70.5 29.5h200q41 0 70.5 -29.5t29.5 -70.5v-100h300q41 0 70.5 -29.5t29.5 -70.5v-400h-500v100h-200v-100h-500z M500 1000h200v100h-200v-100z" />
+<glyph unicode="&#xe140;" d="M0 0v400l129 -129l200 200l142 -142l-200 -200l129 -129h-400zM0 800l129 129l200 -200l142 142l-200 200l129 129h-400v-400zM729 329l142 142l200 -200l129 129v-400h-400l129 129zM729 871l200 200l-129 129h400v-400l-129 129l-200 -200z" />
+<glyph unicode="&#xe141;" d="M0 596q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM182 596q0 -172 121.5 -293t292.5 -121t292.5 121t121.5 293q0 171 -121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM291 655 q0 23 15.5 38.5t38.5 15.5t39 -16t16 -38q0 -23 -16 -39t-39 -16q-22 0 -38 16t-16 39zM400 850q0 22 16 38.5t39 16.5q22 0 38 -16t16 -39t-16 -39t-38 -16q-23 0 -39 16.5t-16 38.5zM514 609q0 32 20.5 56.5t51.5 29.5l122 126l1 1q-9 14 -9 28q0 22 16 38.5t39 16.5 q22 0 38 -16t16 -39t-16 -39t-38 -16q-14 0 -29 10l-55 -145q17 -22 17 -51q0 -36 -25.5 -61.5t-61.5 -25.5t-61.5 25.5t-25.5 61.5zM800 655q0 22 16 38t39 16t38.5 -15.5t15.5 -38.5t-16 -39t-38 -16q-23 0 -39 16t-16 39z" />
+<glyph unicode="&#xe142;" d="M-40 375q-13 -95 35 -173q35 -57 94 -89t129 -32q63 0 119 28q33 16 65 40.5t52.5 45.5t59.5 64q40 44 57 61l394 394q35 35 47 84t-3 96q-27 87 -117 104q-20 2 -29 2q-46 0 -78.5 -16.5t-67.5 -51.5l-389 -396l-7 -7l69 -67l377 373q20 22 39 38q23 23 50 23 q38 0 53 -36q16 -39 -20 -75l-547 -547q-52 -52 -125 -52q-55 0 -100 33t-54 96q-5 35 2.5 66t31.5 63t42 50t56 54q24 21 44 41l348 348q52 52 82.5 79.5t84 54t107.5 26.5q25 0 48 -4q95 -17 154 -94.5t51 -175.5q-7 -101 -98 -192l-252 -249l-253 -256l7 -7l69 -60 l517 511q67 67 95 157t11 183q-16 87 -67 154t-130 103q-69 33 -152 33q-107 0 -197 -55q-40 -24 -111 -95l-512 -512q-68 -68 -81 -163z" />
+<glyph unicode="&#xe143;" d="M80 784q0 131 98.5 229.5t230.5 98.5q143 0 241 -129q103 129 246 129q129 0 226 -98.5t97 -229.5q0 -46 -17.5 -91t-61 -99t-77 -89.5t-104.5 -105.5q-197 -191 -293 -322l-17 -23l-16 23q-43 58 -100 122.5t-92 99.5t-101 100q-71 70 -104.5 105.5t-77 89.5t-61 99 t-17.5 91zM250 784q0 -27 30.5 -70t61.5 -75.5t95 -94.5l22 -22q93 -90 190 -201q82 92 195 203l12 12q64 62 97.5 97t64.5 79t31 72q0 71 -48 119.5t-105 48.5q-74 0 -132 -83l-118 -171l-114 174q-51 80 -123 80q-60 0 -109.5 -49.5t-49.5 -118.5z" />
+<glyph unicode="&#xe144;" d="M57 353q0 -95 66 -159l141 -142q68 -66 159 -66q93 0 159 66l283 283q66 66 66 159t-66 159l-141 141q-8 9 -19 17l-105 -105l212 -212l-389 -389l-247 248l95 95l-18 18q-46 45 -75 101l-55 -55q-66 -66 -66 -159zM269 706q0 -93 66 -159l141 -141q7 -7 19 -17l105 105 l-212 212l389 389l247 -247l-95 -96l18 -17q47 -49 77 -100l29 29q35 35 62.5 88t27.5 96q0 93 -66 159l-141 141q-66 66 -159 66q-95 0 -159 -66l-283 -283q-66 -64 -66 -159z" />
+<glyph unicode="&#xe145;" d="M200 100v953q0 21 30 46t81 48t129 38t163 15t162 -15t127 -38t79 -48t29 -46v-953q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-41 0 -70.5 29.5t-29.5 70.5zM300 300h600v700h-600v-700zM496 150q0 -43 30.5 -73.5t73.5 -30.5t73.5 30.5t30.5 73.5t-30.5 73.5t-73.5 30.5 t-73.5 -30.5t-30.5 -73.5z" />
+<glyph unicode="&#xe146;" d="M0 0l303 380l207 208l-210 212h300l267 279l-35 36q-15 14 -15 35t15 35q14 15 35 15t35 -15l283 -282q15 -15 15 -36t-15 -35q-14 -15 -35 -15t-35 15l-36 35l-279 -267v-300l-212 210l-208 -207z" />
+<glyph unicode="&#xe148;" d="M295 433h139q5 -77 48.5 -126.5t117.5 -64.5v335q-6 1 -15.5 4t-11.5 3q-46 14 -79 26.5t-72 36t-62.5 52t-40 72.5t-16.5 99q0 92 44 159.5t109 101t144 40.5v78h100v-79q38 -4 72.5 -13.5t75.5 -31.5t71 -53.5t51.5 -84t24.5 -118.5h-159q-8 72 -35 109.5t-101 50.5 v-307l64 -14q34 -7 64 -16.5t70 -31.5t67.5 -52t47.5 -80.5t20 -112.5q0 -139 -89 -224t-244 -96v-77h-100v78q-152 17 -237 104q-40 40 -52.5 93.5t-15.5 139.5zM466 889q0 -29 8 -51t16.5 -34t29.5 -22.5t31 -13.5t38 -10q7 -2 11 -3v274q-61 -8 -97.5 -37.5t-36.5 -102.5 zM700 237q170 18 170 151q0 64 -44 99.5t-126 60.5v-311z" />
+<glyph unicode="&#xe149;" d="M100 600v100h166q-24 49 -44 104q-10 26 -14.5 55.5t-3 72.5t25 90t68.5 87q97 88 263 88q129 0 230 -89t101 -208h-153q0 52 -34 89.5t-74 51.5t-76 14q-37 0 -79 -14.5t-62 -35.5q-41 -44 -41 -101q0 -28 16.5 -69.5t28 -62.5t41.5 -72h241v-100h-197q8 -50 -2.5 -115 t-31.5 -94q-41 -59 -99 -113q35 11 84 18t70 7q33 1 103 -16t103 -17q76 0 136 30l50 -147q-41 -25 -80.5 -36.5t-59 -13t-61.5 -1.5q-23 0 -128 33t-155 29q-39 -4 -82 -17t-66 -25l-24 -11l-55 145l16.5 11t15.5 10t13.5 9.5t14.5 12t14.5 14t17.5 18.5q48 55 54 126.5 t-30 142.5h-221z" />
+<glyph unicode="&#xe150;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM602 900l298 300l298 -300h-198v-900h-200v900h-198z" />
+<glyph unicode="&#xe151;" d="M2 300h198v900h200v-900h198l-298 -300zM700 0v200h100v-100h200v-100h-300zM700 400v100h300v-200h-99v-100h-100v100h99v100h-200zM700 700v500h300v-500h-100v100h-100v-100h-100zM801 900h100v200h-100v-200z" />
+<glyph unicode="&#xe152;" d="M2 300h198v900h200v-900h198l-298 -300zM700 0v500h300v-500h-100v100h-100v-100h-100zM700 700v200h100v-100h200v-100h-300zM700 1100v100h300v-200h-99v-100h-100v100h99v100h-200zM801 200h100v200h-100v-200z" />
+<glyph unicode="&#xe153;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM800 100v400h300v-500h-100v100h-200zM800 1100v100h200v-500h-100v400h-100zM901 200h100v200h-100v-200z" />
+<glyph unicode="&#xe154;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM800 400v100h200v-500h-100v400h-100zM800 800v400h300v-500h-100v100h-200zM901 900h100v200h-100v-200z" />
+<glyph unicode="&#xe155;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM700 100v200h500v-200h-500zM700 400v200h400v-200h-400zM700 700v200h300v-200h-300zM700 1000v200h200v-200h-200z" />
+<glyph unicode="&#xe156;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM700 100v200h200v-200h-200zM700 400v200h300v-200h-300zM700 700v200h400v-200h-400zM700 1000v200h500v-200h-500z" />
+<glyph unicode="&#xe157;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h300q162 0 281 -118.5t119 -281.5v-300q0 -165 -118.5 -282.5t-281.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500z" />
+<glyph unicode="&#xe158;" d="M0 400v300q0 163 119 281.5t281 118.5h300q165 0 282.5 -117.5t117.5 -282.5v-300q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-163 0 -281.5 117.5t-118.5 282.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM400 300l333 250l-333 250v-500z" />
+<glyph unicode="&#xe159;" d="M0 400v300q0 163 117.5 281.5t282.5 118.5h300q163 0 281.5 -119t118.5 -281v-300q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM300 700l250 -333l250 333h-500z" />
+<glyph unicode="&#xe160;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h300q165 0 282.5 -117.5t117.5 -282.5v-300q0 -162 -118.5 -281t-281.5 -119h-300q-165 0 -282.5 118.5t-117.5 281.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM300 400h500l-250 333z" />
+<glyph unicode="&#xe161;" d="M0 400v300h300v200l400 -350l-400 -350v200h-300zM500 0v200h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5h-500v200h400q165 0 282.5 -117.5t117.5 -282.5v-300q0 -165 -117.5 -282.5t-282.5 -117.5h-400z" />
+<glyph unicode="&#xe162;" d="M217 519q8 -19 31 -19h302q-155 -438 -160 -458q-5 -21 4 -32l9 -8h9q14 0 26 15q11 13 274.5 321.5t264.5 308.5q14 19 5 36q-8 17 -31 17l-301 -1q1 4 78 219.5t79 227.5q2 15 -5 27l-9 9h-9q-15 0 -25 -16q-4 -6 -98 -111.5t-228.5 -257t-209.5 -237.5q-16 -19 -6 -41 z" />
+<glyph unicode="&#xe163;" d="M0 400q0 -165 117.5 -282.5t282.5 -117.5h300q47 0 100 15v185h-500q-41 0 -70.5 29.5t-29.5 70.5v500q0 41 29.5 70.5t70.5 29.5h500v185q-14 4 -114 7.5t-193 5.5l-93 2q-165 0 -282.5 -117.5t-117.5 -282.5v-300zM600 400v300h300v200l400 -350l-400 -350v200h-300z " />
+<glyph unicode="&#xe164;" d="M0 400q0 -165 117.5 -282.5t282.5 -117.5h300q163 0 281.5 117.5t118.5 282.5v98l-78 73l-122 -123v-148q0 -41 -29.5 -70.5t-70.5 -29.5h-500q-41 0 -70.5 29.5t-29.5 70.5v500q0 41 29.5 70.5t70.5 29.5h156l118 122l-74 78h-100q-165 0 -282.5 -117.5t-117.5 -282.5 v-300zM496 709l353 342l-149 149h500v-500l-149 149l-342 -353z" />
+<glyph unicode="&#xe165;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM406 600 q0 80 57 137t137 57t137 -57t57 -137t-57 -137t-137 -57t-137 57t-57 137z" />
+<glyph unicode="&#xe166;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 800l445 -500l450 500h-295v400h-300v-400h-300zM900 150h100v50h-100v-50z" />
+<glyph unicode="&#xe167;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 700h300v-300h300v300h295l-445 500zM900 150h100v50h-100v-50z" />
+<glyph unicode="&#xe168;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 705l305 -305l596 596l-154 155l-442 -442l-150 151zM900 150h100v50h-100v-50z" />
+<glyph unicode="&#xe169;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 988l97 -98l212 213l-97 97zM200 400l697 1l3 699l-250 -239l-149 149l-212 -212l149 -149zM900 150h100v50h-100v-50z" />
+<glyph unicode="&#xe170;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM200 612l212 -212l98 97l-213 212zM300 1200l239 -250l-149 -149l212 -212l149 148l249 -237l-1 697zM900 150h100v50h-100v-50z" />
+<glyph unicode="&#xe171;" d="M23 415l1177 784v-1079l-475 272l-310 -393v416h-392zM494 210l672 938l-672 -712v-226z" />
+<glyph unicode="&#xe172;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-850q0 -21 -15 -35.5t-35 -14.5h-150v400h-700v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 1000h100v200h-100v-200z" />
+<glyph unicode="&#xe173;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-218l-276 -275l-120 120l-126 -127h-378v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM581 306l123 123l120 -120l353 352l123 -123l-475 -476zM600 1000h100v200h-100v-200z" />
+<glyph unicode="&#xe174;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-269l-103 -103l-170 170l-298 -298h-329v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 1000h100v200h-100v-200zM700 133l170 170l-170 170l127 127l170 -170l170 170l127 -128l-170 -169l170 -170 l-127 -127l-170 170l-170 -170z" />
+<glyph unicode="&#xe175;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-300h-400v-200h-500v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 300l300 -300l300 300h-200v300h-200v-300h-200zM600 1000v200h100v-200h-100z" />
+<glyph unicode="&#xe176;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-402l-200 200l-298 -298h-402v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 300h200v-300h200v300h200l-300 300zM600 1000v200h100v-200h-100z" />
+<glyph unicode="&#xe177;" d="M0 250q0 -21 14.5 -35.5t35.5 -14.5h1100q21 0 35.5 14.5t14.5 35.5v550h-1200v-550zM0 900h1200v150q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5v-150zM100 300v200h400v-200h-400z" />
+<glyph unicode="&#xe178;" d="M0 400l300 298v-198h400v-200h-400v-198zM100 800v200h100v-200h-100zM300 800v200h100v-200h-100zM500 800v200h400v198l300 -298l-300 -298v198h-400zM800 300v200h100v-200h-100zM1000 300h100v200h-100v-200z" />
+<glyph unicode="&#xe179;" d="M100 700v400l50 100l50 -100v-300h100v300l50 100l50 -100v-300h100v300l50 100l50 -100v-400l-100 -203v-447q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v447zM800 597q0 -29 10.5 -55.5t25 -43t29 -28.5t25.5 -18l10 -5v-397q0 -21 14.5 -35.5 t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v1106q0 31 -18 40.5t-44 -7.5l-276 -116q-25 -17 -43.5 -51.5t-18.5 -65.5v-359z" />
+<glyph unicode="&#xe180;" d="M100 0h400v56q-75 0 -87.5 6t-12.5 44v394h500v-394q0 -38 -12.5 -44t-87.5 -6v-56h400v56q-4 0 -11 0.5t-24 3t-30 7t-24 15t-11 24.5v888q0 22 25 34.5t50 13.5l25 2v56h-400v-56q75 0 87.5 -6t12.5 -44v-394h-500v394q0 38 12.5 44t87.5 6v56h-400v-56q4 0 11 -0.5 t24 -3t30 -7t24 -15t11 -24.5v-888q0 -22 -25 -34.5t-50 -13.5l-25 -2v-56z" />
+<glyph unicode="&#xe181;" d="M0 300q0 -41 29.5 -70.5t70.5 -29.5h300q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5h-300q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM100 100h400l200 200h105l295 98v-298h-425l-100 -100h-375zM100 300v200h300v-200h-300zM100 600v200h300v-200h-300z M100 1000h400l200 -200v-98l295 98h105v200h-425l-100 100h-375zM700 402v163l400 133v-163z" />
+<glyph unicode="&#xe182;" d="M16.5 974.5q0.5 -21.5 16 -90t46.5 -140t104 -177.5t175 -208q103 -103 207.5 -176t180 -103.5t137 -47t92.5 -16.5l31 1l163 162q17 18 13.5 41t-22.5 37l-192 136q-19 14 -45 12t-42 -19l-118 -118q-142 101 -268 227t-227 268l118 118q17 17 20 41.5t-11 44.5 l-139 194q-14 19 -36.5 22t-40.5 -14l-162 -162q-1 -11 -0.5 -32.5z" />
+<glyph unicode="&#xe183;" d="M0 50v212q0 20 10.5 45.5t24.5 39.5l365 303v50q0 4 1 10.5t12 22.5t30 28.5t60 23t97 10.5t97 -10t60 -23.5t30 -27.5t12 -24l1 -10v-50l365 -303q14 -14 24.5 -39.5t10.5 -45.5v-212q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-20 0 -35 14.5t-15 35.5zM0 712 q0 -21 14.5 -33.5t34.5 -8.5l202 33q20 4 34.5 21t14.5 38v146q141 24 300 24t300 -24v-146q0 -21 14.5 -38t34.5 -21l202 -33q20 -4 34.5 8.5t14.5 33.5v200q-6 8 -19 20.5t-63 45t-112 57t-171 45t-235 20.5q-92 0 -175 -10.5t-141.5 -27t-108.5 -36.5t-81.5 -40 t-53.5 -36.5t-31 -27.5l-9 -10v-200z" />
+<glyph unicode="&#xe184;" d="M100 0v100h1100v-100h-1100zM175 200h950l-125 150v250l100 100v400h-100v-200h-100v200h-200v-200h-100v200h-200v-200h-100v200h-100v-400l100 -100v-250z" />
+<glyph unicode="&#xe185;" d="M100 0h300v400q0 41 -29.5 70.5t-70.5 29.5h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-400zM500 0v1000q0 41 29.5 70.5t70.5 29.5h100q41 0 70.5 -29.5t29.5 -70.5v-1000h-300zM900 0v700q0 41 29.5 70.5t70.5 29.5h100q41 0 70.5 -29.5t29.5 -70.5v-700h-300z" />
+<glyph unicode="&#xe186;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v300h-200v100h200v100h-300v-300h200v-100h-200v-100zM600 300h200v100h100v300h-100v100h-200v-500 zM700 400v300h100v-300h-100z" />
+<glyph unicode="&#xe187;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h100v200h100v-200h100v500h-100v-200h-100v200h-100v-500zM600 300h200v100h100v300h-100v100h-200v-500 zM700 400v300h100v-300h-100z" />
+<glyph unicode="&#xe188;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v100h-200v300h200v100h-300v-500zM600 300h300v100h-200v300h200v100h-300v-500z" />
+<glyph unicode="&#xe189;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 550l300 -150v300zM600 400l300 150l-300 150v-300z" />
+<glyph unicode="&#xe190;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300v500h700v-500h-700zM300 400h130q41 0 68 42t27 107t-28.5 108t-66.5 43h-130v-300zM575 549 q0 -65 27 -107t68 -42h130v300h-130q-38 0 -66.5 -43t-28.5 -108z" />
+<glyph unicode="&#xe191;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v300h-200v100h200v100h-300v-300h200v-100h-200v-100zM601 300h100v100h-100v-100zM700 700h100 v-400h100v500h-200v-100z" />
+<glyph unicode="&#xe192;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v400h-200v100h-100v-500zM301 400v200h100v-200h-100zM601 300h100v100h-100v-100zM700 700h100 v-400h100v500h-200v-100z" />
+<glyph unicode="&#xe193;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 700v100h300v-300h-99v-100h-100v100h99v200h-200zM201 300v100h100v-100h-100zM601 300v100h100v-100h-100z M700 700v100h200v-500h-100v400h-100z" />
+<glyph unicode="&#xe194;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM400 500v200 l100 100h300v-100h-300v-200h300v-100h-300z" />
+<glyph unicode="&#xe195;" d="M0 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM182 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM400 400v400h300 l100 -100v-100h-100v100h-200v-100h200v-100h-200v-100h-100zM700 400v100h100v-100h-100z" />
+<glyph unicode="&#xe197;" d="M-14 494q0 -80 56.5 -137t135.5 -57h222v300h400v-300h128q120 0 205 86.5t85 207.5t-85 207t-205 86q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5zM300 200h200v300h200v-300h200 l-300 -300z" />
+<glyph unicode="&#xe198;" d="M-14 494q0 -80 56.5 -137t135.5 -57h8l414 414l403 -403q94 26 154.5 104.5t60.5 178.5q0 120 -85 206.5t-205 86.5q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5zM300 200l300 300 l300 -300h-200v-300h-200v300h-200z" />
+<glyph unicode="&#xe199;" d="M100 200h400v-155l-75 -45h350l-75 45v155h400l-270 300h170l-270 300h170l-300 333l-300 -333h170l-270 -300h170z" />
+<glyph unicode="&#xe200;" d="M121 700q0 -53 28.5 -97t75.5 -65q-4 -16 -4 -38q0 -74 52.5 -126.5t126.5 -52.5q56 0 100 30v-306l-75 -45h350l-75 45v306q46 -30 100 -30q74 0 126.5 52.5t52.5 126.5q0 24 -9 55q50 32 79.5 83t29.5 112q0 90 -61.5 155.5t-150.5 71.5q-26 89 -99.5 145.5 t-167.5 56.5q-116 0 -197.5 -81.5t-81.5 -197.5q0 -4 1 -11.5t1 -11.5q-14 2 -23 2q-74 0 -126.5 -52.5t-52.5 -126.5z" />
+</font>
+</defs></svg>
\ No newline at end of file
diff --git a/src/web/wwwroot/fonts/glyphicons-halflings-regular.ttf b/src/web/wwwroot/fonts/glyphicons-halflings-regular.ttf
new file mode 100755
index 0000000000000000000000000000000000000000..67fa00bf83801d2fa568546b982c80d27f6ef74e
Binary files /dev/null and b/src/web/wwwroot/fonts/glyphicons-halflings-regular.ttf differ
diff --git a/src/web/wwwroot/fonts/glyphicons-halflings-regular.woff b/src/web/wwwroot/fonts/glyphicons-halflings-regular.woff
new file mode 100755
index 0000000000000000000000000000000000000000..8c54182aa5d4d1ab3c9171976b615c1dcb1dc187
Binary files /dev/null and b/src/web/wwwroot/fonts/glyphicons-halflings-regular.woff differ
diff --git a/src/web/wwwroot/fonts/glyphicons-halflings-regular.woff2 b/src/web/wwwroot/fonts/glyphicons-halflings-regular.woff2
new file mode 100755
index 0000000000000000000000000000000000000000..8c54182aa5d4d1ab3c9171976b615c1dcb1dc187
Binary files /dev/null and b/src/web/wwwroot/fonts/glyphicons-halflings-regular.woff2 differ
diff --git a/src/web/wwwroot/fonts/roboto/Roboto-Bold-webfont.eot b/src/web/wwwroot/fonts/roboto/Roboto-Bold-webfont.eot
new file mode 100755
index 0000000000000000000000000000000000000000..b73776ee3bc194caa8f5839e96269516ed65cb55
Binary files /dev/null and b/src/web/wwwroot/fonts/roboto/Roboto-Bold-webfont.eot differ
diff --git a/src/web/wwwroot/fonts/roboto/Roboto-Bold-webfont.svg b/src/web/wwwroot/fonts/roboto/Roboto-Bold-webfont.svg
new file mode 100755
index 0000000000000000000000000000000000000000..43b5ed22224d6e45fe2107bf55b6d1df2f1782f2
--- /dev/null
+++ b/src/web/wwwroot/fonts/roboto/Roboto-Bold-webfont.svg
@@ -0,0 +1,593 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
+<svg xmlns="http://www.w3.org/2000/svg">
+<metadata></metadata>
+<defs>
+<font id="robotobold" horiz-adv-x="1156" >
+<font-face units-per-em="2048" ascent="1638" descent="-410" />
+<missing-glyph horiz-adv-x="510" />
+<glyph unicode="&#xfb01;" horiz-adv-x="1249" d="M20 877v205h161v74q0 204 124.5 314.5t350.5 110.5q78 0 154 -15.5t176 -44.5l-42 -230q-73 22 -132.5 34t-136.5 12q-101 0 -151.5 -46t-50.5 -135v-74h213v-205h-213v-877h-292v877h-161zM829 0v1082h292v-1082h-292z" />
+<glyph horiz-adv-x="2048" />
+<glyph horiz-adv-x="2048" />
+<glyph unicode="&#xd;" horiz-adv-x="510" />
+<glyph unicode=" "  horiz-adv-x="510" />
+<glyph unicode="&#x09;" horiz-adv-x="510" />
+<glyph unicode="&#xa0;" horiz-adv-x="510" />
+<glyph unicode="!" horiz-adv-x="557" d="M134 0v256h292v-256h-292zM134 502v954h292v-954h-292z" />
+<glyph unicode="&#x22;" horiz-adv-x="656" d="M50 1039v524h230v-275l-102 -249h-128zM376 1039v524h230v-275l-102 -249h-128z" />
+<glyph unicode="#" horiz-adv-x="1219" d="M48 410v169h256l51 290h-232v171h262l73 416h183l-73 -416h192l74 416h183l-73 -416h220v-171h-250l-51 -290h225v-169h-254l-72 -410h-184l72 410h-192l-71 -410h-184l72 410h-227zM488 579h191l51 290h-192z" />
+<glyph unicode="$" horiz-adv-x="1175" d="M96 449l2 5h285q0 -134 61.5 -192t156.5 -58q91 0 139.5 48.5t48.5 130.5q0 81 -46.5 132t-159.5 95q-222 81 -329.5 180.5t-107.5 280.5q0 168 107.5 275.5t289.5 126.5v215h159v-217q176 -26 276.5 -147t98.5 -314l-3 -5h-285q0 118 -48.5 182t-132.5 64 q-86 0 -128 -49.5t-42 -131.5q0 -78 44.5 -126.5t163.5 -95.5q221 -87 327.5 -186t106.5 -277q0 -174 -107 -278t-291 -123v-198h-159v197q-187 19 -309 132.5t-118 333.5z" />
+<glyph unicode="%" horiz-adv-x="1513" d="M95 1099v77q0 129 83.5 215t232.5 86q151 0 234 -85.5t83 -215.5v-77q0 -129 -83 -214t-232 -85q-150 0 -234 85t-84 214zM289 1099q0 -58 32 -97.5t92 -39.5q58 0 89.5 39.5t31.5 97.5v77q0 58 -32 98.5t-91 40.5t-90.5 -40.5t-31.5 -98.5v-77zM319 184l711 1138 l142 -75l-711 -1138zM791 280v77q0 128 84 214t233 86q150 0 233.5 -85.5t83.5 -214.5v-77q0 -130 -83 -215t-232 -85q-150 0 -234.5 85.5t-84.5 214.5zM985 280q0 -57 34.5 -97.5t90.5 -40.5q65 0 93 37.5t28 100.5v77q0 57 -32 97.5t-91 40.5q-60 0 -91.5 -40.5 t-31.5 -97.5v-77z" />
+<glyph unicode="&#x26;" horiz-adv-x="1346" d="M61 392q0 118 65 203.5t198 178.5q-68 92 -101.5 168t-33.5 155q0 173 108 276.5t289 103.5q159 0 258.5 -98.5t99.5 -238.5q0 -98 -49 -179t-134 -142l-93 -66l276 -322q36 60 56 130t20 148h218q0 -138 -34 -254t-104 -206l208 -244l-2 -5h-324l-77 89 q-85 -55 -175 -82.5t-193 -27.5q-218 0 -347 114.5t-129 298.5zM353 407q0 -89 55 -146.5t144 -57.5q53 0 106 13.5t102 40.5l-300 348l-19 -13q-51 -48 -69.5 -93.5t-18.5 -91.5zM450 1100q0 -43 21.5 -88.5t64.5 -100.5l86 56q56 36 75.5 74t19.5 83q0 50 -36.5 89 t-95.5 39q-65 0 -100 -43.5t-35 -108.5z" />
+<glyph unicode="'" horiz-adv-x="330" d="M50 1008v552h230v-269l-102 -283h-128z" />
+<glyph unicode="(" horiz-adv-x="711" d="M124 570v22q0 392 152 665.5t344 354.5h6l53 -146q-131 -98 -220 -316t-89 -556v-26q0 -339 89 -556.5t220 -318.5l-53 -143h-6q-192 81 -344 354t-152 666z" />
+<glyph unicode=")" horiz-adv-x="713" d="M31 -307q129 98 219 317t90 558v26q0 336 -91 556.5t-218 319.5l54 142h6q194 -80 352.5 -359t158.5 -661v-22q0 -383 -158.5 -661.5t-352.5 -358.5h-6z" />
+<glyph unicode="*" horiz-adv-x="908" d="M27 1055l57 177l297 -123l-18 347h187l-19 -353l291 120l56 -180l-306 -89l200 -265l-152 -110l-174 290l-173 -281l-153 106l209 272z" />
+<glyph unicode="+" horiz-adv-x="1117" d="M56 560v252h362v394h276v-394h360v-252h-360v-414h-276v414h-362z" />
+<glyph unicode="," horiz-adv-x="528" d="M63 -302l70 324v228h284v-237l-159 -315h-195z" />
+<glyph unicode="-" horiz-adv-x="801" d="M113 510v225h564v-225h-564z" />
+<glyph unicode="." horiz-adv-x="596" d="M144 0v256h292v-256h-292z" />
+<glyph unicode="/" horiz-adv-x="825" d="M-14 -125l534 1581h284l-534 -1581h-284z" />
+<glyph unicode="0" horiz-adv-x="1175" d="M95 567v321q0 288 132.5 438.5t359.5 150.5q226 0 359.5 -150.5t133.5 -438.5v-321q0 -289 -132.5 -438.5t-358.5 -149.5q-228 0 -361 149.5t-133 438.5zM386 539q0 -176 51.5 -256t151.5 -80q98 0 149 80t51 256v379q0 173 -52 253.5t-150 80.5q-99 0 -150 -80t-51 -254 v-379z" />
+<glyph unicode="1" horiz-adv-x="1175" d="M171 1198v206l588 52v-1456h-292v1198h-296z" />
+<glyph unicode="2" horiz-adv-x="1175" d="M76 1007q-5 197 129.5 333.5t362.5 136.5q225 0 353.5 -117t128.5 -312q0 -132 -72.5 -243.5t-239.5 -292.5l-259 -283l2 -5h612v-224h-994v191l471 505q102 117 145 197.5t43 149.5q0 92 -49.5 150.5t-140.5 58.5q-101 0 -153.5 -68.5t-52.5 -182.5h-284z" />
+<glyph unicode="3" horiz-adv-x="1175" d="M70 390l2 6h283q0 -84 60 -138.5t152 -54.5q101 0 159.5 56t58.5 152q0 115 -57.5 168.5t-169.5 53.5h-164v219h164q104 0 154 54.5t50 151.5q0 88 -50 141t-145 53q-82 0 -138 -48t-56 -126h-283l-2 6q-6 171 131 282t340 111q226 0 360.5 -108t134.5 -308 q0 -95 -60 -180.5t-165 -133.5q121 -43 184.5 -132t63.5 -207q0 -200 -145.5 -314.5t-372.5 -114.5q-203 0 -348.5 107.5t-140.5 303.5z" />
+<glyph unicode="4" horiz-adv-x="1175" d="M57 491l604 965h294v-914h165v-226h-165v-316h-291v316h-594zM329 542h335v524l-6 2l-23 -41z" />
+<glyph unicode="5" horiz-adv-x="1175" d="M110 390l2 5l281 14q0 -97 55 -151.5t144 -54.5q102 0 150.5 72.5t48.5 189.5q0 126 -52 202t-154 76q-84 0 -128.5 -31t-63.5 -84l-257 17l84 811h812v-234h-573l-40 -336q40 30 97 49.5t126 20.5q210 3 325.5 -127t115.5 -362q0 -210 -126.5 -349t-364.5 -139 q-201 0 -344 109.5t-138 301.5z" />
+<glyph unicode="6" horiz-adv-x="1175" d="M99 569v284q0 286 165 455t420 169q82 0 151.5 -15.5t139.5 -45.5l-52 -214q-66 23 -117.5 34.5t-119.5 11.5q-133 0 -213.5 -99.5t-74.5 -275.5l3 -5q49 51 124 80t169 29q195 0 305.5 -138.5t110.5 -353.5q0 -220 -136.5 -363t-353.5 -143q-231 0 -376 156.5 t-145 433.5zM391 562q0 -173 62.5 -266t166.5 -93q90 0 144.5 82.5t54.5 199.5q0 121 -55 196t-147 75q-81 0 -138 -26t-88 -71v-97z" />
+<glyph unicode="7" horiz-adv-x="1175" d="M60 1231v225h1029v-225q-234 -274 -319.5 -511t-122.5 -572l-14 -148h-292l14 148q34 321 146 589.5t307 493.5h-748z" />
+<glyph unicode="8" horiz-adv-x="1175" d="M91 398q0 118 66.5 208.5t183.5 140.5q-102 47 -159 130.5t-57 192.5q0 194 127 300.5t335 106.5q207 0 335 -106.5t128 -300.5q0 -109 -57.5 -193t-158.5 -131q116 -49 183 -140t67 -208q0 -202 -137 -310.5t-358 -108.5q-223 0 -360.5 108.5t-137.5 310.5zM384 418 q0 -100 56 -157.5t149 -57.5q91 0 147 58t56 157q0 98 -57 157t-148 59q-92 0 -147.5 -59t-55.5 -157zM417 1057q0 -91 45.5 -144.5t126.5 -53.5q79 0 124.5 53.5t45.5 144.5q0 88 -46.5 141.5t-125.5 53.5q-80 0 -125 -52.5t-45 -142.5z" />
+<glyph unicode="9" horiz-adv-x="1175" d="M82 970q0 218 138 362.5t351 144.5q223 0 362 -153.5t139 -431.5v-344q0 -265 -155.5 -417t-396.5 -152q-76 0 -156.5 15.5t-149.5 45.5l34 211q65 -25 128.5 -36.5t143.5 -11.5q115 0 187.5 85.5t72.5 244.5v72q-49 -62 -116.5 -94t-145.5 -32q-203 0 -319.5 132.5 t-116.5 358.5zM373 970q0 -124 50.5 -200.5t143.5 -76.5q72 0 126 27t87 72v134q0 160 -56 243t-152 83q-88 0 -143.5 -82t-55.5 -200z" />
+<glyph unicode=":" horiz-adv-x="582" d="M144 0v256h292v-256h-292zM144 876v256h292v-256h-292z" />
+<glyph unicode=";" horiz-adv-x="562" d="M114 -302l70 324v228h284v-237l-159 -315h-195zM145 876v256h292v-256h-292z" />
+<glyph unicode="&#x3c;" horiz-adv-x="1043" d="M54 436v227l862 366v-272l-577 -207v-6l577 -203v-272z" />
+<glyph unicode="=" horiz-adv-x="1181" d="M136 332v229h896v-229h-896zM136 763v229h896v-229h-896z" />
+<glyph unicode="&#x3e;" horiz-adv-x="1058" d="M119 69v270l586 209v6l-586 206v269l872 -366v-227z" />
+<glyph unicode="?" horiz-adv-x="1021" d="M32 1081q-3 192 126.5 294t337.5 102q224 0 351.5 -113.5t127.5 -308.5q0 -127 -74.5 -235t-186.5 -181q-61 -47 -80 -94.5t-19 -130.5h-291q1 140 41.5 205t161.5 158q71 58 113.5 125t42.5 150q0 92 -48.5 144t-138.5 52q-74 0 -125.5 -44t-52.5 -129h-284zM323 0v250 h294v-250h-294z" />
+<glyph unicode="@" horiz-adv-x="1817" d="M66 478q18 427 255.5 683.5t625.5 256.5q387 0 593 -242.5t190 -662.5q-9 -218 -128 -376t-356 -158q-78 0 -135 44t-81 123q-44 -82 -109.5 -123t-153.5 -41q-141 0 -216.5 119t-55.5 315q25 254 143.5 407t287.5 153q116 0 186.5 -26t154.5 -80l-3 -4h5l-51 -573 q-7 -95 14 -130t57 -35q115 0 184.5 109t77.5 276q16 353 -136.5 551t-471.5 198q-303 0 -484 -213t-196 -571q-17 -355 146 -560t469 -205q85 0 175.5 20t155.5 50l38 -147q-67 -42 -170.5 -65.5t-202.5 -23.5q-396 0 -610.5 249t-197.5 682zM720 416q-10 -127 18.5 -192.5 t92.5 -65.5q56 0 101.5 26t81.5 96v6.5t1 6.5l44 496q-23 7 -46 11t-48 4q-111 0 -169 -96.5t-76 -291.5z" />
+<glyph unicode="A" horiz-adv-x="1311" d="M12 0l501 1456h299l499 -1456h-295l-99 314h-511l-99 -314h-295zM478 543h367l-180 572h-6z" />
+<glyph unicode="B" horiz-adv-x="1314" d="M136 0v1456h492q257 0 401 -100t144 -299q0 -101 -53.5 -180.5t-155.5 -119.5q131 -28 196.5 -120t65.5 -213q0 -209 -138 -316.5t-391 -107.5h-561zM428 224h269q116 0 177 50.5t61 149.5q0 107 -52 163.5t-164 56.5h-291v-420zM428 846h210q117 0 180 48t63 140 q0 101 -63.5 149t-189.5 48h-200v-385z" />
+<glyph unicode="C" horiz-adv-x="1309" d="M93 583v289q0 265 160 435t416 170q270 -1 422 -139q148 -135 148 -365v-12l-2 -6h-284q0 144 -69 220.5t-215 76.5q-131 0 -208 -106.5t-77 -271.5v-291q0 -167 81 -273.5t219 -106.5q137 0 202.5 73.5t65.5 218.5h283l2 -6v-12q1 -227 -143 -361q-148 -138 -410 -137 q-263 0 -427 169t-164 435z" />
+<glyph unicode="D" horiz-adv-x="1342" d="M136 0v1456h500q267 0 440 -170.5t173 -437.5v-241q0 -268 -173 -437.5t-440 -169.5h-500zM428 224h193q157 0 246 106t89 277v243q0 169 -89 275t-246 106h-193v-1007z" />
+<glyph unicode="E" horiz-adv-x="1176" d="M136 0v1456h995v-225h-703v-366h603v-225h-603v-416h705v-224h-997z" />
+<glyph unicode="F" horiz-adv-x="1182" d="M136 0v1456h1004v-225h-712v-401h610v-225h-610v-605h-292z" />
+<glyph unicode="G" horiz-adv-x="1369" d="M99 576v304q0 264 162.5 430.5t418.5 166.5q266 0 407.5 -129.5t144.5 -340.5l-2 -6h-275q-8 116 -74 183.5t-193 67.5q-134 0 -216 -103.5t-82 -266.5v-306q0 -166 85 -269.5t229 -103.5q102 0 164 21t94 52v270h-258v202h550v-549q-65 -86 -202.5 -153t-347.5 -67 q-267 0 -436 166t-169 431z" />
+<glyph unicode="H" horiz-adv-x="1450" d="M136 0v1456h292v-626h594v626h291v-1456h-291v605h-594v-605h-292z" />
+<glyph unicode="I" horiz-adv-x="601" d="M154 0v1456h292v-1456h-292z" />
+<glyph unicode="J" horiz-adv-x="1169" d="M63 417l2 6h284q0 -115 55 -167.5t148 -52.5q81 0 137.5 62.5t56.5 171.5v1019h291v-1019q0 -211 -137.5 -334.5t-347.5 -123.5q-228 0 -361 111q-128 107 -128 311v16z" />
+<glyph unicode="K" horiz-adv-x="1323" d="M136 0v1456h292v-595h127l386 595h357l-490 -678l529 -778h-356l-391 608h-162v-608h-292z" />
+<glyph unicode="L" horiz-adv-x="1108" d="M136 0v1456h292v-1232h648v-224h-940z" />
+<glyph unicode="M" horiz-adv-x="1787" d="M136 0v1456h381l371 -1073h6l374 1073h382v-1456h-292v434l28 643l-6 1l-390 -1078h-196l-388 1074l-6 -1l28 -639v-434h-292z" />
+<glyph unicode="N" horiz-adv-x="1450" d="M136 0v1456h292l588 -994l6 1v993h291v-1456h-291l-588 995l-6 -1v-994h-292z" />
+<glyph unicode="O" horiz-adv-x="1399" d="M92 597v262q0 267 167.5 442.5t436.5 175.5q271 0 441 -175.5t170 -442.5v-262q0 -268 -169.5 -443t-440.5 -175q-269 0 -437 175t-168 443zM383 597q0 -173 83 -282t231 -109q150 0 234 109t84 282v264q0 170 -85 279t-234 109t-231 -108.5t-82 -279.5v-264z" />
+<glyph unicode="P" horiz-adv-x="1334" d="M136 0v1456h580q251 0 395 -128t144 -337t-144 -336t-395 -127h-288v-528h-292zM428 753h288q122 0 185 66.5t63 169.5q0 105 -62.5 173.5t-185.5 68.5h-288v-478z" />
+<glyph unicode="Q" horiz-adv-x="1433" d="M92 597v262q0 267 167.5 442.5t436.5 175.5q271 0 441 -175.5t170 -442.5v-262q0 -132 -43 -244.5t-123 -195.5l241 -236l-191 -156l-262 254q-54 -19 -112 -29.5t-120 -10.5q-269 0 -437 175t-168 443zM383 597q0 -173 83 -282t231 -109q150 0 234 109t84 282v264 q0 170 -85 279t-234 109t-231 -108.5t-82 -279.5v-264z" />
+<glyph unicode="R" horiz-adv-x="1354" d="M136 0v1456h549q249 0 389.5 -113.5t140.5 -316.5q0 -113 -59 -194t-173 -131q129 -38 185.5 -127t56.5 -220v-107q0 -61 16.5 -127.5t56.5 -98.5v-21h-301q-40 32 -52 107t-12 142v103q0 109 -59.5 169.5t-167.5 60.5h-278v-582h-292zM428 807h252q123 0 183.5 52 t60.5 154q0 100 -60.5 159t-178.5 59h-257v-424z" />
+<glyph unicode="S" horiz-adv-x="1299" d="M90 445l2 6h284q0 -130 79.5 -190.5t221.5 -60.5q119 0 182 49t63 131q0 84 -59.5 135t-208.5 96q-260 75 -393 178t-133 282t152.5 292.5t389.5 113.5q240 1 391 -127q146 -123 146 -303v-12l-2 -6h-283q0 101 -67.5 163.5t-189.5 62.5q-117 0 -181 -52t-64 -133 q0 -74 68.5 -121.5t236.5 -100.5q241 -67 365 -177t124 -289q0 -187 -147.5 -295t-389.5 -108q-238 1 -415 123q-172 119 -172 331v12z" />
+<glyph unicode="T" horiz-adv-x="1169" d="M28 1231v225h1114v-225h-412v-1231h-292v1231h-410z" />
+<glyph unicode="U" horiz-adv-x="1407" d="M120 490v966h293v-966q0 -144 77 -215.5t212 -71.5q137 0 215 71t78 216v966h293v-966q0 -245 -162 -378t-424 -133q-261 0 -421.5 133t-160.5 378z" />
+<glyph unicode="V" horiz-adv-x="1303" d="M7 1456h308l315 -1069l18 -79h6l17 77l317 1071h308l-495 -1456h-300z" />
+<glyph unicode="W" horiz-adv-x="1815" d="M24 1456h286l209 -997l6 -1l273 998h215l275 -998h6l208 998h285l-340 -1456h-271l-267 961h-6l-267 -961h-271z" />
+<glyph unicode="X" horiz-adv-x="1303" d="M31 0l443 734l-432 722h338l269 -516l273 516h340l-432 -722l457 -734h-353l-281 525l-281 -525h-341z" />
+<glyph unicode="Y" horiz-adv-x="1292" d="M5 1456h320l318 -671h6l318 671h320l-500 -944v-512h-291v527z" />
+<glyph unicode="Z" horiz-adv-x="1206" d="M77 0v152l692 1079h-691v225h1047v-146l-695 -1086h712v-224h-1065z" />
+<glyph unicode="[" horiz-adv-x="570" d="M119 -336v2027h434v-216h-141v-1595h141v-216h-434z" />
+<glyph unicode="\" horiz-adv-x="863" d="M2 1456h289l608 -1581h-289z" />
+<glyph unicode="]" horiz-adv-x="570" d="M13 -120h142v1595h-142v216h434v-2027h-434v216z" />
+<glyph unicode="^" horiz-adv-x="896" d="M44 729l299 727h212l299 -727h-231l-165 413l-8 34h-6l-7 -34l-162 -413h-231z" />
+<glyph unicode="_" horiz-adv-x="914" d="M1 0h910v-219h-910v219z" />
+<glyph unicode="`" horiz-adv-x="678" d="M77 1472l2 6h309l197 -266h-237z" />
+<glyph unicode="a" horiz-adv-x="1100" d="M55 305q0 159 122.5 246.5t357.5 87.5h163v86q0 78 -41 121t-121 43q-71 0 -109.5 -34.5t-38.5 -95.5l-282 1l-1 6v14q0 128 119 222q126 100 331 100q194 0 315 -98.5t121 -280.5v-447q0 -76 11.5 -143t36.5 -133h-292q-16 37 -27.5 78t-16.5 84q-45 -79 -118.5 -131 t-175.5 -52q-170 0 -262 87.5t-92 238.5zM346 315q0 -54 36 -87t98 -33q77 0 137 38t81 88v153h-163q-93 0 -141 -46.5t-48 -112.5z" />
+<glyph unicode="b" d="M112 0v1560h291v-593q47 65 112.5 100t150.5 35q206 0 314 -155.5t108 -414.5v-21q0 -242 -108 -387t-312 -145q-94 0 -164.5 39.5t-119.5 115.5l-22 -134h-250zM403 307q27 -49 74.5 -75t116.5 -26q113 0 158 79.5t45 225.5v21q0 158 -46.5 250.5t-158.5 92.5 q-68 0 -115 -28.5t-74 -81.5v-458z" />
+<glyph unicode="c" horiz-adv-x="1060" d="M62 525v30q0 239 130.5 393t372.5 154q201 0 323 -114q119 -110 118 -288v-12l-2 -6h-266q0 84 -46 139.5t-127 55.5q-116 0 -163.5 -90t-47.5 -232v-30q0 -145 47.5 -233.5t164.5 -88.5q78 0 125 45.5t47 121.5h265l3 -6v-10q0 -156 -124 -264q-128 -110 -316 -111 q-242 0 -373 153t-131 393z" />
+<glyph unicode="d" d="M67 511v21q0 256 110.5 413t311.5 157q81 0 146 -35t114 -100v593h293v-1560h-251l-24 132q-51 -75 -120.5 -114t-159.5 -39q-199 0 -309.5 146t-110.5 386zM358 511q0 -142 48 -223.5t156 -81.5q63 0 110 25.5t77 74.5v461q-30 51 -76.5 79.5t-108.5 28.5 q-107 0 -156.5 -95t-49.5 -248v-21z" />
+<glyph unicode="e" horiz-adv-x="1084" d="M77 510v40q1 241 133 397q132 155 352 155h3q219 0 340 -132t121 -357v-159h-646l-2 -6q8 -107 71.5 -176t172.5 -69q97 0 161 19.5t140 61.5l79 -180q-66 -54 -173 -89.5t-238 -35.5q-234 0 -374 150t-140 381zM379 652l3 -5h358v26q0 93 -43.5 148.5t-131.5 55.5 q-81 0 -128 -62t-58 -163z" />
+<glyph unicode="f" horiz-adv-x="732" d="M27 877v205h161v120q0 182 105 280.5t295 98.5q37 0 75.5 -5.5t84.5 -15.5l-25 -217q-24 4 -46.5 7t-52.5 3q-71 0 -107.5 -39t-36.5 -112v-120h215v-205h-215v-877h-292v877h-161z" />
+<glyph unicode="g" d="M67 511v21q0 256 111.5 413t312.5 157q91 0 160 -41t118 -117l23 138h252v-1077q0 -211 -138.5 -326.5t-385.5 -115.5q-82 0 -174 22.5t-170 61.5l54 218q67 -32 136.5 -48.5t151.5 -16.5q120 0 176.5 50t56.5 156v98q-48 -61 -113 -93t-149 -32q-199 0 -310.5 146.5 t-111.5 385.5zM359 511q0 -142 48 -223.5t156 -81.5q67 0 113.5 24.5t74.5 71.5v470q-28 49 -74.5 76t-111.5 27q-107 0 -156.5 -95t-49.5 -248v-21z" />
+<glyph unicode="h" d="M105 0v1560h292v-615q51 74 125 115.5t164 41.5q169 0 265.5 -112.5t96.5 -347.5v-642h-292v644q0 126 -44.5 178.5t-132.5 52.5q-60 0 -106 -21.5t-76 -60.5v-793h-292z" />
+<glyph unicode="i" horiz-adv-x="547" d="M127 0v1082h292v-1082h-292zM127 1341v219h292v-219h-292z" />
+<glyph unicode="j" horiz-adv-x="543" d="M-98 -420l14 223q23 -6 46 -9t49 -3q59 0 91 41.5t32 127.5v1122h293v-1122q0 -190 -101 -293.5t-281 -103.5q-40 0 -73 4t-70 13zM128 1343v217h293v-217h-293z" />
+<glyph unicode="k" horiz-adv-x="1097" d="M112 0v1560h292v-885h72l251 407h338l-346 -490l399 -592h-335l-299 453h-80v-453h-292z" />
+<glyph unicode="l" horiz-adv-x="547" d="M127 0v1560h292v-1560h-292z" />
+<glyph unicode="m" horiz-adv-x="1772" d="M112 0v1082h271l12 -143q52 78 130.5 120.5t181.5 42.5q104 0 178 -46t112 -139q50 87 130 136t188 49q160 0 252.5 -110.5t92.5 -336.5v-655h-292v656q0 123 -40 171t-119 48q-62 0 -107.5 -27.5t-72.5 -76.5q0 -19 1 -32.5t1 -27.5v-711h-291v656q0 120 -40 169.5 t-120 49.5q-59 0 -103.5 -22.5t-73.5 -63.5v-789h-291z" />
+<glyph unicode="n" d="M107 0v1082h272l13 -155q54 83 133 129t177 46q164 0 256 -103t92 -323v-676h-293v675q0 109 -44 154.5t-133 45.5q-58 0 -104 -23.5t-77 -66.5v-785h-292z" />
+<glyph unicode="o" d="M67 530v21q0 242 135 396.5t374 154.5q240 0 376 -154t136 -397v-21q0 -244 -135.5 -397.5t-374.5 -153.5q-240 0 -375.5 153.5t-135.5 397.5zM358 530q0 -148 52 -237.5t168 -89.5q113 0 165.5 90t52.5 237v21q0 144 -53 235t-167 91q-113 0 -165.5 -91.5t-52.5 -234.5 v-21z" />
+<glyph unicode="p" d="M112 -416v1498h263l17 -128q48 71 115.5 109.5t157.5 38.5q201 0 312 -157t111 -413v-21q0 -240 -111 -386t-310 -146q-85 0 -151 31.5t-113 92.5v-519h-291zM403 297q27 -46 73.5 -70t114.5 -24q106 0 155.5 83t49.5 225v21q0 153 -51 248t-156 95q-66 0 -112.5 -27 t-73.5 -77v-474z" />
+<glyph unicode="q" d="M67 511v21q0 256 110.5 413t311.5 157q90 0 158 -39.5t117 -113.5l27 133h248v-1498h-292v517q-48 -60 -112.5 -91t-147.5 -31q-199 0 -309.5 146t-110.5 386zM358 511q0 -142 48 -225t156 -83q64 0 110 24t75 70v480q-29 48 -74.5 74t-108.5 26q-107 0 -156.5 -96 t-49.5 -249v-21z" />
+<glyph unicode="r" horiz-adv-x="717" d="M112 0v1082h271l13 -160q38 85 98.5 132.5t139.5 47.5q22 0 40.5 -3.5t37.5 -8.5l-31 -259l-107 3q-65 0 -107 -27t-64 -76v-731h-291z" />
+<glyph unicode="s" horiz-adv-x="1056" d="M64 338l2 6h267q3 -87 57 -126t141 -39q81 0 123.5 32t42.5 87q0 48 -46.5 83t-172.5 62q-192 39 -289.5 115.5t-97.5 208.5q0 140 117.5 237.5t314.5 97.5q207 0 329 -97q118 -93 118 -233v-12l-2 -6h-282q0 65 -41.5 106t-121.5 41q-71 0 -111.5 -34.5t-40.5 -86.5 q0 -50 42.5 -82t172.5 -57q200 -40 297 -117.5t97 -213.5q0 -146 -125 -238.5t-330 -92.5q-215 -1 -341 109q-120 105 -120 237v13z" />
+<glyph unicode="t" horiz-adv-x="715" d="M9 877v205h158v265h292v-265h182v-205h-182v-551q0 -63 26 -90t70 -27q23 0 39.5 2.5t38.5 8.5l25 -211q-44 -15 -86 -22.5t-91 -7.5q-151 0 -232.5 83t-81.5 263v552h-158z" />
+<glyph unicode="u" d="M105 429v653h291v-655q0 -118 40 -169.5t118 -51.5q70 0 120 22.5t82 66.5v787h292v-1082h-249l-26 156q-50 -85 -127 -131t-177 -46q-171 0 -267.5 109.5t-96.5 340.5z" />
+<glyph unicode="v" horiz-adv-x="1046" d="M16 1082h305l182 -679l19 -100h6l20 100l178 679h305l-368 -1082h-279z" />
+<glyph unicode="w" horiz-adv-x="1507" d="M29 1082h274l143 -693h6l202 693h195l204 -695h6l141 695h274l-275 -1082h-244l-201 644h-6l-201 -644h-243z" />
+<glyph unicode="x" horiz-adv-x="1046" d="M19 0l337 547l-327 535h328l162 -344h6l166 344h330l-326 -535l337 -547h-329l-177 359l-177 -359h-330z" />
+<glyph unicode="y" horiz-adv-x="1046" d="M5 1082h314l183 -628l12 -60h6l207 688h314l-439 -1244q-46 -116 -125 -195.5t-237 -79.5q-37 0 -68.5 6t-76.5 17l34 213q13 -2 28 -4t27 -2q72 0 111 35.5t60 88.5l34 84z" />
+<glyph unicode="z" horiz-adv-x="1046" d="M75 0v172l515 684h-499v226h866v-167l-519 -691h536v-224h-899z" />
+<glyph unicode="{" horiz-adv-x="676" d="M48 518v201q90 0 133.5 54.5t43.5 155.5v203q0 171 82.5 290.5t277.5 174.5l56 -157q-85 -31 -120 -110.5t-35 -197.5v-203q0 -104 -44.5 -184.5t-134.5 -125.5q90 -47 134.5 -127.5t44.5 -182.5v-203q0 -118 35 -197.5t120 -110.5l-56 -158q-195 55 -277.5 175 t-82.5 291v203q0 99 -43.5 154t-133.5 55z" />
+<glyph unicode="|" horiz-adv-x="519" d="M173 -270v1726h176v-1726h-176z" />
+<glyph unicode="}" horiz-adv-x="676" d="M34 -202q85 31 120 110.5t35 197.5v203q0 104 46 184t140 125q-94 45 -140 125.5t-46 185.5v203q0 118 -35 197.5t-120 110.5l56 157q194 -55 277 -174.5t83 -290.5v-203q0 -101 43 -155.5t135 -54.5v-201q-92 0 -135 -55t-43 -154v-203q0 -171 -83 -291t-277 -175z" />
+<glyph unicode="~" horiz-adv-x="1327" d="M105 448q0 162 86.5 269.5t223.5 107.5q83 0 158.5 -33.5t151.5 -99.5q49 -45 86.5 -64.5t81.5 -19.5q50 0 87 52t37 125l203 -27q0 -161 -88.5 -270.5t-223.5 -109.5q-85 0 -157 31.5t-150 101.5q-52 44 -89.5 64t-81.5 20q-52 0 -87.5 -51t-35.5 -122z" />
+<glyph unicode="&#xa1;" horiz-adv-x="580" d="M142 -374v953h292v-953h-292zM142 825v257h292v-257h-292z" />
+<glyph unicode="&#xa2;" horiz-adv-x="1181" d="M72 525v30q0 218 110.5 367.5t317.5 174.5v221h200v-229q148 -34 235 -141.5t87 -265.5h-274q0 84 -46 139.5t-127 55.5q-116 0 -163.5 -90t-47.5 -232v-30q0 -145 47.5 -233.5t164.5 -88.5q78 0 125 45.5t47 121.5h267l2 -5q3 -135 -85.5 -237t-231.5 -135v-238h-200 v229q-207 23 -317.5 172.5t-110.5 368.5z" />
+<glyph unicode="&#xa3;" horiz-adv-x="1216" d="M92 588v225h155l-8 214q0 210 120.5 330t322.5 120q215 0 333.5 -111.5t114.5 -294.5l-2 -6h-284q0 96 -46 141.5t-117 45.5q-70 0 -110 -58.5t-40 -166.5l10 -214h355v-225h-345l4 -85q0 -78 -30 -150t-86 -129h713v-224h-996v224h10q47 12 70.5 95t23.5 171l-4 98h-164 z" />
+<glyph unicode="&#xa4;" horiz-adv-x="1417" d="M80 118l135 137q-49 76 -74.5 165.5t-25.5 187.5q0 101 28 194t81 171l-144 147l141 144l142 -145q74 55 162.5 85t185.5 30q96 0 185 -30.5t164 -86.5l144 148l142 -145l-148 -151q51 -78 79 -169.5t28 -191.5q0 -97 -25.5 -185.5t-72.5 -163.5l139 -141l-142 -145 l-132 134q-77 -62 -169 -94.5t-192 -32.5q-101 0 -193.5 32.5t-167.5 93.5l-129 -132zM301 608q0 -185 119 -312t291 -127q170 0 289.5 127.5t119.5 311.5q0 183 -119.5 310t-289.5 127q-172 0 -291 -127t-119 -310z" />
+<glyph unicode="&#xa5;" horiz-adv-x="1253" d="M22 1456h321l280 -608h6l281 608h320l-382 -714h244v-200h-324v-110h324v-200h-324v-232h-292v232h-339v200h339v110h-339v200h267z" />
+<glyph unicode="&#xa6;" horiz-adv-x="517" d="M127 -270v795h262v-795h-262zM127 698v758h262v-758h-262z" />
+<glyph unicode="&#xa7;" horiz-adv-x="1287" d="M94 536q0 89 42 158t121 113q-69 50 -103 120.5t-34 168.5q0 172 141.5 276.5t378.5 104.5q243 0 380.5 -111t132.5 -311l-2 -6h-283q0 88 -60 145.5t-168 57.5q-114 0 -171 -43.5t-57 -110.5q0 -75 55.5 -113.5t232.5 -86.5q247 -64 363.5 -157.5t116.5 -265.5 q0 -91 -42 -159t-121 -111q68 -51 102.5 -121t34.5 -168q0 -177 -140 -277t-377 -100q-232 0 -387.5 99.5t-150.5 317.5l2 6l283 1q0 -106 72.5 -152t180.5 -46q107 0 166.5 41.5t59.5 108.5t-61 107.5t-230 90.5q-244 64 -361 157.5t-117 265.5zM385 562q0 -80 55.5 -121.5 t232.5 -93.5q34 -10 68.5 -20t69.5 -21q39 22 60.5 59t21.5 85q0 71 -62 116t-232 97q-40 10 -74 21t-65 22q-38 -22 -56.5 -59t-18.5 -85z" />
+<glyph unicode="&#xa8;" horiz-adv-x="1090" d="M156 1252v204h266v-204h-266zM656 1252v204h266v-204h-266z" />
+<glyph unicode="&#xa9;" horiz-adv-x="1606" d="M86 729q0 315 207 531t503 216q295 0 502.5 -216t207.5 -531q0 -316 -208 -533t-502 -217q-296 0 -503 217t-207 533zM208 729q0 -264 171.5 -444.5t416.5 -180.5q244 0 415.5 180.5t171.5 444.5q0 263 -171.5 442.5t-415.5 179.5q-246 0 -417 -179.5t-171 -442.5z M433 669v119q0 173 94.5 280t254.5 107q157 0 245.5 -79.5t84.5 -228.5l-2 -6h-148q0 94 -45 136.5t-135 42.5q-94 0 -144 -69t-50 -182v-120q0 -115 50 -183.5t144 -68.5q90 0 134.5 41.5t44.5 137.5h148l2 -6q4 -151 -84 -229.5t-245 -78.5q-160 0 -254.5 106t-94.5 281z " />
+<glyph unicode="&#xaa;" horiz-adv-x="909" d="M112 920q0 111 84.5 171t246.5 60h137v51q0 62 -29.5 94.5t-86.5 32.5q-66 0 -102 -26t-36 -73l-165 13l-1 6q-6 98 79 163t225 65q134 0 212.5 -71t78.5 -205v-314q0 -51 6 -95t20 -86h-177q-8 21 -13 44.5t-8 49.5q-33 -47 -88.5 -77.5t-133.5 -30.5q-119 0 -184 61 t-65 167zM287 924q0 -43 29 -65.5t88 -22.5q51 0 105 30t71 65v103h-136q-74 0 -115.5 -32t-41.5 -78z" />
+<glyph unicode="&#xab;" horiz-adv-x="1025" d="M98 507v19l280 390h187l-240 -400l240 -399h-187zM432 507v19l280 390h187l-240 -400l240 -399h-187z" />
+<glyph unicode="&#xac;" horiz-adv-x="1129" d="M126 634v171h835v-431h-200v260h-635z" />
+<glyph unicode="&#xad;" horiz-adv-x="801" d="M113 510v225h564v-225h-564z" />
+<glyph unicode="&#xae;" horiz-adv-x="1606" d="M86 729q0 315 207 531t503 216q295 0 502.5 -216t207.5 -531q0 -316 -208 -533t-502 -217q-296 0 -503 217t-207 533zM208 729q0 -264 171.5 -444.5t416.5 -180.5q244 0 415.5 180.5t171.5 444.5q0 263 -171.5 442.5t-415.5 179.5q-246 0 -417 -179.5t-171 -442.5z M501 316v850h281q151 0 238 -68t87 -194q0 -58 -29 -101.5t-85 -74.5q58 -30 84.5 -84.5t26.5 -128.5v-56q0 -41 3.5 -73.5t13.5 -53.5v-16h-155q-9 21 -11 61.5t-2 82.5v54q0 71 -33.5 105t-109.5 34h-158v-337h-151zM652 787h135q71 0 120.5 30t49.5 86q0 72 -39 101 t-136 29h-130v-246z" />
+<glyph unicode="&#xaf;" horiz-adv-x="1028" d="M148 1292v165h731v-165h-731z" />
+<glyph unicode="&#xb0;" horiz-adv-x="796" d="M126 1203q0 112 80.5 193t192.5 81q110 0 189 -81t79 -193q0 -113 -79 -192t-189 -79q-113 0 -193 79t-80 192zM273 1203q0 -53 37 -88.5t89 -35.5q51 0 86 35t35 89t-35 91t-86 37q-52 0 -89 -37t-37 -91z" />
+<glyph unicode="&#xb1;" horiz-adv-x="1101" d="M90 715v232h333v363h256v-363h327v-232h-327v-383h-256v383h-333zM114 -43v228h834v-228h-834z" />
+<glyph unicode="&#xb2;" horiz-adv-x="860" d="M108 1223q-6 106 82.5 181t236.5 75q144 0 223 -65t79 -183q0 -82 -53.5 -144.5t-178.5 -165.5l-109 -93l2 -6h346v-155h-622v155l309 252q60 50 77.5 83.5t17.5 74.5q0 39 -23.5 65.5t-72.5 26.5q-55 0 -83 -30t-28 -77h-201z" />
+<glyph unicode="&#xb3;" horiz-adv-x="856" d="M95 893l2 6h201q0 -42 31.5 -65.5t91.5 -23.5q56 0 90 24t34 68q0 50 -35 77t-102 27h-111v133h111q62 0 92 24.5t30 70.5q0 38 -28.5 63.5t-83.5 25.5q-51 0 -79.5 -22t-28.5 -53h-200l-2 6q-6 101 82 162.5t222 61.5q152 0 240.5 -59.5t88.5 -169.5q0 -55 -35.5 -100.5 t-96.5 -70.5q70 -24 107.5 -71.5t37.5 -115.5q0 -112 -89.5 -174t-241.5 -62q-146 0 -240 62.5t-88 175.5z" />
+<glyph unicode="&#xb4;" horiz-adv-x="727" d="M108 1212l199 266h309l2 -6l-277 -260h-233z" />
+<glyph unicode="&#xb5;" horiz-adv-x="1264" d="M139 -416v1498h291v-620q0 -149 45 -202.5t135 -53.5q75 0 125 27.5t78 79.5v769h292v-1082h-272l-6 67q-44 -43 -100.5 -65.5t-123.5 -22.5q-51 0 -94.5 10.5t-78.5 33.5v-439h-291z" />
+<glyph unicode="&#xb6;" horiz-adv-x="1078" d="M61 988q0 207 129.5 337.5t362.5 130.5h375v-1456h-292v520h-83q-233 0 -362.5 129.5t-129.5 338.5z" />
+<glyph unicode="&#xb7;" horiz-adv-x="619" d="M159 568v260h292v-260h-292z" />
+<glyph unicode="&#xb8;" horiz-adv-x="549" d="M97 -136l31 142h219l-11 -57q64 -11 107 -52t43 -121q0 -107 -91.5 -171t-259.5 -64l-7 161q51 0 81 20.5t30 62.5q0 41 -32 57.5t-110 21.5z" />
+<glyph unicode="&#xb9;" horiz-adv-x="573" d="M78 1295v159l338 23v-812h-211v630h-127z" />
+<glyph unicode="&#xba;" horiz-adv-x="937" d="M118 1025v117q0 148 94 241.5t252 93.5t252.5 -93.5t94.5 -241.5v-117q0 -149 -94 -241.5t-251 -92.5q-159 0 -253.5 92.5t-94.5 241.5zM293 1025q0 -85 44 -136.5t129 -51.5q82 0 126 51.5t44 136.5v117q0 83 -44.5 135t-127.5 52q-84 0 -127.5 -52t-43.5 -135v-117z " />
+<glyph unicode="&#xbb;" horiz-adv-x="1025" d="M102 151l239 399l-239 400h188l280 -390v-19l-280 -390h-188zM448 151l239 399l-239 400h188l280 -390v-19l-280 -390h-188z" />
+<glyph unicode="&#xbc;" horiz-adv-x="1493" d="M167 1294v159l338 23v-812h-211v630h-127zM309 192l711 1138l142 -75l-711 -1138zM762 265l424 536h211v-505h101v-157h-101v-139h-211v139h-410zM978 296h208v257l-6 2l-13 -20z" />
+<glyph unicode="&#xbd;" horiz-adv-x="1553" d="M167 1294v159l338 23v-812h-211v630h-127zM322 192l711 1138l142 -75l-711 -1138zM919 556q-6 106 82.5 181t236.5 75q144 0 223 -65t79 -183q0 -82 -53.5 -144.5t-178.5 -165.5l-109 -93l2 -6h346v-155h-622v155l309 252q60 50 77.5 83.5t17.5 74.5q0 39 -23.5 65.5 t-72.5 26.5q-55 0 -83 -30t-28 -77h-201z" />
+<glyph unicode="&#xbe;" horiz-adv-x="1717" d="M111 894l2 6h201q0 -42 31.5 -65.5t91.5 -23.5q56 0 90 24t34 68q0 50 -35 77t-102 27h-111v133h111q62 0 92 24.5t30 70.5q0 38 -28.5 63.5t-83.5 25.5q-51 0 -79.5 -22t-28.5 -53h-200l-2 6q-6 101 82 162.5t222 61.5q152 0 240.5 -59.5t88.5 -169.5 q0 -55 -35.5 -100.5t-96.5 -70.5q70 -24 107.5 -71.5t37.5 -115.5q0 -112 -89.5 -174t-241.5 -62q-146 0 -240 62.5t-88 175.5zM492 192l711 1138l142 -75l-711 -1138zM951 265l424 536h211v-505h101v-157h-101v-139h-211v139h-410zM1167 296h208v257l-6 2l-13 -20z" />
+<glyph unicode="&#xbf;" horiz-adv-x="1037" d="M75 27q0 125 74 233t187 183q60 45 79.5 92.5t19.5 132.5h291q-2 -141 -42.5 -206.5t-159.5 -157.5q-72 -58 -114.5 -125.5t-42.5 -149.5q0 -90 48.5 -142t139.5 -52q73 0 124 43t54 128h283l2 -6q2 -191 -127.5 -292.5t-335.5 -101.5q-226 0 -353 113t-127 308zM433 831 v251h294v-251h-294z" />
+<glyph unicode="&#xc0;" horiz-adv-x="1311" d="M12 0l501 1456h299l499 -1456h-295l-99 314h-511l-99 -314h-295zM307 1820l2 6h309l197 -266h-237zM478 543h367l-180 572h-6z" />
+<glyph unicode="&#xc1;" horiz-adv-x="1311" d="M12 0l501 1456h299l499 -1456h-295l-99 314h-511l-99 -314h-295zM478 543h367l-180 572h-6zM519 1560l199 266h309l2 -6l-277 -260h-233z" />
+<glyph unicode="&#xc2;" horiz-adv-x="1311" d="M12 0l501 1456h299l499 -1456h-295l-99 314h-511l-99 -314h-295zM286 1592v26l282 240h169l287 -243v-23h-232l-140 133l-139 -133h-227zM478 543h367l-180 572h-6z" />
+<glyph unicode="&#xc3;" horiz-adv-x="1311" d="M12 0l501 1456h299l499 -1456h-295l-99 314h-511l-99 -314h-295zM281 1644q0 94 59.5 163.5t149.5 69.5q56 0 152 -43.5t148 -43.5q34 0 60 32t26 79l154 -45q0 -96 -59.5 -163.5t-150.5 -67.5q-70 0 -158.5 43.5t-140.5 43.5q-36 0 -60 -32.5t-24 -77.5zM478 543h367 l-180 572h-6z" />
+<glyph unicode="&#xc4;" horiz-adv-x="1311" d="M12 0l501 1456h299l499 -1456h-295l-99 314h-511l-99 -314h-295zM272 1601v204h266v-204h-266zM478 543h367l-180 572h-6zM772 1601v204h266v-204h-266z" />
+<glyph unicode="&#xc5;" horiz-adv-x="1311" d="M12 0l501 1456h299l499 -1456h-295l-99 314h-511l-99 -314h-295zM444 1739q0 83 61.5 139.5t151.5 56.5q88 0 149 -56.5t61 -139.5q0 -84 -60.5 -138t-149.5 -54q-90 0 -151.5 54t-61.5 138zM478 543h367l-180 572h-6zM560 1739q0 -43 28 -70.5t69 -27.5t67.5 27.5 t26.5 70.5q0 44 -26.5 72t-67.5 28q-42 0 -69.5 -28.5t-27.5 -71.5z" />
+<glyph unicode="&#xc6;" horiz-adv-x="1925" d="M3 0l784 1456h1016v-228h-596l16 -366h499v-227h-490l17 -408h616v-227h-898l-14 335h-440l-168 -335h-342zM633 575h310l-23 559l-6 1z" />
+<glyph unicode="&#xc7;" horiz-adv-x="1309" d="M93 583v289q0 265 160 435t416 170q270 0 422 -138.5t148 -377.5l-2 -6h-284q0 144 -69 220.5t-215 76.5q-131 0 -208 -106.5t-77 -271.5v-291q0 -167 81 -273.5t219 -106.5q137 0 202.5 73.5t65.5 218.5h283l2 -6q4 -235 -143.5 -372.5t-409.5 -137.5q-263 0 -427 169 t-164 435zM524 -137l31 142h219l-11 -57q64 -11 107 -52t43 -121q0 -107 -91.5 -171t-259.5 -64l-7 161q51 0 81 20.5t30 62.5q0 41 -32 57.5t-110 21.5z" />
+<glyph unicode="&#xc8;" horiz-adv-x="1176" d="M136 0v1456h995v-225h-703v-366h603v-225h-603v-416h705v-224h-997zM244 1820l2 6h309l197 -266h-237z" />
+<glyph unicode="&#xc9;" horiz-adv-x="1176" d="M136 0v1456h995v-225h-703v-366h603v-225h-603v-416h705v-224h-997zM456 1560l199 266h309l2 -6l-277 -260h-233z" />
+<glyph unicode="&#xca;" horiz-adv-x="1176" d="M136 0v1456h995v-225h-703v-366h603v-225h-603v-416h705v-224h-997zM238 1592v26l282 240h169l287 -243v-23h-232l-140 133l-139 -133h-227z" />
+<glyph unicode="&#xcb;" horiz-adv-x="1176" d="M136 0v1456h995v-225h-703v-366h603v-225h-603v-416h705v-224h-997zM221 1601v204h266v-204h-266zM721 1601v204h266v-204h-266z" />
+<glyph unicode="&#xcc;" horiz-adv-x="601" d="M-58 1820l2 6h309l197 -266h-237zM154 0v1456h292v-1456h-292z" />
+<glyph unicode="&#xcd;" horiz-adv-x="601" d="M152 1560l199 266h309l2 -6l-277 -260h-233zM154 0v1456h292v-1456h-292z" />
+<glyph unicode="&#xce;" horiz-adv-x="601" d="M-64 1592v26l282 240h169l287 -243v-23h-232l-140 133l-139 -133h-227zM154 0v1456h292v-1456h-292z" />
+<glyph unicode="&#xcf;" horiz-adv-x="601" d="M-81 1601v204h266v-204h-266zM154 0v1456h292v-1456h-292zM419 1601v204h266v-204h-266z" />
+<glyph unicode="&#xd0;" horiz-adv-x="1372" d="M31 652v181h135v623h500q267 0 440 -170.5t173 -437.5v-241q0 -268 -173 -437.5t-440 -169.5h-500v652h-135zM458 224h193q157 0 246 106t89 277v243q0 169 -89 275t-246 106h-193v-398h244v-181h-244v-428z" />
+<glyph unicode="&#xd1;" horiz-adv-x="1450" d="M136 0v1456h292l588 -994l6 1v993h291v-1456h-291l-588 995l-6 -1v-994h-292zM349 1644q0 94 59.5 163.5t149.5 69.5q56 0 152 -43.5t148 -43.5q34 0 60 32t26 79l154 -45q0 -96 -59.5 -163.5t-150.5 -67.5q-70 0 -158.5 43.5t-140.5 43.5q-36 0 -60 -32.5t-24 -77.5z " />
+<glyph unicode="&#xd2;" horiz-adv-x="1399" d="M92 597v262q0 267 167.5 442.5t436.5 175.5q271 0 441 -175.5t170 -442.5v-262q0 -268 -169.5 -443t-440.5 -175q-269 0 -437 175t-168 443zM339 1820l2 6h309l197 -266h-237zM383 597q0 -173 83 -282t231 -109q150 0 234 109t84 282v264q0 170 -85 279t-234 109 t-231 -108.5t-82 -279.5v-264z" />
+<glyph unicode="&#xd3;" horiz-adv-x="1399" d="M92 597v262q0 267 167.5 442.5t436.5 175.5q271 0 441 -175.5t170 -442.5v-262q0 -268 -169.5 -443t-440.5 -175q-269 0 -437 175t-168 443zM383 597q0 -173 83 -282t231 -109q150 0 234 109t84 282v264q0 170 -85 279t-234 109t-231 -108.5t-82 -279.5v-264zM551 1581 l199 266h309l2 -6l-277 -260h-233z" />
+<glyph unicode="&#xd4;" horiz-adv-x="1399" d="M92 597v262q0 267 167.5 442.5t436.5 175.5q271 0 441 -175.5t170 -442.5v-262q0 -268 -169.5 -443t-440.5 -175q-269 0 -437 175t-168 443zM333 1613v26l282 240h169l287 -243v-23h-232l-140 133l-139 -133h-227zM383 597q0 -173 83 -282t231 -109q150 0 234 109t84 282 v264q0 170 -85 279t-234 109t-231 -108.5t-82 -279.5v-264z" />
+<glyph unicode="&#xd5;" horiz-adv-x="1399" d="M92 597v262q0 267 167.5 442.5t436.5 175.5q271 0 441 -175.5t170 -442.5v-262q0 -268 -169.5 -443t-440.5 -175q-269 0 -437 175t-168 443zM324 1665q0 94 59.5 163.5t149.5 69.5q56 0 152 -43.5t148 -43.5q34 0 60 32t26 79l154 -45q0 -96 -59.5 -163.5t-150.5 -67.5 q-70 0 -158.5 43.5t-140.5 43.5q-36 0 -60 -32.5t-24 -77.5zM383 597q0 -173 83 -282t231 -109q150 0 234 109t84 282v264q0 170 -85 279t-234 109t-231 -108.5t-82 -279.5v-264z" />
+<glyph unicode="&#xd6;" horiz-adv-x="1399" d="M92 597v262q0 267 167.5 442.5t436.5 175.5q271 0 441 -175.5t170 -442.5v-262q0 -268 -169.5 -443t-440.5 -175q-269 0 -437 175t-168 443zM316 1622v204h266v-204h-266zM383 597q0 -173 83 -282t231 -109q150 0 234 109t84 282v264q0 170 -85 279t-234 109t-231 -108.5 t-82 -279.5v-264zM816 1622v204h266v-204h-266z" />
+<glyph unicode="&#xd7;" horiz-adv-x="1088" d="M64 371l309 315l-309 315l172 164l303 -310l304 310l172 -164l-309 -315l309 -315l-172 -164l-304 309l-303 -309z" />
+<glyph unicode="&#xd8;" horiz-adv-x="1410" d="M92 597v262q0 267 167.5 442.5t436.5 175.5q100 0 188.5 -26.5t162.5 -74.5l83 142h143l-130 -223q79 -83 121.5 -195t42.5 -241v-262q0 -268 -169.5 -443t-440.5 -175q-79 0 -151 16t-133 47l-80 -137h-143l119 204q-104 83 -160.5 209.5t-56.5 278.5zM383 597 q0 -74 15.5 -137.5t45.5 -107.5l6 -1l468 803q-42 45 -98 70t-124 25q-149 0 -231 -108.5t-82 -279.5v-264zM535 251q33 -22 74 -33.5t88 -11.5q150 0 234 109t84 282v264q0 45 -7 87t-18 73l-6 1z" />
+<glyph unicode="&#xd9;" horiz-adv-x="1407" d="M120 490v966h293v-966q0 -144 77 -215.5t212 -71.5q137 0 215 71t78 216v966h293v-966q0 -245 -162 -378t-424 -133q-261 0 -421.5 133t-160.5 378zM344 1820l2 6h309l197 -266h-237z" />
+<glyph unicode="&#xda;" horiz-adv-x="1407" d="M120 490v966h293v-966q0 -144 77 -215.5t212 -71.5q137 0 215 71t78 216v966h293v-966q0 -245 -162 -378t-424 -133q-261 0 -421.5 133t-160.5 378zM556 1560l199 266h309l2 -6l-277 -260h-233z" />
+<glyph unicode="&#xdb;" horiz-adv-x="1407" d="M120 490v966h293v-966q0 -144 77 -215.5t212 -71.5q137 0 215 71t78 216v966h293v-966q0 -245 -162 -378t-424 -133q-261 0 -421.5 133t-160.5 378zM338 1592v26l282 240h169l287 -243v-23h-232l-140 133l-139 -133h-227z" />
+<glyph unicode="&#xdc;" horiz-adv-x="1407" d="M120 490v966h293v-966q0 -144 77 -215.5t212 -71.5q137 0 215 71t78 216v966h293v-966q0 -245 -162 -378t-424 -133q-261 0 -421.5 133t-160.5 378zM321 1601v204h266v-204h-266zM821 1601v204h266v-204h-266z" />
+<glyph unicode="&#xdd;" horiz-adv-x="1292" d="M5 1456h320l318 -671h6l318 671h320l-500 -944v-512h-291v527zM504 1560l199 266h309l2 -6l-277 -260h-233z" />
+<glyph unicode="&#xde;" horiz-adv-x="1247" d="M132 0v1456h292v-270h221q254 0 396 -124t142 -324q0 -201 -142 -325t-396 -124h-221v-289h-292zM424 514h221q123 0 184.5 63.5t61.5 158.5t-61.5 160t-184.5 65h-221v-447z" />
+<glyph unicode="&#xdf;" horiz-adv-x="1294" d="M135 0v1101q0 226 129 349t352 123q180 0 299 -95.5t119 -271.5q0 -108 -53.5 -205.5t-53.5 -165.5q0 -56 150 -197.5t150 -281.5q0 -189 -115 -283t-332 -94q-81 0 -160.5 15t-118.5 41l55 223q39 -22 96 -38.5t122 -16.5q76 0 119 38t43 103q0 71 -150 205.5 t-150 276.5q0 90 54.5 190t54.5 175q0 68 -45 113t-103 45q-76 0 -123.5 -67.5t-47.5 -184.5v-1097h-291z" />
+<glyph unicode="&#xe0;" horiz-adv-x="1100" d="M55 305q0 159 122.5 246.5t357.5 87.5h163v86q0 78 -41 121t-121 43q-71 0 -109.5 -34.5t-38.5 -95.5l-282 1l-1 6q-7 137 119 236.5t331 99.5q194 0 315 -98.5t121 -280.5v-447q0 -76 11.5 -143t36.5 -133h-292q-16 37 -27.5 78t-16.5 84q-45 -79 -118.5 -131 t-175.5 -52q-170 0 -262 87.5t-92 238.5zM184 1492l2 6h309l197 -266h-237zM346 315q0 -54 36 -87t98 -33q77 0 137 38t81 88v153h-163q-93 0 -141 -46.5t-48 -112.5z" />
+<glyph unicode="&#xe1;" horiz-adv-x="1100" d="M55 305q0 159 122.5 246.5t357.5 87.5h163v86q0 78 -41 121t-121 43q-71 0 -109.5 -34.5t-38.5 -95.5l-282 1l-1 6q-7 137 119 236.5t331 99.5q194 0 315 -98.5t121 -280.5v-447q0 -76 11.5 -143t36.5 -133h-292q-16 37 -27.5 78t-16.5 84q-45 -79 -118.5 -131 t-175.5 -52q-170 0 -262 87.5t-92 238.5zM346 315q0 -54 36 -87t98 -33q77 0 137 38t81 88v153h-163q-93 0 -141 -46.5t-48 -112.5zM396 1232l199 266h309l2 -6l-277 -260h-233z" />
+<glyph unicode="&#xe2;" horiz-adv-x="1100" d="M55 305q0 159 122.5 246.5t357.5 87.5h163v86q0 78 -41 121t-121 43q-71 0 -109.5 -34.5t-38.5 -95.5l-282 1l-1 6q-7 137 119 236.5t331 99.5q194 0 315 -98.5t121 -280.5v-447q0 -76 11.5 -143t36.5 -133h-292q-16 37 -27.5 78t-16.5 84q-45 -79 -118.5 -131 t-175.5 -52q-170 0 -262 87.5t-92 238.5zM178 1270v26l282 240h169l287 -243v-23h-232l-140 133l-139 -133h-227zM346 315q0 -54 36 -87t98 -33q77 0 137 38t81 88v153h-163q-93 0 -141 -46.5t-48 -112.5z" />
+<glyph unicode="&#xe3;" horiz-adv-x="1100" d="M55 305q0 159 122.5 246.5t357.5 87.5h163v86q0 78 -41 121t-121 43q-71 0 -109.5 -34.5t-38.5 -95.5l-282 1l-1 6q-7 137 119 236.5t331 99.5q194 0 315 -98.5t121 -280.5v-447q0 -76 11.5 -143t36.5 -133h-292q-16 37 -27.5 78t-16.5 84q-45 -79 -118.5 -131 t-175.5 -52q-170 0 -262 87.5t-92 238.5zM169 1322q0 94 59.5 163.5t149.5 69.5q56 0 152 -43.5t148 -43.5q34 0 60 32t26 79l154 -45q0 -96 -59.5 -163.5t-150.5 -67.5q-70 0 -158.5 43.5t-140.5 43.5q-36 0 -60 -32.5t-24 -77.5zM346 315q0 -54 36 -87t98 -33q77 0 137 38 t81 88v153h-163q-93 0 -141 -46.5t-48 -112.5z" />
+<glyph unicode="&#xe4;" horiz-adv-x="1100" d="M55 305q0 159 122.5 246.5t357.5 87.5h163v86q0 78 -41 121t-121 43q-71 0 -109.5 -34.5t-38.5 -95.5l-282 1l-1 6q-7 137 119 236.5t331 99.5q194 0 315 -98.5t121 -280.5v-447q0 -76 11.5 -143t36.5 -133h-292q-16 37 -27.5 78t-16.5 84q-45 -79 -118.5 -131 t-175.5 -52q-170 0 -262 87.5t-92 238.5zM161 1279v204h266v-204h-266zM346 315q0 -54 36 -87t98 -33q77 0 137 38t81 88v153h-163q-93 0 -141 -46.5t-48 -112.5zM661 1279v204h266v-204h-266z" />
+<glyph unicode="&#xe5;" horiz-adv-x="1100" d="M55 305q0 159 122.5 246.5t357.5 87.5h163v86q0 78 -41 121t-121 43q-71 0 -109.5 -34.5t-38.5 -95.5l-282 1l-1 6q-7 137 119 236.5t331 99.5q194 0 315 -98.5t121 -280.5v-447q0 -76 11.5 -143t36.5 -133h-292q-16 37 -27.5 78t-16.5 84q-45 -79 -118.5 -131 t-175.5 -52q-170 0 -262 87.5t-92 238.5zM332 1417q0 83 61.5 139.5t151.5 56.5q88 0 149 -56.5t61 -139.5q0 -84 -60.5 -138t-149.5 -54q-90 0 -151.5 54t-61.5 138zM346 315q0 -54 36 -87t98 -33q77 0 137 38t81 88v153h-163q-93 0 -141 -46.5t-48 -112.5zM448 1417 q0 -43 28 -70.5t69 -27.5t67.5 27.5t26.5 70.5q0 44 -26.5 72t-67.5 28q-42 0 -69.5 -28.5t-27.5 -71.5z" />
+<glyph unicode="&#xe6;" horiz-adv-x="1729" d="M46 317q0 159 127 245t370 86h181v59q0 79 -41 124.5t-115 45.5q-81 0 -127 -37.5t-46 -93.5l-283 18l-2 6q-6 144 121.5 238t339.5 94q102 0 186 -27.5t143 -79.5q61 52 142.5 79.5t180.5 27.5q212 0 333 -132t121 -358v-158h-650l-2 -6q4 -112 66 -178.5t186 -66.5 q92 0 154 20t140 61l77 -184q-62 -48 -169 -84.5t-233 -36.5q-129 0 -229.5 40.5t-167.5 116.5q-60 -68 -161.5 -112.5t-240.5 -44.5q-192 0 -296.5 90.5t-104.5 247.5zM338 313q0 -59 41.5 -93.5t123.5 -34.5q58 0 121 30.5t100 72.5v176h-179q-98 0 -152.5 -44t-54.5 -107 zM1027 649l2 -5h362v28q0 94 -42.5 149.5t-125.5 55.5q-95 0 -142 -61.5t-54 -166.5z" />
+<glyph unicode="&#xe7;" horiz-adv-x="1060" d="M62 525v30q0 239 130.5 393t372.5 154q200 0 322.5 -114t118.5 -300l-2 -6h-266q0 84 -46 139.5t-127 55.5q-116 0 -163.5 -90t-47.5 -232v-30q0 -145 47.5 -233.5t164.5 -88.5q78 0 125 45.5t47 121.5h265l3 -6q4 -164 -123.5 -274.5t-316.5 -110.5q-242 0 -373 153 t-131 393zM415 -137l31 142h219l-11 -57q64 -11 107 -52t43 -121q0 -107 -91.5 -171t-259.5 -64l-7 161q51 0 81 20.5t30 62.5q0 41 -32 57.5t-110 21.5z" />
+<glyph unicode="&#xe8;" horiz-adv-x="1084" d="M77 510v40q0 241 132.5 397t355.5 155q219 0 340 -132t121 -357v-159h-646l-2 -6q8 -107 71.5 -176t172.5 -69q97 0 161 19.5t140 61.5l79 -180q-66 -54 -173 -89.5t-238 -35.5q-234 0 -374 150t-140 381zM186 1498l2 6h309l197 -266h-237zM379 652l3 -5h358v26 q0 93 -43.5 148.5t-131.5 55.5q-81 0 -128 -62t-58 -163z" />
+<glyph unicode="&#xe9;" horiz-adv-x="1084" d="M77 510v40q0 241 132.5 397t355.5 155q219 0 340 -132t121 -357v-159h-646l-2 -6q8 -107 71.5 -176t172.5 -69q97 0 161 19.5t140 61.5l79 -180q-66 -54 -173 -89.5t-238 -35.5q-234 0 -374 150t-140 381zM379 652l3 -5h358v26q0 93 -43.5 148.5t-131.5 55.5 q-81 0 -128 -62t-58 -163zM398 1238l199 266h309l2 -6l-277 -260h-233z" />
+<glyph unicode="&#xea;" horiz-adv-x="1084" d="M77 510v40q0 241 132.5 397t355.5 155q219 0 340 -132t121 -357v-159h-646l-2 -6q8 -107 71.5 -176t172.5 -69q97 0 161 19.5t140 61.5l79 -180q-66 -54 -173 -89.5t-238 -35.5q-234 0 -374 150t-140 381zM180 1271v26l282 240h169l287 -243v-23h-232l-140 133l-139 -133 h-227zM379 652l3 -5h358v26q0 93 -43.5 148.5t-131.5 55.5q-81 0 -128 -62t-58 -163z" />
+<glyph unicode="&#xeb;" horiz-adv-x="1084" d="M77 510v40q0 241 132.5 397t355.5 155q219 0 340 -132t121 -357v-159h-646l-2 -6q8 -107 71.5 -176t172.5 -69q97 0 161 19.5t140 61.5l79 -180q-66 -54 -173 -89.5t-238 -35.5q-234 0 -374 150t-140 381zM163 1280v204h266v-204h-266zM379 652l3 -5h358v26 q0 93 -43.5 148.5t-131.5 55.5q-81 0 -128 -62t-58 -163zM663 1280v204h266v-204h-266z" />
+<glyph unicode="&#xec;" horiz-adv-x="562" d="M-78 1498l2 6h309l197 -266h-237zM133 0v1082h292v-1082h-292z" />
+<glyph unicode="&#xed;" horiz-adv-x="562" d="M132 1217l199 266h309l2 -6l-277 -260h-233zM133 0v1082h292v-1082h-292z" />
+<glyph unicode="&#xee;" horiz-adv-x="562" d="M-84 1251v26l282 240h169l287 -243v-23h-232l-140 133l-139 -133h-227zM133 0v1082h292v-1082h-292z" />
+<glyph unicode="&#xef;" horiz-adv-x="562" d="M-101 1258v204h266v-204h-266zM133 0v1082h292v-1082h-292zM399 1258v204h266v-204h-266z" />
+<glyph unicode="&#xf0;" horiz-adv-x="1218" d="M48 468q0 226 134.5 362.5t365.5 136.5q81 0 153 -25.5t124 -70.5l4 4q-14 83 -54 153.5t-100 125.5l-245 -136l-78 113l192 106l-1 6q-31 16 -68 30t-77 26l92 218q88 -19 168.5 -52.5t149.5 -80.5l198 109l77 -113l-162 -90q102 -106 158.5 -245t56.5 -303v-196 q0 -250 -157 -408.5t-392 -158.5q-238 0 -388.5 140.5t-150.5 348.5zM340 468q0 -112 68 -188.5t183 -76.5q116 0 184.5 96.5t68.5 246.5v118q-35 39 -99 65t-151 26q-122 0 -188 -79t-66 -208z" />
+<glyph unicode="&#xf1;" d="M107 0v1082h272l13 -155q54 83 133 129t177 46q164 0 256 -103t92 -323v-676h-293v675q0 109 -44 154.5t-133 45.5q-58 0 -104 -23.5t-77 -66.5v-785h-292zM202 1322q0 94 59.5 163.5t149.5 69.5q56 0 152 -43.5t148 -43.5q34 0 60 32t26 79l154 -45q0 -96 -59.5 -163.5 t-150.5 -67.5q-70 0 -158.5 43.5t-140.5 43.5q-36 0 -60 -32.5t-24 -77.5z" />
+<glyph unicode="&#xf2;" d="M67 530v21q0 242 135 396.5t374 154.5q240 0 376 -154t136 -397v-21q0 -244 -135.5 -397.5t-374.5 -153.5q-240 0 -375.5 153.5t-135.5 397.5zM217 1498l2 6h309l197 -266h-237zM358 530q0 -148 52 -237.5t168 -89.5q113 0 165.5 90t52.5 237v21q0 144 -53 235t-167 91 q-113 0 -165.5 -91.5t-52.5 -234.5v-21z" />
+<glyph unicode="&#xf3;" d="M67 530v21q0 242 135 396.5t374 154.5q240 0 376 -154t136 -397v-21q0 -244 -135.5 -397.5t-374.5 -153.5q-240 0 -375.5 153.5t-135.5 397.5zM358 530q0 -148 52 -237.5t168 -89.5q113 0 165.5 90t52.5 237v21q0 144 -53 235t-167 91q-113 0 -165.5 -91.5t-52.5 -234.5 v-21zM429 1238l199 266h309l2 -6l-277 -260h-233z" />
+<glyph unicode="&#xf4;" d="M67 530v21q0 242 135 396.5t374 154.5q240 0 376 -154t136 -397v-21q0 -244 -135.5 -397.5t-374.5 -153.5q-240 0 -375.5 153.5t-135.5 397.5zM211 1270v26l282 240h169l287 -243v-23h-232l-140 133l-139 -133h-227zM358 530q0 -148 52 -237.5t168 -89.5q113 0 165.5 90 t52.5 237v21q0 144 -53 235t-167 91q-113 0 -165.5 -91.5t-52.5 -234.5v-21z" />
+<glyph unicode="&#xf5;" d="M67 530v21q0 242 135 396.5t374 154.5q240 0 376 -154t136 -397v-21q0 -244 -135.5 -397.5t-374.5 -153.5q-240 0 -375.5 153.5t-135.5 397.5zM202 1322q0 94 59.5 163.5t149.5 69.5q56 0 152 -43.5t148 -43.5q34 0 60 32t26 79l154 -45q0 -96 -59.5 -163.5t-150.5 -67.5 q-70 0 -158.5 43.5t-140.5 43.5q-36 0 -60 -32.5t-24 -77.5zM358 530q0 -148 52 -237.5t168 -89.5q113 0 165.5 90t52.5 237v21q0 144 -53 235t-167 91q-113 0 -165.5 -91.5t-52.5 -234.5v-21z" />
+<glyph unicode="&#xf6;" d="M67 530v21q0 242 135 396.5t374 154.5q240 0 376 -154t136 -397v-21q0 -244 -135.5 -397.5t-374.5 -153.5q-240 0 -375.5 153.5t-135.5 397.5zM194 1279v204h266v-204h-266zM358 530q0 -148 52 -237.5t168 -89.5q113 0 165.5 90t52.5 237v21q0 144 -53 235t-167 91 q-113 0 -165.5 -91.5t-52.5 -234.5v-21zM694 1279v204h266v-204h-266z" />
+<glyph unicode="&#xf7;" horiz-adv-x="1168" d="M63 573v227h1029v-227h-1029zM432 164v233h293v-233h-293zM432 973v233h293v-233h-293z" />
+<glyph unicode="&#xf8;" d="M67 530v21q0 242 135 396.5t374 154.5q50 0 96.5 -8t90.5 -22l70 143h161l-103 -211q95 -74 146 -191.5t51 -261.5v-21q0 -244 -135.5 -397.5t-374.5 -153.5q-48 0 -92 7t-84 19l-71 -146h-161l103 211q-101 71 -153.5 190.5t-52.5 269.5zM358 530q0 -62 8.5 -114 t26.5 -86l6 -1l260 531q-19 8 -39.5 12.5t-43.5 4.5q-113 0 -165.5 -91.5t-52.5 -234.5v-21zM505 215q15 -7 33.5 -9.5t39.5 -2.5q113 0 165.5 90t52.5 237v21q0 54 -8 102t-22 82l-6 1z" />
+<glyph unicode="&#xf9;" d="M105 429v653h291v-655q0 -118 40 -169.5t118 -51.5q70 0 120 22.5t82 66.5v787h292v-1082h-249l-26 156q-50 -85 -127 -131t-177 -46q-171 0 -267.5 109.5t-96.5 340.5zM216 1477l2 6h309l197 -266h-237z" />
+<glyph unicode="&#xfa;" d="M105 429v653h291v-655q0 -118 40 -169.5t118 -51.5q70 0 120 22.5t82 66.5v787h292v-1082h-249l-26 156q-50 -85 -127 -131t-177 -46q-171 0 -267.5 109.5t-96.5 340.5zM428 1217l199 266h309l2 -6l-277 -260h-233z" />
+<glyph unicode="&#xfb;" d="M105 429v653h291v-655q0 -118 40 -169.5t118 -51.5q70 0 120 22.5t82 66.5v787h292v-1082h-249l-26 156q-50 -85 -127 -131t-177 -46q-171 0 -267.5 109.5t-96.5 340.5zM210 1251v26l282 240h169l287 -243v-23h-232l-140 133l-139 -133h-227z" />
+<glyph unicode="&#xfc;" d="M105 429v653h291v-655q0 -118 40 -169.5t118 -51.5q70 0 120 22.5t82 66.5v787h292v-1082h-249l-26 156q-50 -85 -127 -131t-177 -46q-171 0 -267.5 109.5t-96.5 340.5zM193 1258v204h266v-204h-266zM693 1258v204h266v-204h-266z" />
+<glyph unicode="&#xfd;" horiz-adv-x="1046" d="M5 1082h314l183 -628l12 -60h6l207 688h314l-439 -1244q-46 -116 -125 -195.5t-237 -79.5q-37 0 -68.5 6t-76.5 17l34 213q13 -2 28 -4t27 -2q72 0 111 35.5t60 88.5l34 84zM375 1217l199 266h309l2 -6l-277 -260h-233z" />
+<glyph unicode="&#xfe;" horiz-adv-x="1162" d="M121 0v1560h292v-591q47 64 112 98.5t150 34.5q201 0 312 -157t111 -413v-21q0 -240 -111 -386t-310 -146q-85 0 -151 31.5t-113 92.5v-519h-291v416h-1zM413 297q27 -46 73.5 -70t114.5 -24q106 0 155.5 83t49.5 225v21q0 153 -51 248t-156 95q-66 0 -112.5 -27 t-73.5 -77v-474z" />
+<glyph unicode="&#xff;" horiz-adv-x="1046" d="M5 1082h314l183 -628l12 -60h6l207 688h314l-439 -1244q-46 -116 -125 -195.5t-237 -79.5q-37 0 -68.5 6t-76.5 17l34 213q13 -2 28 -4t27 -2q72 0 111 35.5t60 88.5l34 84zM142 1258v204h266v-204h-266zM642 1258v204h266v-204h-266z" />
+<glyph unicode="&#x152;" horiz-adv-x="1984" d="M97 576v304q0 265 167 431t437 166q69 0 140 -6t150 -15h865v-225h-703v-366h603v-225h-603v-416h705v-224h-867q-92 -10 -156.5 -15.5t-131.5 -5.5q-270 0 -438 165.5t-168 431.5zM388 576q0 -182 83.5 -277t231.5 -95q40 0 79.5 2t78.5 7v1030q-45 4 -83.5 6.5 t-76.5 2.5q-148 0 -230.5 -94.5t-82.5 -275.5v-306z" />
+<glyph unicode="&#x153;" horiz-adv-x="1848" d="M67 530v21q0 242 135 396.5t374 154.5q127 0 227 -46.5t167 -129.5q65 84 159.5 130t213.5 46q219 0 340 -132t121 -357v-159h-646l-2 -6q8 -107 71.5 -176t172.5 -69q97 0 161 19.5t140 61.5l79 -180q-66 -54 -173 -89.5t-238 -35.5q-127 0 -228 46t-169 131 q-67 -85 -167 -131t-227 -46q-240 0 -375.5 153.5t-135.5 397.5zM358 530q0 -148 52 -237.5t168 -89.5q113 0 165.5 90t52.5 237v21q0 144 -53 235t-167 91q-113 0 -165.5 -91.5t-52.5 -234.5v-21zM1157 652l3 -5h358v26q0 93 -43.5 148.5t-131.5 55.5q-81 0 -128 -62 t-58 -163z" />
+<glyph unicode="&#x178;" horiz-adv-x="1292" d="M5 1456h320l318 -671h6l318 671h320l-500 -944v-512h-291v527zM269 1601v204h266v-204h-266zM769 1601v204h266v-204h-266z" />
+<glyph unicode="&#x2c6;" horiz-adv-x="1016" d="M137 1252v26l282 240h169l287 -243v-23h-232l-140 133l-139 -133h-227z" />
+<glyph unicode="&#x2dc;" horiz-adv-x="986" d="M119 1272q0 94 59.5 163.5t149.5 69.5q56 0 152 -43.5t148 -43.5q34 0 60 32t26 79l154 -45q0 -96 -59.5 -163.5t-150.5 -67.5q-70 0 -158.5 43.5t-140.5 43.5q-36 0 -60 -32.5t-24 -77.5z" />
+<glyph unicode="&#x2000;" horiz-adv-x="967" />
+<glyph unicode="&#x2001;" horiz-adv-x="1935" />
+<glyph unicode="&#x2002;" horiz-adv-x="967" />
+<glyph unicode="&#x2003;" horiz-adv-x="1935" />
+<glyph unicode="&#x2004;" horiz-adv-x="645" />
+<glyph unicode="&#x2005;" horiz-adv-x="483" />
+<glyph unicode="&#x2006;" horiz-adv-x="322" />
+<glyph unicode="&#x2007;" horiz-adv-x="322" />
+<glyph unicode="&#x2008;" horiz-adv-x="241" />
+<glyph unicode="&#x2009;" horiz-adv-x="387" />
+<glyph unicode="&#x200a;" horiz-adv-x="107" />
+<glyph unicode="&#x2010;" horiz-adv-x="801" d="M113 510v225h564v-225h-564z" />
+<glyph unicode="&#x2011;" horiz-adv-x="801" d="M113 510v225h564v-225h-564z" />
+<glyph unicode="&#x2012;" horiz-adv-x="801" d="M113 510v225h564v-225h-564z" />
+<glyph unicode="&#x2013;" horiz-adv-x="1413" d="M141 601v228h1084v-228h-1084z" />
+<glyph unicode="&#x2014;" horiz-adv-x="1670" d="M106 601v228h1334v-228h-1334z" />
+<glyph unicode="&#x2018;" horiz-adv-x="405" d="M50 1015v192l162 353h143l-60 -352v-193h-245z" />
+<glyph unicode="&#x2019;" horiz-adv-x="405" d="M57 1016l60 349v195h246v-194l-162 -350h-144z" />
+<glyph unicode="&#x201a;" horiz-adv-x="406" d="M50 -263l60 266v284h246v-268l-147 -282h-159z" />
+<glyph unicode="&#x201c;" horiz-adv-x="742" d="M50 1015v192l162 353h143l-60 -352v-193h-245zM379 1015v192l162 353h143l-60 -352v-193h-245z" />
+<glyph unicode="&#x201d;" horiz-adv-x="750" d="M57 1016l60 349v195h246v-194l-162 -350h-144zM394 1016l60 349v195h246v-194l-162 -350h-144z" />
+<glyph unicode="&#x201e;" horiz-adv-x="732" d="M50 -225l60 268v255h230v-243l-162 -280h-128zM391 -225l60 276v247h231v-243l-162 -280h-129z" />
+<glyph unicode="&#x2022;" horiz-adv-x="737" d="M135 716v90q0 100 65 164t172 64q110 0 175 -63.5t65 -164.5v-90q0 -101 -64.5 -163t-173.5 -62t-174 62.5t-65 162.5z" />
+<glyph unicode="&#x2026;" horiz-adv-x="1519" d="M144 0v256h292v-256h-292zM587 0v256h292v-256h-292zM1007 0v256h292v-256h-292z" />
+<glyph unicode="&#x202f;" horiz-adv-x="387" />
+<glyph unicode="&#x2039;" horiz-adv-x="639" d="M108 541v19l280 390h187l-240 -400l240 -399h-187z" />
+<glyph unicode="&#x203a;" horiz-adv-x="619" d="M80 151l239 399l-239 400h188l280 -390v-19l-280 -390h-188z" />
+<glyph unicode="&#x205f;" horiz-adv-x="483" />
+<glyph unicode="&#x20ac;" horiz-adv-x="1116" d="M71 455v200h146v116h-146v200h146v13q0 203 150.5 348t394.5 145q60 0 117.5 -8t125.5 -23l-21 -229q-53 16 -109.5 25.5t-112.5 9.5q-118 0 -185.5 -80.5t-67.5 -185.5v-15h428v-200h-428v-116h428v-200h-428v-8q0 -99 67.5 -171.5t187.5 -72.5q58 0 113.5 8.5 t106.5 25.5l21 -227q-57 -15 -118 -23t-123 -8q-245 0 -396 137.5t-151 330.5v8h-146z" />
+<glyph unicode="&#x2122;" horiz-adv-x="1294" d="M96 1351v105h398v-105h-128v-434h-144v434h-126zM565 915v541h159l119 -362h6l120 362h154v-541h-129v282l-6 1l-105 -283h-73l-110 298l-6 -1v-297h-129z" />
+<glyph unicode="&#xe000;" horiz-adv-x="1080" d="M0 0v1080h1080v-1080h-1080z" />
+<glyph unicode="&#xfb02;" horiz-adv-x="1279" d="M27 877v205h161v120q0 182 105 280.5t295 98.5q37 0 75.5 -5.5t84.5 -15.5l-25 -217q-24 4 -46.5 7t-52.5 3q-71 0 -107.5 -39t-36.5 -112v-120h215v-205h-215v-877h-292v877h-161zM859 0v1560h292v-1560h-292z" />
+<glyph unicode="&#xfb03;" horiz-adv-x="1981" d="M27 877v205h161v120q0 182 105 280.5t295 98.5q37 0 75.5 -5.5t84.5 -15.5l-25 -217q-24 4 -46.5 7t-52.5 3q-71 0 -107.5 -39t-36.5 -112v-120h215v-205h-215v-877h-292v877h-161zM752 877v205h161v74q0 204 124.5 314.5t350.5 110.5q78 0 154 -15.5t176 -44.5l-42 -230 q-73 22 -132.5 34t-136.5 12q-101 0 -151.5 -46t-50.5 -135v-74h213v-205h-213v-877h-292v877h-161zM1561 0v1082h292v-1082h-292z" />
+<glyph unicode="&#xfb04;" horiz-adv-x="2011" d="M27 877v205h161v120q0 182 105 280.5t295 98.5q37 0 75.5 -5.5t84.5 -15.5l-25 -217q-24 4 -46.5 7t-52.5 3q-71 0 -107.5 -39t-36.5 -112v-120h215v-205h-215v-877h-292v877h-161zM759 877v205h161v120q0 182 105 280.5t295 98.5q37 0 75.5 -5.5t84.5 -15.5l-25 -217 q-24 4 -46.5 7t-52.5 3q-71 0 -107.5 -39t-36.5 -112v-120h215v-205h-215v-877h-292v877h-161zM1591 0v1560h292v-1560h-292z" />
+<hkern u1="&#x22;" u2="w" k="-12" />
+<hkern u1="&#x27;" u2="w" k="-12" />
+<hkern u1="&#x28;" u2="&#x178;" k="-25" />
+<hkern u1="&#x28;" u2="&#xdd;" k="-25" />
+<hkern u1="&#x28;" u2="Y" k="-25" />
+<hkern u1="&#x28;" u2="W" k="-26" />
+<hkern u1="&#x28;" u2="V" k="-23" />
+<hkern u1="A" u2="w" k="39" />
+<hkern u1="A" u2="t" k="20" />
+<hkern u1="A" u2="&#x3f;" k="77" />
+<hkern u1="C" u2="&#x29;" k="30" />
+<hkern u1="D" u2="&#xc6;" k="61" />
+<hkern u1="E" u2="w" k="25" />
+<hkern u1="F" u2="&#x2026;" k="325" />
+<hkern u1="F" u2="&#x201e;" k="325" />
+<hkern u1="F" u2="&#x201a;" k="325" />
+<hkern u1="F" u2="&#x153;" k="52" />
+<hkern u1="F" u2="&#xff;" k="28" />
+<hkern u1="F" u2="&#xfd;" k="28" />
+<hkern u1="F" u2="&#xfc;" k="25" />
+<hkern u1="F" u2="&#xfb;" k="25" />
+<hkern u1="F" u2="&#xfa;" k="25" />
+<hkern u1="F" u2="&#xf9;" k="25" />
+<hkern u1="F" u2="&#xf6;" k="54" />
+<hkern u1="F" u2="&#xf5;" k="54" />
+<hkern u1="F" u2="&#xf4;" k="54" />
+<hkern u1="F" u2="&#xf3;" k="54" />
+<hkern u1="F" u2="&#xf2;" k="54" />
+<hkern u1="F" u2="&#xeb;" k="52" />
+<hkern u1="F" u2="&#xea;" k="52" />
+<hkern u1="F" u2="&#xe9;" k="52" />
+<hkern u1="F" u2="&#xe8;" k="52" />
+<hkern u1="F" u2="&#xe7;" k="52" />
+<hkern u1="F" u2="&#xe5;" k="68" />
+<hkern u1="F" u2="&#xe4;" k="68" />
+<hkern u1="F" u2="&#xe3;" k="68" />
+<hkern u1="F" u2="&#xe2;" k="68" />
+<hkern u1="F" u2="&#xe1;" k="68" />
+<hkern u1="F" u2="&#xe0;" k="68" />
+<hkern u1="F" u2="&#xc5;" k="163" />
+<hkern u1="F" u2="&#xc4;" k="163" />
+<hkern u1="F" u2="&#xc3;" k="163" />
+<hkern u1="F" u2="&#xc2;" k="163" />
+<hkern u1="F" u2="&#xc1;" k="163" />
+<hkern u1="F" u2="&#xc0;" k="163" />
+<hkern u1="F" u2="y" k="28" />
+<hkern u1="F" u2="v" k="28" />
+<hkern u1="F" u2="u" k="25" />
+<hkern u1="F" u2="r" k="30" />
+<hkern u1="F" u2="q" k="52" />
+<hkern u1="F" u2="o" k="54" />
+<hkern u1="F" u2="g" k="52" />
+<hkern u1="F" u2="e" k="52" />
+<hkern u1="F" u2="d" k="52" />
+<hkern u1="F" u2="c" k="52" />
+<hkern u1="F" u2="a" k="68" />
+<hkern u1="F" u2="T" k="-20" />
+<hkern u1="F" u2="A" k="163" />
+<hkern u1="F" u2="&#x3a;" k="325" />
+<hkern u1="F" u2="&#x2e;" k="325" />
+<hkern u1="F" u2="&#x2c;" k="325" />
+<hkern u1="K" u2="w" k="74" />
+<hkern u1="L" u2="w" k="104" />
+<hkern u1="O" u2="&#xc6;" k="61" />
+<hkern u1="P" u2="&#xc6;" k="165" />
+<hkern u1="P" u2="t" k="-16" />
+<hkern u1="Q" u2="&#x178;" k="71" />
+<hkern u1="Q" u2="&#xdd;" k="71" />
+<hkern u1="Q" u2="Y" k="71" />
+<hkern u1="Q" u2="W" k="23" />
+<hkern u1="Q" u2="V" k="33" />
+<hkern u1="Q" u2="T" k="39" />
+<hkern u1="R" u2="&#x178;" k="57" />
+<hkern u1="R" u2="&#xdd;" k="57" />
+<hkern u1="R" u2="Y" k="57" />
+<hkern u1="R" u2="V" k="22" />
+<hkern u1="R" u2="T" k="31" />
+<hkern u1="T" u2="&#xf8;" k="112" />
+<hkern u1="T" u2="&#xe6;" k="99" />
+<hkern u1="T" u2="&#xc6;" k="195" />
+<hkern u1="T" u2="&#xbb;" k="173" />
+<hkern u1="T" u2="&#xab;" k="175" />
+<hkern u1="T" u2="w" k="55" />
+<hkern u1="T" u2="r" k="77" />
+<hkern u1="V" u2="&#x7d;" k="-22" />
+<hkern u1="V" u2="r" k="35" />
+<hkern u1="V" u2="]" k="-20" />
+<hkern u1="V" u2="&#x29;" k="-23" />
+<hkern u1="W" u2="&#x7d;" k="-16" />
+<hkern u1="W" u2="r" k="24" />
+<hkern u1="W" u2="]" k="-14" />
+<hkern u1="W" u2="&#x29;" k="-17" />
+<hkern u1="Y" u2="&#x2022;" k="105" />
+<hkern u1="Y" u2="&#xf8;" k="91" />
+<hkern u1="Y" u2="&#xe6;" k="89" />
+<hkern u1="Y" u2="&#xc6;" k="136" />
+<hkern u1="Y" u2="&#xbb;" k="60" />
+<hkern u1="Y" u2="&#xab;" k="119" />
+<hkern u1="Y" u2="&#x7d;" k="-22" />
+<hkern u1="Y" u2="t" k="33" />
+<hkern u1="Y" u2="r" k="62" />
+<hkern u1="Y" u2="f" k="40" />
+<hkern u1="Y" u2="]" k="-21" />
+<hkern u1="Y" u2="&#x2a;" k="88" />
+<hkern u1="Y" u2="&#x29;" k="-23" />
+<hkern u1="Y" u2="&#x26;" k="57" />
+<hkern u1="Z" u2="w" k="31" />
+<hkern u1="[" u2="&#xdc;" k="21" />
+<hkern u1="[" u2="&#xdb;" k="21" />
+<hkern u1="[" u2="&#xda;" k="21" />
+<hkern u1="[" u2="&#xd9;" k="21" />
+<hkern u1="[" u2="U" k="21" />
+<hkern u1="[" u2="J" k="21" />
+<hkern u1="f" u2="&#x201d;" k="-34" />
+<hkern u1="f" u2="&#x201c;" k="-34" />
+<hkern u1="f" u2="&#x2019;" k="-34" />
+<hkern u1="f" u2="&#x2018;" k="-34" />
+<hkern u1="f" u2="&#x7d;" k="-37" />
+<hkern u1="f" u2="]" k="-66" />
+<hkern u1="f" u2="&#x29;" k="-53" />
+<hkern u1="f" u2="&#x27;" k="-34" />
+<hkern u1="f" u2="&#x22;" k="-34" />
+<hkern u1="k" u2="&#x153;" k="23" />
+<hkern u1="k" u2="&#xeb;" k="23" />
+<hkern u1="k" u2="&#xea;" k="23" />
+<hkern u1="k" u2="&#xe9;" k="23" />
+<hkern u1="k" u2="&#xe8;" k="23" />
+<hkern u1="k" u2="&#xe7;" k="23" />
+<hkern u1="k" u2="q" k="23" />
+<hkern u1="k" u2="g" k="23" />
+<hkern u1="k" u2="e" k="23" />
+<hkern u1="k" u2="d" k="23" />
+<hkern u1="k" u2="c" k="23" />
+<hkern u1="r" u2="w" k="-27" />
+<hkern u1="r" u2="t" k="-27" />
+<hkern u1="r" u2="f" k="-24" />
+<hkern u1="v" u2="f" k="-15" />
+<hkern u1="w" u2="&#x2026;" k="72" />
+<hkern u1="w" u2="&#x201e;" k="72" />
+<hkern u1="w" u2="&#x201a;" k="72" />
+<hkern u1="w" u2="&#x3a;" k="72" />
+<hkern u1="w" u2="&#x2e;" k="72" />
+<hkern u1="w" u2="&#x2c;" k="72" />
+<hkern u1="y" u2="f" k="-15" />
+<hkern u1="&#x7b;" u2="&#xdc;" k="23" />
+<hkern u1="&#x7b;" u2="&#xdb;" k="23" />
+<hkern u1="&#x7b;" u2="&#xda;" k="23" />
+<hkern u1="&#x7b;" u2="&#xd9;" k="23" />
+<hkern u1="&#x7b;" u2="U" k="23" />
+<hkern u1="&#x7b;" u2="J" k="23" />
+<hkern u1="&#xc0;" u2="w" k="39" />
+<hkern u1="&#xc0;" u2="t" k="20" />
+<hkern u1="&#xc0;" u2="&#x3f;" k="77" />
+<hkern u1="&#xc1;" u2="w" k="39" />
+<hkern u1="&#xc1;" u2="t" k="20" />
+<hkern u1="&#xc1;" u2="&#x3f;" k="77" />
+<hkern u1="&#xc2;" u2="w" k="39" />
+<hkern u1="&#xc2;" u2="t" k="20" />
+<hkern u1="&#xc2;" u2="&#x3f;" k="77" />
+<hkern u1="&#xc3;" u2="w" k="39" />
+<hkern u1="&#xc3;" u2="t" k="20" />
+<hkern u1="&#xc3;" u2="&#x3f;" k="77" />
+<hkern u1="&#xc4;" u2="w" k="39" />
+<hkern u1="&#xc4;" u2="t" k="20" />
+<hkern u1="&#xc4;" u2="&#x3f;" k="77" />
+<hkern u1="&#xc5;" u2="w" k="39" />
+<hkern u1="&#xc5;" u2="t" k="20" />
+<hkern u1="&#xc5;" u2="&#x3f;" k="77" />
+<hkern u1="&#xc7;" u2="&#x29;" k="30" />
+<hkern u1="&#xc8;" u2="w" k="25" />
+<hkern u1="&#xc9;" u2="w" k="25" />
+<hkern u1="&#xca;" u2="w" k="25" />
+<hkern u1="&#xcb;" u2="w" k="25" />
+<hkern u1="&#xd0;" u2="&#xc6;" k="61" />
+<hkern u1="&#xd2;" u2="&#xc6;" k="61" />
+<hkern u1="&#xd3;" u2="&#xc6;" k="61" />
+<hkern u1="&#xd4;" u2="&#xc6;" k="61" />
+<hkern u1="&#xd5;" u2="&#xc6;" k="61" />
+<hkern u1="&#xd6;" u2="&#xc6;" k="61" />
+<hkern u1="&#xdd;" u2="&#x2022;" k="105" />
+<hkern u1="&#xdd;" u2="&#xf8;" k="91" />
+<hkern u1="&#xdd;" u2="&#xe6;" k="89" />
+<hkern u1="&#xdd;" u2="&#xc6;" k="136" />
+<hkern u1="&#xdd;" u2="&#xbb;" k="60" />
+<hkern u1="&#xdd;" u2="&#xab;" k="119" />
+<hkern u1="&#xdd;" u2="&#x7d;" k="-22" />
+<hkern u1="&#xdd;" u2="t" k="33" />
+<hkern u1="&#xdd;" u2="r" k="62" />
+<hkern u1="&#xdd;" u2="f" k="40" />
+<hkern u1="&#xdd;" u2="]" k="-21" />
+<hkern u1="&#xdd;" u2="&#x2a;" k="88" />
+<hkern u1="&#xdd;" u2="&#x29;" k="-23" />
+<hkern u1="&#xdd;" u2="&#x26;" k="57" />
+<hkern u1="&#xfd;" u2="f" k="-15" />
+<hkern u1="&#xff;" u2="f" k="-15" />
+<hkern u1="&#x178;" u2="&#x2022;" k="105" />
+<hkern u1="&#x178;" u2="&#xf8;" k="91" />
+<hkern u1="&#x178;" u2="&#xe6;" k="89" />
+<hkern u1="&#x178;" u2="&#xc6;" k="136" />
+<hkern u1="&#x178;" u2="&#xbb;" k="60" />
+<hkern u1="&#x178;" u2="&#xab;" k="119" />
+<hkern u1="&#x178;" u2="&#x7d;" k="-22" />
+<hkern u1="&#x178;" u2="t" k="33" />
+<hkern u1="&#x178;" u2="r" k="62" />
+<hkern u1="&#x178;" u2="f" k="40" />
+<hkern u1="&#x178;" u2="]" k="-21" />
+<hkern u1="&#x178;" u2="&#x2a;" k="88" />
+<hkern u1="&#x178;" u2="&#x29;" k="-23" />
+<hkern u1="&#x178;" u2="&#x26;" k="57" />
+<hkern u1="&#x2018;" u2="w" k="-12" />
+<hkern u1="&#x2019;" u2="w" k="-12" />
+<hkern u1="&#x201c;" u2="w" k="-12" />
+<hkern u1="&#x201d;" u2="w" k="-12" />
+<hkern g1="comma,period,colon,quotesinglbase,quotedblbase,ellipsis" 	g2="quotedbl,quotesingle,quoteleft,quoteright,quotedblleft,quotedblright" 	k="285" />
+<hkern g1="B" 	g2="T" 	k="31" />
+<hkern g1="B" 	g2="V" 	k="28" />
+<hkern g1="B" 	g2="Y,Yacute,Ydieresis" 	k="130" />
+<hkern g1="C,Ccedilla" 	g2="T" 	k="34" />
+<hkern g1="D,O,Eth,Ograve,Oacute,Ocircumflex,Otilde,Odieresis" 	g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" 	k="24" />
+<hkern g1="D,O,Eth,Ograve,Oacute,Ocircumflex,Otilde,Odieresis" 	g2="T" 	k="31" />
+<hkern g1="D,O,Eth,Ograve,Oacute,Ocircumflex,Otilde,Odieresis" 	g2="V" 	k="25" />
+<hkern g1="D,O,Eth,Ograve,Oacute,Ocircumflex,Otilde,Odieresis" 	g2="Y,Yacute,Ydieresis" 	k="50" />
+<hkern g1="D,O,Eth,Ograve,Oacute,Ocircumflex,Otilde,Odieresis" 	g2="comma,period,colon,quotesinglbase,quotedblbase,ellipsis" 	k="88" />
+<hkern g1="D,O,Eth,Ograve,Oacute,Ocircumflex,Otilde,Odieresis" 	g2="X" 	k="25" />
+<hkern g1="D,O,Eth,Ograve,Oacute,Ocircumflex,Otilde,Odieresis" 	g2="Z" 	k="26" />
+<hkern g1="E,Egrave,Eacute,Ecircumflex,Edieresis" 	g2="c,d,e,g,q,ccedilla,egrave,eacute,ecircumflex,edieresis,oe" 	k="13" />
+<hkern g1="E,Egrave,Eacute,Ecircumflex,Edieresis" 	g2="o,ograve,oacute,ocircumflex,otilde,odieresis" 	k="22" />
+<hkern g1="E,Egrave,Eacute,Ecircumflex,Edieresis" 	g2="T" 	k="-20" />
+<hkern g1="E,Egrave,Eacute,Ecircumflex,Edieresis" 	g2="u,ugrave,uacute,ucircumflex,udieresis" 	k="20" />
+<hkern g1="E,Egrave,Eacute,Ecircumflex,Edieresis" 	g2="v,y,yacute,ydieresis" 	k="30" />
+<hkern g1="J,U,Ugrave,Uacute,Ucircumflex,Udieresis" 	g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" 	k="25" />
+<hkern g1="K" 	g2="c,d,e,g,q,ccedilla,egrave,eacute,ecircumflex,edieresis,oe" 	k="30" />
+<hkern g1="K" 	g2="o,ograve,oacute,ocircumflex,otilde,odieresis" 	k="31" />
+<hkern g1="K" 	g2="u,ugrave,uacute,ucircumflex,udieresis" 	k="26" />
+<hkern g1="K" 	g2="v,y,yacute,ydieresis" 	k="47" />
+<hkern g1="K" 	g2="hyphen,uni00AD,endash,emdash" 	k="168" />
+<hkern g1="K" 	g2="C,G,O,Q,Ccedilla,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" 	k="58" />
+<hkern g1="L" 	g2="quotedbl,quotesingle,quoteleft,quoteright,quotedblleft,quotedblright" 	k="298" />
+<hkern g1="L" 	g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" 	k="-22" />
+<hkern g1="L" 	g2="T" 	k="213" />
+<hkern g1="L" 	g2="V" 	k="215" />
+<hkern g1="L" 	g2="Y,Yacute,Ydieresis" 	k="267" />
+<hkern g1="L" 	g2="u,ugrave,uacute,ucircumflex,udieresis" 	k="16" />
+<hkern g1="L" 	g2="v,y,yacute,ydieresis" 	k="140" />
+<hkern g1="L" 	g2="C,G,O,Q,Ccedilla,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" 	k="59" />
+<hkern g1="L" 	g2="U,Ugrave,Uacute,Ucircumflex,Udieresis" 	k="28" />
+<hkern g1="L" 	g2="W" 	k="117" />
+<hkern g1="P" 	g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" 	k="168" />
+<hkern g1="P" 	g2="a,agrave,aacute,acircumflex,atilde,adieresis,aring" 	k="12" />
+<hkern g1="P" 	g2="c,d,e,g,q,ccedilla,egrave,eacute,ecircumflex,edieresis,oe" 	k="15" />
+<hkern g1="P" 	g2="o,ograve,oacute,ocircumflex,otilde,odieresis" 	k="15" />
+<hkern g1="P" 	g2="comma,period,colon,quotesinglbase,quotedblbase,ellipsis" 	k="382" />
+<hkern g1="P" 	g2="X" 	k="77" />
+<hkern g1="P" 	g2="Z" 	k="39" />
+<hkern g1="P" 	g2="v,y,yacute,ydieresis" 	k="-17" />
+<hkern g1="T" 	g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" 	k="100" />
+<hkern g1="T" 	g2="a,agrave,aacute,acircumflex,atilde,adieresis,aring" 	k="98" />
+<hkern g1="T" 	g2="c,d,e,g,q,ccedilla,egrave,eacute,ecircumflex,edieresis,oe" 	k="105" />
+<hkern g1="T" 	g2="m,n,p,ntilde" 	k="83" />
+<hkern g1="T" 	g2="o,ograve,oacute,ocircumflex,otilde,odieresis" 	k="93" />
+<hkern g1="T" 	g2="s" 	k="90" />
+<hkern g1="T" 	g2="T" 	k="-19" />
+<hkern g1="T" 	g2="V" 	k="-19" />
+<hkern g1="T" 	g2="Y,Yacute,Ydieresis" 	k="-19" />
+<hkern g1="T" 	g2="comma,period,colon,quotesinglbase,quotedblbase,ellipsis" 	k="203" />
+<hkern g1="T" 	g2="u,ugrave,uacute,ucircumflex,udieresis" 	k="77" />
+<hkern g1="T" 	g2="v,y,yacute,ydieresis" 	k="97" />
+<hkern g1="T" 	g2="hyphen,uni00AD,endash,emdash" 	k="200" />
+<hkern g1="T" 	g2="C,G,O,Q,Ccedilla,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" 	k="33" />
+<hkern g1="T" 	g2="W" 	k="-17" />
+<hkern g1="T" 	g2="S" 	k="19" />
+<hkern g1="T" 	g2="x" 	k="91" />
+<hkern g1="T" 	g2="z" 	k="71" />
+<hkern g1="V" 	g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" 	k="141" />
+<hkern g1="V" 	g2="a,agrave,aacute,acircumflex,atilde,adieresis,aring" 	k="54" />
+<hkern g1="V" 	g2="c,d,e,g,q,ccedilla,egrave,eacute,ecircumflex,edieresis,oe" 	k="52" />
+<hkern g1="V" 	g2="o,ograve,oacute,ocircumflex,otilde,odieresis" 	k="54" />
+<hkern g1="V" 	g2="comma,period,colon,quotesinglbase,quotedblbase,ellipsis" 	k="215" />
+<hkern g1="V" 	g2="u,ugrave,uacute,ucircumflex,udieresis" 	k="33" />
+<hkern g1="V" 	g2="v,y,yacute,ydieresis" 	k="12" />
+<hkern g1="V" 	g2="hyphen,uni00AD,endash,emdash" 	k="73" />
+<hkern g1="V" 	g2="C,G,O,Q,Ccedilla,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" 	k="30" />
+<hkern g1="W" 	g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" 	k="73" />
+<hkern g1="W" 	g2="a,agrave,aacute,acircumflex,atilde,adieresis,aring" 	k="39" />
+<hkern g1="W" 	g2="c,d,e,g,q,ccedilla,egrave,eacute,ecircumflex,edieresis,oe" 	k="36" />
+<hkern g1="W" 	g2="o,ograve,oacute,ocircumflex,otilde,odieresis" 	k="36" />
+<hkern g1="W" 	g2="T" 	k="-16" />
+<hkern g1="W" 	g2="comma,period,colon,quotesinglbase,quotedblbase,ellipsis" 	k="169" />
+<hkern g1="W" 	g2="u,ugrave,uacute,ucircumflex,udieresis" 	k="22" />
+<hkern g1="W" 	g2="hyphen,uni00AD,endash,emdash" 	k="101" />
+<hkern g1="X" 	g2="c,d,e,g,q,ccedilla,egrave,eacute,ecircumflex,edieresis,oe" 	k="30" />
+<hkern g1="X" 	g2="o,ograve,oacute,ocircumflex,otilde,odieresis" 	k="32" />
+<hkern g1="X" 	g2="V" 	k="-16" />
+<hkern g1="X" 	g2="u,ugrave,uacute,ucircumflex,udieresis" 	k="24" />
+<hkern g1="X" 	g2="v,y,yacute,ydieresis" 	k="51" />
+<hkern g1="X" 	g2="hyphen,uni00AD,endash,emdash" 	k="186" />
+<hkern g1="X" 	g2="C,G,O,Q,Ccedilla,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" 	k="37" />
+<hkern g1="Y,Yacute,Ydieresis" 	g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" 	k="159" />
+<hkern g1="Y,Yacute,Ydieresis" 	g2="a,agrave,aacute,acircumflex,atilde,adieresis,aring" 	k="96" />
+<hkern g1="Y,Yacute,Ydieresis" 	g2="c,d,e,g,q,ccedilla,egrave,eacute,ecircumflex,edieresis,oe" 	k="129" />
+<hkern g1="Y,Yacute,Ydieresis" 	g2="m,n,p,ntilde" 	k="77" />
+<hkern g1="Y,Yacute,Ydieresis" 	g2="o,ograve,oacute,ocircumflex,otilde,odieresis" 	k="144" />
+<hkern g1="Y,Yacute,Ydieresis" 	g2="s" 	k="121" />
+<hkern g1="Y,Yacute,Ydieresis" 	g2="T" 	k="-20" />
+<hkern g1="Y,Yacute,Ydieresis" 	g2="V" 	k="-21" />
+<hkern g1="Y,Yacute,Ydieresis" 	g2="Y,Yacute,Ydieresis" 	k="-21" />
+<hkern g1="Y,Yacute,Ydieresis" 	g2="comma,period,colon,quotesinglbase,quotedblbase,ellipsis" 	k="247" />
+<hkern g1="Y,Yacute,Ydieresis" 	g2="u,ugrave,uacute,ucircumflex,udieresis" 	k="75" />
+<hkern g1="Y,Yacute,Ydieresis" 	g2="v,y,yacute,ydieresis" 	k="23" />
+<hkern g1="Y,Yacute,Ydieresis" 	g2="hyphen,uni00AD,endash,emdash" 	k="131" />
+<hkern g1="Y,Yacute,Ydieresis" 	g2="C,G,O,Q,Ccedilla,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" 	k="34" />
+<hkern g1="Y,Yacute,Ydieresis" 	g2="U,Ugrave,Uacute,Ucircumflex,Udieresis" 	k="61" />
+<hkern g1="Y,Yacute,Ydieresis" 	g2="W" 	k="-20" />
+<hkern g1="Y,Yacute,Ydieresis" 	g2="S" 	k="19" />
+<hkern g1="Y,Yacute,Ydieresis" 	g2="x" 	k="34" />
+<hkern g1="Y,Yacute,Ydieresis" 	g2="z" 	k="42" />
+<hkern g1="Y,Yacute,Ydieresis" 	g2="J" 	k="159" />
+<hkern g1="Z" 	g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" 	k="-15" />
+<hkern g1="Z" 	g2="c,d,e,g,q,ccedilla,egrave,eacute,ecircumflex,edieresis,oe" 	k="24" />
+<hkern g1="Z" 	g2="o,ograve,oacute,ocircumflex,otilde,odieresis" 	k="24" />
+<hkern g1="Z" 	g2="u,ugrave,uacute,ucircumflex,udieresis" 	k="22" />
+<hkern g1="Z" 	g2="v,y,yacute,ydieresis" 	k="31" />
+<hkern g1="Z" 	g2="C,G,O,Q,Ccedilla,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" 	k="30" />
+<hkern g1="a,agrave,aacute,acircumflex,atilde,adieresis,aring" 	g2="quotedbl,quotesingle,quoteleft,quoteright,quotedblleft,quotedblright" 	k="50" />
+<hkern g1="a,agrave,aacute,acircumflex,atilde,adieresis,aring" 	g2="v,y,yacute,ydieresis" 	k="17" />
+<hkern g1="b,p,thorn" 	g2="quotedbl,quotesingle,quoteleft,quoteright,quotedblleft,quotedblright" 	k="49" />
+<hkern g1="b,p,thorn" 	g2="v,y,yacute,ydieresis" 	k="12" />
+<hkern g1="b,p,thorn" 	g2="x" 	k="17" />
+<hkern g1="b,p,thorn" 	g2="z" 	k="17" />
+<hkern g1="c,ccedilla" 	g2="quotedbl,quotesingle,quoteleft,quoteright,quotedblleft,quotedblright" 	k="42" />
+<hkern g1="e,egrave,eacute,ecircumflex,edieresis" 	g2="quotedbl,quotesingle,quoteleft,quoteright,quotedblleft,quotedblright" 	k="38" />
+<hkern g1="e,egrave,eacute,ecircumflex,edieresis" 	g2="v,y,yacute,ydieresis" 	k="15" />
+<hkern g1="h,m,n,ntilde" 	g2="quotedbl,quotesingle,quoteleft,quoteright,quotedblleft,quotedblright" 	k="56" />
+<hkern g1="o,ograve,oacute,ocircumflex,otilde,odieresis" 	g2="quotedbl,quotesingle,quoteleft,quoteright,quotedblleft,quotedblright" 	k="61" />
+<hkern g1="o,ograve,oacute,ocircumflex,otilde,odieresis" 	g2="v,y,yacute,ydieresis" 	k="17" />
+<hkern g1="o,ograve,oacute,ocircumflex,otilde,odieresis" 	g2="x" 	k="32" />
+<hkern g1="o,ograve,oacute,ocircumflex,otilde,odieresis" 	g2="z" 	k="19" />
+<hkern g1="r" 	g2="quotedbl,quotesingle,quoteleft,quoteright,quotedblleft,quotedblright" 	k="-19" />
+<hkern g1="r" 	g2="comma,period,colon,quotesinglbase,quotedblbase,ellipsis" 	k="146" />
+<hkern g1="r" 	g2="v,y,yacute,ydieresis" 	k="-28" />
+<hkern g1="v,y,yacute,ydieresis" 	g2="a,agrave,aacute,acircumflex,atilde,adieresis,aring" 	k="17" />
+<hkern g1="v,y,yacute,ydieresis" 	g2="c,d,e,g,q,ccedilla,egrave,eacute,ecircumflex,edieresis,oe" 	k="15" />
+<hkern g1="v,y,yacute,ydieresis" 	g2="o,ograve,oacute,ocircumflex,otilde,odieresis" 	k="17" />
+<hkern g1="v,y,yacute,ydieresis" 	g2="comma,period,colon,quotesinglbase,quotedblbase,ellipsis" 	k="140" />
+<hkern g1="x" 	g2="c,d,e,g,q,ccedilla,egrave,eacute,ecircumflex,edieresis,oe" 	k="23" />
+<hkern g1="x" 	g2="o,ograve,oacute,ocircumflex,otilde,odieresis" 	k="28" />
+<hkern g1="z" 	g2="c,d,e,g,q,ccedilla,egrave,eacute,ecircumflex,edieresis,oe" 	k="19" />
+<hkern g1="z" 	g2="o,ograve,oacute,ocircumflex,otilde,odieresis" 	k="19" />
+</font>
+</defs></svg> 
\ No newline at end of file
diff --git a/src/web/wwwroot/fonts/roboto/Roboto-Bold-webfont.ttf b/src/web/wwwroot/fonts/roboto/Roboto-Bold-webfont.ttf
new file mode 100755
index 0000000000000000000000000000000000000000..1da72769a88d2f810714c4ecc15ccbaf19a6c842
Binary files /dev/null and b/src/web/wwwroot/fonts/roboto/Roboto-Bold-webfont.ttf differ
diff --git a/src/web/wwwroot/fonts/roboto/Roboto-Bold-webfont.woff b/src/web/wwwroot/fonts/roboto/Roboto-Bold-webfont.woff
new file mode 100755
index 0000000000000000000000000000000000000000..0c6994871e33563d2dbef857ce8bc1520e9cf3c0
Binary files /dev/null and b/src/web/wwwroot/fonts/roboto/Roboto-Bold-webfont.woff differ
diff --git a/src/web/wwwroot/fonts/roboto/Roboto-Light-webfont.eot b/src/web/wwwroot/fonts/roboto/Roboto-Light-webfont.eot
new file mode 100755
index 0000000000000000000000000000000000000000..072cdc480c81f4db452d8be35f9abd97849b1389
Binary files /dev/null and b/src/web/wwwroot/fonts/roboto/Roboto-Light-webfont.eot differ
diff --git a/src/web/wwwroot/fonts/roboto/Roboto-Light-webfont.svg b/src/web/wwwroot/fonts/roboto/Roboto-Light-webfont.svg
new file mode 100755
index 0000000000000000000000000000000000000000..db6a6171ed82280cc2db62409803df59ec720903
--- /dev/null
+++ b/src/web/wwwroot/fonts/roboto/Roboto-Light-webfont.svg
@@ -0,0 +1,641 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
+<svg xmlns="http://www.w3.org/2000/svg">
+<metadata></metadata>
+<defs>
+<font id="robotolight" horiz-adv-x="1140" >
+<font-face units-per-em="2048" ascent="1638" descent="-410" />
+<missing-glyph horiz-adv-x="498" />
+<glyph unicode="&#xfb01;" horiz-adv-x="1100" d="M48 984v98h180v138q0 172 95 266.5t264 94.5q67 0 136 -15t140 -44l-20 -103q-61 25 -118 39t-130 14q-122 0 -184.5 -65t-62.5 -187v-138h253v-98h-253v-984h-120v984h-180zM808 0v1082h120v-1082h-120z" />
+<glyph horiz-adv-x="2048" />
+<glyph horiz-adv-x="2048" />
+<glyph unicode="&#xd;" horiz-adv-x="498" />
+<glyph unicode=" "  horiz-adv-x="498" />
+<glyph unicode="&#x09;" horiz-adv-x="498" />
+<glyph unicode="&#xa0;" horiz-adv-x="498" />
+<glyph unicode="!" horiz-adv-x="462" d="M158 0v167h142v-167h-142zM169 478v978h119v-978h-119z" />
+<glyph unicode="&#x22;" horiz-adv-x="588" d="M127 1083l3 255v222h102v-216l-33 -261h-72zM366 1083l4 258v219h101v-216l-33 -261h-72z" />
+<glyph unicode="#" horiz-adv-x="1270" d="M67 410v93h272l83 441h-279v96h297l79 416h100l-79 -416h314l79 416h100l-79 -416h229v-96h-247l-83 -441h255v-93h-273l-77 -410h-100l77 410h-313l-77 -410h-100l77 410h-255zM439 503h314l83 441h-314z" />
+<glyph unicode="$" horiz-adv-x="1135" d="M120 412l3 6h112q0 -177 101 -255t244 -78q148 0 234.5 77.5t86.5 196.5q0 110 -72 180t-254 135q-208 66 -308 159t-100 262q0 162 100 264t272 116v202h102v-202q175 -16 271 -131t94 -311l-3 -5h-112q0 152 -80 247t-224 95q-148 0 -224.5 -77.5t-76.5 -195.5 q0 -114 68 -183.5t261 -133.5q207 -69 306.5 -160.5t99.5 -258.5q0 -166 -104 -265.5t-280 -113.5v-190h-101v189q-181 11 -300.5 115.5t-115.5 315.5z" />
+<glyph unicode="%" horiz-adv-x="1514" d="M110 1099v77q0 127 78.5 214t206.5 87q127 0 205.5 -87t78.5 -214v-77q0 -126 -78 -212.5t-204 -86.5q-129 0 -208 86.5t-79 212.5zM206 1099q0 -88 49.5 -150t141.5 -62q89 0 137.5 62t48.5 150v77q0 88 -49 151t-139 63t-139.5 -63t-49.5 -151v-77zM386 169l711 1138 l74 -48l-711 -1138zM842 278v78q0 126 78.5 213t206.5 87q127 0 206 -87t79 -213v-78q0 -126 -78.5 -212.5t-204.5 -86.5q-129 0 -208 86.5t-79 212.5zM939 278q0 -88 49 -150t141 -62q89 0 137.5 62t48.5 150v78q0 91 -49 152t-139 61t-139 -61.5t-49 -151.5v-78z" />
+<glyph unicode="&#x26;" horiz-adv-x="1260" d="M91 371q0 120 72.5 216.5t209.5 196.5l15 11q-81 100 -120 182.5t-39 169.5q0 158 89 244t244 86q144 0 228.5 -81t84.5 -204q0 -90 -45 -155t-130 -130l-159 -122l412 -481q49 71 76 159t27 188h110q0 -128 -36.5 -235.5t-105.5 -194.5l185 -216l-2 -5h-137l-122 141 q-85 -78 -186 -120t-218 -42q-209 0 -331 107t-122 285zM211 371q0 -124 85.5 -207.5t247.5 -83.5q92 0 179.5 36t157.5 103l-414 482l-8.5 8.5t-5.5 7.5l-47 -36q-116 -94 -155.5 -170t-39.5 -140zM349 1149q0 -66 31.5 -137t96.5 -151l177 132q58 45 82.5 94t24.5 105 q0 79 -52.5 131t-146.5 52q-102 0 -157.5 -65t-55.5 -161z" />
+<glyph unicode="'" horiz-adv-x="348" d="M116 1090l8 266v204h102v-195l-38 -275h-72z" />
+<glyph unicode="(" horiz-adv-x="640" d="M140 573v15q0 363 139 651t310 386l6 -1l26 -73q-145 -103 -253 -366t-108 -594v-20q0 -331 108 -594t253 -370l-26 -70h-6q-173 100 -311 382t-138 654z" />
+<glyph unicode=")" horiz-adv-x="652" d="M18 -393q144 102 252.5 367t108.5 597v20q0 329 -110.5 595.5t-250.5 368.5l26 70h6q170 -98 309 -386t139 -651v-15q0 -372 -138 -654t-310 -382h-6z" />
+<glyph unicode="*" horiz-adv-x="869" d="M29 1108l32 101l332 -123l-4 370h104l-8 -373l324 127l33 -101l-333 -115l223 -294l-85 -63l-214 305l-204 -303l-85 61l217 300z" />
+<glyph unicode="+" horiz-adv-x="1156" d="M75 628v112h434v466h121v-466h443v-112h-443v-482h-121v482h-434z" />
+<glyph unicode="," horiz-adv-x="392" d="M83 -258l69 279v167h119v-170l-106 -276h-82z" />
+<glyph unicode="-" horiz-adv-x="586" d="M49 570v101h479v-101h-479z" />
+<glyph unicode="." horiz-adv-x="489" d="M167 0v164h137v-164h-137z" />
+<glyph unicode="/" horiz-adv-x="813" d="M30 -125l608 1581h108l-607 -1581h-109z" />
+<glyph unicode="0" horiz-adv-x="1194" d="M135 565v325q0 281 122 434t339 153t340 -153t123 -434v-325q0 -282 -122 -434t-339 -152q-216 0 -339.5 152.5t-123.5 433.5zM255 547q0 -222 88.5 -344.5t254.5 -122.5t253.5 122t87.5 345v363q0 224 -88 344.5t-255 120.5t-254 -120.5t-87 -344.5v-363z" />
+<glyph unicode="1" horiz-adv-x="1135" d="M188 1288v84l490 88v-1467h-120v1338z" />
+<glyph unicode="2" horiz-adv-x="1135" d="M111 1043q-5 182 118 308t333 126q188 0 301 -108t113 -290q0 -120 -75.5 -243.5t-210.5 -275.5l-401 -454l2 -5h750v-101h-904v92l477 541q132 149 186.5 249.5t54.5 192.5q0 136 -76.5 218t-216.5 82q-166 0 -252 -92t-86 -246h-111z" />
+<glyph unicode="3" horiz-adv-x="1135" d="M104 389l2 6h112q0 -139 96.5 -227t249.5 -88q155 0 242 80.5t87 230.5q0 153 -91 226.5t-260 73.5h-139v102h139q159 0 241 79.5t82 204.5q0 136 -77 217t-229 81q-140 0 -229.5 -82.5t-89.5 -217.5h-112l-2 6q-5 170 119 283t314 113q195 0 310.5 -107t115.5 -297 q0 -103 -64 -193.5t-180 -134.5q136 -39 203.5 -131.5t67.5 -218.5q0 -194 -125.5 -305t-322.5 -111q-191 0 -328 108.5t-132 301.5z" />
+<glyph unicode="4" horiz-adv-x="1135" d="M69 368v68l671 1020h131v-987h228v-101h-228v-368h-119v368h-683zM211 469h541v830l-6 2l-51 -109z" />
+<glyph unicode="5" horiz-adv-x="1135" d="M174 377l2 6h107q0 -147 83.5 -225t222.5 -78q162 0 242.5 98t80.5 284q0 163 -80.5 261.5t-225.5 98.5q-140 0 -213.5 -44.5t-106.5 -134.5l-97 16l81 797h707v-111h-605l-54 -519q55 50 121 77t179 30q186 3 300 -125t114 -344q0 -221 -110.5 -353t-332.5 -132 q-180 0 -300 100.5t-115 297.5z" />
+<glyph unicode="6" horiz-adv-x="1135" d="M152 540v367q0 252 143 411t352 159q75 0 148 -17t130 -49l-31 -98q-57 32 -113 47t-134 15q-162 0 -268.5 -126t-106.5 -331v-129q60 78 153 125t206 47q196 0 310 -135t114 -352q0 -215 -122.5 -355t-318.5 -140q-201 0 -331.5 150t-130.5 411zM272 531q0 -209 96 -330 t246 -121q146 0 233.5 114.5t87.5 279.5q0 175 -85 282t-243 107q-121 0 -211.5 -63t-123.5 -162v-107z" />
+<glyph unicode="7" horiz-adv-x="1135" d="M77 1354v102h955v-102q-236 -280 -361 -568.5t-167 -663.5l-11 -122h-120l11 122q42 370 174 669.5t350 562.5h-831z" />
+<glyph unicode="8" horiz-adv-x="1135" d="M100 386q0 129 79 224.5t212 136.5q-115 40 -182.5 128t-67.5 206q0 188 118.5 292t307.5 104q188 0 308.5 -104.5t120.5 -291.5q0 -118 -69 -206.5t-184 -128.5q133 -41 213.5 -136.5t80.5 -223.5q0 -196 -131 -301.5t-337 -105.5q-210 0 -339.5 105t-129.5 302z M219 385q0 -143 97 -224t253 -81q152 0 250 81.5t98 223.5q0 138 -100 224.5t-250 86.5q-152 0 -250 -86.5t-98 -224.5zM260 1082q0 -129 86.5 -206.5t222.5 -77.5q133 0 220 77.5t87 206.5q0 126 -88.5 209.5t-220.5 83.5q-135 0 -221 -80t-86 -213z" />
+<glyph unicode="9" horiz-adv-x="1135" d="M89 958q0 221 127.5 370t315.5 149q211 0 338 -137.5t127 -399.5v-429q0 -253 -134 -392.5t-352 -139.5q-78 0 -156.5 15t-149.5 46l22 100q68 -32 134.5 -46t149.5 -14q166 0 264 111t98 318v146q-53 -92 -142.5 -142t-199.5 -50q-199 0 -320.5 138t-121.5 357zM213 958 q0 -168 86 -281t232 -113q130 0 217.5 66.5t124.5 164.5v154q0 207 -90.5 316.5t-245.5 109.5q-141 0 -232.5 -122t-91.5 -295z" />
+<glyph unicode=":" horiz-adv-x="434" d="M154 0v164h137v-164h-137zM154 916v164h137v-164h-137z" />
+<glyph unicode=";" horiz-adv-x="438" d="M106 -258l69 279v167h119v-170l-106 -276h-82zM158 918v164h137v-164h-137z" />
+<glyph unicode="&#x3c;" horiz-adv-x="1047" d="M77 501v97l827 378v-126l-614 -272l-108 -28v-6l108 -28l614 -268v-126z" />
+<glyph unicode="=" horiz-adv-x="1147" d="M149 422v106h834v-106h-834zM149 833v106h834v-106h-834z" />
+<glyph unicode="&#x3e;" horiz-adv-x="1061" d="M124 122v124l632 274l108 27v6l-108 29l-632 271v123l845 -378v-97z" />
+<glyph unicode="?" horiz-adv-x="930" d="M81 1122q-3 165 104 260t273 95q179 0 280.5 -101t101.5 -273q0 -135 -66.5 -239.5t-188.5 -218.5q-62 -53 -75.5 -99t-13.5 -142h-119q1 131 22 182.5t114 136.5q108 112 157.5 187.5t49.5 191.5q0 128 -68 198t-194 70q-118 0 -190 -68.5t-73 -185.5h-112zM373 0v154 h139v-154h-139z" />
+<glyph unicode="@" horiz-adv-x="1870" d="M122 478q18 424 252.5 683t609.5 259q391 0 587.5 -241.5t179.5 -665.5q-10 -216 -117 -375t-313 -159q-78 0 -130.5 51t-69.5 142q-53 -96 -131 -144.5t-180 -48.5q-131 0 -199 120t-49 317q23 254 141 407.5t286 153.5q94 0 151 -26.5t126 -81.5l-2 -2h3l-50 -574 q-10 -132 30 -180t95 -48q142 0 224.5 124.5t93.5 323.5q18 389 -150 604.5t-530 215.5q-323 0 -533 -235.5t-227 -619.5q-19 -379 163.5 -612.5t519.5 -233.5q88 0 178 22t152 57l31 -75q-64 -41 -167 -65t-198 -24q-380 0 -588 249.5t-189 681.5zM672 416 q-16 -155 26 -247t138 -92q86 0 156.5 43t122.5 157v8.5t1 7.5l47 544q-32 23 -71 36t-87 13q-134 0 -222 -119t-111 -351z" />
+<glyph unicode="A" horiz-adv-x="1279" d="M32 0l553 1456h113l549 -1456h-124l-150 406h-667l-150 -406h-124zM346 513h588l-290 788h-6z" />
+<glyph unicode="B" horiz-adv-x="1269" d="M191 0v1456h425q227 0 353.5 -95.5t126.5 -287.5q0 -112 -63.5 -195t-172.5 -115q133 -24 216 -125t83 -233q0 -195 -126.5 -300t-338.5 -105h-503zM310 101h384q161 0 253 79.5t92 222.5q0 131 -83.5 215t-242.5 84h-403v-601zM310 803h335q158 0 244.5 69.5t86.5 204.5 q0 138 -92 207.5t-268 69.5h-306v-551z" />
+<glyph unicode="C" horiz-adv-x="1313" d="M132 609v237q0 278 149 454.5t392 176.5q232 0 368 -123t155 -346l-2 -6h-112q-24 181 -124.5 277t-284.5 96q-191 0 -306.5 -148t-115.5 -379v-239q0 -234 115.5 -381.5t306.5 -147.5q184 0 285 94t124 281h112l2 -6q-19 -219 -156 -344.5t-367 -125.5 q-243 0 -392 175.5t-149 454.5z" />
+<glyph unicode="D" horiz-adv-x="1344" d="M191 0v1456h423q267 0 441 -178t174 -457v-187q0 -280 -174 -457t-441 -177h-423zM310 101h304q216 0 355.5 151t139.5 382v190q0 228 -140 379t-355 151h-304v-1253z" />
+<glyph unicode="E" horiz-adv-x="1180" d="M191 0v1456h917v-102h-798v-547h701v-102h-701v-604h803v-101h-922z" />
+<glyph unicode="F" horiz-adv-x="1181" d="M191 0v1456h929v-102h-810v-569h708v-103h-708v-682h-119z" />
+<glyph unicode="G" horiz-adv-x="1401" d="M146 600v267q0 270 154.5 440t400.5 170q235 0 367.5 -117.5t153.5 -305.5l-2 -6h-111q-26 146 -123 236.5t-285 90.5q-196 0 -315.5 -142t-119.5 -364v-269q0 -228 127 -374t332 -146q145 0 246.5 40.5t138.5 88.5v380h-387v102h507v-518q-49 -71 -178.5 -132.5 t-326.5 -61.5q-254 0 -416.5 173t-162.5 448z" />
+<glyph unicode="H" horiz-adv-x="1448" d="M191 0v1456h119v-684h828v684h119v-1456h-119v670h-828v-670h-119z" />
+<glyph unicode="I" horiz-adv-x="554" d="M217 0v1456h120v-1456h-120z" />
+<glyph unicode="J" horiz-adv-x="1127" d="M82 395l2 6h112q0 -158 84 -239.5t240 -81.5q133 0 219 90.5t86 242.5v1043h120v-1043q0 -199 -118.5 -316.5t-306.5 -117.5q-205 0 -324 106q-114 102 -114 294v16z" />
+<glyph unicode="K" horiz-adv-x="1308" d="M191 0v1456h119v-670h199l573 670h135l2 -5l-602 -711l645 -735l-2 -5h-142l-608 685h-200v-685h-119z" />
+<glyph unicode="L" horiz-adv-x="1079" d="M191 0v1456h120v-1355h720v-101h-840z" />
+<glyph unicode="M" horiz-adv-x="1775" d="M191 0v1456h157l535 -1282h6l537 1282h158v-1456h-119v643l10 637l-6 2l-541 -1282h-83l-540 1276l-6 -1l11 -632v-643h-119z" />
+<glyph unicode="N" horiz-adv-x="1454" d="M191 0v1456h120l827 -1250l6 1v1249h119v-1456h-119l-827 1252l-6 -1v-1251h-120z" />
+<glyph unicode="O" horiz-adv-x="1378" d="M124 609v237q0 281 152 456t408 175q260 0 415 -175t155 -456v-237q0 -282 -154.5 -456t-414.5 -174q-256 0 -408.5 174t-152.5 456zM244 609q0 -238 116.5 -382t324.5 -144q213 0 331.5 143.5t118.5 382.5v239q0 236 -119.5 380t-331.5 144q-208 0 -324 -144t-116 -380 v-239z" />
+<glyph unicode="P" horiz-adv-x="1267" d="M191 0v1456h501q229 0 354.5 -116.5t125.5 -308.5q0 -194 -125.5 -310t-354.5 -116h-382v-605h-119zM310 707h382q180 0 270.5 91.5t90.5 230.5q0 140 -90 232.5t-271 92.5h-382v-647z" />
+<glyph unicode="Q" horiz-adv-x="1379" d="M124 609v237q0 281 152 456t408 175q260 0 415 -175t155 -456v-237q0 -164 -54.5 -295.5t-155.5 -214.5l250 -236l-83 -75l-264 249q-59 -29 -124.5 -43.5t-137.5 -14.5q-256 0 -408.5 174t-152.5 456zM244 609q0 -238 116.5 -382t324.5 -144q213 0 331.5 143.5 t118.5 382.5v239q0 236 -119.5 380t-331.5 144q-208 0 -324 -144t-116 -380v-239z" />
+<glyph unicode="R" horiz-adv-x="1348" d="M188 0v1455h493q234 0 359 -102.5t125 -299.5q0 -116 -67 -207.5t-189 -133.5q135 -34 194.5 -121.5t59.5 -219.5v-137q0 -68 16 -122t53 -88v-24h-122q-37 36 -52 101t-15 135v133q0 134 -86.5 211.5t-241.5 77.5h-408v-658h-119zM307 760h359q197 0 288 79.5t91 214.5 q0 144 -90.5 221.5t-273.5 77.5h-374v-593z" />
+<glyph unicode="S" horiz-adv-x="1231" d="M100 408l2 6h110q0 -170 127 -252t299 -82q173 0 279.5 76t106.5 201q0 119 -89 194.5t-310 133.5q-239 60 -362 156t-123 259q0 167 137.5 272t353.5 105q225 0 363 -125q134 -121 134 -295v-10l-3 -6h-110q0 146 -103.5 240t-280.5 94q-175 0 -273.5 -78t-98.5 -194 q0 -110 91 -183.5t314 -129.5q235 -60 357.5 -162t122.5 -269q0 -174 -142.5 -277t-363.5 -103q-218 -1 -380 109q-158 106 -158 308v12z" />
+<glyph unicode="T" horiz-adv-x="1213" d="M45 1354v102h1122v-102h-501v-1354h-120v1354h-501z" />
+<glyph unicode="U" horiz-adv-x="1374" d="M167 469v987h120v-987q0 -186 110 -287.5t287 -101.5q180 0 293 101t113 288v987h119v-987q0 -238 -145.5 -364t-379.5 -126q-231 0 -374 126.5t-143 363.5z" />
+<glyph unicode="V" horiz-adv-x="1263" d="M32 1456h130l438 -1210l29 -97h6l29 97l437 1210h130l-543 -1456h-113z" />
+<glyph unicode="W" horiz-adv-x="1834" d="M57 1456h123l265 -1044l44 -223l6 -1l55 224l308 1044h113l308 -1044l53 -225l6 1l47 224l263 1044h122l-374 -1456h-113l-327 1117l-38 153h-6l-37 -153l-330 -1117h-114z" />
+<glyph unicode="X" horiz-adv-x="1256" d="M59 0l500 738l-485 718h145l409 -622l411 622h145l-484 -718l500 -738h-143l-427 642l-426 -642h-145z" />
+<glyph unicode="Y" horiz-adv-x="1244" d="M33 1456h139l448 -809l451 809h139l-531 -924v-532h-119v539z" />
+<glyph unicode="Z" horiz-adv-x="1224" d="M95 0v92l858 1262h-831v102h977v-87l-861 -1268h893v-101h-1036z" />
+<glyph unicode="[" horiz-adv-x="491" d="M163 -312v1976h330v-102h-210v-1772h210v-102h-330z" />
+<glyph unicode="\" horiz-adv-x="807" d="M48 1456h117l608 -1581h-117z" />
+<glyph unicode="]" horiz-adv-x="491" d="M0 -210h211v1772h-211v102h331v-1976h-331v102z" />
+<glyph unicode="^" horiz-adv-x="852" d="M77 729l299 727h90l298 -727h-116l-196 484l-30 106h-6l-30 -106l-193 -484h-116z" />
+<glyph unicode="_" horiz-adv-x="884" d="M1 0h881v-101h-881v101z" />
+<glyph unicode="`" horiz-adv-x="585" d="M93 1471l2 5h154l202 -266h-117z" />
+<glyph unicode="a" horiz-adv-x="1101" d="M103 288q0 150 129.5 240t349.5 90h239v134q0 116 -74.5 182t-208.5 66q-125 0 -207.5 -63t-82.5 -154l-110 1l-2 6v12q0 114 110 204q116 96 297 96q179 0 288 -91t109 -261v-532q0 -57 6.5 -111t21.5 -107h-125q-12 55 -17 95t-5 81q-60 -85 -160 -141t-225 -56 q-158 0 -245.5 84t-87.5 225zM222 284q0 -88 60.5 -143.5t167.5 -55.5q129 0 228 60.5t143 154.5v226h-241q-163 0 -260.5 -69.5t-97.5 -172.5z" />
+<glyph unicode="b" d="M157 0v1560h120v-648q54 91 138 140.5t200 49.5q195 0 305 -155.5t110 -414.5v-21q0 -243 -110 -387.5t-303 -144.5q-119 0 -205 47.5t-139 136.5l-13 -163h-103zM277 288q40 -94 119.5 -149.5t197.5 -55.5q157 0 236 116t79 312v21q0 207 -80 336.5t-237 129.5 q-125 0 -201.5 -62t-113.5 -159v-489z" />
+<glyph unicode="c" horiz-adv-x="1061" d="M97 520v42q0 236 121 388t340 152q178 0 296 -105q115 -102 115 -265v-11l-2 -6h-107q0 130 -87.5 207.5t-214.5 77.5q-174 0 -257.5 -124.5t-83.5 -313.5v-42q0 -192 83 -316t259 -124q119 0 210 68t91 189h106l2 -6v-11q0 -142 -120 -240q-125 -101 -289 -101 q-221 0 -341.5 151.5t-120.5 389.5z" />
+<glyph unicode="d" d="M111 511v21q0 259 109.5 414.5t305.5 155.5q113 0 196 -48t138 -136v642h119v-1560h-106l-10 157q-54 -86 -139 -132t-200 -46q-194 0 -303.5 144.5t-109.5 387.5zM231 511q0 -196 78.5 -312t236.5 -116q116 0 193.5 52t120.5 144v508q-41 94 -116 152.5t-196 58.5 q-158 0 -237.5 -129.5t-79.5 -336.5v-21z" />
+<glyph unicode="e" horiz-adv-x="1055" d="M92 509v55q0 232 133.5 385t323.5 153q199 0 313 -126t114 -336v-102h-764v-29q0 -183 97 -306t255 -123q112 0 191 31t135 89l51 -82q-61 -64 -154.5 -101.5t-222.5 -37.5q-203 0 -337.5 150t-134.5 380zM221 644l2 -5h634v30q0 141 -83 236t-225 95q-133 0 -223 -101.5 t-105 -254.5z" />
+<glyph unicode="f" horiz-adv-x="673" d="M66 984v98h179v158q0 163 81.5 252t228.5 89q33 0 67 -5t69 -14l-15 -99q-24 6 -49.5 9.5t-59.5 3.5q-98 0 -150 -62t-52 -174v-158h258v-98h-258v-984h-120v984h-179z" />
+<glyph unicode="g" horiz-adv-x="1141" d="M111 511v21q0 259 110.5 414.5t307.5 155.5q115 0 199 -50.5t139 -142.5l14 173h101v-1068q0 -209 -115.5 -330t-321.5 -121q-78 0 -166 19t-154 52l31 101q64 -32 135 -48.5t152 -16.5q158 0 238.5 91t80.5 253v136q-55 -82 -139 -126.5t-196 -44.5q-195 0 -305.5 145 t-110.5 387zM231 511q0 -195 80 -311.5t238 -116.5q116 0 193.5 53t119.5 146v502q-39 94 -114.5 154t-196.5 60q-158 0 -239 -130t-81 -336v-21z" />
+<glyph unicode="h" d="M158 0v1560h120v-663q54 97 144 151t210 54q171 0 262.5 -106t91.5 -329v-667h-120v669q0 176 -69.5 252.5t-191.5 76.5q-123 0 -205.5 -64.5t-121.5 -171.5v-762h-120z" />
+<glyph unicode="i" horiz-adv-x="465" d="M173 0v1082h119v-1082h-119zM173 1392v168h119v-168h-119z" />
+<glyph unicode="j" horiz-adv-x="484" d="M-115 -418l13 101q16 -5 44 -10t49 -5q89 0 139 61.5t50 181.5v1171h119v-1171q0 -167 -80 -257.5t-222 -90.5q-30 0 -56.5 5t-55.5 14zM174 1396v164h119v-164h-119z" />
+<glyph unicode="k" horiz-adv-x="1006" d="M159 0v1560h120v-930h126l402 452h140l2 -5l-433 -488l478 -584l-3 -5h-137l-437 527h-138v-527h-120z" />
+<glyph unicode="l" horiz-adv-x="465" d="M173 0v1560h119v-1560h-119z" />
+<glyph unicode="m" horiz-adv-x="1815" d="M152 0v1082h107l11 -179q52 95 138.5 147t206.5 52q124 0 207.5 -60t119.5 -183q49 114 139.5 178.5t220.5 64.5q173 0 267 -115t94 -356v-631h-120v633q0 200 -70.5 282.5t-196.5 82.5q-139 0 -215 -87t-94 -223q0 -7 0.5 -20t0.5 -19v-649h-121v633q0 196 -71.5 280.5 t-196.5 84.5q-127 0 -201.5 -64.5t-104.5 -173.5v-760h-121z" />
+<glyph unicode="n" d="M158 0v1082h106l11 -189q52 100 140.5 154.5t209.5 54.5q176 0 268 -107.5t92 -335.5v-659h-120v658q0 186 -69.5 263t-197.5 77q-126 0 -205.5 -66.5t-114.5 -176.5v-755h-120z" />
+<glyph unicode="o" d="M91 524v33q0 239 131 392t347 153q217 0 348 -153t131 -392v-33q0 -240 -130.5 -392.5t-346.5 -152.5q-218 0 -349 152.5t-131 392.5zM211 524q0 -188 95 -316t265 -128q167 0 262.5 128t95.5 316v33q0 185 -96 314t-264 129t-263 -129t-95 -314v-33z" />
+<glyph unicode="p" d="M157 -416v1498h101l15 -168q54 90 139.5 139t201.5 49q195 0 305 -155.5t110 -414.5v-21q0 -243 -110 -387.5t-303 -144.5q-114 0 -199.5 43t-139.5 123v-561h-120zM277 271q41 -89 118.5 -140t193.5 -51q157 0 238.5 118t81.5 313v21q0 206 -82 336t-240 130 q-121 0 -196.5 -57.5t-113.5 -149.5v-520z" />
+<glyph unicode="q" d="M111 511v21q0 259 109.5 414.5t305.5 155.5q111 0 194.5 -46.5t137.5 -132.5l12 159h104v-1498h-119v558q-55 -79 -138 -121t-193 -42q-194 0 -303.5 144.5t-109.5 387.5zM231 511q0 -196 78.5 -313.5t236.5 -117.5q112 0 188.5 50.5t120.5 137.5v530 q-41 89 -116.5 145.5t-190.5 56.5q-158 0 -237.5 -130.5t-79.5 -337.5v-21z" />
+<glyph unicode="r" horiz-adv-x="697" d="M158 0v1082h105l15 -180v-12q47 100 126 156t188 56q23 0 44.5 -3.5t35.5 -7.5l-16 -112l-89 6q-113 0 -185.5 -63.5t-103.5 -174.5v-747h-120z" />
+<glyph unicode="s" horiz-adv-x="1043" d="M110 297l2 6h110q7 -117 95.5 -170t208.5 -53q130 0 205 57t75 138q0 76 -62.5 133t-225.5 93q-194 42 -286.5 111t-92.5 195q0 124 104.5 209.5t276.5 85.5q183 0 290 -90q102 -86 102 -215v-12l-2 -6h-111q0 89 -75.5 155t-203.5 66q-131 0 -196.5 -56.5t-65.5 -132.5 q0 -75 56.5 -124t225.5 -86q193 -43 289 -117.5t96 -202.5q0 -135 -109.5 -218.5t-289.5 -83.5q-198 0 -310 94q-107 89 -106 211v13z" />
+<glyph unicode="t" horiz-adv-x="680" d="M38 984v98h187v277h121v-277h238v-98h-238v-705q0 -106 38.5 -150.5t102.5 -44.5q29 0 56.5 2.5t63.5 8.5l18 -89q-30 -13 -73 -20t-86 -7q-114 0 -177.5 72t-63.5 228v705h-187z" />
+<glyph unicode="u" d="M154 455v627h120v-629q0 -198 67.5 -284t191.5 -86q136 0 217 61t113 168v770h120v-1082h-106l-10 177q-52 -95 -140 -146.5t-208 -51.5q-171 0 -268 116t-97 360z" />
+<glyph unicode="v" horiz-adv-x="1002" d="M44 1082h124l298 -811l35 -127h6l38 127l294 811h124l-411 -1082h-96z" />
+<glyph unicode="w" horiz-adv-x="1550" d="M65 1082h124l202 -731l41 -193h6l51 193l230 731h103l230 -731l52 -198h6l45 198l197 731h124l-315 -1082h-102l-240 740l-47 187h-6l-48 -187l-236 -740h-103z" />
+<glyph unicode="x" horiz-adv-x="1002" d="M50 0l383 551l-367 531h141l291 -442l293 442h142l-367 -531l382 -551h-140l-308 461l-308 -461h-142z" />
+<glyph unicode="y" horiz-adv-x="1002" d="M35 1082h133l297 -789l38 -129h6l327 918h134l-470 -1255q-42 -110 -109 -187t-196 -77q-21 0 -51 4.5t-44 9.5l14 100q12 -2 38.5 -4.5t38.5 -2.5q78 0 125 55.5t80 142.5l57 146z" />
+<glyph unicode="z" horiz-adv-x="1002" d="M90 0v88l652 891h-632v103h783v-89l-655 -892h703v-101h-851z" />
+<glyph unicode="{" horiz-adv-x="676" d="M68 543v104q118 0 174.5 67t56.5 190v228q0 171 77.5 290.5t260.5 174.5l26 -79q-127 -41 -185.5 -142t-58.5 -244v-228q0 -110 -45.5 -191t-138.5 -118q93 -39 138.5 -120.5t45.5 -190.5v-226q0 -143 59.5 -241.5t187.5 -140.5l-29 -80q-183 55 -260.5 173.5 t-77.5 288.5v226q0 122 -56.5 190.5t-174.5 68.5z" />
+<glyph unicode="|" horiz-adv-x="452" d="M178 -270v1726h101v-1726h-101z" />
+<glyph unicode="}" horiz-adv-x="676" d="M9 -324q127 42 187 140.5t60 241.5v226q0 112 47 193t146 117q-99 35 -146 116t-47 194v228q0 144 -58.5 244.5t-185.5 141.5l26 79q182 -55 260 -174.5t78 -290.5v-228q0 -122 56 -189.5t175 -67.5v-104q-119 0 -175 -68.5t-56 -190.5v-226q0 -170 -77.5 -288.5 t-260.5 -173.5z" />
+<glyph unicode="~" horiz-adv-x="1402" d="M143 474q0 131 79 222t202 91q87 0 160.5 -37t162.5 -113q63 -57 116.5 -82.5t110.5 -25.5q77 0 131 64t54 162l98 -15q0 -129 -81 -223t-202 -94q-88 0 -160.5 35.5t-160.5 114.5q-64 54 -118.5 80.5t-110.5 26.5q-79 0 -131.5 -60.5t-52.5 -160.5z" />
+<glyph unicode="&#xa1;" horiz-adv-x="452" d="M145 898v184h142v-184h-142zM156 -374v978h120v-978h-120z" />
+<glyph unicode="&#xa2;" horiz-adv-x="1115" d="M122 520v42q0 217 103 364.5t292 171.5v220h120v-219q158 -17 259.5 -119t98.5 -259l-3 -6h-107q0 130 -87.5 207.5t-214.5 77.5q-174 0 -257.5 -124.5t-83.5 -313.5v-42q0 -192 83 -316t259 -124q119 0 210 68t91 189h107l2 -6q4 -137 -102 -234t-255 -115v-227h-120 v228q-190 23 -292.5 170.5t-102.5 366.5z" />
+<glyph unicode="&#xa3;" horiz-adv-x="1170" d="M67 642v102h203l-11 296q0 204 106 320.5t284 116.5q187 0 281 -103.5t91 -277.5l-3 -6h-112q0 148 -68.5 216.5t-188.5 68.5q-125 0 -197.5 -88t-72.5 -247l11 -296h450v-102h-447l7 -176q0 -107 -25.5 -204t-71.5 -161h769v-101h-941v101h10q70 15 105 130t35 235 l-7 176h-207z" />
+<glyph unicode="&#xa4;" horiz-adv-x="1481" d="M109 60l159 161q-60 81 -92 179t-32 208q0 112 34.5 214t98.5 184l-168 171l85 87l167 -170q78 67 175 103.5t204 36.5q106 0 203 -37.5t176 -104.5l170 173l86 -88l-171 -175q62 -82 96 -182.5t34 -211.5q0 -108 -32 -206t-90 -178l163 -164l-86 -87l-158 160 q-80 -74 -180.5 -113.5t-210.5 -39.5q-111 0 -211.5 39.5t-179.5 112.5l-155 -158zM257 608q0 -215 141.5 -366t341.5 -151q198 0 339.5 151t141.5 366q0 213 -141.5 363.5t-339.5 150.5q-200 0 -341.5 -150.5t-141.5 -363.5z" />
+<glyph unicode="&#xa5;" horiz-adv-x="1223" d="M45 1456h139l423 -723l424 723h139l-455 -751h371v-102h-421v-175h421v-102h-421v-326h-119v326h-416v102h416v175h-416v102h370z" />
+<glyph unicode="&#xa6;" horiz-adv-x="444" d="M159 -270v771h120v-771h-120zM159 698v758h120v-758h-120z" />
+<glyph unicode="&#xa7;" horiz-adv-x="1239" d="M108 -70l2 6l112 2q0 -173 113 -252t271 -79q163 0 255.5 70.5t92.5 181.5q0 106 -77 166t-292 121q-243 61 -360 149.5t-117 255.5q0 98 58.5 169t164.5 105q-90 49 -134 119.5t-44 175.5q0 161 128 259t343 98q222 0 346.5 -111.5t120.5 -313.5l-2 -6h-112 q0 141 -94 235t-259 94q-173 0 -262 -71t-89 -181q0 -114 74 -173t299 -122q247 -65 360 -148.5t113 -248.5q0 -98 -61 -168.5t-171 -103.5q94 -50 141 -120.5t47 -177.5q0 -166 -127.5 -261t-341.5 -95q-213 0 -358 102.5t-140 322.5zM228 553q0 -116 79 -175t323 -127 q34 -10 65 -19t60 -18q115 13 179.5 71.5t64.5 142.5q0 108 -85 170.5t-318 130.5q-40 9 -75.5 19.5t-66.5 22.5q-112 -14 -169 -73t-57 -145z" />
+<glyph unicode="&#xa8;" horiz-adv-x="959" d="M162 1299v157h174v-157h-174zM632 1299v157h173v-157h-173z" />
+<glyph unicode="&#xa9;" horiz-adv-x="1637" d="M107 729q0 315 207 531t503 216q295 0 502 -216t207 -531q0 -316 -207.5 -533t-501.5 -217q-296 0 -503 217t-207 533zM192 729q0 -279 182.5 -471.5t442.5 -192.5q257 0 440.5 192.5t183.5 471.5q0 277 -183 468.5t-441 191.5q-260 0 -442.5 -191.5t-182.5 -468.5z M474 669v119q0 172 91 279.5t242 107.5q147 0 230 -79t79 -228l-2 -6h-91q0 113 -55 168t-161 55q-110 0 -172 -83.5t-62 -212.5v-120q0 -132 61.5 -214.5t172.5 -82.5q107 0 161 54t54 170h91l2 -6q4 -150 -78.5 -229t-229.5 -79q-151 0 -242 106.5t-91 280.5z" />
+<glyph unicode="&#xaa;" horiz-adv-x="906" d="M135 920q0 105 79 163t229 58h182v61q0 85 -41 131.5t-120 46.5q-92 0 -142.5 -37.5t-50.5 -108.5l-99 9l-2 6q-5 98 77 163t217 65q123 0 196.5 -71.5t73.5 -204.5v-314q0 -48 6 -92.5t20 -88.5h-111q-9 25 -14.5 52.5t-7.5 55.5q-37 -53 -98.5 -87.5t-144.5 -34.5 q-119 0 -184 61t-65 167zM243 924q0 -66 39.5 -101.5t121.5 -35.5q70 0 135.5 38t85.5 85v147h-181q-96 0 -148.5 -38.5t-52.5 -94.5z" />
+<glyph unicode="&#xab;" horiz-adv-x="933" d="M123 541v19l295 379h105l-276 -389l276 -388h-105zM432 541v19l295 379h105l-276 -389l276 -388h-105z" />
+<glyph unicode="&#xac;" horiz-adv-x="1117" d="M124 670v106h812v-390h-120v284h-692z" />
+<glyph unicode="&#xad;" horiz-adv-x="586" d="M49 570v101h479v-101h-479z" />
+<glyph unicode="&#xae;" horiz-adv-x="1642" d="M102 729q0 315 207 531t503 216q295 0 502.5 -216t207.5 -531q0 -316 -207.5 -533t-502.5 -217q-296 0 -503 217t-207 533zM187 729q0 -279 183 -471.5t442 -192.5q258 0 441 192.5t183 471.5q0 277 -183 468.5t-441 191.5q-259 0 -442 -191.5t-183 -468.5zM552 316v850 h258q147 0 226 -63t79 -185q0 -68 -36.5 -117.5t-104.5 -79.5q68 -25 98 -78t30 -128v-56q0 -40 4 -73t13 -54v-16h-102q-10 21 -12 61.5t-2 82.5v54q0 84 -38 121t-127 37h-188v-356h-98zM650 763h181q79 0 132.5 40.5t53.5 112.5q0 85 -46 122t-161 37h-160v-312z" />
+<glyph unicode="&#xaf;" horiz-adv-x="874" d="M106 1359v97h670v-97h-670z" />
+<glyph unicode="&#xb0;" horiz-adv-x="774" d="M143 1227q0 102 72 176t173 74q99 0 170.5 -74t71.5 -176q0 -104 -71 -175.5t-171 -71.5q-101 0 -173 72t-72 175zM233 1227q0 -68 44.5 -112t110.5 -44q65 0 108.5 44t43.5 112t-43.5 113.5t-108.5 45.5q-66 0 -110.5 -46t-44.5 -113z" />
+<glyph unicode="&#xb1;" horiz-adv-x="1086" d="M85 728v101h414v438h110v-438h392v-101h-392v-439h-110v439h-414zM193 48v102h835v-102h-835z" />
+<glyph unicode="&#xb2;" horiz-adv-x="835" d="M118 667v90l315 282q77 71 104 115.5t27 91.5q0 64 -39 103t-118 39q-87 0 -134 -42t-47 -108h-100l-2 6q-6 97 72.5 166t210.5 69q124 0 195 -60.5t71 -173.5q0 -75 -47 -136t-150 -158l-214 -188l2 -6h423v-90h-569z" />
+<glyph unicode="&#xb3;" horiz-adv-x="852" d="M120 882l2 6h101q0 -63 51 -103t135 -40q90 0 140.5 38t50.5 103q0 75 -46.5 109.5t-139.5 34.5h-122v89h122q88 0 130.5 35t42.5 99q0 59 -45 96.5t-133 37.5q-75 0 -124.5 -35.5t-49.5 -93.5h-99l-2 6q-6 94 74.5 154t200.5 60q132 0 209 -58.5t77 -166.5 q0 -58 -35.5 -105t-98.5 -72q72 -22 110 -70.5t38 -119.5q0 -109 -83.5 -170t-216.5 -61q-121 0 -207.5 58.5t-81.5 168.5z" />
+<glyph unicode="&#xb4;" horiz-adv-x="576" d="M116 1212l207 266h147l3 -6l-249 -260h-108z" />
+<glyph unicode="&#xb5;" d="M162 -416v1498h119v-633q0 -207 71 -288t192 -81q137 0 212 59.5t103 170.5v772h120v-1082h-103l-11 155q-48 -85 -126 -130.5t-187 -45.5q-88 0 -157 30t-114 96v-521h-119z" />
+<glyph unicode="&#xb6;" horiz-adv-x="973" d="M82 988q0 207 129.5 337.5t362.5 130.5h226v-1456h-120v520h-106q-233 0 -362.5 129.5t-129.5 338.5z" />
+<glyph unicode="&#xb7;" horiz-adv-x="503" d="M166 624v180h155v-180h-155z" />
+<glyph unicode="&#xb8;" horiz-adv-x="498" d="M98 -357q90 0 151.5 30.5t61.5 89.5q0 57 -41.5 79.5t-145.5 30.5l29 127h93l-12 -64q79 -9 127.5 -48.5t48.5 -122.5q0 -91 -79 -145.5t-226 -54.5z" />
+<glyph unicode="&#xb9;" horiz-adv-x="511" d="M87 1361v93l257 23v-812h-109v703z" />
+<glyph unicode="&#xba;" horiz-adv-x="922" d="M135 1026v116q0 148 87.5 241.5t235.5 93.5t236 -93.5t88 -241.5v-116q0 -149 -87.5 -241.5t-234.5 -92.5q-149 0 -237 92.5t-88 241.5zM243 1026q0 -107 54.5 -173t162.5 -66q103 0 158.5 66.5t55.5 172.5v116q0 104 -56 171t-160 67t-159.5 -67t-55.5 -171v-116z" />
+<glyph unicode="&#xbb;" horiz-adv-x="928" d="M130 162l276 388l-276 389h105l295 -379v-19l-295 -379h-105zM445 162l276 388l-276 389h105l295 -379v-19l-295 -379h-105z" />
+<glyph unicode="&#xbc;" horiz-adv-x="1561" d="M160 1360v93l257 23v-812h-109v703zM326 177l711 1138l74 -48l-711 -1138zM771 237l429 564h113v-541h153v-90h-153v-170h-108v170h-430zM900 260h305v402l-6 1l-25 -43z" />
+<glyph unicode="&#xbd;" horiz-adv-x="1567" d="M160 1360v93l257 23v-812h-109v703zM338 177l711 1138l74 -48l-711 -1138zM912 0v90l315 282q77 71 104 115.5t27 91.5q0 64 -39 103t-118 39q-87 0 -134 -42t-47 -108h-100l-2 6q-6 97 72.5 166t210.5 69q124 0 195 -60.5t71 -173.5q0 -75 -47 -136t-150 -158l-214 -188 l2 -6h423v-90h-569z" />
+<glyph unicode="&#xbe;" horiz-adv-x="1712" d="M145 883l2 6h101q0 -63 51 -103t135 -40q90 0 140.5 38t50.5 103q0 75 -46.5 109.5t-139.5 34.5h-122v89h122q88 0 130.5 35t42.5 99q0 59 -45 96.5t-133 37.5q-75 0 -124.5 -35.5t-49.5 -93.5h-99l-2 6q-6 94 74.5 154t200.5 60q132 0 209 -58.5t77 -166.5 q0 -58 -35.5 -105t-98.5 -72q72 -22 110 -70.5t38 -119.5q0 -109 -83.5 -170t-216.5 -61q-121 0 -207.5 58.5t-81.5 168.5zM533 177l711 1138l74 -48l-711 -1138zM980 237l429 564h113v-541h153v-90h-153v-170h-108v170h-430zM1109 260h305v402l-6 1l-25 -43z" />
+<glyph unicode="&#xbf;" horiz-adv-x="958" d="M108 -20q0 133 66 237.5t189 219.5q61 52 75 98.5t14 142.5h120q-2 -131 -23.5 -183t-113.5 -136q-109 -113 -158 -188.5t-49 -189.5q0 -128 67.5 -198t194.5 -70q117 0 189 68.5t74 185.5h112l2 -6q2 -165 -105 -260t-272 -95q-180 0 -281 101t-101 273zM436 928v155 h139v-155h-139z" />
+<glyph unicode="&#xc0;" horiz-adv-x="1279" d="M32 0l553 1456h113l549 -1456h-124l-150 406h-667l-150 -406h-124zM346 513h588l-290 788h-6zM370 1822l2 5h154l202 -266h-117z" />
+<glyph unicode="&#xc1;" horiz-adv-x="1279" d="M32 0l553 1456h113l549 -1456h-124l-150 406h-667l-150 -406h-124zM346 513h588l-290 788h-6zM583 1557l207 266h147l3 -6l-249 -260h-108z" />
+<glyph unicode="&#xc2;" horiz-adv-x="1279" d="M32 0l553 1456h113l549 -1456h-124l-150 406h-667l-150 -406h-124zM346 513h588l-290 788h-6zM382 1601v21l227 221h98l230 -224v-18h-112l-167 168l-166 -168h-110z" />
+<glyph unicode="&#xc3;" horiz-adv-x="1279" d="M32 0l553 1456h113l549 -1456h-124l-150 406h-667l-150 -406h-124zM313 1622q0 86 54 144.5t137 58.5q65 0 147 -55t135 -55q46 0 79 36t33 91l80 -20q0 -88 -55 -146t-137 -58q-74 0 -151 55t-131 55q-47 0 -79 -35t-32 -89zM346 513h588l-290 788h-6z" />
+<glyph unicode="&#xc4;" horiz-adv-x="1279" d="M32 0l553 1456h113l549 -1456h-124l-150 406h-667l-150 -406h-124zM341 1641v157h174v-157h-174zM346 513h588l-290 788h-6zM811 1641v157h173v-157h-173z" />
+<glyph unicode="&#xc5;" horiz-adv-x="1279" d="M32 0l553 1456h113l549 -1456h-124l-150 406h-667l-150 -406h-124zM346 513h588l-290 788h-6zM487 1730q0 69 49.5 117.5t119.5 48.5q68 0 117 -48.5t49 -117.5q0 -71 -48.5 -117t-117.5 -46q-71 0 -120 46t-49 117zM565 1730q0 -39 26.5 -65t64.5 -26q37 0 62.5 25.5 t25.5 65.5t-25.5 66.5t-62.5 26.5q-38 0 -64.5 -27t-26.5 -66z" />
+<glyph unicode="&#xc6;" horiz-adv-x="1865" d="M17 0l881 1456h864v-102h-694l23 -545h589v-102h-585l26 -606h702v-101h-817l-17 389h-597l-229 -389h-146zM459 502h526l-35 839l-6 1l-15 -44z" />
+<glyph unicode="&#xc7;" horiz-adv-x="1313" d="M132 609v237q0 278 149 454.5t392 176.5q232 0 368 -123t155 -346l-2 -6h-112q-24 181 -124.5 277t-284.5 96q-191 0 -306.5 -148t-115.5 -379v-239q0 -234 115.5 -381.5t306.5 -147.5q184 0 285 94t124 281h112l2 -6q-19 -219 -156 -344.5t-367 -125.5 q-243 0 -392 175.5t-149 454.5zM580 -365q90 0 151.5 30.5t61.5 89.5q0 57 -41.5 79.5t-145.5 30.5l29 127h93l-12 -64q79 -9 127.5 -48.5t48.5 -122.5q0 -91 -79 -145.5t-226 -54.5z" />
+<glyph unicode="&#xc8;" horiz-adv-x="1180" d="M191 0v1456h917v-102h-798v-547h701v-102h-701v-604h803v-101h-922zM335 1822l2 5h154l202 -266h-117z" />
+<glyph unicode="&#xc9;" horiz-adv-x="1180" d="M191 0v1456h917v-102h-798v-547h701v-102h-701v-604h803v-101h-922zM548 1557l207 266h147l3 -6l-249 -260h-108z" />
+<glyph unicode="&#xca;" horiz-adv-x="1180" d="M191 0v1456h917v-102h-798v-547h701v-102h-701v-604h803v-101h-922zM347 1601v21l227 221h98l230 -224v-18h-112l-167 168l-166 -168h-110z" />
+<glyph unicode="&#xcb;" horiz-adv-x="1180" d="M191 0v1456h917v-102h-798v-547h701v-102h-701v-604h803v-101h-922zM306 1641v157h174v-157h-174zM776 1641v157h173v-157h-173z" />
+<glyph unicode="&#xcc;" horiz-adv-x="554" d="M-9 1822l2 5h154l202 -266h-117zM217 0v1456h120v-1456h-120z" />
+<glyph unicode="&#xcd;" horiz-adv-x="554" d="M202 1557l207 266h147l3 -6l-249 -260h-108zM217 0v1456h120v-1456h-120z" />
+<glyph unicode="&#xce;" horiz-adv-x="554" d="M3 1601v21l227 221h98l230 -224v-18h-112l-167 168l-166 -168h-110zM217 0v1456h120v-1456h-120z" />
+<glyph unicode="&#xcf;" horiz-adv-x="554" d="M-38 1641v157h174v-157h-174zM217 0v1456h120v-1456h-120zM432 1641v157h173v-157h-173z" />
+<glyph unicode="&#xd0;" horiz-adv-x="1374" d="M68 689v102h153v665h423q267 0 441 -178t174 -457v-187q0 -280 -174 -457t-441 -177h-423v689h-153zM340 101h304q216 0 355.5 151t139.5 382v190q0 228 -140 379t-355 151h-304v-563h340v-102h-340v-588z" />
+<glyph unicode="&#xd1;" horiz-adv-x="1454" d="M191 0v1456h120l827 -1250l6 1v1249h119v-1456h-119l-827 1252l-6 -1v-1251h-120zM382 1622q0 86 54 144.5t137 58.5q65 0 147 -55t135 -55q46 0 79 36t33 91l80 -20q0 -88 -55 -146t-137 -58q-74 0 -151 55t-131 55q-47 0 -79 -35t-32 -89z" />
+<glyph unicode="&#xd2;" horiz-adv-x="1378" d="M124 609v237q0 281 152 456t408 175q260 0 415 -175t155 -456v-237q0 -282 -154.5 -456t-414.5 -174q-256 0 -408.5 174t-152.5 456zM244 609q0 -238 116.5 -382t324.5 -144q213 0 331.5 143.5t118.5 382.5v239q0 236 -119.5 380t-331.5 144q-208 0 -324 -144t-116 -380 v-239zM398 1843l2 5h154l202 -266h-117z" />
+<glyph unicode="&#xd3;" horiz-adv-x="1378" d="M124 609v237q0 281 152 456t408 175q260 0 415 -175t155 -456v-237q0 -282 -154.5 -456t-414.5 -174q-256 0 -408.5 174t-152.5 456zM244 609q0 -238 116.5 -382t324.5 -144q213 0 331.5 143.5t118.5 382.5v239q0 236 -119.5 380t-331.5 144q-208 0 -324 -144t-116 -380 v-239zM611 1578l207 266h147l3 -6l-249 -260h-108z" />
+<glyph unicode="&#xd4;" horiz-adv-x="1378" d="M124 609v237q0 281 152 456t408 175q260 0 415 -175t155 -456v-237q0 -282 -154.5 -456t-414.5 -174q-256 0 -408.5 174t-152.5 456zM244 609q0 -238 116.5 -382t324.5 -144q213 0 331.5 143.5t118.5 382.5v239q0 236 -119.5 380t-331.5 144q-208 0 -324 -144t-116 -380 v-239zM410 1622v21l227 221h98l230 -224v-18h-112l-167 168l-166 -168h-110z" />
+<glyph unicode="&#xd5;" horiz-adv-x="1378" d="M124 609v237q0 281 152 456t408 175q260 0 415 -175t155 -456v-237q0 -282 -154.5 -456t-414.5 -174q-256 0 -408.5 174t-152.5 456zM244 609q0 -238 116.5 -382t324.5 -144q213 0 331.5 143.5t118.5 382.5v239q0 236 -119.5 380t-331.5 144q-208 0 -324 -144t-116 -380 v-239zM341 1643q0 86 54 144.5t137 58.5q65 0 147 -55t135 -55q46 0 79 36t33 91l80 -20q0 -88 -55 -146t-137 -58q-74 0 -151 55t-131 55q-47 0 -79 -35t-32 -89z" />
+<glyph unicode="&#xd6;" horiz-adv-x="1378" d="M124 609v237q0 281 152 456t408 175q260 0 415 -175t155 -456v-237q0 -282 -154.5 -456t-414.5 -174q-256 0 -408.5 174t-152.5 456zM244 609q0 -238 116.5 -382t324.5 -144q213 0 331.5 143.5t118.5 382.5v239q0 236 -119.5 380t-331.5 144q-208 0 -324 -144t-116 -380 v-239zM369 1662v157h174v-157h-174zM839 1662v157h173v-157h-173z" />
+<glyph unicode="&#xd7;" horiz-adv-x="1072" d="M93 318l358 365l-343 350l79 80l342 -350l343 350l79 -80l-343 -350l358 -365l-79 -79l-358 364l-357 -364z" />
+<glyph unicode="&#xd8;" horiz-adv-x="1379" d="M124 609v237q0 281 152 456t408 175q109 0 201.5 -33t165.5 -95l96 156h104l-136 -222q67 -84 103 -195.5t36 -241.5v-237q0 -282 -154.5 -456t-414.5 -174q-92 0 -171.5 23.5t-144.5 68.5l-96 -155h-104l131 212q-86 84 -131 207.5t-45 273.5zM244 609 q0 -118 29.5 -214.5t85.5 -160.5l6 -1l627 1021q-58 57 -135.5 87.5t-172.5 30.5q-208 0 -324 -144t-116 -380v-239zM426 164q51 -40 116.5 -60.5t142.5 -20.5q213 0 331.5 143.5t118.5 382.5v239q0 97 -21.5 180.5t-60.5 144.5h-6z" />
+<glyph unicode="&#xd9;" horiz-adv-x="1374" d="M167 469v987h120v-987q0 -186 110 -287.5t287 -101.5q180 0 293 101t113 288v987h119v-987q0 -238 -145.5 -364t-379.5 -126q-231 0 -374 126.5t-143 363.5zM409 1822l2 5h154l202 -266h-117z" />
+<glyph unicode="&#xda;" horiz-adv-x="1374" d="M167 469v987h120v-987q0 -186 110 -287.5t287 -101.5q180 0 293 101t113 288v987h119v-987q0 -238 -145.5 -364t-379.5 -126q-231 0 -374 126.5t-143 363.5zM622 1557l207 266h147l3 -6l-249 -260h-108z" />
+<glyph unicode="&#xdb;" horiz-adv-x="1374" d="M167 469v987h120v-987q0 -186 110 -287.5t287 -101.5q180 0 293 101t113 288v987h119v-987q0 -238 -145.5 -364t-379.5 -126q-231 0 -374 126.5t-143 363.5zM421 1601v21l227 221h98l230 -224v-18h-112l-167 168l-166 -168h-110z" />
+<glyph unicode="&#xdc;" horiz-adv-x="1374" d="M167 469v987h120v-987q0 -186 110 -287.5t287 -101.5q180 0 293 101t113 288v987h119v-987q0 -238 -145.5 -364t-379.5 -126q-231 0 -374 126.5t-143 363.5zM380 1641v157h174v-157h-174zM850 1641v157h173v-157h-173z" />
+<glyph unicode="&#xdd;" horiz-adv-x="1244" d="M33 1456h139l448 -809l451 809h139l-531 -924v-532h-119v539zM545 1550l207 266h147l3 -6l-249 -260h-108z" />
+<glyph unicode="&#xde;" horiz-adv-x="1214" d="M183 0v1456h120v-304h324q221 0 345 -115.5t124 -298.5q0 -185 -124 -299.5t-345 -114.5h-324v-324h-120zM303 425h324q173 0 261 92t88 219q0 130 -88 222.5t-261 92.5h-324v-626z" />
+<glyph unicode="&#xdf;" horiz-adv-x="1200" d="M151 0v1082q0 204 102.5 317t273.5 113q140 0 232 -79.5t92 -222.5q0 -109 -61.5 -215.5t-61.5 -184.5q0 -86 184 -228t184 -287q0 -153 -110 -234.5t-266 -81.5q-86 0 -176.5 23.5t-129.5 56.5l34 101q41 -31 114.5 -55.5t143.5 -24.5q125 0 197.5 60t72.5 155 q0 99 -184 240.5t-184 276.5q0 93 63 201.5t63 190.5q0 92 -60 149.5t-137 57.5q-121 0 -193.5 -85.5t-72.5 -243.5v-1082h-120z" />
+<glyph unicode="&#xe0;" horiz-adv-x="1101" d="M103 288q0 150 129.5 240t349.5 90h239v134q0 116 -74.5 182t-208.5 66q-125 0 -207.5 -63t-82.5 -154l-110 1l-2 6q-6 121 110.5 216.5t296.5 95.5q179 0 288 -91t109 -261v-532q0 -57 6.5 -111t21.5 -107h-125q-12 55 -17 95t-5 81q-60 -85 -160 -141t-225 -56 q-158 0 -245.5 84t-87.5 225zM222 284q0 -88 60.5 -143.5t167.5 -55.5q129 0 228 60.5t143 154.5v226h-241q-163 0 -260.5 -69.5t-97.5 -172.5zM255 1501l2 5h154l202 -266h-117z" />
+<glyph unicode="&#xe1;" horiz-adv-x="1101" d="M103 288q0 150 129.5 240t349.5 90h239v134q0 116 -74.5 182t-208.5 66q-125 0 -207.5 -63t-82.5 -154l-110 1l-2 6q-6 121 110.5 216.5t296.5 95.5q179 0 288 -91t109 -261v-532q0 -57 6.5 -111t21.5 -107h-125q-12 55 -17 95t-5 81q-60 -85 -160 -141t-225 -56 q-158 0 -245.5 84t-87.5 225zM222 284q0 -88 60.5 -143.5t167.5 -55.5q129 0 228 60.5t143 154.5v226h-241q-163 0 -260.5 -69.5t-97.5 -172.5zM468 1236l207 266h147l3 -6l-249 -260h-108z" />
+<glyph unicode="&#xe2;" horiz-adv-x="1101" d="M103 288q0 150 129.5 240t349.5 90h239v134q0 116 -74.5 182t-208.5 66q-125 0 -207.5 -63t-82.5 -154l-110 1l-2 6q-6 121 110.5 216.5t296.5 95.5q179 0 288 -91t109 -261v-532q0 -57 6.5 -111t21.5 -107h-125q-12 55 -17 95t-5 81q-60 -85 -160 -141t-225 -56 q-158 0 -245.5 84t-87.5 225zM222 284q0 -88 60.5 -143.5t167.5 -55.5q129 0 228 60.5t143 154.5v226h-241q-163 0 -260.5 -69.5t-97.5 -172.5zM267 1280v21l227 221h98l230 -224v-18h-112l-167 168l-166 -168h-110z" />
+<glyph unicode="&#xe3;" horiz-adv-x="1101" d="M103 288q0 150 129.5 240t349.5 90h239v134q0 116 -74.5 182t-208.5 66q-125 0 -207.5 -63t-82.5 -154l-110 1l-2 6q-6 121 110.5 216.5t296.5 95.5q179 0 288 -91t109 -261v-532q0 -57 6.5 -111t21.5 -107h-125q-12 55 -17 95t-5 81q-60 -85 -160 -141t-225 -56 q-158 0 -245.5 84t-87.5 225zM198 1301q0 86 54 144.5t137 58.5q65 0 147 -55t135 -55q46 0 79 36t33 91l80 -20q0 -88 -55 -146t-137 -58q-74 0 -151 55t-131 55q-47 0 -79 -35t-32 -89zM222 284q0 -88 60.5 -143.5t167.5 -55.5q129 0 228 60.5t143 154.5v226h-241 q-163 0 -260.5 -69.5t-97.5 -172.5z" />
+<glyph unicode="&#xe4;" horiz-adv-x="1101" d="M103 288q0 150 129.5 240t349.5 90h239v134q0 116 -74.5 182t-208.5 66q-125 0 -207.5 -63t-82.5 -154l-110 1l-2 6q-6 121 110.5 216.5t296.5 95.5q179 0 288 -91t109 -261v-532q0 -57 6.5 -111t21.5 -107h-125q-12 55 -17 95t-5 81q-60 -85 -160 -141t-225 -56 q-158 0 -245.5 84t-87.5 225zM222 284q0 -88 60.5 -143.5t167.5 -55.5q129 0 228 60.5t143 154.5v226h-241q-163 0 -260.5 -69.5t-97.5 -172.5zM226 1320v157h174v-157h-174zM696 1320v157h173v-157h-173z" />
+<glyph unicode="&#xe5;" horiz-adv-x="1101" d="M103 288q0 150 129.5 240t349.5 90h239v134q0 116 -74.5 182t-208.5 66q-125 0 -207.5 -63t-82.5 -154l-110 1l-2 6q-6 121 110.5 216.5t296.5 95.5q179 0 288 -91t109 -261v-532q0 -57 6.5 -111t21.5 -107h-125q-12 55 -17 95t-5 81q-60 -85 -160 -141t-225 -56 q-158 0 -245.5 84t-87.5 225zM222 284q0 -88 60.5 -143.5t167.5 -55.5q129 0 228 60.5t143 154.5v226h-241q-163 0 -260.5 -69.5t-97.5 -172.5zM372 1409q0 69 49.5 117.5t119.5 48.5q68 0 117 -48.5t49 -117.5q0 -71 -48.5 -117t-117.5 -46q-71 0 -120 46t-49 117z M450 1409q0 -39 26.5 -65t64.5 -26q37 0 62.5 25.5t25.5 65.5t-25.5 66.5t-62.5 26.5q-38 0 -64.5 -27t-26.5 -66z" />
+<glyph unicode="&#xe6;" horiz-adv-x="1732" d="M77 293q0 158 113 248.5t326 90.5h262v88q0 134 -63 207t-187 73q-135 0 -213.5 -67t-78.5 -168l-110 12l-2 6q-5 138 106.5 228.5t297.5 90.5q124 0 212.5 -54t128.5 -157q61 99 156.5 155t209.5 56q200 0 311.5 -124t111.5 -340v-100h-754v-29q0 -191 89.5 -310 t271.5 -119q103 0 181.5 32.5t142.5 86.5l47 -87q-60 -55 -148.5 -94t-222.5 -39q-138 0 -241 55.5t-163 157.5q-49 -87 -159.5 -150t-269.5 -63q-170 0 -262.5 84.5t-92.5 229.5zM197 289q0 -97 65 -153.5t187 -56.5q102 0 197.5 53.5t131.5 115.5v288h-260 q-155 0 -238 -71t-83 -176zM912 641l2 -5h625v31q0 146 -77.5 239.5t-226.5 93.5q-138 0 -224 -101.5t-99 -257.5z" />
+<glyph unicode="&#xe7;" horiz-adv-x="1061" d="M97 520v42q0 236 121 388t340 152q178 0 296.5 -105t114.5 -276l-2 -6h-107q0 130 -87.5 207.5t-214.5 77.5q-174 0 -257.5 -124.5t-83.5 -313.5v-42q0 -192 83 -316t259 -124q119 0 210 68t91 189h106l2 -6q5 -150 -120 -251t-289 -101q-221 0 -341.5 151.5 t-120.5 389.5zM444 -365q90 0 151.5 30.5t61.5 89.5q0 57 -41.5 79.5t-145.5 30.5l29 127h93l-12 -64q79 -9 127.5 -48.5t48.5 -122.5q0 -91 -79 -145.5t-226 -54.5z" />
+<glyph unicode="&#xe8;" horiz-adv-x="1055" d="M92 509v55q0 232 133.5 385t323.5 153q199 0 313 -126t114 -336v-102h-764v-29q0 -183 97 -306t255 -123q112 0 191 31t135 89l51 -82q-61 -64 -154.5 -101.5t-222.5 -37.5q-203 0 -337.5 150t-134.5 380zM221 644l2 -5h634v30q0 141 -83 236t-225 95q-133 0 -223 -101.5 t-105 -254.5zM274 1501l2 5h154l202 -266h-117z" />
+<glyph unicode="&#xe9;" horiz-adv-x="1055" d="M92 509v55q0 232 133.5 385t323.5 153q199 0 313 -126t114 -336v-102h-764v-29q0 -183 97 -306t255 -123q112 0 191 31t135 89l51 -82q-61 -64 -154.5 -101.5t-222.5 -37.5q-203 0 -337.5 150t-134.5 380zM221 644l2 -5h634v30q0 141 -83 236t-225 95q-133 0 -223 -101.5 t-105 -254.5zM487 1236l207 266h147l3 -6l-249 -260h-108z" />
+<glyph unicode="&#xea;" horiz-adv-x="1055" d="M92 509v55q0 232 133.5 385t323.5 153q199 0 313 -126t114 -336v-102h-764v-29q0 -183 97 -306t255 -123q112 0 191 31t135 89l51 -82q-61 -64 -154.5 -101.5t-222.5 -37.5q-203 0 -337.5 150t-134.5 380zM221 644l2 -5h634v30q0 141 -83 236t-225 95q-133 0 -223 -101.5 t-105 -254.5zM286 1280v21l227 221h98l230 -224v-18h-112l-167 168l-166 -168h-110z" />
+<glyph unicode="&#xeb;" horiz-adv-x="1055" d="M92 509v55q0 232 133.5 385t323.5 153q199 0 313 -126t114 -336v-102h-764v-29q0 -183 97 -306t255 -123q112 0 191 31t135 89l51 -82q-61 -64 -154.5 -101.5t-222.5 -37.5q-203 0 -337.5 150t-134.5 380zM221 644l2 -5h634v30q0 141 -83 236t-225 95q-133 0 -223 -101.5 t-105 -254.5zM245 1320v157h174v-157h-174zM715 1320v157h173v-157h-173z" />
+<glyph unicode="&#xec;" horiz-adv-x="456" d="M-58 1479l2 5h154l202 -266h-117zM168 0v1082h120v-1082h-120z" />
+<glyph unicode="&#xed;" horiz-adv-x="456" d="M153 1214l207 266h147l3 -6l-249 -260h-108zM168 0v1082h120v-1082h-120z" />
+<glyph unicode="&#xee;" horiz-adv-x="456" d="M-46 1258v21l227 221h98l230 -224v-18h-112l-167 168l-166 -168h-110zM168 0v1082h120v-1082h-120z" />
+<glyph unicode="&#xef;" horiz-adv-x="456" d="M-87 1299v157h174v-157h-174zM168 0v1082h120v-1082h-120zM383 1299v157h173v-157h-173z" />
+<glyph unicode="&#xf0;" horiz-adv-x="1191" d="M99 455q0 235 130 372.5t348 137.5q104 0 193 -40t143 -107l4 5q-18 131 -68 234t-126 182l-308 -176l-50 74l287 164q-45 33 -94.5 61t-103.5 51l39 104q77 -30 144 -68t124 -85l257 147l51 -74l-241 -138q111 -120 169 -288.5t58 -387.5v-88q0 -245 -137 -400.5 t-344 -155.5q-208 0 -341.5 137t-133.5 339zM219 455q0 -149 97 -261t262 -112q158 0 257.5 127.5t99.5 325.5v90q0 9 -0.5 27.5t-0.5 28.5q-38 76 -128 128t-229 52q-173 0 -265.5 -115t-92.5 -291z" />
+<glyph unicode="&#xf1;" d="M158 0v1082h106l11 -189q52 100 140.5 154.5t209.5 54.5q176 0 268 -107.5t92 -335.5v-659h-120v658q0 186 -69.5 263t-197.5 77q-126 0 -205.5 -66.5t-114.5 -176.5v-755h-120zM233 1300q0 86 54 144.5t137 58.5q65 0 147 -55t135 -55q46 0 79 36t33 91l80 -20 q0 -88 -55 -146t-137 -58q-74 0 -151 55t-131 55q-47 0 -79 -35t-32 -89z" />
+<glyph unicode="&#xf2;" d="M91 524v33q0 239 131 392t347 153q217 0 348 -153t131 -392v-33q0 -240 -130.5 -392.5t-346.5 -152.5q-218 0 -349 152.5t-131 392.5zM211 524q0 -188 95 -316t265 -128q167 0 262.5 128t95.5 316v33q0 185 -96 314t-264 129t-263 -129t-95 -314v-33zM294 1500l2 5h154 l202 -266h-117z" />
+<glyph unicode="&#xf3;" d="M91 524v33q0 239 131 392t347 153q217 0 348 -153t131 -392v-33q0 -240 -130.5 -392.5t-346.5 -152.5q-218 0 -349 152.5t-131 392.5zM211 524q0 -188 95 -316t265 -128q167 0 262.5 128t95.5 316v33q0 185 -96 314t-264 129t-263 -129t-95 -314v-33zM507 1235l207 266 h147l3 -6l-249 -260h-108z" />
+<glyph unicode="&#xf4;" d="M91 524v33q0 239 131 392t347 153q217 0 348 -153t131 -392v-33q0 -240 -130.5 -392.5t-346.5 -152.5q-218 0 -349 152.5t-131 392.5zM211 524q0 -188 95 -316t265 -128q167 0 262.5 128t95.5 316v33q0 185 -96 314t-264 129t-263 -129t-95 -314v-33zM306 1279v21 l227 221h98l230 -224v-18h-112l-167 168l-166 -168h-110z" />
+<glyph unicode="&#xf5;" d="M91 524v33q0 239 131 392t347 153q217 0 348 -153t131 -392v-33q0 -240 -130.5 -392.5t-346.5 -152.5q-218 0 -349 152.5t-131 392.5zM211 524q0 -188 95 -316t265 -128q167 0 262.5 128t95.5 316v33q0 185 -96 314t-264 129t-263 -129t-95 -314v-33zM237 1300 q0 86 54 144.5t137 58.5q65 0 147 -55t135 -55q46 0 79 36t33 91l80 -20q0 -88 -55 -146t-137 -58q-74 0 -151 55t-131 55q-47 0 -79 -35t-32 -89z" />
+<glyph unicode="&#xf6;" d="M91 524v33q0 239 131 392t347 153q217 0 348 -153t131 -392v-33q0 -240 -130.5 -392.5t-346.5 -152.5q-218 0 -349 152.5t-131 392.5zM211 524q0 -188 95 -316t265 -128q167 0 262.5 128t95.5 316v33q0 185 -96 314t-264 129t-263 -129t-95 -314v-33zM265 1319v157h174 v-157h-174zM735 1319v157h173v-157h-173z" />
+<glyph unicode="&#xf7;" horiz-adv-x="1164" d="M72 644v116h998v-116h-998zM506 212v160h142v-160h-142zM506 1010v160h142v-160h-142z" />
+<glyph unicode="&#xf8;" horiz-adv-x="1141" d="M91 524v33q0 239 131 392t347 153q60 0 114 -12.5t102 -36.5l79 161h93l-101 -207q91 -72 141.5 -189t50.5 -261v-33q0 -240 -130.5 -392.5t-346.5 -152.5q-55 0 -104.5 10.5t-94.5 30.5l-78 -160h-93l99 202q-100 70 -154.5 190.5t-54.5 271.5zM211 524q0 -112 35 -206 t100 -149h6l385 787q-36 21 -78.5 32.5t-89.5 11.5q-168 0 -263 -129t-95 -314v-33zM418 114q33 -17 71.5 -25.5t81.5 -8.5q167 0 262.5 128t95.5 316v33q0 102 -32 192t-89 147h-6z" />
+<glyph unicode="&#xf9;" d="M154 455v627h120v-629q0 -198 67.5 -284t191.5 -86q136 0 217 61t113 168v770h120v-1082h-106l-10 177q-52 -95 -140 -146.5t-208 -51.5q-171 0 -268 116t-97 360zM292 1479l2 5h154l202 -266h-117z" />
+<glyph unicode="&#xfa;" d="M154 455v627h120v-629q0 -198 67.5 -284t191.5 -86q136 0 217 61t113 168v770h120v-1082h-106l-10 177q-52 -95 -140 -146.5t-208 -51.5q-171 0 -268 116t-97 360zM505 1214l207 266h147l3 -6l-249 -260h-108z" />
+<glyph unicode="&#xfb;" d="M154 455v627h120v-629q0 -198 67.5 -284t191.5 -86q136 0 217 61t113 168v770h120v-1082h-106l-10 177q-52 -95 -140 -146.5t-208 -51.5q-171 0 -268 116t-97 360zM304 1258v21l227 221h98l230 -224v-18h-112l-167 168l-166 -168h-110z" />
+<glyph unicode="&#xfc;" d="M154 455v627h120v-629q0 -198 67.5 -284t191.5 -86q136 0 217 61t113 168v770h120v-1082h-106l-10 177q-52 -95 -140 -146.5t-208 -51.5q-171 0 -268 116t-97 360zM263 1299v157h174v-157h-174zM733 1299v157h173v-157h-173z" />
+<glyph unicode="&#xfd;" horiz-adv-x="1002" d="M35 1082h133l297 -789l38 -129h6l327 918h134l-470 -1255q-42 -110 -109 -187t-196 -77q-21 0 -51 4.5t-44 9.5l14 100q12 -2 38.5 -4.5t38.5 -2.5q78 0 125 55.5t80 142.5l57 146zM439 1214l207 266h147l3 -6l-249 -260h-108z" />
+<glyph unicode="&#xfe;" horiz-adv-x="1151" d="M161 -416v1976h120v-640q54 87 138.5 134.5t198.5 47.5q195 0 305 -155.5t110 -414.5v-21q0 -243 -110 -387.5t-303 -144.5q-114 0 -199.5 43t-139.5 123v-561h-120zM281 271q41 -89 118.5 -140t193.5 -51q157 0 238.5 118t81.5 313v21q0 206 -82 336t-240 130 q-121 0 -196.5 -57.5t-113.5 -149.5v-520z" />
+<glyph unicode="&#xff;" horiz-adv-x="1002" d="M35 1082h133l297 -789l38 -129h6l327 918h134l-470 -1255q-42 -110 -109 -187t-196 -77q-21 0 -51 4.5t-44 9.5l14 100q12 -2 38.5 -4.5t38.5 -2.5q78 0 125 55.5t80 142.5l57 146zM197 1299v157h174v-157h-174zM667 1299v157h173v-157h-173z" />
+<glyph unicode="&#x152;" horiz-adv-x="1913" d="M108 576v304q0 264 148.5 430.5t387.5 166.5q75 0 152 -6t161 -15h862v-102h-798v-547h701v-102h-701v-604h803v-101h-867q-97 -10 -167.5 -15.5t-143.5 -5.5q-239 0 -388.5 166t-149.5 431zM228 576q0 -228 113.5 -361.5t304.5 -133.5q66 0 131.5 3.5t124.5 11.5v1264 q-60 7 -125 11t-133 4q-192 0 -304 -132t-112 -361v-306z" />
+<glyph unicode="&#x153;" horiz-adv-x="1892" d="M94 524v33q0 239 131 392t347 153q146 0 255.5 -72.5t168.5 -199.5q59 125 166 198.5t234 73.5q199 0 313 -126t114 -336v-102h-764v-29q0 -183 97 -306t255 -123q112 0 190.5 31t134.5 89l52 -82q-61 -64 -154.5 -101.5t-222.5 -37.5q-139 0 -248.5 71.5t-168.5 197.5 q-58 -126 -167 -197.5t-253 -71.5q-218 0 -349 152.5t-131 392.5zM214 524q0 -188 95 -316t265 -128q167 0 262 128t95 316v33q0 185 -95.5 314t-263.5 129t-263 -129t-95 -314v-33zM1068 644l2 -5h633v30q0 141 -82.5 236t-224.5 95q-133 0 -223 -101.5t-105 -254.5z" />
+<glyph unicode="&#x178;" horiz-adv-x="1244" d="M33 1456h139l448 -809l451 809h139l-531 -924v-532h-119v539zM303 1634v157h174v-157h-174zM773 1634v157h173v-157h-173z" />
+<glyph unicode="&#x2c6;" horiz-adv-x="880" d="M160 1252v21l227 221h98l230 -224v-18h-112l-167 168l-166 -168h-110z" />
+<glyph unicode="&#x2dc;" horiz-adv-x="892" d="M102 1281q0 86 54 144.5t137 58.5q65 0 147 -55t135 -55q46 0 79 36t33 91l80 -20q0 -88 -55 -146t-137 -58q-74 0 -151 55t-131 55q-47 0 -79 -35t-32 -89z" />
+<glyph unicode="&#x2000;" horiz-adv-x="948" />
+<glyph unicode="&#x2001;" horiz-adv-x="1896" />
+<glyph unicode="&#x2002;" horiz-adv-x="948" />
+<glyph unicode="&#x2003;" horiz-adv-x="1896" />
+<glyph unicode="&#x2004;" horiz-adv-x="632" />
+<glyph unicode="&#x2005;" horiz-adv-x="474" />
+<glyph unicode="&#x2006;" horiz-adv-x="316" />
+<glyph unicode="&#x2007;" horiz-adv-x="316" />
+<glyph unicode="&#x2008;" horiz-adv-x="237" />
+<glyph unicode="&#x2009;" horiz-adv-x="379" />
+<glyph unicode="&#x200a;" horiz-adv-x="105" />
+<glyph unicode="&#x2010;" horiz-adv-x="586" d="M49 570v101h479v-101h-479z" />
+<glyph unicode="&#x2011;" horiz-adv-x="586" d="M49 570v101h479v-101h-479z" />
+<glyph unicode="&#x2012;" horiz-adv-x="586" d="M49 570v101h479v-101h-479z" />
+<glyph unicode="&#x2013;" horiz-adv-x="1414" d="M165 686v102h1086v-102h-1086z" />
+<glyph unicode="&#x2014;" horiz-adv-x="1667" d="M136 686v102h1336v-102h-1336z" />
+<glyph unicode="&#x2018;" horiz-adv-x="364" d="M91 1074v174l111 312h71l-63 -312v-174h-119z" />
+<glyph unicode="&#x2019;" horiz-adv-x="364" d="M91 1074l63 304v182h119v-179l-111 -307h-71z" />
+<glyph unicode="&#x201a;" horiz-adv-x="353" d="M91 -211l52 266v204h119v-194l-100 -276h-71z" />
+<glyph unicode="&#x201c;" horiz-adv-x="612" d="M91 1074v174l111 312h71l-63 -312v-174h-119zM338 1074v174l111 312h71l-63 -312v-174h-119z" />
+<glyph unicode="&#x201d;" horiz-adv-x="617" d="M91 1074l63 304v182h119v-179l-111 -307h-71zM343 1074l63 304v182h119v-179l-111 -307h-71z" />
+<glyph unicode="&#x201e;" horiz-adv-x="593" d="M91 -202l51 295v181h120v-175l-100 -301h-71zM330 -202l52 299v177h120v-175l-100 -301h-72z" />
+<glyph unicode="&#x2022;" horiz-adv-x="662" d="M146 717v65q0 78 50.5 128.5t134.5 50.5q85 0 135.5 -50.5t50.5 -128.5v-65q0 -79 -50.5 -128t-134.5 -49q-85 0 -135.5 49t-50.5 128z" />
+<glyph unicode="&#x2026;" horiz-adv-x="1313" d="M188 0v164h137v-164h-137zM598 0v164h137v-164h-137zM990 0v164h137v-164h-137z" />
+<glyph unicode="&#x202f;" horiz-adv-x="379" />
+<glyph unicode="&#x2039;" horiz-adv-x="609" d="M108 541v19l295 379h105l-276 -389l276 -388h-105z" />
+<glyph unicode="&#x203a;" horiz-adv-x="609" d="M101 162l276 388l-276 389h105l295 -379v-19l-295 -379h-105z" />
+<glyph unicode="&#x205f;" horiz-adv-x="474" />
+<glyph unicode="&#x20ac;" horiz-adv-x="1073" d="M80 533v102h169v168h-169v102h169v37q0 244 135.5 389.5t355.5 145.5q57 0 112.5 -8t119.5 -23l-9 -106q-54 16 -110.5 25.5t-112.5 9.5q-172 0 -272 -116t-100 -315v-39h547v-102h-547v-168h547v-102h-547v-19q0 -198 101.5 -316t272.5 -118q57 0 113 8.5t108 25.5 l9 -104q-54 -15 -112.5 -23t-117.5 -8q-220 0 -356.5 145t-136.5 390v19h-169z" />
+<glyph unicode="&#x2122;" horiz-adv-x="1264" d="M96 1387v69h384v-69h-152v-468h-74v468h-158zM558 919v537h94l171 -423h6l174 423h88v-537h-73v383l-6 1l-160 -384h-51l-165 399l-6 -1v-398h-72z" />
+<glyph unicode="&#xe000;" horiz-adv-x="1080" d="M0 0v1080h1080v-1080h-1080z" />
+<glyph unicode="&#xfb02;" horiz-adv-x="1138" d="M66 984v98h179v158q0 163 81.5 252t228.5 89q33 0 67 -5t69 -14l-15 -99q-24 6 -49.5 9.5t-59.5 3.5q-98 0 -150 -62t-52 -174v-158h258v-98h-258v-984h-120v984h-179zM846 0v1560h119v-1560h-119z" />
+<glyph unicode="&#xfb03;" horiz-adv-x="1773" d="M66 984v98h179v158q0 163 81.5 252t228.5 89q33 0 67 -5t69 -14l-15 -99q-24 6 -49.5 9.5t-59.5 3.5q-98 0 -150 -62t-52 -174v-158h258v-98h-258v-984h-120v984h-179zM721 984v98h180v138q0 172 95 266.5t264 94.5q67 0 136 -15t140 -44l-20 -103q-61 25 -118 39 t-130 14q-122 0 -184.5 -65t-62.5 -187v-138h253v-98h-253v-984h-120v984h-180zM1481 0v1082h120v-1082h-120z" />
+<glyph unicode="&#xfb04;" horiz-adv-x="1811" d="M66 984v98h179v158q0 163 81.5 252t228.5 89q33 0 67 -5t69 -14l-15 -99q-24 6 -49.5 9.5t-59.5 3.5q-98 0 -150 -62t-52 -174v-158h258v-98h-258v-984h-120v984h-179zM739 984v98h179v158q0 163 81.5 252t228.5 89q33 0 67 -5t69 -14l-15 -99q-24 6 -49.5 9.5t-59.5 3.5 q-98 0 -150 -62t-52 -174v-158h258v-98h-258v-984h-120v984h-179zM1519 0v1560h119v-1560h-119z" />
+<hkern u1="&#x22;" u2="w" k="-11" />
+<hkern u1="&#x27;" u2="w" k="-11" />
+<hkern u1="&#x28;" u2="&#x178;" k="-22" />
+<hkern u1="&#x28;" u2="&#xdd;" k="-22" />
+<hkern u1="&#x28;" u2="Y" k="-22" />
+<hkern u1="&#x28;" u2="W" k="-18" />
+<hkern u1="&#x28;" u2="V" k="-20" />
+<hkern u1="&#x2f;" u2="&#x2f;" k="224" />
+<hkern u1="A" u2="w" k="33" />
+<hkern u1="A" u2="t" k="17" />
+<hkern u1="A" u2="&#x3f;" k="61" />
+<hkern u1="C" u2="&#x7d;" k="17" />
+<hkern u1="C" u2="]" k="12" />
+<hkern u1="C" u2="&#x29;" k="26" />
+<hkern u1="D" u2="&#xc6;" k="33" />
+<hkern u1="E" u2="w" k="22" />
+<hkern u1="E" u2="f" k="18" />
+<hkern u1="F" u2="&#x2026;" k="234" />
+<hkern u1="F" u2="&#x201e;" k="234" />
+<hkern u1="F" u2="&#x201a;" k="234" />
+<hkern u1="F" u2="&#x153;" k="21" />
+<hkern u1="F" u2="&#xff;" k="24" />
+<hkern u1="F" u2="&#xfd;" k="24" />
+<hkern u1="F" u2="&#xfc;" k="22" />
+<hkern u1="F" u2="&#xfb;" k="22" />
+<hkern u1="F" u2="&#xfa;" k="22" />
+<hkern u1="F" u2="&#xf9;" k="22" />
+<hkern u1="F" u2="&#xf6;" k="21" />
+<hkern u1="F" u2="&#xf5;" k="21" />
+<hkern u1="F" u2="&#xf4;" k="21" />
+<hkern u1="F" u2="&#xf3;" k="21" />
+<hkern u1="F" u2="&#xf2;" k="21" />
+<hkern u1="F" u2="&#xeb;" k="21" />
+<hkern u1="F" u2="&#xea;" k="21" />
+<hkern u1="F" u2="&#xe9;" k="21" />
+<hkern u1="F" u2="&#xe8;" k="21" />
+<hkern u1="F" u2="&#xe7;" k="21" />
+<hkern u1="F" u2="&#xe5;" k="34" />
+<hkern u1="F" u2="&#xe4;" k="34" />
+<hkern u1="F" u2="&#xe3;" k="34" />
+<hkern u1="F" u2="&#xe2;" k="34" />
+<hkern u1="F" u2="&#xe1;" k="34" />
+<hkern u1="F" u2="&#xe0;" k="34" />
+<hkern u1="F" u2="&#xc5;" k="59" />
+<hkern u1="F" u2="&#xc4;" k="59" />
+<hkern u1="F" u2="&#xc3;" k="59" />
+<hkern u1="F" u2="&#xc2;" k="59" />
+<hkern u1="F" u2="&#xc1;" k="59" />
+<hkern u1="F" u2="&#xc0;" k="59" />
+<hkern u1="F" u2="y" k="24" />
+<hkern u1="F" u2="v" k="24" />
+<hkern u1="F" u2="u" k="22" />
+<hkern u1="F" u2="r" k="26" />
+<hkern u1="F" u2="q" k="21" />
+<hkern u1="F" u2="o" k="21" />
+<hkern u1="F" u2="g" k="21" />
+<hkern u1="F" u2="e" k="21" />
+<hkern u1="F" u2="d" k="21" />
+<hkern u1="F" u2="c" k="21" />
+<hkern u1="F" u2="a" k="34" />
+<hkern u1="F" u2="T" k="-20" />
+<hkern u1="F" u2="J" k="264" />
+<hkern u1="F" u2="A" k="59" />
+<hkern u1="F" u2="&#x2e;" k="234" />
+<hkern u1="F" u2="&#x2c;" k="234" />
+<hkern u1="K" u2="w" k="63" />
+<hkern u1="L" u2="w" k="92" />
+<hkern u1="O" u2="&#xc6;" k="33" />
+<hkern u1="P" u2="&#xc6;" k="97" />
+<hkern u1="P" u2="t" k="-14" />
+<hkern u1="Q" u2="&#x178;" k="35" />
+<hkern u1="Q" u2="&#xdd;" k="35" />
+<hkern u1="Q" u2="Y" k="35" />
+<hkern u1="Q" u2="W" k="20" />
+<hkern u1="Q" u2="V" k="28" />
+<hkern u1="Q" u2="T" k="43" />
+<hkern u1="R" u2="&#x178;" k="48" />
+<hkern u1="R" u2="&#xdd;" k="48" />
+<hkern u1="R" u2="Y" k="48" />
+<hkern u1="R" u2="V" k="19" />
+<hkern u1="R" u2="T" k="80" />
+<hkern u1="T" u2="&#xf8;" k="95" />
+<hkern u1="T" u2="&#xe6;" k="114" />
+<hkern u1="T" u2="&#xc6;" k="179" />
+<hkern u1="T" u2="&#xbb;" k="216" />
+<hkern u1="T" u2="&#xab;" k="328" />
+<hkern u1="T" u2="w" k="57" />
+<hkern u1="T" u2="r" k="75" />
+<hkern u1="V" u2="&#x7d;" k="-19" />
+<hkern u1="V" u2="r" k="30" />
+<hkern u1="V" u2="]" k="-17" />
+<hkern u1="V" u2="&#x29;" k="-20" />
+<hkern u1="W" u2="&#x7d;" k="-14" />
+<hkern u1="W" u2="r" k="21" />
+<hkern u1="W" u2="]" k="-12" />
+<hkern u1="W" u2="&#x29;" k="-15" />
+<hkern u1="Y" u2="&#x2022;" k="45" />
+<hkern u1="Y" u2="&#xf8;" k="64" />
+<hkern u1="Y" u2="&#xe6;" k="63" />
+<hkern u1="Y" u2="&#xc6;" k="96" />
+<hkern u1="Y" u2="&#xbb;" k="51" />
+<hkern u1="Y" u2="&#xab;" k="82" />
+<hkern u1="Y" u2="&#x7d;" k="-19" />
+<hkern u1="Y" u2="t" k="22" />
+<hkern u1="Y" u2="r" k="40" />
+<hkern u1="Y" u2="f" k="22" />
+<hkern u1="Y" u2="]" k="-18" />
+<hkern u1="Y" u2="&#x2a;" k="49" />
+<hkern u1="Y" u2="&#x29;" k="-20" />
+<hkern u1="Y" u2="&#x26;" k="30" />
+<hkern u1="Z" u2="w" k="27" />
+<hkern u1="[" u2="&#xdc;" k="18" />
+<hkern u1="[" u2="&#xdb;" k="18" />
+<hkern u1="[" u2="&#xda;" k="18" />
+<hkern u1="[" u2="&#xd9;" k="18" />
+<hkern u1="[" u2="U" k="18" />
+<hkern u1="[" u2="J" k="18" />
+<hkern u1="f" u2="&#x201d;" k="-16" />
+<hkern u1="f" u2="&#x201c;" k="-16" />
+<hkern u1="f" u2="&#x2019;" k="-16" />
+<hkern u1="f" u2="&#x2018;" k="-16" />
+<hkern u1="f" u2="&#x153;" k="24" />
+<hkern u1="f" u2="&#xeb;" k="24" />
+<hkern u1="f" u2="&#xea;" k="24" />
+<hkern u1="f" u2="&#xe9;" k="24" />
+<hkern u1="f" u2="&#xe8;" k="24" />
+<hkern u1="f" u2="&#xe7;" k="24" />
+<hkern u1="f" u2="&#x7d;" k="-19" />
+<hkern u1="f" u2="q" k="24" />
+<hkern u1="f" u2="g" k="24" />
+<hkern u1="f" u2="e" k="24" />
+<hkern u1="f" u2="d" k="24" />
+<hkern u1="f" u2="c" k="24" />
+<hkern u1="f" u2="]" k="-18" />
+<hkern u1="f" u2="&#x29;" k="-20" />
+<hkern u1="f" u2="&#x27;" k="-16" />
+<hkern u1="f" u2="&#x22;" k="-16" />
+<hkern u1="k" u2="&#x153;" k="20" />
+<hkern u1="k" u2="&#xeb;" k="20" />
+<hkern u1="k" u2="&#xea;" k="20" />
+<hkern u1="k" u2="&#xe9;" k="20" />
+<hkern u1="k" u2="&#xe8;" k="20" />
+<hkern u1="k" u2="&#xe7;" k="20" />
+<hkern u1="k" u2="q" k="20" />
+<hkern u1="k" u2="g" k="20" />
+<hkern u1="k" u2="e" k="20" />
+<hkern u1="k" u2="d" k="20" />
+<hkern u1="k" u2="c" k="20" />
+<hkern u1="r" u2="w" k="-17" />
+<hkern u1="r" u2="t" k="-32" />
+<hkern u1="r" u2="f" k="-15" />
+<hkern u1="t" u2="&#xf6;" k="20" />
+<hkern u1="t" u2="&#xf5;" k="20" />
+<hkern u1="t" u2="&#xf4;" k="20" />
+<hkern u1="t" u2="&#xf3;" k="20" />
+<hkern u1="t" u2="&#xf2;" k="20" />
+<hkern u1="t" u2="o" k="20" />
+<hkern u1="v" u2="f" k="-13" />
+<hkern u1="w" u2="&#x2026;" k="124" />
+<hkern u1="w" u2="&#x201e;" k="124" />
+<hkern u1="w" u2="&#x201a;" k="124" />
+<hkern u1="w" u2="&#x2e;" k="124" />
+<hkern u1="w" u2="&#x2c;" k="124" />
+<hkern u1="y" u2="f" k="-13" />
+<hkern u1="&#x7b;" u2="&#xdc;" k="20" />
+<hkern u1="&#x7b;" u2="&#xdb;" k="20" />
+<hkern u1="&#x7b;" u2="&#xda;" k="20" />
+<hkern u1="&#x7b;" u2="&#xd9;" k="20" />
+<hkern u1="&#x7b;" u2="U" k="20" />
+<hkern u1="&#x7b;" u2="J" k="20" />
+<hkern u1="&#xc0;" u2="w" k="33" />
+<hkern u1="&#xc0;" u2="t" k="17" />
+<hkern u1="&#xc0;" u2="&#x3f;" k="61" />
+<hkern u1="&#xc1;" u2="w" k="33" />
+<hkern u1="&#xc1;" u2="t" k="17" />
+<hkern u1="&#xc1;" u2="&#x3f;" k="61" />
+<hkern u1="&#xc2;" u2="w" k="33" />
+<hkern u1="&#xc2;" u2="t" k="17" />
+<hkern u1="&#xc2;" u2="&#x3f;" k="61" />
+<hkern u1="&#xc3;" u2="w" k="33" />
+<hkern u1="&#xc3;" u2="t" k="17" />
+<hkern u1="&#xc3;" u2="&#x3f;" k="61" />
+<hkern u1="&#xc4;" u2="w" k="33" />
+<hkern u1="&#xc4;" u2="t" k="17" />
+<hkern u1="&#xc4;" u2="&#x3f;" k="61" />
+<hkern u1="&#xc5;" u2="w" k="33" />
+<hkern u1="&#xc5;" u2="t" k="17" />
+<hkern u1="&#xc5;" u2="&#x3f;" k="61" />
+<hkern u1="&#xc7;" u2="&#x7d;" k="17" />
+<hkern u1="&#xc7;" u2="]" k="12" />
+<hkern u1="&#xc7;" u2="&#x29;" k="26" />
+<hkern u1="&#xc8;" u2="w" k="22" />
+<hkern u1="&#xc8;" u2="f" k="18" />
+<hkern u1="&#xc9;" u2="w" k="22" />
+<hkern u1="&#xc9;" u2="f" k="18" />
+<hkern u1="&#xca;" u2="w" k="22" />
+<hkern u1="&#xca;" u2="f" k="18" />
+<hkern u1="&#xcb;" u2="w" k="22" />
+<hkern u1="&#xcb;" u2="f" k="18" />
+<hkern u1="&#xd0;" u2="&#xc6;" k="33" />
+<hkern u1="&#xd2;" u2="&#xc6;" k="33" />
+<hkern u1="&#xd3;" u2="&#xc6;" k="33" />
+<hkern u1="&#xd4;" u2="&#xc6;" k="33" />
+<hkern u1="&#xd5;" u2="&#xc6;" k="33" />
+<hkern u1="&#xd6;" u2="&#xc6;" k="33" />
+<hkern u1="&#xdd;" u2="&#x2022;" k="45" />
+<hkern u1="&#xdd;" u2="&#xf8;" k="64" />
+<hkern u1="&#xdd;" u2="&#xe6;" k="63" />
+<hkern u1="&#xdd;" u2="&#xc6;" k="96" />
+<hkern u1="&#xdd;" u2="&#xbb;" k="51" />
+<hkern u1="&#xdd;" u2="&#xab;" k="82" />
+<hkern u1="&#xdd;" u2="&#x7d;" k="-19" />
+<hkern u1="&#xdd;" u2="t" k="22" />
+<hkern u1="&#xdd;" u2="r" k="40" />
+<hkern u1="&#xdd;" u2="f" k="22" />
+<hkern u1="&#xdd;" u2="]" k="-18" />
+<hkern u1="&#xdd;" u2="&#x2a;" k="49" />
+<hkern u1="&#xdd;" u2="&#x29;" k="-20" />
+<hkern u1="&#xdd;" u2="&#x26;" k="30" />
+<hkern u1="&#xfd;" u2="f" k="-13" />
+<hkern u1="&#xff;" u2="f" k="-13" />
+<hkern u1="&#x178;" u2="&#x2022;" k="45" />
+<hkern u1="&#x178;" u2="&#xf8;" k="64" />
+<hkern u1="&#x178;" u2="&#xe6;" k="63" />
+<hkern u1="&#x178;" u2="&#xc6;" k="96" />
+<hkern u1="&#x178;" u2="&#xbb;" k="51" />
+<hkern u1="&#x178;" u2="&#xab;" k="82" />
+<hkern u1="&#x178;" u2="&#x7d;" k="-19" />
+<hkern u1="&#x178;" u2="t" k="22" />
+<hkern u1="&#x178;" u2="r" k="40" />
+<hkern u1="&#x178;" u2="f" k="22" />
+<hkern u1="&#x178;" u2="]" k="-18" />
+<hkern u1="&#x178;" u2="&#x2a;" k="49" />
+<hkern u1="&#x178;" u2="&#x29;" k="-20" />
+<hkern u1="&#x178;" u2="&#x26;" k="30" />
+<hkern u1="&#x2018;" u2="w" k="-11" />
+<hkern u1="&#x2019;" u2="w" k="-11" />
+<hkern u1="&#x201c;" u2="w" k="-11" />
+<hkern u1="&#x201d;" u2="w" k="-11" />
+<hkern g1="comma,period,quotesinglbase,quotedblbase,ellipsis" 	g2="quotedbl,quotesingle,quoteleft,quoteright,quotedblleft,quotedblright" 	k="170" />
+<hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" 	g2="quotedbl,quotesingle,quoteleft,quoteright,quotedblleft,quotedblright" 	k="120" />
+<hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" 	g2="o,ograve,oacute,ocircumflex,otilde,odieresis" 	k="12" />
+<hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" 	g2="C,G,O,Q,Ccedilla,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" 	k="11" />
+<hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" 	g2="T" 	k="129" />
+<hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" 	g2="U,Ugrave,Uacute,Ucircumflex,Udieresis" 	k="17" />
+<hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" 	g2="V" 	k="87" />
+<hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" 	g2="W" 	k="69" />
+<hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" 	g2="Y,Yacute,Ydieresis" 	k="94" />
+<hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" 	g2="u,ugrave,uacute,ucircumflex,udieresis" 	k="11" />
+<hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" 	g2="v,y,yacute,ydieresis" 	k="50" />
+<hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" 	g2="z" 	k="-12" />
+<hkern g1="B" 	g2="T" 	k="27" />
+<hkern g1="B" 	g2="V" 	k="24" />
+<hkern g1="B" 	g2="Y,Yacute,Ydieresis" 	k="55" />
+<hkern g1="C,Ccedilla" 	g2="T" 	k="29" />
+<hkern g1="D,O,Eth,Ograve,Oacute,Ocircumflex,Otilde,Odieresis" 	g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" 	k="21" />
+<hkern g1="D,O,Eth,Ograve,Oacute,Ocircumflex,Otilde,Odieresis" 	g2="T" 	k="27" />
+<hkern g1="D,O,Eth,Ograve,Oacute,Ocircumflex,Otilde,Odieresis" 	g2="V" 	k="22" />
+<hkern g1="D,O,Eth,Ograve,Oacute,Ocircumflex,Otilde,Odieresis" 	g2="Y,Yacute,Ydieresis" 	k="43" />
+<hkern g1="D,O,Eth,Ograve,Oacute,Ocircumflex,Otilde,Odieresis" 	g2="comma,period,quotesinglbase,quotedblbase,ellipsis" 	k="102" />
+<hkern g1="D,O,Eth,Ograve,Oacute,Ocircumflex,Otilde,Odieresis" 	g2="X" 	k="22" />
+<hkern g1="D,O,Eth,Ograve,Oacute,Ocircumflex,Otilde,Odieresis" 	g2="Z" 	k="23" />
+<hkern g1="E,Egrave,Eacute,Ecircumflex,Edieresis" 	g2="c,d,e,g,q,ccedilla,egrave,eacute,ecircumflex,edieresis,oe" 	k="19" />
+<hkern g1="E,Egrave,Eacute,Ecircumflex,Edieresis" 	g2="o,ograve,oacute,ocircumflex,otilde,odieresis" 	k="19" />
+<hkern g1="E,Egrave,Eacute,Ecircumflex,Edieresis" 	g2="T" 	k="-20" />
+<hkern g1="E,Egrave,Eacute,Ecircumflex,Edieresis" 	g2="u,ugrave,uacute,ucircumflex,udieresis" 	k="17" />
+<hkern g1="E,Egrave,Eacute,Ecircumflex,Edieresis" 	g2="v,y,yacute,ydieresis" 	k="26" />
+<hkern g1="H,I,M,N,Igrave,Iacute,Icircumflex,Idieresis,Ntilde" 	g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" 	k="-18" />
+<hkern g1="H,I,M,N,Igrave,Iacute,Icircumflex,Idieresis,Ntilde" 	g2="T" 	k="29" />
+<hkern g1="H,I,M,N,Igrave,Iacute,Icircumflex,Idieresis,Ntilde" 	g2="Y,Yacute,Ydieresis" 	k="28" />
+<hkern g1="H,I,M,N,Igrave,Iacute,Icircumflex,Idieresis,Ntilde" 	g2="X" 	k="-17" />
+<hkern g1="J,U,Ugrave,Uacute,Ucircumflex,Udieresis" 	g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" 	k="22" />
+<hkern g1="K" 	g2="c,d,e,g,q,ccedilla,egrave,eacute,ecircumflex,edieresis,oe" 	k="26" />
+<hkern g1="K" 	g2="m,n,p,ntilde" 	k="23" />
+<hkern g1="K" 	g2="o,ograve,oacute,ocircumflex,otilde,odieresis" 	k="27" />
+<hkern g1="K" 	g2="C,G,O,Q,Ccedilla,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" 	k="31" />
+<hkern g1="K" 	g2="u,ugrave,uacute,ucircumflex,udieresis" 	k="23" />
+<hkern g1="K" 	g2="v,y,yacute,ydieresis" 	k="40" />
+<hkern g1="K" 	g2="hyphen,uni00AD,endash,emdash" 	k="64" />
+<hkern g1="L" 	g2="quotedbl,quotesingle,quoteleft,quoteright,quotedblleft,quotedblright" 	k="138" />
+<hkern g1="L" 	g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" 	k="-19" />
+<hkern g1="L" 	g2="C,G,O,Q,Ccedilla,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" 	k="65" />
+<hkern g1="L" 	g2="T" 	k="275" />
+<hkern g1="L" 	g2="U,Ugrave,Uacute,Ucircumflex,Udieresis" 	k="54" />
+<hkern g1="L" 	g2="V" 	k="175" />
+<hkern g1="L" 	g2="W" 	k="143" />
+<hkern g1="L" 	g2="Y,Yacute,Ydieresis" 	k="239" />
+<hkern g1="L" 	g2="u,ugrave,uacute,ucircumflex,udieresis" 	k="44" />
+<hkern g1="L" 	g2="v,y,yacute,ydieresis" 	k="133" />
+<hkern g1="P" 	g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" 	k="138" />
+<hkern g1="P" 	g2="a,agrave,aacute,acircumflex,atilde,adieresis,aring" 	k="11" />
+<hkern g1="P" 	g2="c,d,e,g,q,ccedilla,egrave,eacute,ecircumflex,edieresis,oe" 	k="13" />
+<hkern g1="P" 	g2="o,ograve,oacute,ocircumflex,otilde,odieresis" 	k="13" />
+<hkern g1="P" 	g2="v,y,yacute,ydieresis" 	k="-15" />
+<hkern g1="P" 	g2="comma,period,quotesinglbase,quotedblbase,ellipsis" 	k="324" />
+<hkern g1="P" 	g2="X" 	k="31" />
+<hkern g1="P" 	g2="Z" 	k="26" />
+<hkern g1="P" 	g2="J" 	k="200" />
+<hkern g1="T" 	g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" 	k="79" />
+<hkern g1="T" 	g2="a,agrave,aacute,acircumflex,atilde,adieresis,aring" 	k="113" />
+<hkern g1="T" 	g2="c,d,e,g,q,ccedilla,egrave,eacute,ecircumflex,edieresis,oe" 	k="99" />
+<hkern g1="T" 	g2="m,n,p,ntilde" 	k="109" />
+<hkern g1="T" 	g2="o,ograve,oacute,ocircumflex,otilde,odieresis" 	k="99" />
+<hkern g1="T" 	g2="s" 	k="116" />
+<hkern g1="T" 	g2="C,G,O,Q,Ccedilla,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" 	k="28" />
+<hkern g1="T" 	g2="T" 	k="-16" />
+<hkern g1="T" 	g2="V" 	k="-16" />
+<hkern g1="T" 	g2="W" 	k="-15" />
+<hkern g1="T" 	g2="Y,Yacute,Ydieresis" 	k="-16" />
+<hkern g1="T" 	g2="u,ugrave,uacute,ucircumflex,udieresis" 	k="95" />
+<hkern g1="T" 	g2="v,y,yacute,ydieresis" 	k="72" />
+<hkern g1="T" 	g2="z" 	k="60" />
+<hkern g1="T" 	g2="comma,period,quotesinglbase,quotedblbase,ellipsis" 	k="218" />
+<hkern g1="T" 	g2="hyphen,uni00AD,endash,emdash" 	k="232" />
+<hkern g1="T" 	g2="J" 	k="240" />
+<hkern g1="T" 	g2="S" 	k="16" />
+<hkern g1="T" 	g2="x" 	k="77" />
+<hkern g1="V" 	g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" 	k="75" />
+<hkern g1="V" 	g2="a,agrave,aacute,acircumflex,atilde,adieresis,aring" 	k="46" />
+<hkern g1="V" 	g2="c,d,e,g,q,ccedilla,egrave,eacute,ecircumflex,edieresis,oe" 	k="44" />
+<hkern g1="V" 	g2="o,ograve,oacute,ocircumflex,otilde,odieresis" 	k="46" />
+<hkern g1="V" 	g2="C,G,O,Q,Ccedilla,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" 	k="13" />
+<hkern g1="V" 	g2="u,ugrave,uacute,ucircumflex,udieresis" 	k="28" />
+<hkern g1="V" 	g2="v,y,yacute,ydieresis" 	k="11" />
+<hkern g1="V" 	g2="comma,period,quotesinglbase,quotedblbase,ellipsis" 	k="225" />
+<hkern g1="V" 	g2="hyphen,uni00AD,endash,emdash" 	k="37" />
+<hkern g1="W" 	g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" 	k="43" />
+<hkern g1="W" 	g2="a,agrave,aacute,acircumflex,atilde,adieresis,aring" 	k="33" />
+<hkern g1="W" 	g2="c,d,e,g,q,ccedilla,egrave,eacute,ecircumflex,edieresis,oe" 	k="31" />
+<hkern g1="W" 	g2="o,ograve,oacute,ocircumflex,otilde,odieresis" 	k="31" />
+<hkern g1="W" 	g2="T" 	k="-14" />
+<hkern g1="W" 	g2="u,ugrave,uacute,ucircumflex,udieresis" 	k="19" />
+<hkern g1="W" 	g2="comma,period,quotesinglbase,quotedblbase,ellipsis" 	k="123" />
+<hkern g1="W" 	g2="hyphen,uni00AD,endash,emdash" 	k="60" />
+<hkern g1="X" 	g2="c,d,e,g,q,ccedilla,egrave,eacute,ecircumflex,edieresis,oe" 	k="26" />
+<hkern g1="X" 	g2="o,ograve,oacute,ocircumflex,otilde,odieresis" 	k="21" />
+<hkern g1="X" 	g2="C,G,O,Q,Ccedilla,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" 	k="25" />
+<hkern g1="X" 	g2="V" 	k="-14" />
+<hkern g1="X" 	g2="u,ugrave,uacute,ucircumflex,udieresis" 	k="21" />
+<hkern g1="X" 	g2="v,y,yacute,ydieresis" 	k="31" />
+<hkern g1="X" 	g2="hyphen,uni00AD,endash,emdash" 	k="46" />
+<hkern g1="Y,Yacute,Ydieresis" 	g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" 	k="94" />
+<hkern g1="Y,Yacute,Ydieresis" 	g2="a,agrave,aacute,acircumflex,atilde,adieresis,aring" 	k="73" />
+<hkern g1="Y,Yacute,Ydieresis" 	g2="c,d,e,g,q,ccedilla,egrave,eacute,ecircumflex,edieresis,oe" 	k="65" />
+<hkern g1="Y,Yacute,Ydieresis" 	g2="m,n,p,ntilde" 	k="40" />
+<hkern g1="Y,Yacute,Ydieresis" 	g2="o,ograve,oacute,ocircumflex,otilde,odieresis" 	k="65" />
+<hkern g1="Y,Yacute,Ydieresis" 	g2="s" 	k="58" />
+<hkern g1="Y,Yacute,Ydieresis" 	g2="C,G,O,Q,Ccedilla,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" 	k="29" />
+<hkern g1="Y,Yacute,Ydieresis" 	g2="T" 	k="-17" />
+<hkern g1="Y,Yacute,Ydieresis" 	g2="U,Ugrave,Uacute,Ucircumflex,Udieresis" 	k="96" />
+<hkern g1="Y,Yacute,Ydieresis" 	g2="V" 	k="-18" />
+<hkern g1="Y,Yacute,Ydieresis" 	g2="W" 	k="-17" />
+<hkern g1="Y,Yacute,Ydieresis" 	g2="Y,Yacute,Ydieresis" 	k="-18" />
+<hkern g1="Y,Yacute,Ydieresis" 	g2="u,ugrave,uacute,ucircumflex,udieresis" 	k="39" />
+<hkern g1="Y,Yacute,Ydieresis" 	g2="v,y,yacute,ydieresis" 	k="20" />
+<hkern g1="Y,Yacute,Ydieresis" 	g2="z" 	k="30" />
+<hkern g1="Y,Yacute,Ydieresis" 	g2="comma,period,quotesinglbase,quotedblbase,ellipsis" 	k="211" />
+<hkern g1="Y,Yacute,Ydieresis" 	g2="X" 	k="-13" />
+<hkern g1="Y,Yacute,Ydieresis" 	g2="hyphen,uni00AD,endash,emdash" 	k="52" />
+<hkern g1="Y,Yacute,Ydieresis" 	g2="J" 	k="96" />
+<hkern g1="Y,Yacute,Ydieresis" 	g2="S" 	k="16" />
+<hkern g1="Y,Yacute,Ydieresis" 	g2="x" 	k="23" />
+<hkern g1="Z" 	g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" 	k="-13" />
+<hkern g1="Z" 	g2="c,d,e,g,q,ccedilla,egrave,eacute,ecircumflex,edieresis,oe" 	k="21" />
+<hkern g1="Z" 	g2="o,ograve,oacute,ocircumflex,otilde,odieresis" 	k="21" />
+<hkern g1="Z" 	g2="C,G,O,Q,Ccedilla,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" 	k="26" />
+<hkern g1="Z" 	g2="u,ugrave,uacute,ucircumflex,udieresis" 	k="19" />
+<hkern g1="Z" 	g2="v,y,yacute,ydieresis" 	k="27" />
+<hkern g1="a,agrave,aacute,acircumflex,atilde,adieresis,aring" 	g2="quotedbl,quotesingle,quoteleft,quoteright,quotedblleft,quotedblright" 	k="67" />
+<hkern g1="a,agrave,aacute,acircumflex,atilde,adieresis,aring" 	g2="v,y,yacute,ydieresis" 	k="15" />
+<hkern g1="b,p,thorn" 	g2="quotedbl,quotesingle,quoteleft,quoteright,quotedblleft,quotedblright" 	k="29" />
+<hkern g1="b,p,thorn" 	g2="v,y,yacute,ydieresis" 	k="11" />
+<hkern g1="b,p,thorn" 	g2="z" 	k="15" />
+<hkern g1="b,p,thorn" 	g2="x" 	k="15" />
+<hkern g1="c,ccedilla" 	g2="quotedbl,quotesingle,quoteleft,quoteright,quotedblleft,quotedblright" 	k="11" />
+<hkern g1="e,egrave,eacute,ecircumflex,edieresis" 	g2="quotedbl,quotesingle,quoteleft,quoteright,quotedblleft,quotedblright" 	k="14" />
+<hkern g1="e,egrave,eacute,ecircumflex,edieresis" 	g2="v,y,yacute,ydieresis" 	k="13" />
+<hkern g1="h,m,n,ntilde" 	g2="quotedbl,quotesingle,quoteleft,quoteright,quotedblleft,quotedblright" 	k="16" />
+<hkern g1="o,ograve,oacute,ocircumflex,otilde,odieresis" 	g2="quotedbl,quotesingle,quoteleft,quoteright,quotedblleft,quotedblright" 	k="20" />
+<hkern g1="o,ograve,oacute,ocircumflex,otilde,odieresis" 	g2="v,y,yacute,ydieresis" 	k="15" />
+<hkern g1="o,ograve,oacute,ocircumflex,otilde,odieresis" 	g2="z" 	k="16" />
+<hkern g1="o,ograve,oacute,ocircumflex,otilde,odieresis" 	g2="x" 	k="21" />
+<hkern g1="r" 	g2="quotedbl,quotesingle,quoteleft,quoteright,quotedblleft,quotedblright" 	k="-16" />
+<hkern g1="r" 	g2="c,d,e,g,q,ccedilla,egrave,eacute,ecircumflex,edieresis,oe" 	k="19" />
+<hkern g1="r" 	g2="o,ograve,oacute,ocircumflex,otilde,odieresis" 	k="20" />
+<hkern g1="r" 	g2="v,y,yacute,ydieresis" 	k="-18" />
+<hkern g1="r" 	g2="comma,period,quotesinglbase,quotedblbase,ellipsis" 	k="123" />
+<hkern g1="v,y,yacute,ydieresis" 	g2="quotedbl,quotesingle,quoteleft,quoteright,quotedblleft,quotedblright" 	k="-15" />
+<hkern g1="v,y,yacute,ydieresis" 	g2="a,agrave,aacute,acircumflex,atilde,adieresis,aring" 	k="15" />
+<hkern g1="v,y,yacute,ydieresis" 	g2="c,d,e,g,q,ccedilla,egrave,eacute,ecircumflex,edieresis,oe" 	k="13" />
+<hkern g1="v,y,yacute,ydieresis" 	g2="o,ograve,oacute,ocircumflex,otilde,odieresis" 	k="15" />
+<hkern g1="v,y,yacute,ydieresis" 	g2="comma,period,quotesinglbase,quotedblbase,ellipsis" 	k="107" />
+<hkern g1="x" 	g2="c,d,e,g,q,ccedilla,egrave,eacute,ecircumflex,edieresis,oe" 	k="20" />
+<hkern g1="x" 	g2="o,ograve,oacute,ocircumflex,otilde,odieresis" 	k="20" />
+<hkern g1="z" 	g2="c,d,e,g,q,ccedilla,egrave,eacute,ecircumflex,edieresis,oe" 	k="16" />
+<hkern g1="z" 	g2="o,ograve,oacute,ocircumflex,otilde,odieresis" 	k="16" />
+</font>
+</defs></svg> 
\ No newline at end of file
diff --git a/src/web/wwwroot/fonts/roboto/Roboto-Light-webfont.ttf b/src/web/wwwroot/fonts/roboto/Roboto-Light-webfont.ttf
new file mode 100755
index 0000000000000000000000000000000000000000..3b2fea0ace1aa884365c0999b71967bd90632dbe
Binary files /dev/null and b/src/web/wwwroot/fonts/roboto/Roboto-Light-webfont.ttf differ
diff --git a/src/web/wwwroot/fonts/roboto/Roboto-Light-webfont.woff b/src/web/wwwroot/fonts/roboto/Roboto-Light-webfont.woff
new file mode 100755
index 0000000000000000000000000000000000000000..cc534a3815429dc9ce2a0c49854eba221fe9fbd1
Binary files /dev/null and b/src/web/wwwroot/fonts/roboto/Roboto-Light-webfont.woff differ
diff --git a/src/web/wwwroot/fonts/roboto/Roboto-Medium-webfont.eot b/src/web/wwwroot/fonts/roboto/Roboto-Medium-webfont.eot
new file mode 100755
index 0000000000000000000000000000000000000000..f9ad99566d1e19ef4cd8629304dd20243eeae278
Binary files /dev/null and b/src/web/wwwroot/fonts/roboto/Roboto-Medium-webfont.eot differ
diff --git a/src/web/wwwroot/fonts/roboto/Roboto-Medium-webfont.svg b/src/web/wwwroot/fonts/roboto/Roboto-Medium-webfont.svg
new file mode 100755
index 0000000000000000000000000000000000000000..4ce289dfa468531be6a043a18442052813f4b4fa
--- /dev/null
+++ b/src/web/wwwroot/fonts/roboto/Roboto-Medium-webfont.svg
@@ -0,0 +1,593 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
+<svg xmlns="http://www.w3.org/2000/svg">
+<metadata></metadata>
+<defs>
+<font id="robotomedium" horiz-adv-x="1160" >
+<font-face units-per-em="2048" ascent="1638" descent="-410" />
+<missing-glyph horiz-adv-x="510" />
+<glyph unicode="&#xfb01;" horiz-adv-x="1192" d="M24 902v180h165v92q0 195 115 301t322 106q72 0 143 -15.5t163 -44.5l-37 -201q-62 21 -122 34.5t-130 13.5q-109 0 -160 -48.5t-51 -145.5v-92h213v-180h-213v-902h-243v902h-165zM804 0v1082h243v-1082h-243z" />
+<glyph horiz-adv-x="2048" />
+<glyph horiz-adv-x="2048" />
+<glyph unicode="&#xd;" horiz-adv-x="510" />
+<glyph unicode=" "  horiz-adv-x="510" />
+<glyph unicode="&#x09;" horiz-adv-x="510" />
+<glyph unicode="&#xa0;" horiz-adv-x="510" />
+<glyph unicode="!" horiz-adv-x="549" d="M154 0v234h243v-234h-243zM154 491v965h243v-965h-243z" />
+<glyph unicode="&#x22;" horiz-adv-x="664" d="M66 1038v524h214v-275l-102 -249h-112zM384 1038v524h214v-275l-102 -249h-112z" />
+<glyph unicode="#" horiz-adv-x="1250" d="M60 410v158h261l58 313h-243v159h273l78 416h167l-78 -416h224l78 416h168l-78 -416h208v-159h-238l-58 -313h221v-158h-251l-76 -410h-167l76 410h-225l-76 -410h-167l76 410h-231zM488 568h225l58 313h-225z" />
+<glyph unicode="$" horiz-adv-x="1164" d="M105 438l2 5h236q0 -142 69.5 -203t173.5 -61q111 0 172 54t61 147q0 85 -55.5 141t-185.5 102q-211 72 -316.5 173.5t-105.5 276.5q0 166 101 273t274 127v218h160v-220q171 -26 267.5 -146.5t96.5 -319.5h-242q0 125 -56 198t-154 73q-102 0 -153 -54.5t-51 -146.5 q0 -86 53.5 -140t192.5 -103q211 -76 314 -176t103 -274q0 -173 -105 -276t-287 -122v-195h-159v194q-179 19 -294.5 129.5t-111.5 325.5z" />
+<glyph unicode="%" horiz-adv-x="1504" d="M100 1099v77q0 128 82.5 214.5t225.5 86.5q144 0 226.5 -86t82.5 -215v-77q0 -128 -82.5 -213.5t-224.5 -85.5q-144 0 -227 85.5t-83 213.5zM269 1099q0 -64 36.5 -108.5t104.5 -44.5q66 0 101.5 44t35.5 109v77q0 65 -36.5 110t-102.5 45q-67 0 -103 -45t-36 -110v-77z M335 181l711 1138l125 -72l-711 -1138zM800 279v78q0 127 83 213.5t225 86.5q144 0 226.5 -86t82.5 -214v-78q0 -129 -82.5 -214.5t-224.5 -85.5q-144 0 -227 86t-83 214zM969 279q0 -64 37.5 -109t103.5 -45q70 0 104 43.5t34 110.5v78q0 64 -36.5 109t-103.5 45t-103 -45 t-36 -109v-78z" />
+<glyph unicode="&#x26;" horiz-adv-x="1309" d="M62 393q0 120 68 208.5t204 178.5q-73 95 -109 172t-36 157q0 171 103 269.5t278 98.5q159 0 258.5 -95.5t99.5 -230.5q0 -98 -51.5 -174.5t-145.5 -145.5l-100 -72l305 -362q40 63 62.5 138t22.5 159h197q0 -137 -36.5 -252t-110.5 -205l196 -232l-2 -5h-274l-81 95 q-82 -57 -175.5 -86.5t-197.5 -29.5q-217 0 -346 115t-129 299zM305 401q0 -100 63 -164t176 -64q62 0 123 18t116 53l-328 387l-30 -22q-72 -56 -96 -108t-24 -100zM417 1112q0 -48 24.5 -99t72.5 -113l114 76q57 37 76.5 77.5t19.5 89.5q0 54 -42.5 96.5t-111.5 42.5 q-74 0 -113.5 -49t-39.5 -121z" />
+<glyph unicode="'" horiz-adv-x="346" d="M66 1028v532h214v-249l-102 -283h-112z" />
+<glyph unicode="(" horiz-adv-x="695" d="M128 576v16q0 394 156.5 670.5t338.5 361.5l6 -1l45 -134q-134 -102 -229.5 -327t-95.5 -568v-20q0 -343 95 -568t230 -334l-45 -128h-6q-183 86 -339 362t-156 670z" />
+<glyph unicode=")" horiz-adv-x="700" d="M17 -328q133 102 229 330t96 572v20q0 340 -98.5 568.5t-226.5 332.5l46 129h6q182 -84 342 -364t160 -668v-16q0 -389 -159.5 -668t-342.5 -364h-6z" />
+<glyph unicode="*" horiz-adv-x="895" d="M27 1061l53 169l296 -117l-13 343h174l-15 -350l291 115l53 -171l-303 -88l195 -266l-141 -105l-177 287l-174 -279l-143 102l202 271z" />
+<glyph unicode="+" horiz-adv-x="1141" d="M68 579v222h382v405h236v-405h380v-222h-380v-433h-236v433h-382z" />
+<glyph unicode="," horiz-adv-x="462" d="M54 -281l70 321v198h239v-207l-155 -312h-154z" />
+<glyph unicode="-" horiz-adv-x="672" d="M71 521v196h525v-196h-525z" />
+<glyph unicode="." horiz-adv-x="572" d="M153 0v233h242v-233h-242z" />
+<glyph unicode="/" horiz-adv-x="839" d="M2 -125l573 1581h223l-573 -1581h-223z" />
+<glyph unicode="0" horiz-adv-x="1164" d="M104 561v333q0 283 128 433t349 150q220 0 349 -150t129 -433v-333q0 -284 -128 -433t-348 -149q-221 0 -350 149t-129 433zM347 526q0 -180 60.5 -266.5t175.5 -86.5t174 86t59 267v405q0 179 -60 265t-175 86t-174.5 -86t-59.5 -265v-405z" />
+<glyph unicode="1" horiz-adv-x="1164" d="M179 1225v179l539 52v-1456h-243v1225h-296z" />
+<glyph unicode="2" horiz-adv-x="1164" d="M87 1018q-5 194 127 326.5t362 132.5q210 0 332 -116t122 -303q0 -125 -70.5 -239t-218.5 -277l-324 -342l3 -6h656v-194h-967v167l474 517q116 127 160 208.5t44 159.5q0 98 -57 164t-154 66q-128 0 -190 -72t-62 -198h-235z" />
+<glyph unicode="3" horiz-adv-x="1164" d="M86 384l2 6h234q0 -97 65 -157t173 -60q113 0 178 61t65 173q0 123 -59.5 181.5t-184.5 58.5h-169v191h169q118 0 170 58.5t52 165.5q0 105 -56 162.5t-165 57.5q-99 0 -161.5 -56.5t-62.5 -148.5h-234l-2 6q-6 167 124.5 280.5t332.5 113.5q213 0 340 -108t127 -307 q0 -93 -57 -180t-162 -135q124 -44 182.5 -134t58.5 -205q0 -200 -137.5 -314.5t-351.5 -114.5q-202 0 -339.5 107.5t-131.5 297.5z" />
+<glyph unicode="4" horiz-adv-x="1164" d="M56 472l623 984h250v-937h184v-196h-184v-323h-242v323h-625zM296 519h391v591l-6 2l-20 -43z" />
+<glyph unicode="5" horiz-adv-x="1164" d="M135 384l2 5l227 8q0 -106 62 -165t161 -59q113 0 172.5 79.5t59.5 210.5q0 132 -61 214.5t-174 82.5q-100 0 -148.5 -32.5t-70.5 -93.5l-209 17l84 805h769v-210h-567l-44 -365q43 32 99.5 52.5t127.5 22.5q205 2 321 -130t116 -361q0 -214 -122 -350t-353 -136 q-192 0 -324.5 105.5t-127.5 299.5z" />
+<glyph unicode="6" horiz-adv-x="1164" d="M116 571v278q0 284 160.5 456t403.5 172q78 0 150 -16.5t129 -43.5l-46 -188q-56 24 -109 37.5t-123 13.5q-146 0 -234.5 -112.5t-88.5 -303.5v-7q60 55 139.5 85t174.5 30q195 0 308.5 -136.5t113.5 -347.5q0 -223 -130 -366t-341 -143q-222 0 -364.5 156t-142.5 436z M358 558q0 -185 74.5 -285t190.5 -100q106 0 167 91t61 224q0 131 -64 213t-175 82q-92 0 -156 -32.5t-98 -88.5v-104z" />
+<glyph unicode="7" horiz-adv-x="1164" d="M69 1261v195h1006v-195q-251 -295 -339 -532t-128 -575l-15 -154h-243l15 154q39 330 156 598.5t319 508.5h-771z" />
+<glyph unicode="8" horiz-adv-x="1164" d="M97 397q0 120 69.5 212t190.5 139q-104 44 -163 128.5t-59 195.5q0 194 122.5 299.5t323.5 105.5q199 0 323.5 -105.5t124.5 -299.5q0 -110 -60 -195t-163 -130q119 -46 189.5 -138t70.5 -212q0 -203 -134 -310.5t-349 -107.5q-218 0 -352 107.5t-134 310.5zM340 409 q0 -110 66 -173t177 -63q107 0 174 63.5t67 172.5q0 107 -68.5 174t-174.5 67q-108 0 -174.5 -66.5t-66.5 -174.5zM378 1063q0 -99 55.5 -158.5t149.5 -59.5q92 0 147.5 59.5t55.5 158.5q0 96 -57 157.5t-148 61.5q-94 0 -148.5 -59.5t-54.5 -159.5z" />
+<glyph unicode="9" horiz-adv-x="1164" d="M82 974q0 218 135 360.5t334 142.5q226 0 361 -148.5t135 -427.5v-341q0 -276 -148.5 -428.5t-383.5 -152.5q-75 0 -155 15t-147 45l32 186q61 -28 125 -40t145 -12q130 0 210 96.5t80 281.5v67q-49 -67 -119.5 -101.5t-154.5 -34.5q-208 0 -328.5 131.5t-120.5 360.5z M325 974q0 -136 60.5 -219.5t168.5 -83.5q91 0 155 36t96 93v130q0 173 -65 262.5t-185 89.5q-98 0 -164 -87.5t-66 -220.5z" />
+<glyph unicode=":" horiz-adv-x="549" d="M153 0v233h242v-233h-242zM153 876v233h242v-233h-242z" />
+<glyph unicode=";" horiz-adv-x="544" d="M105 -281l70 321v198h239v-207l-155 -312h-154zM154 876v233h242v-233h-242z" />
+<glyph unicode="&#x3c;" horiz-adv-x="1041" d="M63 458v193l837 372v-242l-578 -222l-19 -3v-6l19 -3l578 -218v-243z" />
+<glyph unicode="=" horiz-adv-x="1166" d="M145 366v201h862v-201h-862zM145 790v202h862v-202h-862z" />
+<glyph unicode="&#x3e;" horiz-adv-x="1066" d="M128 86v239l605 226l18 2l1 6l-19 4l-605 221v239l864 -372v-193z" />
+<glyph unicode="?" horiz-adv-x="996" d="M47 1100q-3 178 119.5 277.5t316.5 99.5q210 0 327.5 -107t117.5 -297q0 -127 -73.5 -235.5t-185.5 -198.5q-57 -50 -71.5 -95t-14.5 -132h-243q1 143 33 204.5t142 154.5q78 76 124 145.5t46 153.5q0 97 -52.5 150.5t-149.5 53.5q-83 0 -141 -45.5t-58 -134.5h-234z M339 0v233h248v-233h-248z" />
+<glyph unicode="@" horiz-adv-x="1825" d="M91 478q18 424 252 685t613 261q383 0 587 -246t188 -671q-9 -216 -124 -372t-344 -156q-75 0 -129.5 42t-78.5 119q-47 -80 -116 -119.5t-161 -39.5q-133 0 -204.5 119.5t-53.5 315.5q24 256 140.5 411t282.5 155q110 0 177.5 -26t147.5 -80l-3 -4h5l-51 -579 q-8 -101 18 -139t69 -38q119 0 190.5 110.5t79.5 280.5q16 367 -140 572t-484 205q-306 0 -489.5 -221t-198.5 -585q-18 -365 147.5 -575t475.5 -210q87 0 177 20t154 53l38 -130q-67 -42 -170.5 -65.5t-202.5 -23.5q-387 0 -598 249.5t-194 681.5zM721 416 q-10 -133 20 -202t99 -69q59 0 109 24.5t89 87.5q0 8 0.5 16t1.5 20l45 515q-23 9 -49 14.5t-54 5.5q-118 0 -180 -102.5t-81 -309.5z" />
+<glyph unicode="A" horiz-adv-x="1320" d="M16 0l535 1456h230l529 -1456h-247l-115 340h-570l-116 -340h-246zM448 543h431l-211 622h-6z" />
+<glyph unicode="B" horiz-adv-x="1312" d="M159 0v1456h484q242 0 378 -99.5t136 -297.5q0 -99 -57 -177t-158 -116q130 -29 200 -125t70 -223q0 -205 -134 -311.5t-370 -106.5h-549zM402 194h306q126 0 194 57.5t68 166.5q0 116 -57 180t-178 64h-333v-468zM402 843h268q113 0 178.5 53.5t65.5 151.5 q0 108 -69 160.5t-202 52.5h-241v-418z" />
+<glyph unicode="C" horiz-adv-x="1302" d="M106 589v277q0 266 157.5 438.5t409.5 172.5q259 1 407 -135q145 -132 144 -353v-12l-2 -6h-235q0 147 -79.5 229t-234.5 82q-149 0 -236.5 -118t-87.5 -296v-279q0 -180 89.5 -298t241.5 -118q151 0 229 81t78 229h234l2 -6v-12q1 -213 -143 -347q-148 -138 -400 -139 q-255 0 -414.5 171.5t-159.5 438.5z" />
+<glyph unicode="D" horiz-adv-x="1346" d="M159 0v1456h472q277 0 450.5 -173t173.5 -445v-221q0 -273 -173.5 -445t-450.5 -172h-472zM402 194h222q181 0 284.5 118t103.5 305v223q0 185 -103.5 303t-284.5 118h-222v-1067z" />
+<glyph unicode="E" horiz-adv-x="1187" d="M159 0v1456h975v-195h-732v-411h637v-195h-637v-461h739v-194h-982z" />
+<glyph unicode="F" horiz-adv-x="1188" d="M159 0v1456h983v-195h-740v-445h638v-195h-638v-621h-243z" />
+<glyph unicode="G" horiz-adv-x="1383" d="M110 576v304q0 264 160.5 430.5t414.5 166.5q257 0 399.5 -126.5t145.5 -329.5l-2 -6h-230q-8 120 -85.5 193.5t-224.5 73.5q-151 0 -243.5 -113t-92.5 -287v-306q0 -176 100.5 -289.5t260.5 -113.5q114 0 185 26.5t103 62.5v296h-289v182h532v-543 q-58 -83 -190.5 -150.5t-340.5 -67.5q-263 0 -433 166.5t-170 430.5z" />
+<glyph unicode="H" horiz-adv-x="1456" d="M159 0v1456h243v-640h652v640h242v-1456h-242v621h-652v-621h-243z" />
+<glyph unicode="I" horiz-adv-x="589" d="M173 0v1456h243v-1456h-243z" />
+<glyph unicode="J" horiz-adv-x="1148" d="M64 407l2 6h235q0 -124 61.5 -182t171.5 -58q96 0 158.5 67t62.5 181v1035h243v-1035q0 -204 -130 -323t-334 -119q-219 0 -347 109q-123 105 -123 303v16z" />
+<glyph unicode="K" horiz-adv-x="1320" d="M159 0v1456h243v-617h139l457 617h288l-530 -695l571 -761h-297l-460 630h-168v-630h-243z" />
+<glyph unicode="L" horiz-adv-x="1108" d="M159 0v1456h243v-1262h669v-194h-912z" />
+<glyph unicode="M" horiz-adv-x="1794" d="M159 0v1456h315l419 -1120h6l420 1120h315v-1456h-243v496l24 631l-6 1l-432 -1128h-163l-430 1125l-6 -1l24 -628v-496h-243z" />
+<glyph unicode="N" horiz-adv-x="1456" d="M159 0v1456h243l646 -1062l6 2v1060h242v-1456h-242l-646 1063l-6 -2v-1061h-243z" />
+<glyph unicode="O" horiz-adv-x="1398" d="M103 597v262q0 266 163.5 442t424.5 176q267 0 435 -176t168 -442v-262q0 -267 -167.5 -442.5t-434.5 -175.5q-262 0 -425.5 175.5t-163.5 442.5zM345 597q0 -184 93 -301.5t254 -117.5q167 0 263.5 117t96.5 302v264q0 182 -97.5 299t-263.5 117q-160 0 -253 -117 t-93 -299v-264z" />
+<glyph unicode="P" horiz-adv-x="1323" d="M159 0v1456h569q241 0 377.5 -124.5t136.5 -327.5q0 -205 -136.5 -328.5t-377.5 -123.5h-326v-552h-243zM402 747h326q135 0 203 72t68 183t-68 185t-203 74h-326v-514z" />
+<glyph unicode="Q" horiz-adv-x="1414" d="M103 597v262q0 266 163.5 442t424.5 176q267 0 435 -176t168 -442v-262q0 -135 -46 -251t-130 -200l242 -235l-162 -145l-268 256q-54 -22 -114 -32.5t-124 -10.5q-262 0 -425.5 175.5t-163.5 442.5zM345 597q0 -184 93 -301.5t254 -117.5q167 0 263.5 117t96.5 302v264 q0 182 -97.5 299t-263.5 117q-160 0 -253 -117t-93 -299v-264z" />
+<glyph unicode="R" horiz-adv-x="1356" d="M159 0v1456h538q244 0 377 -110t133 -314q0 -113 -58.5 -194.5t-170.5 -130.5q123 -39 177 -127.5t54 -217.5v-121q0 -64 16 -125t54 -93v-23h-250q-40 33 -51.5 104t-11.5 139v117q0 112 -64 178t-176 66h-324v-604h-243zM402 799h282q146 0 213 56t67 171 q0 110 -66 172.5t-201 62.5h-295v-462z" />
+<glyph unicode="S" horiz-adv-x="1288" d="M96 430l2 6h234q0 -133 92 -198.5t239 -65.5q135 0 210 54.5t75 147.5q0 91 -67.5 149t-238.5 104q-244 64 -375.5 169.5t-131.5 276.5q0 176 145.5 290t375.5 114q240 0 386 -129q141 -125 140 -298v-12l-2 -6h-233q0 112 -76 181.5t-217 69.5q-133 0 -204.5 -58 t-71.5 -150q0 -83 77.5 -138t256.5 -104q235 -63 357 -174t122 -283q0 -182 -145.5 -289.5t-382.5 -107.5q-228 1 -400 121q-167 117 -167 318v12z" />
+<glyph unicode="T" horiz-adv-x="1185" d="M31 1261v195h1123v-195h-440v-1261h-243v1261h-440z" />
+<glyph unicode="U" horiz-adv-x="1396" d="M134 480v976h243v-976q0 -153 86 -230t231 -77q150 0 239 77t89 230v976h243v-976q0 -242 -158 -371.5t-413 -129.5q-250 0 -405 130t-155 371z" />
+<glyph unicode="V" horiz-adv-x="1300" d="M15 1456h259l347 -1075l26 -101h6l25 99l348 1077h259l-520 -1456h-231z" />
+<glyph unicode="W" horiz-adv-x="1812" d="M40 1456h239l233 -1068v-2l1 5l291 1065h194l294 -1068l1 -7l1 10l230 1065h239l-346 -1456h-221l-291 1045h-6l-292 -1045h-222z" />
+<glyph unicode="X" horiz-adv-x="1300" d="M50 0l458 734l-448 722h286l304 -538l307 538h288l-448 -722l465 -734h-292l-316 547l-316 -547h-288z" />
+<glyph unicode="Y" horiz-adv-x="1270" d="M13 1456h271l350 -708l352 708h271l-505 -945v-511h-242v524z" />
+<glyph unicode="Z" horiz-adv-x="1216" d="M88 0v152l731 1109h-725v195h1018v-146l-735 -1116h760v-194h-1049z" />
+<glyph unicode="[" horiz-adv-x="561" d="M132 -324v2002h408v-190h-165v-1623h165v-189h-408z" />
+<glyph unicode="\" horiz-adv-x="855" d="M21 1456h236l608 -1581h-236z" />
+<glyph unicode="]" horiz-adv-x="561" d="M12 -135h167v1623h-167v190h410v-2002h-410v189z" />
+<glyph unicode="^" horiz-adv-x="875" d="M53 729l299 727h171l298 -727h-205l-165 413l-12 54h-6l-12 -54l-162 -413h-206z" />
+<glyph unicode="_" horiz-adv-x="924" d="M3 0h917v-191h-917v191z" />
+<glyph unicode="`" horiz-adv-x="660" d="M80 1472l2 6h268l185 -266h-196z" />
+<glyph unicode="a" horiz-adv-x="1114" d="M82 305q0 157 124 244.5t349 87.5h189v95q0 85 -50 133t-143 48q-83 0 -132 -40t-49 -103h-234l-1 6v14q1 120 115 213q122 99 316 99q189 0 305 -96t116 -276v-481q0 -67 9 -128.5t29 -120.5h-246q-13 41 -21.5 80t-11.5 78q-50 -76 -131.5 -127.5t-182.5 -51.5 q-169 0 -259.5 87t-90.5 239zM325 309q0 -62 40.5 -98.5t115.5 -36.5q92 0 165.5 46t97.5 105v160h-193q-106 0 -166 -52.5t-60 -123.5z" />
+<glyph unicode="b" d="M128 0v1560h243v-601q50 69 120 106t163 37q203 0 313.5 -158t110.5 -418v-21q0 -237 -110.5 -381.5t-311.5 -144.5q-101 0 -175.5 41t-124.5 120l-24 -140h-204zM371 313q31 -65 86 -100.5t138 -35.5q126 0 183 88.5t57 239.5v21q0 169 -58 273t-184 104 q-81 0 -135.5 -36t-86.5 -100v-454z" />
+<glyph unicode="c" horiz-adv-x="1075" d="M81 523v35q0 235 127.5 389.5t366.5 154.5q195 0 317 -114q118 -110 117 -277v-11l-2 -6h-221q0 89 -58.5 151t-152.5 62q-137 0 -194 -99.5t-57 -249.5v-35q0 -153 57 -251.5t194 -98.5q89 0 150 52.5t61 131.5h220l2 -6v-11q0 -145 -124 -251q-128 -110 -309 -110 q-239 0 -366.5 154t-127.5 390z" />
+<glyph unicode="d" d="M83 505v21q0 259 111 417.5t312 158.5q88 0 157.5 -35.5t120.5 -101.5v595h243v-1560h-204l-24 134q-52 -76 -125 -115.5t-170 -39.5q-199 0 -310 145t-111 381zM326 505q0 -150 57.5 -239t182.5 -89q77 0 130.5 33t87.5 94v472q-34 60 -88 93.5t-128 33.5 q-124 0 -183 -104.5t-59 -272.5v-21z" />
+<glyph unicode="e" horiz-adv-x="1084" d="M89 516v40q-1 236 135 392q135 155 337 154h3q219 0 335.5 -132.5t116.5 -355.5v-143h-675l-2 -5q6 -129 75.5 -211t192.5 -82q98 0 168 24t135 69l78 -159q-61 -54 -162 -91t-234 -37q-230 0 -366.5 150.5t-136.5 386.5zM344 654l2 -5h429v25q0 103 -52.5 168t-158.5 65 q-90 0 -148 -71.5t-72 -181.5z" />
+<glyph unicode="f" horiz-adv-x="719" d="M42 902v180h165v126q0 179 97.5 276t273.5 97q35 0 71 -5.5t81 -15.5l-25 -188q-20 4 -44.5 7t-52.5 3q-79 0 -118.5 -45t-39.5 -129v-126h220v-180h-220v-902h-243v902h-165z" />
+<glyph unicode="g" d="M84 505v21q0 258 113 417t314 159q97 0 170.5 -41.5t124.5 -119.5l24 141h202v-1082q0 -209 -129 -323t-366 -114q-79 0 -170.5 22.5t-165.5 59.5l52 191q60 -31 132.5 -48.5t149.5 -17.5q132 0 193 56.5t61 173.5v111q-51 -65 -120.5 -98.5t-159.5 -33.5 q-199 0 -312 145t-113 381zM327 505q0 -149 59.5 -238.5t184.5 -89.5q78 0 131.5 32.5t86.5 93.5v474q-34 59 -87.5 92.5t-128.5 33.5q-125 0 -185.5 -105t-60.5 -272v-21z" />
+<glyph unicode="h" d="M125 0v1560h243v-618q54 76 131.5 118t171.5 42q172 0 268.5 -108.5t96.5 -334.5v-659h-243v661q0 128 -51 185t-153 57q-71 0 -127.5 -29.5t-93.5 -81.5v-792h-243z" />
+<glyph unicode="i" horiz-adv-x="531" d="M144 0v1082h243v-1082h-243zM144 1347v213h243v-213h-243z" />
+<glyph unicode="j" horiz-adv-x="537" d="M-80 -420l14 194q17 -5 42 -8.5t46 -3.5q62 0 97.5 42.5t35.5 132.5v1145h243v-1145q0 -179 -93 -276.5t-259 -97.5q-36 0 -65 4t-61 13zM149 1347v213h243v-213h-243z" />
+<glyph unicode="k" horiz-adv-x="1072" d="M129 0v1560h242v-892h101l273 414h286l-357 -492l410 -590h-282l-322 473h-109v-473h-242z" />
+<glyph unicode="l" horiz-adv-x="531" d="M144 0v1560h243v-1560h-243z" />
+<glyph unicode="m" horiz-adv-x="1781" d="M128 0v1082h222l13 -141q53 77 133 119t185 42q106 0 182 -48t114 -144q50 90 132 141t192 51q163 0 257.5 -111.5t94.5 -338.5v-652h-243v653q0 138 -47.5 194t-142.5 56q-78 0 -132 -42t-78 -113q0 -15 1 -26t1 -21v-701h-243v653q0 133 -48.5 191.5t-142.5 58.5 q-74 0 -125.5 -28.5t-81.5 -80.5v-794h-243z" />
+<glyph unicode="n" d="M126 0v1082h222l14 -156q53 83 133.5 129.5t181.5 46.5q169 0 263.5 -102.5t94.5 -319.5v-680h-243v678q0 122 -50.5 173.5t-153.5 51.5q-71 0 -127 -31.5t-92 -86.5v-785h-243z" />
+<glyph unicode="o" d="M83 530v21q0 241 132 396q134 155 363 155q233 0 365 -155q133 -154 133 -396v-21q0 -244 -133 -398q-132 -153 -363 -153q-232 0 -365 154q-132 154 -132 397zM326 530q0 -158 62 -258q61 -99 192 -99q127 0 190 99q64 100 64 258v21q0 155 -64 255q-63 101 -192 101 q-127 0 -190 -101q-62 -101 -62 -255v-21z" />
+<glyph unicode="p" d="M128 -416v1498h205l24 -136q52 76 125.5 116t170.5 40q200 0 311.5 -158.5t111.5 -417.5v-21q0 -236 -111 -381t-309 -145q-92 0 -163 33t-122 97v-525h-243zM371 291q32 -57 85 -87.5t131 -30.5q124 0 185.5 91.5t61.5 240.5v21q0 166 -62.5 271.5t-186.5 105.5 q-76 0 -129 -32.5t-85 -90.5v-489z" />
+<glyph unicode="q" d="M83 505v21q0 259 111 417.5t312 158.5q94 0 166 -39t123 -112l28 131h197v-1498h-243v518q-50 -61 -118 -92t-155 -31q-199 0 -310 145t-111 381zM326 505q0 -150 57.5 -241t182.5 -91q74 0 125.5 29.5t85.5 85.5v504q-34 54 -86 84.5t-123 30.5q-124 0 -183 -106.5 t-59 -274.5v-21z" />
+<glyph unicode="r" horiz-adv-x="709" d="M128 0v1082h222l16 -157q41 83 105.5 130t148.5 47q22 0 41 -3.5t35 -8.5l-29 -227l-104 4q-71 0 -118.5 -30t-73.5 -85v-752h-243z" />
+<glyph unicode="s" horiz-adv-x="1065" d="M88 335l2 6h226q4 -94 68 -137t156 -43q94 0 145 36t51 97q0 56 -48 93t-179 65q-194 41 -293.5 116.5t-99.5 205.5q0 136 115 232t303 96q198 0 314 -98q112 -93 112 -229v-12l-2 -6h-233q0 67 -51 115t-140 48q-88 0 -134 -39.5t-46 -96.5t43.5 -90.5t176.5 -59.5 q204 -42 302.5 -118.5t98.5 -208.5q0 -146 -120.5 -237t-317.5 -91q-211 0 -333 108q-116 103 -116 235v13z" />
+<glyph unicode="t" horiz-adv-x="712" d="M23 902v180h165v263h242v-263h194v-180h-194v-598q0 -67 29 -95.5t77 -28.5q20 0 39 3.5t36 9.5l26 -178q-31 -17 -74 -26.5t-89 -9.5q-134 0 -210 78.5t-76 246.5v598h-165z" />
+<glyph unicode="u" d="M123 435v647h242v-649q0 -142 46 -199t139 -57q88 0 147.5 31.5t93.5 91.5v782h243v-1082h-212l-20 158q-51 -86 -129 -132.5t-180 -46.5q-174 0 -272 111t-98 345z" />
+<glyph unicode="v" horiz-adv-x="1038" d="M32 1082h251l221 -716l18 -88h6l19 88l215 716h251l-384 -1082h-211z" />
+<glyph unicode="w" horiz-adv-x="1530" d="M37 1082h233l173 -758l6 -1l225 759h177l229 -770l6 1l169 769h233l-296 -1082h-199l-230 739l-2 10l-1 -10l-228 -739h-199z" />
+<glyph unicode="x" horiz-adv-x="1038" d="M33 0l350 547l-340 535h276l197 -371l200 371h279l-340 -535l350 -547h-276l-209 380l-209 -380h-278z" />
+<glyph unicode="y" horiz-adv-x="1038" d="M16 1082h265l206 -648l24 -108h6l237 756h266l-448 -1246q-43 -113 -121 -193t-221 -80q-30 0 -64.5 6t-66.5 14l27 188q13 -1 37 -3t36 -2q66 0 105.5 45t64.5 104l40 98z" />
+<glyph unicode="z" horiz-adv-x="1038" d="M85 0v159l546 727h-535v196h842v-154l-552 -734h578v-194h-879z" />
+<glyph unicode="{" horiz-adv-x="687" d="M56 529v178q98 0 145.5 58t47.5 164v203q0 171 82.5 290.5t277.5 174.5l48 -140q-98 -33 -138.5 -117t-40.5 -208v-203q0 -104 -43 -184.5t-130 -125.5q87 -47 130 -127.5t43 -182.5v-203q0 -124 40.5 -208t138.5 -117l-48 -141q-195 55 -277.5 175t-82.5 291v203 q0 104 -47.5 162t-145.5 58z" />
+<glyph unicode="|" horiz-adv-x="514" d="M174 -270v1726h167v-1726h-167z" />
+<glyph unicode="}" horiz-adv-x="687" d="M27 -219q97 33 138.5 117t41.5 208v203q0 105 44.5 185t137.5 124q-93 43 -137.5 123.5t-44.5 187.5v203q0 124 -41.5 208t-138.5 117l48 140q194 -55 277 -174.5t83 -290.5v-203q0 -106 47 -164t147 -58v-178q-100 0 -147 -58t-47 -162v-203q0 -171 -83 -291t-277 -175z " />
+<glyph unicode="~" horiz-adv-x="1361" d="M117 460q0 150 86 252.5t221 102.5q86 0 161.5 -33.5t155.5 -101.5q54 -48 97 -69t90 -21q59 0 102 54.5t43 128.5l171 -23q0 -151 -88 -257t-221 -106q-87 0 -159.5 32.5t-155.5 103.5q-55 46 -99 68t-90 22q-60 0 -102 -51.5t-42 -123.5z" />
+<glyph unicode="&#xa1;" horiz-adv-x="542" d="M143 -374v964h243v-964h-243zM143 847v235h243v-235h-243z" />
+<glyph unicode="&#xa2;" horiz-adv-x="1149" d="M91 523v35q0 208 101.5 356t294.5 180v224h200v-225q154 -29 245 -136.5t88 -257.5l-2 -5h-222q0 89 -58.5 151t-152.5 62q-137 0 -194 -99.5t-57 -249.5v-35q0 -153 57 -251.5t194 -98.5q89 0 150 52.5t61 131.5h222l2 -5q3 -129 -92.5 -231t-240.5 -131v-235h-200v232 q-193 31 -294.5 178.5t-101.5 357.5z" />
+<glyph unicode="&#xa3;" horiz-adv-x="1205" d="M81 600v195h155l-9 238q0 207 116 325.5t311 118.5q207 0 321 -108.5t110 -286.5l-2 -6h-235q0 105 -54.5 155.5t-139.5 50.5q-86 0 -135 -65.5t-49 -183.5l9 -238h389v-195h-381l5 -114q0 -82 -22.5 -158t-64.5 -134h725v-194h-986v194h10q47 13 70.5 101.5t23.5 182.5 l-5 122h-162z" />
+<glyph unicode="&#xa4;" horiz-adv-x="1437" d="M93 118l135 137q-49 76 -74.5 165.5t-25.5 187.5q0 101 28 193.5t81 171.5l-144 147l141 144l142 -145q74 55 162 85t185 30q96 0 185 -30.5t164 -86.5l145 148l142 -145l-148 -151q51 -78 79 -169.5t28 -191.5q0 -97 -25.5 -185.5t-72.5 -163.5l139 -141l-142 -145 l-132 134q-77 -61 -169.5 -94t-192.5 -33q-101 0 -193 32.5t-167 93.5l-129 -132zM313 608q0 -185 119.5 -314t290.5 -129q170 0 289.5 129t119.5 314q0 184 -119.5 312t-289.5 128q-171 0 -290.5 -128t-119.5 -312z" />
+<glyph unicode="&#xa5;" horiz-adv-x="1248" d="M26 1456h272l322 -640l323 640h271l-397 -714h276v-195h-355v-115h355v-195h-355v-237h-243v237h-357v195h357v115h-357v195h287z" />
+<glyph unicode="&#xa6;" horiz-adv-x="508" d="M136 -270v795h229v-795h-229zM136 698v758h229v-758h-229z" />
+<glyph unicode="&#xa7;" horiz-adv-x="1272" d="M94 542q0 90 43.5 160t125.5 114q-67 50 -100 119.5t-33 166.5q0 169 137.5 272t367.5 103q238 0 372 -111.5t129 -312.5l-2 -6h-234q0 101 -70 168t-195 67q-130 0 -196 -50.5t-66 -127.5q0 -86 61 -129t257 -95q244 -66 358.5 -158.5t114.5 -266.5q0 -93 -44.5 -162 t-126.5 -111q67 -50 101 -119t34 -166q0 -175 -136.5 -274t-367.5 -99q-226 0 -379 101t-148 319l2 6l233 1q0 -122 85 -177t207 -55t192 49.5t70 126.5t-67 122t-254 101q-242 64 -356.5 157t-114.5 267zM336 558q0 -89 62 -134.5t256 -100.5q53 -16 88 -26.5t67 -21.5 q55 22 85 64.5t30 99.5q0 80 -68 128.5t-255 105.5q-42 10 -81 22.5t-76 26.5q-55 -21 -81.5 -63.5t-26.5 -100.5z" />
+<glyph unicode="&#xa8;" horiz-adv-x="1054" d="M164 1252v204h241v-204h-241zM647 1252v204h242v-204h-242z" />
+<glyph unicode="&#xa9;" horiz-adv-x="1604" d="M87 729q0 315 207 531t503 216q295 0 502 -216t207 -531q0 -316 -207.5 -533t-501.5 -217q-296 0 -503 217t-207 533zM209 729q0 -264 171.5 -444.5t416.5 -180.5q244 0 415.5 180.5t171.5 444.5q0 263 -171.5 442.5t-415.5 179.5q-246 0 -417 -179.5t-171 -442.5z M434 669v119q0 173 94.5 280t254.5 107q157 0 245.5 -79.5t84.5 -228.5l-2 -6h-148q0 94 -45 136.5t-135 42.5q-94 0 -144.5 -69t-50.5 -182v-120q0 -115 50.5 -183.5t144.5 -68.5q90 0 134.5 41.5t44.5 137.5h148l2 -6q4 -151 -84 -229.5t-245 -78.5q-160 0 -254.5 106 t-94.5 281z" />
+<glyph unicode="&#xaa;" horiz-adv-x="913" d="M116 920q0 111 84.5 171t246.5 60h137v51q0 62 -29.5 94.5t-86.5 32.5q-66 0 -102 -26t-36 -73l-165 13l-1 6q-6 98 79 163t225 65q134 0 212.5 -71t78.5 -205v-314q0 -51 6 -95t20 -86h-177q-8 21 -13 44.5t-8 49.5q-33 -47 -88.5 -77.5t-133.5 -30.5q-119 0 -184 61 t-65 167zM291 924q0 -43 29 -65.5t88 -22.5q51 0 104.5 29t71.5 64v105h-136q-74 0 -115.5 -32t-41.5 -78z" />
+<glyph unicode="&#xab;" horiz-adv-x="994" d="M98 507v19l288 390h167l-247 -400l247 -399h-167zM432 507v19l288 390h167l-247 -400l247 -399h-167z" />
+<glyph unicode="&#xac;" horiz-adv-x="1133" d="M127 634v171h835v-431h-200v260h-635z" />
+<glyph unicode="&#xad;" horiz-adv-x="672" d="M71 521v196h525v-196h-525z" />
+<glyph unicode="&#xae;" horiz-adv-x="1604" d="M87 729q0 315 207 531t503 216q295 0 502 -216t207 -531q0 -316 -207.5 -533t-501.5 -217q-296 0 -503 217t-207 533zM209 729q0 -264 171.5 -444.5t416.5 -180.5q244 0 415.5 180.5t171.5 444.5q0 263 -171.5 442.5t-415.5 179.5q-246 0 -417 -179.5t-171 -442.5z M502 316v850h281q151 0 238 -66.5t87 -193.5q0 -59 -30.5 -104t-89.5 -76q62 -28 89.5 -82t27.5 -129v-56q0 -41 3.5 -73.5t13.5 -53.5v-16h-155q-9 21 -11 61.5t-2 82.5v54q0 71 -33.5 105t-109.5 34h-158v-337h-151zM653 787h143q68 0 115 30.5t47 85.5q0 72 -39 101 t-136 29h-130v-246z" />
+<glyph unicode="&#xaf;" horiz-adv-x="987" d="M135 1298v158h727v-158h-727z" />
+<glyph unicode="&#xb0;" horiz-adv-x="778" d="M127 1208q0 110 77.5 189.5t186.5 79.5q107 0 183.5 -79.5t76.5 -189.5t-76.5 -187t-183.5 -77q-109 0 -186.5 77t-77.5 187zM266 1208q0 -53 36.5 -88.5t88.5 -35.5q51 0 86.5 35t35.5 89t-35.5 91t-86.5 37q-52 0 -88.5 -37t-36.5 -91z" />
+<glyph unicode="&#xb1;" horiz-adv-x="1099" d="M95 707v199h358v384h215v-384h343v-199h-343v-395h-215v395h-358zM126 -23v196h835v-196h-835z" />
+<glyph unicode="&#xb2;" horiz-adv-x="865" d="M114 1231q-6 103 80 175.5t231 72.5q139 0 216.5 -65t77.5 -182q0 -81 -48.5 -140t-168.5 -164l-129 -110l2 -6h350v-145h-607v145l305 256q64 54 84 89t20 76q0 44 -25.5 72t-79.5 28q-61 0 -93 -30t-32 -78h-181z" />
+<glyph unicode="&#xb3;" horiz-adv-x="867" d="M104 888l2 6h181q0 -43 34.5 -68.5t95.5 -25.5q64 0 102 26t38 71q0 56 -35.5 83.5t-104.5 27.5h-123v131h123q65 0 95.5 26.5t30.5 74.5q0 39 -32.5 65.5t-94.5 26.5q-53 0 -84.5 -22t-31.5 -56h-181l-2 6q-6 98 80 158t216 60q149 0 235 -59.5t86 -169.5 q0 -55 -35.5 -100.5t-96.5 -70.5q70 -24 107.5 -71.5t37.5 -115.5q0 -112 -90 -174t-239 -62q-135 0 -227.5 60.5t-86.5 172.5z" />
+<glyph unicode="&#xb4;" horiz-adv-x="689" d="M120 1212l191 266h269l2 -6l-273 -260h-189z" />
+<glyph unicode="&#xb5;" horiz-adv-x="1211" d="M146 -416v1498h242v-620q0 -167 50 -227t147 -60q87 0 142.5 30.5t84.5 90.5v786h243v-1082h-223l-7 86q-45 -53 -104.5 -80t-134.5 -27q-61 0 -110.5 13.5t-87.5 41.5v-450h-242z" />
+<glyph unicode="&#xb6;" horiz-adv-x="1040" d="M62 988q0 207 129.5 337.5t362.5 130.5h326v-1456h-243v520h-83q-233 0 -362.5 129.5t-129.5 338.5z" />
+<glyph unicode="&#xb7;" horiz-adv-x="578" d="M160 594v240h242v-240h-242z" />
+<glyph unicode="&#xb8;" horiz-adv-x="528" d="M109 -136l32 139h177l-11 -54q64 -11 107 -52t43 -121q0 -102 -85 -162.5t-242 -60.5l-7 137q62 0 99.5 22t37.5 67q0 44 -34.5 62t-116.5 23z" />
+<glyph unicode="&#xb9;" horiz-adv-x="565" d="M87 1304v150l319 23v-812h-192v639h-127z" />
+<glyph unicode="&#xba;" horiz-adv-x="935" d="M119 1026v116q0 148 94 241.5t252 93.5t252.5 -93.5t94.5 -241.5v-116q0 -149 -94 -241.5t-251 -92.5q-159 0 -253.5 92.5t-94.5 241.5zM294 1026q0 -85 44 -136.5t129 -51.5q82 0 126 51.5t44 136.5v116q0 83 -44.5 135t-127.5 52q-84 0 -127.5 -52t-43.5 -135v-116z " />
+<glyph unicode="&#xbb;" horiz-adv-x="994" d="M106 151l247 399l-247 400h167l288 -390v-19l-288 -390h-167zM452 151l247 399l-247 400h167l288 -390v-19l-288 -390h-167z" />
+<glyph unicode="&#xbc;" horiz-adv-x="1548" d="M176 1303v150l319 23v-812h-192v639h-127zM325 189l711 1138l125 -72l-711 -1138zM775 261l422 540h192v-511h114v-145h-114v-145h-191v145h-413zM977 295l3 -5h218v277l-6 2l-12 -20z" />
+<glyph unicode="&#xbd;" horiz-adv-x="1638" d="M176 1303v150l319 23v-812h-192v639h-127zM338 189l711 1138l125 -72l-711 -1138zM925 564q-6 103 80 175.5t231 72.5q139 0 216.5 -65t77.5 -182q0 -81 -48.5 -140t-168.5 -164l-129 -110l2 -6h350v-145h-607v145l305 256q64 54 84 89t20 76q0 44 -25.5 72t-79.5 28 q-61 0 -93 -30t-32 -78h-181z" />
+<glyph unicode="&#xbe;" horiz-adv-x="1753" d="M120 889l2 6h181q0 -43 34.5 -68.5t95.5 -25.5q64 0 102 26t38 71q0 56 -35.5 83.5t-104.5 27.5h-123v131h123q65 0 95.5 26.5t30.5 74.5q0 39 -32.5 65.5t-94.5 26.5q-53 0 -84.5 -22t-31.5 -56h-181l-2 6q-6 98 80 158t216 60q149 0 235 -59.5t86 -169.5 q0 -55 -35.5 -100.5t-96.5 -70.5q70 -24 107.5 -71.5t37.5 -115.5q0 -112 -90 -174t-239 -62q-135 0 -227.5 60.5t-86.5 172.5zM508 189l711 1138l125 -72l-711 -1138zM964 261l422 540h192v-511h114v-145h-114v-145h-191v145h-413zM1166 295l3 -5h218v277l-6 2l-12 -20z " />
+<glyph unicode="&#xbf;" horiz-adv-x="1025" d="M96 8q0 127 73 235.5t186 198.5q56 49 71.5 94.5t15.5 132.5h242q-2 -144 -33.5 -205t-141.5 -153q-80 -79 -125 -147.5t-45 -151.5q0 -97 52 -150.5t151 -53.5q81 0 139 46t60 135h234l3 -6q1 -178 -121.5 -277.5t-314.5 -99.5q-211 0 -328.5 107t-117.5 295zM438 849 v233h248v-233h-248z" />
+<glyph unicode="&#xc0;" horiz-adv-x="1320" d="M16 0l535 1456h230l529 -1456h-247l-115 340h-570l-116 -340h-246zM346 1820l2 6h268l185 -266h-196zM448 543h431l-211 622h-6z" />
+<glyph unicode="&#xc1;" horiz-adv-x="1320" d="M16 0l535 1456h230l529 -1456h-247l-115 340h-570l-116 -340h-246zM448 543h431l-211 622h-6zM569 1559l191 266h269l2 -6l-273 -260h-189z" />
+<glyph unicode="&#xc2;" horiz-adv-x="1320" d="M16 0l535 1456h230l529 -1456h-247l-115 340h-570l-116 -340h-246zM324 1597v26l264 240h143l266 -242v-24h-195l-143 139l-142 -139h-193zM448 543h431l-211 622h-6z" />
+<glyph unicode="&#xc3;" horiz-adv-x="1320" d="M16 0l535 1456h230l529 -1456h-247l-115 340h-570l-116 -340h-246zM300 1637q0 94 59.5 163.5t149.5 69.5q56 0 145.5 -44.5t141.5 -44.5q38 0 66 32t28 78l131 -39q0 -95 -60 -162t-150 -67q-71 0 -153.5 44.5t-133.5 44.5q-39 0 -66 -32.5t-27 -77.5zM448 543h431 l-211 622h-6z" />
+<glyph unicode="&#xc4;" horiz-adv-x="1320" d="M16 0l535 1456h230l529 -1456h-247l-115 340h-570l-116 -340h-246zM298 1601v204h241v-204h-241zM448 543h431l-211 622h-6zM781 1601v204h242v-204h-242z" />
+<glyph unicode="&#xc5;" horiz-adv-x="1320" d="M16 0l535 1456h230l529 -1456h-247l-115 340h-570l-116 -340h-246zM448 543h431l-211 622h-6zM450 1737q0 84 61.5 141t150.5 57q87 0 147.5 -57t60.5 -141q0 -85 -60.5 -139.5t-147.5 -54.5q-89 0 -150.5 54.5t-61.5 139.5zM560 1737q0 -43 29.5 -72t72.5 -29 q42 0 70 28t28 73t-28 74.5t-70 30.5q-43 -1 -72.5 -30.5t-29.5 -74.5z" />
+<glyph unicode="&#xc6;" horiz-adv-x="1925" d="M-10 0l835 1456h992v-197h-646l17 -408h548v-197h-540l20 -458h663v-196h-898l-15 340h-502l-184 -340h-290zM580 555h377l-27 637l-5 1z" />
+<glyph unicode="&#xc7;" horiz-adv-x="1302" d="M106 589v277q0 266 157.5 438.5t409.5 172.5q258 0 406.5 -135.5t144.5 -364.5l-2 -6h-235q0 147 -79.5 229t-234.5 82q-149 0 -236.5 -118t-87.5 -296v-279q0 -180 89.5 -298t241.5 -118q151 0 229 81t78 229h234l2 -6q4 -221 -143.5 -359.5t-399.5 -138.5 q-255 0 -414.5 171.5t-159.5 438.5zM554 -140l32 139h177l-11 -54q64 -11 107 -52t43 -121q0 -102 -85 -162.5t-242 -60.5l-7 137q62 0 99.5 22t37.5 67q0 44 -34.5 62t-116.5 23z" />
+<glyph unicode="&#xc8;" horiz-adv-x="1187" d="M159 0v1456h975v-195h-732v-411h637v-195h-637v-461h739v-194h-982zM276 1820l2 6h268l185 -266h-196z" />
+<glyph unicode="&#xc9;" horiz-adv-x="1187" d="M159 0v1456h975v-195h-732v-411h637v-195h-637v-461h739v-194h-982zM499 1559l191 266h269l2 -6l-273 -260h-189z" />
+<glyph unicode="&#xca;" horiz-adv-x="1187" d="M159 0v1456h975v-195h-732v-411h637v-195h-637v-461h739v-194h-982zM282 1597v26l264 240h143l266 -242v-24h-195l-143 139l-142 -139h-193z" />
+<glyph unicode="&#xcb;" horiz-adv-x="1187" d="M159 0v1456h975v-195h-732v-411h637v-195h-637v-461h739v-194h-982zM255 1601v204h241v-204h-241zM738 1601v204h242v-204h-242z" />
+<glyph unicode="&#xcc;" horiz-adv-x="589" d="M-45 1820l2 6h268l185 -266h-196zM173 0v1456h243v-1456h-243z" />
+<glyph unicode="&#xcd;" horiz-adv-x="589" d="M173 0v1456h243v-1456h-243zM176 1559l191 266h269l2 -6l-273 -260h-189z" />
+<glyph unicode="&#xce;" horiz-adv-x="589" d="M-39 1597v26l264 240h143l266 -242v-24h-195l-143 139l-142 -139h-193zM173 0v1456h243v-1456h-243z" />
+<glyph unicode="&#xcf;" horiz-adv-x="589" d="M-66 1601v204h241v-204h-241zM173 0v1456h243v-1456h-243zM417 1601v204h242v-204h-242z" />
+<glyph unicode="&#xd0;" horiz-adv-x="1376" d="M36 657v170h153v629h472q277 0 450.5 -173t173.5 -445v-221q0 -273 -173.5 -445t-450.5 -172h-472v657h-153zM432 194h222q181 0 284.5 118t103.5 305v223q0 185 -103.5 303t-284.5 118h-222v-434h259v-170h-259v-463z" />
+<glyph unicode="&#xd1;" horiz-adv-x="1456" d="M159 0v1456h243l646 -1062l6 2v1060h242v-1456h-242l-646 1063l-6 -2v-1061h-243zM366 1637q0 94 59.5 163.5t149.5 69.5q56 0 145.5 -44.5t141.5 -44.5q38 0 66 32t28 78l131 -39q0 -95 -60 -162t-150 -67q-71 0 -153.5 44.5t-133.5 44.5q-39 0 -66 -32.5t-27 -77.5z " />
+<glyph unicode="&#xd2;" horiz-adv-x="1398" d="M103 597v262q0 266 163.5 442t424.5 176q267 0 435 -176t168 -442v-262q0 -267 -167.5 -442.5t-434.5 -175.5q-262 0 -425.5 175.5t-163.5 442.5zM345 597q0 -184 93 -301.5t254 -117.5q167 0 263.5 117t96.5 302v264q0 182 -97.5 299t-263.5 117q-160 0 -253 -117 t-93 -299v-264zM358 1841l2 6h268l185 -266h-196z" />
+<glyph unicode="&#xd3;" horiz-adv-x="1398" d="M103 597v262q0 266 163.5 442t424.5 176q267 0 435 -176t168 -442v-262q0 -267 -167.5 -442.5t-434.5 -175.5q-262 0 -425.5 175.5t-163.5 442.5zM345 597q0 -184 93 -301.5t254 -117.5q167 0 263.5 117t96.5 302v264q0 182 -97.5 299t-263.5 117q-160 0 -253 -117 t-93 -299v-264zM581 1580l191 266h269l2 -6l-273 -260h-189z" />
+<glyph unicode="&#xd4;" horiz-adv-x="1398" d="M103 597v262q0 266 163.5 442t424.5 176q267 0 435 -176t168 -442v-262q0 -267 -167.5 -442.5t-434.5 -175.5q-262 0 -425.5 175.5t-163.5 442.5zM345 597q0 -184 93 -301.5t254 -117.5q167 0 263.5 117t96.5 302v264q0 182 -97.5 299t-263.5 117q-160 0 -253 -117 t-93 -299v-264zM364 1618v26l264 240h143l266 -242v-24h-195l-143 139l-142 -139h-193z" />
+<glyph unicode="&#xd5;" horiz-adv-x="1398" d="M103 597v262q0 266 163.5 442t424.5 176q267 0 435 -176t168 -442v-262q0 -267 -167.5 -442.5t-434.5 -175.5q-262 0 -425.5 175.5t-163.5 442.5zM339 1658q0 94 59.5 163.5t149.5 69.5q56 0 145.5 -44.5t141.5 -44.5q38 0 66 32t28 78l131 -39q0 -95 -60 -162t-150 -67 q-71 0 -153.5 44.5t-133.5 44.5q-39 0 -66 -32.5t-27 -77.5zM345 597q0 -184 93 -301.5t254 -117.5q167 0 263.5 117t96.5 302v264q0 182 -97.5 299t-263.5 117q-160 0 -253 -117t-93 -299v-264z" />
+<glyph unicode="&#xd6;" horiz-adv-x="1398" d="M103 597v262q0 266 163.5 442t424.5 176q267 0 435 -176t168 -442v-262q0 -267 -167.5 -442.5t-434.5 -175.5q-262 0 -425.5 175.5t-163.5 442.5zM337 1622v204h241v-204h-241zM345 597q0 -184 93 -301.5t254 -117.5q167 0 263.5 117t96.5 302v264q0 182 -97.5 299 t-263.5 117q-160 0 -253 -117t-93 -299v-264zM820 1622v204h242v-204h-242z" />
+<glyph unicode="&#xd7;" horiz-adv-x="1092" d="M77 364l316 322l-316 322l148 150l315 -322l316 322l148 -150l-316 -322l316 -322l-148 -150l-316 321l-315 -321z" />
+<glyph unicode="&#xd8;" horiz-adv-x="1403" d="M103 597v262q0 266 163.5 442t424.5 176q97 0 182.5 -25.5t158.5 -72.5l82 139h148l-131 -222q78 -84 120.5 -196.5t42.5 -240.5v-262q0 -267 -167.5 -442.5t-434.5 -175.5q-82 0 -155.5 18t-136.5 54l-86 -146h-148l130 221q-93 84 -143 206t-50 265zM345 597 q0 -79 17.5 -146.5t50.5 -114.5l6 -1l504 858q-47 40 -105 62t-127 22q-160 0 -253 -117t-93 -299v-264zM506 232q39 -27 86 -40.5t100 -13.5q167 0 263.5 117t96.5 302v264q0 61 -12 115.5t-33 96.5l-6 1z" />
+<glyph unicode="&#xd9;" horiz-adv-x="1396" d="M134 480v976h243v-976q0 -153 86 -230t231 -77q150 0 239 77t89 230v976h243v-976q0 -242 -158 -371.5t-413 -129.5q-250 0 -405 130t-155 371zM359 1820l2 6h268l185 -266h-196z" />
+<glyph unicode="&#xda;" horiz-adv-x="1396" d="M134 480v976h243v-976q0 -153 86 -230t231 -77q150 0 239 77t89 230v976h243v-976q0 -242 -158 -371.5t-413 -129.5q-250 0 -405 130t-155 371zM582 1559l191 266h269l2 -6l-273 -260h-189z" />
+<glyph unicode="&#xdb;" horiz-adv-x="1396" d="M134 480v976h243v-976q0 -153 86 -230t231 -77q150 0 239 77t89 230v976h243v-976q0 -242 -158 -371.5t-413 -129.5q-250 0 -405 130t-155 371zM365 1597v26l264 240h143l266 -242v-24h-195l-143 139l-142 -139h-193z" />
+<glyph unicode="&#xdc;" horiz-adv-x="1396" d="M134 480v976h243v-976q0 -153 86 -230t231 -77q150 0 239 77t89 230v976h243v-976q0 -242 -158 -371.5t-413 -129.5q-250 0 -405 130t-155 371zM338 1601v204h241v-204h-241zM821 1601v204h242v-204h-242z" />
+<glyph unicode="&#xdd;" horiz-adv-x="1270" d="M13 1456h271l350 -708l352 708h271l-505 -945v-511h-242v524zM520 1559l191 266h269l2 -6l-273 -260h-189z" />
+<glyph unicode="&#xde;" horiz-adv-x="1226" d="M148 0v1456h243v-280h246q242 0 377.5 -121.5t135.5 -316.5q0 -196 -135.5 -317t-377.5 -121h-246v-300h-243zM391 495h246q135 0 202.5 69.5t67.5 171.5q0 104 -67.5 174.5t-202.5 70.5h-246v-486z" />
+<glyph unicode="&#xdf;" horiz-adv-x="1255" d="M136 0v1093q0 224 123 349t325 125q170 0 279.5 -91.5t109.5 -264.5q0 -113 -59 -216.5t-59 -165.5q0 -68 162 -210t162 -280q0 -180 -109 -270t-306 -90q-82 0 -166.5 17t-122.5 45l49 197q41 -25 102.5 -45t123.5 -20q93 0 140 41.5t47 112.5q0 76 -162.5 214.5 t-162.5 283.5q0 85 63 190t63 180q0 80 -47.5 128.5t-110.5 48.5q-91 0 -146.5 -74t-55.5 -207v-1091h-242z" />
+<glyph unicode="&#xe0;" horiz-adv-x="1114" d="M82 305q0 157 124 244.5t349 87.5h189v95q0 85 -50 133t-143 48q-83 0 -132 -40t-49 -103h-234l-1 6q-7 128 114.5 227t316.5 99q189 0 305 -96t116 -276v-481q0 -67 9 -128.5t29 -120.5h-246q-13 41 -21.5 80t-11.5 78q-50 -76 -131.5 -127.5t-182.5 -51.5 q-169 0 -259.5 87t-90.5 239zM209 1498l2 6h268l185 -266h-196zM325 309q0 -62 40.5 -98.5t115.5 -36.5q92 0 165.5 46t97.5 105v160h-193q-106 0 -166 -52.5t-60 -123.5z" />
+<glyph unicode="&#xe1;" horiz-adv-x="1114" d="M82 305q0 157 124 244.5t349 87.5h189v95q0 85 -50 133t-143 48q-83 0 -132 -40t-49 -103h-234l-1 6q-7 128 114.5 227t316.5 99q189 0 305 -96t116 -276v-481q0 -67 9 -128.5t29 -120.5h-246q-13 41 -21.5 80t-11.5 78q-50 -76 -131.5 -127.5t-182.5 -51.5 q-169 0 -259.5 87t-90.5 239zM325 309q0 -62 40.5 -98.5t115.5 -36.5q92 0 165.5 46t97.5 105v160h-193q-106 0 -166 -52.5t-60 -123.5zM432 1237l191 266h269l2 -6l-273 -260h-189z" />
+<glyph unicode="&#xe2;" horiz-adv-x="1114" d="M82 305q0 157 124 244.5t349 87.5h189v95q0 85 -50 133t-143 48q-83 0 -132 -40t-49 -103h-234l-1 6q-7 128 114.5 227t316.5 99q189 0 305 -96t116 -276v-481q0 -67 9 -128.5t29 -120.5h-246q-13 41 -21.5 80t-11.5 78q-50 -76 -131.5 -127.5t-182.5 -51.5 q-169 0 -259.5 87t-90.5 239zM215 1275v26l264 240h143l266 -242v-24h-195l-143 139l-142 -139h-193zM325 309q0 -62 40.5 -98.5t115.5 -36.5q92 0 165.5 46t97.5 105v160h-193q-106 0 -166 -52.5t-60 -123.5z" />
+<glyph unicode="&#xe3;" horiz-adv-x="1114" d="M82 305q0 157 124 244.5t349 87.5h189v95q0 85 -50 133t-143 48q-83 0 -132 -40t-49 -103h-234l-1 6q-7 128 114.5 227t316.5 99q189 0 305 -96t116 -276v-481q0 -67 9 -128.5t29 -120.5h-246q-13 41 -21.5 80t-11.5 78q-50 -76 -131.5 -127.5t-182.5 -51.5 q-169 0 -259.5 87t-90.5 239zM190 1315q0 94 59.5 163.5t149.5 69.5q56 0 145.5 -44.5t141.5 -44.5q38 0 66 32t28 78l131 -39q0 -95 -60 -162t-150 -67q-71 0 -153.5 44.5t-133.5 44.5q-39 0 -66 -32.5t-27 -77.5zM325 309q0 -62 40.5 -98.5t115.5 -36.5q92 0 165.5 46 t97.5 105v160h-193q-106 0 -166 -52.5t-60 -123.5z" />
+<glyph unicode="&#xe4;" horiz-adv-x="1114" d="M82 305q0 157 124 244.5t349 87.5h189v95q0 85 -50 133t-143 48q-83 0 -132 -40t-49 -103h-234l-1 6q-7 128 114.5 227t316.5 99q189 0 305 -96t116 -276v-481q0 -67 9 -128.5t29 -120.5h-246q-13 41 -21.5 80t-11.5 78q-50 -76 -131.5 -127.5t-182.5 -51.5 q-169 0 -259.5 87t-90.5 239zM188 1279v204h241v-204h-241zM325 309q0 -62 40.5 -98.5t115.5 -36.5q92 0 165.5 46t97.5 105v160h-193q-106 0 -166 -52.5t-60 -123.5zM671 1279v204h242v-204h-242z" />
+<glyph unicode="&#xe5;" horiz-adv-x="1114" d="M82 305q0 157 124 244.5t349 87.5h189v95q0 85 -50 133t-143 48q-83 0 -132 -40t-49 -103h-234l-1 6q-7 128 114.5 227t316.5 99q189 0 305 -96t116 -276v-481q0 -67 9 -128.5t29 -120.5h-246q-13 41 -21.5 80t-11.5 78q-50 -76 -131.5 -127.5t-182.5 -51.5 q-169 0 -259.5 87t-90.5 239zM325 309q0 -62 40.5 -98.5t115.5 -36.5q92 0 165.5 46t97.5 105v160h-193q-106 0 -166 -52.5t-60 -123.5zM339 1415q0 84 61.5 141t150.5 57q87 0 147.5 -57t60.5 -141q0 -85 -60.5 -139.5t-147.5 -54.5q-89 0 -150.5 54.5t-61.5 139.5z M449 1415q0 -43 29.5 -72t72.5 -29q42 0 70 28t28 73t-28 74.5t-70 30.5q-43 -1 -72.5 -30.5t-29.5 -74.5z" />
+<glyph unicode="&#xe6;" horiz-adv-x="1729" d="M52 312q0 158 120.5 244t351.5 86h206v71q0 91 -46.5 142.5t-132.5 51.5q-93 0 -146.5 -45t-53.5 -110l-233 18l-2 6q-6 141 115 233.5t322 92.5q107 0 192.5 -33t141.5 -97q63 63 147 96.5t184 33.5q214 0 332 -131t118 -359v-141h-680l-3 -6q4 -131 74 -211.5 t209 -80.5q98 0 161 23t144 69l73 -165q-57 -45 -158 -83t-234 -38q-132 0 -234 44.5t-169 127.5q-59 -74 -166 -123t-256 -49q-180 0 -278.5 89.5t-98.5 243.5zM295 308q0 -65 45.5 -104.5t135.5 -39.5q67 0 140 36.5t114 85.5v189h-204q-109 0 -170 -49t-61 -118zM988 647 l2 -5h438v30q0 105 -51.5 170t-158.5 65q-104 0 -162 -71.5t-68 -188.5z" />
+<glyph unicode="&#xe7;" horiz-adv-x="1075" d="M81 523v35q0 235 127.5 389.5t366.5 154.5q195 0 316.5 -113.5t117.5 -288.5l-2 -6h-221q0 89 -58.5 151t-152.5 62q-137 0 -194 -99.5t-57 -249.5v-35q0 -153 57 -251.5t194 -98.5q89 0 150 52.5t61 131.5h220l2 -6q5 -152 -123.5 -262t-309.5 -110q-239 0 -366.5 154 t-127.5 390zM427 -140l32 139h177l-11 -54q64 -11 107 -52t43 -121q0 -102 -85 -162.5t-242 -60.5l-7 137q62 0 99.5 22t37.5 67q0 44 -34.5 62t-116.5 23z" />
+<glyph unicode="&#xe8;" horiz-adv-x="1084" d="M89 516v40q0 236 135.5 391.5t339.5 154.5q219 0 335.5 -132.5t116.5 -355.5v-143h-675l-2 -5q6 -129 75.5 -211t192.5 -82q98 0 168 24t135 69l78 -159q-61 -54 -162 -91t-234 -37q-230 0 -366.5 150.5t-136.5 386.5zM211 1499l2 6h268l185 -266h-196zM344 654l2 -5h429 v25q0 103 -52.5 168t-158.5 65q-90 0 -148 -71.5t-72 -181.5z" />
+<glyph unicode="&#xe9;" horiz-adv-x="1084" d="M89 516v40q0 236 135.5 391.5t339.5 154.5q219 0 335.5 -132.5t116.5 -355.5v-143h-675l-2 -5q6 -129 75.5 -211t192.5 -82q98 0 168 24t135 69l78 -159q-61 -54 -162 -91t-234 -37q-230 0 -366.5 150.5t-136.5 386.5zM344 654l2 -5h429v25q0 103 -52.5 168t-158.5 65 q-90 0 -148 -71.5t-72 -181.5zM434 1238l191 266h269l2 -6l-273 -260h-189z" />
+<glyph unicode="&#xea;" horiz-adv-x="1084" d="M89 516v40q0 236 135.5 391.5t339.5 154.5q219 0 335.5 -132.5t116.5 -355.5v-143h-675l-2 -5q6 -129 75.5 -211t192.5 -82q98 0 168 24t135 69l78 -159q-61 -54 -162 -91t-234 -37q-230 0 -366.5 150.5t-136.5 386.5zM217 1276v26l264 240h143l266 -242v-24h-195 l-143 139l-142 -139h-193zM344 654l2 -5h429v25q0 103 -52.5 168t-158.5 65q-90 0 -148 -71.5t-72 -181.5z" />
+<glyph unicode="&#xeb;" horiz-adv-x="1084" d="M89 516v40q0 236 135.5 391.5t339.5 154.5q219 0 335.5 -132.5t116.5 -355.5v-143h-675l-2 -5q6 -129 75.5 -211t192.5 -82q98 0 168 24t135 69l78 -159q-61 -54 -162 -91t-234 -37q-230 0 -366.5 150.5t-136.5 386.5zM190 1280v204h241v-204h-241zM344 654l2 -5h429v25 q0 103 -52.5 168t-158.5 65q-90 0 -148 -71.5t-72 -181.5zM673 1280v204h242v-204h-242z" />
+<glyph unicode="&#xec;" horiz-adv-x="538" d="M-74 1477l2 6h268l185 -266h-196zM143 0v1082h243v-1082h-243z" />
+<glyph unicode="&#xed;" horiz-adv-x="538" d="M143 0v1082h243v-1082h-243zM147 1216l191 266h269l2 -6l-273 -260h-189z" />
+<glyph unicode="&#xee;" horiz-adv-x="538" d="M-68 1254v26l264 240h143l266 -242v-24h-195l-143 139l-142 -139h-193zM143 0v1082h243v-1082h-243z" />
+<glyph unicode="&#xef;" horiz-adv-x="538" d="M-95 1258v204h241v-204h-241zM143 0v1082h243v-1082h-243zM388 1258v204h242v-204h-242z" />
+<glyph unicode="&#xf0;" horiz-adv-x="1210" d="M60 468q0 226 136.5 365.5t358.5 139.5q85 0 160.5 -31.5t127.5 -83.5l4 5q-12 94 -53 172.5t-105 138.5l-268 -150l-78 109l219 123v6q-33 17 -71.5 32t-77.5 27l75 196q84 -19 160 -52.5t142 -79.5l207 116l78 -109l-178 -100q98 -105 151.5 -243t53.5 -301v-207 q0 -248 -150 -405t-375 -157q-227 0 -372 140.5t-145 348.5zM303 468q0 -121 75.5 -208t202.5 -87q125 0 201.5 104t76.5 264v132q-35 48 -107.5 80t-175.5 32q-126 0 -199.5 -90t-73.5 -227z" />
+<glyph unicode="&#xf1;" d="M126 0v1082h222l14 -156q53 83 133.5 129.5t181.5 46.5q169 0 263.5 -102.5t94.5 -319.5v-680h-243v678q0 122 -50.5 173.5t-153.5 51.5q-71 0 -127 -31.5t-92 -86.5v-785h-243zM217 1315q0 94 59.5 163.5t149.5 69.5q56 0 145.5 -44.5t141.5 -44.5q38 0 66 32t28 78 l131 -39q0 -95 -60 -162t-150 -67q-71 0 -153.5 44.5t-133.5 44.5q-39 0 -66 -32.5t-27 -77.5z" />
+<glyph unicode="&#xf2;" d="M83 530v21q0 241 132 396q134 155 363 155q233 0 365 -155q133 -154 133 -396v-21q0 -244 -133 -398q-132 -153 -363 -153q-232 0 -365 154q-132 154 -132 397zM238 1498l2 6h268l185 -266h-196zM326 530q0 -158 62 -258q61 -99 192 -99q127 0 190 99q64 100 64 258v21 q0 155 -64 255q-63 101 -192 101q-127 0 -190 -101q-62 -101 -62 -255v-21z" />
+<glyph unicode="&#xf3;" d="M83 530v21q0 241 132 396q134 155 363 155q233 0 365 -155q133 -154 133 -396v-21q0 -244 -133 -398q-132 -153 -363 -153q-232 0 -365 154q-132 154 -132 397zM326 530q0 -158 62 -258q61 -99 192 -99q127 0 190 99q64 100 64 258v21q0 155 -64 255q-63 101 -192 101 q-127 0 -190 -101q-62 -101 -62 -255v-21zM461 1237l191 266h269l2 -6l-273 -260h-189z" />
+<glyph unicode="&#xf4;" d="M83 530v21q0 241 132 396q134 155 363 155q233 0 365 -155q133 -154 133 -396v-21q0 -244 -133 -398q-132 -153 -363 -153q-232 0 -365 154q-132 154 -132 397zM244 1275v26l264 240h143l266 -242v-24h-195l-143 139l-142 -139h-193zM326 530q0 -158 62 -258 q61 -99 192 -99q127 0 190 99q64 100 64 258v21q0 155 -64 255q-63 101 -192 101q-127 0 -190 -101q-62 -101 -62 -255v-21z" />
+<glyph unicode="&#xf5;" d="M83 530v21q0 241 132 396q134 155 363 155q233 0 365 -155q133 -154 133 -396v-21q0 -244 -133 -398q-132 -153 -363 -153q-232 0 -365 154q-132 154 -132 397zM219 1315q0 94 59.5 163.5t149.5 69.5q56 0 145.5 -44.5t141.5 -44.5q38 0 66 32t28 78l131 -39 q0 -95 -60 -162t-150 -67q-71 0 -153.5 44.5t-133.5 44.5q-39 0 -66 -32.5t-27 -77.5zM326 530q0 -158 62 -258q61 -99 192 -99q127 0 190 99q64 100 64 258v21q0 155 -64 255q-63 101 -192 101q-127 0 -190 -101q-62 -101 -62 -255v-21z" />
+<glyph unicode="&#xf6;" d="M83 530v21q0 241 132 396q134 155 363 155q233 0 365 -155q133 -154 133 -396v-21q0 -244 -133 -398q-132 -153 -363 -153q-232 0 -365 154q-132 154 -132 397zM217 1279v204h241v-204h-241zM326 530q0 -158 62 -258q61 -99 192 -99q127 0 190 99q64 100 64 258v21 q0 155 -64 255q-63 101 -192 101q-127 0 -190 -101q-62 -101 -62 -255v-21zM700 1279v204h242v-204h-242z" />
+<glyph unicode="&#xf7;" horiz-adv-x="1169" d="M67 582v212h1012v-212h-1012zM453 170v221h243v-221h-243zM453 985v221h243v-221h-243z" />
+<glyph unicode="&#xf8;" horiz-adv-x="1161" d="M83 530v21q0 242 132.5 396.5t362.5 154.5q53 0 102.5 -9.5t94.5 -26.5l72 146h144l-104 -211q91 -74 140 -190.5t49 -259.5v-21q0 -244 -132.5 -397.5t-363.5 -153.5q-48 0 -93 7.5t-87 21.5l-72 -146h-144l102 207q-99 71 -151 191t-52 270zM326 530q0 -78 14.5 -142 t44.5 -104l6 -1l294 600q-24 11 -50.5 17.5t-56.5 6.5q-127 0 -189.5 -100.5t-62.5 -255.5v-21zM489 189q20 -8 43 -12t48 -4q127 0 190.5 99.5t63.5 257.5v21q0 68 -13 127t-37 100l-6 1z" />
+<glyph unicode="&#xf9;" d="M123 435v647h242v-649q0 -142 46 -199t139 -57q88 0 147.5 31.5t93.5 91.5v782h243v-1082h-212l-20 158q-51 -86 -129 -132.5t-180 -46.5q-174 0 -272 111t-98 345zM237 1477l2 6h268l185 -266h-196z" />
+<glyph unicode="&#xfa;" d="M123 435v647h242v-649q0 -142 46 -199t139 -57q88 0 147.5 31.5t93.5 91.5v782h243v-1082h-212l-20 158q-51 -86 -129 -132.5t-180 -46.5q-174 0 -272 111t-98 345zM460 1216l191 266h269l2 -6l-273 -260h-189z" />
+<glyph unicode="&#xfb;" d="M123 435v647h242v-649q0 -142 46 -199t139 -57q88 0 147.5 31.5t93.5 91.5v782h243v-1082h-212l-20 158q-51 -86 -129 -132.5t-180 -46.5q-174 0 -272 111t-98 345zM243 1254v26l264 240h143l266 -242v-24h-195l-143 139l-142 -139h-193z" />
+<glyph unicode="&#xfc;" d="M123 435v647h242v-649q0 -142 46 -199t139 -57q88 0 147.5 31.5t93.5 91.5v782h243v-1082h-212l-20 158q-51 -86 -129 -132.5t-180 -46.5q-174 0 -272 111t-98 345zM216 1258v204h241v-204h-241zM699 1258v204h242v-204h-242z" />
+<glyph unicode="&#xfd;" horiz-adv-x="1038" d="M16 1082h265l206 -648l24 -108h6l237 756h266l-448 -1246q-43 -113 -121 -193t-221 -80q-30 0 -64.5 6t-66.5 14l27 188q13 -1 37 -3t36 -2q66 0 105.5 45t64.5 104l40 98zM400 1216l191 266h269l2 -6l-273 -260h-189z" />
+<glyph unicode="&#xfe;" horiz-adv-x="1175" d="M138 -416v1976h243v-595q50 66 120.5 101.5t161.5 35.5q200 0 311.5 -158.5t111.5 -417.5v-21q0 -236 -111 -381t-309 -145q-92 0 -163 33t-122 97v-525h-243zM381 291q32 -57 85 -87.5t131 -30.5q124 0 185.5 91.5t61.5 240.5v21q0 166 -62.5 271.5t-186.5 105.5 q-76 0 -129 -32.5t-85 -90.5v-489z" />
+<glyph unicode="&#xff;" horiz-adv-x="1038" d="M16 1082h265l206 -648l24 -108h6l237 756h266l-448 -1246q-43 -113 -121 -193t-221 -80q-30 0 -64.5 6t-66.5 14l27 188q13 -1 37 -3t36 -2q66 0 105.5 45t64.5 104l40 98zM158 1258v204h241v-204h-241zM641 1258v204h242v-204h-242z" />
+<glyph unicode="&#x152;" horiz-adv-x="1972" d="M101 576v304q0 265 160.5 431t419.5 166q69 0 140 -6t150 -15h888v-195h-732v-411h637v-195h-637v-461h739v-194h-895q-92 -10 -156.5 -15.5t-131.5 -5.5q-260 0 -421 165.5t-161 431.5zM343 576q0 -196 90 -299t250 -103q51 0 101.5 3.5t99.5 10.5v1080q-53 6 -103.5 10 t-99.5 4q-159 0 -248.5 -102.5t-89.5 -297.5v-306z" />
+<glyph unicode="&#x153;" horiz-adv-x="1851" d="M83 530v21q0 242 132.5 396.5t362.5 154.5q129 0 229.5 -50.5t165.5 -141.5q64 91 160 141.5t209 50.5q219 0 335.5 -132.5t116.5 -355.5v-143h-675l-2 -5q6 -129 75.5 -211t192.5 -82q98 0 168 24t135 69l78 -159q-61 -54 -162 -91t-234 -37q-129 0 -231 49.5 t-167 139.5q-65 -91 -164.5 -140t-227.5 -49q-232 0 -364.5 154t-132.5 397zM326 530q0 -159 62 -258t192 -99q127 0 190.5 99.5t63.5 257.5v21q0 155 -63.5 255.5t-192.5 100.5q-127 0 -189.5 -100.5t-62.5 -255.5v-21zM1122 654l2 -5h429v25q0 103 -52.5 168t-158.5 65 q-90 0 -148 -71.5t-72 -181.5z" />
+<glyph unicode="&#x178;" horiz-adv-x="1270" d="M13 1456h271l350 -708l352 708h271l-505 -945v-511h-242v524zM276 1601v204h241v-204h-241zM759 1601v204h242v-204h-242z" />
+<glyph unicode="&#x2c6;" horiz-adv-x="998" d="M155 1252v26l264 240h143l266 -242v-24h-195l-143 139l-142 -139h-193z" />
+<glyph unicode="&#x2dc;" horiz-adv-x="984" d="M128 1273q0 94 59.5 163.5t149.5 69.5q56 0 145.5 -44.5t141.5 -44.5q38 0 66 32t28 78l131 -39q0 -95 -60 -162t-150 -67q-71 0 -153.5 44.5t-133.5 44.5q-39 0 -66 -32.5t-27 -77.5z" />
+<glyph unicode="&#x2000;" horiz-adv-x="967" />
+<glyph unicode="&#x2001;" horiz-adv-x="1935" />
+<glyph unicode="&#x2002;" horiz-adv-x="967" />
+<glyph unicode="&#x2003;" horiz-adv-x="1935" />
+<glyph unicode="&#x2004;" horiz-adv-x="645" />
+<glyph unicode="&#x2005;" horiz-adv-x="483" />
+<glyph unicode="&#x2006;" horiz-adv-x="322" />
+<glyph unicode="&#x2007;" horiz-adv-x="322" />
+<glyph unicode="&#x2008;" horiz-adv-x="241" />
+<glyph unicode="&#x2009;" horiz-adv-x="387" />
+<glyph unicode="&#x200a;" horiz-adv-x="107" />
+<glyph unicode="&#x2010;" horiz-adv-x="672" d="M71 521v196h525v-196h-525z" />
+<glyph unicode="&#x2011;" horiz-adv-x="672" d="M71 521v196h525v-196h-525z" />
+<glyph unicode="&#x2012;" horiz-adv-x="672" d="M71 521v196h525v-196h-525z" />
+<glyph unicode="&#x2013;" horiz-adv-x="1415" d="M156 621v196h1086v-196h-1086z" />
+<glyph unicode="&#x2014;" horiz-adv-x="1665" d="M125 621v196h1336v-196h-1336z" />
+<glyph unicode="&#x2018;" horiz-adv-x="413" d="M66 1015v188l162 357h119l-60 -358v-187h-221z" />
+<glyph unicode="&#x2019;" horiz-adv-x="413" d="M69 1016l60 348v196h221v-194l-162 -350h-119z" />
+<glyph unicode="&#x201a;" horiz-adv-x="413" d="M66 -262l60 265v266h221v-249l-155 -282h-126z" />
+<glyph unicode="&#x201c;" horiz-adv-x="746" d="M66 1015v188l162 357h119l-60 -358v-187h-221zM395 1015v188l162 357h119l-60 -358v-187h-221z" />
+<glyph unicode="&#x201d;" horiz-adv-x="754" d="M69 1016l60 348v196h221v-194l-162 -350h-119zM406 1016l60 348v196h221v-194l-162 -350h-119z" />
+<glyph unicode="&#x201e;" horiz-adv-x="731" d="M66 -233l60 295v228h214v-217l-162 -306h-112zM391 -233l60 303v220h214v-217l-162 -306h-112z" />
+<glyph unicode="&#x2022;" horiz-adv-x="715" d="M136 724v77q0 94 60 154.5t161 60.5q102 0 162.5 -60t60.5 -155v-77q0 -96 -60 -154.5t-162 -58.5q-101 0 -161.5 59t-60.5 154z" />
+<glyph unicode="&#x2026;" horiz-adv-x="1446" d="M153 0v233h242v-233h-242zM596 0v233h242v-233h-242zM1016 0v233h242v-233h-242z" />
+<glyph unicode="&#x202f;" horiz-adv-x="387" />
+<glyph unicode="&#x2039;" horiz-adv-x="626" d="M108 541v19l288 390h167l-247 -400l247 -399h-167z" />
+<glyph unicode="&#x203a;" horiz-adv-x="617" d="M84 151l247 399l-247 400h167l288 -390v-19l-288 -390h-167z" />
+<glyph unicode="&#x205f;" horiz-adv-x="483" />
+<glyph unicode="&#x20ac;" horiz-adv-x="1101" d="M75 457v195h146v128h-146v195h146v12q0 198 145.5 344t382.5 146q60 0 118 -8t125 -23l-20 -199q-54 16 -110.5 25.5t-112.5 9.5q-132 0 -208.5 -89.5t-76.5 -203.5v-14h460v-195h-460v-128h460v-195h-460v-2q0 -112 77 -197t210 -85q57 0 113 8.5t108 25.5l20 -197 q-56 -15 -117.5 -23t-123.5 -8q-237 0 -383.5 141.5t-146.5 334.5v2h-146z" />
+<glyph unicode="&#x2122;" horiz-adv-x="1289" d="M100 1361v95h391v-95h-138v-443h-117v443h-136zM565 916v540h137l141 -373h6l142 373h131v-540h-110v317l-6 1l-129 -318h-61l-134 330l-6 -1v-329h-111z" />
+<glyph unicode="&#xe000;" horiz-adv-x="1080" d="M0 0v1080h1080v-1080h-1080z" />
+<glyph unicode="&#xfb02;" horiz-adv-x="1250" d="M42 902v180h165v126q0 179 97.5 276t273.5 97q35 0 71 -5.5t81 -15.5l-25 -188q-20 4 -44.5 7t-52.5 3q-79 0 -118.5 -45t-39.5 -129v-126h220v-180h-220v-902h-243v902h-165zM863 0v1560h243v-1560h-243z" />
+<glyph unicode="&#xfb03;" horiz-adv-x="1911" d="M42 902v180h165v126q0 179 97.5 276t273.5 97q35 0 71 -5.5t81 -15.5l-25 -188q-20 4 -44.5 7t-52.5 3q-79 0 -118.5 -45t-39.5 -129v-126h220v-180h-220v-902h-243v902h-165zM743 902v180h165v92q0 195 115 301t322 106q72 0 143 -15.5t163 -44.5l-37 -201 q-62 21 -122 34.5t-130 13.5q-109 0 -160 -48.5t-51 -145.5v-92h213v-180h-213v-902h-243v902h-165zM1523 0v1082h243v-1082h-243z" />
+<glyph unicode="&#xfb04;" horiz-adv-x="1969" d="M42 902v180h165v126q0 179 97.5 276t273.5 97q35 0 71 -5.5t81 -15.5l-25 -188q-20 4 -44.5 7t-52.5 3q-79 0 -118.5 -45t-39.5 -129v-126h220v-180h-220v-902h-243v902h-165zM761 902v180h165v126q0 179 97.5 276t273.5 97q35 0 71 -5.5t81 -15.5l-25 -188 q-20 4 -44.5 7t-52.5 3q-79 0 -118.5 -45t-39.5 -129v-126h220v-180h-220v-902h-243v902h-165zM1582 0v1560h243v-1560h-243z" />
+<hkern u1="&#x22;" u2="w" k="-11" />
+<hkern u1="&#x27;" u2="w" k="-11" />
+<hkern u1="&#x28;" u2="&#x178;" k="-23" />
+<hkern u1="&#x28;" u2="&#xdd;" k="-23" />
+<hkern u1="&#x28;" u2="Y" k="-23" />
+<hkern u1="&#x28;" u2="W" k="-32" />
+<hkern u1="&#x28;" u2="V" k="-21" />
+<hkern u1="A" u2="w" k="35" />
+<hkern u1="A" u2="t" k="18" />
+<hkern u1="A" u2="&#x3f;" k="79" />
+<hkern u1="C" u2="&#x29;" k="28" />
+<hkern u1="D" u2="&#xc6;" k="46" />
+<hkern u1="E" u2="w" k="23" />
+<hkern u1="F" u2="&#x2026;" k="297" />
+<hkern u1="F" u2="&#x201e;" k="297" />
+<hkern u1="F" u2="&#x201a;" k="297" />
+<hkern u1="F" u2="&#x153;" k="35" />
+<hkern u1="F" u2="&#xff;" k="26" />
+<hkern u1="F" u2="&#xfd;" k="26" />
+<hkern u1="F" u2="&#xfc;" k="23" />
+<hkern u1="F" u2="&#xfb;" k="23" />
+<hkern u1="F" u2="&#xfa;" k="23" />
+<hkern u1="F" u2="&#xf9;" k="23" />
+<hkern u1="F" u2="&#xf6;" k="36" />
+<hkern u1="F" u2="&#xf5;" k="36" />
+<hkern u1="F" u2="&#xf4;" k="36" />
+<hkern u1="F" u2="&#xf3;" k="36" />
+<hkern u1="F" u2="&#xf2;" k="36" />
+<hkern u1="F" u2="&#xeb;" k="35" />
+<hkern u1="F" u2="&#xea;" k="35" />
+<hkern u1="F" u2="&#xe9;" k="35" />
+<hkern u1="F" u2="&#xe8;" k="35" />
+<hkern u1="F" u2="&#xe7;" k="35" />
+<hkern u1="F" u2="&#xe5;" k="50" />
+<hkern u1="F" u2="&#xe4;" k="50" />
+<hkern u1="F" u2="&#xe3;" k="50" />
+<hkern u1="F" u2="&#xe2;" k="50" />
+<hkern u1="F" u2="&#xe1;" k="50" />
+<hkern u1="F" u2="&#xe0;" k="50" />
+<hkern u1="F" u2="&#xc5;" k="107" />
+<hkern u1="F" u2="&#xc4;" k="107" />
+<hkern u1="F" u2="&#xc3;" k="107" />
+<hkern u1="F" u2="&#xc2;" k="107" />
+<hkern u1="F" u2="&#xc1;" k="107" />
+<hkern u1="F" u2="&#xc0;" k="107" />
+<hkern u1="F" u2="y" k="26" />
+<hkern u1="F" u2="v" k="26" />
+<hkern u1="F" u2="u" k="23" />
+<hkern u1="F" u2="r" k="28" />
+<hkern u1="F" u2="q" k="35" />
+<hkern u1="F" u2="o" k="36" />
+<hkern u1="F" u2="g" k="35" />
+<hkern u1="F" u2="e" k="35" />
+<hkern u1="F" u2="d" k="35" />
+<hkern u1="F" u2="c" k="35" />
+<hkern u1="F" u2="a" k="50" />
+<hkern u1="F" u2="T" k="-20" />
+<hkern u1="F" u2="A" k="107" />
+<hkern u1="F" u2="&#x3a;" k="297" />
+<hkern u1="F" u2="&#x2e;" k="297" />
+<hkern u1="F" u2="&#x2c;" k="297" />
+<hkern u1="K" u2="w" k="68" />
+<hkern u1="L" u2="w" k="76" />
+<hkern u1="O" u2="&#xc6;" k="46" />
+<hkern u1="P" u2="&#xc6;" k="235" />
+<hkern u1="P" u2="t" k="-15" />
+<hkern u1="Q" u2="&#x178;" k="51" />
+<hkern u1="Q" u2="&#xdd;" k="51" />
+<hkern u1="Q" u2="Y" k="51" />
+<hkern u1="Q" u2="W" k="21" />
+<hkern u1="Q" u2="V" k="30" />
+<hkern u1="Q" u2="T" k="35" />
+<hkern u1="R" u2="&#x178;" k="52" />
+<hkern u1="R" u2="&#xdd;" k="52" />
+<hkern u1="R" u2="Y" k="52" />
+<hkern u1="R" u2="V" k="20" />
+<hkern u1="R" u2="T" k="41" />
+<hkern u1="T" u2="&#xf8;" k="103" />
+<hkern u1="T" u2="&#xe6;" k="91" />
+<hkern u1="T" u2="&#xc6;" k="192" />
+<hkern u1="T" u2="&#xbb;" k="158" />
+<hkern u1="T" u2="&#xab;" k="160" />
+<hkern u1="T" u2="w" k="50" />
+<hkern u1="T" u2="r" k="70" />
+<hkern u1="V" u2="&#x7d;" k="-20" />
+<hkern u1="V" u2="r" k="32" />
+<hkern u1="V" u2="]" k="-18" />
+<hkern u1="V" u2="&#x29;" k="-21" />
+<hkern u1="W" u2="&#x7d;" k="-15" />
+<hkern u1="W" u2="r" k="22" />
+<hkern u1="W" u2="]" k="-13" />
+<hkern u1="W" u2="&#x29;" k="-16" />
+<hkern u1="Y" u2="&#x2022;" k="73" />
+<hkern u1="Y" u2="&#xf8;" k="76" />
+<hkern u1="Y" u2="&#xe6;" k="75" />
+<hkern u1="Y" u2="&#xc6;" k="114" />
+<hkern u1="Y" u2="&#xbb;" k="55" />
+<hkern u1="Y" u2="&#xab;" k="99" />
+<hkern u1="Y" u2="&#x7d;" k="-20" />
+<hkern u1="Y" u2="t" k="27" />
+<hkern u1="Y" u2="r" k="50" />
+<hkern u1="Y" u2="f" k="30" />
+<hkern u1="Y" u2="]" k="-19" />
+<hkern u1="Y" u2="&#x2a;" k="67" />
+<hkern u1="Y" u2="&#x29;" k="-21" />
+<hkern u1="Y" u2="&#x26;" k="42" />
+<hkern u1="Z" u2="w" k="29" />
+<hkern u1="[" u2="&#xdc;" k="19" />
+<hkern u1="[" u2="&#xdb;" k="19" />
+<hkern u1="[" u2="&#xda;" k="19" />
+<hkern u1="[" u2="&#xd9;" k="19" />
+<hkern u1="[" u2="U" k="19" />
+<hkern u1="[" u2="J" k="19" />
+<hkern u1="f" u2="&#x201d;" k="-24" />
+<hkern u1="f" u2="&#x201c;" k="-24" />
+<hkern u1="f" u2="&#x2019;" k="-24" />
+<hkern u1="f" u2="&#x2018;" k="-24" />
+<hkern u1="f" u2="&#x7d;" k="-27" />
+<hkern u1="f" u2="]" k="-40" />
+<hkern u1="f" u2="&#x29;" k="-35" />
+<hkern u1="f" u2="&#x27;" k="-24" />
+<hkern u1="f" u2="&#x22;" k="-24" />
+<hkern u1="k" u2="&#x153;" k="21" />
+<hkern u1="k" u2="&#xeb;" k="21" />
+<hkern u1="k" u2="&#xea;" k="21" />
+<hkern u1="k" u2="&#xe9;" k="21" />
+<hkern u1="k" u2="&#xe8;" k="21" />
+<hkern u1="k" u2="&#xe7;" k="21" />
+<hkern u1="k" u2="q" k="21" />
+<hkern u1="k" u2="g" k="21" />
+<hkern u1="k" u2="e" k="21" />
+<hkern u1="k" u2="d" k="21" />
+<hkern u1="k" u2="c" k="21" />
+<hkern u1="r" u2="w" k="-21" />
+<hkern u1="r" u2="t" k="-21" />
+<hkern u1="r" u2="f" k="-19" />
+<hkern u1="v" u2="f" k="-14" />
+<hkern u1="w" u2="&#x2026;" k="99" />
+<hkern u1="w" u2="&#x201e;" k="99" />
+<hkern u1="w" u2="&#x201a;" k="99" />
+<hkern u1="w" u2="&#x3a;" k="99" />
+<hkern u1="w" u2="&#x2e;" k="99" />
+<hkern u1="w" u2="&#x2c;" k="99" />
+<hkern u1="y" u2="f" k="-14" />
+<hkern u1="&#x7b;" u2="&#xdc;" k="21" />
+<hkern u1="&#x7b;" u2="&#xdb;" k="21" />
+<hkern u1="&#x7b;" u2="&#xda;" k="21" />
+<hkern u1="&#x7b;" u2="&#xd9;" k="21" />
+<hkern u1="&#x7b;" u2="U" k="21" />
+<hkern u1="&#x7b;" u2="J" k="21" />
+<hkern u1="&#xc0;" u2="w" k="35" />
+<hkern u1="&#xc0;" u2="t" k="18" />
+<hkern u1="&#xc0;" u2="&#x3f;" k="79" />
+<hkern u1="&#xc1;" u2="w" k="35" />
+<hkern u1="&#xc1;" u2="t" k="18" />
+<hkern u1="&#xc1;" u2="&#x3f;" k="79" />
+<hkern u1="&#xc2;" u2="w" k="35" />
+<hkern u1="&#xc2;" u2="t" k="18" />
+<hkern u1="&#xc2;" u2="&#x3f;" k="79" />
+<hkern u1="&#xc3;" u2="w" k="35" />
+<hkern u1="&#xc3;" u2="t" k="18" />
+<hkern u1="&#xc3;" u2="&#x3f;" k="79" />
+<hkern u1="&#xc4;" u2="w" k="35" />
+<hkern u1="&#xc4;" u2="t" k="18" />
+<hkern u1="&#xc4;" u2="&#x3f;" k="79" />
+<hkern u1="&#xc5;" u2="w" k="35" />
+<hkern u1="&#xc5;" u2="t" k="18" />
+<hkern u1="&#xc5;" u2="&#x3f;" k="79" />
+<hkern u1="&#xc7;" u2="&#x29;" k="28" />
+<hkern u1="&#xc8;" u2="w" k="23" />
+<hkern u1="&#xc9;" u2="w" k="23" />
+<hkern u1="&#xca;" u2="w" k="23" />
+<hkern u1="&#xcb;" u2="w" k="23" />
+<hkern u1="&#xd0;" u2="&#xc6;" k="46" />
+<hkern u1="&#xd2;" u2="&#xc6;" k="46" />
+<hkern u1="&#xd3;" u2="&#xc6;" k="46" />
+<hkern u1="&#xd4;" u2="&#xc6;" k="46" />
+<hkern u1="&#xd5;" u2="&#xc6;" k="46" />
+<hkern u1="&#xd6;" u2="&#xc6;" k="46" />
+<hkern u1="&#xdd;" u2="&#x2022;" k="73" />
+<hkern u1="&#xdd;" u2="&#xf8;" k="76" />
+<hkern u1="&#xdd;" u2="&#xe6;" k="75" />
+<hkern u1="&#xdd;" u2="&#xc6;" k="114" />
+<hkern u1="&#xdd;" u2="&#xbb;" k="55" />
+<hkern u1="&#xdd;" u2="&#xab;" k="99" />
+<hkern u1="&#xdd;" u2="&#x7d;" k="-20" />
+<hkern u1="&#xdd;" u2="t" k="27" />
+<hkern u1="&#xdd;" u2="r" k="50" />
+<hkern u1="&#xdd;" u2="f" k="30" />
+<hkern u1="&#xdd;" u2="]" k="-19" />
+<hkern u1="&#xdd;" u2="&#x2a;" k="67" />
+<hkern u1="&#xdd;" u2="&#x29;" k="-21" />
+<hkern u1="&#xdd;" u2="&#x26;" k="42" />
+<hkern u1="&#xfd;" u2="f" k="-14" />
+<hkern u1="&#xff;" u2="f" k="-14" />
+<hkern u1="&#x178;" u2="&#x2022;" k="73" />
+<hkern u1="&#x178;" u2="&#xf8;" k="76" />
+<hkern u1="&#x178;" u2="&#xe6;" k="75" />
+<hkern u1="&#x178;" u2="&#xc6;" k="114" />
+<hkern u1="&#x178;" u2="&#xbb;" k="55" />
+<hkern u1="&#x178;" u2="&#xab;" k="99" />
+<hkern u1="&#x178;" u2="&#x7d;" k="-20" />
+<hkern u1="&#x178;" u2="t" k="27" />
+<hkern u1="&#x178;" u2="r" k="50" />
+<hkern u1="&#x178;" u2="f" k="30" />
+<hkern u1="&#x178;" u2="]" k="-19" />
+<hkern u1="&#x178;" u2="&#x2a;" k="67" />
+<hkern u1="&#x178;" u2="&#x29;" k="-21" />
+<hkern u1="&#x178;" u2="&#x26;" k="42" />
+<hkern u1="&#x2018;" u2="w" k="-11" />
+<hkern u1="&#x2019;" u2="w" k="-11" />
+<hkern u1="&#x201c;" u2="w" k="-11" />
+<hkern u1="&#x201d;" u2="w" k="-11" />
+<hkern g1="comma,period,colon,quotesinglbase,quotedblbase,ellipsis" 	g2="quotedbl,quotesingle,quoteleft,quoteright,quotedblleft,quotedblright" 	k="285" />
+<hkern g1="B" 	g2="T" 	k="29" />
+<hkern g1="B" 	g2="V" 	k="26" />
+<hkern g1="B" 	g2="Y,Yacute,Ydieresis" 	k="90" />
+<hkern g1="C,Ccedilla" 	g2="T" 	k="31" />
+<hkern g1="D,O,Eth,Ograve,Oacute,Ocircumflex,Otilde,Odieresis" 	g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" 	k="22" />
+<hkern g1="D,O,Eth,Ograve,Oacute,Ocircumflex,Otilde,Odieresis" 	g2="T" 	k="29" />
+<hkern g1="D,O,Eth,Ograve,Oacute,Ocircumflex,Otilde,Odieresis" 	g2="V" 	k="23" />
+<hkern g1="D,O,Eth,Ograve,Oacute,Ocircumflex,Otilde,Odieresis" 	g2="Y,Yacute,Ydieresis" 	k="46" />
+<hkern g1="D,O,Eth,Ograve,Oacute,Ocircumflex,Otilde,Odieresis" 	g2="comma,period,colon,quotesinglbase,quotedblbase,ellipsis" 	k="106" />
+<hkern g1="D,O,Eth,Ograve,Oacute,Ocircumflex,Otilde,Odieresis" 	g2="X" 	k="23" />
+<hkern g1="D,O,Eth,Ograve,Oacute,Ocircumflex,Otilde,Odieresis" 	g2="Z" 	k="24" />
+<hkern g1="E,Egrave,Eacute,Ecircumflex,Edieresis" 	g2="c,d,e,g,q,ccedilla,egrave,eacute,ecircumflex,edieresis,oe" 	k="16" />
+<hkern g1="E,Egrave,Eacute,Ecircumflex,Edieresis" 	g2="o,ograve,oacute,ocircumflex,otilde,odieresis" 	k="20" />
+<hkern g1="E,Egrave,Eacute,Ecircumflex,Edieresis" 	g2="T" 	k="-20" />
+<hkern g1="E,Egrave,Eacute,Ecircumflex,Edieresis" 	g2="u,ugrave,uacute,ucircumflex,udieresis" 	k="18" />
+<hkern g1="E,Egrave,Eacute,Ecircumflex,Edieresis" 	g2="v,y,yacute,ydieresis" 	k="28" />
+<hkern g1="J,U,Ugrave,Uacute,Ucircumflex,Udieresis" 	g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" 	k="23" />
+<hkern g1="K" 	g2="c,d,e,g,q,ccedilla,egrave,eacute,ecircumflex,edieresis,oe" 	k="28" />
+<hkern g1="K" 	g2="o,ograve,oacute,ocircumflex,otilde,odieresis" 	k="29" />
+<hkern g1="K" 	g2="u,ugrave,uacute,ucircumflex,udieresis" 	k="24" />
+<hkern g1="K" 	g2="v,y,yacute,ydieresis" 	k="43" />
+<hkern g1="K" 	g2="hyphen,uni00AD,endash,emdash" 	k="166" />
+<hkern g1="K" 	g2="C,G,O,Q,Ccedilla,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" 	k="43" />
+<hkern g1="L" 	g2="quotedbl,quotesingle,quoteleft,quoteright,quotedblleft,quotedblright" 	k="276" />
+<hkern g1="L" 	g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" 	k="-20" />
+<hkern g1="L" 	g2="T" 	k="208" />
+<hkern g1="L" 	g2="V" 	k="210" />
+<hkern g1="L" 	g2="Y,Yacute,Ydieresis" 	k="273" />
+<hkern g1="L" 	g2="u,ugrave,uacute,ucircumflex,udieresis" 	k="15" />
+<hkern g1="L" 	g2="v,y,yacute,ydieresis" 	k="131" />
+<hkern g1="L" 	g2="C,G,O,Q,Ccedilla,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" 	k="41" />
+<hkern g1="L" 	g2="U,Ugrave,Uacute,Ucircumflex,Udieresis" 	k="26" />
+<hkern g1="L" 	g2="W" 	k="104" />
+<hkern g1="P" 	g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" 	k="173" />
+<hkern g1="P" 	g2="a,agrave,aacute,acircumflex,atilde,adieresis,aring" 	k="11" />
+<hkern g1="P" 	g2="c,d,e,g,q,ccedilla,egrave,eacute,ecircumflex,edieresis,oe" 	k="14" />
+<hkern g1="P" 	g2="o,ograve,oacute,ocircumflex,otilde,odieresis" 	k="14" />
+<hkern g1="P" 	g2="comma,period,colon,quotesinglbase,quotedblbase,ellipsis" 	k="393" />
+<hkern g1="P" 	g2="X" 	k="63" />
+<hkern g1="P" 	g2="Z" 	k="37" />
+<hkern g1="P" 	g2="v,y,yacute,ydieresis" 	k="-16" />
+<hkern g1="T" 	g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" 	k="105" />
+<hkern g1="T" 	g2="a,agrave,aacute,acircumflex,atilde,adieresis,aring" 	k="89" />
+<hkern g1="T" 	g2="c,d,e,g,q,ccedilla,egrave,eacute,ecircumflex,edieresis,oe" 	k="96" />
+<hkern g1="T" 	g2="m,n,p,ntilde" 	k="86" />
+<hkern g1="T" 	g2="o,ograve,oacute,ocircumflex,otilde,odieresis" 	k="85" />
+<hkern g1="T" 	g2="s" 	k="82" />
+<hkern g1="T" 	g2="T" 	k="-17" />
+<hkern g1="T" 	g2="V" 	k="-17" />
+<hkern g1="T" 	g2="Y,Yacute,Ydieresis" 	k="-17" />
+<hkern g1="T" 	g2="comma,period,colon,quotesinglbase,quotedblbase,ellipsis" 	k="232" />
+<hkern g1="T" 	g2="u,ugrave,uacute,ucircumflex,udieresis" 	k="70" />
+<hkern g1="T" 	g2="v,y,yacute,ydieresis" 	k="88" />
+<hkern g1="T" 	g2="hyphen,uni00AD,endash,emdash" 	k="238" />
+<hkern g1="T" 	g2="C,G,O,Q,Ccedilla,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" 	k="30" />
+<hkern g1="T" 	g2="W" 	k="-16" />
+<hkern g1="T" 	g2="S" 	k="17" />
+<hkern g1="T" 	g2="x" 	k="83" />
+<hkern g1="T" 	g2="z" 	k="65" />
+<hkern g1="V" 	g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" 	k="105" />
+<hkern g1="V" 	g2="a,agrave,aacute,acircumflex,atilde,adieresis,aring" 	k="49" />
+<hkern g1="V" 	g2="c,d,e,g,q,ccedilla,egrave,eacute,ecircumflex,edieresis,oe" 	k="47" />
+<hkern g1="V" 	g2="o,ograve,oacute,ocircumflex,otilde,odieresis" 	k="49" />
+<hkern g1="V" 	g2="comma,period,colon,quotesinglbase,quotedblbase,ellipsis" 	k="215" />
+<hkern g1="V" 	g2="u,ugrave,uacute,ucircumflex,udieresis" 	k="30" />
+<hkern g1="V" 	g2="v,y,yacute,ydieresis" 	k="11" />
+<hkern g1="V" 	g2="hyphen,uni00AD,endash,emdash" 	k="118" />
+<hkern g1="V" 	g2="C,G,O,Q,Ccedilla,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" 	k="21" />
+<hkern g1="W" 	g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" 	k="56" />
+<hkern g1="W" 	g2="a,agrave,aacute,acircumflex,atilde,adieresis,aring" 	k="35" />
+<hkern g1="W" 	g2="c,d,e,g,q,ccedilla,egrave,eacute,ecircumflex,edieresis,oe" 	k="33" />
+<hkern g1="W" 	g2="o,ograve,oacute,ocircumflex,otilde,odieresis" 	k="33" />
+<hkern g1="W" 	g2="T" 	k="-15" />
+<hkern g1="W" 	g2="comma,period,colon,quotesinglbase,quotedblbase,ellipsis" 	k="155" />
+<hkern g1="W" 	g2="u,ugrave,uacute,ucircumflex,udieresis" 	k="20" />
+<hkern g1="W" 	g2="hyphen,uni00AD,endash,emdash" 	k="79" />
+<hkern g1="X" 	g2="c,d,e,g,q,ccedilla,egrave,eacute,ecircumflex,edieresis,oe" 	k="28" />
+<hkern g1="X" 	g2="o,ograve,oacute,ocircumflex,otilde,odieresis" 	k="26" />
+<hkern g1="X" 	g2="V" 	k="-15" />
+<hkern g1="X" 	g2="u,ugrave,uacute,ucircumflex,udieresis" 	k="22" />
+<hkern g1="X" 	g2="v,y,yacute,ydieresis" 	k="40" />
+<hkern g1="X" 	g2="hyphen,uni00AD,endash,emdash" 	k="170" />
+<hkern g1="X" 	g2="C,G,O,Q,Ccedilla,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" 	k="30" />
+<hkern g1="Y,Yacute,Ydieresis" 	g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" 	k="154" />
+<hkern g1="Y,Yacute,Ydieresis" 	g2="a,agrave,aacute,acircumflex,atilde,adieresis,aring" 	k="78" />
+<hkern g1="Y,Yacute,Ydieresis" 	g2="c,d,e,g,q,ccedilla,egrave,eacute,ecircumflex,edieresis,oe" 	k="95" />
+<hkern g1="Y,Yacute,Ydieresis" 	g2="m,n,p,ntilde" 	k="57" />
+<hkern g1="Y,Yacute,Ydieresis" 	g2="o,ograve,oacute,ocircumflex,otilde,odieresis" 	k="102" />
+<hkern g1="Y,Yacute,Ydieresis" 	g2="s" 	k="87" />
+<hkern g1="Y,Yacute,Ydieresis" 	g2="T" 	k="-18" />
+<hkern g1="Y,Yacute,Ydieresis" 	g2="V" 	k="-19" />
+<hkern g1="Y,Yacute,Ydieresis" 	g2="Y,Yacute,Ydieresis" 	k="-19" />
+<hkern g1="Y,Yacute,Ydieresis" 	g2="comma,period,colon,quotesinglbase,quotedblbase,ellipsis" 	k="238" />
+<hkern g1="Y,Yacute,Ydieresis" 	g2="u,ugrave,uacute,ucircumflex,udieresis" 	k="56" />
+<hkern g1="Y,Yacute,Ydieresis" 	g2="v,y,yacute,ydieresis" 	k="21" />
+<hkern g1="Y,Yacute,Ydieresis" 	g2="hyphen,uni00AD,endash,emdash" 	k="142" />
+<hkern g1="Y,Yacute,Ydieresis" 	g2="C,G,O,Q,Ccedilla,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" 	k="31" />
+<hkern g1="Y,Yacute,Ydieresis" 	g2="U,Ugrave,Uacute,Ucircumflex,Udieresis" 	k="79" />
+<hkern g1="Y,Yacute,Ydieresis" 	g2="W" 	k="-18" />
+<hkern g1="Y,Yacute,Ydieresis" 	g2="S" 	k="17" />
+<hkern g1="Y,Yacute,Ydieresis" 	g2="x" 	k="28" />
+<hkern g1="Y,Yacute,Ydieresis" 	g2="z" 	k="35" />
+<hkern g1="Y,Yacute,Ydieresis" 	g2="J" 	k="125" />
+<hkern g1="Z" 	g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" 	k="-14" />
+<hkern g1="Z" 	g2="c,d,e,g,q,ccedilla,egrave,eacute,ecircumflex,edieresis,oe" 	k="22" />
+<hkern g1="Z" 	g2="o,ograve,oacute,ocircumflex,otilde,odieresis" 	k="22" />
+<hkern g1="Z" 	g2="u,ugrave,uacute,ucircumflex,udieresis" 	k="20" />
+<hkern g1="Z" 	g2="v,y,yacute,ydieresis" 	k="29" />
+<hkern g1="Z" 	g2="C,G,O,Q,Ccedilla,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" 	k="28" />
+<hkern g1="a,agrave,aacute,acircumflex,atilde,adieresis,aring" 	g2="quotedbl,quotesingle,quoteleft,quoteright,quotedblleft,quotedblright" 	k="32" />
+<hkern g1="a,agrave,aacute,acircumflex,atilde,adieresis,aring" 	g2="v,y,yacute,ydieresis" 	k="16" />
+<hkern g1="b,p,thorn" 	g2="quotedbl,quotesingle,quoteleft,quoteright,quotedblleft,quotedblright" 	k="38" />
+<hkern g1="b,p,thorn" 	g2="v,y,yacute,ydieresis" 	k="11" />
+<hkern g1="b,p,thorn" 	g2="x" 	k="16" />
+<hkern g1="b,p,thorn" 	g2="z" 	k="16" />
+<hkern g1="c,ccedilla" 	g2="quotedbl,quotesingle,quoteleft,quoteright,quotedblleft,quotedblright" 	k="25" />
+<hkern g1="e,egrave,eacute,ecircumflex,edieresis" 	g2="quotedbl,quotesingle,quoteleft,quoteright,quotedblleft,quotedblright" 	k="25" />
+<hkern g1="e,egrave,eacute,ecircumflex,edieresis" 	g2="v,y,yacute,ydieresis" 	k="14" />
+<hkern g1="h,m,n,ntilde" 	g2="quotedbl,quotesingle,quoteleft,quoteright,quotedblleft,quotedblright" 	k="34" />
+<hkern g1="o,ograve,oacute,ocircumflex,otilde,odieresis" 	g2="quotedbl,quotesingle,quoteleft,quoteright,quotedblleft,quotedblright" 	k="39" />
+<hkern g1="o,ograve,oacute,ocircumflex,otilde,odieresis" 	g2="v,y,yacute,ydieresis" 	k="16" />
+<hkern g1="o,ograve,oacute,ocircumflex,otilde,odieresis" 	g2="x" 	k="26" />
+<hkern g1="o,ograve,oacute,ocircumflex,otilde,odieresis" 	g2="z" 	k="17" />
+<hkern g1="r" 	g2="quotedbl,quotesingle,quoteleft,quoteright,quotedblleft,quotedblright" 	k="-17" />
+<hkern g1="r" 	g2="comma,period,colon,quotesinglbase,quotedblbase,ellipsis" 	k="160" />
+<hkern g1="r" 	g2="v,y,yacute,ydieresis" 	k="-22" />
+<hkern g1="v,y,yacute,ydieresis" 	g2="a,agrave,aacute,acircumflex,atilde,adieresis,aring" 	k="16" />
+<hkern g1="v,y,yacute,ydieresis" 	g2="c,d,e,g,q,ccedilla,egrave,eacute,ecircumflex,edieresis,oe" 	k="14" />
+<hkern g1="v,y,yacute,ydieresis" 	g2="o,ograve,oacute,ocircumflex,otilde,odieresis" 	k="16" />
+<hkern g1="v,y,yacute,ydieresis" 	g2="comma,period,colon,quotesinglbase,quotedblbase,ellipsis" 	k="154" />
+<hkern g1="x" 	g2="c,d,e,g,q,ccedilla,egrave,eacute,ecircumflex,edieresis,oe" 	k="21" />
+<hkern g1="x" 	g2="o,ograve,oacute,ocircumflex,otilde,odieresis" 	k="34" />
+<hkern g1="z" 	g2="c,d,e,g,q,ccedilla,egrave,eacute,ecircumflex,edieresis,oe" 	k="17" />
+<hkern g1="z" 	g2="o,ograve,oacute,ocircumflex,otilde,odieresis" 	k="17" />
+</font>
+</defs></svg> 
\ No newline at end of file
diff --git a/src/web/wwwroot/fonts/roboto/Roboto-Medium-webfont.ttf b/src/web/wwwroot/fonts/roboto/Roboto-Medium-webfont.ttf
new file mode 100755
index 0000000000000000000000000000000000000000..8aa64d8232a2aade0265729e59c00eaa5a1a76fb
Binary files /dev/null and b/src/web/wwwroot/fonts/roboto/Roboto-Medium-webfont.ttf differ
diff --git a/src/web/wwwroot/fonts/roboto/Roboto-Medium-webfont.woff b/src/web/wwwroot/fonts/roboto/Roboto-Medium-webfont.woff
new file mode 100755
index 0000000000000000000000000000000000000000..cd810ef929a3d666936e3b6a68c578b50024a732
Binary files /dev/null and b/src/web/wwwroot/fonts/roboto/Roboto-Medium-webfont.woff differ
diff --git a/src/web/wwwroot/fonts/roboto/Roboto-Regular-webfont.eot b/src/web/wwwroot/fonts/roboto/Roboto-Regular-webfont.eot
new file mode 100755
index 0000000000000000000000000000000000000000..9b5e8e4138917c9ca08e0004a0e8f509c40e7bcc
Binary files /dev/null and b/src/web/wwwroot/fonts/roboto/Roboto-Regular-webfont.eot differ
diff --git a/src/web/wwwroot/fonts/roboto/Roboto-Regular-webfont.svg b/src/web/wwwroot/fonts/roboto/Roboto-Regular-webfont.svg
new file mode 100755
index 0000000000000000000000000000000000000000..de7d77fea505d4d106e719fc69a6aeb57993acce
--- /dev/null
+++ b/src/web/wwwroot/fonts/roboto/Roboto-Regular-webfont.svg
@@ -0,0 +1,621 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
+<svg xmlns="http://www.w3.org/2000/svg">
+<metadata></metadata>
+<defs>
+<font id="robotoregular" horiz-adv-x="1164" >
+<font-face units-per-em="2048" ascent="1638" descent="-410" />
+<missing-glyph horiz-adv-x="509" />
+<glyph unicode="&#xfb01;" horiz-adv-x="1140" d="M28 936v146h170v117q0 182 106.5 282t295.5 100q67 0 132 -15.5t153 -45.5l-34 -160q-53 21 -113 36t-123 15q-117 0 -168.5 -52t-51.5 -160v-117h215v-146h-215v-936h-197v936h-170zM783 0v1082h198v-1082h-198z" />
+<glyph horiz-adv-x="2048" />
+<glyph horiz-adv-x="2048" />
+<glyph unicode="&#xd;" horiz-adv-x="509" />
+<glyph unicode=" "  horiz-adv-x="509" />
+<glyph unicode="&#x09;" horiz-adv-x="509" />
+<glyph unicode="&#xa0;" horiz-adv-x="509" />
+<glyph unicode="!" horiz-adv-x="539" d="M171 0v204h198v-204h-198zM171 478v978h197v-978h-197z" />
+<glyph unicode="&#x22;" horiz-adv-x="668" d="M80 1040l1 240v280h197v-270l-101 -250h-97zM389 1040l1 248v272h197v-270l-101 -250h-97z" />
+<glyph unicode="#" horiz-adv-x="1276" d="M70 410v140h264l68 348h-256v142h284l82 416h151l-82 -416h255l82 416h151l-82 -416h199v-142h-226l-68 -348h219v-140h-247l-80 -410h-152l80 410h-255l-80 -410h-151l80 410h-236zM485 550h255l68 348h-255z" />
+<glyph unicode="$" horiz-adv-x="1153" d="M114 424l2 5h190q0 -154 77.5 -219.5t190.5 -65.5q129 0 201.5 61.5t72.5 170.5q0 89 -64 153t-210 114q-202 61 -305 163t-103 272q0 165 94.5 269t260.5 125v221h158v-222q168 -24 260.5 -143.5t92.5 -320.5h-196q0 136 -63 220t-175 84q-118 0 -176.5 -61.5 t-58.5 -168.5q0 -97 60.5 -157t218.5 -114q205 -66 304 -164.5t99 -267.5q0 -172 -103 -273.5t-283 -120.5v-192h-157v191q-172 18 -282 125.5t-106 315.5z" />
+<glyph unicode="%" horiz-adv-x="1498" d="M104 1099v77q0 127 82 214t219 87t219 -86.5t82 -214.5v-77q0 -127 -81.5 -213t-217.5 -86q-138 0 -220.5 86t-82.5 213zM250 1099q0 -74 40.5 -125.5t116.5 -51.5q73 0 113 51t40 126v77q0 74 -40.5 126.5t-114.5 52.5q-75 0 -115 -52.5t-40 -126.5v-77zM349 177 l711 1138l109 -67l-711 -1138zM809 279v78q0 127 82 213.5t219 86.5q136 0 218.5 -86.5t82.5 -213.5v-78q0 -128 -82 -214t-217 -86q-138 0 -220.5 86t-82.5 214zM955 279q0 -75 40.5 -126.5t116.5 -51.5q73 0 113 51.5t40 126.5v78q0 74 -41 126t-114 52q-74 0 -114.5 -52 t-40.5 -126v-78z" />
+<glyph unicode="&#x26;" horiz-adv-x="1276" d="M64 392q0 122 70.5 213.5t210.5 183.5q-78 99 -116 176.5t-38 159.5q0 169 97.5 260.5t268.5 91.5q158 0 257 -91t99 -219q0 -98 -52.5 -169.5t-155.5 -146.5l-109 -80l340 -409q41 65 64 144t23 167h176q0 -132 -39 -244t-113 -201l185 -223l-2 -5h-229l-85 102 q-80 -60 -177 -91.5t-201 -31.5q-217 0 -345.5 115t-128.5 298zM261 392q0 -113 71 -186t206 -73q72 0 142 24.5t132 70.5l-361 435l-40 -29q-91 -68 -120.5 -130t-29.5 -112zM388 1127q0 -53 27 -110.5t81 -125.5l138 95q57 38 77.5 82.5t20.5 98.5q0 61 -48.5 108 t-126.5 47q-81 0 -125 -56.5t-44 -138.5z" />
+<glyph unicode="'" horiz-adv-x="359" d="M80 1055l1 265v240h197v-223l-101 -282h-97z" />
+<glyph unicode="(" horiz-adv-x="679" d="M132 582v9q0 394 159 673t334 372l6 -1l38 -116q-137 -107 -238.5 -343t-101.5 -583v-13q0 -347 101 -583t239 -352l-38 -108h-6q-175 93 -334 371.5t-159 673.5z" />
+<glyph unicode=")" horiz-adv-x="687" d="M6 -355q135 105 237.5 345.5t102.5 589.5v13q0 342 -105.5 583.5t-234.5 351.5l38 108h6q174 -93 333.5 -372t159.5 -673v-9q0 -395 -159.5 -673.5t-333.5 -371.5h-6z" />
+<glyph unicode="*" horiz-adv-x="884" d="M28 1071l49 154l296 -111l-10 342h161l-10 -348l293 110l48 -156l-302 -89l193 -270l-131 -96l-181 287l-176 -279l-132 93l198 274z" />
+<glyph unicode="+" horiz-adv-x="1162" d="M78 605v178h402v423h197v-423h399v-178h-399v-459h-197v459h-402z" />
+<glyph unicode="," horiz-adv-x="404" d="M48 -258l70 316v163h197v-173l-150 -306h-117z" />
+<glyph unicode="-" horiz-adv-x="561" d="M35 538v154h490v-154h-490z" />
+<glyph unicode="." horiz-adv-x="548" d="M161 0v202h197v-202h-197z" />
+<glyph unicode="/" horiz-adv-x="850" d="M16 -125l608 1581h167l-607 -1581h-168z" />
+<glyph unicode="0" horiz-adv-x="1154" d="M113 555v345q0 278 124.5 427.5t338.5 149.5q215 0 339.5 -149.5t124.5 -427.5v-345q0 -279 -123.5 -427.5t-338.5 -148.5t-340 149t-125 427zM310 515q0 -189 69 -285.5t199 -96.5t197.5 96t67.5 286v427q0 189 -68.5 284.5t-198.5 95.5t-198 -95.5t-68 -284.5v-427z " />
+<glyph unicode="1" horiz-adv-x="1153" d="M186 1260v142l495 54v-1456h-197v1264z" />
+<glyph unicode="2" horiz-adv-x="1153" d="M97 1033q-5 188 125 316t360 128q196 0 312.5 -114.5t116.5 -291.5q0 -119 -70.5 -238.5t-197.5 -256.5l-383 -417l2 -5h700v-154h-944v135l477 530q128 143 173.5 227t45.5 172q0 109 -63.5 183.5t-168.5 74.5q-151 0 -222.5 -77.5t-71.5 -217.5h-189z" />
+<glyph unicode="3" horiz-adv-x="1153" d="M100 378l3 6h188q0 -115 70.5 -183t193.5 -68q125 0 196 68t71 201q0 135 -63 199t-199 64h-172v154h172q131 0 185.5 65.5t54.5 182.5q0 125 -62 190t-183 65q-115 0 -184.5 -67.5t-69.5 -179.5h-189l-2 6q-5 165 119.5 280.5t325.5 115.5q202 0 322 -107.5t120 -306.5 q0 -90 -54.5 -179.5t-163.5 -136.5q131 -43 185.5 -135t54.5 -206q0 -199 -130.5 -313t-333.5 -114q-199 0 -329.5 107.5t-125.5 291.5z" />
+<glyph unicode="4" horiz-adv-x="1153" d="M55 336v111l642 1009h208v-966h201v-154h-201v-336h-196v336h-654zM265 490h444v683l-6 1l-19 -50z" />
+<glyph unicode="5" horiz-adv-x="1153" d="M157 377l2 6h178q0 -119 68.5 -184.5t177.5 -65.5q125 0 194 88t69 241q0 140 -70 230t-193 90q-116 0 -168 -35t-76 -107l-164 17l84 799h729v-175h-562l-48 -409q46 34 102.5 56.5t130.5 24.5q201 2 316.5 -131t115.5 -358q0 -219 -117.5 -352t-342.5 -133 q-185 0 -308 101t-118 297z" />
+<glyph unicode="6" horiz-adv-x="1153" d="M132 571v278q0 280 156 454t387 174q75 0 148.5 -17t121.5 -43l-42 -151q-49 25 -102.5 40.5t-125.5 15.5q-156 0 -251.5 -125t-95.5 -326v-23q64 56 146.5 87.5t177.5 31.5q195 0 311 -135t116 -342q0 -226 -123.5 -368.5t-329.5 -142.5q-214 0 -354 155t-140 437z M328 552q0 -201 85 -310t213 -109q121 0 188.5 102.5t67.5 254.5q0 144 -72.5 237t-201.5 93q-101 0 -172 -41t-108 -109v-118z" />
+<glyph unicode="7" horiz-adv-x="1153" d="M77 1301v155h985v-155q-264 -314 -356.5 -556.5t-133.5 -587.5l-16 -157h-197l16 157q42 344 163 615t331 529h-792z" />
+<glyph unicode="8" horiz-adv-x="1153" d="M102 394q0 123 74 217t200 138q-109 42 -171 127.5t-62 199.5q0 192 118.5 296.5t313.5 104.5q192 0 313.5 -104.5t121.5 -296.5q0 -114 -64 -199.5t-173 -127.5q126 -44 201.5 -138t75.5 -217q0 -202 -131.5 -308.5t-341.5 -106.5q-214 0 -344.5 106.5t-130.5 308.5z M299 398q0 -124 76 -194.5t202 -70.5q123 0 200 71t77 194q0 120 -79 197t-200 77q-123 0 -199.5 -77t-76.5 -197zM340 1072q0 -111 65.5 -178t171.5 -67q104 0 170 67t66 178q0 108 -67.5 179t-170.5 71q-105 0 -170 -68.5t-65 -181.5z" />
+<glyph unicode="9" horiz-adv-x="1153" d="M83 978q0 219 131.5 359t319.5 140q228 0 359.5 -142.5t131.5 -419.5v-347q0 -285 -142.5 -437t-371.5 -152q-77 0 -156.5 14.5t-142.5 44.5l30 151q59 -31 122.5 -43.5t146.5 -12.5q144 0 230.5 109t86.5 324v66q-49 -71 -122.5 -107.5t-163.5 -36.5q-211 0 -335 130.5 t-124 359.5zM280 978q0 -150 70.5 -243t191.5 -93q109 0 181.5 47t104.5 120v126q0 191 -73.5 289t-214.5 98q-108 0 -184 -96.5t-76 -247.5z" />
+<glyph unicode=":" horiz-adv-x="517" d="M161 0v202h197v-202h-197zM161 876v202h197v-202h-197z" />
+<glyph unicode=";" horiz-adv-x="525" d="M99 -258l70 316v163h197v-173l-150 -306h-117zM162 876v202h197v-202h-197z" />
+<glyph unicode="&#x3c;" horiz-adv-x="1040" d="M71 466v149l816 378v-201l-559 -233l-85 -18v-6l85 -19l559 -228v-201z" />
+<glyph unicode="=" horiz-adv-x="1153" d="M152 407v164h834v-164h-834zM152 823v164h834v-164h-834z" />
+<glyph unicode="&#x3e;" horiz-adv-x="1072" d="M136 87v196l598 238l85 17v6l-85 20l-598 234v195l856 -378v-149z" />
+<glyph unicode="?" horiz-adv-x="974" d="M61 1122q-3 161 113.5 258t296.5 97q197 0 306 -100.5t109 -280.5q0 -129 -70.5 -236t-186.5 -219q-54 -54 -65.5 -97t-11.5 -134h-197q1 145 25 201t126 148q99 117 141 180t42 152q0 106 -56.5 163t-161.5 57q-91 0 -155 -49.5t-64 -145.5h-188zM353 0v208h206v-208 h-206z" />
+<glyph unicode="@" horiz-adv-x="1833" d="M114 478q19 423 249 688t602 265q379 0 581.5 -250t185.5 -679q-9 -214 -120 -368.5t-332 -154.5q-73 0 -126 41.5t-76 117.5q-50 -80 -122 -119.5t-168 -39.5q-125 0 -194 120.5t-51 316.5q23 259 137.5 415.5t279.5 156.5q105 0 169 -26t139 -80l-4 -4h6l-51 -585 q-9 -110 21.5 -151.5t81.5 -41.5q123 0 197 113.5t82 288.5q16 382 -144 595.5t-496 213.5q-308 0 -495.5 -231t-202.5 -602q-18 -376 150 -594.5t482 -218.5q88 0 178.5 21.5t152.5 56.5l38 -107q-67 -42 -170.5 -65.5t-202.5 -23.5q-380 0 -587.5 249.5t-189.5 681.5z M720 416q-11 -142 21.5 -216t106.5 -74q64 0 117 24.5t97 87.5q-1 12 -0.5 25.5t2.5 29.5l47 538q-26 12 -54.5 19t-59.5 7q-125 0 -191 -109.5t-86 -331.5z" />
+<glyph unicode="A" horiz-adv-x="1326" d="M20 0l563 1456h169l554 -1456h-201l-136 375h-610l-138 -375h-201zM420 540h490l-240 663h-6z" />
+<glyph unicode="B" horiz-adv-x="1309" d="M180 0v1456h475q228 0 357 -98.5t129 -295.5q0 -97 -62 -173.5t-163 -113.5q132 -28 207.5 -129t75.5 -235q0 -200 -129.5 -305.5t-351.5 -105.5h-538zM377 154h341q134 0 209 66.5t75 188.5q0 128 -62.5 201t-192.5 73h-370v-529zM377 837h319q110 0 179 60.5t69 168.5 q0 118 -74.5 176.5t-214.5 58.5h-278v-464z" />
+<glyph unicode="C" horiz-adv-x="1297" d="M118 598v259q0 269 155.5 444.5t402.5 175.5q247 1 393 -131q142 -128 142 -337v-12l-2 -6h-189q0 153 -90 242t-254 89q-165 0 -263 -133t-98 -330v-261q0 -199 98 -332t263 -133q164 0 254 88.5t90 244.5h189l2 -6v-11q0 -198 -144 -332q-148 -138 -391 -138 q-247 0 -402.5 175t-155.5 444z" />
+<glyph unicode="D" horiz-adv-x="1349" d="M180 0v1456h447q286 0 459 -175.5t173 -453.5v-199q0 -279 -173 -453.5t-459 -174.5h-447zM377 154h250q202 0 318.5 133t116.5 341v201q0 206 -116.5 339t-318.5 133h-250v-1147z" />
+<glyph unicode="E" horiz-adv-x="1197" d="M180 0v1456h955v-155h-758v-471h667v-155h-667v-521h769v-154h-966z" />
+<glyph unicode="F" horiz-adv-x="1193" d="M180 0v1456h963v-155h-766v-502h664v-155h-664v-644h-197z" />
+<glyph unicode="G" horiz-adv-x="1396" d="M120 578v300q0 265 159 432t410 167q250 0 393 -123t146 -317l-2 -6h-188q-9 127 -96.5 209t-252.5 82q-167 0 -269 -125t-102 -317v-302q0 -194 114 -319.5t290 -125.5q124 0 203 33t113 75v331h-319v155h516v-534q-52 -80 -180.5 -147t-332.5 -67q-261 0 -431.5 167 t-170.5 432z" />
+<glyph unicode="H" horiz-adv-x="1461" d="M180 0v1456h197v-658h707v658h197v-1456h-197v643h-707v-643h-197z" />
+<glyph unicode="I" horiz-adv-x="579" d="M190 0v1456h198v-1456h-198z" />
+<glyph unicode="J" horiz-adv-x="1130" d="M66 395l2 6h189q0 -135 68.5 -201.5t193.5 -66.5q109 0 178 73.5t69 196.5v1053h197v-1053q0 -195 -123.5 -309.5t-320.5 -114.5q-210 0 -334 107q-119 102 -119 293v16z" />
+<glyph unicode="K" horiz-adv-x="1317" d="M180 0v1456h197v-644h152l521 644h218l3 -5l-565 -699l606 -747l-3 -5h-235l-527 657h-170v-657h-197z" />
+<glyph unicode="L" horiz-adv-x="1106" d="M180 0v1456h197v-1302h689v-154h-886z" />
+<glyph unicode="M" horiz-adv-x="1799" d="M180 0v1456h252l464 -1183h6l464 1183h252v-1456h-197v576l20 592l-5 1l-472 -1169h-131l-470 1166l-5 -1l19 -589v-576h-197z" />
+<glyph unicode="N" horiz-adv-x="1461" d="M180 0v1456h197l701 -1124l6 2v1122h197v-1456h-197l-701 1126l-6 -2v-1124h-197z" />
+<glyph unicode="O" horiz-adv-x="1396" d="M113 598v259q0 266 159.5 443t414.5 177q264 0 429.5 -176.5t165.5 -443.5v-259q0 -267 -165.5 -443t-429.5 -176q-255 0 -414.5 176t-159.5 443zM310 598q0 -202 102.5 -330t274.5 -128q183 0 290.5 127.5t107.5 330.5v261q0 200 -108 328t-290 128q-172 0 -274.5 -128 t-102.5 -328v-261z" />
+<glyph unicode="P" horiz-adv-x="1312" d="M180 0v1456h557q233 0 362 -120t129 -316q0 -199 -129 -317.5t-362 -118.5h-360v-584h-197zM377 738h360q148 0 221 79.5t73 200.5t-73.5 202t-220.5 81h-360v-563z" />
+<glyph unicode="Q" horiz-adv-x="1396" d="M113 598v259q0 266 159.5 443t414.5 177q264 0 429.5 -176.5t165.5 -443.5v-259q0 -142 -50 -263t-140 -205l247 -233l-135 -129l-276 257q-56 -23 -116.5 -34.5t-124.5 -11.5q-255 0 -414.5 176t-159.5 443zM310 598q0 -202 102.5 -330t274.5 -128q183 0 290.5 127.5 t107.5 330.5v261q0 200 -108 328t-290 128q-172 0 -274.5 -128t-102.5 -328v-261z" />
+<glyph unicode="R" horiz-adv-x="1357" d="M180 0v1455h527q239 0 365 -106t126 -308q0 -112 -58.5 -195t-170.5 -132q120 -39 172.5 -126.5t52.5 -216.5v-137q0 -68 15 -122t52 -88v-24h-203q-39 34 -50 100t-11 136v133q0 118 -69 190t-185 72h-366v-631h-197zM377 786h310q167 0 240.5 63.5t73.5 193.5 q0 123 -71.5 190.5t-222.5 67.5h-330v-515z" />
+<glyph unicode="S" horiz-adv-x="1277" d="M102 413l2 6h188q0 -140 103 -213t255 -73q149 0 236 63t87 171q0 100 -75 167.5t-266 113.5q-231 55 -360.5 162t-129.5 269q0 170 139.5 284t361.5 114q239 0 381 -131q137 -127 136 -292v-12l-2 -6h-188q0 128 -84.5 207t-242.5 79q-147 0 -225.5 -66.5t-78.5 -173.5 q0 -95 85 -158.5t276 -111.5q230 -57 350 -168t120 -275q0 -176 -144 -283t-376 -107q-218 0 -386 118q-163 115 -162 305v11z" />
+<glyph unicode="T" horiz-adv-x="1200" d="M34 1301v155h1132v-155h-468v-1301h-197v1301h-467z" />
+<glyph unicode="U" horiz-adv-x="1386" d="M147 469v987h197v-987q0 -165 94 -250.5t248 -85.5q162 0 261.5 85.5t99.5 250.5v987h197v-987q0 -238 -154.5 -364t-403.5 -126q-240 0 -389.5 126.5t-149.5 363.5z" />
+<glyph unicode="V" horiz-adv-x="1295" d="M22 1456h214l376 -1094l33 -115h6l33 115l376 1094h213l-541 -1456h-169z" />
+<glyph unicode="W" horiz-adv-x="1809" d="M54 1456h196l222 -952l27 -182l6 -1l39 183l267 952h174l269 -952l40 -187h6l29 187l217 952h197l-351 -1456h-176l-287 1010l-26 131h-6l-25 -131l-292 -1010h-176z" />
+<glyph unicode="X" horiz-adv-x="1295" d="M66 0l472 734l-462 722h236l338 -568l340 568h238l-462 -722l472 -734h-235l-349 578l-350 -578h-238z" />
+<glyph unicode="Y" horiz-adv-x="1250" d="M20 1456h225l380 -740l380 740h225l-511 -944v-512h-196v525z" />
+<glyph unicode="Z" horiz-adv-x="1225" d="M97 0v146l778 1155h-767v155h992v-141l-781 -1161h814v-154h-1036z" />
+<glyph unicode="[" horiz-adv-x="552" d="M143 -312v1976h385v-155h-188v-1666h188v-155h-385z" />
+<glyph unicode="\" horiz-adv-x="846" d="M39 1456h186l608 -1581h-186z" />
+<glyph unicode="]" horiz-adv-x="552" d="M11 -157h189v1666h-189v155h386v-1976h-386v155z" />
+<glyph unicode="^" horiz-adv-x="856" d="M61 729l299 727h134l298 -727h-181l-166 419l-16 70h-6l-16 -70l-163 -419h-183z" />
+<glyph unicode="_" horiz-adv-x="931" d="M4 0h923v-154h-923v154z" />
+<glyph unicode="`" horiz-adv-x="641" d="M82 1471l3 6h230l175 -266h-158z" />
+<glyph unicode="a" horiz-adv-x="1126" d="M106 304q0 155 125.5 242.5t340.5 87.5h214v107q0 95 -58 150.5t-164 55.5q-95 0 -154.5 -48.5t-59.5 -116.5h-188l-2 6v11q0 111 112 205q118 98 303 98q184 0 296 -93.5t112 -269.5v-521q0 -58 6 -112t22 -106h-203q-10 49 -15.5 86.5t-6.5 75.5q-55 -78 -143.5 -130.5 t-190.5 -52.5q-169 0 -257.5 86.5t-88.5 238.5zM303 300q0 -72 45 -114t133 -42q107 0 193 55t112 126v176h-221q-119 0 -190.5 -60t-71.5 -141z" />
+<glyph unicode="b" d="M143 0v1560h197v-606q51 72 126.5 110t176.5 38q200 0 312 -160t112 -421v-21q0 -234 -112.5 -377.5t-309.5 -143.5q-107 0 -186 41.5t-131 122.5l-24 -143h-161zM340 309q38 -80 99.5 -125t155.5 -45q139 0 207 99t68 262v21q0 186 -68.5 303.5t-208.5 117.5 q-91 0 -153.5 -44.5t-99.5 -119.5v-469z" />
+<glyph unicode="c" horiz-adv-x="1087" d="M97 520v42q0 231 125.5 385.5t360.5 154.5q191 0 311 -112q117 -108 116 -265v-10l-2 -6h-178q0 99 -70 168.5t-177 69.5q-155 0 -221.5 -111.5t-66.5 -273.5v-42q0 -166 66 -276.5t222 -110.5q98 0 172.5 60.5t74.5 148.5h177l2 -6v-10q-1 -134 -125 -238 q-130 -108 -301 -109q-236 0 -361 154t-125 387z" />
+<glyph unicode="d" d="M98 500v21q0 261 111.5 421t312.5 160q95 0 168.5 -35t125.5 -102v595h197v-1560h-161l-23 133q-53 -76 -130 -115t-179 -39q-198 0 -310 143.5t-112 377.5zM295 500q0 -164 67 -262.5t208 -98.5q88 0 148 40t98 112v505q-38 67 -98.5 106.5t-145.5 39.5 q-142 0 -209.5 -117t-67.5 -304v-21z" />
+<glyph unicode="e" horiz-adv-x="1083" d="M99 520v44q0 231 137.5 384.5t325.5 153.5q219 0 331 -132t112 -352v-123h-702l-3 -5q3 -156 79 -256.5t213 -100.5q100 0 175.5 28.5t130.5 78.5l77 -128q-58 -57 -153 -95t-230 -38q-226 0 -359.5 150.5t-133.5 390.5zM307 654l2 -5h499v26q0 116 -62 194t-184 78 q-99 0 -169 -83.5t-86 -209.5z" />
+<glyph unicode="f" horiz-adv-x="707" d="M56 936v146h169v137q0 173 90.5 267.5t252.5 94.5q34 0 68.5 -5.5t76.5 -15.5l-24 -150q-18 4 -43.5 7t-53.5 3q-86 0 -128 -51.5t-42 -149.5v-137h225v-146h-225v-936h-197v936h-169z" />
+<glyph unicode="g" d="M100 500v21q0 261 114 421t315 160q103 0 181 -41.5t130 -119.5l24 141h157v-1088q0 -208 -121 -319.5t-349 -111.5q-78 0 -168.5 21.5t-159.5 58.5l50 153q53 -30 128 -48.5t148 -18.5q144 0 209.5 65.5t65.5 199.5v122q-53 -68 -127 -102.5t-170 -34.5q-199 0 -313 144 t-114 377zM297 500q0 -163 69 -262t210 -99q89 0 149 40.5t99 114.5v498q-38 69 -99 109.5t-147 40.5q-141 0 -211 -118t-70 -303v-21z" />
+<glyph unicode="h" d="M143 0v1560h197v-623q56 78 137.5 121.5t180.5 43.5q173 0 269.5 -104t96.5 -320v-678h-197v680q0 134 -57.5 198t-171.5 64q-82 0 -148.5 -38.5t-109.5 -104.5v-799h-197z" />
+<glyph unicode="i" horiz-adv-x="516" d="M159 0v1082h197v-1082h-197zM159 1359v201h197v-201h-197z" />
+<glyph unicode="j" horiz-adv-x="530" d="M-66 -419l14 155q14 -5 40 -8.5t43 -3.5q65 0 103.5 44t38.5 143v1171h197v-1171q0 -167 -86 -257.5t-239 -90.5q-31 0 -56.5 4.5t-54.5 13.5zM167 1363v197h197v-197h-197z" />
+<glyph unicode="k" horiz-adv-x="1050" d="M144 0v1560h197v-904h126l296 426h236l-370 -492l423 -590h-232l-351 499h-128v-499h-197z" />
+<glyph unicode="l" horiz-adv-x="516" d="M159 0v1560h197v-1560h-197z" />
+<glyph unicode="m" horiz-adv-x="1790" d="M143 0v1082h176l14 -142q53 77 134.5 119.5t189.5 42.5t185.5 -50t116.5 -150q51 92 135 146t196 54q165 0 261 -113.5t96 -341.5v-647h-197v649q0 160 -55 226.5t-164 66.5q-101 0 -163.5 -70t-73.5 -177v-8v-687h-198v649q0 152 -56.5 222.5t-162.5 70.5 q-90 0 -148 -37t-89 -104v-801h-197z" />
+<glyph unicode="n" d="M143 0v1082h176l14 -161q54 86 135.5 133.5t185.5 47.5q175 0 271 -102.5t96 -316.5v-683h-197v679q0 143 -56.5 203t-172.5 60q-85 0 -150.5 -41t-104.5 -112v-789h-197z" />
+<glyph unicode="o" d="M97 529v22q0 240 130 395.5t353 155.5q225 0 355.5 -155t130.5 -396v-22q0 -242 -130 -396t-354 -154t-354.5 154.5t-130.5 395.5zM294 529q0 -172 72.5 -284t215.5 -112q141 0 214 112t73 284v22q0 170 -73.5 283t-215.5 113q-141 0 -213.5 -113t-72.5 -283v-22z" />
+<glyph unicode="p" d="M143 -416v1498h151l31 -140q53 78 132 119t184 41q201 0 312.5 -159.5t111.5 -421.5v-21q0 -234 -112 -377.5t-309 -143.5q-100 0 -175.5 33.5t-128.5 100.5v-529h-197zM340 275q37 -67 97 -104.5t147 -37.5q140 0 212 102.5t72 264.5v21q0 184 -72.5 302.5t-213.5 118.5 q-85 0 -145 -38.5t-97 -105.5v-523z" />
+<glyph unicode="q" d="M98 500v21q0 261 111.5 421t312.5 160q99 0 174 -37.5t127 -109.5l29 127h150v-1498h-197v518q-52 -61 -123 -92t-162 -31q-198 0 -310 143.5t-112 377.5zM295 500q0 -164 67.5 -265.5t207.5 -101.5q81 0 138.5 36t96.5 101v546q-39 61 -96.5 96t-136.5 35 q-141 0 -209 -119.5t-68 -306.5v-21z" />
+<glyph unicode="r" horiz-adv-x="702" d="M143 0v1082h176l19 -158q46 84 113.5 131t155.5 47q22 0 42 -3.5t33 -7.5l-27 -183l-101 6q-78 0 -131.5 -37t-82.5 -104v-773h-197z" />
+<glyph unicode="s" horiz-adv-x="1071" d="M109 329l2 6h188q5 -105 78 -153.5t171 -48.5q105 0 164.5 42.5t59.5 111.5q0 65 -49.5 107t-187.5 73q-197 43 -296.5 116.5t-99.5 200.5q0 132 112 225t292 93q189 0 301 -97q107 -93 106 -224v-12l-2 -6h-188q0 71 -59.5 127.5t-157.5 56.5q-105 0 -156 -46t-51 -111 q0 -64 45 -101t183 -66q205 -44 305 -119.5t100 -202.5q0 -144 -116.5 -233t-304.5 -89q-207 0 -326 105q-113 100 -113 232v13z" />
+<glyph unicode="t" horiz-adv-x="708" d="M34 936v146h172v261h197v-261h205v-146h-205v-657q0 -76 31.5 -107t83.5 -31q17 0 37.5 4t36.5 10l26 -135q-22 -18 -64.5 -29.5t-85.5 -11.5q-120 0 -191 72.5t-71 227.5v657h-172z" />
+<glyph unicode="u" d="M139 444v638h197v-640q0 -173 51 -238t159 -65q105 0 173.5 42.5t103.5 120.5v780h197v-1082h-177l-13 160q-51 -87 -131 -134t-185 -47q-177 0 -276 113t-99 352z" />
+<glyph unicode="v" horiz-adv-x="1030" d="M46 1082h202l256 -763l17 -76h6l19 76l249 763h201l-398 -1082h-149z" />
+<glyph unicode="w" horiz-adv-x="1550" d="M45 1082h196l179 -688l23 -131h6l28 131l216 688h158l217 -688l31 -146h6l29 146l170 688h196l-314 -1082h-159l-209 659l-45 184l-6 -1l-43 -183l-206 -659h-159z" />
+<glyph unicode="x" horiz-adv-x="1030" d="M46 0l361 547l-351 535h227l227 -399l230 399h230l-351 -535l361 -547h-226l-240 409l-240 -409h-228z" />
+<glyph unicode="y" horiz-adv-x="1030" d="M26 1082h220l228 -681l35 -136h6l266 817h219l-455 -1248q-41 -109 -117.5 -190t-206.5 -81q-24 0 -61 5.5t-57 10.5l20 155q-6 1 35.5 -2t52.5 -3q63 0 103 56t67 124l47 113z" />
+<glyph unicode="z" horiz-adv-x="1030" d="M94 0v138l585 788h-578v156h819v-134l-591 -794h625v-154h-860z" />
+<glyph unicode="{" horiz-adv-x="696" d="M63 543v147q106 0 157.5 61.5t51.5 174.5v206q0 171 82 290.5t277 174.5l40 -117q-110 -35 -156 -125.5t-46 -222.5v-206q0 -105 -42.5 -185t-127.5 -125q85 -46 127.5 -126.5t42.5 -183.5v-205q0 -132 46 -221.5t156 -125.5l-40 -118q-195 55 -277 175t-82 290v205 q0 112 -51.5 174.5t-157.5 62.5z" />
+<glyph unicode="|" horiz-adv-x="507" d="M175 -270v1726h158v-1726h-158z" />
+<glyph unicode="}" horiz-adv-x="696" d="M21 -246q109 36 156 125.5t47 221.5v205q0 107 45 187t139 123q-94 41 -139 121t-45 189v206q0 132 -47 222.5t-156 125.5l41 117q194 -55 276.5 -174.5t82.5 -290.5v-206q0 -113 50.5 -174.5t158.5 -61.5v-147q-108 0 -158.5 -62.5t-50.5 -174.5v-205q0 -170 -82.5 -290 t-276.5 -175z" />
+<glyph unicode="~" horiz-adv-x="1391" d="M128 474q0 136 85.5 232.5t217.5 96.5q88 0 163 -34.5t160 -104.5q58 -51 106 -74t100 -23q66 0 114.5 57t48.5 134l141 -18q0 -137 -87 -238t-217 -101q-90 0 -163.5 33t-158.5 107q-59 48 -108 72t-99 24q-67 0 -114.5 -53t-47.5 -128z" />
+<glyph unicode="&#xa1;" horiz-adv-x="507" d="M144 -374v978h197v-978h-197zM144 876v206h197v-206h-197z" />
+<glyph unicode="&#xa2;" horiz-adv-x="1122" d="M107 520v42q0 199 95 344.5t276 183.5v228h198v-223q157 -24 252.5 -130.5t92.5 -250.5l-2 -5h-179q0 99 -70 168.5t-177 69.5q-155 0 -221.5 -111.5t-66.5 -273.5v-42q0 -166 66 -276.5t222 -110.5q98 0 172.5 60.5t74.5 148.5h178l3 -6q3 -122 -98 -223t-247 -126v-232 h-198v236q-182 36 -276.5 182t-94.5 347z" />
+<glyph unicode="&#xa3;" horiz-adv-x="1194" d="M70 615v155h158l-10 270q0 204 112 320.5t300 116.5q200 0 310 -104.5t106 -276.5l-2 -6h-190q0 118 -63 175t-161 57q-99 0 -157 -74.5t-58 -207.5l10 -270h418v-155h-413l6 -149q0 -90 -15.5 -171.5t-44.5 -140.5h735l-1 -154h-976v154h10q48 13 72 111t24 201l-6 149 h-164z" />
+<glyph unicode="&#xa4;" horiz-adv-x="1456" d="M104 112l138 140q-50 76 -76.5 166.5t-26.5 189.5q0 102 28.5 196t82.5 172l-146 149l139 139l143 -146q74 55 163 85.5t185 30.5q97 0 186 -31t164 -87l146 149l140 -140l-150 -153q52 -78 80.5 -170.5t28.5 -193.5q0 -98 -26.5 -187.5t-74.5 -165.5l142 -143l-140 -139 l-133 135q-77 -62 -169.5 -95t-193.5 -33t-193.5 32.5t-167.5 93.5l-130 -132zM321 608q0 -188 120.5 -320.5t292.5 -132.5q170 0 290.5 132.5t120.5 320.5q0 186 -120.5 318t-290.5 132q-172 0 -292.5 -132t-120.5 -318z" />
+<glyph unicode="&#xa5;" horiz-adv-x="1243" d="M30 1456h226l359 -663l360 663h224l-418 -718h312v-155h-383v-135h383v-155h-383v-293h-197v293h-375v155h375v135h-375v155h311z" />
+<glyph unicode="&#xa6;" horiz-adv-x="499" d="M145 -270v792h197v-792h-197zM145 698v758h197v-758h-197z" />
+<glyph unicode="&#xa7;" horiz-adv-x="1259" d="M94 551q0 91 47 161.5t134 111.5q-68 50 -102 119.5t-34 166.5q0 166 134 266.5t358 100.5q233 0 363 -111.5t126 -313.5l-3 -6h-188q0 118 -79 197t-219 79q-145 0 -220 -59.5t-75 -150.5q0 -99 67 -148.5t278 -107.5q244 -69 355.5 -159.5t111.5 -265.5q0 -94 -48 -164 t-135 -110q69 -51 104 -119t35 -166q0 -172 -133 -269.5t-358 -97.5q-221 0 -372 102.5t-146 322.5l2 6l188 2q0 -143 96.5 -210.5t231.5 -67.5q137 0 215.5 59.5t78.5 150.5t-72 141.5t-276 113.5q-239 63 -352 156t-113 270zM291 553q0 -100 68 -151.5t278 -110.5 q56 -17 93 -28t70 -23q72 20 112 69.5t40 118.5q0 91 -73.5 144.5t-275.5 116.5q-47 12 -88.5 24.5t-77.5 27.5q-73 -19 -109.5 -69t-36.5 -119z" />
+<glyph unicode="&#xa8;" horiz-adv-x="1021" d="M170 1256v200h219v-200h-219zM640 1256v200h219v-200h-219z" />
+<glyph unicode="&#xa9;" horiz-adv-x="1604" d="M88 729q0 315 207 531t503 216q295 0 502 -216t207 -531q0 -316 -207.5 -533t-501.5 -217q-296 0 -503 217t-207 533zM209 729q0 -265 171.5 -447t417.5 -182q245 0 417 182t172 447q0 263 -172 444t-417 181q-246 0 -417.5 -181t-171.5 -444zM436 669v119q0 173 94 280 t254 107q157 0 245.5 -79t84.5 -228l-2 -6h-146q0 95 -45.5 138.5t-136.5 43.5q-94 0 -145 -70.5t-51 -184.5v-120q0 -117 51 -187t145 -70q91 0 136 43t45 141h146l2 -6q4 -151 -84 -229.5t-245 -78.5q-160 0 -254 106.5t-94 280.5z" />
+<glyph unicode="&#xaa;" horiz-adv-x="917" d="M120 920q0 110 84.5 170t245.5 60h139v52q0 63 -30 97t-88 34q-67 0 -103.5 -27t-36.5 -76l-162 13l-1 6q-6 98 78.5 163t224.5 65q134 0 212 -71t78 -205v-314q0 -50 6 -94t20 -87h-174q-8 21 -13 45t-8 50q-33 -47 -89.5 -78t-133.5 -31q-119 0 -184 61t-65 167z M293 924q0 -45 29 -69t89 -24q51 0 105.5 30t72.5 65v110h-138q-75 0 -116.5 -33t-41.5 -79z" />
+<glyph unicode="&#xab;" horiz-adv-x="966" d="M98 507v19l295 389h148l-255 -399l255 -398h-148zM432 507v19l295 389h148l-255 -399l255 -398h-148z" />
+<glyph unicode="&#xac;" horiz-adv-x="1137" d="M127 637v165h835v-427h-198v262h-637z" />
+<glyph unicode="&#xad;" horiz-adv-x="561" d="M35 538v154h490v-154h-490z" />
+<glyph unicode="&#xae;" horiz-adv-x="1604" d="M88 729q0 315 207 531t503 216q295 0 502 -216t207 -531q0 -316 -207.5 -533t-501.5 -217q-296 0 -503 217t-207 533zM209 729q0 -266 171.5 -447.5t417.5 -181.5q244 0 416 182t172 447q0 264 -171.5 444.5t-416.5 180.5q-246 0 -417.5 -180.5t-171.5 -444.5zM504 316 v850h280q152 0 238.5 -65.5t86.5 -191.5q0 -62 -33 -109t-96 -78q66 -26 95.5 -79t29.5 -128v-56q0 -41 3.5 -73.5t13.5 -53.5v-16h-153q-9 21 -11 61.5t-2 82.5v54q0 72 -33.5 106t-110.5 34h-159v-338h-149zM653 784h152q65 1 110.5 32.5t45.5 87.5q0 73 -39.5 102.5 t-137.5 29.5h-131v-252z" />
+<glyph unicode="&#xaf;" horiz-adv-x="950" d="M123 1310v146h721v-146h-721z" />
+<glyph unicode="&#xb0;" horiz-adv-x="763" d="M128 1216q0 106 76 183.5t181 77.5q103 0 177.5 -77.5t74.5 -183.5q0 -108 -74 -182.5t-178 -74.5q-106 0 -181.5 74.5t-75.5 182.5zM259 1216q0 -55 36.5 -91t89.5 -36q52 0 87.5 36t35.5 91t-36 92.5t-87 37.5q-53 0 -89.5 -37.5t-36.5 -92.5z" />
+<glyph unicode="&#xb1;" horiz-adv-x="1097" d="M99 702v154h381v411h177v-411h358v-154h-358v-413h-177v413h-381zM136 4v155h835v-155h-835z" />
+<glyph unicode="&#xb2;" horiz-adv-x="868" d="M119 1240q-6 99 78 169t225 70q135 0 211 -64t76 -180q0 -80 -44.5 -136t-160.5 -161l-153 -135l2 -6h361v-130h-592v130l302 262q69 60 91 97.5t22 79.5q0 50 -28.5 81t-86.5 31q-67 0 -103.5 -32t-36.5 -82h-161z" />
+<glyph unicode="&#xb3;" horiz-adv-x="876" d="M112 882l1 6h163q0 -46 37.5 -74.5t100.5 -28.5q72 0 114 29.5t42 77.5q0 62 -36.5 90.5t-109.5 28.5h-132v126h132q67 0 99.5 28.5t32.5 80.5q0 43 -36.5 72t-105.5 29q-56 0 -90.5 -24t-34.5 -64h-162l-2 6q-6 94 78.5 153.5t210.5 59.5q145 0 229 -59.5t84 -169.5 q0 -55 -35.5 -100.5t-97.5 -71.5q70 -23 108 -71t38 -116q0 -111 -90 -173t-236 -62q-127 0 -217.5 58t-84.5 169z" />
+<glyph unicode="&#xb4;" horiz-adv-x="654" d="M131 1211l185 266h230l2 -6l-270 -260h-147z" />
+<glyph unicode="&#xb5;" d="M153 -416v1498h196v-642q2 -178 57.5 -242.5t155.5 -64.5q98 0 158.5 36t92.5 106v807h197v-1082h-177l-9 108q-44 -63 -107.5 -96t-146.5 -33q-72 0 -126.5 16.5t-94.5 51.5v-463h-196z" />
+<glyph unicode="&#xb6;" horiz-adv-x="1006" d="M63 988q0 207 129.5 337.5t362.5 130.5h281v-1456h-197v520h-84q-233 0 -362.5 129.5t-129.5 338.5z" />
+<glyph unicode="&#xb7;" horiz-adv-x="540" d="M161 624v212h198v-212h-198z" />
+<glyph unicode="&#xb8;" horiz-adv-x="509" d="M119 -326q72 0 116 24.5t44 73.5q0 48 -36 67t-123 26l32 135h140l-12 -52q65 -11 108 -52t43 -121q0 -96 -79 -153t-226 -57z" />
+<glyph unicode="&#xb9;" horiz-adv-x="557" d="M95 1320v134l301 23v-812h-174v655h-127z" />
+<glyph unicode="&#xba;" horiz-adv-x="933" d="M120 1025v117q0 148 94 241.5t251 93.5q158 0 252 -93.5t94 -241.5v-117q0 -149 -93.5 -241.5t-250.5 -92.5q-158 0 -252.5 92.5t-94.5 241.5zM293 1025q0 -88 44 -140.5t130 -52.5q83 0 127.5 53t44.5 140v117q0 84 -45 137.5t-129 53.5t-128 -53.5t-44 -137.5v-117z " />
+<glyph unicode="&#xbb;" horiz-adv-x="966" d="M110 152l255 398l-255 399h148l295 -389v-19l-295 -389h-148zM456 152l255 398l-255 399h148l295 -389v-19l-295 -389h-148z" />
+<glyph unicode="&#xbc;" horiz-adv-x="1595" d="M184 1319v134l301 23v-812h-174v655h-127zM339 185l711 1138l109 -67l-711 -1138zM785 254l422 547h173v-519h126v-130h-126v-152h-170v152h-417zM967 282h243v310l-6 1l-13 -22z" />
+<glyph unicode="&#xbd;" horiz-adv-x="1708" d="M184 1319v134l301 23v-812h-174v655h-127zM352 185l711 1138l109 -67l-711 -1138zM930 573q-6 99 78 169t225 70q135 0 211 -64t76 -180q0 -80 -44.5 -136t-160.5 -161l-153 -135l2 -6h361v-130h-592v130l302 262q69 60 91 97.5t22 79.5q0 50 -28.5 81t-86.5 31 q-67 0 -103.5 -32t-36.5 -82h-161z" />
+<glyph unicode="&#xbe;" horiz-adv-x="1781" d="M128 883l1 6h163q0 -46 37.5 -74.5t100.5 -28.5q72 0 114 29.5t42 77.5q0 62 -36.5 90.5t-109.5 28.5h-132v126h132q67 0 99.5 28.5t32.5 80.5q0 43 -36.5 72t-105.5 29q-56 0 -90.5 -24t-34.5 -64h-162l-2 6q-6 94 78.5 153.5t210.5 59.5q145 0 229 -59.5t84 -169.5 q0 -55 -35.5 -100.5t-97.5 -71.5q70 -23 108 -71t38 -116q0 -111 -90 -173t-236 -62q-127 0 -217.5 58t-84.5 169zM522 185l711 1138l109 -67l-711 -1138zM974 254l422 547h173v-519h126v-130h-126v-152h-170v152h-417zM1156 282h243v310l-6 1l-13 -22z" />
+<glyph unicode="&#xbf;" horiz-adv-x="1013" d="M114 -13q0 127 70 233.5t187 220.5q53 53 65 96t12 135h197q-2 -146 -26 -202t-125 -147q-100 -118 -141.5 -181t-41.5 -150q0 -106 56 -163t162 -57q90 0 154.5 49.5t64.5 145.5h188l3 -6q2 -161 -114.5 -258t-295.5 -97q-198 0 -306.5 100.5t-108.5 280.5zM441 874v209 h206v-209h-206z" />
+<glyph unicode="&#xc0;" horiz-adv-x="1326" d="M20 0l563 1456h169l554 -1456h-201l-136 375h-610l-138 -375h-201zM378 1820l3 6h230l175 -266h-158zM420 540h490l-240 663h-6z" />
+<glyph unicode="&#xc1;" horiz-adv-x="1326" d="M20 0l563 1456h169l554 -1456h-201l-136 375h-610l-138 -375h-201zM420 540h490l-240 663h-6zM613 1556l185 266h230l2 -6l-270 -260h-147z" />
+<glyph unicode="&#xc2;" horiz-adv-x="1326" d="M20 0l563 1456h169l554 -1456h-201l-136 375h-610l-138 -375h-201zM356 1601v26l246 237h120l248 -238v-25h-161l-147 148l-146 -148h-160zM420 540h490l-240 663h-6z" />
+<glyph unicode="&#xc3;" horiz-adv-x="1326" d="M20 0l563 1456h169l554 -1456h-201l-136 375h-610l-138 -375h-201zM316 1628q0 93 59 161.5t150 68.5q56 0 140 -47t136 -47q41 0 71 32.5t30 79.5l108 -32q0 -94 -59.5 -159t-149.5 -65q-71 0 -148 46.5t-128 46.5q-43 0 -72 -32.5t-29 -78.5zM420 540h490l-240 663h-6z " />
+<glyph unicode="&#xc4;" horiz-adv-x="1326" d="M20 0l563 1456h169l554 -1456h-201l-136 375h-610l-138 -375h-201zM319 1605v200h219v-200h-219zM420 540h490l-240 663h-6zM789 1605v200h219v-200h-219z" />
+<glyph unicode="&#xc5;" horiz-adv-x="1326" d="M20 0l563 1456h169l554 -1456h-201l-136 375h-610l-138 -375h-201zM420 540h490l-240 663h-6zM457 1734q0 84 60.5 141t147.5 57q85 0 145 -56.5t60 -141.5q0 -86 -59.5 -140t-145.5 -54q-87 0 -147.5 54t-60.5 140zM560 1734q0 -43 31 -73.5t74 -30.5q42 0 72 29.5 t30 74.5t-30 76t-72 31q-43 0 -74 -31t-31 -76z" />
+<glyph unicode="&#xc6;" horiz-adv-x="1922" d="M-20 0l880 1456h967v-155h-691l20 -466h590v-155h-584l22 -526h705v-154h-895l-15 350h-557l-202 -350h-240zM525 529h447l-31 710l-5 2z" />
+<glyph unicode="&#xc7;" horiz-adv-x="1297" d="M118 598v259q0 269 155.5 444.5t402.5 175.5t393 -131.5t142 -348.5l-2 -6h-189q0 153 -90 242t-254 89q-165 0 -263 -133t-98 -330v-261q0 -199 98 -332t263 -133q164 0 254 88.5t90 244.5h189l2 -6q4 -205 -144 -343t-391 -138q-247 0 -402.5 175t-155.5 444zM581 -334 q72 0 116 24.5t44 73.5q0 48 -36 67t-123 26l32 135h140l-12 -52q65 -11 108 -52t43 -121q0 -96 -79 -153t-226 -57z" />
+<glyph unicode="&#xc8;" horiz-adv-x="1197" d="M180 0v1456h955v-155h-758v-471h667v-155h-667v-521h769v-154h-966zM303 1820l3 6h230l175 -266h-158z" />
+<glyph unicode="&#xc9;" horiz-adv-x="1197" d="M180 0v1456h955v-155h-758v-471h667v-155h-667v-521h769v-154h-966zM538 1556l185 266h230l2 -6l-270 -260h-147z" />
+<glyph unicode="&#xca;" horiz-adv-x="1197" d="M180 0v1456h955v-155h-758v-471h667v-155h-667v-521h769v-154h-966zM322 1601v26l246 237h120l248 -238v-25h-161l-147 148l-146 -148h-160z" />
+<glyph unicode="&#xcb;" horiz-adv-x="1197" d="M180 0v1456h955v-155h-758v-471h667v-155h-667v-521h769v-154h-966zM284 1605v200h219v-200h-219zM754 1605v200h219v-200h-219z" />
+<glyph unicode="&#xcc;" horiz-adv-x="579" d="M-34 1820l3 6h230l175 -266h-158zM190 0v1456h198v-1456h-198z" />
+<glyph unicode="&#xcd;" horiz-adv-x="579" d="M190 0v1456h198v-1456h-198zM199 1556l185 266h230l2 -6l-270 -260h-147z" />
+<glyph unicode="&#xce;" horiz-adv-x="579" d="M-15 1601v26l246 237h120l248 -238v-25h-161l-147 148l-146 -148h-160zM190 0v1456h198v-1456h-198z" />
+<glyph unicode="&#xcf;" horiz-adv-x="579" d="M-53 1605v200h219v-200h-219zM190 0v1456h198v-1456h-198zM417 1605v200h219v-200h-219z" />
+<glyph unicode="&#xd0;" horiz-adv-x="1379" d="M42 663v155h168v638h447q286 0 459 -175.5t173 -453.5v-199q0 -279 -173 -453.5t-459 -174.5h-447v663h-168zM407 154h250q202 0 318.5 133t116.5 341v201q0 206 -116.5 339t-318.5 133h-250v-483h276v-155h-276v-509z" />
+<glyph unicode="&#xd1;" horiz-adv-x="1461" d="M180 0v1456h197l701 -1124l6 2v1122h197v-1456h-197l-701 1126l-6 -2v-1124h-197zM381 1628q0 93 59 161.5t150 68.5q56 0 140 -47t136 -47q41 0 71 32.5t30 79.5l108 -32q0 -94 -59.5 -159t-149.5 -65q-71 0 -148 46.5t-128 46.5q-43 0 -72 -32.5t-29 -78.5z" />
+<glyph unicode="&#xd2;" horiz-adv-x="1396" d="M113 598v259q0 266 159.5 443t414.5 177q264 0 429.5 -176.5t165.5 -443.5v-259q0 -267 -165.5 -443t-429.5 -176q-255 0 -414.5 176t-159.5 443zM310 598q0 -202 102.5 -330t274.5 -128q183 0 290.5 127.5t107.5 330.5v261q0 200 -108 328t-290 128q-172 0 -274.5 -128 t-102.5 -328v-261zM373 1841l3 6h230l175 -266h-158z" />
+<glyph unicode="&#xd3;" horiz-adv-x="1396" d="M113 598v259q0 266 159.5 443t414.5 177q264 0 429.5 -176.5t165.5 -443.5v-259q0 -267 -165.5 -443t-429.5 -176q-255 0 -414.5 176t-159.5 443zM310 598q0 -202 102.5 -330t274.5 -128q183 0 290.5 127.5t107.5 330.5v261q0 200 -108 328t-290 128q-172 0 -274.5 -128 t-102.5 -328v-261zM608 1577l185 266h230l2 -6l-270 -260h-147z" />
+<glyph unicode="&#xd4;" horiz-adv-x="1396" d="M113 598v259q0 266 159.5 443t414.5 177q264 0 429.5 -176.5t165.5 -443.5v-259q0 -267 -165.5 -443t-429.5 -176q-255 0 -414.5 176t-159.5 443zM310 598q0 -202 102.5 -330t274.5 -128q183 0 290.5 127.5t107.5 330.5v261q0 200 -108 328t-290 128q-172 0 -274.5 -128 t-102.5 -328v-261zM392 1622v26l246 237h120l248 -238v-25h-161l-147 148l-146 -148h-160z" />
+<glyph unicode="&#xd5;" horiz-adv-x="1396" d="M113 598v259q0 266 159.5 443t414.5 177q264 0 429.5 -176.5t165.5 -443.5v-259q0 -267 -165.5 -443t-429.5 -176q-255 0 -414.5 176t-159.5 443zM310 598q0 -202 102.5 -330t274.5 -128q183 0 290.5 127.5t107.5 330.5v261q0 200 -108 328t-290 128q-172 0 -274.5 -128 t-102.5 -328v-261zM351 1649q0 93 59 161.5t150 68.5q56 0 140 -47t136 -47q41 0 71 32.5t30 79.5l108 -32q0 -94 -59.5 -159t-149.5 -65q-71 0 -148 46.5t-128 46.5q-43 0 -72 -32.5t-29 -78.5z" />
+<glyph unicode="&#xd6;" horiz-adv-x="1396" d="M113 598v259q0 266 159.5 443t414.5 177q264 0 429.5 -176.5t165.5 -443.5v-259q0 -267 -165.5 -443t-429.5 -176q-255 0 -414.5 176t-159.5 443zM310 598q0 -202 102.5 -330t274.5 -128q183 0 290.5 127.5t107.5 330.5v261q0 200 -108 328t-290 128q-172 0 -274.5 -128 t-102.5 -328v-261zM354 1626v200h219v-200h-219zM824 1626v200h219v-200h-219z" />
+<glyph unicode="&#xd7;" horiz-adv-x="1096" d="M88 351l327 334l-327 334l126 126l326 -333l327 333l126 -126l-328 -334l328 -334l-126 -126l-327 332l-326 -332z" />
+<glyph unicode="&#xd8;" horiz-adv-x="1396" d="M113 598v259q0 266 159.5 443t414.5 177q94 0 178.5 -25.5t156.5 -71.5l81 137h149l-132 -221q77 -84 119.5 -197t42.5 -242v-259q0 -267 -165.5 -443t-429.5 -176q-85 0 -160.5 20.5t-139.5 60.5l-91 -154h-149l139 234q-84 84 -128.5 202t-44.5 256zM310 598 q0 -85 19 -158t54 -125l6 -1l544 916q-50 41 -112 63t-134 22q-172 0 -274.5 -128t-102.5 -328v-261zM475 208q44 -34 97 -51t115 -17q183 0 290.5 127.5t107.5 330.5v261q0 75 -16.5 142t-46.5 117l-6 1z" />
+<glyph unicode="&#xd9;" horiz-adv-x="1386" d="M147 469v987h197v-987q0 -165 94 -250.5t248 -85.5q162 0 261.5 85.5t99.5 250.5v987h197v-987q0 -238 -154.5 -364t-403.5 -126q-240 0 -389.5 126.5t-149.5 363.5zM372 1820l3 6h230l175 -266h-158z" />
+<glyph unicode="&#xda;" horiz-adv-x="1386" d="M147 469v987h197v-987q0 -165 94 -250.5t248 -85.5q162 0 261.5 85.5t99.5 250.5v987h197v-987q0 -238 -154.5 -364t-403.5 -126q-240 0 -389.5 126.5t-149.5 363.5zM607 1556l185 266h230l2 -6l-270 -260h-147z" />
+<glyph unicode="&#xdb;" horiz-adv-x="1386" d="M147 469v987h197v-987q0 -165 94 -250.5t248 -85.5q162 0 261.5 85.5t99.5 250.5v987h197v-987q0 -238 -154.5 -364t-403.5 -126q-240 0 -389.5 126.5t-149.5 363.5zM391 1601v26l246 237h120l248 -238v-25h-161l-147 148l-146 -148h-160z" />
+<glyph unicode="&#xdc;" horiz-adv-x="1386" d="M147 469v987h197v-987q0 -165 94 -250.5t248 -85.5q162 0 261.5 85.5t99.5 250.5v987h197v-987q0 -238 -154.5 -364t-403.5 -126q-240 0 -389.5 126.5t-149.5 363.5zM353 1605v200h219v-200h-219zM823 1605v200h219v-200h-219z" />
+<glyph unicode="&#xdd;" horiz-adv-x="1250" d="M20 1456h225l380 -740l380 740h225l-511 -944v-512h-196v525zM535 1555l185 266h230l2 -6l-270 -260h-147z" />
+<glyph unicode="&#xde;" horiz-adv-x="1209" d="M163 0v1456h197v-293h269q232 0 362 -118t130 -307q0 -190 -130 -307.5t-362 -117.5h-269v-313h-197zM360 467h269q147 0 220.5 78t73.5 191q0 114 -73.5 193.5t-220.5 79.5h-269v-542z" />
+<glyph unicode="&#xdf;" horiz-adv-x="1221" d="M137 0v1082q0 223 117.5 348t300.5 125q161 0 262 -86t101 -253q0 -118 -64.5 -228t-64.5 -167q0 -82 173.5 -224t173.5 -281q0 -167 -104.5 -252t-282.5 -85q-84 0 -172.5 20.5t-125.5 50.5l44 159q43 -28 108 -52t126 -24q108 0 159 47.5t51 125.5q0 84 -173.5 227.5 t-173.5 289.5q0 80 70.5 190.5t70.5 186.5q0 93 -51 147t-117 54q-104 0 -168 -83.5t-64 -235.5v-1082h-196z" />
+<glyph unicode="&#xe0;" horiz-adv-x="1126" d="M106 304q0 155 125.5 242.5t340.5 87.5h214v107q0 95 -58 150.5t-164 55.5q-95 0 -154.5 -48.5t-59.5 -116.5h-188l-2 6q-6 118 111.5 216t303.5 98q184 0 296 -93.5t112 -269.5v-521q0 -58 6 -112t22 -106h-203q-10 49 -15.5 86.5t-6.5 75.5q-55 -78 -143.5 -130.5 t-190.5 -52.5q-169 0 -257.5 86.5t-88.5 238.5zM230 1498l3 6h230l175 -266h-158zM303 300q0 -72 45 -114t133 -42q107 0 193 55t112 126v176h-221q-119 0 -190.5 -60t-71.5 -141z" />
+<glyph unicode="&#xe1;" horiz-adv-x="1126" d="M106 304q0 155 125.5 242.5t340.5 87.5h214v107q0 95 -58 150.5t-164 55.5q-95 0 -154.5 -48.5t-59.5 -116.5h-188l-2 6q-6 118 111.5 216t303.5 98q184 0 296 -93.5t112 -269.5v-521q0 -58 6 -112t22 -106h-203q-10 49 -15.5 86.5t-6.5 75.5q-55 -78 -143.5 -130.5 t-190.5 -52.5q-169 0 -257.5 86.5t-88.5 238.5zM303 300q0 -72 45 -114t133 -42q107 0 193 55t112 126v176h-221q-119 0 -190.5 -60t-71.5 -141zM465 1234l185 266h230l2 -6l-270 -260h-147z" />
+<glyph unicode="&#xe2;" horiz-adv-x="1126" d="M106 304q0 155 125.5 242.5t340.5 87.5h214v107q0 95 -58 150.5t-164 55.5q-95 0 -154.5 -48.5t-59.5 -116.5h-188l-2 6q-6 118 111.5 216t303.5 98q184 0 296 -93.5t112 -269.5v-521q0 -58 6 -112t22 -106h-203q-10 49 -15.5 86.5t-6.5 75.5q-55 -78 -143.5 -130.5 t-190.5 -52.5q-169 0 -257.5 86.5t-88.5 238.5zM249 1279v26l246 237h120l248 -238v-25h-161l-147 148l-146 -148h-160zM303 300q0 -72 45 -114t133 -42q107 0 193 55t112 126v176h-221q-119 0 -190.5 -60t-71.5 -141z" />
+<glyph unicode="&#xe3;" horiz-adv-x="1126" d="M106 304q0 155 125.5 242.5t340.5 87.5h214v107q0 95 -58 150.5t-164 55.5q-95 0 -154.5 -48.5t-59.5 -116.5h-188l-2 6q-6 118 111.5 216t303.5 98q184 0 296 -93.5t112 -269.5v-521q0 -58 6 -112t22 -106h-203q-10 49 -15.5 86.5t-6.5 75.5q-55 -78 -143.5 -130.5 t-190.5 -52.5q-169 0 -257.5 86.5t-88.5 238.5zM208 1306q0 93 59 161.5t150 68.5q56 0 140 -47t136 -47q41 0 71 32.5t30 79.5l108 -32q0 -94 -59.5 -159t-149.5 -65q-71 0 -148 46.5t-128 46.5q-43 0 -72 -32.5t-29 -78.5zM303 300q0 -72 45 -114t133 -42q107 0 193 55 t112 126v176h-221q-119 0 -190.5 -60t-71.5 -141z" />
+<glyph unicode="&#xe4;" horiz-adv-x="1126" d="M106 304q0 155 125.5 242.5t340.5 87.5h214v107q0 95 -58 150.5t-164 55.5q-95 0 -154.5 -48.5t-59.5 -116.5h-188l-2 6q-6 118 111.5 216t303.5 98q184 0 296 -93.5t112 -269.5v-521q0 -58 6 -112t22 -106h-203q-10 49 -15.5 86.5t-6.5 75.5q-55 -78 -143.5 -130.5 t-190.5 -52.5q-169 0 -257.5 86.5t-88.5 238.5zM211 1283v200h219v-200h-219zM303 300q0 -72 45 -114t133 -42q107 0 193 55t112 126v176h-221q-119 0 -190.5 -60t-71.5 -141zM681 1283v200h219v-200h-219z" />
+<glyph unicode="&#xe5;" horiz-adv-x="1126" d="M106 304q0 155 125.5 242.5t340.5 87.5h214v107q0 95 -58 150.5t-164 55.5q-95 0 -154.5 -48.5t-59.5 -116.5h-188l-2 6q-6 118 111.5 216t303.5 98q184 0 296 -93.5t112 -269.5v-521q0 -58 6 -112t22 -106h-203q-10 49 -15.5 86.5t-6.5 75.5q-55 -78 -143.5 -130.5 t-190.5 -52.5q-169 0 -257.5 86.5t-88.5 238.5zM303 300q0 -72 45 -114t133 -42q107 0 193 55t112 126v176h-221q-119 0 -190.5 -60t-71.5 -141zM346 1412q0 84 60.5 141t147.5 57q85 0 145 -56.5t60 -141.5q0 -86 -59.5 -140t-145.5 -54q-87 0 -147.5 54t-60.5 140z M449 1412q0 -43 31 -73.5t74 -30.5q42 0 72 29.5t30 74.5t-30 76t-72 31q-43 0 -74 -31t-31 -76z" />
+<glyph unicode="&#xe6;" horiz-adv-x="1729" d="M58 304q0 158 115 244.5t335 86.5h229v85q0 106 -51.5 166.5t-149.5 60.5q-103 0 -164 -55t-61 -133l-188 18l-2 6q-5 138 109.5 228.5t305.5 90.5q114 0 201.5 -40.5t137.5 -117.5q64 75 151.5 116.5t188.5 41.5q214 0 329.5 -130t115.5 -358v-119h-709l-2 -5 q1 -159 79.5 -258t233.5 -99q103 0 169.5 27.5t144.5 78.5l67 -138q-53 -44 -147 -83t-234 -39q-136 0 -240 48.5t-170 138.5q-56 -79 -167.5 -133t-271.5 -54q-170 0 -262.5 87t-92.5 238zM255 300q0 -74 50 -120.5t147 -46.5q76 0 159 43.5t126 100.5v216h-227 q-120 0 -187.5 -56t-67.5 -137zM953 645l2 -5h508v31q0 122 -60 199t-188 77q-113 0 -182 -84.5t-80 -217.5z" />
+<glyph unicode="&#xe7;" horiz-adv-x="1087" d="M97 520v42q0 231 125.5 385.5t360.5 154.5q190 0 310.5 -112t116.5 -275l-2 -6h-178q0 99 -70 168.5t-177 69.5q-155 0 -221.5 -111.5t-66.5 -273.5v-42q0 -166 66 -276.5t222 -110.5q98 0 172.5 60.5t74.5 148.5h177l2 -6q5 -140 -124.5 -248.5t-301.5 -108.5 q-236 0 -361 154t-125 387zM440 -334q72 0 116 24.5t44 73.5q0 48 -36 67t-123 26l32 135h140l-12 -52q65 -11 108 -52t43 -121q0 -96 -79 -153t-226 -57z" />
+<glyph unicode="&#xe8;" horiz-adv-x="1083" d="M99 520v44q0 231 137.5 384.5t325.5 153.5q219 0 331 -132t112 -352v-123h-702l-3 -5q3 -156 79 -256.5t213 -100.5q100 0 175.5 28.5t130.5 78.5l77 -128q-58 -57 -153 -95t-230 -38q-226 0 -359.5 150.5t-133.5 390.5zM233 1499l3 6h230l175 -266h-158zM307 654l2 -5 h499v26q0 116 -62 194t-184 78q-99 0 -169 -83.5t-86 -209.5z" />
+<glyph unicode="&#xe9;" horiz-adv-x="1083" d="M99 520v44q0 231 137.5 384.5t325.5 153.5q219 0 331 -132t112 -352v-123h-702l-3 -5q3 -156 79 -256.5t213 -100.5q100 0 175.5 28.5t130.5 78.5l77 -128q-58 -57 -153 -95t-230 -38q-226 0 -359.5 150.5t-133.5 390.5zM307 654l2 -5h499v26q0 116 -62 194t-184 78 q-99 0 -169 -83.5t-86 -209.5zM468 1235l185 266h230l2 -6l-270 -260h-147z" />
+<glyph unicode="&#xea;" horiz-adv-x="1083" d="M99 520v44q0 231 137.5 384.5t325.5 153.5q219 0 331 -132t112 -352v-123h-702l-3 -5q3 -156 79 -256.5t213 -100.5q100 0 175.5 28.5t130.5 78.5l77 -128q-58 -57 -153 -95t-230 -38q-226 0 -359.5 150.5t-133.5 390.5zM252 1280v26l246 237h120l248 -238v-25h-161 l-147 148l-146 -148h-160zM307 654l2 -5h499v26q0 116 -62 194t-184 78q-99 0 -169 -83.5t-86 -209.5z" />
+<glyph unicode="&#xeb;" horiz-adv-x="1083" d="M99 520v44q0 231 137.5 384.5t325.5 153.5q219 0 331 -132t112 -352v-123h-702l-3 -5q3 -156 79 -256.5t213 -100.5q100 0 175.5 28.5t130.5 78.5l77 -128q-58 -57 -153 -95t-230 -38q-226 0 -359.5 150.5t-133.5 390.5zM214 1284v200h219v-200h-219zM307 654l2 -5h499 v26q0 116 -62 194t-184 78q-99 0 -169 -83.5t-86 -209.5zM684 1284v200h219v-200h-219z" />
+<glyph unicode="&#xec;" horiz-adv-x="515" d="M-71 1477l3 6h230l175 -266h-158zM153 0v1082h197v-1082h-197z" />
+<glyph unicode="&#xed;" horiz-adv-x="515" d="M153 0v1082h197v-1082h-197zM162 1213l185 266h230l2 -6l-270 -260h-147z" />
+<glyph unicode="&#xee;" horiz-adv-x="515" d="M-52 1258v26l246 237h120l248 -238v-25h-161l-147 148l-146 -148h-160zM153 0v1082h197v-1082h-197z" />
+<glyph unicode="&#xef;" horiz-adv-x="515" d="M-90 1262v200h219v-200h-219zM153 0v1082h197v-1082h-197zM380 1262v200h219v-200h-219z" />
+<glyph unicode="&#xf0;" horiz-adv-x="1202" d="M72 466q0 228 138 370t351 142q90 0 169.5 -37t131.5 -97l4 5q-9 109 -51.5 197t-110.5 154l-290 -165l-77 102l256 146q-39 22 -80.5 39t-85.5 31l60 164q79 -19 151 -52t135 -79l218 125l77 -102l-195 -112q95 -104 147 -241.5t52 -300.5v-220q0 -245 -144 -400.5 t-359 -155.5q-218 0 -357.5 140t-139.5 347zM269 466q0 -132 82 -232.5t222 -100.5q133 0 217.5 114t84.5 288v148q-35 59 -115.5 99.5t-198.5 40.5q-131 0 -211.5 -104t-80.5 -253z" />
+<glyph unicode="&#xf1;" d="M143 0v1082h176l14 -161q54 86 135.5 133.5t185.5 47.5q175 0 271 -102.5t96 -316.5v-683h-197v679q0 143 -56.5 203t-172.5 60q-85 0 -150.5 -41t-104.5 -112v-789h-197zM231 1306q0 93 59 161.5t150 68.5q56 0 140 -47t136 -47q41 0 71 32.5t30 79.5l108 -32 q0 -94 -59.5 -159t-149.5 -65q-71 0 -148 46.5t-128 46.5q-43 0 -72 -32.5t-29 -78.5z" />
+<glyph unicode="&#xf2;" d="M97 529v22q0 240 130 395.5t353 155.5q225 0 355.5 -155t130.5 -396v-22q0 -242 -130 -396t-354 -154t-354.5 154.5t-130.5 395.5zM257 1498l3 6h230l175 -266h-158zM294 529q0 -172 72.5 -284t215.5 -112q141 0 214 112t73 284v22q0 170 -73.5 283t-215.5 113 q-141 0 -213.5 -113t-72.5 -283v-22z" />
+<glyph unicode="&#xf3;" d="M97 529v22q0 240 130 395.5t353 155.5q225 0 355.5 -155t130.5 -396v-22q0 -242 -130 -396t-354 -154t-354.5 154.5t-130.5 395.5zM294 529q0 -172 72.5 -284t215.5 -112q141 0 214 112t73 284v22q0 170 -73.5 283t-215.5 113q-141 0 -213.5 -113t-72.5 -283v-22z M492 1234l185 266h230l2 -6l-270 -260h-147z" />
+<glyph unicode="&#xf4;" d="M97 529v22q0 240 130 395.5t353 155.5q225 0 355.5 -155t130.5 -396v-22q0 -242 -130 -396t-354 -154t-354.5 154.5t-130.5 395.5zM276 1279v26l246 237h120l248 -238v-25h-161l-147 148l-146 -148h-160zM294 529q0 -172 72.5 -284t215.5 -112q141 0 214 112t73 284v22 q0 170 -73.5 283t-215.5 113q-141 0 -213.5 -113t-72.5 -283v-22z" />
+<glyph unicode="&#xf5;" d="M97 529v22q0 240 130 395.5t353 155.5q225 0 355.5 -155t130.5 -396v-22q0 -242 -130 -396t-354 -154t-354.5 154.5t-130.5 395.5zM235 1306q0 93 59 161.5t150 68.5q56 0 140 -47t136 -47q41 0 71 32.5t30 79.5l108 -32q0 -94 -59.5 -159t-149.5 -65q-71 0 -148 46.5 t-128 46.5q-43 0 -72 -32.5t-29 -78.5zM294 529q0 -172 72.5 -284t215.5 -112q141 0 214 112t73 284v22q0 170 -73.5 283t-215.5 113q-141 0 -213.5 -113t-72.5 -283v-22z" />
+<glyph unicode="&#xf6;" d="M97 529v22q0 240 130 395.5t353 155.5q225 0 355.5 -155t130.5 -396v-22q0 -242 -130 -396t-354 -154t-354.5 154.5t-130.5 395.5zM238 1283v200h219v-200h-219zM294 529q0 -172 72.5 -284t215.5 -112q141 0 214 112t73 284v22q0 170 -73.5 283t-215.5 113 q-141 0 -213.5 -113t-72.5 -283v-22zM708 1283v200h219v-200h-219z" />
+<glyph unicode="&#xf7;" horiz-adv-x="1170" d="M71 597v188h998v-188h-998zM472 180v203h198v-203h-198zM472 999v203h198v-203h-198z" />
+<glyph unicode="&#xf8;" d="M97 529v22q0 240 130 395.5t353 155.5q56 0 107.5 -11t97.5 -31l74 149h129l-104 -211q88 -74 135 -190t47 -257v-22q0 -242 -130 -396t-354 -154q-51 0 -97 8.5t-88 24.5l-72 -147h-129l100 204q-96 71 -147.5 191t-51.5 269zM294 529q0 -91 20 -166.5t61 -123.5h6 l332 674q-29 16 -62.5 25t-70.5 9q-141 0 -213.5 -113t-72.5 -283v-22zM469 156q24 -12 52 -17.5t61 -5.5q141 0 214 112t73 284v22q0 80 -17.5 150.5t-49.5 117.5h-6z" />
+<glyph unicode="&#xf9;" d="M139 444v638h197v-640q0 -173 51 -238t159 -65q105 0 173.5 42.5t103.5 120.5v780h197v-1082h-177l-13 160q-51 -87 -131 -134t-185 -47q-177 0 -276 113t-99 352zM255 1477l3 6h230l175 -266h-158z" />
+<glyph unicode="&#xfa;" d="M139 444v638h197v-640q0 -173 51 -238t159 -65q105 0 173.5 42.5t103.5 120.5v780h197v-1082h-177l-13 160q-51 -87 -131 -134t-185 -47q-177 0 -276 113t-99 352zM490 1213l185 266h230l2 -6l-270 -260h-147z" />
+<glyph unicode="&#xfb;" d="M139 444v638h197v-640q0 -173 51 -238t159 -65q105 0 173.5 42.5t103.5 120.5v780h197v-1082h-177l-13 160q-51 -87 -131 -134t-185 -47q-177 0 -276 113t-99 352zM274 1258v26l246 237h120l248 -238v-25h-161l-147 148l-146 -148h-160z" />
+<glyph unicode="&#xfc;" d="M139 444v638h197v-640q0 -173 51 -238t159 -65q105 0 173.5 42.5t103.5 120.5v780h197v-1082h-177l-13 160q-51 -87 -131 -134t-185 -47q-177 0 -276 113t-99 352zM236 1262v200h219v-200h-219zM706 1262v200h219v-200h-219z" />
+<glyph unicode="&#xfd;" horiz-adv-x="1030" d="M26 1082h220l228 -681l35 -136h6l266 817h219l-455 -1248q-41 -109 -117.5 -190t-206.5 -81q-24 0 -61 5.5t-57 10.5l20 155q-6 1 35.5 -2t52.5 -3q63 0 103 56t67 124l47 113zM424 1213l185 266h230l2 -6l-270 -260h-147z" />
+<glyph unicode="&#xfe;" horiz-adv-x="1186" d="M153 -416v1976h197v-598q53 68 128 104t173 36q201 0 312.5 -159.5t111.5 -421.5v-21q0 -234 -112 -377.5t-309 -143.5q-100 0 -175.5 33.5t-128.5 100.5v-529h-197zM350 275q37 -67 97 -104.5t147 -37.5q140 0 212 102.5t72 264.5v21q0 184 -72.5 302.5t-213.5 118.5 q-85 0 -145 -38.5t-97 -105.5v-523z" />
+<glyph unicode="&#xff;" horiz-adv-x="1030" d="M26 1082h220l228 -681l35 -136h6l266 817h219l-455 -1248q-41 -109 -117.5 -190t-206.5 -81q-24 0 -61 5.5t-57 10.5l20 155q-6 1 35.5 -2t52.5 -3q63 0 103 56t67 124l47 113zM170 1262v200h219v-200h-219zM640 1262v200h219v-200h-219z" />
+<glyph unicode="&#x152;" horiz-adv-x="1960" d="M104 576v304q0 265 154.5 431t403.5 166q69 0 140.5 -6t150.5 -15h907v-155h-758v-471h667v-155h-667v-521h769v-154h-918q-92 -10 -157 -15.5t-132 -5.5q-249 0 -404.5 166t-155.5 431zM301 576q0 -214 97 -328t266 -114q61 0 122 4.5t119 13.5v1151q-61 8 -122 13.5 t-121 5.5q-169 0 -265 -113.5t-96 -326.5v-306z" />
+<glyph unicode="&#x153;" horiz-adv-x="1854" d="M97 529v22q0 240 130 395.5t353 155.5q130 0 230 -54.5t164 -152.5q65 97 161.5 152t204.5 55q219 0 331 -132t112 -352v-123h-702l-3 -5q3 -156 79 -256.5t213 -100.5q100 0 175.5 28.5t130.5 78.5l77 -128q-58 -57 -153 -95t-230 -38q-131 0 -232.5 52.5t-166.5 148.5 q-64 -96 -163 -148.5t-226 -52.5q-224 0 -354.5 154.5t-130.5 395.5zM294 529q0 -172 72.5 -284t215.5 -112q141 0 214 112t73 284v22q0 170 -73.5 283t-215.5 113q-141 0 -213.5 -113t-72.5 -283v-22zM1085 654l2 -5h499v26q0 116 -62 194t-184 78q-99 0 -169 -83.5 t-86 -209.5z" />
+<glyph unicode="&#x178;" horiz-adv-x="1250" d="M20 1456h225l380 -740l380 740h225l-511 -944v-512h-196v525zM281 1604v200h219v-200h-219zM751 1604v200h219v-200h-219z" />
+<glyph unicode="&#x2c6;" horiz-adv-x="979" d="M171 1252v26l246 237h120l248 -238v-25h-161l-147 148l-146 -148h-160z" />
+<glyph unicode="&#x2dc;" horiz-adv-x="979" d="M135 1275q0 93 59 161.5t150 68.5q56 0 140 -47t136 -47q41 0 71 32.5t30 79.5l108 -32q0 -94 -59.5 -159t-149.5 -65q-71 0 -148 46.5t-128 46.5q-43 0 -72 -32.5t-29 -78.5z" />
+<glyph unicode="&#x2000;" horiz-adv-x="966" />
+<glyph unicode="&#x2001;" horiz-adv-x="1932" />
+<glyph unicode="&#x2002;" horiz-adv-x="966" />
+<glyph unicode="&#x2003;" horiz-adv-x="1932" />
+<glyph unicode="&#x2004;" horiz-adv-x="644" />
+<glyph unicode="&#x2005;" horiz-adv-x="483" />
+<glyph unicode="&#x2006;" horiz-adv-x="322" />
+<glyph unicode="&#x2007;" horiz-adv-x="322" />
+<glyph unicode="&#x2008;" horiz-adv-x="241" />
+<glyph unicode="&#x2009;" horiz-adv-x="386" />
+<glyph unicode="&#x200a;" horiz-adv-x="107" />
+<glyph unicode="&#x2010;" horiz-adv-x="561" d="M35 538v154h490v-154h-490z" />
+<glyph unicode="&#x2011;" horiz-adv-x="561" d="M35 538v154h490v-154h-490z" />
+<glyph unicode="&#x2012;" horiz-adv-x="561" d="M35 538v154h490v-154h-490z" />
+<glyph unicode="&#x2013;" horiz-adv-x="1416" d="M169 648v155h1086v-155h-1086z" />
+<glyph unicode="&#x2014;" horiz-adv-x="1660" d="M141 648v155h1336v-155h-1336z" />
+<glyph unicode="&#x2018;" horiz-adv-x="418" d="M80 1020v184l160 356h97l-60 -362v-178h-197z" />
+<glyph unicode="&#x2019;" horiz-adv-x="418" d="M80 1021l60 343v196h197v-193l-160 -346h-97z" />
+<glyph unicode="&#x201a;" horiz-adv-x="417" d="M80 -255l60 263v241h197v-223l-160 -281h-97z" />
+<glyph unicode="&#x201c;" horiz-adv-x="744" d="M80 1020v184l160 356h97l-60 -362v-178h-197zM409 1020v184l160 356h97l-60 -362v-178h-197z" />
+<glyph unicode="&#x201d;" horiz-adv-x="752" d="M80 1021l60 343v196h197v-193l-160 -346h-97zM417 1021l60 343v196h197v-193l-160 -346h-97z" />
+<glyph unicode="&#x201e;" horiz-adv-x="726" d="M80 -239l60 325v194h197v-184l-160 -335h-97zM388 -239l60 333v186h197v-184l-160 -335h-97z" />
+<glyph unicode="&#x2022;" horiz-adv-x="695" d="M137 733v60q0 88 56 144t150 56q95 0 151.5 -56t56.5 -144v-60q0 -89 -56 -143.5t-151 -54.5t-151 55t-56 143z" />
+<glyph unicode="&#x2026;" horiz-adv-x="1380" d="M161 0v202h197v-202h-197zM604 0v202h197v-202h-197zM1024 0v202h197v-202h-197z" />
+<glyph unicode="&#x202f;" horiz-adv-x="386" />
+<glyph unicode="&#x2039;" horiz-adv-x="615" d="M108 541v19l295 389h148l-255 -399l255 -398h-148z" />
+<glyph unicode="&#x203a;" horiz-adv-x="615" d="M88 152l255 398l-255 399h148l295 -389v-19l-295 -389h-148z" />
+<glyph unicode="&#x205f;" horiz-adv-x="483" />
+<glyph unicode="&#x20ac;" horiz-adv-x="1088" d="M79 481v155h146v136h-146v155h146v15q0 244 141.5 389.5t372.5 145.5q59 0 117.5 -8t124.5 -23l-19 -159q-54 16 -110.5 25.5t-112.5 9.5q-146 0 -231.5 -103t-85.5 -275v-17h492v-155h-492v-136h492v-155h-485l-2 -5q-4 -138 81.5 -240.5t232.5 -102.5q57 0 113 8.5 t108 25.5l19 -157q-56 -15 -117.5 -23t-122.5 -8q-231 0 -373.5 144.5t-142.5 357.5h-146z" />
+<glyph unicode="&#x2122;" horiz-adv-x="1284" d="M103 1374v82h384v-82h-145v-455h-94v455h-145zM565 919v537h116l161 -390h6l162 390h110v-537h-93v343l-6 2l-150 -345h-51l-156 359l-6 -2v-357h-93z" />
+<glyph unicode="&#xe000;" horiz-adv-x="1080" d="M0 0v1080h1080v-1080h-1080z" />
+<glyph unicode="&#xfb02;" horiz-adv-x="1223" d="M56 936v146h169v137q0 173 90.5 267.5t252.5 94.5q34 0 68.5 -5.5t76.5 -15.5l-24 -150q-18 4 -43.5 7t-53.5 3q-86 0 -128 -51.5t-42 -149.5v-137h225v-146h-225v-936h-197v936h-169zM866 0v1560h197v-1560h-197z" />
+<glyph unicode="&#xfb03;" horiz-adv-x="1847" d="M56 936v146h169v137q0 173 90.5 267.5t252.5 94.5q34 0 68.5 -5.5t76.5 -15.5l-24 -150q-18 4 -43.5 7t-53.5 3q-86 0 -128 -51.5t-42 -149.5v-137h225v-146h-225v-936h-197v936h-169zM735 936v146h170v117q0 182 106.5 282t295.5 100q67 0 132 -15.5t153 -45.5l-34 -160 q-53 21 -113 36t-123 15q-117 0 -168.5 -52t-51.5 -160v-117h215v-146h-215v-936h-197v936h-170zM1490 0v1082h198v-1082h-198z" />
+<glyph unicode="&#xfb04;" horiz-adv-x="1930" d="M56 936v146h169v137q0 173 90.5 267.5t252.5 94.5q34 0 68.5 -5.5t76.5 -15.5l-24 -150q-18 4 -43.5 7t-53.5 3q-86 0 -128 -51.5t-42 -149.5v-137h225v-146h-225v-936h-197v936h-169zM763 936v146h169v137q0 173 90.5 267.5t252.5 94.5q34 0 68.5 -5.5t76.5 -15.5 l-24 -150q-18 4 -43.5 7t-53.5 3q-86 0 -128 -51.5t-42 -149.5v-137h225v-146h-225v-936h-197v936h-169zM1573 0v1560h197v-1560h-197z" />
+<hkern u1="&#x22;" u2="w" k="-11" />
+<hkern u1="&#x27;" u2="w" k="-11" />
+<hkern u1="&#x28;" u2="&#x178;" k="-22" />
+<hkern u1="&#x28;" u2="&#xdd;" k="-22" />
+<hkern u1="&#x28;" u2="Y" k="-22" />
+<hkern u1="&#x28;" u2="W" k="-37" />
+<hkern u1="&#x28;" u2="V" k="-20" />
+<hkern u1="A" u2="w" k="33" />
+<hkern u1="A" u2="t" k="17" />
+<hkern u1="A" u2="&#x3f;" k="80" />
+<hkern u1="C" u2="&#x7d;" k="17" />
+<hkern u1="C" u2="]" k="12" />
+<hkern u1="C" u2="&#x29;" k="26" />
+<hkern u1="D" u2="&#xc6;" k="33" />
+<hkern u1="E" u2="w" k="22" />
+<hkern u1="E" u2="f" k="18" />
+<hkern u1="F" u2="&#x2026;" k="273" />
+<hkern u1="F" u2="&#x201e;" k="273" />
+<hkern u1="F" u2="&#x201a;" k="273" />
+<hkern u1="F" u2="&#x153;" k="21" />
+<hkern u1="F" u2="&#xff;" k="24" />
+<hkern u1="F" u2="&#xfd;" k="24" />
+<hkern u1="F" u2="&#xfc;" k="22" />
+<hkern u1="F" u2="&#xfb;" k="22" />
+<hkern u1="F" u2="&#xfa;" k="22" />
+<hkern u1="F" u2="&#xf9;" k="22" />
+<hkern u1="F" u2="&#xf6;" k="21" />
+<hkern u1="F" u2="&#xf5;" k="21" />
+<hkern u1="F" u2="&#xf4;" k="21" />
+<hkern u1="F" u2="&#xf3;" k="21" />
+<hkern u1="F" u2="&#xf2;" k="21" />
+<hkern u1="F" u2="&#xeb;" k="21" />
+<hkern u1="F" u2="&#xea;" k="21" />
+<hkern u1="F" u2="&#xe9;" k="21" />
+<hkern u1="F" u2="&#xe8;" k="21" />
+<hkern u1="F" u2="&#xe7;" k="21" />
+<hkern u1="F" u2="&#xe5;" k="34" />
+<hkern u1="F" u2="&#xe4;" k="34" />
+<hkern u1="F" u2="&#xe3;" k="34" />
+<hkern u1="F" u2="&#xe2;" k="34" />
+<hkern u1="F" u2="&#xe1;" k="34" />
+<hkern u1="F" u2="&#xe0;" k="34" />
+<hkern u1="F" u2="&#xc5;" k="59" />
+<hkern u1="F" u2="&#xc4;" k="59" />
+<hkern u1="F" u2="&#xc3;" k="59" />
+<hkern u1="F" u2="&#xc2;" k="59" />
+<hkern u1="F" u2="&#xc1;" k="59" />
+<hkern u1="F" u2="&#xc0;" k="59" />
+<hkern u1="F" u2="y" k="24" />
+<hkern u1="F" u2="v" k="24" />
+<hkern u1="F" u2="u" k="22" />
+<hkern u1="F" u2="r" k="26" />
+<hkern u1="F" u2="q" k="21" />
+<hkern u1="F" u2="o" k="21" />
+<hkern u1="F" u2="g" k="21" />
+<hkern u1="F" u2="e" k="21" />
+<hkern u1="F" u2="d" k="21" />
+<hkern u1="F" u2="c" k="21" />
+<hkern u1="F" u2="a" k="34" />
+<hkern u1="F" u2="T" k="-20" />
+<hkern u1="F" u2="A" k="59" />
+<hkern u1="F" u2="&#x3a;" k="273" />
+<hkern u1="F" u2="&#x2e;" k="273" />
+<hkern u1="F" u2="&#x2c;" k="273" />
+<hkern u1="K" u2="w" k="63" />
+<hkern u1="L" u2="w" k="52" />
+<hkern u1="O" u2="&#xc6;" k="33" />
+<hkern u1="P" u2="&#xc6;" k="293" />
+<hkern u1="P" u2="t" k="-14" />
+<hkern u1="Q" u2="&#x178;" k="35" />
+<hkern u1="Q" u2="&#xdd;" k="35" />
+<hkern u1="Q" u2="Y" k="35" />
+<hkern u1="Q" u2="W" k="20" />
+<hkern u1="Q" u2="V" k="28" />
+<hkern u1="Q" u2="T" k="33" />
+<hkern u1="R" u2="&#x178;" k="48" />
+<hkern u1="R" u2="&#xdd;" k="48" />
+<hkern u1="R" u2="Y" k="48" />
+<hkern u1="R" u2="V" k="19" />
+<hkern u1="R" u2="T" k="50" />
+<hkern u1="T" u2="&#xf8;" k="95" />
+<hkern u1="T" u2="&#xe6;" k="84" />
+<hkern u1="T" u2="&#xc6;" k="188" />
+<hkern u1="T" u2="&#xbb;" k="147" />
+<hkern u1="T" u2="&#xab;" k="151" />
+<hkern u1="T" u2="w" k="47" />
+<hkern u1="T" u2="r" k="65" />
+<hkern u1="V" u2="&#x7d;" k="-19" />
+<hkern u1="V" u2="r" k="30" />
+<hkern u1="V" u2="]" k="-17" />
+<hkern u1="V" u2="&#x29;" k="-20" />
+<hkern u1="W" u2="&#x7d;" k="-14" />
+<hkern u1="W" u2="r" k="21" />
+<hkern u1="W" u2="]" k="-12" />
+<hkern u1="W" u2="&#x29;" k="-15" />
+<hkern u1="Y" u2="&#x2022;" k="45" />
+<hkern u1="Y" u2="&#xf8;" k="64" />
+<hkern u1="Y" u2="&#xe6;" k="63" />
+<hkern u1="Y" u2="&#xc6;" k="96" />
+<hkern u1="Y" u2="&#xbb;" k="51" />
+<hkern u1="Y" u2="&#xab;" k="82" />
+<hkern u1="Y" u2="&#x7d;" k="-19" />
+<hkern u1="Y" u2="t" k="22" />
+<hkern u1="Y" u2="r" k="40" />
+<hkern u1="Y" u2="f" k="22" />
+<hkern u1="Y" u2="]" k="-18" />
+<hkern u1="Y" u2="&#x2a;" k="49" />
+<hkern u1="Y" u2="&#x29;" k="-20" />
+<hkern u1="Y" u2="&#x26;" k="30" />
+<hkern u1="Z" u2="w" k="27" />
+<hkern u1="[" u2="&#xdc;" k="18" />
+<hkern u1="[" u2="&#xdb;" k="18" />
+<hkern u1="[" u2="&#xda;" k="18" />
+<hkern u1="[" u2="&#xd9;" k="18" />
+<hkern u1="[" u2="U" k="18" />
+<hkern u1="[" u2="J" k="18" />
+<hkern u1="f" u2="&#x201d;" k="-16" />
+<hkern u1="f" u2="&#x201c;" k="-16" />
+<hkern u1="f" u2="&#x2019;" k="-16" />
+<hkern u1="f" u2="&#x2018;" k="-16" />
+<hkern u1="f" u2="&#x153;" k="24" />
+<hkern u1="f" u2="&#xeb;" k="24" />
+<hkern u1="f" u2="&#xea;" k="24" />
+<hkern u1="f" u2="&#xe9;" k="24" />
+<hkern u1="f" u2="&#xe8;" k="24" />
+<hkern u1="f" u2="&#xe7;" k="24" />
+<hkern u1="f" u2="&#x7d;" k="-19" />
+<hkern u1="f" u2="q" k="24" />
+<hkern u1="f" u2="g" k="24" />
+<hkern u1="f" u2="e" k="24" />
+<hkern u1="f" u2="d" k="24" />
+<hkern u1="f" u2="c" k="24" />
+<hkern u1="f" u2="]" k="-18" />
+<hkern u1="f" u2="&#x29;" k="-20" />
+<hkern u1="f" u2="&#x27;" k="-16" />
+<hkern u1="f" u2="&#x22;" k="-16" />
+<hkern u1="k" u2="&#x153;" k="20" />
+<hkern u1="k" u2="&#xeb;" k="20" />
+<hkern u1="k" u2="&#xea;" k="20" />
+<hkern u1="k" u2="&#xe9;" k="20" />
+<hkern u1="k" u2="&#xe8;" k="20" />
+<hkern u1="k" u2="&#xe7;" k="20" />
+<hkern u1="k" u2="q" k="20" />
+<hkern u1="k" u2="g" k="20" />
+<hkern u1="k" u2="e" k="20" />
+<hkern u1="k" u2="d" k="20" />
+<hkern u1="k" u2="c" k="20" />
+<hkern u1="r" u2="w" k="-17" />
+<hkern u1="r" u2="t" k="-17" />
+<hkern u1="r" u2="f" k="-15" />
+<hkern u1="v" u2="f" k="-13" />
+<hkern u1="w" u2="&#x2026;" k="124" />
+<hkern u1="w" u2="&#x201e;" k="124" />
+<hkern u1="w" u2="&#x201a;" k="124" />
+<hkern u1="w" u2="&#x3a;" k="124" />
+<hkern u1="w" u2="&#x2e;" k="124" />
+<hkern u1="w" u2="&#x2c;" k="124" />
+<hkern u1="y" u2="f" k="-13" />
+<hkern u1="&#x7b;" u2="&#xdc;" k="20" />
+<hkern u1="&#x7b;" u2="&#xdb;" k="20" />
+<hkern u1="&#x7b;" u2="&#xda;" k="20" />
+<hkern u1="&#x7b;" u2="&#xd9;" k="20" />
+<hkern u1="&#x7b;" u2="U" k="20" />
+<hkern u1="&#x7b;" u2="J" k="20" />
+<hkern u1="&#xc0;" u2="w" k="33" />
+<hkern u1="&#xc0;" u2="t" k="17" />
+<hkern u1="&#xc0;" u2="&#x3f;" k="80" />
+<hkern u1="&#xc1;" u2="w" k="33" />
+<hkern u1="&#xc1;" u2="t" k="17" />
+<hkern u1="&#xc1;" u2="&#x3f;" k="80" />
+<hkern u1="&#xc2;" u2="w" k="33" />
+<hkern u1="&#xc2;" u2="t" k="17" />
+<hkern u1="&#xc2;" u2="&#x3f;" k="80" />
+<hkern u1="&#xc3;" u2="w" k="33" />
+<hkern u1="&#xc3;" u2="t" k="17" />
+<hkern u1="&#xc3;" u2="&#x3f;" k="80" />
+<hkern u1="&#xc4;" u2="w" k="33" />
+<hkern u1="&#xc4;" u2="t" k="17" />
+<hkern u1="&#xc4;" u2="&#x3f;" k="80" />
+<hkern u1="&#xc5;" u2="w" k="33" />
+<hkern u1="&#xc5;" u2="t" k="17" />
+<hkern u1="&#xc5;" u2="&#x3f;" k="80" />
+<hkern u1="&#xc7;" u2="&#x7d;" k="17" />
+<hkern u1="&#xc7;" u2="]" k="12" />
+<hkern u1="&#xc7;" u2="&#x29;" k="26" />
+<hkern u1="&#xc8;" u2="w" k="22" />
+<hkern u1="&#xc8;" u2="f" k="18" />
+<hkern u1="&#xc9;" u2="w" k="22" />
+<hkern u1="&#xc9;" u2="f" k="18" />
+<hkern u1="&#xca;" u2="w" k="22" />
+<hkern u1="&#xca;" u2="f" k="18" />
+<hkern u1="&#xcb;" u2="w" k="22" />
+<hkern u1="&#xcb;" u2="f" k="18" />
+<hkern u1="&#xd0;" u2="&#xc6;" k="33" />
+<hkern u1="&#xd2;" u2="&#xc6;" k="33" />
+<hkern u1="&#xd3;" u2="&#xc6;" k="33" />
+<hkern u1="&#xd4;" u2="&#xc6;" k="33" />
+<hkern u1="&#xd5;" u2="&#xc6;" k="33" />
+<hkern u1="&#xd6;" u2="&#xc6;" k="33" />
+<hkern u1="&#xdd;" u2="&#x2022;" k="45" />
+<hkern u1="&#xdd;" u2="&#xf8;" k="64" />
+<hkern u1="&#xdd;" u2="&#xe6;" k="63" />
+<hkern u1="&#xdd;" u2="&#xc6;" k="96" />
+<hkern u1="&#xdd;" u2="&#xbb;" k="51" />
+<hkern u1="&#xdd;" u2="&#xab;" k="82" />
+<hkern u1="&#xdd;" u2="&#x7d;" k="-19" />
+<hkern u1="&#xdd;" u2="t" k="22" />
+<hkern u1="&#xdd;" u2="r" k="40" />
+<hkern u1="&#xdd;" u2="f" k="22" />
+<hkern u1="&#xdd;" u2="]" k="-18" />
+<hkern u1="&#xdd;" u2="&#x2a;" k="49" />
+<hkern u1="&#xdd;" u2="&#x29;" k="-20" />
+<hkern u1="&#xdd;" u2="&#x26;" k="30" />
+<hkern u1="&#xfd;" u2="f" k="-13" />
+<hkern u1="&#xff;" u2="f" k="-13" />
+<hkern u1="&#x178;" u2="&#x2022;" k="45" />
+<hkern u1="&#x178;" u2="&#xf8;" k="64" />
+<hkern u1="&#x178;" u2="&#xe6;" k="63" />
+<hkern u1="&#x178;" u2="&#xc6;" k="96" />
+<hkern u1="&#x178;" u2="&#xbb;" k="51" />
+<hkern u1="&#x178;" u2="&#xab;" k="82" />
+<hkern u1="&#x178;" u2="&#x7d;" k="-19" />
+<hkern u1="&#x178;" u2="t" k="22" />
+<hkern u1="&#x178;" u2="r" k="40" />
+<hkern u1="&#x178;" u2="f" k="22" />
+<hkern u1="&#x178;" u2="]" k="-18" />
+<hkern u1="&#x178;" u2="&#x2a;" k="49" />
+<hkern u1="&#x178;" u2="&#x29;" k="-20" />
+<hkern u1="&#x178;" u2="&#x26;" k="30" />
+<hkern u1="&#x2018;" u2="w" k="-11" />
+<hkern u1="&#x2019;" u2="w" k="-11" />
+<hkern u1="&#x201c;" u2="w" k="-11" />
+<hkern u1="&#x201d;" u2="w" k="-11" />
+<hkern g1="comma,period,colon,quotesinglbase,quotedblbase,ellipsis" 	g2="quotedbl,quotesingle,quoteleft,quoteright,quotedblleft,quotedblright" 	k="282" />
+<hkern g1="B" 	g2="T" 	k="27" />
+<hkern g1="B" 	g2="V" 	k="24" />
+<hkern g1="B" 	g2="Y,Yacute,Ydieresis" 	k="55" />
+<hkern g1="C,Ccedilla" 	g2="T" 	k="29" />
+<hkern g1="D,O,Eth,Ograve,Oacute,Ocircumflex,Otilde,Odieresis" 	g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" 	k="21" />
+<hkern g1="D,O,Eth,Ograve,Oacute,Ocircumflex,Otilde,Odieresis" 	g2="T" 	k="27" />
+<hkern g1="D,O,Eth,Ograve,Oacute,Ocircumflex,Otilde,Odieresis" 	g2="V" 	k="22" />
+<hkern g1="D,O,Eth,Ograve,Oacute,Ocircumflex,Otilde,Odieresis" 	g2="Y,Yacute,Ydieresis" 	k="43" />
+<hkern g1="D,O,Eth,Ograve,Oacute,Ocircumflex,Otilde,Odieresis" 	g2="comma,period,colon,quotesinglbase,quotedblbase,ellipsis" 	k="121" />
+<hkern g1="D,O,Eth,Ograve,Oacute,Ocircumflex,Otilde,Odieresis" 	g2="X" 	k="22" />
+<hkern g1="D,O,Eth,Ograve,Oacute,Ocircumflex,Otilde,Odieresis" 	g2="Z" 	k="23" />
+<hkern g1="E,Egrave,Eacute,Ecircumflex,Edieresis" 	g2="c,d,e,g,q,ccedilla,egrave,eacute,ecircumflex,edieresis,oe" 	k="19" />
+<hkern g1="E,Egrave,Eacute,Ecircumflex,Edieresis" 	g2="o,ograve,oacute,ocircumflex,otilde,odieresis" 	k="19" />
+<hkern g1="E,Egrave,Eacute,Ecircumflex,Edieresis" 	g2="T" 	k="-20" />
+<hkern g1="E,Egrave,Eacute,Ecircumflex,Edieresis" 	g2="u,ugrave,uacute,ucircumflex,udieresis" 	k="17" />
+<hkern g1="E,Egrave,Eacute,Ecircumflex,Edieresis" 	g2="v,y,yacute,ydieresis" 	k="26" />
+<hkern g1="H,I,M,N,Igrave,Iacute,Icircumflex,Idieresis,Ntilde" 	g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" 	k="-18" />
+<hkern g1="H,I,M,N,Igrave,Iacute,Icircumflex,Idieresis,Ntilde" 	g2="T" 	k="29" />
+<hkern g1="H,I,M,N,Igrave,Iacute,Icircumflex,Idieresis,Ntilde" 	g2="Y,Yacute,Ydieresis" 	k="28" />
+<hkern g1="H,I,M,N,Igrave,Iacute,Icircumflex,Idieresis,Ntilde" 	g2="X" 	k="-17" />
+<hkern g1="J,U,Ugrave,Uacute,Ucircumflex,Udieresis" 	g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" 	k="22" />
+<hkern g1="K" 	g2="c,d,e,g,q,ccedilla,egrave,eacute,ecircumflex,edieresis,oe" 	k="26" />
+<hkern g1="K" 	g2="o,ograve,oacute,ocircumflex,otilde,odieresis" 	k="27" />
+<hkern g1="K" 	g2="u,ugrave,uacute,ucircumflex,udieresis" 	k="23" />
+<hkern g1="K" 	g2="v,y,yacute,ydieresis" 	k="40" />
+<hkern g1="K" 	g2="hyphen,uni00AD,endash,emdash" 	k="162" />
+<hkern g1="K" 	g2="C,G,O,Q,Ccedilla,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" 	k="31" />
+<hkern g1="L" 	g2="quotedbl,quotesingle,quoteleft,quoteright,quotedblleft,quotedblright" 	k="255" />
+<hkern g1="L" 	g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" 	k="-19" />
+<hkern g1="L" 	g2="T" 	k="206" />
+<hkern g1="L" 	g2="V" 	k="205" />
+<hkern g1="L" 	g2="Y,Yacute,Ydieresis" 	k="278" />
+<hkern g1="L" 	g2="u,ugrave,uacute,ucircumflex,udieresis" 	k="14" />
+<hkern g1="L" 	g2="v,y,yacute,ydieresis" 	k="123" />
+<hkern g1="L" 	g2="C,G,O,Q,Ccedilla,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" 	k="25" />
+<hkern g1="L" 	g2="U,Ugrave,Uacute,Ucircumflex,Udieresis" 	k="24" />
+<hkern g1="L" 	g2="W" 	k="93" />
+<hkern g1="P" 	g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" 	k="177" />
+<hkern g1="P" 	g2="a,agrave,aacute,acircumflex,atilde,adieresis,aring" 	k="11" />
+<hkern g1="P" 	g2="c,d,e,g,q,ccedilla,egrave,eacute,ecircumflex,edieresis,oe" 	k="13" />
+<hkern g1="P" 	g2="o,ograve,oacute,ocircumflex,otilde,odieresis" 	k="13" />
+<hkern g1="P" 	g2="comma,period,colon,quotesinglbase,quotedblbase,ellipsis" 	k="402" />
+<hkern g1="P" 	g2="X" 	k="50" />
+<hkern g1="P" 	g2="Z" 	k="35" />
+<hkern g1="P" 	g2="v,y,yacute,ydieresis" 	k="-15" />
+<hkern g1="T" 	g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" 	k="108" />
+<hkern g1="T" 	g2="a,agrave,aacute,acircumflex,atilde,adieresis,aring" 	k="83" />
+<hkern g1="T" 	g2="c,d,e,g,q,ccedilla,egrave,eacute,ecircumflex,edieresis,oe" 	k="89" />
+<hkern g1="T" 	g2="m,n,p,ntilde" 	k="89" />
+<hkern g1="T" 	g2="o,ograve,oacute,ocircumflex,otilde,odieresis" 	k="79" />
+<hkern g1="T" 	g2="s" 	k="76" />
+<hkern g1="T" 	g2="T" 	k="-16" />
+<hkern g1="T" 	g2="V" 	k="-16" />
+<hkern g1="T" 	g2="Y,Yacute,Ydieresis" 	k="-16" />
+<hkern g1="T" 	g2="comma,period,colon,quotesinglbase,quotedblbase,ellipsis" 	k="257" />
+<hkern g1="T" 	g2="u,ugrave,uacute,ucircumflex,udieresis" 	k="65" />
+<hkern g1="T" 	g2="v,y,yacute,ydieresis" 	k="81" />
+<hkern g1="T" 	g2="hyphen,uni00AD,endash,emdash" 	k="271" />
+<hkern g1="T" 	g2="C,G,O,Q,Ccedilla,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" 	k="28" />
+<hkern g1="T" 	g2="W" 	k="-15" />
+<hkern g1="T" 	g2="S" 	k="16" />
+<hkern g1="T" 	g2="x" 	k="77" />
+<hkern g1="T" 	g2="z" 	k="60" />
+<hkern g1="V" 	g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" 	k="75" />
+<hkern g1="V" 	g2="a,agrave,aacute,acircumflex,atilde,adieresis,aring" 	k="46" />
+<hkern g1="V" 	g2="c,d,e,g,q,ccedilla,egrave,eacute,ecircumflex,edieresis,oe" 	k="44" />
+<hkern g1="V" 	g2="o,ograve,oacute,ocircumflex,otilde,odieresis" 	k="46" />
+<hkern g1="V" 	g2="comma,period,colon,quotesinglbase,quotedblbase,ellipsis" 	k="215" />
+<hkern g1="V" 	g2="u,ugrave,uacute,ucircumflex,udieresis" 	k="28" />
+<hkern g1="V" 	g2="v,y,yacute,ydieresis" 	k="11" />
+<hkern g1="V" 	g2="hyphen,uni00AD,endash,emdash" 	k="154" />
+<hkern g1="V" 	g2="C,G,O,Q,Ccedilla,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" 	k="13" />
+<hkern g1="W" 	g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" 	k="43" />
+<hkern g1="W" 	g2="a,agrave,aacute,acircumflex,atilde,adieresis,aring" 	k="33" />
+<hkern g1="W" 	g2="c,d,e,g,q,ccedilla,egrave,eacute,ecircumflex,edieresis,oe" 	k="31" />
+<hkern g1="W" 	g2="o,ograve,oacute,ocircumflex,otilde,odieresis" 	k="31" />
+<hkern g1="W" 	g2="T" 	k="-14" />
+<hkern g1="W" 	g2="comma,period,colon,quotesinglbase,quotedblbase,ellipsis" 	k="142" />
+<hkern g1="W" 	g2="u,ugrave,uacute,ucircumflex,udieresis" 	k="19" />
+<hkern g1="W" 	g2="hyphen,uni00AD,endash,emdash" 	k="60" />
+<hkern g1="X" 	g2="c,d,e,g,q,ccedilla,egrave,eacute,ecircumflex,edieresis,oe" 	k="26" />
+<hkern g1="X" 	g2="o,ograve,oacute,ocircumflex,otilde,odieresis" 	k="21" />
+<hkern g1="X" 	g2="V" 	k="-14" />
+<hkern g1="X" 	g2="u,ugrave,uacute,ucircumflex,udieresis" 	k="21" />
+<hkern g1="X" 	g2="v,y,yacute,ydieresis" 	k="31" />
+<hkern g1="X" 	g2="hyphen,uni00AD,endash,emdash" 	k="153" />
+<hkern g1="X" 	g2="C,G,O,Q,Ccedilla,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" 	k="25" />
+<hkern g1="Y,Yacute,Ydieresis" 	g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" 	k="148" />
+<hkern g1="Y,Yacute,Ydieresis" 	g2="a,agrave,aacute,acircumflex,atilde,adieresis,aring" 	k="63" />
+<hkern g1="Y,Yacute,Ydieresis" 	g2="c,d,e,g,q,ccedilla,egrave,eacute,ecircumflex,edieresis,oe" 	k="65" />
+<hkern g1="Y,Yacute,Ydieresis" 	g2="m,n,p,ntilde" 	k="40" />
+<hkern g1="Y,Yacute,Ydieresis" 	g2="o,ograve,oacute,ocircumflex,otilde,odieresis" 	k="65" />
+<hkern g1="Y,Yacute,Ydieresis" 	g2="s" 	k="58" />
+<hkern g1="Y,Yacute,Ydieresis" 	g2="T" 	k="-17" />
+<hkern g1="Y,Yacute,Ydieresis" 	g2="V" 	k="-18" />
+<hkern g1="Y,Yacute,Ydieresis" 	g2="Y,Yacute,Ydieresis" 	k="-18" />
+<hkern g1="Y,Yacute,Ydieresis" 	g2="comma,period,colon,quotesinglbase,quotedblbase,ellipsis" 	k="230" />
+<hkern g1="Y,Yacute,Ydieresis" 	g2="X" 	k="-13" />
+<hkern g1="Y,Yacute,Ydieresis" 	g2="u,ugrave,uacute,ucircumflex,udieresis" 	k="39" />
+<hkern g1="Y,Yacute,Ydieresis" 	g2="v,y,yacute,ydieresis" 	k="20" />
+<hkern g1="Y,Yacute,Ydieresis" 	g2="hyphen,uni00AD,endash,emdash" 	k="150" />
+<hkern g1="Y,Yacute,Ydieresis" 	g2="C,G,O,Q,Ccedilla,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" 	k="29" />
+<hkern g1="Y,Yacute,Ydieresis" 	g2="U,Ugrave,Uacute,Ucircumflex,Udieresis" 	k="96" />
+<hkern g1="Y,Yacute,Ydieresis" 	g2="W" 	k="-17" />
+<hkern g1="Y,Yacute,Ydieresis" 	g2="S" 	k="16" />
+<hkern g1="Y,Yacute,Ydieresis" 	g2="x" 	k="23" />
+<hkern g1="Y,Yacute,Ydieresis" 	g2="z" 	k="30" />
+<hkern g1="Y,Yacute,Ydieresis" 	g2="J" 	k="96" />
+<hkern g1="Z" 	g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" 	k="-13" />
+<hkern g1="Z" 	g2="c,d,e,g,q,ccedilla,egrave,eacute,ecircumflex,edieresis,oe" 	k="21" />
+<hkern g1="Z" 	g2="o,ograve,oacute,ocircumflex,otilde,odieresis" 	k="21" />
+<hkern g1="Z" 	g2="u,ugrave,uacute,ucircumflex,udieresis" 	k="19" />
+<hkern g1="Z" 	g2="v,y,yacute,ydieresis" 	k="27" />
+<hkern g1="Z" 	g2="C,G,O,Q,Ccedilla,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" 	k="26" />
+<hkern g1="a,agrave,aacute,acircumflex,atilde,adieresis,aring" 	g2="quotedbl,quotesingle,quoteleft,quoteright,quotedblleft,quotedblright" 	k="17" />
+<hkern g1="a,agrave,aacute,acircumflex,atilde,adieresis,aring" 	g2="v,y,yacute,ydieresis" 	k="15" />
+<hkern g1="b,p,thorn" 	g2="quotedbl,quotesingle,quoteleft,quoteright,quotedblleft,quotedblright" 	k="29" />
+<hkern g1="b,p,thorn" 	g2="v,y,yacute,ydieresis" 	k="11" />
+<hkern g1="b,p,thorn" 	g2="x" 	k="15" />
+<hkern g1="b,p,thorn" 	g2="z" 	k="15" />
+<hkern g1="c,ccedilla" 	g2="quotedbl,quotesingle,quoteleft,quoteright,quotedblleft,quotedblright" 	k="11" />
+<hkern g1="e,egrave,eacute,ecircumflex,edieresis" 	g2="quotedbl,quotesingle,quoteleft,quoteright,quotedblleft,quotedblright" 	k="14" />
+<hkern g1="e,egrave,eacute,ecircumflex,edieresis" 	g2="v,y,yacute,ydieresis" 	k="13" />
+<hkern g1="h,m,n,ntilde" 	g2="quotedbl,quotesingle,quoteleft,quoteright,quotedblleft,quotedblright" 	k="16" />
+<hkern g1="o,ograve,oacute,ocircumflex,otilde,odieresis" 	g2="quotedbl,quotesingle,quoteleft,quoteright,quotedblleft,quotedblright" 	k="20" />
+<hkern g1="o,ograve,oacute,ocircumflex,otilde,odieresis" 	g2="v,y,yacute,ydieresis" 	k="15" />
+<hkern g1="o,ograve,oacute,ocircumflex,otilde,odieresis" 	g2="x" 	k="21" />
+<hkern g1="o,ograve,oacute,ocircumflex,otilde,odieresis" 	g2="z" 	k="16" />
+<hkern g1="r" 	g2="quotedbl,quotesingle,quoteleft,quoteright,quotedblleft,quotedblright" 	k="-16" />
+<hkern g1="r" 	g2="c,d,e,g,q,ccedilla,egrave,eacute,ecircumflex,edieresis,oe" 	k="19" />
+<hkern g1="r" 	g2="o,ograve,oacute,ocircumflex,otilde,odieresis" 	k="20" />
+<hkern g1="r" 	g2="comma,period,colon,quotesinglbase,quotedblbase,ellipsis" 	k="172" />
+<hkern g1="r" 	g2="v,y,yacute,ydieresis" 	k="-18" />
+<hkern g1="v,y,yacute,ydieresis" 	g2="quotedbl,quotesingle,quoteleft,quoteright,quotedblleft,quotedblright" 	k="-15" />
+<hkern g1="v,y,yacute,ydieresis" 	g2="a,agrave,aacute,acircumflex,atilde,adieresis,aring" 	k="15" />
+<hkern g1="v,y,yacute,ydieresis" 	g2="c,d,e,g,q,ccedilla,egrave,eacute,ecircumflex,edieresis,oe" 	k="13" />
+<hkern g1="v,y,yacute,ydieresis" 	g2="o,ograve,oacute,ocircumflex,otilde,odieresis" 	k="15" />
+<hkern g1="v,y,yacute,ydieresis" 	g2="comma,period,colon,quotesinglbase,quotedblbase,ellipsis" 	k="165" />
+<hkern g1="x" 	g2="c,d,e,g,q,ccedilla,egrave,eacute,ecircumflex,edieresis,oe" 	k="20" />
+<hkern g1="x" 	g2="o,ograve,oacute,ocircumflex,otilde,odieresis" 	k="39" />
+<hkern g1="z" 	g2="c,d,e,g,q,ccedilla,egrave,eacute,ecircumflex,edieresis,oe" 	k="16" />
+<hkern g1="z" 	g2="o,ograve,oacute,ocircumflex,otilde,odieresis" 	k="16" />
+</font>
+</defs></svg> 
\ No newline at end of file
diff --git a/src/web/wwwroot/fonts/roboto/Roboto-Regular-webfont.ttf b/src/web/wwwroot/fonts/roboto/Roboto-Regular-webfont.ttf
new file mode 100755
index 0000000000000000000000000000000000000000..44dd78d5e1e3a23740297120dc4ff071a63f394d
Binary files /dev/null and b/src/web/wwwroot/fonts/roboto/Roboto-Regular-webfont.ttf differ
diff --git a/src/web/wwwroot/fonts/roboto/Roboto-Regular-webfont.woff b/src/web/wwwroot/fonts/roboto/Roboto-Regular-webfont.woff
new file mode 100755
index 0000000000000000000000000000000000000000..bfa05d53f4e4741bf790939272eb128580116bc1
Binary files /dev/null and b/src/web/wwwroot/fonts/roboto/Roboto-Regular-webfont.woff differ
diff --git a/src/web/wwwroot/fonts/satisfy/satisfy.eot b/src/web/wwwroot/fonts/satisfy/satisfy.eot
new file mode 100755
index 0000000000000000000000000000000000000000..5e30448c29e2d2b640b1e71e4e47b0c86a7d6525
Binary files /dev/null and b/src/web/wwwroot/fonts/satisfy/satisfy.eot differ
diff --git a/src/web/wwwroot/fonts/satisfy/satisfy.svg b/src/web/wwwroot/fonts/satisfy/satisfy.svg
new file mode 100755
index 0000000000000000000000000000000000000000..7e823a1d4677a932ee17cce171caf1c03d0c3557
--- /dev/null
+++ b/src/web/wwwroot/fonts/satisfy/satisfy.svg
@@ -0,0 +1,1341 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
+<svg>
+<metadata>
+Created by FontForge 20090622 at Tue May  3 17:37:16 2016
+ By deploy user
+Copyright (c) 2011 by Font Diner, Inc. All rights reserved.
+</metadata>
+<defs>
+<font id="Satisfy" horiz-adv-x="581" >
+  <font-face 
+    font-family="Satisfy"
+    font-weight="400"
+    font-stretch="normal"
+    units-per-em="1024"
+    panose-1="2 0 0 0 0 0 0 0 0 0"
+    ascent="819"
+    descent="-205"
+    x-height="387.5"
+    cap-height="751"
+    bbox="-215.143 -501 956.1 956.059"
+    underline-thickness="51"
+    underline-position="-52"
+    unicode-range="U+0020-U+FB02"
+  />
+<missing-glyph horiz-adv-x="287" 
+ />
+    <glyph glyph-name=".notdef" horiz-adv-x="287" 
+ />
+    <glyph glyph-name="Eth" unicode="&#xd0;" horiz-adv-x="648" 
+d="M300 258q-37 2 -93 0l-6 -24l-6 -23l-23 -85l-64 -224q14 -24 52 -24q42 0 97.5 32t107.5 96t91.5 160.5t49.5 225.5q5 70 -7 123t-36.5 89t-60 54t-78.5 18q-101 0 -209 -84l-5 83q26 29 59.5 44.5t62.5 23.5q34 9 69 10q64 0 123.5 -24.5t103 -74.5t66.5 -125.5
+t16 -176.5q-4 -58 -23.5 -120.5t-51 -122.5t-74.5 -114t-94 -94.5t-109 -64t-120 -23.5q-19 1 -41 7q-19 5 -43 17t-50 34q-9 6 -9.5 13t3.5 14q4 8 12 16q9 7 22.5 43.5t28 86.5t28.5 106.5l25 104.5q-26 -2 -64.5 -6t-75.5 -13q-1 7 0 15t3 15q2 8 5 15q4 9 11.5 20
+t13.5 14q8 3 43 6.5t79 5.5q1 12 3 21l11 61q5 29 11 67.5t11 85.5l80 36q17 8 24 -3.5t0 -47.5q-2 -12 -6.5 -35.5l-10.5 -53l-13.5 -63.5l-15.5 -68q29 -1 52 -2t44 -3q15 -2 17.5 -9.5t-3.5 -24.5t-13.5 -24t-19.5 -6z" />
+    <glyph glyph-name="eth" unicode="&#xf0;" horiz-adv-x="403" 
+d="M115 38q18 0 33 8.5t27 22t21.5 31t16.5 36.5q-7 -1 -13.5 -1.5t-14.5 -0.5q-38 0 -65.5 22.5t-42.5 57.5q-6 -21 -10 -41t-4 -38t2 -35.5t8 -31t16 -22t26 -8.5zM238 238q2 19 0 39t-7.5 36.5t-14 27t-20.5 10.5q-19 0 -36.5 -10.5t-32.5 -29.5q-3 -9 -3 -19
+q0 -16 2 -33.5t10 -31.5t25.5 -23.5t48.5 -9.5q5 0 10 0.5t10 1.5l5.5 23.5t2.5 18.5zM406 522q-17 -2 -40.5 -7l-49.5 -11q11 -56 10.5 -127.5t-17.5 -160.5q58 26 101 54t66 51q10 9 17.5 10t10.5 -4t1 -14t-11 -20q-5 -6 -26 -24.5t-49.5 -40t-61.5 -41.5t-61 -29
+q-10 -38 -27 -70.5t-40.5 -56.5t-53 -37.5t-64.5 -13.5q-41 0 -64.5 17.5t-35 43.5t-14 57t-2.5 58q0 19 4.5 42t12.5 47t20.5 48t29.5 44q6 17 18.5 30t29 21.5t35.5 13t37 4.5q3 0 5.5 -1t5.5 -2q14 -1 31.5 -8.5t36.5 -26.5q1 16 1 36q0 17 -1 39.5t-3 48.5
+q-8 -3 -23.5 -7t-34 -10t-39 -13.5t-38.5 -16.5q-2 6 -2.5 13t-0.5 13q0 7 1 14q2 10 6.5 21t9.5 14q6 5 39 15t73 19q-5 19 -11 36.5t-14 34.5q-3 6 -5 13.5t0 15.5q3 19 6.5 22t8.5 0q17 -10 35 -37.5t32 -74.5q35 7 60.5 11.5t50.5 6.5q13 2 16 -4t1 -24q-2 -15 -7 -22.5
+t-16 -9.5z" />
+    <glyph glyph-name="Lslash" unicode="&#x141;" horiz-adv-x="504" 
+d="M-1 -112q13 5 30 10t39 28q-15 5 -23 5q-36 0 -52.5 -10.5t-16.5 -20.5q0 -7 6 -10.5t17 -1.5zM377 584q-5 -15 -13 -44t-17 -67q54 35 86.5 80t32.5 90q0 27 -16 27q-14 0 -36 -21.5t-37 -64.5zM375 200q-20 -2 -46.5 -7.5l-56.5 -11.5q-4 -11 -7 -22t-7 -21
+q-14 -39 -35.5 -87t-52.5 -92l38.5 -25t39.5 -23.5t40.5 -17.5t43.5 -7q24 1 47 7q20 5 42 16.5t41 32.5q7 -12 4.5 -36t-15.5 -48t-37 -42t-60 -18q-38 0 -71 10.5t-62 25.5t-54.5 32.5l-47.5 32.5q-30 -29 -66 -47t-80 -18q-35 0 -56 19.5t-19 52.5q1 12 7 28.5t22.5 31.5
+t45.5 25.5t75 10.5q17 0 32.5 -3.5t30.5 -8.5q11 20 22 46l24 59q7 17 12.5 33t10.5 33q-26 -6 -59 -16.5t-63 -23.5q-2 7 -2.5 14.5t0.5 14.5l2 16q2 9 7.5 21.5t11.5 16.5q7 5 43.5 15t81.5 20q7 26 13 53t11 53q-14 -3 -29.5 -4t-31.5 -1q-51 0 -82.5 11t-42.5 28
+q-5 7 -9 21t3 31q14 -11 30.5 -16.5t30.5 -7.5q17 -3 33 -3q30 0 58.5 5t56.5 14q12 60 23.5 108t26.5 78q16 33 33.5 59.5t39 45t47.5 28.5t60 10q25 0 39.5 -10t22 -25t9 -32.5t1.5 -32.5q0 -33 -16 -72t-45 -77t-69.5 -72t-90.5 -56l-15.5 -61t-15.5 -59q26 4 47.5 6.5
+t42.5 4.5q14 1 18 -5.5t0 -26.5q-3 -17 -8.5 -24.5t-17.5 -9.5z" />
+    <glyph glyph-name="lslash" unicode="&#x142;" horiz-adv-x="224" 
+d="M254 364q-20 -3 -46.5 -8l-55.5 -11l-40.5 -154l-51.5 -201q-5 -5 -12 -7t-13 -2q-7 0 -15 1q-7 2 -14 6q-6 4 -12 10.5t-9 17.5l41.5 174l32.5 135l-58.5 -17t-62.5 -23q-2 7 -2.5 14.5t0.5 14.5l2 16q2 9 7 21t11 17q7 5 42 15t79 18q14 57 21.5 92t12.5 55q5 23 7 33
+q3 19 5 37q2 16 2 33t-3 31q8 5 17.5 8t18.5 5q11 3 22 5t20 2q8 0 15 -1.5t9 -6.5q6 -5 5.5 -20t-2.5 -31l-9 -41q-5 -14 -11 -40q-6 -22 -14.5 -57t-22.5 -87q27 5 48.5 7.5t43.5 4.5q15 1 18.5 -5.5t0.5 -26.5q-4 -17 -9.5 -24.5t-17.5 -9.5z" />
+    <glyph glyph-name="Scaron" unicode="&#x160;" horiz-adv-x="486" 
+d="M367 459q-1 3 6 15.5t15.5 31t17 42t12 48.5t-0.5 50t-21 48q-10 12 -29.5 13.5t-44 -6t-51 -23t-48.5 -36t-37.5 -45.5t-17.5 -51q-2 -21 1.5 -39t9.5 -33t13 -28t13 -23q8 -14 25 -31l37 -38.5t40 -48.5t35 -61t21 -76t-1 -93q-11 -74 -35 -123.5t-52.5 -79.5
+t-57.5 -43.5t-48 -17.5q-15 -3 -35.5 -5.5t-43 1t-45.5 14t-41 32.5q-21 25 -33 54q-11 25 -16.5 57.5t5.5 67.5q8 9 17 16t18 12q10 6 21 11q13 4 26 7q11 2 23.5 2.5t23.5 -3.5q-15 -17 -21 -32q-4 -8 -6 -14q-4 -19 -2.5 -45.5t11 -51t27.5 -42t48 -18.5q73 -2 124 114
+q17 36 17.5 73t-9 71t-25 63.5t-31.5 50.5t-38.5 45.5t-44.5 53.5t-39.5 63t-23.5 74q-8 56 10.5 102.5t50 81.5t69 57t66.5 28q161 32 211 -54q21 -33 23 -70t-4.5 -68.5t-16 -53t-12.5 -23.5q-6 -6 -19 -13t-42 -13q-8 -2 -16 -2q-7 0 -15 1t-14 4zM338 886
+q-10 15 -18 25.5t-20 17.5q7 5 17.5 5.5t20.5 0.5q11 -1 24 -2q19 -2 31.5 -15t30.5 -50q0 -1 0.5 -1.5t0.5 -1.5l50.5 41.5t15.5 13.5q17 13 33 11t30 -1h12q5 0 11 0.5t11 1.5q-5 -5 -17 -14.5l-25 -19.5q-15 -11 -32 -25l-16 -13l-20.5 -16l-19 -14.5t-12.5 -8.5
+q-3 -3 -14 -4.5t-23 -1.5t-22.5 2t-12.5 5t-7 12l-11 19.5l-11 19.5t-7 13z" />
+    <glyph glyph-name="scaron" unicode="&#x161;" horiz-adv-x="360" 
+d="M141 34q6 -4 15.5 -4t19 4t18 11t12.5 18t0 31.5t-12.5 44t-18.5 47.5t-17 44q-6 15 -10 28l-7.5 21.5t-5.5 14.5q-5 -8 -17.5 -26l-27 -37.5l-27.5 -36l-18 -22.5q-8 -9 -15.5 -10.5t-12.5 3t-5.5 13t7.5 20.5q6 8 18 25.5l24 36l22 33t11 17.5q2 8 -5.5 21t-2.5 30
+q4 14 18 32.5t33 33.5t39 22.5t36 -0.5q13 -8 21 -17.5t6 -19.5q-2 -5 -6 -13t-12 -19.5t-23 -29.5q3 -23 8.5 -42t10.5 -33q6 -17 13 -31l19 -37t18 -37.5t13 -34.5t3 -27q-3 -17 -17.5 -41t-36 -46.5t-49 -38.5t-57.5 -16q-21 0 -40.5 13t-33 30.5t-20 34.5t-1.5 26
+q6 12 11 19t15 16q4 3 10 7q5 3 14 6l21 7q10 -31 18 -48.5t13 -27.5q6 -11 11 -15zM124 600q-10 15 -18 25.5t-20 17.5q7 5 17.5 5.5t20.5 0.5q11 -1 24 -2q19 -2 31.5 -15t30.5 -50q0 -1 0.5 -1.5t0.5 -1.5l50.5 41.5t15.5 13.5q17 13 33 11t30 -1h12q5 0 11 0.5t11 1.5
+q-5 -5 -17 -14.5l-25 -19.5q-15 -11 -32 -25l-16 -13l-20.5 -16l-19 -14.5t-12.5 -8.5q-3 -3 -14 -4.5t-23 -1.5t-22.5 2t-12.5 5t-7 12l-11 19.5l-11 19.5t-7 13z" />
+    <glyph glyph-name="Yacute" unicode="&#xdd;" horiz-adv-x="545" 
+d="M157 77q-67 0 -97.5 43t-25.5 116q4 45 17 115q11 60 33.5 151t61.5 220q12 8 24.5 12.5t22.5 6.5q11 3 23 4q9 1 19 1q8 0 16 -1.5t13 -5.5q-51 -131 -79.5 -224t-42.5 -153q-17 -70 -21 -115q-3 -55 16.5 -78t58.5 -23q31 0 63 23.5t62 67t55.5 105t43.5 138.5
+q8 43 18 86l18 79.5l19 79.5q9 8 19.5 12.5t19.5 7.5q11 4 22 5q10 1 20 0q8 -1 16.5 -3t13.5 -7q-17 -53 -29.5 -96l-21.5 -74l-19 -64q-8 -30 -19 -78l-27 -106l-39 -158l-15 -60t-23.5 -75t-36 -77.5t-53 -69.5t-74.5 -50t-100 -19q-33 1 -59 10q-23 8 -42.5 23.5
+t-22.5 44.5q5 11 11 20t12 17q7 9 14 17q7 7 15 13q7 5 15 9t16 4q4 -9 12 -21t20 -22.5t27 -17.5t33 -7q24 0 51 15.5t53.5 53t51.5 101.5t47 161q-13 -23 -33 -50t-47.5 -51t-64 -40t-81.5 -16zM462 911q9 7 20 -1t16 -24q7 -21 1 -31.5t-18 -18.5q-6 -5 -22.5 -14
+t-36 -18.5t-38.5 -17t-29 -8.5q-11 -1 -17 2.5t-9.5 8.5t-4.5 11.5t-1 11.5q78 54 109 77z" />
+    <glyph glyph-name="yacute" unicode="&#xfd;" horiz-adv-x="416" 
+d="M263 368q13 10 25.5 15.5t22.5 7.5q11 3 22 2q27 -2 33.5 -17t1.5 -48q-3 -17 -12 -43l-21 -63.5t-25.5 -85.5t-25.5 -108q-12 -49 -26 -113l-28.5 -135t-35.5 -181q-5 -25 -21.5 -29t-34.5 4q-7 4 -13 9l-11 11.5t-10 17.5l40.5 153l31.5 120l28 106l9.5 41.5t9.5 40.5
+q-13 -21 -28 -40t-33 -33t-38.5 -21.5t-42.5 -4.5q-54 7 -76.5 40t-19.5 86q1 21 6 46t11 48t11.5 41.5t8.5 26.5q12 38 17.5 65t-8.5 45q14 9 26.5 12.5t22.5 5.5q11 1 22 0q27 -4 31.5 -20t-3.5 -48q-4 -17 -13 -43.5l-19 -54.5l-18 -51.5t-9 -33.5q-9 -45 -1 -69.5
+t35 -24.5q13 0 29 11.5t32.5 30.5t32.5 43.5t29.5 49.5t24 49t15.5 43q7 37 9 58t-14 38zM320 595q9 7 20 -1t16 -24q7 -21 1 -31.5t-18 -18.5q-6 -5 -22.5 -14t-36 -18.5t-38.5 -17t-29 -8.5q-11 -1 -17 2.5t-9.5 8.5t-4.5 11.5t-1 11.5q78 54 109 77z" />
+    <glyph glyph-name="Thorn" unicode="&#xde;" horiz-adv-x="583" 
+d="M551 343q-6 -58 -37 -120.5t-88 -115t-140.5 -87.5t-193.5 -36q-5 -28 -9 -55q-4 -23 -7 -48.5l-5 -42.5q-16 -8 -30 -12.5t-25 -6.5q-13 -3 -24 -3q-24 0 -29.5 5.5t-1.5 21.5q3 14 18 76l15.5 65.5l22.5 96l31 132l41 173.5l6 24l-13 -13l-12 -11.5t-12 -12.5
+q-7 6 -12 13t-8 12q-4 6 -6 13q-3 7 -5 15t-1 16t6.5 16.5t17.5 16.5l27.5 18.5t43.5 24.5l39 165q3 12 7 20.5t11 14.5t18 10.5t28 8.5q28 7 39 5.5t9 -6.5l-16 -60.5t-33 -118.5q30 8 64.5 12.5t73.5 4.5q63 0 101.5 -25t59.5 -60.5t26.5 -75.5t2.5 -70zM99 30
+q45 2 102.5 20.5t110.5 56.5t92.5 97.5t48.5 144.5q5 50 -6 83.5t-31 53.5t-46 28.5t-52 8.5q-28 0 -57 -9.5t-55 -23.5l-24.5 -92.5l-24 -94l-21.5 -90t-17 -80.5q-5 -29 -10 -54.5t-10 -48.5z" />
+    <glyph glyph-name="thorn" unicode="&#xfe;" horiz-adv-x="462" 
+d="M505 229q8 10 15 13.5t11 0.5t4 -11.5t-6 -21.5q-4 -9 -16.5 -29t-32 -45t-43.5 -52t-51.5 -49t-56 -36.5t-56.5 -14.5q-13 0 -20.5 1t-13 3.5l-10.5 5t-12 5.5q-18 -14 -37 -21.5t-37 -7.5q-17 0 -29.5 5.5t-20.5 15t-13 21t-8 22.5q-1 -4 -1.5 -7t-1.5 -8
+q-12 -48 -25 -111l-26.5 -131.5t-32.5 -176.5q-6 -27 -21.5 -31t-35.5 4q-7 3 -14 9q-6 5 -12 12.5t-10 18.5l47.5 186l33.5 132l26 104q9 34 21.5 86l26.5 110l28 117l25.5 108.5l19 83t8.5 41.5q3 19 5 37q2 16 2 33t-3 31q8 5 18 8t19 5q11 3 21 5q11 2 20 2q8 0 15 -1.5
+t9 -6.5q6 -5 5.5 -20t-2.5 -31l-9 -41q-20 -77 -45 -151t-46 -155q15 17 33 35t38 32.5t41 24t41 9.5q23 0 37.5 -11.5t22.5 -30.5t10 -42.5t1 -46.5q-1 -25 -8.5 -53t-20.5 -57t-30 -57t-36 -52q3 -2 5 -3t8 -1q23 0 47 12t47.5 30.5t45 40.5t39 42.5t29.5 37t18 23.5z
+M195 76q15 18 31.5 40.5t30 46.5t23 49t10.5 48q2 30 -7 47t-30 17q-31 0 -67.5 -36.5t-74.5 -94.5q-5 -17 -10.5 -39.5l-12.5 -53.5q8 6 18 9t20 3q11 0 28 -11.5t41 -24.5z" />
+    <glyph glyph-name="Zcaron" unicode="&#x17d;" horiz-adv-x="466" 
+d="M72 167l49 60.5l59.5 73l64 80l61.5 80.5t52 74t37 62q6 13 10 25q4 11 6.5 22.5t0.5 22.5q-29 0 -69 -1.5t-84.5 -6.5t-89 -15t-81.5 -28q-5 4 -6.5 13t0.5 20q1 11 5 26q4 13 9 24l10.5 18t13.5 13q38 5 71 8t59 5q30 2 55 2l68 -2q29 -2 61.5 -3.5t60.5 -6.5
+q5 -14 7.5 -29t3.5 -27q1 -14 1 -28q-2 -35 -31 -91t-74 -116l-38 -47.5l-51.5 -63l-60 -73l-63 -77l-61 -76t-52.5 -69.5q-26 -35 -43.5 -68.5t-27.5 -58.5q26 10 80 22.5t128 12.5q39 0 73 -3q29 -2 57.5 -7.5t42.5 -14.5q-2 -10 -10 -24q-7 -12 -22 -29.5t-41 -40.5
+q-39 8 -73 12.5t-60 6.5q-30 3 -55 3t-54 -4q-25 -3 -56.5 -8.5t-66.5 -16.5q-10 6 -15.5 21t-8.5 30q-4 18 -6 39q26 59 53.5 106.5t50.5 81.5q26 40 50 71zM297 875q-10 15 -18 25.5t-20 17.5q7 5 17.5 5.5t20.5 0.5q11 -1 24 -2q19 -2 31.5 -15t30.5 -50q0 -1 0.5 -1.5
+t0.5 -1.5l50.5 41.5t15.5 13.5q17 13 33 11t30 -1h12q5 0 11 0.5t11 1.5q-5 -5 -17 -14.5l-25 -19.5q-15 -11 -32 -25l-16 -13l-20.5 -16l-19 -14.5t-12.5 -8.5q-3 -3 -14 -4.5t-23 -1.5t-22.5 2t-12.5 5t-7 12l-11 19.5l-11 19.5t-7 13z" />
+    <glyph glyph-name="zcaron" unicode="&#x17e;" horiz-adv-x="358" 
+d="M420 161q-7 -10 -22.5 -29t-37 -41t-49 -45.5t-58.5 -42.5q-4 -23 -15 -65.5t-29 -92.5t-42 -101.5t-53.5 -94t-64.5 -69t-74 -26.5t-61 13t-32.5 33.5t-12.5 45t-1 47.5q1 30 18 69.5t47.5 80t73.5 77t96 61.5q26 11 48 21.5t41 20.5q8 33 1.5 44t-18.5 11
+q-18 0 -42.5 -16t-60.5 -50q-10 -1 -17.5 2.5t-12.5 8.5q-6 5 -10 12q-11 17 -9.5 34t15.5 27q14 11 41.5 35.5t53.5 62.5l19.5 27.5t23 36t22 40.5t16.5 40q-20 3 -58 -1l-43 -9q-20 -5 -45.5 -13t-53.5 -22q-4 2 -6 8t-3 14q-1 9 -1 20q0 14 4.5 23.5t11.5 15.5t15 9.5
+t14 5.5q7 2 27.5 5.5t46.5 6.5t54 4.5t51 0.5q47 -3 59.5 -12.5t6.5 -29.5q-7 -20 -27 -67.5t-61 -109.5l-31 -43t-27 -35q17 8 34 12.5t34 4.5q23 0 30.5 -22t8.5 -48q40 25 71.5 53t67.5 72q9 11 16.5 13t11.5 -2.5t4 -13t-6 -17.5zM170 -57q2 8 4.5 14.5t4.5 13.5
+q-52 -29 -95 -61.5t-74.5 -68.5t-49.5 -75t-20 -79q-1 -24 7.5 -41t30.5 -17q24 0 51.5 34.5t54 84t49.5 103t37 92.5zM134 559q-10 15 -18 25.5t-20 17.5q7 5 17.5 5.5t20.5 0.5q11 -1 24 -2q19 -2 31.5 -15t30.5 -50q0 -1 0.5 -1.5t0.5 -1.5l50.5 41.5t15.5 13.5
+q17 13 33 11t30 -1h12q5 0 11 0.5t11 1.5q-5 -5 -17 -14.5l-25 -19.5q-15 -11 -32 -25l-16 -13l-20.5 -16l-19 -14.5t-12.5 -8.5q-3 -3 -14 -4.5t-23 -1.5t-22.5 2t-12.5 5t-7 12l-11 19.5l-11 19.5t-7 13z" />
+    <glyph glyph-name="onehalf" unicode="&#xbd;" horiz-adv-x="618" 
+d="M134 446q-6 -23 -12.5 -52.5t-6.5 -58.5q0 -9 1 -18.5t3 -17.5l2 -6l-5 -2q-1 -1 -12.5 -4.5t-32.5 -3.5h-1q-17 0 -24 9q-7 10 -7 23t5 28l25 84.5t41 175.5l5.5 30.5l4.5 23.5q-8 6 -15.5 12.5t-12.5 14.5l-3 4l2 4l4 4q1 1 2 2.5t3 3.5q3 5 7.5 9t9.5 9l20.5 18
+t20.5 14q6 3 11 3q3 0 5 -0.5t4 -1.5q1 -1 7 -5q4 -4 7.5 -7t5.5 -7q4 -6 4 -11v-3zM558 454q8 -5 14 -11t9 -13q8 -14 10 -28.5t2 -25.5v-14q-2 -40 -25 -80.5t-54 -77.5q-30 -37 -63 -67.5l-56 -50.5q-10 -8 -16.5 -16.5t-11.5 -16.5q16 5 37 10.5t47 5.5q25 0 41 -3.5
+t25 -6.5q10 -3 14 -6t5 -5l1 -1v-1q0 -1 0.5 -5t0.5 -11v-9t-2 -10q-4 -13 -9 -21.5t-5 -9.5l-11 -17l-2 20q-1 0 -1 1l-2.5 2.5t-5.5 3.5q-8 4 -25.5 7.5t-49.5 3.5q-37 0 -52 -5t-17 -7l-1 -1h-1q0 -1 -1 -1v-2l-1 1q-8 -4 -14 -4q-10 0 -20 7q-9 6 -12 20q-3 12 -5.5 18
+t-4.5 8q0 1 -1 1l-3 4l2 4q9 20 20 35t24 29q14 14 29.5 28l35.5 31q19 15 39 36.5t37 47.5q18 27 29.5 58t13.5 67v5q0 23 -9 34q-8 8 -23 8q-6 0 -15 -6q-11 -7 -19 -18q-10 -11 -16.5 -26t-7.5 -32v-2q0 -6 3 -9v-2h1l10 -5l-8 -8q-1 -1 -3 -2t-3.5 -2.5t-3.5 -2.5
+q-4 -2 -9.5 -4t-12.5 -2h-10t-10 2q-13 4 -20 15q-5 7 -5 21v3q0 7 3 15.5t8 17.5q11 21 29 40q20 19 49.5 33t68.5 13q23 0 39 -8zM532 749q25 5 33.5 3.5t6.5 -6.5l-26.5 -36l-51 -69.5l-67.5 -92.5l-74.5 -104l-72 -104t-60.5 -93l-58 -92l-49 -80.5l-42 -71.5
+q-17 -8 -30 -11.5t-23 -5.5q-11 -2 -21 -2q-20 0 -22.5 5t7.5 18l43 63l37.5 54.5l54.5 79.5l74.5 109.5l98.5 143.5l169 245q13 20 28 29.5t45 17.5z" />
+    <glyph glyph-name="onequarter" unicode="&#xbc;" horiz-adv-x="593" 
+d="M543 456q6 -4 7 -9q1 -3 1 -8q0 -7 -3 -16q-2 -9 -7 -29l-11.5 -47t-13 -57.5l-12.5 -58.5q2 -1 4 -1t4 -1q5 -2 10 -5t8 -8q6 -8 6 -16q0 -9 -4 -16l-4 -10l-4 -10q-3 -5 -4 -10l-6 -14l-7 13v1l-2 2t-3.5 4t-4.5 4q-2 1 -2.5 1.5t-2.5 1.5q-8 -47 -12.5 -86t-4.5 -65
+v-9v-4l-2 -2q-1 0 -4.5 -3t-9.5 -6q-14 -9 -34 -9q-16 0 -25 11q-6 9 -6 23v5q1 12 4 24.5t5 23.5l12 47l15 58q-28 -2 -57 -6t-63 -12l-3 -1l-3 2q-1 1 -8.5 8t-14.5 22q-7 13 -7 25q-2 14 13 25q5 4 13.5 13l22.5 23l27.5 31.5l32.5 37.5q26 29 41 48.5t22 30.5q6 7 6 10
+l1 4l3 1l7 2.5l16.5 6t20 6.5t19.5 5q5 1 12 1q8 0 12 -2zM464 304q5 22 9.5 39.5t8.5 31.5l-31.5 -37.5l-32.5 -39.5l-34.5 -39.5l-31.5 -36.5v-1q5 1 17 1q25 2 43 4t32 4q6 20 10.5 39t9.5 35zM129 446q-5 -23 -12 -52.5t-7 -58.5q0 -9 1 -18.5t3 -17.5l2 -6l-5 -2
+q-1 -1 -12.5 -4.5t-32.5 -3.5h-1q-17 0 -24 9q-7 10 -7 23t5 28l25 84.5t40 175.5q4 17 6.5 30.5l4.5 23.5q-8 6 -15.5 12.5t-12.5 14.5l-3 4l2 4l4 4q1 1 2 2.5t3 3.5q5 8 17 18l20.5 18t20.5 14q6 3 11 3q3 0 5 -0.5t4 -1.5q1 -1 7 -5l7 -7t6 -7q4 -6 4 -11v-3zM527 749
+q25 5 33.5 3.5t6.5 -6.5l-27 -36l-51.5 -69.5l-67.5 -92.5l-74 -104l-71.5 -104t-60.5 -93l-58 -92l-49 -80.5l-42 -71.5q-17 -8 -30 -11.5t-23 -5.5q-11 -2 -21 -2q-20 0 -22.5 5t6.5 18l43 63l37.5 54.5l55 79.5l75 109.5l98.5 143.5l169 245q13 20 27.5 29.5t45.5 17.5z
+" />
+    <glyph glyph-name="onesuperior" unicode="&#xb9;" horiz-adv-x="154" 
+d="M177 748l7 -7t6 -7q5 -5 5 -11q0 -2 -1 -3l-68 -274q-5 -23 -12.5 -52.5t-7.5 -58.5q0 -20 6 -36l1 -6l-5 -2q-2 -1 -13 -4.5t-33 -3.5q-15 0 -24 9q-7 10 -7 23t5 28l25 84.5t40 175.5q4 17 6.5 30.5l4.5 23.5q-8 6 -15.5 12.5t-12.5 14.5l-2 4l2 4q2 2 3 4q1 1 2 2.5
+t3 3.5q4 5 8 9l9 9l20.5 18t20.5 14q6 3 12 3q2 0 8 -2q2 -2 3.5 -2.5t3.5 -2.5z" />
+    <glyph glyph-name="threequarters" unicode="&#xbe;" horiz-adv-x="686" 
+d="M126 276q-32 0 -52.5 9.5t-32.5 23.5q-11 15 -16 30t-5 26v2q0 13 11 20q8 7 20 10q11 3 22 3.5t19 0.5h10l-3 -9q-1 -2 -2 -7.5t-1 -11.5q0 -7 1.5 -15t6.5 -13q5 -6 12 -9.5t20 -3.5q13 -1 27 9q14 11 24 29q11 17 17 37.5t7 38.5v3q0 16 -7 27q-8 9 -22 9
+q-15 1 -29.5 -5t-18.5 -8h-1l-7 -4l-18 49l7 2q20 8 42.5 22.5t42.5 33.5q19 20 31.5 45t14.5 56v1q0 14 -9 25q-10 10 -27 10q-9 0 -21 -4.5t-22 -13.5q-11 -9 -17.5 -20.5t-7.5 -26.5v-2q0 -14 8 -18q3 -3 7 -3h3h-3h22l-18 -14q-1 -2 -4 -3q-2 -2 -5 -2.5t-6 -2.5
+q-6 -3 -14 -5.5t-16 -3.5q-19 0 -31 12q-15 14 -14 40v3q0 15 8 34t25 36t45 29t66 12q18 0 35 -5t31 -17q29 -24 29 -68v-4q-2 -52 -46 -103q-9 -11 -20.5 -21t-25.5 -20q7 -2 14.5 -5t14.5 -8q12 -9 19.5 -25t7.5 -40v-4q-1 -24 -11 -52t-30 -53q-19 -25 -46 -41.5
+t-60 -16.5h-1zM635 456q7 -3 8 -9q1 -3 1 -8q0 -7 -3 -16q-2 -9 -7.5 -29t-12 -47t-13 -57.5l-12.5 -58.5q2 -1 4 -1t4 -1q11 -4 20 -13q4 -7 4 -16t-3 -16l-4 -10l-4 -10l-5 -10l-6 -14l-6 13h-1v1l-2 2q-2 3 -8 8q-1 1 -2 1.5t-2 1.5q-8 -47 -13 -86t-5 -65q0 -6 1 -9v-4
+l-3 -2q-2 -1 -4 -3t-10 -6q-14 -9 -33 -9h-1q-15 0 -23 11q-5 5 -6 11t-1 12v5q1 12 4 24.5t5 23.5l11.5 47l14.5 58q-27 -2 -56.5 -6t-63.5 -12l-3 -1l-3 2q0 1 -7.5 8t-14.5 22q-3 7 -5 13t-2 12q0 14 12 25q9 8 36 36l28 31.5l32 37.5q26 29 41.5 48.5t23.5 30.5
+q4 7 4 10l1 4l4 1l22 8l21 6.5t20 5.5q3 1 6.5 1h5.5q8 0 11 -2zM556 304l10.5 39.5t7.5 31.5l-31 -37.5l-33 -39.5l-34 -39.5l-31 -36.5l-1 -1q5 1 9 1h9q25 2 43 4t32 4l10 39zM620 749q25 5 34 3.5t5 -6.5q-5 -8 -26 -36l-51.5 -69.5l-67.5 -92.5l-74 -104l-71.5 -104
+t-60.5 -93l-59 -92l-49 -80.5l-42 -71.5q-16 -8 -29.5 -11.5t-23.5 -5.5q-11 -2 -21 -2q-20 0 -22 5t8 18l43 63l37.5 54.5l54.5 79.5l74.5 109.5l98.5 143.5l168 245q13 20 28 29.5t46 17.5z" />
+    <glyph glyph-name="threesuperior" unicode="&#xb3;" horiz-adv-x="269" 
+d="M281 737q29 -24 29 -68v-4q-2 -52 -46 -103q-9 -11 -20.5 -21t-25.5 -20q7 -2 14.5 -5t14.5 -8q12 -9 19.5 -25t7.5 -40v-4q-1 -24 -11 -52t-30 -53q-19 -25 -46 -41.5t-60 -16.5h-1q-32 0 -52.5 9.5t-32.5 23.5q-11 15 -16 30t-5 26v2q0 13 11 20q8 7 20 10q11 3 22 3.5
+t19 0.5h10l-3 -9q-1 -2 -2 -7.5t-1 -11.5q0 -7 1.5 -15t6.5 -13q5 -6 12 -9.5t20 -3.5q13 -1 27 9q14 11 24 29q11 17 17 37.5t7 38.5v3q0 16 -7 27q-8 9 -22 9q-15 1 -29.5 -5t-18.5 -8h-1l-7 -4l-18 49l7 2q20 8 42.5 22.5t42.5 33.5q19 20 31.5 45t14.5 56v1q0 14 -9 25
+q-10 10 -27 10q-9 0 -21 -4.5t-22 -13.5q-11 -9 -17.5 -20.5t-7.5 -26.5v-2q0 -14 8 -18q3 -3 7 -3h3h-3h22l-18 -14q-1 -2 -4 -3q-2 -2 -5 -2.5t-6 -2.5q-6 -3 -14 -5.5t-16 -3.5q-19 0 -31 12q-15 14 -14 40v3q0 15 8 34t25 36t45 29t66 12q18 0 35 -5t31 -17z" />
+    <glyph glyph-name="twosuperior" unicode="&#xb2;" horiz-adv-x="275" 
+d="M276 751q15 -10 23 -24t10 -28.5t2 -25.5v-14q-2 -40 -25 -80.5t-54 -77.5t-63 -67.5t-55 -50.5q-11 -8 -17.5 -16.5t-11.5 -16.5q16 5 37 10.5t46 5.5q26 0 42 -3.5t26 -6.5q9 -3 13 -6t5 -5l1 -1v-1q0 -1 0.5 -5t0.5 -11v-9t-2 -10q-3 -13 -8 -21.5t-6 -10.5l-11 -16
+l-3 20v1l-2.5 2.5t-5.5 3.5q-8 4 -25.5 7.5t-49.5 3.5q-37 0 -51.5 -5t-16.5 -7l-1 -1h-1q0 -1 -1 -1v-2l-1 1q-8 -4 -16 -4q-10 0 -18 7q-9 6 -12 20q-4 12 -6.5 18t-4.5 8q0 1 -1 1l-3 4l2 4q10 20 20.5 34.5t23.5 28.5q14 14 30 28.5l36 31.5q18 15 38.5 36.5t37.5 47.5
+q17 27 29 58.5t14 66.5v5q0 24 -10 34q-10 8 -22 8q-6 0 -15 -6q-5 -3 -10 -8l-10 -10q-9 -11 -15.5 -26t-7.5 -32v-2q0 -6 3 -9v-2h1l10 -5l-8 -8q-1 -1 -3 -2t-4 -2.5t-4 -2.5q-4 -2 -9.5 -4t-12.5 -2h-9t-11 2q-13 3 -20 15q-5 10 -5 21q0 1 0.5 1.5t0.5 1.5q0 11 10 33
+q5 10 12 19.5t18 20.5q19 19 48.5 33t69.5 14q12 0 21 -2.5t17 -6.5z" />
+    <glyph glyph-name="brokenbar" unicode="&#xa6;" horiz-adv-x="260" 
+d="M219 749q23 5 32.5 3.5t8.5 -6.5q-2 -8 -10.5 -37.5l-20.5 -72.5l-26 -96l-28 -107q-2 -3 -7 -7q-5 -3 -13.5 -5.5t-22.5 -2.5q-13 -1 -19.5 2t-8.5 7q-3 4 -2 9l6 21l58 245q5 20 15 29.5t38 17.5zM114 331q14 -1 20.5 -4t8.5 -7q3 -4 2 -10l-7.5 -33t-5.5 -30l-17 -92
+q-7 -38 -13.5 -80.5t-9.5 -71.5q-14 -8 -25.5 -11.5t-20.5 -5.5q-11 -2 -19 -2q-20 0 -24 4.5t-2 18.5q1 4 8 34l17.5 74l23 96l24.5 100q2 7 7 11t12 7t21 2z" />
+    <glyph glyph-name="minus" unicode="&#x2212;" horiz-adv-x="362" 
+d="M310 289q-28 1 -71 0.5t-85 -1.5q-28 -1 -57 -4q-25 -2 -55 -6t-57 -12q-1 8 0 15.5t3 14.5q2 8 4 15q4 10 11.5 21t13.5 14q5 2 20.5 4t37 3.5t48 2.5t52.5 1q53 1 88 -0.5t67 -4.5q14 -2 16.5 -9t-3.5 -25q-6 -17 -13 -23.5t-20 -5.5z" />
+    <glyph glyph-name="multiply" unicode="&#xd7;" horiz-adv-x="288" 
+d="M226 201q0 -2 -2 -8t-5 -12.5t-6.5 -12t-5.5 -6.5q-5 -2 -7 -1.5t-5 1.5q-23 4 -39.5 28.5t-22.5 47.5q-2 8 -5 17.5l-7 22.5q-15 -18 -33 -36l-34 -36l-38 -40q-8 -1 -13.5 0t-9.5 3t-8 5q-3 2 -6 6q-6 8 -5 15l46.5 52.5l41.5 47.5l40 46l-18 61.5t-12 40.5
+q-8 23 -18 39.5t-24 23.5q8 8 19 12.5t22 6.5q12 3 25 3q19 0 30 -32t26 -92q0 -2 0.5 -2.5t0.5 -2.5l34 39l28.5 32.5l20 23t8.5 9.5q16 18 29 21t24 -5q5 -3 11 -7q12 -7 26 -12l-31.5 -30.5t-31.5 -32.5q-18 -18 -34 -37q-14 -13 -30.5 -31.5t-36.5 -38.5
+q10 -36 21 -67.5t23 -46.5q5 -7 8 -8.5t4 -6.5z" />
+    <glyph glyph-name="space" unicode=" " horiz-adv-x="287" 
+ />
+    <glyph glyph-name="exclam" unicode="!" horiz-adv-x="255" 
+d="M215 751q10 2 21 2q9 0 19.5 -2t19.5 -8l-152 -563q-3 -11 -18 -22t-31.5 -17.5t-29 -7t-10.5 9.5q4 16 18 78l15 66.5l21.5 95.5l29.5 130.5l39 170.5l2 14q1 5 0.5 11t-2.5 9q8 9 18 15.5t19 10.5q11 4 21 7zM61 76q26 4 42 -4.5t14 -31.5q-1 -13 -11 -24.5
+t-23.5 -20.5t-28 -14t-25.5 -5q-21 0 -36 9t-13 29q1 13 8.5 23.5t19 18.5t25.5 13t28 7z" />
+    <glyph glyph-name="quotedbl" unicode="&#x22;" horiz-adv-x="255" 
+d="M152 749q23 5 32.5 3.5t8.5 -6.5q-3 -8 -10.5 -32.5t-18 -62l-23.5 -85.5l-27 -102q-2 -3 -7 -7q-5 -3 -13.5 -5.5t-22.5 -2.5q-14 -1 -20 1.5t-8 6.5q-3 4 -2 9q1 3 2 7q1 3 1.5 7t1.5 7l52 215q5 20 15.5 29.5t38.5 17.5zM292 749q23 5 32.5 3.5t7.5 -6.5
+q-2 -8 -9.5 -32.5t-18 -62l-24 -85.5t-26.5 -102q-2 -3 -7 -7q-5 -3 -13.5 -5.5t-22.5 -2.5q-14 -1 -20 1.5t-8 6.5q-3 4 -2 9q1 3 2 7q1 3 1.5 7t1.5 7l53 215q5 20 14.5 29.5t38.5 17.5z" />
+    <glyph glyph-name="numbersign" unicode="#" horiz-adv-x="428" 
+d="M437 499q18 -1 21 -8t-5 -23t-16 -22t-23 -6q-14 1 -30 1h-36q-9 -25 -17.5 -51.5l-16.5 -52.5q23 -1 42.5 -1.5t38.5 -2.5q17 -2 20.5 -8t-4.5 -23q-8 -15 -16 -22t-23 -6q-16 1 -34.5 1h-41.5q-1 -2 -1 -4t-1 -4q-14 -49 -21 -76t-10 -40q-4 -15 -4 -18q-1 -1 -19 -8.5
+t-37 -7.5q-17 0 -20 4t0 15l5 15.5t10.5 31l14.5 42.5l16 49h-47q-10 0 -19 -0.5t-20 -0.5q0 -2 -0.5 -3t-0.5 -3q-14 -49 -21 -76t-10 -40t-3.5 -15.5t0.5 -2.5q-2 -1 -19.5 -8.5t-37.5 -7.5q-17 0 -20 4t1 15q0 2 4 14l10 30l13.5 41t16.5 47q-17 -1 -34 -3l-31 -4.5
+l-31 -4.5q-2 6 -0.5 13.5t3.5 13.5l6 14q4 8 12.5 18.5t16.5 12.5q7 2 28.5 4t51.5 4l21 60t14 39l-39 -4l-35.5 -4t-35.5 -5q-3 13 2 27q2 7 6 14q5 8 13.5 18t16.5 13q7 2 32 4.5t61 4.5l29 99q5 16 14.5 24.5t32.5 13.5q20 4 28 3t7 -4q-4 -10 -17 -46.5l-31 -87.5h34
+h28.5t25.5 -1l30 98q5 16 14 24.5t33 13.5q20 4 28 3t7 -4q-4 -10 -17.5 -47.5l-30.5 -88.5q18 -1 35 -1.5t33 -2.5zM251 338l23 66.5t13 36.5q-16 0 -31.5 -0.5t-30.5 -0.5h-15t-14 -1q-9 -25 -17 -50l-16 -51q11 0 23 0.5t23 0.5t21.5 -0.5t20.5 -0.5z" />
+    <glyph glyph-name="dollar" unicode="$" horiz-adv-x="300" 
+d="M254 668q27 -5 43.5 -22.5t25.5 -38.5t11.5 -41t1.5 -30q-1 -11 -4.5 -24.5t-10 -25.5t-16.5 -21.5t-24 -12.5q-11 -3 -21 -4q-8 -1 -17.5 -1t-14.5 4q13 13 21 30t13 33q5 18 7 38q3 33 -13 53.5t-33 20.5q-16 0 -32 -8t-30 -21.5t-23.5 -33t-11.5 -41.5q-2 -31 14 -68
+l34 -78q13 -29 26 -54.5t22 -49t12.5 -46t-0.5 -46.5q-2 -12 -9.5 -29.5t-21.5 -34t-36 -29.5t-52 -17l-25 -72q-9 -5 -21 -7q-6 -1 -12 -1t-10 1t-7.5 3t-4.5 6q5 15 8 28.5t6 23.5l6 21q-29 6 -47 20.5t-28 31.5t-13.5 33.5t-2.5 25.5q2 23 12.5 35.5t27.5 23.5l14 7
+q14 7 29 11q-10 -16 -13 -36q-3 -11 -3 -22q-5 -44 14.5 -69.5t45.5 -27.5q9 0 21.5 5t24 15.5t19.5 25t10 34.5q2 19 -2.5 36.5t-11 32.5t-14.5 28.5l-14 24.5q-5 12 -17.5 35t-24.5 53t-20.5 64t-5.5 66q3 28 15.5 51.5t32.5 42t45.5 30.5t52.5 17q4 12 10 33.5t11 34.5
+q1 4 9 7t19 1q22 -5 20 -16l-8 -27.5z" />
+    <glyph glyph-name="percent" unicode="%" horiz-adv-x="588" 
+d="M41 535q0 27 10.5 63t31.5 68.5t51.5 54.5t70.5 22q10 0 27 -7t33 -22.5t28 -39.5t12 -58q0 -42 -12 -83t-33.5 -74t-52.5 -53t-69 -20q-35 0 -54 14.5t-29 37t-12 48.5t-2 49zM241 600q1 15 -0.5 31t-6 29t-11 21.5t-15.5 8.5q-21 0 -40.5 -17t-33.5 -42.5t-22.5 -55.5
+t-8.5 -55q0 -14 1.5 -28t6 -25t12.5 -17.5t20 -6.5q26 0 44 20.5t29.5 47t17.5 52.5t7 37zM444 341q11 0 28 -7t33.5 -22t28 -39t11.5 -58q0 -42 -12 -83.5t-33.5 -74.5t-52.5 -53t-69 -20q-35 0 -54 15t-29 37t-12 48t-2 48q0 28 10.5 64t31 68.5t51 54.5t70.5 22zM480 199
+q1 15 0 31t-5.5 29t-11.5 21.5t-16 8.5q-21 0 -40 -17.5t-33 -43t-22 -55t-8 -54.5q0 -15 1.5 -28.5t6 -24.5t12.5 -17.5t20 -6.5q26 0 44 20.5t29 47t16.5 52.5t6.5 37zM558 749q25 5 33.5 3.5t6.5 -6.5l-27 -36l-51.5 -69.5l-67.5 -92.5l-74 -104l-71.5 -104t-60.5 -93
+l-59 -92l-49 -80.5l-42 -71.5q-17 -8 -30 -11.5t-23 -5.5q-11 -2 -20 -2q-20 0 -22.5 5t6.5 18l43 63l37.5 54.5l54.5 79.5l74.5 109.5l98.5 143.5l169 245q14 20 28.5 29.5t45.5 17.5z" />
+    <glyph glyph-name="ampersand" unicode="&#x26;" horiz-adv-x="472" 
+d="M408 184q9 8 17 9t12.5 -3.5t3 -13t-12.5 -20.5l-50 -49.5t-61 -50.5q8 -15 18 -27q8 -11 19 -21.5t25 -15.5q-2 -4 -9 -8l-15 -9l-20 -11q-27 -13 -45 -14t-30 5t-18.5 18t-10.5 25q-1 1 -1 5q0 2 -1 3q-32 -13 -67 -21t-73 -8q-48 0 -77.5 19t-44 47t-17.5 60.5t2 59.5
+q9 56 57.5 120t129.5 143q5 5 11 10t11 10q0 27 1.5 51.5t3.5 47.5l2 17.5t3 17.5q10 51 32 85.5t48.5 56t52 30.5t43.5 9q12 0 26.5 -4t26 -14t17.5 -27t2 -43q-4 -22 -12.5 -43t-26 -46.5t-47 -58.5t-74.5 -79q-4 -4 -7.5 -7t-6.5 -7q5 -92 21.5 -177t31.5 -146
+q2 -8 3 -11q21 13 39 26.5t31.5 25.5l23 21zM131 45q22 0 42 3.5t40 8.5q-9 30 -19.5 74t-18.5 99q-4 29 -6.5 58t-4.5 57q-115 -129 -127 -199q-2 -14 0 -31.5t12 -33t29.5 -26t52.5 -10.5zM252 627q-7 -49 -9 -103q48 47 82 84t39 66q2 14 -3.5 27.5t-20.5 13.5
+q-16 0 -31 -8t-26.5 -20.5t-19.5 -28t-11 -31.5z" />
+    <glyph glyph-name="quotesingle" unicode="'" horiz-adv-x="116" 
+d="M152 749q23 5 32.5 3.5t8.5 -6.5q-3 -8 -10.5 -32.5t-18 -62l-23.5 -85.5l-27 -102q-2 -3 -7 -7q-5 -3 -13.5 -5.5t-22.5 -2.5q-14 -1 -20 1.5t-8 6.5q-3 4 -2 9q1 3 2 7q1 3 1.5 7t1.5 7l52 215q5 20 15.5 29.5t38.5 17.5z" />
+    <glyph glyph-name="parenleft" unicode="(" horiz-adv-x="240" 
+d="M313 779q-20 -18 -37.5 -42t-33.5 -51.5t-29 -56.5t-24 -56q-26 -64 -44 -135q-25 -104 -38 -197q-6 -40 -9.5 -81.5t-3.5 -79.5t4.5 -71.5t16.5 -56.5l-15 -71q-24 15 -45.5 59t-30 116.5t1 172.5t48.5 226q50 163 116.5 265.5t141.5 128.5l-19 -70v0z" />
+    <glyph glyph-name="parenright" unicode=")" horiz-adv-x="209" 
+d="M-95 -50q20 18 37.5 42t33.5 51.5t29 56.5t24 56q26 64 45 135q25 104 38 197q6 40 9.5 81.5t3.5 79.5t-5 71.5t-16 56.5l15 72q23 -15 44.5 -59.5t30 -117t-1 -172.5t-48.5 -226q-49 -163 -115.5 -265.5t-141.5 -127.5l18 69v0z" />
+    <glyph glyph-name="asterisk" unicode="*" horiz-adv-x="335" 
+d="M380 640q4 -1 7 -12.5t3.5 -25.5t0 -26t-1.5 -14q-3 -2 -18 -3q-13 -1 -39 -1t-74 2q-5 -1 -8 -3.5t3 -9.5q35 -32 53.5 -50.5t26.5 -28.5q10 -11 11 -15q-1 -5 -13 -13.5t-26 -17.5t-27 -15t-17 -6q-3 2 -9 16q-5 12 -13.5 37t-20.5 73q-5 11 -10 2l-36.5 -66t-21.5 -35
+q-9 -13 -13 -16q-4 -2 -16 8t-24 23t-21.5 25.5t-9.5 16.5q2 3 14 13q11 8 33 22.5t64 37.5q7 7 -2 10q-45 11 -70 18t-37 12q-14 5 -17 9q-1 4 5.5 17t15.5 27t17.5 25.5t11.5 11.5q3 -1 14 -10l27 -24.5t48 -47.5q7 -6 9.5 -4.5t3.5 8.5q-2 45 -1.5 70t1.5 38q1 15 3 19
+q2 3 17.5 2t33.5 -3t33 -6t15 -7q-1 -4 -7 -18q-5 -12 -17 -35l-33 -63q-3 -6 -1 -9t10 0q42 17 66 25.5t37 12.5q15 4 20 4z" />
+    <glyph glyph-name="plus" unicode="+" horiz-adv-x="359" 
+d="M351 372q-5 -17 -11.5 -24.5t-20.5 -6.5q-20 2 -50 1.5t-62 -1.5l-1 -1l-11 -56q-5 -22 -9 -41.5t-5 -25.5q-3 -6 -9.5 -9.5t-13.5 -5.5q-8 -3 -16 -4t-16 -1q-16 0 -26 7l32 135q-23 -1 -47 -4q-20 -2 -44 -6.5t-45 -9.5q-2 7 -1.5 15t2.5 15l4 16q3 8 10 19t14 14
+q7 4 43 7.5t80 5.5l27 112q8 8 17 12t17 6q10 2 19 2t16 -2q5 -2 9 -4.5t2 -6.5q-6 -19 -11.5 -39.5l-10.5 -38.5q-5 -21 -11 -41q35 -1 62 -2t52 -5q14 -1 17 -8t-2 -24z" />
+    <glyph glyph-name="comma" unicode="," horiz-adv-x="205" 
+d="M52 75q26 -3 34.5 -23t3.5 -45q-2 -13 -8 -29.5t-17 -34.5t-27 -34.5t-39 -29.5q-9 -5 -15 -4t-8 5t-0.5 10t7.5 11q10 10 22.5 29.5t17.5 42.5q-5 -1 -9.5 -1.5t-9.5 0.5q-15 2 -26 13.5t-9 32.5q4 26 29 43.5t54 13.5z" />
+    <glyph glyph-name="hyphen" unicode="-" horiz-adv-x="362" 
+d="M310 289q-28 1 -71 0.5t-85 -1.5q-28 -1 -57 -4q-25 -2 -55 -6t-57 -12q-1 8 0 15.5t3 14.5q2 8 4 15q4 10 11.5 21t13.5 14q5 2 20.5 4t37 3.5t48 2.5t52.5 1q53 1 88 -0.5t67 -4.5q14 -2 16.5 -9t-3.5 -25q-6 -17 -13 -23.5t-20 -5.5z" />
+    <glyph glyph-name="period" unicode="." horiz-adv-x="219" 
+d="M51 76q26 4 41.5 -4.5t13.5 -31.5q-1 -13 -10.5 -24.5t-23 -20.5t-28.5 -14t-26 -5q-20 0 -35.5 9t-13.5 29q1 13 8.5 23.5t19 18.5t26 13t28.5 7z" />
+    <glyph glyph-name="slash" unicode="/" horiz-adv-x="269" 
+d="M357 749q25 5 33.5 3.5t6.5 -6.5l-22 -36l-42 -69.5l-55.5 -92.5l-61 -104l-58 -104t-47.5 -93l-47 -92l-39 -80.5t-32 -71.5q-16 -8 -28.5 -11.5t-22.5 -5.5q-11 -2 -21 -2q-20 0 -22.5 5t4.5 18l35 63l30 54.5l44 79.5l61 109.5l80 143.5l137 245q10 20 23.5 29.5
+t43.5 17.5z" />
+    <glyph glyph-name="zero" unicode="0" horiz-adv-x="501" 
+d="M328 754q38 0 65.5 -28.5t43.5 -75t20.5 -107t-2.5 -124.5q-15 -129 -51 -214.5t-78.5 -136t-86 -71.5t-74.5 -21q-24 0 -47.5 15t-42.5 48t-31 84.5t-13 124.5q-1 46 10 101.5t30.5 112t47 109t60.5 93.5t71 65.5t78 24.5zM378 446q0 5 2 25.5t2.5 48t-1 57.5t-8.5 55.5
+t-20.5 42t-35.5 16.5t-55.5 -38t-65 -105t-54 -159.5t-21.5 -201.5q0 -11 2.5 -35.5t9 -49.5t18.5 -44t31 -19q29 0 60.5 37.5t59 96.5t48 131.5t28.5 141.5z" />
+    <glyph glyph-name="one" unicode="1" horiz-adv-x="279" 
+d="M151 249l-15.5 -58.5t-13.5 -64.5t-5.5 -66t8.5 -63q-9 -5 -21 -7.5t-23 -3.5q-12 -2 -25 -1q-17 0 -26 7t-12.5 18.5t-1.5 27t8 32.5l41.5 141t67.5 293l10.5 56.5t8.5 41.5q-14 9 -28 21.5t-22 23.5q1 3 15.5 19t33.5 34t38 32t31 14q5 0 12.5 -5t15 -11.5t12 -14
+t3.5 -12.5z" />
+    <glyph glyph-name="two" unicode="2" horiz-adv-x="459" 
+d="M327 -30q-2 15 -25.5 23t-51.5 12q-33 4 -73 5q-29 0 -54 -3q-22 -2 -42.5 -7.5t-28.5 -14.5q-13 -10 -34 -5t-28 34q-2 11 -6 21l-6.5 17t-8.5 14q15 30 32.5 54t39 47t48 46l59.5 52q31 26 65.5 62t64 81t50 98.5t23.5 115.5q2 51 -17.5 71t-48.5 20q-14 0 -32 -11.5
+t-34.5 -32t-29 -47.5t-13.5 -57q-1 -8 1 -15q2 -6 4.5 -11.5t8.5 -8.5q-16 -13 -32 -17q-8 -2 -15 -2q-8 0 -19 1.5t-20.5 7t-16 16.5t-5.5 30t16.5 51t47 62.5t78.5 52.5t110 22q42 0 64.5 -18t32.5 -43t11 -50.5t0 -41.5q-2 -42 -19.5 -86t-45 -87t-62 -84t-69.5 -77
+t-68.5 -66l-58.5 -51q-27 -23 -41.5 -46t-21.5 -43q24 12 66 24t96 12q32 0 59 -3q23 -2 44 -7.5t29 -15.5q2 -11 2 -20t-1 -17q-1 -9 -3 -16q-2 -8 -5 -16q-5 -14 -16 -32z" />
+    <glyph glyph-name="three" unicode="3" horiz-adv-x="474" 
+d="M393 234q-1 -39 -18 -84.5t-47.5 -84.5t-73 -65t-94.5 -26q-53 0 -85 15.5t-50 37.5t-24 46t-6 40t12.5 25t29.5 13.5t35 6t30 1.5q-3 -9 -5 -29t4 -39.5t23 -34.5t52 -15q27 0 51.5 19.5t43 49.5t29.5 66t12 69q1 34 -14 56t-47 22q-13 0 -27 -3q-12 -2 -27 -7.5
+t-32 -14.5l-22 57q34 15 73 39t72.5 58t56 77.5t24.5 97.5q2 32 -16.5 52t-54.5 20q-18 0 -39.5 -8.5t-40.5 -24t-31.5 -37.5t-13.5 -49q0 -15 4 -26q3 -10 10.5 -18t21.5 -8q-14 -10 -26.5 -15.5t-21.5 -7.5q-11 -3 -20 -3q-12 0 -23.5 4t-20.5 13t-14.5 24t-4.5 37
+t13.5 52t39.5 57t70 46t106 19q28 0 55 -8.5t48 -26.5t33 -45.5t11 -65.5q-1 -30 -14 -64t-36 -67t-55.5 -63t-73.5 -53q18 0 39.5 -5.5t39 -19.5t29 -38.5t10.5 -63.5z" />
+    <glyph glyph-name="four" unicode="4" horiz-adv-x="463" 
+d="M215 109q8 36 21 86l27 105q-50 -2 -103 -8t-115 -23q-8 5 -14 13l-11 15q-5 8 -10 17q-9 20 -10 37.5t16 31.5q9 7 24.5 23l36.5 39l46.5 52l54.5 62q57 66 85 102.5t32 51.5q24 10 43 15.5l33 9.5l27 6q29 5 36 -4t-1 -38q-4 -14 -13 -49.5l-20.5 -81.5t-23 -98.5
+l-21.5 -100.5q15 -2 27 -6.5t20 -12t9.5 -19t-4.5 -27.5q-2 -6 -6 -14l-15 -36q-5 8 -12 14.5t-15 11.5q-9 5 -18 9q-15 -90 -24 -165t-7 -120q-12 -11 -24.5 -16.5t-22.5 -7.5q-12 -3 -23 -3q-24 0 -32 14.5t-7 37.5q1 18 5 38.5t9 38.5zM146 355q47 2 78.5 6.5t56.5 7.5
+l17.5 68l16.5 62q16 59 26 101l16 69l-28.5 -35l-35.5 -42.5l-38.5 -46l-37.5 -44.5l-69 -81.5l-59 -69.5q11 2 25.5 2.5t31.5 2.5z" />
+    <glyph glyph-name="five" unicode="5" horiz-adv-x="455" 
+d="M156 714q1 1 1 0h-1zM261 660q-28 0 -50 -5l-17 -51l-21.5 -67.5t-22 -75.5t-18.5 -76q10 12 25 25.5t34 25t41 19.5t46 8q33 0 55.5 -12t35 -32.5t17 -47.5t1.5 -56q-5 -61 -28 -122t-59 -109.5t-82 -79t-96 -30.5q-26 0 -48.5 11.5t-39.5 29.5t-26.5 40.5t-7.5 44.5
+q3 41 47 74q8 7 17 12q7 5 15 9.5t15 6.5q-6 -48 4 -74t25 -38q17 -14 41 -16q32 0 59 18.5t46.5 47.5t31.5 66t15 75q5 50 -13 78t-46 28q-30 0 -55.5 -19.5t-49.5 -48.5q-9 -11 -20 -14.5t-21.5 -3.5t-19.5 3.5t-14 6.5q-3 2 -8 6.5t-9 13.5t-4.5 24t7.5 39l20 60.5
+l24 73.5l23 73t17 59q9 34 10.5 43.5t-0.5 10.5q5 1 24 6t47.5 10t64 9t71.5 4q39 0 63 -3.5t35.5 -12.5t12.5 -25.5t-6 -41.5q-3 -9 -8 -19q-5 -8 -12.5 -18.5t-18.5 -21.5q-11 22 -38.5 34.5t-56.5 17.5q-34 6 -74 7z" />
+    <glyph glyph-name="six" unicode="6" horiz-adv-x="489" 
+d="M180 -25q-24 0 -49.5 13.5t-46 44t-34 80.5t-14.5 123q-1 46 11 102t33.5 113.5t51.5 111.5t65.5 96t75 67.5t81.5 25.5q47 0 64.5 -20t22.5 -53q2 -14 2.5 -30.5t-3 -32.5t-11.5 -29.5t-22 -21.5q-12 -6 -24 -9q-11 -3 -25 -3t-29 5q17 28 26 53.5t10.5 45t-5 31
+t-19.5 11.5q-18 0 -43.5 -23t-53 -64.5t-53.5 -99.5t-43 -129q37 54 78 76.5t71 22.5q17 0 39 -6t41 -24.5t32.5 -51.5t13.5 -87t-19 -113.5t-52.5 -109.5t-78 -82.5t-93.5 -32.5zM136 321q-5 -32 -7.5 -66.5t-2.5 -70.5q0 -11 3 -36t10.5 -50t20.5 -44t34 -19q28 0 55 32.5
+t48.5 80t34 100t12.5 93.5q-1 41 -12.5 64.5t-36.5 23.5q-21 0 -37.5 -14t-29.5 -33.5t-22 -40.5l-15 -36q-11 -26 -17.5 -27.5t-19.5 12.5q-7 5 -11 13.5t-7 17.5z" />
+    <glyph glyph-name="seven" unicode="7" horiz-adv-x="416" 
+d="M428 608q-10 -13 -34 -49t-55 -88.5t-65 -116.5t-64 -133q-22 -52 -36 -96q-6 -19 -10.5 -38t-6.5 -36t-0.5 -30t8.5 -20q-28 -9 -50 -12q-12 -2 -23 -2q-27 -2 -36 17t-2 49q7 35 27 87t49 111.5t64.5 122t74.5 118.5l68.5 96l54.5 77q-19 5 -52 6.5t-82 -4.5
+q-32 -4 -63 -13q-26 -8 -55.5 -20.5t-49.5 -31.5q-3 8 -4 16t-2 15q-1 8 -1 16q0 10 2 22.5t7 24.5t15 21.5t26 12.5q17 3 52 6.5t73.5 5.5t74.5 3t56 -1q40 -3 54.5 -14t13.5 -39q0 -14 -0.5 -23.5t-3.5 -18.5t-9 -18.5t-16 -22.5z" />
+    <glyph glyph-name="eight" unicode="8" horiz-adv-x="455" 
+d="M359 178q-1 -33 -16.5 -69t-43 -66t-64.5 -49t-80 -19q-36 0 -66.5 7t-53 25t-34.5 47.5t-11 74.5q1 43 18 81.5t43 72.5t58 62.5t62 51.5q-28 44 -38.5 78.5t-9.5 71.5q1 21 11 56t33.5 68t62 57.5t95.5 24.5q31 0 55 -10t39.5 -27t23 -38.5t7.5 -43.5q-2 -35 -18 -68.5
+t-40.5 -63.5t-53.5 -56t-56 -45q31 -46 54.5 -102.5t22.5 -120.5zM211 588q-1 -32 6.5 -63t30.5 -69q26 22 51.5 46t46 49t33 48.5t12.5 44.5q1 32 -16 51.5t-47 19.5q-31 0 -53 -12.5t-36 -31t-21 -41t-7 -42.5zM266 161q1 33 -3 58t-12 47t-20 42t-27 41
+q-24 -20 -48 -46.5t-44 -56.5t-32.5 -61t-13.5 -61q-1 -29 4.5 -48.5t15 -31t22.5 -16t26 -4.5q16 0 38 6.5t43 22.5t35.5 42.5t15.5 65.5z" />
+    <glyph glyph-name="nine" unicode="9" horiz-adv-x="474" 
+d="M319 753q40 0 67 -28.5t41.5 -76t16 -108t-9.5 -124.5q-22 -129 -62 -214t-85 -135t-89.5 -70.5t-76.5 -20.5q-15 0 -33 6.5t-33.5 19.5t-25.5 32t-9 43q2 17 8 35q5 15 15.5 31.5t28.5 28.5q5 -41 16.5 -62.5t24.5 -31.5q15 -11 33 -13q28 0 60.5 27.5t63 73.5
+t56.5 105.5t41 123.5q-11 -24 -28.5 -53.5t-41.5 -55t-54.5 -43t-68.5 -17.5q-41 0 -63.5 23t-34 57t-13.5 71.5t0 66.5q1 19 8.5 49.5t21 65t34 69t49 62.5t64 45.5t79.5 17.5zM369 503q4 39 3.5 75.5t-6.5 64.5t-18.5 45t-33.5 17q-26 0 -55 -23.5t-54 -63.5t-43 -91.5
+t-21 -107.5q-2 -38 3.5 -63.5t15 -40.5t21.5 -21.5t23 -6.5q24 0 45 22.5t37.5 53t28 63t16.5 52.5q4 17 11 21.5t27 3.5z" />
+    <glyph glyph-name="colon" unicode=":" horiz-adv-x="232" 
+d="M101 286q25 2 43.5 -8t16.5 -29q-2 -20 -24 -40t-54 -22q-26 -2 -44 8t-16 28q2 21 20 41t58 22zM51 76q26 4 41.5 -4.5t13.5 -31.5q-1 -13 -10.5 -24.5t-23 -20.5t-28.5 -14t-26 -5q-20 0 -35.5 9t-13.5 29q1 13 8.5 23.5t19 18.5t26 13t28.5 7z" />
+    <glyph glyph-name="semicolon" unicode=";" horiz-adv-x="218" 
+d="M88 286q25 2 42.5 -8t15.5 -29q-2 -20 -23.5 -40t-53.5 -22q-26 -2 -44 8t-16 28q2 21 20.5 41t58.5 22zM52 75q26 -3 34.5 -23t3.5 -45q-2 -13 -8 -29.5t-17 -34.5t-27 -34.5t-39 -29.5q-9 -5 -15 -4t-8 5t-0.5 10t7.5 11q10 10 22.5 29.5t17.5 42.5q-5 -1 -9.5 -1.5
+t-9.5 0.5q-15 2 -26 13.5t-9 32.5q4 26 29 43.5t54 13.5z" />
+    <glyph glyph-name="less" unicode="&#x3c;" horiz-adv-x="278" 
+d="M84 321l12 -21t10 -18l34 -59l30 -51.5l28 -45.5q-5 -4 -13 -5.5t-16 -2.5q-10 -1 -21 -1q-25 0 -33 3t-13 12q-1 2 -12 20l-26 44l-32.5 57.5l-32.5 60.5q-2 5 -5.5 11t-3.5 10q0 1 2 4q3 4 14 14l175 148q7 6 14 10t16 7.5t21.5 6t31.5 4.5q16 2 25 1.5t13.5 -2t5 -3.5
+t-0.5 -3q-5 -5 -27.5 -24.5l-54 -47.5l-69 -62z" />
+    <glyph glyph-name="equal" unicode="=" horiz-adv-x="383" 
+d="M341 382q-28 2 -66 1t-80 -2q-26 -1 -52 -3q-23 -2 -51 -5.5t-56 -11.5q-1 8 0 15.5t3 13.5l4 14q4 10 11.5 21t14.5 14q4 2 18 4t34 4t44.5 3.5t50.5 1.5t46 -0.5t36.5 -1t31 -2t30.5 -3.5q15 -2 17.5 -8.5t-3.5 -24.5q-6 -17 -13.5 -24t-19.5 -6zM300 259q-28 2 -66 1
+t-80 -2q-26 0 -52 -3q-23 -2 -51 -6.5t-56 -11.5q-1 7 0 14.5t3 13.5q2 7 4 13q4 9 11.5 20t14.5 14q4 2 18 5t34 5.5t44.5 4.5t50.5 2t46 -0.5t36.5 -1t31 -2t30.5 -2.5q15 -2 17.5 -9t-3.5 -25q-6 -17 -13.5 -24t-19.5 -6z" />
+    <glyph glyph-name="greater" unicode="&#x3e;" horiz-adv-x="257" 
+d="M139 516q1 -2 12 -20l26.5 -44l33 -57.5l32.5 -60.5q2 -5 5.5 -11.5t3.5 -9.5q0 -1 -2 -4q-2 -2 -5 -6t-9 -9l-176 -148l-13.5 -9.5t-15.5 -7.5t-22 -5.5t-32 -4.5q-16 -2 -25 -1.5t-13.5 2t-5.5 3.5t1 3l28 24.5l54 47.5l69 62l73 68l-12.5 20.5t-10.5 18.5l-34 58
+l-29.5 50.5l-27.5 46.5q4 3 12 4.5t16 2.5q10 1 21 1q25 0 33 -3t13 -11z" />
+    <glyph glyph-name="question" unicode="?" horiz-adv-x="423" 
+d="M295 758q25 0 58 -7t61.5 -25t46.5 -48.5t12 -76.5q-10 -74 -46.5 -127t-83 -88.5t-94 -54t-77.5 -23.5l-25 -103q-4 -17 -12 -33.5t-21.5 -28.5t-33 -19t-45.5 -5l51 202q4 16 16.5 27t47.5 19q44 8 88.5 27t80.5 61q10 11 20.5 27.5t20.5 36t17 40.5t10 42q3 19 -1 37
+t-16 31t-33.5 21t-54.5 8q-26 0 -49 -8t-40 -21.5t-28 -30.5t-13 -35q-1 -11 0 -21q1 -9 4 -18t11 -16q-46 -12 -68 -3.5t-31 24.5q-11 18 -9 46q5 38 33 65t64.5 44.5t74.5 25.5t64 8zM71 73q26 0 44 -11t16 -31q-2 -11 -9 -21.5t-18.5 -19.5t-26.5 -14.5t-31 -5.5
+q-27 0 -45 11.5t-16 30.5q3 22 23.5 41.5t62.5 19.5z" />
+    <glyph glyph-name="at" unicode="@" horiz-adv-x="664" 
+d="M646 341q-4 -70 -30 -129t-63 -102.5t-79 -68t-76 -24.5t-51 13.5t-22.5 33t-2.5 40t8 34.5q2 4 4 10t5 14q-22 -18 -51.5 -33.5t-64.5 -15.5q-53 0 -80 33t-23 90q2 31 14.5 65.5t33 67t47 62t55 51.5t58 35t55.5 13q20 0 32 -7t19 -18.5t9 -24.5t2 -25l2 6
+q11 33 20.5 43.5t25.5 -11.5q6 -8 10 -17q4 -8 6 -16t0 -13l-46.5 -110l-33.5 -82l-27 -69q-15 -36 -17.5 -58.5t2 -34t14.5 -14t21 0.5q22 7 48.5 31t49.5 59.5t40 80t20 92.5q4 50 -5 98.5t-33 87t-63.5 62t-96.5 23.5t-115.5 -27.5t-107 -76.5t-80.5 -116t-36 -145
+q0 -55 24 -103q10 -20 26 -40.5t40 -38t57.5 -30.5t77.5 -19q-5 -17 -16.5 -28t-38.5 -4q-10 2 -33 7.5t-50.5 17.5t-57 33t-52.5 54t-36.5 79t-8.5 110q3 36 16.5 77t37.5 82.5t58.5 79.5t79.5 67t99.5 46.5t118.5 17.5q70 0 121 -29t83.5 -74.5t46 -101.5t10.5 -111z
+M243 172q52 0 99 55.5t71 161.5q-15 -12 -33.5 -19t-37.5 4q14 16 21.5 29.5t11.5 24.5q4 12 5 22q2 14 -3 19.5t-11 5.5q-16 0 -44 -18.5t-55.5 -50.5t-49.5 -75t-25 -92q-1 -21 4 -34.5t13 -20.5t17 -9.5t17 -2.5z" />
+    <glyph glyph-name="A" unicode="A" horiz-adv-x="566" 
+d="M433 753q35 0 57.5 -19.5t19.5 -70.5q-1 -17 -8 -63.5l-17 -109.5l-22.5 -135.5l-23.5 -141.5h21q10 0 22 1t25 3q-5 -12 -11 -22.5t-12 -18.5q-7 -9 -14 -16q-9 -11 -21 -19.5t-23 -13.5q-7 -49 -11.5 -87.5t-5.5 -63.5q-2 -38 2 -71q3 -29 12 -59t29 -48l-116 -38
+q-12 17 -17.5 45.5t-7.5 56.5q-3 33 -1 68t11 91.5l20 123.5q-20 6 -43.5 10t-52.5 4q-26 0 -54.5 -2t-56.5 -5q-12 -44 -24 -93q-13 -53 -23.5 -90.5t-20 -62.5t-19 -40t-20.5 -22q-12 -6 -30 -11q-17 -5 -43 -10t-67 -8q15 18 26 33t22 37t24.5 56.5l34.5 90.5
+q9 23 18.5 50.5t20.5 56.5q-36 -5 -61 -9t-30 -6q-8 -1 -13 0q-13 2 -14 13q1 14 9.5 19t25.5 12q8 4 36.5 14.5t69.5 22.5l29.5 83.5l28.5 79.5l27 71.5t24 57.5q17 37 43.5 81.5t61 83.5t76 65t87.5 26zM422 545q11 45 15 74t3 45.5t-6.5 23t-13.5 6.5q-13 0 -32 -10
+t-40 -28.5t-41.5 -46t-36.5 -62.5q-23 -52 -52 -127.5t-63 -192.5q20 3 39.5 5t38.5 2q34 0 65 -2.5t57 -5.5l18.5 94.5l18.5 88.5l16.5 77t13.5 59z" />
+    <glyph glyph-name="B" unicode="B" horiz-adv-x="622" 
+d="M535 94q-6 -67 -40 -120t-86.5 -89.5t-118.5 -55.5t-136 -19q-26 0 -48.5 3.5t-40.5 8.5t-30.5 9.5t-17.5 7.5q-9 5 -14.5 12.5t-6.5 21.5q-1 8 -1 12.5t1 9.5t3.5 13.5t6.5 23.5q2 9 15.5 56.5l32.5 116l41.5 148.5l43.5 155l38 135.5l25 89.5q-14 -10 -27.5 -21
+t-27.5 -24q-15 -14 -29.5 -9.5t-20.5 24.5q-2 10 -3 21q-1 9 0.5 20.5t7.5 22.5q33 20 64.5 34t60.5 25q6 17 13.5 26t15.5 12t17 2t19 -3q22 -5 29 -14q14 2 27 3t27 1q58 0 101 -15t70.5 -40.5t39.5 -59.5t9 -72q-3 -33 -17.5 -68.5t-38.5 -70t-56 -67t-71 -59.5
+q31 -18 55 -42t40 -52t23 -57t5 -56zM204 339q-2 -10 -4.5 -20l-5.5 -21q12 13 40.5 24t54.5 11q14 0 27 -1.5t25 -3.5q28 18 54 46.5t45.5 61t32 66.5t15.5 63q6 69 -23.5 102.5t-83.5 33.5q-36 0 -75 -13l-20 -64.5l-25.5 -84.5l-28.5 -97t-28 -103zM187 273
+q-14 -54 -28 -117q-13 -54 -28 -125.5l-32 -152.5q6 -5 16 -7l20 -4q11 -2 24 -2q45 0 91.5 18.5t85.5 52.5t65.5 82.5t31.5 108.5q2 27 -3.5 48.5t-16 39t-24 31t-28.5 23.5q-46 -25 -101 -42q-18 -5 -31 -1.5t-22 11t-14 17.5t-6 19z" />
+    <glyph glyph-name="C" unicode="C" horiz-adv-x="562" 
+d="M215 -186q-50 0 -90.5 24t-69 66t-43 98.5t-12.5 120.5q2 60 15.5 130t38.5 140.5t60.5 136t81.5 115.5t102 80.5t123 30.5q41 0 69.5 -16.5t46 -43.5t24.5 -61t6 -69q-2 -33 -9.5 -64t-21 -55.5t-33 -39t-44.5 -14.5q-12 1 -23 8q-10 6 -20.5 18t-19.5 35
+q27 11 42.5 38.5t23.5 57.5q9 34 12 76q2 41 -17 60t-43 19q-47 0 -99 -49t-96.5 -132.5t-75 -194.5t-35.5 -235q-2 -56 7.5 -95t27 -64t39.5 -36t44 -11q35 0 66 15t56.5 37t44 45.5t28.5 41.5q7 13 15 16t14 -1.5t8 -14t-4 -22.5q-17 -34 -41.5 -68t-55 -61.5t-66.5 -44.5
+t-76 -17z" />
+    <glyph glyph-name="D" unicode="D" horiz-adv-x="648" 
+d="M4 -129q-9 6 -9.5 13t3.5 14q4 8 12 16q8 7 19 35.5t23.5 69t25 88.5l23.5 94t19 85t12 62l11 61q5 29 11 67.5t11 85.5l80 36q17 8 24 -3.5t0 -47.5q-3 -18 -11 -58.5t-18.5 -89l-22 -99t-22.5 -89.5l-23 -85l-64 -224q14 -24 52 -24q42 0 97.5 32t107.5 96t91.5 160.5
+t49.5 225.5q5 70 -7 123t-36.5 89t-60 54t-78.5 18q-101 0 -209 -84l-5 83q26 29 59.5 44.5t62.5 23.5q34 9 69 10q64 0 123.5 -24.5t103 -74.5t66.5 -125.5t16 -176.5q-4 -58 -23.5 -120.5t-51 -122.5t-74.5 -114t-94 -94.5t-109 -64t-120 -23.5q-19 1 -41 7q-19 5 -43 17
+t-50 34z" />
+    <glyph glyph-name="E" unicode="E" horiz-adv-x="536" 
+d="M195 -186q-47 0 -87.5 15t-71 42t-48.5 63.5t-19 79.5q-1 56 17.5 100t49 78t69.5 57.5t80 38.5q-22 12 -41.5 29t-34.5 38t-24 44t-9 46q-2 70 28.5 127t78.5 97.5t107.5 62.5t116.5 22q38 0 65 -12.5t44 -31t25.5 -40t9.5 -39.5q1 -33 -8.5 -67t-24 -61.5t-32.5 -45
+t-35 -17.5q-13 0 -27 4q-12 3 -28 10t-32 21q26 10 46 28.5t33.5 41.5t20 47.5t6.5 46.5q-1 32 -15 49.5t-45 17.5q-42 0 -84 -20.5t-74.5 -57t-51 -87t-12.5 -109.5q5 -45 27.5 -76t42.5 -48q16 2 30 3.5t26 1.5q17 0 34 -6t17 -17q0 -8 -3.5 -18t-11.5 -19t-19 -15t-26 -6
+q-12 0 -29 6t-34 15q-38 -8 -69 -28.5t-52.5 -48.5t-33.5 -61t-11 -64q1 -29 9 -58.5t25 -52.5t44.5 -37.5t66.5 -14.5q29 0 55.5 12.5t49.5 31.5t42 42t33 45t23.5 40l13.5 26q3 6 8.5 9t11 1.5t8.5 -7.5t0 -18q-8 -36 -30 -80.5t-56.5 -83.5t-81 -65.5t-103.5 -26.5z" />
+    <glyph glyph-name="F" unicode="F" horiz-adv-x="600" 
+d="M383 352l42 83.5l38 77.5t29 64.5t14 45.5q2 18 -3 31t-16.5 21t-27 12.5t-34.5 5.5q-33 2 -78.5 -1.5t-87.5 -13t-72.5 -26.5t-32.5 -42q-1 -14 5 -25q5 -9 18.5 -17t40.5 -6q5 0 12 1l15 2.5t21 4.5l-49 -66q-14 -20 -30 -24t-29 -2q-7 1 -27.5 7t-41 18t-35.5 32.5
+t-12 51.5q4 36 31 66.5t75.5 52.5t116 34t152.5 12q64 0 102 -13.5t55.5 -35t17 -50t-12.5 -58.5q-6 -14 -17.5 -38.5l-27.5 -57l-34 -71.5l-36 -81q27 -2 49.5 -5t35.5 -5q15 -4 10 -13q-9 -18 -17.5 -27t-18.5 -12.5t-22 -3t-27 1.5q-9 0 -18 0.5t-19 1.5l-36.5 -89
+l-32 -83.5t-25.5 -72.5t-15 -55q-6 -31 -9 -58q-2 -23 -2 -48t8 -40q-21 -6 -36.5 -10t-26.5 -6l-20 -5q-28 -7 -39.5 1.5t-6.5 40.5q2 22 6.5 49.5t14 62t25 77t39.5 94.5l32 66.5l38 78.5q-44 0 -95 -6q-28 -4 -55 -9q-23 -5 -49.5 -11.5t-49.5 -14.5q-3 8 -3.5 16t0.5 15
+t3 14t6 14q6 12 19 30q47 6 90 9t76 5q39 2 73 2q5 1 8.5 0.5t8.5 -0.5z" />
+    <glyph glyph-name="G" unicode="G" horiz-adv-x="627" 
+d="M219 -195q-49 0 -88 25.5t-66 69.5t-39.5 102t-9.5 123q4 69 21 142.5t46 143.5t67.5 133t85 110t99.5 74.5t111 27.5q38 0 64 -19t40.5 -49.5t18.5 -68.5t-0.5 -75.5t-17 -72t-30.5 -56.5q-23 -29 -41.5 -30.5t-35.5 10.5q-7 6 -14 14q-7 7 -15 17.5t-17 26.5
+q19 7 35 23.5t27.5 37.5t18 44.5t7.5 46.5q1 18 -1 35.5t-8 31t-16.5 22t-26.5 8.5q-40 0 -78 -30.5t-71.5 -81t-62 -115.5t-49.5 -134t-34 -136t-16 -122q-4 -69 5 -112t24.5 -67.5t33.5 -33t33 -8.5q28 0 63 26t67 70.5t57.5 102.5t36.5 122q-25 0 -50.5 -0.5t-48.5 -1.5
+t-41 -2.5t-28 -3.5q-7 3 -9.5 7t-4.5 9q-2 4 -2 10t2 11t5 10.5t8 11.5q32 6 63 10t64.5 6.5t72 4t86.5 2.5q20 1 24.5 -5t-3.5 -30q-6 -19 -15.5 -31t-31.5 -10q-7 0 -11 1q-9 -59 -38 -125t-71 -122t-92.5 -93t-102.5 -37z" />
+    <glyph glyph-name="H" unicode="H" horiz-adv-x="665" 
+d="M23 -189q-24 0 -29.5 5.5t-1.5 21.5q1 5 10 44.5l22.5 96l29 122.5l29.5 124q-21 -2 -31 3.5t-9.5 15t11 19.5t30.5 17q4 2 12 4q5 17 9 35q4 15 8 32l8 33l70 299q6 23 18.5 34.5t46.5 19.5q28 7 39 5.5t10 -6.5l-15 -53l-28.5 -102.5l-35.5 -133l-37 -143.5
+q60 9 146 15q33 4 64.5 5t60.5 0l27.5 108l25.5 100l21.5 81.5t14.5 52.5q6 19 11.5 31t13 19t17.5 10t23 5q7 0 17 1q8 0 19 0.5t25 -1.5q-38 -102 -70.5 -206.5t-60.5 -203.5q18 -2 31.5 -3t21.5 -3q24 -4 30.5 -13t-4.5 -26l-12 -15q-6 -8 -15 -18.5t-23 -23.5l-16.5 6
+l-16.5 6q-10 3 -19 6l-13 -46.5t-11 -45.5q-12 -49 -23 -101q-9 -45 -18.5 -99.5t-14.5 -107.5q-8 -4 -16 -5.5t-14 -2.5l-14 -2h-1h-2h-2h-8t-8 2q-5 1 -10 3t-9.5 3.5t-9.5 4.5q8 33 12.5 62t6.5 51q3 26 4 46q1 26 -5.5 57t-20 61t-33 56t-44.5 44q-25 17 -47.5 22
+t-45.5 3l-13 -58t-10 -54l-21 -113l-16.5 -97.5t-12.5 -86.5q-16 -8 -30 -12.5t-25 -6.5q-12 -3 -23 -3zM419 255q-35 4 -66.5 4.5t-55.5 0.5q20 -11 35.5 -29t32.5 -41q16 -21 26 -46t17 -48q8 42 17 82l17 75q-6 1 -11.5 1.5t-11.5 0.5z" />
+    <glyph glyph-name="I" unicode="I" horiz-adv-x="550" 
+d="M260 253q-19 20 -30.5 49.5t-17.5 58.5q-7 33 -10 70q-5 72 16 131t57 101t80.5 65t86.5 23q19 0 30.5 -9t17.5 -22t7.5 -27t1.5 -23q0 -32 -1.5 -63t-5 -66t-10.5 -75t-18 -89q-6 -27 -17 -69t-26 -93q45 -1 72.5 -3.5t35.5 -3.5q7 -1 10.5 -7t-4.5 -19
+q-8 -12 -22.5 -14t-28.5 -2h-29.5t-50.5 -2q-21 -62 -47.5 -124.5t-58.5 -113t-70 -82t-81 -31.5q-62 0 -104.5 23.5t-69 55t-38.5 63t-12 48.5q0 30 16 61t50.5 58.5t89.5 48.5t132 32q32 4 61 6.5t55 4.5l40.5 153t35.5 144q6 27 12 58.5t9.5 59.5t4 47t-4.5 21
+q-3 1 -15 -7.5t-28 -24.5t-31.5 -38.5t-25.5 -48.5q-18 -51 -28 -100q-8 -42 -10 -89t15 -85q-2 -14 -6 -23q-3 -5 -5 -9l-7 -7q-4 -3 -9.5 -6.5t-13.5 -5.5zM248 -26q11 23 27 71t34 111q-49 -6 -99 -16.5t-90.5 -28t-66 -42.5t-25.5 -59q0 -36 14.5 -63t35 -45t42 -27.5
+t36.5 -9.5t28.5 11.5t25 28t21 35.5z" />
+    <glyph glyph-name="J" unicode="J" horiz-adv-x="513" 
+d="M71 -197q-29 0 -57 11.5t-50 32.5t-35 51.5t-11 69.5q3 68 27 126t56 100t65 65.5t55 23.5q14 0 25.5 -9.5t18 -24t8 -32t-4.5 -33.5q-10 7 -37 -5t-56 -40.5t-52 -70.5t-26 -94q-2 -34 3.5 -58t16 -39t24 -22t28.5 -7q36 0 66 27t55 75.5t47 116t42 149.5l15.5 62
+l20.5 80.5l23.5 90l23.5 89l21 79l16 59.5q-33 0 -66 -4q-28 -3 -58 -8.5t-50 -14.5q-2 1 -3 5.5t-2 9.5q-1 6 -2 13q-1 8 0 16q1 7 2 15.5t4 17.5q26 8 60.5 12.5t64.5 6.5q35 3 72 3q27 0 56 -3q25 -2 56 -6t62 -12q7 -7 9 -16q1 -4 1 -9q0 -8 -3 -15q-2 -6 -6.5 -12.5
+t-11.5 -10.5q-11 3 -27.5 4.5t-32.5 3.5q-18 2 -38 3l-106 -472q-4 -17 -14 -53.5t-27.5 -81t-42 -91.5t-57.5 -85.5t-75 -63.5t-93 -25z" />
+    <glyph glyph-name="K" unicode="K" horiz-adv-x="509" 
+d="M19 200q-5 22 0.5 28.5t25.5 11.5l13 55l12 51q17 72 32.5 128.5l29 101.5t25.5 81l23 67q11 8 22 12.5t21 7.5q11 4 23 6q10 1 18 0q7 -1 12 -4t6 -9q-38 -101 -65.5 -187t-45.5 -149q-21 -74 -35 -135q48 19 92.5 54.5t81.5 79t66.5 91t47.5 91.5t24.5 81t-2.5 59
+q24 11 45 17q11 4 21 6q26 7 32.5 -8.5t4.5 -46.5q-3 -71 -35.5 -139t-82.5 -127.5t-110.5 -106.5t-119.5 -74q17 2 33 3t30 1q27 0 50 -5.5t40.5 -18.5t27 -34t8.5 -52q-2 -48 -13 -85t-23.5 -68.5l-23.5 -58.5t-12 -55t8 -46.5t23.5 -30t30.5 -16.5t30 -5q17 0 37 3.5
+t35 8.5q6 2 9.5 -3t3.5 -9t-5 -14.5t-19 -16.5q-14 -7 -36 -14t-60 -7q-25 0 -52 11.5t-49 32t-36 47.5t-12 58q1 33 12 66t23.5 64l23 59.5t11.5 53.5q2 45 -23 67.5t-85 22.5q-20 0 -37.5 -2t-28.5 -4q-27 -136 -37 -205t-11 -90v-18q0 -8 1 -16.5t3 -16.5
+q-18 -13 -35.5 -19.5t-31.5 -9.5q-17 -4 -31 -4q-7 0 -13 2l-10.5 4t-7.5 7l31 129l26 111l25 107q-4 4 -7 9t-5 14z" />
+    <glyph glyph-name="L" unicode="L" horiz-adv-x="504" 
+d="M165 340q-51 0 -82.5 11t-42.5 28q-5 7 -9 21t3 31q14 -11 30.5 -16.5t30.5 -7.5q17 -3 33 -3q30 0 58.5 5t56.5 14q12 60 23.5 108t26.5 78q16 33 33.5 59.5t39 45t47.5 28.5t60 10q25 0 39.5 -10t22 -25t9 -32.5t1.5 -32.5q0 -33 -16 -72t-45 -77t-69.5 -72t-90.5 -56
+l-33.5 -130.5t-32.5 -106.5q-14 -39 -35.5 -87t-52.5 -92l38.5 -25t39.5 -23.5t40.5 -17.5t43.5 -7q24 1 47 7q20 5 42 16.5t41 32.5q7 -12 4.5 -36t-15.5 -48t-37 -42t-60 -18q-38 0 -71 10.5t-62 25.5t-54.5 32.5l-47.5 32.5q-30 -29 -66 -47t-80 -18q-35 0 -56 19.5
+t-19 52.5q1 12 7 28.5t22.5 31.5t45.5 25.5t75 10.5q17 0 32.5 -3.5t30.5 -8.5q11 20 22 46l24 59q23 63 40 126.5t29 123.5q-14 -3 -29.5 -4t-31.5 -1zM-1 -112q13 5 30 10t39 28q-15 5 -23 5q-36 0 -52.5 -10.5t-16.5 -20.5q0 -7 6 -10.5t17 -1.5zM377 584q-5 -15 -13 -44
+t-17 -67q54 35 86.5 80t32.5 90q0 27 -16 27q-14 0 -36 -21.5t-37 -64.5z" />
+    <glyph glyph-name="M" unicode="M" horiz-adv-x="751" 
+d="M23 -187q-39 -1 -64.5 14t-40 43.5t-18.5 69t0 88.5q5 37 18 77q11 34 33.5 75t60.5 80q8 -2 13 -4.5t8 -5.5q3 -4 4 -7q2 -11 -6 -25t-16 -30q-22 -46 -33 -87t-14 -76q-2 -30 0.5 -54.5t7.5 -42t11 -27t11 -9.5t10.5 7t10.5 17q6 10 14 30.5t17 47.5t17.5 58.5
+t15.5 63.5q14 64 30 144.5t47 168.5q10 37 25 81q12 38 30.5 88.5t42.5 109.5q0 5 8.5 9.5t19.5 9.5q12 5 27 10q20 7 31.5 8t17.5 -3t8 -10.5t2 -14.5q2 -33 2.5 -62t1.5 -51q1 -26 1 -47q1 -28 -3 -74.5l-8.5 -97.5t-8 -99.5t-1.5 -80.5q0 -17 1.5 -31.5t3.5 -28.5
+q13 36 29 75.5l32 76l30 68t22 52.5q12 28 32 71l40.5 86l38 79t25.5 50q6 10 20.5 18t31 14t31 8.5t19.5 0.5q13 -3 18.5 -8t6.5 -7q2 -4 3 -13.5t-1 -29.5q-2 -24 -11.5 -73t-23 -111.5l-29 -133.5l-29.5 -139.5t-24.5 -128.5t-13.5 -101q-2 -46 6 -81q3 -15 9 -29
+t16 -24.5t24 -15.5t33 -3q-25 -17 -49 -25t-47 -8q-25 -1 -44 7.5t-32 24t-19 37t-4 47.5q2 24 13 79t26.5 124.5t34 145l35 142l28.5 114.5t15 63q2 12 3.5 22.5t3.5 18.5l-24.5 -48l-30.5 -60l-32.5 -66.5l-31.5 -66.5l-49 -106.5t-43 -103.5t-31.5 -88t-14.5 -60v-14
+q0 -6 0.5 -14t2.5 -15l-40 -31l-15.5 -5t-12.5 -2q-23 0 -35 24q-12 22 -22 86t-6 157q2 46 6.5 93l9 90l8.5 80.5t4 64.5q1 20 -1 36.5t-4 30.5q-9 -23 -20 -62.5t-23 -87.5l-24.5 -101l-24 -102l-21.5 -90.5l-16 -66.5q-10 -40 -20 -91t-25 -96.5t-39 -77t-62 -32.5z" />
+    <glyph glyph-name="N" unicode="N" horiz-adv-x="554" 
+d="M156 472q-5 -18 -12.5 -51.5t-16 -76.5l-18 -90.5t-17 -93.5t-13.5 -86.5t-7 -68.5q-1 -31 0 -61q1 -26 3.5 -54.5t9.5 -50.5q-17 -8 -30 -11.5l-21 -5.5q-10 -2 -17 -2q-8 0 -19 1.5t-20 10.5t-15 28t-4 55q1 24 7.5 59.5t15.5 78t20.5 88l22.5 89l20.5 82.5l16.5 67
+l20 84l57 246q7 5 15 9.5t14 7.5q7 4 14 6q32 12 45.5 3t15.5 -36q1 -18 4.5 -52t6.5 -76t5 -86.5t2 -82.5q0 -25 1 -59t3 -72t5 -77.5t7 -75.5t8.5 -66t9.5 -49q2 -8 4.5 -15t4.5 -14q6 24 13.5 57l16 70.5t16.5 77t14 74.5q5 28 11 72t14 95l-21 8q-9 4 -18 10t-15 14
+q1 13 2.5 19t9.5 1q6 -3 18.5 -7t29.5 -6q5 28 11.5 56t13.5 54q11 43 25 77.5t32.5 58.5t43.5 37t58 14q31 0 50.5 -25.5t16.5 -88.5q-2 -47 -19.5 -84.5t-42.5 -66t-55 -47t-57 -26.5q-9 -47 -17 -94.5l-15.5 -92t-15 -84.5t-14.5 -71l-15 -65q-7 -30 -17 -69l-21 -82
+q-4 -9 -10 -15.5t-12 -10.5q-7 -5 -14 -8q-20 -8 -34 -3t-25 27q-11 23 -19.5 57t-17.5 74q-9 43 -13.5 93.5t-7 103t-3.5 104.5t-4 98q-5 60 -10 107.5t-11 80.5l-9 -45t-11 -51zM492 514q-5 -19 -8 -36q24 14 45 35.5t36 45.5t23.5 48t9.5 44q1 14 -2.5 22.5t-12.5 8.5
+q-5 0 -15.5 -5.5t-23.5 -23t-26.5 -50.5t-25.5 -89z" />
+    <glyph glyph-name="O" unicode="O" 
+d="M524 336q-5 -63 -20 -126.5t-37.5 -122.5t-52.5 -110.5t-66.5 -89.5t-78 -60t-86.5 -22q-9 0 -27.5 3.5t-39.5 16t-42.5 36.5t-37.5 64.5t-23 100.5t0 145q12 134 49.5 243.5t86 187.5t100.5 120.5t92 42.5q16 0 26.5 -6.5t16.5 -16.5q7 2 16 3t20 1q29 0 51.5 -30
+t37 -84t19 -129.5t-3.5 -166.5zM186 -137q39 0 80 40t76 108.5t60 159.5t34 193q2 27 3 62t0 71t-4.5 71.5t-9.5 62.5t-15 44t-21 17q-13 -1 -26 -8q-11 -6 -25.5 -19.5t-28.5 -37.5q-3 2 -4.5 6t-3.5 8t-3 9q-2 3 -2 7.5t-1 10.5q-20 -22 -47.5 -62.5t-55 -100.5
+t-50 -141.5t-31.5 -185.5q-8 -92 -4 -153t15.5 -97t28.5 -50.5t35 -14.5z" />
+    <glyph glyph-name="P" unicode="P" horiz-adv-x="566" 
+d="M-51 -143q4 3 12.5 10t20 26t25.5 55t29 98l21 84l28.5 109l31.5 119.5l31 117l27 100.5l19 70q-19 -12 -37 -27q-16 -13 -34 -29.5t-35 -34.5q-13 11 -20 24q-4 6 -7 13q-6 15 -6 31t25 33q13 9 39.5 26t65.5 33.5t91 28.5t115 12t101.5 -25t59 -61t26.5 -76t3 -70
+q-6 -56 -36 -117t-83 -112.5t-129 -87.5t-174 -41l-16 -78t-17 -78.5t-18.5 -72t-19.5 -57.5q-10 -26 -26 -41.5t-51 -15.5q-18 0 -33.5 9t-28.5 25zM186 313l-7.5 -41.5l-10.5 -57.5q27 4 60 14.5t66 28.5t64.5 43.5t57.5 59t43.5 76t22.5 94.5q5 50 -5.5 83.5t-30.5 54
+t-46 29t-52 8.5q-25 0 -49 -7t-48 -18q3 -1 7 -5q6 -6 9 -17l-39.5 -162t-24.5 -106q-11 -48 -17 -77z" />
+    <glyph glyph-name="Q" unicode="Q" horiz-adv-x="597" 
+d="M385 755q39 0 68 -17t49 -44.5t32 -61.5t18 -68.5t7.5 -65.5t0.5 -51q-5 -78 -22.5 -150t-43.5 -135.5t-59 -117t-69 -95.5l10.5 -11l10.5 -11q28 -28 57 -47q25 -17 55 -28.5t57 -3.5q1 -14 -8.5 -21.5t-20.5 -11.5q-13 -4 -31 -5q-23 0 -48.5 9.5t-49 23t-44.5 29.5
+t-35 28q-45 -44 -88.5 -66t-80.5 -22q-61 0 -87 26.5t-23 65.5q1 19 12 40t30.5 38.5t46.5 28.5t62 11q34 0 60.5 -6t52.5 -20q32 45 61 101.5t51.5 117.5t37.5 123t19 118q4 72 -4 118.5t-23 74t-33 38.5t-33 11q-34 0 -75.5 -33.5t-79.5 -93.5t-66 -142t-35 -179
+q-1 -42 8 -75q4 -14 10.5 -27.5t16.5 -24t24 -16.5t33 -5q-2 -17 -13 -26t-23 -13q-14 -5 -32 -5q-15 0 -37 12.5t-42.5 39.5t-33.5 69.5t-8 102.5q3 40 14.5 90.5t32.5 103t50.5 102.5t68.5 89.5t87 63.5t105 24zM152 -119q26 0 54.5 17.5t56.5 47.5q-24 16 -51 16
+q-19 0 -34.5 -5.5t-26.5 -14.5t-17.5 -19.5t-6.5 -20.5q-1 -9 5 -15t20 -6z" />
+    <glyph glyph-name="R" unicode="R" horiz-adv-x="574" 
+d="M180 216q12 2 24 4.5t26 6.5q-17 16 -45 20q-3 -16 -5 -31zM589 525q-4 -43 -22.5 -90t-51.5 -91t-80 -82t-107 -62q9 -17 17 -36t14 -43q9 -32 15.5 -66t11 -66t8 -59.5t5.5 -45.5q4 -30 19.5 -42.5t35 -14t39 4.5t30.5 13q-1 -1 -11 -17.5t-27 -35t-40.5 -32
+t-52.5 -8.5q-20 3 -35.5 13.5t-27 31t-18.5 52.5t-9 78q-2 62 -4.5 118.5t-21.5 104.5l-6 15.5t-7 13.5q-41 -10 -92 -13l-15 -78t-16.5 -78t-18 -71.5t-18.5 -57.5q-10 -25 -25.5 -40.5t-49.5 -15.5q-20 0 -35 9t-29 25l12.5 9.5t20 26t25 55.5t27.5 97q5 25 13.5 58.5
+l18.5 73.5q-40 22 -37 59q2 23 21 39t46 22l26.5 105l25.5 99.5l22 84l16 59.5q-18 -12 -36 -27l-34.5 -29.5t-34.5 -34.5q-8 6 -13 13t-8 12q-4 6 -6 13q-7 14 -7 30.5t24 33.5q13 9 39.5 26t65.5 33t90.5 28t114.5 12t102 -25t60 -61t27.5 -76t3.5 -70zM287 250
+q35 17 69.5 42t62.5 60t47 79.5t24 100.5q4 50 -6.5 83.5t-31 53.5t-46.5 28.5t-52 8.5q-24 0 -48.5 -7t-47.5 -18q3 -1 7 -5q2 -3 4.5 -7.5t3.5 -9.5q-23 -97 -37 -162l-23 -106q-11 -48 -16 -77q-1 -4 -1.5 -8t-1.5 -9q22 -5 46 -15.5t47 -31.5z" />
+    <glyph glyph-name="S" unicode="S" horiz-adv-x="486" 
+d="M367 459q-1 3 6 15.5t15.5 31t17 42t12 48.5t-0.5 50t-21 48q-10 12 -29.5 13.5t-44 -6t-51 -23t-48.5 -36t-37.5 -45.5t-17.5 -51q-2 -21 1.5 -39t9.5 -33t13 -28t13 -23q8 -14 25 -31l37 -38.5t40 -48.5t35 -61t21 -76t-1 -93q-11 -74 -35 -123.5t-52.5 -79.5
+t-57.5 -43.5t-48 -17.5q-15 -3 -35.5 -5.5t-43 1t-45.5 14t-41 32.5q-21 25 -33 54q-11 25 -16.5 57.5t5.5 67.5q8 9 17 16t18 12q10 6 21 11q13 4 26 7q11 2 23.5 2.5t23.5 -3.5q-15 -17 -21 -32q-4 -8 -6 -14q-4 -19 -2.5 -45.5t11 -51t27.5 -42t48 -18.5q73 -2 124 114
+q17 36 17.5 73t-9 71t-25 63.5t-31.5 50.5t-38.5 45.5t-44.5 53.5t-39.5 63t-23.5 74q-8 56 10.5 102.5t50 81.5t69 57t66.5 28q161 32 211 -54q21 -33 23 -70t-4.5 -68.5t-16 -53t-12.5 -23.5q-6 -6 -19 -13t-42 -13q-8 -2 -16 -2q-7 0 -15 1t-14 4z" />
+    <glyph glyph-name="T" unicode="T" horiz-adv-x="434" 
+d="M61 626q-12 -4 -18 -1t-9 10t-3 15.5t1 16.5q1 7 3.5 16t6.5 17t9.5 13.5t14.5 7.5q46 8 89.5 12t78.5 6q40 3 77 3q8 0 16 -0.5t16 -0.5q9 2 14.5 1.5t9.5 -1.5q29 -1 60 -3l58.5 -4.5t64.5 -6.5q3 -8 1 -20l-2 -12t-5 -11q-3 -5 -7.5 -9.5t-10.5 -7.5q-34 1 -65.5 1.5
+t-55.5 0.5h-54l-32 -113.5l-38.5 -142l-37 -148t-27.5 -132.5l-20 -112l-8.5 -48t-8 -49l-6.5 -46t-5 -40q-16 -8 -30 -12.5t-25 -6.5q-13 -3 -24 -3q-24 0 -29.5 5.5t-1.5 21.5q3 14 18 76l15.5 65.5l22.5 96l31 132l41 173.5l67 278q-30 -4 -59 -9t-54.5 -10.5t-46 -10.5z
+" />
+    <glyph glyph-name="U" unicode="U" horiz-adv-x="588" 
+d="M10 -9q1 65 18 164q14 85 45 217t89 318q5 10 15.5 17t21.5 12q12 5 27 8q14 3 27 5q11 2 23 2t20 -2q-35 -88 -60 -159.5t-41 -123.5q-19 -61 -31 -108q-17 -50 -29 -100t-19.5 -94.5t-11 -79.5t-3.5 -55q1 -60 20 -94.5t62 -34.5q36 0 67.5 34t58 83.5t45.5 106.5
+t29 102q2 8 4 22q13 62 31 138q15 65 37.5 153l51.5 192q8 8 18 13t18 8q10 4 20 5q10 2 21 2q9 0 21 -1.5t24 -5.5q-20 -54 -39 -112.5l-34 -108.5q-18 -58 -34 -115q-23 -72 -37 -129.5t-22.5 -106t-13 -90l-8.5 -81.5q-3 -32 -1 -60q2 -25 7 -50t18 -42q-5 -7 -14 -10
+t-19 -5q-11 -2 -24 -2q-26 0 -38.5 32.5t-13.5 103.5q-8 -16 -25 -40.5t-42.5 -48t-59.5 -40.5t-76 -17t-69.5 14.5t-44 39t-23 57t-6.5 67.5z" />
+    <glyph glyph-name="V" unicode="V" horiz-adv-x="516" 
+d="M172 -194q-25 1 -44 26t-33 65t-23.5 91t-15.5 103.5t-8 102t-2 87.5q1 60 9.5 123.5t19 119.5t21 99.5t15.5 61.5q7 29 19 39.5t45 12.5h24l20 -2t18 -5q-36 -72 -58 -146t-34 -148t-15 -145.5t-1 -138.5q2 -53 6 -98.5t13 -92.5q9 -46 21 -53t25 9.5t25.5 48t21.5 63.5
+l18 60.5l27 87.5l31.5 100l30.5 96.5l24.5 77.5t14.5 44l16.5 44.5l23 60l26 63t25.5 55.5q12 23 27 27t29.5 -4.5t27 -25.5t21.5 -35q-13 -5 -26.5 -24.5t-24.5 -41.5q-13 -26 -25 -56l-21 -58l-27.5 -79l-30 -89l-29.5 -87l-25.5 -73.5t-18.5 -48.5l-23 -55.5l-27.5 -64.5
+l-29.5 -65.5t-30 -58.5q-21 -38 -35.5 -55.5t-37.5 -17.5z" />
+    <glyph glyph-name="W" unicode="W" horiz-adv-x="837" 
+d="M144 -191q-29 0 -53.5 25.5t-40 73t-22 117t0.5 158.5q4 59 16 120.5t27 119t32 108.5t31.5 90.5l24 63.5t11.5 28q3 5 11.5 10.5t20 9.5t25 6.5t25.5 2.5q10 0 19 -1q8 -1 16 -3t14 -6q-11 -7 -21.5 -21.5t-19.5 -30.5q-11 -18 -20 -39q-20 -42 -42 -102t-41.5 -127.5
+t-34 -137t-19.5 -130.5q-8 -123 9 -183.5t48 -60.5q15 0 32 19t34.5 49t34.5 67t32 73l19.5 51.5l21 58.5l20.5 59.5l18 53.5q0 30 1 63.5t4.5 68t9.5 68t16 61.5q20 54 47 79.5t47 26.5q14 0 20 -12t5 -32q-2 -26 -9 -62.5t-16.5 -78t-21.5 -84l-23 -81.5
+q-18 -103 -22 -186.5t1.5 -143t19 -92t32.5 -32.5q22 0 46.5 30t48.5 79.5t46.5 112.5t41 129.5t30.5 131t16 116.5q3 43 3 85q0 36 -3 77t-11 74q13 11 35 18q11 4 24 7q8 2 17 3q8 1 16 1.5t15 -1.5q6 -14 8.5 -36t3.5 -43q1 -25 -1 -52q-8 -106 -27.5 -208t-47.5 -193.5
+t-62.5 -168t-71 -132.5t-73 -87t-69.5 -31q-35 0 -56 29.5t-32 74t-14 95.5t-2 94q-23 -56 -49.5 -108t-55 -92.5t-58 -65t-58.5 -24.5z" />
+    <glyph glyph-name="X" unicode="X" horiz-adv-x="593" 
+d="M700 681q-8 5 -18.5 3t-19.5 -6q-11 -4 -21 -12q-27 -22 -79.5 -82t-114.5 -153l-54.5 -82.5l-57.5 -85.5l7 -83.5t8 -72t12.5 -69.5t20.5 -76q13 -42 28 -63t43 -21q27 0 51.5 14t43.5 30.5t31 30.5t14 14q4 0 6.5 -8.5t1.5 -16.5q0 -7 -13.5 -28t-37.5 -43.5t-57 -40.5
+t-72 -18q-41 0 -67.5 29.5t-43 78t-26 112t-16.5 132.5l-38 -60l-38 -61q-43 -69 -69.5 -116.5t-47.5 -70.5q-16 -17 -29 -22.5t-30 -2.5q-15 3 -27 9q-11 5 -22 13.5t-19 22.5q13 3 25.5 12t22.5 18q11 11 22 24q8 10 32 45l57 85l72 109.5l78 118.5q-5 52 -11 105t-14 102
+q-15 -21 -37.5 -40.5t-43.5 -19.5q-23 0 -45 13t-39 35.5t-26.5 53t-6.5 65.5q2 21 12 48.5t27 51.5t41.5 41t55.5 17q30 0 52 -13t38.5 -47.5t29 -95.5t24.5 -157l4 -31l4 -30l61.5 94l41.5 63l52.5 76.5t52.5 66.5t51.5 46.5t49.5 17.5q11 0 21.5 -7.5t19.5 -18
+t15.5 -22.5zM183 525q11 0 23 4t20 8q-6 36 -13.5 66t-16.5 51.5t-19 34t-22 12.5q-20 0 -33.5 -21.5t-17.5 -59.5q-2 -19 3 -36.5t15.5 -30.5t26 -20.5t34.5 -7.5z" />
+    <glyph glyph-name="Y" unicode="Y" horiz-adv-x="545" 
+d="M157 77q-67 0 -97.5 43t-25.5 116q4 45 17 115q11 60 33.5 151t61.5 220q12 8 24.5 12.5t22.5 6.5q11 3 23 4q9 1 19 1q8 0 16 -1.5t13 -5.5q-51 -131 -79.5 -224t-42.5 -153q-17 -70 -21 -115q-3 -55 16.5 -78t58.5 -23q31 0 63 23.5t62 67t55.5 105t43.5 138.5
+q8 43 18 86l18 79.5l19 79.5q9 8 19.5 12.5t19.5 7.5q11 4 22 5q10 1 20 0q8 -1 16.5 -3t13.5 -7q-17 -53 -29.5 -96l-21.5 -74l-19 -64q-8 -30 -19 -78l-27 -106l-39 -158l-15 -60t-23.5 -75t-36 -77.5t-53 -69.5t-74.5 -50t-100 -19q-33 1 -59 10q-23 8 -42.5 23.5
+t-22.5 44.5q5 11 11 20t12 17q7 9 14 17q7 7 15 13q7 5 15 9t16 4q4 -9 12 -21t20 -22.5t27 -17.5t33 -7q24 0 51 15.5t53.5 53t51.5 101.5t47 161q-13 -23 -33 -50t-47.5 -51t-64 -40t-81.5 -16z" />
+    <glyph glyph-name="Z" unicode="Z" horiz-adv-x="466" 
+d="M72 167l49 60.5l59.5 73l64 80l61.5 80.5t52 74t37 62q6 13 10 25q4 11 6.5 22.5t0.5 22.5q-29 0 -69 -1.5t-84.5 -6.5t-89 -15t-81.5 -28q-5 4 -6.5 13t0.5 20q1 11 5 26q4 13 9 24l10.5 18t13.5 13q38 5 71 8t59 5q30 2 55 2l68 -2q29 -2 61.5 -3.5t60.5 -6.5
+q5 -14 7.5 -29t3.5 -27q1 -14 1 -28q-2 -35 -31 -91t-74 -116l-38 -47.5l-51.5 -63l-60 -73l-63 -77l-61 -76t-52.5 -69.5q-26 -35 -43.5 -68.5t-27.5 -58.5q26 10 80 22.5t128 12.5q39 0 73 -3q29 -2 57.5 -7.5t42.5 -14.5q-2 -10 -10 -24q-7 -12 -22 -29.5t-41 -40.5
+q-39 8 -73 12.5t-60 6.5q-30 3 -55 3t-54 -4q-25 -3 -56.5 -8.5t-66.5 -16.5q-10 6 -15.5 21t-8.5 30q-4 18 -6 39q26 59 53.5 106.5t50.5 81.5q26 40 50 71z" />
+    <glyph glyph-name="bracketleft" unicode="[" horiz-adv-x="207" 
+d="M116 367q-15 -57 -29 -117.5l-25 -111.5t-18 -87.5t-8 -46.5q-4 -21 3.5 -39t35.5 -18h26l-9 -56l-92 -5q-8 0 -17 0.5t-16.5 6.5t-11 18.5t0.5 35.5q3 22 12 66.5l21 102.5l27 124.5l31 133.5q17 72 36 143l35.5 129.5l28.5 98.5t16 52q15 47 47 51q8 1 22 1h29t28 -0.5
+t20 -0.5l-16 -71q-13 0 -25.5 -1t-23 -6t-19 -16t-14.5 -31q-23 -77 -40.5 -141.5l-29.5 -112.5z" />
+    <glyph glyph-name="backslash" unicode="\" horiz-adv-x="280" 
+d="M119 746q1 -8 3.5 -36t7 -70l10 -93t12.5 -104t15 -104t17 -92q9 -47 19 -92q8 -38 18 -80.5t18 -71.5q-11 -8 -21 -11.5t-18 -5.5q-10 -2 -19 -2q-20 0 -26 4.5t-9 18.5q-1 12 -9 63q-3 22 -8 54.5l-12 79.5l-16.5 109.5l-21.5 143.5l-37 245q-3 20 3.5 29.5t32.5 17.5
+q20 5 30 3.5t11 -6.5z" />
+    <glyph glyph-name="bracketright" unicode="]" horiz-adv-x="222" 
+d="M91 368q15 57 29 117l25 111t17.5 87.5l8.5 47.5q4 20 -3.5 38t-35.5 18h-28l10 57l93 4q7 0 16.5 -0.5t17 -6.5t11 -18.5t-0.5 -35.5q-3 -22 -12 -66l-21.5 -102l-27.5 -125l-31 -134q-17 -72 -35.5 -143l-35 -129l-28.5 -98t-16 -52q-15 -47 -47 -52q-9 -1 -23 -1
+h-28.5t-27.5 0.5t-20 0.5l15 71q13 0 25.5 1t23.5 6t19.5 16t14.5 32l40 141t30 113z" />
+    <glyph glyph-name="asciicircum" unicode="^" horiz-adv-x="294" 
+d="M284 729q2 -18 3 -35.5t3 -34.5q5 -53 11 -103q5 -43 11.5 -89t12.5 -79q-8 -8 -17 -12t-17 -6q-9 -3 -18 -2q-19 0 -24 5t-7 20q0 3 -2 29l-5 66t-6 88.5l-6 96.5l-74 -127.5l-93 -156.5q-3 -4 -10 -8q-6 -3 -16 -5.5t-26 -2.5q-14 -2 -19 1.5t-6 7.5t3 11q2 5 5 9
+q2 4 4.5 8l4.5 7l165 279q12 21 22 31q6 5 22 9t33.5 5.5t31 -1t14.5 -11.5z" />
+    <glyph glyph-name="underscore" unicode="_" horiz-adv-x="450" 
+d="M398 57q8 -3 10.5 -10.5t-4.5 -26.5q-6 -18 -13 -23t-14 -7q-3 -1 -27 1t-58.5 4.5t-75 4t-76.5 0.5q-67 -2 -122.5 -4t-100.5 -7q-21 -2 -26 7.5t-3 21.5q3 13 9.5 29t21.5 18q48 5 92 7t79 3q40 1 77 0q46 2 86.5 0t71.5 -6t50 -7.5t23 -4.5z" />
+    <glyph glyph-name="grave" unicode="`" 
+d="M329 692q6 -3 21.5 -13.5t32.5 -24l32.5 -27t20.5 -22.5q11 -18 2.5 -27.5t-18.5 -15.5l-71.5 38l-46.5 24l-33 17q-9 5 -7 18.5t13 25.5q16 16 28 15t26 -8z" />
+    <glyph glyph-name="a" unicode="a" horiz-adv-x="446" 
+d="M513 199l-36 -49.5l-45.5 -59t-46 -54t-37.5 -34.5q-10 -6 -23 -10t-26.5 -5t-25.5 1.5t-21 8.5q-9 7 -15 20q-5 11 -9.5 29t-3.5 45q-24 -40 -53 -61.5t-55 -31.5q-30 -11 -60 -13q-14 0 -30 9.5t-27 30t-14 53t8 77.5q14 61 44.5 111t66.5 85.5t71 53.5t58 16
+q27 -5 44 -16q14 -10 18.5 -29.5t-16.5 -51.5q14 3 23.5 4t14.5 1q6 0 8 -1q1 -2 1 -8.5t-3 -23.5t-9 -46l-16 -75q-2 -9 -3.5 -16.5l-3 -15l-3.5 -17.5l-5 -25q-1 -9 -0.5 -19.5t3.5 -19.5t9.5 -14.5t18.5 -5.5q10 0 26 12.5t34 32t37.5 43l36.5 45.5l30.5 39l19.5 25
+q8 9 16 10.5t12 -4.5t1.5 -18t-14.5 -28zM220 155l12 47t12 52t7.5 41.5t-1.5 15.5q-5 -1 -11 -3q-5 -2 -13 -3t-16 -3q8 16 9.5 26.5t0.5 16.5q-1 7 -4 11q-11 9 -38.5 -14.5t-63.5 -86.5q-15 -26 -24 -55.5t-12.5 -55.5t-1.5 -45.5t8 -25.5q11 -11 25 -10.5t28.5 8
+t29 19.5t26 25t19 24t8.5 16z" />
+    <glyph glyph-name="b" unicode="b" horiz-adv-x="425" 
+d="M229 573q-15 -60 -33.5 -114.5t-38 -102t-39 -86.5l-34.5 -68q-10 -72 0 -116t39 -44q24 0 47 22t41 54t30.5 68.5t15.5 65.5q-19 5 -32 17.5t-13 33.5q0 14 8 26.5t19 21.5t24 14t24 5q17 0 29 -21.5t16 -54.5q40 1 84 12t83 28q11 5 18 3t9.5 -8t-0.5 -13.5t-12 -11.5
+q-23 -13 -47.5 -23.5t-48.5 -17.5t-46 -11t-40 -4q-4 -40 -25 -86.5t-51 -86t-66.5 -65.5t-71.5 -26q-11 0 -29 3t-35 21t-29 57.5t-10 112.5q1 49 11 104t24 110t31.5 106.5t33.5 93t29.5 69.5t20.5 36q9 11 21 16.5t23.5 8t21.5 1.5t14 -3q6 -4 3.5 -44t-19.5 -103z" />
+    <glyph glyph-name="c" unicode="c" horiz-adv-x="372" 
+d="M170 34q31 0 68.5 24.5t73 57.5t65 67.5t44.5 55.5q9 13 17 15.5t12 -2.5t3 -15.5t-9 -23.5q-7 -12 -23.5 -34.5t-39 -49t-51 -54t-59.5 -50t-64 -37t-65 -14.5q-44 0 -73.5 16.5t-47 42.5t-24.5 57.5t-7 62.5t14 77t41.5 88.5t69.5 73t99 30.5q32 0 54.5 -22t21.5 -60
+q0 -18 -6 -35.5t-16 -31t-23.5 -21.5t-29.5 -8q-13 0 -19.5 9.5t-8 22t0 24.5t3.5 16q5 7 11 10l14 7q6 3 9.5 9t3.5 13t-4 12t-13 5t-32.5 -14.5t-48 -43t-43.5 -71.5t-20 -100q-1 -33 9 -54t25 -33t33 -17t35 -5z" />
+    <glyph glyph-name="d" unicode="d" horiz-adv-x="495" 
+d="M318 191l-9.5 -59t-5.5 -45q-1 -25 9 -36t22 -11q14 0 34.5 14t43.5 35t46 46l42.5 47.5t33 39.5t18.5 22q6 6 12.5 7t10.5 -2t4 -11t-8 -20q-12 -19 -31 -44.5t-42 -52.5t-48.5 -53t-51 -46t-49 -32.5t-42.5 -12.5q-14 0 -26.5 8t-22.5 21t-15.5 29t-4.5 32q1 7 3 24
+q-42 -47 -84.5 -74.5t-81.5 -27.5q-14 0 -30 7t-28.5 23t-20.5 42t-6 63q3 58 23 110t50.5 90.5t69 61t77.5 22.5q17 0 31 -8.5t24 -22t16.5 -29.5t9.5 -30q7 29 13 57t12 53l21 80l23 85t29 101q10 8 19 12t17 6q9 3 17 3q10 0 18 -2.5t13.5 -13t7.5 -31.5t0 -57
+q-2 -44 -15.5 -96t-35.5 -107.5t-50.5 -111t-61.5 -105.5zM259 178q4 19 7.5 38t8.5 39q-2 -1 -3.5 -2t-3.5 -2q-11 -5 -15 0.5t-4 17.5q0 6 -1 21.5t-5.5 32t-13.5 29t-25 12.5q-23 0 -47 -23.5t-45 -57t-35 -71.5t-16 -68q-2 -48 12 -69t38 -21q18 0 39.5 14t42 34t38 41z
+" />
+    <glyph glyph-name="e" unicode="e" horiz-adv-x="381" 
+d="M453 208q-30 -44 -68 -85.5t-80.5 -74t-87 -52.5t-86.5 -20q-22 0 -47.5 10.5t-46.5 32.5t-33.5 57t-7.5 85q4 41 25.5 86.5t53 83.5t71 63t79.5 25q38 0 55 -19t15 -47q-3 -31 -17.5 -57t-34.5 -47t-42.5 -38l-42.5 -31l-42 -28.5l-35 -24.5q1 -25 9 -42t20 -27.5
+t27.5 -15t31.5 -4.5q34 0 71 21.5t72.5 52t66 63.5t50.5 57q7 8 14.5 9.5t12 -2t4.5 -12t-7 -19.5zM197 362q-12 0 -28.5 -12t-32.5 -34.5t-30 -55t-21 -74.5q12 9 26 18.5t28 20.5q43 33 60 58t19 43q2 19 -4 27.5t-17 8.5z" />
+    <glyph glyph-name="f" unicode="f" horiz-adv-x="333" 
+d="M20 104q-11 11 -15.5 21.5t-6.5 20.5q-2 11 0 22q4 14 12 26q7 11 19 22.5t32 21.5q13 32 23.5 67.5l18.5 64.5q9 34 16 68q25 85 26 138.5t-2 70.5l-2 14q-2 6 -3.5 13.5t-3.5 14.5q11 6 19.5 10t14.5 6q7 3 13 4q23 5 43.5 5.5t22.5 -7.5q1 -5 2.5 -18t1.5 -32
+t-3 -42.5t-11 -49.5l-19 -64l-29 -93.5l-47 -149.5q30 10 66 19t73.5 15t75 9t69.5 1q6 0 8.5 -5.5t0 -11.5t-11 -11.5t-24.5 -6.5l-44 -4.5t-49.5 -7t-50.5 -11t-47 -15.5l-34 -12q-14 -5 -29.5 -11.5t-25.5 -11.5l-23 -73q58 -41 89.5 -84t45.5 -79q17 -42 19 -82
+q0 -44 -13 -88.5t-34.5 -85t-50 -75.5t-60 -60t-64 -38t-61.5 -10q-21 2 -35 13.5t-21 29t-8 39t4 42.5q4 21 17 78q11 48 34 139.5zM79 57q-14 -50 -24.5 -92t-17.5 -74q-9 -37 -14 -67l-18.5 -75t-15 -66.5t-4.5 -47.5t13 -18q29 -2 60.5 22.5t57.5 62t43 81t17 80.5
+q0 41 -13 81q-9 21 -21 41q-11 17 -26.5 36.5t-36.5 35.5z" />
+    <glyph glyph-name="g" unicode="g" horiz-adv-x="471" 
+d="M264 -143l-12.5 -60t-17 -76t-22 -79.5t-27.5 -71t-33 -51.5t-40 -20q-33 0 -56.5 19.5t-39.5 49t-23.5 63.5t-7.5 63q0 40 7 66.5t24.5 50.5t47.5 51l77 67l44 38l40 33l9.5 37.5t7.5 31.5q-26 -35 -62.5 -59t-83.5 -24q-43 0 -69.5 38.5t-26.5 113.5q0 37 14 85t40 90
+t64 71t85 29q22 0 38 -11t27 -27.5t17 -35t9 -34.5q2 6 3 12.5t3 11.5q10 34 22.5 46.5t37.5 12.5q14 0 23.5 -5t9.5 -9q-5 -11 -8 -17l-6 -12.5t-6 -16.5t-8 -29q-2 -7 -7.5 -32.5t-14 -60.5l-18 -77l-18.5 -82q28 16 58 39t57 47t48 45.5t31 35.5q8 12 18 17t17.5 3.5
+t9 -9t-6.5 -20.5q-23 -37 -56 -71.5t-67.5 -64t-67 -52t-55.5 -36.5q-10 -45 -17 -73t-12 -51zM138 54q21 0 39.5 11t33.5 25.5t25 29.5t15 24q4 9 9.5 24t8.5 29t2.5 25t-7.5 12q-6 1 -9.5 8t-5.5 16t-2.5 18t-1.5 16q-5 35 -17 51t-27 16q-25 0 -47.5 -20t-40 -51.5
+t-27.5 -69t-10 -71.5q0 -42 12 -67.5t50 -25.5zM92 -410q20 0 32.5 29.5t26.5 80.5l8.5 34.5l13 51.5l15.5 62.5t17 67.5l-16.5 -14.5t-17.5 -17.5l-42.5 -40.5t-36.5 -41t-25.5 -46.5t-9.5 -58t2.5 -54t7 -33t11 -16.5t14.5 -4.5z" />
+    <glyph glyph-name="h" unicode="h" horiz-adv-x="477" 
+d="M516 220q7 8 14.5 8.5t12 -4t4 -13.5t-8.5 -20q-19 -26 -44 -53.5t-53.5 -53.5t-57.5 -49t-56 -38q-30 -17 -50.5 -17t-40.5 26q-18 23 -17.5 49.5t11.5 66.5q7 25 19.5 59.5t20 66.5t4.5 54.5t-26 22.5q-16 0 -34.5 -11t-37 -28.5t-35.5 -39.5t-30 -43l-16 -77
+l-14.5 -69.5t-14.5 -66.5q-6 -5 -13 -7t-13 -2q-7 0 -14 1q-8 2 -15 6q-6 4 -12 10.5t-9 17.5l71 297l40 171l22 97q3 19 5 37q2 16 2 33t-3 31q8 5 17.5 8t18.5 5q11 3 22 5t20 2q8 0 15 -1.5t9 -6.5q6 -5 5.5 -20t-2.5 -31l-9 -41q-21 -81 -47 -157.5t-48 -163.5
+q13 20 31 41t39.5 38.5t45.5 29t51 11.5q14 0 26.5 -4.5t22 -15t14.5 -28t4 -43.5q0 -16 -3.5 -33t-9.5 -37.5t-15.5 -45.5l-22.5 -58q-9 -23 -14 -39t2 -28q9 -16 35.5 -7.5t79.5 51.5q12 10 27 25t29 30.5l26 29.5t20 22z" />
+    <glyph glyph-name="i" unicode="i" horiz-adv-x="281" 
+d="M220 589q-3 -11 -11.5 -21.5t-19 -17t-21.5 -8.5t-18 4q-21 16 -22 34.5t9 35t25 28t26 13.5t18.5 -4.5t11.5 -17t4.5 -23.5t-2.5 -23zM82 376q5 6 19 10t29 6.5t27.5 3t14.5 -0.5q1 -1 -5 -21t-15 -47l-19 -55.5t-15 -46.5t-12 -40.5t-12.5 -44t-7.5 -40.5t3 -29
+q5 -12 11 -16.5t13 -4.5q20 0 50.5 22t62 52.5t58.5 62t40 50.5q8 10 16.5 13t14 -1t6 -13t-6.5 -21q-16 -28 -47 -66.5t-66 -74t-68.5 -60.5t-54.5 -26q-17 -1 -33.5 5.5t-30 18t-22.5 27t-10 32.5q-3 25 0 68.5t11 89t20.5 86.5t28.5 61z" />
+    <glyph glyph-name="j" unicode="j" horiz-adv-x="274" 
+d="M238 618q0 -9 -6.5 -21.5t-17 -23t-23 -18t-25.5 -7.5q-11 0 -20 11t-8 30q0 13 7.5 27.5t19 26.5t25 19.5t25.5 7.5q17 0 20.5 -16t2.5 -36zM-112 -454q-27 0 -47 15t-32.5 38t-18.5 50t-5 51q1 21 15.5 54t40.5 70.5t63 76t82 68.5l12.5 63.5l12.5 63t12.5 58
+t12.5 48.5l15 57l16 57.5l19 63.5q10 5 19 7t16 3q8 1 15 0t14 -4q13 -5 23 -18l-28.5 -92l-19.5 -63q-9 -29 -14 -49q-9 -28 -16 -63.5t-16 -76.5q42 26 84.5 61t78 68.5t60 59t30.5 32.5q7 8 14 8.5t11.5 -4.5t4 -14.5t-9.5 -21.5q-14 -20 -42 -50.5t-64 -64t-77.5 -67
+t-82.5 -57.5q-9 -5 -20 -13l-27 -116t-29 -106l-27 -84.5t-25 -60.5t-29.5 -36t-40.5 -12zM-148 -328q-2 -35 5 -52.5t19 -17.5q8 0 17.5 17t18 43t17 56.5t15 57.5t10.5 46t5 22q2 8 4 17t4 20q-23 -24 -43.5 -49.5t-36 -52.5t-25 -54t-10.5 -53z" />
+    <glyph glyph-name="k" unicode="k" horiz-adv-x="451" 
+d="M513 199q-23 -38 -52.5 -78.5t-62.5 -74t-68 -55.5t-70 -22t-50.5 23.5t-14.5 52.5q0 13 2.5 23t5.5 18t6.5 16.5t6.5 19.5q4 13 0.5 23.5t-8.5 18.5q-9 -10 -20.5 -17.5t-28.5 -7.5q-12 0 -22 11.5t-10 28.5q0 14 6.5 23t15 14t17.5 7t15 2q3 0 12.5 -1t20.5 -3
+q36 29 51.5 52.5t2.5 42.5q-8 13 -20 13.5t-25 -6t-25.5 -16.5t-22.5 -19q-20 -20 -44.5 -47.5l-40.5 -45.5l-14 -63l-13.5 -65.5l-15.5 -75.5q-6 -3 -12.5 -4.5t-11.5 -2.5q-6 -1 -12 -1q-8 0 -15 0.5t-11.5 5t-5 14.5t5.5 28q8 26 20 69.5t25 95.5l26.5 108.5l25.5 108
+t20.5 93t12.5 65.5l6 50q2 20 2.5 39.5t-2.5 29.5q5 5 14 9t20 6q11 3 26 5q17 2 28.5 1t16.5 -10q6 -10 2.5 -33.5t-14.5 -65.5q-14 -54 -28.5 -98.5l-28 -83.5l-26 -75.5t-22.5 -74.5q20 29 50 61.5t68 53.5q40 21 66 21q32 0 46 -21.5t13 -50.5q-1 -23 -11.5 -42.5
+t-25.5 -36t-32 -28.5l-29 -20q14 -8 24.5 -21.5t9.5 -33.5q-1 -27 -10.5 -47.5t-9.5 -37.5q1 -13 5.5 -19t19.5 -6q27 0 56.5 23t55.5 53t48 59.5t34 43.5q17 18 28.5 9.5t-2.5 -31.5z" />
+    <glyph glyph-name="l" unicode="l" horiz-adv-x="224" 
+d="M-15 16l70.5 297l40.5 171l22 97q3 19 5 37q2 16 2 33t-3 31q8 5 17.5 8t18.5 5q11 3 22 5t20 2q8 0 15 -1.5t9 -6.5q6 -5 5.5 -20t-2.5 -31l-9 -41l-33 -124l-48.5 -188l-76.5 -300q-5 -5 -12 -7t-13 -2q-7 0 -15 1q-7 2 -14 6q-6 4 -12 10.5t-9 17.5z" />
+    <glyph glyph-name="m" unicode="m" horiz-adv-x="735" 
+d="M466 46q0 21 4.5 48t11.5 55.5l14 55.5t12 48q6 26 -1 40t-24 14q-8 0 -31.5 -14t-51 -48.5t-54 -93t-41.5 -148.5q-19 -10 -36 -13q-9 -2 -16 -3q-20 -1 -26 6.5t2 36.5q4 14 14.5 45t20.5 67.5t17.5 73t7.5 63.5q0 19 -6.5 26t-18.5 7q-9 0 -30 -10t-47 -39
+t-51.5 -80.5t-43.5 -133.5v2l-4 -16q-2 -7 -3 -15t-3 -15l-50 -22q-5 -2 -12.5 -3t-14 2.5t-9.5 14.5t2 33l63 261q3 13 5 25q2 11 2.5 21.5t-1.5 17.5q17 8 30 12t21 6q10 3 17 3q32 0 21 -55l-12 -47q19 24 40.5 45.5t43.5 38.5t44.5 27t44.5 10q17 0 28.5 -10t18 -26.5
+t7.5 -39t-2 -46.5q16 21 35.5 42.5t41 38.5t44.5 28t46 11q27 0 41.5 -16t20 -41t3 -54t-8.5 -56l-34 -135q-11 -50 21 -50q25 0 55 24t58.5 57t53.5 68t42 56q6 7 12.5 8t11 -2.5t5 -11.5t-5.5 -20q-20 -35 -49 -77.5t-63.5 -79.5t-73.5 -62t-81 -25q-14 0 -27.5 3t-25 11
+t-18.5 21.5t-7 34.5z" />
+    <glyph glyph-name="n" unicode="n" horiz-adv-x="473" 
+d="M297 -25q-23 0 -39.5 8.5t-26.5 22.5t-13 32.5t2 39.5q3 14 10 37.5l14.5 51t14 55t8.5 50t-2 37t-17 14.5q-16 0 -33 -10.5t-34.5 -28.5t-35 -41.5l-34.5 -48.5q-9 -34 -15 -59.5l-10.5 -46t-8.5 -36t-7 -29.5q-3 -10 -18 -19.5t-32 -15.5t-29.5 -6t-10.5 9q1 6 6.5 27
+l13 49.5l15.5 60.5l15 61l11 51q5 24 12.5 56t17.5 70q7 6 14.5 9.5t15.5 5.5q8 3 17 4q8 0 16 -1q7 -1 14.5 -3.5t13.5 -7.5q-3 -7 -7 -19.5t-8 -26.5q-4 -16 -10 -33q13 18 29.5 36.5t36 33.5t41.5 24.5t45 9.5q19 0 34 -11t23.5 -30.5t10 -46.5t-7.5 -59l-11 -44
+q-5 -21 -12.5 -49.5t-18.5 -62.5q-6 -22 -4.5 -38t19.5 -16t45.5 22t55.5 53t53 63.5t38 52.5q9 13 17 17t12.5 1t4.5 -13.5t-8 -26.5q-7 -14 -21.5 -37t-34.5 -49t-43 -52.5t-48 -48t-49.5 -35t-46.5 -13.5z" />
+    <glyph glyph-name="o" unicode="o" horiz-adv-x="403" 
+d="M296 159q-10 -38 -27 -71t-40.5 -57t-53 -37.5t-64.5 -13.5q-41 0 -64.5 17.5t-35 43.5t-14 57t-2.5 58q0 19 4.5 42t12.5 47t20.5 48t29.5 44q6 17 18.5 30t29 21.5t35.5 13t37 4.5q3 0 5.5 -1t5.5 -2q13 -1 32.5 -10t38 -27t31.5 -45.5t13 -66.5q0 -8 -1 -19.5
+t-2 -19.5q23 9 48 22t48.5 27.5t43.5 29.5t32 27q10 9 17 10t10 -4t1 -14t-11 -20q-5 -6 -25.5 -24t-48.5 -39t-61 -41t-63 -30zM127 311q-3 -9 -3 -19q0 -16 2 -33.5t10 -31.5t25.5 -23.5t48.5 -9.5q5 0 10 0.5t10 1.5l5.5 23.5t2.5 18.5q2 19 0 39t-7.5 36.5t-14 27
+t-20.5 10.5q-19 0 -36.5 -10.5t-32.5 -29.5zM63 135q0 -18 2 -35.5t8 -31t16 -22t26 -8.5q18 0 33 8.5t27 22t21.5 31t16.5 36.5q-7 -1 -13.5 -1.5t-14.5 -0.5q-38 0 -65.5 22.5t-42.5 57.5q-6 -21 -10 -41t-4 -38z" />
+    <glyph glyph-name="p" unicode="p" horiz-adv-x="462" 
+d="M-72 -427q-7 3 -14 9q-6 5 -12 12.5t-10 18.5l47.5 186l33.5 132l26 104l20 80l17.5 75l17.5 75q10 39 12 62.5t-15 40.5q12 10 24.5 15.5t22.5 7.5q11 3 22 2q27 -2 33.5 -17t1.5 -48q-1 -5 -1.5 -8.5t-0.5 -7.5q14 16 31 31t34.5 27t36 19.5t35.5 7.5q23 0 37.5 -11.5
+t22.5 -30.5t10 -42.5t1 -46.5q-1 -25 -8.5 -53t-20.5 -57t-30 -57t-36 -52q4 -1 5 -1.5t1 -1t1.5 -1t6.5 -0.5q23 0 47 12t47 30.5t44.5 40.5t39 42.5t29.5 37t18 23.5q8 10 15 13.5t11 0.5t4 -11.5t-6 -21.5q-4 -9 -17 -29t-32 -45t-43.5 -52t-51.5 -49t-55.5 -36.5
+t-55.5 -14.5q-13 0 -21 1t-13.5 3.5l-10.5 5t-12 5.5q-18 -14 -37 -21.5t-37 -7.5q-17 0 -29.5 5.5t-20.5 15t-13 21t-8 22.5q-1 -4 -1.5 -7t-1.5 -8q-12 -48 -25 -111l-26.5 -131.5t-32.5 -176.5q-6 -27 -21.5 -31t-35.5 4zM111 193q-5 -17 -10.5 -39.5l-12.5 -53.5
+q8 6 18 9t20 3q11 0 28 -11.5t41 -24.5q15 18 31.5 40.5t30 46.5t23 49t10.5 48q2 30 -7 47t-30 17q-31 0 -67.5 -36.5t-74.5 -94.5z" />
+    <glyph glyph-name="q" unicode="q" horiz-adv-x="474" 
+d="M244 53q-11 -15 -24 -30t-28 -27t-32 -19.5t-36 -7.5q-47 0 -73 19t-38.5 45t-15 53.5t-2.5 44.5q0 46 18 93.5t48 86.5t68.5 63.5t78.5 24.5q25 0 42 -10.5t28 -25.5t16.5 -32t7.5 -30l4 25q2 11 4 24l4 25q6 5 13.5 8t15.5 5q9 2 18 3q9 0 17 -1q16 -2 22 -11
+q-28 -92 -40 -138q-7 -26 -11 -45q-4 -14 -11.5 -43l-17.5 -67l-21 -81.5l-21 -85.5l47.5 47l51.5 52l51.5 55.5t47.5 56.5q13 16 22.5 20t13.5 -0.5t2.5 -15t-10.5 -22.5l-35 -46.5l-39.5 -49l-41.5 -48.5l-40 -44l-44 -42.5t-47 -52.5q-4 -19 -6.5 -34l-4.5 -27
+q-5 -35 -6.5 -59.5t-1.5 -43t1 -34t1 -32.5q1 -36 -2.5 -50t-23.5 -14q-10 0 -26 9t-31 25t-25.5 39t-10.5 52q0 38 15 74.5t40 71.5l15.5 56l17.5 63.5l18 65.5zM81 104q0 -29 7.5 -45t18 -23.5t21.5 -8.5t18 -1q21 0 41 17.5t36.5 43.5t29 56.5t18.5 56.5l5.5 27t4.5 20
+q-19 -2 -26 8t-8 35q0 10 -2 21.5t-7 21t-13 15.5t-20 6q-26 0 -48.5 -24t-39.5 -61t-26.5 -81t-9.5 -84z" />
+    <glyph glyph-name="r" unicode="r" horiz-adv-x="416" 
+d="M-38 5q-7 -11 -15.5 -14.5t-15 -1t-8.5 10.5t4 20l13.5 27l25 50.5l31.5 64l32.5 65.5l28.5 55.5l19 35.5q-11 10 -15 14.5t-6 19.5q-2 13 6 34t21 40.5t29 33.5t31 14q28 0 39.5 -18t13.5 -37q2 -13 -2 -33t-15 -36q3 -2 8 -4.5t16 -2.5q16 0 22.5 2t20.5 2
+q17 0 28 -8.5t18 -21t10.5 -27t4.5 -26.5q3 -25 -13 -52t-39 -59q-14 -20 -28 -45t-12 -45q2 -13 7 -21t28 -8q17 0 37.5 12.5t42 32t42.5 43t39 46t30.5 40.5t18.5 26q5 8 13 11t14 0t7.5 -12t-7.5 -24q-6 -10 -20.5 -32t-35 -49t-45.5 -55.5t-52.5 -52t-55 -38.5
+t-52.5 -15q-26 0 -43 10t-27.5 24.5t-15 32t-3.5 32.5q1 12 6.5 25.5t13 28t16 29t15.5 28.5q17 29 27.5 49.5t10.5 34.5q0 9 -4 16t-13 7q-6 0 -8.5 -0.5t-5 -0.5t-7 -0.5t-13.5 -0.5q-13 0 -22 4t-17 6l-18 -30l-32.5 -54l-39 -65l-38.5 -63.5l-30.5 -50t-15.5 -24.5z" />
+    <glyph glyph-name="s" unicode="s" horiz-adv-x="360" 
+d="M141 34q6 -4 15.5 -4t19 4t18 11t12.5 18t0 31.5t-12.5 44t-18.5 47.5t-17 44q-6 15 -10 28l-7.5 21.5t-5.5 14.5q-5 -8 -17.5 -26l-27 -37.5l-27.5 -36l-18 -22.5q-8 -9 -15.5 -10.5t-12.5 3t-5.5 13t7.5 20.5q6 8 18 25.5l24 36l22 33t11 17.5q2 8 -5.5 21t-2.5 30
+q4 14 18 32.5t33 33.5t39 22.5t36 -0.5q13 -8 21 -17.5t6 -19.5q-2 -5 -6 -13t-12 -19.5t-23 -29.5q3 -23 8.5 -42t10.5 -33q6 -17 13 -31l19 -37t18 -37.5t13 -34.5t3 -27q-3 -17 -17.5 -41t-36 -46.5t-49 -38.5t-57.5 -16q-21 0 -40.5 13t-33 30.5t-20 34.5t-1.5 26
+q6 12 11 19t15 16q4 3 10 7q5 3 14 6l21 7q10 -31 18 -48.5t13 -27.5q6 -11 11 -15z" />
+    <glyph glyph-name="t" unicode="t" horiz-adv-x="309" 
+d="M369 253q4 6 10.5 7.5t10.5 -1.5t4.5 -10t-5.5 -19q-20 -38 -52.5 -82t-68.5 -82.5t-70 -63.5t-57 -25q-33 0 -55 13t-34.5 32t-17.5 41.5t-3 41.5q1 16 7 57.5t16 96l22.5 117t26.5 120.5l-34 -4t-31 -2q-32 0 -60.5 7.5t-42.5 14.5q-8 4 -7 11.5t6 15t12.5 13t13.5 5.5
+q19 -2 41 -3.5t48 -0.5q19 1 36.5 3t34.5 5q13 48 25.5 83.5t22.5 49.5q3 5 13.5 8.5t22.5 5t23 0t16 -7.5q5 -8 4 -41t-11 -84q42 0 74.5 -4.5t55.5 -10t37 -11t21 -7.5t7.5 -10t-3 -16.5t-11.5 -14.5t-18 -4q-10 1 -22.5 4t-30 5t-41.5 4t-56 2q-6 0 -13.5 -0.5
+t-15.5 -0.5q-4 -16 -7.5 -31.5t-9.5 -32.5q-13 -40 -30 -87l-36 -94l-47 -113q-6 -43 1.5 -65.5t18.5 -32.5q13 -11 32 -12q15 -2 36.5 10.5t44.5 33.5t46.5 46t43.5 49l35 43.5z" />
+    <glyph glyph-name="u" unicode="u" horiz-adv-x="480" 
+d="M124 -16q-38 0 -62 12t-37.5 29.5t-19 38t-5.5 37.5q0 30 5 63.5t12 62t12.5 48.5t7.5 25q9 29 23.5 50.5t40.5 29.5l21 4q9 1 18.5 1t17.5 -3q-27 -69 -42.5 -115t-23.5 -75q-9 -33 -11 -53q-5 -45 8 -68t53 -23q26 0 50 19.5t44 50.5q-3 16 -3 33q0 32 5.5 62.5t13 57
+t16 47.5t14.5 33q11 24 20 29.5t29 6.5q8 1 13.5 0.5t9.5 -1.5q12 -3 12 -12q0 -16 -2 -48t-12 -66q-7 -28 -13.5 -47.5t-12.5 -33t-12 -22l-11 -15.5q2 -30 5 -48t7.5 -27.5t11 -13t14.5 -3.5q14 0 33 13.5t39.5 34t41 45l37.5 46.5l29 38.5l15 20.5q7 9 13.5 11t10.5 -1.5
+t4.5 -11t-4.5 -16.5q-20 -38 -49.5 -80.5t-63 -78.5t-67.5 -60t-64 -24q-27 0 -42.5 18.5t-26.5 53.5q-23 -36 -54 -55.5t-69 -19.5z" />
+    <glyph glyph-name="v" unicode="v" horiz-adv-x="438" 
+d="M293 178q-26 -38 -53.5 -74t-53 -64.5t-47 -46t-34.5 -17.5q-31 0 -50.5 29.5t-30 73t-13 93t0.5 88.5q4 39 9 62.5t12.5 36.5t18 19t26.5 10q7 2 16 3t16.5 -0.5t11.5 -6.5t1 -15q-2 -9 -6.5 -26.5t-9.5 -39.5t-9.5 -46t-6.5 -46q-3 -38 0 -66.5t9 -48t13 -29.5t11 -10
+q5 0 18.5 13.5t31 35.5t37 51t36.5 60q-6 16 -5 38q3 34 15 61.5t27.5 46.5t32 29.5t29.5 10.5q26 0 32.5 -13.5t4.5 -27.5q-2 -21 -18.5 -57.5t-42.5 -79.5q5 -2 11 -4t14 -2q34 0 61.5 8t48 19t35 23.5l23.5 20.5q6 6 12 6t10 -3t4 -9t-6 -13q-36 -44 -87.5 -71
+t-120.5 -27q-6 0 -15 1t-19 4z" />
+    <glyph glyph-name="w" unicode="w" horiz-adv-x="662" 
+d="M521 173q-14 -36 -32 -70t-40 -61t-47 -43t-54 -16q-47 0 -71 31.5t-33 77.5q-14 -21 -30 -42t-34 -37t-37 -26t-38 -10q-26 0 -44 11t-29.5 30.5t-16.5 45t-5 54.5v12q0 37 6 76t13.5 72t15.5 57.5t12 32.5q7 10 30.5 19.5t46.5 7.5q11 -1 11.5 -9t-2.5 -20
+q-4 -17 -14 -51t-20.5 -74t-18.5 -79t-8 -65q0 -32 10 -46t31 -14q25 0 55.5 28t59.5 95q-1 6 -1 12v13q0 45 3.5 86t14 72t29 49t48.5 18q12 0 20 -7t8 -20q0 -32 -22.5 -90.5t-53.5 -128.5q-3 -4 -4 -8q3 -19 7.5 -40t12.5 -38.5t19 -29t26 -11.5q22 0 40.5 21t33 51
+t25.5 63.5t17 59.5q-3 11 -5 21.5t-2 24.5q0 31 9 53t23.5 36.5t31 21.5t30.5 7q25 0 25 -22q0 -16 -8 -55.5t-23 -89.5q18 -8 46 -8q26 0 48 6.5t40 16.5t33 22l29 23q11 8 18 1t-2 -22q-8 -13 -27.5 -30t-47 -32.5t-61 -26t-70.5 -10.5q-6 0 -13 1t-14 3z" />
+    <glyph glyph-name="x" unicode="x" horiz-adv-x="409" 
+d="M437 132q-42 -53 -74.5 -83.5t-57.5 -45.5t-44 -19t-34 -4q-19 0 -32 9t-22 22t-14 27t-8 24q-4 11 -8.5 25l-9.5 31l-42 -45l-43 -45.5l-49 -51.5q-9 -2 -16 0t-12 4q-6 3 -10 7q-3 3 -6 7q-2 3 -4.5 7.5t-1.5 9.5l57.5 65.5l51.5 58.5l50 58q-14 38 -25 71l-16 47
+q-10 29 -17.5 48t-25.5 27q12 11 23.5 17.5t20.5 9.5q11 4 19 4q23 0 40.5 -40.5t35.5 -111.5q0 -3 2 -7l40.5 47l34 39l23.5 27t11 12q20 23 36 26t29 -7q6 -4 13 -8q13 -8 31 -15l-37.5 -36.5l-38.5 -39.5l-42 -44l-35.5 -37l-43.5 -48q7 -25 15 -47t16.5 -39t17.5 -27
+t19 -10q16 0 36 8.5t42 23.5t44.5 35t44.5 42q8 8 15.5 9t10.5 -3t1.5 -13t-11.5 -21z" />
+    <glyph glyph-name="y" unicode="y" horiz-adv-x="416" 
+d="M263 368q13 10 25.5 15.5t22.5 7.5q11 3 22 2q27 -2 33.5 -17t1.5 -48q-3 -17 -12 -43l-21 -63.5t-25.5 -85.5t-25.5 -108q-12 -49 -26 -113l-28.5 -135t-35.5 -181q-5 -25 -21.5 -29t-34.5 4q-7 4 -13 9l-11 11.5t-10 17.5l40.5 153l31.5 120l28 106l9.5 41.5t9.5 40.5
+q-13 -21 -28 -40t-33 -33t-38.5 -21.5t-42.5 -4.5q-54 7 -76.5 40t-19.5 86q1 21 6 46t11 48t11.5 41.5t8.5 26.5q12 38 17.5 65t-8.5 45q14 9 26.5 12.5t22.5 5.5q11 1 22 0q27 -4 31.5 -20t-3.5 -48q-4 -17 -13 -43.5l-19 -54.5l-18 -51.5t-9 -33.5q-9 -45 -1 -69.5
+t35 -24.5q13 0 29 11.5t32.5 30.5t32.5 43.5t29.5 49.5t24 49t15.5 43q7 37 9 58t-14 38z" />
+    <glyph glyph-name="z" unicode="z" horiz-adv-x="459" 
+d="M520 161q-7 -10 -22.5 -29t-37 -41t-49 -45.5t-58.5 -42.5q-4 -23 -15 -65.5t-29 -92.5t-42 -101.5t-53.5 -94t-64.5 -69t-74 -26.5t-61 13t-32.5 33.5t-12.5 45t-1 47.5q1 30 18 69.5t47.5 80t73.5 77t96 61.5q26 11 48 21.5t41 20.5q8 33 1.5 44t-18.5 11
+q-18 0 -42.5 -16t-60.5 -50q-10 -1 -17.5 2.5t-12.5 8.5q-6 5 -10 12q-11 17 -9.5 34t15.5 27q14 11 41.5 35.5t53.5 62.5l19.5 27.5t23 36t22 40.5t16.5 40q-20 3 -58 -1l-43 -9q-20 -5 -45.5 -13t-53.5 -22q-4 2 -6 8t-3 14q-1 9 -1 20q0 14 4.5 23.5t11.5 15.5t15 9.5
+t14 5.5q7 2 27.5 5.5t46.5 6.5t54 4.5t51 0.5q47 -3 59.5 -12.5t6.5 -29.5q-7 -20 -27 -67.5t-61 -109.5l-31 -43t-27 -35q17 8 34 12.5t34 4.5q23 0 30.5 -22t8.5 -48q40 25 71.5 53t67.5 72q9 11 16.5 13t11.5 -2.5t4 -13t-6 -17.5zM270 -57q2 8 4.5 14.5t4.5 13.5
+q-52 -29 -95 -61.5t-74.5 -68.5t-49.5 -75t-20 -79q-1 -24 7.5 -41t30.5 -17q24 0 51.5 34.5t54 84t49.5 103t37 92.5z" />
+    <glyph glyph-name="braceleft" unicode="{" horiz-adv-x="249" 
+d="M111 -121q-18 0 -41.5 11t-44.5 30.5t-34.5 47t-10.5 60.5q3 43 18 75.5t32 60.5t31.5 55.5t17.5 60.5q1 19 -4 36q-5 14 -15.5 26.5t-31.5 15.5q-1 6 -0.5 11t1.5 10l2 10q3 11 7 20t6 11q30 -5 47.5 10.5t27.5 37.5q11 25 15 59q3 34 0.5 54t-4.5 38t-1.5 39t8.5 56
+q9 38 33.5 65.5t55 44.5t62 23.5t53.5 2.5l-36 -100q-18 1 -35.5 -4.5t-32 -17t-24.5 -27.5t-13 -36q-3 -18 -2 -33.5t2.5 -30.5l3 -31t-0.5 -36q-4 -58 -30 -99t-72 -57q18 -14 30 -41t10 -53q-3 -44 -16 -75t-27.5 -54.5l-27 -42.5t-13.5 -39q-1 -13 1.5 -27t11 -27
+t24.5 -24.5t42 -19.5l-25 -96v0z" />
+    <glyph glyph-name="bar" unicode="|" horiz-adv-x="260" 
+d="M219 749q23 5 32.5 3.5t8.5 -6.5l-10.5 -35.5l-20 -70l-26 -92.5t-28 -104t-25 -104t-18.5 -93l-17 -92q-7 -38 -13.5 -80.5t-9.5 -71.5q-14 -8 -25.5 -11.5t-20.5 -5.5q-11 -2 -19 -2q-20 0 -24.5 4.5t-1.5 18.5l15 63l13 54.5l19 79.5l26 109.5l35 143.5l57 245
+q5 20 15 29.5t38 17.5z" />
+    <glyph glyph-name="braceright" unicode="}" horiz-adv-x="249" 
+d="M128 850q18 0 41.5 -11t44.5 -30.5t34.5 -47t10.5 -60.5q-3 -43 -18 -75.5t-32 -60.5t-31.5 -55t-17.5 -60q-1 -20 4 -37q5 -14 15 -27t32 -15v-11.5t-1 -10.5t-2 -9q-3 -11 -7 -20t-6 -11q-30 5 -48 -10.5t-28 -37.5q-11 -26 -15 -59q-3 -34 -0.5 -54t4.5 -38t1.5 -39
+t-8.5 -56q-9 -38 -33.5 -65.5t-54.5 -44.5t-61.5 -23.5t-53.5 -2.5l35 101q18 -1 36 4.5t32.5 16.5t24.5 27t13 37q3 18 2 33t-2.5 30l-3 31t0.5 37q4 57 30 98.5t71 56.5q-9 7 -16.5 18t-13 23.5t-8.5 26t-2 26.5q3 44 16 75t27.5 54.5l26.5 42.5t14 39q1 13 -1.5 27
+t-11 27t-24.5 24.5t-42 19.5l26 96v0z" />
+    <glyph glyph-name="asciitilde" unicode="~" horiz-adv-x="337" 
+d="M357 386q0 -15 -9.5 -30t-26.5 -25.5t-39.5 -15.5t-49.5 -1q-29 4 -50.5 11.5t-39.5 13t-35.5 7t-36.5 -5.5q-12 -4 -23 -9l-21 -11t-19 -13q-14 3 -20 11q-4 4 -7 9q-4 7 -7 15q-2 6 -3.5 13.5t2.5 13.5q15 19 37 28.5t42 13.5q24 4 50 4q33 -2 53.5 -8t37 -12.5
+t34.5 -10.5t45 0q9 2 20 7q9 5 20.5 13t23.5 22q10 -6 16 -17t6 -23z" />
+    <glyph glyph-name="Adieresis" unicode="&#xc4;" horiz-adv-x="566" 
+d="M433 753q35 0 57.5 -19.5t19.5 -70.5q-1 -17 -8 -63.5l-17 -109.5l-22.5 -135.5l-23.5 -141.5h21q10 0 22 1t25 3q-5 -12 -11 -22.5t-12 -18.5q-7 -9 -14 -16q-9 -11 -21 -19.5t-23 -13.5q-7 -49 -11.5 -87.5t-5.5 -63.5q-2 -38 2 -71q3 -29 12 -59t29 -48l-116 -38
+q-12 17 -17.5 45.5t-7.5 56.5q-3 33 -1 68t11 91.5l20 123.5q-20 6 -43.5 10t-52.5 4q-26 0 -54.5 -2t-56.5 -5q-12 -44 -24 -93q-13 -53 -23.5 -90.5t-20 -62.5t-19 -40t-20.5 -22q-12 -6 -30 -11q-17 -5 -43 -10t-67 -8q15 18 26 33t22 37t24.5 56.5l34.5 90.5
+q9 23 18.5 50.5t20.5 56.5q-36 -5 -61 -9t-30 -6q-8 -1 -13 0q-13 2 -14 13q1 14 9.5 19t25.5 12q8 4 36.5 14.5t69.5 22.5l29.5 83.5l28.5 79.5l27 71.5t24 57.5q17 37 43.5 81.5t61 83.5t76 65t87.5 26zM422 545q11 45 15 74t3 45.5t-6.5 23t-13.5 6.5q-13 0 -32 -10
+t-40 -28.5t-41.5 -46t-36.5 -62.5q-23 -52 -52 -127.5t-63 -192.5q20 3 39.5 5t38.5 2q34 0 65 -2.5t57 -5.5l18.5 94.5l18.5 88.5l16.5 77t13.5 59zM525 817q-21 0 -29.5 8t-8.5 22q0 9 6 18t15.5 16t22 11t25.5 4q25 0 34.5 -8.5t9.5 -22.5q0 -11 -7.5 -20t-18.5 -15
+t-24 -9.5t-25 -3.5zM442 871q0 -19 -22.5 -37.5t-59.5 -18.5q-19 0 -25 8.5t-6 17.5q0 19 18 38t53 19q16 0 29 -5t13 -22z" />
+    <glyph glyph-name="Aring" unicode="&#xc5;" horiz-adv-x="566" 
+d="M422 545q11 45 15 74t3 45.5t-6.5 23t-13.5 6.5q-13 0 -32 -10t-40 -28.5t-41.5 -46t-36.5 -62.5q-23 -52 -52 -127.5t-63 -192.5q20 3 39.5 5t38.5 2q34 0 65 -2.5t57 -5.5l18.5 94.5l18.5 88.5l16.5 77t13.5 59zM446 865q36 0 49 -17t13 -35q0 -16 -10.5 -35.5
+t-31.5 -29.5q22 -8 34 -27.5t10 -57.5q-1 -17 -8 -63.5l-17 -109.5l-22.5 -135.5l-23.5 -141.5h21q10 0 22 1t25 3q-5 -12 -11 -22.5t-12 -18.5q-7 -9 -14 -16q-9 -11 -21 -19.5t-23 -13.5q-7 -49 -11.5 -87.5t-5.5 -63.5q-2 -38 2 -71q3 -29 12 -59t29 -48l-116 -38
+q-12 17 -17.5 45.5t-7.5 56.5q-3 33 -1 68t11 91.5l20 123.5q-20 6 -43.5 10t-52.5 4q-26 0 -54.5 -2t-56.5 -5q-12 -44 -24 -93q-13 -53 -23.5 -90.5t-20 -62.5t-19 -40t-20.5 -22q-12 -6 -30 -11q-17 -5 -43 -10t-67 -8q15 18 26 33t22 37t24.5 56.5l34.5 90.5
+q9 23 18.5 50.5t20.5 56.5q-36 -5 -61 -9t-30 -6q-8 -1 -13 0q-13 2 -14 13q1 14 9.5 19t25.5 12q8 4 36.5 14.5t69.5 22.5l29.5 83.5l28.5 79.5l27 71.5t24 57.5q15 33 38.5 73t53 76t65 64t75.5 38q-17 8 -22 21.5t-5 26.5t6 25t16.5 22t24.5 16t29 6zM437 776
+q14 0 20.5 11.5t6.5 19.5t-4.5 15t-18.5 7q-11 0 -19 -9t-8 -20q0 -8 4.5 -16t18.5 -8z" />
+    <glyph glyph-name="Ccedilla" unicode="&#xc7;" horiz-adv-x="562" 
+d="M198 -239q55 2 81 -16t21 -50q-2 -17 -15 -32.5t-34 -28t-48.5 -21.5t-57.5 -12q-13 -2 -19.5 2t-7 10t5.5 11.5t19 8.5q33 8 57 22t27 32q2 17 -17.5 27t-53.5 6q-27 -2 -24 20q1 4 5.5 15.5l9.5 25t10 25t7 15.5q-39 11 -70 38.5t-52.5 67.5t-32.5 90t-9 106
+q2 60 15.5 130t38.5 140.5t60.5 136t81.5 115.5t102.5 80.5t122.5 30.5q41 0 69.5 -16.5t46 -43.5t24.5 -61t6 -69q-2 -33 -9.5 -64t-21 -55.5t-33 -39t-44.5 -14.5q-12 1 -23 8q-10 6 -20.5 18t-19.5 35q27 11 42.5 38.5t23.5 57.5q9 34 12 76q2 41 -17 60t-43 19
+q-47 0 -99 -49t-96.5 -132.5t-75 -194.5t-35.5 -235q-2 -56 7.5 -95t27 -64t39.5 -36t44 -11q35 0 66 15t56.5 37t44 45.5t28.5 41.5q7 13 15 16t14 -1.5t8 -14t-4 -22.5q-16 -33 -39.5 -66t-52.5 -60t-64 -44.5t-73 -20.5q-3 -8 -9.5 -20.5z" />
+    <glyph glyph-name="Eacute" unicode="&#xc9;" horiz-adv-x="536" 
+d="M195 -186q-47 0 -87.5 15t-71 42t-48.5 63.5t-19 79.5q-1 56 17.5 100t49 78t69.5 57.5t80 38.5q-22 12 -41.5 29t-34.5 38t-24 44t-9 46q-2 70 28.5 127t78.5 97.5t107.5 62.5t116.5 22q38 0 65 -12.5t44 -31t25.5 -40t9.5 -39.5q1 -33 -8.5 -67t-24 -61.5t-32.5 -45
+t-35 -17.5q-13 0 -27 4q-12 3 -28 10t-32 21q26 10 46 28.5t33.5 41.5t20 47.5t6.5 46.5q-1 32 -15 49.5t-45 17.5q-42 0 -84 -20.5t-74.5 -57t-51 -87t-12.5 -109.5q5 -45 27.5 -76t42.5 -48q16 2 30 3.5t26 1.5q17 0 34 -6t17 -17q0 -8 -3.5 -18t-11.5 -19t-19 -15t-26 -6
+q-12 0 -29 6t-34 15q-38 -8 -69 -28.5t-52.5 -48.5t-33.5 -61t-11 -64q1 -29 9 -58.5t25 -52.5t44.5 -37.5t66.5 -14.5q29 0 55.5 12.5t49.5 31.5t42 42t33 45t23.5 40l13.5 26q3 6 8.5 9t11 1.5t8.5 -7.5t0 -18q-8 -36 -30 -80.5t-56.5 -83.5t-81 -65.5t-103.5 -26.5z
+M473 942q9 7 20 -1t16 -24q7 -21 1 -31.5t-18 -18.5q-6 -5 -22.5 -14t-36 -18.5t-38.5 -17t-29 -8.5q-11 -1 -17 2.5t-9.5 8.5t-4.5 11.5t-1 11.5q78 54 109 77z" />
+    <glyph glyph-name="Ntilde" unicode="&#xd1;" horiz-adv-x="554" 
+d="M156 472q-5 -18 -12.5 -51.5t-16 -76.5l-18 -90.5t-17 -93.5t-13.5 -86.5t-7 -68.5q-1 -31 0 -61q1 -26 3.5 -54.5t9.5 -50.5q-17 -8 -30 -11.5l-21 -5.5q-10 -2 -17 -2q-8 0 -19 1.5t-20 10.5t-15 28t-4 55q1 24 7.5 59.5t15.5 78t20.5 88l22.5 89l20.5 82.5l16.5 67
+l20 84l57 246q7 5 15 9.5t14 7.5q7 4 14 6q32 12 45.5 3t15.5 -36q1 -18 4.5 -52t6.5 -76t5 -86.5t2 -82.5q0 -25 1 -59t3 -72t5 -77.5t7 -75.5t8.5 -66t9.5 -49q2 -8 4.5 -15t4.5 -14q6 24 13.5 57l16 70.5t16.5 77t14 74.5q5 28 11 72t14 95l-21 8q-9 4 -18 10t-15 14
+q1 13 2.5 19t9.5 1q6 -3 18.5 -7t29.5 -6q5 28 11.5 56t13.5 54q11 43 25 77.5t32.5 58.5t43.5 37t58 14q31 0 50.5 -25.5t16.5 -88.5q-2 -47 -19.5 -84.5t-42.5 -66t-55 -47t-57 -26.5q-9 -47 -17 -94.5l-15.5 -92t-15 -84.5t-14.5 -71l-15 -65q-7 -30 -17 -69l-21 -82
+q-4 -9 -10 -15.5t-12 -10.5q-7 -5 -14 -8q-20 -8 -34 -3t-25 27q-11 23 -19.5 57t-17.5 74q-9 43 -13.5 93.5t-7 103t-3.5 104.5t-4 98q-5 60 -10 107.5t-11 80.5l-9 -45t-11 -51zM492 514q-5 -19 -8 -36q24 14 45 35.5t36 45.5t23.5 48t9.5 44q1 14 -2.5 22.5t-12.5 8.5
+q-5 0 -15.5 -5.5t-23.5 -23t-26.5 -50.5t-25.5 -89zM528 882q17 -10 17 -33q0 -12 -7.5 -24t-21 -20.5t-32 -12.5t-40.5 -1q-23 3 -41 9t-33 10.5t-29 6t-30 -4.5l-18 -8l-16.5 -8.5t-15.5 -9.5q-6 1 -10 4t-7 5q-4 3 -5 6q-4 6 -6 12q-2 5 -2.5 11t2.5 11q12 16 29.5 24
+t34.5 11q19 4 40 3q27 -1 43.5 -6t30.5 -10.5t28 -8.5t37 0q7 1 16 5q8 4 17 10.5t19 18.5z" />
+    <glyph glyph-name="Odieresis" unicode="&#xd6;" 
+d="M524 336q-5 -63 -20 -126.5t-37.5 -122.5t-52.5 -110.5t-66.5 -89.5t-78 -60t-86.5 -22q-9 0 -27.5 3.5t-39.5 16t-42.5 36.5t-37.5 64.5t-23 100.5t0 145q12 134 49.5 243.5t86 187.5t100.5 120.5t92 42.5q16 0 26.5 -6.5t16.5 -16.5q7 2 16 3t20 1q29 0 51.5 -30
+t37 -84t19 -129.5t-3.5 -166.5zM186 -137q39 0 80 40t76 108.5t60 159.5t34 193q2 27 3 62t0 71t-4.5 71.5t-9.5 62.5t-15 44t-21 17q-13 -1 -26 -8q-11 -6 -25.5 -19.5t-28.5 -37.5q-3 2 -4.5 6t-3.5 8t-3 9q-2 3 -2 7.5t-1 10.5q-20 -22 -47.5 -62.5t-55 -100.5
+t-50 -141.5t-31.5 -185.5q-8 -92 -4 -153t15.5 -97t28.5 -50.5t35 -14.5zM463 817q-21 0 -29.5 8t-8.5 22q0 9 6 18t15.5 16t22 11t25.5 4q25 0 34.5 -8.5t9.5 -22.5q0 -11 -7.5 -20t-18.5 -15t-24 -9.5t-25 -3.5zM380 871q0 -19 -22.5 -37.5t-59.5 -18.5q-19 0 -25 8.5
+t-6 17.5q0 19 18 38t53 19q16 0 29 -5t13 -22z" />
+    <glyph glyph-name="Udieresis" unicode="&#xdc;" horiz-adv-x="588" 
+d="M10 -9q1 65 18 164q14 85 45 217t89 318q5 10 15.5 17t21.5 12q12 5 27 8q14 3 27 5q11 2 23 2t20 -2q-35 -88 -60 -159.5t-41 -123.5q-19 -61 -31 -108q-17 -50 -29 -100t-19.5 -94.5t-11 -79.5t-3.5 -55q1 -60 20 -94.5t62 -34.5q36 0 67.5 34t58 83.5t45.5 106.5
+t29 102q2 8 4 22q13 62 31 138q15 65 37.5 153l51.5 192q8 8 18 13t18 8q10 4 20 5q10 2 21 2q9 0 21 -1.5t24 -5.5q-20 -54 -39 -112.5l-34 -108.5q-18 -58 -34 -115q-23 -72 -37 -129.5t-22.5 -106t-13 -90l-8.5 -81.5q-3 -32 -1 -60q2 -25 7 -50t18 -42q-5 -7 -14 -10
+t-19 -5q-11 -2 -24 -2q-26 0 -38.5 32.5t-13.5 103.5q-8 -16 -25 -40.5t-42.5 -48t-59.5 -40.5t-76 -17t-69.5 14.5t-44 39t-23 57t-6.5 67.5zM484 807q-21 0 -29.5 8t-8.5 22q0 9 6 18t15.5 16t22 11t25.5 4q25 0 34.5 -8.5t9.5 -22.5q0 -11 -7.5 -20t-18.5 -15t-24 -9.5
+t-25 -3.5zM401 861q0 -19 -22.5 -37.5t-59.5 -18.5q-19 0 -25 8.5t-6 17.5q0 19 18 38t53 19q16 0 29 -5t13 -22z" />
+    <glyph glyph-name="aacute" unicode="&#xe1;" horiz-adv-x="446" 
+d="M513 199l-36 -49.5l-45.5 -59t-46 -54t-37.5 -34.5q-10 -6 -23 -10t-26.5 -5t-25.5 1.5t-21 8.5q-9 7 -15 20q-5 11 -9.5 29t-3.5 45q-24 -40 -53 -61.5t-55 -31.5q-30 -11 -60 -13q-14 0 -30 9.5t-27 30t-14 53t8 77.5q14 61 44.5 111t66.5 85.5t71 53.5t58 16
+q27 -5 44 -16q14 -10 18.5 -29.5t-16.5 -51.5q14 3 23.5 4t14.5 1q6 0 8 -1q1 -2 1 -8.5t-3 -23.5t-9 -46l-16 -75q-2 -9 -3.5 -16.5l-3 -15l-3.5 -17.5l-5 -25q-1 -9 -0.5 -19.5t3.5 -19.5t9.5 -14.5t18.5 -5.5q10 0 26 12.5t34 32t37.5 43l36.5 45.5l30.5 39l19.5 25
+q8 9 16 10.5t12 -4.5t1.5 -18t-14.5 -28zM220 155l12 47t12 52t7.5 41.5t-1.5 15.5q-5 -1 -11 -3q-5 -2 -13 -3t-16 -3q8 16 9.5 26.5t0.5 16.5q-1 7 -4 11q-11 9 -38.5 -14.5t-63.5 -86.5q-15 -26 -24 -55.5t-12.5 -55.5t-1.5 -45.5t8 -25.5q11 -11 25 -10.5t28.5 8
+t29 19.5t26 25t19 24t8.5 16zM289 615q9 7 20 -1t16 -24q7 -21 1 -31.5t-18 -18.5q-6 -5 -22.5 -14t-36 -18.5t-38.5 -17t-29 -8.5q-11 -1 -17 2.5t-9.5 8.5t-4.5 11.5t-1 11.5q78 54 109 77z" />
+    <glyph glyph-name="agrave" unicode="&#xe0;" horiz-adv-x="446" 
+d="M513 199l-36 -49.5l-45.5 -59t-46 -54t-37.5 -34.5q-10 -6 -23 -10t-26.5 -5t-25.5 1.5t-21 8.5q-9 7 -15 20q-5 11 -9.5 29t-3.5 45q-24 -40 -53 -61.5t-55 -31.5q-30 -11 -60 -13q-14 0 -30 9.5t-27 30t-14 53t8 77.5q14 61 44.5 111t66.5 85.5t71 53.5t58 16
+q27 -5 44 -16q14 -10 18.5 -29.5t-16.5 -51.5q14 3 23.5 4t14.5 1q6 0 8 -1q1 -2 1 -8.5t-3 -23.5t-9 -46l-16 -75q-2 -9 -3.5 -16.5l-3 -15l-3.5 -17.5l-5 -25q-1 -9 -0.5 -19.5t3.5 -19.5t9.5 -14.5t18.5 -5.5q10 0 26 12.5t34 32t37.5 43l36.5 45.5l30.5 39l19.5 25
+q8 9 16 10.5t12 -4.5t1.5 -18t-14.5 -28zM220 155l12 47t12 52t7.5 41.5t-1.5 15.5q-5 -1 -11 -3q-5 -2 -13 -3t-16 -3q8 16 9.5 26.5t0.5 16.5q-1 7 -4 11q-11 9 -38.5 -14.5t-63.5 -86.5q-15 -26 -24 -55.5t-12.5 -55.5t-1.5 -45.5t8 -25.5q11 -11 25 -10.5t28.5 8
+t29 19.5t26 25t19 24t8.5 16zM197 611q6 -3 21.5 -13.5t32.5 -24l32.5 -27t20.5 -22.5q11 -18 2.5 -27.5t-18.5 -15.5l-71.5 38l-46.5 24l-33 17q-9 5 -7 18.5t13 25.5q16 16 28 15t26 -8z" />
+    <glyph glyph-name="acircumflex" unicode="&#xe2;" horiz-adv-x="446" 
+d="M513 199l-36 -49.5l-45.5 -59t-46 -54t-37.5 -34.5q-10 -6 -23 -10t-26.5 -5t-25.5 1.5t-21 8.5q-9 7 -15 20q-5 11 -9.5 29t-3.5 45q-24 -40 -53 -61.5t-55 -31.5q-30 -11 -60 -13q-14 0 -30 9.5t-27 30t-14 53t8 77.5q14 61 44.5 111t66.5 85.5t71 53.5t58 16
+q27 -5 44 -16q14 -10 18.5 -29.5t-16.5 -51.5q14 3 23.5 4t14.5 1q6 0 8 -1q1 -2 1 -8.5t-3 -23.5t-9 -46l-16 -75q-2 -9 -3.5 -16.5l-3 -15l-3.5 -17.5l-5 -25q-1 -9 -0.5 -19.5t3.5 -19.5t9.5 -14.5t18.5 -5.5q10 0 26 12.5t34 32t37.5 43l36.5 45.5l30.5 39l19.5 25
+q8 9 16 10.5t12 -4.5t1.5 -18t-14.5 -28zM220 155l12 47t12 52t7.5 41.5t-1.5 15.5q-5 -1 -11 -3q-5 -2 -13 -3t-16 -3q8 16 9.5 26.5t0.5 16.5q-1 7 -4 11q-11 9 -38.5 -14.5t-63.5 -86.5q-15 -26 -24 -55.5t-12.5 -55.5t-1.5 -45.5t8 -25.5q11 -11 25 -10.5t28.5 8
+t29 19.5t26 25t19 24t8.5 16zM336 531q9 -15 17 -25.5t21 -16.5q-8 -5 -18.5 -6t-20.5 -1q-11 0 -24 2q-9 1 -16.5 4.5t-14.5 10.5t-14 19t-16 31q0 1 -0.5 1.5t-0.5 1.5l-51 -41t-16 -13q-16 -14 -32.5 -12t-29.5 1h-12q-5 0 -11 -0.5t-11 -1.5l17 14l25 20q15 11 32 25
+l16 13l20 16t19 14.5t12 8.5q3 3 14 4.5t23.5 1.5t23 -1.5t12.5 -5.5q2 -3 7 -12l10.5 -19.5t11 -19.5t7.5 -13z" />
+    <glyph glyph-name="adieresis" unicode="&#xe4;" horiz-adv-x="446" 
+d="M513 199l-36 -49.5l-45.5 -59t-46 -54t-37.5 -34.5q-10 -6 -23 -10t-26.5 -5t-25.5 1.5t-21 8.5q-9 7 -15 20q-5 11 -9.5 29t-3.5 45q-24 -40 -53 -61.5t-55 -31.5q-30 -11 -60 -13q-14 0 -30 9.5t-27 30t-14 53t8 77.5q14 61 44.5 111t66.5 85.5t71 53.5t58 16
+q27 -5 44 -16q14 -10 18.5 -29.5t-16.5 -51.5q14 3 23.5 4t14.5 1q6 0 8 -1q1 -2 1 -8.5t-3 -23.5t-9 -46l-16 -75q-2 -9 -3.5 -16.5l-3 -15l-3.5 -17.5l-5 -25q-1 -9 -0.5 -19.5t3.5 -19.5t9.5 -14.5t18.5 -5.5q10 0 26 12.5t34 32t37.5 43l36.5 45.5l30.5 39l19.5 25
+q8 9 16 10.5t12 -4.5t1.5 -18t-14.5 -28zM220 155l12 47t12 52t7.5 41.5t-1.5 15.5q-5 -1 -11 -3q-5 -2 -13 -3t-16 -3q8 16 9.5 26.5t0.5 16.5q-1 7 -4 11q-11 9 -38.5 -14.5t-63.5 -86.5q-15 -26 -24 -55.5t-12.5 -55.5t-1.5 -45.5t8 -25.5q11 -11 25 -10.5t28.5 8
+t29 19.5t26 25t19 24t8.5 16zM321 480q-21 0 -29.5 8t-8.5 22q0 9 6 18t15.5 16t22 11t25.5 4q25 0 34.5 -8.5t9.5 -22.5q0 -11 -7.5 -20t-18.5 -15t-24 -9.5t-25 -3.5zM238 534q0 -19 -22.5 -37.5t-59.5 -18.5q-19 0 -25 8.5t-6 17.5q0 19 18 38t53 19q16 0 29 -5t13 -22z
+" />
+    <glyph glyph-name="atilde" unicode="&#xe3;" horiz-adv-x="446" 
+d="M513 199l-36 -49.5l-45.5 -59t-46 -54t-37.5 -34.5q-10 -6 -23 -10t-26.5 -5t-25.5 1.5t-21 8.5q-9 7 -15 20q-5 11 -9.5 29t-3.5 45q-24 -40 -53 -61.5t-55 -31.5q-30 -11 -60 -13q-14 0 -30 9.5t-27 30t-14 53t8 77.5q14 61 44.5 111t66.5 85.5t71 53.5t58 16
+q27 -5 44 -16q14 -10 18.5 -29.5t-16.5 -51.5q14 3 23.5 4t14.5 1q6 0 8 -1q1 -2 1 -8.5t-3 -23.5t-9 -46l-16 -75q-2 -9 -3.5 -16.5l-3 -15l-3.5 -17.5l-5 -25q-1 -9 -0.5 -19.5t3.5 -19.5t9.5 -14.5t18.5 -5.5q10 0 26 12.5t34 32t37.5 43l36.5 45.5l30.5 39l19.5 25
+q8 9 16 10.5t12 -4.5t1.5 -18t-14.5 -28zM220 155l12 47t12 52t7.5 41.5t-1.5 15.5q-5 -1 -11 -3q-5 -2 -13 -3t-16 -3q8 16 9.5 26.5t0.5 16.5q-1 7 -4 11q-11 9 -38.5 -14.5t-63.5 -86.5q-15 -26 -24 -55.5t-12.5 -55.5t-1.5 -45.5t8 -25.5q11 -11 25 -10.5t28.5 8
+t29 19.5t26 25t19 24t8.5 16zM375 575q17 -10 17 -33q0 -12 -7.5 -24t-21 -20.5t-32 -12.5t-40.5 -1q-23 3 -41 9t-33 10.5t-29 6t-30 -4.5l-18 -8l-16.5 -8.5t-15.5 -9.5q-6 1 -10 4t-7 5q-4 3 -5 6q-4 6 -6 12q-2 5 -2.5 11t2.5 11q12 16 29.5 24t34.5 11q19 4 40 3
+q27 -1 43.5 -6t30.5 -10.5t28 -8.5t37 0q7 1 16 5q8 4 17 10.5t19 18.5z" />
+    <glyph glyph-name="aring" unicode="&#xe5;" horiz-adv-x="446" 
+d="M513 199l-36 -49.5l-45.5 -59t-46 -54t-37.5 -34.5q-10 -6 -23 -10t-26.5 -5t-25.5 1.5t-21 8.5q-9 7 -15 20q-5 11 -9.5 29t-3.5 45q-24 -40 -53 -61.5t-55 -31.5q-30 -11 -60 -13q-14 0 -30 9.5t-27 30t-14 53t8 77.5q14 61 44.5 111t66.5 85.5t71 53.5t58 16
+q27 -5 44 -16q14 -10 18.5 -29.5t-16.5 -51.5q14 3 23.5 4t14.5 1q6 0 8 -1q1 -2 1 -8.5t-3 -23.5t-9 -46l-16 -75q-2 -9 -3.5 -16.5l-3 -15l-3.5 -17.5l-5 -25q-1 -9 -0.5 -19.5t3.5 -19.5t9.5 -14.5t18.5 -5.5q10 0 26 12.5t34 32t37.5 43l36.5 45.5l30.5 39l19.5 25
+q8 9 16 10.5t12 -4.5t1.5 -18t-14.5 -28zM220 155l12 47t12 52t7.5 41.5t-1.5 15.5q-5 -1 -11 -3q-5 -2 -13 -3t-16 -3q8 16 9.5 26.5t0.5 16.5q-1 7 -4 11q-11 9 -38.5 -14.5t-63.5 -86.5q-15 -26 -24 -55.5t-12.5 -55.5t-1.5 -45.5t8 -25.5q11 -11 25 -10.5t28.5 8
+t29 19.5t26 25t19 24t8.5 16zM237 586q18 0 30 -5t19 -12.5t10 -16.5t3 -18q0 -11 -5 -23.5t-14 -23.5t-22.5 -18.5t-31.5 -7.5q-21 0 -33.5 5.5t-19.5 13.5t-9.5 17.5t-2.5 18.5q0 13 6 25.5t16.5 22.5t24.5 16t29 6zM228 497q14 0 20.5 11t6.5 20q0 8 -4.5 15t-18.5 7
+q-11 0 -19 -9t-8 -20q0 -8 4.5 -16t18.5 -8z" />
+    <glyph glyph-name="ccedilla" unicode="&#xe7;" horiz-adv-x="372" 
+d="M126 -74q56 2 81.5 -16t20.5 -50q-2 -17 -15 -32.5t-34 -28t-48 -21.5t-57 -12q-13 -2 -20 2t-7.5 9.5t6 11.5t19.5 9q33 8 57 22t27 32q2 17 -18 26.5t-54 6.5q-12 -1 -19 4t-5 16q0 3 4 13l9 22t9.5 24t7.5 18q-29 9 -48 27t-31 41.5t-16.5 50t-4.5 52.5q0 31 14 77
+t41.5 88.5t69.5 73t99 30.5q32 0 54.5 -22t21.5 -60q0 -18 -6 -35.5t-16 -31t-23.5 -21.5t-29.5 -8q-13 0 -19.5 9.5t-8 22t0 24.5t3.5 16q5 7 11 10l14 7q6 3 9.5 9t3.5 13t-4 12t-13 5t-32.5 -14.5t-48 -43t-43.5 -71.5t-20 -100q-1 -33 9 -54t25 -33t33 -17t35 -5
+q31 0 68.5 24.5t73 57.5t65 67.5t44.5 55.5q9 13 17 15.5t12 -2.5t3 -15.5t-9 -23.5q-7 -12 -22.5 -33.5t-37.5 -47t-49 -52.5t-57 -50t-62 -38.5t-64 -17.5q-8 -12 -26 -48z" />
+    <glyph glyph-name="eacute" unicode="&#xe9;" horiz-adv-x="381" 
+d="M453 208q-30 -44 -68 -85.5t-80.5 -74t-87 -52.5t-86.5 -20q-22 0 -47.5 10.5t-46.5 32.5t-33.5 57t-7.5 85q4 41 25.5 86.5t53 83.5t71 63t79.5 25q38 0 55 -19t15 -47q-3 -31 -17.5 -57t-34.5 -47t-42.5 -38l-42.5 -31l-42 -28.5l-35 -24.5q1 -25 9 -42t20 -27.5
+t27.5 -15t31.5 -4.5q34 0 71 21.5t72.5 52t66 63.5t50.5 57q7 8 14.5 9.5t12 -2t4.5 -12t-7 -19.5zM197 362q-12 0 -28.5 -12t-32.5 -34.5t-30 -55t-21 -74.5q12 9 26 18.5t28 20.5q43 33 60 58t19 43q2 19 -4 27.5t-17 8.5zM279 615q9 7 20 -1t16 -24q7 -21 1 -31.5
+t-18 -18.5q-6 -5 -22.5 -14t-36 -18.5t-38.5 -17t-29 -8.5q-11 -1 -17 2.5t-9.5 8.5t-4.5 11.5t-1 11.5q78 54 109 77z" />
+    <glyph glyph-name="egrave" unicode="&#xe8;" horiz-adv-x="381" 
+d="M453 208q-30 -44 -68 -85.5t-80.5 -74t-87 -52.5t-86.5 -20q-22 0 -47.5 10.5t-46.5 32.5t-33.5 57t-7.5 85q4 41 25.5 86.5t53 83.5t71 63t79.5 25q38 0 55 -19t15 -47q-3 -31 -17.5 -57t-34.5 -47t-42.5 -38l-42.5 -31l-42 -28.5l-35 -24.5q1 -25 9 -42t20 -27.5
+t27.5 -15t31.5 -4.5q34 0 71 21.5t72.5 52t66 63.5t50.5 57q7 8 14.5 9.5t12 -2t4.5 -12t-7 -19.5zM197 362q-12 0 -28.5 -12t-32.5 -34.5t-30 -55t-21 -74.5q12 9 26 18.5t28 20.5q43 33 60 58t19 43q2 19 -4 27.5t-17 8.5zM187 611q6 -3 21.5 -13.5t32.5 -24l32.5 -27
+t20.5 -22.5q11 -18 2.5 -27.5t-18.5 -15.5l-71.5 38l-46.5 24l-33 17q-9 5 -7 18.5t13 25.5q16 16 28 15t26 -8z" />
+    <glyph glyph-name="ecircumflex" unicode="&#xea;" horiz-adv-x="381" 
+d="M453 208q-30 -44 -68 -85.5t-80.5 -74t-87 -52.5t-86.5 -20q-22 0 -47.5 10.5t-46.5 32.5t-33.5 57t-7.5 85q4 41 25.5 86.5t53 83.5t71 63t79.5 25q38 0 55 -19t15 -47q-3 -31 -17.5 -57t-34.5 -47t-42.5 -38l-42.5 -31l-42 -28.5l-35 -24.5q1 -25 9 -42t20 -27.5
+t27.5 -15t31.5 -4.5q34 0 71 21.5t72.5 52t66 63.5t50.5 57q7 8 14.5 9.5t12 -2t4.5 -12t-7 -19.5zM197 362q-12 0 -28.5 -12t-32.5 -34.5t-30 -55t-21 -74.5q12 9 26 18.5t28 20.5q43 33 60 58t19 43q2 19 -4 27.5t-17 8.5zM326 531q9 -15 17 -25.5t21 -16.5
+q-8 -5 -18.5 -6t-20.5 -1q-11 0 -24 2q-9 1 -16.5 4.5t-14.5 10.5t-14 19t-16 31q0 1 -0.5 1.5t-0.5 1.5l-51 -41t-16 -13q-16 -14 -32.5 -12t-29.5 1h-12q-5 0 -11 -0.5t-11 -1.5l17 14l25 20q15 11 32 25l16 13l20 16t19 14.5t12 8.5q3 3 14 4.5t23.5 1.5t23 -1.5
+t12.5 -5.5q2 -3 7 -12l10.5 -19.5t11 -19.5t7.5 -13z" />
+    <glyph glyph-name="edieresis" unicode="&#xeb;" horiz-adv-x="381" 
+d="M453 208q-30 -44 -68 -85.5t-80.5 -74t-87 -52.5t-86.5 -20q-22 0 -47.5 10.5t-46.5 32.5t-33.5 57t-7.5 85q4 41 25.5 86.5t53 83.5t71 63t79.5 25q38 0 55 -19t15 -47q-3 -31 -17.5 -57t-34.5 -47t-42.5 -38l-42.5 -31l-42 -28.5l-35 -24.5q1 -25 9 -42t20 -27.5
+t27.5 -15t31.5 -4.5q34 0 71 21.5t72.5 52t66 63.5t50.5 57q7 8 14.5 9.5t12 -2t4.5 -12t-7 -19.5zM197 362q-12 0 -28.5 -12t-32.5 -34.5t-30 -55t-21 -74.5q12 9 26 18.5t28 20.5q43 33 60 58t19 43q2 19 -4 27.5t-17 8.5zM290 480q-21 0 -29.5 8t-8.5 22q0 9 6 18
+t15.5 16t22 11t25.5 4q25 0 34.5 -8.5t9.5 -22.5q0 -11 -7.5 -20t-18.5 -15t-24 -9.5t-25 -3.5zM207 534q0 -19 -22.5 -37.5t-59.5 -18.5q-19 0 -25 8.5t-6 17.5q0 19 18 38t53 19q16 0 29 -5t13 -22z" />
+    <glyph glyph-name="iacute" unicode="&#xed;" horiz-adv-x="281" 
+d="M82 376q5 6 19 10t29 6.5t27.5 3t14.5 -0.5q1 -1 -5 -21t-15 -47l-19 -55.5t-15 -46.5t-12 -40.5t-12.5 -44t-7.5 -40.5t3 -29q5 -12 11 -16.5t13 -4.5q20 0 50.5 22t62 52.5t58.5 62t40 50.5q8 10 16.5 13t14 -1t6 -13t-6.5 -21q-16 -28 -47 -66.5t-66 -74t-68.5 -60.5
+t-54.5 -26q-17 -1 -33.5 5.5t-30 18t-22.5 27t-10 32.5q-3 25 0 68.5t11 89t20.5 86.5t28.5 61zM259 615q9 7 20 -1t16 -24q7 -21 1 -31.5t-18 -18.5q-6 -5 -22.5 -14t-36 -18.5t-38.5 -17t-29 -8.5q-11 -1 -17 2.5t-9.5 8.5t-4.5 11.5t-1 11.5q78 54 109 77z" />
+    <glyph glyph-name="igrave" unicode="&#xec;" horiz-adv-x="281" 
+d="M82 376q5 6 19 10t29 6.5t27.5 3t14.5 -0.5q1 -1 -5 -21t-15 -47l-19 -55.5t-15 -46.5t-12 -40.5t-12.5 -44t-7.5 -40.5t3 -29q5 -12 11 -16.5t13 -4.5q20 0 50.5 22t62 52.5t58.5 62t40 50.5q8 10 16.5 13t14 -1t6 -13t-6.5 -21q-16 -28 -47 -66.5t-66 -74t-68.5 -60.5
+t-54.5 -26q-17 -1 -33.5 5.5t-30 18t-22.5 27t-10 32.5q-3 25 0 68.5t11 89t20.5 86.5t28.5 61zM84 611q6 -3 21.5 -13.5t32.5 -24l32.5 -27t20.5 -22.5q11 -18 2.5 -27.5t-18.5 -15.5l-71.5 38l-46.5 24l-33 17q-9 5 -7 18.5t13 25.5q16 16 28 15t26 -8z" />
+    <glyph glyph-name="icircumflex" unicode="&#xee;" horiz-adv-x="281" 
+d="M82 376q5 6 19 10t29 6.5t27.5 3t14.5 -0.5q1 -1 -5 -21t-15 -47l-19 -55.5t-15 -46.5t-12 -40.5t-12.5 -44t-7.5 -40.5t3 -29q5 -12 11 -16.5t13 -4.5q20 0 50.5 22t62 52.5t58.5 62t40 50.5q8 10 16.5 13t14 -1t6 -13t-6.5 -21q-16 -28 -47 -66.5t-66 -74t-68.5 -60.5
+t-54.5 -26q-17 -1 -33.5 5.5t-30 18t-22.5 27t-10 32.5q-3 25 0 68.5t11 89t20.5 86.5t28.5 61zM254 520q9 -15 17 -25.5t21 -16.5q-8 -5 -18.5 -6t-20.5 -1q-11 0 -24 2q-9 1 -16.5 4.5t-14.5 10.5t-14 19t-16 31q0 1 -0.5 1.5t-0.5 1.5l-51 -41t-16 -13q-16 -14 -32.5 -12
+t-29.5 1h-12q-5 0 -11 -0.5t-11 -1.5l17 14l25 20q15 11 32 25l16 13l20 16t19 14.5t12 8.5q3 3 14 4.5t23.5 1.5t23 -1.5t12.5 -5.5q2 -3 7 -12l10.5 -19.5t11 -19.5t7.5 -13z" />
+    <glyph glyph-name="idieresis" unicode="&#xef;" horiz-adv-x="281" 
+d="M82 376q5 6 19 10t29 6.5t27.5 3t14.5 -0.5q1 -1 -5 -21t-15 -47l-19 -55.5t-15 -46.5t-12 -40.5t-12.5 -44t-7.5 -40.5t3 -29q5 -12 11 -16.5t13 -4.5q20 0 50.5 22t62 52.5t58.5 62t40 50.5q8 10 16.5 13t14 -1t6 -13t-6.5 -21q-16 -28 -47 -66.5t-66 -74t-68.5 -60.5
+t-54.5 -26q-17 -1 -33.5 5.5t-30 18t-22.5 27t-10 32.5q-3 25 0 68.5t11 89t20.5 86.5t28.5 61zM218 480q-21 0 -29.5 8t-8.5 22q0 9 6 18t15.5 16t22 11t25.5 4q25 0 34.5 -8.5t9.5 -22.5q0 -11 -7.5 -20t-18.5 -15t-24 -9.5t-25 -3.5zM135 534q0 -19 -22.5 -37.5
+t-59.5 -18.5q-19 0 -25 8.5t-6 17.5q0 19 18 38t53 19q16 0 29 -5t13 -22z" />
+    <glyph glyph-name="ntilde" unicode="&#xf1;" horiz-adv-x="473" 
+d="M297 -25q-23 0 -39.5 8.5t-26.5 22.5t-13 32.5t2 39.5q3 14 10 37.5l14.5 51t14 55t8.5 50t-2 37t-17 14.5q-16 0 -33 -10.5t-34.5 -28.5t-35 -41.5l-34.5 -48.5q-9 -34 -15 -59.5l-10.5 -46t-8.5 -36t-7 -29.5q-3 -10 -18 -19.5t-32 -15.5t-29.5 -6t-10.5 9q1 6 6.5 27
+l13 49.5l15.5 60.5l15 61l11 51q5 24 12.5 56t17.5 70q7 6 14.5 9.5t15.5 5.5q8 3 17 4q8 0 16 -1q7 -1 14.5 -3.5t13.5 -7.5q-3 -7 -7 -19.5t-8 -26.5q-4 -16 -10 -33q13 18 29.5 36.5t36 33.5t41.5 24.5t45 9.5q19 0 34 -11t23.5 -30.5t10 -46.5t-7.5 -59l-11 -44
+q-5 -21 -12.5 -49.5t-18.5 -62.5q-6 -22 -4.5 -38t19.5 -16t45.5 22t55.5 53t53 63.5t38 52.5q9 13 17 17t12.5 1t4.5 -13.5t-8 -26.5q-7 -14 -21.5 -37t-34.5 -49t-43 -52.5t-48 -48t-49.5 -35t-46.5 -13.5zM385 565q17 -10 17 -33q0 -12 -7.5 -24t-21 -20.5t-32 -12.5
+t-40.5 -1q-23 3 -41 9t-33 10.5t-29 6t-30 -4.5l-18 -8l-16.5 -8.5t-15.5 -9.5q-6 1 -10 4t-7 5q-4 3 -5 6q-4 6 -6 12q-2 5 -2.5 11t2.5 11q12 16 29.5 24t34.5 11q19 4 40 3q27 -1 43.5 -6t30.5 -10.5t28 -8.5t37 0q7 1 16 5q8 4 17 10.5t19 18.5z" />
+    <glyph glyph-name="oacute" unicode="&#xf3;" horiz-adv-x="403" 
+d="M296 159q-10 -38 -27 -71t-40.5 -57t-53 -37.5t-64.5 -13.5q-41 0 -64.5 17.5t-35 43.5t-14 57t-2.5 58q0 19 4.5 42t12.5 47t20.5 48t29.5 44q6 17 18.5 30t29 21.5t35.5 13t37 4.5q3 0 5.5 -1t5.5 -2q13 -1 32.5 -10t38 -27t31.5 -45.5t13 -66.5q0 -8 -1 -19.5
+t-2 -19.5q23 9 48 22t48.5 27.5t43.5 29.5t32 27q10 9 17 10t10 -4t1 -14t-11 -20q-5 -6 -25.5 -24t-48.5 -39t-61 -41t-63 -30zM127 311q-3 -9 -3 -19q0 -16 2 -33.5t10 -31.5t25.5 -23.5t48.5 -9.5q5 0 10 0.5t10 1.5l5.5 23.5t2.5 18.5q2 19 0 39t-7.5 36.5t-14 27
+t-20.5 10.5q-19 0 -36.5 -10.5t-32.5 -29.5zM63 135q0 -18 2 -35.5t8 -31t16 -22t26 -8.5q18 0 33 8.5t27 22t21.5 31t16.5 36.5q-7 -1 -13.5 -1.5t-14.5 -0.5q-38 0 -65.5 22.5t-42.5 57.5q-6 -21 -10 -41t-4 -38zM279 605q9 7 20 -1t16 -24q7 -21 1 -31.5t-18 -18.5
+q-6 -5 -22.5 -14t-36 -18.5t-38.5 -17t-29 -8.5q-11 -1 -17 2.5t-9.5 8.5t-4.5 11.5t-1 11.5q78 54 109 77z" />
+    <glyph glyph-name="ograve" unicode="&#xf2;" horiz-adv-x="403" 
+d="M296 159q-10 -38 -27 -71t-40.5 -57t-53 -37.5t-64.5 -13.5q-41 0 -64.5 17.5t-35 43.5t-14 57t-2.5 58q0 19 4.5 42t12.5 47t20.5 48t29.5 44q6 17 18.5 30t29 21.5t35.5 13t37 4.5q3 0 5.5 -1t5.5 -2q13 -1 32.5 -10t38 -27t31.5 -45.5t13 -66.5q0 -8 -1 -19.5
+t-2 -19.5q23 9 48 22t48.5 27.5t43.5 29.5t32 27q10 9 17 10t10 -4t1 -14t-11 -20q-5 -6 -25.5 -24t-48.5 -39t-61 -41t-63 -30zM127 311q-3 -9 -3 -19q0 -16 2 -33.5t10 -31.5t25.5 -23.5t48.5 -9.5q5 0 10 0.5t10 1.5l5.5 23.5t2.5 18.5q2 19 0 39t-7.5 36.5t-14 27
+t-20.5 10.5q-19 0 -36.5 -10.5t-32.5 -29.5zM63 135q0 -18 2 -35.5t8 -31t16 -22t26 -8.5q18 0 33 8.5t27 22t21.5 31t16.5 36.5q-7 -1 -13.5 -1.5t-14.5 -0.5q-38 0 -65.5 22.5t-42.5 57.5q-6 -21 -10 -41t-4 -38zM187 601q6 -3 21.5 -13.5t32.5 -24l32.5 -27t20.5 -22.5
+q11 -18 2.5 -27.5t-18.5 -15.5l-71.5 38l-46.5 24l-33 17q-9 5 -7 18.5t13 25.5q16 16 28 15t26 -8z" />
+    <glyph glyph-name="ocircumflex" unicode="&#xf4;" horiz-adv-x="403" 
+d="M296 159q-10 -38 -27 -71t-40.5 -57t-53 -37.5t-64.5 -13.5q-41 0 -64.5 17.5t-35 43.5t-14 57t-2.5 58q0 19 4.5 42t12.5 47t20.5 48t29.5 44q6 17 18.5 30t29 21.5t35.5 13t37 4.5q3 0 5.5 -1t5.5 -2q13 -1 32.5 -10t38 -27t31.5 -45.5t13 -66.5q0 -8 -1 -19.5
+t-2 -19.5q23 9 48 22t48.5 27.5t43.5 29.5t32 27q10 9 17 10t10 -4t1 -14t-11 -20q-5 -6 -25.5 -24t-48.5 -39t-61 -41t-63 -30zM127 311q-3 -9 -3 -19q0 -16 2 -33.5t10 -31.5t25.5 -23.5t48.5 -9.5q5 0 10 0.5t10 1.5l5.5 23.5t2.5 18.5q2 19 0 39t-7.5 36.5t-14 27
+t-20.5 10.5q-19 0 -36.5 -10.5t-32.5 -29.5zM63 135q0 -18 2 -35.5t8 -31t16 -22t26 -8.5q18 0 33 8.5t27 22t21.5 31t16.5 36.5q-7 -1 -13.5 -1.5t-14.5 -0.5q-38 0 -65.5 22.5t-42.5 57.5q-6 -21 -10 -41t-4 -38zM295 520q9 -15 17 -25.5t21 -16.5q-8 -5 -18.5 -6
+t-20.5 -1q-11 0 -24 2q-9 1 -16.5 4.5t-14.5 10.5t-14 19t-16 31q0 1 -0.5 1.5t-0.5 1.5l-51 -41t-16 -13q-16 -14 -32.5 -12t-29.5 1h-12q-5 0 -11 -0.5t-11 -1.5l17 14l25 20q15 11 32 25l16 13l20 16t19 14.5t12 8.5q3 3 14 4.5t23.5 1.5t23 -1.5t12.5 -5.5q2 -3 7 -12
+l10.5 -19.5t11 -19.5t7.5 -13z" />
+    <glyph glyph-name="odieresis" unicode="&#xf6;" horiz-adv-x="403" 
+d="M296 159q-10 -38 -27 -71t-40.5 -57t-53 -37.5t-64.5 -13.5q-41 0 -64.5 17.5t-35 43.5t-14 57t-2.5 58q0 19 4.5 42t12.5 47t20.5 48t29.5 44q6 17 18.5 30t29 21.5t35.5 13t37 4.5q3 0 5.5 -1t5.5 -2q13 -1 32.5 -10t38 -27t31.5 -45.5t13 -66.5q0 -8 -1 -19.5
+t-2 -19.5q23 9 48 22t48.5 27.5t43.5 29.5t32 27q10 9 17 10t10 -4t1 -14t-11 -20q-5 -6 -25.5 -24t-48.5 -39t-61 -41t-63 -30zM127 311q-3 -9 -3 -19q0 -16 2 -33.5t10 -31.5t25.5 -23.5t48.5 -9.5q5 0 10 0.5t10 1.5l5.5 23.5t2.5 18.5q2 19 0 39t-7.5 36.5t-14 27
+t-20.5 10.5q-19 0 -36.5 -10.5t-32.5 -29.5zM63 135q0 -18 2 -35.5t8 -31t16 -22t26 -8.5q18 0 33 8.5t27 22t21.5 31t16.5 36.5q-7 -1 -13.5 -1.5t-14.5 -0.5q-38 0 -65.5 22.5t-42.5 57.5q-6 -21 -10 -41t-4 -38zM278 475q-21 0 -29.5 8t-8.5 22q0 9 6 18t15.5 16t22 11
+t25.5 4q25 0 34.5 -8.5t9.5 -22.5q0 -11 -7.5 -20t-18.5 -15t-24 -9.5t-25 -3.5zM195 529q0 -19 -22.5 -37.5t-59.5 -18.5q-19 0 -25 8.5t-6 17.5q0 19 18 38t53 19q16 0 29 -5t13 -22z" />
+    <glyph glyph-name="otilde" unicode="&#xf5;" horiz-adv-x="403" 
+d="M296 159q-10 -38 -27 -71t-40.5 -57t-53 -37.5t-64.5 -13.5q-41 0 -64.5 17.5t-35 43.5t-14 57t-2.5 58q0 19 4.5 42t12.5 47t20.5 48t29.5 44q6 17 18.5 30t29 21.5t35.5 13t37 4.5q3 0 5.5 -1t5.5 -2q13 -1 32.5 -10t38 -27t31.5 -45.5t13 -66.5q0 -8 -1 -19.5
+t-2 -19.5q23 9 48 22t48.5 27.5t43.5 29.5t32 27q10 9 17 10t10 -4t1 -14t-11 -20q-5 -6 -25.5 -24t-48.5 -39t-61 -41t-63 -30zM127 311q-3 -9 -3 -19q0 -16 2 -33.5t10 -31.5t25.5 -23.5t48.5 -9.5q5 0 10 0.5t10 1.5l5.5 23.5t2.5 18.5q2 19 0 39t-7.5 36.5t-14 27
+t-20.5 10.5q-19 0 -36.5 -10.5t-32.5 -29.5zM63 135q0 -18 2 -35.5t8 -31t16 -22t26 -8.5q18 0 33 8.5t27 22t21.5 31t16.5 36.5q-7 -1 -13.5 -1.5t-14.5 -0.5q-38 0 -65.5 22.5t-42.5 57.5q-6 -21 -10 -41t-4 -38zM345 565q17 -10 17 -33q0 -12 -7.5 -24t-21 -20.5
+t-32 -12.5t-40.5 -1q-23 3 -41 9t-33 10.5t-29 6t-30 -4.5l-18 -8l-16.5 -8.5t-15.5 -9.5q-6 1 -10 4t-7 5q-4 3 -5 6q-4 6 -6 12q-2 5 -2.5 11t2.5 11q12 16 29.5 24t34.5 11q19 4 40 3q27 -1 43.5 -6t30.5 -10.5t28 -8.5t37 0q7 1 16 5q8 4 17 10.5t19 18.5z" />
+    <glyph glyph-name="uacute" unicode="&#xfa;" horiz-adv-x="480" 
+d="M124 -16q-38 0 -62 12t-37.5 29.5t-19 38t-5.5 37.5q0 30 5 63.5t12 62t12.5 48.5t7.5 25q9 29 23.5 50.5t40.5 29.5l21 4q9 1 18.5 1t17.5 -3q-27 -69 -42.5 -115t-23.5 -75q-9 -33 -11 -53q-5 -45 8 -68t53 -23q26 0 50 19.5t44 50.5q-3 16 -3 33q0 32 5.5 62.5t13 57
+t16 47.5t14.5 33q11 24 20 29.5t29 6.5q8 1 13.5 0.5t9.5 -1.5q12 -3 12 -12q0 -16 -2 -48t-12 -66q-7 -28 -13.5 -47.5t-12.5 -33t-12 -22l-11 -15.5q2 -30 5 -48t7.5 -27.5t11 -13t14.5 -3.5q14 0 33 13.5t39.5 34t41 45l37.5 46.5l29 38.5l15 20.5q7 9 13.5 11t10.5 -1.5
+t4.5 -11t-4.5 -16.5q-20 -38 -49.5 -80.5t-63 -78.5t-67.5 -60t-64 -24q-27 0 -42.5 18.5t-26.5 53.5q-23 -36 -54 -55.5t-69 -19.5zM300 584q9 7 20 -1t16 -24q7 -21 1 -31.5t-18 -18.5q-6 -5 -22.5 -14t-36 -18.5t-38.5 -17t-29 -8.5q-11 -1 -17 2.5t-9.5 8.5t-4.5 11.5
+t-1 11.5q78 54 109 77z" />
+    <glyph glyph-name="ugrave" unicode="&#xf9;" horiz-adv-x="480" 
+d="M124 -16q-38 0 -62 12t-37.5 29.5t-19 38t-5.5 37.5q0 30 5 63.5t12 62t12.5 48.5t7.5 25q9 29 23.5 50.5t40.5 29.5l21 4q9 1 18.5 1t17.5 -3q-27 -69 -42.5 -115t-23.5 -75q-9 -33 -11 -53q-5 -45 8 -68t53 -23q26 0 50 19.5t44 50.5q-3 16 -3 33q0 32 5.5 62.5t13 57
+t16 47.5t14.5 33q11 24 20 29.5t29 6.5q8 1 13.5 0.5t9.5 -1.5q12 -3 12 -12q0 -16 -2 -48t-12 -66q-7 -28 -13.5 -47.5t-12.5 -33t-12 -22l-11 -15.5q2 -30 5 -48t7.5 -27.5t11 -13t14.5 -3.5q14 0 33 13.5t39.5 34t41 45l37.5 46.5l29 38.5l15 20.5q7 9 13.5 11t10.5 -1.5
+t4.5 -11t-4.5 -16.5q-20 -38 -49.5 -80.5t-63 -78.5t-67.5 -60t-64 -24q-27 0 -42.5 18.5t-26.5 53.5q-23 -36 -54 -55.5t-69 -19.5zM197 580q6 -3 21.5 -13.5t32.5 -24l32.5 -27t20.5 -22.5q11 -18 2.5 -27.5t-18.5 -15.5l-71.5 38l-46.5 24l-33 17q-9 5 -7 18.5t13 25.5
+q16 16 28 15t26 -8z" />
+    <glyph glyph-name="ucircumflex" unicode="&#xfb;" horiz-adv-x="480" 
+d="M124 -16q-38 0 -62 12t-37.5 29.5t-19 38t-5.5 37.5q0 30 5 63.5t12 62t12.5 48.5t7.5 25q9 29 23.5 50.5t40.5 29.5l21 4q9 1 18.5 1t17.5 -3q-27 -69 -42.5 -115t-23.5 -75q-9 -33 -11 -53q-5 -45 8 -68t53 -23q26 0 50 19.5t44 50.5q-3 16 -3 33q0 32 5.5 62.5t13 57
+t16 47.5t14.5 33q11 24 20 29.5t29 6.5q8 1 13.5 0.5t9.5 -1.5q12 -3 12 -12q0 -16 -2 -48t-12 -66q-7 -28 -13.5 -47.5t-12.5 -33t-12 -22l-11 -15.5q2 -30 5 -48t7.5 -27.5t11 -13t14.5 -3.5q14 0 33 13.5t39.5 34t41 45l37.5 46.5l29 38.5l15 20.5q7 9 13.5 11t10.5 -1.5
+t4.5 -11t-4.5 -16.5q-20 -38 -49.5 -80.5t-63 -78.5t-67.5 -60t-64 -24q-27 0 -42.5 18.5t-26.5 53.5q-23 -36 -54 -55.5t-69 -19.5zM346 510q9 -15 17 -25.5t21 -16.5q-8 -5 -18.5 -6t-20.5 -1q-11 0 -24 2q-9 1 -16.5 4.5t-14.5 10.5t-14 19t-16 31q0 1 -0.5 1.5t-0.5 1.5
+l-51 -41t-16 -13q-16 -14 -32.5 -12t-29.5 1h-12q-5 0 -11 -0.5t-11 -1.5l17 14l25 20q15 11 32 25l16 13l20 16t19 14.5t12 8.5q3 3 14 4.5t23.5 1.5t23 -1.5t12.5 -5.5q2 -3 7 -12l10.5 -19.5t11 -19.5t7.5 -13z" />
+    <glyph glyph-name="udieresis" unicode="&#xfc;" horiz-adv-x="480" 
+d="M124 -16q-38 0 -62 12t-37.5 29.5t-19 38t-5.5 37.5q0 30 5 63.5t12 62t12.5 48.5t7.5 25q9 29 23.5 50.5t40.5 29.5l21 4q9 1 18.5 1t17.5 -3q-27 -69 -42.5 -115t-23.5 -75q-9 -33 -11 -53q-5 -45 8 -68t53 -23q26 0 50 19.5t44 50.5q-3 16 -3 33q0 32 5.5 62.5t13 57
+t16 47.5t14.5 33q11 24 20 29.5t29 6.5q8 1 13.5 0.5t9.5 -1.5q12 -3 12 -12q0 -16 -2 -48t-12 -66q-7 -28 -13.5 -47.5t-12.5 -33t-12 -22l-11 -15.5q2 -30 5 -48t7.5 -27.5t11 -13t14.5 -3.5q14 0 33 13.5t39.5 34t41 45l37.5 46.5l29 38.5l15 20.5q7 9 13.5 11t10.5 -1.5
+t4.5 -11t-4.5 -16.5q-20 -38 -49.5 -80.5t-63 -78.5t-67.5 -60t-64 -24q-27 0 -42.5 18.5t-26.5 53.5q-23 -36 -54 -55.5t-69 -19.5zM317 477q-21 0 -29.5 8t-8.5 22q0 9 6 18t15.5 16t22 11t25.5 4q25 0 34.5 -8.5t9.5 -22.5q0 -11 -7.5 -20t-18.5 -15t-24 -9.5t-25 -3.5z
+M234 531q0 -19 -22.5 -37.5t-59.5 -18.5q-19 0 -25 8.5t-6 17.5q0 19 18 38t53 19q16 0 29 -5t13 -22z" />
+    <glyph glyph-name="degree" unicode="&#xb0;" horiz-adv-x="148" 
+d="M138 687q35 0 48.5 -17.5t13.5 -34.5q0 -11 -5 -23.5t-14 -23.5t-22.5 -18.5t-31.5 -7.5q-21 0 -33.5 5.5t-20 13.5t-10 17.5t-2.5 18.5q0 13 6.5 25.5t17 22.5t24.5 16t29 6zM129 598q13 0 20 11t7 20q0 8 -4.5 15t-18.5 7q-11 0 -19.5 -9t-8.5 -20q0 -8 5 -16t19 -8z
+" />
+    <glyph glyph-name="cent" unicode="&#xa2;" horiz-adv-x="330" 
+d="M272 645q13 -3 27 -11t24 -24t15 -41t1 -61q-5 -41 -25 -69.5t-58 -28.5q-20 0 -30.5 20t-7.5 49q3 26 23.5 49t46.5 29q-2 17 -10 32.5t-26 15.5t-39 -14t-42 -38.5t-40.5 -58t-35 -71.5t-24.5 -79.5t-9 -82.5q0 -18 4 -39t12.5 -39t22 -30t33.5 -12q30 0 58 18.5
+t52 50.5q9 12 16 14t10.5 -1.5t3 -11.5t-6.5 -17q-20 -32 -49.5 -61.5t-71.5 -39.5l-32 -92q-12 -7 -24 -9q-6 -1 -12 -1q-6 -1 -10 1q-10 2 -9 11q8 21 12.5 37.5t7.5 28.5q4 14 5 25q-23 9 -41 29t-30 51t-16 70.5t1 87.5q5 45 23.5 94.5t48 94t67 77.5t80.5 44
+q1 6 4 17.5l6.5 24t6.5 24.5t6 20q2 4 10 8t20 2q26 -3 22 -16q-3 -11 -9 -35t-11 -42z" />
+    <glyph glyph-name="sterling" unicode="&#xa3;" horiz-adv-x="326" 
+d="M279 696q23 -2 39.5 -12.5t27 -27t14 -36.5t1.5 -39q-2 -23 -11 -43t-22.5 -34.5t-31.5 -23t-37 -8.5q-15 0 -24 7t-14 16.5t-6.5 20t-1.5 16.5q5 -4 19 -4t29 7.5t28 24.5t16 47q2 23 -10.5 33.5t-27.5 10.5q-11 0 -26.5 -4.5t-30.5 -16.5t-28.5 -33t-21.5 -54
+q-10 -37 -17 -79t-20 -98h36q16 0 36.5 1t40.5 4q-4 -16 -7 -23q-3 -5 -5 -11q-8 -14 -17.5 -22.5t-34.5 -8.5q-9 0 -26 0.5t-37 2.5q-7 -24 -16 -51t-20 -53.5t-25.5 -51t-31.5 -43.5q20 8 52 16t78 11q72 5 97.5 -3t18.5 -29q-2 -8 -6 -16q-3 -7 -7 -15t-9 -15
+q-4 7 -12.5 10.5t-17.5 5.5q-11 2 -22 2q-16 0 -40 -1.5t-52.5 -4.5t-60.5 -7t-63 -9q-4 1 -7.5 5t-5.5 9q-3 5 -5 12q-2 6 -3 12q-1 5 -1.5 10.5t1.5 10.5q7 2 14 10.5t13 17.5q7 11 13 23q13 26 26 65t26 86q-15 2 -26 5t-16 7q-7 5 -8.5 11.5t0 13t4.5 12t5 9.5
+q10 -1 19.5 -1.5t17.5 -1.5q9 -1 18 -1q11 42 20.5 84l17.5 80q7 34 22 64.5t37.5 53t53.5 35t71 9.5z" />
+    <glyph glyph-name="section" unicode="&#xa7;" horiz-adv-x="305" 
+d="M95 -24q-22 0 -44.5 5.5t-40.5 17.5t-29.5 29.5t-11.5 41.5t7.5 39.5t19.5 24.5t25.5 11.5t25.5 1.5q9 -1 16 -3q6 -2 11.5 -4.5t7.5 -6.5q-23 -8 -35.5 -31t-12.5 -46q0 -16 10.5 -33.5t34.5 -17.5q17 0 33 9.5t28 24.5t19 33.5t7 36.5q0 35 -19 56.5t-44 41.5l-33 26
+t-31 28t-23 33.5t-9 42.5q0 32 14 56.5t37 42t51.5 27.5t58.5 13l-10.5 10l-11.5 10q-14 12 -27 24.5t-23.5 26.5t-17 30t-6.5 37t13.5 46t37.5 46.5t58.5 36t76.5 14.5q21 0 39 -8t31 -20.5t20.5 -28.5t7.5 -31q0 -48 -19.5 -69t-42.5 -21q-11 0 -21 1q-8 1 -16.5 2.5
+t-11.5 5.5q17 15 25.5 31t13.5 30q5 16 6 31q0 23 -9 38t-27 15q-22 0 -42 -13.5t-35.5 -33t-24.5 -40.5t-9 -36q0 -20 9 -38.5t22 -33.5t25.5 -26.5t20.5 -17.5q8 -7 19.5 -18.5t22 -27.5t18 -36.5t7.5 -44.5q0 -32 -15 -55t-37 -39.5t-46 -26.5t-43 -15q2 -2 4 -3
+q12 -11 27.5 -23t29 -26t22.5 -31.5t9 -39.5q0 -27 -12.5 -51t-32.5 -42t-45.5 -28.5t-52.5 -10.5zM113 263q16 3 34.5 10t34.5 19.5t27 31.5t11 47q0 24 -6 42t-16 31q-35 -3 -58 -15t-36.5 -28t-19.5 -33.5t-6 -32.5q0 -20 10 -37.5t25 -34.5z" />
+    <glyph glyph-name="bullet" unicode="&#x2022;" horiz-adv-x="185" 
+d="M52 175q-22 0 -34.5 9.5t-18.5 23.5t-7.5 30.5t-1.5 31.5q0 18 7 41t20 44t32.5 35t45.5 14q7 0 18 -4.5t21.5 -14t18 -25t7.5 -36.5q0 -27 -7.5 -54t-21.5 -48t-34 -34t-45 -13z" />
+    <glyph glyph-name="paragraph" unicode="&#xb6;" horiz-adv-x="421" 
+d="M198 355q-29 4 -60 14.5t-56 30.5t-40 50.5t-10 75.5q4 54 28 89t55.5 56t65.5 29.5t58 8.5h44l6 24q5 5 11 9t12 6q7 3 15 4q7 1 12 1t9 -2t6 -7q-2 -5 -3 -11t-3 -11q-2 -6 -3 -13l51 -1q0 2 1 5q1 2 1 4t1 4q5 11 15.5 16t21.5 8q13 3 29 4q-2 -6 -3 -13.5t-3 -13.5
+q-2 -7 -3 -14h57q-2 -31 -24.5 -48t-49.5 -23q-6 -29 -13.5 -61l-15 -65.5l-15 -66.5t-13.5 -62l-16.5 -76l-17 -79.5l-17 -76t-16.5 -65.5t-14.5 -48.5t-11.5 -24.5q-7 -10 -19 -15.5t-25 -7.5q-15 -3 -31 -3q13 16 24.5 43.5t19.5 55.5q10 32 18 68q11 47 21 95.5l19 95
+l18 90l17 80.5l14.5 62l13.5 58l-52 2l-27.5 -115.5l-35.5 -146.5l-23 -101l-27.5 -117.5l-36.5 -154.5q-14 -8 -29.5 -12t-29.5 -6q-16 -3 -31 -2q14 23 24 50.5l18 50.5q9 27 15 53q5 19 11.5 46l13.5 57l14.5 60z" />
+    <glyph glyph-name="germandbls" unicode="&#xdf;" horiz-adv-x="507" 
+d="M318 353q3 -17 19.5 -43t39.5 -59l25.5 -36.5t27 -40.5t20.5 -37.5t6 -28.5q-3 -17 -17 -41t-36 -46.5t-49.5 -38.5t-57.5 -16q-21 0 -40.5 13t-33 30.5t-20 34.5t-1.5 26q6 12 11 19t15 16q4 3 10 7q5 3 14 6l21 7q10 -31 18 -48.5t13 -27.5q6 -11 11 -15q6 -4 15.5 -4
+t19 4t18 11t12.5 18t-3 31.5t-19.5 44t-27 47.5t-23.5 43q-17 38 -32.5 65t-19.5 56q-1 13 8.5 37.5t23.5 54.5l28 61t21 56.5t3.5 41.5t-24.5 16q-22 0 -40.5 -10t-34 -26.5t-27.5 -38t-19 -44.5l-28 -79l-38.5 -116.5l-57.5 -181.5q57 -41 88.5 -84t45.5 -79
+q17 -42 19 -82q0 -44 -13 -88.5t-34.5 -85t-50 -75.5t-59.5 -60t-63.5 -38t-61.5 -10q-22 2 -35 13.5t-20 29t-7.5 39t2.5 42.5q2 13 9.5 45.5l18 75.5l23 92.5l25 97l23.5 89.5t19 69q-19 11 -36.5 19t-32.5 14q-16 7 -22.5 15t-4 14t12.5 8.5t26 -2.5q28 -7 68 -25
+l19 67.5l19 68.5l20.5 72l22.5 78q16 57 36.5 101t46.5 74t59 45.5t74 15.5q21 0 40.5 -8.5t35 -23.5t25 -35.5t9.5 -45.5q0 -30 -15.5 -63t-34.5 -63l-34 -53t-14 -32zM138 -54q-8 21 -20 43q-11 19 -26.5 40.5t-37.5 41.5q-15 -55 -25.5 -100l-18.5 -78q-9 -39 -15 -69
+l-18.5 -75t-14.5 -66.5t-4.5 -47.5t12.5 -18q29 -2 60.5 22.5t58 62t44 81t17.5 80.5q0 20 -2 41t-10 42z" />
+    <glyph glyph-name="registered" unicode="&#xae;" horiz-adv-x="467" 
+d="M294 746q51 0 90 -18.5t66 -51t40.5 -76.5t12.5 -96q-1 -53 -24 -102.5t-60 -88t-85 -62t-100 -23.5q-51 0 -91 17.5t-68 48.5t-42 72t-13 89q1 51 23 102.5t59 93.5t86 68.5t106 26.5zM447 530q1 33 -9.5 64.5t-30 56.5t-45.5 40.5t-56 15.5q-36 0 -75.5 -18t-72 -52.5
+t-54.5 -84t-23 -113.5q-1 -36 9 -67t30.5 -54t51 -36t71.5 -13q36 0 72 20.5t65 55.5t47.5 83t19.5 102zM302 654q21 0 35.5 -7.5t22.5 -18.5q8 -13 11 -25.5t3 -23.5v-9q-2 -20 -14 -42t-32 -41q-9 -7 -18 -13t-20 -11q7 -10 12 -22q10 -20 15 -33.5t8 -24.5q5 -13 14 -14
+q4 0 8 1q8 2 14 9q2 -9 0 -16.5t-5 -12.5q-4 -6 -8 -11q-5 -6 -12.5 -9t-13.5 -3q-5 0 -8 0.5t-7 1.5q-6 3 -11 10q-5 6 -8.5 15.5t-7.5 24.5q-5 14 -9.5 28.5t-11.5 28.5q-2 4 -4 7t-4 7l-10.5 -2l-11.5 -2l-3 -12l-10 -41t-10 -35q-2 -4 -4.5 -8t-6.5 -8q-11 -6 -23 -6
+q-8 0 -15 4t-12 9l-7 7l8 5q2 1 2.5 2t2.5 2q1 1 2 2.5t3 3.5q3 5 7.5 16t9.5 31q2 7 4 16.5t5 20.5q-10 8 -10 21v2q1 15 14 22q5 4 11 5l12 45.5t11 39.5q-13 -11 -14 -15h-1l-5 -6l-6 5q0 1 -4.5 5t-7.5 11q-2 6 -2 12q0 5 3 10q3 4 10 10q9 6 36.5 19t72.5 13zM325 582
+q0 12 -3.5 19t-8.5 11q-12 10 -26 10q-8 0 -20 -5l1 -1v-2l-1 -2q-1 -6 -3 -13l-8 -32q-5 -17 -9 -35.5t-6 -29.5q3 -2 6.5 -3.5t6.5 -3.5q5 -2 7 -5q9 6 17 10q17 11 30.5 29.5t16.5 44.5v8z" />
+    <glyph glyph-name="copyright" unicode="&#xa9;" horiz-adv-x="467" 
+d="M294 746q51 0 90 -18.5t66 -51t40.5 -76.5t12.5 -96q-1 -53 -24 -102.5t-60 -88t-85 -62t-100 -23.5q-51 0 -91 17.5t-68 48.5t-42 72t-13 89q1 51 23 102.5t59 93.5t86 68.5t106 26.5zM447 530q1 33 -9.5 64.5t-30 56.5t-45.5 40.5t-56 15.5q-36 0 -75.5 -18t-72 -52.5
+t-54.5 -84t-23 -113.5q-1 -36 9 -67t30.5 -54t51 -36t71.5 -13q36 0 72 20.5t65 55.5t47.5 83t19.5 102zM316 650q15 0 27 -9t19.5 -23.5t11 -31.5t3.5 -33q0 -6 -5.5 -11.5t-13 -10t-15.5 -7t-12 -2.5q-5 0 -12.5 4.5t-12 11.5t-3.5 14.5t13 13.5q11 4 13 22q0 8 -6.5 11.5
+t-14.5 3.5q-14 0 -32.5 -16.5t-35 -41t-28 -53.5t-11.5 -54q-1 -21 4 -34.5t13 -20.5t16.5 -9.5t15.5 -2.5q23 0 49 19.5t39 43.5q7 13 13 9.5t2 -15.5q-3 -9 -14 -26.5t-27 -34t-36 -29t-40 -12.5q-42 0 -66 35t-23 90q1 32 15.5 67t38 64.5t53.5 48.5t62 19z" />
+    <glyph glyph-name="acute" unicode="&#xb4;" 
+d="M401 696q9 7 20 -1t16 -24q7 -21 1 -31.5t-18 -18.5q-6 -5 -22.5 -14t-36 -18.5t-38.5 -17t-29 -8.5q-11 -1 -17 2.5t-9.5 8.5t-4.5 11.5t-1 11.5q78 54 109 77z" />
+    <glyph glyph-name="dieresis" unicode="&#xa8;" 
+d="M412 592q-21 0 -29.5 8t-8.5 22q0 9 6 18t15.5 16t22 11t25.5 4q25 0 34.5 -8.5t9.5 -22.5q0 -11 -7.5 -20t-18.5 -15t-24 -9.5t-25 -3.5zM329 646q0 -19 -22.5 -37.5t-59.5 -18.5q-19 0 -25 8.5t-6 17.5q0 19 18 38t53 19q16 0 29 -5t13 -22z" />
+    <glyph glyph-name="AE" unicode="&#xc6;" horiz-adv-x="890" 
+d="M761 754q38 0 65.5 -12.5t44.5 -31t25.5 -40t8.5 -39.5q1 -33 -8.5 -67t-24 -61.5t-32.5 -45t-34 -17.5q-13 0 -27 4q-12 3 -28 10t-32 21q25 10 45 28.5t33.5 41.5t20.5 47.5t6 46.5q-1 32 -14.5 49.5t-45.5 17.5q-42 0 -83.5 -20.5t-74 -57t-50.5 -87t-12 -109.5
+q5 -45 27 -76t42 -48q16 2 29.5 3.5t27.5 1.5q16 0 32.5 -6t17.5 -17q0 -8 -4 -18t-12 -19t-19 -15t-26 -6q-12 0 -28.5 6t-34.5 15q-37 -8 -68 -28.5t-53 -48.5t-34 -61t-11 -64q1 -29 9 -58.5t25.5 -52.5t45 -37.5t67.5 -14.5q29 0 55.5 12.5t49 31.5t41 42t33 45t24 40
+l13.5 26q3 6 8.5 9t10.5 1.5t8 -7.5t0 -18q-8 -36 -30 -80.5t-56.5 -83.5t-81 -65.5t-103.5 -26.5q-35 0 -66.5 8.5t-58.5 23.5l8 -18q4 -8 9 -16.5t11 -13.5l-116 -38q-12 17 -17.5 45.5t-7.5 56.5q-3 33 -1 68t11 91.5l20 123.5q-20 6 -43.5 10t-52.5 4q-26 0 -54.5 -2
+t-56.5 -5q-12 -44 -24 -93q-13 -53 -23.5 -90.5t-20 -62.5t-19 -40t-20.5 -22q-12 -6 -30 -11q-17 -5 -43 -10t-67 -8q15 18 26 33t22 37t24.5 56.5l34.5 90.5q9 23 18.5 50.5t20.5 56.5q-36 -5 -61 -9t-30 -6q-8 -1 -13 0q-13 2 -14 13q1 14 9.5 19t25.5 12q8 4 36.5 14.5
+t69.5 22.5l29.5 83.5l28.5 79.5l27 71.5t24 57.5q17 37 43.5 81.5t61 83.5t76 65t87.5 26q35 0 57.5 -19.5t19.5 -70.5q0 -5 -0.5 -10t-1.5 -12q50 54 118.5 83.5t134.5 29.5zM422 545q11 46 15 75t3 45.5t-6.5 22.5t-13.5 6q-13 0 -32 -10t-40 -28.5t-41.5 -46t-36.5 -62.5
+q-23 -52 -52 -127.5t-63 -192.5q20 3 39.5 5t38.5 2q34 0 65 -2.5t57 -5.5l18.5 94.5l18.5 88.5l16.5 77t13.5 59zM443 240q45 29 97 48q-23 12 -43 29.5t-34 38.5l-10 -58z" />
+    <glyph glyph-name="Oslash" unicode="&#xd8;" horiz-adv-x="612" 
+d="M560 773q32 7 43 5t9 -7l-30 -50l-59 -98q14 -54 18 -126.5t-3 -160.5q-6 -63 -20.5 -126.5t-37.5 -122.5t-53.5 -110.5t-66.5 -89.5t-77.5 -60t-86.5 -22q-13 0 -39 7t-54 31l-15 -33q-17 -10 -32.5 -15t-26.5 -7q-14 -3 -25 -3q-26 0 -29 6.5t7 23.5q2 5 19.5 37
+l44.5 80q-14 42 -20.5 99.5t1.5 139.5q11 134 48.5 243.5t86 187.5t100.5 120.5t92 42.5q17 0 26.5 -6.5t15.5 -16.5q8 2 16.5 3t19.5 1q28 0 50 -28q7 11 13 19.5t14.5 15.5t20 11.5t30.5 8.5zM123 178q-2 -33 -3.5 -62t-1.5 -54l57 101l59 106.5l70 126.5l133 240
+q-6 26 -14.5 41t-20.5 15q-13 -1 -26 -8q-11 -6 -25.5 -19.5t-28.5 -37.5q-5 4 -9 14q-2 4 -3 9q-2 6 -3 18q-19 -22 -47 -62.5t-55.5 -100.5t-50 -141.5t-31.5 -185.5zM449 364q2 27 3 63t0 74l-57 -98l-56.5 -99l-52.5 -94.5t-44 -84.5l-59.5 -117l-43.5 -89
+q12 -31 27.5 -43.5t32.5 -12.5q39 0 79.5 40t75.5 108.5t60.5 159.5t34.5 193z" />
+    <glyph glyph-name="yen" unicode="&#xa5;" horiz-adv-x="334" 
+d="M360 665q10 3 20.5 5.5t17 1.5t8 -6.5t-5.5 -17.5q-6 -12 -20 -36l-31 -52.5l-35 -56.5t-34 -48l-39 -45.5l-38 -41.5q-2 -9 -5.5 -19l-8.5 -24h58q14 -1 18 -6.5t0 -23.5q-5 -20 -10 -23t-13 -3t-25 1.5t-42 3.5l-4.5 -17.5t-5.5 -19.5q30 1 46.5 -1.5t21.5 -4.5
+q7 -3 8.5 -10t-5.5 -23q-2 -5 -6 -9q-3 -4 -6.5 -7.5t-7.5 -4.5q-8 2 -18.5 3.5t-20.5 2.5q-11 1 -24 2q-7 -25 -11 -45q-4 -17 -7 -33t-3 -20q-8 -9 -15.5 -14t-14.5 -7q-8 -3 -16 -3t-14 2q-5 2 -10 4.5t-5 7.5q6 20 11 39t10 34q4 18 9 34q-29 -2 -45.5 -3.5l-27.5 -2.5
+q-6 -1 -8 5.5t-0.5 15t5 15.5t8.5 8q8 2 29.5 5.5t51.5 5.5q1 6 2 10.5t2 9.5l6 21q-26 -2 -48 -4.5t-30 -3.5q-6 -1 -7 6t2 15.5t9.5 16.5t14.5 9l31 5t39 5q3 15 6 28t6 24q-10 22 -24.5 58t-20.5 80q-6 25 -10 51q-4 21 -7 45t-4 42q8 5 15.5 9t12.5 6q6 3 11 4t10 3
+l10.5 2l10.5 2q-2 -20 -0.5 -44t3.5 -45l6 -50q7 -39 15 -70t14 -51q16 16 38 41.5t43 54.5q12 17 23 37q10 17 21 40.5t22 49.5q4 6 10.5 10.5t12.5 7.5q7 4 15 7z" />
+    <glyph glyph-name="mu" unicode="&#xb5;" horiz-adv-x="464" 
+d="M437 180q7 9 13 10.5t9.5 -1.5t4.5 -9.5t-3 -15.5q-34 -79 -77 -127t-105 -48q-26 0 -44.5 22t-28.5 54q-22 -34 -51 -52t-64 -18q-23 0 -40.5 5t-31.5 13q-8 -34 -16 -63l-19 -69q-11 -35 -25.5 -52t-30.5 -23t-32 -5t-29 2q8 8 15.5 24t13.5 33q7 19 14 41
+q5 18 12.5 47.5l16.5 63.5l18 71l17.5 71l16 62t12.5 45q6 21 8 27q8 27 21.5 46.5t38.5 26.5q9 2 19 4q8 1 16.5 1t16.5 -4q-26 -63 -39.5 -105.5l-21.5 -68.5q-9 -31 -11 -49q-5 -42 7.5 -63.5t50.5 -21.5q23 0 45.5 18t40.5 47q-1 8 -1.5 15t-0.5 14q0 30 5 59t12 53.5
+t14.5 44t13.5 30.5q10 23 18 28t28 6q16 0 21 -1q10 -3 10 -12q0 -14 -2 -44t-10 -62q-14 -51 -24.5 -73.5t-20.5 -35.5q2 -54 14 -74t29 -20q28 0 51.5 18.5t40.5 42t28.5 45t15.5 27.5z" />
+    <glyph glyph-name="ordfeminine" unicode="&#xaa;" horiz-adv-x="382" 
+d="M262 -9q-27 1 -69 0.5t-84 -1.5q-28 -1 -56 -4q-24 -2 -53.5 -6.5t-55.5 -11.5q-1 8 0 15.5t3 14.5q2 8 4 15q4 10 11 21t13 14q5 2 20 4t36.5 3.5t47 2.5t51.5 1q51 1 85.5 -0.5t66.5 -4.5q14 -2 16 -8.5t-4 -25.5q-6 -17 -12.5 -23.5t-19.5 -5.5zM48 106q-13 0 -27 8.5
+t-23.5 27t-12.5 47t6 68.5q13 54 40 98.5t59 76t63 47.5t52 14q25 -3 39 -14q12 -9 16 -26t-15 -46q14 3 21 4t12 1q4 0 7 -1q1 -2 1 -8t-2.5 -21t-7.5 -40.5t-14 -66.5l-3.5 -14t-3 -13t-3 -15.5t-3.5 -21.5q-2 -8 -2 -18t2.5 -18.5t8 -14t15.5 -5.5q13 0 31 12.5t36 29
+t33 33t23 26.5t15.5 11.5t10.5 -3.5t0 -16.5t-15 -27.5q-26 -33 -50.5 -57t-50.5 -40q-18 -13 -43.5 -15t-42.5 10q-7 6 -12 17q-5 10 -8.5 26t-2.5 40q-22 -36 -47.5 -55t-48.5 -28q-26 -11 -53 -12zM98 346q-14 -23 -21.5 -49t-10.5 -49t-1 -40.5t8 -23.5q14 -14 34 -7
+t38.5 22.5t32 33t15.5 24.5q4 18 10.5 42t11 46t6.5 37t-2 14q-5 -1 -10 -3q-11 -4 -25 -5q7 14 8.5 23t0.5 14q-1 6 -5 10q-9 8 -33.5 -12.5t-56.5 -76.5z" />
+    <glyph glyph-name="ordmasculine" unicode="&#xba;" horiz-adv-x="327" 
+d="M224 54q13 -1 15 -8t-3 -24q-6 -17 -11.5 -24.5t-16.5 -6.5q-23 2 -58.5 1l-71.5 -2q-23 -1 -47 -4q-20 -2 -44.5 -6.5t-47.5 -11.5q-1 8 0 15.5t3 14.5q2 8 3 15q3 10 9.5 21t11.5 13q3 2 16 4.5t31 4t40 3t43 1.5q44 0 73 -1.5t55 -4.5zM362 391q18 17 24.5 6t-8.5 -30
+l-15 -17.5t-25 -26t-35 -30t-43 -27.5q-8 -33 -23.5 -63t-36.5 -52.5t-48 -36t-58 -13.5q-36 0 -56.5 15.5t-30.5 39t-12.5 51t-2.5 51.5q0 35 15 80t44 81q11 31 42.5 45.5t64.5 14.5q7 0 9 -1q12 -1 29.5 -9t33.5 -24t27.5 -41t11.5 -59v-14.5t-1 -14.5q26 14 49.5 34.5z
+M98 154q32 0 53 27t34 60q-6 -1 -12 -1h-12q-35 0 -58.5 19.5t-37.5 50.5q-12 -36 -12 -70q0 -16 2 -31.5t7 -27.5t13.5 -19.5t22.5 -7.5zM207 331q1 17 -0.5 34.5t-6 32t-12.5 24t-18 9.5q-32 0 -61 -35q-1 -5 -2 -9t-1 -9q0 -14 1.5 -29t9 -28t23 -21t42.5 -8h9.5t9.5 1
+q6 24 6 38z" />
+    <glyph glyph-name="ae" unicode="&#xe6;" horiz-adv-x="609" 
+d="M227 86q-8 -12 -22 -29.5t-35 -33.5t-49.5 -27t-64.5 -11q-14 0 -30 9.5t-27 30t-14 53t8 77.5q14 61 44.5 111t66.5 85.5t71 53.5t58 16q34 -3 47 -16t14.5 -28t-4.5 -29.5t-9 -20.5l10 2l10 2q32 38 71 63t81 25q38 0 54.5 -19t13.5 -47q-3 -31 -17 -57t-34 -47
+t-42.5 -38l-42.5 -31l-42 -28.5l-36 -24.5q1 -25 9.5 -42t20.5 -27.5t27.5 -15t31.5 -4.5q33 0 69.5 21t72 51.5t66 63.5l51.5 57q7 9 15 10.5t12.5 -2t5 -11.5t-6.5 -19q-30 -44 -68.5 -85.5t-81 -74.5t-87 -53t-86.5 -20q-17 0 -37 6t-38 19.5t-33 34.5t-23 50zM423 362
+q-12 0 -28.5 -12t-32.5 -34.5t-29.5 -55t-20.5 -74.5l25.5 18.5l29.5 20.5q42 33 58.5 58t18.5 43q4 36 -21 36zM84 73q15 -14 33.5 -10.5t37.5 16.5t36 31t28 33q0 23 4.5 49.5t9.5 50.5t9.5 42.5t6.5 24.5q-5 -2 -11 -3q-5 -2 -12.5 -2.5t-15.5 -2.5q8 16 9.5 26.5
+t0.5 16.5q-1 7 -4 11q-11 9 -38.5 -14.5t-63.5 -86.5q-15 -26 -24 -55.5t-12.5 -55.5t-1.5 -45.5t8 -25.5z" />
+    <glyph glyph-name="oslash" unicode="&#xf8;" horiz-adv-x="416" 
+d="M489 321q10 9 17 10t10 -4t1 -14t-11 -20q-5 -6 -25 -24t-48.5 -39t-61.5 -41t-63 -30q-9 -38 -26 -71t-41 -57t-54 -37.5t-65 -13.5q-31 0 -51 10q-6 -8 -10 -16l-8.5 -14.5t-7.5 -13.5q-17 -8 -30 -11.5t-23 -5.5q-11 -2 -21 -2q-20 0 -21.5 4.5t6.5 18.5q3 5 22 32
+l45 62q-11 26 -13.5 56t-2.5 56q0 19 4.5 42t12.5 47t20.5 48t29.5 44q6 17 18.5 30t29 21.5t35.5 13t38 4.5q2 0 5 -1t5 -2q10 -1 23.5 -5.5t27.5 -14.5l10 15q13 20 27.5 29.5t45.5 15.5q26 6 34.5 4.5t5.5 -5.5q-8 -12 -28.5 -39l-50.5 -69q9 -16 15 -35.5t6 -44.5
+q0 -8 -1 -19t-3 -20q21 8 45 20.5t47.5 27t44.5 29.5t35 29zM127 38q18 0 32.5 8.5t27 22t22 31t16.5 36.5q-7 -1 -13.5 -1.5t-13.5 -0.5q-40 0 -66.5 22.5t-42.5 57.5q-6 -21 -9.5 -41t-3.5 -38t2 -35.5t7.5 -31t15.5 -22t26 -8.5zM250 238q1 19 -0.5 39t-7 36.5t-14 27
+t-20.5 10.5q-20 0 -37 -10.5t-32 -29.5q-3 -9 -3 -19q0 -16 1.5 -33.5t10 -31.5t25.5 -23.5t48 -9.5q5 0 11 0.5t11 1.5q3 13 4.5 23.5t2.5 18.5z" />
+    <glyph glyph-name="questiondown" unicode="&#xbf;" horiz-adv-x="423" 
+d="M128 -30q-25 0 -58.5 7t-62 25t-46 48.5t-11.5 76.5q6 49 25 89t46 71.5t58.5 55t63 40t60 25.5t48.5 12l24 103q4 17 12 33.5t21.5 28.5t33 18.5t46.5 5.5l-51 -201q-4 -17 -17 -28t-47 -19q-44 -8 -89 -27.5t-81 -60.5q-9 -11 -20 -27.5t-20.5 -36t-16.5 -40.5t-10 -42
+q-3 -20 1 -37.5t16 -30.5t33.5 -21t54.5 -8q26 0 49 8t40 21.5t28 30.5t13 35q1 10 0 21q-1 8 -4 17.5t-11 16.5q45 12 67.5 3t31.5 -25q11 -18 9 -45q-5 -38 -33 -65t-64.5 -44.5t-75 -25.5t-63.5 -8zM352 655q-26 0 -44 11t-16 31q1 10 8.5 21t19 20t26 14.5t31.5 5.5
+q27 0 45 -11.5t16 -30.5q-3 -22 -23.5 -41.5t-62.5 -19.5z" />
+    <glyph glyph-name="exclamdown" unicode="&#xa1;" horiz-adv-x="255" 
+d="M40 -22q-10 -2 -21 -2q-9 0 -19.5 2t-19.5 9l153 563q3 11 18 22t31.5 17.5t28.5 6.5t10 -10q-4 -16 -18 -78l-15 -66.5l-21.5 -95.5l-29 -130l-38.5 -170q-2 -7 -3 -14q-1 -6 -0.5 -12t2.5 -8q-8 -10 -18 -16t-19 -10zM194 653q-25 -4 -41 5t-14 31q1 13 10.5 24.5
+t23 20.5t28.5 14t26 5q20 0 35 -9t13 -29q-2 -26 -27 -41.5t-54 -20.5z" />
+    <glyph glyph-name="logicalnot" unicode="&#xac;" horiz-adv-x="525" 
+d="M480 400q13 -1 19 -8.5t6 -20t-4 -29.5l-9 -38q-10 -40 -17.5 -64t-14.5 -37.5t-15 -19.5t-20 -10q-9 -2 -17 -4t-15.5 -2t-15.5 2q10 22 20 49l18 54t18 66q-21 0 -48 1l-55 2t-55.5 1t-50.5 -2q-37 0 -77 -3q-34 -2 -74 -6.5t-78 -11.5q-1 7 0.5 15t3.5 15q3 8 6 15
+q5 9 15.5 20t18.5 14q6 2 27 4t51 4t65.5 3t70.5 1q71 0 127 -3.5z" />
+    <glyph glyph-name="guillemotleft" unicode="&#xab;" horiz-adv-x="355" 
+d="M196 389q-3 -5 -18 -24l-36 -46.5l-47 -60.5l-51 -67q2 -7 13 -30q8 -20 25.5 -59.5l48.5 -108.5q-4 -3 -8.5 -4t-9.5 -2t-12 -1q-13 0 -17 2.5t-6 8.5q0 1 -9.5 15.5l-22.5 35.5l-28.5 45.5l-28.5 46l-21.5 36t-8.5 15.5q2 4 20 24l47 52.5l92 100.5q11 12 20 18t32 10
+q20 3 24 -1t2 -6zM318 396q19 3 23.5 -1t2.5 -6q-3 -5 -17.5 -24l-36 -46.5l-47 -60.5l-50.5 -67q2 -7 12 -30l24 -59.5l45 -108.5q-4 -3 -8.5 -4t-9.5 -2t-11 -1q-14 0 -18 2.5t-6 8.5q0 1 -9 15.5l-21.5 35.5l-27 45.5l-27 46l-20.5 36t-8 15.5q2 4 20 24l46.5 52.5
+l90.5 100.5q11 12 21 18t32 10z" />
+    <glyph glyph-name="guillemotright" unicode="&#xbb;" horiz-adv-x="355" 
+d="M77 -6l17.5 23l36 46.5l47.5 60.5l51 67q-2 6 -13 30l-26.5 59.5l-48.5 109.5q4 2 9 3l10 2t11 1q13 0 18 -2t7 -8q0 -1 9 -15.5l22.5 -36l28.5 -46l28 -46l21.5 -36t8.5 -15.5q-2 -4 -20 -24l-47 -53l-91 -100q-11 -11 -21 -17t-33 -11q-18 -3 -22.5 1.5t-2.5 6.5z
+M-45 -14q-20 -3 -24 1.5t-2 6.5l18 23l36 46.5l46.5 60.5l51.5 67q-2 6 -12 30q-8 20 -25 59.5l-46 109.5q4 2 9 3l10 2t12 1q13 0 17 -2t6 -8q0 -1 9 -15.5l21.5 -36l27 -46l27 -46l21 -36t8.5 -15.5q-2 -4 -20 -24l-47.5 -53l-91.5 -100q-11 -11 -20 -17t-32 -11z" />
+    <glyph glyph-name="ellipsis" unicode="&#x2026;" horiz-adv-x="629" 
+d="M51 76q26 4 41.5 -4.5t13.5 -31.5q-1 -13 -10.5 -24.5t-23 -20.5t-28.5 -14t-26 -5q-20 0 -35.5 9t-13.5 29q1 13 8.5 23.5t19 18.5t26 13t28.5 7zM256 76q26 4 41.5 -4.5t13.5 -31.5q-1 -13 -10.5 -24.5t-23 -20.5t-28.5 -14t-26 -5q-20 0 -35.5 9t-13.5 29
+q1 13 8.5 23.5t19 18.5t26 13t28.5 7zM461 76q26 4 41.5 -4.5t13.5 -31.5q-1 -13 -10.5 -24.5t-23 -20.5t-28.5 -14t-26 -5q-21 0 -36 9t-13 29q1 13 8.5 23.5t19 18.5t26 13t28.5 7z" />
+    <glyph glyph-name="uni00A0" unicode="&#xa0;" horiz-adv-x="287" 
+ />
+    <glyph glyph-name="Agrave" unicode="&#xc0;" horiz-adv-x="566" 
+d="M433 753q35 0 57.5 -19.5t19.5 -70.5q-1 -17 -8 -63.5l-17 -109.5l-22.5 -135.5l-23.5 -141.5h21q10 0 22 1t25 3q-5 -12 -11 -22.5t-12 -18.5q-7 -9 -14 -16q-9 -11 -21 -19.5t-23 -13.5q-7 -49 -11.5 -87.5t-5.5 -63.5q-2 -38 2 -71q3 -29 12 -59t29 -48l-116 -38
+q-12 17 -17.5 45.5t-7.5 56.5q-3 33 -1 68t11 91.5l20 123.5q-20 6 -43.5 10t-52.5 4q-26 0 -54.5 -2t-56.5 -5q-12 -44 -24 -93q-13 -53 -23.5 -90.5t-20 -62.5t-19 -40t-20.5 -22q-12 -6 -30 -11q-17 -5 -43 -10t-67 -8q15 18 26 33t22 37t24.5 56.5l34.5 90.5
+q9 23 18.5 50.5t20.5 56.5q-36 -5 -61 -9t-30 -6q-8 -1 -13 0q-13 2 -14 13q1 14 9.5 19t25.5 12q8 4 36.5 14.5t69.5 22.5l29.5 83.5l28.5 79.5l27 71.5t24 57.5q17 37 43.5 81.5t61 83.5t76 65t87.5 26zM422 545q11 45 15 74t3 45.5t-6.5 23t-13.5 6.5q-13 0 -32 -10
+t-40 -28.5t-41.5 -46t-36.5 -62.5q-23 -52 -52 -127.5t-63 -192.5q20 3 39.5 5t38.5 2q34 0 65 -2.5t57 -5.5l18.5 94.5l18.5 88.5l16.5 77t13.5 59zM411 948q6 -3 21.5 -13.5t32.5 -24l32.5 -27t20.5 -22.5q11 -18 2.5 -27.5t-18.5 -15.5l-71.5 38l-46.5 24l-33 17
+q-9 5 -7 18.5t13 25.5q16 16 28 15t26 -8z" />
+    <glyph glyph-name="Atilde" unicode="&#xc3;" horiz-adv-x="566" 
+d="M433 753q35 0 57.5 -19.5t19.5 -70.5q-1 -17 -8 -63.5l-17 -109.5l-22.5 -135.5l-23.5 -141.5h21q10 0 22 1t25 3q-5 -12 -11 -22.5t-12 -18.5q-7 -9 -14 -16q-9 -11 -21 -19.5t-23 -13.5q-7 -49 -11.5 -87.5t-5.5 -63.5q-2 -38 2 -71q3 -29 12 -59t29 -48l-116 -38
+q-12 17 -17.5 45.5t-7.5 56.5q-3 33 -1 68t11 91.5l20 123.5q-20 6 -43.5 10t-52.5 4q-26 0 -54.5 -2t-56.5 -5q-12 -44 -24 -93q-13 -53 -23.5 -90.5t-20 -62.5t-19 -40t-20.5 -22q-12 -6 -30 -11q-17 -5 -43 -10t-67 -8q15 18 26 33t22 37t24.5 56.5l34.5 90.5
+q9 23 18.5 50.5t20.5 56.5q-36 -5 -61 -9t-30 -6q-8 -1 -13 0q-13 2 -14 13q1 14 9.5 19t25.5 12q8 4 36.5 14.5t69.5 22.5l29.5 83.5l28.5 79.5l27 71.5t24 57.5q17 37 43.5 81.5t61 83.5t76 65t87.5 26zM422 545q11 45 15 74t3 45.5t-6.5 23t-13.5 6.5q-13 0 -32 -10
+t-40 -28.5t-41.5 -46t-36.5 -62.5q-23 -52 -52 -127.5t-63 -192.5q20 3 39.5 5t38.5 2q34 0 65 -2.5t57 -5.5l18.5 94.5l18.5 88.5l16.5 77t13.5 59zM589 902q17 -10 17 -33q0 -12 -7.5 -24t-21 -20.5t-32 -12.5t-40.5 -1q-23 3 -41 9t-33 10.5t-29 6t-30 -4.5l-18 -8
+l-16.5 -8.5t-15.5 -9.5q-6 1 -10 4t-7 5q-4 3 -5 6q-4 6 -6 12q-2 5 -2.5 11t2.5 11q12 16 29.5 24t34.5 11q19 4 40 3q27 -1 43.5 -6t30.5 -10.5t28 -8.5t37 0q7 1 16 5q8 4 17 10.5t19 18.5z" />
+    <glyph glyph-name="Otilde" unicode="&#xd5;" 
+d="M524 336q-5 -63 -20 -126.5t-37.5 -122.5t-52.5 -110.5t-66.5 -89.5t-78 -60t-86.5 -22q-9 0 -27.5 3.5t-39.5 16t-42.5 36.5t-37.5 64.5t-23 100.5t0 145q12 134 49.5 243.5t86 187.5t100.5 120.5t92 42.5q16 0 26.5 -6.5t16.5 -16.5q7 2 16 3t20 1q29 0 51.5 -30
+t37 -84t19 -129.5t-3.5 -166.5zM186 -137q39 0 80 40t76 108.5t60 159.5t34 193q2 27 3 62t0 71t-4.5 71.5t-9.5 62.5t-15 44t-21 17q-13 -1 -26 -8q-11 -6 -25.5 -19.5t-28.5 -37.5q-3 2 -4.5 6t-3.5 8t-3 9q-2 3 -2 7.5t-1 10.5q-20 -22 -47.5 -62.5t-55 -100.5
+t-50 -141.5t-31.5 -185.5q-8 -92 -4 -153t15.5 -97t28.5 -50.5t35 -14.5zM528 912q17 -10 17 -33q0 -12 -7.5 -24t-21 -20.5t-32 -12.5t-40.5 -1q-23 3 -41 9t-33 10.5t-29 6t-30 -4.5l-18 -8l-16.5 -8.5t-15.5 -9.5q-6 1 -10 4t-7 5q-4 3 -5 6q-4 6 -6 12q-2 5 -2.5 11
+t2.5 11q12 16 29.5 24t34.5 11q19 4 40 3q27 -1 43.5 -6t30.5 -10.5t28 -8.5t37 0q7 1 16 5q8 4 17 10.5t19 18.5z" />
+    <glyph glyph-name="OE" unicode="&#x152;" horiz-adv-x="941" 
+d="M812 754q38 0 65.5 -12.5t44.5 -31t25.5 -40t8.5 -39.5q1 -33 -8 -67t-23.5 -61.5t-32.5 -45t-35 -17.5q-13 0 -27 4q-12 3 -28 10t-32 21q26 10 46 28.5t33.5 41.5t20.5 47.5t6 46.5q-2 32 -15.5 49.5t-45.5 17.5q-41 0 -83 -20.5t-74 -57t-50.5 -87t-12.5 -109.5
+q2 -23 9.5 -41.5t17.5 -34t21.5 -27.5t21.5 -21q15 2 29.5 3.5t26.5 1.5q17 0 33.5 -6t16.5 -17q0 -8 -4 -18t-11.5 -19t-18.5 -15t-26 -6q-13 0 -29 6t-34 15q-38 -8 -69 -28.5t-53 -48.5t-34 -61t-11 -64q1 -29 9 -58.5t25.5 -52.5t45.5 -37.5t67 -14.5q29 0 55.5 12.5
+t49 31.5t41.5 42t33 45t23.5 40l13.5 26q3 6 9 9t11 1.5t7.5 -7.5t-0.5 -18q-8 -36 -29.5 -80.5t-56 -83.5t-81.5 -65.5t-104 -26.5q-72 0 -128 35t-81 93q-42 -62 -95 -99.5t-113 -37.5q-9 0 -27.5 3.5t-39.5 16t-42.5 36.5t-37.5 64.5t-23 100.5t0 145q12 134 49.5 243.5
+t86 187.5t100.5 120.5t92 42.5q16 0 26.5 -6.5t16.5 -16.5q7 2 16 3t20 1q35 0 60.5 -42t37.5 -117q23 39 57 69.5t73 52.5t81.5 33.5t82.5 11.5zM436 364q2 27 3 62t0 71t-4.5 71.5t-9.5 62.5t-15 44t-21 17q-13 -1 -26 -8q-11 -6 -25.5 -19.5t-28.5 -37.5q-3 2 -4.5 6
+t-3.5 8t-3 9q-2 3 -2 7.5t-1 10.5q-20 -22 -47.5 -62.5t-55 -100.5t-50 -141.5t-31.5 -185.5q-8 -92 -4 -153t15.5 -97t28.5 -50.5t35 -14.5q39 0 80 40t76 108.5t60 159.5t34 193zM513 251l39 20.5t39 16.5q-38 19 -66 54q0 -2 -0.5 -3t-0.5 -3q-2 -21 -4.5 -42t-6.5 -43z
+" />
+    <glyph glyph-name="oe" unicode="&#x153;" horiz-adv-x="598" 
+d="M682 208q-30 -44 -68.5 -85.5t-81 -74t-87 -52.5t-86.5 -20q-14 0 -30 4.5t-32 13.5t-30 23t-24 33q-26 -32 -59 -51t-73 -19q-41 0 -64.5 17.5t-35 43.5t-14 57t-2.5 58q0 19 4.5 42t12.5 47t20.5 48t29.5 44q6 17 18.5 30t29 21.5t35.5 13t37 4.5q3 0 5.5 -1t5.5 -2
+q10 0 23.5 -5t28 -15t28 -25t22.5 -36q33 42 74 69.5t85 27.5q38 0 54.5 -19t14.5 -47q-4 -44 -28.5 -79.5t-57 -63.5t-68 -46.5t-61.5 -27.5q0 -28 7 -47t19 -30t28 -16t33 -5q36 0 74.5 22t74 53t65.5 64l49 55q7 8 14.5 9.5t12 -2t4.5 -12t-7 -19.5zM425 362
+q-12 0 -27.5 -11t-31 -32t-29 -51.5t-21.5 -68.5q16 4 38 18t42 32.5t34 39t16 37.5q2 19 -4 27.5t-17 8.5zM115 38q18 0 32.5 8t26.5 21.5t21.5 31t16.5 35.5q-42 1 -78 21.5t-56 60.5q-7 -21 -11 -41.5t-4 -39.5q0 -18 2 -35.5t8 -31t16 -22t26 -8.5zM238 238q2 19 0 39
+t-7.5 36.5t-14 27t-20.5 10.5q-19 0 -36.5 -10.5t-32.5 -29.5q-3 -9 -3 -19q0 -15 7.5 -31.5t21.5 -31t33.5 -24t43.5 -11.5q0 2 1 4q7 24 7 40z" />
+    <glyph glyph-name="endash" unicode="&#x2013;" horiz-adv-x="362" 
+d="M310 289q-28 1 -71 0.5t-85 -1.5q-28 -1 -57 -4q-25 -2 -55 -6t-57 -12q-1 8 0 15.5t3 14.5q2 8 4 15q4 10 11.5 21t13.5 14q5 2 20.5 4t37 3.5t48 2.5t52.5 1q53 1 88 -0.5t67 -4.5q14 -2 16.5 -9t-3.5 -25q-6 -17 -13 -23.5t-20 -5.5z" />
+    <glyph glyph-name="emdash" unicode="&#x2014;" horiz-adv-x="521" 
+d="M496 343q8 -2 10 -9.5t-4 -27.5q-6 -18 -13.5 -23t-14.5 -7q-3 -1 -27 1t-58.5 4.5t-74.5 4.5t-76 1q-68 -2 -123 -4.5t-101 -8.5q-20 -2 -25 8t-3 23q3 13 9 28.5t21 17.5q48 5 92 7t79 3q40 1 77 0q46 2 87 0t71.5 -5.5t50 -7.5t23.5 -5z" />
+    <glyph glyph-name="quotedblleft" unicode="&#x201c;" horiz-adv-x="296" 
+d="M132 588q15 -2 26 -15t8 -36q-5 -29 -30 -49t-54 -16q-26 3 -34 25t-3 50q3 14 9 33t17 39t27.5 39t39.5 34q10 6 15.5 5.5t7.5 -5t0.5 -11t-7.5 -12.5q-10 -13 -23 -35t-18 -48q11 3 19 2zM268 588q17 -2 27.5 -15t7.5 -36q-2 -15 -10 -27.5t-19.5 -21.5t-26 -13.5
+t-28.5 -2.5q-26 3 -34 25t-3 50q3 14 9 33t17 39t27.5 39t39.5 34q10 6 15.5 5.5t8 -5t0.5 -11t-7 -12.5q-11 -13 -23.5 -35t-17.5 -48q10 3 17 2z" />
+    <glyph glyph-name="quotedblright" unicode="&#x201d;" horiz-adv-x="295" 
+d="M283 697q26 -3 34 -25.5t3 -49.5q-3 -14 -9 -33t-17 -39.5t-27.5 -39.5t-39.5 -34q-10 -6 -15.5 -5t-7.5 5.5t-0.5 11t7.5 12.5q11 12 23.5 34.5t17.5 48.5q-12 -3 -18 -2q-16 2 -27 14.5t-8 36.5q5 29 30 48.5t54 16.5zM147 697q26 -3 33.5 -25.5t2.5 -49.5
+q-2 -14 -8 -33t-17.5 -39.5t-28 -39.5t-39.5 -34q-10 -6 -15.5 -5t-7.5 5.5t-0.5 11t6.5 12.5q11 12 23.5 34.5t17.5 48.5q-10 -3 -17 -2q-16 2 -26.5 14.5t-7.5 36.5q2 15 10 27.5t19.5 21.5t25.5 13t29 3z" />
+    <glyph glyph-name="quoteleft" unicode="&#x2018;" horiz-adv-x="159" 
+d="M132 588q15 -2 26 -15t8 -36q-5 -29 -30 -49t-54 -16q-26 3 -34 25t-3 50q3 14 9 33t17 39t27.5 39t39.5 34q10 6 15.5 5.5t7.5 -5t0.5 -11t-7.5 -12.5q-10 -13 -23 -35t-18 -48q11 3 19 2z" />
+    <glyph glyph-name="quoteright" unicode="&#x2019;" horiz-adv-x="158" 
+d="M97 577q-16 2 -26.5 14.5t-7.5 35.5q2 15 10 27.5t19.5 21.5t25.5 13t29 3q26 -3 33.5 -25.5t2.5 -49.5q-2 -14 -8 -33t-17.5 -39t-28 -39t-39.5 -34q-10 -6 -15.5 -5.5t-7.5 5t-0.5 11.5t6.5 13q11 11 23.5 33.5t17.5 48.5q-5 -1 -9 -2t-8 1z" />
+    <glyph glyph-name="divide" unicode="&#xf7;" horiz-adv-x="359" 
+d="M163 337q-28 -1 -57 -4q-25 -2 -54 -6t-56 -12q-2 8 -1 15.5l2 14.5q1 8 3 15q3 10 10 21t14 14q4 2 19.5 4t37 4t47.5 3.5t52 1.5q53 0 88 -1.5t67 -5.5q14 -2 17 -8.5t-2 -24.5q-5 -17 -11 -24t-20 -6q-26 1 -69.5 0.5t-86.5 -1.5zM154 480q-1 18 18.5 32.5t45.5 14.5
+q25 0 34.5 -8t10.5 -22q1 -11 -6 -19.5t-17.5 -14.5t-23 -9t-23.5 -3q-20 0 -29 8t-10 21zM162 281q16 0 28.5 -5t14.5 -21q1 -19 -20 -36.5t-57 -17.5q-18 0 -24.5 8.5t-7.5 16.5q-1 19 16 37t50 18z" />
+    <glyph glyph-name="ydieresis" unicode="&#xff;" horiz-adv-x="416" 
+d="M263 368q13 10 25.5 15.5t22.5 7.5q11 3 22 2q27 -2 33.5 -17t1.5 -48q-3 -17 -12 -43l-21 -63.5t-25.5 -85.5t-25.5 -108q-12 -49 -26 -113l-28.5 -135t-35.5 -181q-5 -25 -21.5 -29t-34.5 4q-7 4 -13 9l-11 11.5t-10 17.5l40.5 153l31.5 120l28 106l9.5 41.5t9.5 40.5
+q-13 -21 -28 -40t-33 -33t-38.5 -21.5t-42.5 -4.5q-54 7 -76.5 40t-19.5 86q1 21 6 46t11 48t11.5 41.5t8.5 26.5q12 38 17.5 65t-8.5 45q14 9 26.5 12.5t22.5 5.5q11 1 22 0q27 -4 31.5 -20t-3.5 -48q-4 -17 -13 -43.5l-19 -54.5l-18 -51.5t-9 -33.5q-9 -45 -1 -69.5
+t35 -24.5q13 0 29 11.5t32.5 30.5t32.5 43.5t29.5 49.5t24 49t15.5 43q7 37 9 58t-14 38zM290 480q-21 0 -29.5 8t-8.5 22q0 9 6 18t15.5 16t22 11t25.5 4q25 0 34.5 -8.5t9.5 -22.5q0 -11 -7.5 -20t-18.5 -15t-24 -9.5t-25 -3.5zM207 534q0 -19 -22.5 -37.5t-59.5 -18.5
+q-19 0 -25 8.5t-6 17.5q0 19 18 38t53 19q16 0 29 -5t13 -22z" />
+    <glyph glyph-name="Ydieresis" unicode="&#x178;" horiz-adv-x="545" 
+d="M157 77q-67 0 -97.5 43t-25.5 116q4 45 17 115q11 60 33.5 151t61.5 220q12 8 24.5 12.5t22.5 6.5q11 3 23 4q9 1 19 1q8 0 16 -1.5t13 -5.5q-51 -131 -79.5 -224t-42.5 -153q-17 -70 -21 -115q-3 -55 16.5 -78t58.5 -23q31 0 63 23.5t62 67t55.5 105t43.5 138.5
+q8 43 18 86l18 79.5l19 79.5q9 8 19.5 12.5t19.5 7.5q11 4 22 5q10 1 20 0q8 -1 16.5 -3t13.5 -7q-17 -53 -29.5 -96l-21.5 -74l-19 -64q-8 -30 -19 -78l-27 -106l-39 -158l-15 -60t-23.5 -75t-36 -77.5t-53 -69.5t-74.5 -50t-100 -19q-33 1 -59 10q-23 8 -42.5 23.5
+t-22.5 44.5q5 11 11 20t12 17q7 9 14 17q7 7 15 13q7 5 15 9t16 4q4 -9 12 -21t20 -22.5t27 -17.5t33 -7q24 0 51 15.5t53.5 53t51.5 101.5t47 161q-13 -23 -33 -50t-47.5 -51t-64 -40t-81.5 -16zM463 807q-21 0 -29.5 8t-8.5 22q0 9 6 18t15.5 16t22 11t25.5 4
+q25 0 34.5 -8.5t9.5 -22.5q0 -11 -7.5 -20t-18.5 -15t-24 -9.5t-25 -3.5zM380 861q0 -19 -22.5 -37.5t-59.5 -18.5q-19 0 -25 8.5t-6 17.5q0 19 18 38t53 19q16 0 29 -5t13 -22z" />
+    <glyph glyph-name="fraction" unicode="&#x2044;" horiz-adv-x="615" 
+d="M586 749q24 5 33 3.5t7 -6.5l-27 -36l-51.5 -69.5l-67.5 -92.5l-74.5 -104l-72 -104t-60.5 -93l-58 -92l-49 -80.5l-42 -71.5q-17 -8 -30 -11.5t-23 -5.5q-11 -2 -21 -2q-20 0 -22 5t7 18l43 63l37.5 54.5l54.5 79.5l74.5 109.5l98.5 143.5l169 245q13 20 28 29.5
+t46 17.5z" />
+    <glyph glyph-name="Euro" unicode="&#x20ac;" horiz-adv-x="343" 
+d="M293 671q21 -1 40 -11q17 -8 33.5 -26.5t27.5 -51.5q-2 -2 -8.5 -13t-18.5 -19q-8 -5 -14.5 -7.5t-11.5 1.5q-4 2 -5.5 8t-1.5 11q0 9 -2.5 20t-7.5 20.5t-14 16t-22 6.5q-19 0 -39.5 -17.5t-40 -44.5t-37 -60t-30.5 -65q0 -1 -0.5 -1.5t-0.5 -1.5h15q23 0 45.5 -1
+t41 -2.5t32 -3t18.5 -2.5q9 -2 9.5 -8t-4.5 -16q-2 -3 -5 -7q-2 -3 -5 -6.5t-7 -6.5q-63 3 -102 3h-40q-4 1 -7.5 0.5t-8.5 -0.5q-3 -11 -6 -20.5l-6 -19.5h7q45 1 75 0.5t57 -2.5q12 -1 14 -6t-3 -19q-5 -13 -11 -18t-17 -4q-23 0 -60 -0.5t-74 -2.5q-5 -23 -7 -40t-3 -28
+t0.5 -30.5t8 -39t20 -34t37.5 -14.5q25 0 58.5 25.5t61.5 63.5q9 1 16 -2q4 -2 7 -4t6 -5q5 -5 3 -11q-25 -40 -50.5 -61.5t-47.5 -31.5q-26 -11 -49 -13q-30 0 -56.5 16.5t-45.5 44.5t-28.5 66t-5.5 82q0 2 0.5 5t0.5 5q-13 -1 -25 -3q-11 -2 -22.5 -4.5t-22.5 -4.5
+q-2 11 2 23q2 6 4 11q3 7 9.5 15.5t12.5 10.5q4 2 17 3t33 3q2 9 4.5 18.5t4.5 18.5q-9 -1 -19 -2q-8 -1 -18 -2t-19 -2q-3 5 -2.5 11t2.5 12q2 7 5 14q3 6 7 11q3 5 7.5 8.5t9.5 3.5q6 0 14 0.5t15 0.5q8 0 16 1q17 47 41.5 89.5t54.5 75t65 52t73 19.5z" />
+    <glyph glyph-name="guilsinglleft" unicode="&#x2039;" horiz-adv-x="207" 
+d="M170 396q20 3 24 -1t2 -6q-3 -5 -18 -24l-36 -46.5l-47 -60.5l-51 -67q2 -7 12 -30q8 -20 25 -59.5l46 -108.5q-4 -3 -9 -4l-10 -2q-6 -1 -12 -1q-13 0 -17 2.5t-6 8.5q-1 1 -9.5 15.5l-21 35.5l-27 45.5l-27 46l-21 36t-8.5 15.5q2 4 20 24l47 52.5l92 100.5
+q11 12 20 18t32 10z" />
+    <glyph glyph-name="guilsinglright" unicode="&#x203a;" horiz-adv-x="207" 
+d="M-45 -14q-20 -3 -24 1.5t-2 6.5l18 23l36 46.5l46.5 60.5l51.5 67q-2 6 -12 30q-8 20 -25 59.5l-46 109.5q4 2 9 3l10 2t12 1q13 0 17 -2t6 -8q0 -1 9 -15.5l21.5 -36l27 -46l27 -46l21 -36t8.5 -15.5q-2 -4 -20 -24l-47.5 -53l-91.5 -100q-11 -11 -20 -17t-32 -11z" />
+    <glyph glyph-name="fi" unicode="&#xfb01;" horiz-adv-x="563" 
+d="M433 546q-21 16 -21.5 34.5t9.5 35t25 28t26 13.5t18.5 -4.5t11.5 -17t4.5 -23.5t-2.5 -23q-3 -11 -11.5 -21.5t-19 -17t-22 -8.5t-18.5 4zM608 238q8 10 16 12.5t13.5 -1.5t6 -13.5t-6.5 -22.5q-9 -17 -26 -39.5t-38.5 -47.5t-46 -49.5t-47.5 -44t-43.5 -32t-34.5 -12.5
+q-17 -1 -33.5 5.5t-30 18t-22.5 27t-10 32.5q-1 15 -0.5 36t2.5 45.5t6 51.5t10 53q-27 -4 -55 -9t-60 -19l-34 -12q-14 -5 -29.5 -11.5t-25.5 -11.5l-23 -73q58 -41 89.5 -84t45.5 -79q17 -42 19 -82q0 -44 -13 -88.5t-34.5 -85t-50 -75.5t-60 -60t-64 -38t-61.5 -10
+q-21 2 -35 13.5t-21 29t-8 39t4 42.5q4 21 17 78q11 48 34 139.5l62 243.5q-11 11 -15.5 21.5t-6.5 20.5q-2 11 0 22q4 14 12 26q7 11 19 22.5t32 21.5q13 32 23.5 67.5l18.5 64.5q9 34 16 68q25 85 26 138.5t-2 70.5l-2 14q-2 6 -3.5 13.5t-3.5 14.5q11 6 19.5 10t14.5 6
+q7 3 13 4q23 5 43.5 5.5t22.5 -7.5q1 -5 2.5 -18t1.5 -32t-3 -42.5t-11 -49.5l-19 -64l-29 -93.5l-47 -149.5q23 8 47.5 13.5t44.5 9.5q23 4 45 7q30 5 52 6q8 26 16 47t19 35q5 6 19 10t29 6.5t27.5 3t14.5 -0.5q1 -1 -5 -21t-15 -47l-19 -55.5t-15 -46.5t-12.5 -40.5
+t-12.5 -44t-7 -40.5t3 -29q5 -12 11 -16.5t13 -4.5q20 0 50.5 22t62 52.5t58.5 62.5t40 51zM163 -56q-9 21 -21 41q-11 17 -26.5 36.5t-36.5 35.5q-14 -50 -24.5 -92t-17.5 -74q-9 -37 -14 -67l-18.5 -75t-15 -66.5t-4.5 -47.5t13 -18q29 -2 60.5 22.5t57.5 62t43 81
+t17 80.5q0 41 -13 81z" />
+    <glyph glyph-name="fl" unicode="&#xfb02;" horiz-adv-x="529" 
+d="M528 694q6 -5 5.5 -20t-2.5 -31l-9 -41l-32 -124l-48.5 -188l-76.5 -300q-6 -5 -13 -7t-13 -2q-7 0 -14 1q-8 2 -15 6q-6 4 -12 10.5t-9 17.5l21 87l18 78l19 78q-34 -3 -67 -8t-72 -22l-34 -12q-14 -5 -29.5 -11.5t-25.5 -11.5l-23 -73q58 -41 89.5 -84t45.5 -79
+q17 -42 19 -82q0 -44 -13 -88.5t-34.5 -85t-50 -75.5t-60 -60t-64 -38t-61.5 -10q-21 2 -35 13.5t-21 29t-8 39t4 42.5q4 21 17 78q11 48 34 139.5l62 243.5q-11 11 -15.5 21.5t-6.5 20.5q-2 11 0 22q4 14 12 26q7 11 19 22.5t32 21.5q13 32 23.5 67.5l18.5 64.5q9 34 16 68
+q25 85 26 138.5t-2 70.5l-2 14q-2 6 -3.5 13.5t-3.5 14.5q11 6 19.5 10t14.5 6q7 3 13 4q23 5 43.5 5.5t22.5 -7.5q1 -5 2.5 -18t1.5 -32t-3 -42.5t-11 -49.5l-19 -64l-29 -93.5l-47 -149.5q23 8 47.5 13.5t44.5 9.5q23 4 45 7q26 4 44.5 5.5t32.5 2.5l22 92.5l20 84.5
+l15.5 67.5t8.5 40.5q3 19 5 37q2 16 2 33t-3 31q8 5 17.5 8t18.5 5q11 3 22 5t20 2q8 0 15 -1.5t9 -6.5zM163 -56q-9 21 -21 41q-11 17 -26.5 36.5t-36.5 35.5q-14 -50 -24.5 -92t-17.5 -74q-9 -37 -14 -67l-18.5 -75t-15 -66.5t-4.5 -47.5t13 -18q29 -2 60.5 22.5t57.5 62
+t43 81t17 80.5q0 41 -13 81z" />
+    <glyph glyph-name="periodcentered" unicode="&#xb7;" horiz-adv-x="173" 
+d="M92 393q26 4 41.5 -4.5t13.5 -31.5q-1 -13 -10.5 -24.5t-23 -20t-28.5 -13.5t-26 -5q-20 0 -35.5 8.5t-13.5 29.5q1 13 8.5 23.5t19 18t26 12.5t28.5 7z" />
+    <glyph glyph-name="quotesinglbase" unicode="&#x201a;" horiz-adv-x="193" 
+d="M47 103q26 -3 33.5 -25t2.5 -50q-2 -14 -8 -33t-17.5 -39.5t-28 -39.5t-39.5 -34q-10 -6 -15.5 -5t-7.5 5.5t0 11t7 12.5q11 12 23.5 34.5t17.5 48.5q-12 -3 -18 -2q-16 2 -26.5 14.5t-7.5 36.5q2 15 10 27.5t19.5 21.5t25.5 13.5t29 2.5z" />
+    <glyph glyph-name="quotedblbase" unicode="&#x201e;" horiz-adv-x="331" 
+d="M184 103q26 -3 34 -25t2 -50q-3 -14 -9 -33t-17 -39.5t-27.5 -39.5t-39.5 -34q-9 -6 -15 -5t-8 5.5t-0.5 11t7.5 12.5q11 12 23.5 34.5t17.5 48.5q-11 -4 -18 -2q-16 2 -27 14.5t-7 36.5q2 15 10 27.5t19.5 21.5t26 13.5t28.5 2.5zM47 103q26 -3 33.5 -25t2.5 -50
+q-2 -14 -8 -33t-17.5 -39.5t-28 -39.5t-39.5 -34q-10 -6 -15.5 -5t-7.5 5.5t0 11t7 12.5q11 12 23.5 34.5t17.5 48.5q-12 -3 -18 -2q-16 2 -26.5 14.5t-7.5 36.5q2 15 10 27.5t19.5 21.5t25.5 13.5t29 2.5z" />
+    <glyph glyph-name="perthousand" unicode="&#x2030;" horiz-adv-x="872" 
+d="M41 535q0 27 10.5 63t31.5 68.5t51.5 54.5t70.5 22q10 0 27 -7t33 -22.5t28 -39.5t12 -58q0 -42 -12 -83t-33.5 -74t-52.5 -53t-69 -20q-35 0 -54 14.5t-29 37t-12 48.5t-2 49zM241 600q1 15 -0.5 31t-6 29t-11 21.5t-15.5 8.5q-21 0 -40.5 -17t-33.5 -42.5t-22.5 -55.5
+t-8.5 -55q0 -14 1.5 -28t6 -25t12.5 -17.5t20 -6.5q26 0 44 20.5t29.5 47t17.5 52.5t7 37zM444 341q11 0 28 -7t33.5 -22t28 -39t11.5 -58q0 -42 -12 -83.5t-33.5 -74.5t-52.5 -53t-69 -20q-35 0 -54 15t-29 37t-12 48t-2 48q0 28 10.5 64t31 68.5t51 54.5t70.5 22zM480 199
+q1 15 0 31t-5.5 29t-11.5 21.5t-16 8.5q-21 0 -40 -17.5t-33 -43t-22 -55t-8 -54.5q0 -15 1.5 -28.5t6 -24.5t12.5 -17.5t20 -6.5q26 0 44 20.5t29 47t16.5 52.5t6.5 37zM558 749q25 5 33.5 3.5t6.5 -6.5l-27 -36l-51.5 -69.5l-67.5 -92.5l-74 -104l-71.5 -104t-60.5 -93
+l-59 -92l-49 -80.5l-42 -71.5q-17 -8 -30 -11.5t-23 -5.5q-11 -2 -20 -2q-20 0 -22.5 5t6.5 18l43 63l37.5 54.5l54.5 79.5l74.5 109.5l98.5 143.5l169 245q14 20 28.5 29.5t45.5 17.5zM731 341q11 0 28 -7t33 -22t27.5 -39t11.5 -58q0 -42 -11.5 -83.5t-33.5 -74.5
+t-52.5 -53t-68.5 -20q-35 0 -54.5 15t-29.5 37t-12 48t-2 48q0 28 10.5 64t31.5 68.5t51.5 54.5t70.5 22zM767 199q1 15 0 31t-5.5 29t-11.5 21.5t-16 8.5q-21 0 -40 -17.5t-33 -43t-22 -55t-8 -54.5q0 -15 1.5 -28.5t6 -24.5t12.5 -17.5t20 -6.5q25 0 43 20.5t29.5 47
+t17 52.5t6.5 37z" />
+    <glyph glyph-name="Acircumflex" unicode="&#xc2;" horiz-adv-x="566" 
+d="M433 753q35 0 57.5 -19.5t19.5 -70.5q-1 -17 -8 -63.5l-17 -109.5l-22.5 -135.5l-23.5 -141.5h21q10 0 22 1t25 3q-5 -12 -11 -22.5t-12 -18.5q-7 -9 -14 -16q-9 -11 -21 -19.5t-23 -13.5q-7 -49 -11.5 -87.5t-5.5 -63.5q-2 -38 2 -71q3 -29 12 -59t29 -48l-116 -38
+q-12 17 -17.5 45.5t-7.5 56.5q-3 33 -1 68t11 91.5l20 123.5q-20 6 -43.5 10t-52.5 4q-26 0 -54.5 -2t-56.5 -5q-12 -44 -24 -93q-13 -53 -23.5 -90.5t-20 -62.5t-19 -40t-20.5 -22q-12 -6 -30 -11q-17 -5 -43 -10t-67 -8q15 18 26 33t22 37t24.5 56.5l34.5 90.5
+q9 23 18.5 50.5t20.5 56.5q-36 -5 -61 -9t-30 -6q-8 -1 -13 0q-13 2 -14 13q1 14 9.5 19t25.5 12q8 4 36.5 14.5t69.5 22.5l29.5 83.5l28.5 79.5l27 71.5t24 57.5q17 37 43.5 81.5t61 83.5t76 65t87.5 26zM422 545q11 45 15 74t3 45.5t-6.5 23t-13.5 6.5q-13 0 -32 -10
+t-40 -28.5t-41.5 -46t-36.5 -62.5q-23 -52 -52 -127.5t-63 -192.5q20 3 39.5 5t38.5 2q34 0 65 -2.5t57 -5.5l18.5 94.5l18.5 88.5l16.5 77t13.5 59zM540 857q9 -15 17 -25.5t21 -16.5q-8 -5 -18.5 -6t-20.5 -1q-11 0 -24 2q-9 1 -16.5 4.5t-14.5 10.5t-14 19t-16 31
+q0 1 -0.5 1.5t-0.5 1.5l-51 -41t-16 -13q-16 -14 -32.5 -12t-29.5 1h-12q-5 0 -11 -0.5t-11 -1.5l17 14l25 20q15 11 32 25l16 13l20 16t19 14.5t12 8.5q3 3 14 4.5t23.5 1.5t23 -1.5t12.5 -5.5q2 -3 7 -12l10.5 -19.5t11 -19.5t7.5 -13z" />
+    <glyph glyph-name="Ecircumflex" unicode="&#xca;" horiz-adv-x="536" 
+d="M195 -186q-47 0 -87.5 15t-71 42t-48.5 63.5t-19 79.5q-1 56 17.5 100t49 78t69.5 57.5t80 38.5q-22 12 -41.5 29t-34.5 38t-24 44t-9 46q-2 70 28.5 127t78.5 97.5t107.5 62.5t116.5 22q38 0 65 -12.5t44 -31t25.5 -40t9.5 -39.5q1 -33 -8.5 -67t-24 -61.5t-32.5 -45
+t-35 -17.5q-13 0 -27 4q-12 3 -28 10t-32 21q26 10 46 28.5t33.5 41.5t20 47.5t6.5 46.5q-1 32 -15 49.5t-45 17.5q-42 0 -84 -20.5t-74.5 -57t-51 -87t-12.5 -109.5q5 -45 27.5 -76t42.5 -48q16 2 30 3.5t26 1.5q17 0 34 -6t17 -17q0 -8 -3.5 -18t-11.5 -19t-19 -15t-26 -6
+q-12 0 -29 6t-34 15q-38 -8 -69 -28.5t-52.5 -48.5t-33.5 -61t-11 -64q1 -29 9 -58.5t25 -52.5t44.5 -37.5t66.5 -14.5q29 0 55.5 12.5t49.5 31.5t42 42t33 45t23.5 40l13.5 26q3 6 8.5 9t11 1.5t8.5 -7.5t0 -18q-8 -36 -30 -80.5t-56.5 -83.5t-81 -65.5t-103.5 -26.5z
+M530 868q9 -15 17 -25.5t21 -16.5q-8 -5 -18.5 -6t-20.5 -1q-11 0 -24 2q-9 1 -16.5 4.5t-14.5 10.5t-14 19t-16 31q0 1 -0.5 1.5t-0.5 1.5l-51 -41t-16 -13q-16 -14 -32.5 -12t-29.5 1h-12q-5 0 -11 -0.5t-11 -1.5l17 14l25 20q15 11 32 25l16 13l20 16t19 14.5t12 8.5
+q3 3 14 4.5t23.5 1.5t23 -1.5t12.5 -5.5q2 -3 7 -12l10.5 -19.5t11 -19.5t7.5 -13z" />
+    <glyph glyph-name="Aacute" unicode="&#xc1;" horiz-adv-x="566" 
+d="M433 753q35 0 57.5 -19.5t19.5 -70.5q-1 -17 -8 -63.5l-17 -109.5l-22.5 -135.5l-23.5 -141.5h21q10 0 22 1t25 3q-5 -12 -11 -22.5t-12 -18.5q-7 -9 -14 -16q-9 -11 -21 -19.5t-23 -13.5q-7 -49 -11.5 -87.5t-5.5 -63.5q-2 -38 2 -71q3 -29 12 -59t29 -48l-116 -38
+q-12 17 -17.5 45.5t-7.5 56.5q-3 33 -1 68t11 91.5l20 123.5q-20 6 -43.5 10t-52.5 4q-26 0 -54.5 -2t-56.5 -5q-12 -44 -24 -93q-13 -53 -23.5 -90.5t-20 -62.5t-19 -40t-20.5 -22q-12 -6 -30 -11q-17 -5 -43 -10t-67 -8q15 18 26 33t22 37t24.5 56.5l34.5 90.5
+q9 23 18.5 50.5t20.5 56.5q-36 -5 -61 -9t-30 -6q-8 -1 -13 0q-13 2 -14 13q1 14 9.5 19t25.5 12q8 4 36.5 14.5t69.5 22.5l29.5 83.5l28.5 79.5l27 71.5t24 57.5q17 37 43.5 81.5t61 83.5t76 65t87.5 26zM422 545q11 45 15 74t3 45.5t-6.5 23t-13.5 6.5q-13 0 -32 -10
+t-40 -28.5t-41.5 -46t-36.5 -62.5q-23 -52 -52 -127.5t-63 -192.5q20 3 39.5 5t38.5 2q34 0 65 -2.5t57 -5.5l18.5 94.5l18.5 88.5l16.5 77t13.5 59zM483 942q9 7 20 -1t16 -24q7 -21 1 -31.5t-18 -18.5q-6 -5 -22.5 -14t-36 -18.5t-38.5 -17t-29 -8.5q-11 -1 -17 2.5
+t-9.5 8.5t-4.5 11.5t-1 11.5q78 54 109 77z" />
+    <glyph glyph-name="Edieresis" unicode="&#xcb;" horiz-adv-x="536" 
+d="M195 -186q-47 0 -87.5 15t-71 42t-48.5 63.5t-19 79.5q-1 56 17.5 100t49 78t69.5 57.5t80 38.5q-22 12 -41.5 29t-34.5 38t-24 44t-9 46q-2 70 28.5 127t78.5 97.5t107.5 62.5t116.5 22q38 0 65 -12.5t44 -31t25.5 -40t9.5 -39.5q1 -33 -8.5 -67t-24 -61.5t-32.5 -45
+t-35 -17.5q-13 0 -27 4q-12 3 -28 10t-32 21q26 10 46 28.5t33.5 41.5t20 47.5t6.5 46.5q-1 32 -15 49.5t-45 17.5q-42 0 -84 -20.5t-74.5 -57t-51 -87t-12.5 -109.5q5 -45 27.5 -76t42.5 -48q16 2 30 3.5t26 1.5q17 0 34 -6t17 -17q0 -8 -3.5 -18t-11.5 -19t-19 -15t-26 -6
+q-12 0 -29 6t-34 15q-38 -8 -69 -28.5t-52.5 -48.5t-33.5 -61t-11 -64q1 -29 9 -58.5t25 -52.5t44.5 -37.5t66.5 -14.5q29 0 55.5 12.5t49.5 31.5t42 42t33 45t23.5 40l13.5 26q3 6 8.5 9t11 1.5t8.5 -7.5t0 -18q-8 -36 -30 -80.5t-56.5 -83.5t-81 -65.5t-103.5 -26.5z
+M494 817q-21 0 -29.5 8t-8.5 22q0 9 6 18t15.5 16t22 11t25.5 4q25 0 34.5 -8.5t9.5 -22.5q0 -11 -7.5 -20t-18.5 -15t-24 -9.5t-25 -3.5zM411 871q0 -19 -22.5 -37.5t-59.5 -18.5q-19 0 -25 8.5t-6 17.5q0 19 18 38t53 19q16 0 29 -5t13 -22z" />
+    <glyph glyph-name="Egrave" unicode="&#xc8;" horiz-adv-x="536" 
+d="M195 -186q-47 0 -87.5 15t-71 42t-48.5 63.5t-19 79.5q-1 56 17.5 100t49 78t69.5 57.5t80 38.5q-22 12 -41.5 29t-34.5 38t-24 44t-9 46q-2 70 28.5 127t78.5 97.5t107.5 62.5t116.5 22q38 0 65 -12.5t44 -31t25.5 -40t9.5 -39.5q1 -33 -8.5 -67t-24 -61.5t-32.5 -45
+t-35 -17.5q-13 0 -27 4q-12 3 -28 10t-32 21q26 10 46 28.5t33.5 41.5t20 47.5t6.5 46.5q-1 32 -15 49.5t-45 17.5q-42 0 -84 -20.5t-74.5 -57t-51 -87t-12.5 -109.5q5 -45 27.5 -76t42.5 -48q16 2 30 3.5t26 1.5q17 0 34 -6t17 -17q0 -8 -3.5 -18t-11.5 -19t-19 -15t-26 -6
+q-12 0 -29 6t-34 15q-38 -8 -69 -28.5t-52.5 -48.5t-33.5 -61t-11 -64q1 -29 9 -58.5t25 -52.5t44.5 -37.5t66.5 -14.5q29 0 55.5 12.5t49.5 31.5t42 42t33 45t23.5 40l13.5 26q3 6 8.5 9t11 1.5t8.5 -7.5t0 -18q-8 -36 -30 -80.5t-56.5 -83.5t-81 -65.5t-103.5 -26.5z
+M380 938q6 -3 21.5 -13.5t32.5 -24l32.5 -27t20.5 -22.5q11 -18 2.5 -27.5t-18.5 -15.5l-71.5 38l-46.5 24l-33 17q-9 5 -7 18.5t13 25.5q16 16 28 15t26 -8z" />
+    <glyph glyph-name="Iacute" unicode="&#xcd;" horiz-adv-x="550" 
+d="M260 253q-19 20 -30.5 49.5t-17.5 58.5q-7 33 -10 70q-5 72 16 131t57 101t80.5 65t86.5 23q19 0 30.5 -9t17.5 -22t7.5 -27t1.5 -23q0 -32 -1.5 -63t-5 -66t-10.5 -75t-18 -89q-6 -27 -17 -69t-26 -93q45 -1 72.5 -3.5t35.5 -3.5q7 -1 10.5 -7t-4.5 -19
+q-8 -12 -22.5 -14t-28.5 -2h-29.5t-50.5 -2q-21 -62 -47.5 -124.5t-58.5 -113t-70 -82t-81 -31.5q-62 0 -104.5 23.5t-69 55t-38.5 63t-12 48.5q0 30 16 61t50.5 58.5t89.5 48.5t132 32q32 4 61 6.5t55 4.5l40.5 153t35.5 144q6 27 12 58.5t9.5 59.5t4 47t-4.5 21
+q-3 1 -15 -7.5t-28 -24.5t-31.5 -38.5t-25.5 -48.5q-18 -51 -28 -100q-8 -42 -10 -89t15 -85q-2 -14 -6 -23q-3 -5 -5 -9l-7 -7q-4 -3 -9.5 -6.5t-13.5 -5.5zM248 -26q11 23 27 71t34 111q-49 -6 -99 -16.5t-90.5 -28t-66 -42.5t-25.5 -59q0 -36 14.5 -63t35 -45t42 -27.5
+t36.5 -9.5t28.5 11.5t25 28t21 35.5zM503 942q9 7 20 -1t16 -24q7 -21 1 -31.5t-18 -18.5q-6 -5 -22.5 -14t-36 -18.5t-38.5 -17t-29 -8.5q-11 -1 -17 2.5t-9.5 8.5t-4.5 11.5t-1 11.5q78 54 109 77z" />
+    <glyph glyph-name="Icircumflex" unicode="&#xce;" horiz-adv-x="550" 
+d="M260 253q-19 20 -30.5 49.5t-17.5 58.5q-7 33 -10 70q-5 72 16 131t57 101t80.5 65t86.5 23q19 0 30.5 -9t17.5 -22t7.5 -27t1.5 -23q0 -32 -1.5 -63t-5 -66t-10.5 -75t-18 -89q-6 -27 -17 -69t-26 -93q45 -1 72.5 -3.5t35.5 -3.5q7 -1 10.5 -7t-4.5 -19
+q-8 -12 -22.5 -14t-28.5 -2h-29.5t-50.5 -2q-21 -62 -47.5 -124.5t-58.5 -113t-70 -82t-81 -31.5q-62 0 -104.5 23.5t-69 55t-38.5 63t-12 48.5q0 30 16 61t50.5 58.5t89.5 48.5t132 32q32 4 61 6.5t55 4.5l40.5 153t35.5 144q6 27 12 58.5t9.5 59.5t4 47t-4.5 21
+q-3 1 -15 -7.5t-28 -24.5t-31.5 -38.5t-25.5 -48.5q-18 -51 -28 -100q-8 -42 -10 -89t15 -85q-2 -14 -6 -23q-3 -5 -5 -9l-7 -7q-4 -3 -9.5 -6.5t-13.5 -5.5zM248 -26q11 23 27 71t34 111q-49 -6 -99 -16.5t-90.5 -28t-66 -42.5t-25.5 -59q0 -36 14.5 -63t35 -45t42 -27.5
+t36.5 -9.5t28.5 11.5t25 28t21 35.5zM571 857q9 -15 17 -25.5t21 -16.5q-8 -5 -18.5 -6t-20.5 -1q-11 0 -24 2q-9 1 -16.5 4.5t-14.5 10.5t-14 19t-16 31q0 1 -0.5 1.5t-0.5 1.5l-51 -41t-16 -13q-16 -14 -32.5 -12t-29.5 1h-12q-5 0 -11 -0.5t-11 -1.5l17 14l25 20
+q15 11 32 25l16 13l20 16t19 14.5t12 8.5q3 3 14 4.5t23.5 1.5t23 -1.5t12.5 -5.5q2 -3 7 -12l10.5 -19.5t11 -19.5t7.5 -13z" />
+    <glyph glyph-name="Idieresis" unicode="&#xcf;" horiz-adv-x="550" 
+d="M260 253q-19 20 -30.5 49.5t-17.5 58.5q-7 33 -10 70q-5 72 16 131t57 101t80.5 65t86.5 23q19 0 30.5 -9t17.5 -22t7.5 -27t1.5 -23q0 -32 -1.5 -63t-5 -66t-10.5 -75t-18 -89q-6 -27 -17 -69t-26 -93q45 -1 72.5 -3.5t35.5 -3.5q7 -1 10.5 -7t-4.5 -19
+q-8 -12 -22.5 -14t-28.5 -2h-29.5t-50.5 -2q-21 -62 -47.5 -124.5t-58.5 -113t-70 -82t-81 -31.5q-62 0 -104.5 23.5t-69 55t-38.5 63t-12 48.5q0 30 16 61t50.5 58.5t89.5 48.5t132 32q32 4 61 6.5t55 4.5l40.5 153t35.5 144q6 27 12 58.5t9.5 59.5t4 47t-4.5 21
+q-3 1 -15 -7.5t-28 -24.5t-31.5 -38.5t-25.5 -48.5q-18 -51 -28 -100q-8 -42 -10 -89t15 -85q-2 -14 -6 -23q-3 -5 -5 -9l-7 -7q-4 -3 -9.5 -6.5t-13.5 -5.5zM248 -26q11 23 27 71t34 111q-49 -6 -99 -16.5t-90.5 -28t-66 -42.5t-25.5 -59q0 -36 14.5 -63t35 -45t42 -27.5
+t36.5 -9.5t28.5 11.5t25 28t21 35.5zM525 817q-21 0 -29.5 8t-8.5 22q0 9 6 18t15.5 16t22 11t25.5 4q25 0 34.5 -8.5t9.5 -22.5q0 -11 -7.5 -20t-18.5 -15t-24 -9.5t-25 -3.5zM442 871q0 -19 -22.5 -37.5t-59.5 -18.5q-19 0 -25 8.5t-6 17.5q0 19 18 38t53 19q16 0 29 -5
+t13 -22z" />
+    <glyph glyph-name="Igrave" unicode="&#xcc;" horiz-adv-x="550" 
+d="M260 253q-19 20 -30.5 49.5t-17.5 58.5q-7 33 -10 70q-5 72 16 131t57 101t80.5 65t86.5 23q19 0 30.5 -9t17.5 -22t7.5 -27t1.5 -23q0 -32 -1.5 -63t-5 -66t-10.5 -75t-18 -89q-6 -27 -17 -69t-26 -93q45 -1 72.5 -3.5t35.5 -3.5q7 -1 10.5 -7t-4.5 -19
+q-8 -12 -22.5 -14t-28.5 -2h-29.5t-50.5 -2q-21 -62 -47.5 -124.5t-58.5 -113t-70 -82t-81 -31.5q-62 0 -104.5 23.5t-69 55t-38.5 63t-12 48.5q0 30 16 61t50.5 58.5t89.5 48.5t132 32q32 4 61 6.5t55 4.5l40.5 153t35.5 144q6 27 12 58.5t9.5 59.5t4 47t-4.5 21
+q-3 1 -15 -7.5t-28 -24.5t-31.5 -38.5t-25.5 -48.5q-18 -51 -28 -100q-8 -42 -10 -89t15 -85q-2 -14 -6 -23q-3 -5 -5 -9l-7 -7q-4 -3 -9.5 -6.5t-13.5 -5.5zM248 -26q11 23 27 71t34 111q-49 -6 -99 -16.5t-90.5 -28t-66 -42.5t-25.5 -59q0 -36 14.5 -63t35 -45t42 -27.5
+t36.5 -9.5t28.5 11.5t25 28t21 35.5zM401 938q6 -3 21.5 -13.5t32.5 -24l32.5 -27t20.5 -22.5q11 -18 2.5 -27.5t-18.5 -15.5l-71.5 38l-46.5 24l-33 17q-9 5 -7 18.5t13 25.5q16 16 28 15t26 -8z" />
+    <glyph glyph-name="Oacute" unicode="&#xd3;" 
+d="M524 336q-5 -63 -20 -126.5t-37.5 -122.5t-52.5 -110.5t-66.5 -89.5t-78 -60t-86.5 -22q-9 0 -27.5 3.5t-39.5 16t-42.5 36.5t-37.5 64.5t-23 100.5t0 145q12 134 49.5 243.5t86 187.5t100.5 120.5t92 42.5q16 0 26.5 -6.5t16.5 -16.5q7 2 16 3t20 1q29 0 51.5 -30
+t37 -84t19 -129.5t-3.5 -166.5zM186 -137q39 0 80 40t76 108.5t60 159.5t34 193q2 27 3 62t0 71t-4.5 71.5t-9.5 62.5t-15 44t-21 17q-13 -1 -26 -8q-11 -6 -25.5 -19.5t-28.5 -37.5q-3 2 -4.5 6t-3.5 8t-3 9q-2 3 -2 7.5t-1 10.5q-20 -22 -47.5 -62.5t-55 -100.5
+t-50 -141.5t-31.5 -185.5q-8 -92 -4 -153t15.5 -97t28.5 -50.5t35 -14.5zM452 942q9 7 20 -1t16 -24q7 -21 1 -31.5t-18 -18.5q-6 -5 -22.5 -14t-36 -18.5t-38.5 -17t-29 -8.5q-11 -1 -17 2.5t-9.5 8.5t-4.5 11.5t-1 11.5q78 54 109 77z" />
+    <glyph glyph-name="Ocircumflex" unicode="&#xd4;" 
+d="M524 336q-5 -63 -20 -126.5t-37.5 -122.5t-52.5 -110.5t-66.5 -89.5t-78 -60t-86.5 -22q-9 0 -27.5 3.5t-39.5 16t-42.5 36.5t-37.5 64.5t-23 100.5t0 145q12 134 49.5 243.5t86 187.5t100.5 120.5t92 42.5q16 0 26.5 -6.5t16.5 -16.5q7 2 16 3t20 1q29 0 51.5 -30
+t37 -84t19 -129.5t-3.5 -166.5zM186 -137q39 0 80 40t76 108.5t60 159.5t34 193q2 27 3 62t0 71t-4.5 71.5t-9.5 62.5t-15 44t-21 17q-13 -1 -26 -8q-11 -6 -25.5 -19.5t-28.5 -37.5q-3 2 -4.5 6t-3.5 8t-3 9q-2 3 -2 7.5t-1 10.5q-20 -22 -47.5 -62.5t-55 -100.5
+t-50 -141.5t-31.5 -185.5q-8 -92 -4 -153t15.5 -97t28.5 -50.5t35 -14.5zM499 868q9 -15 17 -25.5t21 -16.5q-8 -5 -18.5 -6t-20.5 -1q-11 0 -24 2q-9 1 -16.5 4.5t-14.5 10.5t-14 19t-16 31q0 1 -0.5 1.5t-0.5 1.5l-51 -41t-16 -13q-16 -14 -32.5 -12t-29.5 1h-12
+q-5 0 -11 -0.5t-11 -1.5l17 14l25 20q15 11 32 25l16 13l20 16t19 14.5t12 8.5q3 3 14 4.5t23.5 1.5t23 -1.5t12.5 -5.5q2 -3 7 -12l10.5 -19.5t11 -19.5t7.5 -13z" />
+    <glyph glyph-name="Ograve" unicode="&#xd2;" 
+d="M524 336q-5 -63 -20 -126.5t-37.5 -122.5t-52.5 -110.5t-66.5 -89.5t-78 -60t-86.5 -22q-9 0 -27.5 3.5t-39.5 16t-42.5 36.5t-37.5 64.5t-23 100.5t0 145q12 134 49.5 243.5t86 187.5t100.5 120.5t92 42.5q16 0 26.5 -6.5t16.5 -16.5q7 2 16 3t20 1q29 0 51.5 -30
+t37 -84t19 -129.5t-3.5 -166.5zM186 -137q39 0 80 40t76 108.5t60 159.5t34 193q2 27 3 62t0 71t-4.5 71.5t-9.5 62.5t-15 44t-21 17q-13 -1 -26 -8q-11 -6 -25.5 -19.5t-28.5 -37.5q-3 2 -4.5 6t-3.5 8t-3 9q-2 3 -2 7.5t-1 10.5q-20 -22 -47.5 -62.5t-55 -100.5
+t-50 -141.5t-31.5 -185.5q-8 -92 -4 -153t15.5 -97t28.5 -50.5t35 -14.5zM380 938q6 -3 21.5 -13.5t32.5 -24l32.5 -27t20.5 -22.5q11 -18 2.5 -27.5t-18.5 -15.5l-71.5 38l-46.5 24l-33 17q-9 5 -7 18.5t13 25.5q16 16 28 15t26 -8z" />
+    <glyph glyph-name="Uacute" unicode="&#xda;" horiz-adv-x="588" 
+d="M10 -9q1 65 18 164q14 85 45 217t89 318q5 10 15.5 17t21.5 12q12 5 27 8q14 3 27 5q11 2 23 2t20 -2q-35 -88 -60 -159.5t-41 -123.5q-19 -61 -31 -108q-17 -50 -29 -100t-19.5 -94.5t-11 -79.5t-3.5 -55q1 -60 20 -94.5t62 -34.5q36 0 67.5 34t58 83.5t45.5 106.5
+t29 102q2 8 4 22q13 62 31 138q15 65 37.5 153l51.5 192q8 8 18 13t18 8q10 4 20 5q10 2 21 2q9 0 21 -1.5t24 -5.5q-20 -54 -39 -112.5l-34 -108.5q-18 -58 -34 -115q-23 -72 -37 -129.5t-22.5 -106t-13 -90l-8.5 -81.5q-3 -32 -1 -60q2 -25 7 -50t18 -42q-5 -7 -14 -10
+t-19 -5q-11 -2 -24 -2q-26 0 -38.5 32.5t-13.5 103.5q-8 -16 -25 -40.5t-42.5 -48t-59.5 -40.5t-76 -17t-69.5 14.5t-44 39t-23 57t-6.5 67.5zM503 911q9 7 20 -1t16 -24q7 -21 1 -31.5t-18 -18.5q-6 -5 -22.5 -14t-36 -18.5t-38.5 -17t-29 -8.5q-11 -1 -17 2.5t-9.5 8.5
+t-4.5 11.5t-1 11.5q78 54 109 77z" />
+    <glyph glyph-name="Ucircumflex" unicode="&#xdb;" horiz-adv-x="588" 
+d="M10 -9q1 65 18 164q14 85 45 217t89 318q5 10 15.5 17t21.5 12q12 5 27 8q14 3 27 5q11 2 23 2t20 -2q-35 -88 -60 -159.5t-41 -123.5q-19 -61 -31 -108q-17 -50 -29 -100t-19.5 -94.5t-11 -79.5t-3.5 -55q1 -60 20 -94.5t62 -34.5q36 0 67.5 34t58 83.5t45.5 106.5
+t29 102q2 8 4 22q13 62 31 138q15 65 37.5 153l51.5 192q8 8 18 13t18 8q10 4 20 5q10 2 21 2q9 0 21 -1.5t24 -5.5q-20 -54 -39 -112.5l-34 -108.5q-18 -58 -34 -115q-23 -72 -37 -129.5t-22.5 -106t-13 -90l-8.5 -81.5q-3 -32 -1 -60q2 -25 7 -50t18 -42q-5 -7 -14 -10
+t-19 -5q-11 -2 -24 -2q-26 0 -38.5 32.5t-13.5 103.5q-8 -16 -25 -40.5t-42.5 -48t-59.5 -40.5t-76 -17t-69.5 14.5t-44 39t-23 57t-6.5 67.5zM530 847q9 -15 17 -25.5t21 -16.5q-8 -5 -18.5 -6t-20.5 -1q-11 0 -24 2q-9 1 -16.5 4.5t-14.5 10.5t-14 19t-16 31q0 1 -0.5 1.5
+t-0.5 1.5l-51 -41t-16 -13q-16 -14 -32.5 -12t-29.5 1h-12q-5 0 -11 -0.5t-11 -1.5l17 14l25 20q15 11 32 25l16 13l20 16t19 14.5t12 8.5q3 3 14 4.5t23.5 1.5t23 -1.5t12.5 -5.5q2 -3 7 -12l10.5 -19.5t11 -19.5t7.5 -13z" />
+    <glyph glyph-name="Ugrave" unicode="&#xd9;" horiz-adv-x="588" 
+d="M10 -9q1 65 18 164q14 85 45 217t89 318q5 10 15.5 17t21.5 12q12 5 27 8q14 3 27 5q11 2 23 2t20 -2q-35 -88 -60 -159.5t-41 -123.5q-19 -61 -31 -108q-17 -50 -29 -100t-19.5 -94.5t-11 -79.5t-3.5 -55q1 -60 20 -94.5t62 -34.5q36 0 67.5 34t58 83.5t45.5 106.5
+t29 102q2 8 4 22q13 62 31 138q15 65 37.5 153l51.5 192q8 8 18 13t18 8q10 4 20 5q10 2 21 2q9 0 21 -1.5t24 -5.5q-20 -54 -39 -112.5l-34 -108.5q-18 -58 -34 -115q-23 -72 -37 -129.5t-22.5 -106t-13 -90l-8.5 -81.5q-3 -32 -1 -60q2 -25 7 -50t18 -42q-5 -7 -14 -10
+t-19 -5q-11 -2 -24 -2q-26 0 -38.5 32.5t-13.5 103.5q-8 -16 -25 -40.5t-42.5 -48t-59.5 -40.5t-76 -17t-69.5 14.5t-44 39t-23 57t-6.5 67.5zM380 907q6 -3 21.5 -13.5t32.5 -24l32.5 -27t20.5 -22.5q11 -18 2.5 -27.5t-18.5 -15.5l-71.5 38l-46.5 24l-33 17q-9 5 -7 18.5
+t13 25.5q16 16 28 15t26 -8z" />
+    <glyph glyph-name="dotlessi" unicode="&#x131;" horiz-adv-x="281" 
+d="M82 376q5 6 19 10t29 6.5t27.5 3t14.5 -0.5q1 -1 -5 -21t-15 -47l-19 -55.5t-15 -46.5t-12 -40.5t-12.5 -44t-7.5 -40.5t3 -29q5 -12 11 -16.5t13 -4.5q20 0 50.5 22t62 52.5t58.5 62t40 50.5q8 10 16.5 13t14 -1t6 -13t-6.5 -21q-16 -28 -47 -66.5t-66 -74t-68.5 -60.5
+t-54.5 -26q-17 -1 -33.5 5.5t-30 18t-22.5 27t-10 32.5q-3 25 0 68.5t11 89t20.5 86.5t28.5 61z" />
+    <glyph glyph-name="circumflex" unicode="&#x2c6;" 
+d="M458 632q9 -15 17 -25.5t21 -16.5q-8 -5 -18.5 -6t-20.5 -1q-11 0 -24 2q-9 1 -16.5 4.5t-14.5 10.5t-14 19t-16 31q0 1 -0.5 1.5t-0.5 1.5l-51 -41t-16 -13q-16 -14 -32.5 -12t-29.5 1h-12q-5 0 -11 -0.5t-11 -1.5l17 14l25 20q15 11 32 25l16 13l20 16t19 14.5t12 8.5
+q3 3 14 4.5t23.5 1.5t23 -1.5t12.5 -5.5q2 -3 7 -12l10.5 -19.5t11 -19.5t7.5 -13z" />
+    <glyph glyph-name="tilde" unicode="&#x2dc;" 
+d="M492 683q17 -10 17 -33q0 -12 -7.5 -24t-21 -20.5t-32 -12.5t-40.5 -1q-23 3 -41 9t-33 10.5t-29 6t-30 -4.5l-18 -8l-16.5 -8.5t-15.5 -9.5q-6 1 -10 4t-7 5q-4 3 -5 6q-4 6 -6 12q-2 5 -2.5 11t2.5 11q12 16 29.5 24t34.5 11q19 4 40 3q27 -1 43.5 -6t30.5 -10.5
+t28 -8.5t37 0q7 1 16 5q8 4 17 10.5t19 18.5z" />
+    <glyph glyph-name="macron" unicode="&#xaf;" 
+d="M461 664q11 -1 12.5 -8.5t-3.5 -25.5q-5 -17 -9.5 -24t-15.5 -6q-20 2 -42.5 2.5t-54.5 -0.5q-55 -2 -81 -5t-29 -3q-4 0 -7.5 6t1.5 26q3 9 8.5 20t10.5 13q7 5 38 7.5t70 2.5h34t25 -0.5t21 -2t22 -2.5z" />
+    <glyph glyph-name="breve" unicode="&#x2d8;" 
+d="M421 671q2 6 12.5 8.5t22 2.5t20.5 -3t8 -8q-5 -25 -20 -46.5t-36.5 -38t-47.5 -26t-53 -9.5t-49 9.5t-36.5 25.5t-20 38t-0.5 47q1 8 11.5 10.5t22.5 2t21.5 -4.5t8.5 -8q-5 -27 10.5 -44.5t44.5 -17.5q28 0 50.5 18t30.5 44z" />
+    <glyph glyph-name="dotaccent" unicode="&#x2d9;" 
+d="M408 646q0 -19 -22.5 -37.5t-59.5 -18.5q-18 0 -24 8.5t-6 17.5q0 19 18 38t52 19q17 0 29.5 -5t12.5 -22z" />
+    <glyph glyph-name="ring" unicode="&#x2da;" 
+d="M359 687q18 0 30 -5t19 -12.5t10 -16.5t3 -18q0 -11 -5 -23.5t-14 -23.5t-22.5 -18.5t-31.5 -7.5q-21 0 -33.5 5.5t-19.5 13.5t-9.5 17.5t-2.5 18.5q0 13 6 25.5t16.5 22.5t24.5 16t29 6zM350 598q14 0 20.5 11t6.5 20q0 8 -4.5 15t-18.5 7q-11 0 -19 -9t-8 -20
+q0 -8 4.5 -16t18.5 -8z" />
+    <glyph glyph-name="cedilla" unicode="&#xb8;" 
+d="M340 22q56 2 81.5 -16.5t20.5 -50.5q-2 -17 -15 -32.5t-34 -28t-48 -21.5t-57 -12q-13 -2 -20 2t-7.5 10t6 12t19.5 9q33 8 57 21.5t27 31.5q2 17 -18 27t-54 7q-12 -1 -19 3.5t-5 15.5q1 4 5.5 16.5t10.5 26.5l11 25.5t6 13.5q3 5 13.5 9.5t25.5 5.5q11 0 21 -3t8 -7
+l-6 -12l-11 -19.5z" />
+    <glyph glyph-name="hungarumlaut" unicode="&#x2dd;" 
+d="M319 696q9 7 20 -1t16 -24q8 -21 1.5 -31.5t-18.5 -18.5q-6 -5 -22.5 -14t-36 -18.5t-38.5 -17t-29 -8.5q-11 -1 -17 2.5t-9.5 8.5t-4.5 11.5t-1 11.5q78 54 109 77zM483 696q9 7 20 -1t16 -24q7 -21 1 -31.5t-18 -18.5q-6 -5 -23 -14l-36.5 -18.5t-38 -17t-28.5 -8.5
+q-11 -1 -17 2.5t-9.5 8.5t-4.5 11.5t-1 11.5q78 54 109 77z" />
+    <glyph glyph-name="ogonek" unicode="&#x2db;" 
+d="M446 -27q10 7 18 7.5t12 -3t3 -10.5t-10 -14q-21 -20 -47.5 -35t-54 -23.5t-54 -10t-48.5 7.5q-21 9 -31 25.5t-9 36.5t13 42t35 44q8 7 19 6.5t19.5 -5t13 -11.5t0.5 -11q-25 -23 -26.5 -44.5t20.5 -30.5q11 -5 27.5 -4.5t34.5 5t35.5 12t29.5 16.5z" />
+    <glyph glyph-name="caron" unicode="&#x2c7;" 
+d="M246 650q-10 15 -18 25.5t-20 17.5q7 5 17.5 5.5t20.5 0.5q11 -1 24 -2q19 -2 31.5 -15t30.5 -50q0 -1 0.5 -1.5t0.5 -1.5l50.5 41.5t15.5 13.5q17 13 33 11t30 -1h12q5 0 11 0.5t11 1.5q-5 -5 -17 -14.5l-25 -19.5q-15 -11 -32 -25l-16 -13l-20.5 -16l-19 -14.5
+t-12.5 -8.5q-3 -3 -14 -4.5t-23 -1.5t-22.5 2t-12.5 5t-7 12l-11 19.5l-11 19.5t-7 13z" />
+    <glyph glyph-name="sfthyphen" unicode="&#xad;" horiz-adv-x="362" 
+d="M310 289q-28 1 -71 0.5t-85 -1.5q-28 -1 -57 -4q-25 -2 -55 -6t-57 -12q-1 8 0 15.5t3 14.5q2 8 4 15q4 10 11.5 21t13.5 14q5 2 20.5 4t37 3.5t48 2.5t52.5 1q53 1 88 -0.5t67 -4.5q14 -2 16.5 -9t-3.5 -25q-6 -17 -13 -23.5t-20 -5.5z" />
+    <glyph glyph-name="currency" unicode="&#xa4;" horiz-adv-x="356" 
+d="M329 537q8 3 13.5 2t9.5 -3q4 -3 7 -7t5 -9t2 -10.5t-2 -10.5l-76 -68q3 -13 2 -27q-2 -28 -11 -51.5t-22 -42.5l49 -72q2 -4 2.5 -17t-16.5 -24q-5 -3 -10 -4t-10.5 0.5t-10.5 8.5l-46 66q-30 -19 -62 -19q-33 0 -54 15l-63 -56q-13 -11 -24.5 -6.5t-15.5 12.5
+q-6 13 -3.5 23t9.5 15l33.5 29l36.5 31q-1 7 -1.5 13t0.5 13q2 17 10 42t24 50l-46 68q-6 9 -3.5 20.5t10 19.5t18 9t20.5 -11l41 -61q15 11 31 17.5t36 6.5q15 0 27.5 -6t22.5 -15zM241 398q2 16 -6 32.5t-28 16.5q-16 0 -30.5 -9t-26 -24t-19.5 -33.5t-9 -37.5
+q-2 -17 7 -30.5t25 -13.5q31 0 56.5 27t30.5 72z" />
+    <hkern u1="&#x2d;" u2="X" k="41" />
+    <hkern u1="A" u2="T" k="-20" />
+    <hkern u1="A" u2="G" k="10" />
+    <hkern u1="B" u2="&#xd2;" k="10" />
+    <hkern u1="B" u2="&#xd4;" k="10" />
+    <hkern u1="B" u2="&#xd3;" k="10" />
+    <hkern u1="B" u2="&#x152;" k="10" />
+    <hkern u1="B" u2="&#xd5;" k="10" />
+    <hkern u1="B" u2="&#xd6;" k="10" />
+    <hkern u1="B" u2="Q" k="10" />
+    <hkern u1="B" u2="O" k="10" />
+    <hkern u1="B" u2="G" k="10" />
+    <hkern u1="B" u2="D" k="20" />
+    <hkern u1="B" u2="B" k="31" />
+    <hkern u1="C" u2="&#xd1;" k="-10" />
+    <hkern u1="C" u2="T" k="-31" />
+    <hkern u1="C" u2="N" k="-10" />
+    <hkern u1="C" u2="D" k="10" />
+    <hkern u1="D" u2="&#xc8;" k="10" />
+    <hkern u1="D" u2="&#xcb;" k="10" />
+    <hkern u1="D" u2="&#xca;" k="10" />
+    <hkern u1="D" u2="&#xd1;" k="-10" />
+    <hkern u1="D" u2="&#xc9;" k="10" />
+    <hkern u1="D" u2="Z" k="10" />
+    <hkern u1="D" u2="X" k="20" />
+    <hkern u1="D" u2="T" k="20" />
+    <hkern u1="D" u2="S" k="10" />
+    <hkern u1="D" u2="R" k="10" />
+    <hkern u1="D" u2="N" k="-10" />
+    <hkern u1="D" u2="F" k="10" />
+    <hkern u1="D" u2="E" k="10" />
+    <hkern u1="D" u2="D" k="41" />
+    <hkern u1="D" u2="B" k="20" />
+    <hkern u1="E" u2="&#xd1;" k="-10" />
+    <hkern u1="E" u2="N" k="-10" />
+    <hkern u1="E" u2="H" k="10" />
+    <hkern u1="E" u2="G" k="10" />
+    <hkern u1="E" u2="D" k="10" />
+    <hkern u1="E" u2="B" k="10" />
+    <hkern u1="F" u2="&#xd2;" k="10" />
+    <hkern u1="F" u2="&#xd4;" k="10" />
+    <hkern u1="F" u2="&#xd3;" k="10" />
+    <hkern u1="F" u2="&#xcc;" k="31" />
+    <hkern u1="F" u2="&#xcf;" k="31" />
+    <hkern u1="F" u2="&#xce;" k="31" />
+    <hkern u1="F" u2="&#xcd;" k="31" />
+    <hkern u1="F" u2="&#xc8;" k="10" />
+    <hkern u1="F" u2="&#xcb;" k="10" />
+    <hkern u1="F" u2="&#xca;" k="10" />
+    <hkern u1="F" u2="&#x152;" k="10" />
+    <hkern u1="F" u2="&#xd5;" k="10" />
+    <hkern u1="F" u2="&#xd6;" k="10" />
+    <hkern u1="F" u2="&#xc9;" k="10" />
+    <hkern u1="F" u2="S" k="10" />
+    <hkern u1="F" u2="O" k="10" />
+    <hkern u1="F" u2="L" k="20" />
+    <hkern u1="F" u2="J" k="20" />
+    <hkern u1="F" u2="I" k="31" />
+    <hkern u1="F" u2="H" k="20" />
+    <hkern u1="F" u2="G" k="20" />
+    <hkern u1="F" u2="E" k="10" />
+    <hkern u1="F" u2="&#x2e;" k="41" />
+    <hkern u1="F" u2="&#x2c;" k="41" />
+    <hkern u1="G" u2="&#xd1;" k="-10" />
+    <hkern u1="G" u2="P" k="10" />
+    <hkern u1="G" u2="N" k="-10" />
+    <hkern u1="G" u2="M" k="-20" />
+    <hkern u1="G" u2="L" k="20" />
+    <hkern u1="G" u2="H" k="10" />
+    <hkern u1="G" u2="G" k="10" />
+    <hkern u1="G" u2="F" k="10" />
+    <hkern u1="G" u2="D" k="41" />
+    <hkern u1="G" u2="B" k="10" />
+    <hkern u1="H" u2="&#xd9;" k="10" />
+    <hkern u1="H" u2="&#xdb;" k="10" />
+    <hkern u1="H" u2="&#xda;" k="10" />
+    <hkern u1="H" u2="U" k="10" />
+    <hkern u1="H" u2="T" k="-10" />
+    <hkern u1="H" u2="L" k="10" />
+    <hkern u1="H" u2="D" k="10" />
+    <hkern u1="I" u2="L" k="41" />
+    <hkern u1="I" u2="F" k="10" />
+    <hkern u1="I" u2="D" k="31" />
+    <hkern u1="I" u2="B" k="20" />
+    <hkern u1="J" u2="L" k="20" />
+    <hkern u1="J" u2="G" k="20" />
+    <hkern u1="K" u2="&#xd9;" k="10" />
+    <hkern u1="K" u2="&#xdb;" k="10" />
+    <hkern u1="K" u2="&#xda;" k="10" />
+    <hkern u1="K" u2="&#xd2;" k="10" />
+    <hkern u1="K" u2="&#xd4;" k="10" />
+    <hkern u1="K" u2="&#xd3;" k="10" />
+    <hkern u1="K" u2="&#x152;" k="10" />
+    <hkern u1="K" u2="&#xd5;" k="10" />
+    <hkern u1="K" u2="&#xd6;" k="10" />
+    <hkern u1="K" u2="&#xc7;" k="10" />
+    <hkern u1="K" u2="U" k="10" />
+    <hkern u1="K" u2="S" k="-10" />
+    <hkern u1="K" u2="O" k="10" />
+    <hkern u1="K" u2="G" k="10" />
+    <hkern u1="K" u2="C" k="10" />
+    <hkern u1="K" u2="B" k="10" />
+    <hkern u1="L" u2="&#xd2;" k="-10" />
+    <hkern u1="L" u2="&#xd4;" k="-10" />
+    <hkern u1="L" u2="&#xd3;" k="-10" />
+    <hkern u1="L" u2="&#xc8;" k="-31" />
+    <hkern u1="L" u2="&#xcb;" k="-31" />
+    <hkern u1="L" u2="&#xc1;" k="-72" />
+    <hkern u1="L" u2="&#xca;" k="-31" />
+    <hkern u1="L" u2="&#xc2;" k="-72" />
+    <hkern u1="L" u2="&#x152;" k="-10" />
+    <hkern u1="L" u2="&#xd5;" k="-10" />
+    <hkern u1="L" u2="&#xc3;" k="-72" />
+    <hkern u1="L" u2="&#xc0;" k="-72" />
+    <hkern u1="L" u2="&#xc6;" k="-72" />
+    <hkern u1="L" u2="&#xd6;" k="-10" />
+    <hkern u1="L" u2="&#xd1;" k="-51" />
+    <hkern u1="L" u2="&#xc9;" k="-31" />
+    <hkern u1="L" u2="&#xc5;" k="-72" />
+    <hkern u1="L" u2="&#xc4;" k="-72" />
+    <hkern u1="L" u2="W" k="-10" />
+    <hkern u1="L" u2="T" k="-61" />
+    <hkern u1="L" u2="R" k="-31" />
+    <hkern u1="L" u2="P" k="-61" />
+    <hkern u1="L" u2="O" k="-10" />
+    <hkern u1="L" u2="N" k="-51" />
+    <hkern u1="L" u2="M" k="-61" />
+    <hkern u1="L" u2="K" k="-61" />
+    <hkern u1="L" u2="J" k="-20" />
+    <hkern u1="L" u2="H" k="-31" />
+    <hkern u1="L" u2="G" k="-10" />
+    <hkern u1="L" u2="F" k="-20" />
+    <hkern u1="L" u2="E" k="-31" />
+    <hkern u1="L" u2="D" k="-20" />
+    <hkern u1="L" u2="A" k="-72" />
+    <hkern u1="M" u2="&#xd1;" k="-20" />
+    <hkern u1="M" u2="N" k="-20" />
+    <hkern u1="M" u2="J" k="-20" />
+    <hkern u1="M" u2="G" k="10" />
+    <hkern u1="N" u2="&#xd2;" k="-10" />
+    <hkern u1="N" u2="&#xd4;" k="-10" />
+    <hkern u1="N" u2="&#xd3;" k="-10" />
+    <hkern u1="N" u2="&#xc8;" k="-31" />
+    <hkern u1="N" u2="&#xcb;" k="-31" />
+    <hkern u1="N" u2="&#xca;" k="-31" />
+    <hkern u1="N" u2="&#x152;" k="-10" />
+    <hkern u1="N" u2="&#xd5;" k="-10" />
+    <hkern u1="N" u2="&#xd6;" k="-10" />
+    <hkern u1="N" u2="&#xd1;" k="-20" />
+    <hkern u1="N" u2="&#xc9;" k="-31" />
+    <hkern u1="N" u2="&#xc7;" k="-10" />
+    <hkern u1="N" u2="O" k="-10" />
+    <hkern u1="N" u2="N" k="-20" />
+    <hkern u1="N" u2="M" k="-20" />
+    <hkern u1="N" u2="E" k="-31" />
+    <hkern u1="N" u2="C" k="-10" />
+    <hkern u1="O" u2="W" k="10" />
+    <hkern u1="O" u2="T" k="10" />
+    <hkern u1="O" u2="L" k="10" />
+    <hkern u1="O" u2="K" k="10" />
+    <hkern u1="O" u2="H" k="10" />
+    <hkern u1="O" u2="G" k="10" />
+    <hkern u1="O" u2="F" k="20" />
+    <hkern u1="O" u2="D" k="20" />
+    <hkern u1="O" u2="B" k="20" />
+    <hkern u1="P" u2="&#xcc;" k="61" />
+    <hkern u1="P" u2="&#xcf;" k="61" />
+    <hkern u1="P" u2="&#xce;" k="61" />
+    <hkern u1="P" u2="&#xcd;" k="61" />
+    <hkern u1="P" u2="&#xc1;" k="10" />
+    <hkern u1="P" u2="&#xc2;" k="10" />
+    <hkern u1="P" u2="&#xc3;" k="10" />
+    <hkern u1="P" u2="&#xc0;" k="10" />
+    <hkern u1="P" u2="&#xc6;" k="10" />
+    <hkern u1="P" u2="&#xc5;" k="10" />
+    <hkern u1="P" u2="&#xc4;" k="10" />
+    <hkern u1="P" u2="M" k="51" />
+    <hkern u1="P" u2="K" k="10" />
+    <hkern u1="P" u2="J" k="41" />
+    <hkern u1="P" u2="I" k="61" />
+    <hkern u1="P" u2="H" k="10" />
+    <hkern u1="P" u2="D" k="10" />
+    <hkern u1="P" u2="A" k="10" />
+    <hkern u1="P" u2="&#x3b;" k="20" />
+    <hkern u1="P" u2="&#x3a;" k="20" />
+    <hkern u1="P" u2="&#x2e;" k="82" />
+    <hkern u1="P" u2="&#x2c;" k="82" />
+    <hkern u1="Q" u2="H" k="10" />
+    <hkern u1="Q" u2="F" k="10" />
+    <hkern u1="Q" u2="D" k="10" />
+    <hkern u1="Q" u2="B" k="10" />
+    <hkern u1="R" u2="&#xcc;" k="10" />
+    <hkern u1="R" u2="&#xcf;" k="10" />
+    <hkern u1="R" u2="&#xce;" k="10" />
+    <hkern u1="R" u2="&#xcd;" k="10" />
+    <hkern u1="R" u2="I" k="10" />
+    <hkern u1="S" u2="K" k="10" />
+    <hkern u1="S" u2="H" k="10" />
+    <hkern u1="S" u2="D" k="10" />
+    <hkern u1="T" u2="&#xd2;" k="10" />
+    <hkern u1="T" u2="&#xd4;" k="10" />
+    <hkern u1="T" u2="&#xd3;" k="10" />
+    <hkern u1="T" u2="&#xcc;" k="41" />
+    <hkern u1="T" u2="&#xcf;" k="41" />
+    <hkern u1="T" u2="&#xce;" k="41" />
+    <hkern u1="T" u2="&#xcd;" k="41" />
+    <hkern u1="T" u2="&#xc1;" k="20" />
+    <hkern u1="T" u2="&#xc2;" k="20" />
+    <hkern u1="T" u2="&#x152;" k="10" />
+    <hkern u1="T" u2="&#xd5;" k="10" />
+    <hkern u1="T" u2="&#xc3;" k="20" />
+    <hkern u1="T" u2="&#xc0;" k="20" />
+    <hkern u1="T" u2="&#xc6;" k="20" />
+    <hkern u1="T" u2="&#xd6;" k="10" />
+    <hkern u1="T" u2="&#xc7;" k="20" />
+    <hkern u1="T" u2="&#xc5;" k="20" />
+    <hkern u1="T" u2="&#xc4;" k="20" />
+    <hkern u1="T" u2="O" k="10" />
+    <hkern u1="T" u2="M" k="20" />
+    <hkern u1="T" u2="L" k="51" />
+    <hkern u1="T" u2="J" k="31" />
+    <hkern u1="T" u2="I" k="41" />
+    <hkern u1="T" u2="H" k="10" />
+    <hkern u1="T" u2="C" k="20" />
+    <hkern u1="T" u2="A" k="20" />
+    <hkern u1="V" u2="&#xcc;" k="31" />
+    <hkern u1="V" u2="&#xcf;" k="31" />
+    <hkern u1="V" u2="&#xce;" k="31" />
+    <hkern u1="V" u2="&#xcd;" k="31" />
+    <hkern u1="V" u2="J" k="10" />
+    <hkern u1="V" u2="I" k="31" />
+    <hkern u1="V" u2="G" k="15" />
+    <hkern u1="V" u2="&#x3b;" k="20" />
+    <hkern u1="V" u2="&#x3a;" k="20" />
+    <hkern u1="V" u2="&#x2e;" k="31" />
+    <hkern u1="V" u2="&#x2c;" k="31" />
+    <hkern u1="W" u2="&#xc8;" k="10" />
+    <hkern u1="W" u2="&#xcb;" k="10" />
+    <hkern u1="W" u2="&#xca;" k="10" />
+    <hkern u1="W" u2="&#xc9;" k="10" />
+    <hkern u1="W" u2="H" k="20" />
+    <hkern u1="W" u2="G" k="10" />
+    <hkern u1="W" u2="E" k="10" />
+    <hkern u1="W" u2="D" k="20" />
+    <hkern u1="W" u2="B" k="10" />
+    <hkern u1="W" u2="&#x2e;" k="31" />
+    <hkern u1="W" u2="&#x2c;" k="31" />
+    <hkern u1="X" u2="&#x2d;" k="41" />
+    <hkern u1="Y" u2="H" k="20" />
+    <hkern u1="Y" u2="D" k="10" />
+    <hkern u1="v" u2="&#x2e;" k="82" />
+    <hkern u1="v" u2="&#x2c;" k="82" />
+    <hkern u1="w" u2="&#x2e;" k="61" />
+    <hkern u1="w" u2="&#x2c;" k="61" />
+    <hkern u1="y" u2="&#x2e;" k="31" />
+    <hkern u1="y" u2="&#x2c;" k="31" />
+    <hkern u1="&#xc4;" u2="T" k="-20" />
+    <hkern u1="&#xc4;" u2="G" k="10" />
+    <hkern u1="&#xc5;" u2="T" k="-20" />
+    <hkern u1="&#xc5;" u2="G" k="10" />
+    <hkern u1="&#xc7;" u2="T" k="-31" />
+    <hkern u1="&#xc7;" u2="N" k="-10" />
+    <hkern u1="&#xc7;" u2="D" k="10" />
+    <hkern u1="&#xc9;" u2="N" k="-10" />
+    <hkern u1="&#xc9;" u2="H" k="10" />
+    <hkern u1="&#xc9;" u2="G" k="10" />
+    <hkern u1="&#xc9;" u2="D" k="10" />
+    <hkern u1="&#xc9;" u2="B" k="10" />
+    <hkern u1="&#xd1;" u2="O" k="-10" />
+    <hkern u1="&#xd1;" u2="N" k="-20" />
+    <hkern u1="&#xd1;" u2="M" k="-20" />
+    <hkern u1="&#xd1;" u2="E" k="-31" />
+    <hkern u1="&#xd1;" u2="C" k="-10" />
+    <hkern u1="&#xd6;" u2="W" k="10" />
+    <hkern u1="&#xd6;" u2="T" k="10" />
+    <hkern u1="&#xd6;" u2="L" k="10" />
+    <hkern u1="&#xd6;" u2="K" k="10" />
+    <hkern u1="&#xd6;" u2="H" k="10" />
+    <hkern u1="&#xd6;" u2="G" k="10" />
+    <hkern u1="&#xd6;" u2="F" k="20" />
+    <hkern u1="&#xd6;" u2="D" k="20" />
+    <hkern u1="&#xd6;" u2="B" k="20" />
+    <hkern u1="&#xc6;" u2="N" k="-10" />
+    <hkern u1="&#xc6;" u2="H" k="10" />
+    <hkern u1="&#xc6;" u2="G" k="10" />
+    <hkern u1="&#xc6;" u2="D" k="10" />
+    <hkern u1="&#xc6;" u2="B" k="10" />
+    <hkern u1="&#xc0;" u2="T" k="-20" />
+    <hkern u1="&#xc0;" u2="G" k="10" />
+    <hkern u1="&#xc3;" u2="T" k="-20" />
+    <hkern u1="&#xc3;" u2="G" k="10" />
+    <hkern u1="&#xd5;" u2="W" k="10" />
+    <hkern u1="&#xd5;" u2="T" k="10" />
+    <hkern u1="&#xd5;" u2="L" k="10" />
+    <hkern u1="&#xd5;" u2="K" k="10" />
+    <hkern u1="&#xd5;" u2="H" k="10" />
+    <hkern u1="&#xd5;" u2="G" k="10" />
+    <hkern u1="&#xd5;" u2="F" k="20" />
+    <hkern u1="&#xd5;" u2="D" k="20" />
+    <hkern u1="&#xd5;" u2="B" k="20" />
+    <hkern u1="&#x152;" u2="N" k="-10" />
+    <hkern u1="&#x152;" u2="H" k="10" />
+    <hkern u1="&#x152;" u2="G" k="10" />
+    <hkern u1="&#x152;" u2="D" k="10" />
+    <hkern u1="&#x152;" u2="B" k="10" />
+    <hkern u1="&#x178;" u2="H" k="20" />
+    <hkern u1="&#x178;" u2="D" k="10" />
+    <hkern u1="&#xc2;" u2="T" k="-20" />
+    <hkern u1="&#xc2;" u2="G" k="10" />
+    <hkern u1="&#xca;" u2="N" k="-10" />
+    <hkern u1="&#xca;" u2="H" k="10" />
+    <hkern u1="&#xca;" u2="G" k="10" />
+    <hkern u1="&#xca;" u2="D" k="10" />
+    <hkern u1="&#xca;" u2="B" k="10" />
+    <hkern u1="&#xc1;" u2="T" k="-20" />
+    <hkern u1="&#xc1;" u2="G" k="10" />
+    <hkern u1="&#xcb;" u2="N" k="-10" />
+    <hkern u1="&#xcb;" u2="H" k="10" />
+    <hkern u1="&#xcb;" u2="G" k="10" />
+    <hkern u1="&#xcb;" u2="D" k="10" />
+    <hkern u1="&#xcb;" u2="B" k="10" />
+    <hkern u1="&#xc8;" u2="N" k="-10" />
+    <hkern u1="&#xc8;" u2="H" k="10" />
+    <hkern u1="&#xc8;" u2="G" k="10" />
+    <hkern u1="&#xc8;" u2="D" k="10" />
+    <hkern u1="&#xc8;" u2="B" k="10" />
+    <hkern u1="&#xcd;" u2="L" k="41" />
+    <hkern u1="&#xcd;" u2="F" k="10" />
+    <hkern u1="&#xcd;" u2="D" k="31" />
+    <hkern u1="&#xcd;" u2="B" k="20" />
+    <hkern u1="&#xce;" u2="L" k="41" />
+    <hkern u1="&#xce;" u2="F" k="10" />
+    <hkern u1="&#xce;" u2="D" k="31" />
+    <hkern u1="&#xce;" u2="B" k="20" />
+    <hkern u1="&#xcf;" u2="L" k="41" />
+    <hkern u1="&#xcf;" u2="F" k="10" />
+    <hkern u1="&#xcf;" u2="D" k="31" />
+    <hkern u1="&#xcf;" u2="B" k="20" />
+    <hkern u1="&#xcc;" u2="L" k="41" />
+    <hkern u1="&#xcc;" u2="F" k="10" />
+    <hkern u1="&#xcc;" u2="D" k="31" />
+    <hkern u1="&#xcc;" u2="B" k="20" />
+    <hkern u1="&#xd3;" u2="W" k="10" />
+    <hkern u1="&#xd3;" u2="T" k="10" />
+    <hkern u1="&#xd3;" u2="L" k="10" />
+    <hkern u1="&#xd3;" u2="K" k="10" />
+    <hkern u1="&#xd3;" u2="H" k="10" />
+    <hkern u1="&#xd3;" u2="G" k="10" />
+    <hkern u1="&#xd3;" u2="F" k="20" />
+    <hkern u1="&#xd3;" u2="D" k="20" />
+    <hkern u1="&#xd3;" u2="B" k="20" />
+    <hkern u1="&#xd4;" u2="W" k="10" />
+    <hkern u1="&#xd4;" u2="T" k="10" />
+    <hkern u1="&#xd4;" u2="L" k="10" />
+    <hkern u1="&#xd4;" u2="K" k="10" />
+    <hkern u1="&#xd4;" u2="H" k="10" />
+    <hkern u1="&#xd4;" u2="G" k="10" />
+    <hkern u1="&#xd4;" u2="F" k="20" />
+    <hkern u1="&#xd4;" u2="D" k="20" />
+    <hkern u1="&#xd4;" u2="B" k="20" />
+    <hkern u1="&#xd2;" u2="W" k="10" />
+    <hkern u1="&#xd2;" u2="T" k="10" />
+    <hkern u1="&#xd2;" u2="L" k="10" />
+    <hkern u1="&#xd2;" u2="K" k="10" />
+    <hkern u1="&#xd2;" u2="H" k="10" />
+    <hkern u1="&#xd2;" u2="G" k="10" />
+    <hkern u1="&#xd2;" u2="F" k="20" />
+    <hkern u1="&#xd2;" u2="D" k="20" />
+    <hkern u1="&#xd2;" u2="B" k="20" />
+  </font>
+</defs></svg>
diff --git a/src/web/wwwroot/fonts/satisfy/satisfy.ttf b/src/web/wwwroot/fonts/satisfy/satisfy.ttf
new file mode 100755
index 0000000000000000000000000000000000000000..fbee6cd74eb6e743dcd7dc40b1299a59303f0215
Binary files /dev/null and b/src/web/wwwroot/fonts/satisfy/satisfy.ttf differ
diff --git a/src/web/wwwroot/fonts/satisfy/satisfy.woff b/src/web/wwwroot/fonts/satisfy/satisfy.woff
new file mode 100755
index 0000000000000000000000000000000000000000..77709f9528d7a5dcd550d5c3c63fb32c7ff9c78c
Binary files /dev/null and b/src/web/wwwroot/fonts/satisfy/satisfy.woff differ
diff --git a/src/web/wwwroot/images/smily-face.png b/src/web/wwwroot/images/smily-face.png
new file mode 100644
index 0000000000000000000000000000000000000000..161df703dbce1aa4aaf588baa2288b650afd9aa9
Binary files /dev/null and b/src/web/wwwroot/images/smily-face.png differ
diff --git a/test/ControllerTests/AccountController/AccountControllerTest.cs b/test/ControllerTests/AccountController/AccountControllerTest.cs
new file mode 100644
index 0000000000000000000000000000000000000000..772819eac7b8af3bb4a9609c98924ae388d34172
--- /dev/null
+++ b/test/ControllerTests/AccountController/AccountControllerTest.cs
@@ -0,0 +1,51 @@
+using System;
+using System.Collections.Generic;
+using System.Net;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.Extensions.DependencyInjection;
+using StatusMonitor.Web.Controllers.View;
+using StatusMonitor.Shared.Extensions;
+using StatusMonitor.Shared.Models.Entities;
+using StatusMonitor.Shared.Services;
+using Xunit;
+using Microsoft.AspNetCore.Http;
+using Moq;
+using Microsoft.AspNetCore.Hosting;
+using Microsoft.Extensions.Configuration;
+using Microsoft.Extensions.Logging;
+using StatusMonitor.Shared.Models;
+using Microsoft.AspNetCore.Mvc.ViewFeatures;
+using StatusMonitor.Web.Services;
+
+namespace StatusMonitor.Tests.ControllerTests
+{
+	public partial class AccountControllerTest
+	{
+		private readonly Mock<IAuthService> _mockAuth = new Mock<IAuthService>();
+
+		private readonly AccountController _controller;
+
+		public AccountControllerTest()
+		{
+			var mockQuery = new Mock<IQueryCollection>();
+			mockQuery.Setup(query => query["returnurl"]).Returns("/return");
+
+			var mockContext = new Mock<HttpContext>();
+			mockContext.Setup(context => context.Request.Query).Returns(mockQuery.Object);
+
+			var config = new Mock<IConfiguration>();
+			config
+				.SetupGet(conf => conf["Secrets:AdminPassword"])
+				.Returns("good-password");
+
+			_controller = new AccountController(
+				config.Object,
+				_mockAuth.Object
+			);
+
+			_controller.ControllerContext.HttpContext = mockContext.Object;
+			_controller.TempData = new Mock<ITempDataDictionary>().Object;
+		}
+	}
+}
diff --git a/test/ControllerTests/AccountController/Authenticate.cs b/test/ControllerTests/AccountController/Authenticate.cs
new file mode 100644
index 0000000000000000000000000000000000000000..c5436ecc2d71d1624f2d3abd2a464446b3e809fa
--- /dev/null
+++ b/test/ControllerTests/AccountController/Authenticate.cs
@@ -0,0 +1,150 @@
+using System;
+using System.Collections.Generic;
+using System.Net;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.Extensions.DependencyInjection;
+using StatusMonitor.Web.Controllers.View;
+using StatusMonitor.Shared.Extensions;
+using StatusMonitor.Shared.Models.Entities;
+using StatusMonitor.Shared.Services;
+using Xunit;
+using Microsoft.AspNetCore.Http;
+using Moq;
+using Microsoft.AspNetCore.Hosting;
+using Microsoft.Extensions.Configuration;
+using Microsoft.Extensions.Logging;
+using StatusMonitor.Shared.Models;
+using Microsoft.AspNetCore.Mvc.ViewFeatures;
+using StatusMonitor.Web.Services;
+using System.Linq;
+using StatusMonitor.Web.ViewModels;
+
+namespace StatusMonitor.Tests.ControllerTests
+{
+	public partial class AccountControllerTest
+	{
+		[Fact]
+		public async Task AuthenticateReCaptchaError()
+		{
+			// Arrange
+			_controller.ModelState.AddModelError("Auth", "ReCaptcha error");
+
+			// Act
+			var result = await _controller.Authenticate();
+
+			// Assert
+			var viewResult = Assert.IsType<ViewResult>(result);
+
+			var model = Assert.IsAssignableFrom<ReturnUrlViewModel>(
+				viewResult.Model
+			);
+
+			Assert.True(model.IsError);
+			Assert.Equal("/return", model.ReturnUrl);
+
+			_mockAuth
+				.Verify(
+					auth => auth.SignInAsync(),
+					Times.Never()
+				);
+		}
+
+		[Fact]
+		public async Task AuthenticatePasswordError()
+		{
+			// Arrange
+			var mockForm = new Mock<IFormCollection>();
+			mockForm.Setup(form => form["password"]).Returns("bad-password");
+
+			var mockQuery = new Mock<IQueryCollection>();
+			mockQuery.Setup(query => query["returnurl"]).Returns("/return");
+
+			var mockContext = new Mock<HttpContext>();
+			mockContext.Setup(context => context.Request.Form).Returns(mockForm.Object);
+			mockContext.Setup(context => context.Request.Query).Returns(mockQuery.Object);
+
+			_controller.ControllerContext.HttpContext = mockContext.Object;
+
+			// Act
+			var result = await _controller.Authenticate();
+
+			// Assert
+			var viewResult = Assert.IsType<ViewResult>(result);
+
+			var model = Assert.IsAssignableFrom<ReturnUrlViewModel>(
+				viewResult.Model
+			);
+
+			Assert.True(model.IsError);
+			Assert.Equal("/return", model.ReturnUrl);
+
+			_mockAuth
+				.Verify(
+					auth => auth.SignInAsync(),
+					Times.Never()
+				);
+		}
+
+		[Fact]
+		public async Task AuthenticateOKWithRedirect()
+		{
+			// Arrange
+			var mockForm = new Mock<IFormCollection>();
+			mockForm.Setup(form => form["password"]).Returns("good-password");
+
+			var mockQuery = new Mock<IQueryCollection>();
+			mockQuery.Setup(query => query["returnurl"]).Returns("/return");
+
+			var mockContext = new Mock<HttpContext>();
+			mockContext.Setup(context => context.Request.Form).Returns(mockForm.Object);
+			mockContext.Setup(context => context.Request.Query).Returns(mockQuery.Object);
+
+			_controller.ControllerContext.HttpContext = mockContext.Object;
+
+			// Act
+			var result = await _controller.Authenticate();
+
+			// Assert
+			var redirectResult = Assert.IsType<RedirectResult>(result);
+
+			Assert.Equal("/return", redirectResult.Url);
+
+			_mockAuth
+				.Verify(
+					auth => auth.SignInAsync()
+				);
+		}
+
+		[Fact]
+		public async Task AuthenticateOKWithoutRedirect()
+		{
+			// Arrange
+			var mockForm = new Mock<IFormCollection>();
+			mockForm.Setup(form => form["password"]).Returns("good-password");
+
+			var mockQuery = new Mock<IQueryCollection>();
+			mockQuery.Setup(query => query["returnurl"]).Returns("");
+
+			var mockContext = new Mock<HttpContext>();
+			mockContext.Setup(context => context.Request.Form).Returns(mockForm.Object);
+			mockContext.Setup(context => context.Request.Query).Returns(mockQuery.Object);
+
+			_controller.ControllerContext.HttpContext = mockContext.Object;
+
+			// Act
+			var result = await _controller.Authenticate();
+
+			// Assert
+			var redirectToActionResult = Assert.IsType<RedirectToActionResult>(result);
+
+			Assert.Equal("Index", redirectToActionResult.ActionName);
+			Assert.Equal("Home", redirectToActionResult.ControllerName);
+
+			_mockAuth
+				.Verify(
+					auth => auth.SignInAsync()
+				);
+		}
+	}
+}
diff --git a/test/ControllerTests/AccountController/Login.cs b/test/ControllerTests/AccountController/Login.cs
new file mode 100644
index 0000000000000000000000000000000000000000..88d3dd6d71187aa2da3efdb9fa347c466a8a26b8
--- /dev/null
+++ b/test/ControllerTests/AccountController/Login.cs
@@ -0,0 +1,44 @@
+using System;
+using System.Collections.Generic;
+using System.Net;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.Extensions.DependencyInjection;
+using StatusMonitor.Web.Controllers.View;
+using StatusMonitor.Shared.Extensions;
+using StatusMonitor.Shared.Models.Entities;
+using StatusMonitor.Shared.Services;
+using Xunit;
+using Microsoft.AspNetCore.Http;
+using Moq;
+using Microsoft.AspNetCore.Hosting;
+using Microsoft.Extensions.Configuration;
+using Microsoft.Extensions.Logging;
+using StatusMonitor.Shared.Models;
+using Microsoft.AspNetCore.Mvc.ViewFeatures;
+using StatusMonitor.Web.Services;
+using System.Linq;
+using StatusMonitor.Web.ViewModels;
+
+namespace StatusMonitor.Tests.ControllerTests
+{
+	public partial class AccountControllerTest
+	{
+		[Fact]
+		public void Login()
+		{
+			// Act
+			var result = _controller.Login();
+
+			// Assert
+			var viewResult = Assert.IsType<ViewResult>(result);
+
+			var model = Assert.IsAssignableFrom<ReturnUrlViewModel>(
+				viewResult.Model
+			);
+
+			Assert.False(model.IsError);
+			Assert.Equal("/return", model.ReturnUrl);
+		}
+	}
+}
diff --git a/test/ControllerTests/AccountController/Logout.cs b/test/ControllerTests/AccountController/Logout.cs
new file mode 100644
index 0000000000000000000000000000000000000000..a9c87803da19382d097d476c3b5c2278e1667448
--- /dev/null
+++ b/test/ControllerTests/AccountController/Logout.cs
@@ -0,0 +1,71 @@
+using System;
+using System.Collections.Generic;
+using System.Net;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.Extensions.DependencyInjection;
+using StatusMonitor.Web.Controllers.View;
+using StatusMonitor.Shared.Extensions;
+using StatusMonitor.Shared.Models.Entities;
+using StatusMonitor.Shared.Services;
+using Xunit;
+using Microsoft.AspNetCore.Http;
+using Moq;
+using Microsoft.AspNetCore.Hosting;
+using Microsoft.Extensions.Configuration;
+using Microsoft.Extensions.Logging;
+using StatusMonitor.Shared.Models;
+using Microsoft.AspNetCore.Mvc.ViewFeatures;
+using StatusMonitor.Web.Services;
+using System.Linq;
+using StatusMonitor.Web.ViewModels;
+
+namespace StatusMonitor.Tests.ControllerTests
+{
+	public partial class AccountControllerTest
+	{
+		[Fact]
+		public async Task LogoutWithReturn()
+		{
+			// Act
+			var result = await _controller.Logout();
+
+			// Assert
+			var redirectResult = Assert.IsType<RedirectResult>(result);
+
+			Assert.Equal("/return", redirectResult.Url);
+
+			_mockAuth
+				.Verify(
+					auth => auth.SignOutAsync()
+				);
+		}
+
+		[Fact]
+		public async Task LogoutWithoutReturn()
+		{
+			// Arrange
+			var mockQuery = new Mock<IQueryCollection>();
+			mockQuery.Setup(query => query["returnurl"]).Returns("");
+
+			var mockContext = new Mock<HttpContext>();
+			mockContext.Setup(context => context.Request.Query).Returns(mockQuery.Object);
+
+			_controller.ControllerContext.HttpContext = mockContext.Object;
+
+			// Act
+			var result = await _controller.Logout();
+
+			// Assert
+			var redirectToActionResult = Assert.IsType<RedirectToActionResult>(result);
+
+			Assert.Equal("Index", redirectToActionResult.ActionName);
+			Assert.Equal("Home", redirectToActionResult.ControllerName);
+
+			_mockAuth
+				.Verify(
+					auth => auth.SignOutAsync()
+				);
+		}
+	}
+}
diff --git a/test/ControllerTests/AdminController/AdminControllerTest.cs b/test/ControllerTests/AdminController/AdminControllerTest.cs
new file mode 100644
index 0000000000000000000000000000000000000000..db3922b63c1c4ae076958c621799cf5d568470b6
--- /dev/null
+++ b/test/ControllerTests/AdminController/AdminControllerTest.cs
@@ -0,0 +1,52 @@
+using System;
+using System.Collections.Generic;
+using System.Net;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.Extensions.DependencyInjection;
+using StatusMonitor.Web.Controllers.View;
+using StatusMonitor.Shared.Extensions;
+using StatusMonitor.Shared.Models.Entities;
+using StatusMonitor.Shared.Services;
+using Xunit;
+using Microsoft.AspNetCore.Http;
+using Moq;
+using Microsoft.AspNetCore.Hosting;
+using Microsoft.Extensions.Configuration;
+using Microsoft.Extensions.Logging;
+using StatusMonitor.Shared.Models;
+using Microsoft.AspNetCore.Mvc.ViewFeatures;
+using StatusMonitor.Web.Services;
+using StatusMonitor.Web.Controllers.Api;
+
+namespace StatusMonitor.Tests.ControllerTests
+{
+	public partial class AdminControllerTest
+	{
+		private readonly Mock<ILoggingService> _mockLoggingService = new Mock<ILoggingService>();
+		private readonly Mock<IMetricService> _mockMetricService = new Mock<IMetricService>();
+		private readonly Mock<IApiController> _mockApiController = new Mock<IApiController>();
+		private readonly Mock<ICleanService> _mockCleanService = new Mock<ICleanService>();
+		
+
+		private readonly AdminController _controller;
+
+		public AdminControllerTest()
+		{
+			var mockServiceProvider = new Mock<IServiceProvider>();
+			mockServiceProvider
+				.Setup(provider => provider.GetService(typeof(IApiController)))
+				.Returns(_mockApiController.Object);
+
+			_controller = new AdminController(
+				_mockLoggingService.Object,
+				new Mock<ILogger<AdminController>>().Object,
+				_mockMetricService.Object,
+				mockServiceProvider.Object,
+				_mockCleanService.Object
+			);
+			_controller.ControllerContext.HttpContext = new DefaultHttpContext();
+			_controller.TempData = new Mock<ITempDataDictionary>().Object;
+		}
+	}
+}
diff --git a/test/ControllerTests/AdminController/Clean.cs b/test/ControllerTests/AdminController/Clean.cs
new file mode 100644
index 0000000000000000000000000000000000000000..1a767b941a08de18a39b6152c8deaa8594ba72b9
--- /dev/null
+++ b/test/ControllerTests/AdminController/Clean.cs
@@ -0,0 +1,51 @@
+using System;
+using System.Collections.Generic;
+using System.Net;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.Extensions.DependencyInjection;
+using StatusMonitor.Web.Controllers.View;
+using StatusMonitor.Shared.Extensions;
+using StatusMonitor.Shared.Models.Entities;
+using StatusMonitor.Shared.Services;
+using Xunit;
+using Microsoft.AspNetCore.Http;
+using Moq;
+using Microsoft.AspNetCore.Hosting;
+using Microsoft.Extensions.Configuration;
+using Microsoft.Extensions.Logging;
+using StatusMonitor.Shared.Models;
+using Microsoft.AspNetCore.Mvc.ViewFeatures;
+using StatusMonitor.Web.Services;
+using System.Linq;
+
+namespace StatusMonitor.Tests.ControllerTests
+{
+	public partial class AdminControllerTest
+	{
+		[Fact]
+		public async Task CleanFailure()
+		{
+			// Act
+			var result = await _controller.Clean(null);
+
+			// Assert
+			Assert.IsType<BadRequestObjectResult>(result);
+		}
+
+		[Fact]
+		public async Task CleanSuccess()
+		{
+			// Act
+			var result = await _controller.Clean(300);
+
+			// Assert
+			var redirectToActionResult = Assert.IsType<RedirectToActionResult>(result);
+
+			Assert.Equal("Index", redirectToActionResult.ActionName);
+
+			_mockCleanService
+				.Verify(clean => clean.CleanDataPointsAsync(It.IsAny<TimeSpan?>()));
+		}
+	}
+}
diff --git a/test/ControllerTests/AdminController/DeleteMetric.cs b/test/ControllerTests/AdminController/DeleteMetric.cs
new file mode 100644
index 0000000000000000000000000000000000000000..687fa082584eeb97aa4ee2034f1b7518c607d5f1
--- /dev/null
+++ b/test/ControllerTests/AdminController/DeleteMetric.cs
@@ -0,0 +1,60 @@
+using System;
+using System.Collections.Generic;
+using System.Net;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.Extensions.DependencyInjection;
+using StatusMonitor.Web.Controllers.View;
+using StatusMonitor.Shared.Extensions;
+using StatusMonitor.Shared.Models.Entities;
+using StatusMonitor.Shared.Services;
+using Xunit;
+using Microsoft.AspNetCore.Http;
+using Moq;
+using Microsoft.AspNetCore.Hosting;
+using Microsoft.Extensions.Configuration;
+using Microsoft.Extensions.Logging;
+using StatusMonitor.Shared.Models;
+using Microsoft.AspNetCore.Mvc.ViewFeatures;
+using StatusMonitor.Web.Services;
+using System.Linq;
+using StatusMonitor.Web.ViewModels;
+
+namespace StatusMonitor.Tests.ControllerTests
+{
+	public partial class AdminControllerTest
+	{
+		[Fact]
+		public async Task DeleteMetricFailure()
+		{
+			// Arrange
+			_mockApiController
+				.Setup(api => api.RemoveMetric(It.IsAny<MetricRemovalViewModel>()))
+				.ReturnsAsync(new BadRequestResult());
+
+			// Act
+			var result = await _controller.DeleteMetric(new MetricRemovalViewModel());
+
+			// Assert
+			Assert.IsType<BadRequestResult>(result);
+		}
+
+		[Fact]
+		public async Task DeleteMetricSuccess()
+		{
+			// Arrange
+			_mockApiController
+				.Setup(api => api.RemoveMetric(It.IsAny<MetricRemovalViewModel>()))
+				.ReturnsAsync(new OkObjectResult("Good"));
+
+			// Act
+			var result = await _controller.DeleteMetric(new MetricRemovalViewModel());
+
+			// Assert
+			var redirectToActionResult = Assert.IsType<RedirectToActionResult>(result);
+
+			Assert.Equal("Index", redirectToActionResult.ActionName);
+			Assert.Equal("Home", redirectToActionResult.ControllerName);
+		}
+	}
+}
diff --git a/test/ControllerTests/AdminController/Index.cs b/test/ControllerTests/AdminController/Index.cs
new file mode 100644
index 0000000000000000000000000000000000000000..6d42dbdb22808cc1c1ed3aac5eeeb8f04effed29
--- /dev/null
+++ b/test/ControllerTests/AdminController/Index.cs
@@ -0,0 +1,47 @@
+using System;
+using System.Collections.Generic;
+using System.Net;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.Extensions.DependencyInjection;
+using StatusMonitor.Web.Controllers.View;
+using StatusMonitor.Shared.Extensions;
+using StatusMonitor.Shared.Models.Entities;
+using StatusMonitor.Shared.Services;
+using Xunit;
+using Microsoft.AspNetCore.Http;
+using Moq;
+using Microsoft.AspNetCore.Hosting;
+using Microsoft.Extensions.Configuration;
+using Microsoft.Extensions.Logging;
+using StatusMonitor.Shared.Models;
+using Microsoft.AspNetCore.Mvc.ViewFeatures;
+using StatusMonitor.Web.Services;
+using System.Linq;
+
+namespace StatusMonitor.Tests.ControllerTests
+{
+	public partial class AdminControllerTest
+	{
+		[Fact]
+		public async Task Index()
+		{
+			// Arrange
+			_mockMetricService
+				.Setup(mock => mock.GetMetricsAsync(It.IsAny<Metrics?>(), It.IsAny<string>()))
+				.ReturnsAsync(new List<Metric> { new Metric() });
+
+			// Act
+			var result = await _controller.Index();
+
+			// Assert
+			var viewResult = Assert.IsType<ViewResult>(result);
+
+			var metrics = Assert.IsAssignableFrom<IEnumerable<Metric>>(
+				viewResult.ViewData["Metrics"]
+			);
+
+			Assert.NotEmpty(metrics);
+		}
+	}
+}
diff --git a/test/ControllerTests/AdminController/Log.cs b/test/ControllerTests/AdminController/Log.cs
new file mode 100644
index 0000000000000000000000000000000000000000..a26b470df5dd0ee02b8322baf2e4607752583ad4
--- /dev/null
+++ b/test/ControllerTests/AdminController/Log.cs
@@ -0,0 +1,74 @@
+using System;
+using System.Collections.Generic;
+using System.Net;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.Extensions.DependencyInjection;
+using StatusMonitor.Web.Controllers.View;
+using StatusMonitor.Shared.Extensions;
+using StatusMonitor.Shared.Models.Entities;
+using StatusMonitor.Shared.Services;
+using Xunit;
+using Microsoft.AspNetCore.Http;
+using Moq;
+using Microsoft.AspNetCore.Hosting;
+using Microsoft.Extensions.Configuration;
+using Microsoft.Extensions.Logging;
+using StatusMonitor.Shared.Models;
+using Microsoft.AspNetCore.Mvc.ViewFeatures;
+using StatusMonitor.Web.Services;
+using System.Linq;
+
+namespace StatusMonitor.Tests.ControllerTests
+{
+	public partial class AdminControllerTest
+	{
+		[Fact]
+		public async Task LogOK()
+		{
+			// Arrange
+			_mockLoggingService
+				.Setup(log => log.GetMessageByIdAsync(It.IsAny<int>()))
+				.ReturnsAsync(new LogEntry { Id = 1 });
+
+			// Act
+			var result = await _controller.Log(1);
+
+			// Assert
+			var viewResult = Assert.IsType<ViewResult>(result);
+
+			var logEntry = Assert.IsAssignableFrom<LogEntry>(
+				viewResult.Model
+			);
+
+			Assert.Equal(1, logEntry.Id);
+		}
+
+		[Fact]
+		public async Task LogNotFound()
+		{
+			// Arrange
+			_mockLoggingService
+				.Setup(log => log.GetMessageByIdAsync(It.IsAny<int>()))
+				.ReturnsAsync(null);
+
+			// Act
+			var result = await _controller.Log(1);
+
+			// Assert
+			Assert.IsType<NotFoundObjectResult>(result);
+		}
+
+		[Fact]
+		public async Task LogRedirect()
+		{
+			// Act
+			var result = await _controller.Log(null);
+
+			// Assert
+			var redirectToActionResult = Assert.IsType<RedirectToActionResult>(result);
+
+			Assert.Equal("Logs", redirectToActionResult.ActionName);
+		}
+	}
+}
diff --git a/test/ControllerTests/AdminController/Logs.cs b/test/ControllerTests/AdminController/Logs.cs
new file mode 100644
index 0000000000000000000000000000000000000000..d3a67d8b79c532b034933654d0c7c714c892b1f4
--- /dev/null
+++ b/test/ControllerTests/AdminController/Logs.cs
@@ -0,0 +1,92 @@
+using System;
+using System.Collections.Generic;
+using System.Net;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.Extensions.DependencyInjection;
+using StatusMonitor.Web.Controllers.View;
+using StatusMonitor.Shared.Extensions;
+using StatusMonitor.Shared.Models.Entities;
+using StatusMonitor.Shared.Services;
+using Xunit;
+using Microsoft.AspNetCore.Http;
+using Moq;
+using Microsoft.AspNetCore.Hosting;
+using Microsoft.Extensions.Configuration;
+using Microsoft.Extensions.Logging;
+using StatusMonitor.Shared.Models;
+using Microsoft.AspNetCore.Mvc.ViewFeatures;
+using StatusMonitor.Web.Services;
+using System.Linq;
+using StatusMonitor.Web.ViewModels;
+
+namespace StatusMonitor.Tests.ControllerTests
+{
+	public partial class AdminControllerTest
+	{
+		[Fact]
+		public async Task LogsOK()
+		{
+			// Arrange
+			_mockLoggingService
+				.Setup(log => log.GetAvailableFilterDataAsync())
+				.ReturnsAsync(new LogMessagesFilterModel
+				{
+					Severities = new List<LogEntrySeverities> { LogEntrySeverities.Debug }
+				});
+
+			// Act
+			var result = await _controller.Logs(new LogMessagesFilterViewModel
+			{
+				Sources = "the-source"
+			});
+
+			// Assert
+			var viewResult = Assert.IsType<ViewResult>(result);
+
+			var filterViewModel = Assert.IsAssignableFrom<LogMessagesFilterViewModel>(
+				viewResult.Model
+			);
+
+			var filterModel = Assert.IsAssignableFrom<LogMessagesFilterModel>(
+				viewResult.ViewData["FilterData"]
+			);
+
+			Assert.Equal("the-source", filterViewModel.Sources);
+			Assert.Equal(
+				new List<LogEntrySeverities> { LogEntrySeverities.Debug },
+				filterModel.Severities
+			);
+		}
+
+		[Fact]
+		public async Task LogsBadRequest()
+		{
+			// Arrange
+			_mockLoggingService
+				.Setup(log => log.GetLogMessagesAsync(It.IsAny<LogMessagesFilterModel>()))
+				.ThrowsAsync(new Exception());
+
+			// Act
+			var result = await _controller.Logs(new LogMessagesFilterViewModel());
+
+			// Assert
+			Assert.IsType<BadRequestObjectResult>(result);
+		}
+
+		[Fact]
+		public async Task LogsRedirect()
+		{
+			// Act
+			var result = await _controller.Logs(new LogMessagesFilterViewModel{
+				Id = 1
+			});
+
+			// Assert
+			var redirectToActionResult = Assert.IsType<RedirectToActionResult>(result);
+
+			Assert.Equal("Log", redirectToActionResult.ActionName);
+			Assert.Equal(1, redirectToActionResult.RouteValues["id"]);
+		}
+	}
+}
diff --git a/test/ControllerTests/AdminController/Metric.cs b/test/ControllerTests/AdminController/Metric.cs
new file mode 100644
index 0000000000000000000000000000000000000000..4d777382bee914435ae24b2d7e805c04dd6d230e
--- /dev/null
+++ b/test/ControllerTests/AdminController/Metric.cs
@@ -0,0 +1,52 @@
+using System;
+using System.Collections.Generic;
+using System.Net;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.Extensions.DependencyInjection;
+using StatusMonitor.Web.Controllers.View;
+using StatusMonitor.Shared.Extensions;
+using StatusMonitor.Shared.Models.Entities;
+using StatusMonitor.Shared.Services;
+using Xunit;
+using Microsoft.AspNetCore.Http;
+using Moq;
+using Microsoft.AspNetCore.Hosting;
+using Microsoft.Extensions.Configuration;
+using Microsoft.Extensions.Logging;
+using StatusMonitor.Shared.Models;
+using Microsoft.AspNetCore.Mvc.ViewFeatures;
+using StatusMonitor.Web.Services;
+using System.Linq;
+
+namespace StatusMonitor.Tests.ControllerTests
+{
+	public partial class AdminControllerTest
+	{
+		[Fact]
+		public void MetricSuccess()
+		{
+			// Act
+			var result = _controller.Metric($"{Metrics.CpuLoad.ToString()}@the-source");
+
+			// Assert
+			var redirectToActionResult = Assert.IsType<RedirectToActionResult>(result);
+
+			Assert.Equal("Metric", redirectToActionResult.ActionName);
+			Assert.Equal("Home", redirectToActionResult.ControllerName);
+
+			Assert.Equal(Metrics.CpuLoad.ToString(), redirectToActionResult.RouteValues["Type"]);
+			Assert.Equal("the-source", redirectToActionResult.RouteValues["Source"]);
+		}
+
+		[Fact]
+		public void MetricFailure()
+		{
+			// Act
+			var result = _controller.Metric(null);
+
+			// Assert
+			var badRequestObjectResult = Assert.IsType<BadRequestObjectResult>(result);
+		}
+	}
+}
diff --git a/test/ControllerTests/AdminController/UpdateMetric.cs b/test/ControllerTests/AdminController/UpdateMetric.cs
new file mode 100644
index 0000000000000000000000000000000000000000..92e93f9802d0d93a727928fe63fdb520e9dbc084
--- /dev/null
+++ b/test/ControllerTests/AdminController/UpdateMetric.cs
@@ -0,0 +1,69 @@
+using System;
+using System.Collections.Generic;
+using System.Net;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.Extensions.DependencyInjection;
+using StatusMonitor.Web.Controllers.View;
+using StatusMonitor.Shared.Extensions;
+using StatusMonitor.Shared.Models.Entities;
+using StatusMonitor.Shared.Services;
+using Xunit;
+using Microsoft.AspNetCore.Http;
+using Moq;
+using Microsoft.AspNetCore.Hosting;
+using Microsoft.Extensions.Configuration;
+using Microsoft.Extensions.Logging;
+using StatusMonitor.Shared.Models;
+using Microsoft.AspNetCore.Mvc.ViewFeatures;
+using StatusMonitor.Web.Services;
+using System.Linq;
+using StatusMonitor.Web.ViewModels;
+
+namespace StatusMonitor.Tests.ControllerTests
+{
+	public partial class AdminControllerTest
+	{
+		[Fact]
+		public async Task UpdateMetricFailure()
+		{
+			// Arrange
+			_mockApiController
+				.Setup(api => api.MetricUpdate(It.IsAny<MetricUpdateViewModel>()))
+				.ReturnsAsync(new BadRequestResult());
+
+			// Act
+			var result = await _controller.UpdateMetric(new MetricUpdateViewModel());
+
+			// Assert
+			var badRequestResult = Assert.IsType<BadRequestResult>(result);
+		}
+
+		[Fact]
+		public async Task UpdateMetricSuccess()
+		{
+			// Arrange
+			_mockApiController
+				.Setup(api => api.MetricUpdate(It.IsAny<MetricUpdateViewModel>()))
+				.ReturnsAsync(new OkObjectResult("Good"));
+
+			// Act
+			var result = await _controller.UpdateMetric(
+				new MetricUpdateViewModel
+				{
+					Source = "the-source",
+					MetricType = Metrics.CpuLoad
+				}
+			);
+
+			// Assert
+			var redirectToActionResult = Assert.IsType<RedirectToActionResult>(result);
+
+			Assert.Equal("Metric", redirectToActionResult.ActionName);
+			Assert.Equal("Home", redirectToActionResult.ControllerName);
+
+			Assert.Equal(Metrics.CpuLoad.ToString(), redirectToActionResult.RouteValues["Type"]);
+			Assert.Equal("the-source", redirectToActionResult.RouteValues["Source"]);
+		}
+	}
+}
diff --git a/test/ControllerTests/ApiController/ApiControllerTest.cs b/test/ControllerTests/ApiController/ApiControllerTest.cs
new file mode 100644
index 0000000000000000000000000000000000000000..fc0a21e8bbd9e59558f4e65322735f2a2da7459d
--- /dev/null
+++ b/test/ControllerTests/ApiController/ApiControllerTest.cs
@@ -0,0 +1,58 @@
+using Microsoft.AspNetCore.Hosting;
+using Microsoft.Extensions.Configuration;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Logging;
+using StatusMonitor.Shared.Extensions;
+using StatusMonitor.Shared.Models;
+using StatusMonitor.Shared.Services;
+using StatusMonitor.Web.Controllers.Api;
+using StatusMonitor.Web.Services;
+using Moq;
+
+namespace StatusMonitor.Tests.ControllerTests
+{
+	public partial class ApiControllerTest
+	{
+		private readonly IDataContext _context;
+		private readonly Mock<IMetricService> _mockMetricService = new Mock<IMetricService>();
+		private readonly Mock<ILoggingService> _mockLoggingService = new Mock<ILoggingService>();
+		private readonly Mock<IConfiguration> _mockConfig = new Mock<IConfiguration>();
+		private readonly Mock<INotificationService> _mockNotify = new Mock<INotificationService>();
+		private readonly Mock<IAuthService> _mockAuth = new Mock<IAuthService>();
+
+		private readonly ApiController _controller;
+
+		public ApiControllerTest()
+		{
+			var services = new ServiceCollection();
+
+			var mockEnv = new Mock<IHostingEnvironment>();
+			mockEnv
+				.SetupGet(environment => environment.EnvironmentName)
+				.Returns("Testing");
+			var env = mockEnv.Object;
+
+			services.RegisterSharedServices(env, new Mock<IConfiguration>().Object);
+
+			_context = services
+				.BuildServiceProvider()
+				.GetRequiredService<IDataContext>();
+
+
+			var config = new Mock<IConfiguration>();
+			config
+				.SetupGet(conf => conf["Secrets:AdminPassword"])
+				.Returns("good-password");
+
+			_controller = new ApiController(
+				_context,
+				_mockMetricService.Object,
+				new Mock<ILogger<ApiController>>().Object,
+				_mockLoggingService.Object,
+				_mockConfig.Object,
+				_mockNotify.Object,
+				_mockAuth.Object
+			);
+		}
+	}
+}
diff --git a/test/ControllerTests/ApiController/LogMessage.cs b/test/ControllerTests/ApiController/LogMessage.cs
new file mode 100644
index 0000000000000000000000000000000000000000..7c433c067cdacc4f49895e70cbc4357ee97c0e41
--- /dev/null
+++ b/test/ControllerTests/ApiController/LogMessage.cs
@@ -0,0 +1,47 @@
+using System.Threading.Tasks;
+using Moq;
+using StatusMonitor.Shared.Models.Entities;
+using StatusMonitor.Web.ViewModels;
+using Xunit;
+
+namespace StatusMonitor.Tests.ControllerTests
+{
+	public partial class ApiControllerTest
+	{
+		[Theory]
+		[InlineData(true)]
+		[InlineData(false)]
+		public async Task LogMessageSchedulesNotification(bool severityEnabled)
+		{
+			// Arrange
+			_mockConfig
+				.SetupGet(conf => conf["Guard:Logging:Requests"])
+				.Returns(100.ToString());
+			_mockConfig
+				.SetupGet(conf => conf["Guard:Logging:PerSeconds"])
+				.Returns(100.ToString());
+			_mockConfig
+				.SetupGet(conf => conf["Logging:LogSeverityReported"])
+				.Returns((severityEnabled ? LogEntrySeverities.Warn : LogEntrySeverities.Error).ToString());
+
+			// Act
+			await _controller.LogMessage(
+				new LogMessageViewModel
+				{
+					MessageSeverity = LogEntrySeverities.Warn,
+					Source = "the-source"
+				}
+			);
+		
+			// Assert
+			_mockNotify
+				.Verify(
+					notif => notif.ScheduleNotificationAsync(
+						It.Is<string>(msg => msg.Contains("the-source")),
+						NotificationSeverity.High
+					),
+					severityEnabled ? Times.Once() : Times.Never()
+				);
+		}
+	}
+}
diff --git a/test/ControllerTests/ErrorController/ErrorControllerTest.cs b/test/ControllerTests/ErrorController/ErrorControllerTest.cs
new file mode 100644
index 0000000000000000000000000000000000000000..e4c9acdf00d964b5fe69b426530bbcce1b182c03
--- /dev/null
+++ b/test/ControllerTests/ErrorController/ErrorControllerTest.cs
@@ -0,0 +1,59 @@
+using System;
+using System.Collections.Generic;
+using System.Net;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.Extensions.DependencyInjection;
+using StatusMonitor.Web.Controllers.View;
+using StatusMonitor.Shared.Extensions;
+using StatusMonitor.Shared.Models.Entities;
+using StatusMonitor.Shared.Services;
+using Xunit;
+using Microsoft.AspNetCore.Http;
+using Moq;
+using Microsoft.AspNetCore.Hosting;
+using Microsoft.Extensions.Configuration;
+using Microsoft.Extensions.Logging;
+using StatusMonitor.Shared.Models;
+using Microsoft.AspNetCore.Mvc.ViewFeatures;
+using StatusMonitor.Web.Services;
+using StatusMonitor.Web.ViewModels;
+
+namespace StatusMonitor.Tests.ControllerTests
+{
+	public partial class ErrorControllerTest
+	{
+
+		private readonly ErrorController _controller;
+
+		public ErrorControllerTest()
+		{
+			_controller = new ErrorController(
+				new Mock<ILogger<ErrorController>>().Object
+			);
+			_controller.ControllerContext.HttpContext = new DefaultHttpContext();
+			_controller.TempData = new Mock<ITempDataDictionary>().Object;
+		}
+
+		[Theory]
+		[InlineData(400)]
+		[InlineData(401)]
+		[InlineData(404)]
+		[InlineData(500)]
+		[InlineData(null)]
+		public void Error(int? code)
+		{
+			// Act
+			var result = _controller.Error(code);
+
+			// Assert
+			var viewResult = Assert.IsType<ViewResult>(result);
+
+			var model = Assert.IsAssignableFrom<ErrorViewModel>(
+				viewResult.ViewData.Model
+			);
+
+			Assert.Equal(code ?? 404, model.Code);
+		}
+	}
+}
diff --git a/test/ControllerTests/HomeConroller/HomeControllerTest.cs b/test/ControllerTests/HomeConroller/HomeControllerTest.cs
new file mode 100644
index 0000000000000000000000000000000000000000..0e50b6ac5a846d6d5300b66f1d31ae870d2db2f8
--- /dev/null
+++ b/test/ControllerTests/HomeConroller/HomeControllerTest.cs
@@ -0,0 +1,62 @@
+using System;
+using System.Collections.Generic;
+using System.Net;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.Extensions.DependencyInjection;
+using StatusMonitor.Web.Controllers.View;
+using StatusMonitor.Shared.Extensions;
+using StatusMonitor.Shared.Models.Entities;
+using StatusMonitor.Shared.Services;
+using Xunit;
+using Microsoft.AspNetCore.Http;
+using Moq;
+using Microsoft.AspNetCore.Hosting;
+using Microsoft.Extensions.Configuration;
+using Microsoft.Extensions.Logging;
+using StatusMonitor.Shared.Models;
+using Microsoft.AspNetCore.Mvc.ViewFeatures;
+using StatusMonitor.Web.Services;
+
+namespace StatusMonitor.Tests.ControllerTests
+{
+	public partial class HomeControllerTest
+	{
+		private readonly Mock<IMetricService> _mockMetricService = new Mock<IMetricService>();
+		private readonly Mock<IAuthService> _mockAuth = new Mock<IAuthService>();
+
+		private readonly HomeController _controller;
+
+		public HomeControllerTest()
+		{
+			var services = new ServiceCollection();
+
+			var mockEnv = new Mock<IHostingEnvironment>();
+			mockEnv
+				.SetupGet(environment => environment.EnvironmentName)
+				.Returns("Testing");
+			var env = mockEnv.Object;
+
+			services.RegisterSharedServices(env, new Mock<IConfiguration>().Object);
+
+			var context = services
+				.BuildServiceProvider()
+				.GetRequiredService<IDataContext>();
+
+			context.ManualLabels.Add(new ManualLabel { Id = ManualLabels.None.AsInt() });
+			context.SaveChanges();
+
+			_mockAuth
+				.Setup(auth => auth.IsAuthenticated())
+				.Returns(true);
+
+			_controller = new HomeController(
+				_mockMetricService.Object,
+				context,
+				_mockAuth.Object
+			);
+			_controller.ControllerContext.HttpContext = new DefaultHttpContext();
+			_controller.TempData = new Mock<ITempDataDictionary>().Object;
+		}
+	}
+}
diff --git a/test/ControllerTests/HomeConroller/Index.cs b/test/ControllerTests/HomeConroller/Index.cs
new file mode 100644
index 0000000000000000000000000000000000000000..f59092ce3988939347674a39928c35f8038aac64
--- /dev/null
+++ b/test/ControllerTests/HomeConroller/Index.cs
@@ -0,0 +1,96 @@
+using System;
+using System.Collections.Generic;
+using System.Net;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.Extensions.DependencyInjection;
+using StatusMonitor.Web.Controllers.View;
+using StatusMonitor.Shared.Extensions;
+using StatusMonitor.Shared.Models.Entities;
+using StatusMonitor.Shared.Services;
+using Xunit;
+using Microsoft.AspNetCore.Http;
+using Moq;
+using Microsoft.AspNetCore.Hosting;
+using Microsoft.Extensions.Configuration;
+using Microsoft.Extensions.Logging;
+using StatusMonitor.Shared.Models;
+using Microsoft.AspNetCore.Mvc.ViewFeatures;
+using StatusMonitor.Web.Services;
+using System.Linq;
+
+namespace StatusMonitor.Tests.ControllerTests
+{
+	public partial class HomeControllerTest
+	{
+		[Fact]
+		public async Task Index()
+		{
+			// Arrange
+			_mockMetricService
+				.Setup(mock => mock.GetMetricsAsync(It.IsAny<Metrics>(), It.IsAny<string>()))
+				.ReturnsAsync(new List<Metric> { new Metric { Public = true } });
+
+			// Act
+			var result = await _controller.Index();
+
+			// Assert
+			var viewResult = Assert.IsType<ViewResult>(result);
+
+			var model = Assert.IsAssignableFrom<IEnumerable<Metric>>(
+				viewResult.ViewData.Model
+			);
+
+			Assert.NotEmpty(model);
+		}
+
+		[Fact]
+		public async Task IndexNoData()
+		{
+			// Arrange
+			_mockMetricService
+				.Setup(mock => mock.GetMetricsAsync(It.IsAny<Metrics>(), It.IsAny<string>()))
+				.ReturnsAsync(new List<Metric>());
+
+			// Act
+			var result = await _controller.Index();
+
+			// Assert
+			var viewResult = Assert.IsType<ViewResult>(result);
+
+			var model = Assert.IsAssignableFrom<IEnumerable<Metric>>(
+				viewResult.ViewData.Model
+			);
+
+			Assert.Empty(model);
+		}
+
+		[Fact]
+		public async Task IndexNotAuthenticated()
+		{
+			// Arrange
+			_mockMetricService
+				.Setup(mock => mock.GetMetricsAsync(It.IsAny<Metrics>(), It.IsAny<string>()))
+				.ReturnsAsync(new List<Metric> {
+					new Metric { Public = true },
+					new Metric { Public = false }
+				});
+
+			_mockAuth
+				.Setup(auth => auth.IsAuthenticated())
+				.Returns(false);
+
+			// Act
+			var result = await _controller.Index();
+
+			// Assert
+			var viewResult = Assert.IsType<ViewResult>(result);
+
+			var model = Assert.IsAssignableFrom<IEnumerable<Metric>>(
+				viewResult.ViewData.Model
+			);
+
+			Assert.Equal(1, model.Count());
+		}
+	}
+}
diff --git a/test/ControllerTests/HomeConroller/Metric.cs b/test/ControllerTests/HomeConroller/Metric.cs
new file mode 100644
index 0000000000000000000000000000000000000000..8f2a4a8c64b44cb77ff4ce00acd99ce70c9fec63
--- /dev/null
+++ b/test/ControllerTests/HomeConroller/Metric.cs
@@ -0,0 +1,98 @@
+using System;
+using System.Collections.Generic;
+using System.Net;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.Extensions.DependencyInjection;
+using StatusMonitor.Web.Controllers.View;
+using StatusMonitor.Shared.Extensions;
+using StatusMonitor.Shared.Models.Entities;
+using StatusMonitor.Shared.Services;
+using Xunit;
+using Microsoft.AspNetCore.Http;
+using Moq;
+using Microsoft.AspNetCore.Hosting;
+using Microsoft.Extensions.Configuration;
+using Microsoft.Extensions.Logging;
+using StatusMonitor.Shared.Models;
+using Microsoft.AspNetCore.Mvc.ViewFeatures;
+
+namespace StatusMonitor.Tests.ControllerTests
+{
+	public partial class HomeControllerTest
+	{
+		[Fact]
+		public async Task MetricExists()
+		{
+			// Arrange
+			_mockMetricService
+				.Setup(mock => mock.GetMetricsAsync(It.IsAny<Metrics>(), It.IsAny<string>()))
+				.ReturnsAsync(
+					new List<Metric> { 
+						new Metric {
+							CurrentValue = 50,							
+							Public = true
+						} 
+					}
+				);
+
+			// Act
+			var result = await _controller.Metric(Metrics.CpuLoad.ToString(), "existing-source");
+
+			// Assert
+			var viewResult = Assert.IsType<ViewResult>(result);
+
+			var model = Assert.IsAssignableFrom<Metric>(
+				viewResult.ViewData.Model
+			);
+
+			Assert.Equal(50, model.CurrentValue);
+		}
+
+		[Fact]
+		public async Task MetricNotExists()
+		{
+			// Arrange
+			_mockMetricService
+				.Setup(mock => mock.GetMetricsAsync(It.IsAny<Metrics>(), It.IsAny<string>()))
+				.ReturnsAsync(new List<Metric>());
+
+			// Act
+			var result = await _controller.Metric(Metrics.CpuLoad.ToString(), "non-existing-source");
+
+			// Assert
+			var notFoundResult = Assert.IsType<NotFoundResult>(result);
+		}
+
+		[Fact]
+		public async Task MetricUnauthorized()
+		{
+			// Arrange
+			_mockMetricService
+				.Setup(mock => mock.GetMetricsAsync(It.IsAny<Metrics>(), It.IsAny<string>()))
+				.ReturnsAsync(new List<Metric> { new Metric { Public = false }});
+
+			_mockAuth
+				.Setup(auth => auth.IsAuthenticated())
+				.Returns(false);
+
+			// Act
+			var result = await _controller.Metric(Metrics.CpuLoad.ToString(), "existing-source");
+
+			// Assert
+			var unauthorizedResult = Assert.IsType<UnauthorizedResult>(result);
+		}
+
+		[Fact]
+		public async Task MetricBadRequest()
+		{
+			// Act
+			var result = await _controller.Metric("bad-type", "any-source");
+
+			// Assert
+			var badRequestObjectResult = Assert.IsType<BadRequestObjectResult>(result);
+
+			Assert.Contains("type", (string)badRequestObjectResult.Value);
+		}
+	}
+}
diff --git a/test/IntegrationTests/ApiTest/ApiControllerTest.cs b/test/IntegrationTests/ApiTest/ApiControllerTest.cs
new file mode 100644
index 0000000000000000000000000000000000000000..c00e8eafe9d700cda3a5bf06886389901874033b
--- /dev/null
+++ b/test/IntegrationTests/ApiTest/ApiControllerTest.cs
@@ -0,0 +1,39 @@
+using System.Net.Http;
+using Microsoft.AspNetCore.Hosting;
+using Microsoft.AspNetCore.TestHost;
+using Microsoft.Extensions.Configuration;
+
+namespace StatusMonitor.Tests.IntegrationTests
+{
+	public partial class ApiControllerTest
+	{
+		private readonly TestServer _server;
+		private readonly HttpClient _client;
+
+		private readonly string _apiKey = "set-by-config";
+
+		public ApiControllerTest()
+		{
+			_server = new TestServer(
+				new WebHostBuilder()
+					.UseStartup<Web.Startup>()
+			);
+
+			_client = _server.CreateClient();
+
+			_apiKey =
+				new ConfigurationBuilder()
+				.AddJsonFile("appsettings.json", optional: false)
+				.Build()
+				["Secrets:ApiKey"];
+		}
+	}
+
+	/// <summary>
+	/// Set of Http methods needed for testing
+	/// </summary>
+	public enum HttpMethods
+	{
+		GET, POST, PUT, DELETE, HEAD, PATCH
+	}
+}
diff --git a/test/IntegrationTests/ApiTest/Delete/RemoveMetricEndpoint.cs b/test/IntegrationTests/ApiTest/Delete/RemoveMetricEndpoint.cs
new file mode 100644
index 0000000000000000000000000000000000000000..836e1807000af0fbcab8d3a701606d7c0e7844dc
--- /dev/null
+++ b/test/IntegrationTests/ApiTest/Delete/RemoveMetricEndpoint.cs
@@ -0,0 +1,71 @@
+using System.Collections.Generic;
+using System.Net;
+using System.Net.Http;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.WebUtilities;
+using StatusMonitor.Shared.Models.Entities;
+using Xunit;
+
+namespace StatusMonitor.Tests.IntegrationTests
+{
+	public partial class ApiControllerTest
+	{
+		[Fact]
+		public async Task RemoveMetricEndpointOK()
+		{
+			// Arrange
+
+			_client.DefaultRequestHeaders.Add("apikey", _apiKey);
+
+			await _client.PostAsync(
+				"/api/cpuload",
+				new FormUrlEncodedContent(
+					new Dictionary<string, string> {
+						{"value", 20.ToString()},
+						{"source", "the-source"}
+					 }
+				)
+			);
+
+			// Act
+
+			var okResponse = await _client.DeleteAsync(
+				QueryHelpers.AddQueryString(
+					"/api/removemetric",
+					new Dictionary<string, string> {
+						{"type", Metrics.CpuLoad.ToString() },
+						{"source", "the-source"}
+					 }
+				)
+			);
+
+			// Assert
+
+			Assert.Equal(HttpStatusCode.OK, okResponse.StatusCode);
+		}
+
+		[Fact]
+		public async Task RemoveMetricEndpointNotFound()
+		{
+			// Arrange
+
+			_client.DefaultRequestHeaders.Add("apikey", _apiKey);
+
+			// Act
+
+			var notFoundResponse = await _client.DeleteAsync(
+				QueryHelpers.AddQueryString(
+					"/api/removemetric",
+					new Dictionary<string, string> {
+						{"type", Metrics.CpuLoad.ToString() },
+						{"source", "non-existing-source"}
+					 }
+				)
+			);
+
+			// Assert
+
+			Assert.Equal(HttpStatusCode.NotFound, notFoundResponse.StatusCode);
+		}
+	}
+}
diff --git a/test/IntegrationTests/ApiTest/Get/GetDataEndpoint.cs b/test/IntegrationTests/ApiTest/Get/GetDataEndpoint.cs
new file mode 100644
index 0000000000000000000000000000000000000000..4df3d48daa8bb92fa21ef60c3a9d54f88f64bb6d
--- /dev/null
+++ b/test/IntegrationTests/ApiTest/Get/GetDataEndpoint.cs
@@ -0,0 +1,200 @@
+using System.Collections.Generic;
+using System.Net;
+using System.Net.Http;
+using System.Threading;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.WebUtilities;
+using Newtonsoft.Json;
+using StatusMonitor.Shared.Models.Entities;
+using Xunit;
+
+namespace StatusMonitor.Tests.IntegrationTests
+{
+	public partial class ApiControllerTest
+	{
+		[Fact]
+		public async Task GetDataEndpointNotFound()
+		{
+			// Arrange
+
+			var _url = "/api/getdata";
+
+			var parameters = new Dictionary<string, string> {
+				{ "metrictype", Metrics.CpuLoad.ToString() },
+				{ "source", "the-source" }
+			 };
+
+			// Act
+
+			var notFound = await _client.GetAsync(QueryHelpers.AddQueryString(_url, parameters));
+
+			// Assert
+
+			Assert.Equal(HttpStatusCode.NotFound, notFound.StatusCode);
+		}
+
+		[Fact]
+		public async Task GetDataEndpointOKPublic()
+		{
+			// Arrange
+			_client.DefaultRequestHeaders.Add("apikey", _apiKey);
+
+			await _client.PostAsync(
+				"/api/cpuload",
+				new FormUrlEncodedContent(
+					new Dictionary<string, string> {
+						{"value", 20.ToString() },
+						{"source", "the-source"}
+					 }
+				)
+			);
+
+			_client.DefaultRequestHeaders.Remove("apikey");
+
+			var _url = "/api/getdata";
+
+			var parameters = new Dictionary<string, string> {
+				{ "metrictype", Metrics.CpuLoad.ToString() },
+				{ "source", "the-source" }
+			 };
+
+			// Act
+			var ok = await _client.GetAsync(QueryHelpers.AddQueryString(_url, parameters));
+
+			// Assert
+
+			Assert.Equal(HttpStatusCode.OK, ok.StatusCode);
+
+			var data = JsonConvert.DeserializeObject(
+				await ok.Content.ReadAsStringAsync()
+			);
+			Assert.NotNull(data);
+		}
+
+		[Fact]
+		public async Task GetDataEndpointOKPrivate()
+		{
+			// Arrange
+			_client.DefaultRequestHeaders.Add("apikey", _apiKey);
+
+			await _client.PostAsync(
+				"/api/cpuload",
+				new FormUrlEncodedContent(
+					new Dictionary<string, string> {
+						{"value", 20.ToString() },
+						{"source", "the-source"}
+					 }
+				)
+			);
+
+			await _client.PatchAsync(
+				"/api/metricupdate",
+				new FormUrlEncodedContent(
+					new Dictionary<string, string> {
+						{ "ManualLabelId", ((int)ManualLabels.Investigating).ToString() },
+						{ "Public", false.ToString() },
+						{ "source", "the-source" },
+						{ "type", Metrics.CpuLoad.ToString() }
+					}
+				)
+			);
+
+			var _url = "/api/getdata";
+
+			var parameters = new Dictionary<string, string> {
+				{ "metrictype", Metrics.CpuLoad.ToString() },
+				{ "source", "the-source" }
+			 };
+
+			// Act
+			var ok = await _client.GetAsync(QueryHelpers.AddQueryString(_url, parameters));
+
+			// Assert
+			Assert.Equal(HttpStatusCode.OK, ok.StatusCode);
+
+			var data = JsonConvert.DeserializeObject(
+				await ok.Content.ReadAsStringAsync()
+			);
+			Assert.NotNull(data);
+		}
+
+		[Fact]
+		public async Task GetDataEndpointNoContent()
+		{
+			// Arrange
+			_client.DefaultRequestHeaders.Add("apikey", _apiKey);
+
+			await _client.PostAsync(
+				"/api/cpuload",
+				new FormUrlEncodedContent(
+					new Dictionary<string, string> {
+						{"value", 20.ToString() },
+						{"source", "the-source"}
+					 }
+				)
+			);
+
+			_client.DefaultRequestHeaders.Remove("apikey");
+
+			var _url = "/api/getdata";
+
+			var parameters = new Dictionary<string, string> {
+				{ "metrictype", Metrics.CpuLoad.ToString() },
+				{ "source", "the-source" },
+				{ "timeperiod", 1.ToString() }
+			 };
+
+			// Act
+			Thread.Sleep(1000); // Sleep so that there is no data requested withing timeframe
+
+			var noContent = await _client.GetAsync(QueryHelpers.AddQueryString(_url, parameters));
+
+			// Assert
+			Assert.Equal(HttpStatusCode.NoContent, noContent.StatusCode);
+		}
+
+		[Fact]
+		public async Task GetDataEndpointUnauthorized()
+		{
+			// Arrange
+			_client.DefaultRequestHeaders.Add("apikey", _apiKey);
+
+			await _client.PostAsync(
+				"/api/cpuload",
+				new FormUrlEncodedContent(
+					new Dictionary<string, string> {
+						{"value", 20.ToString() },
+						{"source", "the-source"}
+					 }
+				)
+			);
+
+			await _client.PatchAsync(
+				"/api/metricupdate",
+				new FormUrlEncodedContent(
+					new Dictionary<string, string> {
+						{ "ManualLabelId", ((int)ManualLabels.Investigating).ToString() },
+						{ "Public", false.ToString() },
+						{ "source", "the-source" },
+						{ "type", Metrics.CpuLoad.ToString() }
+					}
+				)
+			);
+
+			_client.DefaultRequestHeaders.Remove("apikey");
+
+			var _url = "/api/getdata";
+
+			var parameters = new Dictionary<string, string> {
+				{ "metrictype", Metrics.CpuLoad.ToString() },
+				{ "source", "the-source" }
+			 };
+
+			// Act
+			var unauthorized = await _client.GetAsync(QueryHelpers.AddQueryString(_url, parameters));
+
+			// Assert
+			Assert.Equal(HttpStatusCode.Unauthorized, unauthorized.StatusCode);
+		}
+	}
+}
diff --git a/test/IntegrationTests/ApiTest/Get/GetLogMessagesEndpoint.cs b/test/IntegrationTests/ApiTest/Get/GetLogMessagesEndpoint.cs
new file mode 100644
index 0000000000000000000000000000000000000000..64a2a812281ca986750637887345b09011fea2dc
--- /dev/null
+++ b/test/IntegrationTests/ApiTest/Get/GetLogMessagesEndpoint.cs
@@ -0,0 +1,115 @@
+using System.Collections.Generic;
+using System.Net;
+using System.Net.Http;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.WebUtilities;
+using Newtonsoft.Json;
+using StatusMonitor.Shared.Models.Entities;
+using Xunit;
+
+namespace StatusMonitor.Tests.IntegrationTests
+{
+	public partial class ApiControllerTest
+	{
+		[Fact]
+		public async Task GetLogMessagesEndpointOK()
+		{
+			// Arrange
+			_client.DefaultRequestHeaders.Add("apikey", _apiKey);
+
+			var _url = "/api/getLogMessages";
+
+			await _client.PostAsync(
+				"/api/logMessage",
+				new FormUrlEncodedContent(
+					new Dictionary<string, string> {
+						{ "severity", LogEntrySeverities.Info.ToString() },
+						{ "source", "the-source" },
+						{ "message", "Hello, world" }
+					 }
+				)
+			);
+
+			await _client.PostAsync(
+				"/api/logMessage",
+				new FormUrlEncodedContent(
+					new Dictionary<string, string> {
+						{ "severity", LogEntrySeverities.Warn.ToString() },
+						{ "source", "the-source" },
+						{ "message", "Hello again!" }
+					 }
+				)
+			);
+
+			// Act
+			var ok = await _client.GetAsync(_url);
+
+			Assert.Equal(HttpStatusCode.OK, ok.StatusCode);
+
+			var data = JsonConvert.DeserializeObject(
+				await ok.Content.ReadAsStringAsync()
+			);
+			Assert.NotNull(data);
+		}
+
+		[Fact]
+		public async Task GetLogMessagesEndpointOKWithFilter()
+		{
+			// Arrange
+			_client.DefaultRequestHeaders.Add("apikey", _apiKey);
+
+			var _url = "/api/getLogMessages";
+
+			await _client.PostAsync(
+				"/api/logMessage",
+				new FormUrlEncodedContent(
+					new Dictionary<string, string> {
+						{ "severity", LogEntrySeverities.Info.ToString() },
+						{ "source", "the-source" },
+						{ "message", "Hello, world" }
+					 }
+				)
+			);
+
+			await _client.PostAsync(
+				"/api/logMessage",
+				new FormUrlEncodedContent(
+					new Dictionary<string, string> {
+						{ "severity", LogEntrySeverities.Warn.ToString() },
+						{ "source", "the-source" },
+						{ "message", "Hello again!" }
+					 }
+				)
+			);
+
+			var parameters = new Dictionary<string, string> {
+				{ "severity", LogEntrySeverities.Warn.ToString() }
+			 };
+
+			// Act
+			var ok = await _client.GetAsync(QueryHelpers.AddQueryString(_url, parameters));
+
+			Assert.Equal(HttpStatusCode.OK, ok.StatusCode);
+
+			var data = JsonConvert.DeserializeObject(
+				await ok.Content.ReadAsStringAsync()
+			);
+			Assert.NotNull(data);
+		}
+
+		[Fact]
+		public async Task GetLogMessagesEndpointNoContent()
+		{
+			// Arrange
+			_client.DefaultRequestHeaders.Add("apikey", _apiKey);
+
+			var _url = "/api/getLogMessages";
+
+			// Act
+			var noContent = await _client.GetAsync(_url);
+
+			// Assert
+			Assert.Equal(HttpStatusCode.NoContent, noContent.StatusCode);
+		}
+	}
+}
diff --git a/test/IntegrationTests/ApiTest/Get/GetMetricsEndpoint.cs b/test/IntegrationTests/ApiTest/Get/GetMetricsEndpoint.cs
new file mode 100644
index 0000000000000000000000000000000000000000..d29f32a5fe47b3418a44f7e7f84dfee9b9f012a6
--- /dev/null
+++ b/test/IntegrationTests/ApiTest/Get/GetMetricsEndpoint.cs
@@ -0,0 +1,232 @@
+using System.Collections.Generic;
+using System.Net;
+using System.Net.Http;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.WebUtilities;
+using Newtonsoft.Json;
+using StatusMonitor.Shared.Models.Entities;
+using Xunit;
+
+namespace StatusMonitor.Tests.IntegrationTests
+{
+	public partial class ApiControllerTest
+	{
+		[Fact]
+		public async Task GetMetricsEndpointOKPublic()
+		{
+			// Arrange
+			_client.DefaultRequestHeaders.Add("apikey", _apiKey);
+
+			await _client.PostAsync(
+				"/api/cpuload",
+				new FormUrlEncodedContent(
+					new Dictionary<string, string> {
+						{ "value", 20.ToString() },
+						{ "source", "the-source" }
+					 }
+				)
+			);
+
+			_client.DefaultRequestHeaders.Remove("apikey");
+
+			var _url = "/api/getmetrics";
+
+			// Act
+			var ok = await _client.GetAsync(_url);
+
+			// Assert
+			Assert.Equal(HttpStatusCode.OK, ok.StatusCode);
+
+			var data = JsonConvert.DeserializeObject(
+				await ok.Content.ReadAsStringAsync()
+			);
+			Assert.NotNull(data);
+		}
+
+		[Fact]
+		public async Task GetMetricsEndpointOKPrivate()
+		{
+			// Arrange
+			_client.DefaultRequestHeaders.Add("apikey", _apiKey);
+
+			await _client.PostAsync(
+				"/api/cpuload",
+				new FormUrlEncodedContent(
+					new Dictionary<string, string> {
+						{ "value", 20.ToString() },
+						{ "source", "the-source" }
+					 }
+				)
+			);
+
+			await _client.PatchAsync(
+				"/api/metricupdate",
+				new FormUrlEncodedContent(
+					new Dictionary<string, string> {
+						{ "ManualLabelId", ((int)ManualLabels.Investigating).ToString() },
+						{ "Public", false.ToString() },
+						{ "source", "the-source" },
+						{ "type", Metrics.CpuLoad.ToString() }
+					}
+				)
+			);
+
+			var _url = "/api/getmetrics";
+
+			// Act
+			var ok = await _client.GetAsync(_url);
+
+			// Assert
+			Assert.Equal(HttpStatusCode.OK, ok.StatusCode);
+
+			var data = JsonConvert.DeserializeObject(
+				await ok.Content.ReadAsStringAsync()
+			);
+			Assert.NotNull(data);
+		}
+
+		[Fact]
+		public async Task GetMetricsEndpointOKWithFilter()
+		{
+			// Arrange
+			_client.DefaultRequestHeaders.Add("apikey", _apiKey);
+
+			var _url = "/api/getmetrics";
+
+			await _client.PostAsync(
+				"/api/cpuload",
+				new FormUrlEncodedContent(
+					new Dictionary<string, string> {
+						{ "value", 20.ToString() },
+						{ "source", "the-source" }
+					 }
+				)
+			);
+
+			await _client.PostAsync(
+				"/api/cpuload",
+				new FormUrlEncodedContent(
+					new Dictionary<string, string> {
+						{ "value", 20.ToString() },
+						{ "source", "the-other-source" }
+					 }
+				)
+			);
+
+			await _client.PostAsync(
+				"/api/useraction",
+				new FormUrlEncodedContent(
+					new Dictionary<string, string> {
+						{ "action", UserActions.Login.ToString() },
+						{ "count", 20.ToString() },
+						{ "source", "the-source" }
+					 }
+				)
+			);
+
+			_client.DefaultRequestHeaders.Remove("apikey");
+
+			// Act
+
+			// Type
+			var parametersType = new Dictionary<string, string> {
+				{ "type", Metrics.CpuLoad.ToString() }
+			};
+
+			var okType = await _client.GetAsync(QueryHelpers.AddQueryString(_url, parametersType));
+
+			// Source
+			var parametersSource = new Dictionary<string, string> {
+				{ "source", "the-source" }
+			};
+
+			var okSource = await _client.GetAsync(QueryHelpers.AddQueryString(_url, parametersSource));
+			
+			// Type and source
+			var parametersSourceType = new Dictionary<string, string> {
+				{ "type", Metrics.CpuLoad.ToString() },
+				{ "source", "the-source" }
+			};
+
+			var okSourceType = await _client.GetAsync(QueryHelpers.AddQueryString(_url, parametersSourceType));
+
+			// Assert
+
+			// Type
+			Assert.Equal(HttpStatusCode.OK, okType.StatusCode);
+
+			var dataType = JsonConvert.DeserializeObject(
+				await okType.Content.ReadAsStringAsync()
+			);
+			Assert.NotNull(dataType);
+
+			// Source
+			Assert.Equal(HttpStatusCode.OK, okSource.StatusCode);
+
+			var dataSource = JsonConvert.DeserializeObject(
+				await okSource.Content.ReadAsStringAsync()
+			);
+			Assert.NotNull(dataSource);
+
+			// Type and source
+			Assert.Equal(HttpStatusCode.OK, okSource.StatusCode);
+
+			var dataSourceType = JsonConvert.DeserializeObject(
+				await okSourceType.Content.ReadAsStringAsync()
+			);
+			Assert.NotNull(dataSourceType);
+		}
+
+		[Fact]
+		public async Task GetMetricsEndpointNoContent()
+		{
+			// Arrange
+			var _url = "/api/getmetrics";
+
+			// Act
+			var noContent = await _client.GetAsync(_url);
+
+			// Assert
+			Assert.Equal(HttpStatusCode.NoContent, noContent.StatusCode);
+		}
+
+		[Fact]
+		public async Task GetMetricsEndpointUnauthorized()
+		{
+			// Arrange
+			_client.DefaultRequestHeaders.Add("apikey", _apiKey);
+
+			await _client.PostAsync(
+				"/api/cpuload",
+				new FormUrlEncodedContent(
+					new Dictionary<string, string> {
+						{"value", 20.ToString() },
+						{"source", "the-source"}
+					 }
+				)
+			);
+
+			await _client.PatchAsync(
+				"/api/metricupdate",
+				new FormUrlEncodedContent(
+					new Dictionary<string, string> {
+						{ "ManualLabelId", ((int)ManualLabels.Investigating).ToString() },
+						{ "Public", false.ToString() },
+						{ "source", "the-source" },
+						{ "type", Metrics.CpuLoad.ToString() }
+					}
+				)
+			);
+
+			_client.DefaultRequestHeaders.Remove("apikey");
+
+			var _url = "/api/getmetrics";
+
+			// Act
+			var noContent = await _client.GetAsync(_url);
+
+			// Assert
+			Assert.Equal(HttpStatusCode.NoContent, noContent.StatusCode);
+		}
+	}
+}
diff --git a/test/IntegrationTests/ApiTest/Patch/MetricUpdateEndpoint.cs b/test/IntegrationTests/ApiTest/Patch/MetricUpdateEndpoint.cs
new file mode 100644
index 0000000000000000000000000000000000000000..bd709d913a4f94e35290ce1a308346b0b70ce8dd
--- /dev/null
+++ b/test/IntegrationTests/ApiTest/Patch/MetricUpdateEndpoint.cs
@@ -0,0 +1,99 @@
+using System;
+using System.Collections.Generic;
+using System.Net;
+using System.Net.Http;
+using System.Threading.Tasks;
+using StatusMonitor.Shared.Models.Entities;
+using Xunit;
+
+namespace StatusMonitor.Tests.IntegrationTests
+{
+	public partial class ApiControllerTest
+	{
+		[Fact]
+		public async Task MetricUpdateEndpointOK()
+		{
+			// Arrange
+			_client.DefaultRequestHeaders.Add("apikey", _apiKey);
+			
+			await _client.PostAsync(
+				"/api/cpuload",
+				new FormUrlEncodedContent(
+					new Dictionary<string, string> {
+						{"value", "20"},
+						{"source", "the-source"}
+					 }
+				)
+			);
+
+			var _url = "/api/metricupdate";
+
+			var parameters = new Dictionary<string, string> {
+				{ "ManualLabelId", ((int)ManualLabels.Investigating).ToString() },
+				{ "Public", true.ToString() },
+				{ "source", "the-source" },
+				{ "type", Metrics.CpuLoad.ToString() }
+			};
+
+			// Act
+			var ok = await _client.PatchAsync(new Uri(_url, UriKind.Relative), new FormUrlEncodedContent(parameters));
+
+			// Assert
+			Assert.Equal(HttpStatusCode.OK, ok.StatusCode);
+		}
+
+		[Fact]
+		public async Task MetricUpdateEndpointLabelNotFound()
+		{
+			// Arrange
+			_client.DefaultRequestHeaders.Add("apikey", _apiKey);
+			
+			await _client.PostAsync(
+				"/api/cpuload",
+				new FormUrlEncodedContent(
+					new Dictionary<string, string> {
+						{ "value", 20.ToString() },
+						{ "source", "the-source" }
+					 }
+				)
+			);
+
+			var _url = "/api/metricupdate";
+
+			var parameters = new Dictionary<string, string> {
+				{ "ManualLabelId", (-1).ToString() },
+				{ "Public", true.ToString() },
+				{ "source", "the-source" },
+				{ "type", Metrics.CpuLoad.ToString() }
+			};
+
+			// Act
+			var notFound = await _client.PatchAsync(_url, new FormUrlEncodedContent(parameters));
+
+			// Assert
+			Assert.Equal(HttpStatusCode.NotFound, notFound.StatusCode);
+		}
+
+		[Fact]
+		public async Task MetricUpdateEndpointMetricNotFound()
+		{
+			// Arrange
+			_client.DefaultRequestHeaders.Add("apikey", _apiKey);
+
+			var _url = "/api/metricupdate";
+
+			var parameters = new Dictionary<string, string> {
+				{ "ManualLabelId", ((int)ManualLabels.Investigating).ToString() },
+				{ "Public", true.ToString() },
+				{ "source", "non-existing-source" },
+				{ "type", Metrics.CpuLoad.ToString() }
+			};
+
+			// Act
+			var notFound = await _client.PatchAsync(new Uri(_url, UriKind.Relative), new FormUrlEncodedContent(parameters));
+
+			// Assert
+			Assert.Equal(HttpStatusCode.NotFound, notFound.StatusCode);
+		}
+	}
+}
diff --git a/test/IntegrationTests/ApiTest/Post/CompilationEndpoint.cs b/test/IntegrationTests/ApiTest/Post/CompilationEndpoint.cs
new file mode 100644
index 0000000000000000000000000000000000000000..6b8785aaed384b002607916f7cbc67c8a5f9811e
--- /dev/null
+++ b/test/IntegrationTests/ApiTest/Post/CompilationEndpoint.cs
@@ -0,0 +1,34 @@
+using System.Collections.Generic;
+using System.Net;
+using System.Net.Http;
+using System.Threading.Tasks;
+using StatusMonitor.Shared.Models.Entities;
+using Xunit;
+
+namespace StatusMonitor.Tests.IntegrationTests
+{
+	public partial class ApiControllerTest
+	{
+		[Fact]
+		public async Task CompilationEndpoint()
+		{
+			// Arrange
+			_client.DefaultRequestHeaders.Add("apikey", _apiKey);
+
+			var _url = "/api/compilation";
+
+			var parameters = new Dictionary<string, string> {
+				{ "stage", CompilationStages.M4.ToString() },
+				{ "sourcesize", 15.ToString() },
+				{ "compiletime", 78.ToString() },
+				{ "source","existing-source" }
+			};
+
+			// Act
+			var ok = await _client.PostAsync(_url, new FormUrlEncodedContent(parameters));
+
+			// Assert
+			Assert.Equal(HttpStatusCode.OK, ok.StatusCode);
+		}
+	}
+}
diff --git a/test/IntegrationTests/ApiTest/Post/CpuLoadEndpoint.cs b/test/IntegrationTests/ApiTest/Post/CpuLoadEndpoint.cs
new file mode 100644
index 0000000000000000000000000000000000000000..aba0b9a47aa367cbbd30c8b8c6e6eccf764f6184
--- /dev/null
+++ b/test/IntegrationTests/ApiTest/Post/CpuLoadEndpoint.cs
@@ -0,0 +1,31 @@
+using System.Collections.Generic;
+using System.Net;
+using System.Net.Http;
+using System.Threading.Tasks;
+using Xunit;
+
+namespace StatusMonitor.Tests.IntegrationTests
+{
+	public partial class ApiControllerTest
+	{
+		[Fact]
+		public async Task CpuLoadEndpoint()
+		{
+			// Arrange
+			_client.DefaultRequestHeaders.Add("apikey", _apiKey);
+			
+			var _url = "/api/cpuload";
+
+			var parameters = new Dictionary<string, string> { 
+				{ "value", 20.ToString() },
+				{ "source", "existing-source" }
+			};
+
+			// Act
+			var ok = await _client.PostAsync(_url, new FormUrlEncodedContent(parameters));
+
+			// Assert
+			Assert.Equal(HttpStatusCode.OK, ok.StatusCode);
+		}
+	}
+}
diff --git a/test/IntegrationTests/ApiTest/Post/LogDataEndpoint.cs b/test/IntegrationTests/ApiTest/Post/LogDataEndpoint.cs
new file mode 100644
index 0000000000000000000000000000000000000000..3b83a2cfca52d4fccd3457eaeaa8f9932b092b0b
--- /dev/null
+++ b/test/IntegrationTests/ApiTest/Post/LogDataEndpoint.cs
@@ -0,0 +1,33 @@
+using System.Collections.Generic;
+using System.Net;
+using System.Net.Http;
+using System.Threading.Tasks;
+using StatusMonitor.Shared.Models.Entities;
+using Xunit;
+
+namespace StatusMonitor.Tests.IntegrationTests
+{
+	public partial class ApiControllerTest
+	{
+		[Fact]
+		public async Task LogDataEndpoint()
+		{
+			// Arrange
+			_client.DefaultRequestHeaders.Add("apikey", _apiKey);
+			
+			var _url = "/api/logdata";
+
+			var parameters = new Dictionary<string, string> {
+				{ "severity", LogEntrySeverities.Warn.ToString() },
+				{ "count", 10.ToString() },
+				{ "source", "existing-source" }
+			};
+
+			// Act
+			var ok = await _client.PostAsync(_url, new FormUrlEncodedContent(parameters));
+
+			// Assert
+			Assert.Equal(HttpStatusCode.OK, ok.StatusCode);
+		}
+	}
+}
diff --git a/test/IntegrationTests/ApiTest/Post/LogMessageEndpoint.cs b/test/IntegrationTests/ApiTest/Post/LogMessageEndpoint.cs
new file mode 100644
index 0000000000000000000000000000000000000000..d9780cc3610c8a190bba1b6abc74e55412a92ef5
--- /dev/null
+++ b/test/IntegrationTests/ApiTest/Post/LogMessageEndpoint.cs
@@ -0,0 +1,109 @@
+using System;
+using System.Collections.Generic;
+using System.Net;
+using System.Net.Http;
+using System.Threading.Tasks;
+using StatusMonitor.Shared.Extensions;
+using StatusMonitor.Shared.Models.Entities;
+using Xunit;
+
+namespace StatusMonitor.Tests.IntegrationTests
+{
+	public partial class ApiControllerTest
+	{
+		private readonly object _logLocker = new object();
+
+		[Fact]
+		public async Task LogMessageEndpoint()
+		{
+			var ok = await MakeNLogMessageRequests(1, "LogMessageEndpoint".ToLower());
+
+			Assert.Equal(HttpStatusCode.OK, ok.StatusCode);
+		}
+
+		[Fact]
+		public async Task LogMessageGuardAllow()
+		{
+			var ok = await MakeNLogMessageRequests(5, "LogMessageGuardAllow".ToLower());
+
+			Assert.Equal(HttpStatusCode.OK, ok.StatusCode);
+		}
+
+		[Fact]
+		public async Task LogMessageGuardDeny()
+		{
+			var tooMany = await MakeNLogMessageRequests(6, "LogMessageGuardDeny".ToLower());
+
+			Assert.Equal(429, tooMany.StatusCode.AsInt());
+		}
+
+		[Fact]
+		public async Task LogMessageGuardAllowAfter()
+		{
+			await MakeNLogMessageRequests(10, "LogMessageGuardAllowAfter".ToLower());
+			await Task.Delay(5 * 1000);
+
+			var ok = await MakeNLogMessageRequests(5, "LogMessageGuardAllowAfter".ToLower());
+
+			Assert.Equal(HttpStatusCode.OK, ok.StatusCode);
+		}
+
+		[Fact]
+		public async Task LogMessageGuardMultithreaded()
+		{
+			var tasks = new List<Task<HttpResponseMessage>>() {
+				Task.Run(async () => await MakeNLogMessageRequests(5, "LogMessageGuardMultithreaded-1".ToLower())),
+				Task.Run(async () => await MakeNLogMessageRequests(4, "LogMessageGuardMultithreaded-2".ToLower())),
+				Task.Run(async () => await MakeNLogMessageRequests(3, "LogMessageGuardMultithreaded-3".ToLower()))
+			}.ToArray();
+
+			foreach (var code in await Task.WhenAll(tasks))
+			{
+				Assert.Equal(HttpStatusCode.OK, code.StatusCode);
+			}
+		}
+
+		/// <summary>
+		/// Makes N POST requests to log a message.
+		/// Part of the massage contains a current timestamp, so every log entry is unique.
+		/// </summary>
+		/// <param name="n">number of times to make a request</param>
+		/// <param name="source">Source of the log message</param>
+		/// <param name="category">Category of the log message</param>
+		/// <returns>Response of the last request</returns>
+		private async Task<HttpResponseMessage> MakeNLogMessageRequests(
+			int n, 
+			string source = "the-source", 
+			int category = 1, 
+			LogEntrySeverities severity = LogEntrySeverities.Warn
+		)
+		{
+			var _url = "/api/logmessage";
+
+			var parameters = new Dictionary<string, string> {
+				{ "severity", severity.ToString() },
+				{ "source", source },
+				{ "category", category.ToString() }
+			};
+
+			lock (_logLocker)
+			{
+				if (!_client.DefaultRequestHeaders.Contains("apikey"))
+				{
+					_client.DefaultRequestHeaders.Add("apikey", _apiKey);
+				}
+			}
+
+			HttpResponseMessage response = null;
+
+			for (int i = 0; i < n; i++)
+			{
+				parameters["message"] = $"Hello, world {DateTime.UtcNow}";
+
+				response = await _client.PostAsync(_url, new FormUrlEncodedContent(parameters));
+			}
+
+			return response;
+		}
+	}
+}
diff --git a/test/IntegrationTests/ApiTest/Post/UserActionEndpoint.cs b/test/IntegrationTests/ApiTest/Post/UserActionEndpoint.cs
new file mode 100644
index 0000000000000000000000000000000000000000..bd7923bb205683f8a9e9b73850935a552e788945
--- /dev/null
+++ b/test/IntegrationTests/ApiTest/Post/UserActionEndpoint.cs
@@ -0,0 +1,33 @@
+using System.Collections.Generic;
+using System.Net;
+using System.Net.Http;
+using System.Threading.Tasks;
+using StatusMonitor.Shared.Models.Entities;
+using Xunit;
+
+namespace StatusMonitor.Tests.IntegrationTests
+{
+	public partial class ApiControllerTest
+	{
+		[Fact]
+		public async Task UserActionEndpoint()
+		{
+			// Arrange
+			_client.DefaultRequestHeaders.Add("apikey", _apiKey);
+			
+			var _url = "/api/useraction";
+
+			var parameters = new Dictionary<string, string> {
+				{ "action", UserActions.Login.ToString() },
+				{ "count", 10.ToString() },
+				{ "source", "existing-source" }
+			};
+
+			// Act
+			var ok = await _client.PostAsync(_url, new FormUrlEncodedContent(parameters));
+
+			// Assert
+			Assert.Equal(HttpStatusCode.OK, ok.StatusCode);
+		}
+	}
+}
diff --git a/test/IntegrationTests/ApiTest/Theories/BadRequestCheck.cs b/test/IntegrationTests/ApiTest/Theories/BadRequestCheck.cs
new file mode 100644
index 0000000000000000000000000000000000000000..98da9ad2a15401015d0d038785998605dea17d80
--- /dev/null
+++ b/test/IntegrationTests/ApiTest/Theories/BadRequestCheck.cs
@@ -0,0 +1,56 @@
+using System.Collections.Generic;
+using System.Net;
+using System.Net.Http;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.WebUtilities;
+using Xunit;
+
+namespace StatusMonitor.Tests.IntegrationTests
+{
+	public partial class ApiControllerTest
+	{
+		[Theory]
+		[InlineData("getdata", HttpMethods.GET)]
+		[InlineData("cpuload", HttpMethods.POST)]
+		[InlineData("useraction", HttpMethods.POST)]
+		[InlineData("compilation", HttpMethods.POST)]
+		[InlineData("logdata", HttpMethods.POST)]
+		[InlineData("logmessage", HttpMethods.POST)]
+		[InlineData("removemetric", HttpMethods.DELETE)]
+		[InlineData("metricupdate", HttpMethods.PATCH)]
+		/// <summary>
+		/// Check if given endpoint returns status code 400 as per documentation
+		/// </summary>
+		/// <param name="endpoint">api endpoint, eq: /api/{endpoint}</param>
+		/// <param name="method">expected Http methods, eq: GET</param>
+		private async Task BadRequestCheck(string endpoint, HttpMethods method)
+		{
+			var _url = $"/api/{endpoint}";
+
+			// Check Bad Request
+			var parameters = new Dictionary<string, string> { };
+
+			_client.DefaultRequestHeaders.Add("apikey", _apiKey);
+
+			HttpResponseMessage badRequest = null;
+
+			switch (method)
+			{
+				case HttpMethods.GET:
+					badRequest = await _client.GetAsync(QueryHelpers.AddQueryString(_url, parameters));
+					break;
+				case HttpMethods.POST:
+					badRequest = await _client.PostAsync(_url, new FormUrlEncodedContent(parameters));
+					break;
+				case HttpMethods.PATCH:
+					badRequest = await _client.PatchAsync(_url, new FormUrlEncodedContent(parameters));
+					break;
+				case HttpMethods.DELETE:
+					badRequest = await _client.DeleteAsync(QueryHelpers.AddQueryString(_url, parameters));
+					break;
+			}
+
+			Assert.Equal(HttpStatusCode.BadRequest, badRequest.StatusCode);
+		}
+	}
+}
diff --git a/test/IntegrationTests/ApiTest/Theories/MalformedSourceCheck.cs b/test/IntegrationTests/ApiTest/Theories/MalformedSourceCheck.cs
new file mode 100644
index 0000000000000000000000000000000000000000..97fa06b89d1d468689db1261ca28c1b921c02e12
--- /dev/null
+++ b/test/IntegrationTests/ApiTest/Theories/MalformedSourceCheck.cs
@@ -0,0 +1,64 @@
+using System.Collections.Generic;
+using System.Net;
+using System.Net.Http;
+using System.Threading.Tasks;
+using StatusMonitor.Shared.Models.Entities;
+using Xunit;
+
+namespace StatusMonitor.Tests.IntegrationTests
+{
+	public partial class ApiControllerTest
+	{
+		[Theory]
+		[InlineData("cpuload")]
+		[InlineData("useraction")]
+		[InlineData("compilation")]
+		[InlineData("logdata")]
+		[InlineData("logmessage")]
+		private async Task MalformedSourceCheck(string endpoint)
+		{
+			// Arrange
+
+			var _url = $"/api/{endpoint}";
+
+			// Check Bad Request
+			var parameters = new Dictionary<string, string> {
+				{ "stage", CompilationStages.M4.ToString() },
+				{ "sourcesize", 15.ToString() },
+				{ "compiletime", 78.ToString() },
+				{ "action", UserActions.Login.ToString() },
+				{ "count", 10.ToString() },
+				{ "severity", LogEntrySeverities.Error.ToString() },
+				{ "message", "Hello" },
+				{ "value", 50.ToString() }
+			 };
+
+			_client.DefaultRequestHeaders.Add("apikey", _apiKey);
+
+			// Act
+
+			parameters["source"] = "";
+			var emptySource = await _client.PostAsync(_url, new FormUrlEncodedContent(parameters));
+
+			parameters["source"] = "source-&";
+			var specialChars = await _client.PostAsync(_url, new FormUrlEncodedContent(parameters));
+
+			parameters["source"] = "source-<script>alert('lol');</script>";
+			var script = await _client.PostAsync(_url, new FormUrlEncodedContent(parameters));
+
+			parameters["source"] = "source-source-source-source-source-source";
+			var tooLong = await _client.PostAsync(_url, new FormUrlEncodedContent(parameters));
+
+			parameters["source"] = "staging-3.makerchip.com";
+			var good = await _client.PostAsync(_url, new FormUrlEncodedContent(parameters));
+
+			// Assert
+
+			Assert.Equal(HttpStatusCode.BadRequest, emptySource.StatusCode);
+			Assert.Equal(HttpStatusCode.BadRequest, specialChars.StatusCode);
+			Assert.Equal(HttpStatusCode.BadRequest, script.StatusCode);
+			Assert.Equal(HttpStatusCode.BadRequest, tooLong.StatusCode);
+			Assert.Equal(HttpStatusCode.OK, good.StatusCode);
+		}
+	}
+}
diff --git a/test/IntegrationTests/ApiTest/Theories/UnauthorizedRequestCheck.cs b/test/IntegrationTests/ApiTest/Theories/UnauthorizedRequestCheck.cs
new file mode 100644
index 0000000000000000000000000000000000000000..095928ff73c6a8ddec74f5783ebc805055f76da1
--- /dev/null
+++ b/test/IntegrationTests/ApiTest/Theories/UnauthorizedRequestCheck.cs
@@ -0,0 +1,59 @@
+using System.Collections.Generic;
+using System.Net;
+using System.Net.Http;
+using System.Threading.Tasks;
+using Xunit;
+
+namespace StatusMonitor.Tests.IntegrationTests
+{
+	public partial class ApiControllerTest
+	{
+		[Theory]
+		[InlineData("getlogmessages", HttpMethods.GET)]
+		[InlineData("cpuload", HttpMethods.POST)]
+		[InlineData("useraction", HttpMethods.POST)]
+		[InlineData("compilation", HttpMethods.POST)]
+		[InlineData("logdata", HttpMethods.POST)]
+		[InlineData("logmessage", HttpMethods.POST)]
+		[InlineData("removemetric", HttpMethods.DELETE)]
+		[InlineData("metricupdate", HttpMethods.PATCH)]
+		/// <summary>
+		/// Check if given endpoint returns status code 401 as per documentation
+		/// </summary>
+		/// <param name="endpoint">api endpoint, eq: /api/{endpoint}</param>
+		/// <param name="method">expected Http methods, eq: GET</param>
+		private async Task UnauthorizedRequestCheck(string endpoint, HttpMethods method)
+		{
+			var _url = $"/api/{endpoint}";
+
+			HttpResponseMessage unauthorized = null;
+
+			// Check Unauthorized
+			switch (method)
+			{
+				case HttpMethods.GET:
+					unauthorized = await _client.GetAsync(_url);
+					break;
+				case HttpMethods.POST:
+					unauthorized =
+						await _client.PostAsync(
+							_url,
+							new FormUrlEncodedContent(new Dictionary<string, string> { })
+						);
+					break;
+				case HttpMethods.PATCH:
+					unauthorized =
+						await _client.PatchAsync(
+							_url,
+							new FormUrlEncodedContent(new Dictionary<string, string> { })
+						);
+					break;
+				case HttpMethods.DELETE:
+					unauthorized = await _client.DeleteAsync(_url);
+					break;
+			}
+
+			Assert.Equal(HttpStatusCode.Unauthorized, unauthorized.StatusCode);
+		}
+	}
+}
diff --git a/test/IntegrationTests/PagesTests.cs b/test/IntegrationTests/PagesTests.cs
new file mode 100644
index 0000000000000000000000000000000000000000..daa22768958add5dc00d14650b7b4d687fd20582
--- /dev/null
+++ b/test/IntegrationTests/PagesTests.cs
@@ -0,0 +1,128 @@
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Net;
+using System.Net.Http;
+using System.Reflection;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Hosting;
+using Microsoft.AspNetCore.Mvc.Razor;
+using Microsoft.AspNetCore.TestHost;
+using Microsoft.CodeAnalysis;
+using Microsoft.Extensions.Configuration;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.PlatformAbstractions;
+using StatusMonitor.Shared.Services.Factories;
+using Xunit;
+
+namespace StatusMonitor.Tests.IntegrationTests
+{
+	public class PagesTests
+	{
+		private readonly TestServer _server;
+		private readonly HttpClient _client;
+
+		private readonly string _apiKey = "set-by-config";
+
+		public PagesTests()
+		{
+			var path = PlatformServices.Default.Application.ApplicationBasePath;
+			var contentPath = Path.GetFullPath(Path.Combine(path, $@"../../../../src/web"));
+
+			_server = new TestServer(
+				new WebHostBuilder()
+					.UseContentRoot(contentPath)
+					.UseStartup<Web.Startup>()
+					.ConfigureServices(services =>
+					{
+						services.AddSingleton<IHttpClientFactory, HttpClientFactory>();
+						services.Configure((RazorViewEngineOptions options) =>
+						{
+							var previous = options.CompilationCallback;
+							options.CompilationCallback = (context) =>
+							{
+								previous?.Invoke(context);
+
+								var assembly = typeof(Web.Startup).GetTypeInfo().Assembly;
+								var assemblies = assembly.GetReferencedAssemblies().Select(x => MetadataReference.CreateFromFile(Assembly.Load(x).Location))
+								.ToList();
+								assemblies.Add(MetadataReference.CreateFromFile(Assembly.Load(new AssemblyName("mscorlib")).Location));
+								assemblies.Add(MetadataReference.CreateFromFile(Assembly.Load(new AssemblyName("System.Private.Corelib")).Location));
+								assemblies.Add(MetadataReference.CreateFromFile(Assembly.Load(new AssemblyName("Microsoft.AspNetCore.Razor")).Location));
+								assemblies.Add(MetadataReference.CreateFromFile(Assembly.Load(new AssemblyName("mscorlib")).Location)); 
+								assemblies.Add(MetadataReference.CreateFromFile(Assembly.Load(new AssemblyName("System.Private.Corelib")).Location)); 
+								assemblies.Add(MetadataReference.CreateFromFile(Assembly.Load(new AssemblyName("System.Linq")).Location)); 
+								assemblies.Add(MetadataReference.CreateFromFile(Assembly.Load(new AssemblyName("System.Threading.Tasks")).Location)); 
+								assemblies.Add(MetadataReference.CreateFromFile(Assembly.Load(new AssemblyName("System.Runtime")).Location)); 
+								assemblies.Add(MetadataReference.CreateFromFile(Assembly.Load(new AssemblyName("System.Dynamic.Runtime")).Location)); 
+								assemblies.Add(MetadataReference.CreateFromFile(Assembly.Load(new AssemblyName("Microsoft.AspNetCore.Razor.Runtime")).Location)); 
+								assemblies.Add(MetadataReference.CreateFromFile(Assembly.Load(new AssemblyName("Microsoft.AspNetCore.Mvc")).Location)); 
+								assemblies.Add(MetadataReference.CreateFromFile(Assembly.Load(new AssemblyName("Microsoft.AspNetCore.Razor")).Location)); 
+								assemblies.Add(MetadataReference.CreateFromFile(Assembly.Load(new AssemblyName("Microsoft.AspNetCore.Mvc.Razor")).Location));
+								assemblies.Add(MetadataReference.CreateFromFile(Assembly.Load(new AssemblyName("Microsoft.AspNetCore.Html.Abstractions")).Location)); 
+								assemblies.Add(MetadataReference.CreateFromFile(Assembly.Load(new AssemblyName("System.Text.Encodings.Web")).Location));
+								assemblies.Add(MetadataReference.CreateFromFile(Assembly.Load(new AssemblyName("System.IO")).Location));
+								assemblies.Add(MetadataReference.CreateFromFile(Assembly.Load(new AssemblyName("Microsoft.CSharp")).Location));
+								assemblies.Add(MetadataReference.CreateFromFile(Assembly.Load(new AssemblyName("Microsoft.AspNetCore.Http.Extensions")).Location));
+
+								context.Compilation = context.Compilation.AddReferences(assemblies);
+							};
+						});
+					})
+			);
+
+			_client = _server.CreateClient();
+
+			_apiKey =
+				new ConfigurationBuilder()
+				.AddJsonFile("appsettings.json", optional: false)
+				.AddJsonFile("appsettings.testing.json", optional: true)
+				.Build()
+				["Secrets:ApiKey"];
+		}
+
+		[Fact]
+		public async Task Scenario()
+		{
+			// No content initially
+			var indexNoContent = await _client.GetAsync("/");
+
+			Assert.Equal(HttpStatusCode.OK, indexNoContent.StatusCode);
+
+			// Add CPU Load data point
+			_client.DefaultRequestHeaders.Add("apikey", _apiKey);
+
+			var postOk = await _client.PostAsync(
+				"/api/cpuload", 
+				new FormUrlEncodedContent(
+					new Dictionary<string, string> {
+						{ "value", "20" },
+						{ "source", "some-source" }
+					 }
+				)
+			);
+
+			Assert.Equal(HttpStatusCode.OK, postOk.StatusCode);
+
+			// Index page OK
+			var indexOk = await _client.GetAsync("/");
+
+			Assert.Equal(HttpStatusCode.OK, indexOk.StatusCode);
+
+			// Metric page OK
+			var metricOk = await _client.GetAsync("/home/metric/CpuLoad/some-source");
+
+			Assert.Equal(HttpStatusCode.OK, metricOk.StatusCode);
+
+			// Metric NotFound
+			var metricNotFound = await _client.GetAsync("/home/metric/CpuLoad/non-existing-source");
+
+			Assert.Equal(HttpStatusCode.NotFound, metricNotFound.StatusCode);
+
+			// Metric BadRequest
+			var metricBadRequest = await _client.GetAsync("/home/metric/bad-type/any-source");
+
+			Assert.Equal(HttpStatusCode.BadRequest, metricBadRequest.StatusCode);
+		}
+	}
+}
diff --git a/test/Mock/ResponseHandler.cs b/test/Mock/ResponseHandler.cs
new file mode 100644
index 0000000000000000000000000000000000000000..a7c6f858254a0e0e2d50f37f6302b32fa1399e73
--- /dev/null
+++ b/test/Mock/ResponseHandler.cs
@@ -0,0 +1,85 @@
+using System;
+using System.Collections.Generic;
+using System.Net;
+using System.Net.Http;
+using System.Threading;
+using System.Threading.Tasks;
+
+namespace StatusMonitor.Tests.Mock
+{
+	public enum HttpResponseOption
+	{
+		Success, Timeout, ServiceUnavailable
+	}
+
+	public class ResponseHandler : DelegatingHandler
+	{
+		private readonly Dictionary<Uri, HttpResponseOption> _urls = new Dictionary<Uri, HttpResponseOption>();
+		private readonly Dictionary<Uri, Action> _actions = new Dictionary<Uri, Action>();
+
+		public void AddAction(Uri uri, Action action)
+		{
+			_actions.Add(uri, action);
+		}
+
+		public void RemoveAction(Uri uri)
+		{
+			_actions.Remove(uri);
+		}
+
+		public void AddHandler(Uri uri, HttpResponseOption option)
+		{
+			_urls.Add(uri, option);
+		}
+
+		public void RemoveHandler(Uri uri)
+		{
+			_urls.Remove(uri);
+		}
+
+		protected async override Task<HttpResponseMessage> SendAsync(
+			HttpRequestMessage request,
+			CancellationToken cancellationToken
+		)
+		{
+			if (_actions.Count > 0)
+			{
+				if (_actions.ContainsKey(request.RequestUri))
+				{
+					_actions[request.RequestUri].Invoke();
+					return await Task.FromResult(new HttpResponseMessage(HttpStatusCode.OK));
+				}
+				else
+				{
+					return await Task.FromResult(new HttpResponseMessage(HttpStatusCode.NotFound));
+				}
+			}
+
+			if (_urls.Count > 0)
+			{
+				if (_urls.ContainsKey(request.RequestUri))
+				{
+					switch (_urls[request.RequestUri])
+					{
+						case HttpResponseOption.Success:
+							return await Task.FromResult(new HttpResponseMessage(HttpStatusCode.OK));
+						case HttpResponseOption.Timeout:
+							await Task.Delay(5000);
+							return await Task.FromResult(new HttpResponseMessage(HttpStatusCode.OK));
+						case HttpResponseOption.ServiceUnavailable:
+							return await Task.FromResult(new HttpResponseMessage(HttpStatusCode.ServiceUnavailable));
+					}
+
+					return await Task.FromResult(new HttpResponseMessage(HttpStatusCode.OK));
+				}
+				else
+				{
+					return await Task.FromResult(new HttpResponseMessage(HttpStatusCode.NotFound));
+				}
+			}
+
+			throw new InvalidOperationException("Mo option or action was registered");
+		}
+	}
+
+}
diff --git a/test/UnitTests/ConfigurationTest.cs b/test/UnitTests/ConfigurationTest.cs
new file mode 100644
index 0000000000000000000000000000000000000000..c292d1a9a0eb25757bba81b8cd3e39b130ffe244
--- /dev/null
+++ b/test/UnitTests/ConfigurationTest.cs
@@ -0,0 +1,142 @@
+using System;
+using System.Linq;
+using System.Reflection;
+using Microsoft.Extensions.Configuration;
+using StatusMonitor.Daemons.Services;
+using StatusMonitor.Shared.Models.Entities;
+using Xunit;
+
+namespace StatusMonitor.Tests.UnitTests
+{
+	public class ConfigurationTest
+	{
+		private readonly IConfiguration _config;
+
+		public ConfigurationTest()
+		{
+			// Generating configuration key-value store from file.
+			_config =
+				new ConfigurationBuilder()
+				.AddJsonFile("appsettings.json", optional: false)
+				.Build();
+		}
+
+		[Fact]
+		public void TestSecrets()
+		{
+			TestStringKey("Secrets:ApiKey");
+
+			TestStringKey("Secrets:AdminPassword");
+
+			TestBoolKey("Secrets:ReCaptcha:Enabled");
+			TestStringKey("Secrets:ReCaptcha:SiteKey");
+			TestStringKey("Secrets:ReCaptcha:SecretKey");
+
+			TestStringKey("Secrets:ConnectionString");
+
+			TestBoolKey("Secrets:Email:Enabled");
+			TestStringKey("Secrets:Email:ToEmail");
+			TestStringKey("Secrets:Email:FromTitle");
+			TestStringKey("Secrets:Email:FromEmail");
+			TestStringKey("Secrets:Email:Password");
+			TestStringKey("Secrets:Email:Host");
+			TestIntKey("Secrets:Email:SMTP:Port");
+			TestStringKey("Secrets:Email:SMTP:Security");
+
+			TestBoolKey("Secrets:Slack:Enabled");
+			TestStringKey("Secrets:Slack:WebHook");
+		}
+
+		[Theory]
+		[InlineData("AutoLabels")]
+		[InlineData("ManualLabels")]
+		[InlineData("CompilationStages")]
+		[InlineData("UserActions")]
+		[InlineData("LogEntrySeverities")]
+		[InlineData("Metrics")]
+		public void TestEnumerations(string enumType)
+		{
+			// Converts string to type (type has to be in the same Assembly as Program class)
+			Type type = typeof(Shared.Models.DataContext)
+				.GetTypeInfo()
+				.Assembly
+				.GetType($"StatusMonitor.Shared.Models.Entities.{enumType}");
+
+			Enum
+				.GetValues(type) // Get integer values of enum (stored as objects)
+				.OfType<int>() // Convert to Enumerable of integers
+				.Select(val => Convert.ChangeType(val, type)) // Convert to Enum types
+				.ToList() // Convert to list
+				.ForEach(obj => TestStringKey($"Data:{type}:{obj.ToString()}")); // Test key for each enum value
+		}
+
+		[Fact]
+		public void TestLogging()
+		{
+			TestStringKey("Logging:MinLogLevel");
+			TestStringKey("Logging:LogSeverityReported");
+		}
+
+		[Fact]
+		public void TestGeneral()
+		{
+			TestStringKey("CompanyName");
+		}
+
+		[Fact]
+		public void TestGuard()
+		{
+			TestIntKey("Guard:Logging:Requests");
+			TestIntKey("Guard:Logging:PerSeconds");
+		}
+
+		[Theory]
+		[InlineData(ServiceManagerServices.Cache)]
+		[InlineData(ServiceManagerServices.Clean)]
+		[InlineData(ServiceManagerServices.Demo)]
+		[InlineData(ServiceManagerServices.Notification)]
+		[InlineData(ServiceManagerServices.Discrepancy)]
+		[InlineData(ServiceManagerServices.Ping)]
+		public void TestServiceManagerCommon(ServiceManagerServices service)
+		{
+			TestBoolKey($"ServiceManager:{service.ToString()}Service:Enabled");
+			TestIntKey($"ServiceManager:{service.ToString()}Service:Interval");
+		}
+
+		[Fact]
+		public void TestServiceManagerSpecific()
+		{
+			TestIntKey("ServiceManager:CleanService:MaxAge");
+
+			TestBoolKey("ServiceManager:DemoService:Gaps:Enabled");
+			TestIntKey("ServiceManager:DemoService:Gaps:Frequency");
+			
+			TestIntKey("ServiceManager:DiscrepancyService:DataTimeframe");
+			TestIntKey("ServiceManager:DiscrepancyService:Gaps:MaxDifference");
+			TestIntKey("ServiceManager:DiscrepancyService:Load:Threshold");
+			TestIntKey("ServiceManager:DiscrepancyService:Load:MaxFailures");
+
+			TestIntKey($"ServiceManager:NotificationService:Frequencies:{NotificationSeverity.Low.ToString()}");
+			TestIntKey($"ServiceManager:NotificationService:Frequencies:{NotificationSeverity.Medium.ToString()}");
+			TestIntKey($"ServiceManager:NotificationService:Frequencies:{NotificationSeverity.High.ToString()}");
+		}
+
+		private void TestStringKey(string key)
+		{
+			Assert.NotNull(_config[key]);
+			Assert.False(string.IsNullOrWhiteSpace(_config[key]));
+		}
+
+		private void TestIntKey(string key)
+		{
+			Assert.NotNull(_config[key]);
+			Assert.True(int.TryParse(_config[key], out _));
+		}
+
+		private void TestBoolKey(string key)
+		{
+			Assert.NotNull(_config[key]);
+			Assert.True(bool.TryParse(_config[key], out _));
+		}
+	}
+}
diff --git a/test/UnitTests/EnvironmentTest.cs b/test/UnitTests/EnvironmentTest.cs
new file mode 100644
index 0000000000000000000000000000000000000000..205ecec4a157c7e8966fb73e1819f5b214a3873a
--- /dev/null
+++ b/test/UnitTests/EnvironmentTest.cs
@@ -0,0 +1,16 @@
+using System;
+using Xunit;
+
+namespace StatusMonitor.Tests.UnitTests
+{
+	public class EnvironmentTest
+	{
+		[Fact]
+		public void TestingEnvironmentSet()
+		{
+			var env = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");
+
+			Assert.Equal("Testing", env);
+		}
+	}
+}
diff --git a/test/UnitTests/Services/CacheServiceTest.cs b/test/UnitTests/Services/CacheServiceTest.cs
new file mode 100644
index 0000000000000000000000000000000000000000..a69ac1ae0401477d97382967340ed0ac1b14d664
--- /dev/null
+++ b/test/UnitTests/Services/CacheServiceTest.cs
@@ -0,0 +1,147 @@
+using System;
+using Xunit;
+using StatusMonitor.Shared.Models.Entities;
+using StatusMonitor.Shared.Models;
+using Microsoft.Extensions.DependencyInjection;
+using System.Threading.Tasks;
+using StatusMonitor.Daemons.Services;
+using Moq;
+using Microsoft.AspNetCore.Hosting;
+using Microsoft.Extensions.Configuration;
+using StatusMonitor.Shared.Extensions;
+using Microsoft.Extensions.Logging;
+using System.Collections.Generic;
+
+namespace StatusMonitor.Tests.UnitTests.Services
+{
+	public class CacheServiceTest
+	{
+		private readonly IServiceProvider _serviceProvider;
+
+		public CacheServiceTest()
+		{
+			var services = new ServiceCollection();
+
+			var mockEnv = new Mock<IHostingEnvironment>();
+			mockEnv
+				.SetupGet(environment => environment.EnvironmentName)
+				.Returns("Testing");
+			var env = mockEnv.Object;
+
+			services.RegisterSharedServices(env, new Mock<IConfiguration>().Object);
+
+			_serviceProvider = services.BuildServiceProvider();
+		}
+
+		[Fact]
+		public async Task ProperlyCacheMetric()
+		{
+			// Arrange
+			var context = _serviceProvider.GetRequiredService<IDataContext>();
+
+			var metric = (await context.Metrics.AddAsync(new Metric
+			{
+				Type = Metrics.CpuLoad.AsInt(),
+				Source = "test-source"
+			})).Entity;
+
+			await context.AutoLabels.AddRangeAsync(new List<AutoLabel> {
+				new AutoLabel { Id = AutoLabels.Normal.AsInt() },
+				new AutoLabel { Id = AutoLabels.Critical.AsInt() },
+				new AutoLabel { Id = AutoLabels.Warning.AsInt() },
+			});
+
+			await context.NumericDataPoints.AddRangeAsync(
+				new NumericDataPoint
+				{
+					Value = 6,
+					Timestamp = DateTime.UtcNow,
+					Metric = metric
+				},
+				new NumericDataPoint
+				{
+					Value = 10,
+					Timestamp = DateTime.UtcNow - new TimeSpan(0, 0, 10),
+					Metric = metric
+				},
+				new NumericDataPoint
+				{
+					Value = 20,
+					Timestamp = DateTime.UtcNow - new TimeSpan(0, 0, 10),
+					Metric = metric
+				}
+			);
+
+			await context.NumericDataPoints.AddRangeAsync(
+				new NumericDataPoint
+				{
+					Value = 12,
+					Timestamp = DateTime.UtcNow - new TimeSpan(2, 0, 0),
+					Metric = metric
+				},
+				new NumericDataPoint
+				{
+					Value = 20,
+					Timestamp = DateTime.UtcNow - new TimeSpan(2, 0, 0),
+					Metric = metric
+				},
+				new NumericDataPoint
+				{
+					Value = 40,
+					Timestamp = DateTime.UtcNow - new TimeSpan(2, 0, 0),
+					Metric = metric
+				}
+			);
+
+			await context.NumericDataPoints.AddRangeAsync(
+				new NumericDataPoint
+				{
+					Value = 24,
+					Timestamp = DateTime.UtcNow - new TimeSpan(2, 0, 0, 0),
+					Metric = metric
+				},
+				new NumericDataPoint
+				{
+					Value = 40,
+					Timestamp = DateTime.UtcNow - new TimeSpan(2, 0, 0, 0),
+					Metric = metric
+				},
+				new NumericDataPoint
+				{
+					Value = 80,
+					Timestamp = DateTime.UtcNow - new TimeSpan(2, 0, 0, 0),
+					Metric = metric
+				}
+			);
+
+			await context.SaveChangesAsync();
+
+			var expectedMetric = new Metric
+			{
+				Public = metric.Public,
+				Title = metric.Title,
+				Type = metric.Type,
+				Source = metric.Source,
+
+				DayAvg = (6 + 10 + 20 + 12 + 20 + 40) / 6,
+				DayMin = 6,
+				DayMax = 40,
+
+				HourAvg = (6 + 10 + 20) / 3,
+				HourMin = 6,
+				HourMax = 20,
+
+				CurrentValue = 6,
+
+				AutoLabel = new AutoLabel { Id = AutoLabels.Normal.AsInt() }
+			};
+
+			// Act
+			var cachedMetric = await new CacheService(context, new Mock<ILogger<CacheService>>().Object)
+				.CacheMetricAsync(metric);
+
+			// Assert
+			Assert.Equal(expectedMetric, cachedMetric, new MetricComparer());
+		}
+	}
+}
diff --git a/test/UnitTests/Services/CleanServiceTest.cs b/test/UnitTests/Services/CleanServiceTest.cs
new file mode 100644
index 0000000000000000000000000000000000000000..3cea7ee3f0e8620bb8c9b4624a4cae35cc79244e
--- /dev/null
+++ b/test/UnitTests/Services/CleanServiceTest.cs
@@ -0,0 +1,140 @@
+using System;
+using Xunit;
+using StatusMonitor.Shared.Models;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.EntityFrameworkCore;
+using System.Threading.Tasks;
+using StatusMonitor.Daemons.Services;
+using Moq;
+using Microsoft.AspNetCore.Hosting;
+using StatusMonitor.Shared.Extensions;
+using Microsoft.Extensions.Configuration;
+using System.Collections.Generic;
+using StatusMonitor.Shared.Models.Entities;
+using Microsoft.Extensions.Logging;
+using StatusMonitor.Shared.Services;
+
+namespace StatusMonitor.Tests.UnitTests.Services
+{
+	public class CleanServiceTest
+	{
+		private readonly IServiceProvider _serviceProvider;
+		private readonly IConfiguration _config;
+
+		public CleanServiceTest()
+		{
+			var services = new ServiceCollection();
+
+			var mockEnv = new Mock<IHostingEnvironment>();
+			mockEnv
+				.SetupGet(environment => environment.EnvironmentName)
+				.Returns("Testing");
+			var env = mockEnv.Object;
+
+			var mockConfig = new Mock<IConfiguration>();
+			mockConfig
+				.SetupGet(config => config["ServiceManager:CleanService:MaxAge"])
+				.Returns($"{24 * 60 * 60}");
+			_config = mockConfig.Object;
+
+			services.RegisterSharedServices(env, _config);
+
+			_serviceProvider = services.BuildServiceProvider();
+		}
+
+		[Fact]
+		public async Task ProperlyCleanData()
+		{
+			// Arrange
+			var context = _serviceProvider.GetRequiredService<IDataContext>();
+
+			var twoDaysAgo = DateTime.UtcNow.AddDays(-2);
+			var hourAgo = DateTime.UtcNow.AddHours(-1);
+			var now = DateTime.UtcNow;
+
+
+			await context.NumericDataPoints.AddRangeAsync(new List<NumericDataPoint> {
+				new NumericDataPoint { Timestamp = twoDaysAgo },
+				new NumericDataPoint { Timestamp = hourAgo },
+				new NumericDataPoint { Timestamp = now }
+			});
+
+			await context.LogDataPoints.AddRangeAsync(new List<LogDataPoint> {
+				new LogDataPoint { Timestamp = twoDaysAgo },
+				new LogDataPoint { Timestamp = hourAgo },
+				new LogDataPoint { Timestamp = now }
+			});
+
+			await context.UserActionDataPoints.AddRangeAsync(new List<UserActionDataPoint> {
+				new UserActionDataPoint { Timestamp = twoDaysAgo },
+				new UserActionDataPoint { Timestamp = hourAgo },
+				new UserActionDataPoint { Timestamp = now }
+			});
+
+			await context.CompilationDataPoints.AddRangeAsync(new List<CompilationDataPoint> {
+				new CompilationDataPoint { Timestamp = twoDaysAgo },
+				new CompilationDataPoint { Timestamp = hourAgo },
+				new CompilationDataPoint { Timestamp = now }
+			});
+
+			await context.PingDataPoints.AddRangeAsync(new List<PingDataPoint> {
+				new PingDataPoint { Timestamp = twoDaysAgo },
+				new PingDataPoint { Timestamp = hourAgo },
+				new PingDataPoint { Timestamp = now }
+			});
+
+			await context.LogEntries.AddRangeAsync(new List<LogEntry> {
+				new LogEntry { Timestamp = twoDaysAgo },
+				new LogEntry { Timestamp = hourAgo },
+				new LogEntry { Timestamp = now }
+			});
+
+			await context.Notifications.AddRangeAsync(new List<Notification> {
+				new Notification { DateCreated = twoDaysAgo.AddDays(-1)},
+				new Notification { DateCreated = twoDaysAgo, IsSent = true },
+				new Notification { DateCreated = hourAgo },
+				new Notification { DateCreated = now }
+			});
+
+			await context.Discrepancies.AddRangeAsync(new List<Discrepancy> {
+				new Discrepancy { 
+					DateFirstOffense = twoDaysAgo,
+					Type = DiscrepancyType.GapInData,
+					MetricSource = "the-source",
+					MetricType = Metrics.CpuLoad
+				},
+				new Discrepancy { 
+					DateFirstOffense = hourAgo,
+					Type = DiscrepancyType.GapInData,
+					MetricSource = "the-source",
+					MetricType = Metrics.CpuLoad
+				},
+				new Discrepancy { 
+					DateFirstOffense = now,
+					Type = DiscrepancyType.GapInData,
+					MetricSource = "the-source",
+					MetricType = Metrics.CpuLoad
+				}
+			});
+
+			await context.SaveChangesAsync();
+
+			// Act
+			await new CleanService(
+				new Mock<ILogger<CleanService>>().Object, 
+				context, 
+				_config
+			)
+			.CleanDataPointsAsync();
+
+			// Assert
+			Assert.Equal(2, await context.NumericDataPoints.CountAsync());
+			Assert.Equal(2, await context.LogDataPoints.CountAsync());
+			Assert.Equal(2, await context.UserActionDataPoints.CountAsync());
+			Assert.Equal(2, await context.CompilationDataPoints.CountAsync());
+			Assert.Equal(2, await context.PingDataPoints.CountAsync());
+			Assert.Equal(3, await context.Notifications.CountAsync());
+			Assert.Equal(2, await context.Discrepancies.CountAsync());
+		}
+	}
+}
diff --git a/test/UnitTests/Services/CryptoServiceTest.cs b/test/UnitTests/Services/CryptoServiceTest.cs
new file mode 100644
index 0000000000000000000000000000000000000000..b702fac30655e548b4ecc0b3b61dd32eb3ecf34b
--- /dev/null
+++ b/test/UnitTests/Services/CryptoServiceTest.cs
@@ -0,0 +1,25 @@
+using StatusMonitor.Shared.Services;
+using Xunit;
+
+namespace StatusMonitor.Tests.UnitTests.Services
+{
+	public class CryptoServiceTest
+	{
+		[Theory]
+		[InlineData("password", "5f4dcc3b5aa765d61d8327deb882cf99")]
+		[InlineData("adfs4565", "c57a19295696c283f4a645d600e3d4a4")]
+		[InlineData("", "d41d8cd98f00b204e9800998ecf8427e")]
+		[InlineData("aaaaaaaa", "3dbe00a167653a1aaee01d93e77e730e")]
+		public void CalculatesHash(string plainText, string cipher)
+		{
+			// Arrange
+			var cryptoService = new CryptoService();
+			
+			// Act
+			var hash = cryptoService.CalculateHash(plainText);
+
+			// Assert
+			Assert.Equal(cipher.ToUpperInvariant(), hash);
+		}
+	}
+}
diff --git a/test/UnitTests/Services/DataSeedServiceTest.cs b/test/UnitTests/Services/DataSeedServiceTest.cs
new file mode 100755
index 0000000000000000000000000000000000000000..afc1110cb9ab8b7b6e0b7a4ba08eb485367848c4
--- /dev/null
+++ b/test/UnitTests/Services/DataSeedServiceTest.cs
@@ -0,0 +1,132 @@
+using System;
+using Xunit;
+using StatusMonitor.Shared.Models.Entities;
+using StatusMonitor.Shared.Services;
+using StatusMonitor.Shared.Models;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.EntityFrameworkCore;
+using System.Threading.Tasks;
+using System.Collections.Generic;
+using StatusMonitor.Shared.Extensions;
+using Moq;
+using Microsoft.AspNetCore.Hosting;
+using Microsoft.Extensions.Configuration;
+using System.Linq;
+using Microsoft.Extensions.Logging;
+
+namespace StatusMonitor.Tests.UnitTests.Services
+{
+	public class DataSeedServiceTest
+	{
+		private readonly IServiceProvider _serviceProvider;
+		private readonly IConfiguration _config;
+		private readonly IDataContext _dataContext;
+
+		public DataSeedServiceTest()
+		{
+			var services = new ServiceCollection();
+
+			var mockEnv = new Mock<IHostingEnvironment>();
+			mockEnv
+				.SetupGet(environment => environment.EnvironmentName)
+				.Returns("Testing");
+			var env = mockEnv.Object;
+
+			var mockConfig = new Mock<IConfiguration>();
+			mockConfig
+				.SetupGet(config => config[It.IsAny<string>()])
+				.Returns("test-title");
+			mockConfig
+				.SetupGet(config => config["Data:PingSettings"])
+				.Returns("");
+			_config = mockConfig.Object;
+
+			services.RegisterSharedServices(env, _config);
+
+			_serviceProvider = services.BuildServiceProvider();
+
+			_dataContext = _serviceProvider.GetRequiredService<IDataContext>();
+		}
+
+		[Fact]
+		public void InitiallyNoValues()
+		{
+			// Assert
+			Assert.Empty(_dataContext.AutoLabels);
+			Assert.Empty(_dataContext.ManualLabels);
+			Assert.Empty(_dataContext.CompilationStages);
+			Assert.Empty(_dataContext.UserActions);
+			Assert.Empty(_dataContext.LogEntrySeverities);
+			Assert.Empty(_dataContext.Metrics);
+			Assert.Empty(_dataContext.AbstractMetrics);
+		}
+
+		[Fact]
+		public async Task ServiceSeedsValuesToDataProvider()
+		{
+			// Arrange
+			var dataSeedService = new DataSeedService(
+				_dataContext,
+				new Mock<ILogger<DataSeedService>>().Object,
+				_config
+			);
+
+			// Act
+			await dataSeedService.SeedDataAsync();
+
+			// Assert
+			Assert.NotEmpty(_dataContext.AutoLabels);
+			Assert.NotEmpty(_dataContext.ManualLabels);
+			Assert.NotEmpty(_dataContext.CompilationStages);
+			Assert.NotEmpty(_dataContext.UserActions);
+			Assert.NotEmpty(_dataContext.LogEntrySeverities);
+			Assert.NotEmpty(_dataContext.AbstractMetrics);
+		}
+
+		[Fact]
+		public async Task ProperlyUpdatesData()
+		{
+			// Arrange
+			var dataSeedService = new DataSeedService(
+				_dataContext,
+				new Mock<ILogger<DataSeedService>>().Object,
+				_config
+			);
+
+			await _dataContext.CompilationStages.AddRangeAsync(new List<CompilationStage> {
+				new CompilationStage { Id = CompilationStages.M4.AsInt(), Name = "M4 stage" },
+				new CompilationStage { Id = CompilationStages.SandPiper.AsInt(), Name = "SandPiper" }
+			});
+
+			// Act
+			await dataSeedService.SeedDataAsync();
+
+			// Assert
+			Assert.Equal(
+				Enum.GetNames(typeof(CompilationStages)).Count(),
+				await _dataContext.CompilationStages.CountAsync()
+			);
+		}
+
+		[Fact]
+		public async Task NoDuplicates()
+		{
+			// Arrange
+			var dataSeedService = new DataSeedService(
+				_dataContext,
+				new Mock<ILogger<DataSeedService>>().Object,
+				_config
+			);
+
+			// Act
+			await dataSeedService.SeedDataAsync();
+			await dataSeedService.SeedDataAsync();
+
+			// Assert
+			Assert.Equal(
+				Enum.GetNames(typeof(CompilationStages)).Count(),
+				await _dataContext.CompilationStages.CountAsync()
+			);
+		}
+	}
+}
diff --git a/test/UnitTests/Services/DemoServiceTest.cs b/test/UnitTests/Services/DemoServiceTest.cs
new file mode 100644
index 0000000000000000000000000000000000000000..cdc6cd54e5084222766e0eae4f0410bc769b1268
--- /dev/null
+++ b/test/UnitTests/Services/DemoServiceTest.cs
@@ -0,0 +1,198 @@
+using System;
+using Xunit;
+using StatusMonitor.Shared.Services;
+using Microsoft.Extensions.DependencyInjection;
+using System.Threading.Tasks;
+using StatusMonitor.Shared.Models.Entities;
+using System.Net;
+using StatusMonitor.Shared.Extensions;
+using StatusMonitor.Daemons.Services;
+using Moq;
+using Microsoft.AspNetCore.Hosting;
+using Microsoft.Extensions.Configuration;
+using Microsoft.Extensions.Logging;
+using StatusMonitor.Shared.Models;
+using System.Linq;
+using Newtonsoft.Json;
+
+namespace StatusMonitor.Tests.UnitTests.Services
+{
+	public class DemoServiceTest
+	{
+		private readonly IServiceProvider _serviceProvider;
+
+		public DemoServiceTest()
+		{
+			var services = new ServiceCollection();
+
+			var mockEnv = new Mock<IHostingEnvironment>();
+			mockEnv
+				.SetupGet(environment => environment.EnvironmentName)
+				.Returns("Testing");
+			var env = mockEnv.Object;
+
+			services.RegisterSharedServices(env, new Mock<IConfiguration>().Object);
+
+			_serviceProvider = services.BuildServiceProvider();
+		}
+
+		[Fact]
+		public async Task GeneratesProperLogEntry()
+		{
+			// Arrange
+			var context = _serviceProvider.GetRequiredService<IDataContext>();
+			await context.LogEntrySeverities.AddRangeAsync(
+				Enum
+					.GetValues(typeof(LogEntrySeverities))
+					.Cast<LogEntrySeverities>()
+					.Select(e => new LogEntrySeverity
+					{
+						Id = e.AsInt(),
+						Description = e.ToString()
+					})
+			);
+			await context.SaveChangesAsync();
+
+			var demo = new DemoService(
+				new Mock<ILogger<DemoService>>().Object,
+				context,
+				new Mock<IMetricService>().Object
+			);
+
+			// Act
+			var result = await demo.GenerateDemoLogAsync("the-source");
+
+			// Assert
+			Assert.NotNull(result);
+			Assert.InRange(result.Category, 0, 10);
+			Assert.Equal("the-source", result.Source);
+			if (result.AuxiliaryData != "")
+			{
+				Assert.NotNull(
+					JsonConvert.DeserializeObject(
+						result.AuxiliaryData
+					)
+				);
+			}
+		}
+
+		[Theory]
+		[InlineData(Metrics.CpuLoad)]
+		[InlineData(Metrics.Log)]
+		[InlineData(Metrics.Compilation)]
+		[InlineData(Metrics.Ping)]
+		[InlineData(Metrics.UserAction)]
+		/// <summary>
+		/// Check that a proper random data point is generated for the metric type.
+		/// </summary>
+		/// <param name="type">Type of the metric for which data point is generated</param>
+		public async Task GeneratesProperDataPoint(Metrics type)
+		{
+			// Arrange
+			var context = _serviceProvider.GetRequiredService<IDataContext>();
+			var metric = await context.Metrics.AddAsync(
+				new Metric { Type = Metrics.CpuLoad.AsInt(), Source = "the-source" }
+			);
+			await context.UserActions.AddRangeAsync(
+				Enum
+					.GetValues(typeof(UserActions))
+					.Cast<UserActions>()
+					.Select(e => new UserAction
+					{
+						Id = e.AsInt(),
+						Name = e.ToString()
+					})
+			);
+			await context.LogEntrySeverities.AddRangeAsync(
+				Enum
+					.GetValues(typeof(LogEntrySeverities))
+					.Cast<LogEntrySeverities>()
+					.Select(e => new LogEntrySeverity
+					{
+						Id = e.AsInt(),
+						Description = e.ToString()
+					})
+			);
+			await context.CompilationStages.AddRangeAsync(
+				Enum
+					.GetValues(typeof(CompilationStages))
+					.Cast<CompilationStages>()
+					.Select(e => new CompilationStage
+					{
+						Id = e.AsInt(),
+						Name = e.ToString()
+					})
+			);
+			await context.SaveChangesAsync();
+
+			var mockMetricService = new Mock<IMetricService>();
+			mockMetricService
+				.Setup(mock => mock.GetOrCreateMetricAsync(It.IsAny<Metrics>(), It.IsAny<string>()))
+				.ReturnsAsync(metric.Entity);
+
+			var demo = new DemoService(new Mock<ILogger<DemoService>>().Object, context, mockMetricService.Object);
+
+			// Act
+			var result = await demo.GenerateDemoDataAsync(type, "the-source");
+
+			// Assert
+			Assert.NotNull(result.Metric);
+			Assert.InRange(
+				result.Timestamp,
+				DateTime.MinValue,
+				DateTime.UtcNow
+			);
+
+			switch (type)
+			{
+				case Metrics.CpuLoad:
+					var numericDataPoint = Assert.IsType<NumericDataPoint>(result);
+					Assert.InRange(numericDataPoint.Value, 0, 100);
+					break;
+
+				case Metrics.Compilation:
+					var compilationDataPoint = Assert.IsType<CompilationDataPoint>(result);
+					Assert.InRange(compilationDataPoint.SourceSize, 1000, 10000);
+					Assert.InRange(
+						compilationDataPoint.CompileTime,
+						new TimeSpan(0, 0, 0, 0, 100),
+						new TimeSpan(0, 0, 0, 0, 900)
+					);
+					Assert.NotNull(compilationDataPoint.Stage);
+					break;
+
+				case Metrics.Log:
+					var logDataPoint = Assert.IsType<LogDataPoint>(result);
+					Assert.InRange(logDataPoint.Count, 1, 10);
+					Assert.NotNull(logDataPoint.Severity);
+					break;
+
+				case Metrics.UserAction:
+					var userActionDataPoint = Assert.IsType<UserActionDataPoint>(result);
+					Assert.InRange(userActionDataPoint.Count, 1, 10);
+					Assert.NotNull(userActionDataPoint.Action);
+					break;
+
+				case Metrics.Ping:
+					var pingDataPoint = Assert.IsType<PingDataPoint>(result);
+					Assert.True(
+						pingDataPoint.HttpStatusCode == HttpStatusCode.OK.AsInt() ||
+						pingDataPoint.HttpStatusCode == HttpStatusCode.ServiceUnavailable.AsInt()
+					);
+					if (pingDataPoint.HttpStatusCode == HttpStatusCode.OK.AsInt())
+					{
+						Assert.InRange(
+							pingDataPoint.ResponseTime,
+							new TimeSpan(0, 0, 0, 0, 100),
+							new TimeSpan(0, 0, 0, 0, 900)
+						);
+					}
+					else
+					{
+						Assert.Equal(new TimeSpan(0), pingDataPoint.ResponseTime);
+					}
+					break;
+			}
+		}
+	}
+}
diff --git a/test/UnitTests/Services/DiscrepancyService/DiscrepancyServiceTest.cs b/test/UnitTests/Services/DiscrepancyService/DiscrepancyServiceTest.cs
new file mode 100644
index 0000000000000000000000000000000000000000..15d3945a8731b4cbbdfea15b9f1f714d99e161d3
--- /dev/null
+++ b/test/UnitTests/Services/DiscrepancyService/DiscrepancyServiceTest.cs
@@ -0,0 +1,130 @@
+using System;
+using Xunit;
+using StatusMonitor.Shared.Models.Entities;
+using StatusMonitor.Shared.Services;
+using Microsoft.Extensions.DependencyInjection;
+using System.Threading.Tasks;
+using StatusMonitor.Shared.Extensions;
+using System.Net;
+using StatusMonitor.Daemons.Services;
+using Moq;
+using Microsoft.AspNetCore.Hosting;
+using Microsoft.Extensions.Configuration;
+using Microsoft.Extensions.DependencyInjection.Extensions;
+using StatusMonitor.Shared.Services.Factories;
+using System.Net.Http;
+using StatusMonitor.Tests.Mock;
+using Microsoft.Extensions.Logging;
+using StatusMonitor.Shared.Models;
+using System.Collections.Generic;
+using System.Linq;
+
+namespace StatusMonitor.Tests.UnitTests.Services
+{
+	public partial class DiscrepancyServiceTest
+	{
+		private readonly IServiceProvider _serviceProvider;
+
+		public DiscrepancyServiceTest()
+		{
+			var services = new ServiceCollection();
+
+			var mockEnv = new Mock<IHostingEnvironment>();
+			mockEnv
+				.SetupGet(environment => environment.EnvironmentName)
+				.Returns("Testing");
+			var env = mockEnv.Object;
+
+			services.RegisterSharedServices(env, new Mock<IConfiguration>().Object);
+
+			_serviceProvider = services.BuildServiceProvider();
+		}
+
+		[Fact]
+		public async Task RecordsDiscrepancies()
+		{
+			// Arrange
+			var twoDaysAgo = DateTime.UtcNow.AddDays(-2);
+			var hourAgo = DateTime.UtcNow.AddHours(-1);
+			var now = DateTime.UtcNow;
+
+			var context = _serviceProvider.GetRequiredService<IDataContext>();
+			await context.Discrepancies.AddRangeAsync(
+				new List<Discrepancy> {
+					new Discrepancy {
+						DateFirstOffense = now,
+						Type = DiscrepancyType.GapInData,
+						MetricSource = "the-source",
+						MetricType = Metrics.CpuLoad
+					},
+					new Discrepancy {
+						DateFirstOffense = hourAgo,
+						Type = DiscrepancyType.PingFailedNTimes,
+						MetricSource = "the-source",
+						MetricType = Metrics.Ping
+					},
+					new Discrepancy {
+						DateFirstOffense = twoDaysAgo,
+						Type = DiscrepancyType.GapInData,
+						MetricSource = "the-source",
+						MetricType = Metrics.CpuLoad
+					}
+				}
+			);
+			await context.SaveChangesAsync();
+
+			var mockNotifications = new Mock<INotificationService>();
+
+			var discrepancyService = new DiscrepancyService(
+				new Mock<ILogger<DiscrepancyService>>().Object,
+				context,
+				mockNotifications.Object,
+				new Mock<IConfiguration>().Object
+			);
+
+			var input = new List<Discrepancy> {
+				new Discrepancy { // already exists
+					DateFirstOffense = now,
+					Type = DiscrepancyType.GapInData,
+					MetricSource = "the-source",
+					MetricType = Metrics.CpuLoad
+				},
+				new Discrepancy { // new
+					DateFirstOffense = hourAgo,
+					Type = DiscrepancyType.PingFailedNTimes,
+					MetricSource = "the-other-source",
+					MetricType = Metrics.Ping
+				},
+				new Discrepancy { // new
+					DateFirstOffense = twoDaysAgo.AddHours(1),
+					Type = DiscrepancyType.GapInData,
+					MetricSource = "the-source",
+					MetricType = Metrics.CpuLoad
+				}
+			};
+
+			var expected = new List<Discrepancy> {
+				input[1],
+				input[2]
+			};
+
+			// Act
+			var actual = await discrepancyService.RecordDiscrepanciesAsync(input);
+
+			// Assert
+			Assert.Equal(
+				expected.OrderBy(d => d.DateFirstOffense),
+				actual.OrderBy(d => d.DateFirstOffense)
+			);
+			mockNotifications
+				.Verify(
+					n => n.ScheduleNotificationAsync(
+						It.IsAny<string>(),
+						NotificationSeverity.High
+					),
+					Times.Exactly(expected.Count)
+				);
+			Assert.Equal(5, context.Discrepancies.Count());
+		}
+	}
+}
diff --git a/test/UnitTests/Services/DiscrepancyService/GapsInData.cs b/test/UnitTests/Services/DiscrepancyService/GapsInData.cs
new file mode 100644
index 0000000000000000000000000000000000000000..5662616338eb3cbd4fc8d93ac601b43c594ba742
--- /dev/null
+++ b/test/UnitTests/Services/DiscrepancyService/GapsInData.cs
@@ -0,0 +1,304 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Microsoft.Extensions.Configuration;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Logging;
+using Moq;
+using StatusMonitor.Daemons.Services;
+using StatusMonitor.Shared.Extensions;
+using StatusMonitor.Shared.Models;
+using StatusMonitor.Shared.Models.Entities;
+using StatusMonitor.Shared.Services;
+using Xunit;
+
+namespace StatusMonitor.Tests.UnitTests.Services
+{
+	public partial class DiscrepancyServiceTest
+	{
+		[Fact]
+		public void SingleGapInData()
+		{
+			// Arrange
+			var mockConfig = new Mock<IConfiguration>();
+			mockConfig
+				.SetupGet(conf => conf["ServiceManager:DiscrepancyService:Gaps:MaxDifference"])
+				.Returns("60");
+
+			var discrepancyService = new DiscrepancyService(
+				new Mock<ILogger<DiscrepancyService>>().Object,
+				new Mock<IDataContext>().Object,
+				new Mock<INotificationService>().Object,
+				mockConfig.Object
+			);
+
+			var input = new List<DateTime>() {
+				DateTime.UtcNow - new TimeSpan(0, 0, 0),
+				DateTime.UtcNow - new TimeSpan(0, 1, 0),
+				DateTime.UtcNow - new TimeSpan(0, 2, 0),
+				DateTime.UtcNow - new TimeSpan(0, 4, 0),
+				DateTime.UtcNow - new TimeSpan(0, 5, 0)
+			};
+
+			var expected = new List<Discrepancy> {
+				new Discrepancy
+				{
+					DateFirstOffense = input[3],
+					Type = DiscrepancyType.GapInData,
+					MetricType = Metrics.CpuLoad,
+					MetricSource = "the-source"
+				}
+			};
+
+			// Act
+			var actual = discrepancyService
+				.FindGapsInDataPoints(
+					input,
+					new Metric
+					{
+						Type = Metrics.CpuLoad.AsInt(),
+						Source = "the-source"
+					}
+				);
+
+			// Assert
+			Assert.Equal(expected, actual);
+		}
+
+		[Fact]
+		public void GapNoData()
+		{
+			// Arrange
+			var discrepancyService = new DiscrepancyService(
+				new Mock<ILogger<DiscrepancyService>>().Object,
+				new Mock<IDataContext>().Object,
+				new Mock<INotificationService>().Object,
+				new Mock<IConfiguration>().Object
+			);
+
+			// Act
+			var actual = discrepancyService
+				.FindGapsInDataPoints(
+					new List<DateTime>(),
+					new Metric
+					{
+						Type = Metrics.CpuLoad.AsInt(),
+						Source = "the-source"
+					}
+				);
+
+			// Assert
+			Assert.Empty(actual);
+		}
+
+		[Fact]
+		public void NoGapsInData()
+		{
+			// Arrange
+			var mockConfig = new Mock<IConfiguration>();
+			mockConfig
+				.SetupGet(conf => conf["ServiceManager:DiscrepancyService:Gaps:MaxDifference"])
+				.Returns("60");
+
+			var discrepancyService = new DiscrepancyService(
+				new Mock<ILogger<DiscrepancyService>>().Object,
+				new Mock<IDataContext>().Object,
+				new Mock<INotificationService>().Object,
+				mockConfig.Object
+			);
+
+			var input = new List<DateTime>() {
+				DateTime.UtcNow - new TimeSpan(0, 0, 0),
+				DateTime.UtcNow - new TimeSpan(0, 1, 0),
+				DateTime.UtcNow - new TimeSpan(0, 2, 0),
+				DateTime.UtcNow - new TimeSpan(0, 3, 0),
+				DateTime.UtcNow - new TimeSpan(0, 4, 0),
+				DateTime.UtcNow - new TimeSpan(0, 5, 0)
+			};
+
+			// Act
+			var actual = discrepancyService
+				.FindGapsInDataPoints(
+					input,
+					new Metric
+					{
+						Type = Metrics.CpuLoad.AsInt(),
+						Source = "the-source"
+					}
+				);
+
+			// Assert
+			Assert.Empty(actual);
+		}
+
+		[Fact]
+		public void MultipleGapsInData()
+		{
+			// Arrange
+			var mockConfig = new Mock<IConfiguration>();
+			mockConfig
+				.SetupGet(conf => conf["ServiceManager:DiscrepancyService:Gaps:MaxDifference"])
+				.Returns("60");
+
+			var discrepancyService = new DiscrepancyService(
+				new Mock<ILogger<DiscrepancyService>>().Object,
+				new Mock<IDataContext>().Object,
+				new Mock<INotificationService>().Object,
+				mockConfig.Object
+			);
+
+			var input = new List<DateTime>() {
+				DateTime.UtcNow - new TimeSpan(0, 0, 0),
+				DateTime.UtcNow - new TimeSpan(0, 1, 0),
+				DateTime.UtcNow - new TimeSpan(0, 4, 0),
+				DateTime.UtcNow - new TimeSpan(0, 5, 0),
+				DateTime.UtcNow - new TimeSpan(0, 7, 0)
+			};
+
+			var expected = new List<Discrepancy> {
+				new Discrepancy
+				{
+					DateFirstOffense = input[2],
+					Type = DiscrepancyType.GapInData,
+					MetricType = Metrics.CpuLoad,
+					MetricSource = "the-source"
+				},
+				new Discrepancy
+				{
+					DateFirstOffense = input[4],
+					Type = DiscrepancyType.GapInData,
+					MetricType = Metrics.CpuLoad,
+					MetricSource = "the-source"
+				}
+			}
+			.OrderBy(d => d.DateFirstOffense);
+
+			// Act
+			var actual = discrepancyService
+				.FindGapsInDataPoints(
+					input,
+					new Metric
+					{
+						Type = Metrics.CpuLoad.AsInt(),
+						Source = "the-source"
+					}
+				)
+				.OrderBy(d => d.DateFirstOffense);
+
+			// Assert
+			Assert.Equal(expected, actual);
+		}
+
+		[Fact]
+		public async Task FindsGap()
+		{
+			// Arrange
+			var mockConfig = new Mock<IConfiguration>();
+			mockConfig
+				.SetupGet(conf => conf["ServiceManager:DiscrepancyService:Gaps:MaxDifference"])
+				.Returns(60.ToString());
+			mockConfig
+				.SetupGet(conf => conf["ServiceManager:DiscrepancyService:DataTimeframe"])
+				.Returns(1800.ToString());
+
+			var context = _serviceProvider.GetRequiredService<IDataContext>();
+			var metric = await context.Metrics.AddAsync(
+				new Metric
+				{
+					Source = "the-source",
+					Type = Metrics.CpuLoad.AsInt()
+				}
+			);
+			var dataPoints = new List<NumericDataPoint> {
+				new NumericDataPoint {
+					Timestamp = DateTime.UtcNow.AddMinutes(0),
+					Metric = metric.Entity
+				},
+				new NumericDataPoint {
+					Timestamp = DateTime.UtcNow.AddMinutes(-1),
+					Metric = metric.Entity
+				},
+				new NumericDataPoint {
+					Timestamp = DateTime.UtcNow.AddMinutes(-2),
+					Metric = metric.Entity
+				},
+				new NumericDataPoint {
+					Timestamp = DateTime.UtcNow.AddMinutes(-4),
+					Metric = metric.Entity
+				},
+				new NumericDataPoint {
+					Timestamp = DateTime.UtcNow.AddMinutes(-5),
+					Metric = metric.Entity
+				}
+			};
+			await context.NumericDataPoints.AddRangeAsync(dataPoints);
+			await context.SaveChangesAsync();
+
+			var discrepancyService = new DiscrepancyService(
+				new Mock<ILogger<DiscrepancyService>>().Object,
+				context,
+				new Mock<INotificationService>().Object,
+				mockConfig.Object
+			);
+
+			var expected = new List<Discrepancy> {
+				new Discrepancy
+				{
+					DateFirstOffense = dataPoints[3].Timestamp,
+					Type = DiscrepancyType.GapInData,
+					MetricType = Metrics.CpuLoad,
+					MetricSource = "the-source"
+				}
+			};
+
+			// Act
+			var actual = await discrepancyService
+				.FindGapsAsync(
+					metric.Entity,
+					new TimeSpan(0, 30, 0)
+				);
+
+			// Assert
+			Assert.Equal(expected, actual);
+		}
+
+		[Theory]
+		[InlineData(Metrics.Compilation, false)]
+		[InlineData(Metrics.CpuLoad, true)]
+		[InlineData(Metrics.Log, false)]
+		[InlineData(Metrics.Ping, false)]
+		[InlineData(Metrics.UserAction, false)]
+		public async Task VerifyMetricForGaps(Metrics type, bool shouldSucceed)
+		{
+			// Arrange
+			var metric = new Metric
+			{
+				Type = type.AsInt(),
+				Source = "the-source"
+			};
+			var discrepancyService = new DiscrepancyService(
+				new Mock<ILogger<DiscrepancyService>>().Object,
+				new Mock<IDataContext>().Object,
+				new Mock<INotificationService>().Object,
+				new Mock<IConfiguration>().Object
+			);
+
+			// Act & Assert
+			if (shouldSucceed)
+			{
+				// It will pass metric check, will try to interact with data layer and fail
+				await Assert.ThrowsAsync<NullReferenceException>(
+					async () => await discrepancyService.FindGapsAsync(metric, new TimeSpan())
+				);
+			}
+			else
+			{
+				await Assert.ThrowsAsync<ArgumentException>(
+					async () => await discrepancyService.FindGapsAsync(metric, new TimeSpan())
+				);
+			}
+		}
+
+	}
+}
diff --git a/test/UnitTests/Services/DiscrepancyService/HighLoad.cs b/test/UnitTests/Services/DiscrepancyService/HighLoad.cs
new file mode 100644
index 0000000000000000000000000000000000000000..0fd6254cfe7cac010b645a7047ee366c4a32f616
--- /dev/null
+++ b/test/UnitTests/Services/DiscrepancyService/HighLoad.cs
@@ -0,0 +1,487 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Microsoft.Extensions.Configuration;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Logging;
+using Moq;
+using StatusMonitor.Daemons.Services;
+using StatusMonitor.Shared.Extensions;
+using StatusMonitor.Shared.Models;
+using StatusMonitor.Shared.Models.Entities;
+using StatusMonitor.Shared.Services;
+using Xunit;
+
+namespace StatusMonitor.Tests.UnitTests.Services
+{
+	public partial class DiscrepancyServiceTest
+	{
+		[Fact]
+		public void SingleHighLoadInData()
+		{
+			// Arrange
+			var mockConfig = new Mock<IConfiguration>();
+			mockConfig
+				.SetupGet(conf => conf["ServiceManager:DiscrepancyService:Load:Threshold"])
+				.Returns(90.ToString());
+			mockConfig
+				.SetupGet(conf => conf["ServiceManager:DiscrepancyService:Load:MaxFailures"])
+				.Returns(2.ToString()); // 3 is discrepancy
+
+			var discrepancyService = new DiscrepancyService(
+				new Mock<ILogger<DiscrepancyService>>().Object,
+				new Mock<IDataContext>().Object,
+				new Mock<INotificationService>().Object,
+				mockConfig.Object
+			);
+
+			var input = new List<NumericDataPoint>() {
+				new NumericDataPoint { // Good
+					Timestamp = DateTime.UtcNow.AddMinutes(0),
+					Value = 68
+				},
+				new NumericDataPoint { // Bad
+					Timestamp = DateTime.UtcNow.AddMinutes(-1),
+					Value = 91
+				},
+				new NumericDataPoint { // Bad
+					Timestamp = DateTime.UtcNow.AddMinutes(-2),
+					Value = 99
+				},
+				new NumericDataPoint { // Bad
+					Timestamp = DateTime.UtcNow.AddMinutes(-3),
+					Value = 95
+				},
+				new NumericDataPoint { // Good
+					Timestamp = DateTime.UtcNow.AddMinutes(-4),
+					Value = 68
+				},
+				new NumericDataPoint { // Bad
+					Timestamp = DateTime.UtcNow.AddMinutes(-5),
+					Value = 99
+				},
+				new NumericDataPoint { // Bad
+					Timestamp = DateTime.UtcNow.AddMinutes(-6),
+					Value = 98
+				},
+				new NumericDataPoint { // Good
+					Timestamp = DateTime.UtcNow.AddMinutes(-7),
+					Value = 68
+				}
+			};
+
+			var expected = new List<Discrepancy> {
+				new Discrepancy
+				{
+					DateFirstOffense = input[3].Timestamp,
+					Type = DiscrepancyType.HighLoad,
+					MetricType = Metrics.CpuLoad,
+					MetricSource = "the-source"
+				}
+			};
+
+			// Act
+			var actual = discrepancyService
+				.FindHighLoadInDataPoints(
+					input,
+					new Metric
+					{
+						Type = Metrics.CpuLoad.AsInt(),
+						Source = "the-source"
+					}
+				);
+
+			// Assert
+			Assert.Equal(expected, actual);
+		}
+
+		[Fact]
+		public void HighLoadNoData()
+		{
+			// Arrange
+			var discrepancyService = new DiscrepancyService(
+				new Mock<ILogger<DiscrepancyService>>().Object,
+				new Mock<IDataContext>().Object,
+				new Mock<INotificationService>().Object,
+				new Mock<IConfiguration>().Object
+			);
+
+			// Act
+			var actual = discrepancyService
+				.FindHighLoadInDataPoints(
+					new List<NumericDataPoint>(),
+					new Metric
+					{
+						Type = Metrics.CpuLoad.AsInt(),
+						Source = "the-source"
+					}
+				);
+
+			// Assert
+			Assert.Empty(actual);
+		}
+
+		[Fact]
+		public void NoHighLoadInData()
+		{
+			// Arrange
+			var mockConfig = new Mock<IConfiguration>();
+			mockConfig
+				.SetupGet(conf => conf["ServiceManager:DiscrepancyService:Load:Threshold"])
+				.Returns(90.ToString());
+			mockConfig
+				.SetupGet(conf => conf["ServiceManager:DiscrepancyService:Load:MaxFailures"])
+				.Returns(3.ToString()); // 4 is discrepancy
+
+			var discrepancyService = new DiscrepancyService(
+				new Mock<ILogger<DiscrepancyService>>().Object,
+				new Mock<IDataContext>().Object,
+				new Mock<INotificationService>().Object,
+				mockConfig.Object
+			);
+
+			var input = new List<NumericDataPoint>() {
+				new NumericDataPoint { // Good
+					Timestamp = DateTime.UtcNow.AddMinutes(0),
+					Value = 68
+				},
+				new NumericDataPoint { // Bad
+					Timestamp = DateTime.UtcNow.AddMinutes(-1),
+					Value = 91
+				},
+				new NumericDataPoint { // Bad
+					Timestamp = DateTime.UtcNow.AddMinutes(-2),
+					Value = 99
+				},
+				new NumericDataPoint { // Bad
+					Timestamp = DateTime.UtcNow.AddMinutes(-3),
+					Value = 95
+				},
+				new NumericDataPoint { // Good
+					Timestamp = DateTime.UtcNow.AddMinutes(-4),
+					Value = 68
+				},
+				new NumericDataPoint { // Bad
+					Timestamp = DateTime.UtcNow.AddMinutes(-5),
+					Value = 99
+				},
+				new NumericDataPoint { // Bad
+					Timestamp = DateTime.UtcNow.AddMinutes(-6),
+					Value = 98
+				},
+				new NumericDataPoint { // Good
+					Timestamp = DateTime.UtcNow.AddMinutes(-7),
+					Value = 68
+				}
+			};
+
+			// Act
+			var actual = discrepancyService
+				.FindHighLoadInDataPoints(
+					input,
+					new Metric
+					{
+						Type = Metrics.CpuLoad.AsInt(),
+						Source = "the-source"
+					}
+				);
+
+			// Assert
+			Assert.Empty(actual);
+		}
+
+		[Fact]
+		public void PermanentHighLoadInData()
+		{
+			// Arrange
+			var mockConfig = new Mock<IConfiguration>();
+			mockConfig
+				.SetupGet(conf => conf["ServiceManager:DiscrepancyService:Load:Threshold"])
+				.Returns(90.ToString());
+			mockConfig
+				.SetupGet(conf => conf["ServiceManager:DiscrepancyService:Load:MaxFailures"])
+				.Returns(3.ToString()); // 4 is discrepancy
+
+			var discrepancyService = new DiscrepancyService(
+				new Mock<ILogger<DiscrepancyService>>().Object,
+				new Mock<IDataContext>().Object,
+				new Mock<INotificationService>().Object,
+				mockConfig.Object
+			);
+
+			var input = new List<NumericDataPoint>() {
+				new NumericDataPoint { // Bad
+					Timestamp = DateTime.UtcNow.AddMinutes(0),
+					Value = 93
+				},
+				new NumericDataPoint { // Bad
+					Timestamp = DateTime.UtcNow.AddMinutes(-1),
+					Value = 91
+				},
+				new NumericDataPoint { // Bad
+					Timestamp = DateTime.UtcNow.AddMinutes(-2),
+					Value = 99
+				},
+				new NumericDataPoint { // Bad
+					Timestamp = DateTime.UtcNow.AddMinutes(-3),
+					Value = 95
+				},
+				new NumericDataPoint { // Bad
+					Timestamp = DateTime.UtcNow.AddMinutes(-4),
+					Value = 98
+				},
+				new NumericDataPoint { // Bad
+					Timestamp = DateTime.UtcNow.AddMinutes(-5),
+					Value = 99
+				},
+				new NumericDataPoint { // Bad
+					Timestamp = DateTime.UtcNow.AddMinutes(-6),
+					Value = 98
+				},
+				new NumericDataPoint { // Bad
+					Timestamp = DateTime.UtcNow.AddMinutes(-7),
+					Value = 90
+				}
+			};
+
+			// Act
+			var actual = discrepancyService
+				.FindHighLoadInDataPoints(
+					input,
+					new Metric
+					{
+						Type = Metrics.CpuLoad.AsInt(),
+						Source = "the-source"
+					}
+				);
+
+			// Assert
+			Assert.Empty(actual);
+		}
+
+		[Fact]
+		public void MultipleHighLoadInData()
+		{
+			// Arrange
+			var mockConfig = new Mock<IConfiguration>();
+			mockConfig
+				.SetupGet(conf => conf["ServiceManager:DiscrepancyService:Load:Threshold"])
+				.Returns(90.ToString());
+			mockConfig
+				.SetupGet(conf => conf["ServiceManager:DiscrepancyService:Load:MaxFailures"])
+				.Returns(2.ToString()); // 3 is discrepancy
+
+			var discrepancyService = new DiscrepancyService(
+				new Mock<ILogger<DiscrepancyService>>().Object,
+				new Mock<IDataContext>().Object,
+				new Mock<INotificationService>().Object,
+				mockConfig.Object
+			);
+
+			var input = new List<NumericDataPoint>() {
+				new NumericDataPoint { // Good
+					Timestamp = DateTime.UtcNow.AddMinutes(0),
+					Value = 68
+				},
+				new NumericDataPoint { // Bad
+					Timestamp = DateTime.UtcNow.AddMinutes(-1),
+					Value = 91
+				},
+				new NumericDataPoint { // Bad
+					Timestamp = DateTime.UtcNow.AddMinutes(-2),
+					Value = 99
+				},
+				new NumericDataPoint { // Bad
+					Timestamp = DateTime.UtcNow.AddMinutes(-3),
+					Value = 95
+				},
+				new NumericDataPoint { // Good
+					Timestamp = DateTime.UtcNow.AddMinutes(-4),
+					Value = 68
+				},
+				new NumericDataPoint { // Bad
+					Timestamp = DateTime.UtcNow.AddMinutes(-5),
+					Value = 99
+				},
+				new NumericDataPoint { // Bad
+					Timestamp = DateTime.UtcNow.AddMinutes(-6),
+					Value = 98
+				},
+				new NumericDataPoint { // Bad
+					Timestamp = DateTime.UtcNow.AddMinutes(-7),
+					Value = 92
+				},
+				new NumericDataPoint { // Good
+					Timestamp = DateTime.UtcNow.AddMinutes(-8),
+					Value = 68
+				}
+			};
+
+			var expected = new List<Discrepancy> {
+				new Discrepancy
+				{
+					DateFirstOffense = input[3].Timestamp,
+					Type = DiscrepancyType.HighLoad,
+					MetricType = Metrics.CpuLoad,
+					MetricSource = "the-source"
+				},
+				new Discrepancy
+				{
+					DateFirstOffense = input[7].Timestamp,
+					Type = DiscrepancyType.HighLoad,
+					MetricType = Metrics.CpuLoad,
+					MetricSource = "the-source"
+				}
+			};
+
+			// Act
+			var actual = discrepancyService
+				.FindHighLoadInDataPoints(
+					input,
+					new Metric
+					{
+						Type = Metrics.CpuLoad.AsInt(),
+						Source = "the-source"
+					}
+				);
+
+			// Assert
+			Assert.Equal(expected, actual);
+		}
+
+		[Fact]
+		public async Task FindsHighLoad()
+		{
+			// Arrange
+			var mockConfig = new Mock<IConfiguration>();
+			mockConfig
+				.SetupGet(conf => conf["ServiceManager:DiscrepancyService:Load:Threshold"])
+				.Returns(90.ToString());
+			mockConfig
+				.SetupGet(conf => conf["ServiceManager:DiscrepancyService:Load:MaxFailures"])
+				.Returns(2.ToString()); // 3 is discrepancy
+			mockConfig
+				.SetupGet(conf => conf["ServiceManager:DiscrepancyService:DataTimeframe"])
+				.Returns(1800.ToString());
+
+			var context = _serviceProvider.GetRequiredService<IDataContext>();
+			var metric = await context.Metrics.AddAsync(
+				new Metric
+				{
+					Source = "the-source",
+					Type = Metrics.CpuLoad.AsInt()
+				}
+			);
+			var dataPoints = new List<NumericDataPoint>() {
+				new NumericDataPoint { // Good
+					Timestamp = DateTime.UtcNow.AddMinutes(0),
+					Value = 68,
+					Metric = metric.Entity
+				},
+				new NumericDataPoint { // Bad
+					Timestamp = DateTime.UtcNow.AddMinutes(-1),
+					Value = 91,
+					Metric = metric.Entity
+				},
+				new NumericDataPoint { // Bad
+					Timestamp = DateTime.UtcNow.AddMinutes(-2),
+					Value = 99,
+					Metric = metric.Entity
+				},
+				new NumericDataPoint { // Bad
+					Timestamp = DateTime.UtcNow.AddMinutes(-3),
+					Value = 95,
+					Metric = metric.Entity
+				},
+				new NumericDataPoint { // Good
+					Timestamp = DateTime.UtcNow.AddMinutes(-4),
+					Value = 68,
+					Metric = metric.Entity
+				},
+				new NumericDataPoint { // Bad
+					Timestamp = DateTime.UtcNow.AddMinutes(-5),
+					Value = 99,
+					Metric = metric.Entity
+				},
+				new NumericDataPoint { // Bad
+					Timestamp = DateTime.UtcNow.AddMinutes(-6),
+					Value = 98,
+					Metric = metric.Entity
+				},
+				new NumericDataPoint { // Good
+					Timestamp = DateTime.UtcNow.AddMinutes(-7),
+					Value = 68,
+					Metric = metric.Entity
+				}
+			};
+
+			await context.NumericDataPoints.AddRangeAsync(dataPoints);
+			await context.SaveChangesAsync();
+
+			var discrepancyService = new DiscrepancyService(
+				new Mock<ILogger<DiscrepancyService>>().Object,
+				context,
+				new Mock<INotificationService>().Object,
+				mockConfig.Object
+			);
+
+			var expected = new List<Discrepancy> {
+				new Discrepancy
+				{
+					DateFirstOffense = dataPoints[3].Timestamp,
+					Type = DiscrepancyType.HighLoad,
+					MetricType = Metrics.CpuLoad,
+					MetricSource = "the-source"
+				}
+			};
+
+			// Act
+			var actual = await discrepancyService
+				.FindHighLoadsAsync(
+					metric.Entity,
+					new TimeSpan(0, 30, 0)
+				);
+
+			// Assert
+			Assert.Equal(expected, actual);
+		}
+
+		[Theory]
+		[InlineData(Metrics.Compilation, false)]
+		[InlineData(Metrics.CpuLoad, true)]
+		[InlineData(Metrics.Log, false)]
+		[InlineData(Metrics.Ping, false)]
+		[InlineData(Metrics.UserAction, false)]
+		public async Task VerifyMetricForHighLoad(Metrics type, bool shouldSucceed)
+		{
+			// Arrange
+			var metric = new Metric
+			{
+				Type = type.AsInt(),
+				Source = "the-source"
+			};
+			var discrepancyService = new DiscrepancyService(
+				new Mock<ILogger<DiscrepancyService>>().Object,
+				new Mock<IDataContext>().Object,
+				new Mock<INotificationService>().Object,
+				new Mock<IConfiguration>().Object
+			);
+
+			// Act
+			if (shouldSucceed)
+			{
+				// It will pass metric check, will try to interact with data layer and fail
+				await Assert.ThrowsAsync<NullReferenceException>(
+					async () => await discrepancyService.FindHighLoadsAsync(metric, new TimeSpan())
+				);
+			}
+			else
+			{
+				await Assert.ThrowsAsync<ArgumentException>(
+					async () => await discrepancyService.FindHighLoadsAsync(metric, new TimeSpan())
+				);
+			}
+		}
+	}
+}
diff --git a/test/UnitTests/Services/DiscrepancyService/PingFailures.cs b/test/UnitTests/Services/DiscrepancyService/PingFailures.cs
new file mode 100644
index 0000000000000000000000000000000000000000..976c0a1695662aab8a2a6a5f0d78f8afe248c9c4
--- /dev/null
+++ b/test/UnitTests/Services/DiscrepancyService/PingFailures.cs
@@ -0,0 +1,396 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Net;
+using System.Threading.Tasks;
+using Microsoft.Extensions.Configuration;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Logging;
+using Moq;
+using StatusMonitor.Daemons.Services;
+using StatusMonitor.Shared.Extensions;
+using StatusMonitor.Shared.Models;
+using StatusMonitor.Shared.Models.Entities;
+using StatusMonitor.Shared.Services;
+using Xunit;
+
+namespace StatusMonitor.Tests.UnitTests.Services
+{
+	public partial class DiscrepancyServiceTest
+	{
+		[Fact]
+		public void SinglePingFailure()
+		{
+			// Arrange
+			var discrepancyService = new DiscrepancyService(
+				new Mock<ILogger<DiscrepancyService>>().Object,
+				new Mock<IDataContext>().Object,
+				new Mock<INotificationService>().Object,
+				new Mock<IConfiguration>().Object
+			);
+
+			var input = new List<PingDataPoint>() {
+				new PingDataPoint {
+					HttpStatusCode = HttpStatusCode.OK.AsInt(),
+					Timestamp = DateTime.UtcNow - new TimeSpan(0, 0, 0)
+				},
+				new PingDataPoint {
+					HttpStatusCode = HttpStatusCode.ServiceUnavailable.AsInt(),
+					Timestamp = DateTime.UtcNow - new TimeSpan(0, 1, 0)
+				},
+				new PingDataPoint {
+					HttpStatusCode = HttpStatusCode.ServiceUnavailable.AsInt(),
+					Timestamp = DateTime.UtcNow - new TimeSpan(0, 2, 0)
+				},
+				new PingDataPoint {
+					HttpStatusCode = HttpStatusCode.OK.AsInt(),
+					Timestamp = DateTime.UtcNow - new TimeSpan(0, 3, 0)
+				},
+				new PingDataPoint {
+					HttpStatusCode = HttpStatusCode.OK.AsInt(),
+					Timestamp = DateTime.UtcNow - new TimeSpan(0, 4, 0)
+				},
+			};
+
+			var expected = new List<Discrepancy> {
+				new Discrepancy
+				{
+					DateFirstOffense = input[2].Timestamp,
+					Type = DiscrepancyType.PingFailedNTimes,
+					MetricType = Metrics.Ping,
+					MetricSource = "the-source"
+				}
+			};
+
+			// Act
+			var actual = discrepancyService
+				.FindPingFailuresFromDataPoints(
+					input,
+					new PingSetting { MaxFailures = 1 },
+					new Metric
+					{
+						Type = Metrics.Ping.AsInt(),
+						Source = "the-source"
+					}
+				);
+
+			// Assert
+			Assert.Equal(expected, actual);
+		}
+
+		[Fact]
+		public void PingFailureNoData()
+		{
+			// Arrange
+			var discrepancyService = new DiscrepancyService(
+				new Mock<ILogger<DiscrepancyService>>().Object,
+				new Mock<IDataContext>().Object,
+				new Mock<INotificationService>().Object,
+				new Mock<IConfiguration>().Object
+			);
+
+			// Act
+			var actual = discrepancyService
+				.FindPingFailuresFromDataPoints(
+					new List<PingDataPoint>(),
+					new PingSetting { MaxFailures = 1 },
+					new Metric
+					{
+						Type = Metrics.Ping.AsInt(),
+						Source = "the-source"
+					}
+				);
+
+			// Assert
+			Assert.Empty(actual);
+		}
+
+		[Fact]
+		public void PermanentPingFailure()
+		{
+			// Arrange
+			var discrepancyService = new DiscrepancyService(
+				new Mock<ILogger<DiscrepancyService>>().Object,
+				new Mock<IDataContext>().Object,
+				new Mock<INotificationService>().Object,
+				new Mock<IConfiguration>().Object
+			);
+
+			var input = new List<PingDataPoint>() {
+				new PingDataPoint {
+					HttpStatusCode = HttpStatusCode.ServiceUnavailable.AsInt(),
+					Timestamp = DateTime.UtcNow - new TimeSpan(0, 0, 0)
+				},
+				new PingDataPoint {
+					HttpStatusCode = HttpStatusCode.ServiceUnavailable.AsInt(),
+					Timestamp = DateTime.UtcNow - new TimeSpan(0, 1, 0)
+				},
+				new PingDataPoint {
+					HttpStatusCode = HttpStatusCode.ServiceUnavailable.AsInt(),
+					Timestamp = DateTime.UtcNow - new TimeSpan(0, 2, 0)
+				},
+				new PingDataPoint {
+					HttpStatusCode = HttpStatusCode.ServiceUnavailable.AsInt(),
+					Timestamp = DateTime.UtcNow - new TimeSpan(0, 3, 0)
+				},
+				new PingDataPoint {
+					HttpStatusCode = HttpStatusCode.ServiceUnavailable.AsInt(),
+					Timestamp = DateTime.UtcNow - new TimeSpan(0, 4, 0)
+				},
+			};
+
+			// Act
+			var actual = discrepancyService
+				.FindPingFailuresFromDataPoints(
+					input,
+					new PingSetting { MaxFailures = 1 },
+					new Metric
+					{
+						Type = Metrics.Ping.AsInt(),
+						Source = "the-source"
+					}
+				);
+
+			// Assert
+			Assert.Empty(actual);
+		}
+
+		[Fact]
+		public void NoPingFailures()
+		{
+			// Arrange
+			var discrepancyService = new DiscrepancyService(
+				new Mock<ILogger<DiscrepancyService>>().Object,
+				new Mock<IDataContext>().Object,
+				new Mock<INotificationService>().Object,
+				new Mock<IConfiguration>().Object
+			);
+
+			var input = new List<PingDataPoint>() {
+				new PingDataPoint {
+					HttpStatusCode = HttpStatusCode.OK.AsInt(),
+					Timestamp = DateTime.UtcNow - new TimeSpan(0, 0, 0)
+				},
+				new PingDataPoint {
+					HttpStatusCode = HttpStatusCode.OK.AsInt(),
+					Timestamp = DateTime.UtcNow - new TimeSpan(0, 1, 0)
+				},
+				new PingDataPoint {
+					HttpStatusCode = HttpStatusCode.ServiceUnavailable.AsInt(),
+					Timestamp = DateTime.UtcNow - new TimeSpan(0, 2, 0)
+				},
+				new PingDataPoint {
+					HttpStatusCode = HttpStatusCode.OK.AsInt(),
+					Timestamp = DateTime.UtcNow - new TimeSpan(0, 3, 0)
+				},
+				new PingDataPoint {
+					HttpStatusCode = HttpStatusCode.OK.AsInt(),
+					Timestamp = DateTime.UtcNow - new TimeSpan(0, 4, 0)
+				},
+			};
+
+			// Act
+			var actual = discrepancyService
+				.FindPingFailuresFromDataPoints(
+					input,
+					new PingSetting { MaxFailures = 1 },
+					new Metric
+					{
+						Type = Metrics.Ping.AsInt(),
+						Source = "the-source"
+					}
+				);
+
+			// Assert
+			Assert.Empty(actual);
+		}
+
+		[Fact]
+		public void MultiplePingFailures()
+		{
+			// Arrange
+			var discrepancyService = new DiscrepancyService(
+				new Mock<ILogger<DiscrepancyService>>().Object,
+				new Mock<IDataContext>().Object,
+				new Mock<INotificationService>().Object,
+				new Mock<IConfiguration>().Object
+			);
+
+			var input = new List<PingDataPoint>() {
+				new PingDataPoint {
+					HttpStatusCode = HttpStatusCode.OK.AsInt(),
+					Timestamp = DateTime.UtcNow - new TimeSpan(0, 0, 0)
+				},
+				new PingDataPoint {
+					HttpStatusCode = HttpStatusCode.ServiceUnavailable.AsInt(),
+					Timestamp = DateTime.UtcNow - new TimeSpan(0, 1, 0)
+				},
+				new PingDataPoint {
+					HttpStatusCode = HttpStatusCode.ServiceUnavailable.AsInt(),
+					Timestamp = DateTime.UtcNow - new TimeSpan(0, 2, 0)
+				},
+				new PingDataPoint {
+					HttpStatusCode = HttpStatusCode.OK.AsInt(),
+					Timestamp = DateTime.UtcNow - new TimeSpan(0, 3, 0)
+				},
+				new PingDataPoint {
+					HttpStatusCode = HttpStatusCode.ServiceUnavailable.AsInt(),
+					Timestamp = DateTime.UtcNow - new TimeSpan(0, 4, 0)
+				},
+			};
+
+			var expected = new List<Discrepancy> {
+				new Discrepancy
+				{
+					DateFirstOffense = input[4].Timestamp,
+					Type = DiscrepancyType.PingFailedNTimes,
+					MetricType = Metrics.Ping,
+					MetricSource = "the-source"
+				},
+				new Discrepancy
+				{
+					DateFirstOffense = input[2].Timestamp,
+					Type = DiscrepancyType.PingFailedNTimes,
+					MetricType = Metrics.Ping,
+					MetricSource = "the-source"
+				}
+			}
+			.OrderBy(d => d.DateFirstOffense); ;
+
+			// Act
+			var actual = discrepancyService
+				.FindPingFailuresFromDataPoints(
+					input,
+					new PingSetting { MaxFailures = 0 },
+					new Metric
+					{
+						Type = Metrics.Ping.AsInt(),
+						Source = "the-source"
+					}
+				)
+				.OrderBy(d => d.DateFirstOffense); ;
+
+			// Assert
+			Assert.Equal(expected, actual);
+		}
+
+		[Fact]
+		public async Task FindsPingFailure()
+		{
+			// Arrange
+			var mockConfig = new Mock<IConfiguration>();
+			mockConfig
+				.SetupGet(conf => conf["ServiceManager:DiscrepancyService:DataTimeframe"])
+				.Returns(1800.ToString());
+
+			var context = _serviceProvider.GetRequiredService<IDataContext>();
+			var metric = await context.Metrics.AddAsync(
+				new Metric
+				{
+					Source = "the-source",
+					Type = Metrics.Ping.AsInt()
+				}
+			);
+			var dataPoints = new List<PingDataPoint> {
+				new PingDataPoint {
+					Timestamp = DateTime.UtcNow.AddMinutes(0),
+					Metric = metric.Entity,
+					HttpStatusCode = HttpStatusCode.OK.AsInt()
+				},
+				new PingDataPoint {
+					Timestamp = DateTime.UtcNow.AddMinutes(-1),
+					Metric = metric.Entity,
+					HttpStatusCode = HttpStatusCode.ServiceUnavailable.AsInt()
+				},
+				new PingDataPoint {
+					Timestamp = DateTime.UtcNow.AddMinutes(-2),
+					Metric = metric.Entity,
+					HttpStatusCode = HttpStatusCode.ServiceUnavailable.AsInt()
+				},
+				new PingDataPoint {
+					Timestamp = DateTime.UtcNow.AddMinutes(-3),
+					Metric = metric.Entity,
+					HttpStatusCode = HttpStatusCode.OK.AsInt()
+				},
+				new PingDataPoint {
+					Timestamp = DateTime.UtcNow.AddMinutes(-4),
+					Metric = metric.Entity,
+					HttpStatusCode = HttpStatusCode.OK.AsInt()
+				}
+			};
+			await context.PingDataPoints.AddRangeAsync(dataPoints);
+			await context.PingSettings.AddAsync(
+				new PingSetting
+				{
+					ServerUrl = "the-source",
+					MaxFailures = 1
+				}
+			);
+			await context.SaveChangesAsync();
+
+			var discrepancyService = new DiscrepancyService(
+				new Mock<ILogger<DiscrepancyService>>().Object,
+				context,
+				new Mock<INotificationService>().Object,
+				mockConfig.Object
+			);
+
+			var expected = new List<Discrepancy> {
+				new Discrepancy
+				{
+					DateFirstOffense = dataPoints[2].Timestamp,
+					Type = DiscrepancyType.PingFailedNTimes,
+					MetricType = Metrics.Ping,
+					MetricSource = "the-source"
+				}
+			};
+
+			// Act
+			var actual = await discrepancyService
+				.FindPingFailuresAsync(
+					metric.Entity,
+					new TimeSpan(0, 30, 0)
+				);
+
+			// Assert
+			Assert.Equal(expected, actual);
+		}
+
+		[Theory]
+		[InlineData(Metrics.Compilation, false)]
+		[InlineData(Metrics.CpuLoad, false)]
+		[InlineData(Metrics.Log, false)]
+		[InlineData(Metrics.Ping, true)]
+		[InlineData(Metrics.UserAction, false)]
+		public async Task VerifyMetricForPings(Metrics type, bool shouldSucceed)
+		{
+			// Arrange
+			var metric = new Metric
+			{
+				Type = type.AsInt(),
+				Source = "the-source"
+			};
+			var discrepancyService = new DiscrepancyService(
+				new Mock<ILogger<DiscrepancyService>>().Object,
+				new Mock<IDataContext>().Object,
+				new Mock<INotificationService>().Object,
+				new Mock<IConfiguration>().Object
+			);
+
+			// Act
+			if (shouldSucceed)
+			{
+				// It will pass metric check, will try to interact with data layer and fail
+				await Assert.ThrowsAsync<NullReferenceException>(
+					async () => await discrepancyService.FindPingFailuresAsync(metric, new TimeSpan())
+				);
+			}
+			else
+			{
+				await Assert.ThrowsAsync<ArgumentException>(
+					async () => await discrepancyService.FindPingFailuresAsync(metric, new TimeSpan())
+				);
+			}
+		}
+	}
+}
diff --git a/test/UnitTests/Services/EmailServiceTest.cs b/test/UnitTests/Services/EmailServiceTest.cs
new file mode 100644
index 0000000000000000000000000000000000000000..8c7dd23b1ffb4d095b1f320c76346de4e1d8f59f
--- /dev/null
+++ b/test/UnitTests/Services/EmailServiceTest.cs
@@ -0,0 +1,68 @@
+using System;
+using Xunit;
+using StatusMonitor.Shared.Models;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.EntityFrameworkCore;
+using System.Threading.Tasks;
+using StatusMonitor.Daemons.Services;
+using Moq;
+using Microsoft.AspNetCore.Hosting;
+using StatusMonitor.Shared.Extensions;
+using Microsoft.Extensions.Configuration;
+using System.Collections.Generic;
+using StatusMonitor.Shared.Models.Entities;
+using Microsoft.Extensions.Logging;
+using StatusMonitor.Shared.Services;
+using Microsoft.Extensions.Logging.Internal;
+
+namespace StatusMonitor.Tests.UnitTests.Services
+{
+	public class EmailServiceTest
+	{
+		[Fact]
+		public async Task LogsMessageIfEmailIsDisabled()
+		{
+			// Arrange
+			var subject = "The subject";
+
+			var config = new Mock<IConfiguration>();
+			config
+				.SetupGet(conf => conf["Secrets:Email:Enabled"])
+				.Returns(false.ToString());
+
+			var logger = new Mock<ILogger<EmailService>>();
+
+			var email = new EmailService(logger.Object, config.Object);
+
+			// Act
+			await email.SendEmailAsync(new string[] { "to@email.com" }, subject, "The message");
+
+			// Assert
+			logger
+				.Verify(
+					log => log.Log(
+						LogLevel.Information,
+						It.IsAny<EventId>(),
+						It.Is<FormattedLogValues>(v => v.ToString().Contains(subject)),
+						It.IsAny<Exception>(),
+						It.IsAny<Func<object, Exception, string>>()
+					)
+				);
+		}
+
+		[Fact]
+		public async Task EmptyRecipients()
+		{
+			// Arrange
+			var email = new EmailService(
+				new Mock<ILogger<EmailService>>().Object,
+				new Mock<IConfiguration>().Object
+			);
+
+			// Act & Assert
+			await Assert.ThrowsAsync<ArgumentException>(
+				async () => await email.SendEmailAsync(new string[] { }, "The subject", "The message")
+			);
+		}
+	}
+}
diff --git a/test/UnitTests/Services/LoggingServiceTest.cs b/test/UnitTests/Services/LoggingServiceTest.cs
new file mode 100644
index 0000000000000000000000000000000000000000..4d57ff6d41786ca92c4119853b8a2aac4688a150
--- /dev/null
+++ b/test/UnitTests/Services/LoggingServiceTest.cs
@@ -0,0 +1,368 @@
+using System;
+using Xunit;
+using StatusMonitor.Shared.Models.Entities;
+using StatusMonitor.Shared.Services;
+using StatusMonitor.Shared.Models;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.EntityFrameworkCore;
+using System.Threading.Tasks;
+using StatusMonitor.Shared.Extensions;
+using Newtonsoft.Json;
+using Moq;
+using Microsoft.AspNetCore.Hosting;
+using Microsoft.Extensions.Configuration;
+using System.Linq;
+using System.Collections.Generic;
+
+namespace StatusMonitor.Tests.UnitTests.Services
+{
+	public class LoggingServiceTest
+	{
+		private readonly IDataContext _context;
+		private readonly ILoggingService _loggingService;
+
+		public LoggingServiceTest()
+		{
+			var services = new ServiceCollection();
+
+			var mockEnv = new Mock<IHostingEnvironment>();
+			mockEnv
+				.SetupGet(environment => environment.EnvironmentName)
+				.Returns("Testing");
+			var env = mockEnv.Object;
+
+			services.RegisterSharedServices(env, new Mock<IConfiguration>().Object);
+
+			var serviceProvider = services.BuildServiceProvider();
+
+			_context = serviceProvider.GetRequiredService<IDataContext>();
+			_context.LogEntrySeverities.AddRange(
+				Enum
+					.GetValues(typeof(LogEntrySeverities))
+					.Cast<LogEntrySeverities>()
+					.Select(e => new LogEntrySeverity
+					{
+						Id = e.AsInt(),
+						Description = e.ToString()
+					})
+			);
+			_context.SaveChanges();
+
+			_loggingService = new LoggingService(_context);
+		}
+
+		[Fact]
+		public async Task RecordsMessage()
+		{
+			// Act
+			var id = await _loggingService.RecordLogMessageAsync(
+				"the message",
+				JsonConvert.SerializeObject(new
+				{
+					Exception = "exception stack trace"
+				}),
+				"the-source",
+				LoggingEvents.Ping.AsInt(),
+				LogEntrySeverities.Error
+			);
+
+			// Assert
+			Assert.True(await _context.LogEntries.AnyAsync(log => log.Id == id));
+		}
+
+		[Fact]
+		public async Task GetsAvailableFilterData()
+		{
+			// Arrange
+			var twoDaysAgo = DateTime.UtcNow.AddDays(-2);
+			var hourAgo = DateTime.UtcNow.AddHours(-1);
+			var now = DateTime.UtcNow;
+
+			await _context.LogEntries.AddRangeAsync(
+				new List<LogEntry> {
+					new LogEntry {
+						Severity = new LogEntrySeverity { Id = LogEntrySeverities.Debug.AsInt() },
+						Category = LoggingEvents.Clean.AsInt(),
+						Source = "the-source-1",
+						Timestamp = twoDaysAgo
+					},
+					new LogEntry {
+						Severity = new LogEntrySeverity { Id = LogEntrySeverities.Info.AsInt() },
+						Category = LoggingEvents.Clean.AsInt(),
+						Source = "the-source-2",
+						Timestamp = twoDaysAgo
+					},
+					new LogEntry {
+						Severity = new LogEntrySeverity { Id = LogEntrySeverities.Debug.AsInt() },
+						Category = LoggingEvents.Clean.AsInt(),
+						Source = "the-source-1",
+						Timestamp = hourAgo
+					},
+					new LogEntry {
+						Severity = new LogEntrySeverity { Id = LogEntrySeverities.Error.AsInt() },
+						Category = LoggingEvents.ActionFilters.AsInt(),
+						Source = "the-source-1",
+						Timestamp = now
+					}
+				}
+			);
+
+			await _context.SaveChangesAsync();
+
+			var expected = new LogMessagesFilterModel
+			{
+				Severities = new List<LogEntrySeverities> {
+					LogEntrySeverities.Debug,
+					LogEntrySeverities.Info,
+					LogEntrySeverities.Error
+				},
+				Sources = new List<string> {
+					"the-source-1",
+					"the-source-2"
+				},
+				Categories = new List<int> {
+					LoggingEvents.Clean.AsInt(),
+					LoggingEvents.ActionFilters.AsInt()
+				},
+				Start = twoDaysAgo,
+				End = now
+			};
+
+			// Act
+			var actual = await _loggingService.GetAvailableFilterDataAsync();
+
+			// Assert
+			Assert.Equal(expected.Categories, actual.Categories);
+			Assert.Equal(expected.Severities, actual.Severities);
+			Assert.Equal(expected.Sources, actual.Sources);
+			Assert.Equal(expected.Start, actual.Start);
+			Assert.Equal(expected.End, actual.End);
+		}
+
+		[Fact]
+		public async Task GetsMessageById()
+		{
+			// Arrange
+			var entry = await _context.LogEntries.AddAsync(
+				new LogEntry
+				{
+					Severity = new LogEntrySeverity { Id = LogEntrySeverities.Debug.AsInt() }
+				}
+			);
+			await _context.SaveChangesAsync();
+
+			// Act
+			var existing = await _loggingService.GetMessageByIdAsync(entry.Entity.Id);
+			var nonExisting = await _loggingService.GetMessageByIdAsync(-1);
+
+			// Assert
+			Assert.NotNull(existing);
+			Assert.Equal(entry.Entity.Id, existing.Id);
+			Assert.NotNull(existing.Severity);
+
+			Assert.Null(nonExisting);
+		}
+
+		[Fact]
+		public async Task GetsLogMessages()
+		{
+			// Arrange
+			var twoDaysAgo = DateTime.UtcNow.AddDays(-2);
+			var hourAgo = DateTime.UtcNow.AddHours(-1);
+			var now = DateTime.UtcNow;
+
+			var logEntries = new List<LogEntry> {
+				new LogEntry {
+					Severity = new LogEntrySeverity { Id = LogEntrySeverities.Debug.AsInt() },
+					Category = LoggingEvents.Clean.AsInt(),
+					Source = "the-source-1",
+					Timestamp = twoDaysAgo
+				},
+				new LogEntry {
+					Severity = new LogEntrySeverity { Id = LogEntrySeverities.Info.AsInt() },
+					Category = LoggingEvents.Clean.AsInt(),
+					Source = "the-source-2",
+					Timestamp = twoDaysAgo
+				},
+				new LogEntry {
+					Severity = new LogEntrySeverity { Id = LogEntrySeverities.Debug.AsInt() },
+					Category = LoggingEvents.Clean.AsInt(),
+					Source = "the-source-1",
+					Timestamp = hourAgo
+				},
+				new LogEntry {
+					Severity = new LogEntrySeverity { Id = LogEntrySeverities.Error.AsInt() },
+					Category = LoggingEvents.ActionFilters.AsInt(),
+					Source = "the-source-2",
+					Timestamp = now
+				},
+				new LogEntry {
+					Severity = new LogEntrySeverity { Id = LogEntrySeverities.Error.AsInt() },
+					Category = LoggingEvents.Cache.AsInt(),
+					Source = "the-source-3",
+					Timestamp = hourAgo
+				},
+				new LogEntry {
+					Severity = new LogEntrySeverity { Id = LogEntrySeverities.Detail.AsInt() },
+					Category = LoggingEvents.ActionFilters.AsInt(),
+					Source = "the-source-2",
+					Timestamp = now
+				}
+			};
+			await _context.LogEntries.AddRangeAsync(logEntries);
+
+			await _context.SaveChangesAsync();
+
+			var expectedBySource = // the-source 2
+				new List<LogEntry>
+				{
+					logEntries[1],
+					logEntries[3],
+					logEntries[5]
+				};
+
+			var expectedByCategory = // ActionFilters
+				new List<LogEntry>
+				{
+					logEntries[3],
+					logEntries[5]
+				};
+
+			var expectedBySeverity = // Debug
+				new List<LogEntry>
+				{
+					logEntries[0],
+					logEntries[2]
+				};
+
+			var expectedByStart = // hourAgo
+				new List<LogEntry>
+				{
+					logEntries[2],
+					logEntries[3],
+					logEntries[4],
+					logEntries[5]
+				};
+
+			var expectedByEnd = // hourAgo
+				new List<LogEntry>
+				{
+					logEntries[0],
+					logEntries[1],
+					logEntries[2],
+					logEntries[4]
+				};
+
+			var expectedByCombined =
+				new List<LogEntry>
+				{
+					logEntries[2]
+				};
+
+			var expectedEmpty = new List<LogEntry>();
+			var expectedAll = logEntries;
+
+			// Act
+			var actualBySource = await _loggingService.GetLogMessagesAsync(
+				new LogMessagesFilterModel
+				{
+					Sources = new List<string> { "the-source-2" }
+				}
+			);
+
+			var actualByCategory = await _loggingService.GetLogMessagesAsync(
+				new LogMessagesFilterModel
+				{
+					Categories = new List<int> { LoggingEvents.ActionFilters.AsInt() }
+				}
+			);
+
+			var actualBySeverity = await _loggingService.GetLogMessagesAsync(
+				new LogMessagesFilterModel
+				{
+					Severities = new List<LogEntrySeverities> { LogEntrySeverities.Debug }
+				}
+			);
+
+			var actualByStart = await _loggingService.GetLogMessagesAsync(
+				new LogMessagesFilterModel
+				{
+					Start = hourAgo
+				}
+			);
+
+			var actualByEnd = await _loggingService.GetLogMessagesAsync(
+				new LogMessagesFilterModel
+				{
+					End = hourAgo
+				}
+			);
+
+			var actualEmpty = await _loggingService.GetLogMessagesAsync(
+				new LogMessagesFilterModel
+				{
+					Severities = new List<LogEntrySeverities> { LogEntrySeverities.Fatal }
+				}
+			);
+
+			var actualAll = await _loggingService.GetLogMessagesAsync(new LogMessagesFilterModel());
+
+			// Assert
+			Assert.Equal(
+				expectedBySource.OrderBy(e => e.Id),
+				actualBySource.OrderBy(e => e.Id)
+			);
+			Assert.Equal(
+				expectedByCategory.OrderBy(e => e.Id),
+				actualByCategory.OrderBy(e => e.Id)
+			);
+			Assert.Equal(
+				expectedBySeverity.OrderBy(e => e.Id),
+				actualBySeverity.OrderBy(e => e.Id)
+			);
+			Assert.Equal(
+				expectedByStart.OrderBy(e => e.Id),
+				actualByStart.OrderBy(e => e.Id)
+			);
+			Assert.Equal(
+				expectedByEnd.OrderBy(e => e.Id),
+				actualByEnd.OrderBy(e => e.Id)
+			);
+			Assert.Equal(
+				expectedEmpty.OrderBy(e => e.Id),
+				actualEmpty.OrderBy(e => e.Id)
+			);
+			Assert.Equal(
+				expectedAll.OrderBy(e => e.Id),
+				actualAll.OrderBy(e => e.Id)
+			);
+		}
+
+		[Fact]
+		public async Task GetsAvailableFilterDataForEmpty()
+		{
+			// Arrange
+			var expected = new LogMessagesFilterModel();
+
+			// Act
+			var actual = await _loggingService.GetAvailableFilterDataAsync();
+
+			// Assert
+			Assert.Equal(expected.Categories, actual.Categories);
+			Assert.Equal(expected.Severities, actual.Severities);
+			Assert.Equal(expected.Sources, actual.Sources);
+			Assert.Equal(expected.Start, actual.Start);
+			Assert.Equal(expected.End, actual.End);
+		}
+
+		[Fact]
+		public async Task GetsLogMessagesForEmpty()
+		{
+			// Act
+			var actual = await _loggingService.GetLogMessagesAsync(new LogMessagesFilterModel());
+
+			// Assert
+			Assert.Empty(actual);
+		}
+	}
+}
diff --git a/test/UnitTests/Services/MetricServiceTest.cs b/test/UnitTests/Services/MetricServiceTest.cs
new file mode 100644
index 0000000000000000000000000000000000000000..f8fb0a99ff3a2e010b15cb04b1f1187708db0f3b
--- /dev/null
+++ b/test/UnitTests/Services/MetricServiceTest.cs
@@ -0,0 +1,207 @@
+using System;
+using Xunit;
+using StatusMonitor.Shared.Models.Entities;
+using StatusMonitor.Shared.Services;
+using Microsoft.Extensions.DependencyInjection;
+using System.Threading.Tasks;
+using System.Collections.Generic;
+using StatusMonitor.Shared.Extensions;
+using Moq;
+using Microsoft.AspNetCore.Hosting;
+using Microsoft.Extensions.Configuration;
+using StatusMonitor.Shared.Models;
+using Microsoft.Extensions.Logging;
+using Microsoft.EntityFrameworkCore;
+using System.Linq;
+
+namespace StatusMonitor.Tests.UnitTests.Services
+{
+	public class MetricServiceTest
+	{
+		private readonly IServiceProvider _serviceProvider;
+
+		public MetricServiceTest()
+		{
+			var services = new ServiceCollection();
+
+			var mockEnv = new Mock<IHostingEnvironment>();
+			mockEnv
+				.SetupGet(environment => environment.EnvironmentName)
+				.Returns("Testing");
+			var env = mockEnv.Object;
+
+			services.RegisterSharedServices(env, new Mock<IConfiguration>().Object);
+
+			_serviceProvider = services.BuildServiceProvider();
+		}
+
+		[Fact]
+		public async Task ReturnsExistingMetricOrNull()
+		{
+			// Arrange
+			var context = _serviceProvider.GetRequiredService<IDataContext>();
+			await context.Metrics.AddAsync(new Metric { Type = Metrics.CpuLoad.AsInt(), Source = "existing-source" });
+			await context.SaveChangesAsync();
+
+			var metricService = new MetricService(context, new Mock<ILogger<MetricService>>().Object);
+
+			// Act
+			var nonExisting = await metricService.GetMetricsAsync(Metrics.CpuLoad, "non-existing-source");
+			var existing = await metricService.GetMetricsAsync(Metrics.CpuLoad, "existing-source");
+
+			// Assert
+			Assert.Empty(nonExisting);
+			Assert.NotEmpty(existing);
+		}
+
+		[Fact]
+		public async Task CreatesMetric()
+		{
+			// Arrange
+			var context = _serviceProvider.GetRequiredService<IDataContext>();
+			await context.AbstractMetrics.AddAsync(new AbstractMetric { Type = Metrics.CpuLoad.AsInt() });
+			await context.AutoLabels.AddAsync(new AutoLabel { Id = AutoLabels.Normal.AsInt() });
+			await context.ManualLabels.AddAsync(new ManualLabel { Id = ManualLabels.None.AsInt() });
+			await context.SaveChangesAsync();
+
+			var metricService = new MetricService(context, new Mock<ILogger<MetricService>>().Object);
+
+			// Act
+			var metric = await metricService.GetOrCreateMetricAsync(Metrics.CpuLoad, "the-source");
+
+			// Assert
+			Assert.NotNull(metric);
+			Assert.Equal(Metrics.CpuLoad.AsInt(), metric.Type);
+			Assert.Equal("the-source", metric.Source);
+			Assert.True(
+				await context.Metrics.AnyAsync(mt => mt.Type == Metrics.CpuLoad.AsInt() && mt.Source == "the-source")
+			);
+		}
+
+		[Fact]
+		public async Task ReturnsMetric()
+		{
+			// Arrange
+			var context = _serviceProvider.GetRequiredService<IDataContext>();
+			await context.Metrics.AddAsync(
+				new Metric { 
+					Type = Metrics.CpuLoad.AsInt(), 
+					Source = "existing-source",  
+					CurrentValue = 10
+				}
+			);
+			await context.SaveChangesAsync();
+			
+			var metricService = new MetricService(context, new Mock<ILogger<MetricService>>().Object);
+
+			// Act
+			var metric = await metricService.GetOrCreateMetricAsync(Metrics.CpuLoad, "existing-source");
+
+			// Assert
+			Assert.NotNull(metric);
+			Assert.Equal(Metrics.CpuLoad.AsInt(), metric.Type);
+			Assert.Equal("existing-source", metric.Source);
+			Assert.Equal(10, metric.CurrentValue);
+			Assert.True(
+				await context.Metrics.AnyAsync(
+					mt => mt.Type == Metrics.CpuLoad.AsInt() && mt.Source == "existing-source"
+				)
+			);
+		}
+
+		[Fact]
+		public async Task GetsCurrentValue()
+		{
+			// Arrange
+			var context = _serviceProvider.GetRequiredService<IDataContext>();
+			var metric = await context.Metrics.AddAsync(
+				new Metric { 
+					Type = Metrics.CpuLoad.AsInt(), 
+					Source = "existing-source"
+				}
+			);
+			await context.NumericDataPoints.AddRangeAsync(
+				new List<NumericDataPoint> {
+					new NumericDataPoint { 
+						Timestamp = DateTime.UtcNow, 
+						Value = 10, 
+						Metric = metric.Entity 
+					},
+					new NumericDataPoint { 
+						Timestamp = DateTime.UtcNow - new TimeSpan(1, 0, 0), 
+						Value = 10, 
+						Metric = metric.Entity 
+					}
+				}
+			);
+			await context.SaveChangesAsync();
+			
+			var metricService = new MetricService(context, new Mock<ILogger<MetricService>>().Object);
+
+			// Act
+			var value = await metricService.GetCurrentValueForMetricAsync(metric.Entity);
+
+			// Assert
+			Assert.Equal(10, value);
+		}
+	}
+
+	/// <summary>
+	/// Helper classes which compares two Metric objects
+	/// </summary>
+	public class MetricComparer : IEqualityComparer<Metric>
+	{
+		/// <summary>
+		/// Returns true if two given Metric objects should be considered equal
+		/// </summary>
+		public bool Equals(Metric x, Metric y)
+		{
+			return
+				x.Source == y.Source &&
+				x.Type == y.Type &&
+				x.Title == y.Title &&
+				x.Public == y.Public &&
+
+				x.DayAvg == y.DayAvg &&
+				x.DayMax == y.DayMax &&
+				x.DayMin == y.DayMin &&
+
+				x.HourAvg == y.HourAvg &&
+				x.HourMax == y.HourMax &&
+				x.HourMin == y.HourMin &&
+
+				x.CurrentValue == y.CurrentValue &&
+				
+				(x.AutoLabel == null && y.AutoLabel == null) || 
+				x.AutoLabel.Id == y.AutoLabel.Id &&
+
+				(x.ManualLabel == null && y.ManualLabel == null || 
+				x.ManualLabel.Id == y.ManualLabel.Id);
+		}
+
+		/// <summary>
+		/// Returns a hash of the given Metric object
+		/// </summary>
+		public int GetHashCode(Metric metric)
+		{
+			return
+				2 * metric.Source.GetHashCode() +
+				3 * metric.Type.GetHashCode() +
+				5 * metric.Title.GetHashCode() +
+				7 * metric.Public.GetHashCode() +
+
+				11 * metric.DayAvg.GetHashCode() +
+				13 * metric.DayMax.GetHashCode() +
+				17 * metric.DayMin.GetHashCode() +
+
+				23 * metric.HourAvg.GetHashCode() +
+				29 * metric.HourMax.GetHashCode() +
+				31 * metric.HourMin.GetHashCode() +
+
+				37 * metric.CurrentValue.GetHashCode() +
+				
+				41 * (metric.AutoLabel == null ? 0 : metric.AutoLabel.Id) +
+				43 * (metric.AutoLabel == null ? 0 : metric.ManualLabel.Id);
+		}
+	}
+}
diff --git a/test/UnitTests/Services/NotificationServiceTest.cs b/test/UnitTests/Services/NotificationServiceTest.cs
new file mode 100644
index 0000000000000000000000000000000000000000..193f71c6f3b54efe8a9585a36de12cb8f04b1e46
--- /dev/null
+++ b/test/UnitTests/Services/NotificationServiceTest.cs
@@ -0,0 +1,342 @@
+using System;
+using Xunit;
+using StatusMonitor.Shared.Models;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.EntityFrameworkCore;
+using System.Threading.Tasks;
+using StatusMonitor.Daemons.Services;
+using Moq;
+using Microsoft.AspNetCore.Hosting;
+using StatusMonitor.Shared.Extensions;
+using Microsoft.Extensions.Configuration;
+using System.Collections.Generic;
+using StatusMonitor.Shared.Models.Entities;
+using Microsoft.Extensions.Logging;
+using StatusMonitor.Shared.Services;
+using System.Linq;
+
+namespace StatusMonitor.Tests.UnitTests.Services
+{
+	public class NotificationServiceTest
+	{
+		private readonly IServiceProvider _serviceProvider;
+		private readonly IConfiguration _config;
+
+		public NotificationServiceTest()
+		{
+			var services = new ServiceCollection();
+
+			var mockEnv = new Mock<IHostingEnvironment>();
+			mockEnv
+				.SetupGet(environment => environment.EnvironmentName)
+				.Returns("Testing");
+			var env = mockEnv.Object;
+
+			var mockConfig = new Mock<IConfiguration>();
+			mockConfig
+				.SetupGet(
+					config => config[$"ServiceManager:NotificationService:Frequencies:{NotificationSeverity.High.ToString()}"]
+				)
+				.Returns($"{60}");
+			mockConfig
+				.SetupGet(
+					config => config[$"ServiceManager:NotificationService:Frequencies:{NotificationSeverity.Medium.ToString()}"]
+				)
+				.Returns($"{60 * 60}");
+			mockConfig
+				.SetupGet(
+					config => config[$"ServiceManager:NotificationService:Frequencies:{NotificationSeverity.Low.ToString()}"]
+				)
+				.Returns($"{24 * 60 * 60}");
+			_config = mockConfig.Object;
+
+			services.RegisterSharedServices(env, new Mock<IConfiguration>().Object);
+
+			_serviceProvider = services.BuildServiceProvider();
+		}
+
+		[Fact]
+		public async Task ChecksIfNeedToSend_OnlySentNotifications()
+		{
+			// Arrange
+			var context = _serviceProvider.GetRequiredService<IDataContext>();
+			await context.Notifications.AddAsync(new Notification());
+			await context.SaveChangesAsync();
+
+			var notificationService = new NotificationService(
+				new Mock<ILogger<NotificationService>>().Object,
+				new Mock<IConfiguration>().Object,
+				context,
+				new Mock<IEmailService>().Object,
+				new Mock<ISlackService>().Object
+			);
+
+			// Act
+			var actual = Enum
+				.GetValues(typeof(NotificationSeverity))
+				.Cast<object>()
+				.Select(async severity => await notificationService.CheckIfNeedToSendAsync((NotificationSeverity)severity))
+				.Select(task => task.Result)
+				.Aggregate((self, next) => self && next);
+
+			// Assert
+			Assert.True(actual);
+		}
+
+		[Fact]
+		public void ChecksIfNeedToSend_NoNotifications()
+		{
+			// Arrange
+			var context = _serviceProvider.GetRequiredService<IDataContext>();
+
+			var notificationService = new NotificationService(
+				new Mock<ILogger<NotificationService>>().Object,
+				new Mock<IConfiguration>().Object,
+				context,
+				new Mock<IEmailService>().Object,
+				new Mock<ISlackService>().Object
+			);
+
+			// Act
+			var actual = Enum
+				.GetValues(typeof(NotificationSeverity))
+				.Cast<object>()
+				.Select(async severity => await notificationService.CheckIfNeedToSendAsync((NotificationSeverity)severity))
+				.Select(task => task.Result)
+				.Aggregate((self, next) => self && next);
+
+			// Assert
+			Assert.True(actual);
+		}
+
+		[Fact]
+		public async Task ChecksIfNeedToSend_OldNotifications()
+		{
+			// Arrange
+			var context = _serviceProvider.GetRequiredService<IDataContext>();
+
+			await context.Notifications.AddAsync(
+				new Notification
+				{
+					IsSent = true,
+					DateSent = DateTime.UtcNow.AddMinutes(-2),
+					Severity = NotificationSeverity.High
+				}
+			);
+			await context.SaveChangesAsync();
+
+			var notificationService = new NotificationService(
+				new Mock<ILogger<NotificationService>>().Object,
+				_config,
+				context,
+				new Mock<IEmailService>().Object,
+				new Mock<ISlackService>().Object
+			);
+
+			// Act
+			var actual = await notificationService.CheckIfNeedToSendAsync(NotificationSeverity.High);
+
+			// Assert
+			Assert.True(actual);
+		}
+
+		[Fact]
+		public async Task ChecksIfNeedToSend_TooRecentNotification()
+		{
+			// Arrange
+			var context = _serviceProvider.GetRequiredService<IDataContext>();
+
+			await context.Notifications.AddAsync(
+				new Notification
+				{
+					IsSent = true,
+					DateSent = DateTime.UtcNow.AddSeconds(-30),
+					Severity = NotificationSeverity.High
+				}
+			);
+			await context.SaveChangesAsync();
+
+			var notificationService = new NotificationService(
+				new Mock<ILogger<NotificationService>>().Object,
+				_config,
+				context,
+				new Mock<IEmailService>().Object,
+				new Mock<ISlackService>().Object
+			);
+
+			// Act
+			var actual = await notificationService.CheckIfNeedToSendAsync(NotificationSeverity.High);
+
+			// Assert
+			Assert.False(actual);
+		}
+
+		[Theory]
+		[InlineData(NotificationSeverity.High)]
+		[InlineData(NotificationSeverity.Medium)]
+		[InlineData(NotificationSeverity.Low)]
+		public void ComposesMessage(NotificationSeverity severity)
+		{
+			// Arrange
+			var input = new List<Notification> {
+				new Notification
+				{
+					IsSent = true,
+					DateCreated = DateTime.UtcNow.AddSeconds(-30),
+					Severity = severity,
+					Message = "Hello, world!"
+				}
+			};
+
+			var notificationService = new NotificationService(
+				new Mock<ILogger<NotificationService>>().Object,
+				new Mock<IConfiguration>().Object,
+				new Mock<IDataContext>().Object,
+				new Mock<IEmailService>().Object,
+				new Mock<ISlackService>().Object
+			);
+
+			// Act
+			var actual = notificationService.ComposeMessage(input);
+
+			// Assert
+			Assert.Contains($"Severity {severity}", actual);
+		}
+
+		[Fact]
+		public async Task SchedulesNotification()
+		{
+			// Arrange
+			var context = _serviceProvider.GetRequiredService<IDataContext>();
+
+			var notificationService = new NotificationService(
+				new Mock<ILogger<NotificationService>>().Object,
+				new Mock<IConfiguration>().Object,
+				context,
+				new Mock<IEmailService>().Object,
+				new Mock<ISlackService>().Object
+			);
+
+			// Act
+			var actual = await notificationService
+				.ScheduleNotificationAsync(
+					"Hello, world",
+					NotificationSeverity.High
+				);
+
+			// Assert
+			Assert.True(await context.Notifications.AnyAsync(notif => notif.Id == actual.Id));
+			Assert.Equal(NotificationSeverity.High, actual.Severity);
+			Assert.Equal("Hello, world", actual.Message);
+			Assert.False(actual.IsSent);
+		}
+
+		[Fact]
+		public async Task ProcessesNotificationQueue()
+		{
+			// Arrange
+			var context = _serviceProvider.GetRequiredService<IDataContext>();
+			await context.Notifications.AddRangeAsync(
+				new List<Notification> {
+					new Notification {
+						Severity = NotificationSeverity.High
+					},
+					new Notification {
+						Severity = NotificationSeverity.Medium,
+						IsSent = true,
+						DateSent = DateTime.UtcNow.AddHours(-2)
+					},
+					new Notification { // this one triggers sending
+						Severity = NotificationSeverity.Medium,
+						DateSent = DateTime.UtcNow.AddMinutes(-30)
+					},
+					new Notification {
+						Severity = NotificationSeverity.Low
+					},
+					new Notification {
+						Severity = NotificationSeverity.Low,
+						IsSent = true,
+						DateSent = DateTime.UtcNow
+					},
+				}
+			);
+			await context.SaveChangesAsync();
+
+			var mockEmail = new Mock<IEmailService>();
+			var mockSlack = new Mock<ISlackService>();
+
+			var notificationService = new NotificationService(
+				new Mock<ILogger<NotificationService>>().Object,
+				_config,
+				context,
+				mockEmail.Object,
+				mockSlack.Object
+			);
+
+			// Act
+			var actual = await notificationService.ProcessNotificationQueueAsync();
+
+			// Assert
+			Assert.True(actual);
+
+			mockEmail
+				.Verify(
+					email => email.SendEmailAsync(
+						It.IsAny<string[]>(),
+						It.Is<string>(subj => subj.Contains("notifications")),
+						It.IsAny<string>()
+					),
+					Times.Once()
+				);
+
+			mockSlack
+				.Verify(
+					slack => slack.SendMessageAsync(It.IsAny<string>()),
+					Times.Once()
+				);
+			
+			Assert.True(context.Notifications.All(notif => notif.IsSent));
+			Assert.True(context.Notifications.All(notif => notif.DateSent != null));
+		}
+
+		[Fact]
+		public async Task ProcessesNotificationQueue_NoData()
+		{
+			// Arrange
+			var context = _serviceProvider.GetRequiredService<IDataContext>();
+
+			var mockEmail = new Mock<IEmailService>();
+			var mockSlack = new Mock<ISlackService>();
+
+			var notificationService = new NotificationService(
+				new Mock<ILogger<NotificationService>>().Object,
+				_config,
+				context,
+				mockEmail.Object,
+				mockSlack.Object
+			);
+
+			// Act
+			var actual = await notificationService.ProcessNotificationQueueAsync();
+
+			// Assert
+			Assert.False(actual);
+
+			mockEmail
+				.Verify(
+					email => email.SendEmailAsync(
+						It.IsAny<string[]>(),
+						It.Is<string>(subj => subj.Contains("notifications")),
+						It.IsAny<string>()
+					),
+					Times.Never()
+				);
+
+			mockSlack
+				.Verify(
+					slack => slack.SendMessageAsync(It.IsAny<string>()),
+					Times.Never()
+				);
+		}
+	}
+}
diff --git a/test/UnitTests/Services/PingServiceTest.cs b/test/UnitTests/Services/PingServiceTest.cs
new file mode 100644
index 0000000000000000000000000000000000000000..6cedbe0220632a17b58d3085c9cc708f51b34634
--- /dev/null
+++ b/test/UnitTests/Services/PingServiceTest.cs
@@ -0,0 +1,113 @@
+using System;
+using Xunit;
+using StatusMonitor.Shared.Models.Entities;
+using StatusMonitor.Shared.Services;
+using Microsoft.Extensions.DependencyInjection;
+using System.Threading.Tasks;
+using StatusMonitor.Shared.Extensions;
+using System.Net;
+using StatusMonitor.Daemons.Services;
+using Moq;
+using Microsoft.AspNetCore.Hosting;
+using Microsoft.Extensions.Configuration;
+using Microsoft.Extensions.DependencyInjection.Extensions;
+using StatusMonitor.Shared.Services.Factories;
+using System.Net.Http;
+using StatusMonitor.Tests.Mock;
+using Microsoft.Extensions.Logging;
+
+namespace StatusMonitor.Tests.UnitTests.Services
+{
+	public class PingServiceTest
+	{
+		private readonly IServiceProvider _serviceProvider;
+		private readonly ResponseHandler _responseHandler = new ResponseHandler();
+
+		public PingServiceTest()
+		{
+			var services = new ServiceCollection();
+
+			var mockEnv = new Mock<IHostingEnvironment>();
+			mockEnv
+				.SetupGet(environment => environment.EnvironmentName)
+				.Returns("Testing");
+			var env = mockEnv.Object;
+
+			var mockHttpFactory = new Mock<IHttpClientFactory>();
+			mockHttpFactory
+				.Setup(factory => factory.BuildClient())
+				.Returns(new HttpClient(_responseHandler));
+
+			services.RegisterSharedServices(env, new Mock<IConfiguration>().Object);
+
+			services.Replace(ServiceDescriptor.Singleton<IHttpClientFactory>(mockHttpFactory.Object));
+
+			_serviceProvider = services.BuildServiceProvider();
+		}
+
+		[Theory]
+		[InlineData(HttpResponseOption.Success)]
+		[InlineData(HttpResponseOption.Timeout)]
+		[InlineData(HttpResponseOption.ServiceUnavailable)]
+		/// <summary>
+		/// Checks that the service correctly determines status code and response time.
+		/// </summary>
+		/// <param name="option">Option describing the expected behavior</param>
+		public async Task GeneratesCorrectDataPoint(HttpResponseOption option)
+		{
+			// Arrange
+			var responseHandler = new ResponseHandler();
+			responseHandler.AddHandler(
+				new Uri("https://my.url.com"),
+				option
+			);
+
+			var mockHttpFactory = new Mock<IHttpClientFactory>();
+			mockHttpFactory
+				.Setup(factory => factory.BuildClient())
+				.Returns(new HttpClient(responseHandler));
+
+
+			var metricServiceMock = new Mock<IMetricService>();
+			metricServiceMock
+				.Setup(mock => mock.GetOrCreateMetricAsync(Metrics.Ping, "https://my.url.com"))
+				.ReturnsAsync(new Metric());
+
+			var pingService = new PingService(
+				metricServiceMock.Object,
+				new Mock<ILogger<PingService>>().Object,
+				mockHttpFactory.Object
+			);
+
+			// Act
+			var dataPoint = await pingService.PingServerAsync(
+				new PingSetting { 
+					ServerUrl = "https://my.url.com",
+					MaxResponseTime = new TimeSpan(0,0,0,0,500)
+				}
+			);
+
+			// Assert
+			switch (option)
+			{
+				case HttpResponseOption.Success:
+					Assert.Equal(HttpStatusCode.OK.AsInt(), dataPoint.HttpStatusCode);
+					Assert.True(dataPoint.ResponseTime < new TimeSpan(0, 0, 0, 0, 2000));
+					break;
+				case HttpResponseOption.Timeout:
+					Assert.Equal(HttpStatusCode.ServiceUnavailable.AsInt(), dataPoint.HttpStatusCode);
+					Assert.Equal(new TimeSpan(0), dataPoint.ResponseTime);
+					break;
+				case HttpResponseOption.ServiceUnavailable:
+					Assert.Equal(HttpStatusCode.ServiceUnavailable.AsInt(), dataPoint.HttpStatusCode);
+					Assert.True(dataPoint.ResponseTime < new TimeSpan(0, 0, 0, 0, 2000));
+					break;
+			}
+
+			// Clean up
+			_responseHandler.RemoveHandler(
+				new Uri("https://my.url.com")
+			);
+		}
+	}
+}
diff --git a/test/UnitTests/Services/ServiceManagerServiceTest.cs b/test/UnitTests/Services/ServiceManagerServiceTest.cs
new file mode 100644
index 0000000000000000000000000000000000000000..ba38c2fe1cbb70996d9b9fa39784e889b5406719
--- /dev/null
+++ b/test/UnitTests/Services/ServiceManagerServiceTest.cs
@@ -0,0 +1,336 @@
+using System;
+using Xunit;
+using StatusMonitor.Shared.Services;
+using Microsoft.Extensions.DependencyInjection;
+using System.Threading.Tasks;
+using System.Threading;
+using StatusMonitor.Daemons.Services;
+using Moq;
+using Microsoft.AspNetCore.Hosting;
+using Microsoft.Extensions.Configuration;
+using StatusMonitor.Shared.Extensions;
+using StatusMonitor.Shared.Models;
+using System.Collections.Generic;
+using System.Linq;
+using Microsoft.Extensions.Logging;
+using StatusMonitor.Shared.Models.Entities;
+using Microsoft.Extensions.Logging.Internal;
+
+namespace StatusMonitor.Tests.UnitTests.Services
+{
+	public class ServiceManagerServiceTest
+	{
+		private readonly Mock<IServiceProvider> _mockServiceProvider = new Mock<IServiceProvider>();
+
+		private readonly Mock<INotificationService> _mockNotificationService = new Mock<INotificationService>();
+		private readonly Mock<ICleanService> _mockCleanService = new Mock<ICleanService>();
+		private readonly Mock<ICacheService> _mockCacheService = new Mock<ICacheService>();
+		private readonly Mock<IPingService> _mockPingService = new Mock<IPingService>();
+		private readonly Mock<IDiscrepancyService> _mockDiscrepancyService = new Mock<IDiscrepancyService>();
+		private readonly Mock<IDemoService> _mockDemoService = new Mock<IDemoService>();
+
+		private readonly Mock<ILogger<ServiceManagerService>> _mockLog = new Mock<ILogger<ServiceManagerService>>();
+		private readonly Mock<IConfiguration> _config = new Mock<IConfiguration>();
+
+		private readonly List<Metric> _testMetrics = new List<Metric> {
+			new Metric {
+				Type = Metrics.CpuLoad.AsInt(),
+				Source = "the-source",
+				AutoLabel = new AutoLabel { Id = AutoLabels.Normal.AsInt() }
+			},
+			new Metric {
+				Type = Metrics.Ping.AsInt(),
+				Source = "the.url.com",
+				AutoLabel = new AutoLabel { Id = AutoLabels.Normal.AsInt() }
+			}
+		};
+
+		public ServiceManagerServiceTest()
+		{
+			// Arrange 
+
+			_mockCacheService
+				.Setup(cache => cache.CacheMetricAsync(It.IsAny<Metric>()))
+				.ReturnsAsync(_testMetrics[0]);
+
+			_mockPingService
+				.Setup(ping => ping.PingServerAsync(It.IsAny<PingSetting>()))
+				.ReturnsAsync(new PingDataPoint());
+
+			_mockServiceProvider
+				.Setup(provider => provider.GetService(typeof(IDataContext)))
+				.Returns(GenerateNewDataContext());
+			_mockServiceProvider
+				.Setup(provider => provider.GetService(typeof(INotificationService)))
+				.Returns(_mockNotificationService.Object);
+			_mockServiceProvider
+				.Setup(provider => provider.GetService(typeof(ICleanService)))
+				.Returns(_mockCleanService.Object);
+			_mockServiceProvider
+				.Setup(provider => provider.GetService(typeof(ICacheService)))
+				.Returns(_mockCacheService.Object);
+			_mockServiceProvider
+				.Setup(provider => provider.GetService(typeof(IPingService)))
+				.Returns(_mockPingService.Object);
+			_mockServiceProvider
+				.Setup(provider => provider.GetService(typeof(IDiscrepancyService)))
+				.Returns(_mockDiscrepancyService.Object);
+			_mockServiceProvider
+				.Setup(provider => provider.GetService(typeof(IDemoService)))
+				.Returns(_mockDemoService.Object);
+
+			var mockServiceScope = new Mock<IServiceScope>();
+			mockServiceScope
+				.SetupGet(scope => scope.ServiceProvider)
+				.Returns(_mockServiceProvider.Object);
+
+			var mockServiceScopeFactory = new Mock<IServiceScopeFactory>();
+			mockServiceScopeFactory
+				.Setup(factory => factory.CreateScope())
+				.Returns(mockServiceScope.Object);
+
+			_mockServiceProvider
+				.Setup(provider => provider.GetService(typeof(IServiceScopeFactory)))
+				.Returns(mockServiceScopeFactory.Object);
+
+
+			foreach (var service in Enum.GetValues(typeof(ServiceManagerServices)).Cast<ServiceManagerServices>())
+			{
+				_config
+					.SetupGet(conf => conf[$"ServiceManager:{service.ToString()}Service:Interval"])
+					.Returns(1.ToString());
+			}
+
+			_config
+				.SetupGet(conf => conf["ServiceManager:DemoService:Gaps:Enabled"])
+				.Returns(false.ToString());
+		}
+
+		[Fact]
+		public async Task StartsAndStopsServices()
+		{
+			// Arrange
+			EnableServices();
+
+			var serviceManagerService = new ServiceManagerService(
+				_mockLog.Object,
+				_mockServiceProvider.Object,
+				_config.Object
+			);
+
+			// Act
+			var task = serviceManagerService.StartServices();
+
+			// Let it gracefully start services
+			await Task.Delay(1000);
+
+			// Record status
+			var waitingForActivation = task.Status;
+
+			// Gracefully stop services
+			serviceManagerService.StopServices();
+
+			// Assert
+			
+			// Let it finish its job
+			// Check that services are stopped
+			// If not done in 30 seconds, consider timeout
+			Assert.Equal(await Task.WhenAny(task, Task.Delay(new TimeSpan(0, 0, 30))), task);
+
+			Assert.Equal(TaskStatus.WaitingForActivation, waitingForActivation);
+
+			_mockLog
+				.Verify(
+					log => log.Log(
+						LogLevel.Information,
+						It.IsAny<EventId>(),
+						It.Is<FormattedLogValues>(
+							v => v
+								.ToString()
+								.Contains(
+									"All services stopped",
+									StringComparison.OrdinalIgnoreCase
+								)
+						),
+						It.IsAny<Exception>(),
+						It.IsAny<Func<object, Exception, string>>()
+					)
+				);
+		}
+
+		[Theory(Skip = "Unstable test, needs investigation")]
+		[InlineData(ServiceManagerServices.Cache)]
+		[InlineData(ServiceManagerServices.Clean)]
+		[InlineData(ServiceManagerServices.Ping)]
+		[InlineData(ServiceManagerServices.Demo)]
+		[InlineData(ServiceManagerServices.Discrepancy)]
+		[InlineData(ServiceManagerServices.Notification)]
+		public async Task RunsOnlyIfEnabled(ServiceManagerServices service)
+		{
+			// Arrange
+			EnableServices(service);
+
+			var serviceManagerService = new ServiceManagerService(
+				_mockLog.Object,
+				_mockServiceProvider.Object,
+				_config.Object
+			);
+
+			// Act
+			var task = serviceManagerService.StartServices();
+			await Task.Delay(2000);
+			serviceManagerService.StopServices();
+
+			// Let it finish its job
+			// Check that services are stopped
+			// If not done in 30 seconds, consider timeout
+			Assert.Equal(await Task.WhenAny(task, Task.Delay(new TimeSpan(0, 0, 30))), task);
+
+			// Assert
+
+			// Cache
+			_mockCacheService.Verify(
+				cache => cache.CacheMetricAsync(It.IsAny<Metric>()),
+				service == ServiceManagerServices.Cache ? Times.AtLeastOnce() : Times.Never()
+			);
+
+			// Clean
+			_mockCleanService.Verify(
+				clean => clean.CleanDataPointsAsync(It.IsAny<TimeSpan?>()),
+				service == ServiceManagerServices.Clean ? Times.AtLeastOnce() : Times.Never()
+			);
+
+			// Demo
+			_mockDemoService.Verify(
+				demo => demo.GenerateDemoDataAsync(
+					It.IsAny<Metrics>(),
+					It.IsAny<string>(),
+					It.IsAny<DateTime?>()
+				),
+				service == ServiceManagerServices.Demo ? Times.AtLeastOnce() : Times.Never()
+			);
+			_mockDemoService.Verify(
+				demo => demo.GenerateDemoLogAsync(It.IsAny<string>()),
+				service == ServiceManagerServices.Demo ? Times.AtLeastOnce() : Times.Never()
+			);
+
+			// Discrepancy
+			_mockDiscrepancyService.Verify(
+				discrepancy => discrepancy.FindGapsAsync(
+					It.IsAny<Metric>(),
+					It.IsAny<TimeSpan>()
+				),
+				service == ServiceManagerServices.Discrepancy ? Times.AtLeastOnce() : Times.Never()
+			);
+			_mockDiscrepancyService.Verify(
+				discrepancy => discrepancy.FindPingFailuresAsync(
+					It.IsAny<Metric>(),
+					It.IsAny<TimeSpan>()
+				),
+				service == ServiceManagerServices.Discrepancy ? Times.AtLeastOnce() : Times.Never()
+			);
+			_mockDiscrepancyService.Verify(
+				discrepancy => discrepancy.RecordDiscrepanciesAsync(It.IsAny<IEnumerable<Discrepancy>>()),
+				service == ServiceManagerServices.Discrepancy ? Times.AtLeastOnce() : Times.Never()
+			);
+
+
+			// Notification
+			_mockNotificationService.Verify(
+				notif => notif.ProcessNotificationQueueAsync(),
+				service == ServiceManagerServices.Notification ? Times.AtLeastOnce() : Times.Never()
+			);
+
+			// Ping
+			_mockPingService.Verify(
+				ping => ping.PingServerAsync(It.IsAny<PingSetting>()),
+				service == ServiceManagerServices.Ping ? Times.AtLeastOnce() : Times.Never()
+			);
+
+			// Verify run until completion
+			_mockLog
+				.Verify(
+					log => log.Log(
+						LogLevel.Information,
+						It.IsAny<EventId>(),
+						It.Is<FormattedLogValues>(
+							v => v
+								.ToString()
+								.Contains(
+									$"{service.ToString()} service run complete",
+									StringComparison.OrdinalIgnoreCase
+								)
+						),
+						It.IsAny<Exception>(),
+						It.IsAny<Func<object, Exception, string>>()
+					)
+				);
+		}
+
+		/// <summary>
+		/// Sets up mock config to enable all or a particular service
+		/// </summary>
+		/// <param name="service">If given, only this service will be enabled</param>
+		private void EnableServices(ServiceManagerServices? service = null)
+		{
+			if (service.HasValue)
+			{
+				_config
+					.SetupGet(conf => conf[$"ServiceManager:{service.Value.ToString()}Service:Enabled"])
+					.Returns(true.ToString());
+
+				foreach (var toDisable in Enum.GetValues(typeof(ServiceManagerServices)).Cast<ServiceManagerServices>())
+				{
+					if (toDisable != service)
+					{
+						_config
+							.SetupGet(conf => conf[$"ServiceManager:{toDisable.ToString()}Service:Enabled"])
+							.Returns(false.ToString());
+					}
+				}
+			}
+			else
+			{
+				foreach (var toEnable in Enum.GetValues(typeof(ServiceManagerServices)).Cast<ServiceManagerServices>())
+				{
+					_config
+						.SetupGet(conf => conf[$"ServiceManager:{toEnable.ToString()}Service:Enabled"])
+						.Returns(true.ToString());
+				}
+			}
+		}
+
+		/// <summary>
+		/// Returns newly created IDataContext
+		/// </summary>
+		/// <returns>Newly created IDataContext</returns>
+		private IDataContext GenerateNewDataContext()
+		{
+			var services = new ServiceCollection();
+
+			var mockEnv = new Mock<IHostingEnvironment>();
+			mockEnv
+				.SetupGet(environment => environment.EnvironmentName)
+				.Returns("Testing");
+			var env = mockEnv.Object;
+
+			services.RegisterSharedServices(env, new Mock<IConfiguration>().Object);
+
+			var testProvider = services.BuildServiceProvider();
+
+			var context = testProvider.GetRequiredService<IDataContext>();
+			context.Metrics.AddRange(_testMetrics);
+			context.PingSettings.Add(
+				new PingSetting
+				{
+					ServerUrl = "the.url.com"
+				}
+			);
+			context.SaveChanges();
+
+			Thread.Sleep(200);
+
+			return context;
+		}
+	}
+}
diff --git a/test/UnitTests/Services/SlackServiceTest.cs b/test/UnitTests/Services/SlackServiceTest.cs
new file mode 100644
index 0000000000000000000000000000000000000000..4f034eab164cde6ce0cc26fab150ccfc28e1dfa5
--- /dev/null
+++ b/test/UnitTests/Services/SlackServiceTest.cs
@@ -0,0 +1,99 @@
+using System;
+using Xunit;
+using StatusMonitor.Shared.Models;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.EntityFrameworkCore;
+using System.Threading.Tasks;
+using StatusMonitor.Daemons.Services;
+using Moq;
+using Microsoft.AspNetCore.Hosting;
+using StatusMonitor.Shared.Extensions;
+using Microsoft.Extensions.Configuration;
+using System.Collections.Generic;
+using StatusMonitor.Shared.Models.Entities;
+using Microsoft.Extensions.Logging;
+using StatusMonitor.Shared.Services;
+using Microsoft.Extensions.Logging.Internal;
+using StatusMonitor.Shared.Services.Factories;
+using StatusMonitor.Tests.Mock;
+using System.Net.Http;
+
+namespace StatusMonitor.Tests.UnitTests.Services
+{
+	public class SlackServiceTest
+	{
+		[Fact]
+		public async Task LogsMessageIfSlackIsDisabled()
+		{
+			// Arrange
+			var message = "The message";
+
+			var config = new Mock<IConfiguration>();
+			config
+				.SetupGet(conf => conf["Secrets:Slack:Enabled"])
+				.Returns(false.ToString());
+
+			var logger = new Mock<ILogger<SlackService>>();
+
+			var slack = new SlackService(
+				logger.Object,
+				config.Object,
+				new Mock<IHttpClientFactory>().Object
+			);
+
+			// Act
+			await slack.SendMessageAsync(message);
+
+			// Assert
+			logger
+				.Verify(
+					log => log.Log(
+						LogLevel.Information,
+						It.IsAny<EventId>(),
+						It.Is<FormattedLogValues>(v => v.ToString().Contains(message)),
+						It.IsAny<Exception>(),
+						It.IsAny<Func<object, Exception, string>>()
+					)
+				);
+		}
+
+		[Fact]
+		public async Task TriggersSlackWebhook()
+		{
+			// Arrange
+			var requestMade = false;
+			var uri = new Uri("http://slack.api/web/hook");
+
+			var config = new Mock<IConfiguration>();
+			config
+				.SetupGet(conf => conf["Secrets:Slack:Enabled"])
+				.Returns(true.ToString());
+			config
+				.SetupGet(conf => conf["Secrets:Slack:WebHook"])
+				.Returns(uri.AbsoluteUri);
+			
+			var responseHandler = new ResponseHandler();
+			responseHandler.AddAction(uri, () => requestMade = true);
+			
+			var httpClientFactory = new Mock<IHttpClientFactory>();
+			httpClientFactory
+				.Setup(factory => factory.BuildClient())
+				.Returns(new HttpClient(responseHandler));
+
+			var slack = new SlackService(
+				new Mock<ILogger<SlackService>>().Object,
+				config.Object,
+				httpClientFactory.Object
+			);
+
+			// Act 
+			await slack.SendMessageAsync("The message");
+			
+			// Assert
+			Assert.True(requestMade);
+
+			// Clean up
+			responseHandler.RemoveAction(uri);
+		}
+	}
+}
diff --git a/test/test-dotnet.sh b/test/test-dotnet.sh
new file mode 100755
index 0000000000000000000000000000000000000000..3211a06409e24af894ad3e3baeb7396e38be1e24
--- /dev/null
+++ b/test/test-dotnet.sh
@@ -0,0 +1,26 @@
+#!/bin/bash
+
+PREV_ENV=$ASPNETCORE_ENVIRONMENT
+
+echo "Changing environment to testing..."
+export ASPNETCORE_ENVIRONMENT="Testing"
+
+echo "Copying the application settings..."
+cp ../src/appsettings*.json .
+
+if [ -n "$1" ]
+then
+	echo "Running test $1 ..."
+	dotnet test --filter "FullyQualifiedName~$1"
+else
+	echo "Running dotnet tests..."
+	dotnet test
+fi
+
+echo "Removing application settings..."
+rm appsettings*.json
+
+echo "Reverting environment..."
+export ASPNETCORE_ENVIRONMENT=$PREV_ENV
+
+echo "Testing completed!"
diff --git a/test/test.csproj b/test/test.csproj
new file mode 100644
index 0000000000000000000000000000000000000000..87571ebd3234e11e3687588e2dc9ac9772b35b4f
--- /dev/null
+++ b/test/test.csproj
@@ -0,0 +1,60 @@
+<Project ToolsVersion="15.0" Sdk="Microsoft.NET.Sdk">
+	<PropertyGroup>
+		<TargetFramework>netcoreapp1.1</TargetFramework>
+		<OutputType>Library</OutputType>
+		<PreserveCompilationContext>true</PreserveCompilationContext>
+	</PropertyGroup>
+	<ItemGroup>
+		<ProjectReference Include="../src/web/web.csproj">
+			<Name>web</Name>
+		</ProjectReference>
+		<ProjectReference Include="../src/daemons/daemons.csproj">
+			<Name>daemons</Name>
+		</ProjectReference>
+		<ProjectReference Include="../src/shared/shared.csproj">
+			<Name>shared</Name>
+		</ProjectReference>
+		<PackageReference Include="xunit" Version="2.2.0" />
+		<PackageReference Include="xunit.runner.visualstudio" Version="2.2.0" />
+		<PackageReference Include="Microsoft.TestPlatform.TestHost" Version="15.0.0" />
+		<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.0.0" />
+		<PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="1.1.0" />
+		<PackageReference Include="Npgsql" Version="3.1.9" />
+		<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="1.1.0" />
+		<PackageReference Include="Microsoft.EntityFrameworkCore" Version="1.1.0" />
+		<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL.Design" Version="1.1.0" />
+		<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="1.1.0" />
+		<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer.Design" Version="1.1.0" />
+		<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="1.1.0" />
+		<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite.Design" Version="1.1.0" />
+		<PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="1.1.0" />
+		<PackageReference Include="Microsoft.AspNetCore.Authentication.Cookies" Version="1.1.0" />
+		<PackageReference Include="Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore" Version="1.1.0" />
+		<PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="1.1.0" />
+		<PackageReference Include="Microsoft.AspNetCore.Mvc.TagHelpers" Version="1.1.0" />
+		<PackageReference Include="Microsoft.AspNetCore.Http.Abstractions" Version="1.1.0" />
+		<PackageReference Include="Microsoft.Extensions.Logging" Version="1.1.0" />
+		<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="1.1.0" />
+		<PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="1.1.0" />
+		<PackageReference Include="CommonMark.NET" Version="0.14.0" />
+		<PackageReference Include="Microsoft.AspNetCore.Diagnostics" Version="1.1.0" />
+		<PackageReference Include="Microsoft.AspNetCore.Mvc" Version="1.1.0" />
+		<PackageReference Include="Microsoft.AspNetCore.Razor.Tools" Version="1.1.0-preview4-final" />
+		<PackageReference Include="Microsoft.AspNetCore.Routing" Version="1.1.0" />
+		<PackageReference Include="Microsoft.AspNetCore.Server.IISIntegration" Version="1.1.0" />
+		<PackageReference Include="Microsoft.AspNetCore.Server.Kestrel" Version="1.1.0" />
+		<PackageReference Include="Microsoft.AspNetCore.StaticFiles" Version="1.1.0" />
+		<PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="1.1.0" />
+		<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="1.1.0" />
+		<PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="1.1.0" />
+		<PackageReference Include="Moq" Version="4.6.38-alpha" />
+		<PackageReference Include="Microsoft.AspNetCore.TestHost" Version="1.1.0" />
+		<PackageReference Include="Microsoft.AspNetCore.Cors" Version="1.1.0" />
+	</ItemGroup>
+	<ItemGroup>
+		<AppSettings Include="../src/appsettings*.json"/>
+	</ItemGroup>
+	<Target Name="CopyAppsettings" AfterTargets="Build">
+		<Copy SourceFiles="@(AppSettings)" DestinationFolder="$(OutputPath)" ContinueOnError="false" />
+	</Target>
+</Project>
diff --git a/typedoc.js b/typedoc.js
new file mode 100644
index 0000000000000000000000000000000000000000..c3f67006b8fb99f094fdafeac8627fb6123da349
--- /dev/null
+++ b/typedoc.js
@@ -0,0 +1,9 @@
+module.exports = {
+	out: "src/web/wwwroot/docs/client",
+	name: "Status Monitor",
+	externalPattern: "node_modules",
+	target: "ES6",
+	includeDeclarations: true,
+	excludeExternals: true,
+	ignoreCompilerErrors: true
+};
diff --git a/typings.json b/typings.json
new file mode 100644
index 0000000000000000000000000000000000000000..94952dfde40401fa4b6bd031499ff9b4062f5e93
--- /dev/null
+++ b/typings.json
@@ -0,0 +1,13 @@
+{
+	"resolution": {
+		"main": "client/typings"
+	},
+	"globalDependencies": {
+		"bootstrap-notify": "registry:dt/bootstrap-notify#3.1.3+20161119044246",
+		"bootstrap-select": "registry:dt/bootstrap-select#1.11.2+20161110161159",
+		"flot": "registry:dt/flot#0.0.0+20160510010627",
+		"jquery": "registry:dt/jquery#1.10.0+20170123093700",
+		"jquery.datatables": "registry:dt/jquery.datatables#1.10.9+20170207101311",
+		"jquery.timeago": "registry:dt/jquery.timeago#1.0.2+20161128184045"
+	}
+}
diff --git a/yarn.lock b/yarn.lock
new file mode 100644
index 0000000000000000000000000000000000000000..28dbf25fb53caf6d690a809d16cab2d3fca6612d
--- /dev/null
+++ b/yarn.lock
@@ -0,0 +1,4501 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
+"@types/fs-extra@0.0.33":
+  version "0.0.33"
+  resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-0.0.33.tgz#a8719c417b080c012d3497b28e228ac09745fdf2"
+  dependencies:
+    "@types/node" "*"
+
+"@types/handlebars@^4.0.31":
+  version "4.0.31"
+  resolved "https://registry.yarnpkg.com/@types/handlebars/-/handlebars-4.0.31.tgz#a7fba66fafe42713aee88eeca8db91192efe6e72"
+
+"@types/highlight.js@^9.1.8":
+  version "9.1.9"
+  resolved "https://registry.yarnpkg.com/@types/highlight.js/-/highlight.js-9.1.9.tgz#ed6336955eaf233b75eb7923b9b1f373d045ef01"
+
+"@types/lodash@^4.14.37":
+  version "4.14.53"
+  resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.53.tgz#c81ee7f2a551f92fb8692a2f6766d0430ccce9eb"
+
+"@types/marked@0.0.28":
+  version "0.0.28"
+  resolved "https://registry.yarnpkg.com/@types/marked/-/marked-0.0.28.tgz#44ba754e9fa51432583e8eb30a7c4dd249b52faa"
+
+"@types/minimatch@^2.0.29":
+  version "2.0.29"
+  resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-2.0.29.tgz#5002e14f75e2d71e564281df0431c8c1b4a2a36a"
+
+"@types/node@*":
+  version "7.0.5"
+  resolved "https://registry.yarnpkg.com/@types/node/-/node-7.0.5.tgz#96a0f0a618b7b606f1ec547403c00650210bfbb7"
+
+"@types/shelljs@^0.3.32":
+  version "0.3.33"
+  resolved "https://registry.yarnpkg.com/@types/shelljs/-/shelljs-0.3.33.tgz#df613bddb88225ed09ce5c835f620dcaaf155e6b"
+  dependencies:
+    "@types/node" "*"
+
+abbrev@1:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.0.tgz#d0554c2256636e2f56e7c2e5ad183f859428d81f"
+
+accepts@~1.3.3:
+  version "1.3.3"
+  resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.3.tgz#c3ca7434938648c3e0d9c1e328dd68b622c284ca"
+  dependencies:
+    mime-types "~2.1.11"
+    negotiator "0.6.1"
+
+acorn-dynamic-import@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-2.0.1.tgz#23f671eb6e650dab277fef477c321b1178a8cca2"
+  dependencies:
+    acorn "^4.0.3"
+
+acorn@^4.0.3, acorn@^4.0.4:
+  version "4.0.11"
+  resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.11.tgz#edcda3bd937e7556410d42ed5860f67399c794c0"
+
+agent-base@2:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-2.0.1.tgz#bd8f9e86a8eb221fffa07bd14befd55df142815e"
+  dependencies:
+    extend "~3.0.0"
+    semver "~5.0.1"
+
+ajv-keywords@^1.1.1:
+  version "1.5.1"
+  resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.5.1.tgz#314dd0a4b3368fad3dfcdc54ede6171b886daf3c"
+
+ajv@^4.11.2, ajv@^4.7.0:
+  version "4.11.3"
+  resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.3.tgz#ce30bdb90d1254f762c75af915fb3a63e7183d22"
+  dependencies:
+    co "^4.6.0"
+    json-stable-stringify "^1.0.1"
+
+alce@^1.0.0:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/alce/-/alce-1.2.0.tgz#a8be2dacaac42494612f18dc09db691f3dea4aab"
+  dependencies:
+    esprima "^1.2.0"
+    estraverse "^1.5.0"
+
+align-text@^0.1.1, align-text@^0.1.3:
+  version "0.1.4"
+  resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117"
+  dependencies:
+    kind-of "^3.0.2"
+    longest "^1.0.1"
+    repeat-string "^1.5.2"
+
+alphanum-sort@^1.0.1, alphanum-sort@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3"
+
+amdefine@>=0.0.4:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5"
+
+ansi-align@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-1.1.0.tgz#2f0c1658829739add5ebb15e6b0c6e3423f016ba"
+  dependencies:
+    string-width "^1.0.1"
+
+ansi-escapes@^1.0.0:
+  version "1.4.0"
+  resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e"
+
+ansi-regex@^0.2.0, ansi-regex@^0.2.1:
+  version "0.2.1"
+  resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-0.2.1.tgz#0d8e946967a3d8143f93e24e298525fc1b2235f9"
+
+ansi-regex@^2.0.0:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
+
+ansi-styles@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-1.1.0.tgz#eaecbf66cd706882760b2f4691582b8f55d7a7de"
+
+ansi-styles@^2.2.1:
+  version "2.2.1"
+  resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
+
+any-promise@^1.0.0, any-promise@^1.1.0, any-promise@^1.3.0:
+  version "1.3.0"
+  resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f"
+
+anymatch@^1.3.0:
+  version "1.3.0"
+  resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.0.tgz#a3e52fa39168c825ff57b0248126ce5a8ff95507"
+  dependencies:
+    arrify "^1.0.0"
+    micromatch "^2.1.5"
+
+aproba@^1.0.3:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.1.1.tgz#95d3600f07710aa0e9298c726ad5ecf2eacbabab"
+
+archy@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40"
+
+are-we-there-yet@~1.1.2:
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.2.tgz#80e470e95a084794fe1899262c5667c6e88de1b3"
+  dependencies:
+    delegates "^1.0.0"
+    readable-stream "^2.0.0 || ^1.1.13"
+
+argparse@^1.0.7:
+  version "1.0.9"
+  resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86"
+  dependencies:
+    sprintf-js "~1.0.2"
+
+"argparse@~ 0.1.11":
+  version "0.1.16"
+  resolved "https://registry.yarnpkg.com/argparse/-/argparse-0.1.16.tgz#cfd01e0fbba3d6caed049fbd758d40f65196f57c"
+  dependencies:
+    underscore "~1.7.0"
+    underscore.string "~2.4.0"
+
+arr-diff@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf"
+  dependencies:
+    arr-flatten "^1.0.1"
+
+arr-flatten@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.0.1.tgz#e5ffe54d45e19f32f216e91eb99c8ce892bb604b"
+
+array-differ@^0.1.0:
+  version "0.1.0"
+  resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-0.1.0.tgz#12e2c9b706bed47c8b483b57e487473fb0861f3a"
+
+array-find-index@^1.0.1:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1"
+
+array-union@^0.1.0:
+  version "0.1.0"
+  resolved "https://registry.yarnpkg.com/array-union/-/array-union-0.1.0.tgz#ede98088330665e699e1ebf0227cbc6034e627db"
+  dependencies:
+    array-uniq "^0.1.0"
+
+array-uniq@^0.1.0:
+  version "0.1.1"
+  resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-0.1.1.tgz#5861f3ed4e4bb6175597a4e078e8aa78ebe958c7"
+
+array-uniq@^1.0.2:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6"
+
+array-unique@^0.2.1:
+  version "0.2.1"
+  resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53"
+
+arrify@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
+
+asap@~2.0.3:
+  version "2.0.5"
+  resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.5.tgz#522765b50c3510490e52d7dcfe085ef9ba96958f"
+
+asn1.js@^4.0.0:
+  version "4.9.1"
+  resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.9.1.tgz#48ba240b45a9280e94748990ba597d216617fd40"
+  dependencies:
+    bn.js "^4.0.0"
+    inherits "^2.0.1"
+    minimalistic-assert "^1.0.0"
+
+asn1@~0.2.3:
+  version "0.2.3"
+  resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86"
+
+assert-plus@^0.2.0:
+  version "0.2.0"
+  resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234"
+
+assert-plus@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
+
+assert@^1.1.1:
+  version "1.4.1"
+  resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91"
+  dependencies:
+    util "0.10.3"
+
+async-each@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d"
+
+async-foreach@^0.1.3:
+  version "0.1.3"
+  resolved "https://registry.yarnpkg.com/async-foreach/-/async-foreach-0.1.3.tgz#36121f845c0578172de419a97dbeb1d16ec34542"
+
+async@1.5.2, async@^1.4.0:
+  version "1.5.2"
+  resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a"
+
+async@^0.9.0, async@~0.9.0:
+  version "0.9.2"
+  resolved "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d"
+
+async@^2.1.2:
+  version "2.1.5"
+  resolved "https://registry.yarnpkg.com/async/-/async-2.1.5.tgz#e587c68580994ac67fc56ff86d3ac56bdbe810bc"
+  dependencies:
+    lodash "^4.14.0"
+
+async@~0.1.22:
+  version "0.1.22"
+  resolved "https://registry.yarnpkg.com/async/-/async-0.1.22.tgz#0fc1aaa088a0e3ef0ebe2d8831bab0dcf8845061"
+
+async@~0.2.6, async@~0.2.9:
+  version "0.2.10"
+  resolved "https://registry.yarnpkg.com/async/-/async-0.2.10.tgz#b6bbe0b0674b9d719708ca38de8c237cb526c3d1"
+
+asynckit@^0.4.0:
+  version "0.4.0"
+  resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
+
+autoprefixer@^6.3.1:
+  version "6.7.5"
+  resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-6.7.5.tgz#50848f39dc08730091d9495023487e7cc21f518d"
+  dependencies:
+    browserslist "^1.7.5"
+    caniuse-db "^1.0.30000624"
+    normalize-range "^0.1.2"
+    num2fraction "^1.2.2"
+    postcss "^5.2.15"
+    postcss-value-parser "^3.2.3"
+
+aws-sign2@~0.6.0:
+  version "0.6.0"
+  resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f"
+
+aws4@^1.2.1:
+  version "1.6.0"
+  resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e"
+
+babel-code-frame@^6.11.0:
+  version "6.22.0"
+  resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.22.0.tgz#027620bee567a88c32561574e7fd0801d33118e4"
+  dependencies:
+    chalk "^1.1.0"
+    esutils "^2.0.2"
+    js-tokens "^3.0.0"
+
+balanced-match@^0.4.1, balanced-match@^0.4.2:
+  version "0.4.2"
+  resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838"
+
+base64-js@^1.0.2:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.0.tgz#a39992d723584811982be5e290bb6a53d86700f1"
+
+basic-auth@~1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/basic-auth/-/basic-auth-1.1.0.tgz#45221ee429f7ee1e5035be3f51533f1cdfd29884"
+
+batch@0.5.3:
+  version "0.5.3"
+  resolved "https://registry.yarnpkg.com/batch/-/batch-0.5.3.tgz#3f3414f380321743bfc1042f9a83ff1d5824d464"
+
+bcrypt-pbkdf@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d"
+  dependencies:
+    tweetnacl "^0.14.3"
+
+big.js@^3.1.3:
+  version "3.1.3"
+  resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.1.3.tgz#4cada2193652eb3ca9ec8e55c9015669c9806978"
+
+binary-extensions@^1.0.0:
+  version "1.8.0"
+  resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.8.0.tgz#48ec8d16df4377eae5fa5884682480af4d95c774"
+
+block-stream@*:
+  version "0.0.9"
+  resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a"
+  dependencies:
+    inherits "~2.0.0"
+
+bluebird@^3.1.1, bluebird@^3.4.7:
+  version "3.4.7"
+  resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.4.7.tgz#f72d760be09b7f76d08ed8fae98b289a8d05fab3"
+
+bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0:
+  version "4.11.6"
+  resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.6.tgz#53344adb14617a13f6e8dd2ce28905d1c0ba3215"
+
+boolbase@~1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e"
+
+boom@2.x.x:
+  version "2.10.1"
+  resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f"
+  dependencies:
+    hoek "2.x.x"
+
+boxen@^0.6.0:
+  version "0.6.0"
+  resolved "https://registry.yarnpkg.com/boxen/-/boxen-0.6.0.tgz#8364d4248ac34ff0ef1b2f2bf49a6c60ce0d81b6"
+  dependencies:
+    ansi-align "^1.1.0"
+    camelcase "^2.1.0"
+    chalk "^1.1.1"
+    cli-boxes "^1.0.0"
+    filled-array "^1.0.0"
+    object-assign "^4.0.1"
+    repeating "^2.0.0"
+    string-width "^1.0.1"
+    widest-line "^1.0.0"
+
+brace-expansion@^1.0.0:
+  version "1.1.6"
+  resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.6.tgz#7197d7eaa9b87e648390ea61fc66c84427420df9"
+  dependencies:
+    balanced-match "^0.4.1"
+    concat-map "0.0.1"
+
+braces@^1.8.2:
+  version "1.8.5"
+  resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7"
+  dependencies:
+    expand-range "^1.8.1"
+    preserve "^0.2.0"
+    repeat-element "^1.1.2"
+
+brorand@^1.0.1:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f"
+
+browserify-aes@^1.0.0, browserify-aes@^1.0.4:
+  version "1.0.6"
+  resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.0.6.tgz#5e7725dbdef1fd5930d4ebab48567ce451c48a0a"
+  dependencies:
+    buffer-xor "^1.0.2"
+    cipher-base "^1.0.0"
+    create-hash "^1.1.0"
+    evp_bytestokey "^1.0.0"
+    inherits "^2.0.1"
+
+browserify-cipher@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.0.tgz#9988244874bf5ed4e28da95666dcd66ac8fc363a"
+  dependencies:
+    browserify-aes "^1.0.4"
+    browserify-des "^1.0.0"
+    evp_bytestokey "^1.0.0"
+
+browserify-des@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.0.tgz#daa277717470922ed2fe18594118a175439721dd"
+  dependencies:
+    cipher-base "^1.0.1"
+    des.js "^1.0.0"
+    inherits "^2.0.1"
+
+browserify-rsa@^4.0.0:
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524"
+  dependencies:
+    bn.js "^4.1.0"
+    randombytes "^2.0.1"
+
+browserify-sign@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.0.tgz#10773910c3c206d5420a46aad8694f820b85968f"
+  dependencies:
+    bn.js "^4.1.1"
+    browserify-rsa "^4.0.0"
+    create-hash "^1.1.0"
+    create-hmac "^1.1.2"
+    elliptic "^6.0.0"
+    inherits "^2.0.1"
+    parse-asn1 "^5.0.0"
+
+browserify-zlib@^0.1.4:
+  version "0.1.4"
+  resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.1.4.tgz#bb35f8a519f600e0fa6b8485241c979d0141fb2d"
+  dependencies:
+    pako "~0.2.0"
+
+browserslist@^1.0.1, browserslist@^1.5.2, browserslist@^1.7.5:
+  version "1.7.5"
+  resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-1.7.5.tgz#eca4713897b51e444283241facf3985de49a9e2b"
+  dependencies:
+    caniuse-db "^1.0.30000624"
+    electron-to-chromium "^1.2.3"
+
+buffer-shims@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51"
+
+buffer-xor@^1.0.2:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9"
+
+buffer@^4.3.0:
+  version "4.9.1"
+  resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298"
+  dependencies:
+    base64-js "^1.0.2"
+    ieee754 "^1.1.4"
+    isarray "^1.0.0"
+
+builtin-modules@^1.0.0:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f"
+
+builtin-status-codes@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8"
+
+camelcase-keys@^2.0.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7"
+  dependencies:
+    camelcase "^2.0.0"
+    map-obj "^1.0.0"
+
+camelcase@^1.0.2:
+  version "1.2.1"
+  resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39"
+
+camelcase@^2.0.0, camelcase@^2.1.0:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f"
+
+camelcase@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a"
+
+caniuse-api@^1.5.2:
+  version "1.5.3"
+  resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-1.5.3.tgz#5018e674b51c393e4d50614275dc017e27c4a2a2"
+  dependencies:
+    browserslist "^1.0.1"
+    caniuse-db "^1.0.30000346"
+    lodash.memoize "^4.1.0"
+    lodash.uniq "^4.3.0"
+
+caniuse-db@^1.0.30000346, caniuse-db@^1.0.30000624:
+  version "1.0.30000628"
+  resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000628.tgz#3d010e2a8e2537a8d135792e90e4f2ce0eb838cc"
+
+capture-stack-trace@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz#4a6fa07399c26bba47f0b2496b4d0fb408c5550d"
+
+caseless@~0.11.0:
+  version "0.11.0"
+  resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.11.0.tgz#715b96ea9841593cc33067923f5ec60ebda4f7d7"
+
+center-align@^0.1.1:
+  version "0.1.3"
+  resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad"
+  dependencies:
+    align-text "^0.1.3"
+    lazy-cache "^1.0.3"
+
+chalk@^0.5.1:
+  version "0.5.1"
+  resolved "https://registry.yarnpkg.com/chalk/-/chalk-0.5.1.tgz#663b3a648b68b55d04690d49167aa837858f2174"
+  dependencies:
+    ansi-styles "^1.1.0"
+    escape-string-regexp "^1.0.0"
+    has-ansi "^0.1.0"
+    strip-ansi "^0.3.0"
+    supports-color "^0.2.0"
+
+chalk@^1.0.0, chalk@^1.1.0, chalk@^1.1.1, chalk@^1.1.3:
+  version "1.1.3"
+  resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
+  dependencies:
+    ansi-styles "^2.2.1"
+    escape-string-regexp "^1.0.2"
+    has-ansi "^2.0.0"
+    strip-ansi "^3.0.0"
+    supports-color "^2.0.0"
+
+cheerio@^0.19.0:
+  version "0.19.0"
+  resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-0.19.0.tgz#772e7015f2ee29965096d71ea4175b75ab354925"
+  dependencies:
+    css-select "~1.0.0"
+    dom-serializer "~0.1.0"
+    entities "~1.1.1"
+    htmlparser2 "~3.8.1"
+    lodash "^3.2.0"
+
+chokidar@^1.4.3:
+  version "1.6.1"
+  resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.6.1.tgz#2f4447ab5e96e50fb3d789fd90d4c72e0e4c70c2"
+  dependencies:
+    anymatch "^1.3.0"
+    async-each "^1.0.0"
+    glob-parent "^2.0.0"
+    inherits "^2.0.1"
+    is-binary-path "^1.0.0"
+    is-glob "^2.0.0"
+    path-is-absolute "^1.0.0"
+    readdirp "^2.0.0"
+  optionalDependencies:
+    fsevents "^1.0.0"
+
+cipher-base@^1.0.0, cipher-base@^1.0.1:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.3.tgz#eeabf194419ce900da3018c207d212f2a6df0a07"
+  dependencies:
+    inherits "^2.0.1"
+
+clap@^1.0.9:
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/clap/-/clap-1.1.2.tgz#316545bf22229225a2cecaa6824cd2f56a9709ed"
+  dependencies:
+    chalk "^1.1.3"
+
+clarify@^1.0.5:
+  version "1.0.5"
+  resolved "https://registry.yarnpkg.com/clarify/-/clarify-1.0.5.tgz#3ac7b2341a21615e8fca6e28301fcf9598c61466"
+  dependencies:
+    stack-chain "1.3.x"
+
+clean-css@~3.4.2:
+  version "3.4.25"
+  resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-3.4.25.tgz#9e9a52d5c1e6bc5123e1b2783fa65fe958946ede"
+  dependencies:
+    commander "2.8.x"
+    source-map "0.4.x"
+
+cli-boxes@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143"
+
+cli-cursor@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987"
+  dependencies:
+    restore-cursor "^1.0.1"
+
+cli-truncate@^0.2.1:
+  version "0.2.1"
+  resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-0.2.1.tgz#9f15cfbb0705005369216c626ac7d05ab90dd574"
+  dependencies:
+    slice-ansi "0.0.4"
+    string-width "^1.0.1"
+
+cliui@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1"
+  dependencies:
+    center-align "^0.1.1"
+    right-align "^0.1.1"
+    wordwrap "0.0.2"
+
+cliui@^3.2.0:
+  version "3.2.0"
+  resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d"
+  dependencies:
+    string-width "^1.0.1"
+    strip-ansi "^3.0.1"
+    wrap-ansi "^2.0.0"
+
+clone@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.2.tgz#260b7a99ebb1edfe247538175f783243cb19d149"
+
+co@^4.6.0:
+  version "4.6.0"
+  resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
+
+coa@~1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/coa/-/coa-1.0.1.tgz#7f959346cfc8719e3f7233cd6852854a7c67d8a3"
+  dependencies:
+    q "^1.1.2"
+
+code-point-at@^1.0.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
+
+coffee-script@~1.3.3:
+  version "1.3.3"
+  resolved "https://registry.yarnpkg.com/coffee-script/-/coffee-script-1.3.3.tgz#150d6b4cb522894369efed6a2101c20bc7f4a4f4"
+
+color-convert@^1.3.0:
+  version "1.9.0"
+  resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.0.tgz#1accf97dd739b983bf994d56fec8f95853641b7a"
+  dependencies:
+    color-name "^1.1.1"
+
+color-name@^1.0.0, color-name@^1.1.1:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.1.tgz#4b1415304cf50028ea81643643bd82ea05803689"
+
+color-string@^0.3.0:
+  version "0.3.0"
+  resolved "https://registry.yarnpkg.com/color-string/-/color-string-0.3.0.tgz#27d46fb67025c5c2fa25993bfbf579e47841b991"
+  dependencies:
+    color-name "^1.0.0"
+
+color@^0.11.0:
+  version "0.11.4"
+  resolved "https://registry.yarnpkg.com/color/-/color-0.11.4.tgz#6d7b5c74fb65e841cd48792ad1ed5e07b904d764"
+  dependencies:
+    clone "^1.0.2"
+    color-convert "^1.3.0"
+    color-string "^0.3.0"
+
+colormin@^1.0.5:
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/colormin/-/colormin-1.1.2.tgz#ea2f7420a72b96881a38aae59ec124a6f7298133"
+  dependencies:
+    color "^0.11.0"
+    css-color-names "0.0.4"
+    has "^1.0.1"
+
+colors@~0.6.2:
+  version "0.6.2"
+  resolved "https://registry.yarnpkg.com/colors/-/colors-0.6.2.tgz#2423fe6678ac0c5dae8852e5d0e5be08c997abcc"
+
+colors@~1.1.2:
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63"
+
+columnify@^1.5.2:
+  version "1.5.4"
+  resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.5.4.tgz#4737ddf1c7b69a8a7c340570782e947eec8e78bb"
+  dependencies:
+    strip-ansi "^3.0.0"
+    wcwidth "^1.0.0"
+
+combined-stream@^1.0.5, combined-stream@~1.0.5:
+  version "1.0.5"
+  resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009"
+  dependencies:
+    delayed-stream "~1.0.0"
+
+commander@*, commander@^2.9.0:
+  version "2.9.0"
+  resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4"
+  dependencies:
+    graceful-readlink ">= 1.0.0"
+
+commander@2.8.x:
+  version "2.8.1"
+  resolved "https://registry.yarnpkg.com/commander/-/commander-2.8.1.tgz#06be367febfda0c330aa1e2a072d3dc9762425d4"
+  dependencies:
+    graceful-readlink ">= 1.0.0"
+
+concat-map@0.0.1:
+  version "0.0.1"
+  resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
+
+concat-stream@^1.4.1, concat-stream@^1.4.7:
+  version "1.6.0"
+  resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7"
+  dependencies:
+    inherits "^2.0.3"
+    readable-stream "^2.2.2"
+    typedarray "^0.0.6"
+
+config-chain@~1.1.5:
+  version "1.1.11"
+  resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.11.tgz#aba09747dfbe4c3e70e766a6e41586e1859fc6f2"
+  dependencies:
+    ini "^1.3.4"
+    proto-list "~1.2.1"
+
+configstore@^2.0.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/configstore/-/configstore-2.1.0.tgz#737a3a7036e9886102aa6099e47bb33ab1aba1a1"
+  dependencies:
+    dot-prop "^3.0.0"
+    graceful-fs "^4.1.2"
+    mkdirp "^0.5.0"
+    object-assign "^4.0.1"
+    os-tmpdir "^1.0.0"
+    osenv "^0.1.0"
+    uuid "^2.0.1"
+    write-file-atomic "^1.1.2"
+    xdg-basedir "^2.0.0"
+
+configstore@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/configstore/-/configstore-3.0.0.tgz#e1b8669c1803ccc50b545e92f8e6e79aa80e0196"
+  dependencies:
+    dot-prop "^4.1.0"
+    graceful-fs "^4.1.2"
+    mkdirp "^0.5.0"
+    unique-string "^1.0.0"
+    write-file-atomic "^1.1.2"
+    xdg-basedir "^3.0.0"
+
+connect-livereload@^0.5.0:
+  version "0.5.4"
+  resolved "https://registry.yarnpkg.com/connect-livereload/-/connect-livereload-0.5.4.tgz#80157d1371c9f37cc14039ab1895970d119dc3bc"
+
+connect@^3.4.0:
+  version "3.6.0"
+  resolved "https://registry.yarnpkg.com/connect/-/connect-3.6.0.tgz#f09a4f7dcd17324b663b725c815bdb1c4158a46e"
+  dependencies:
+    debug "2.6.1"
+    finalhandler "1.0.0"
+    parseurl "~1.3.1"
+    utils-merge "1.0.0"
+
+console-browserify@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10"
+  dependencies:
+    date-now "^0.1.4"
+
+console-control-strings@^1.0.0, console-control-strings@~1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
+
+constants-browserify@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75"
+
+core-util-is@~1.0.0:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
+
+create-ecdh@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.0.tgz#888c723596cdf7612f6498233eebd7a35301737d"
+  dependencies:
+    bn.js "^4.1.0"
+    elliptic "^6.0.0"
+
+create-error-class@^3.0.1:
+  version "3.0.2"
+  resolved "https://registry.yarnpkg.com/create-error-class/-/create-error-class-3.0.2.tgz#06be7abef947a3f14a30fd610671d401bca8b7b6"
+  dependencies:
+    capture-stack-trace "^1.0.0"
+
+create-hash@^1.1.0, create-hash@^1.1.1:
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.1.2.tgz#51210062d7bb7479f6c65bb41a92208b1d61abad"
+  dependencies:
+    cipher-base "^1.0.1"
+    inherits "^2.0.1"
+    ripemd160 "^1.0.0"
+    sha.js "^2.3.6"
+
+create-hmac@^1.1.0, create-hmac@^1.1.2:
+  version "1.1.4"
+  resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.4.tgz#d3fb4ba253eb8b3f56e39ea2fbcb8af747bd3170"
+  dependencies:
+    create-hash "^1.1.0"
+    inherits "^2.0.1"
+
+cross-spawn@^3.0.0:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-3.0.1.tgz#1256037ecb9f0c5f79e3d6ef135e30770184b982"
+  dependencies:
+    lru-cache "^4.0.1"
+    which "^1.2.9"
+
+cryptiles@2.x.x:
+  version "2.0.5"
+  resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8"
+  dependencies:
+    boom "2.x.x"
+
+crypto-browserify@^3.11.0:
+  version "3.11.0"
+  resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.11.0.tgz#3652a0906ab9b2a7e0c3ce66a408e957a2485522"
+  dependencies:
+    browserify-cipher "^1.0.0"
+    browserify-sign "^4.0.0"
+    create-ecdh "^4.0.0"
+    create-hash "^1.1.0"
+    create-hmac "^1.1.0"
+    diffie-hellman "^5.0.0"
+    inherits "^2.0.1"
+    pbkdf2 "^3.0.3"
+    public-encrypt "^4.0.0"
+    randombytes "^2.0.0"
+
+crypto-random-string@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e"
+
+css-color-names@0.0.4:
+  version "0.0.4"
+  resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0"
+
+css-loader@^0.26.1:
+  version "0.26.2"
+  resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-0.26.2.tgz#a9cd4c2b1a559b45d8efc04fc311ab5d2aaccb9d"
+  dependencies:
+    babel-code-frame "^6.11.0"
+    css-selector-tokenizer "^0.7.0"
+    cssnano ">=2.6.1 <4"
+    loader-utils "^1.0.2"
+    lodash.camelcase "^4.3.0"
+    object-assign "^4.0.1"
+    postcss "^5.0.6"
+    postcss-modules-extract-imports "^1.0.0"
+    postcss-modules-local-by-default "^1.0.1"
+    postcss-modules-scope "^1.0.0"
+    postcss-modules-values "^1.1.0"
+    source-list-map "^0.1.7"
+
+css-select@~1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.0.0.tgz#b1121ca51848dd264e2244d058cee254deeb44b0"
+  dependencies:
+    boolbase "~1.0.0"
+    css-what "1.0"
+    domutils "1.4"
+    nth-check "~1.0.0"
+
+css-selector-tokenizer@^0.6.0:
+  version "0.6.0"
+  resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.6.0.tgz#6445f582c7930d241dcc5007a43d6fcb8f073152"
+  dependencies:
+    cssesc "^0.1.0"
+    fastparse "^1.1.1"
+    regexpu-core "^1.0.0"
+
+css-selector-tokenizer@^0.7.0:
+  version "0.7.0"
+  resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.7.0.tgz#e6988474ae8c953477bf5e7efecfceccd9cf4c86"
+  dependencies:
+    cssesc "^0.1.0"
+    fastparse "^1.1.1"
+    regexpu-core "^1.0.0"
+
+css-what@1.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/css-what/-/css-what-1.0.0.tgz#d7cc2df45180666f99d2b14462639469e00f736c"
+
+cssesc@^0.1.0:
+  version "0.1.0"
+  resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-0.1.0.tgz#c814903e45623371a0477b40109aaafbeeaddbb4"
+
+"cssnano@>=2.6.1 <4", cssnano@^3.4.0:
+  version "3.10.0"
+  resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-3.10.0.tgz#4f38f6cea2b9b17fa01490f23f1dc68ea65c1c38"
+  dependencies:
+    autoprefixer "^6.3.1"
+    decamelize "^1.1.2"
+    defined "^1.0.0"
+    has "^1.0.1"
+    object-assign "^4.0.1"
+    postcss "^5.0.14"
+    postcss-calc "^5.2.0"
+    postcss-colormin "^2.1.8"
+    postcss-convert-values "^2.3.4"
+    postcss-discard-comments "^2.0.4"
+    postcss-discard-duplicates "^2.0.1"
+    postcss-discard-empty "^2.0.1"
+    postcss-discard-overridden "^0.1.1"
+    postcss-discard-unused "^2.2.1"
+    postcss-filter-plugins "^2.0.0"
+    postcss-merge-idents "^2.1.5"
+    postcss-merge-longhand "^2.0.1"
+    postcss-merge-rules "^2.0.3"
+    postcss-minify-font-values "^1.0.2"
+    postcss-minify-gradients "^1.0.1"
+    postcss-minify-params "^1.0.4"
+    postcss-minify-selectors "^2.0.4"
+    postcss-normalize-charset "^1.1.0"
+    postcss-normalize-url "^3.0.7"
+    postcss-ordered-values "^2.1.0"
+    postcss-reduce-idents "^2.2.2"
+    postcss-reduce-initial "^1.0.0"
+    postcss-reduce-transforms "^1.0.3"
+    postcss-svgo "^2.1.1"
+    postcss-unique-selectors "^2.0.2"
+    postcss-value-parser "^3.2.3"
+    postcss-zindex "^2.0.1"
+
+csso@~2.3.1:
+  version "2.3.1"
+  resolved "https://registry.yarnpkg.com/csso/-/csso-2.3.1.tgz#4f8d91a156f2f1c2aebb40b8fb1b5eb83d94d3b9"
+  dependencies:
+    clap "^1.0.9"
+    source-map "^0.5.3"
+
+currently-unhandled@^0.4.1:
+  version "0.4.1"
+  resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea"
+  dependencies:
+    array-find-index "^1.0.1"
+
+dashdash@^1.12.0:
+  version "1.14.1"
+  resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
+  dependencies:
+    assert-plus "^1.0.0"
+
+date-now@^0.1.4:
+  version "0.1.4"
+  resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b"
+
+dateformat@1.0.2-1.2.3:
+  version "1.0.2-1.2.3"
+  resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-1.0.2-1.2.3.tgz#b0220c02de98617433b72851cf47de3df2cdbee9"
+
+debug@2, debug@2.6.1, debug@^2.2.0:
+  version "2.6.1"
+  resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.1.tgz#79855090ba2c4e3115cc7d8769491d58f0491351"
+  dependencies:
+    ms "0.7.2"
+
+debug@~0.7.0:
+  version "0.7.4"
+  resolved "https://registry.yarnpkg.com/debug/-/debug-0.7.4.tgz#06e1ea8082c2cb14e39806e22e2f6f757f92af39"
+
+debug@~2.2.0:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da"
+  dependencies:
+    ms "0.7.1"
+
+decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
+
+deep-extend@~0.4.0:
+  version "0.4.1"
+  resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.1.tgz#efe4113d08085f4e6f9687759810f807469e2253"
+
+defaults@^1.0.3:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d"
+  dependencies:
+    clone "^1.0.2"
+
+defined@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693"
+
+delayed-stream@~1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
+
+delegates@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
+
+depd@1.1.0, depd@~1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.0.tgz#e1bd82c6aab6ced965b97b88b17ed3e528ca18c3"
+
+des.js@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc"
+  dependencies:
+    inherits "^2.0.1"
+    minimalistic-assert "^1.0.0"
+
+destroy@~1.0.4:
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80"
+
+detect-indent@^5.0.0:
+  version "5.0.0"
+  resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d"
+
+diffie-hellman@^5.0.0:
+  version "5.0.2"
+  resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.2.tgz#b5835739270cfe26acf632099fded2a07f209e5e"
+  dependencies:
+    bn.js "^4.1.0"
+    miller-rabin "^4.0.0"
+    randombytes "^2.0.0"
+
+dom-serializer@0, dom-serializer@~0.1.0:
+  version "0.1.0"
+  resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82"
+  dependencies:
+    domelementtype "~1.1.1"
+    entities "~1.1.1"
+
+domain-browser@^1.1.1:
+  version "1.1.7"
+  resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.1.7.tgz#867aa4b093faa05f1de08c06f4d7b21fdf8698bc"
+
+domelementtype@1, domelementtype@~1.1.1:
+  version "1.1.3"
+  resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b"
+
+domhandler@2.3:
+  version "2.3.0"
+  resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.3.0.tgz#2de59a0822d5027fabff6f032c2b25a2a8abe738"
+  dependencies:
+    domelementtype "1"
+
+domutils@1.4:
+  version "1.4.3"
+  resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.4.3.tgz#0865513796c6b306031850e175516baf80b72a6f"
+  dependencies:
+    domelementtype "1"
+
+domutils@1.5:
+  version "1.5.1"
+  resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf"
+  dependencies:
+    dom-serializer "0"
+    domelementtype "1"
+
+dot-prop@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-3.0.0.tgz#1b708af094a49c9a0e7dbcad790aba539dac1177"
+  dependencies:
+    is-obj "^1.0.0"
+
+dot-prop@^4.1.0:
+  version "4.1.1"
+  resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.1.1.tgz#a8493f0b7b5eeec82525b5c7587fa7de7ca859c1"
+  dependencies:
+    is-obj "^1.0.0"
+
+duplexer2@^0.1.4:
+  version "0.1.4"
+  resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1"
+  dependencies:
+    readable-stream "^2.0.2"
+
+duplexer@^0.1.1:
+  version "0.1.1"
+  resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1"
+
+each-async@^1.0.0:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/each-async/-/each-async-1.1.1.tgz#dee5229bdf0ab6ba2012a395e1b869abf8813473"
+  dependencies:
+    onetime "^1.0.0"
+    set-immediate-shim "^1.0.0"
+
+ecc-jsbn@~0.1.1:
+  version "0.1.1"
+  resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505"
+  dependencies:
+    jsbn "~0.1.0"
+
+ee-first@1.1.1:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
+
+electron-to-chromium@^1.2.3:
+  version "1.2.4"
+  resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.2.4.tgz#9751cbea89fa120bf88c226ba41eb8d0b6f1b597"
+
+elegant-spinner@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e"
+
+elliptic@^6.0.0:
+  version "6.4.0"
+  resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.0.tgz#cac9af8762c85836187003c8dfe193e5e2eae5df"
+  dependencies:
+    bn.js "^4.4.0"
+    brorand "^1.0.1"
+    hash.js "^1.0.0"
+    hmac-drbg "^1.0.0"
+    inherits "^2.0.1"
+    minimalistic-assert "^1.0.0"
+    minimalistic-crypto-utils "^1.0.0"
+
+emojis-list@^2.0.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389"
+
+encodeurl@~1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.1.tgz#79e3d58655346909fe6f0f45a5de68103b294d20"
+
+enhanced-resolve@^3.0.0:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-3.1.0.tgz#9f4b626f577245edcf4b2ad83d86e17f4f421dec"
+  dependencies:
+    graceful-fs "^4.1.2"
+    memory-fs "^0.4.0"
+    object-assign "^4.0.1"
+    tapable "^0.2.5"
+
+entities@1.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/entities/-/entities-1.0.0.tgz#b2987aa3821347fcde642b24fdfc9e4fb712bf26"
+
+entities@~1.1.1:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0"
+
+errno@^0.1.1, errno@^0.1.3:
+  version "0.1.4"
+  resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.4.tgz#b896e23a9e5e8ba33871fc996abd3635fc9a1c7d"
+  dependencies:
+    prr "~0.0.0"
+
+error-ex@^1.2.0:
+  version "1.3.0"
+  resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.0.tgz#e67b43f3e82c96ea3a584ffee0b9fc3325d802d9"
+  dependencies:
+    is-arrayish "^0.2.1"
+
+escape-html@~1.0.3:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
+
+escape-string-regexp@^1.0.0, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
+  version "1.0.5"
+  resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
+
+esprima@^1.2.0:
+  version "1.2.5"
+  resolved "https://registry.yarnpkg.com/esprima/-/esprima-1.2.5.tgz#0993502feaf668138325756f30f9a51feeec11e9"
+
+esprima@^2.6.0:
+  version "2.7.3"
+  resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581"
+
+"esprima@~ 1.0.2":
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/esprima/-/esprima-1.0.4.tgz#9f557e08fc3b4d26ece9dd34f8fbf476b62585ad"
+
+estraverse@^1.5.0:
+  version "1.9.3"
+  resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44"
+
+esutils@^2.0.2:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b"
+
+etag@~1.8.0:
+  version "1.8.0"
+  resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.0.tgz#6f631aef336d6c46362b51764044ce216be3c051"
+
+eventemitter2@~0.4.13:
+  version "0.4.14"
+  resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-0.4.14.tgz#8f61b75cde012b2e9eb284d4545583b5643b61ab"
+
+events@^1.0.0:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924"
+
+evp_bytestokey@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.0.tgz#497b66ad9fef65cd7c08a6180824ba1476b66e53"
+  dependencies:
+    create-hash "^1.1.1"
+
+exit-hook@^1.0.0:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8"
+
+exit@~0.1.1:
+  version "0.1.2"
+  resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c"
+
+expand-brackets@^0.1.4:
+  version "0.1.5"
+  resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b"
+  dependencies:
+    is-posix-bracket "^0.1.0"
+
+expand-range@^1.8.1:
+  version "1.8.2"
+  resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337"
+  dependencies:
+    fill-range "^2.1.0"
+
+extend@3, extend@~3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.0.tgz#5a474353b9f3353ddd8176dfd37b91c83a46f1d4"
+
+extglob@^0.3.1:
+  version "0.3.2"
+  resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1"
+  dependencies:
+    is-extglob "^1.0.0"
+
+extract-text-webpack-plugin@^2.0.0-beta:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/extract-text-webpack-plugin/-/extract-text-webpack-plugin-2.0.0.tgz#8640f72609800a3528f13a2a9634d566a5c1ae60"
+  dependencies:
+    ajv "^4.11.2"
+    async "^2.1.2"
+    loader-utils "^1.0.2"
+    webpack-sources "^0.1.0"
+
+extsprintf@1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.0.2.tgz#e1080e0658e300b06294990cc70e1502235fd550"
+
+fastparse@^1.1.1:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.1.tgz#d1e2643b38a94d7583b479060e6c4affc94071f8"
+
+faye-websocket@~0.4.3:
+  version "0.4.4"
+  resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.4.4.tgz#c14c5b3bf14d7417ffbfd990c0a7495cd9f337bc"
+
+figures@^1.0.1:
+  version "1.7.0"
+  resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e"
+  dependencies:
+    escape-string-regexp "^1.0.5"
+    object-assign "^4.1.0"
+
+file-sync-cmp@^0.1.0:
+  version "0.1.1"
+  resolved "https://registry.yarnpkg.com/file-sync-cmp/-/file-sync-cmp-0.1.1.tgz#a5e7a8ffbfa493b43b923bbd4ca89a53b63b612b"
+
+filename-regex@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.0.tgz#996e3e80479b98b9897f15a8a58b3d084e926775"
+
+fill-range@^2.1.0:
+  version "2.2.3"
+  resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723"
+  dependencies:
+    is-number "^2.1.0"
+    isobject "^2.0.0"
+    randomatic "^1.1.3"
+    repeat-element "^1.1.2"
+    repeat-string "^1.5.2"
+
+filled-array@^1.0.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/filled-array/-/filled-array-1.1.0.tgz#c3c4f6c663b923459a9aa29912d2d031f1507f84"
+
+finalhandler@1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.0.0.tgz#b5691c2c0912092f18ac23e9416bde5cd7dc6755"
+  dependencies:
+    debug "2.6.1"
+    encodeurl "~1.0.1"
+    escape-html "~1.0.3"
+    on-finished "~2.3.0"
+    parseurl "~1.3.1"
+    statuses "~1.3.1"
+    unpipe "~1.0.0"
+
+find-up@^1.0.0:
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f"
+  dependencies:
+    path-exists "^2.0.0"
+    pinkie-promise "^2.0.0"
+
+findup-sync@~0.1.2:
+  version "0.1.3"
+  resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-0.1.3.tgz#7f3e7a97b82392c653bf06589bd85190e93c3683"
+  dependencies:
+    glob "~3.2.9"
+    lodash "~2.4.1"
+
+flatten@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.2.tgz#dae46a9d78fbe25292258cc1e780a41d95c03782"
+
+for-in@^0.1.5:
+  version "0.1.6"
+  resolved "https://registry.yarnpkg.com/for-in/-/for-in-0.1.6.tgz#c9f96e89bfad18a545af5ec3ed352a1d9e5b4dc8"
+
+for-own@^0.1.4:
+  version "0.1.4"
+  resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.4.tgz#0149b41a39088c7515f51ebe1c1386d45f935072"
+  dependencies:
+    for-in "^0.1.5"
+
+forever-agent@~0.6.1:
+  version "0.6.1"
+  resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
+
+form-data@^2.0.0, form-data@~2.1.1:
+  version "2.1.2"
+  resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.2.tgz#89c3534008b97eada4cbb157d58f6f5df025eae4"
+  dependencies:
+    asynckit "^0.4.0"
+    combined-stream "^1.0.5"
+    mime-types "^2.1.12"
+
+fresh@0.5.0:
+  version "0.5.0"
+  resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.0.tgz#f474ca5e6a9246d6fd8e0953cfa9b9c805afa78e"
+
+fs-extra@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-2.0.0.tgz#337352bded4a0b714f3eb84de8cea765e9d37600"
+  dependencies:
+    graceful-fs "^4.1.2"
+    jsonfile "^2.1.0"
+
+fs.realpath@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
+
+fsevents@^1.0.0:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.1.tgz#f19fd28f43eeaf761680e519a203c4d0b3d31aff"
+  dependencies:
+    nan "^2.3.0"
+    node-pre-gyp "^0.6.29"
+
+fstream-ignore@~1.0.5:
+  version "1.0.5"
+  resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105"
+  dependencies:
+    fstream "^1.0.0"
+    inherits "2"
+    minimatch "^3.0.0"
+
+fstream@^1.0.0, fstream@^1.0.2, fstream@~1.0.10:
+  version "1.0.10"
+  resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.10.tgz#604e8a92fe26ffd9f6fae30399d4984e1ab22822"
+  dependencies:
+    graceful-fs "^4.1.2"
+    inherits "~2.0.0"
+    mkdirp ">=0.5 0"
+    rimraf "2"
+
+function-bind@^1.0.2:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.0.tgz#16176714c801798e4e8f2cf7f7529467bb4a5771"
+
+gauge@~2.7.1:
+  version "2.7.3"
+  resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.3.tgz#1c23855f962f17b3ad3d0dc7443f304542edfe09"
+  dependencies:
+    aproba "^1.0.3"
+    console-control-strings "^1.0.0"
+    has-unicode "^2.0.0"
+    object-assign "^4.1.0"
+    signal-exit "^3.0.0"
+    string-width "^1.0.1"
+    strip-ansi "^3.0.1"
+    wide-align "^1.1.0"
+
+gaze@^1.0.0:
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/gaze/-/gaze-1.1.2.tgz#847224677adb8870d679257ed3388fdb61e40105"
+  dependencies:
+    globule "^1.0.0"
+
+gaze@~0.5.1:
+  version "0.5.2"
+  resolved "https://registry.yarnpkg.com/gaze/-/gaze-0.5.2.tgz#40b709537d24d1d45767db5a908689dfe69ac44f"
+  dependencies:
+    globule "~0.1.0"
+
+generate-function@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.0.0.tgz#6858fe7c0969b7d4e9093337647ac79f60dfbe74"
+
+generate-object-property@^1.1.0:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0"
+  dependencies:
+    is-property "^1.0.0"
+
+get-caller-file@^1.0.1:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5"
+
+get-stdin@^4.0.1:
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe"
+
+getobject@~0.1.0:
+  version "0.1.0"
+  resolved "https://registry.yarnpkg.com/getobject/-/getobject-0.1.0.tgz#047a449789fa160d018f5486ed91320b6ec7885c"
+
+getpass@^0.1.1:
+  version "0.1.6"
+  resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.6.tgz#283ffd9fc1256840875311c1b60e8c40187110e6"
+  dependencies:
+    assert-plus "^1.0.0"
+
+glob-base@^0.3.0:
+  version "0.3.0"
+  resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4"
+  dependencies:
+    glob-parent "^2.0.0"
+    is-glob "^2.0.0"
+
+glob-parent@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28"
+  dependencies:
+    is-glob "^2.0.0"
+
+glob@^4.0.2:
+  version "4.5.3"
+  resolved "https://registry.yarnpkg.com/glob/-/glob-4.5.3.tgz#c6cb73d3226c1efef04de3c56d012f03377ee15f"
+  dependencies:
+    inflight "^1.0.4"
+    inherits "2"
+    minimatch "^2.0.1"
+    once "^1.3.0"
+
+glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@~7.1.1:
+  version "7.1.1"
+  resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8"
+  dependencies:
+    fs.realpath "^1.0.0"
+    inflight "^1.0.4"
+    inherits "2"
+    minimatch "^3.0.2"
+    once "^1.3.0"
+    path-is-absolute "^1.0.0"
+
+glob@~3.1.21:
+  version "3.1.21"
+  resolved "https://registry.yarnpkg.com/glob/-/glob-3.1.21.tgz#d29e0a055dea5138f4d07ed40e8982e83c2066cd"
+  dependencies:
+    graceful-fs "~1.2.0"
+    inherits "1"
+    minimatch "~0.2.11"
+
+glob@~3.2.9:
+  version "3.2.11"
+  resolved "https://registry.yarnpkg.com/glob/-/glob-3.2.11.tgz#4a973f635b9190f715d10987d5c00fd2815ebe3d"
+  dependencies:
+    inherits "2"
+    minimatch "0.3"
+
+globby@^0.1.1:
+  version "0.1.1"
+  resolved "https://registry.yarnpkg.com/globby/-/globby-0.1.1.tgz#cbec63df724b4bea458b79a16cc0e3b1f2ca8620"
+  dependencies:
+    array-differ "^0.1.0"
+    array-union "^0.1.0"
+    async "^0.9.0"
+    glob "^4.0.2"
+
+globule@^1.0.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/globule/-/globule-1.1.0.tgz#c49352e4dc183d85893ee825385eb994bb6df45f"
+  dependencies:
+    glob "~7.1.1"
+    lodash "~4.16.4"
+    minimatch "~3.0.2"
+
+globule@~0.1.0:
+  version "0.1.0"
+  resolved "https://registry.yarnpkg.com/globule/-/globule-0.1.0.tgz#d9c8edde1da79d125a151b79533b978676346ae5"
+  dependencies:
+    glob "~3.1.21"
+    lodash "~1.0.1"
+    minimatch "~0.2.11"
+
+got@^5.0.0:
+  version "5.7.1"
+  resolved "https://registry.yarnpkg.com/got/-/got-5.7.1.tgz#5f81635a61e4a6589f180569ea4e381680a51f35"
+  dependencies:
+    create-error-class "^3.0.1"
+    duplexer2 "^0.1.4"
+    is-redirect "^1.0.0"
+    is-retry-allowed "^1.0.0"
+    is-stream "^1.0.0"
+    lowercase-keys "^1.0.0"
+    node-status-codes "^1.0.0"
+    object-assign "^4.0.1"
+    parse-json "^2.1.0"
+    pinkie-promise "^2.0.0"
+    read-all-stream "^3.0.0"
+    readable-stream "^2.0.5"
+    timed-out "^3.0.0"
+    unzip-response "^1.0.2"
+    url-parse-lax "^1.0.0"
+
+graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.4, graceful-fs@^4.1.6:
+  version "4.1.11"
+  resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658"
+
+graceful-fs@~1.2.0:
+  version "1.2.3"
+  resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-1.2.3.tgz#15a4806a57547cb2d2dbf27f42e89a8c3451b364"
+
+"graceful-readlink@>= 1.0.0":
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725"
+
+grunt-compile-handlebars@^2.0.0:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/grunt-compile-handlebars/-/grunt-compile-handlebars-2.0.2.tgz#b9f60263771f7dd7f17bcc05e6e1e329e2772cc3"
+  dependencies:
+    alce "^1.0.0"
+    handlebars ">= 1"
+    lodash.merge "^3.0.0"
+    lodash.toarray "^3.0.0"
+
+grunt-contrib-clean@^0.7.0:
+  version "0.7.0"
+  resolved "https://registry.yarnpkg.com/grunt-contrib-clean/-/grunt-contrib-clean-0.7.0.tgz#12fca70bbf525b918b73e5ccb1450f43beb629cd"
+  dependencies:
+    rimraf "^2.2.1"
+
+grunt-contrib-concat@^0.5.1:
+  version "0.5.1"
+  resolved "https://registry.yarnpkg.com/grunt-contrib-concat/-/grunt-contrib-concat-0.5.1.tgz#953c6efdfdfd2c107ab9c85077f2d4b24d31cd49"
+  dependencies:
+    chalk "^0.5.1"
+    source-map "^0.3.0"
+
+grunt-contrib-connect@^0.11.2:
+  version "0.11.2"
+  resolved "https://registry.yarnpkg.com/grunt-contrib-connect/-/grunt-contrib-connect-0.11.2.tgz#1c0a0707d3b328d9cf3b4b490eb84c495d936aed"
+  dependencies:
+    async "^0.9.0"
+    connect "^3.4.0"
+    connect-livereload "^0.5.0"
+    morgan "^1.6.1"
+    opn "^1.0.0"
+    portscanner "^1.0.0"
+    serve-index "^1.7.1"
+    serve-static "^1.10.0"
+
+grunt-contrib-copy@^0.8.2:
+  version "0.8.2"
+  resolved "https://registry.yarnpkg.com/grunt-contrib-copy/-/grunt-contrib-copy-0.8.2.tgz#df31c90ffcc409bc9fafe44ec0dd1e4259916fea"
+  dependencies:
+    chalk "^1.1.1"
+    file-sync-cmp "^0.1.0"
+
+grunt-contrib-cssmin@^0.14.0:
+  version "0.14.0"
+  resolved "https://registry.yarnpkg.com/grunt-contrib-cssmin/-/grunt-contrib-cssmin-0.14.0.tgz#88b0a92536969bb566281c5c61ec5062d833f3b7"
+  dependencies:
+    chalk "^1.0.0"
+    clean-css "~3.4.2"
+    maxmin "^1.1.0"
+
+grunt-contrib-handlebars@^0.11.0:
+  version "0.11.0"
+  resolved "https://registry.yarnpkg.com/grunt-contrib-handlebars/-/grunt-contrib-handlebars-0.11.0.tgz#7a736ced149bcf9f789550e9c8b26661a057d866"
+  dependencies:
+    chalk "^1.0.0"
+    handlebars "~4.0.0"
+    nsdeclare "0.1.0"
+
+grunt-contrib-uglify@^0.11.0:
+  version "0.11.1"
+  resolved "https://registry.yarnpkg.com/grunt-contrib-uglify/-/grunt-contrib-uglify-0.11.1.tgz#5e22a2f676cd11d871fc2a0f08aa9b2973045325"
+  dependencies:
+    chalk "^1.0.0"
+    lodash "^4.0.1"
+    maxmin "^2.0.0"
+    uglify-js "~2.6.0"
+    uri-path "^1.0.0"
+
+grunt-contrib-watch@^0.6.1:
+  version "0.6.1"
+  resolved "https://registry.yarnpkg.com/grunt-contrib-watch/-/grunt-contrib-watch-0.6.1.tgz#64fdcba25a635f5b4da1b6ce6f90da0aeb6e3f15"
+  dependencies:
+    async "~0.2.9"
+    gaze "~0.5.1"
+    lodash "~2.4.1"
+    tiny-lr-fork "0.0.5"
+
+grunt-legacy-log-utils@~0.1.1:
+  version "0.1.1"
+  resolved "https://registry.yarnpkg.com/grunt-legacy-log-utils/-/grunt-legacy-log-utils-0.1.1.tgz#c0706b9dd9064e116f36f23fe4e6b048672c0f7e"
+  dependencies:
+    colors "~0.6.2"
+    lodash "~2.4.1"
+    underscore.string "~2.3.3"
+
+grunt-legacy-log@~0.1.0:
+  version "0.1.3"
+  resolved "https://registry.yarnpkg.com/grunt-legacy-log/-/grunt-legacy-log-0.1.3.tgz#ec29426e803021af59029f87d2f9cd7335a05531"
+  dependencies:
+    colors "~0.6.2"
+    grunt-legacy-log-utils "~0.1.1"
+    hooker "~0.2.3"
+    lodash "~2.4.1"
+    underscore.string "~2.3.3"
+
+grunt-legacy-util@~0.2.0:
+  version "0.2.0"
+  resolved "https://registry.yarnpkg.com/grunt-legacy-util/-/grunt-legacy-util-0.2.0.tgz#93324884dbf7e37a9ff7c026dff451d94a9e554b"
+  dependencies:
+    async "~0.1.22"
+    exit "~0.1.1"
+    getobject "~0.1.0"
+    hooker "~0.2.3"
+    lodash "~0.9.2"
+    underscore.string "~2.2.1"
+    which "~1.0.5"
+
+grunt-prettify@^0.4.0:
+  version "0.4.0"
+  resolved "https://registry.yarnpkg.com/grunt-prettify/-/grunt-prettify-0.4.0.tgz#fc853db4245d4908ab6e35afb5277213eddc194b"
+  dependencies:
+    async "~0.9.0"
+    globby "^0.1.1"
+    js-beautify "~1.5.4"
+    lodash "~2.4.1"
+    underscore.string "~2.3.3"
+
+grunt-sass@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/grunt-sass/-/grunt-sass-2.0.0.tgz#9074cf9d7b4592e20f7788caa727b8f9aa06b60a"
+  dependencies:
+    each-async "^1.0.0"
+    node-sass "^4.0.0"
+    object-assign "^4.0.1"
+
+grunt@^0.4.5:
+  version "0.4.5"
+  resolved "https://registry.yarnpkg.com/grunt/-/grunt-0.4.5.tgz#56937cd5194324adff6d207631832a9d6ba4e7f0"
+  dependencies:
+    async "~0.1.22"
+    coffee-script "~1.3.3"
+    colors "~0.6.2"
+    dateformat "1.0.2-1.2.3"
+    eventemitter2 "~0.4.13"
+    exit "~0.1.1"
+    findup-sync "~0.1.2"
+    getobject "~0.1.0"
+    glob "~3.1.21"
+    grunt-legacy-log "~0.1.0"
+    grunt-legacy-util "~0.2.0"
+    hooker "~0.2.3"
+    iconv-lite "~0.2.11"
+    js-yaml "~2.0.5"
+    lodash "~0.9.2"
+    minimatch "~0.2.12"
+    nopt "~1.0.10"
+    rimraf "~2.2.8"
+    underscore.string "~2.2.1"
+    which "~1.0.5"
+
+gzip-size@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-1.0.0.tgz#66cf8b101047227b95bace6ea1da0c177ed5c22f"
+  dependencies:
+    browserify-zlib "^0.1.4"
+    concat-stream "^1.4.1"
+
+gzip-size@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-3.0.0.tgz#546188e9bdc337f673772f81660464b389dce520"
+  dependencies:
+    duplexer "^0.1.1"
+
+handlebars@4.0.5, "handlebars@>= 1", handlebars@^4.0.5, handlebars@~4.0.0:
+  version "4.0.5"
+  resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.5.tgz#92c6ed6bb164110c50d4d8d0fbddc70806c6f8e7"
+  dependencies:
+    async "^1.4.0"
+    optimist "^0.6.1"
+    source-map "^0.4.4"
+  optionalDependencies:
+    uglify-js "^2.6"
+
+har-validator@~2.0.6:
+  version "2.0.6"
+  resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-2.0.6.tgz#cdcbc08188265ad119b6a5a7c8ab70eecfb5d27d"
+  dependencies:
+    chalk "^1.1.1"
+    commander "^2.9.0"
+    is-my-json-valid "^2.12.4"
+    pinkie-promise "^2.0.0"
+
+has-ansi@^0.1.0:
+  version "0.1.0"
+  resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-0.1.0.tgz#84f265aae8c0e6a88a12d7022894b7568894c62e"
+  dependencies:
+    ansi-regex "^0.2.0"
+
+has-ansi@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
+  dependencies:
+    ansi-regex "^2.0.0"
+
+has-flag@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa"
+
+has-unicode@^2.0.0, has-unicode@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
+
+has@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28"
+  dependencies:
+    function-bind "^1.0.2"
+
+hash.js@^1.0.0, hash.js@^1.0.3:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.0.3.tgz#1332ff00156c0a0ffdd8236013d07b77a0451573"
+  dependencies:
+    inherits "^2.0.1"
+
+hawk@~3.1.3:
+  version "3.1.3"
+  resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4"
+  dependencies:
+    boom "2.x.x"
+    cryptiles "2.x.x"
+    hoek "2.x.x"
+    sntp "1.x.x"
+
+highlight.js@^9.0.0, highlight.js@^9.1.0:
+  version "9.9.0"
+  resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-9.9.0.tgz#b9995dcfdc2773e307a34f0460d92b9a474782c0"
+
+hmac-drbg@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.0.tgz#3db471f45aae4a994a0688322171f51b8b91bee5"
+  dependencies:
+    hash.js "^1.0.3"
+    minimalistic-assert "^1.0.0"
+    minimalistic-crypto-utils "^1.0.1"
+
+hoek@2.x.x:
+  version "2.16.3"
+  resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed"
+
+hooker@~0.2.3:
+  version "0.2.3"
+  resolved "https://registry.yarnpkg.com/hooker/-/hooker-0.2.3.tgz#b834f723cc4a242aa65963459df6d984c5d3d959"
+
+hosted-git-info@^2.1.4:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.2.0.tgz#7a0d097863d886c0fabbdcd37bf1758d8becf8a5"
+
+html-comment-regex@^1.1.0:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.1.tgz#668b93776eaae55ebde8f3ad464b307a4963625e"
+
+htmlparser2@~3.8.1:
+  version "3.8.3"
+  resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.8.3.tgz#996c28b191516a8be86501a7d79757e5c70c1068"
+  dependencies:
+    domelementtype "1"
+    domhandler "2.3"
+    domutils "1.5"
+    entities "1.0"
+    readable-stream "1.1"
+
+http-errors@~1.5.0:
+  version "1.5.1"
+  resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.5.1.tgz#788c0d2c1de2c81b9e6e8c01843b6b97eb920750"
+  dependencies:
+    inherits "2.0.3"
+    setprototypeof "1.0.2"
+    statuses ">= 1.3.1 < 2"
+
+http-errors@~1.6.1:
+  version "1.6.1"
+  resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.1.tgz#5f8b8ed98aca545656bf572997387f904a722257"
+  dependencies:
+    depd "1.1.0"
+    inherits "2.0.3"
+    setprototypeof "1.0.3"
+    statuses ">= 1.3.1 < 2"
+
+http-proxy-agent@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-1.0.0.tgz#cc1ce38e453bf984a0f7702d2dd59c73d081284a"
+  dependencies:
+    agent-base "2"
+    debug "2"
+    extend "3"
+
+http-signature@~1.1.0:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf"
+  dependencies:
+    assert-plus "^0.2.0"
+    jsprim "^1.2.2"
+    sshpk "^1.7.0"
+
+https-browserify@0.0.1:
+  version "0.0.1"
+  resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-0.0.1.tgz#3f91365cabe60b77ed0ebba24b454e3e09d95a82"
+
+https-proxy-agent@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-1.0.0.tgz#35f7da6c48ce4ddbfa264891ac593ee5ff8671e6"
+  dependencies:
+    agent-base "2"
+    debug "2"
+    extend "3"
+
+iconv-lite@~0.2.11:
+  version "0.2.11"
+  resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.2.11.tgz#1ce60a3a57864a292d1321ff4609ca4bb965adc8"
+
+icss-replace-symbols@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.0.2.tgz#cb0b6054eb3af6edc9ab1d62d01933e2d4c8bfa5"
+
+ieee754@^1.1.4:
+  version "1.1.8"
+  resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4"
+
+image-size@~0.5.0:
+  version "0.5.1"
+  resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.5.1.tgz#28eea8548a4b1443480ddddc1e083ae54652439f"
+
+imurmurhash@^0.1.4:
+  version "0.1.4"
+  resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
+
+in-publish@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/in-publish/-/in-publish-2.0.0.tgz#e20ff5e3a2afc2690320b6dc552682a9c7fadf51"
+
+indent-string@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80"
+  dependencies:
+    repeating "^2.0.0"
+
+indexes-of@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607"
+
+indexof@0.0.1:
+  version "0.0.1"
+  resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d"
+
+inflight@^1.0.4:
+  version "1.0.6"
+  resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
+  dependencies:
+    once "^1.3.0"
+    wrappy "1"
+
+inherits@1:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/inherits/-/inherits-1.0.2.tgz#ca4309dadee6b54cc0b8d247e8d7c7a0975bdc9b"
+
+inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1:
+  version "2.0.3"
+  resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
+
+inherits@2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1"
+
+ini@^1.3.4, ini@~1.3.0:
+  version "1.3.4"
+  resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e"
+
+interpret@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.0.1.tgz#d579fb7f693b858004947af39fa0db49f795602c"
+
+invariant@^2.2.0:
+  version "2.2.2"
+  resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360"
+  dependencies:
+    loose-envify "^1.0.0"
+
+invert-kv@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6"
+
+is-absolute-url@^2.0.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6"
+
+is-absolute@^0.2.3:
+  version "0.2.6"
+  resolved "https://registry.yarnpkg.com/is-absolute/-/is-absolute-0.2.6.tgz#20de69f3db942ef2d87b9c2da36f172235b1b5eb"
+  dependencies:
+    is-relative "^0.2.1"
+    is-windows "^0.2.0"
+
+is-arrayish@^0.2.1:
+  version "0.2.1"
+  resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
+
+is-binary-path@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898"
+  dependencies:
+    binary-extensions "^1.0.0"
+
+is-buffer@^1.0.2:
+  version "1.1.4"
+  resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.4.tgz#cfc86ccd5dc5a52fa80489111c6920c457e2d98b"
+
+is-builtin-module@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe"
+  dependencies:
+    builtin-modules "^1.0.0"
+
+is-dotfile@^1.0.0:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.2.tgz#2c132383f39199f8edc268ca01b9b007d205cc4d"
+
+is-equal-shallow@^0.1.3:
+  version "0.1.3"
+  resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534"
+  dependencies:
+    is-primitive "^2.0.0"
+
+is-extendable@^0.1.1:
+  version "0.1.1"
+  resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
+
+is-extglob@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0"
+
+is-finite@^1.0.0:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa"
+  dependencies:
+    number-is-nan "^1.0.0"
+
+is-fullwidth-code-point@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"
+  dependencies:
+    number-is-nan "^1.0.0"
+
+is-glob@^2.0.0, is-glob@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863"
+  dependencies:
+    is-extglob "^1.0.0"
+
+is-my-json-valid@^2.12.4:
+  version "2.16.0"
+  resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.16.0.tgz#f079dd9bfdae65ee2038aae8acbc86ab109e3693"
+  dependencies:
+    generate-function "^2.0.0"
+    generate-object-property "^1.1.0"
+    jsonpointer "^4.0.0"
+    xtend "^4.0.0"
+
+is-npm@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4"
+
+is-number@^2.0.2, is-number@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f"
+  dependencies:
+    kind-of "^3.0.2"
+
+is-obj@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f"
+
+is-plain-obj@^1.0.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e"
+
+is-posix-bracket@^0.1.0:
+  version "0.1.1"
+  resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4"
+
+is-primitive@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575"
+
+is-property@^1.0.0:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84"
+
+is-redirect@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24"
+
+is-relative@^0.2.1:
+  version "0.2.1"
+  resolved "https://registry.yarnpkg.com/is-relative/-/is-relative-0.2.1.tgz#d27f4c7d516d175fb610db84bbeef23c3bc97aa5"
+  dependencies:
+    is-unc-path "^0.1.1"
+
+is-retry-allowed@^1.0.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz#11a060568b67339444033d0125a61a20d564fb34"
+
+is-stream@^1.0.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
+
+is-svg@^2.0.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-2.1.0.tgz#cf61090da0d9efbcab8722deba6f032208dbb0e9"
+  dependencies:
+    html-comment-regex "^1.1.0"
+
+is-typedarray@~1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
+
+is-unc-path@^0.1.1:
+  version "0.1.2"
+  resolved "https://registry.yarnpkg.com/is-unc-path/-/is-unc-path-0.1.2.tgz#6ab053a72573c10250ff416a3814c35178af39b9"
+  dependencies:
+    unc-path-regex "^0.1.0"
+
+is-utf8@^0.2.0:
+  version "0.2.1"
+  resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72"
+
+is-windows@^0.2.0:
+  version "0.2.0"
+  resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-0.2.0.tgz#de1aa6d63ea29dd248737b69f1ff8b8002d2108c"
+
+isarray@0.0.1:
+  version "0.0.1"
+  resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
+
+isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
+
+isexe@^1.1.1:
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/isexe/-/isexe-1.1.2.tgz#36f3e22e60750920f5e7241a476a8c6a42275ad0"
+
+isobject@^2.0.0, isobject@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89"
+  dependencies:
+    isarray "1.0.0"
+
+isstream@~0.1.2:
+  version "0.1.2"
+  resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
+
+jodid25519@^1.0.0:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/jodid25519/-/jodid25519-1.0.2.tgz#06d4912255093419477d425633606e0e90782967"
+  dependencies:
+    jsbn "~0.1.0"
+
+js-base64@^2.1.9:
+  version "2.1.9"
+  resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.1.9.tgz#f0e80ae039a4bd654b5f281fc93f04a914a7fcce"
+
+js-beautify@~1.5.4:
+  version "1.5.10"
+  resolved "https://registry.yarnpkg.com/js-beautify/-/js-beautify-1.5.10.tgz#4d95371702699344a516ca26bf59f0a27bb75719"
+  dependencies:
+    config-chain "~1.1.5"
+    mkdirp "~0.5.0"
+    nopt "~3.0.1"
+
+js-tokens@^3.0.0:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.1.tgz#08e9f132484a2c45a30907e9dc4d5567b7f114d7"
+
+js-yaml@~2.0.5:
+  version "2.0.5"
+  resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-2.0.5.tgz#a25ae6509999e97df278c6719da11bd0687743a8"
+  dependencies:
+    argparse "~ 0.1.11"
+    esprima "~ 1.0.2"
+
+js-yaml@~3.7.0:
+  version "3.7.0"
+  resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.7.0.tgz#5c967ddd837a9bfdca5f2de84253abe8a1c03b80"
+  dependencies:
+    argparse "^1.0.7"
+    esprima "^2.6.0"
+
+jsbn@~0.1.0:
+  version "0.1.1"
+  resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
+
+jsesc@~0.5.0:
+  version "0.5.0"
+  resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d"
+
+json-loader@^0.5.4:
+  version "0.5.4"
+  resolved "https://registry.yarnpkg.com/json-loader/-/json-loader-0.5.4.tgz#8baa1365a632f58a3c46d20175fc6002c96e37de"
+
+json-schema@0.2.3:
+  version "0.2.3"
+  resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
+
+json-stable-stringify@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af"
+  dependencies:
+    jsonify "~0.0.0"
+
+json-stringify-safe@~5.0.1:
+  version "5.0.1"
+  resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
+
+json5@^0.5.0:
+  version "0.5.1"
+  resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821"
+
+jsonfile@^2.1.0:
+  version "2.4.0"
+  resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8"
+  optionalDependencies:
+    graceful-fs "^4.1.6"
+
+jsonify@~0.0.0:
+  version "0.0.0"
+  resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73"
+
+jsonpointer@^4.0.0:
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9"
+
+jspm-config@^0.3.0:
+  version "0.3.4"
+  resolved "https://registry.yarnpkg.com/jspm-config/-/jspm-config-0.3.4.tgz#44c26902e4ae8ece2366cedc9ff16b10a5f391c6"
+  dependencies:
+    any-promise "^1.3.0"
+    graceful-fs "^4.1.4"
+    make-error-cause "^1.2.1"
+    object.pick "^1.1.2"
+    parse-json "^2.2.0"
+    strip-bom "^3.0.0"
+    thenify "^3.2.0"
+    throat "^3.0.0"
+    xtend "^4.0.1"
+
+jsprim@^1.2.2:
+  version "1.3.1"
+  resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.3.1.tgz#2a7256f70412a29ee3670aaca625994c4dcff252"
+  dependencies:
+    extsprintf "1.0.2"
+    json-schema "0.2.3"
+    verror "1.3.6"
+
+kind-of@^3.0.2:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.1.0.tgz#475d698a5e49ff5e53d14e3e732429dc8bf4cf47"
+  dependencies:
+    is-buffer "^1.0.2"
+
+latest-version@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-2.0.0.tgz#56f8d6139620847b8017f8f1f4d78e211324168b"
+  dependencies:
+    package-json "^2.0.0"
+
+lazy-cache@^1.0.3:
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e"
+
+lazy-req@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/lazy-req/-/lazy-req-1.1.0.tgz#bdaebead30f8d824039ce0ce149d4daa07ba1fac"
+
+lcid@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835"
+  dependencies:
+    invert-kv "^1.0.0"
+
+less-loader@^2.2.3:
+  version "2.2.3"
+  resolved "https://registry.yarnpkg.com/less-loader/-/less-loader-2.2.3.tgz#b6d8f8139c8493df09d992a93a00734b08f84528"
+  dependencies:
+    loader-utils "^0.2.5"
+
+less@^2.7.2:
+  version "2.7.2"
+  resolved "https://registry.yarnpkg.com/less/-/less-2.7.2.tgz#368d6cc73e1fb03981183280918743c5dcf9b3df"
+  optionalDependencies:
+    errno "^0.1.1"
+    graceful-fs "^4.1.2"
+    image-size "~0.5.0"
+    mime "^1.2.11"
+    mkdirp "^0.5.0"
+    promise "^7.1.1"
+    request "^2.72.0"
+    source-map "^0.5.3"
+
+listify@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/listify/-/listify-1.0.0.tgz#03ca7ba2d150d4267773f74e57558d1053d2bee3"
+
+load-json-file@^1.0.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0"
+  dependencies:
+    graceful-fs "^4.1.2"
+    parse-json "^2.2.0"
+    pify "^2.0.0"
+    pinkie-promise "^2.0.0"
+    strip-bom "^2.0.0"
+
+loader-runner@^2.3.0:
+  version "2.3.0"
+  resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.3.0.tgz#f482aea82d543e07921700d5a46ef26fdac6b8a2"
+
+loader-utils@^0.2.16, loader-utils@^0.2.5:
+  version "0.2.17"
+  resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.17.tgz#f86e6374d43205a6e6c60e9196f17c0299bfb348"
+  dependencies:
+    big.js "^3.1.3"
+    emojis-list "^2.0.0"
+    json5 "^0.5.0"
+    object-assign "^4.0.1"
+
+loader-utils@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.0.2.tgz#a9f923c865a974623391a8602d031137fad74830"
+  dependencies:
+    big.js "^3.1.3"
+    emojis-list "^2.0.0"
+    json5 "^0.5.0"
+
+lockfile@^1.0.1:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/lockfile/-/lockfile-1.0.3.tgz#2638fc39a0331e9cac1a04b71799931c9c50df79"
+
+lodash._arraycopy@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/lodash._arraycopy/-/lodash._arraycopy-3.0.0.tgz#76e7b7c1f1fb92547374878a562ed06a3e50f6e1"
+
+lodash._arrayeach@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/lodash._arrayeach/-/lodash._arrayeach-3.0.0.tgz#bab156b2a90d3f1bbd5c653403349e5e5933ef9e"
+
+lodash._basecopy@^3.0.0:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36"
+
+lodash._basefor@^3.0.0:
+  version "3.0.3"
+  resolved "https://registry.yarnpkg.com/lodash._basefor/-/lodash._basefor-3.0.3.tgz#7550b4e9218ef09fad24343b612021c79b4c20c2"
+
+lodash._basevalues@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz#5b775762802bde3d3297503e26300820fdf661b7"
+
+lodash._bindcallback@^3.0.0:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz#e531c27644cf8b57a99e17ed95b35c748789392e"
+
+lodash._createassigner@^3.0.0:
+  version "3.1.1"
+  resolved "https://registry.yarnpkg.com/lodash._createassigner/-/lodash._createassigner-3.1.1.tgz#838a5bae2fdaca63ac22dee8e19fa4e6d6970b11"
+  dependencies:
+    lodash._bindcallback "^3.0.0"
+    lodash._isiterateecall "^3.0.0"
+    lodash.restparam "^3.0.0"
+
+lodash._getnative@^3.0.0:
+  version "3.9.1"
+  resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5"
+
+lodash._isiterateecall@^3.0.0:
+  version "3.0.9"
+  resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c"
+
+lodash.assign@^4.0.3, lodash.assign@^4.0.6, lodash.assign@^4.2.0:
+  version "4.2.0"
+  resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7"
+
+lodash.camelcase@^4.3.0:
+  version "4.3.0"
+  resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6"
+
+lodash.clonedeep@^4.3.2:
+  version "4.5.0"
+  resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef"
+
+lodash.isarguments@^3.0.0:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a"
+
+lodash.isarray@^3.0.0:
+  version "3.0.4"
+  resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55"
+
+lodash.isplainobject@^3.0.0:
+  version "3.2.0"
+  resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-3.2.0.tgz#9a8238ae16b200432960cd7346512d0123fbf4c5"
+  dependencies:
+    lodash._basefor "^3.0.0"
+    lodash.isarguments "^3.0.0"
+    lodash.keysin "^3.0.0"
+
+lodash.istypedarray@^3.0.0:
+  version "3.0.6"
+  resolved "https://registry.yarnpkg.com/lodash.istypedarray/-/lodash.istypedarray-3.0.6.tgz#c9a477498607501d8e8494d283b87c39281cef62"
+
+lodash.keys@^3.0.0:
+  version "3.1.2"
+  resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a"
+  dependencies:
+    lodash._getnative "^3.0.0"
+    lodash.isarguments "^3.0.0"
+    lodash.isarray "^3.0.0"
+
+lodash.keysin@^3.0.0:
+  version "3.0.8"
+  resolved "https://registry.yarnpkg.com/lodash.keysin/-/lodash.keysin-3.0.8.tgz#22c4493ebbedb1427962a54b445b2c8a767fb47f"
+  dependencies:
+    lodash.isarguments "^3.0.0"
+    lodash.isarray "^3.0.0"
+
+lodash.memoize@^4.1.0:
+  version "4.1.2"
+  resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe"
+
+lodash.merge@^3.0.0:
+  version "3.3.2"
+  resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-3.3.2.tgz#0d90d93ed637b1878437bb3e21601260d7afe994"
+  dependencies:
+    lodash._arraycopy "^3.0.0"
+    lodash._arrayeach "^3.0.0"
+    lodash._createassigner "^3.0.0"
+    lodash._getnative "^3.0.0"
+    lodash.isarguments "^3.0.0"
+    lodash.isarray "^3.0.0"
+    lodash.isplainobject "^3.0.0"
+    lodash.istypedarray "^3.0.0"
+    lodash.keys "^3.0.0"
+    lodash.keysin "^3.0.0"
+    lodash.toplainobject "^3.0.0"
+
+lodash.mergewith@^4.6.0:
+  version "4.6.0"
+  resolved "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.0.tgz#150cf0a16791f5903b8891eab154609274bdea55"
+
+lodash.restparam@^3.0.0:
+  version "3.6.1"
+  resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805"
+
+lodash.toarray@^3.0.0:
+  version "3.0.2"
+  resolved "https://registry.yarnpkg.com/lodash.toarray/-/lodash.toarray-3.0.2.tgz#2b204f0fa4f51c285c6f00c81d1cea5a23041179"
+  dependencies:
+    lodash._arraycopy "^3.0.0"
+    lodash._basevalues "^3.0.0"
+    lodash.keys "^3.0.0"
+
+lodash.toplainobject@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/lodash.toplainobject/-/lodash.toplainobject-3.0.0.tgz#28790ad942d293d78aa663a07ecf7f52ca04198d"
+  dependencies:
+    lodash._basecopy "^3.0.0"
+    lodash.keysin "^3.0.0"
+
+lodash.uniq@^4.3.0:
+  version "4.5.0"
+  resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773"
+
+lodash@^3.2.0:
+  version "3.10.1"
+  resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6"
+
+lodash@^4.0.0, lodash@^4.0.1, lodash@^4.13.1, lodash@^4.14.0, lodash@^4.2.1:
+  version "4.17.4"
+  resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae"
+
+lodash@~0.9.2:
+  version "0.9.2"
+  resolved "https://registry.yarnpkg.com/lodash/-/lodash-0.9.2.tgz#8f3499c5245d346d682e5b0d3b40767e09f1a92c"
+
+lodash@~1.0.1:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/lodash/-/lodash-1.0.2.tgz#8f57560c83b59fc270bd3d561b690043430e2551"
+
+lodash@~2.4.1:
+  version "2.4.2"
+  resolved "https://registry.yarnpkg.com/lodash/-/lodash-2.4.2.tgz#fadd834b9683073da179b3eae6d9c0d15053f73e"
+
+lodash@~4.16.4:
+  version "4.16.6"
+  resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.16.6.tgz#d22c9ac660288f3843e16ba7d2b5d06cca27d777"
+
+log-update@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/log-update/-/log-update-1.0.2.tgz#19929f64c4093d2d2e7075a1dad8af59c296b8d1"
+  dependencies:
+    ansi-escapes "^1.0.0"
+    cli-cursor "^1.0.2"
+
+longest@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097"
+
+loose-envify@^1.0.0:
+  version "1.3.1"
+  resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848"
+  dependencies:
+    js-tokens "^3.0.0"
+
+loud-rejection@^1.0.0:
+  version "1.6.0"
+  resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f"
+  dependencies:
+    currently-unhandled "^0.4.1"
+    signal-exit "^3.0.0"
+
+lowercase-keys@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306"
+
+lru-cache@2:
+  version "2.7.3"
+  resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.7.3.tgz#6d4524e8b955f95d4f5b58851ce21dd72fb4e952"
+
+lru-cache@^4.0.1:
+  version "4.0.2"
+  resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.0.2.tgz#1d17679c069cda5d040991a09dbc2c0db377e55e"
+  dependencies:
+    pseudomap "^1.0.1"
+    yallist "^2.0.0"
+
+macaddress@^0.2.8:
+  version "0.2.8"
+  resolved "https://registry.yarnpkg.com/macaddress/-/macaddress-0.2.8.tgz#5904dc537c39ec6dbefeae902327135fa8511f12"
+
+make-error-cause@^1.2.1:
+  version "1.2.2"
+  resolved "https://registry.yarnpkg.com/make-error-cause/-/make-error-cause-1.2.2.tgz#df0388fcd0b37816dff0a5fb8108939777dcbc9d"
+  dependencies:
+    make-error "^1.2.0"
+
+make-error@^1.2.0:
+  version "1.2.1"
+  resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.2.1.tgz#9a6dfb4844423b9f145806728d05c6e935670e75"
+
+map-obj@^1.0.0, map-obj@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d"
+
+marked@^0.3.5:
+  version "0.3.6"
+  resolved "https://registry.yarnpkg.com/marked/-/marked-0.3.6.tgz#b2c6c618fccece4ef86c4fc6cb8a7cbf5aeda8d7"
+
+math-expression-evaluator@^1.2.14:
+  version "1.2.16"
+  resolved "https://registry.yarnpkg.com/math-expression-evaluator/-/math-expression-evaluator-1.2.16.tgz#b357fa1ca9faefb8e48d10c14ef2bcb2d9f0a7c9"
+
+maxmin@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/maxmin/-/maxmin-1.1.0.tgz#71365e84a99dd8f8b3f7d5fde2f00d1e7f73be61"
+  dependencies:
+    chalk "^1.0.0"
+    figures "^1.0.1"
+    gzip-size "^1.0.0"
+    pretty-bytes "^1.0.0"
+
+maxmin@^2.0.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/maxmin/-/maxmin-2.1.0.tgz#4d3b220903d95eee7eb7ac7fa864e72dc09a3166"
+  dependencies:
+    chalk "^1.0.0"
+    figures "^1.0.1"
+    gzip-size "^3.0.0"
+    pretty-bytes "^3.0.0"
+
+memory-fs@^0.4.0, memory-fs@~0.4.1:
+  version "0.4.1"
+  resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552"
+  dependencies:
+    errno "^0.1.3"
+    readable-stream "^2.0.1"
+
+meow@^3.1.0, meow@^3.7.0:
+  version "3.7.0"
+  resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb"
+  dependencies:
+    camelcase-keys "^2.0.0"
+    decamelize "^1.1.2"
+    loud-rejection "^1.0.0"
+    map-obj "^1.0.1"
+    minimist "^1.1.3"
+    normalize-package-data "^2.3.4"
+    object-assign "^4.0.1"
+    read-pkg-up "^1.0.1"
+    redent "^1.0.0"
+    trim-newlines "^1.0.0"
+
+micromatch@^2.1.5:
+  version "2.3.11"
+  resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565"
+  dependencies:
+    arr-diff "^2.0.0"
+    array-unique "^0.2.1"
+    braces "^1.8.2"
+    expand-brackets "^0.1.4"
+    extglob "^0.3.1"
+    filename-regex "^2.0.0"
+    is-extglob "^1.0.0"
+    is-glob "^2.0.1"
+    kind-of "^3.0.2"
+    normalize-path "^2.0.1"
+    object.omit "^2.0.0"
+    parse-glob "^3.0.4"
+    regex-cache "^0.4.2"
+
+miller-rabin@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.0.tgz#4a62fb1d42933c05583982f4c716f6fb9e6c6d3d"
+  dependencies:
+    bn.js "^4.0.0"
+    brorand "^1.0.1"
+
+mime-db@~1.26.0:
+  version "1.26.0"
+  resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.26.0.tgz#eaffcd0e4fc6935cf8134da246e2e6c35305adff"
+
+mime-types@^2.1.12, mime-types@~2.1.11, mime-types@~2.1.7:
+  version "2.1.14"
+  resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.14.tgz#f7ef7d97583fcaf3b7d282b6f8b5679dab1e94ee"
+  dependencies:
+    mime-db "~1.26.0"
+
+mime@1.3.4, mime@1.3.x, mime@^1.2.11:
+  version "1.3.4"
+  resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.4.tgz#115f9e3b6b3daf2959983cb38f149a2d40eb5d53"
+
+minimalistic-assert@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz#702be2dda6b37f4836bcb3f5db56641b64a1d3d3"
+
+minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a"
+
+minimatch@0.3:
+  version "0.3.0"
+  resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-0.3.0.tgz#275d8edaac4f1bb3326472089e7949c8394699dd"
+  dependencies:
+    lru-cache "2"
+    sigmund "~1.0.0"
+
+minimatch@^2.0.1:
+  version "2.0.10"
+  resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-2.0.10.tgz#8d087c39c6b38c001b97fca7ce6d0e1e80afbac7"
+  dependencies:
+    brace-expansion "^1.0.0"
+
+minimatch@^3.0.0, minimatch@^3.0.2, minimatch@~3.0.2:
+  version "3.0.3"
+  resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774"
+  dependencies:
+    brace-expansion "^1.0.0"
+
+minimatch@~0.2.11, minimatch@~0.2.12:
+  version "0.2.14"
+  resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-0.2.14.tgz#c74e780574f63c6f9a090e90efbe6ef53a6a756a"
+  dependencies:
+    lru-cache "2"
+    sigmund "~1.0.0"
+
+minimist@0.0.8, minimist@~0.0.1:
+  version "0.0.8"
+  resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
+
+minimist@^1.1.3, minimist@^1.2.0:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
+
+"mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1:
+  version "0.5.1"
+  resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
+  dependencies:
+    minimist "0.0.8"
+
+morgan@^1.6.1:
+  version "1.8.1"
+  resolved "https://registry.yarnpkg.com/morgan/-/morgan-1.8.1.tgz#f93023d3887bd27b78dfd6023cea7892ee27a4b1"
+  dependencies:
+    basic-auth "~1.1.0"
+    debug "2.6.1"
+    depd "~1.1.0"
+    on-finished "~2.3.0"
+    on-headers "~1.0.1"
+
+ms@0.7.1:
+  version "0.7.1"
+  resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098"
+
+ms@0.7.2:
+  version "0.7.2"
+  resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.2.tgz#ae25cf2512b3885a1d95d7f037868d8431124765"
+
+nan@^2.3.0, nan@^2.3.2:
+  version "2.5.1"
+  resolved "https://registry.yarnpkg.com/nan/-/nan-2.5.1.tgz#d5b01691253326a97a2bbee9e61c55d8d60351e2"
+
+negotiator@0.6.1:
+  version "0.6.1"
+  resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9"
+
+node-gyp@^3.3.1:
+  version "3.5.0"
+  resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.5.0.tgz#a8fe5e611d079ec16348a3eb960e78e11c85274a"
+  dependencies:
+    fstream "^1.0.0"
+    glob "^7.0.3"
+    graceful-fs "^4.1.2"
+    minimatch "^3.0.2"
+    mkdirp "^0.5.0"
+    nopt "2 || 3"
+    npmlog "0 || 1 || 2 || 3 || 4"
+    osenv "0"
+    request "2"
+    rimraf "2"
+    semver "2.x || 3.x || 4 || 5"
+    tar "^2.0.0"
+    which "1"
+
+node-libs-browser@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.0.0.tgz#a3a59ec97024985b46e958379646f96c4b616646"
+  dependencies:
+    assert "^1.1.1"
+    browserify-zlib "^0.1.4"
+    buffer "^4.3.0"
+    console-browserify "^1.1.0"
+    constants-browserify "^1.0.0"
+    crypto-browserify "^3.11.0"
+    domain-browser "^1.1.1"
+    events "^1.0.0"
+    https-browserify "0.0.1"
+    os-browserify "^0.2.0"
+    path-browserify "0.0.0"
+    process "^0.11.0"
+    punycode "^1.2.4"
+    querystring-es3 "^0.2.0"
+    readable-stream "^2.0.5"
+    stream-browserify "^2.0.1"
+    stream-http "^2.3.1"
+    string_decoder "^0.10.25"
+    timers-browserify "^2.0.2"
+    tty-browserify "0.0.0"
+    url "^0.11.0"
+    util "^0.10.3"
+    vm-browserify "0.0.4"
+
+node-pre-gyp@^0.6.29:
+  version "0.6.33"
+  resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.33.tgz#640ac55198f6a925972e0c16c4ac26a034d5ecc9"
+  dependencies:
+    mkdirp "~0.5.1"
+    nopt "~3.0.6"
+    npmlog "^4.0.1"
+    rc "~1.1.6"
+    request "^2.79.0"
+    rimraf "~2.5.4"
+    semver "~5.3.0"
+    tar "~2.2.1"
+    tar-pack "~3.3.0"
+
+node-sass@^4.0.0:
+  version "4.5.0"
+  resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.5.0.tgz#532e37bad0ce587348c831535dbc98ea4289508b"
+  dependencies:
+    async-foreach "^0.1.3"
+    chalk "^1.1.1"
+    cross-spawn "^3.0.0"
+    gaze "^1.0.0"
+    get-stdin "^4.0.1"
+    glob "^7.0.3"
+    in-publish "^2.0.0"
+    lodash.assign "^4.2.0"
+    lodash.clonedeep "^4.3.2"
+    lodash.mergewith "^4.6.0"
+    meow "^3.7.0"
+    mkdirp "^0.5.1"
+    nan "^2.3.2"
+    node-gyp "^3.3.1"
+    npmlog "^4.0.0"
+    request "^2.61.0"
+    sass-graph "^2.1.1"
+    stdout-stream "^1.4.0"
+
+node-status-codes@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/node-status-codes/-/node-status-codes-1.0.0.tgz#5ae5541d024645d32a58fcddc9ceecea7ae3ac2f"
+
+"nopt@2 || 3", nopt@~3.0.1, nopt@~3.0.6:
+  version "3.0.6"
+  resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9"
+  dependencies:
+    abbrev "1"
+
+nopt@~1.0.10:
+  version "1.0.10"
+  resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee"
+  dependencies:
+    abbrev "1"
+
+nopt@~2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/nopt/-/nopt-2.0.0.tgz#ca7416f20a5e3f9c3b86180f96295fa3d0b52e0d"
+  dependencies:
+    abbrev "1"
+
+noptify@~0.0.3:
+  version "0.0.3"
+  resolved "https://registry.yarnpkg.com/noptify/-/noptify-0.0.3.tgz#58f654a73d9753df0c51d9686dc92104a67f4bbb"
+  dependencies:
+    nopt "~2.0.0"
+
+normalize-package-data@^2.3.2, normalize-package-data@^2.3.4:
+  version "2.3.5"
+  resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.3.5.tgz#8d924f142960e1777e7ffe170543631cc7cb02df"
+  dependencies:
+    hosted-git-info "^2.1.4"
+    is-builtin-module "^1.0.0"
+    semver "2 || 3 || 4 || 5"
+    validate-npm-package-license "^3.0.1"
+
+normalize-path@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.0.1.tgz#47886ac1662760d4261b7d979d241709d3ce3f7a"
+
+normalize-range@^0.1.2:
+  version "0.1.2"
+  resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942"
+
+normalize-url@^1.4.0:
+  version "1.9.0"
+  resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.0.tgz#c2bb50035edee62cd81edb2d45da68dc25e3423e"
+  dependencies:
+    object-assign "^4.0.1"
+    prepend-http "^1.0.0"
+    query-string "^4.1.0"
+    sort-keys "^1.0.0"
+
+"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0, npmlog@^4.0.1:
+  version "4.0.2"
+  resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.0.2.tgz#d03950e0e78ce1527ba26d2a7592e9348ac3e75f"
+  dependencies:
+    are-we-there-yet "~1.1.2"
+    console-control-strings "~1.1.0"
+    gauge "~2.7.1"
+    set-blocking "~2.0.0"
+
+nsdeclare@0.1.0:
+  version "0.1.0"
+  resolved "https://registry.yarnpkg.com/nsdeclare/-/nsdeclare-0.1.0.tgz#10daa153642382d3cf2c01a916f4eb20a128b19f"
+
+nth-check@~1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.1.tgz#9929acdf628fc2c41098deab82ac580cf149aae4"
+  dependencies:
+    boolbase "~1.0.0"
+
+num2fraction@^1.2.2:
+  version "1.2.2"
+  resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede"
+
+number-is-nan@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
+
+oauth-sign@~0.8.1:
+  version "0.8.2"
+  resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43"
+
+object-assign@^4.0.1, object-assign@^4.1.0:
+  version "4.1.1"
+  resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
+
+object.omit@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa"
+  dependencies:
+    for-own "^0.1.4"
+    is-extendable "^0.1.1"
+
+object.pick@^1.1.1, object.pick@^1.1.2:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.2.0.tgz#b5392bee9782da6d9fb7d6afaf539779f1234c2b"
+  dependencies:
+    isobject "^2.1.0"
+
+on-finished@~2.3.0:
+  version "2.3.0"
+  resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947"
+  dependencies:
+    ee-first "1.1.1"
+
+on-headers@~1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.1.tgz#928f5d0f470d49342651ea6794b0857c100693f7"
+
+once@^1.3.0:
+  version "1.4.0"
+  resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
+  dependencies:
+    wrappy "1"
+
+once@~1.3.3:
+  version "1.3.3"
+  resolved "https://registry.yarnpkg.com/once/-/once-1.3.3.tgz#b2e261557ce4c314ec8304f3fa82663e4297ca20"
+  dependencies:
+    wrappy "1"
+
+onetime@^1.0.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789"
+
+opn@^1.0.0:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/opn/-/opn-1.0.2.tgz#b909643346d00a1abc977a8b96f3ce3c53d5cf5f"
+
+optimist@^0.6.1:
+  version "0.6.1"
+  resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686"
+  dependencies:
+    minimist "~0.0.1"
+    wordwrap "~0.0.2"
+
+optimize-css-assets-webpack-plugin@^1.3.1:
+  version "1.3.1"
+  resolved "https://registry.yarnpkg.com/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-1.3.1.tgz#e2f198cdf63fe92ac2e3e321f1ade8faf1b59179"
+  dependencies:
+    cssnano "^3.4.0"
+    underscore "^1.8.3"
+    webpack-sources "^0.1.0"
+
+os-browserify@^0.2.0:
+  version "0.2.1"
+  resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.2.1.tgz#63fc4ccee5d2d7763d26bbf8601078e6c2e0044f"
+
+os-homedir@^1.0.0:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
+
+os-locale@^1.4.0:
+  version "1.4.0"
+  resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9"
+  dependencies:
+    lcid "^1.0.0"
+
+os-tmpdir@^1.0.0, os-tmpdir@~1.0.1:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
+
+osenv@0, osenv@^0.1.0:
+  version "0.1.4"
+  resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.4.tgz#42fe6d5953df06c8064be6f176c3d05aaaa34644"
+  dependencies:
+    os-homedir "^1.0.0"
+    os-tmpdir "^1.0.0"
+
+package-json@^2.0.0:
+  version "2.4.0"
+  resolved "https://registry.yarnpkg.com/package-json/-/package-json-2.4.0.tgz#0d15bd67d1cbbddbb2ca222ff2edb86bcb31a8bb"
+  dependencies:
+    got "^5.0.0"
+    registry-auth-token "^3.0.1"
+    registry-url "^3.0.3"
+    semver "^5.1.0"
+
+pako@~0.2.0:
+  version "0.2.9"
+  resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75"
+
+parse-asn1@^5.0.0:
+  version "5.0.0"
+  resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.0.0.tgz#35060f6d5015d37628c770f4e091a0b5a278bc23"
+  dependencies:
+    asn1.js "^4.0.0"
+    browserify-aes "^1.0.0"
+    create-hash "^1.1.0"
+    evp_bytestokey "^1.0.0"
+    pbkdf2 "^3.0.3"
+
+parse-glob@^3.0.4:
+  version "3.0.4"
+  resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c"
+  dependencies:
+    glob-base "^0.3.0"
+    is-dotfile "^1.0.0"
+    is-extglob "^1.0.0"
+    is-glob "^2.0.0"
+
+parse-json@^2.1.0, parse-json@^2.2.0:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9"
+  dependencies:
+    error-ex "^1.2.0"
+
+parseurl@~1.3.1:
+  version "1.3.1"
+  resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.1.tgz#c8ab8c9223ba34888aa64a297b28853bec18da56"
+
+path-browserify@0.0.0:
+  version "0.0.0"
+  resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a"
+
+path-exists@^2.0.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b"
+  dependencies:
+    pinkie-promise "^2.0.0"
+
+path-is-absolute@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
+
+path-parse@^1.0.5:
+  version "1.0.5"
+  resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1"
+
+path-type@^1.0.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441"
+  dependencies:
+    graceful-fs "^4.1.2"
+    pify "^2.0.0"
+    pinkie-promise "^2.0.0"
+
+pbkdf2@^3.0.3:
+  version "3.0.9"
+  resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.9.tgz#f2c4b25a600058b3c3773c086c37dbbee1ffe693"
+  dependencies:
+    create-hmac "^1.1.2"
+
+pify@^2.0.0:
+  version "2.3.0"
+  resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
+
+pinkie-promise@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
+  dependencies:
+    pinkie "^2.0.0"
+
+pinkie@^2.0.0:
+  version "2.0.4"
+  resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
+
+popsicle-proxy-agent@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/popsicle-proxy-agent/-/popsicle-proxy-agent-3.0.0.tgz#b9133c55d945759ab7ee61b7711364620d3aeadc"
+  dependencies:
+    http-proxy-agent "^1.0.0"
+    https-proxy-agent "^1.0.0"
+
+popsicle-retry@^3.2.0:
+  version "3.2.1"
+  resolved "https://registry.yarnpkg.com/popsicle-retry/-/popsicle-retry-3.2.1.tgz#e06e866533b42a7a123eb330cbe63a7cebcba10c"
+  dependencies:
+    any-promise "^1.1.0"
+    xtend "^4.0.1"
+
+popsicle-rewrite@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/popsicle-rewrite/-/popsicle-rewrite-1.0.0.tgz#1dd4e8ea9c3182351fb820f87934d992f7fb9007"
+
+popsicle-status@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/popsicle-status/-/popsicle-status-2.0.0.tgz#54e12722376efba0a353abdf53cbf1ce0e852efa"
+
+popsicle@^9.0.0:
+  version "9.1.0"
+  resolved "https://registry.yarnpkg.com/popsicle/-/popsicle-9.1.0.tgz#4f900f38d57a574ec170eda40496e364082bff66"
+  dependencies:
+    concat-stream "^1.4.7"
+    form-data "^2.0.0"
+    make-error-cause "^1.2.1"
+    tough-cookie "^2.0.0"
+
+portscanner@^1.0.0:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/portscanner/-/portscanner-1.2.0.tgz#b14bbda257d14c310fa9cc09682af02d40961802"
+  dependencies:
+    async "1.5.2"
+
+postcss-calc@^5.2.0:
+  version "5.3.1"
+  resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-5.3.1.tgz#77bae7ca928ad85716e2fda42f261bf7c1d65b5e"
+  dependencies:
+    postcss "^5.0.2"
+    postcss-message-helpers "^2.0.0"
+    reduce-css-calc "^1.2.6"
+
+postcss-colormin@^2.1.8:
+  version "2.2.2"
+  resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-2.2.2.tgz#6631417d5f0e909a3d7ec26b24c8a8d1e4f96e4b"
+  dependencies:
+    colormin "^1.0.5"
+    postcss "^5.0.13"
+    postcss-value-parser "^3.2.3"
+
+postcss-convert-values@^2.3.4:
+  version "2.6.1"
+  resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz#bbd8593c5c1fd2e3d1c322bb925dcae8dae4d62d"
+  dependencies:
+    postcss "^5.0.11"
+    postcss-value-parser "^3.1.2"
+
+postcss-discard-comments@^2.0.4:
+  version "2.0.4"
+  resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz#befe89fafd5b3dace5ccce51b76b81514be00e3d"
+  dependencies:
+    postcss "^5.0.14"
+
+postcss-discard-duplicates@^2.0.1:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz#b9abf27b88ac188158a5eb12abcae20263b91932"
+  dependencies:
+    postcss "^5.0.4"
+
+postcss-discard-empty@^2.0.1:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz#d2b4bd9d5ced5ebd8dcade7640c7d7cd7f4f92b5"
+  dependencies:
+    postcss "^5.0.14"
+
+postcss-discard-overridden@^0.1.1:
+  version "0.1.1"
+  resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz#8b1eaf554f686fb288cd874c55667b0aa3668d58"
+  dependencies:
+    postcss "^5.0.16"
+
+postcss-discard-unused@^2.2.1:
+  version "2.2.3"
+  resolved "https://registry.yarnpkg.com/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz#bce30b2cc591ffc634322b5fb3464b6d934f4433"
+  dependencies:
+    postcss "^5.0.14"
+    uniqs "^2.0.0"
+
+postcss-filter-plugins@^2.0.0:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/postcss-filter-plugins/-/postcss-filter-plugins-2.0.2.tgz#6d85862534d735ac420e4a85806e1f5d4286d84c"
+  dependencies:
+    postcss "^5.0.4"
+    uniqid "^4.0.0"
+
+postcss-merge-idents@^2.1.5:
+  version "2.1.7"
+  resolved "https://registry.yarnpkg.com/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz#4c5530313c08e1d5b3bbf3d2bbc747e278eea270"
+  dependencies:
+    has "^1.0.1"
+    postcss "^5.0.10"
+    postcss-value-parser "^3.1.1"
+
+postcss-merge-longhand@^2.0.1:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz#23d90cd127b0a77994915332739034a1a4f3d658"
+  dependencies:
+    postcss "^5.0.4"
+
+postcss-merge-rules@^2.0.3:
+  version "2.1.2"
+  resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz#d1df5dfaa7b1acc3be553f0e9e10e87c61b5f721"
+  dependencies:
+    browserslist "^1.5.2"
+    caniuse-api "^1.5.2"
+    postcss "^5.0.4"
+    postcss-selector-parser "^2.2.2"
+    vendors "^1.0.0"
+
+postcss-message-helpers@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz#a4f2f4fab6e4fe002f0aed000478cdf52f9ba60e"
+
+postcss-minify-font-values@^1.0.2:
+  version "1.0.5"
+  resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz#4b58edb56641eba7c8474ab3526cafd7bbdecb69"
+  dependencies:
+    object-assign "^4.0.1"
+    postcss "^5.0.4"
+    postcss-value-parser "^3.0.2"
+
+postcss-minify-gradients@^1.0.1:
+  version "1.0.5"
+  resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz#5dbda11373703f83cfb4a3ea3881d8d75ff5e6e1"
+  dependencies:
+    postcss "^5.0.12"
+    postcss-value-parser "^3.3.0"
+
+postcss-minify-params@^1.0.4:
+  version "1.2.2"
+  resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz#ad2ce071373b943b3d930a3fa59a358c28d6f1f3"
+  dependencies:
+    alphanum-sort "^1.0.1"
+    postcss "^5.0.2"
+    postcss-value-parser "^3.0.2"
+    uniqs "^2.0.0"
+
+postcss-minify-selectors@^2.0.4:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz#b2c6a98c0072cf91b932d1a496508114311735bf"
+  dependencies:
+    alphanum-sort "^1.0.2"
+    has "^1.0.1"
+    postcss "^5.0.14"
+    postcss-selector-parser "^2.0.0"
+
+postcss-modules-extract-imports@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.0.1.tgz#8fb3fef9a6dd0420d3f6d4353cf1ff73f2b2a341"
+  dependencies:
+    postcss "^5.0.4"
+
+postcss-modules-local-by-default@^1.0.1:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.1.1.tgz#29a10673fa37d19251265ca2ba3150d9040eb4ce"
+  dependencies:
+    css-selector-tokenizer "^0.6.0"
+    postcss "^5.0.4"
+
+postcss-modules-scope@^1.0.0:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-1.0.2.tgz#ff977395e5e06202d7362290b88b1e8cd049de29"
+  dependencies:
+    css-selector-tokenizer "^0.6.0"
+    postcss "^5.0.4"
+
+postcss-modules-values@^1.1.0:
+  version "1.2.2"
+  resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-1.2.2.tgz#f0e7d476fe1ed88c5e4c7f97533a3e772ad94ca1"
+  dependencies:
+    icss-replace-symbols "^1.0.2"
+    postcss "^5.0.14"
+
+postcss-normalize-charset@^1.1.0:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz#ef9ee71212d7fe759c78ed162f61ed62b5cb93f1"
+  dependencies:
+    postcss "^5.0.5"
+
+postcss-normalize-url@^3.0.7:
+  version "3.0.8"
+  resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz#108f74b3f2fcdaf891a2ffa3ea4592279fc78222"
+  dependencies:
+    is-absolute-url "^2.0.0"
+    normalize-url "^1.4.0"
+    postcss "^5.0.14"
+    postcss-value-parser "^3.2.3"
+
+postcss-ordered-values@^2.1.0:
+  version "2.2.3"
+  resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz#eec6c2a67b6c412a8db2042e77fe8da43f95c11d"
+  dependencies:
+    postcss "^5.0.4"
+    postcss-value-parser "^3.0.1"
+
+postcss-reduce-idents@^2.2.2:
+  version "2.4.0"
+  resolved "https://registry.yarnpkg.com/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz#c2c6d20cc958284f6abfbe63f7609bf409059ad3"
+  dependencies:
+    postcss "^5.0.4"
+    postcss-value-parser "^3.0.2"
+
+postcss-reduce-initial@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz#68f80695f045d08263a879ad240df8dd64f644ea"
+  dependencies:
+    postcss "^5.0.4"
+
+postcss-reduce-transforms@^1.0.3:
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz#ff76f4d8212437b31c298a42d2e1444025771ae1"
+  dependencies:
+    has "^1.0.1"
+    postcss "^5.0.8"
+    postcss-value-parser "^3.0.1"
+
+postcss-selector-parser@^2.0.0, postcss-selector-parser@^2.2.2:
+  version "2.2.3"
+  resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz#f9437788606c3c9acee16ffe8d8b16297f27bb90"
+  dependencies:
+    flatten "^1.0.2"
+    indexes-of "^1.0.1"
+    uniq "^1.0.1"
+
+postcss-svgo@^2.1.1:
+  version "2.1.6"
+  resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-2.1.6.tgz#b6df18aa613b666e133f08adb5219c2684ac108d"
+  dependencies:
+    is-svg "^2.0.0"
+    postcss "^5.0.14"
+    postcss-value-parser "^3.2.3"
+    svgo "^0.7.0"
+
+postcss-unique-selectors@^2.0.2:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz#981d57d29ddcb33e7b1dfe1fd43b8649f933ca1d"
+  dependencies:
+    alphanum-sort "^1.0.1"
+    postcss "^5.0.4"
+    uniqs "^2.0.0"
+
+postcss-value-parser@^3.0.1, postcss-value-parser@^3.0.2, postcss-value-parser@^3.1.1, postcss-value-parser@^3.1.2, postcss-value-parser@^3.2.3, postcss-value-parser@^3.3.0:
+  version "3.3.0"
+  resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz#87f38f9f18f774a4ab4c8a232f5c5ce8872a9d15"
+
+postcss-zindex@^2.0.1:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/postcss-zindex/-/postcss-zindex-2.2.0.tgz#d2109ddc055b91af67fc4cb3b025946639d2af22"
+  dependencies:
+    has "^1.0.1"
+    postcss "^5.0.4"
+    uniqs "^2.0.0"
+
+postcss@^5.0.10, postcss@^5.0.11, postcss@^5.0.12, postcss@^5.0.13, postcss@^5.0.14, postcss@^5.0.16, postcss@^5.0.2, postcss@^5.0.4, postcss@^5.0.5, postcss@^5.0.6, postcss@^5.0.8, postcss@^5.2.15:
+  version "5.2.15"
+  resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.15.tgz#a9e8685e50e06cc5b3fdea5297273246c26f5b30"
+  dependencies:
+    chalk "^1.1.3"
+    js-base64 "^2.1.9"
+    source-map "^0.5.6"
+    supports-color "^3.2.3"
+
+prepend-http@^1.0.0, prepend-http@^1.0.1:
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc"
+
+preserve@^0.2.0:
+  version "0.2.0"
+  resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b"
+
+pretty-bytes@^1.0.0:
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-1.0.4.tgz#0a22e8210609ad35542f8c8d5d2159aff0751c84"
+  dependencies:
+    get-stdin "^4.0.1"
+    meow "^3.1.0"
+
+pretty-bytes@^3.0.0:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-3.0.1.tgz#27d0008d778063a0b4811bb35c79f1bd5d5fbccf"
+  dependencies:
+    number-is-nan "^1.0.0"
+
+process-nextick-args@~1.0.6:
+  version "1.0.7"
+  resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3"
+
+process@^0.11.0:
+  version "0.11.9"
+  resolved "https://registry.yarnpkg.com/process/-/process-0.11.9.tgz#7bd5ad21aa6253e7da8682264f1e11d11c0318c1"
+
+progress@^1.1.8:
+  version "1.1.8"
+  resolved "https://registry.yarnpkg.com/progress/-/progress-1.1.8.tgz#e260c78f6161cdd9b0e56cc3e0a85de17c7a57be"
+
+promise-finally@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/promise-finally/-/promise-finally-3.0.0.tgz#ddd5d0f895432b1206ceb8da1275064d18e7aa23"
+
+promise@^7.1.1:
+  version "7.1.1"
+  resolved "https://registry.yarnpkg.com/promise/-/promise-7.1.1.tgz#489654c692616b8aa55b0724fa809bb7db49c5bf"
+  dependencies:
+    asap "~2.0.3"
+
+proto-list@~1.2.1:
+  version "1.2.4"
+  resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849"
+
+prr@~0.0.0:
+  version "0.0.0"
+  resolved "https://registry.yarnpkg.com/prr/-/prr-0.0.0.tgz#1a84b85908325501411853d0081ee3fa86e2926a"
+
+pseudomap@^1.0.1:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3"
+
+public-encrypt@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.0.tgz#39f699f3a46560dd5ebacbca693caf7c65c18cc6"
+  dependencies:
+    bn.js "^4.1.0"
+    browserify-rsa "^4.0.0"
+    create-hash "^1.1.0"
+    parse-asn1 "^5.0.0"
+    randombytes "^2.0.1"
+
+punycode@1.3.2:
+  version "1.3.2"
+  resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d"
+
+punycode@^1.2.4, punycode@^1.4.1:
+  version "1.4.1"
+  resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
+
+q@^1.1.2:
+  version "1.4.1"
+  resolved "https://registry.yarnpkg.com/q/-/q-1.4.1.tgz#55705bcd93c5f3673530c2c2cbc0c2b3addc286e"
+
+qs@~0.5.2:
+  version "0.5.6"
+  resolved "https://registry.yarnpkg.com/qs/-/qs-0.5.6.tgz#31b1ad058567651c526921506b9a8793911a0384"
+
+qs@~6.3.0:
+  version "6.3.1"
+  resolved "https://registry.yarnpkg.com/qs/-/qs-6.3.1.tgz#918c0b3bcd36679772baf135b1acb4c1651ed79d"
+
+query-string@^4.1.0:
+  version "4.3.2"
+  resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.2.tgz#ec0fd765f58a50031a3968c2431386f8947a5cdd"
+  dependencies:
+    object-assign "^4.1.0"
+    strict-uri-encode "^1.0.0"
+
+querystring-es3@^0.2.0:
+  version "0.2.1"
+  resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73"
+
+querystring@0.2.0:
+  version "0.2.0"
+  resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620"
+
+randomatic@^1.1.3:
+  version "1.1.6"
+  resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.6.tgz#110dcabff397e9dcff7c0789ccc0a49adf1ec5bb"
+  dependencies:
+    is-number "^2.0.2"
+    kind-of "^3.0.2"
+
+randombytes@^2.0.0, randombytes@^2.0.1:
+  version "2.0.3"
+  resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.0.3.tgz#674c99760901c3c4112771a31e521dc349cc09ec"
+
+range-parser@~1.2.0:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e"
+
+rc@^1.0.1, rc@^1.1.5, rc@^1.1.6, rc@~1.1.6:
+  version "1.1.7"
+  resolved "https://registry.yarnpkg.com/rc/-/rc-1.1.7.tgz#c5ea564bb07aff9fd3a5b32e906c1d3a65940fea"
+  dependencies:
+    deep-extend "~0.4.0"
+    ini "~1.3.0"
+    minimist "^1.2.0"
+    strip-json-comments "~2.0.1"
+
+read-all-stream@^3.0.0:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/read-all-stream/-/read-all-stream-3.1.0.tgz#35c3e177f2078ef789ee4bfafa4373074eaef4fa"
+  dependencies:
+    pinkie-promise "^2.0.0"
+    readable-stream "^2.0.0"
+
+read-pkg-up@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02"
+  dependencies:
+    find-up "^1.0.0"
+    read-pkg "^1.0.0"
+
+read-pkg@^1.0.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28"
+  dependencies:
+    load-json-file "^1.0.0"
+    normalize-package-data "^2.3.2"
+    path-type "^1.0.0"
+
+readable-stream@1.1:
+  version "1.1.13"
+  resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.13.tgz#f6eef764f514c89e2b9e23146a75ba106756d23e"
+  dependencies:
+    core-util-is "~1.0.0"
+    inherits "~2.0.1"
+    isarray "0.0.1"
+    string_decoder "~0.10.x"
+
+readable-stream@^2.0.0, "readable-stream@^2.0.0 || ^1.1.13", readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.1.0, readable-stream@^2.2.2:
+  version "2.2.3"
+  resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.3.tgz#9cf49463985df016c8ae8813097a9293a9b33729"
+  dependencies:
+    buffer-shims "^1.0.0"
+    core-util-is "~1.0.0"
+    inherits "~2.0.1"
+    isarray "~1.0.0"
+    process-nextick-args "~1.0.6"
+    string_decoder "~0.10.x"
+    util-deprecate "~1.0.1"
+
+readable-stream@~2.1.4:
+  version "2.1.5"
+  resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.1.5.tgz#66fa8b720e1438b364681f2ad1a63c618448c9d0"
+  dependencies:
+    buffer-shims "^1.0.0"
+    core-util-is "~1.0.0"
+    inherits "~2.0.1"
+    isarray "~1.0.0"
+    process-nextick-args "~1.0.6"
+    string_decoder "~0.10.x"
+    util-deprecate "~1.0.1"
+
+readdirp@^2.0.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78"
+  dependencies:
+    graceful-fs "^4.1.2"
+    minimatch "^3.0.2"
+    readable-stream "^2.0.2"
+    set-immediate-shim "^1.0.1"
+
+rechoir@^0.6.2:
+  version "0.6.2"
+  resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384"
+  dependencies:
+    resolve "^1.1.6"
+
+redent@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde"
+  dependencies:
+    indent-string "^2.1.0"
+    strip-indent "^1.0.1"
+
+reduce-css-calc@^1.2.6:
+  version "1.3.0"
+  resolved "https://registry.yarnpkg.com/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz#747c914e049614a4c9cfbba629871ad1d2927716"
+  dependencies:
+    balanced-match "^0.4.2"
+    math-expression-evaluator "^1.2.14"
+    reduce-function-call "^1.0.1"
+
+reduce-function-call@^1.0.1:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/reduce-function-call/-/reduce-function-call-1.0.2.tgz#5a200bf92e0e37751752fe45b0ab330fd4b6be99"
+  dependencies:
+    balanced-match "^0.4.2"
+
+regenerate@^1.2.1:
+  version "1.3.2"
+  resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.2.tgz#d1941c67bad437e1be76433add5b385f95b19260"
+
+regex-cache@^0.4.2:
+  version "0.4.3"
+  resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.3.tgz#9b1a6c35d4d0dfcef5711ae651e8e9d3d7114145"
+  dependencies:
+    is-equal-shallow "^0.1.3"
+    is-primitive "^2.0.0"
+
+regexpu-core@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-1.0.0.tgz#86a763f58ee4d7c2f6b102e4764050de7ed90c6b"
+  dependencies:
+    regenerate "^1.2.1"
+    regjsgen "^0.2.0"
+    regjsparser "^0.1.4"
+
+registry-auth-token@^3.0.1:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.1.0.tgz#997c08256e0c7999837b90e944db39d8a790276b"
+  dependencies:
+    rc "^1.1.6"
+
+registry-url@^3.0.3:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942"
+  dependencies:
+    rc "^1.0.1"
+
+regjsgen@^0.2.0:
+  version "0.2.0"
+  resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7"
+
+regjsparser@^0.1.4:
+  version "0.1.5"
+  resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c"
+  dependencies:
+    jsesc "~0.5.0"
+
+repeat-element@^1.1.2:
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a"
+
+repeat-string@^1.5.2:
+  version "1.6.1"
+  resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
+
+repeating@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda"
+  dependencies:
+    is-finite "^1.0.0"
+
+request@2, request@^2.61.0, request@^2.72.0, request@^2.79.0:
+  version "2.79.0"
+  resolved "https://registry.yarnpkg.com/request/-/request-2.79.0.tgz#4dfe5bf6be8b8cdc37fcf93e04b65577722710de"
+  dependencies:
+    aws-sign2 "~0.6.0"
+    aws4 "^1.2.1"
+    caseless "~0.11.0"
+    combined-stream "~1.0.5"
+    extend "~3.0.0"
+    forever-agent "~0.6.1"
+    form-data "~2.1.1"
+    har-validator "~2.0.6"
+    hawk "~3.1.3"
+    http-signature "~1.1.0"
+    is-typedarray "~1.0.0"
+    isstream "~0.1.2"
+    json-stringify-safe "~5.0.1"
+    mime-types "~2.1.7"
+    oauth-sign "~0.8.1"
+    qs "~6.3.0"
+    stringstream "~0.0.4"
+    tough-cookie "~2.3.0"
+    tunnel-agent "~0.4.1"
+    uuid "^3.0.0"
+
+require-directory@^2.1.1:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
+
+require-main-filename@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1"
+
+resolve@^1.1.6:
+  version "1.3.1"
+  resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.3.1.tgz#5d0a1632609b6b00a22284293db1d5d973676314"
+  dependencies:
+    path-parse "^1.0.5"
+
+restore-cursor@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541"
+  dependencies:
+    exit-hook "^1.0.0"
+    onetime "^1.0.0"
+
+right-align@^0.1.1:
+  version "0.1.3"
+  resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef"
+  dependencies:
+    align-text "^0.1.1"
+
+rimraf@2, rimraf@^2.4.4:
+  version "2.6.1"
+  resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.1.tgz#c2338ec643df7a1b7fe5c54fa86f57428a55f33d"
+  dependencies:
+    glob "^7.0.5"
+
+rimraf@^2.2.1, rimraf@~2.2.8:
+  version "2.2.8"
+  resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.2.8.tgz#e439be2aaee327321952730f99a8929e4fc50582"
+
+rimraf@~2.5.1, rimraf@~2.5.4:
+  version "2.5.4"
+  resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.5.4.tgz#96800093cbf1a0c86bd95b4625467535c29dfa04"
+  dependencies:
+    glob "^7.0.5"
+
+ripemd160@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-1.0.1.tgz#93a4bbd4942bc574b69a8fa57c71de10ecca7d6e"
+
+sass-graph@^2.1.1:
+  version "2.1.2"
+  resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-2.1.2.tgz#965104be23e8103cb7e5f710df65935b317da57b"
+  dependencies:
+    glob "^7.0.0"
+    lodash "^4.0.0"
+    yargs "^4.7.1"
+
+sax@~1.2.1:
+  version "1.2.2"
+  resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.2.tgz#fd8631a23bc7826bef5d871bdb87378c95647828"
+
+semver-diff@^2.0.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36"
+  dependencies:
+    semver "^5.0.3"
+
+"semver@2 || 3 || 4 || 5", "semver@2.x || 3.x || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@~5.3.0:
+  version "5.3.0"
+  resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f"
+
+semver@~5.0.1:
+  version "5.0.3"
+  resolved "https://registry.yarnpkg.com/semver/-/semver-5.0.3.tgz#77466de589cd5d3c95f138aa78bc569a3cb5d27a"
+
+send@0.15.0:
+  version "0.15.0"
+  resolved "https://registry.yarnpkg.com/send/-/send-0.15.0.tgz#f0185d6466fa76424b866f3d533e2d19dd0aaa39"
+  dependencies:
+    debug "2.6.1"
+    depd "~1.1.0"
+    destroy "~1.0.4"
+    encodeurl "~1.0.1"
+    escape-html "~1.0.3"
+    etag "~1.8.0"
+    fresh "0.5.0"
+    http-errors "~1.6.1"
+    mime "1.3.4"
+    ms "0.7.2"
+    on-finished "~2.3.0"
+    range-parser "~1.2.0"
+    statuses "~1.3.1"
+
+serve-index@^1.7.1:
+  version "1.8.0"
+  resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.8.0.tgz#7c5d96c13fb131101f93c1c5774f8516a1e78d3b"
+  dependencies:
+    accepts "~1.3.3"
+    batch "0.5.3"
+    debug "~2.2.0"
+    escape-html "~1.0.3"
+    http-errors "~1.5.0"
+    mime-types "~2.1.11"
+    parseurl "~1.3.1"
+
+serve-static@^1.10.0:
+  version "1.12.0"
+  resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.12.0.tgz#150eb8aa262c2dd1924e960373145446c069dad6"
+  dependencies:
+    encodeurl "~1.0.1"
+    escape-html "~1.0.3"
+    parseurl "~1.3.1"
+    send "0.15.0"
+
+set-blocking@^2.0.0, set-blocking@~2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
+
+set-immediate-shim@^1.0.0, set-immediate-shim@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61"
+
+setimmediate@^1.0.4:
+  version "1.0.5"
+  resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285"
+
+setprototypeof@1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.2.tgz#81a552141ec104b88e89ce383103ad5c66564d08"
+
+setprototypeof@1.0.3:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.3.tgz#66567e37043eeb4f04d91bd658c0cbefb55b8e04"
+
+sha.js@^2.3.6:
+  version "2.4.8"
+  resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.8.tgz#37068c2c476b6baf402d14a49c67f597921f634f"
+  dependencies:
+    inherits "^2.0.1"
+
+shelljs@^0.7.0:
+  version "0.7.6"
+  resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.6.tgz#379cccfb56b91c8601e4793356eb5382924de9ad"
+  dependencies:
+    glob "^7.0.0"
+    interpret "^1.0.0"
+    rechoir "^0.6.2"
+
+sigmund@~1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/sigmund/-/sigmund-1.0.1.tgz#3ff21f198cad2175f9f3b781853fd94d0d19b590"
+
+signal-exit@^3.0.0:
+  version "3.0.2"
+  resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
+
+slice-ansi@0.0.4:
+  version "0.0.4"
+  resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35"
+
+slide@^1.1.5:
+  version "1.1.6"
+  resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707"
+
+sntp@1.x.x:
+  version "1.0.9"
+  resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198"
+  dependencies:
+    hoek "2.x.x"
+
+sort-keys@^1.0.0:
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad"
+  dependencies:
+    is-plain-obj "^1.0.0"
+
+source-list-map@^0.1.7, source-list-map@~0.1.7:
+  version "0.1.8"
+  resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-0.1.8.tgz#c550b2ab5427f6b3f21f5afead88c4f5587b2106"
+
+source-list-map@^1.1.1:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-1.1.1.tgz#1a33ac210ca144d1e561f906ebccab5669ff4cb4"
+
+source-map@0.4.x, source-map@^0.4.4:
+  version "0.4.4"
+  resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b"
+  dependencies:
+    amdefine ">=0.0.4"
+
+source-map@^0.3.0:
+  version "0.3.0"
+  resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.3.0.tgz#8586fb9a5a005e5b501e21cd18b6f21b457ad1f9"
+  dependencies:
+    amdefine ">=0.0.4"
+
+source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.1, source-map@~0.5.3:
+  version "0.5.6"
+  resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412"
+
+spdx-correct@~1.0.0:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40"
+  dependencies:
+    spdx-license-ids "^1.0.2"
+
+spdx-expression-parse@~1.0.0:
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz#9bdf2f20e1f40ed447fbe273266191fced51626c"
+
+spdx-license-ids@^1.0.2:
+  version "1.2.2"
+  resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57"
+
+spectacle-docs@^0.8.2:
+  version "0.8.2"
+  resolved "https://registry.yarnpkg.com/spectacle-docs/-/spectacle-docs-0.8.2.tgz#e34de53f0189d45c89c9f7693eaa3c5bc2944e44"
+  dependencies:
+    bluebird "^3.4.7"
+    cheerio "^0.19.0"
+    clarify "^1.0.5"
+    commander "*"
+    grunt "^0.4.5"
+    grunt-compile-handlebars "^2.0.0"
+    grunt-contrib-clean "^0.7.0"
+    grunt-contrib-concat "^0.5.1"
+    grunt-contrib-connect "^0.11.2"
+    grunt-contrib-copy "^0.8.2"
+    grunt-contrib-cssmin "^0.14.0"
+    grunt-contrib-handlebars "^0.11.0"
+    grunt-contrib-uglify "^0.11.0"
+    grunt-contrib-watch "^0.6.1"
+    grunt-prettify "^0.4.0"
+    grunt-sass "^2.0.0"
+    handlebars "^4.0.5"
+    highlight.js "^9.1.0"
+    lodash "^4.2.1"
+    marked "^0.3.5"
+    tmp "0.0.31"
+    trace "^1.1.0"
+
+sprintf-js@~1.0.2:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
+
+sshpk@^1.7.0:
+  version "1.10.2"
+  resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.10.2.tgz#d5a804ce22695515638e798dbe23273de070a5fa"
+  dependencies:
+    asn1 "~0.2.3"
+    assert-plus "^1.0.0"
+    dashdash "^1.12.0"
+    getpass "^0.1.1"
+  optionalDependencies:
+    bcrypt-pbkdf "^1.0.0"
+    ecc-jsbn "~0.1.1"
+    jodid25519 "^1.0.0"
+    jsbn "~0.1.0"
+    tweetnacl "~0.14.0"
+
+stack-chain@1.3.x, stack-chain@~1.3.1:
+  version "1.3.7"
+  resolved "https://registry.yarnpkg.com/stack-chain/-/stack-chain-1.3.7.tgz#d192c9ff4ea6a22c94c4dd459171e3f00cea1285"
+
+"statuses@>= 1.3.1 < 2", statuses@~1.3.1:
+  version "1.3.1"
+  resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e"
+
+stdout-stream@^1.4.0:
+  version "1.4.0"
+  resolved "https://registry.yarnpkg.com/stdout-stream/-/stdout-stream-1.4.0.tgz#a2c7c8587e54d9427ea9edb3ac3f2cd522df378b"
+  dependencies:
+    readable-stream "^2.0.1"
+
+stream-browserify@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.1.tgz#66266ee5f9bdb9940a4e4514cafb43bb71e5c9db"
+  dependencies:
+    inherits "~2.0.1"
+    readable-stream "^2.0.2"
+
+stream-http@^2.3.1:
+  version "2.6.3"
+  resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.6.3.tgz#4c3ddbf9635968ea2cfd4e48d43de5def2625ac3"
+  dependencies:
+    builtin-status-codes "^3.0.0"
+    inherits "^2.0.1"
+    readable-stream "^2.1.0"
+    to-arraybuffer "^1.0.0"
+    xtend "^4.0.0"
+
+strict-uri-encode@^1.0.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713"
+
+string-template@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/string-template/-/string-template-1.0.0.tgz#9e9f2233dc00f218718ec379a28a5673ecca8b96"
+
+string-width@^1.0.1, string-width@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
+  dependencies:
+    code-point-at "^1.0.0"
+    is-fullwidth-code-point "^1.0.0"
+    strip-ansi "^3.0.0"
+
+string_decoder@^0.10.25, string_decoder@~0.10.x:
+  version "0.10.31"
+  resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
+
+stringstream@~0.0.4:
+  version "0.0.5"
+  resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878"
+
+strip-ansi@^0.3.0:
+  version "0.3.0"
+  resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-0.3.0.tgz#25f48ea22ca79187f3174a4db8759347bb126220"
+  dependencies:
+    ansi-regex "^0.2.1"
+
+strip-ansi@^3.0.0, strip-ansi@^3.0.1:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
+  dependencies:
+    ansi-regex "^2.0.0"
+
+strip-bom@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e"
+  dependencies:
+    is-utf8 "^0.2.0"
+
+strip-bom@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
+
+strip-indent@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2"
+  dependencies:
+    get-stdin "^4.0.1"
+
+strip-json-comments@~2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
+
+style-loader@^0.13.1:
+  version "0.13.2"
+  resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.13.2.tgz#74533384cf698c7104c7951150b49717adc2f3bb"
+  dependencies:
+    loader-utils "^1.0.2"
+
+supports-color@^0.2.0:
+  version "0.2.0"
+  resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-0.2.0.tgz#d92de2694eb3f67323973d7ae3d8b55b4c22190a"
+
+supports-color@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
+
+supports-color@^3.1.0, supports-color@^3.2.3:
+  version "3.2.3"
+  resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6"
+  dependencies:
+    has-flag "^1.0.0"
+
+svgo@^0.7.0:
+  version "0.7.2"
+  resolved "https://registry.yarnpkg.com/svgo/-/svgo-0.7.2.tgz#9f5772413952135c6fefbf40afe6a4faa88b4bb5"
+  dependencies:
+    coa "~1.0.1"
+    colors "~1.1.2"
+    csso "~2.3.1"
+    js-yaml "~3.7.0"
+    mkdirp "~0.5.1"
+    sax "~1.2.1"
+    whet.extend "~0.9.9"
+
+tapable@^0.2.5, tapable@~0.2.5:
+  version "0.2.6"
+  resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.2.6.tgz#206be8e188860b514425375e6f1ae89bfb01fd8d"
+
+tar-pack@~3.3.0:
+  version "3.3.0"
+  resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.3.0.tgz#30931816418f55afc4d21775afdd6720cee45dae"
+  dependencies:
+    debug "~2.2.0"
+    fstream "~1.0.10"
+    fstream-ignore "~1.0.5"
+    once "~1.3.3"
+    readable-stream "~2.1.4"
+    rimraf "~2.5.1"
+    tar "~2.2.1"
+    uid-number "~0.0.6"
+
+tar@^2.0.0, tar@~2.2.1:
+  version "2.2.1"
+  resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1"
+  dependencies:
+    block-stream "*"
+    fstream "^1.0.2"
+    inherits "2"
+
+thenify@^3.1.0, thenify@^3.2.0:
+  version "3.2.1"
+  resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.2.1.tgz#251fd1c80aff6e5cf57cb179ab1fcb724269bd11"
+  dependencies:
+    any-promise "^1.0.0"
+
+throat@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/throat/-/throat-3.0.0.tgz#e7c64c867cbb3845f10877642f7b60055b8ec0d6"
+
+timed-out@^3.0.0:
+  version "3.1.3"
+  resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-3.1.3.tgz#95860bfcc5c76c277f8f8326fd0f5b2e20eba217"
+
+timers-browserify@^2.0.2:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.2.tgz#ab4883cf597dcd50af211349a00fbca56ac86b86"
+  dependencies:
+    setimmediate "^1.0.4"
+
+tiny-lr-fork@0.0.5:
+  version "0.0.5"
+  resolved "https://registry.yarnpkg.com/tiny-lr-fork/-/tiny-lr-fork-0.0.5.tgz#1e99e1e2a8469b736ab97d97eefa98c71f76ed0a"
+  dependencies:
+    debug "~0.7.0"
+    faye-websocket "~0.4.3"
+    noptify "~0.0.3"
+    qs "~0.5.2"
+
+tmp@0.0.31:
+  version "0.0.31"
+  resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.31.tgz#8f38ab9438e17315e5dbd8b3657e8bfb277ae4a7"
+  dependencies:
+    os-tmpdir "~1.0.1"
+
+to-arraybuffer@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43"
+
+touch@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/touch/-/touch-1.0.0.tgz#449cbe2dbae5a8c8038e30d71fa0ff464947c4de"
+  dependencies:
+    nopt "~1.0.10"
+
+tough-cookie@^2.0.0, tough-cookie@~2.3.0:
+  version "2.3.2"
+  resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.2.tgz#f081f76e4c85720e6c37a5faced737150d84072a"
+  dependencies:
+    punycode "^1.4.1"
+
+trace@^1.1.0:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/trace/-/trace-1.2.0.tgz#fc294988fe9b37bf66e41f5f5cd69413fd28159f"
+  dependencies:
+    stack-chain "~1.3.1"
+
+trim-newlines@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613"
+
+tty-browserify@0.0.0:
+  version "0.0.0"
+  resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6"
+
+tunnel-agent@~0.4.1:
+  version "0.4.3"
+  resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb"
+
+tweetnacl@^0.14.3, tweetnacl@~0.14.0:
+  version "0.14.5"
+  resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
+
+typedarray@^0.0.6:
+  version "0.0.6"
+  resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
+
+typedoc-default-themes@^0.4.2:
+  version "0.4.2"
+  resolved "https://registry.yarnpkg.com/typedoc-default-themes/-/typedoc-default-themes-0.4.2.tgz#640b854fd7ef19e6774496ea7741ec31a0dcaddc"
+
+typedoc@^0.5.7:
+  version "0.5.7"
+  resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.5.7.tgz#f2998dbb5909cb3f02db5fecb85e2a4377189e2a"
+  dependencies:
+    "@types/fs-extra" "0.0.33"
+    "@types/handlebars" "^4.0.31"
+    "@types/highlight.js" "^9.1.8"
+    "@types/lodash" "^4.14.37"
+    "@types/marked" "0.0.28"
+    "@types/minimatch" "^2.0.29"
+    "@types/shelljs" "^0.3.32"
+    fs-extra "^2.0.0"
+    handlebars "4.0.5"
+    highlight.js "^9.0.0"
+    lodash "^4.13.1"
+    marked "^0.3.5"
+    minimatch "^3.0.0"
+    progress "^1.1.8"
+    shelljs "^0.7.0"
+    typedoc-default-themes "^0.4.2"
+    typescript "2.1.6"
+
+typescript@2.1.6, typescript@^2.1.4, typescript@^2.1.6:
+  version "2.1.6"
+  resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.1.6.tgz#40c7e6e9e5da7961b7718b55505f9cac9487a607"
+
+typings-core@^2.2.0:
+  version "2.3.2"
+  resolved "https://registry.yarnpkg.com/typings-core/-/typings-core-2.3.2.tgz#2b45cc64d4e942120002e7fc277ff412bcc48cd0"
+  dependencies:
+    array-uniq "^1.0.2"
+    configstore "^3.0.0"
+    debug "^2.2.0"
+    detect-indent "^5.0.0"
+    graceful-fs "^4.1.2"
+    has "^1.0.1"
+    invariant "^2.2.0"
+    is-absolute "^0.2.3"
+    jspm-config "^0.3.0"
+    listify "^1.0.0"
+    lockfile "^1.0.1"
+    make-error-cause "^1.2.1"
+    mkdirp "^0.5.1"
+    object.pick "^1.1.1"
+    parse-json "^2.2.0"
+    popsicle "^9.0.0"
+    popsicle-proxy-agent "^3.0.0"
+    popsicle-retry "^3.2.0"
+    popsicle-rewrite "^1.0.0"
+    popsicle-status "^2.0.0"
+    promise-finally "^3.0.0"
+    rc "^1.1.5"
+    rimraf "^2.4.4"
+    sort-keys "^1.0.0"
+    string-template "^1.0.0"
+    strip-bom "^3.0.0"
+    thenify "^3.1.0"
+    throat "^3.0.0"
+    touch "^1.0.0"
+    typescript "^2.1.4"
+    xtend "^4.0.0"
+    zip-object "^0.1.0"
+
+typings@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/typings/-/typings-2.1.0.tgz#9cdbe0cd1626ab61b379e06ba4a3910d1d791006"
+  dependencies:
+    archy "^1.0.0"
+    bluebird "^3.1.1"
+    chalk "^1.0.0"
+    cli-truncate "^0.2.1"
+    columnify "^1.5.2"
+    elegant-spinner "^1.0.1"
+    has-unicode "^2.0.1"
+    listify "^1.0.0"
+    log-update "^1.0.2"
+    minimist "^1.2.0"
+    promise-finally "^3.0.0"
+    typings-core "^2.2.0"
+    update-notifier "^1.0.0"
+    wordwrap "^1.0.0"
+    xtend "^4.0.1"
+
+uglify-js@^2.6, uglify-js@^2.7.5, "uglify-js@git://github.com/mishoo/UglifyJS2#harmony":
+  version "2.8.22"
+  resolved "git://github.com/mishoo/UglifyJS2#278577f3cb75e72320564805ee91be63e5f9c806"
+  dependencies:
+    source-map "~0.5.1"
+    yargs "~3.10.0"
+  optionalDependencies:
+    uglify-to-browserify "~1.0.0"
+
+uglify-js@~2.6.0:
+  version "2.6.4"
+  resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.6.4.tgz#65ea2fb3059c9394692f15fed87c2b36c16b9adf"
+  dependencies:
+    async "~0.2.6"
+    source-map "~0.5.1"
+    uglify-to-browserify "~1.0.0"
+    yargs "~3.10.0"
+
+uglify-to-browserify@~1.0.0:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7"
+
+uglifyjs-webpack-plugin@^0.4.3:
+  version "0.4.3"
+  resolved "https://registry.yarnpkg.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.3.tgz#a672a7d6655f94dfa7e09670d48030f37cc93267"
+  dependencies:
+    source-map "^0.5.6"
+    webpack-sources "^0.2.3"
+
+uid-number@~0.0.6:
+  version "0.0.6"
+  resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81"
+
+unc-path-regex@^0.1.0:
+  version "0.1.2"
+  resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa"
+
+underscore.string@~2.2.1:
+  version "2.2.1"
+  resolved "https://registry.yarnpkg.com/underscore.string/-/underscore.string-2.2.1.tgz#d7c0fa2af5d5a1a67f4253daee98132e733f0f19"
+
+underscore.string@~2.3.3:
+  version "2.3.3"
+  resolved "https://registry.yarnpkg.com/underscore.string/-/underscore.string-2.3.3.tgz#71c08bf6b428b1133f37e78fa3a21c82f7329b0d"
+
+underscore.string@~2.4.0:
+  version "2.4.0"
+  resolved "https://registry.yarnpkg.com/underscore.string/-/underscore.string-2.4.0.tgz#8cdd8fbac4e2d2ea1e7e2e8097c42f442280f85b"
+
+underscore@^1.8.3:
+  version "1.8.3"
+  resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.8.3.tgz#4f3fb53b106e6097fcf9cb4109f2a5e9bdfa5022"
+
+underscore@~1.7.0:
+  version "1.7.0"
+  resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.7.0.tgz#6bbaf0877500d36be34ecaa584e0db9fef035209"
+
+uniq@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff"
+
+uniqid@^4.0.0:
+  version "4.1.1"
+  resolved "https://registry.yarnpkg.com/uniqid/-/uniqid-4.1.1.tgz#89220ddf6b751ae52b5f72484863528596bb84c1"
+  dependencies:
+    macaddress "^0.2.8"
+
+uniqs@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02"
+
+unique-string@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a"
+  dependencies:
+    crypto-random-string "^1.0.0"
+
+unpipe@~1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
+
+unzip-response@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-1.0.2.tgz#b984f0877fc0a89c2c773cc1ef7b5b232b5b06fe"
+
+update-notifier@^1.0.0:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-1.0.3.tgz#8f92c515482bd6831b7c93013e70f87552c7cf5a"
+  dependencies:
+    boxen "^0.6.0"
+    chalk "^1.0.0"
+    configstore "^2.0.0"
+    is-npm "^1.0.0"
+    latest-version "^2.0.0"
+    lazy-req "^1.1.0"
+    semver-diff "^2.0.0"
+    xdg-basedir "^2.0.0"
+
+uri-path@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/uri-path/-/uri-path-1.0.0.tgz#9747f018358933c31de0fccfd82d138e67262e32"
+
+url-loader@^0.5.7:
+  version "0.5.8"
+  resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-0.5.8.tgz#b9183b1801e0f847718673673040bc9dc1c715c5"
+  dependencies:
+    loader-utils "^1.0.2"
+    mime "1.3.x"
+
+url-parse-lax@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73"
+  dependencies:
+    prepend-http "^1.0.1"
+
+url@^0.11.0:
+  version "0.11.0"
+  resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1"
+  dependencies:
+    punycode "1.3.2"
+    querystring "0.2.0"
+
+util-deprecate@~1.0.1:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
+
+util@0.10.3, util@^0.10.3:
+  version "0.10.3"
+  resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9"
+  dependencies:
+    inherits "2.0.1"
+
+utils-merge@1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.0.tgz#0294fb922bb9375153541c4f7096231f287c8af8"
+
+uuid@^2.0.1:
+  version "2.0.3"
+  resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a"
+
+uuid@^3.0.0:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.1.tgz#6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1"
+
+validate-npm-package-license@^3.0.1:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc"
+  dependencies:
+    spdx-correct "~1.0.0"
+    spdx-expression-parse "~1.0.0"
+
+vendors@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.1.tgz#37ad73c8ee417fb3d580e785312307d274847f22"
+
+verror@1.3.6:
+  version "1.3.6"
+  resolved "https://registry.yarnpkg.com/verror/-/verror-1.3.6.tgz#cff5df12946d297d2baaefaa2689e25be01c005c"
+  dependencies:
+    extsprintf "1.0.2"
+
+vm-browserify@0.0.4:
+  version "0.0.4"
+  resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73"
+  dependencies:
+    indexof "0.0.1"
+
+watchpack@^1.2.0:
+  version "1.3.1"
+  resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.3.1.tgz#7d8693907b28ce6013e7f3610aa2a1acf07dad87"
+  dependencies:
+    async "^2.1.2"
+    chokidar "^1.4.3"
+    graceful-fs "^4.1.2"
+
+wcwidth@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8"
+  dependencies:
+    defaults "^1.0.3"
+
+webpack-sources@^0.1.0, webpack-sources@^0.1.4:
+  version "0.1.4"
+  resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-0.1.4.tgz#ccc2c817e08e5fa393239412690bb481821393cd"
+  dependencies:
+    source-list-map "~0.1.7"
+    source-map "~0.5.3"
+
+webpack-sources@^0.2.3:
+  version "0.2.3"
+  resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-0.2.3.tgz#17c62bfaf13c707f9d02c479e0dcdde8380697fb"
+  dependencies:
+    source-list-map "^1.1.1"
+    source-map "~0.5.3"
+
+webpack@^2.2.1:
+  version "2.2.1"
+  resolved "https://registry.yarnpkg.com/webpack/-/webpack-2.2.1.tgz#7bb1d72ae2087dd1a4af526afec15eed17dda475"
+  dependencies:
+    acorn "^4.0.4"
+    acorn-dynamic-import "^2.0.0"
+    ajv "^4.7.0"
+    ajv-keywords "^1.1.1"
+    async "^2.1.2"
+    enhanced-resolve "^3.0.0"
+    interpret "^1.0.0"
+    json-loader "^0.5.4"
+    loader-runner "^2.3.0"
+    loader-utils "^0.2.16"
+    memory-fs "~0.4.1"
+    mkdirp "~0.5.0"
+    node-libs-browser "^2.0.0"
+    source-map "^0.5.3"
+    supports-color "^3.1.0"
+    tapable "~0.2.5"
+    uglify-js "^2.7.5"
+    watchpack "^1.2.0"
+    webpack-sources "^0.1.4"
+    yargs "^6.0.0"
+
+whet.extend@~0.9.9:
+  version "0.9.9"
+  resolved "https://registry.yarnpkg.com/whet.extend/-/whet.extend-0.9.9.tgz#f877d5bf648c97e5aa542fadc16d6a259b9c11a1"
+
+which-module@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f"
+
+which@1, which@^1.2.9:
+  version "1.2.12"
+  resolved "https://registry.yarnpkg.com/which/-/which-1.2.12.tgz#de67b5e450269f194909ef23ece4ebe416fa1192"
+  dependencies:
+    isexe "^1.1.1"
+
+which@~1.0.5:
+  version "1.0.9"
+  resolved "https://registry.yarnpkg.com/which/-/which-1.0.9.tgz#460c1da0f810103d0321a9b633af9e575e64486f"
+
+wide-align@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.0.tgz#40edde802a71fea1f070da3e62dcda2e7add96ad"
+  dependencies:
+    string-width "^1.0.1"
+
+widest-line@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-1.0.0.tgz#0c09c85c2a94683d0d7eaf8ee097d564bf0e105c"
+  dependencies:
+    string-width "^1.0.1"
+
+window-size@0.1.0:
+  version "0.1.0"
+  resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d"
+
+window-size@^0.2.0:
+  version "0.2.0"
+  resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.2.0.tgz#b4315bb4214a3d7058ebeee892e13fa24d98b075"
+
+wordwrap@0.0.2:
+  version "0.0.2"
+  resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f"
+
+wordwrap@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb"
+
+wordwrap@~0.0.2:
+  version "0.0.3"
+  resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107"
+
+wrap-ansi@^2.0.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85"
+  dependencies:
+    string-width "^1.0.1"
+    strip-ansi "^3.0.1"
+
+wrappy@1:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
+
+write-file-atomic@^1.1.2:
+  version "1.3.1"
+  resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-1.3.1.tgz#7d45ba32316328dd1ec7d90f60ebc0d845bb759a"
+  dependencies:
+    graceful-fs "^4.1.11"
+    imurmurhash "^0.1.4"
+    slide "^1.1.5"
+
+xdg-basedir@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-2.0.0.tgz#edbc903cc385fc04523d966a335504b5504d1bd2"
+  dependencies:
+    os-homedir "^1.0.0"
+
+xdg-basedir@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4"
+
+xtend@^4.0.0, xtend@^4.0.1:
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"
+
+y18n@^3.2.1:
+  version "3.2.1"
+  resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41"
+
+yallist@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.0.0.tgz#306c543835f09ee1a4cb23b7bce9ab341c91cdd4"
+
+yargs-parser@^2.4.1:
+  version "2.4.1"
+  resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-2.4.1.tgz#85568de3cf150ff49fa51825f03a8c880ddcc5c4"
+  dependencies:
+    camelcase "^3.0.0"
+    lodash.assign "^4.0.6"
+
+yargs-parser@^4.2.0:
+  version "4.2.1"
+  resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-4.2.1.tgz#29cceac0dc4f03c6c87b4a9f217dd18c9f74871c"
+  dependencies:
+    camelcase "^3.0.0"
+
+yargs@^4.7.1:
+  version "4.8.1"
+  resolved "https://registry.yarnpkg.com/yargs/-/yargs-4.8.1.tgz#c0c42924ca4aaa6b0e6da1739dfb216439f9ddc0"
+  dependencies:
+    cliui "^3.2.0"
+    decamelize "^1.1.1"
+    get-caller-file "^1.0.1"
+    lodash.assign "^4.0.3"
+    os-locale "^1.4.0"
+    read-pkg-up "^1.0.1"
+    require-directory "^2.1.1"
+    require-main-filename "^1.0.1"
+    set-blocking "^2.0.0"
+    string-width "^1.0.1"
+    which-module "^1.0.0"
+    window-size "^0.2.0"
+    y18n "^3.2.1"
+    yargs-parser "^2.4.1"
+
+yargs@^6.0.0:
+  version "6.6.0"
+  resolved "https://registry.yarnpkg.com/yargs/-/yargs-6.6.0.tgz#782ec21ef403345f830a808ca3d513af56065208"
+  dependencies:
+    camelcase "^3.0.0"
+    cliui "^3.2.0"
+    decamelize "^1.1.1"
+    get-caller-file "^1.0.1"
+    os-locale "^1.4.0"
+    read-pkg-up "^1.0.1"
+    require-directory "^2.1.1"
+    require-main-filename "^1.0.1"
+    set-blocking "^2.0.0"
+    string-width "^1.0.2"
+    which-module "^1.0.0"
+    y18n "^3.2.1"
+    yargs-parser "^4.2.0"
+
+yargs@~3.10.0:
+  version "3.10.0"
+  resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1"
+  dependencies:
+    camelcase "^1.0.2"
+    cliui "^2.1.0"
+    decamelize "^1.0.0"
+    window-size "0.1.0"
+
+zip-object@^0.1.0:
+  version "0.1.0"
+  resolved "https://registry.yarnpkg.com/zip-object/-/zip-object-0.1.0.tgz#c1a0da04c88c837756e248680a03ff902ec3f53a"