initial commit.

This commit is contained in:
mntmn 2017-04-07 01:29:05 +02:00
commit 7ff2926578
258 changed files with 83743 additions and 0 deletions

5
.gitignore vendored Normal file
View File

@ -0,0 +1,5 @@
node_modules
public/stylesheets/*
javascripts/maps
javascripts/spacedeck.js

62
Gulpfile.js Normal file
View File

@ -0,0 +1,62 @@
var gulp = require('gulp');
var sass = require('gulp-sass');
var concat = require('gulp-concat');
var server = require('gulp-express');
var nodemon = require('gulp-nodemon');
var revReplace = require("gulp-rev-replace");
var clean = require('gulp-clean');
var child_process = require('child_process');
var path = require('path');
var uglify = require('gulp-uglify');
var fingerprint = require('gulp-fingerprint');
var rev = require('gulp-rev');
var RevAll = require('gulp-rev-all');
gulp.task('rev', () => {
var revAll = new RevAll();
return gulp.src(['public/**'])
.pipe(gulp.dest('build/assets'))
.pipe(revAll.revision())
.pipe(gulp.dest('build/assets'))
.pipe(revAll.manifestFile())
.pipe(gulp.dest('build/assets'));
});
gulp.task("all", ["styles", "uglify", "rev", "copylocales"], function(){
var manifest = gulp.src("./build/assets/rev-manifest.json");
return gulp.src("./views/**/*")
.pipe(revReplace({manifest: manifest}))
.pipe(gulp.dest("./build/views"));
});
gulp.task('copylocales', function(){
return gulp.src('./locales/*.js').pipe(gulp.dest('./build/locales'));
});
gulp.task('clean', function () {
return gulp.src('./build').pipe(clean());
});
gulp.task('styles', function() {
gulp.src('styles/**/*.scss')
.pipe(sass({
errLogToConsole: true
}))
.pipe(gulp.dest('./public/stylesheets/'))
.pipe(concat('style.css'));
});
gulp.task('uglify', () => {
child_process.exec('sed -n \'s/.*script minify src="\\(.*\\)".*/.\\/public\\/\\1/p\' views/spacedeck.html',
function (error, stdout, stderr) {
var scripts = stdout.split('\n').map(function(p){return path.normalize(p)}).filter(function(p){return p!='.'});
console.log("scripts: ",scripts);
gulp.src(scripts)
.pipe(uglify({output:{beautify:true}}))
.pipe(concat('spacedeck.js'))
.pipe(gulp.dest('public/javascripts'));
});
});

661
LICENSE Normal file
View File

@ -0,0 +1,661 @@
GNU AFFERO GENERAL PUBLIC LICENSE
Version 3, 19 November 2007
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The GNU Affero General Public License is a free, copyleft license for
software and other kinds of works, specifically designed to ensure
cooperation with the community in the case of network server software.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
our General Public Licenses are intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
Developers that use our General Public Licenses protect your rights
with two steps: (1) assert copyright on the software, and (2) offer
you this License which gives you legal permission to copy, distribute
and/or modify the software.
A secondary benefit of defending all users' freedom is that
improvements made in alternate versions of the program, if they
receive widespread use, become available for other developers to
incorporate. Many developers of free software are heartened and
encouraged by the resulting cooperation. However, in the case of
software used on network servers, this result may fail to come about.
The GNU General Public License permits making a modified version and
letting the public access it on a server without ever releasing its
source code to the public.
The GNU Affero General Public License is designed specifically to
ensure that, in such cases, the modified source code becomes available
to the community. It requires the operator of a network server to
provide the source code of the modified version running there to the
users of that server. Therefore, public use of a modified version, on
a publicly accessible server, gives the public access to the source
code of the modified version.
An older license, called the Affero General Public License and
published by Affero, was designed to accomplish similar goals. This is
a different license, not a version of the Affero GPL, but Affero has
released a new version of the Affero GPL which permits relicensing under
this license.
The precise terms and conditions for copying, distribution and
modification follow.
TERMS AND CONDITIONS
0. Definitions.
"This License" refers to version 3 of the GNU Affero General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
1. Source Code.
The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
The Corresponding Source for a work in source code form is that
same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
13. Remote Network Interaction; Use with the GNU General Public License.
Notwithstanding any other provision of this License, if you modify the
Program, your modified version must prominently offer all users
interacting with it remotely through a computer network (if your version
supports such interaction) an opportunity to receive the Corresponding
Source of your version by providing access to the Corresponding Source
from a network server at no charge, through some standard or customary
means of facilitating copying of software. This Corresponding Source
shall include the Corresponding Source for any work covered by version 3
of the GNU General Public License that is incorporated pursuant to the
following paragraph.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the work with which it is combined will remain governed by version
3 of the GNU General Public License.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
the GNU Affero General Public License from time to time. Such new versions
will be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU Affero General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU Affero General Public License, you may choose any version ever published
by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
versions of the GNU Affero General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
If your software can interact with users remotely through a computer
network, you should also make sure that it provides a way for users to
get its source. For example, if your program is a web application, its
interface could display a "Source" link that leads users to an archive
of the code. There are many ways you could offer source, and different
solutions will be better for different programs; see section 13 for the
specific requirements.
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU AGPL, see
<http://www.gnu.org/licenses/>.

68
README.md Normal file
View File

@ -0,0 +1,68 @@
# Spacedeck Open
This is the free and open source version of Spacedeck, a web based, real time, collaborative whiteboard application with rich media support. Spacedeck was developed in 6 major releases during Autumn 2011 until the end of 2016 and was originally a commercial SaaS. The developers were Lukas F. Hartmann (mntmn) and Martin Güther (magegu). All icons and large parts of the CSS were designed by Thomas Helbig (dergraph).
As we plan to retire the subscription based service at spacedeck.com in late 2017, we decided to open-source Spacedeck to allow educational and other organizations who currently rely on Spacedeck to migrate to a self-hosted version.
Data migration features will be added soon.
We appreciate filed issues, pull requests and general discussion.
# Features
- Create virtual whiteboards called "Spaces" with virtually unlimited size
- Drag & drop images, videos and audio from your computer or the web
- Write and format text with full control over fonts, colors and style
- Draw, annotate and highlight with included graphical shapes
- Turn your Space into a zooming presentation
- Collaborate and chat in realtime with teammates, students or friends
- Share Spaces on the web or via email
- Export your work as printable PDF or ZIP
# Requirements, Installation
Spacedeck uses the following major building blocks:
- Node.js 4.x (Backend / API)
- MongoDB 3.x (Datastore)
- Redis 3.x (Datastore for realtime channels)
- Vue.js (Frontend)
It also has some binary dependencies for media conversion and PDF export:
- imagemagick
Currently, media files are stored in Amazon S3, so you need an Amazon AWS account and have the ```AWS_ACCESS_KEY_ID``` and ```AWS_SECRET_ACCESS_KEY``` environment variables defined. For sending emails, Amazon SES is required.
To install Spacedeck, you need node.js 4.x and a running MongoDB instance. Then, to install all node dependencies, run
npm install
To rebuild the frontend CSS styles (you need to do this at least once):
gulp styles
# Run
export NODE_ENV=development
npm start
# License
Spacedeck Open is released under the GNU Affero General Public License Version 3 (GNU AGPLv3).
Spacedeck Open - Web-based Collaborative Whiteboard For Rich Media
Copyright (C) 2011-2017 Lukas F. Hartmann, Martin Güther, Thomas Helbig
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.

173
app.js Normal file
View File

@ -0,0 +1,173 @@
"use strict";
require('./models/schema');
require("log-timestamp");
const config = require('config');
const redis = require('./helpers/redis');
const websockets = require('./helpers/websockets');
const http = require('http');
const path = require('path');
const _ = require('underscore');
const favicon = require('serve-favicon');
const logger = require('morgan');
const cookieParser = require('cookie-parser');
const bodyParser = require('body-parser');
const mongoose = require('mongoose');
const swig = require('swig');
const i18n = require('i18n-2');
const helmet = require('helmet');
const express = require('express');
const app = express();
const isProduction = app.get('env') === 'production';
console.log("Booting Spacedeck Open… (environment: " + app.get('env') + ")");
app.use(logger(isProduction ? 'combined' : 'dev'));
i18n.expressBind(app, {
locales: ["en", "de", "fr"],
defaultLocale: "en",
cookieName: "spacedeck_locale",
devMode: (app.get('env') == 'development')
});
swig.setDefaults({
varControls: ["[[", "]]"] // otherwise it's not compatible with vue.js
});
swig.setFilter('cdn', function(input, idx) {
return input;
});
app.engine('html', swig.renderFile);
app.set('view engine', 'html');
if (app.get('env') != 'development') {
app.set('views', path.join(__dirname, 'build', 'views'));
app.use(favicon(path.join(__dirname, 'build', 'assets', 'images', 'favicon.png')));
app.use(express.static(path.join(__dirname, 'build', 'assets')));
} else {
app.set('views', path.join(__dirname, 'views'));
app.use(favicon(path.join(__dirname, 'public', 'images', 'favicon.png')));
app.use(express.static(path.join(__dirname, 'public')));
}
app.use(bodyParser.json({
limit: '50mb'
}));
app.use(bodyParser.urlencoded({
extended: false,
limit: '50mb'
}));
app.use(cookieParser());
app.use(helmet.noCache())
app.use(helmet.frameguard())
app.use(helmet.xssFilter())
app.use(helmet.hsts({
maxAge: 7776000000,
includeSubdomains: true
}))
app.disable('x-powered-by');
app.use(helmet.noSniff())
// CUSTOM MIDDLEWARES
app.use(require("./middlewares/templates"));
app.use(require("./middlewares/error_helpers"));
app.use(require("./middlewares/setuser"));
app.use(require("./middlewares/subdomain"));
app.use(require("./middlewares/cors"));
app.use(require("./middlewares/i18n"));
app.use("/api", require("./middlewares/api_helpers"));
app.use('/api/spaces/:id', require("./middlewares/space_helpers"));
app.use('/api/spaces/:id/artifacts/:artifact_id', require("./middlewares/artifact_helpers"));
app.use('/api/teams', require("./middlewares/team_helpers"));
// REAL ROUTES
app.use('/api/users', require('./routes/api/users'));
app.use('/api/memberships', require('./routes/api/memberships'));
const spaceRouter = require('./routes/api/spaces');
app.use('/api/spaces', spaceRouter);
spaceRouter.use('/:id/artifacts', require('./routes/api/space_artifacts'));
spaceRouter.use('/:id/memberships', require('./routes/api/space_memberships'));
spaceRouter.use('/:id/messages', require('./routes/api/space_messages'));
spaceRouter.use('/:id/digest', require('./routes/api/space_digest'));
spaceRouter.use('/:id', require('./routes/api/space_exports'));
app.use('/api/sessions', require('./routes/api/sessions'));
app.use('/api/teams', require('./routes/api/teams'));
app.use('/api/webgrabber', require('./routes/api/webgrabber'));
app.use('/', require('./routes/root'));
// catch 404 and forward to error handler
app.use(require('./middlewares/404'));
if (app.get('env') == 'development') {
app.set('view cache', false);
swig.setDefaults({cache: false});
} else {
app.use(require('./middlewares/500'));
}
module.exports = app;
// CONNECT TO DATABASE
const mongoHost = process.env.MONGO_PORT_27017_TCP_ADDR || 'localhost';
mongoose.connect('mongodb://' + mongoHost + '/spacedeck');
// START WEBSERVER
const port = 9000;
const server = http.Server(app).listen(port, () => {
if ("send" in process) {
process.send('online');
}
}).on('listening', () => {
const host = server.address().address;
const port = server.address().port;
console.log('Spacedeck Open listening at http://%s:%s', host, port);
}).on('error', (error) => {
if (error.syscall !== 'listen') {
throw error;
}
const bind = typeof port === 'string' ? 'Pipe ' + port : 'Port ' + port;
switch (error.code) {
case 'EACCES':
console.error(bind + ' requires elevated privileges');
process.exit(1);
break;
case 'EADDRINUSE':
console.error(bind + ' is already in use');
process.exit(1);
break;
default:
throw error;
}
});
//WEBSOCKETS & WORKER
websockets.startWebsockets(server);
redis.connectRedis();
process.on('message', (message) => {
console.log("Process message:", message);
if (message === 'shutdown') {
console.log("Exiting spacedeck.");
process.exit(0);
}
});

5
bin/www Executable file
View File

@ -0,0 +1,5 @@
#!/usr/bin/env node
var app = require('../app');
var http = require('http');
var server = http.createServer(app);

9
config/default.json Normal file
View File

@ -0,0 +1,9 @@
{
"endpoint": "http://localhost:9000",
"storage_bucket": "my_spacedeck_s3_bucket",
"storage_cdn": "xyz.cloudfront.net",
"google_access" : "",
"google_secret" : "",
"admin_pass": "very_secret_admin_password",
"phantom_api_secret": "very_secret_phantom_password"
}

View File

@ -0,0 +1,615 @@
'use strict';
const exec = require('child_process');
const gm = require('gm');
const async = require('async');
const fs = require('fs');
const Models = require('../models/schema');
const uploader = require('../helpers/uploader');
const path = require('path');
const fileExtensionMap = {
".amr" : "audio/AMR",
".ogg" : "audio/ogg",
".aac" : "audio/aac",
".mp3" : "audio/mpeg",
".mpg" : "video/mpeg",
".3ga" : "audio/3ga",
".mp4" : "video/mp4",
".wav" : "audio/wav",
".mov" : "video/quicktime",
".doc" : "application/msword",
".dot" : "application/msword",
".docx" : "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
".dotx" : "application/vnd.openxmlformats-officedocument.wordprocessingml.template",
".docm" : "application/vnd.ms-word.document.macroEnabled.12",
".dotm" : "application/vnd.ms-word.template.macroEnabled.12",
".xls" : "application/vnd.ms-excel",
".xlt" : "application/vnd.ms-excel",
".xla" : "application/vnd.ms-excel",
".xlsx" : "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
".xltx" : "application/vnd.openxmlformats-officedocument.spreadsheetml.template",
".xlsm" : "application/vnd.ms-excel.sheet.macroEnabled.12",
".xltm" : "application/vnd.ms-excel.template.macroEnabled.12",
".xlam" : "application/vnd.ms-excel.addin.macroEnabled.12",
".xlsb" : "application/vnd.ms-excel.sheet.binary.macroEnabled.12",
".ppt" : "application/vnd.ms-powerpoint",
".pot" : "application/vnd.ms-powerpoint",
".pps" : "application/vnd.ms-powerpoint",
".ppa" : "application/vnd.ms-powerpoint",
".pptx" : "application/vnd.openxmlformats-officedocument.presentationml.presentation",
".potx" : "application/vnd.openxmlformats-officedocument.presentationml.template",
".ppsx" : "application/vnd.openxmlformats-officedocument.presentationml.slideshow",
".ppam" : "application/vnd.ms-powerpoint.addin.macroEnabled.12",
".pptm" : "application/vnd.ms-powerpoint.presentation.macroEnabled.12",
".potm" : "application/vnd.ms-powerpoint.template.macroEnabled.12",
".ppsm" : "application/vnd.ms-powerpoint.slideshow.macroEnabled.12",
".key" : "application/x-iwork-keynote-sffkey",
".pages" : "application/x-iwork-pages-sffpages",
".numbers" : "application/x-iwork-numbers-sffnumbers",
".ttf" : "application/x-font-ttf"
};
const convertableImageTypes = [
"image/png",
"image/jpeg",
"application/pdf",
"image/jpg",
"image/gif",
"image/tiff",
"image/vnd.adobe.photoshop"];
const convertableVideoTypes = [
"video/quicktime",
"video/3gpp",
"video/mpeg",
"video/mp4",
"video/ogg"];
const convertableAudioTypes = [
"application/ogg",
"audio/AMR",
"audio/3ga",
"audio/wav",
"audio/3gpp",
"audio/x-wav",
"audio/aiff",
"audio/x-aiff",
"audio/ogg",
"audio/mp4",
"audio/x-m4a",
"audio/mpeg",
"audio/mp3",
"audio/x-hx-aac-adts",
"audio/aac"];
function getDuration(localFilePath, callback){
exec.execFile("ffprobe", ["-show_format", "-of", "json", localFilePath], function(error, stdout, stderr) {
var test = JSON.parse(stdout);
callback(parseFloat(test.format.duration));
});
}
function createWaveform(fileName, localFilePath, callback){
var filePathImage = localFilePath + "-" + (new Date().getTime()) + ".png";
getDuration(localFilePath, function(duration){
var totalTime = duration || 1.0;
var pixelsPerSecond = 256.0;
do {
var targetWidth = parseInt(pixelsPerSecond*totalTime, 10);
if (targetWidth>2048) pixelsPerSecond/=2.0;
} while (targetWidth>2048 && pixelsPerSecond>1);
exec.execFile("audiowaveform",
[
"-w",
""+targetWidth,
"--pixels-per-second",
""+parseInt(pixelsPerSecond),
"--background-color", "ffffff00",
"--border-color", "ffffff",
"--waveform-color", "3498db",
"--no-axis-labels",
"-i", localFilePath, "-o", filePathImage
],
{}, function(error, stdout, stderr) {
if(!error) {
callback(null, filePathImage);
} else {
console.log("error:", stdout, stderr);
callback(error, null);
}
});
});
}
function convertVideo(fileName, filePath, codec, callback, progress_callback) {
var ext = path.extname(fileName);
var presetMime = fileExtensionMap[ext];
var newExt = codec == "mp4" ? "mp4" : "ogv";
var convertedPath = filePath + "." + newExt;
console.log("converting", filePath, "to", convertedPath, "progress_cb:",progress_callback);
var convertArgs = (codec == "mp4") ? [
"-i", filePath,
"-threads", "4",
"-vf", "scale=1280:trunc(ow/a/2)*2", // scale to width of 1280, truncating height to an even value
"-b:v", "2000k",
"-acodec", "libvo_aacenc",
"-b:a", "96k",
"-vcodec", "libx264",
"-y", convertedPath ]
: [
"-i", filePath,
"-threads", "4",
"-vf", "scale=1280:trunc(ow/a/2)*2", // scale to width of 1280, truncating height to an even value
"-b:v", "2000k",
"-acodec", "libvorbis",
"-b:a", "96k",
"-vcodec", "libtheora",
"-y", convertedPath];
var ff = exec.spawn('ffmpeg', convertArgs, {
stdio: [
'pipe', // use parents stdin for child
'pipe', // pipe child's stdout to parent
'pipe'
]
});
ff.stdout.on('data', function (data) {
console.log('[ffmpeg-video] stdout: ' + data);
});
ff.stderr.on('data', function (data) {
console.log('[ffmpeg-video] stderr: ' + data);
if (progress_callback) {
progress_callback(data);
}
});
ff.on('close', function (code) {
console.log('[ffmpeg-video] child process exited with code ' + code);
if (!code) {
console.log("converted", filePath, "to", convertedPath);
callback(null, convertedPath);
} else {
callback(code, null);
}
});
}
function convertAudio(fileName, filePath, codec, callback) {
var ext = path.extname(fileName);
var presetMime = fileExtensionMap[ext];
var newExt = codec == "mp3" ? "mp3" : "ogg";
var convertedPath = filePath + "." + newExt;
console.log("converting audio", filePath, "to", convertedPath);
var convertArgs = (ext == ".aac") ? [ "-i", filePath, "-y", convertedPath ]
: [ "-i", filePath,
"-b:a", "128k",
"-y", convertedPath];
exec.execFile("ffmpeg", convertArgs , {}, function(error, stdout, stderr) {
if(!error){
console.log("converted", filePath, "to", convertedPath);
callback(null, convertedPath);
}else{
console.log(error,stdout, stderr);
callback(error, null);
}
});
}
function createThumbnailForVideo(fileName, filePath, callback) {
var filePathImage = filePath + ".jpg";
exec.execFile("ffmpeg", ["-y", "-i", filePath, "-ss", "00:00:01.00", "-vcodec", "mjpeg", "-vframes", "1", "-f", "image2", filePathImage], {}, function(error, stdout, stderr){
if(!error){
callback(null, filePathImage);
}else{
console.log("error:", stdout, stderr);
callback(error, null);
}
});
}
function getMime(fileName, filePath, callback) {
var ext = path.extname(fileName);
var presetMime = fileExtensionMap[ext];
if (presetMime) {
callback(null, presetMime);
} else {
exec.execFile("file", ["-b","--mime-type", filePath], {}, function(error, stdout, stderr) {
console.log("file stdout: ",stdout);
if (stderr === '' && error == null) {
//filter special chars from commandline
var mime = stdout.replace(/[^a-zA-Z0-9\/\-]/g,'');
callback(null, mime);
} else {
console.log("getMime file error: ", error);
callback(error, null);
}
});
}
}
function resizeAndUpload(a, size, max, fileName, localFilePath, callback) {
if (max>320 || size.width > max || size.height > max) {
var resizedFileName = max + "_"+fileName;
var s3Key = "s"+ a.space_id.toString() + "/a" + a._id.toString() + "/" + resizedFileName;
var localResizedFilePath = "/tmp/"+resizedFileName;
gm(localFilePath).resize(max, max).autoOrient().write(localResizedFilePath, function (err) {
if(!err) {
uploader.uploadFile(s3Key, "image/jpeg", localResizedFilePath, function(err, url) {
if (err) callback(err);
else{
console.log(localResizedFilePath);
fs.unlink(localResizedFilePath, function (err) {
if (err) {
console.error(err);
callback(null, url);
}
else callback(null, url);
});
}
});
} else {
console.error(err);
callback(err);
}
});
} else {
callback(null, "");
}
}
var resizeAndUploadImage = function(a, mime, size, fileName, fileNameOrg, imageFilePath, originalFilePath, payloadCallback) {
async.parallel({
small: function(callback){
resizeAndUpload(a, size, 320, fileName, imageFilePath, callback);
},
medium: function(callback){
resizeAndUpload(a, size, 800, fileName, imageFilePath, callback);
},
big: function(callback){
resizeAndUpload(a, size, 1920, fileName, imageFilePath, callback);
},
original: function(callback){
var s3Key = "s"+ a.space_id.toString() + "/a" + a._id + "/" + fileNameOrg;
uploader.uploadFile(s3Key, mime, originalFilePath, function(err, url){
callback(null, url);
});
}
}, function(err, results) {
a.state = "idle";
a.mime = mime;
var stats = fs.statSync(originalFilePath);
a.payload_size = stats["size"];
a.payload_thumbnail_web_uri = results.small;
a.payload_thumbnail_medium_uri = results.medium;
a.payload_thumbnail_big_uri = results.big;
a.payload_uri = results.original;
var factor = 320/size.width;
var newBoardSpecs = a.board;
newBoardSpecs.w = Math.round(size.width*factor);
newBoardSpecs.h = Math.round(size.height*factor);
a.board = newBoardSpecs;
a.updated_at = new Date();
a.save(function(err) {
if(err) payloadCallback(err, null);
else {
fs.unlink(originalFilePath, function (err) {
if (err){
console.error(err);
payloadCallback(err, null);
} else {
console.log('successfully deleted ' + originalFilePath);
payloadCallback(null, a);
}
});
}
});
});
};
module.exports = {
convert: function(a, fileName, localFilePath, payloadCallback, progress_callback) {
getMime(fileName, localFilePath, function(err, mime){
console.log("[convert] fn: "+fileName+" local: "+localFilePath+" mime:", mime);
if (!err) {
if (convertableImageTypes.indexOf(mime) > -1) {
gm(localFilePath).size(function (err, size) {
console.log("[convert] gm:", err, size);
if (!err) {
if(mime == "application/pdf") {
var firstImagePath = localFilePath + ".jpeg";
exec.execFile("gs", ["-sDEVICE=jpeg","-dNOPAUSE", "-dJPEGQ=80", "-dBATCH", "-dFirstPage=1", "-dLastPage=1", "-sOutputFile=" + firstImagePath, "-r90", "-f", localFilePath], {}, function(error, stdout, stderr) {
if(error === null) {
resizeAndUploadImage(a, mime, size, fileName + ".jpeg", fileName, firstImagePath, localFilePath, function(err, a) {
fs.unlink(firstImagePath, function (err) {
payloadCallback(err, a);
});
});
} else {
payloadCallback(error, null);
}
});
} else if(mime == "image/gif") {
//gifs are buggy after convertion, so we should not convert them
var s3Key = "s"+ a.space_id.toString() + "/a" + a._id.toString() + "/" + fileName;
uploader.uploadFile(s3Key, "image/gif", localFilePath, function(err, url) {
if(err)callback(err);
else{
console.log(localFilePath);
var stats = fs.statSync(localFilePath);
a.state = "idle";
a.mime = mime;
a.payload_size = stats["size"];
a.payload_thumbnail_web_uri = url;
a.payload_thumbnail_medium_uri = url;
a.payload_thumbnail_big_uri = url;
a.payload_uri = url;
var factor = 320/size.width;
var newBoardSpecs = a.board;
newBoardSpecs.w = Math.round(size.width*factor);
newBoardSpecs.h = Math.round(size.height*factor);
a.board = newBoardSpecs;
a.updated_at = new Date();
a.save(function(err){
if(err) payloadCallback(err, null);
else {
fs.unlink(localFilePath, function (err) {
if (err){
console.error(err);
payloadCallback(err, null);
} else {
console.log('successfully deleted ' + localFilePath);
payloadCallback(null, a);
}
});
}
});
}
});
} else {
resizeAndUploadImage(a, mime, size, fileName, fileName, localFilePath, localFilePath, payloadCallback);
}
} else payloadCallback(err);
});
} else if (convertableVideoTypes.indexOf(mime) > -1) {
async.parallel({
thumbnail: function(callback) {
createThumbnailForVideo(fileName, localFilePath, function(err, created){
console.log("thumbnail created: ", err, created);
if(err) callback(err);
else{
var keyName = "s" + a.space_id.toString() + "/a" + a._id.toString() + "/" + fileName + ".jpg" ;
uploader.uploadFile(keyName, "image/jpeg", created, function(err, url){
if (err) callback(err);
else callback(null, url);
});
}
});
},
ogg: function(callback) {
if (mime == "video/ogg") {
callback(null, "org");
} else {
convertVideo(fileName, localFilePath, "ogg", function(err, file) {
if(err) callback(err);
else {
var keyName = "s" + a.space_id.toString() + "/a" + a._id.toString() + "/" + fileName + ".ogv" ;
uploader.uploadFile(keyName, "video/ogg", file, function(err, url){
if (err) callback(err);
else callback(null, url);
});
}
}, progress_callback);
}
},
mp4: function(callback) {
if (mime == "video/mp4") {
callback(null, "org");
} else {
convertVideo(fileName, localFilePath, "mp4", function(err, file) {
if (err) callback(err);
else {
var keyName = "s" + a.space_id.toString() + "/a" + a._id.toString() + "/" + fileName + ".mp4";
uploader.uploadFile(keyName, "video/mp4" ,file, function(err, url) {
if (err) callback(err);
else callback(null, url);
});
}
}, progress_callback);
}
},
original: function(callback){
uploader.uploadFile(fileName, mime, localFilePath, function(err, url){
callback(null, url);
});
}
}, function(err, results){
console.log(err, results);
if (err) payloadCallback(err, a);
else {
a.state = "idle";
a.mime = mime;
var stats = fs.statSync(localFilePath);
a.payload_size = stats["size"];
a.payload_thumbnail_web_uri = results.thumbnail;
a.payload_thumbnail_medium_uri = results.thumbnail;
a.payload_thumbnail_big_uri = results.thumbnail;
a.payload_uri = results.original;
if (mime == "video/mp4") {
a.payload_alternatives = [
{
mime: "video/ogg",
payload_uri: results.ogg
}
];
} else {
a.payload_alternatives = [
{
mime: "video/mp4",
payload_uri: results.mp4
}
];
}
a.updated_at = new Date();
a.save(function(err) {
if (err) payloadCallback(err, null);
else {
fs.unlink(localFilePath, function (err) {
if (err){
console.error(err);
payloadCallback(err, null);
} else {
console.log('successfully deleted ' + localFilePath);
payloadCallback(null, a);
}
});
}
});
}
});
} else if (convertableAudioTypes.indexOf(mime) > -1) {
async.parallel({
ogg: function(callback) {
convertAudio(fileName, localFilePath, "ogg", function(err, file) {
if(err) callback(err);
else {
var keyName = "s" + a.space_id.toString() + "/a" + a._id.toString() + "/" + fileName + ".ogg" ;
uploader.uploadFile(keyName, "audio/ogg", file, function(err, url){
if (err) callback(err);
else callback(null, url);
});
}
});
},
mp3_waveform: function(callback) {
convertAudio(fileName, localFilePath, "mp3", function(err, file) {
if(err) callback(err);
else {
createWaveform(fileName, file, function(err, filePath){
var keyName = "s" + a.space_id.toString() + "/a" + a._id.toString() + "/" + fileName + "-" + (new Date().getTime()) + ".png";
uploader.uploadFile(keyName, "image/png", filePath, function(err, pngUrl){
var keyName = "s" + a.space_id.toString() + "/a" + a._id.toString() + "/" + fileName + ".mp3" ;
uploader.uploadFile(keyName, "audio/mp3", file, function(err, mp3Url){
if (err) callback(err);
else callback(null, {waveform: pngUrl, mp3: mp3Url});
});
});
});
}
});
},
original: function(callback) {
var keyName = "s" + a.space_id.toString() + "/a" + a._id.toString() + "/" + fileName;
uploader.uploadFile(keyName, mime, localFilePath, function(err, url){
callback(null, url);
});
}
}, function(err, results) {
console.log(err, results);
if (err) payloadCallback(err, a);
else {
a.state = "idle";
a.mime = mime;
var stats = fs.statSync(localFilePath);
a.payload_size = stats["size"];
a.payload_thumbnail_web_uri = results.mp3_waveform.waveform;
a.payload_thumbnail_medium_uri = results.mp3_waveform.waveform;
a.payload_thumbnail_big_uri = results.mp3_waveform.waveform;
a.payload_uri = results.original;
a.payload_alternatives = [
{payload_uri:results.ogg, mime:"audio/ogg"},
{payload_uri:results.mp3_waveform.mp3, mime:"audio/mpeg"}
];
a.updated_at = new Date();
a.save(function(err){
if(err) payloadCallback(err, null);
else {
fs.unlink(localFilePath, function (err) {
if (err){
console.error(err);
payloadCallback(err, null);
} else {
console.log('successfully deleted ' + localFilePath);
payloadCallback(null, a);
}
});
}
});
}
});
} else {
console.log("mime not matched for conversion, storing file");
var keyName = "s" + a.space_id.toString() + "/a" + a._id.toString() + "/" + fileName;
uploader.uploadFile(keyName, mime, localFilePath, function(err, url) {
a.state = "idle";
a.mime = mime;
var stats = fs.statSync(localFilePath);
a.payload_size = stats["size"];
a.payload_uri = url;
a.updated_at = new Date();
a.save(function(err) {
if(err) payloadCallback(err, null);
else {
fs.unlink(localFilePath, function (err) {
payloadCallback(null, a);
});
}
});
});
}
} else {
//there was an error getting mime
payloadCallback(err);
}
});
}
};

61
helpers/mailer.js Normal file
View File

@ -0,0 +1,61 @@
'use strict';
var swig = require('swig');
var AWS = require('aws-sdk');
module.exports = {
sendMail: (to_email, subject, body, options) => {
if (!options) {
options = {};
}
// FIXME
const teamname = options.teamname || "My Open Spacedeck"
const from = teamname + ' <support@example.org>';
let reply_to = [from];
if (options.reply_to) {
reply_to = [options.reply_to];
}
let plaintext = body;
if (options.action && options.action.link) {
plaintext+="\n"+options.action.link+"\n\n";
}
const htmlText = swig.renderFile('./views/emails/action.html', {
text: body.replace(/(?:\n)/g, '<br />'),
options: options
});
if (process.env.NODE_ENV === 'development') {
console.log("Email: to " + to_email + " in production.\nreply_to: " + reply_to + "\nsubject: " + subject + "\nbody: \n" + htmlText + "\n\n plaintext:\n" + plaintext);
} else {
AWS.config.update({region: 'eu-west-1'});
var ses = new AWS.SES();
ses.sendEmail( {
Source: from,
Destination: { ToAddresses: [to_email] },
ReplyToAddresses: reply_to,
Message: {
Subject: {
Data: subject
},
Body: {
Text: {
Data: plaintext,
},
Html: {
Data: htmlText
}
}
}
}, function(err, data) {
if(err) console.log('Email not sent:', err);
else console.log("Email sent.");
});
}
}
};

64
helpers/phantom.js Normal file
View File

@ -0,0 +1,64 @@
'use strict';
require('../models/schema');
var config = require('config');
var phantom = require('node-phantom-simple');
module.exports = {
// type = "pdf" or "png"
takeScreenshot: function(space,type,on_success,on_error) {
var spaceId = space._id;
var space_url = config.get("endpoint")+"/api/spaces/"+spaceId+"/html";
var export_path = "/tmp/"+spaceId+"."+type;
var timeout = 5000;
if (type=="pdf") timeout = 30000;
space_url += "?api_token="+config.get("phantom_api_secret");
console.log("[space-screenshot] url: "+space_url);
console.log("[space-screenshot] export_path: "+export_path);
var on_success_called = false;
var on_exit = function(exit_code) {
if (exit_code>0) {
console.log("phantom abnormal exit for url "+space_url);
if (!on_success_called && on_error) {
on_error();
}
}
};
phantom.create({ path: require('phantomjs-prebuilt').path }, function (err, browser) {
return browser.createPage(function (err, page) {
console.log("page created, opening ",space_url);
if (type=="pdf") {
var psz = {
width: space.advanced.width+"px",
height: space.advanced.height+"px"
};
page.set('paperSize', psz);
}
page.set('settings.resourceTimeout',timeout);
page.set('settings.javascriptEnabled',false);
return page.open(space_url, function (err,status) {
page.render(export_path, function() {
on_success_called = true;
if (on_success) {
on_success(export_path);
}
page.close();
browser.exit();
});
});
});
}, {
onExit: on_exit
});
}
};

61
helpers/redis.js Normal file
View File

@ -0,0 +1,61 @@
'use strict';
const RedisConnection = require('ioredis');
const websockets = require('./websockets');
module.exports = {
connectRedis(){
const redisHost = process.env.REDIS_PORT_6379_TCP_ADDR || 'localhost';
this.connection = new RedisConnection(6379, redisHost);
},
sendMessage(action, model, attributes, channelId) {
const data = JSON.stringify({
channel_id: channelId,
action: action,
model: model,
object: attributes
});
this.connection.publish('updates', data);
},
logIp(ip, cb) {
this.connection.incr("ip_"+ ip, (err, socketCounter) => {
cb();
});
},
rateLimit(namespace, ip, cb) {
const key = "limit_"+ namespace + "_"+ ip;
const redis = this.connection;
redis.get(key, (err, count)=> {
if (count) {
if(count < 150) {
redis.incr(key, (err, newCount) => {
if (newCount==150) {
// limit
}
cb(true);
});
} else {
cb(false);
}
} else {
redis.set(key, 1, (err, count) => {
redis.expire(key, 1800, (err, expResult) => {
cb(true);
});
});
}
});
},
isOnlineInSpace(user, space, cb) {
this.connection.smembers("space_" + space._id.toString(), function(err, list) {
if (err) cb(err);
else {
var users = list.filter(function(item) {
return user._id.toString() === item;
});
cb(null, (users.length > 0));
}
});
}
};

149
helpers/space-render.js Normal file
View File

@ -0,0 +1,149 @@
var fs = require('fs');
var cheerio = require("cheerio");
var artifact_vector_render = require("../public/javascripts/vector-render.js");
global.render_vector_shape = artifact_vector_render.render_vector_shape;
global.render_vector_drawing = artifact_vector_render.render_vector_drawing;
var artifact_view_model = require("../public/javascripts/spacedeck_board_artifacts.js").SpacedeckBoardArtifacts;
var template = fs.readFileSync("views/partials/space-isolated.html");
var dom = cheerio.load(template);
var compiled_js = "";
function emit(str,indent) {
var spaces="";
for (var i=0; i<indent; i++) spaces+=" ";
compiled_js+=spaces+str;
}
function compile_expr(v) {
v=v.replace(/'/g,"\\'");
v=v.replace(/[\r\n]/g," ");
f=/\{([^\|\{]+)\|([^\}]+)\}/.exec(v);
if (f) {
v=v.replace(f[1]+"|"+f[2],f[2]+"("+f[1]+")");
}
// replace braces
v=v.replace(/\{\{\{?/g,"'+");
v=v.replace(/\}\}\}?/g,"+'");
return v;
}
var iterators = 0;
function walk(n,indent) {
if (n.type == "tag") {
//console.log("n: ",n.type,n.name,n.attribs);
}
var braces = 0;
if (n.type == "text") {
if (n.data.match(/[a-zA-Z0-9\{]+/)) {
emit("h+='"+compile_expr(n.data)+"';",indent);
}
}
else if (n.type == "tag") {
var attrs = [];
var keys = Object.keys(n.attribs);
for (var i=0; i<keys.length; i++) {
var k = keys[i];
var v = n.attribs[k];
if (k.substring(0,2) == "v-") {
// vue attribute
if (k.match("v-if")) {
var test = emit("if ("+v+") {",indent);
braces++;
indent++;
}
else if (k.match("v-repeat")) {
var parts = v.split("|")[0].split(":");
var left = parts[0].replace(/ /g,"");
var right = parts[1].replace(/ /g,"");
iterators++;
emit("for (var i"+iterators+"=0;i"+iterators+"<"+right+".length;i"+iterators+"++) {",indent);
emit("var "+left+"="+right+"[i"+iterators+"];",indent+1);
braces++;
indent++;
}
} else {
v=compile_expr(v);
attrs.push(k+"=\""+v+"\"");
}
}
emit("h+='<"+n.name+" "+attrs.join(" ")+">';",indent);
for (var i=0; i<n.children.length; i++) {
walk(n.children[i],indent);
}
emit("h+='</"+n.name+">';", indent);
for (var i=braces; i>0; i--) {
indent--;
emit("}",indent);
}
}
}
function render_space_as_html(space, artifacts) {
if (!compiled_js.length) {
walk(dom("#space")[0],0);
//console.log("compiled template: \n"+compiled_js);
}
// --------
var mouse_state = "idle";
var active_tool = "pointer";
var active_space = space;
var active_space_artifacts = artifacts;
var bounds_zoom = 1;
var bounds_margin_horiz = 0;
var bounds_margin_vert = 0;
var viewport_zoom = 1;
// --------
var editing_artifact_id = null;
var urls_to_links = function(html) {
return html;
}
artifact_view_model.selected_artifacts_dict = {};
for (var i=0; i<active_space_artifacts.length; i++) {
var a = active_space_artifacts[i];
artifact_view_model.update_board_artifact_viewmodel(a);
if (!a.description) a.description = "";
if (!a.title) a.title = "";
}
var h="";
try {
eval(compiled_js);
} catch (e) {
console.error("error rendering space "+space._id+" as html: "+e);
}
var style="html, body, #space { overflow: visible !important; }\n";
style+=".wrapper { border: none !important; }\n";
h='<html>\n<head>\n<link href="https://fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,800italic,400,700,600,800,300|Montserrat:400,700|EB+Garamond|Vollkorn|Fire+Sans|Lato|Roboto|Source+Code+Pro|Ubuntu|Raleway|Playfair+Display|Crimson+Text" rel="stylesheet" type="text/css">\n<link type="text/css" rel="stylesheet" href="https://fast.fonts.net/cssapi/ee1a3484-4d98-4f9f-9f55-020a7b37f3c5.css"/>\n<link rel="stylesheet" href="/stylesheets/style.css"><style>'+style+'</style>\n</head>\n<body id="main">\n'+h+"\n</html>\n";
return h;
}
exports.render_space_as_html = render_space_as_html;

64
helpers/uploader.js Normal file
View File

@ -0,0 +1,64 @@
'use strict';
var AWS = require('aws-sdk');
AWS.config.region = 'eu-central-1';
var fs = require('fs');
var config = require('config');
module.exports = {
removeFile: (path, callback) => {
const s3 = new AWS.S3({
region: 'eu-central-1'
});
const bucket = config.get("storage_bucket");
s3.deleteObject({
Bucket: bucket, Key: path
}, (err, res) => {
if (err){
console.error(err);
callback(err);
}else {
callback(null, res);
}
});
},
uploadFile: function(fileName, mime, localFilePath, callback) {
if (typeof(localFilePath)!="string") {
callback({error:"missing path"}, null);
return;
}
console.log("[s3] uploading", localFilePath, " to ", fileName);
const bucket = config.get("storage_bucket");
const fileStream = fs.createReadStream(localFilePath);
fileStream.on('error', function (err) {
if (err) {
console.error(err);
callback(err);
}
});
fileStream.on('open', function () {
// FIXME
var s3 = new AWS.S3({
region: 'eu-central-1'
});
s3.putObject({
Bucket: bucket,
Key: fileName,
ContentType: mime,
Body: fileStream
}, function (err) {
if (err){
console.error(err);
callback(err);
}else {
const url = "https://"+ config.get("storage_cdn") + "/" + fileName;
console.log("[s3]" + localFilePath + " to " + url);
callback(null, url);
}
});
});
}
};

291
helpers/websockets.js Normal file
View File

@ -0,0 +1,291 @@
'use strict';
require('../models/schema');
const WebSocketServer = require('ws').Server;
const Redis = require('ioredis');
const async = require('async');
const _ = require("underscore");
const mongoose = require("mongoose");
const crypto = require('crypto');
module.exports = {
startWebsockets: function(server){
this.setupSubscription();
this.state = new Redis(6379, process.env.REDIS_PORT_6379_TCP_ADDR || 'localhost');
if(!this.current_websockets){
this.current_websockets = [];
}
const wss = new WebSocketServer({ server:server, path: "/socket" });
wss.on('connection', function(ws) {
this.state.incr("socket_id", function(err, socketCounter) {
const socketId = "socket_" + socketCounter + "_" + crypto.randomBytes(64).toString('hex').substring(0,8);
const serverScope = this;
ws.on('message', function(msgString){
const socket = this;
const msg = JSON.parse(msgString);
if(msg.action == "auth"){
const token = msg.auth_token;
const editorName = msg.editor_name;
const editorAuth = msg.editor_auth;
const spaceId = msg.space_id;
Space.findOne({"_id": spaceId}).populate('creator').exec((err, space) => {
if (space) {
const upgradeSocket = function() {
if (token) {
User.findBySessionToken(token, function(err, user) {
if (err) {
console.error(err, user);
} else {
if (user) {
serverScope.addUserInSpace(user._id, space, ws, function(err){
serverScope.addLocalUser(user._id, ws);
console.log("[websockets] user " + user.email + " online in space " + space._id);
});
}
}
});
} else {
const anonymousUserId = space._id + "-" + editorName;
if(space.access_mode == "private" && space.edit_hash != editorAuth){
console.error("closing websocket: unauthed.");
ws.send(JSON.stringify({error: "auth_failed"}));
// ws.close();
return;
}
serverScope.addUserInSpace(anonymousUserId, space, ws, function(err){
serverScope.addLocalUser(anonymousUserId, ws);
console.log("[websockets] anonymous user " + anonymousUserId + " online in space " + space._id);
});
}
};
if (!ws.id) {
ws['id'] = socketId;
try {
ws.send(JSON.stringify({"action": "init", "channel_id": socketId}));
} catch (e) {
console.log("ws.send error: "+e);
}
}
if (ws.space_id) {
serverScope.removeUserInSpace(ws.space_id, ws, function(err) {
upgradeSocket();
});
} else {
upgradeSocket();
}
} else {
ws.send(JSON.stringify({error: "space not found"}));
ws.close();
return;
}
});
} else if (msg.action == "cursor" || msg.action == "viewport" || msg.action=="media") {
msg.space_id = socket.space_id;
msg.from_socket_id = socket.id;
serverScope.state.publish('cursors', JSON.stringify(msg));
}
});
ws.on('close', function(evt) {
console.log("websocket closed: ", ws.id, ws.space_id);
const spaceId = ws.space_id;
serverScope.removeUserInSpace(spaceId, ws, function(err) {
this.removeLocalUser(ws, function(err) {
}.bind(this));
}.bind(this));
}.bind(this));
ws.on('error', function(ws, err) {
console.error(err, res);
}.bind(this));
}.bind(this));
}.bind(this));
},
setupSubscription: function() {
this.cursorSubscriber = new Redis(6379, process.env.REDIS_PORT_6379_TCP_ADDR || 'localhost');
this.cursorSubscriber.subscribe(['cursors', 'users', 'updates'], function (err, count) {
console.log("[redis] websockets to " + count + " topics." );
});
this.cursorSubscriber.on('message', function (channel, rawMessage) {
const msg = JSON.parse(rawMessage);
const spaceId = msg.space_id;
const websockets = this.current_websockets;
if(channel === "updates") {
for(let i=0;i<websockets.length;i++) {
const ws = websockets[i];
if(ws.readyState === 1) {
ws.send(JSON.stringify(msg));
}
}
} else if(channel === "users") {
const usersList = msg.users;
if (usersList) {
for(let i=0;i<usersList.length;i++) {
const activeUser = usersList[i];
let user_id;
if (activeUser._id) {
user_id = activeUser._id;
} else {
user_id = spaceId + "-" + (activeUser.nickname||"anonymous");
}
for (let a=0; a < websockets.length; a++) {
const ws = websockets[a];
if(ws.readyState === 1){
if(ws.space_id == spaceId) {
ws.send(JSON.stringify({"action": "status_update", space_id: spaceId, users: usersList}));
} else {
//console.log("space id not matching", spaceId, ws.space_id);
}
} else {
// FIXME SHOULD CLEANUP SOCKET HERE
console.error("socket in wrong state", ws.readyState);
if(ws.readyState == 3) {
this.removeLocalUser(ws, (err) => {
console.log("old websocket removed");
});
}
}
}
}
} else {
console.error("userlist undefined for websocket");
}
} else if(channel === "cursors") {
const socketId = msg.from_socket_id;
for (let i=0;i<websockets.length;i++) {
const ws = websockets[i];
if (ws.readyState === 1) {
if (ws.space_id && spaceId) {
if ((ws.space_id == spaceId) && (ws.id !== socketId)) {
ws.send(JSON.stringify(msg));
}
} else {
console.log("space id not set, ignoring");
}
}
}
}
}.bind(this));
},
addLocalUser: function(username, ws) {
if (ws.added) {
return;
}
ws.added = true;
this.current_websockets.push(ws);
},
removeLocalUser: function(ws, cb) {
const idx = this.current_websockets.indexOf(ws);
if(idx > -1) {
this.removed_items = this.current_websockets.splice(idx, 1);
console.log("removed local socket, current online on this process: ", this.current_websockets.length);
} else {
console.log("websocket not found to remove");
}
this.state.del(ws.id, function(err, res) {
if (err) console.error(err, res);
else {
this.removeUserInSpace(ws.space_id, ws, (err) => {
console.log("removed user from space list");
this.distributeUsers(ws.space_id);
})
if(cb)
cb(err);
}
}.bind(this));
},
addUserInSpace: function(username, space, ws, cb) {
console.log("[websockets] user "+username+" in "+space.access_mode +" space " + space._id + " with socket " + ws.id);
this.state.set(ws.id, username, function(err, res) {
if(err) console.error(err, res);
else {
this.state.sadd("space_" + space._id, ws.id, function(err, res) {
if(err) cb(err);
else {
ws['space_id'] = space._id.toString();
this.distributeUsers(ws.space_id);
if(cb)
cb();
}
}.bind(this));
}
}.bind(this));
},
removeUserInSpace: function(spaceId, ws, cb) {
this.state.srem("space_" + spaceId, ws.id, function(err, res) {
if (err) cb(err);
else {
console.log("[websockets] socket "+ ws.id + " went offline in space " + spaceId);
this.distributeUsers(spaceId);
ws['space_id'] = null;
if (cb)
cb();
}
}.bind(this));
},
distributeUsers: function(spaceId) {
if(!spaceId)
return;
this.state.smembers("space_" + spaceId, function(err, list) {
async.map(list, function(item, callback) {
this.state.get(item, function(err, userId) {
console.log(item, "->", userId);
callback(null, userId);
});
}.bind(this), function(err, userIds) {
const uniqueUserIds = _.unique(userIds);
const validUserIds = _.filter(uniqueUserIds, function(uId) {
return mongoose.Types.ObjectId.isValid(uId);
});
const nonValidUserIds = _.filter(uniqueUserIds, function(uId) {
return (uId !== null && !mongoose.Types.ObjectId.isValid(uId));
});
const anonymousUsers = _.map(nonValidUserIds, function(nonValidId) {
const realNickname = nonValidId.slice(nonValidId.indexOf("-")+1);
return {nickname: realNickname, email: null, avatar_thumbnail_uri: null };
});
User.find({"_id" : { "$in" : validUserIds }}, { "nickname" : 1 , "email" : 1, "avatar_thumbnail_uri": 1 }, function(err, users) {
if (err)
console.error(err);
else {
const allUsers = users.concat(anonymousUsers);
const strUsers = JSON.stringify({users: allUsers, space_id: spaceId});
this.state.publish("users", strUsers);
}
}.bind(this));
}.bind(this));
}.bind(this));
}
};

321
locales/de.js Normal file
View File

@ -0,0 +1,321 @@
{
"lang": "de",
"ok": "OK",
"cancel": "Abbrechen",
"close": "Schließen",
"open": "Öffnen",
"folder": "Ordner",
"duplicate": "Duplizieren",
"save": "Speichern",
"saved": "Gespeichert",
"created": "Erstellt",
"delete": "Löschen",
"remove": "Entfernen",
"set": "Übernehmen",
"reset": "Zurücksetzen",
"thanks": "Danke",
"share": "Teilen",
"signup": "Registrieren",
"login": "Anmelden",
"logout": "Abmelden",
"email": "E-Mail-Adresse",
"password": "Passwort",
"width": "Breite",
"height": "Höhe",
"nick": "Benutzername",
"role": "Rolle",
"members": "Mitglieder",
"actions": "Aktionen",
"or": "oder",
"you": "du",
"via": "via",
"by": "von",
"new": "Neu",
"zero": "Null",
"page": "Seite",
"copy": "Kopie",
"home": "Übersicht",
"owner": "Besitzer",
"space": "Space",
"second": "Sekunde",
"not_found": "Nicht Gefunden.",
"untitled_space": "Unbenannter Space",
"untitled_folder": "Unbenannter Order",
"untitled": "Unbenannter",
"sure": "Bist du sicher?",
"specify": "Bitte spezifiziere",
"confirm": "Bitte bestätige",
"signup_google": "Mit Google anmelden",
"error_unknown_email": "Unbekannte Kombination von Email und Passwort. Oder versuche dich mit Google anzumelden.",
"error_password_confirmation": "Die beiden Passwörter stimmen nicht überein.",
"error_domain_blocked": "Diese Domain ist gesperrt.",
"error_user_email_already_used": "Diese Email-Adresse ist bereits registriert.",
"support": "Spacedeck-Support",
"offline": "Verbindungsverlust. Mehr Infos hier.",
"error": "Entschuldigung, etwas ist schiefgegangen. Bitte kontaktiere support@spacedeck.com",
"welcome": "Willkommen",
"claim": "Dein digitales Whiteboard.",
"trynow": "Jetzt probieren.",
"about": "Über uns",
"terms": "AGBs",
"contact": "Kontakt",
"privacy": "Privatsphäre",
"post_adress": "Postadresse",
"phone": "Phone",
"business_address": "business_address",
"ceo": "Geschäftsführer",
"business_adress": "business_adress",
"title": "Titel",
"name": "Name",
"confirm_subject": "E-Mail Bestätigung für Spacedeck",
"confirm_body": "Danke, dass du dich bei Spacedeck angemeldet hast.\nBitte klicke auf den folgenden Link, um deine E-Mail Adresse zu bestätigen.\n ",
"confirm_action": "E-Mail Bestätigen",
"team_invite_membership_subject": "Einladung zu %s auf Spacedeck",
"team_invite_membership_body": "Du wurdest zu %s auf Spacedeck eingeladen. \n\nBitte klicke auf den folgenden Link, um die Einladung anzunehmen.\n",
"team_invite_user_body": "Du wurdest zu %s auf Spacedeck eingeladen. Dein temporäres Passwort ist \"%s\".\n Bitte klicke auf den folgenden Link, um die Einladung anzunehmen.",
"team_invite_admin_body": " %s wurde zu %s auf Spacedeck eingeladen. Das temporäres Passwort ist \"%s\".",
"team_invite_membership_action": "Annehmen",
"team_new_member_subject": "Neues Team Mitglied",
"team_new_member_body": "%s hat gerade seine Einladung zum Team %s angenommen.",
"space_invite_membership_subject": "Einladung von %s in Space %s",
"space_invite_membership_body": "Du wurdest von %s in den Space '%s' eingeladen.\nBitte klicke auf den folgenden Link um die Einladung anzunehmen.",
"space_invite_membership_action": "Annehmen",
"folder_invite_membership_subject": "Einladung von %s in Ordner %s",
"folder_invite_membership_body": "Du wurdest von %s in den Space '%s' eingeladen.\nBitte klicke auf den folgenden Link um die Einladung anzunehmen.",
"folder_invite_membership_action": "Accept",
"upgrade": "Upgrade",
"upgrade_now": "Jetzt Upgraden",
"create_space": "Space Erstellen",
"create_folder": "Ordner Erstellen",
"email_unconfirmed": "Email Unbestätigt",
"confirmation_sent": "Email Versandt",
"folder_filter": "Filter",
"sort_by": "Reihenfolge",
"last_modified": "Zuletzt Geändert",
"last_opened": "Zuletzt Geöffnet",
"edit_team": "Team Verwalten",
"edit_account": "Konto Bearbeiten",
"log_out": "Abmelden",
"no_spaces_yet": "Du hast noch keine Spaces erstellt.",
"new_folder_title": "Neuer Titel für Ordner",
"folder_settings": "Ordner-Einstellungen",
"upload_cover_image": "Ordnerbild Hochladen",
"spacedeck_pro_ad_folders": "Mit Spacedeck Pro kannst du beliebig viele Spaces in Ordnerstrukturen organisieren und für jeden Ordner Zugriffsrechte regeln. Möchtest du mehr über die Pro-Version erfahren?",
"spacedeck_pro_ad_versions": "Mit Spacedeck Pro kannst du beliebig viele Versionen deines Spaces festhalten und später die Entwicklungsgeschichte nachvollziehen. Möchtest du mehr über die Pro-Version erfahren?",
"spacedeck_pro_ad_pdf": "Mit Spacedeck Pro kannst du Spaces und sogar ganze Ordner als druckreife PDFs exportieren oder per Mail versenden. Möchtest du mehr über die Pro-Version erfahren?",
"spacedeck_pro_ad_zip": "Mit Spacedeck Pro kannst du die Inhalte deiner Spaces jederzeit als ZIP-Paket exportieren. Möchtest du mehr über die Pro-Version erfahren?",
"spacedeck_pro_ad_colors": "Spacedeck Pro enthält einen Profi-Farbmischer, mit dem du deine eigenen Farben mischen kannst.",
"profile_caption": "Profil",
"upload_avatar": "Profilbild Hochladen",
"uploading_avatar": "Profilbild wird hochgeladen…",
"avatar_dimensions": "Bestes Format: 200×200 Pixel.",
"profile_name": "Name",
"profile_email": "Email-Adresse",
"send_again": "Erneut Senden",
"confirmation_sent_long": "Email-Bestätigungslink versandt. Bitte überprüfe deine Mails.",
"confirmation_sent_another": "Wir haben eine weiteren Bestätigungslink versandt.",
"confirmation_sent_dialog_text": "Wir haben dir eine Email geschickt, die erklärt, wie das mit der Bestätigung läuft.",
"payment_caption": "Bezahlung",
"language_caption": "Sprache",
"notifications_caption": "Emails",
"notifications_option_chat": "Haltet mich über neue Kommentare auf dem Laufenden.",
"notifications_option_spaces": "Schickt mir täglich eine Zusammenfassung über Änderungen an meinen Spaces und Ordnern.",
"password_caption": "Passwort",
"current_password": "Altes Passwort",
"new_password": "Neues Passwort",
"verify_password": "Zur Sicherheit nochmal",
"change_password": "Passwort Ändern",
"reset_password": "Passwort Zurücksetzen",
"terminate_caption": "Kündigen",
"terminate_warning": "Wenn du kündigst, werden all deine Spaces, Ordner und Nachrichten und alle ihre Inhalte gelöscht.",
"terminate_warning2": "Das kann man nicht rückgängig machen.",
"terminate_reason": "Kündigungsgrund",
"terminate_reason_caption": "Wenn du uns mitteilst, was dich gestört hat, hilft uns das dabei ein besseres Produkt zu machen.",
"terminate_terminate": "Wirklich Kündigen",
"space_blank1": "Dies ist dein brandneuer, leerer Space!",
"space_blank2": "Wirf Dateien rein, paste Web-Links",
"space_blank3": "oder nutz die Werkzeuge da unten.",
"space_blank4": "Sei kreativ und tob dich aus!",
"draft": "Entwurf",
"publish": "Veröffentlichen",
"published": "Veröffentlicht",
"save_version": "Version Speichern",
"version_saved": "Version Gespeichert",
"post": "Abschicken",
"chat_invite_cta1": "Zusammen arbeiten macht Spaß!",
"chat_invite_cta2": "Warum ",
"chat_invite_cta3": "lädst du nicht ein paar Leute ein",
"chat_invite_cta4": "mit denen du dann zusammen arbeiten kannst?",
"chat_message_placeholder": "Schreib hier deine Nachricht…",
"view": "Ansicht",
"edit": "Bearb.",
"present": "Präse.",
"chat": "Chat",
"meta": "Teilen",
"tool_search": "Suche",
"tool_upload": "Upload",
"tool_text": "Text",
"tool_shape": "Grafik",
"tool_zones": "Zonen",
"tool_canvas": "Wand",
"search_media": "Medien im Web suchen…",
"type_here": "Hier was eingeben",
"text_formats": "Formate",
"format_p": "Absatz",
"format_bullets": "Bullet-Liste",
"format_numbers": "Nummerierte Liste",
"format_h1": "Überschrift 1",
"format_h2": "Überschrift 2",
"format_h3": "Überschrift 3",
"font_size": "Schriftgröße",
"line_height": "Zeilenhöhe",
"tool_align": "Bund",
"tool_styles": "Stil",
"tool_bullets": "Bullets",
"tool_numbers": "Zahlen",
"color_fill": "Füllung",
"color_stroke": "Strich",
"color_text": "Text",
"tool_type": "Typo",
"tool_box": "Box",
"tool_link": "Link",
"tool_layout": "Layout",
"tool_options": "Mehr",
"tool_stroke": "Strich",
"tool_delete": "Löschen",
"tool_lock": "Sperren",
"tool_copy": "Kopie",
"stack": "Anordnung",
"tool_circle": "Kreis",
"tool_hexagon": "Sechseck",
"tool_square": "Quadrat",
"tool_diamond": "Diamant",
"tool_bubble": "Blase",
"tool_cloud": "Wolke",
"tool_burst": "Burst",
"tool_star": "Stern",
"tool_heart": "Herz",
"tool_scribble": "Kritzeln",
"tool_line": "Linie",
"tool_arrow": "Pfeil",
"search_media_placeholder": "Online-Medien suchen…",
"add_zone": "Neue Zone",
"palette": "Palette",
"picker": "Mischen",
"background_image_caption": "Bild",
"background_color_caption": "Farbe",
"upload_background_caption": "Klicke hier, um ein Hintergrundbild hochzuladen.",
"upload_background": "Hintergrund Hochladen",
"access_caption": "Zugriff",
"versions_caption": "Versionen",
"info_caption": "Info",
"mode_private": "Privat: Nur Mitglieder können zugreifen",
"mode_public": "Öffentlich: Jede(r) mit Kenntnis des Links darf reinschauen",
"invite_collaborators": "Mitarbeiter Einladen",
"invitee_email_address": "Email-Adresse des neuen Mitglieds",
"optional_message": "Optionale Nachricht",
"revoke_access": "Zugriff Entfernen",
"invite": "Einladen",
"role_viewer": "Betrachter",
"role_editor": "Bearbeiter",
"role_admin": "Admin",
"new_space_title": "Neuer Titel für Space",
"logging_in": "logging_in",
"password_confirmation": "Passwort Wiederholung",
"confirm_again": "In deinem Postfach solltest du eine Bestätigungsmail finden. Bitte klicke auf den Link darin.",
"confirmed": "E-Mail Adresse wurde erfolgreich bestätigt. Danke!",
"password_check_inbox": "password_check_inbox",
"viewer": "Zuschauer",
"editor": "Bearbeiter",
"admin": "Admin",
"mobile": "Mobil",
"image": "Bild",
"tool_filter": "Filter",
"team": "Team",
"search": "Suche",
"search_no_results": "Keine Resultate",
"search_clear": "Zurücksetzen",
"rename": "Umbennen",
"login_google": "Mit Google anmelden",
"save_changes": "Änderungen speichern",
"what_is_your_name": "Willkommen bei %s ! Bitte wähle einen Benutzernamen.",
"landing_title": "Dein Online-Whiteboard.",
"landing_claim": "Mit Spacedeck kannst du multimedial auf virtuellen Whiteboards im Internet zusammenarbeiten: Kombiniere Texte, Fotos, Websites oder sogar Videos und Sounds. ",
"landing_example": "Spacedeck ist ideal, um Ideen zu visualisieren, in kreativen Teams Projekte zu überblicken oder um den Unterricht in Schulen und Universitäten interaktiv zu gestalten.",
"spaces": "Meine Spaces",
"access_editor_link": "Sofort-Mitmachen-Link",
"access_editor_link_desc": "Mit diesem Link kann man sogar ohne Spacedeck-Account sofort mitarbeiten. Praktisch!",
"access_editor_link_desc_slug": "Dieser Link beinhaltet den Namen vom Space.",
"access_anonymous_edit_blocking": "Anonyme Mitarbeiter dürfen keine Daten anderer anonymer Mitarbeiter ändern.",
"access_current_members": "Aktuelle Mitarbeiter",
"access_new_members": "Neue Mitarbeiter einladen",
"landing_customers": "Tausende Anwender weltweit vertrauen uns.",
"landing_features_title": "Schneller zum Ergebnis.",
"landing_features_text": "Spacedeck 5 hat eine brandneue Benutzeroberfläche, die das Arbeiten einfacher und intuitiver und macht - gleichzeitig aber auch mehr mächtige Werkzeuge bereitstellt.",
"landing_features_1": "<b>Drag & Drop:</b> Bilder-, Video- und Ton-Dateien direkt vom Desktop oder von anderen Webseiten in Spaces ziehen",
"landing_features_2": "<b>Textnotizen</b> mit allen Möglichkeiten bei Schriftart, Farbe und Stil",
"landing_features_3": "<b>Zeichne und Markiere</b> freihändig oder mit fertigen Formen",
"landing_features_4": "Verwandle dein Whiteboard in eine <b>zoombare Präsentation</b>",
"landing_features_5": "<b>Arbeite in Echtzeit</b> mit deinen Kollegen, Schülern oder Freunden zusammen",
"landing_features_6": "<b>Teile deine Whiteboards</b> per Link oder per E-Mail",
"landing_features_7": "<b>Exportiere deine Arbeit</b> als PDF- oder ZIP-Datei",
"landing_pricing": "Unfassbar günstig.",
"landing_pricing_lite": "Private Nutzung",
"landing_pricing_lite_text": "Basisvariante, ausreichend um multimedial zu arbeiten.",
"landing_pricing_pro_features_list": "<ul><li>Unbegrenzte Spaces</li><li>Hierarchische Ordnerstruktur</li><li>PDF und ZIP Export</li><li>Keine Wasserzeichen</li><li>Eigene Hintergründe</li><li>Liste von Aktivitäten</li><li>20 GB Speicherplatz</li><ul>",
"landing_pricing_pro": "€4,90/Anwender/Mo. <br><small>oder €49,90/Anwender/Jahr</small>",
"landing_pricing_pro_text": "Alle Features um professionell zu arbeiten.",
"welcome_subject": "Willkommen bei Spacedeck",
"welcome_body": "Danke, dass du dich bei Spacedeck angemeldet hast. <br> Wir hoffen, du wirst viel Spaß mit Spacedeck haben. <br> Vergiss nicht, dass du mit unbegrenzt vielen Kollegen und Freunden kostenlos zusammen arbeiten kannst. ",
"parent_folder": "Übergeordneter Ordner",
"access_no_members": "Noch keine Mitglieder",
"invite_emails": "E-Mail Adressen",
"created_by": "Erstellt von",
"last_updated": "Zuletzt aktualisiert",
"comments": "Kommentare",
"history_recently_updated": "Aktuelles",
"history_recently_empty": "Noch nichts passiert.",
"signing_up": "Registierung läuft",
"feedback_sent": "Danke für dein Feedback!",
"role_member": "Mitglied",
"space_message_subject": "Neue Nachricht im Space %s",
"space_message_body": "%s schrieb in %s: \n",
"password_reset_subject": "Neues Passwort für Spacedeck",
"password_reset_body": "Du möchtest das Passwort für deinen Spacedeck Account zurücksetzen?\nBitte klicke dafür auf den folgenden Link:",
"password_reset_action": "Jetzt Passwort neu setzen",
"pro_ad_history_headline": "Nach einem Upgrade zu Spacedeck Pro kannst du hier einen Überblick über alle aktuellen Aktivitäten in Spaces bekommen.",
"was_offline": "Die Verbindung wurde unterbrochen. Wir empfehlen, alle geänderten Objekte erneut zu selektieren, um sie zu speichern.",
"subscription_failed_user_subject": "Zahlung fehlgeschlagen",
"subscription_failed_user_body": "Unfortunately, we could not process your payment method. You can easly create a new payment method including PayPal in your account settings.",
"subscription_failed_team_subject": "Zahlung fehlgeschlagen",
"subscription_failed_team_body": "Unfortunately, we could not process your Payment-method for your Team-Account. Please fix your payment method asap.",
"add": "hinzufügen",
"team_name": "Team-Name",
"subdomain": "Subdomain",
"invited": "eingeladen",
"team_adresses": "E-Mail Adressen",
"duplicate_destination": "In welchen Ordner möchtest du den Space duplizieren?",
"duplicate_confirm": "%s nach %s duplizieren?",
"duplicate_success": "%s wurde in %s dupliziert.",
"goto_space": "Gehe zu %s",
"goto_folder": "Gehe zu Ordner %s",
"stay_here": "Hier bleiben",
"sharing": "sharing",
"list": "Liste",
"download_space": "Space Herunterladen",
"duplicate_destination_folder": "Zielordner für Duplikat",
"type": "Typ",
"promote": "Befördern",
"demote": "Zurückstufen",
"Previous Zone": "Vorherige Zone",
"Next Zone": "Nächste Zone",
"profile_slug": "profile_slug",
"lock": "sperren",
"unlock": "entsperren",
"link": "verlinken",
"download": "download",
"more": "mehr",
"follow_present": "Folgen",
"mute_present": "Entfolgen",
"follow_present_help": "Wenn jemand den Space präsentiert, folgen die anderen Mitglieder automatisch der Präsentation. Mit diesem Knopf lässt sich das an- oder ausschalten."
}

325
locales/en.js Normal file
View File

@ -0,0 +1,325 @@
{
"ok": "OK",
"cancel": "Cancel",
"close": "Close",
"open": "Open",
"folder": "Folder",
"save": "Save",
"saved": "Saved",
"created": "created",
"duplicate": "Duplicate",
"delete": "Delete",
"remove": "Remove",
"set": "set",
"reset": "reset",
"thanks": "Thanks",
"share": "Share",
"signup": "Sign Up",
"login": "Log in",
"logout": "Log out",
"email": "Email Address",
"password": "Password",
"width": "Width",
"height": "Height",
"nick": "Name",
"role": "Role",
"members": "Members",
"actions": "Actions",
"or": "or",
"you": "you",
"via": "via",
"by": "by",
"zero": "Zero",
"page": "Page",
"new": "New",
"copy": "Copy",
"home": "Home",
"owner": "Owner",
"space": "Space",
"second": "Second",
"not_found": "Not Found.",
"untitled_space": "Untitled Space",
"untitled_folder": "Untitled Folder",
"untitled": "untitled",
"sure": "Are you sure?",
"specify": "Please Specify",
"confirm": "Please Confirm",
"signup_google": "Sign In with Google",
"error_unknown_email": "This email/password combination is unknown. Try login with Google.",
"error_password_confirmation": "The entered passwords don't match.",
"error_domain_blocked": "Your domain is blocked.",
"error_user_email_already_used": "This email address is already in use.",
"support": "Spacedeck Support",
"offline": "Offline. Click for more.",
"error": "Sorry, but something went wrong. Please contact support@spacedeck.com",
"welcome": "Welcome",
"claim": "Your digital Whiteboard.",
"trynow": "Try now.",
"about": "About us",
"terms": "Terms",
"contact": "Contact",
"privacy": "Privacy",
"business_adress": "Business Adress",
"post_adress": "Post Adress",
"phone": "Phone",
"ceo": "Managing Director",
"name": "Name",
"confirm_subject": "Spacedeck Email Confirmation",
"confirm_body": "Thank you for signing up at Spacedeck.\nPlease click on the following link to confirm your email address.\n",
"confirm_action": "Confirm Now",
"team_invite_membership_subject": "Team Invitation for %s",
"team_invite_membership_body": "You have been invited to %s on Spacedeck. Please click on the following link to accept the invitation.",
"team_invite_user_body": "You have been invited to %s on Spacedeck.\nYour temporary password is \"%s\".\nPlease click on the following link to accept the invitation.",
"team_invite_admin_body": "%s was invited for your team: %s. The temporary password is \"%s\".",
"team_invite_membership_acction": "Accept",
"team_new_member_subject": "New Team Member for %s signed up",
"team_new_member_body": "%s just joined Team %s on Spacedeck.",
"space_invite_membership_subject": "%s invited you to a Space %s ",
"space_invite_membership_body": "You have been invited by %s to join a Space %s on Spacedeck. Please click on the following link to accept the invitation.",
"space_invite_membership_action": "Accept",
"folder_invite_membership_subject": "Space",
"folder_invite_membership_body": "You have been invited to a Team on Spacedeck. Please click on the following link to accept the invitation.",
"folder_invite_membership_acction": "Accept",
"login_google": "Login With Google",
"save_changes": "Save Changes",
"upgrade": "Upgrade",
"upgrade_now": "Upgrade Now",
"create_space": "Create Space",
"create_folder": "Create Folder",
"email_unconfirmed": "Email Unconfirmed",
"confirmation_sent": "Email Sent",
"folder_filter": "Filter",
"sort_by": "Sort by",
"last_modified": "Last Modified",
"last_opened": "Last Opened",
"title": "Title",
"edit_team": "Edit Team",
"edit_account": "Edit Account",
"log_out": "Log Out",
"no_spaces_yet": "Welcome! You can create Spaces and Folders here using the buttons in the top left corner.",
"new_folder_title": "New title for folder",
"folder_settings": "Folder Settings",
"upload_cover_image": "Upload Cover Image",
"spacedeck_pro_ad_folders": "With Spacedeck Pro, you can organize an unlimited amount of Spaces in Folders and manage access controls for each Folder. Would you like to learn more about Pro features?",
"spacedeck_pro_ad_versions": "With Spacedeck Pro, you can save unlimited versions of each Space to track your progress or keep snapshots safe. Would you like to learn more about Pro features?",
"spacedeck_pro_ad_pdf": "With Spacedeck Pro, you can export your Spaces as crisp PDFs for archiving, mailing around, or printing. Do you want to learn more about Pro features?",
"spacedeck_pro_ad_zip": "With Spacedeck Pro, you can export the contents of a Space as a ZIP package. Do you want to learn more about Pro features?",
"spacedeck_pro_ad_colors": "With Spacedeck Pro, you can mix your own colors using a professional color picker.",
"profile_caption": "Profile",
"upload_avatar": "Upload Avatar",
"uploading_avatar": "Uploading Avatar…",
"avatar_dimensions": "Recommended dimensions: 200×200 pixels.",
"profile_name": "Name",
"profile_email": "Email Address",
"send_again": "Send Again",
"confirmation_sent_long": "Email confirmation link sent. Please check your inbox.",
"confirmation_sent_another": "Another confirmation link sent.",
"confirmation_sent_dialog_text": "We sent you an email explaining how to confirm your email address.",
"payment_caption": "Payment",
"language_caption": "Language",
"notifications_caption": "Notifications",
"notifications_option_chat": "Inform me via email about new comments",
"notifications_option_spaces": "Send me a daily digest of what happened in my Spaces and Folders",
"password_caption": "Password",
"current_password": "Current Password",
"new_password": "New Password",
"verify_password": "Verify Password",
"change_password": "Change Password",
"reset_password": "Reset Password",
"terminate_caption": "Delete Account",
"terminate_warning": "If you delete your account, all Spaces, Folders and Messages including all content you and other people created in your Spaces will be destroyed.",
"terminate_warning2": "This cannot be undone.",
"terminate_reason": "Message",
"terminate_reason_caption": "Help us improve by sharing your reasons for cancelling.",
"terminate_terminate": "Terminate",
"space_blank1": "Welcome to a fresh new Space!",
"space_blank2": "Drop files, paste links",
"space_blank3": "or use the tools below",
"space_blank4": "to fill this Space with content.",
"draft": "Draft",
"publish": "Publish",
"published": "Published",
"save_version": "Save Version",
"version_saved": "Version Saved",
"post": "Post Message",
"chat_invite_cta1": "Collaboration is fun!",
"chat_invite_cta2": "Why not ",
"chat_invite_cta3": "invite some people",
"chat_invite_cta4": "to work with you?",
"chat_message_placeholder": "Write your message…",
"view": "View",
"edit": "Edit",
"present": "Present",
"chat": "Chat",
"meta": "Meta",
"tool_search": "Search",
"tool_upload": "Upload",
"tool_text": "Text",
"tool_shape": "Shape",
"tool_zones": "Zones",
"tool_canvas": "Canvas",
"search_media": "Search media…",
"type_here": "Type here",
"text_formats": "Formats",
"format_p": "Paragraph",
"format_bullets": "Bullet List",
"format_numbers": "Numbered List",
"format_h1": "Headline 1",
"format_h2": "Headline 2",
"format_h3": "Headline 3",
"font_size": "Font Size",
"line_height": "Line Height",
"tool_align": "Align",
"tool_styles": "Styles",
"tool_bullets": "Bullets",
"tool_numbers": "Numbers",
"color_fill": "Fill",
"color_stroke": "Stroke",
"color_text": "Text",
"tool_type": "Type",
"tool_box": "Box",
"tool_link": "Link",
"tool_layout": "Layout",
"tool_options": "Options",
"tool_stroke": "Stroke",
"tool_delete": "Delete",
"tool_lock": "Lock",
"tool_copy": "Copy",
"stack": "Stack",
"tool_circle": "Circle",
"tool_hexagon": "Hexagon",
"tool_square": "Square",
"tool_diamond": "Diamond",
"tool_bubble": "Bubble",
"tool_cloud": "Cloud",
"tool_burst": "Burst",
"tool_star": "Star",
"tool_heart": "Heart",
"tool_scribble": "Scribble",
"tool_line": "Line",
"tool_arrow": "Arrow",
"search_media_placeholder": "Search web media…",
"add_zone": "New Zone",
"palette": "Palette",
"picker": "Picker",
"background_image_caption": "Image",
"background_color_caption": "Color",
"upload_background_caption": "Click to upload a background image",
"upload_background": "Upload Background",
"access_caption": "Access",
"versions_caption": "Versions",
"info_caption": "Info",
"mode_private": "Private: Only members can view or edit",
"mode_public": "Public: Anyone with the link can view",
"invite_collaborators": "Invite Collaborators",
"revoke_access": "Revoke Access",
"invite": "Send Invitations",
"invitee_email_address": "Email address of new member",
"optional_message": "Optional message",
"role_viewer": "Viewer",
"role_editor": "Editor",
"role_admin": "Admin",
"new_space_title": "New title for Space",
"team": "Team",
"search": "Search",
"search_no_results": "search_no_results",
"search_clear": "search_clear",
"rename": "Rename",
"mobile": "mobile",
"image": "image",
"tool_filter": "filter",
"canel": "canel",
"invite_membership_action": "invite_membership_action",
"viewer": "viewer",
"editor": "editor",
"admin": "admin",
"logging_in": "logging in",
"password_confirmation": "Password Confirmation",
"confirm_again": "We sent you an email explaining how to confirm your email address.",
"confirmed": "Your Account was confirmed successfully. Thank you.",
"signing_up": "Signing up",
"password_check_inbox": "Please check your inbox",
"new_space": "New Space",
"tool_more": "More",
"what_is_your_name": "Welcome to %s! Please choose a username.",
"lang": "en",
"landing_title": "Your Whiteboard on the Web.",
"landing_claim": "Spacedeck lets you easily combine all kinds of media on virtual whiteboards: Text notes, photos, web links, even videos and audio recordings. ",
"landing_example": "People use Spacedeck to organize their ideas, in teams to see whole projects at a glance, or in schools and universities for richer, connected learning experiences.",
"spaces": "My Spaces",
"access_editor_link": "Instant Edit Link",
"access_editor_link_desc": "Give this link to anyone who should be able to instantly edit this Space, no account required: ",
"access_editor_link_desc_slug": "This link contains the name of the space, too. ",
"access_anonymous_edit_blocking": "Anonymous Editors may only change their own items",
"access_current_members": "Current Members",
"access_new_members": "Invite New Members",
"access_no_members": "Members of this Space will show up here.",
"comments": "comments",
"landing_customers": "Trusted by Thousands.",
"landing_features_title": "A Breeze To Use.",
"landing_features_text": "The new Spacedeck 5 has a streamlined, beautiful user interface that makes your work easier and more fun than ever before while giving you even more powerful features:",
"landing_features_1": "<b>Drag & drop</b> images, videos and audio from your computer or the web",
"landing_features_2": "<b>Write and format tex</b>t with full control over fonts, colors and style",
"landing_features_3": "<b>Draw, annotate and highlight</b> with included graphical shapes",
"landing_features_4": "Turn your board into a <b>zooming presentation</b>",
"landing_features_5": "<b>Collaborate and chat</b> in realtime with teammates, students or friends.",
"landing_features_6": "<b>Share Spaces</b> on the web or via email",
"landing_features_7": "<b>Export your work</b> as printable PDF or ZIP",
"landing_pricing": "Incredibly Affordable.",
"landing_pricing_lite": "Free/Personal Use",
"landing_pricing_lite_text": "The basic, well-rounded version for collecting pictures and keeping notes.",
"landing_pricing_pro_features_list": "<ul><li>Unlimited Spaces</li><li>Folder Structures</li><li>PDF and ZIP Export</li><li>No Watermarks</li><li>Custom Backgrounds</li><li>Activity History</li><li>20 GB Storage</li><ul>",
"landing_pricing_pro": "€4,90/User/Mo. <br><small>or 49,90/User/Year</small>",
"landing_pricing_pro_text": "Turbocharged with all the power you expect.",
"landing_pricing_pro_features": "Turbocharged with all the power you expect.",
"welcome_subject": "Welcome to Spacedeck",
"welcome_body": "Hello!\nThank you for signing up at Spacedeck.<br>We hope you will enjoy working in Spaces.<br>Remember, your account includes unlimited collaborators. Feel free to share your Spaces with friends and colleagues all over the world.",
"invite_emails": "Email addresses (Comma separated)",
"history_recently_updated": "Recently Updated",
"history_recently_empty": "Nothing has happened yet.",
"parent_folder": "parent_folder",
"created_by": "Created by",
"last_updated": "Last updated",
"feedback_sent": "Thanks for your feedback!",
"role_member": "Member",
"team_invite_membership_action": "Accept invitation",
"space_message_subject": "New Message in Space %s",
"space_message_body": "%s wrote in %s: \n",
"pro_ad_history_headline": "When you upgrade to Spacedeck Pro, you will see a history of recent updates across all your (shared) Spaces here.",
"password_reset_subject": "Reset Password for Spacedeck",
"password_reset_body": "You requested a reset of your Spacedeck password.\nPlease click on the following link to set a new password.",
"password_reset_action": "Reset Now",
"was_offline": "The connection to Spacedeck was interrupted. If you have unsaved work, please keep this browser tab open until the connection is re-established, then touch the unsaved objects again.",
"subscription_failed_user_subject": "Problem with your Spacedeck Payment",
"subscription_failed_user_body": "Unfortunately, we could not process your Payment-method. You can easly create a new payment method including PayPal in your account settings.",
"subscription_failed_team_subject": "Problem with your Spacedeck Payment",
"subscription_failed_team_body": "Unfortunately, we could not process your Payment-method for your Team-Account. Please fix your payment method asap.",
"team_name": "Team Name",
"subdomain": "Subdomain",
"team_adresses": "Email adresses",
"add": "Add",
"invited": "invited",
"duplicate_destination": "Into which folder do you want to duplicate this Space?",
"duplicate_confirm": "Duplicate %s into %s?",
"duplicate_success": "%s was duplicated into %s.",
"goto_space": "Go to Space %s",
"goto_folder": "Go to Folder %s",
"stay_here": "Stay here",
"sharing": "Sharing",
"list": "Export List",
"link": "Link",
"download_space": "Download Space",
"type": "Type",
"download": "Download",
"Previous Zone": "Previous Zone",
"Next Zone": "Next Zone",
"promote": "Promote",
"demote": "Demote",
"more": "More",
"lock": "Lock",
"unlock": "Unlock",
"follow_present": "Follow",
"mute_present": "Unfollow",
"follow_present_help": "If someone else is presenting this Space, the other members automatically follow the presentation. Switch following on or off with this button.",
"export": "export"
}

318
locales/fr.js Normal file
View File

@ -0,0 +1,318 @@
{
"lang": "fr",
"ok": "OK",
"cancel": "Annuler",
"close": "Fermer",
"open": "Ouvrir",
"folder": "Dossier",
"save": "Enregistrer",
"saved": "Enregistrée",
"created": "établi",
"duplicate": "Dupliquer",
"delete": "Supprimer",
"remove": "Enlever",
"set": "Définir",
"reset": "Rédéfinir",
"thanks": "Merci",
"share": "Partager",
"signup": "S'inscrire",
"login": "Se connecter",
"logout": "Se déconnecter",
"email": "Adresse email",
"password": "Mot de passe",
"width": "Largeur",
"height": "Hauteur",
"nick": "Nom",
"role": "Rôle",
"members": "Membres",
"actions": "Actions",
"or": "ou",
"you": "vous",
"via": "par",
"by": "par",
"zero": "Zero",
"page": "Page",
"new": "Neuf",
"copy": "Copier",
"owner": "Possesseur",
"home": "Accueil",
"space": "Espace",
"second": "Seconde",
"not_found": "Pas trouvé.",
"untitled": "sans titre",
"untitled_space": "Espace sans titre",
"untitled_folder": "Dossier sans titre",
"sure": "Êtes-vous sûr?",
"specify": "Veuillez préciser:",
"confirm": "Veuillez confirmer",
"signup_google": "S'inscrire avec Google",
"error_unknown_email": "Combinaison inconnue de l'email et mot de passe. Ou essayer de signer avec Google.",
"error_password_confirmation": "Les deux mots de passe ne correspondent pas.",
"error_domain_blocked": "Ce domaine a été désactivé.",
"error_user_email_already_used": "Cette adresse email est déjà enregistré.",
"support": "Aide Spacedeck",
"offline": "Désolé , mais les serveurs Spacedeck ne peuvent pas être atteint pour le moment. Plus d' informations ici.",
"error": "Désolé, une erreur s'est produite. Veuillez contacter support@spacedeck.com",
"welcome": "Bienvenue",
"claim": "Le tableau blanc partagé pour tout le monde",
"trynow": "Essayez-le gratuitement",
"about": "de nous",
"terms": "termes",
"contact": "contact",
"privacy": "sphère privée",
"business_adress": "Siège social",
"post_adress": "Adresse courrier",
"phone": "téléphone",
"ceo": "Gestionnaire",
"name": "name",
"confirm_subject": "Confirmation de l'email Spacedeck",
"confirm_body": "Merci pour votre inscription à Spacedeck.\nSil vous plaît cliquez sur le lien suivant pour confirmer votre adresse e-mail.",
"confirm_action": "Confirmer",
"team_invite_membership_subject": "Team Invitation for %s",
"team_invite_membership_body": "You have been invited to %s on Spacedeck.\nPlease click on the following link to accept the invitation.",
"team_invite_user_body": "You have been invited to %s on Spacedeck.\nYour temporary password is \"%s\".\nPlease click on the following link to accept the invitation.",
"team_invite_admin_body": "%s was invited for your team: %s. The temporary password is \"%s\".",
"team_invite_membership_acction": "Accept",
"team_new_member_subject": "New Team Member",
"team_new_member_body": "%s just joined Team %s on Spacedeck.",
"invite_emails": "Entrer les adresses email (séparées pas des virgules)",
"optional_message": "Message personnel (facultatif)",
"space_invite_membership_subject": "Invitation Espace par %s: %s",
"space_invite_membership_body": "Vous avez été invité par %s à Espace \"%s\"",
"space_invite_membership_action": "Accepter L'invitation",
"folder_invite_membership_subject": "Space",
"folder_invite_membership_body": "You have been invited to a Team on Spacedeck. Please click on the following link to accept the invitation.",
"folder_invite_membership_acction": "Accept",
"login_google": "S'inscrire avec Google",
"save_changes": "Enregistrer",
"upgrade": "Upgrade",
"upgrade_now": "Mise à niveau",
"create_space": "Créer un espace",
"create_folder": "Créer un dossier",
"email_unconfirmed": "Email non confirmée",
"confirmation_sent": "L'email est envoyé.",
"folder_filter": "Filtre",
"sort_by": "Ordre",
"last_modified": "Dernière modification",
"last_opened": "Dernière ouverture",
"title": "Titre",
"edit_team": "Modifier l'équipe",
"edit_account": "Modifier le compte",
"log_out": "Déconnecter",
"no_spaces_yet": "Vous ne avez pas encore créé d'espaces.",
"new_folder_title": "Nouveau titre pour le dossier",
"folder_settings": "Paramètres du dossier",
"upload_cover_image": "Charger image de couverture",
"spacedeck_pro_ad_folders": "Avec Spacedeck Pro, vous pouvez organiser un nombre illimité de espaces dans les dossiers et gérer les contrôles d'accès pour chaque dossier. Voulez-vous en savoir plus sur les fonctionnalités Pro?",
"spacedeck_pro_ad_versions": "Avec Spacedeck Pro, vous pouvez enregistrer des versions illimitées de chaque espace pour suivre vos progrès ou de conserver des instantanés sécurité. Voulez-vous en savoir plus sur les fonctionnalités Pro?",
"spacedeck_pro_ad_pdf": "Avec Spacedeck Pro, vous pouvez exporter vos espaces et même des dossiers entiers belles PDF pour l'archivage, de diffusion, ou autour de l'impression. Voulez-vous en savoir plus sur les fonctionnalités Pro?",
"spacedeck_pro_ad_zip": "Avec Spacedeck Pro, vous pouvez exporter le contenu d'un espace comme un paquet ZIP. Voulez-vous en savoir plus sur les fonctionnalités Pro?",
"spacedeck_pro_ad_colors": "Avec Spacedeck Pro, vous pouvez mélanger vos propres couleurs en utilisant un sélecteur de couleur professionnelle.",
"profile_caption": "Profil",
"upload_avatar": "Télécharger l'image profil",
"uploading_avatar": "L'image de profil est téléchargée…",
"avatar_dimensions": "Format suggéré: 200×200 pixels.",
"profile_name": "Name",
"profile_email": "Email",
"send_again": "Renvoyer",
"confirmation_sent_long": "Lien de confirmation email envoyé. Se il vous plaît vérifier votre courrier.",
"confirmation_sent_another": "Nous avons envoyé un autre lien de confirmation.",
"confirmation_sent_dialog_text": "Nous vous avons envoyé un email expliquant comment confirmer votre adresse email.",
"payment_caption": "Paiement",
"language_caption": "Langue",
"notifications_caption": "Emails",
"notifications_option_chat": "Envoyez-moi les nouveaux commentaires par email.",
"notifications_option_spaces": "Envoyez-moi un résumé quotidien des modifications à mes espaces.",
"password_caption": "Mot de passe",
"current_password": "Ancien mot de passe",
"new_password": "Nouveau mot de passe",
"verify_password": "Répéter mot de passe",
"change_password": "Enregistrer",
"reset_password": "Mot de passe oublié?",
"terminate_caption": "Supprimer le compte",
"terminate_warning": "En supprimant votre compte, vos messages, espaces, dossiers et tout leur contenu seront effacés. Cette action ne peut être annulée.",
"terminate_warning2": "Cela ne peut pas être annulée.",
"terminate_reason": "Problèmes rencontrés",
"terminate_reason_caption": "Aidez-nous à améliorer le produit en précisant les raisons de la suppression de votre compte.",
"terminate_terminate": "Supprimer le compte définitivement?",
"space_blank1": "Ceci est votre nouvel espace.",
"space_blank2": "Déposez des fichiers, collez des liens web",
"space_blank3": "ou utilisez les outils.",
"space_blank4": "Soyez créatifs!",
"draft": "Conception",
"publish": "Publier",
"published": "Publié",
"save_version": "Enregistrer une version",
"version_saved": "Version enregistrée.",
"post": "Envoyer",
"chat_invite_cta1": "Travailler ensemble est amusant!",
"chat_invite_cta2": "Pourquoi ",
"chat_invite_cta3": "ne pas vous invitez quelques collaborateurs?",
"chat_invite_cta4": "",
"chat_message_placeholder": "Votre message ici…",
"view": "Vue",
"edit": "Éditer",
"present": "Prés.",
"chat": "Chat",
"meta": "Meta",
"tool_search": "Chercher",
"tool_upload": "Charger",
"tool_text": "Texte",
"tool_shape": "Dessin",
"tool_zones": "Zones",
"tool_canvas": "Mur",
"search_media": "Chercher le web pour les médias…",
"type_here": "Entrez quelque chose ici",
"text_formats": "Formats",
"format_p": "Paragraphe",
"format_bullets": "Liste à puces",
"format_numbers": "Liste numérotée",
"format_h1": "Titre 1",
"format_h2": "Titre 2",
"format_h3": "Titre 3",
"font_size": "Taille de la police",
"line_height": "Hauteur de ligne",
"tool_align": "Align",
"tool_styles": "Style",
"tool_bullets": "Puces",
"tool_numbers": "Numéros",
"color_fill": "Fond",
"color_stroke": "Ligne",
"color_text": "Text",
"tool_type": "Typo.",
"tool_box": "Box",
"tool_link": "Lien",
"tool_layout": "Layout",
"tool_options": "Plus",
"tool_stroke": "Ligne",
"tool_delete": "Effacer",
"tool_lock": "Bloquer",
"tool_copy": "Copie",
"stack": "Empiler",
"tool_circle": "Cercle",
"tool_hexagon": "Hexagone",
"tool_square": "Carré",
"tool_diamond": "Diamant",
"tool_bubble": "Bulle",
"tool_cloud": "Nuage",
"tool_burst": "Éclat",
"tool_star": "Étoile",
"tool_heart": "Cœur",
"tool_scribble": "Crayon",
"tool_line": "Ligne",
"tool_arrow": "Flèche",
"search_media_placeholder": "Chercher le web pour les médias…",
"add_zone": "Ajouter Zone",
"palette": "Palette",
"picker": "Mélange",
"background_image_caption": "Image",
"background_color_caption": "Couleur",
"upload_background_caption": "Cliquez ici pour télécharger une image de fond.",
"upload_background": "Télécharger",
"access_caption": "Accès",
"versions_caption": "Versions",
"info_caption": "Info",
"mode_private": "Privé",
"mode_public": "Public",
"invite_collaborators": "Inviter les collaborateurs",
"revoke_access": "Révoquer l'accès",
"invite": "Inviter",
"role_viewer": "Spectateur",
"role_editor": "Éditeur",
"role_admin": "Administrateur",
"new_space_title": "Nouveau titre pour l'espace",
"invitee_email_address": "Adresse e-mail de invitee",
"viewer": "Spectateur",
"editor": "Éditeur",
"admin": "Administrateur",
"mobile": "Mobile",
"image": "Image",
"tool_filter": "Filter",
"team": "Team",
"search": "Recherche",
"search_no_results": "Aucun résultat trouvé",
"search_clear": "Supprimer",
"rename": "Renommer",
"logging_in": "Connexion",
"password_confirmation": "Confirmation du mot de passe",
"confirm_again": "Veuillez consulter votre boîte pour confirmer votre email.",
"confirmed": "Adresse email confirmée avec succès. merci!",
"password_check_inbox": "password_check_inbox",
"what_is_your_name": "Bonjour! Choisir un nom d'utilisateur s'il vous plaît.",
"landing_title": "Le tableau blanc partagé pour tout le monde.",
"landing_claim": "Le tableau blanc partagé pour tout le monde.",
"landing_example": "Que vous soyez étudiant, enseignant ou chercheur: Avec Spacedeck il est facile pour vous de créer, de gérer et de partager des cours ou le travail en classe. Développez vos théories visuellement. Organisez des notes de recherche, web, images, audio et vidéo.",
"spaces": "Espaces",
"access_editor_link": "Lien instantané.",
"access_editor_link_desc": "Donnez ce lien à tous ceux que vous voulez inviter rapidement. Ils nont pas besoin créer un compte Spacedeck.",
"access_editor_link_desc_slug": "Y compris le nom du lien",
"access_anonymous_edit_blocking": "Ces invités ne peuvent modifier que les éléments quils ont eux-même créé.",
"access_current_members": "Membres actuels",
"comments": "Commentaires",
"access_no_members": "No members yet. You can invite some below.",
"access_new_members": "Inviter de nouveaux membres.",
"landing_customers": "Approuvé par des milliers.",
"landing_features_title": "Un jeu d'enfant.",
"landing_features_text": "Le tout nouveau Spacedeck 5 vous permet de travailler bien plus facilement grâce à sa magnifique interface simplifiée.",
"landing_features_1": "Glissez & déposez images, vidéos et audios de votre ordinateur ou du web",
"landing_features_2": "Ecrivez directement sur l'espace et choisissez les polices de caractère, couleurs et styles",
"landing_features_3": "Dessinez, annotez et surlignez grâce aux formes graphiques intégrées",
"landing_features_4": "Transformez votre espace en une présentation dynamique",
"landing_features_5": "Collaborez et discutez en temps réel avec vos collègues, élèves et amis",
"landing_features_6": "Partagez vos espaces sur le web ou par email",
"landing_features_7": "Exportez votre espace en PDF pour l'imprimer",
"landing_pricing": "Incroyablement abordable.",
"landing_pricing_lite": "Usage personnel",
"landing_pricing_lite_text": "La version de base, bien arrondi pour recueillir des images et de garder des notes.",
"landing_pricing_pro_features_list": "<ul><li>Unlimited Spaces</li><li>Exporter PDF, ZIP</li><li>No Watermarks</li><li>Image de fonds</li><li>Activity History</li><li>20 Go de stockage</li><ul>",
"landing_pricing_pro": "€4,90/User/Mo. <br><small> €49,90/User/Year</small>",
"landing_pricing_pro_text": "Avec toute la puissance que vous attendez.",
"landing_pricing_pro_features": "Avec toute la puissance que vous attendez.",
"welcome_subject": "Bienvenue sur Spacedeck",
"welcome_body": "Merci pour votre inscription à Spacedeck.\nNous espérons que vous aurez plaisir à travailler dans les Espaces. <br> Rappelez-vous que votre compte comprend un nombre illimité de collaborateurs. <br> N''hésitez pas à partager vos espaces avec des amis et collègues du monde entier.",
"parent_folder": "Dossier origine",
"created_by": "Créé par",
"last_updated": "Mis à jour",
"history_recently_updated": "Nouvelles",
"history_recently_empty": "Rien ne se passe",
"signing_up": "Signing Up",
"feedback_sent": "Merci pour votre commentaire!",
"space_message_subject": "A posté sur %s",
"space_message_body": "%s a commenté dans %s:\n",
"role_member": "role_member",
"password_reset_subject": "Réinitialiser le Mot de passe pour Spacedeck",
"password_reset_body": "Salut!<br><br>Vous avez demandé la réinitialisation de votre Mot de passe.<br>Veuillez cliquer sur le lien suivant pour définir un nouveau Mot de passe.<br>",
"password_reset_action": "Définir un nouveau Mot de passe",
"was_offline": "The connection to Spacedeck was interrupted. If you have unsaved work, please keep this browser tab open until the connection is re-established, then touch the unsaved objects again.",
"subscription_failed_user_subject": "Problem with your Spacedeck Payment",
"subscription_failed_user_body": "Unfortunately, we could not process your Payment-method. You can easly create a new payment method including PayPal in your account settings.",
"subscription_failed_team_subject": "Problem with your Spacedeck Payment",
"subscription_failed_team_body": "Unfortunately, we could not process your Payment-method for your Team-Account. Please fix your payment method asap.",
"pro_ad_history_headline": "Après une mise à niveau vous pouvez obtenir un aperçu de toutes les activités actuelles dans les espaces ici.",
"add": "ajouter",
"team_name": "Nom de l'équipe",
"subdomain": "sous-domaine",
"invited": "invité",
"team_adresses": "E-mail adresse",
"duplicate_destination": "Sélectionnez le dossier de destination",
"duplicate_confirm": "Dupliquer %s dans %s?",
"duplicate_success": "%s a été dupliqué dans %s.",
"goto_space": "Aller à l'espace %s",
"goto_folder": "Aller au dossier %s",
"stay_here": "Reste ici",
"download_space": "télécharger un espace",
"type": "Type",
"Previous Zone": "Zone précédent",
"Next Zone": "Zone suivante",
"list": "liste",
"promote": "promouvoir",
"demote": "rétrograder",
"lock": "bloquer",
"unlock": "déverrouillage",
"link": "link",
"download": "download",
"more": "plus",
"follow_present": "Suivre",
"mute_present": "Pas suivre",
"follow_present_help": "follow_present_help"
}

19
middlewares/404.js Normal file
View File

@ -0,0 +1,19 @@
'use strict';
require('../models/schema');
var config = require('config');
module.exports = (req, res, next) => {
var err = new Error('Not Found');
if (req.accepts('text/html')) {
res.status(404).render('not_found', {
title: 'Page Not Found.'
});
} else if (req.accepts('application/json')) {
res.status(404).json({
"error": "not_found"
});
} else {
res.status(404).send("Not Found.");
}
}

10
middlewares/500.js Normal file
View File

@ -0,0 +1,10 @@
'use strict';
module.exports = (err, req, res, next) => {
console.error(err);
res.status(err.status || 500);
res.render('error', {
message: err.message,
error: {}
});
}

View File

@ -0,0 +1,55 @@
'use strict';
require('../models/schema');
var config = require('config');
const redis = require('../helpers/redis');
var saveAction = (actionKey, object) => {
if (object.constructor.modelName == "Space")
return;
let attr = {
action: actionKey,
space: object.space_id || object.space,
user: object.user_id || object.user,
editor_name: object.editor_name,
object: object.toJSON()
};
let action = new Action(attr);
action.save(function(err) {
if (err)
console.error("saved create action err:", err);
});
};
module.exports = (req, res, next) => {
res.header("Cache-Control", "no-cache");
req['channelId'] = req.headers['x-spacedeck-channel'];
req['spacePassword'] = req.headers['x-spacedeck-spacepassword'];
req['spaceAuth'] = req.query['spaceAuth'] || req.headers['x-spacedeck-space-auth'];
res['distributeCreate'] = function(model, object) {
if (!object) return;
redis.sendMessage("create", model, object.toJSON(), req.channelId);
this.status(201).json(object.toJSON());
saveAction("create", object);
};
res['distributeUpdate'] = function(model, object) {
if (!object) return;
redis.sendMessage("update", model, object.toJSON(), req.channelId);
this.status(200).json(object.toJSON());
saveAction("update", object);
};
res['distributeDelete'] = function(model, object) {
if (!object) return;
redis.sendMessage("delete", model, object.toJSON(), req.channelId);
this.sendStatus(204);
saveAction("delete", object);
};
next();
}

View File

@ -0,0 +1,22 @@
'use strict';
require('../models/schema');
var config = require('config');
module.exports = (req, res, next) => {
var artifactId = req.params.artifact_id;
Artifact.findOne({
"_id": artifactId
}, (err, artifact) => {
if (err) {
res.status(400).json(err);
} else {
if (artifact) {
req['artifact'] = artifact;
next();
} else {
res.sendStatus(404);
}
}
});
};

48
middlewares/cors.js Normal file
View File

@ -0,0 +1,48 @@
'use strict';
require('../models/schema');
const config = require('config');
const url = require('url');
function respond(origin, req, res, next) {
res.header('Access-Control-Allow-Origin', origin);
res.header('Access-Control-Allow-Credentials', true);
res.header('Access-Control-Max-Age', 60 * 60 * 24);
res.header('Access-Control-Expose-Headers', 'Accepts, Content-Type, X-Spacedeck-Space-Role, X-Spacedeck-Channel, X-Spacedeck-Spacepassword, X-Spacedeck-Auth, X-Spacedeck-Space-Auth');
res.header('Access-Control-Allow-Headers', 'Accepts, Accept-Language, Accept-Encoding, Accept-Language, Content-Type, X-Spacedeck-Space-Auth, X-Spacedeck-Space-Role, X-Spacedeck-Channel, X-Spacedeck-Spacepassword, X-Spacedeck-Auth');
res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE');
if (req.method == 'OPTIONS') {
res.sendStatus(204);
} else {
next();
}
}
module.exports = (req, res, next) => {
const origin = req.headers.origin;
if (origin) {
const parsedUrl = url.parse(origin, true, true);
// FIXME
if (parsedUrl.hostname == "cdn.spacedeck.com") {
res.header('Cache-Control', "max-age");
res.header('Expires', "30d");
res.removeHeader("Pragma");
respond(origin, req, res, next);
} else {
Team.getTeamForHost(parsedUrl.hostname, (err, team, subdomain) => {
if (team) {
respond(origin, req, res, next);
} else {
next();
}
});
}
} else {
next();
}
}

View File

@ -0,0 +1,16 @@
'use strict';
module.exports = (req, res, next) => {
res.bad_request = (msg) => {
if (req.accepts('text/html')) {
res.status(400).render('error', {
message: msg
});
} else {
res.status(400).json({
"error": msg
});
}
}
next();
}

17
middlewares/i18n.js Normal file
View File

@ -0,0 +1,17 @@
'use strict';
require('../models/schema');
var config = require('config');
module.exports = (req, res, next) => {
req.i18n.setLocale(req.i18n.prefLocale);
if (req.cookies.spacedeck_locale) {
req.i18n.setLocaleFromCookie();
}
if (req.user && req.user.preferences.language) {
req.i18n.setLocale(req.user.preferences.language);
}
next();
}

38
middlewares/setuser.js Normal file
View File

@ -0,0 +1,38 @@
'use strict';
require('../models/schema');
var config = require('config');
module.exports = (req, res, next) => {
const token = req.cookies["sdsession"];
if (token && token != "null" && token !== null) {
User.findOne({
"sessions.token": token
}).populate('team').exec((err, user) => {
if (!user) {
// FIXME
var domain = "localhost";
res.clearCookie('sdsession', {
domain: domain
});
if (req.accepts("text/html")) {
res.redirect("/");
} else if (req.accepts('application/json')) {
res.status(403).json({
"error": "token_not_found"
});
} else {
res.redirect("/");
}
} else {
req["token"] = token;
req["user"] = user;
next();
}
});
} else {
next();
}
}

View File

@ -0,0 +1,160 @@
'use strict';
require('../models/schema');
var config = require('config');
module.exports = (req, res, next) => {
let spaceId = req.params.id;
let finalizeReq = (space, role) => {
if (role === "none") {
res.status(403).json({
"error": "access denied"
});
} else {
req['space'] = space;
req['spaceRole'] = role;
res.header("x-spacedeck-space-role", req['spaceRole']);
next();
}
};
var rolePerUser = (originalSpace, user, cb) => {
originalSpace.path = [];
if (originalSpace._id.equals(req.user.home_folder_id) || (originalSpace.creator && originalSpace.creator._id.equals(req.user._id))) {
cb("admin");
} else {
var findMembershipsForSpace = function(space, allMemberships, prevRole) {
Membership.find({
"space": space._id
}, function(err, parentMemberships) {
var currentMemberships = parentMemberships.concat(allMemberships);
if (space.parent_space_id) {
Space.findOne({
"_id": space.parent_space_id
}, function(err, parentSpace) {
findMembershipsForSpace(parentSpace, currentMemberships, prevRole);
});
} else {
// reached the top
var role = prevRole;
space.memberships = currentMemberships;
if(role == "none"){
if(originalSpace.access_mode == "public") {
role = "viewer";
}
}
currentMemberships.forEach(function(m, i) {
if (m.user && m.user.equals(user._id)) {
role = m.role;
}
});
cb(role);
}
});
};
findMembershipsForSpace(originalSpace, [], "none");
}
};
var finalizeAnonymousLogin = function(space, spaceAuth) {
var role = "none";
if (spaceAuth && (spaceAuth === space.edit_hash)) {
role = "editor";
} else {
if (space.access_mode == "public") {
role = "viewer";
} else {
role = "none";
}
}
if (req.user) {
rolePerUser(space, req.user, function(newRole) {
if (newRole == "admin" && (role == "editor" || role == "viewer")) {
finalizeReq(space, newRole);
} else if (newRole == "editor" && (role == "viewer")) {
finalizeReq(space, newRole);
} else {
finalizeReq(space, role);
}
});
} else {
finalizeReq(space, role);
}
};
var userMapping = {
'_id': 1,
'nickname': 1,
'email': 1
};
Space.findOne({
"_id": spaceId
}).populate("creator", userMapping).exec(function(err, space) {
if (err) {
res.status(400).json(err);
} else {
if (space) {
if (space.access_mode == "public") {
if (space.password) {
if (req.spacePassword) {
if (req.spacePassword === space.password) {
finalizeAnonymousLogin(space, req["spaceAuth"]);
} else {
res.status(403).json({
"error": "password_wrong"
});
}
} else {
res.status(401).json({
"error": "password_required"
});
}
} else {
finalizeAnonymousLogin(space, req["spaceAuth"]);
}
} else {
// special permission for screenshot/pdf export from backend
if (req.query['api_token'] && req.query['api_token'] == config.get('phantom_api_secret')) {
finalizeReq(space, "viewer");
return;
}
if (req.user) {
rolePerUser(space, req.user, function(role) {
if (role == "none") {
finalizeAnonymousLogin(space, req["spaceAuth"]);
} else {
finalizeReq(space, role);
}
});
} else {
if (req.spaceAuth && space.edit_hash) {
finalizeAnonymousLogin(space, req["spaceAuth"]);
} else {
res.status(403).json({
"error": "auth_required"
});
}
}
}
} else {
res.status(404).json({
"error": "space_not_found"
});
}
}
});
}

33
middlewares/subdomain.js Normal file
View File

@ -0,0 +1,33 @@
'use strict';
require('../models/schema');
var config = require('config');
module.exports = (req, res, next) => {
let host = req.headers.host;
Team.getTeamForHost(host, (err, team, subdomain) => {
if (subdomain) {
if (!err && team) {
req.subdomainTeam = team;
req.subdomain = subdomain;
next()
} else {
if (req.accepts('text/html')) {
res.status(404).render('not_found', {
title: 'Page Not Found.'
});
} else if (req.accepts('application/json')) {
res.status(404).json({
"error": "not_found"
});
} else {
res.status(404).render('not_found', {
title: 'Page Not Found.'
});
}
}
} else {
next();
}
});
}

View File

@ -0,0 +1,23 @@
'use strict';
require('../models/schema');
var config = require('config');
module.exports = (req, res, next) => {
if (req.user) {
var isAdmin = req.user.team.admins.indexOf(req.user._id) >= 0;
var correctMethod = req.method == "GET" || (req.method == "DELETE" || req.method == "PUT" || req.method == "POST");
if (correctMethod && isAdmin) {
next();
} else {
res.status(403, {
"error": "not authorized"
});
}
} else {
res.status(403, {
"error": "not logged in"
});
}
}

31
middlewares/templates.js Normal file
View File

@ -0,0 +1,31 @@
'use strict';
require('../models/schema');
var config = require('config');
var _ = require('underscore');
module.exports = (req, res, next) => {
res.oldRender = res.render;
res.render = function(template, params) {
var team = req.subdomainTeam;
if (team) {
team = _.pick(team.toObject(), ['_id', 'name', 'subdomain', 'avatar_original_uri']);
} else {
team = null;
}
const addParams = {
locale: req.i18n.locale,
config: config,
subdomain_team: team,
user: req.user,
csrf_token: "",
socket_auth: req.token
};
const all = _.extend(params, addParams);
res.oldRender(template, all);
};
next();
}

32
models/action.js Normal file
View File

@ -0,0 +1,32 @@
'use strict';
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
module.exports.actionSchema = mongoose.Schema({
space: {
type: Schema.Types.ObjectId,
ref: 'Space'
},
user: {
type: Schema.Types.ObjectId,
ref: 'User'
},
editor_name: String,
action: String,
object: Schema.Types.Mixed,
created_at: {
type: Date,
default: Date.now
},
updated_at: {
type: Date,
default: Date.now
}
});
module.exports.actionSchema.index({
space: 1,
created_at: 1
});

88
models/artifact.js Normal file
View File

@ -0,0 +1,88 @@
'use strict';
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
module.exports.artifactSchema = mongoose.model('Artifact', {
mime: String,
thumbnail_uri: String,
space_id: Schema.Types.ObjectId,
user_id: {type: Schema.Types.ObjectId, ref: 'User' },
last_update_user_id: {type: Schema.Types.ObjectId, ref: 'User' },
editor_name: String,
last_update_editor_name: String,
description: String,
state: {type: String, default: "idle"},
meta: {
linked_to: [String],
title: String,
tags: [String],
search_text: String,
link_uri: String,
play_from: Number,
play_to: Number,
},
board: {
x: {type: Number, default: 0.0},
y: {type: Number, default: 0.0},
z: {type: Number, default: 0.0},
r: {type: Number, default: 0.0},
w: {type: Number, default: 100},
h: {type: Number, default: 100},
},
control_points: [{
dx: Number, dy: Number
}],
group:{type: String, default: ""},
locked: {type: Boolean, default: false},
payload_uri: String,
payload_thumbnail_web_uri: String,
payload_thumbnail_medium_uri: String,
payload_thumbnail_big_uri: String,
payload_size: Number, // file size in bytes
style: {
fill_color: {type: String, default: "transparent"},
stroke_color:{type: String, default: "#000000"},
text_color: String,
stroke: {type: Number, default: 0.0},
stroke_style: {type: String, default: "solid"},
alpha: {type: Number, default: 1.0},
order: {type: Number, default: 0},
crop: {
x: Number,
y: Number,
w: Number,
h: Number
},
shape: String,
shape_svg: String,
padding_left: Number,
padding_right: Number,
padding_top: Number,
padding_bottom: Number,
margin_left: Number,
margin_right: Number,
margin_top: Number,
margin_bottom: Number,
border_radius: Number,
align: {type: String, default: "left"},
valign: {type: String, default: "top"},
brightness: Number,
contrast: Number,
saturation: Number,
blur: Number,
hue: Number,
opacity: Number
},
payload_alternatives: [{
mime: String,
payload_uri: String,
payload_thumbnail_web_uri: String,
payload_thumbnail_medium_uri: String,
payload_thumbnail_big_uri: String,
payload_size: Number
}],
created_at: {type: Date, default: Date.now},
created_from_ip: {type: String},
updated_at: {type: Date, default: Date.now}
});

21
models/domain.js Normal file
View File

@ -0,0 +1,21 @@
'use strict';
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
module.exports.domainSchema = mongoose.Schema({
domain: String,
edu: Boolean,
created_at: {
type: Date,
default: Date.now
},
updated_at: {
type: Date,
default: Date.now
}
});
module.exports.domainSchema.index({
domain: 1
});

45
models/membership.js Normal file
View File

@ -0,0 +1,45 @@
'use strict';
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
module.exports.membershipSchema = mongoose.Schema({
user: {
type: Schema.Types.ObjectId,
ref: 'User'
},
space: {
type: Schema.Types.ObjectId,
ref: 'Space'
},
team: {
type: Schema.Types.ObjectId,
ref: 'Team'
},
role: {
type: String,
default: "viewer"
},
state: {
type: String,
default: "active"
},
email_invited: String,
code: String,
created_at: {
type: Date,
default: Date.now
},
updated_at: {
type: Date,
default: Date.now
}
});
module.exports.membershipSchema.index({
user: 1,
space: 1,
team: 1,
code: 1
});

31
models/message.js Normal file
View File

@ -0,0 +1,31 @@
'use strict';
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
module.exports.messageSchema = mongoose.Schema({
user: {
type: Schema.Types.ObjectId,
ref: 'User'
},
editor_name: String,
space: {
type: Schema.Types.ObjectId,
ref: 'Space'
},
message: String,
created_from_ip: {type: String},
created_at: {
type: Date,
default: Date.now
},
updated_at: {
type: Date,
default: Date.now
}
});
module.exports.messageSchema.index({
space: 1,
user: 1
});

44
models/plan.js Normal file
View File

@ -0,0 +1,44 @@
'use strict';
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
Plan = mongoose.model('Plan', {
key: String,
description: String,
limit_folders: {
type: Number,
default: 200
},
limit_spaces: {
type: Number,
default: 500
},
limit_storage_bytes: {
type: Number,
default: 10737418240
},
plan_type: {
type: String,
default: "org"
},
price: Number,
public: Boolean,
recurring: {
type: String,
default: "month"
},
title: String,
trial_days: Number,
voucher_code: String,
created_at: {
type: Date,
default: Date.now
},
updated_at: {
type: Date,
default: Date.now
}
});
exports.planModel = Plan;

12
models/schema.js Normal file
View File

@ -0,0 +1,12 @@
//'use strict';
var mongoose = require('mongoose');
User = mongoose.model('User', require('./user').userSchema);
Action = mongoose.model('Action', require('./action').actionSchema);
Space = mongoose.model('Space', require('./space').spaceSchema);
Artifact = mongoose.model('Artifact', require('./artifact').artifactSchema);
Team = mongoose.model('Team', require('./team').teamSchema);
Message = mongoose.model('Message', require('./message').messageSchema);
Membership = mongoose.model('Membership', require('./membership').membershipSchema);
Domain = mongoose.model('Domain', require('./domain').domainSchema);

273
models/space.js Normal file
View File

@ -0,0 +1,273 @@
'use strict';
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var async = require('async');
var _ = require("underscore");
var crypto = require('crypto');
module.exports.spaceSchema = Schema({
name: {type: String, default: "New Space"},
space_type: {type: String, default: "space"},
creator : { type: Schema.Types.ObjectId, ref: 'User' },
parent_space_id: Schema.Types.ObjectId,
access_mode: {type: String, default: "private"}, // "public" || "private"
password: String,
edit_hash: String,
edit_slug: String,
editors_locking: Boolean,
thumbnail_uri: String,
stats: {
num_children: Number,
total_spaces: Number,
total_folders: Number,
storage_bytes: Number,
},
advanced: {
type: {
width: Number,
height: Number,
margin: Number,
background_color: String,
background_uri: String,
background_repeat: Boolean,
grid_size: Number,
grid_divisions: Number,
gutter: Number,
columns: Number,
column_max_width: Number,
columns_responsive: Number,
row_max_height: Number,
padding_horz: Number,
padding_vert: Number
},
default: {
width: 200,
height: 400,
margin: 0,
background_color: "rgba(255,255,255,1)"
}
},
blocked_at: {type: Date, default: Date.now},
created_at: {type: Date, default: Date.now},
updated_at: {type: Date, default: Date.now},
thumbnail_updated_at: {type: Date},
thumbnail_url: String
});
module.exports.spaceSchema.index({ creator: 1, parent_space_id: 1, created_at: 1, updated_at: 1, edit_hash: 1});
module.exports.spaceSchema.statics.allForUser = function (user, callback) {
return this.find({user_id: user_id}, callback);
};
module.exports.spaceSchema.statics.getMemberships = function (err, callback) {
callback(null, {});
};
var getRecursiveSubspacesForSpace = (parentSpace, cb) => {
if (parentSpace.space_type == "folder") {
Space.find({
"parent_space_id": parentSpace._id
}).exec((err, subspaces) => {
async.map(subspaces, (space, innerCb) => {
getRecursiveSubspacesForSpace(space, (err, spaces) => {
innerCb(err, spaces);
});
}, (err, subspaces) => {
var flattenSubspaces = _.flatten(subspaces);
flattenSubspaces.push(parentSpace);
cb(null, flattenSubspaces);
});
});
} else {
cb(null, [parentSpace]);
}
};
module.exports.spaceSchema.statics.getRecursiveSubspacesForSpace = getRecursiveSubspacesForSpace;
var roleMapping = {
"none": 0,
"viewer": 1,
"editor": 2,
"admin": 3
}
module.exports.spaceSchema.statics.roleInSpace = (originalSpace, user, cb) => {
if (user.home_folder_id.toString() === originalSpace._id.toString()) {
cb(null, "admin");
return;
}
if (originalSpace.creator) {
if (originalSpace.creator._id.toString() === user._id.toString()) {
cb(null, "admin");
return;
}
}
var findMembershipsForSpace = function(space, allMemberships, prevRole) {
Membership.find({
"space": space._id
}, (err, parentMemberships) => {
var currentMemberships = parentMemberships.concat(allMemberships);
if (space.parent_space_id) {
Space.findOne({
"_id": space.parent_space_id
}, function(err, parentSpace) {
var role = prevRole;
if(role == "none"){
if(originalSpace.access_mode == "public") {
role = "viewer";
}
}
findMembershipsForSpace(parentSpace, currentMemberships, role);
});
} else {
// reached the top
var role = prevRole;
space.memberships = currentMemberships;
currentMemberships.forEach(function(m, i) {
if (m.user && m.user.equals(user._id)) {
if (m.role != null) {
if (roleMapping[m.role] > roleMapping[role]) {
role = m.role;
}
}
}
});
cb(err, role);
}
});
};
findMembershipsForSpace(originalSpace, [], "none");
}
module.exports.spaceSchema.statics.recursiveDelete = (space, cb) => {
space.remove(function(err) {
Action.remove({
space: space
}, function(err) {
if (err)
console.error("removed actions for space: ", err);
});
Membership.remove({
space: space
}, function(err) {
if (err)
console.error("removed memberships for space: ", err);
});
if (space.space_type === "folder") {
Space
.find({
parent_space_id: space._id
})
.exec(function(err, spaces) {
async.eachLimit(spaces, 10, function(subSpace, innerCb) {
module.exports.spaceSchema.statics.recursiveDelete(subSpace, function(err) {
innerCb(err);
});
}, function(err) {
cb(err);
});
});
} else {
Artifact.find({
space_id: space._id
}, function(err, artifacts) {
if (err) cb(err);
else {
async.eachLimit(artifacts, 20, function(a, innerCb) {
a.remove(function(err) {
innerCb(null, a);
});
}, function(err) {
cb(err);
});
}
});
}
});
};
var duplicateRecursiveSpace = (space, user, depth, cb, newParentSpace) => {
var newSpace = new Space(space);
newSpace._id = mongoose.Types.ObjectId();
if (newParentSpace) {
newSpace.parent_space_id = newParentSpace._id;
} else {
newSpace.name = newSpace.name + " (b)";
}
newSpace.creator = user;
newSpace.created_at = new Date();
newSpace.updated_at = new Date();
if (newSpace.space_type === "space") {
newSpace.edit_hash = crypto.randomBytes(64).toString('hex').substring(0, 7);
}
newSpace.save(function(err) {
if (newSpace.space_type === "folder" && depth < 10) {
Space
.find({
parent_space_id: space._id
})
.exec(function(err, spaces) {
async.eachLimit(spaces, 10, function(subSpace, innerCb) {
duplicateRecursiveSpace(subSpace, user, ++depth, function(err, newSubSpace) {
innerCb(err, newSubSpace);
}, newSpace);
}, function(err, allNewSubspaces) {
cb(err, newSpace);
});
});
} else {
Artifact.find({
space_id: space._id
}, function(err, artifacts) {
if (err) innerCb(err);
else {
async.eachLimit(artifacts, 20, function(a, innerCb) {
var newArtifact = new Artifact(a);
newArtifact._id = mongoose.Types.ObjectId();
newArtifact.space_id = newSpace._id;
newArtifact.created_at = new Date();
newArtifact.updated_at = new Date();
newArtifact.save(function(err) {
innerCb(null, newArtifact);
});
}, function(err, allNewArtifacts) {
cb(err, newSpace);
});
}
});
}
});
};
module.exports.spaceSchema.statics.duplicateSpace = duplicateRecursiveSpace;

70
models/team.js Normal file
View File

@ -0,0 +1,70 @@
'use strict';
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
module.exports.teamSchema = mongoose.Schema({
name: String,
subdomain: String,
creator: {
type: Schema.Types.ObjectId,
ref: 'User'
},
admins: [{
type: Schema.Types.ObjectId,
ref: 'User'
}],
invitation_codes: [String],
avatar_thumb_uri: String,
avatar_uri: String,
payment_type: {
type: String,
default: "auto"
},
payment_plan_key: String,
payment_subscription_id: String,
blocked_at: {
type: Date
},
upgraded_at: {
type: Date
},
created_at: {
type: Date,
default: Date.now
},
updated_at: {
type: Date,
default: Date.now
}
});
module.exports.teamSchema.index({
creator: 1
});
module.exports.teamSchema.statics.getTeamForHost = (host, cb) => {
if (host != "127.0.0.1:9000") { //phantomjs check
let subDomainParts = host.split('.');
if (subDomainParts.length > 2) {
const subdomain = subDomainParts[0];
if (subdomain != "www") {
Team.findOne({
subdomain: subdomain
}).exec((err, team) => {
cb(err, team, subdomain)
});
} else {
cb(null, null)
}
} else {
cb(null, null);
}
} else {
cb(null, null);
}
}

53
models/user.js Normal file
View File

@ -0,0 +1,53 @@
'use strict';
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
module.exports.userSchema = mongoose.Schema({
email: String,
password_hash: String,
nickname: String,
account_type: {type: String, default: "email"},
created_at: {type: Date, default: Date.now},
updated_at: {type: Date, default: Date.now},
avatar_original_uri: String,
avatar_thumb_uri: String,
src: String,
confirmation_token: String,
confirmed_at: Date,
password_reset_token: String,
home_folder_id: Schema.Types.ObjectId,
team : { type: Schema.Types.ObjectId, ref: 'Team' },
preferences: {
language: String,
email_notifications: {type: Boolean, default: true},
daily_digest_last_send: Date,
daily_digest: {type: Boolean, default: true}
},
sessions: [
{
token: String,
expires: Date,
device: String,
ip: String,
created_at: Date
}
],
payment_info: String,
payment_plan_key: {type: String, default: "free"},
payment_customer_id: String,
payment_subscription_id: String,
payment_notification_state: Number
});
module.exports.userSchema.index({
email: 1,
"sessions.token": 1,
team: 1,
created_at: 1,
home_folder_id: 1
});
module.exports.userSchema.statics.findBySessionToken = function (token, cb) {
return this.findOne({ "sessions.token": token}, cb);
};

91
package.json Normal file
View File

@ -0,0 +1,91 @@
{
"name": "spacedeck-open",
"version": "1.0.0",
"private": true,
"scripts": {
"start": "nodemon -e .js,.html bin/www",
"test": "mocha"
},
"dependencies": {
"archiver": "0.14.4",
"async": "1.3.0",
"aws-sdk": "2.1.39",
"basic-auth": "1.0.3",
"bcrypt": "*",
"body-parser": "~1.13.1",
"cheerio": "0.19.0",
"config": "1.14.0",
"cookie-parser": "~1.3.5",
"csurf": "1.8.3",
"debug": "~2.2.0",
"execSync": "latest",
"express": "~4.13.0",
"glob": "5.0.14",
"gm": "1.18.1",
"googleapis": "2.1.3",
"gulp": "^3.9.0",
"gulp-concat": "2.6.0",
"gulp-eslint": "*",
"gulp-express": "0.3.0",
"gulp-nodemon": "*",
"gulp-sass": "^2.0.3",
"gulp-uglify": "^1.5.1",
"gulp-util": "^3.0.6",
"helmet": "^1.1.0",
"i18n-2": "0.4.6",
"ioredis": "1.6.1",
"lodash": "^4.3.0",
"log-timestamp": "latest",
"md5": "2.0.0",
"moment": "2.10.6",
"mongoose": "4.4.3",
"morgan": "1.6.1",
"node-sass-middleware": "0.8.0",
"pdfkit": "0.7.1",
"validator": "5.2.0",
"node-phantom-simple": "2.2.4",
"phantomjs-prebuilt": "2.1.7",
"pm2": "latest",
"qr-image": "3.1.0",
"raven": "0.8.1",
"request": "2.60.0",
"sanitize-html": "^1.11.1",
"serve-favicon": "~2.3.0",
"swig": "1.4.2",
"slug": "0.9.1",
"underscore": "1.8.3",
"weak": "1.0.0",
"ws": "0.7.2"
},
"devDependencies": {
"express": "^4.13.3",
"gulp": "^3.9.0",
"gulp-clean": "^0.3.2",
"gulp-concat": "^2.6.0",
"gulp-eslint": "^1.1.0",
"gulp-express": "^0.3.0",
"gulp-fingerprint": "^0.3.2",
"gulp-nodemon": "^2.0.4",
"gulp-rev": "^6.0.1",
"gulp-rev-all": "^0.8.22",
"gulp-rev-replace": "^0.4.3",
"gulp-sass": "^2.1.0",
"gulp-uglify": "^1.4.2",
"mocha": "*",
"nodemon": "*",
"should": "^7.1.0",
"supertest": "^1.1.0",
"winston": "^1.0.1"
},
"description": "",
"main": "Gulpfile.js",
"directories": {
},
"repository": {
"type": "git",
"url": "https://github.com/spacedeck/spacedeck-open.git"
},
"keywords": [],
"author": "Lukas F. Hartmann, Martin Güther",
"license": "AGPLv3"
}

BIN
public/fonts/OpenSans-Regular.ttf Executable file

Binary file not shown.

10
public/fonts/font.scss Executable file
View File

@ -0,0 +1,10 @@
@font-face {
font-family: 'icon';
src: url('../fonts/icon-regular-webfont.eot');
src: url('../fonts/icon-regular-webfont.eot?#iefix') format('embedded-opentype'),
url('../fonts/icon-regular-webfont.woff') format('woff'),
url('../fonts/icon-regular-webfont.ttf') format('truetype'),
url('../fonts/icon-regular-webfont.svg#iconregular') format('svg');
font-weight: normal;
font-style: normal;
}

Binary file not shown.

View File

@ -0,0 +1,670 @@
<?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="iconregular" horiz-adv-x="2457" >
<font-face units-per-em="2048" ascent="1638" descent="-410" />
<missing-glyph horiz-adv-x="500" />
<glyph unicode="+" d="M307 1082.5v43.5v205q0 77 13.5 90t89.5 13h614v614v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h205h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-614h614h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-205v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5 h-614v-614q0 -76 -13 -89.5t-90 -13.5h-205h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28v43.5v614h-614h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5z" />
<glyph unicode="-" />
<glyph unicode="@" d="M0 1284q5 313 116.5 579.5t305.5 454t470.5 293t601.5 105.5q113 3 240 -14q724 -87 723 -732v-1344h-361v178q-111 -113 -261.5 -176t-324.5 -62q-313 -1 -499.5 190t-186.5 497q0 121 31 229.5t96 205.5t167 168.5t243 118t324 53.5t411 -24q-5 157 -90.5 227 t-277.5 95q-118 14 -236 14q-236 -1 -437.5 -82t-344 -223.5t-223.5 -345t-81 -438.5q0 -154 35 -296t100 -263t161 -220.5t215.5 -169.5t267.5 -108.5t312 -38.5q458 2 960 270v-404q-507 -280 -991 -280q-209 0 -403.5 54t-357 151.5t-296 238.5t-225 310.5t-140 371 t-44.5 417.5zM1192 1265q0 -158 95 -240.5t273 -82.5q198 0 342 95.5t194 241.5v394q-168 30 -307 31.5t-236 -23t-168.5 -65.5t-112.5 -99t-60.5 -120t-19.5 -132z" />
<glyph unicode="&#xa7;" d="M0 58.5v43.5v983q61 0 102 41t41 103q0 61 -40.5 102t-102.5 41v983v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h2253q77 0 90 -13t13 -90v-983q-62 0 -103 -41t-41 -102t41 -102.5t103 -41.5v-983v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-2253h-43.5t-28 4.5 t-18.5 7.5t-7.5 18.5t-4.5 28zM471 1229q0 -62 41 -103t102 -41q62 0 103 41.5t41 102.5t-41 102t-103 41t-102.5 -41t-40.5 -102zM1085 1229q0 -61 41.5 -102.5t102.5 -41.5t102 41t41 103q0 61 -41 102t-102 41q-62 0 -103 -41t-41 -102zM1700 1229q0 -62 41 -103t102 -41 t102.5 41.5t41.5 102.5t-41 102t-103 41q-61 0 -102 -41t-41 -102z" />
<glyph unicode="&#xa9;" d="M-102 1229q0 181 48 353.5t133.5 318.5t208.5 269t269 208.5t318.5 133.5t353.5 48t353.5 -48t318.5 -133.5t269 -208.5t208.5 -269t133.5 -318.5t48 -353.5t-48 -353.5t-133.5 -318.5t-208.5 -269t-269 -208.5t-318.5 -133.5t-353.5 -48t-353.5 48t-318.5 133.5 t-269 208.5t-208.5 269t-133.5 318.5t-48 353.5zM205 1229q0 -209 81 -398.5t218 -326.5t326.5 -218t398.5 -81t398.5 81t326.5 218t218 326.5t81 398.5t-81 398.5t-218 326.5t-326.5 218t-398.5 81t-398.5 -81t-326.5 -218t-218 -326.5t-81 -398.5zM573 1229 q0 136 51 257.5t138.5 208.5t209 138t257.5 51q191 0 343 -87t271 -281l-307 -144q-123 184 -307 184q-138 0 -233 -94.5t-95 -232.5t95 -233t233 -95q99 0 174 41t133 143l307 -143q-119 -194 -271 -281.5t-343 -87.5q-182 0 -332.5 86.5t-237 237t-86.5 332.5z" />
<glyph unicode="&#xae;" d="M-102 1229q0 181 48 353.5t133.5 318.5t208.5 269t269 208.5t318.5 133.5t353.5 48t353.5 -48t318.5 -133.5t269 -208.5t208.5 -269t133.5 -318.5t48 -353.5t-48 -353.5t-133.5 -318.5t-208.5 -269t-269 -208.5t-318.5 -133.5t-353.5 -48t-353.5 48t-318.5 133.5 t-269 208.5t-208.5 269t-133.5 318.5t-48 353.5zM205 1229q0 -209 81 -398.5t218 -326.5t326.5 -218t398.5 -81t398.5 81t326.5 218t218 326.5t81 398.5t-81 398.5t-218 326.5t-326.5 218t-398.5 81t-398.5 -81t-326.5 -218t-218 -326.5t-81 -398.5zM819 614v1229h492 q111 0 199 -34.5t141.5 -93t81.5 -130.5t28 -151q0 -105 -49 -193t-144 -139l234 -488h-348l-184 415l-15 -5h-129v-410h-307zM1126 1331h205q18 0 29.5 1t31 6t31.5 15.5t21.5 31t9.5 49.5q0 36 -13 62t-33.5 38t-39.5 17t-37 5h-205v-225z" />
<glyph unicode="&#x2022;" d="M614 1229q0 125 49 238.5t131 196t196 131t239 48.5t238.5 -48.5t196 -131t131 -196t48.5 -238.5t-48.5 -239t-131 -196t-196 -131t-238.5 -49q-167 0 -308.5 82.5t-224 224t-82.5 308.5z" />
<glyph unicode="&#x20ac;" d="M0 819v307h187q-3 50 -3 103t3 102h-187v307h228q42 180 123 326t184.5 244t230 165t257 96.5t267.5 29.5q203 0 377.5 -65.5t299 -180.5t204 -273t102.5 -342h-430q-45 195 -196.5 302.5t-356.5 107.5q-63 0 -121.5 -8.5t-128.5 -35.5t-128 -70t-111.5 -119t-87.5 -177 h721v-307h-776q-3 -50 -3 -102q0 -53 3 -103h776v-307h-721q34 -101 87.5 -176.5t111.5 -119t128 -70t128.5 -35t121.5 -8.5q206 0 357 107.5t196 301.5h430q-23 -184 -102.5 -341.5t-204 -273t-299 -180.5t-377.5 -65q-137 0 -267.5 29.5t-257 96t-230 164.5t-184.5 244 t-123 326h-228z" />
<glyph unicode="&#x2212;" d="M307 1082.5v43.5v205q0 77 13.5 90t89.5 13h1638h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-205v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-1638h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5z" />
<glyph unicode="&#x231b;" d="M410 0v358q0 134 52 247.5t163 256.5q91 116 117 161q61 103 61 206q0 50 -11.5 95t-39 92t-47.5 75t-62 81q-12 15 -18 23q-111 143 -163 256.5t-52 247.5v359h1638v-359q0 -134 -52 -247.5t-163 -256.5q-90 -115 -115 -157q-63 -104 -63 -209q0 -66 25.5 -131 t54.5 -107t81 -108q11 -14 17 -21q111 -143 163 -256.5t52 -247.5v-358h-1638zM614 266q37 41 97.5 81t117.5 69t118 69.5t106.5 82.5t74.5 107t29 144v535q0 92 -29 179t-70 149.5t-82 116t-70 98.5t-29 77h704q0 -32 -28.5 -77t-70 -98t-82.5 -115t-70 -149t-30 -179v-537 q0 -79 29 -144t74.5 -107t106.5 -82.5t118 -69.5t117.5 -69t97.5 -81v92q0 49 -11.5 92.5t-40.5 92t-54.5 83t-77.5 99.5q-35 45 -46 59.5t-43 58.5t-44.5 67.5t-34.5 67.5t-31.5 78.5t-17.5 80.5t-8 92t8 92t17.5 80.5t31.5 78.5t34.5 67.5t44.5 67.5t43 58.5t46 59.5 q53 66 77.5 99.5t54 82.5t41 92t11.5 92v154h-1227v-154q0 -91 41.5 -166t141.5 -200q100 -129 137 -192q88 -152 88 -312q0 -46 -8 -92t-17.5 -80.5t-31.5 -78.5t-34.5 -67.5t-44.5 -67.5t-43 -58.5t-46 -59.5q-53 -66 -77.5 -99.5t-54.5 -83t-41.5 -92.5t-11.5 -92v-92z " />
<glyph unicode="&#x25fc;" horiz-adv-x="1024" d="M0 0z" />
<glyph unicode="&#x2601;" d="M0 1126q0 156 85.5 284t224.5 187q15 181 113.5 331.5t257.5 237.5t343 87q218 0 396 -119t262 -312q76 21 161 21q125 0 239 -48.5t196 -131t131 -196t49 -238.5q0 -167 -82.5 -308.5t-224 -224t-308.5 -82.5h-1331q-212 0 -362 150t-150 362zM256 1126q0 -106 75 -181 t181 -75h1331q149 0 254 105t105 254q0 148 -105 253t-254 105q-76 0 -120.5 -10.5t-237.5 -70.5q7 133 -54 246.5t-169.5 179t-237.5 65.5q-90 0 -173 -34t-143.5 -92.5t-100 -137.5t-43.5 -169.5t27 -187.5q-134 31 -234.5 -47t-100.5 -203z" />
<glyph unicode="&#x2607;" d="M410 1024l1024 1434v-1024h614l-1024 -1434v1024h-614z" />
<glyph unicode="&#x2665;" d="M0 1591q0 131 49 253t131 211.5t195.5 143.5t236.5 54q179 0 338.5 -96t278.5 -279q119 183 278 279t338 96q124 0 238 -53.5t196 -143.5t130.5 -212t48.5 -253q0 -112 -27.5 -212.5t-58.5 -170t-120.5 -175.5t-144.5 -163t-200 -198q-88 -86 -135 -133l-543 -539 l-543 539q-47 47 -135 133q-115 112 -168 166t-132 141t-113 143.5t-72.5 136t-52 159t-13.5 173.5z" />
<glyph unicode="&#x2690;" d="M205 58.5v43.5v1024v1229v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h2151l-410 -717l410 -717h-2048v-922v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM410 1229h1689l-307 512l307 512h-1689v-1024z" />
<glyph unicode="&#x2691;" d="M205 58.5v43.5v2253v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h2151l-410 -717l410 -717h-2048v-922v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28z" />
<glyph unicode="&#x2694;" d="M17 144.5q0 4.5 8 19t16.5 22.5t31.5 31l217 217l-73 73q-22 22 -31 30.5t-16.5 22.5t-7.5 19t7.5 19t16.5 23l31 31l31 31t23 16.5t19 7.5t19 -7.5t22.5 -16.5t30.5 -31l73 -73l649 650l-786 786l-31 31t-17 23t-8 19t8 19t17 22.5t31 30.5q22 23 30.5 31.5t22.5 16.5 t18.5 8t19 -8t22.5 -16.5t31 -31.5l787 -787l786 787l31 31t23 17t19 8t19 -8t22.5 -17t30.5 -31t31 -30.5t17 -22.5t8 -19t-8 -19t-17 -23l-31 -31l-787 -786l650 -650l73 73q22 22 30.5 31t22.5 16.5t19 7.5t19 -7.5t23 -16.5l31 -31l31 -31t16.5 -23t7.5 -19t-7.5 -19 t-16.5 -22.5t-31 -30.5l-73 -73l217 -217q23 -23 31.5 -31t16.5 -22.5t8 -19t-8 -18.5t-16.5 -22.5t-31.5 -30.5q-22 -23 -30.5 -31.5t-22.5 -16.5t-18.5 -8t-19 8t-22.5 16.5t-31 31.5l-218 217l-72 -73q-22 -22 -30.5 -31t-22.5 -16.5t-19 -7.5t-19 7.5t-23 16.5l-31 31 l-31 31t-16.5 23t-7.5 19t7.5 19t16.5 22.5t31 30.5l73 73l-650 649l-650 -649l73 -73q22 -22 31 -30.5t16.5 -22.5t7.5 -19t-7.5 -19t-16.5 -23l-31 -31l-31 -31t-23 -16.5t-19 -7.5t-19 7.5t-22.5 16.5t-30.5 31l-73 73l-217 -217q-23 -23 -31 -31.5t-22.5 -16.5t-19 -8 t-18.5 8t-22.5 16.5t-30.5 31.5q-23 22 -31.5 30.5t-16.5 22.5t-8 18.5z" />
<glyph unicode="&#x2702;" />
<glyph unicode="&#x2708;" d="M0 768v205l1024 563v717q0 76 64 172.5t141 134.5q77 -38 141 -134.5t64 -172.5v-717l1024 -563v-205l-1024 205v-768l153 -154v-205l-358 154l-359 -154v205l154 154v768z" />
<glyph unicode="&#x2709;" d="M0 205v1536l1229 -1024l1229 1024v-1536h-2458zM0 2048h2458l-1229 -1024z" />
<glyph unicode="&#x270f;" d="M0 11l190 528q80 -66 175.5 -161.5t159.5 -174.5zM333 869l1602 1577q186 -62 323 -199.5t200 -322.5l-1600 -1578q-99 149 -236.5 286t-288.5 237z" />
<glyph unicode="&#x2747;" d="M898 1228.5q0 14.5 10.5 20t47 22t68 26.5t102.5 34q24 71 34 102.5t26.5 68t22 47t20 10.5t20 -10.5t22 -47t26.5 -68t34 -102.5q71 -24 102.5 -34t68 -26.5t47 -22t10.5 -20t-10.5 -20t-47 -22t-68 -26.5t-102.5 -34q-24 -71 -34 -102.5t-26.5 -68t-22 -47t-20 -10.5 t-20 10.5t-22 47t-26.5 68t-34 102.5q-71 24 -102.5 34t-68 26.5t-47 22t-10.5 20z" />
<glyph unicode="&#xe000;" d="M205 1331q0 189 72.5 359.5t195.5 294t293.5 196t359.5 72.5t359.5 -72.5t294 -196t196 -294t72.5 -359.5q0 -280 -154 -512l564 -563l-256 -256l-564 563q-230 -153 -512 -153q-189 0 -359.5 72.5t-293.5 195.5t-195.5 293.5t-72.5 359.5zM512 1331q0 -177 78.5 -317 t218.5 -218.5t317 -78.5t317.5 78.5t219 218.5t78.5 317q0 132 -46 246.5t-127 195.5t-195.5 127t-246.5 46q-177 0 -317 -78.5t-218.5 -219t-78.5 -317.5z" />
<glyph unicode="&#xe001;" horiz-adv-x="1228" />
<glyph unicode="&#xe002;" d="M-683 859q0 138 75.5 250t197.5 164v-828q-122 52 -197.5 164t-75.5 250zM-205 410v898q61 -4 107 -20t98 -48v-830h-205zM205 410v1171q89 76 205 117v-1288h-205zM614 410v1326q104 4 205 -26v-1300h-205zM1024 410v1283q113 164 291 259.5t384 95.5q156 0 299 -57 t250.5 -154.5t178 -233.5t86.5 -288q81 29 161 29q127 0 234.5 -62.5t170 -170t62.5 -234.5t-62.5 -234.5t-170 -170t-234.5 -62.5h-1650z" />
<glyph unicode="&#xe003;" d="M0 58.5v43.5v2253v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h2253q77 0 90 -13t13 -90v-2253v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-2253h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM266 1044q0 -69 40.5 -126.5t103.5 -82.5v419q-63 -25 -103.5 -83 t-40.5 -127zM512 819h102v410q-68 34 -102 39v-449zM717 819h102v638q-54 -20 -102 -63v-575zM922 819h102v644q-50 12 -102 12v-656zM1126 819h820q106 0 175.5 65.5t69.5 159.5q0 107 -69 176.5t-176 69.5q-41 0 -82 -20q-15 157 -129.5 262.5t-280.5 105.5 q-97 0 -181 -46.5t-147 -129.5v-643z" />
<glyph unicode="&#xe004;" d="M0 263.5v43.5v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h103v1740v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h615h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-1740h205v1126v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h615h43.5t28 -4.5t18.5 -7.5t7.5 -18.5t4.5 -28 v-43.5v-1126h102q76 0 89.5 -13t13.5 -90v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-204h-616h-408h-616h-204h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28z" />
<glyph unicode="&#xe005;" d="M307 263.5v43.5v615v43.5t4.5 27.5t8 18.5t19 8t28 4.5h43.5h716v205h-409h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5v43.5v615v43.5t4.5 27.5t8 18.5t19 8t28 4.5h43.5h409v102q0 76 13 89.5t90 13.5h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-102h410h43.5t28 -4.5 t18.5 -7.5t7.5 -18.5t4.5 -28v-43.5v-615q0 -77 -12.5 -89.5t-89.5 -12.5h-410v-205h717h43.5t28 -4.5t18.5 -7.5t7.5 -18.5t4.5 -28v-43.5v-615v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-717v-103v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5 h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5v43.5v103h-716h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5z" />
<glyph unicode="&#xe006;" d="M0 1185.5v43.5v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h103v717v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h615h43.5t28 -4.5t18.5 -7.5t7.5 -18.5t4.5 -28v-43.5v-717h205v410q0 77 12.5 89.5t89.5 12.5h615h43.5t28 -4.5t18.5 -7.5t7.5 -18.5t4.5 -28v-43.5v-410 h102h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5q0 -77 -13.5 -90t-89.5 -13h-102v-409v-43.5t-4.5 -28t-8 -19t-18.5 -8t-27.5 -4.5h-43.5h-615h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28v43.5v409h-205v-716v-43.5t-4.5 -28t-8 -19t-18.5 -8t-27.5 -4.5h-43.5h-615h-43.5 t-27.5 4.5t-18.5 8t-8 19t-4.5 28v43.5v716h-103h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28z" />
<glyph unicode="&#xe007;" d="M205 58.5v43.5v2048v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5q77 0 90 -13.5t13 -89.5v-102h1126h43.5t28 -4.5t18.5 -7.5t7.5 -18.5t4.5 -28v-43.5v-615v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-1126v-205h1740h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5 v-43.5v-615v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-1740v-103v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28z" />
<glyph unicode="&#xe008;" d="M205 307v615v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h1741v205h-1126h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5v43.5v615v43.5t4.5 27.5t8 18.5t19 8t28 4.5h43.5h1126v102v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h44t28 -4.5t18.5 -8t8 -18.5t4.5 -28v-44v-2048 v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28v43.5v103h-1741q-77 0 -89.5 12.5t-12.5 89.5z" />
<glyph unicode="&#xe009;" d="M0 58.5v43.5v2253v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h2253q77 0 90 -13t13 -90v-2253v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-2253h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM205 1229l409 -256v512zM973 614l256 -409l256 409h-512zM973 1843h512 l-256 410zM1843 973l410 256l-410 256v-512z" />
<glyph unicode="&#xe00a;" d="M0 2106.5v43.5v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h2048h44t28 -4.5t18.5 -8t8 -18.5t4.5 -28v-44v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-102v-1126v-43.5t-4.5 -28t-8 -19t-18.5 -8t-27.5 -4.5h-43.5h-615h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28v43.5 v1126h-205v-1741v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-615q-77 0 -89.5 12.5t-12.5 89.5v1741h-103h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28z" />
<glyph unicode="&#xe00b;" d="M0 58.5v43.5v2253v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h871v-1434h-359l512 -614l512 614h-358v1434h870q76 0 89.5 -13t13.5 -90v-2253v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-2048h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28z" />
<glyph unicode="&#xe00c;" d="M0 58.5v43.5v2253v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h871v-512h-359l512 -615l512 615h-358v512h870q76 0 89.5 -13t13.5 -90v-2253v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-870v512h358l-512 614l-512 -614h359v-512h-871h-43.5t-28 4.5t-18.5 7.5 t-7.5 18.5t-4.5 28z" />
<glyph unicode="&#xe00d;" d="M0 58.5v43.5v2253v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h2048q76 0 89.5 -13t13.5 -90v-2253v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-870v1434h358l-512 614l-512 -614h359v-1434h-871h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28z" />
<glyph unicode="&#xe00e;" d="M-32 1219q-3 245 92 488.5t281 429.5q179 178 414.5 270.5t473.5 92.5t473.5 -92.5t414.5 -270.5q186 -186 281 -429.5t91.5 -488.5t-106.5 -483.5t-297 -414.5l-200 206q153 137 235 321t85.5 373t-70.5 377.5t-221 335.5q-141 140 -322 212.5t-364 72.5t-364 -72.5 t-321 -211.5q-147 -147 -221.5 -336t-71 -378t85.5 -373t235 -321l-200 -206q-194 176 -297.5 414.5t-106.5 483.5zM527.5 1242q-0.5 134 51 266t150.5 231q98 98 231.5 149t268.5 51.5t268 -51t231 -149.5q99 -99 150.5 -230.5t51 -265.5t-52.5 -266t-151 -231l-214 191 q86 81 118.5 190t5 218t-109.5 191q-120 120 -297 120t-297 -120q-82 -82 -109.5 -191.5t4.5 -218.5t118 -189l-214 -191q-99 99 -151 230.5t-52.5 265.5zM1085 -41v1256q0 47 21.5 82t53 50.5t69 15.5t69 -15.5t53 -50.5t21.5 -82v-1256h-287z" />
<glyph unicode="&#xe00f;" d="M0 58.5v43.5v1332h2458v-1332v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-2253h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM0 1638v512v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h2253q77 0 90 -13.5t13 -89.5v-512h-2458zM205 1843h205v205h-205v-205zM614 1843 h1639v205h-1639v-205z" />
<glyph unicode="&#xe010;" d="M1024 1229l205 256l205 -256h-154v-1178q0 -38 -6.5 -44.5t-44.5 -6.5t-44.5 6.5t-6.5 44.5v1178h-154z" />
<glyph unicode="&#xe011;" d="M922 1229l307 358l307 -358h-205v-1127v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5v43.5v1127h-204z" />
<glyph unicode="&#xe012;" d="M819 1229l410 461l409 -461h-256v-1127v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-102h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5v43.5v1127h-256z" />
<glyph unicode="&#xe013;" d="M614 1229l615 665l614 -665h-409v-1127v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-205h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28v43.5v1127h-410z" />
<glyph unicode="&#xe014;" d="M410 1229l819 870l819 -870h-512v-1127v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-410h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28v43.5v1127h-512z" />
<glyph unicode="&#xe015;" d="M665 647.5q0 5.5 7.5 19t16.5 22.5l31 31l31 31t22.5 16.5t19 7.5t19 -7.5t22.5 -16.5l31 -31l262 -262v1693q0 77 12.5 89.5t89.5 12.5t89.5 -12.5t12.5 -89.5v-1688l258 257q23 22 31 30.5t22.5 16.5t19 8t18.5 -8t22.5 -16.5l30.5 -30.5l31 -31t16.5 -22.5t7.5 -19 t-7.5 -19t-16.5 -22.5l-31 -31l-421 -421l-13 -13l-31 -31t-22.5 -16.5t-19 -7.5t-19 7.5t-22.5 16.5l-31 31l-13 13l-421 421l-31 31t-16.5 22.5t-7.5 19z" />
<glyph unicode="&#xe016;" d="M410 1126h512v1024v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h410h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-1024h512l-819 -1024z" />
<glyph unicode="&#xe017;" d="M0 1082.5v43.5v205v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h512q93 0 180 34t159 88t144 119.5t150.5 131t163 119.5t196 88t236.5 34h103v205l512 -410l-512 -409v204h-144q-72 0 -139 -24t-130 -70.5t-115 -92.5t-124.5 -113t-127.5 -110q54 -43 127 -110t125 -113 t115 -92t130 -70t139 -24h144v205l512 -410l-512 -409v205h-103q-125 0 -236.5 34t-196 88t-163 119.5t-150.5 131t-144 119.5t-159 88t-180 34h-512h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28z" />
<glyph unicode="&#xe018;" d="M-102 1229l716 614v-409h1229v409l717 -614l-717 -615v410h-1229v-410z" />
<glyph unicode="&#xe019;" d="M0 1126l1024 820v-512h1024h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-409v-43.5t-4.5 -28t-8 -19t-18.5 -8t-27.5 -4.5h-43.5h-1024v-512z" />
<glyph unicode="&#xe01a;" d="M0 1024h410v922v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h1638h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-205q0 -77 -13.5 -90t-89.5 -13h-1331v-614h410l-615 -666z" />
<glyph unicode="&#xe01b;" d="M87 1228.5q0 5.5 7.5 19t16.5 22.5l31 31l13 13l421 421l31 31t22.5 16.5t19 7.5t19 -7.5t22.5 -16.5l31 -31l31 -31t16.5 -22.5t7.5 -19t-7.5 -19t-16.5 -22.5l-31 -31l-262 -261h1692q77 0 90 -13.5t13 -89.5v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-1688 l258 -258q22 -22 31 -30.5t16.5 -22.5t7.5 -19t-7.5 -19t-16.5 -22.5t-31 -30.5l-31 -31t-22.5 -16.5t-19 -7.5t-19 7.5t-22.5 16.5l-31 31l-421 421l-13 13l-31 31t-16.5 22.5t-7.5 19z" />
<glyph unicode="&#xe01c;" d="M0 1638l614 666l615 -666h-410v-614h1331h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-205q0 -77 -13.5 -90t-89.5 -13h-1638h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28v43.5v921h-410z" />
<glyph unicode="&#xe01d;" d="M0 410v409h328q79 0 147.5 15.5t131 49t112 70t114.5 93.5q5 4 83.5 75t123.5 107q-45 36 -123.5 107t-83.5 75q-133 116 -244 171.5t-261 55.5h-328v410h328q102 0 200.5 -20.5t175 -51.5t154 -77.5t131.5 -87t113 -92.5q27 -24 77 -68.5t72.5 -63.5t61 -50.5t62 -45 t56.5 -29.5t62.5 -22t62.5 -6h287v307l615 -512l-615 -512v307h-287q-33 0 -62.5 -6t-62.5 -22t-56.5 -29.5t-62 -45t-61 -50.5t-72.5 -63.5t-77 -68.5q-59 -52 -113 -92.5t-131.5 -87t-154 -77.5t-175 -51.5t-200.5 -20.5h-328z" />
<glyph unicode="&#xe01e;" d="M307 878v44v409q0 77 13.5 90t89.5 13h1024v512l1024 -820l-1024 -819v512h-1024h-44t-28 4.5t-18.5 8t-8 18.5t-4.5 28z" />
<glyph unicode="&#xe01f;" d="M205 1697.5v43.5v205v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h1639h43.5t28 -4.5t18.5 -7.5t7.5 -18.5t4.5 -28v-43.5v-922h410l-615 -666l-614 666h409v614h-1331h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28z" />
<glyph unicode="&#xe020;" d="M204 1182.5v43.5q0 76 13 89.5t90 13.5h1692l-262 261l-31 31t-16.5 22.5t-7.5 19t7.5 19t16.5 22.5l31 31l31 31t22.5 16.5t19 7.5t19 -7.5t22.5 -16.5l31 -31l421 -421l13 -13l31 -31t16.5 -22.5t7.5 -19t-7.5 -19t-16.5 -22.5l-31 -31l-13 -13l-421 -421l-31 -31 t-22.5 -16.5t-19 -7.5t-19 7.5t-22.5 16.5l-31 31t-31 30.5t-16.5 22.5t-7.5 19t7.5 19t16.5 22.5t31 30.5l257 258h-1687h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5z" />
<glyph unicode="&#xe021;" d="M205 673.5v43.5v205v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h1331v614h-409l614 666l615 -666h-410v-921v-43.5t-4.5 -28t-8 -19t-18.5 -8t-27.5 -4.5h-43.5h-1639h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28z" />
<glyph unicode="&#xe022;" d="M666 819h409v1331v44t4.5 28t8 18.5t18.5 8t28 4.5h44h102h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-1331h410l-563 -665z" />
<glyph unicode="&#xe023;" d="M154 1229l665 563v-410h1331h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-102v-44t-4.5 -28t-8 -18.5t-18.5 -8t-28 -4.5h-44h-1331v-409z" />
<glyph unicode="&#xe024;" d="M205 1134.5v43.5v102v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h1331v410l666 -563l-666 -563v409h-1331h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28z" />
<glyph unicode="&#xe025;" d="M666 1638l563 666l563 -666h-410v-1331v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-102h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5v43.5v1331h-409z" />
<glyph unicode="&#xe026;" d="M410 1331l819 1024l819 -1024h-512v-1024v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-410h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28v43.5v1024h-512z" />
<glyph unicode="&#xe027;" d="M666 1810q0 5 8 19t17 23l31 31l435 434q22 22 30.5 31t22.5 16.5t19 7.5t19 -7.5t22.5 -16.5t30.5 -31l435 -434l31 -31t16.5 -22.5t7.5 -19t-7.5 -19t-16.5 -22.5l-31 -31l-31 -31t-22.5 -16.5t-19 -7.5t-19 7.5t-22.5 16.5l-31 31l-262 261v-1692q0 -77 -12.5 -89.5 t-89.5 -12.5h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5v43.5v1688l-257 -257l-31 -31t-22.5 -16.5t-19 -7.5t-19 7.5t-22.5 16.5l-31 31t-31 30.5t-17 22.5t-8 19z" />
<glyph unicode="&#xe028;" d="M614 614h410v1229h-410l615 717l614 -717h-409v-1229h409l-614 -716z" />
<glyph unicode="&#xe029;" d="M-102 614l716 615v-410h1741h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-205v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-1741v-410zM0 1697.5v43.5v205v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h1741v410l717 -615l-717 -614v409h-1741h-43.5t-27.5 4.5 t-18.5 8t-8 19t-4.5 28z" />
<glyph unicode="&#xe02a;" d="M0 1082.5v43.5v205v34t2 24.5t3.5 19t9 12t12.5 8.5t20.5 3t27 2h37.5h400v256l461 -461l-461 -461v256h-400h-47.5t-30.5 4.5t-20.5 7.5t-8.5 18.5t-5 28zM768 512l461 461l461 -461h-256v-400v-37.5t-2 -27t-3 -20.5t-8.5 -12.5t-12 -9t-19 -3.5t-24.5 -2h-34h-205 h-43.5t-28 5t-18.5 8.5t-7.5 20.5t-4.5 30.5v47.5v400h-256zM768 1946h256v399v48t4.5 30.5t8 20.5t18.5 9t27.5 5h43.5h205h44t28 -5t18.5 -9t8 -20.5t4.5 -30.5v-48v-399h256l-461 -461zM1485 1229l461 461v-256h399h48t30.5 -4.5t20.5 -8t9 -18.5t5 -28v-44v-205v-43.5 t-5 -27.5t-9 -18.5t-20.5 -8t-30.5 -4.5h-48h-399v-256z" />
<glyph unicode="&#xe02b;" d="M-25 1229l431 461v-256h307h37.5t27 -2t20.5 -3t12.5 -8.5t9 -12t3.5 -19t2 -24.5v-34v-205v-43.5t-5 -28t-8.5 -18.5t-20.5 -7.5t-30.5 -4.5h-47.5h-307v-256zM768 403h256v304v48.5t4.5 30t7.5 20.5t19 8.5t27.5 4.5h43.5h205h43.5t27.5 -4.5t19 -8.5t8 -20.5t5 -30.5 v-48v-304h256l-461 -434zM768 2056l461 430l461 -430h-256v-307v-37t-2 -27t-3 -20t-8.5 -12.5t-12 -9t-19 -3.5t-24.5 -2h-34h-205h-43.5t-28 5t-18.5 8.5t-7.5 20t-4.5 30v47.5v307h-256zM1634 1082.5v43.5v205v34t2 24.5t3.5 19t9 12t12.5 8.5t20 3t27 2h37h307v256 l430 -461l-430 -461v256h-307h-47.5t-30 4.5t-20 7.5t-8.5 18.5t-5 28z" />
<glyph unicode="&#xe02c;" d="M154 1792l665 563v-409h1331q76 0 89.5 -13t13.5 -90v-102q0 -77 -13.5 -90t-89.5 -13h-1331v-409zM205 570.5v43.5v103q0 77 12.5 89.5t89.5 12.5h1331v410l666 -563l-666 -564v410h-1331h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28z" />
<glyph unicode="&#xe02d;" d="M102 819h410v1331v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h103h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-1331h410l-563 -665zM1229 1638l563 666l563 -666h-409v-1331v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-102h-43.5t-28 4.5t-19 8t-8 18.5 t-4.5 27.5v43.5v1331h-409z" />
<glyph unicode="&#xe02e;" d="M0 614h410v1741v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h205h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-1741h410l-615 -716zM1229 1843l614 717l615 -717h-410v-1741v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-205h-43.5t-28 4.5t-19 8t-8 18.5 t-4.5 27.5v43.5v1741h-409z" />
<glyph unicode="&#xe02f;" d="M0 1229q0 250 97.5 477.5t262 392t392 262t477.5 97.5t477.5 -97.5t392 -262t262 -392t97.5 -477.5t-97.5 -477.5t-262 -392t-392 -262t-477.5 -97.5q-240 0 -457 88t-385 246q-7 3 -30 26t-26 31q-157 168 -244 384t-87 454zM102 1229q0 -212 78 -406.5t218 -348.5 l1586 1585q-154 140 -348.5 218t-406.5 78q-151 0 -296.5 -41t-269 -114t-228 -178t-178 -228t-114.5 -268.5t-41 -296.5zM471 401q154 -142 349 -220.5t409 -78.5q151 0 296.5 41t268.5 114.5t228 178t178 228t114 269t41 296.5q0 214 -78.5 409t-220.5 349z" />
<glyph unicode="&#xe030;" d="M0 1229q0 200 62 388t175.5 339t264.5 264.5t339 175.5t388 62t388 -62t339 -175.5t264.5 -264.5t175.5 -339t62 -388t-62 -388t-175.5 -339t-264.5 -264.5t-339 -175.5t-388 -62q-231 0 -441 81.5t-376 229.5q-14 8 -55 49q-44 44 -50 56q-146 166 -226.5 374.5 t-80.5 438.5zM205 1229q0 -181 59.5 -346.5t169.5 -299.5l1441 1440q-134 110 -299.5 170t-346.5 60q-209 0 -398.5 -81t-326.5 -218t-218 -326.5t-81 -398.5zM579 437q135 -111 301.5 -171.5t348.5 -60.5q209 0 398.5 81t326.5 218t218 326.5t81 398.5q0 182 -61 348 t-172 302z" />
<glyph unicode="&#xe031;" d="M0 1229q0 245 99 472t265 393t393 265t472 99q217 0 418 -76.5t366 -215.5q24 -11 81 -68q55 -55 68 -81q140 -165 218 -367.5t78 -420.5q0 -245 -99 -472t-265 -393t-393 -265t-472 -99q-215 0 -415 75.5t-364 211.5q-28 8 -93 73q-66 66 -74 95q-135 163 -209 361.5 t-74 412.5zM307 1229q0 -295 168 -533l1287 1286q-238 168 -533 168q-189 0 -359.5 -72.5t-294 -195.5t-196 -293.5t-72.5 -359.5zM692 478q239 -171 537 -171q189 0 359.5 72.5t293.5 196t195.5 294t72.5 359.5q0 299 -170 537z" />
<glyph unicode="&#xe032;" d="M0 1229q0 250 97.5 477.5t262 392t392 262t477.5 97.5t477.5 -97.5t392 -262t262 -392t97.5 -477.5t-97.5 -477.5t-262 -392t-392 -262t-477.5 -97.5q-217 0 -415.5 72.5t-360.5 204.5q-32 19 -96 83q-66 66 -85 99q-130 161 -201 358.5t-71 411.5zM410 1229 q0 -222 112 -414l1121 1121q-192 112 -414 112q-166 0 -318 -65t-261.5 -174.5t-174.5 -261.5t-65 -318zM811 524q191 -114 418 -114q166 0 318 65t261.5 174.5t174.5 261.5t65 318q0 226 -115 418z" />
<glyph unicode="&#xe033;" d="M0 1229q0 245 99 472t265 393t393 265t472 99q363 0 670 -206q69 -28 195 -154q124 -124 153 -192q211 -313 211 -677q0 -245 -99 -472t-265 -393t-393 -265t-472 -99q-354 0 -662 201q-73 22 -210 159q-140 140 -160 213q-197 303 -197 656zM614 1229q0 -76 21 -157 l750 751q-77 20 -156 20q-125 0 -239 -48.5t-196 -131t-131 -196t-49 -238.5zM1067 636q82 -22 162 -22q125 0 238.5 49t196 131t131 196t48.5 239q0 84 -21 162z" />
<glyph unicode="&#xe034;" d="M-102 263.5v43.5v1843v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h205h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-1843q0 -77 -12.5 -89.5t-89.5 -12.5h-205h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM512 263.5v43.5v1843v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h44 t28 -4.5t18.5 -8t8 -18.5t4.5 -28v-44v-1843v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM922 263.5v43.5v1843v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-1843v-43.5 t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM1331 263.5v43.5v1843v44t4.5 28t8 18.5t18.5 8t28 4.5h44h409q77 0 90 -13.5t13 -89.5v-1843v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-409h-43.5t-28 4.5t-19 8 t-8 18.5t-4.5 27.5zM2150 263.5v43.5v1843q0 76 13 89.5t90 13.5h205h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-1843v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-205h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5z" />
<glyph unicode="&#xe035;" d="M410 58.5v43.5v2048v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h410v102v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h410h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-102h410h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-2048v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5 t-28 -4.5h-43.5h-1434h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM614 205h1229v1843h-1229v-1843z" />
<glyph unicode="&#xe036;" d="M410 58.5v43.5v2048v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h410v102v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h410h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-102h410h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-2048v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5 t-28 -4.5h-43.5h-1434h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM614 512h1229v1536h-1229v-1536z" />
<glyph unicode="&#xe037;" d="M410 58.5v43.5v2048v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h410v102v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h410h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-102h410h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-2048v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5 t-28 -4.5h-43.5h-1434h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM614 614h1229v1434h-1229v-1434z" />
<glyph unicode="&#xe038;" d="M410 58.5v43.5v2048v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h410v102v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h410h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-102h410h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-2048v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5 t-28 -4.5h-43.5h-1434h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM614 922h1229v1126h-1229v-1126z" />
<glyph unicode="&#xe039;" d="M410 58.5v43.5v2048v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h410v102v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h410h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-102h410h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-2048v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5 t-28 -4.5h-43.5h-1434h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM614 1126h1229v922h-1229v-922z" />
<glyph unicode="&#xe03a;" d="M410 58.5v43.5v2048v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h410v102v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h410h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-102h410h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-2048v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5 t-28 -4.5h-43.5h-1434h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM614 1331h1229v717h-1229v-717z" />
<glyph unicode="&#xe03b;" d="M410 58.5v43.5v2048v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h410v102v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h410h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-102h410h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-2048v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5 t-28 -4.5h-43.5h-1434h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM614 1536h1229v512h-1229v-512z" />
<glyph unicode="&#xe03c;" d="M410 58.5v43.5v2048v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h410v102v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h410h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-102h410h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-2048v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5 t-28 -4.5h-43.5h-1434h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM614 1741h1229v307h-1229v-307z" />
<glyph unicode="&#xe03d;" d="M410 58.5v43.5v2048v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h410v102v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h410h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-102h410h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-2048v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5 t-28 -4.5h-43.5h-1434h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28z" />
<glyph unicode="&#xe03e;" d="M410 58.5v43.5v2048v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h410v102v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h410h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-102h410h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-2048v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5 t-28 -4.5h-43.5h-1434h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM819 1126q0 -56 26.5 -111.5t64 -106t75 -105.5t64 -130.5t26.5 -160.5v-102h307v102q0 85 26.5 160.5t64 130.5t75 105.5t64 106t26.5 111.5v308h-153v307q0 36 -24 56.5t-53 20.5t-53 -20.5t-24 -56.5 v-307h-205v307q0 36 -24 56.5t-52.5 20.5t-52.5 -20.5t-24 -56.5v-307h-154v-308z" />
<glyph unicode="&#xe03f;" d="M717 0v1331q0 70 21 136t51 118.5t60.5 105.5t51.5 119t21 136v512h614v-512q0 -70 21 -136t51 -119t60.5 -105.5t51.5 -118.5t21 -136v-1331h-1024zM1120 1843h218q-5 38 -6 89.5t-1 320.5h-205v-118q0 -247 -6 -292z" />
<glyph unicode="&#xe040;" d="M145 2458h2167l-960 -1511v-742h286h44t28 -4.5t18.5 -8t8 -18.5t4.5 -28v-44v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-819h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28v43.5v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h287v742zM517 2253l261 -410h901l261 410 h-1423z" />
<glyph unicode="&#xe041;" d="M369 1966q0 221 82 416l28 76h1499l29 -76q82 -195 82 -416q0 -182 -60 -351t-162.5 -296.5t-242 -214t-293.5 -111.5v-788h307h44t28 -4.5t18.5 -8t8 -18.5t4.5 -28v-44v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-819h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5 t-4.5 28v43.5v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h307v788q-207 34 -379.5 170t-275 348.5t-102.5 454.5zM573 1966q0 -85 15 -164h1282q14 74 14 164q0 150 -45 287h-1221q-45 -137 -45 -287z" />
<glyph unicode="&#xe042;" d="M0 0v2048q0 89 29 160t77.5 117t115 76.5t138.5 43.5t152 13h1741v-2048l-205 -205v2048h-1587q-87 0 -146 -49t-59 -156h1587v-2048h-1843z" />
<glyph unicode="&#xe043;" d="M0 0v2048q0 89 29 160t77.5 117t115 76.5t138.5 43.5t152 13h1741v-2048l-205 -205v2048h-1587q-87 0 -146 -49t-59 -156h1587v-2048h-1843zM410 410h1024v219l-305 101q-31 10 -49.5 26t-23.5 32.5t-7 34.5t1 34q56 42 89 96.5t43 143.5l19 150q20 166 -60 263.5 t-219 97.5t-219 -97.5t-60 -263.5l18 -150q10 -89 43 -143.5t89 -96.5q3 -16 1 -34t-7 -34.5t-23.5 -32.5t-49.5 -26l-304 -101v-219z" />
<glyph unicode="&#xe044;" d="M0 205v1843q97 78 243.5 121t312 46t345.5 -52t328 -166q148 111 328 166t345.5 52t312 -46t243.5 -121v-1843q-97 78 -243.5 121t-312 46t-345.5 -52t-328 -166q-148 111 -328 166t-345.5 52t-312 -46t-243.5 -121zM1229 410q134 74 259.5 118t226 58.5t201 7 t176.5 -27.5t161 -54v1434q-66 33 -140.5 53t-175.5 24.5t-207 -14.5t-237 -73.5t-264 -143.5v-1382z" />
<glyph unicode="&#xe045;" d="M0 58.5v43.5v205v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5q76 0 89.5 -13t13.5 -90v-102h102q77 0 90 -13.5t13 -89.5v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-205h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM0 673.5v43.5v205v43.5t4.5 28t7.5 18.5 t18.5 7.5t28 4.5h43.5h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-205q0 -77 -13.5 -90t-89.5 -13h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28zM0 1287.5v43.5v205v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-205v-43.5 t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM0 1902.5v43.5v204v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h205q77 0 90 -13.5t13 -89.5v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-102v-102v-44t-4.5 -28t-8 -18.5 t-18.5 -8t-28 -4.5h-44h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28zM614 58.5v43.5q0 76 13 89.5t90 13.5h205h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-205h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5zM614 2106.5 v43.5q0 76 13 89.5t90 13.5h205h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-205h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5zM1229 58.5v43.5v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h205h43.5t27.5 -4.5t18.5 -8 t8 -19t4.5 -28v-43.5v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-205h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM1229 2106.5v43.5v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h205h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-43.5t-4.5 -28t-7.5 -18.5 t-18.5 -7.5t-28 -4.5h-43.5h-205h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM1843 58.5v43.5v44t4.5 28t8 18.5t18.5 8t28 4.5h44h102v102v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5q76 0 89.5 -13t13.5 -90v-205v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-204 h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5zM1843 2106.5v43.5v44t4.5 28t8 18.5t18.5 8t28 4.5h44h204h44t28 -4.5t18.5 -8t8 -18.5t4.5 -28v-44v-204v-44t-4.5 -28t-8 -18.5t-18.5 -8t-28 -4.5h-44h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28v43.5v102h-102h-43.5t-28 4.5t-19 8 t-8 18.5t-4.5 27.5zM2048 673.5v43.5v205v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-205q0 -77 -13.5 -90t-89.5 -13h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28zM2048 1287.5v43.5v205v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5 h43.5h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-205v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28z" />
<glyph unicode="&#xe046;" d="M0 58.5v43.5v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h44t28 -4.5t18.5 -8t8 -18.5t4.5 -28v-44v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM0 468.5v43.5v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h43.5t28 -4.5 t19 -8t8 -18.5t4.5 -27.5v-43.5v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM0 878.5v43.5v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-44t-4.5 -28t-8 -18.5t-18.5 -8 t-28 -4.5h-44h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28zM0 1287.5v43.5v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5q76 0 89.5 -13t13.5 -90v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM0 1697.5v43.5v43.5t4.5 28t7.5 18.5 t18.5 7.5t28 4.5h43.5h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5q0 -77 -13.5 -90t-89.5 -13h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28zM0 2106.5v43.5v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h44t28 -4.5t18.5 -8t8 -18.5t4.5 -28v-44v-43.5t-4.5 -27.5t-8 -18.5t-19 -8 t-28 -4.5h-43.5h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM410 58.5v43.5v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28z M410 2106.5v43.5v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM819 58.5v43.5v44t4.5 28t8 18.5t18.5 8t28 4.5h44h43.5 t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5zM819 2106.5v43.5v44t4.5 28t8 18.5t18.5 8t28 4.5h44h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-43.5t-4.5 -28t-7.5 -18.5 t-18.5 -7.5t-28 -4.5h-43.5h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5zM1229 58.5v43.5v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5q77 0 90 -13.5t13 -89.5v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM1229 2106.5v43.5v43.5 t4.5 28t8 19t18.5 8t27.5 4.5h43.5q77 0 90 -13.5t13 -89.5v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM1638 58.5v43.5q0 76 13 89.5t90 13.5h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-43.5t-4.5 -28t-7.5 -18.5 t-18.5 -7.5t-28 -4.5h-43.5h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5zM1638 2106.5v43.5q0 76 13 89.5t90 13.5h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5zM2048 58.5v43.5 v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h44t28 -4.5t18.5 -8t8 -18.5t4.5 -28v-44v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM2048 468.5v43.5v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h43.5t28 -4.5t19 -8t8 -18.5 t4.5 -27.5v-43.5v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM2048 878.5v43.5v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-44t-4.5 -28t-8 -18.5t-18.5 -8t-28 -4.5h-44 h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28zM2048 1287.5v43.5v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5q76 0 89.5 -13t13.5 -90v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM2048 1697.5v43.5v43.5t4.5 28t7.5 18.5 t18.5 7.5t28 4.5h43.5h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5q0 -77 -13.5 -90t-89.5 -13h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28zM2048 2106.5v43.5v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h44t28 -4.5t18.5 -8t8 -18.5t4.5 -28v-44v-43.5t-4.5 -27.5t-8 -18.5 t-19 -8t-28 -4.5h-43.5h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28z" />
<glyph unicode="&#xe047;" d="M0 154l998 998l-179 179l615 103l-103 -615l-179 179l-998 -998q-154 0 -154 154zM0 2106.5v43.5v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h205h30q263 -3 484 -44q4 31 21.5 37.5t79.5 6.5h42t27.5 -3.5t19 -7.5t8.5 -16.5t5 -25v-38.5q101 -28 206 -71q-1 7 -1 59v43.5 t4.5 28t8 19t18.5 8t27.5 4.5h43.5q77 0 90 -13.5t13 -89.5v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-4q486 -233 721 -720v3v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5q76 0 89.5 -13t13.5 -90v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5q-52 0 -59 1 q43 -105 71 -206h38.5t25 -5t16.5 -8.5t7.5 -19t3.5 -27.5v-42q0 -62 -6.5 -79.5t-37.5 -21.5q41 -228 44 -484v-30v-205v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28v43.5v205q0 845 -448 1293t-1293 448h-205h-43.5 t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM1638 2106.5v43.5q0 76 13 89.5t90 13.5h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5zM2048 1697.5v43.5v43.5t4.5 28t7.5 18.5 t18.5 7.5t28 4.5h43.5h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5q0 -77 -13.5 -90t-89.5 -13h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28zM2048 2106.5v43.5v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h44t28 -4.5t18.5 -8t8 -18.5t4.5 -28v-44v-43.5t-4.5 -27.5t-8 -18.5 t-19 -8t-28 -4.5h-43.5h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28z" />
<glyph unicode="&#xe048;" d="M0 58.5v43.5v2048v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h2048h44t28 -4.5t18.5 -8t8 -18.5t4.5 -28v-44v-2048v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-2048h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM205 205h1843v1843h-1843v-1843z" />
<glyph unicode="&#xe049;" d="M0 1185.5v43.5v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h205h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5q0 -77 -13 -90t-90 -13h-205h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28zM305 432q0 5 7.5 19t16.5 23l31 31l145 145q22 22 30.5 31t22.5 16.5t19 7.5t19 -7.5 t23 -16.5l31 -31l31 -31t16.5 -23t7.5 -19t-7.5 -19t-16.5 -22.5t-31 -30.5l-145 -145l-31 -31t-23 -16.5t-19 -7.5t-19 7.5t-22.5 16.5t-30.5 31t-31 30.5t-16.5 22.5t-7.5 19zM305 2026q0 5 7.5 19t16.5 22.5t31 30.5t30.5 31t22.5 16.5t19 7.5t19 -7.5t23 -16.5l31 -31 l145 -145q22 -22 31 -30.5t16.5 -22.5t7.5 -19t-7.5 -19t-16.5 -23l-31 -31l-31 -31t-23 -16.5t-19 -7.5t-19 7.5t-22.5 16.5t-30.5 31l-145 145l-31 31t-16.5 23t-7.5 19zM614 1229q0 125 49 238.5t131 196t196 131t239 48.5t238.5 -48.5t196 -131t131 -196t48.5 -238.5 t-48.5 -239t-131 -196t-196 -131t-238.5 -49q-167 0 -308.5 82.5t-224 224t-82.5 308.5zM819 1229q0 -169 120.5 -289.5t289.5 -120.5t289 120t120 290q0 169 -120 289t-289 120q-170 0 -290 -120t-120 -289zM1126 58.5v43.5v205q0 77 13 90t90 13h43.5t27.5 -4.5t18.5 -8 t8 -19t4.5 -28v-43.5v-205v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5zM1126 2106.5v43.5v205q0 77 13 90t90 13h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-205v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5 h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5zM1753 577q0 5 7.5 19t16.5 23l31 31l31 31t23 16.5t19 7.5t19 -7.5t22.5 -16.5t30.5 -31l145 -145l31 -31t16.5 -23t7.5 -19t-7.5 -19t-16.5 -22.5t-31 -30.5t-30.5 -31t-22.5 -16.5t-19 -7.5t-19 7.5t-23 16.5l-31 31l-145 145 q-22 22 -31 30.5t-16.5 22.5t-7.5 19zM1753 1881q0 5 7.5 19t16.5 22.5t31 30.5l145 145l31 31t23 16.5t19 7.5t19 -7.5t22.5 -16.5t30.5 -31t31 -30.5t16.5 -22.5t7.5 -19t-7.5 -19t-16.5 -23l-31 -31l-145 -145q-22 -22 -30.5 -31t-22.5 -16.5t-19 -7.5t-19 7.5t-23 16.5 l-31 31l-31 31t-16.5 23t-7.5 19zM2048 1185.5v43.5v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h205h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5q0 -77 -13 -90t-90 -13h-205h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28z" />
<glyph unicode="&#xe04a;" d="M0 58.5v43.5v2253v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h1639h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-2253v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-1639h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM205 205h1433v2048h-1433v-2048zM410 468.5 v43.5v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h43.5t28 -4.5t18.5 -7.5t7.5 -18.5t4.5 -28v-43.5v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM410 878.5v43.5v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h43.5 t28 -4.5t18.5 -7.5t7.5 -18.5t4.5 -28v-43.5v-43.5t-4.5 -28t-8 -19t-18.5 -8t-27.5 -4.5h-43.5h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28zM410 1287.5v43.5v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-43.5t-4.5 -28t-7.5 -18.5 t-18.5 -7.5t-28 -4.5h-43.5h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM410 1697.5v43.5v205v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h819h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-205q0 -77 -13 -90t-90 -13h-819h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28z M819 468.5v43.5v43.5t4.5 27.5t8 18.5t19 8t28 4.5h43.5h43.5t28 -4.5t18.5 -7.5t7.5 -18.5t4.5 -28v-43.5v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5zM819 878v44v43.5t4.5 27.5t8 18.5t19 8t28 4.5h43.5h43.5t28 -4.5 t18.5 -7.5t7.5 -18.5t4.5 -28v-43.5v-43.5t-4.5 -28t-8 -19t-18.5 -8t-27.5 -4.5h-43.5h-44t-28 4.5t-18.5 8t-8 18.5t-4.5 28zM819 1287.5v43.5q0 77 13.5 90t89.5 13h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5 h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5zM1229 468.5v43.5v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM1229 878.5v43.5v43.5 t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5q0 -76 -13 -89.5t-90 -13.5h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28zM1229 1331v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5q77 0 90 -13t13 -90v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5 h-43.5q-77 0 -89.5 12.5t-12.5 89.5z" />
<glyph unicode="&#xe04b;" d="M205 58.5v43.5v2253v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h1639h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-2253v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-1639h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM410 263.5q0 -12.5 4.5 -28t7.5 -18.5 t18.5 -7.5t28 -4.5h43.5h43.5t28 4.5t18.5 7.5t7.5 18.5t4.5 28v43.5v43.5t-4.5 28t-8 19t-18.5 8t-27.5 4.5h-43.5h-43.5t-27.5 -4.5t-18.5 -8t-8 -19t-4.5 -28v-43.5v-43.5zM410 673.5q0 -12.5 4.5 -28t8 -19t18.5 -8t27.5 -4.5h43.5h43.5t27.5 4.5t18.5 8t8 19t4.5 28 v43.5v43.5t-4.5 28t-7.5 18.5t-18.5 7.5t-28 4.5h-43.5h-43.5t-28 -4.5t-18.5 -7.5t-7.5 -18.5t-4.5 -28v-43.5v-43.5zM410 1082.5q0 -12.5 4.5 -28t7.5 -18.5t18.5 -7.5t28 -4.5h43.5h43.5t28 4.5t18.5 7.5t7.5 18.5t4.5 28v43.5v43.5t-4.5 28t-8 19t-18.5 8t-27.5 4.5 h-43.5h-43.5t-27.5 -4.5t-18.5 -8t-8 -19t-4.5 -28v-43.5v-43.5zM410 1492.5q0 -12.5 4.5 -28t7.5 -18.5t18.5 -7.5t28 -4.5h43.5h43.5t28 4.5t18.5 7.5t7.5 18.5t4.5 28v43.5v43.5t-4.5 28t-7.5 18.5t-18.5 7.5t-28 4.5h-43.5h-43.5t-28 -4.5t-18.5 -7.5t-7.5 -18.5 t-4.5 -28v-43.5v-43.5zM410 1902.5q0 -12.5 4.5 -28t8 -19t18.5 -8t27.5 -4.5h43.5h1229h43.5t27.5 4.5t18.5 8t8 19t4.5 28v43.5v204v43.5t-4.5 28t-8 19t-18.5 8t-27.5 4.5h-43.5h-1229h-43.5t-27.5 -4.5t-18.5 -8t-8 -19t-4.5 -28v-43.5v-204v-43.5zM819 263.5 q0 -12.5 4.5 -27.5t8 -18.5t19 -8t28 -4.5h43.5h43.5t28 4.5t18.5 7.5t7.5 18.5t4.5 28v43.5v43.5t-4.5 28t-8 19t-18.5 8t-27.5 4.5h-43.5q-76 0 -89.5 -13t-13.5 -90v-43.5zM819 717q0 -77 13.5 -90t89.5 -13h43.5t27.5 4.5t18.5 8t8 19t4.5 28v43.5v43.5t-4.5 28 t-7.5 18.5t-18.5 7.5t-28 4.5h-43.5h-43.5t-28 -4.5t-19 -8t-8 -18.5t-4.5 -27.5v-43.5zM819 1082.5q0 -12.5 4.5 -27.5t8 -18.5t19 -8t28 -4.5h43.5h43.5t28 4.5t18.5 7.5t7.5 18.5t4.5 28v43.5v43.5t-4.5 28t-8 19t-18.5 8t-27.5 4.5h-43.5h-44t-28 -4.5t-18.5 -8 t-8 -18.5t-4.5 -28v-44v-43.5zM819 1492.5q0 -12.5 4.5 -27.5t8 -18.5t19 -8t28 -4.5h43.5h43.5t28 4.5t18.5 7.5t7.5 18.5t4.5 28v43.5v43.5t-4.5 28t-7.5 18.5t-18.5 7.5t-28 4.5h-43.5h-43.5t-28 -4.5t-19 -8t-8 -18.5t-4.5 -27.5v-43.5v-43.5zM1229 307 q0 -77 12.5 -89.5t89.5 -12.5h43.5t28 4.5t19 8t8 18.5t4.5 27.5v43.5q0 77 -13 90t-90 13h-43.5t-27.5 -4.5t-18.5 -8t-8 -19t-4.5 -28v-43.5zM1229 673.5q0 -12.5 4.5 -28t8 -19t18.5 -8t27.5 -4.5h43.5q77 0 90 13t13 90v43.5t-4.5 27.5t-8 18.5t-19 8t-28 4.5h-43.5 q-77 0 -89.5 -12.5t-12.5 -89.5v-43.5zM1229 1082.5q0 -12.5 4.5 -28t7.5 -18.5t18.5 -7.5t28 -4.5h43.5h43.5t28 4.5t19 8t8 18.5t4.5 27.5v43.5q0 76 -13 89.5t-90 13.5h-43.5t-27.5 -4.5t-18.5 -8t-8 -19t-4.5 -28v-43.5v-43.5zM1229 1492.5q0 -12.5 4.5 -28t7.5 -18.5 t18.5 -7.5t28 -4.5h43.5h43.5t28 4.5t19 8t8 18.5t4.5 27.5v43.5v43.5t-4.5 27.5t-8 18.5t-19 8t-28 4.5h-43.5h-43.5t-28 -4.5t-18.5 -7.5t-7.5 -18.5t-4.5 -28v-43.5v-43.5zM1638 263.5q0 -12.5 4.5 -27.5t8 -18.5t19 -8t28 -4.5h43.5q77 0 89.5 12.5t12.5 89.5v410 q0 77 -12.5 89.5t-89.5 12.5h-43.5t-28 -4.5t-19 -8t-8 -18.5t-4.5 -27.5v-43.5v-410v-43.5zM1638 1082.5q0 -12.5 4.5 -27.5t8 -18.5t19 -8t28 -4.5h43.5h43.5t28 4.5t18.5 7.5t7.5 18.5t4.5 28v43.5v43.5t-4.5 28t-8 19t-18.5 8t-27.5 4.5h-43.5q-77 0 -90 -13.5 t-13 -89.5v-43.5zM1638 1492.5q0 -12.5 4.5 -27.5t8 -18.5t19 -8t28 -4.5h43.5h43.5t28 4.5t18.5 7.5t7.5 18.5t4.5 28v43.5v43.5t-4.5 28t-7.5 18.5t-18.5 7.5t-28 4.5h-43.5h-43.5t-28 -4.5t-19 -8t-8 -18.5t-4.5 -27.5v-43.5v-43.5z" />
<glyph unicode="&#xe04c;" d="M0 468.5v43.5v1434v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h308v102v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-102h1741h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-1434v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5 h-43.5h-2253h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM768 1229q0 -191 135 -326t326 -135q125 0 231 61.5t168 168t62 231.5t-62 231t-168 168t-231 62t-231.5 -62t-168 -168t-61.5 -231zM973 1229q0 106 75 181t181 75t181 -75t75 -181t-75 -181t-181 -75t-181 75 t-75 181zM1843 1562q0 -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="&#xe04d;" d="M-410 468.5v43.5v43.5t4.5 27.5t8 18.5t19 8t28 4.5h43.5h205h43.5t28 -4.5t18.5 -7.5t7.5 -18.5t4.5 -28v-43.5v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-205h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5zM-410 1946v43.5t4.5 27.5t8 18.5t19 8t28 4.5h43.5 h205h43.5t28 -4.5t18.5 -7.5t7.5 -18.5t4.5 -28v-43.5v-43.5t-4.5 -28t-8 -19t-18.5 -8t-27.5 -4.5h-43.5h-205q-77 0 -90 13.5t-13 89.5zM205 -102v204v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5q77 0 90 -13.5t13 -89.5v-204q0 -76 -13 -89.5t-90 -13.5h-43.5t-27.5 4.5 t-18.5 8t-8 19t-4.5 28v43.5zM205 468.5v43.5v1434v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h1843h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-1434v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-1843h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM205 2355v205 v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-205v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5q-77 0 -89.5 12.5t-12.5 89.5zM410 614h1638v1229h-1638v-1229zM2048 -102v204v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h44 t28 -4.5t18.5 -8t8 -18.5t4.5 -28v-44v-204v-44t-4.5 -28t-8 -18.5t-18.5 -8t-28 -4.5h-44h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28v43.5zM2048 2311.5v43.5v205v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-205v-43.5 t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM2458 468.5v43.5v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h205h43.5t28 -4.5t18.5 -7.5t7.5 -18.5t4.5 -28v-43.5v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-205 h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM2458 1902.5v43.5v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h205h43.5t28 -4.5t18.5 -7.5t7.5 -18.5t4.5 -28v-43.5v-43.5t-4.5 -28t-8 -19t-18.5 -8t-27.5 -4.5h-43.5h-205h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28z" />
<glyph unicode="&#xe04e;" d="M0 468.5v43.5v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h103h43.5t28 -4.5t18.5 -7.5t7.5 -18.5t4.5 -28v-43.5v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-103h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM0 1902.5v43.5v43.5t4.5 28t7.5 18.5t18.5 7.5 t28 4.5h43.5h103h43.5t28 -4.5t18.5 -7.5t7.5 -18.5t4.5 -28v-43.5v-43.5t-4.5 -28t-8 -19t-18.5 -8t-27.5 -4.5h-43.5h-103h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28zM410 58.5v43.5v103v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h43.5t28 -4.5t18.5 -7.5t7.5 -18.5 t4.5 -28v-43.5v-103v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM410 468.5v43.5v1434v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h1434h43.5t28 -4.5t18.5 -7.5t7.5 -18.5t4.5 -28v-43.5v-1434v-43.5t-4.5 -28 t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-1434h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM410 2209.5v43.5v102v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-102v-43.5t-4.5 -28t-8 -19t-18.5 -8t-27.5 -4.5h-43.5h-43.5 t-27.5 4.5t-18.5 8t-8 19t-4.5 28zM614 614h1229v1229h-1229v-1229zM1843 58.5v43.5v103v43.5t4.5 27.5t8 18.5t19 8t28 4.5h43.5h43.5t28 -4.5t18.5 -7.5t7.5 -18.5t4.5 -28v-43.5v-103v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-43.5t-28 4.5t-19 8t-8 18.5 t-4.5 27.5zM1843 2253v102q0 77 13.5 90t89.5 13h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-102v-43.5t-4.5 -28t-8 -19t-18.5 -8t-27.5 -4.5h-43.5q-76 0 -89.5 13t-13.5 90zM2150 468.5v43.5v43.5t4.5 27.5t8 18.5t19 8t28 4.5h43.5h102h43.5t28 -4.5t19 -8t8 -18.5 t4.5 -27.5v-43.5v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-102h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5zM2150 1946v43.5t4.5 27.5t8 18.5t19 8t28 4.5h43.5h102h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5q0 -76 -13 -89.5t-90 -13.5h-102q-77 0 -90 13.5 t-13 89.5z" />
<glyph unicode="&#xe04f;" d="M0 1229q0 250 97.5 477.5t262 392t392 262t477.5 97.5t477.5 -97.5t392 -262t262 -392t97.5 -477.5t-97.5 -477.5t-262 -392t-392 -262t-477.5 -97.5t-477.5 97.5t-392 262t-262 392t-97.5 477.5zM205 1229q0 -209 81 -398.5t218 -326.5t326.5 -218t398.5 -81t398.5 81 t326.5 218t218 326.5t81 398.5t-81 398.5t-218 326.5t-326.5 218t-398.5 81t-398.5 -81t-326.5 -218t-218 -326.5t-81 -398.5zM819 1229q0 100 59 195.5t155 154.5t196 59t195.5 -59t154.5 -154.5t59 -195.5t-59 -196t-154.5 -155t-195.5 -59q-75 0 -150 35.5t-132 92.5 t-92.5 132t-35.5 150zM1126 1229q0 -43 30 -73t73 -30q39 0 70.5 31t31.5 72q0 43 -29.5 72.5t-72.5 29.5q-42 0 -72.5 -30t-30.5 -72z" />
<glyph unicode="&#xe050;" d="M0 1229l438 213l-272 401l483 -35l-35 486l404 -273l211 437l213 -437l401 273l-35 -486l486 35l-273 -401l437 -213l-437 -211l273 -404l-486 35l35 -483l-401 272l-213 -438l-211 438l-404 -272l35 483l-483 -35l272 404z" />
<glyph unicode="&#xe051;" d="M0 1229q0 250 97.5 477.5t262 392t392 262t477.5 97.5t477.5 -97.5t392 -262t262 -392t97.5 -477.5t-97.5 -477.5t-262 -392t-392 -262t-477.5 -97.5t-477.5 97.5t-392 262t-262 392t-97.5 477.5z" />
<glyph unicode="&#xe052;" d="M0 1229q0 200 62 388t175.5 339t264.5 264.5t339 175.5t388 62q250 0 474.5 -95t394.5 -265l1 1q128 -128 218 -297t123 -364v-2q1 -1 1 -2v-2v-2l1 -2v-3q11 -73 14 -142v-2q1 -2 1 -3v-4v-4v-4v-4v-4v-5v-4v-4l1 -1v-3v-4v-4v-4q0 -200 -62 -388t-175.5 -339 t-264.5 -264.5t-339 -175.5t-388 -62t-388 62t-339 175.5t-264.5 264.5t-175.5 339t-62 388zM1229 1229l724 724q-142 142 -329 221t-395 79v-1024z" />
<glyph unicode="&#xe053;" d="M0 1229q0 200 62 388t175.5 339t264.5 264.5t339 175.5t388 62t388 -62t339 -175.5t264.5 -264.5t175.5 -339t62 -388v-6v-3q0 -1 -0.5 -3.5t-0.5 -3.5v-2v-3v-3v-4q-4 -164 -50 -319.5t-125.5 -287t-191.5 -242t-245 -188t-290 -121t-322 -43.5h-4q-200 0 -388 62 t-339 175.5t-264.5 264.5t-175.5 339t-62 388zM1229 1229h1024q0 209 -81 398.5t-218 326.5t-326.5 218t-398.5 81v-1024z" />
<glyph unicode="&#xe054;" d="M0 1201v4v4v2v2v8v2v6v8v8v4v1v3v4q4 164 50 319.5t125.5 287t192 242t245.5 188t290 121t322 43.5h4q200 0 388 -62t339 -175.5t264.5 -264.5t175.5 -339t62 -388q0 -377 -207.5 -684t-544.5 -449q-223 -95 -470 -96h-3h-4h-4q-165 0 -322 43.5t-290 121t-245.5 188 t-192 242t-125.5 287t-50 319.5zM1229 1229h12l718 -718q139 141 216.5 326.5t77.5 391.5q0 209 -81 398.5t-218 326.5t-326.5 218t-398.5 81v-1024z" />
<glyph unicode="&#xe055;" d="M0 1229q0 200 62 388t175.5 339t264.5 264.5t339 175.5t388 62t388 -62t339 -175.5t264.5 -264.5t175.5 -339t62 -388t-62 -388t-175.5 -339t-264.5 -264.5t-339 -175.5t-388 -62t-388 62t-339 175.5t-264.5 264.5t-175.5 339t-62 388zM1229 205q209 0 398.5 81 t326.5 218t218 326.5t81 398.5t-81 398.5t-218 326.5t-326.5 218t-398.5 81v-2048z" />
<glyph unicode="&#xe056;" d="M0 1229v6v2q1 191 60 371v2l1 1q80 244 250 435.5t408.5 301t505.5 110.5h4q200 0 388 -62t339 -175.5t264.5 -264.5t175.5 -339t62 -388t-62 -388t-175.5 -339t-264.5 -264.5t-339 -175.5t-388 -62t-388 62t-339 175.5t-264.5 264.5t-175.5 339t-62 388zM501 509 q142 -144 330 -224t398 -80q209 0 398.5 81t326.5 218t218 326.5t81 398.5t-81 398.5t-218 326.5t-326.5 218t-398.5 81v-1024h-8z" />
<glyph unicode="&#xe057;" d="M0 1229v4q0 165 43.5 322t121 290t188 245t242 191.5t287 125.5t319.5 50h4h4h2l2 1h8h2h6q200 0 388 -62t339 -175.5t264.5 -264.5t175.5 -339t62 -388t-62 -388t-175.5 -339t-264.5 -264.5t-339 -175.5t-388 -62t-388 62t-339 175.5t-264.5 264.5t-175.5 339t-62 388z M205 1229q0 -209 81 -398.5t218 -326.5t326.5 -218t398.5 -81t398.5 81t326.5 218t218 326.5t81 398.5t-81 398.5t-218 326.5t-326.5 218t-398.5 81v-1024h-1024z" />
<glyph unicode="&#xe058;" d="M0 1229q0 290 126 542.5t345 424.5q155 126 350 194t408 68q200 0 388 -62t339 -175.5t264.5 -264.5t175.5 -339t62 -388t-62 -388t-175.5 -339t-264.5 -264.5t-339 -175.5t-388 -62t-388 62t-339 175.5t-264.5 264.5t-175.5 339t-62 388zM205 1229q0 -209 81 -398.5 t218 -326.5t326.5 -218t398.5 -81t398.5 81t326.5 218t218 326.5t81 398.5t-81 398.5t-218 326.5t-326.5 218t-398.5 81v-1024l-724 724q-142 -142 -221 -329t-79 -395z" />
<glyph unicode="&#xe059;" d="M0 1229q0 200 62 388t175.5 339t264.5 264.5t339 175.5t388 62t388 -62t339 -175.5t264.5 -264.5t175.5 -339t62 -388t-62 -388t-175.5 -339t-264.5 -264.5t-339 -175.5t-388 -62t-388 62t-339 175.5t-264.5 264.5t-175.5 339t-62 388zM205 1229q0 -209 81 -398.5 t218 -326.5t326.5 -218t398.5 -81t398.5 81t326.5 218t218 326.5t81 398.5t-81 398.5t-218 326.5t-326.5 218t-398.5 81t-398.5 -81t-326.5 -218t-218 -326.5t-81 -398.5z" />
<glyph unicode="&#xe05a;" d="M205 58.5v43.5v410v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h205h43.5t28 -4.5t18.5 -7.5t7.5 -18.5t4.5 -28v-43.5v-410v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-205h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM819 58.5v43.5v820v43.5t4.5 27.5 t8 18.5t19 8t28 4.5h43.5h204h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-820v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-204h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5zM1434 58.5v43.5v1639v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h205q77 0 89.5 -12.5 t12.5 -89.5v-1639v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-205h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM2048 58.5v43.5v2253v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h205q77 0 90 -13t13 -90v-2253v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5 h-205h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28z" />
<glyph unicode="&#xe05b;" d="M-32 1228.5q0 5.5 9.5 23t20 27.5t37.5 38l177 178l37.5 37.5t27.5 20t23 9.5t23 -9.5t28 -20t38 -37.5l530 -531l1151 1150l37.5 37.5t27.5 20t22.5 9.5t23 -9.5t27.5 -20t38 -37.5l177 -177l38 -38t20.5 -28t9.5 -23t-9.5 -23t-20.5 -27.5t-38 -37.5l-1415 -1415 l-38 -38t-28 -20.5t-23 -9.5t-23 9.5t-27.5 20.5t-37.5 38l-796 796l-37.5 37.5t-20 27.5t-9.5 22.5z" />
<glyph unicode="&#xe05c;" d="M333 1654q0 9 27 36t36 27t36 -27l797 -797l796 797q27 27 36.5 27t36.5 -27t27 -36t-27 -36l-869 -869l-869 869q-27 27 -27 36z" />
<glyph unicode="&#xe05d;" d="M303 1644q0 5 7.5 19t16.5 22.5t31 30.5l31 31t23 17t19 8t19 -8t22.5 -17t30.5 -31l724 -724l727 728l31 31t23 16.5t19 7.5t19 -7.5t22.5 -16.5t30.5 -31l31 -31t17 -23t8 -19t-8 -19t-17 -22.5t-31 -30.5l-872 -872l-869 869q-22 22 -31 30.5t-16.5 22.5t-7.5 19z" />
<glyph unicode="&#xe05e;" d="M286.5 1615q-9.5 21 0.5 44.5t23.5 39t47.5 49.5q28 28 40.5 39.5t33 25t34.5 12.5t33 -9.5t41 -30.5l687 -688l691 691q26 26 47 35.5t44.5 -0.5t40 -24t49.5 -47q23 -23 33.5 -34t24 -28.5t15.5 -28.5t1.5 -26.5t-10.5 -30.5t-28 -33l-908 -908l-905 905 q-26 26 -35.5 47z" />
<glyph unicode="&#xe05f;" d="M256 1648.5q4 18.5 23.5 45.5t33.5 42t43 44q36 36 56 53.5t51 35.5t57.5 13.5t52.5 -30.5l655 -655l652 652q21 21 44 26.5t41.5 1.5t45.5 -23.5t42 -33.5t44 -43t43.5 -44.5t33.5 -42t23 -45t-1 -41.5t-26 -44l-942 -942l-944 945q-21 21 -26.5 44t-1.5 41.5z" />
<glyph unicode="&#xe060;" d="M195 1575.5q-3 23.5 10 51.5t28 52t42.5 55.5t43.5 48.5t41 42q26 26 42.5 41.5t48 43.5t55.5 42.5t52 27.5t51.5 10t40.5 -20l579 -579l579 579q17 17 40.5 20t51.5 -10t52 -27.5t55.5 -42.5t48 -43.5t42.5 -41.5q25 -25 41 -42t43.5 -48.5t42.5 -55.5t28 -52t10 -51.5 t-20 -40.5l-1014 -1013l-1014 1013q-17 17 -20 40.5z" />
<glyph unicode="&#xe061;" d="M744 1233l869 869q27 27 36.5 27t36.5 -27t27 -36t-27 -36l-797 -797l797 -796q27 -27 27 -36t-27 -36t-36.5 -27t-36.5 27z" />
<glyph unicode="&#xe062;" d="M693 1239l869 869q22 22 30.5 31t22.5 16.5t19 7.5t19 -7.5t22.5 -16.5t30.5 -31l31 -31t17 -23t8 -19t-8 -19t-17 -22.5t-31 -30.5l-724 -724l728 -727q22 -23 30.5 -31t16.5 -22.5t8 -19t-8 -18.5t-16.5 -22.5l-30.5 -30.5l-31 -31t-23 -17t-19 -8t-19 8t-22.5 17 t-30.5 31z" />
<glyph unicode="&#xe063;" d="M646 1247l905 905q26 26 47 35.5t44.5 -0.5t40 -24t49.5 -47q28 -28 39.5 -41t25 -33t12.5 -34t-10 -33t-31 -41l-687 -687l691 -692q26 -26 35.5 -47t-0.5 -44.5t-23.5 -39t-47.5 -49.5t-50 -47.5t-39.5 -24t-44.5 -1t-48 35.5z" />
<glyph unicode="&#xe064;" d="M595 1249l944 944q21 21 44.5 26.5t42 1.5t45 -23t42.5 -34t44 -43q36 -36 53.5 -56t35.5 -51t13.5 -57.5t-30.5 -52.5l-655 -655l652 -652q21 -21 26.5 -44.5t1.5 -41.5t-24 -45t-34 -42t-43 -44t-44.5 -43.5t-42 -33.5t-45 -23t-41.5 1t-44 26z" />
<glyph unicode="&#xe065;" d="M495 1255l1014 1014q17 17 40.5 20t51.5 -10t51.5 -27.5t55 -42.5t48 -43.5t42.5 -41.5t41.5 -42.5t43.5 -48t42.5 -55.5t27.5 -52t10 -51.5t-20 -40.5l-579 -579l579 -579q17 -17 20 -40.5t-10 -51.5t-27.5 -52t-42.5 -55.5t-43.5 -48t-41.5 -42.5q-25 -25 -42 -41 t-48 -43.5t-55 -42t-52 -27.5t-51.5 -10t-40.5 20z" />
<glyph unicode="&#xe066;" d="M745 401q0 9 27 36l797 796l-797 797q-27 27 -27 36t27 36t36 27t36 -27l869 -869l-869 -868q-27 -27 -36 -27t-36 27t-27 36z" />
<glyph unicode="&#xe067;" d="M693 2036q0 5 7.5 19t16.5 22.5t31 30.5q23 23 31 31.5t22.5 16.5t19 8t18.5 -8t22.5 -16.5t30.5 -31.5l872 -872l-869 -868q-22 -22 -30.5 -31t-22.5 -16.5t-19 -7.5t-19 7.5t-22.5 16.5t-30.5 31q-23 23 -31.5 31t-16.5 22.5t-8 19t8 18.5t16.5 22.5t31.5 30.5l724 724 l-727 727l-31 31t-16.5 23t-7.5 19z" />
<glyph unicode="&#xe068;" d="M645.5 2008q-0.5 14 12.5 34.5t25 33.5t39 40q23 23 34 33.5t28.5 24t28.5 15.5t26.5 1.5t30.5 -10.5t33 -28l908 -908l-905 -906q-21 -21 -40 -30t-33 -9.5t-34.5 12.5t-33.5 25t-40 39q-24 24 -33.5 34.5t-23.5 28t-16 28.5t-1.5 26.5t10.5 30.5t28 33l688 688 l-692 691q-21 21 -30 40t-9.5 33z" />
<glyph unicode="&#xe069;" d="M594.5 543.5q4.5 26.5 30.5 52.5l655 655l-652 652q-21 21 -26.5 44t-1.5 41.5t23.5 45.5t33.5 42t43 44t44.5 43.5t42 33.5t45.5 23.5t42 -1t44 -26.5l941 -942l-945 -944q-21 -21 -44 -26.5t-41.5 -1.5t-45.5 23.5t-42 33.5t-44 43q-36 36 -53.5 56t-35.5 51 t-13.5 57.5z" />
<glyph unicode="&#xe06a;" d="M494 635.5q3 23.5 20 40.5l580 579l-580 579q-17 17 -20 40.5t10 51.5t27.5 52t42.5 55.5t43.5 48t41.5 42.5q25 25 42 41t48.5 43.5t55.5 42.5t52 28t51.5 10t40.5 -20l1013 -1014l-1013 -1013q-17 -17 -40.5 -20t-51.5 10t-52.5 27.5t-55 41.5t-48 43.5t-42.5 41.5 q-26 26 -41.5 42.5t-43.5 48t-42.5 55.5t-27.5 52t-10 51.5z" />
<glyph unicode="&#xe06b;" d="M333 813q0 9 27 36l869 869l869 -869q27 -27 27 -36t-27 -36t-36.5 -27t-36.5 27l-796 796l-797 -796q-27 -27 -36 -27t-36 27t-27 36z" />
<glyph unicode="&#xe06c;" d="M302 829q0 5 8 19t17 22.5t31 30.5l872 872l869 -869q22 -22 31 -30.5t16.5 -22.5t7.5 -19t-7.5 -19t-16.5 -22.5t-31 -30.5l-31 -31t-23 -17t-19 -8t-19 8t-22.5 17t-30.5 31l-724 724l-727 -728l-31 -31t-23 -16.5t-19 -7.5t-19 7.5t-22.5 16.5t-30.5 31l-31 31t-17 23 t-8 19z" />
<glyph unicode="&#xe06d;" d="M283.5 856.5q0.5 15.5 10.5 30.5t28 33l908 908l906 -905q21 -21 30 -40t9.5 -33t-12.5 -34.5t-25 -33.5t-39 -40q-24 -24 -34.5 -33.5t-28 -23.5t-28.5 -16t-26.5 -1.5t-30.5 10.5t-33 28l-688 687l-691 -691q-26 -26 -47 -35.5t-44.5 0.5t-40 24t-49.5 47 q-23 23 -33.5 34.5t-24 28.5t-15.5 28.5t-1.5 27z" />
<glyph unicode="&#xe06e;" d="M256.5 855q-4.5 19 1 42t26.5 44l942 941l944 -945q21 -21 26.5 -44t1.5 -41.5t-23.5 -45.5t-33.5 -42t-43 -44q-36 -36 -56 -53.5t-51 -35.5t-57.5 -13.5t-52.5 30.5l-655 655l-652 -652q-21 -21 -44 -26.5t-41.5 -1.5t-45.5 23.5t-42 33.5t-44 43t-43.5 44.5t-33.5 42 t-23.5 45.5z" />
<glyph unicode="&#xe06f;" d="M195 934.5q3 23.5 20 40.5l1014 1014l1014 -1014q17 -17 20 -40.5t-10 -51.5t-27.5 -51.5t-42.5 -55t-43.5 -48t-41.5 -42.5t-42.5 -41.5t-48 -43.5t-55.5 -42.5t-52 -27.5t-51.5 -10t-40.5 20l-579 579l-579 -579q-17 -17 -40.5 -20t-51.5 10t-52 27.5t-55.5 42.5 t-48 43.5t-42.5 41.5t-41.5 42.5t-43.5 48t-42.5 55t-27.5 51.5t-10 51.5z" />
<glyph unicode="&#xe070;" d="M0 1229q0 250 97.5 477.5t262 392t392 262t477.5 97.5t477.5 -97.5t392 -262t262 -392t97.5 -477.5t-97.5 -477.5t-262 -392t-392 -262t-477.5 -97.5t-477.5 97.5t-392 262t-262 392t-97.5 477.5zM102 1229q0 -226 90.5 -434.5t242 -360t360 -242t434.5 -90.5 q151 0 296.5 41t268.5 114.5t228 178t178 228t114 269t41 296.5q0 226 -90.5 434.5t-241.5 359.5t-359.5 241.5t-434.5 90.5q-151 0 -296.5 -41t-269 -114t-228 -178t-178 -228t-114.5 -268.5t-41 -296.5z" />
<glyph unicode="&#xe071;" d="M0 1229q0 200 62 388t175.5 339t264.5 264.5t339 175.5t388 62t388 -62t339 -175.5t264.5 -264.5t175.5 -339t62 -388t-62 -388t-175.5 -339t-264.5 -264.5t-339 -175.5t-388 -62t-388 62t-339 175.5t-264.5 264.5t-175.5 339t-62 388zM205 1229q0 -209 81 -398.5 t218 -326.5t326.5 -218t398.5 -81t398.5 81t326.5 218t218 326.5t81 398.5t-81 398.5t-218 326.5t-326.5 218t-398.5 81t-398.5 -81t-326.5 -218t-218 -326.5t-81 -398.5z" />
<glyph unicode="&#xe072;" d="M0 1229q0 245 99 472t265 393t393 265t472 99t472 -99t393 -265t265 -393t99 -472t-99 -472t-265 -393t-393 -265t-472 -99t-472 99t-393 265t-265 393t-99 472zM307 1229q0 -189 72.5 -359.5t196 -294t294 -196t359.5 -72.5t359.5 72.5t293.5 196t195.5 294t72.5 359.5 t-72.5 359.5t-195.5 293.5t-293.5 195.5t-359.5 72.5t-359.5 -72.5t-294 -195.5t-196 -293.5t-72.5 -359.5z" />
<glyph unicode="&#xe073;" d="M0 1229q0 250 97.5 477.5t262 392t392 262t477.5 97.5t477.5 -97.5t392 -262t262 -392t97.5 -477.5t-97.5 -477.5t-262 -392t-392 -262t-477.5 -97.5t-477.5 97.5t-392 262t-262 392t-97.5 477.5zM410 1229q0 -166 65 -318t174.5 -261.5t261.5 -174.5t318 -65t318 65 t261.5 174.5t174.5 261.5t65 318t-65 318t-174.5 261.5t-261.5 174.5t-318 65t-318 -65t-261.5 -174.5t-174.5 -261.5t-65 -318z" />
<glyph unicode="&#xe074;" d="M0 1229q0 245 99 472t265 393t393 265t472 99t472 -99t393 -265t265 -393t99 -472t-99 -472t-265 -393t-393 -265t-472 -99t-472 99t-393 265t-265 393t-99 472zM614 1229q0 -167 82.5 -308.5t224 -224t308.5 -82.5q125 0 238.5 49t196 131t131 196t48.5 239t-48.5 238.5 t-131 196t-196 131t-238.5 48.5t-239 -48.5t-196 -131t-131 -196t-49 -238.5z" />
<glyph unicode="&#xe075;" d="M0 1229q0 245 99 472t265 393t393 265t472 99t472 -99t393 -265t265 -393t99 -472t-99 -472t-265 -393t-393 -265t-472 -99t-472 99t-393 265t-265 393t-99 472zM498 1167.5q0 -4.5 8 -19t16.5 -23t30.5 -31.5l446 -445q22 -22 30.5 -31t23 -16.5t19 -7.5t19 7.5t23 16.5 t31.5 31l807 807q22 23 31 31.5t16.5 23t7.5 19t-7.5 19t-16.5 23t-31 30.5l-146 145q-23 23 -30.5 31t-22.5 16.5t-19 8t-18.5 -7.5t-23.5 -16.5t-31 -31.5l-590 -592l-227 229q-21 21 -30.5 31t-23 17t-19 7.5t-19.5 -7.5t-23 -17l-31 -31l-145 -145l-30.5 -30.5 t-16.5 -22.5t-8 -18.5z" />
<glyph unicode="&#xe076;" d="M0 1229q0 245 99 472t265 393t393 265t472 99t472 -99t393 -265t265 -393t99 -472t-99 -472t-265 -393t-393 -265t-472 -99t-472 99t-393 265t-265 393t-99 472zM614 1229l615 -615l614 615h-409v409q0 76 -13 89.5t-90 13.5h-205h-43.5t-27.5 -4.5t-18.5 -8t-8 -19 t-4.5 -28v-43.5v-409h-410z" />
<glyph unicode="&#xe077;" d="M0 1536q0 189 72.5 359.5t196 294t294 196t359.5 72.5q206 0 388 -84t309.5 -232.5t184.5 -337.5q189 -57 337.5 -184.5t232.5 -309.5t84 -388q0 -189 -72.5 -359.5t-196 -294t-294 -196t-359.5 -72.5q-311 0 -554 182.5t-329 470.5q-288 86 -470.5 329t-182.5 554z M717 846q0 -69 8 -121q52 -8 121 -8q184 0 349.5 70.5t285 190t190 286t70.5 350.5q0 67 -8 119q-52 8 -119 8q-184 0 -350.5 -70.5t-286 -190t-190 -285t-70.5 -349.5z" />
<glyph unicode="&#xe078;" d="M0 1229q0 245 99 472t265 393t393 265t472 99t472 -99t393 -265t265 -393t99 -472t-99 -472t-265 -393t-393 -265t-472 -99t-472 99t-393 265t-265 393t-99 472zM1024 468.5q0 -12.5 4.5 -28t7.5 -18.5t18.5 -7.5t28 -4.5h43.5h205h43.5t28 4.5t19 8t8 18.5t4.5 27.5 v43.5v819q0 77 -13 90t-90 13h-205h-43.5t-27.5 -4.5t-18.5 -8t-8 -19t-4.5 -28v-43.5v-819v-43.5zM1024 1697.5q0 -12.5 4.5 -28t8 -19t18.5 -8t27.5 -4.5h43.5h205q77 0 90 13t13 90v205v43.5t-4.5 27.5t-8 18.5t-19 8t-28 4.5h-43.5h-205h-43.5t-28 -4.5t-18.5 -7.5 t-7.5 -18.5t-4.5 -28v-43.5v-205v-43.5z" />
<glyph unicode="&#xe079;" d="M0 1536q0 189 72.5 359.5t196 294t294 196t359.5 72.5q206 0 388 -84t309.5 -232.5t184.5 -337.5q189 -57 337.5 -184.5t232.5 -309.5t84 -388q0 -189 -72.5 -359.5t-196 -294t-294 -196t-359.5 -72.5q-311 0 -554 182.5t-329 470.5q-288 86 -470.5 329t-182.5 554z M205 1536q0 -214 112 -388t298 -261l-1 35q0 189 72.5 359.5t196 293.5t294 195.5t359.5 72.5h35q-87 186 -261 298t-388 112q-196 0 -361 -95.5t-260.5 -260.5t-95.5 -361zM887 615q87 -186 261 -298t388 -112q196 0 361 95.5t260.5 260.5t95.5 361q0 214 -112 388 t-298 261v-35q0 -189 -72.5 -359.5t-195.5 -294t-293.5 -196t-359.5 -72.5z" />
<glyph unicode="&#xe07a;" d="M0 1229q0 245 99 472t265 393t393 265t472 99t472 -99t393 -265t265 -393t99 -472t-99 -472t-265 -393t-393 -265t-472 -99t-472 99t-393 265t-265 393t-99 472zM614 1229l615 -615v410h409h43.5t28 4.5t19 8t8 18.5t4.5 27.5v43.5v205q0 77 -13.5 90t-89.5 13h-409v409z " />
<glyph unicode="&#xe07b;" d="M0 1229q0 250 97.5 477.5t262 392t392 262t477.5 97.5t477.5 -97.5t392 -262t262 -392t97.5 -477.5t-97.5 -477.5t-262 -392t-392 -262t-477.5 -97.5t-477.5 97.5t-392 262t-262 392t-97.5 477.5zM614 1082.5q0 -12.5 4.5 -27.5t8 -18.5t19 -8t28 -4.5h43.5h1024h43.5 t28 4.5t18.5 7.5t7.5 18.5t4.5 28v43.5v205v43.5t-4.5 28t-8 19t-18.5 8t-27.5 4.5h-43.5h-1024q-77 0 -90 -13t-13 -90v-205v-43.5z" />
<glyph unicode="&#xe07c;" d="M0 1229q0 245 99 472t265 393t393 265t472 99t472 -99t393 -265t265 -393t99 -472t-99 -472t-265 -393t-393 -265t-472 -99t-472 99t-393 265t-265 393t-99 472zM614 1082.5q0 -12.5 4.5 -27.5t8 -18.5t19 -8t28 -4.5h43.5h307v-307v-43.5t4.5 -28t8 -19t18.5 -8 t27.5 -4.5h43.5h205q77 0 90 13t13 90v307h307h43.5t28 4.5t18.5 7.5t7.5 18.5t4.5 28v43.5v205v43.5t-4.5 28t-8 19t-18.5 8t-27.5 4.5h-43.5h-307v307v43.5t-4.5 27.5t-8 18.5t-19 8t-28 4.5h-43.5h-205h-43.5t-28 -4.5t-18.5 -7.5t-7.5 -18.5t-4.5 -28v-43.5v-307h-307 q-77 0 -90 -13t-13 -90v-205v-43.5z" />
<glyph unicode="&#xe07d;" d="M0 1229q0 245 99 472t265 393t393 265t472 99t472 -99t393 -265t265 -393t99 -472t-99 -472t-265 -393t-393 -265t-472 -99t-472 99t-393 265t-265 393t-99 472zM735 1483h348q-9 118 29.5 182t122.5 64q137 0 137 -156q0 -51 -18.5 -95.5t-47.5 -78.5t-64.5 -67t-71 -70 t-64.5 -78.5t-47.5 -101t-18.5 -130.5v-45h373q0 49 18 90.5t46.5 73.5t63 65t69 73t63 87.5t46.5 118.5t18 158q0 229 -143.5 372.5t-358.5 143.5q-158 0 -281.5 -84t-181.5 -223.5t-37 -298.5zM1022 551q0 -78 62.5 -140.5t144.5 -62.5q81 0 142 62.5t61 140.5 q0 85 -61 146t-142 61t-144 -61t-63 -146z" />
<glyph unicode="&#xe07e;" d="M0 1229q0 245 99 472t265 393t393 265t472 99t472 -99t393 -265t265 -393t99 -472t-99 -472t-265 -393t-393 -265t-472 -99t-472 99t-393 265t-265 393t-99 472zM594 866.5q0 -4.5 8 -18.5t16.5 -22.5l30.5 -30.5l146 -146l30.5 -30.5t22.5 -16.5t18.5 -8t19 8t23 16.5 t31.5 30.5l289 291l289 -291q23 -22 31.5 -30.5t23 -16.5t19 -8t18.5 8t22.5 16.5l30.5 30.5l145 146l30.5 30.5t16.5 22.5t8 18.5t-8 19t-16.5 23t-30.5 31.5l-290 289l290 289q22 23 30.5 31.5t16.5 23t8 19t-8 18.5t-16.5 22.5l-30.5 30.5l-145 145l-30.5 30.5 t-22.5 16.5t-18.5 8t-19 -8t-23 -16.5t-31.5 -30.5l-289 -290l-289 290q-23 22 -31.5 30.5t-23 16.5t-19 8t-18.5 -8t-22.5 -16.5l-30.5 -30.5l-146 -145l-30.5 -30.5t-16.5 -22.5t-8 -18.5t8 -19t16.5 -23t30.5 -31.5l291 -289l-291 -289q-22 -23 -30.5 -31.5t-16.5 -23 t-8 -19z" />
<glyph unicode="&#xe07f;" d="M0 1229q0 245 99 472t265 393t393 265t472 99t472 -99t393 -265t265 -393t99 -472t-99 -472t-265 -393t-393 -265t-472 -99t-472 99t-393 265t-265 393t-99 472zM717 1082.5q0 -12.5 4.5 -28t7.5 -18.5t18.5 -7.5t28 -4.5h43.5h410v-410l614 615l-614 614v-409h-410 h-43.5t-27.5 -4.5t-18.5 -8t-8 -19t-4.5 -28v-43.5v-205v-43.5z" />
<glyph unicode="&#xe080;" d="M0 1536q0 189 72.5 359.5t196 294t294 196t359.5 72.5q206 0 388 -84t309.5 -232.5t184.5 -337.5q189 -57 337.5 -184.5t232.5 -309.5t84 -388q0 -189 -72.5 -359.5t-196 -294t-294 -196t-359.5 -72.5q-311 0 -554 182.5t-329 470.5q-288 86 -470.5 329t-182.5 554z M819 922q0 -196 95.5 -361t260.5 -260.5t361 -95.5t361 95.5t260.5 260.5t95.5 361q0 202 -93 366t-257.5 257t-366.5 93q-196 0 -361 -95t-260.5 -260t-95.5 -361zM922 512q109 0 225 25l-23 100l-202 -23v-102zM1300 694l177 103l61 -82q-94 -69 -197 -115zM1612 922 l116 168l91 -50q-55 -101 -131 -186zM1802 1257l37 201l102 -8q-9 -115 -43 -221z" />
<glyph unicode="&#xe081;" d="M0 1536q0 189 72.5 359.5t196 294t294 196t359.5 72.5q277 0 502.5 -147.5t334.5 -389.5l-63 12l-17 -100l125 -29l33 -162l102 13q-6 50 -18 104q242 -109 389.5 -334.5t147.5 -502.5q0 -189 -72.5 -359.5t-196 -294t-294 -196t-359.5 -72.5q-277 0 -503 147.5 t-335 389.5l64 -13l16 101l-125 28l-32 162l-103 -12q5 -44 19 -105q-242 109 -389.5 335t-147.5 503zM516 1008l102 -9l37 201l-96 29q-34 -106 -43 -221zM639 1417l90 -49l117 168l-76 68q-75 -83 -131 -187zM920 1743l61 -84l176 104l-41 95q-100 -44 -196 -115zM922 512 q109 0 225 25l-23 100l-202 -23v-102zM1300 694l41 -94q103 46 197 115l-61 82zM1311 1921l22 -100l203 22v103q-109 0 -225 -25zM1612 922l76 -68q76 85 131 186l-90 50zM1802 1257l96 -28q35 110 44 221l-103 8z" />
<glyph unicode="&#xe082;" d="M0 1229q0 245 99 472t265 393t393 265t472 99t472 -99t393 -265t265 -393t99 -472t-99 -472t-265 -393t-393 -265t-472 -99t-472 99t-393 265t-265 393t-99 472zM614 1229h410v-410v-43.5t4.5 -28t7.5 -18.5t18.5 -7.5t28 -4.5h43.5h205h43.5t28 4.5t19 8t8 18.5 t4.5 27.5v43.5v410h409l-614 614z" />
<glyph unicode="&#xe083;" d="M0 1229q0 245 99 472t265 393t393 265t472 99t472 -99t393 -265t265 -393t99 -472t-99 -472t-265 -393t-393 -265t-472 -99t-472 99t-393 265t-265 393t-99 472zM1024 468.5q0 -12.5 4.5 -28t7.5 -18.5t18.5 -7.5t28 -4.5h43.5h205h43.5t28 4.5t19 8t8 18.5t4.5 27.5 v43.5v205v43.5t-4.5 27.5t-8 18.5t-19 8t-28 4.5h-43.5h-205h-43.5t-28 -4.5t-18.5 -7.5t-7.5 -18.5t-4.5 -28v-43.5v-205v-43.5zM1024 1082.5q0 -12.5 4.5 -28t7.5 -18.5t18.5 -7.5t28 -4.5h43.5h205h43.5t28 4.5t19 8t8 18.5t4.5 27.5v43.5v820v43.5t-4.5 27.5t-8 18.5 t-19 8t-28 4.5h-43.5h-205h-43.5t-28 -4.5t-18.5 -7.5t-7.5 -18.5t-4.5 -28v-43.5v-820v-43.5z" />
<glyph unicode="&#xe084;" d="M0 1229q0 200 62 388t175.5 339t264.5 264.5t339 175.5t388 62t388 -62t339 -175.5t264.5 -264.5t175.5 -339t62 -388t-62 -388t-175.5 -339t-264.5 -264.5t-339 -175.5t-388 -62t-388 62t-339 175.5t-264.5 264.5t-175.5 339t-62 388zM205 1229q0 -209 81 -398.5 t218 -326.5t326.5 -218t398.5 -81t398.5 81t326.5 218t218 326.5t81 398.5t-81 398.5t-218 326.5t-326.5 218t-398.5 81t-398.5 -81t-326.5 -218t-218 -326.5t-81 -398.5zM1124.5 1195q0.5 13 1.5 34l21 727q3 44 19.5 73.5t39.5 36.5t45.5 0t39.5 -36.5t20 -73.5l20 -625 l481 -41q32 -3 56.5 -13.5t37.5 -25t19 -31.5t0 -33.5t-19 -30t-37.5 -22t-56.5 -8.5h-583h-34t-25.5 2t-19.5 3.5t-12.5 7.5t-9 12.5t-3 18.5t-1 25z" />
<glyph unicode="&#xe085;" d="M0 1126q0 156 85.5 284t224.5 187q15 181 113.5 331.5t257.5 237.5t343 87q218 0 396 -119t262 -312q76 21 161 21q125 0 239 -48.5t196 -131t131 -196t49 -238.5q0 -167 -82.5 -308.5t-224 -224t-308.5 -82.5h-205v205h205q170 0 290 120t120 290t-120 289.5t-290 119.5 q-35 0 -70.5 -3.5t-59.5 -7.5t-56.5 -13t-45 -13t-43 -14.5t-33.5 -11.5q-17 201 -163.5 337t-347.5 136q-155 0 -282.5 -84.5t-189 -227t-30.5 -301.5q-134 0 -225.5 -90t-91.5 -219q0 -128 89.5 -217.5t217.5 -89.5h307v-205h-307q-212 0 -362 150t-150 362zM796 410h279 v819v43.5t4.5 27.5t8 18.5t19 8t28 4.5h43.5h102h43.5t28 -4.5t18.5 -7.5t7.5 -18.5t4.5 -28v-43.5v-819h280l-433 -512z" />
<glyph unicode="&#xe086;" d="M0 1126q0 156 85.5 284t224.5 187q15 181 113.5 331.5t257.5 237.5t343 87q218 0 396 -119t262 -312q76 21 161 21q125 0 239 -48.5t196 -131t131 -196t49 -238.5q0 -167 -82.5 -308.5t-224 -224t-308.5 -82.5h-205v205h205q170 0 290 120t120 290t-120 289.5t-290 119.5 q-35 0 -70.5 -3.5t-59.5 -7.5t-56.5 -13t-45 -13t-43 -14.5t-33.5 -11.5q-17 201 -163.5 337t-347.5 136q-155 0 -282.5 -84.5t-189 -227t-30.5 -301.5q-134 0 -225.5 -90t-91.5 -219q0 -128 89.5 -217.5t217.5 -89.5h307v-205h-307q-212 0 -362 150t-150 362zM796 1024 l433 512l433 -512h-228v-717v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-205h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28v43.5v717h-228z" />
<glyph unicode="&#xe087;" d="M0 878.5v43.5v614v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h1024h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-614v-44t-4.5 -28t-8 -18.5t-18.5 -8t-28 -4.5h-44h-1024h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28zM410 58.5v43.5v410v43.5t4.5 28t7.5 18.5t18.5 7.5 t28 4.5h43.5h614h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-410v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-614h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM614 1946v204q0 76 13 89.5t90 13.5h409h44t28 -4.5t18.5 -8t8 -18.5t4.5 -28v-44v-204v-44 t-4.5 -28t-8 -18.5t-18.5 -8t-28 -4.5h-44h-409q-77 0 -90 13.5t-13 89.5zM1434 263.5v43.5v819v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h819q77 0 90 -13.5t13 -89.5v-819v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-819h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5 t-4.5 28zM1434 1492.5v43.5v410v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h614h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-410v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-614h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28z" />
<glyph unicode="&#xe088;" d="M0 1075v307l342 96q30 107 83 202l-174 309l217 217l310 -173q96 54 201 83l96 342h307l96 -342q107 -30 202 -83l309 173l217 -217l-173 -309q53 -95 83 -202l342 -96v-307l-342 -96q-28 -101 -84 -201l174 -309l-217 -218l-309 174q-95 -53 -202 -83l-96 -342h-307 l-96 342q-105 29 -201 83l-310 -174l-217 218l174 309q-54 96 -83 201zM819 1229q0 -169 120.5 -289.5t289.5 -120.5t289 120t120 290q0 169 -120 289t-289 120q-170 0 -290 -120t-120 -289z" />
<glyph unicode="&#xe089;" d="M0 58.5v43.5v2048v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h256h44t28 -4.5t18.5 -8t8 -18.5t4.5 -28v-44v-2048v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-256h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM666 58.5v43.5v2048v43.5t4.5 28t8 19t18.5 8 t27.5 4.5h43.5h256h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-2048v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-256h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM1331 58.5v43.5v2048v44t4.5 28t8 18.5t18.5 8t28 4.5h44h256h43.5t27.5 -4.5t18.5 -8t8 -19 t4.5 -28v-43.5v-2048v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-256h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5zM1997 58.5v43.5v2048v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h256q77 0 90 -13.5t13 -89.5v-2048v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5 h-43.5h-256h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28z" />
<glyph unicode="&#xe08a;" d="M0 58.5v43.5v2048v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h461q77 0 90 -13.5t13 -89.5v-2048v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-461h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM870 58.5v43.5v2048q0 76 13 89.5t90 13.5h512h43.5t27.5 -4.5t18.5 -8 t8 -19t4.5 -28v-43.5v-2048v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-512h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5zM1792 58.5v43.5v2048v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h461q77 0 90 -13.5t13 -89.5v-2048v-43.5t-4.5 -27.5t-8 -18.5t-19 -8 t-28 -4.5h-43.5h-461h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28z" />
<glyph unicode="&#xe08b;" d="M0 1229q0 200 62 388t175.5 339t264.5 264.5t339 175.5t388 62t388 -62t339 -175.5t264.5 -264.5t175.5 -339t62 -388t-62 -388t-175.5 -339t-264.5 -264.5t-339 -175.5t-388 -62t-388 62t-339 175.5t-264.5 264.5t-175.5 339t-62 388zM205 1229q0 -209 81 -398.5 t218 -326.5t326.5 -218t398.5 -81t398.5 81t326.5 218t218 326.5t81 398.5t-81 398.5t-218 326.5t-326.5 218t-398.5 81t-398.5 -81t-326.5 -218t-218 -326.5t-81 -398.5zM666 666q42 339 95 532.5t161 337.5q144 108 337.5 161t532.5 95q-42 -339 -95 -532.5t-161 -337.5 q-144 -108 -337.5 -161t-532.5 -95zM1075 1382l307 -307q154 154 154 461q-307 0 -461 -154z" />
<glyph unicode="&#xe08c;" d="M0 1229q0 200 62 388t175.5 339t264.5 264.5t339 175.5t388 62t388 -62t339 -175.5t264.5 -264.5t175.5 -339t62 -388t-62 -388t-175.5 -339t-264.5 -264.5t-339 -175.5t-388 -62t-388 62t-339 175.5t-264.5 264.5t-175.5 339t-62 388zM205 1229q0 -209 81 -398.5 t218 -326.5t326.5 -218t398.5 -81t398.5 81t326.5 218t218 326.5t81 398.5t-81 398.5t-218 326.5t-326.5 218t-398.5 81t-398.5 -81t-326.5 -218t-218 -326.5t-81 -398.5zM819 1229q0 93 35 171.5t93 129.5t131.5 79.5t150.5 28.5q38 0 75 -5.5t67.5 -12t68 -23.5t63 -28.5 t66.5 -39.5t65 -44.5t71 -55t72 -59t82 -68.5t87 -73q-31 -26 -87 -73t-81.5 -68.5t-72.5 -59t-71.5 -55t-64.5 -45t-66 -39.5t-63 -29t-68 -23.5t-68 -12t-75 -5.5q-104 0 -196.5 48t-153 143.5t-60.5 218.5zM1075 1229q0 -63 45.5 -108.5t108.5 -45.5t108 45.5t45 108.5 t-45 108t-108 45t-108.5 -45t-45.5 -108z" />
<glyph unicode="&#xe08d;" d="M0 1229q0 200 62 388t175.5 339t264.5 264.5t339 175.5t388 62t388 -62t339 -175.5t264.5 -264.5t175.5 -339t62 -388t-62 -388t-175.5 -339t-264.5 -264.5t-339 -175.5t-388 -62t-388 62t-339 175.5t-264.5 264.5t-175.5 339t-62 388zM205 1229q0 -208 81 -397.5 t218.5 -327t327 -218.5t397.5 -81t397.5 81t327 218.5t218.5 327t81 397.5t-81 397.5t-218.5 327t-327 218.5t-397.5 81t-397.5 -81t-327 -218.5t-218.5 -327t-81 -397.5zM819 1229q0 38 5.5 75t12 68t23.5 68t29 63t39.5 66t45 64.5t55 71.5t59 72.5t68.5 81.5t73 87 q25 -30 73 -87t68.5 -82t59 -72t55 -71t44.5 -65t39.5 -66.5t28.5 -63t23.5 -68t12 -67.5t5.5 -75q0 -77 -28.5 -150.5t-79.5 -131.5t-129.5 -93t-171.5 -35q-123 0 -218.5 60.5t-143.5 153t-48 196.5zM1075 1229q0 -63 45.5 -108.5t108.5 -45.5t108 45.5t45 108.5t-45 108 t-108 45t-108.5 -45t-45.5 -108z" />
<glyph unicode="&#xe08e;" d="M-1 1225.5q0 232.5 92 462t269 406.5t406.5 269t462.5 92t462.5 -92t406.5 -269t269 -406.5t92 -462t-92 -462t-269 -406.5t-406.5 -269t-462.5 -92t-462.5 92t-406.5 269t-269 406.5t-92 462zM204 1225.5q0 -193.5 77 -385t224 -338.5t338.5 -224t385.5 -77t385.5 77 t338.5 224t224 338.5t77 385t-77 385t-224 338.5t-338.5 224t-385.5 77t-385.5 -77t-338.5 -224t-224 -338.5t-77 -385zM827 1133q-25 110 6.5 209t105.5 173q27 27 56.5 49t56.5 39.5t65 31.5t65 24t75 19t77 14t88.5 11.5t93 9.5t106.5 9t113 10q-4 -40 -10 -113 t-9 -106.5t-9.5 -93t-11.5 -88.5t-14 -77t-19 -75t-24 -65t-31.5 -65t-39.5 -56.5t-49 -56.5q-74 -74 -173 -105.5t-209 -6.5t-197 112t-112 197zM1076 1225.5q0 -64.5 44 -108.5t108.5 -44t108.5 44t44 108.5t-44 108.5t-108.5 44t-108.5 -44t-44 -108.5z" />
<glyph unicode="&#xe08f;" d="M2 1229q0 233 92 462.5t269 406.5t406.5 269t462.5 92t462.5 -92t406.5 -269t269 -406.5t92 -462.5t-92 -462.5t-269 -406.5t-406.5 -269t-462.5 -92t-462.5 92t-406.5 269t-269 406.5t-92 462.5zM207 1229q0 -194 77 -385.5t224 -338.5t338.5 -224t385.5 -77t385.5 77 t338.5 224t224 338.5t77 385.5t-77 385.5t-224 338.5t-338.5 224t-385.5 77t-385.5 -77t-338.5 -224t-224 -338.5t-77 -385.5zM725 1735q39 -4 124.5 -11t117.5 -10t99.5 -10.5t96.5 -14t81 -18t81 -25t67.5 -32t69 -42.5t60.5 -54q74 -74 105.5 -173t6.5 -209t-112 -197 t-197.5 -112t-209.5 6.5t-173 105.5q-27 27 -49 56.5t-39.5 56.5t-31.5 65t-24 65t-19 75t-14 77t-11.5 88.5t-9.5 93t-9 106.5t-10 113zM1080 1228.5q0 -64.5 44 -108.5t108.5 -44t108.5 44t44 108.5t-44 108.5t-108.5 44t-108.5 -44t-44 -108.5z" />
<glyph unicode="&#xe090;" d="M0 1229q0 200 62 388t175.5 339t264.5 264.5t339 175.5t388 62t388 -62t339 -175.5t264.5 -264.5t175.5 -339t62 -388t-62 -388t-175.5 -339t-264.5 -264.5t-339 -175.5t-388 -62t-388 62t-339 175.5t-264.5 264.5t-175.5 339t-62 388zM205 1229q0 -208 81 -397.5 t218.5 -327t327 -218.5t397.5 -81t397.5 81t327 218.5t218.5 327t81 397.5t-81 397.5t-218.5 327t-327 218.5t-397.5 81t-397.5 -81t-327 -218.5t-218.5 -327t-81 -397.5zM819 1229q0 104 48 196.5t143.5 152.5t218.5 60q93 0 171.5 -35t129.5 -92.5t79.5 -131t28.5 -150.5 q0 -38 -5.5 -75t-12 -67.5t-23.5 -68t-28.5 -63t-39.5 -66.5t-44.5 -65t-55 -71t-59 -72t-68.5 -82t-73 -87q-26 31 -73 87t-68.5 81.5t-59 72.5t-55 71.5t-45 64.5t-39.5 66t-29 63t-23.5 68t-12 68t-5.5 75zM1075 1229q0 -63 45.5 -108.5t108.5 -45.5t108 45.5t45 108.5 t-45 108t-108 45t-108.5 -45t-45.5 -108z" />
<glyph unicode="&#xe091;" d="M-4 1229q0 233 92 462.5t269 406.5t406.5 269t462 92t462 -92t406.5 -269t269 -406.5t92 -462.5t-92 -462.5t-269 -406.5t-406.5 -269t-462 -92t-462 92t-406.5 269t-269 406.5t-92 462.5zM201 1229q0 -194 77 -385.5t224 -338.5t338.5 -224t385 -77t385 77t338.5 224 t224 338.5t77 385.5t-77 385.5t-224 338.5t-338.5 224t-385 77t-385 -77t-338.5 -224t-224 -338.5t-77 -385.5zM824 1321q25 110 112 197t197 112t209 -6.5t173 -105.5q27 -27 49 -56.5t39.5 -56.5t31.5 -65t24 -65t19 -75t14 -77t11.5 -88.5t9.5 -93t9 -106.5t10 -113 q-40 4 -113 10t-106.5 9t-93 9.5t-88.5 11.5t-77 14t-75 19t-65 24t-65 31.5t-56.5 39.5t-56.5 49q-74 74 -105.5 173t-6.5 209zM1073 1228.5q0 -64.5 44 -108.5t108.5 -44t108.5 44t44 108.5t-44 108.5t-108.5 44t-108.5 -44t-44 -108.5z" />
<glyph unicode="&#xe092;" d="M-1 1232q0 233 92 462.5t269 406.5t406.5 269t462.5 92t462.5 -92t406.5 -269t269 -406.5t92 -462.5t-92 -462.5t-269 -406.5t-406.5 -269t-462.5 -92t-462.5 92t-406.5 269t-269 406.5t-92 462.5zM204 1232q0 -194 77 -385.5t224 -338.5t338.5 -224t385.5 -77t385.5 77 t338.5 224t224 338.5t77 385.5t-77 385.5t-224 338.5t-338.5 224t-385.5 77t-385.5 -77t-338.5 -224t-224 -338.5t-77 -385.5zM722 725q4 39 11 124.5t10 117.5t10.5 99.5t14 96.5t18 81t25 81t32 67.5t42.5 69t54 60.5q74 74 173 105.5t209 6.5t197 -112t112 -197.5 t-6.5 -209.5t-105.5 -173q-27 -27 -56.5 -49t-56.5 -39.5t-65 -31.5t-65 -24t-75 -19t-77 -14t-88.5 -11.5t-93 -9.5t-106.5 -9t-113 -10zM1076 1232.5q0 -64.5 44 -108.5t108.5 -44t108.5 44t44 108.5t-44 108.5t-108.5 44t-108.5 -44t-44 -108.5z" />
<glyph unicode="&#xe093;" d="M0 1229q0 200 62 388t175.5 339t264.5 264.5t339 175.5t388 62t388 -62t339 -175.5t264.5 -264.5t175.5 -339t62 -388t-62 -388t-175.5 -339t-264.5 -264.5t-339 -175.5t-388 -62t-388 62t-339 175.5t-264.5 264.5t-175.5 339t-62 388zM205 1229q0 -208 81 -397.5 t218.5 -327t327 -218.5t397.5 -81t397.5 81t327 218.5t218.5 327t81 397.5t-81 397.5t-218.5 327t-327 218.5t-397.5 81t-397.5 -81t-327 -218.5t-218.5 -327t-81 -397.5zM512 1229q30 25 87 73t82 68.5t72 59t71 55t65 44.5t66.5 39.5t63 28.5t68 23.5t67.5 12t75 5.5 q77 0 150.5 -28.5t131 -79.5t92.5 -129.5t35 -171.5q0 -123 -60 -218.5t-152.5 -143.5t-196.5 -48q-38 0 -75 5.5t-68 12t-68 23.5t-63 29t-66 39.5t-64.5 45t-71.5 55t-72.5 59t-81.5 68.5t-87 73zM1075 1229q0 -63 45.5 -108.5t108.5 -45.5t108 45.5t45 108.5t-45 108 t-108 45t-108.5 -45t-45.5 -108z" />
<glyph unicode="&#xe094;" d="M0 1229q0 250 97.5 477.5t262 392t392 262t477.5 97.5t477.5 -97.5t392 -262t262 -392t97.5 -477.5t-97.5 -477.5t-262 -392t-392 -262t-477.5 -97.5t-477.5 97.5t-392 262t-262 392t-97.5 477.5zM1229 307q187 0 358 73t294 196.5t196 294t73 358.5t-73 358.5 t-196 293.5t-293.5 196t-358.5 73v-1843z" />
<glyph unicode="&#xe095;" d="M205 1229l1229 1229v-1024l1024 1024v-2458l-1024 1024v-1024z" />
<glyph unicode="&#xe096;" d="M0 263.5v43.5v410v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h2253h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-410v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-2253h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM102 1024l1127 1229l1126 -1229h-2253z" />
<glyph unicode="&#xe097;" d="M0 58.5v43.5v2253v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h205q77 0 90 -13t13 -90v-921l1024 1024v-1024l1024 1024v-2458l-1024 1024v-1024l-1024 1024v-922v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-205h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28z" />
<glyph unicode="&#xe098;" d="M0 0v2458l1024 -1024v1024l1024 -1024v921v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h205q77 0 90 -13t13 -90v-2253v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-205h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28v43.5v922l-1024 -1024v1024z" />
<glyph unicode="&#xe099;" d="M0 0v2458l1024 -1024v1024l1229 -1229l-1229 -1229v1024z" />
<glyph unicode="&#xe09a;" d="M205 307v1843v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h615h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-1843v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-615q-77 0 -89.5 12.5t-12.5 89.5zM1434 263.5v43.5v1843v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5 h614h44t28 -4.5t18.5 -8t8 -18.5t4.5 -28v-44v-1843v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-614h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28z" />
<glyph unicode="&#xe09b;" d="M410 0v2253l1843 -1127z" />
<glyph unicode="&#xe09c;" d="M205 307v1843v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h1843h44t28 -4.5t18.5 -8t8 -18.5t4.5 -28v-44v-1843v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-1843q-77 0 -89.5 12.5t-12.5 89.5z" />
<glyph unicode="&#xe09d;" d="M-614 0q0 13 0.5 36.5t6 91t15 129.5t30.5 140t50 135l573 308q81 40 111 88t33 106q-155 115 -241.5 327.5t-86.5 440.5q0 99 26 194t79.5 178.5t128 147t178.5 100t223 36.5q284 0 459.5 -182t175.5 -474q0 -167 -33 -314t-108 -273.5t-186 -197.5q11 -112 143 -177 l266 -143l266 143q100 51 129 122q-81 31 -153.5 76t-118.5 87t-80 80.5t-49 61.5l-15 23q4 5 11 15.5t25 53t31.5 95t24.5 146t11 202.5q0 99 26 194t79.5 178.5t128 147t178.5 100t223 36.5q289 0 461.5 -181t172.5 -475q0 -109 10.5 -202t26 -147.5t30.5 -93.5t25 -54 l11 -15q-5 -9 -15 -25.5t-46.5 -62t-80 -86t-116.5 -87t-154 -76.5q31 -66 125 -113l574 -308q45 -91 70.5 -224t28.5 -220l3 -88h-3686zM82 1802q0 -168 55.5 -318.5t155.5 -243.5t219 -93q144 0 242.5 86t143 230t44.5 339q0 70 -11 121q-88 -10 -174 -7.5t-164 20.5 t-166.5 73.5t-181.5 149.5q-77 -65 -120 -160t-43 -197zM205 1741q0 42 30 72t72 30q43 0 73 -29.5t30 -72.5t-31.5 -73t-71.5 -30q-41 0 -71.5 31t-30.5 72zM614 1741q0 46 28.5 74t74.5 28t74 -28t28 -74t-28 -74.5t-74 -28.5t-74.5 28.5t-28.5 74.5zM1516 1802 q0 -168 55.5 -318.5t155.5 -243.5t219 -93q144 0 242.5 86t143 230t44.5 339q0 66 -12 121q-88 -10 -173.5 -7.5t-163.5 20.5t-166.5 73.5t-181.5 149.5q-77 -65 -120 -160t-43 -197zM1577 1743q40 65 95 89t103 2t68 -83q0 -47 -28.5 -79t-73.5 -32q-41 0 -74.5 23.5 t-89.5 79.5zM2048 1751q20 61 68 83t103 -2t95 -89q-39 -39 -58 -56t-48 -32t-58 -15q-45 0 -73.5 32t-28.5 79z" />
<glyph unicode="&#xe09e;" d="M0 358v871h2458v-871q0 -75 -39.5 -114t-114.5 -39h-2150q-75 0 -114.5 39t-39.5 114zM0 1638v256q0 75 39.5 114.5t114.5 39.5h2150q75 0 114.5 -39.5t39.5 -114.5v-256h-2458zM205 468.5q0 -12.5 4.5 -28t7.5 -18.5t18.5 -7.5t28 -4.5h43.5h410h43.5t28 4.5t18.5 7.5 t7.5 18.5t4.5 28v43.5v43.5t-4.5 28t-7.5 18.5t-18.5 7.5t-28 4.5h-43.5h-410h-43.5t-28 -4.5t-18.5 -7.5t-7.5 -18.5t-4.5 -28v-43.5v-43.5z" />
<glyph unicode="&#xe09f;" d="M333 396q0 9 27 36l796 797l-796 796q-27 27 -27 36t27 36t36 27t36 -27l797 -796l796 797q27 27 36 27t36 -27t27 -36.5t-27 -36.5l-796 -796l797 -797q27 -27 27 -36t-27 -36t-36.5 -27t-36.5 27l-796 796l-797 -796q-27 -27 -36 -27t-36 27t-27 36z" />
<glyph unicode="&#xe0a0;" d="M302 432.5q0 5.5 7.5 19t16.5 22.5l31 31l724 724l-721 720l-31 31t-16.5 22.5t-7.5 19t7.5 19t16.5 22.5l31 31l31 31t22.5 16.5t19 7.5t19 -7.5t22.5 -16.5l31 -31l721 -720l723 724l31 31t22.5 16.5t19 7.5t19 -7.5t22.5 -16.5l31 -31l31 -31t16.5 -22.5t7.5 -19 t-7.5 -19t-16.5 -22.5l-31 -31l-724 -724l728 -727l31 -31t16.5 -22.5t7.5 -19t-7.5 -19t-16.5 -22.5l-31 -31l-31 -31t-22.5 -16.5t-19 -7.5t-19 7.5t-22.5 16.5l-31 31l-727 727l-724 -724l-31 -31t-22.5 -16.5t-19 -7.5t-19 7.5t-22.5 16.5l-31 31l-31 31t-16.5 22.5 t-7.5 19z" />
<glyph unicode="&#xe0a1;" d="M285.5 494q9.5 21 35.5 47l687 688l-684 684q-26 26 -35.5 47t0.5 44.5t24 40t47 49.5q27 27 40 39t33.5 25t34.5 12.5t33 -9.5t40 -30l685 -685l687 688q26 26 47 35.5t44.5 -0.5t40 -24t49.5 -47q27 -27 39 -40t25 -33.5t12.5 -34.5t-9.5 -33t-30 -40l-688 -688 l691 -691q26 -26 35.5 -47t-0.5 -44.5t-24 -40t-47 -49.5t-49.5 -47t-40 -24t-44.5 -0.5t-47 35.5l-691 691l-688 -688q-26 -26 -47 -35.5t-44.5 0.5t-40 24t-49.5 47t-47 49.5t-24 40t-0.5 44.5z" />
<glyph unicode="&#xe0a2;" d="M257 491.5q-4 18.5 1 41.5t26 44l652 652l-648 648q-21 21 -26.5 44t-1 42t23.5 45t33.5 42t42.5 44q29 29 44 43t42 33.5t45.5 23.5t41.5 -1t44 -26l649 -649l651 652q21 21 44 26.5t42 1t45 -23.5t42 -33.5t44 -42.5t43 -44t34 -42.5t23 -45t-1 -42t-26 -44.5 l-652 -651l655 -655q21 -21 26.5 -44t1 -42t-23.5 -45t-33.5 -42t-42.5 -44t-44 -43t-42.5 -34t-45 -23t-42 1t-44.5 26l-654 655l-652 -651q-21 -21 -44 -26.5t-42 -1t-45 23.5t-42 33.5t-44 42.5q-29 29 -43 44t-33.5 42t-23.5 45.5z" />
<glyph unicode="&#xe0a3;" d="M195 605.5q3 23.5 20 40.5l579 580l-579 579q-17 17 -20 40.5t10 51.5t27.5 51.5t42.5 55t43.5 48t41.5 42.5q25 25 42 41t48.5 43.5t55.5 42.5t52 28t51.5 10t40.5 -20l579 -579l579 579q17 17 40.5 20t51.5 -10t52 -28t55.5 -42.5t48.5 -43.5t42 -41t41 -42t43.5 -48 t42 -55t27.5 -52t10 -51.5t-20 -40.5l-579 -579l579 -580q17 -17 20 -40.5t-10 -51.5t-27.5 -52t-42 -55t-43.5 -48t-41 -42t-42 -41t-48.5 -43.5t-55.5 -42.5t-52 -28t-51.5 -10t-40.5 20l-579 579l-579 -579q-17 -17 -40.5 -20t-51.5 10t-52 28t-55.5 42.5t-48.5 43.5 t-42 41q-26 26 -41.5 42.5t-43.5 48t-42.5 55t-27.5 51.5t-10 51.5z" />
<glyph unicode="&#xe0a4;" d="M0 1075v307h320q49 290 257.5 498.5t497.5 257.5v320h307v-320q289 -49 498 -258t258 -498h320v-307h-320q-49 -289 -257.5 -497.5t-498.5 -257.5v-320h-307v320q-289 49 -497.5 257.5t-257.5 497.5h-320zM634 1075q42 -162 160.5 -280.5t280.5 -160.5v288h307v-288 q162 42 281 160.5t161 280.5h-288v307h288q-42 162 -161 281t-281 161v-288h-307v288q-162 -42 -280.5 -161t-160.5 -281h288v-307h-288z" />
<glyph unicode="&#xe0a5;" d="M0 58.5v43.5v2048v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h922h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-870h-307v256l-512 -410l512 -409v256h307v-871v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-922h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28z M1331 58.5v43.5v871h307v-256l512 409l-512 410v-256h-307v870v44t4.5 28t8 18.5t18.5 8t28 4.5h44h921q77 0 90 -13.5t13 -89.5v-2048v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-921h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5z" />
<glyph unicode="&#xe0a6;" d="M392 753h477q0 -36 13 -76t42 -80.5t70 -72.5t102 -52t132 -20q163 0 260.5 78.5t97.5 220.5q0 36 -8.5 67t-28 56t-39.5 45t-54 37.5t-60.5 30t-70 26t-71 21.5t-75 20.5t-71.5 19.5q-60 17 -101.5 30t-102 35t-104 43.5t-96.5 54t-90 67.5t-74.5 82.5t-60 101t-37 122 t-14.5 145.5q0 255 149 429t412 239v120v51t5 32t9 21.5t21.5 9t32 5.5h51.5h239h40t29 -2.5t22 -3.5t13.5 -9.5t9.5 -13.5t3.5 -22t2.5 -28.5v-39.5v-120q84 -10 170.5 -49.5t164 -106.5t136.5 -151t89.5 -191t22.5 -219h-478q-8 125 -95 212.5t-239 87.5q-141 0 -237 -73 t-96 -174q0 -41 17.5 -77t42 -63t67.5 -52t78 -41t90 -34t86.5 -26.5t84.5 -21.5q210 -52 341 -123q352 -191 352 -563q0 -132 -50 -256.5t-133 -218t-190.5 -159.5t-223.5 -90v-120v-39.5t-2.5 -28.5t-3.5 -22t-9.5 -13.5t-13.5 -9.5t-22 -3.5t-29 -2.5h-40h-239h-51.5 t-32 5.5t-21.5 9t-9 21.5t-5 32v51v120q-93 18 -177 54.5t-161.5 97.5t-134.5 140t-90.5 189t-33.5 238z" />
<glyph unicode="&#xe0a7;" d="M410 0v410q288 209 327 409h-225h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28v43.5v204v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h129q-43 93 -64 143.5t-43 138.5t-22 168q0 148 45 275.5t124 219t184.5 156.5t227.5 96.5t252 31.5q125 0 242 -32t219.5 -99t179 -162.5 t120.5 -231t44 -295.5h-409q0 207 -144 323q-117 94 -279 93q-160 0 -271 -93q-125 -104 -125 -282q0 -49 8.5 -96t27 -95.5t34 -83.5t42.5 -90.5t40 -84.5h564h44t28 -4.5t18.5 -8t8 -18.5t4.5 -28v-44v-204v-44t-4.5 -28t-8 -18.5t-18.5 -8t-28 -4.5h-44h-503 q-37 -185 -201 -409h1114h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-205v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-1638z" />
<glyph unicode="&#xe0a8;" d="M573 76.5q-12 76.5 0 153.5t41 77q471 0 471 430v82h-286q-29 0 -41 71.5t0 143.5t41 72h286v614q0 102 -24 178t-64.5 123.5t-102 77t-128.5 40.5t-152 11q-29 0 -41 77t0 154t41 77q207 0 362.5 -65.5t252.5 -185.5q97 120 252 185.5t362 65.5q29 0 41 -77t0 -154 t-41 -77q-85 0 -152 -11t-128.5 -40.5t-102 -77t-64.5 -123.5t-24 -178v-614h287q29 0 41 -72t0 -143.5t-41 -71.5h-287v-82q0 -430 471 -430q29 0 41 -76.5t0 -153.5t-41 -77q-207 0 -362.5 65t-251.5 185q-96 -120 -252 -185t-363 -65q-29 0 -41 76.5z" />
<glyph unicode="&#xe0a9;" d="M-205 1126v1024l717 -716h-410zM0 51q0 38 6.5 44.5t44.5 6.5t44.5 -6.5t6.5 -44.5t-6.5 -44.5t-44.5 -6.5t-44.5 6.5t-6.5 44.5zM0 256q0 38 6.5 44.5t44.5 6.5t44.5 -6.5t6.5 -44.5t-6.5 -44.5t-44.5 -6.5t-44.5 6.5t-6.5 44.5zM0 461q0 38 6.5 44.5t44.5 6.5 t44.5 -6.5t6.5 -44.5t-6.5 -44.5t-44.5 -6.5t-44.5 6.5t-6.5 44.5zM0 666q0 38 6.5 44.5t44.5 6.5t44.5 -6.5t6.5 -44.5t-6.5 -45t-44.5 -7t-44.5 7t-6.5 45zM0 870q0 38 6.5 45t44.5 7t44.5 -7t6.5 -45t-6.5 -44.5t-44.5 -6.5t-44.5 6.5t-6.5 44.5zM0 1075q0 38 6.5 44.5 t44.5 6.5t44.5 -6.5t6.5 -44.5t-6.5 -44.5t-44.5 -6.5t-44.5 6.5t-6.5 44.5zM0 2099q0 38 6.5 44.5t44.5 6.5t44.5 -6.5t6.5 -44.5t-6.5 -44.5t-44.5 -6.5t-44.5 6.5t-6.5 44.5zM205 51q0 38 6.5 44.5t44.5 6.5t44.5 -6.5t6.5 -44.5t-6.5 -44.5t-44.5 -6.5t-44.5 6.5 t-6.5 44.5zM205 2099q0 38 6.5 44.5t44.5 6.5t44.5 -6.5t6.5 -44.5t-6.5 -44.5t-44.5 -6.5t-44.5 6.5t-6.5 44.5zM410 51q0 38 6.5 44.5t44.5 6.5t44.5 -6.5t6.5 -44.5t-6.5 -44.5t-44.5 -6.5t-44.5 6.5t-6.5 44.5zM410 2099q0 38 6.5 44.5t44.5 6.5t44.5 -6.5t6.5 -44.5 t-6.5 -44.5t-44.5 -6.5t-44.5 6.5t-6.5 44.5zM614 51q0 38 7 44.5t45 6.5t44.5 -6.5t6.5 -44.5t-6.5 -44.5t-44.5 -6.5t-45 6.5t-7 44.5zM614 2099q0 38 7 44.5t45 6.5t44.5 -6.5t6.5 -44.5t-6.5 -44.5t-44.5 -6.5t-45 6.5t-7 44.5zM819 51q0 38 6.5 44.5t44.5 6.5t45 -6.5 t7 -44.5t-7 -44.5t-45 -6.5t-44.5 6.5t-6.5 44.5zM819 2099q0 38 6.5 44.5t44.5 6.5t45 -6.5t7 -44.5t-7 -44.5t-45 -6.5t-44.5 6.5t-6.5 44.5zM922 205v102q56 0 106 17.5t92.5 53t71 96.5t35.5 140h-203v103h205v665q0 92 -26 163.5t-70 113t-97.5 62t-113.5 20.5v102 q124 0 216.5 -60.5t142.5 -165.5q52 105 144.5 165.5t212.5 60.5v-102q-60 0 -113.5 -20.5t-97.5 -62t-70 -113t-26 -163.5v-665h205v-103h-203q7 -79 35.5 -140t71 -96.5t92.5 -53t106 -17.5v-102q-123 0 -215.5 59.5t-142.5 163.5q-50 -104 -142.5 -163.5t-215.5 -59.5z M1024 51q0 38 6.5 44.5t44.5 6.5t44.5 -6.5t6.5 -44.5t-6.5 -44.5t-44.5 -6.5t-44.5 6.5t-6.5 44.5zM1024 2099q0 38 6.5 44.5t44.5 6.5t44.5 -6.5t6.5 -44.5t-6.5 -44.5t-44.5 -6.5t-44.5 6.5t-6.5 44.5zM1229 51q0 38 6.5 44.5t44.5 6.5t44.5 -6.5t6.5 -44.5t-6.5 -44.5 t-44.5 -6.5t-44.5 6.5t-6.5 44.5zM1229 2099q0 38 6.5 44.5t44.5 6.5t44.5 -6.5t6.5 -44.5t-6.5 -44.5t-44.5 -6.5t-44.5 6.5t-6.5 44.5zM1434 51q0 38 6.5 44.5t44.5 6.5t44.5 -6.5t6.5 -44.5t-6.5 -44.5t-44.5 -6.5t-44.5 6.5t-6.5 44.5zM1434 2099q0 38 6.5 44.5 t44.5 6.5t44.5 -6.5t6.5 -44.5t-6.5 -44.5t-44.5 -6.5t-44.5 6.5t-6.5 44.5zM1638 51q0 38 7 44.5t45 6.5t44.5 -6.5t6.5 -44.5t-6.5 -44.5t-44.5 -6.5t-45 6.5t-7 44.5zM1638 2099q0 38 7 44.5t45 6.5t44.5 -6.5t6.5 -44.5t-6.5 -44.5t-44.5 -6.5t-45 6.5t-7 44.5zM1843 51 q0 38 6.5 44.5t44.5 6.5t45 -6.5t7 -44.5t-7 -44.5t-45 -6.5t-44.5 6.5t-6.5 44.5zM1843 2099q0 38 6.5 44.5t44.5 6.5t45 -6.5t7 -44.5t-7 -44.5t-45 -6.5t-44.5 6.5t-6.5 44.5zM2048 51q0 38 6.5 44.5t44.5 6.5t44.5 -6.5t6.5 -44.5t-6.5 -44.5t-44.5 -6.5t-44.5 6.5 t-6.5 44.5zM2048 256q0 38 6.5 44.5t44.5 6.5t44.5 -6.5t6.5 -44.5t-6.5 -44.5t-44.5 -6.5t-44.5 6.5t-6.5 44.5zM2048 461q0 38 6.5 44.5t44.5 6.5t44.5 -6.5t6.5 -44.5t-6.5 -44.5t-44.5 -6.5t-44.5 6.5t-6.5 44.5zM2048 666q0 38 6.5 44.5t44.5 6.5t44.5 -6.5t6.5 -44.5 t-6.5 -45t-44.5 -7t-44.5 7t-6.5 45zM2048 870q0 38 6.5 45t44.5 7t44.5 -7t6.5 -45t-6.5 -44.5t-44.5 -6.5t-44.5 6.5t-6.5 44.5zM2048 1075q0 38 6.5 44.5t44.5 6.5t44.5 -6.5t6.5 -44.5t-6.5 -44.5t-44.5 -6.5t-44.5 6.5t-6.5 44.5zM2048 1280q0 38 6.5 44.5t44.5 6.5 t44.5 -6.5t6.5 -44.5t-6.5 -44.5t-44.5 -6.5t-44.5 6.5t-6.5 44.5zM2048 1485q0 38 6.5 44.5t44.5 6.5t44.5 -6.5t6.5 -44.5t-6.5 -44.5t-44.5 -6.5t-44.5 6.5t-6.5 44.5zM2048 1690q0 38 6.5 44.5t44.5 6.5t44.5 -6.5t6.5 -44.5t-6.5 -45t-44.5 -7t-44.5 7t-6.5 45z M2048 1894q0 38 6.5 45t44.5 7t44.5 -7t6.5 -45t-6.5 -44.5t-44.5 -6.5t-44.5 6.5t-6.5 44.5zM2048 2099q0 38 6.5 44.5t44.5 6.5t44.5 -6.5t6.5 -44.5t-6.5 -44.5t-44.5 -6.5t-44.5 6.5t-6.5 44.5z" />
<glyph unicode="&#xe0aa;" d="M799 492h327v122q0 137 55 267.5t149 229.5t228.5 159.5t284.5 60.5h123v328l492 -430l-492 -430v327h-123q-160 0 -277.5 -68.5t-176 -183.5t-58.5 -260v-122h328l-430 -492z" />
<glyph unicode="&#xe0ab;" d="M461 1843v512q0 77 6.5 90t44.5 13t44.5 -13t6.5 -90v-614q0 -24 25.5 -34t51.5 0t26 34v614q0 77 6.5 90t44.5 13t44.5 -13t6.5 -90v-614q0 -24 25.5 -34t51 0t25.5 34v614q0 36 1 50.5t2.5 29t8.5 17.5t14.5 4.5t25.5 1.5q38 0 44.5 -13t6.5 -90v-614q0 -24 25.5 -34 t51 0t25.5 34v614q0 77 6.5 90t44.5 13q18 0 25.5 -1.5t14.5 -4.5t8.5 -17.5t2.5 -29t1 -50.5v-512q0 -120 -15 -210t-38 -139t-49.5 -98.5t-49.5 -90.5t-38 -113.5t-15 -167.5v-922v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-102h-43.5t-28 4.5t-18.5 7.5 t-7.5 18.5t-4.5 28v43.5v922q0 95 -15 167.5t-38 113.5t-49.5 90.5t-49.5 98.5t-38 139t-15 210zM1434 58.5v43.5v2253v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5q78 0 151 -48t131 -136.5t93 -227t35 -305.5v-717h-205v-922v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5 h-102h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28z" />
<glyph unicode="&#xe0ac;" d="M0 1229q0 200 62 388t175.5 339t264.5 264.5t339 175.5t388 62t388 -62t339 -175.5t264.5 -264.5t175.5 -339t62 -388t-62 -388t-175.5 -339t-264.5 -264.5t-339 -175.5t-388 -62t-388 62t-339 175.5t-264.5 264.5t-175.5 339t-62 388zM205 1229q0 -209 81 -398.5 t218 -326.5t326.5 -218t398.5 -81t398.5 81t326.5 218t218 326.5t81 398.5t-81 398.5t-218 326.5t-326.5 218t-398.5 81t-398.5 -81t-326.5 -218t-218 -326.5t-81 -398.5zM543 1331q0 48 37.5 85.5t85.5 37.5t85 -37.5t37 -85.5t-37 -85.5t-85 -37.5t-85.5 37.5t-37.5 85.5z M850 1741q0 48 37.5 85.5t85.5 37.5t85.5 -37.5t37.5 -85.5t-37.5 -85.5t-85.5 -37.5t-85.5 37.5t-37.5 85.5zM1024 1229q0 46 24.5 122t87.5 234t93 238q29 -79 73.5 -191.5t69 -174.5t43.5 -127t19 -101q0 -77 -64 -141t-141 -64t-141 64t-64 141zM1362 1741 q0 48 37.5 85.5t85.5 37.5t85.5 -37.5t37.5 -85.5t-37.5 -85.5t-85.5 -37.5t-85.5 37.5t-37.5 85.5zM1669 1331q0 48 37.5 85.5t85.5 37.5t85.5 -37.5t37.5 -85.5t-37.5 -85.5t-85.5 -37.5t-85.5 37.5t-37.5 85.5z" />
<glyph unicode="&#xe0ad;" d="M0 570.5v43.5v1741v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h2253q77 0 90 -13t13 -90v-1741v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-2253h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM205 922h2048v1331h-2048v-1331zM717 0q0 28 31.5 61.5t77 69t90.5 75.5 t76.5 93.5t31.5 110.5h410q0 -57 31.5 -110.5t76.5 -93.5t90.5 -75.5t77 -69t31.5 -61.5h-1024z" />
<glyph unicode="&#xe0ae;" d="M614 263.5v43.5v1843q0 76 13 89.5t90 13.5h1024h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-1843q0 -77 -12.5 -89.5t-89.5 -12.5h-1024h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5zM819 614h819v1332h-819v-1332zM1126 410q0 -38 32.5 -70.5t70.5 -32.5t70 32.5 t32 70.5t-32 70t-70 32t-70.5 -32t-32.5 -70z" />
<glyph unicode="&#xe0af;" d="M0 1082.5v43.5v205v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h512v307l564 -512l-564 -512v307h-512h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM819 263.5v43.5v359l205 204v-256h819v1332h-819v-359l-205 205v358v44t4.5 28t8 18.5t18.5 8t28 4.5h44h1024h43.5 t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-1843v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-1024h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5zM1331 410q0 -38 32.5 -70.5t70.5 -32.5t70 32.5t32 70.5t-32 70t-70 32t-70.5 -32t-32.5 -70z" />
<glyph unicode="&#xe0b0;" d="M-205 263.5v43.5v1843v44t4.5 28t8 18.5t18.5 8t28 4.5h44h1024h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-512h-205v308h-819v-1332h819v205h205v-512v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-1024h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5zM512 410 q0 -38 32 -70.5t70 -32.5t70.5 32.5t32.5 70.5t-32.5 70t-70.5 32t-70 -32t-32 -70zM614 1082.5v43.5v205q0 77 13 90t90 13h512v307l563 -512l-563 -512v307h-512h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5zM1434 263.5v43.5v359l204 204v-256h820v1332h-820v-359l-204 205 v358v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h1024h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-1843v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-1024h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM1946 410q0 -38 32 -70.5t70 -32.5t70 32.5t32 70.5t-32 70 t-70 32t-70 -32t-32 -70z" />
<glyph unicode="&#xe0b1;" d="M410 263.5v43.5v1843v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h1024h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-512h-204v308h-820v-1332h820v205h204v-512v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-1024h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28z M922 410q0 -38 32 -70.5t70 -32.5t70 32.5t32 70.5t-32 70t-70 32t-70 -32t-32 -70zM1229 1082.5v43.5v205v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h512v307l563 -512l-563 -512v307h-512h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28z" />
<glyph unicode="&#xe0b2;" d="M614 263.5v43.5v1843q0 76 13 89.5t90 13.5h1024h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-1843q0 -77 -12.5 -89.5t-89.5 -12.5h-1024h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5zM819 768q0 -170 120.5 -290t289.5 -120t289 120t120 290t-120 290t-289 120 t-289.5 -120t-120.5 -290zM819 1331h819v717h-819v-717zM1024 768q0 85 60 145t145 60t145 -60t60 -145t-60 -145t-145 -60t-145 60t-60 145z" />
<glyph unicode="&#xe0b3;" d="M-256 205l256 563v1382v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h2253q77 0 90 -13.5t13 -89.5v-1382l256 -563q0 -153 -13 -179t-90 -26h-2765q-76 0 -89 25.5t-13 179.5zM205 819h2048v1229h-2048v-1229zM819 205h819l-51 205h-717z" />
<glyph unicode="&#xe0b4;" d="M410 58.5v43.5v2253v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h1434h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-2253v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-1434h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM614 410h1229v1638h-1229v-1638z M1126 205q0 -38 32.5 -70.5t70.5 -32.5t70 32.5t32 70.5t-32 70t-70 32t-70.5 -32t-32.5 -70z" />
<glyph unicode="&#xe0b5;" d="M0 1229l492 430v-328h348q62 0 72 -7.5t10 -53.5v-82q0 -46 -10.5 -54t-71.5 -8h-348v-327zM799 492h327v1474h-327l430 492l430 -492h-328v-1474h328l-430 -492zM1516 1188v82q0 46 10 53.5t71 7.5h369v328l492 -430l-492 -430v327h-369q-61 0 -71 8t-10 54z" />
<glyph unicode="&#xe0b6;" d="M0 1229l12 10l-12 10l492 430v-327h122q160 0 277.5 68.5t176 183.5t58.5 260v102h-327l18 21h-18l430 491l430 -491h-18l18 -21h-328v-123q0 -145 58.5 -260t176 -183.5t277.5 -68.5h123v328l492 -430l-492 -430v327h-123q-160 0 -277.5 -68.5t-176 -183.5t-58.5 -260 v-122h328l-430 -492l-430 492h327v122q0 145 -58.5 260t-176 183.5t-277.5 68.5h-122v-327zM962 1239q167 -95 267 -262q95 158 249 252q-161 99 -255 262q-99 -160 -261 -252z" />
<glyph unicode="&#xe0b7;" d="M0 1229l492 430v-328h245q51 0 79.5 -32t28.5 -70.5t-28.5 -70.5t-79.5 -32h-245v-327zM799 492h327v266q0 51 32 79.5t70.5 28.5t70.5 -28.5t32 -79.5v-266h328l-430 -492zM799 1966l430 492l430 -492h-328v-266q0 -51 -32 -79.5t-70.5 -28.5t-70.5 28.5t-32 79.5v266 h-327zM1592 1228.5q0 38.5 28.5 70.5t79.5 32h266v328l492 -430l-492 -430v327h-266q-51 0 -79.5 32t-28.5 70.5z" />
<glyph unicode="&#xe0b8;" d="M205 468.5v43.5v1434v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h205v307v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5q76 0 89.5 -13t13.5 -90v-307h205h43.5t28 -4.5t18.5 -7.5t7.5 -18.5t4.5 -28v-43.5v-1434v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-205 v-308v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28v43.5v308h-205h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM1434 673.5v43.5v1024v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h205v512v43.5t4.5 28t8 19t18.5 8 t27.5 4.5h43.5q77 0 90 -13t13 -90v-512h204h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-1024q0 -77 -13.5 -90t-89.5 -13h-204v-512v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28v43.5v512h-205h-43.5t-27.5 4.5 t-18.5 8t-8 19t-4.5 28z" />
<glyph unicode="&#xe0b9;" d="M0 570.5v43.5v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h308v205v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h1434h43.5t28 -4.5t18.5 -7.5t7.5 -18.5t4.5 -28v-43.5v-205h307q77 0 90 -13.5t13 -89.5v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-307v-205v-43.5 t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-1434h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28v43.5v205h-308h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM0 1799.5v43.5v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h512v204q0 76 13 89.5t90 13.5h1024h43.5t27.5 -4.5 t18.5 -8t8 -19t4.5 -28v-43.5v-204h512q77 0 90 -13t13 -90v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-512v-205v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-1024h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5v43.5v205h-512h-43.5t-28 4.5t-18.5 7.5 t-7.5 18.5t-4.5 28z" />
<glyph unicode="&#xe0ba;" d="M0 263.5v43.5v819v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h103h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-614h1843v614q0 76 13 89.5t90 13.5h102q77 0 90 -13.5t13 -89.5v-819v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-2253h-43.5t-28 4.5t-18.5 7.5 t-7.5 18.5t-4.5 28zM614 1434h410v716v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h205q77 0 90 -13.5t13 -89.5v-716h409l-614 -666z" />
<glyph unicode="&#xe0bb;" d="M0 58.5v43.5v1434v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h410v-204h-307v-1229h1229v307h204v-410v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-1434h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM614 717v1433q0 76 13 89.5t90 13.5h1433h44t28 -4.5 t18.5 -8t8 -18.5t4.5 -28v-44v-1433q0 -77 -13.5 -90t-89.5 -13h-1433q-77 0 -90 13t-13 90z" />
<glyph unicode="&#xe0bc;" d="M0 673.5v43.5v1433v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h1434h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-1433v-43.5t-4.5 -28t-8 -19t-18.5 -8t-27.5 -4.5h-43.5h-1434h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28zM205 819h1229v1229h-1229v-1229zM614 58.5v43.5 v410h1127v1126h409h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-1434v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-1433h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5z" />
<glyph unicode="&#xe0bd;" d="M205 307v205v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h1843h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-205v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-1843q-77 0 -89.5 12.5t-12.5 89.5zM717 1229h307v912v47.5t4.5 30.5t7.5 20.5t18.5 8.5t28 5h43.5 h205h34t24.5 -2t19 -3.5t12 -9t8.5 -12.5t3 -20.5t2 -27v-37.5v-912h307l-512 -553z" />
<glyph unicode="&#xe0be;" d="M205 307v1843v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h205h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-1843v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-205q-77 0 -89.5 12.5t-12.5 89.5zM676 1229l553 512v-307h912h37.5t27 -2t20.5 -3t12.5 -8.5t9 -12 t3.5 -19t2 -24.5v-34v-205v-43.5t-5 -28t-8.5 -18.5t-20.5 -7.5t-30.5 -4.5h-47.5h-912v-307z" />
<glyph unicode="&#xe0bf;" d="M205 1092v34v205v43.5t4.5 27.5t8.5 19t20 8t30 5h48h913v307l553 -512l-553 -512v307h-913h-37t-27 2t-20.5 3t-12.5 8.5t-9 11t-3 19t-2 24.5zM1843 263.5v43.5v1843v44t4.5 28t8 18.5t18.5 8t28 4.5h44h204h44t28 -4.5t18.5 -8t8 -18.5t4.5 -28v-44v-1843v-43.5 t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-204h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5z" />
<glyph unicode="&#xe0c0;" d="M205 1902.5v43.5v204v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h1843h44t28 -4.5t18.5 -8t8 -18.5t4.5 -28v-44v-204v-44t-4.5 -28t-8 -18.5t-18.5 -8t-28 -4.5h-44h-1843h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28zM717 1229l512 553l512 -553h-307v-913v-48t-5 -30t-8 -20 t-19 -8.5t-27.5 -4.5h-43.5h-205h-34t-24.5 2t-19 3t-11 9t-8.5 12.5t-3 20.5t-2 27v37v913h-307z" />
<glyph unicode="&#xe0c1;" d="M0 1229q0 127 90 217t217 90t217 -90t90 -217t-90 -217t-217 -90t-217 90t-90 217zM922 1229q0 127 90 217t217 90t217 -90t90 -217t-90 -217t-217 -90t-217 90t-90 217zM1843 1229q0 127 89.5 217t217.5 90t218 -90t90 -217t-90 -217t-218 -90t-217.5 90t-89.5 217z" />
<glyph unicode="&#xe0c2;" d="M922 307q0 127 90 217t217 90t217 -90t90 -217t-90 -217t-217 -90t-217 90t-90 217zM922 1229q0 127 90 217t217 90t217 -90t90 -217t-90 -217t-217 -90t-217 90t-90 217zM922 2150q0 128 90 218t217 90t217 -90t90 -218t-90 -217.5t-217 -89.5t-217 89.5t-90 217.5z" />
<glyph unicode="&#xe0c3;" d="M-676 1229l1168 1229q25 25 67.5 22.5t88.5 -28.5t95 -65t87.5 -87t65 -95.5t28 -88.5t-22.5 -68l-758 -819l758 -819q25 -25 22.5 -67.5t-28 -89t-65 -95.5t-87 -87t-95 -65t-88.5 -28.5t-68 22.5zM1574.5 352.5q0.5 35.5 22.5 57.5l758 819l-758 819q-29 29 -20.5 81.5 t45 107t88.5 109t109 88.5t106.5 45t81.5 -21l1167 -1229l-1167 -1229q-22 -22 -57.5 -22.5t-75.5 17.5t-83 48.5t-81.5 69t-69 81.5t-48.5 83t-17.5 75.5z" />
<glyph unicode="&#xe0c4;" d="M-307 1229l737 778q23 23 65 11.5t82 -46t75.5 -78.5t47 -86t-3.5 -67l-491 -512l491 -512q17 -23 3.5 -67t-47 -86t-76 -78.5t-81.5 -46t-65 11.5zM818 509q1 1 1 3l430 1475q9 39 110.5 44.5t194.5 -20.5t84 -65l-430 -1475q-10 -51 -126 -53q-110 -3 -200 33 q-67 26 -64 58zM1757.5 650q-11.5 42 3.5 67l492 512l-492 512q-17 23 -3.5 67t47.5 86t76 78.5t81.5 46t65.5 -11.5l737 -778l-737 -778q-23 -23 -65 -11.5t-82 46t-76 78.5t-47.5 86z" />
<glyph unicode="&#xe0c5;" d="M0 1229q0 200 62 388t175.5 339t264.5 264.5t339 175.5t388 62t388 -62t339 -175.5t264.5 -264.5t175.5 -339t62 -388t-62 -388t-175.5 -339t-264.5 -264.5t-339 -175.5t-388 -62t-388 62t-339 175.5t-264.5 264.5t-175.5 339t-62 388zM563 1024q19 -121 82.5 -218 t154 -157t202.5 -92.5t226.5 -32.5t226.5 32.5t202.5 92.5t154 157t82.5 218h-1331zM614 1485h410q0 41 -11 83.5t-33.5 82.5t-64 65t-96.5 25t-96.5 -25t-64 -65t-33.5 -82.5t-11 -83.5zM1434 1485h409q0 41 -11 83.5t-33.5 82.5t-64 65t-96.5 25t-96.5 -25t-64 -65 t-33 -82t-10.5 -84z" />
<glyph unicode="&#xe0c6;" d="M0 1229q0 200 62 388t175.5 339t264.5 264.5t339 175.5t388 62t388 -62t339 -175.5t264.5 -264.5t175.5 -339t62 -388t-62 -388t-175.5 -339t-264.5 -264.5t-339 -175.5t-388 -62t-388 62t-339 175.5t-264.5 264.5t-175.5 339t-62 388zM614 717h1229v307h-1229v-307z M666 1587q0 -153 153 -153q154 0 154 153q0 154 -154 154q-153 0 -153 -154zM1485 1587q0 -153 153 -153q154 0 154 153q0 154 -154 154q-153 0 -153 -154z" />
<glyph unicode="&#xe0c7;" />
<glyph unicode="&#xe0c8;" />
<glyph unicode="&#xe0c9;" d="M0 1229q0 200 62 388t175.5 339t264.5 264.5t339 175.5t388 62t388 -62t339 -175.5t264.5 -264.5t175.5 -339t62 -388t-62 -388t-175.5 -339t-264.5 -264.5t-339 -175.5t-388 -62t-388 62t-339 175.5t-264.5 264.5t-175.5 339t-62 388zM563 1126q0 -134 47 -247 t132 -194.5t210.5 -127t276.5 -45.5q201 0 353 79t232 217.5t80 317.5h-1331zM666 1587q0 -153 153 -153q154 0 154 153q0 154 -154 154q-153 0 -153 -154zM1485 1587q0 -153 153 -153q154 0 154 153q0 154 -154 154q-153 0 -153 -154z" />
<glyph unicode="&#xe0ca;" d="M-205 1106q0 -151 52.5 -295t146 -265t227 -223t291 -173t341.5 -110.5t376 -39.5q224 0 439.5 55.5t393 157.5t313.5 237.5t211.5 305.5t75.5 350q-659 -287 -1433 -287q-775 0 -1434 287zM102 1843h758q0 697 -389 697q-71 0 -127 -23t-96 -67t-69 -104t-45.5 -140.5 t-24 -168.5t-7.5 -194zM1597 1843h758q0 162 -17.5 283.5t-58.5 217.5t-114 146t-178 50q-390 0 -390 -697z" />
<glyph unicode="&#xe0cb;" d="M0 1229q0 200 62 388t175.5 339t264.5 264.5t339 175.5t388 62t388 -62t339 -175.5t264.5 -264.5t175.5 -339t62 -388t-62 -388t-175.5 -339t-264.5 -264.5t-339 -175.5t-388 -62t-388 62t-339 175.5t-264.5 264.5t-175.5 339t-62 388zM563 768l154 -102q204 204 512 204 t512 -204l153 102q-21 41 -77 91.5t-139 100t-203 82.5t-246 33t-246 -33t-203.5 -82.5t-139.5 -100t-77 -91.5zM666 1587q0 -153 153 -153q154 0 154 153q0 154 -154 154q-153 0 -153 -154zM1485 1587q0 -153 153 -153q154 0 154 153q0 154 -154 154q-153 0 -153 -154z" />
<glyph unicode="&#xe0cc;" d="M0 1229q0 200 62 388t175.5 339t264.5 264.5t339 175.5t388 62t388 -62t339 -175.5t264.5 -264.5t175.5 -339t62 -388t-62 -388t-175.5 -339t-264.5 -264.5t-339 -175.5t-388 -62t-388 62t-339 175.5t-264.5 264.5t-175.5 339t-62 388zM563 922q16 -48 54 -102t100 -109 t137 -99t173.5 -72t201.5 -28t201.5 28t173.5 72t136.5 99t99.5 109t54 102l-153 102q-203 -307 -512 -307t-512 307zM666 1587q0 -153 153 -153q154 0 154 153q0 154 -154 154q-153 0 -153 -154zM1485 1587q0 -153 153 -153q154 0 154 153q0 154 -154 154q-153 0 -153 -154 z" />
<glyph unicode="&#xe0cd;" d="M0 1229q0 200 62 388t175.5 339t264.5 264.5t339 175.5t388 62t388 -62t339 -175.5t264.5 -264.5t175.5 -339t62 -388t-62 -388t-175.5 -339t-264.5 -264.5t-339 -175.5t-388 -62t-388 62t-339 175.5t-264.5 264.5t-175.5 339t-62 388zM563 922q21 -41 77 -91.5 t139.5 -100t203.5 -83t246 -33.5q0 -83 18 -149t66 -112t121 -46q110 0 157 102.5t46 299.5q97 47 165.5 106.5t91.5 106.5l-153 102q-125 -125 -318.5 -170.5t-387 0t-318.5 170.5zM666 1587q0 -153 153 -153q154 0 154 153q0 154 -154 154q-153 0 -153 -154zM1485 1587 q0 -153 153 -153q154 0 154 153q0 154 -154 154q-153 0 -153 -154z" />
<glyph unicode="&#xe0ce;" d="M232 1331q0 55 39.5 95.5t94.5 40.5h236q33 35 82 162t84 266q11 44 47.5 71t81.5 27h584q82 0 164.5 -63t172.5 -195q20 -30 40.5 -62.5t35.5 -58t26.5 -46.5t18.5 -34l7 -14q25 -50 7.5 -102t-67.5 -77q-49 -25 -101 -8t-77 66q-57 115 -127.5 213t-107.5 110h-156 l359 -593q4 -7 7 -14l6 -15v-3q1 -2 2 -6.5t1 -6.5v-4q1 -4 1 -12q0 -1 -2 -5v-393h401q55 0 94 -40t39 -96q0 -55 -39 -95t-94 -40h-531q-56 0 -98.5 39t-42.5 93v394h-79q-98 -77 -188.5 -158t-131.5 -125v-509q0 -55 -36.5 -94t-90.5 -39t-91 39t-37 94v532 q0 21 2.5 35.5t21 52.5t53 79.5t106.5 110.5t174 152l-221 365q-114 -264 -271 -264h-265q-55 0 -94.5 40t-39.5 95zM527 2250q0 86 61 147t147 61t146.5 -61t60.5 -147t-61 -146.5t-146 -60.5q-86 0 -147 61t-61 146z" />
<glyph unicode="&#xe0cf;" d="M-102 1229q57 113 112 208t131.5 203.5t155.5 194t182.5 167t214 136t248.5 87t287 32.5q123 0 268 -27l47 228h359l-512 -2458h-359l45 215q-163 23 -316.5 91.5t-277 165t-235.5 223t-196 257.5t-154 277zM571 1229q0 -163 78 -306.5t211.5 -235t292.5 -109.5l86 411 h-8q-100 0 -171 71t-71 169t71 168.5t169 70.5q51 0 104 -24l86 414q-92 28 -188 28q-132 0 -254.5 -52.5t-211 -141t-141.5 -210t-53 -253.5zM1753 332l328 1573q284 -262 479 -676q-62 -132 -139 -254.5t-176.5 -242.5t-225.5 -223.5t-266 -176.5z" />
<glyph unicode="&#xe0d0;" d="M-102 1229q50 105 109 204t136 203t162.5 192.5t190.5 168t217 135.5t244.5 88.5t271.5 32.5t271.5 -32.5t244.5 -88.5t217 -135.5t190.5 -168t162.5 -192.5t136 -203t109 -204q-50 -105 -109 -203.5t-136 -202.5t-162.5 -192.5t-190.5 -168.5t-217 -136t-244.5 -88.5 t-271.5 -32.5t-271.5 32.5t-244.5 88.5t-217 136t-190.5 168.5t-162.5 192.5t-136 202.5t-109 203.5zM614 1229q0 -124 49 -237.5t132 -196.5t196.5 -132t237.5 -49q165 0 306.5 83t224.5 225t83 307t-83 306.5t-224.5 224.5t-306.5 83t-307 -83t-225 -224.5t-83 -306.5z M922 1229q0 115 96 211t211 96t211 -96t96 -211t-96 -211t-211 -96t-211 96t-96 211z" />
<glyph unicode="&#xe0d1;" d="M-138 184.5q-23 37.5 27 87.5q286 83 546 236q-70 157 63 463q91 47 218 133.5t283.5 213.5t309 270t302 317t255.5 340l590 213v-516q-90 -250 -241.5 -489t-318 -420t-350 -333t-340.5 -247.5t-286 -145.5q-298 6 -420 112q-85 -66 -236.5 -145.5t-302.5 -128.5 q-76 2 -99 39.5zM520 485q95 48 222 129t281 196t313 248t321 292.5t301 321.5t256.5 342.5t185.5 348.5q-79 -156 -206.5 -328.5t-265.5 -324.5t-311 -316.5t-316.5 -289t-310.5 -258.5t-264.5 -208t-205.5 -153z" />
<glyph unicode="&#xe0d2;" d="M102 0q0 13 0.5 36.5t6.5 91t15.5 129.5t30.5 140t50 135l573 308q100 51 129 122q-81 31 -153.5 76t-118 87t-80 80.5t-49.5 61.5l-14 23q4 5 11 15.5t24.5 53t31 95t24.5 146t11 202.5q0 99 26 194t79.5 178.5t128 147t178.5 100t223 36.5q192 0 336.5 -82.5 t221.5 -231t77 -342.5q0 -109 10.5 -202t25.5 -147.5t30 -93.5t26 -54l10 -15q-5 -9 -15 -25.5t-46.5 -62t-80 -86t-116.5 -87t-154 -76.5q33 -67 125 -113l574 -308q45 -91 70.5 -224t28.5 -220l3 -88h-205q-3 45 -7.5 101.5t-6 82.5t-4.5 60.5t-5 50.5l-4.5 36t-6 32.5 t-7.5 25.5l-163 82v-471h-1434v462l-154 -83q-17 -51 -27 -121.5t-24 -257.5h-205zM717 415q257 41 512 -164q255 205 512 164v158l-41 21q-59 32 -91.5 50.5t-77.5 46t-70 48.5t-52.5 48.5t-43 56t-24.5 61.5q-39 -4 -92 -4q-64 0 -131 8q-10 -39 -33.5 -75t-50.5 -63 t-77.5 -60.5t-88.5 -55.5t-110 -61l-41 -22v-157zM799 1802q0 -122 33 -240.5t89 -210t137 -148t171 -56.5q112 0 196 50t134.5 140t75 206.5t24.5 258.5q0 63 -11 121q-62 -5 -100 -6.5t-93.5 0t-95 10t-92 25.5t-97 44.5t-97.5 69t-106 97.5q-79 -64 -123.5 -160.5 t-44.5 -200.5zM860 1743q40 65 95 89t103 2t68 -83q0 -47 -28.5 -79t-73.5 -32q-41 0 -74.5 23.5t-89.5 79.5zM1331 1751q20 61 68 83t103 -2t95 -89q-39 -39 -57.5 -55.5t-47.5 -32t-58 -15.5q-45 0 -74 32t-29 79z" />
<glyph unicode="&#xe0d3;" d="M102 0q0 13 0.5 36.5t6.5 91t15.5 129.5t30.5 140t50 135l573 308q117 59 138 148q-271 98 -443 336t-172 531q0 150 47 290.5t133 254t200 199t255.5 132t292.5 46.5t292.5 -46.5t255.5 -132t200 -199t133 -254t47 -290.5q0 -295 -171.5 -533t-443.5 -335 q23 -91 137 -147l574 -308q45 -91 70.5 -224t28.5 -220l3 -88h-205q-3 45 -7.5 101.5t-6 82.5t-4.5 60.5t-5 50.5l-4.5 36t-6 32.5t-7.5 25.5l-163 82v-471h-1434v465l-143 -76q-14 -43 -21.5 -70.5t-19.5 -111.5t-21 -207h-205zM717 415q257 41 512 -164q255 205 512 164 v158l-41 21q-55 30 -85.5 47t-73.5 43.5t-66.5 45t-52 44.5t-44 49.5t-28 53.5t-16.5 62q-53 -6 -105 -6q-53 0 -106 6q-9 -50 -38 -95t-82.5 -89t-106.5 -78t-138 -83l-41 -22v-157zM799 1781q0 -149 37.5 -272.5t99.5 -201t138 -120t155 -42.5t154.5 42t137.5 119.5 t100 201t38 273.5q0 23 -1 36.5t-9 39t-23.5 41.5t-47 36.5t-76 32t-114.5 20t-159 8.5t-159 -7.5t-114.5 -18.5t-76 -30.5t-47 -35t-23.5 -41.5t-9 -40.5t-1 -40.5zM860 1743q40 65 95 89t103 2t68 -83q0 -47 -28.5 -79t-73.5 -32q-41 0 -74.5 23.5t-89.5 79.5zM1331 1751 q20 61 68 83t103 -2t95 -89q-39 -39 -57.5 -55.5t-47.5 -32t-58 -15.5q-45 0 -74 32t-29 79z" />
<glyph unicode="&#xe0d4;" d="M102 0q0 13 0.5 36.5t6.5 91t15.5 129.5t30.5 140t50 135l573 308q80 40 110 86.5t34 102.5q-99 79 -170 208t-104.5 273t-33.5 292q0 149 55 285t160 228q-1 8 -1 26q0 169 120 289.5t290 120.5q169 0 289 -120t120 -290q0 -22 -1 -33q96 -87 146.5 -216.5t50.5 -289.5 q0 -169 -28.5 -315.5t-99 -276t-177.5 -201.5q7 -50 38 -91.5t103 -77.5l574 -308q45 -91 70.5 -224t28.5 -220l3 -88h-205q-3 45 -7.5 101.5t-6 82.5t-4.5 60.5t-5 50.5l-4.5 36t-6 32.5t-7.5 25.5l-163 82v-471h-1434v465l-143 -76q-14 -43 -21.5 -70.5t-19.5 -111.5 t-21 -207h-205zM717 415q257 41 512 -164q255 205 512 164v158l-41 21q-74 40 -115 63.5t-92 58.5t-78 64t-49.5 68t-29.5 82q-45 -8 -107 -8q-55 0 -108 11q-10 -49 -39.5 -93.5t-82.5 -87t-105.5 -76.5t-135.5 -82l-41 -22v-157zM799 1781q0 -149 37.5 -272.5t99.5 -201 t138 -120t155 -42.5t154.5 42t137.5 119.5t100 201t38 273.5q0 23 -1 36t-9 38.5t-23 41.5t-47 36.5t-76 32.5t-114.5 20.5t-159.5 8.5t-159 -7.5t-114.5 -18.5t-76 -30.5t-47 -35t-23.5 -41.5t-9 -40.5t-1 -40.5zM860 1743q40 65 95 89t103 2t68 -83q0 -47 -28.5 -79 t-73.5 -32q-41 0 -74.5 23.5t-89.5 79.5zM1331 1751q20 61 68 83t103 -2t95 -89q-39 -39 -57.5 -55.5t-47.5 -32t-58 -15.5q-45 0 -74 32t-29 79z" />
<glyph unicode="&#xe0d5;" d="M102 0q0 13 0.5 36.5t6.5 91t15.5 129.5t30.5 140t50 135l573 308q78 39 109 85t35 101q-152 114 -241 332q-60 -107 -106 -208q-49 170 -65.5 332.5t0 308t70.5 267t140 210.5t214.5 139t288.5 51h6h1q165 0 290.5 -45.5t207.5 -128t132 -203.5t67.5 -264t8.5 -318 l-88 82q-28 -191 -105 -341t-205 -233q15 -104 141 -167l574 -308q45 -91 70.5 -224t28.5 -220l3 -88h-205q-3 45 -7.5 101.5t-6 82.5t-4.5 60.5t-5 50.5l-4.5 36t-6 32.5t-7.5 25.5l-163 82v-471h-1434v462l-154 -83q-17 -51 -27 -121.5t-24 -257.5h-205zM717 415 q257 41 512 -164q255 205 512 164v158l-41 21q-75 41 -115 64t-91.5 58.5t-78.5 64t-49.5 67.5t-29.5 82q-45 -8 -107 -8q-53 0 -106 11q-6 -37 -20 -69t-41 -61.5t-53 -52.5t-72.5 -52.5t-81 -49.5t-97.5 -54l-41 -22v-157zM826 1581q47 -187 156 -310.5t247 -123.5 q112 0 196 50t134.5 140t75 206.5t24.5 258.5q0 85 -18 154q-175 -1 -306.5 -27t-256.5 -107q33 -24 48 -71q0 -47 -28.5 -79t-73.5 -32q-52 0 -106 48q-52 -54 -92 -107zM1331 1751q20 61 68 83t103 -2t95 -89q-39 -39 -57.5 -55.5t-47.5 -32t-58 -15.5q-45 0 -74 32 t-29 79z" />
<glyph unicode="&#xe0d6;" d="M102 0q0 13 0.5 36.5t6.5 91t15.5 130t30.5 140.5t50 135l398 213q52 72 61 193t-8.5 239.5t-39.5 301t-22 322.5q0 99 26 194t79.5 178.5t128 147t178.5 100t223 36.5q284 0 459.5 -182t175.5 -474v-3v-2q0 -139 -23 -315.5t-43 -294t-15.5 -237t49.5 -192.5l421 -225 q45 -91 70.5 -224.5t28.5 -220.5l3 -88h-205q-3 45 -7.5 101.5t-6 82.5t-4.5 60.5t-5 50.5l-4.5 36t-6 32.5t-7.5 25.5l-163 82v-471h-1434v462l-154 -83q-17 -51 -27 -121.5t-24 -257.5h-205zM717 415q257 41 512 -164q255 205 512 164v158l-41 21q-75 41 -115 64 t-91.5 58.5t-78.5 64t-49.5 67.5t-29.5 82q-45 -8 -107 -8q-54 0 -107 11q-7 -44 -29 -83t-49 -68t-78.5 -64.5t-92 -59t-115.5 -64.5l-41 -22v-157zM799 1802q0 -122 33 -240.5t89 -210t137 -148t171 -56.5q112 0 196 50t134.5 140t75 206.5t24.5 258.5q0 61 -11 119 q-74 -8 -130 -9t-126 10t-132 38t-137 78.5t-154 126.5q-81 -64 -125.5 -161t-44.5 -202zM860 1743q40 65 95 89t103 2t68 -83q0 -47 -28.5 -79t-73.5 -32q-41 0 -74.5 23.5t-89.5 79.5zM1331 1751q20 61 68 83t103 -2t95 -89q-39 -39 -57.5 -55.5t-47.5 -32t-58 -15.5 q-45 0 -74 32t-29 79z" />
<glyph unicode="&#xe0d7;" d="M102 0q0 13 0.5 36.5t6.5 91t15.5 129.5t30.5 140t50 135l88 48q55 37 99 87.5t75 120t53.5 132t36 159.5t21.5 164.5t11.5 184t4 182t0.5 192.5q0 99 26 194t79.5 178.5t128 147t178.5 100t223 36.5q284 0 459.5 -182t175.5 -474v-5q0 -145 1 -219.5t6.5 -205.5t16 -206 t32.5 -178.5t53.5 -169t79.5 -131t111 -107.5l89 -48q45 -91 70.5 -224t28.5 -220l3 -88h-2253zM799 1774q3 -116 37 -229q211 -63 399 -62t401 66q22 106 23 225q-64 9 -133 15q10 -23 10 -48q0 -46 -28 -74.5t-74 -28.5t-74.5 28.5t-28.5 74.5q0 33 16 59q-119 4 -237 0 q16 -26 16 -59q0 -46 -28 -74.5t-74 -28.5t-74 28.5t-28 74.5q0 25 10 48q-69 -6 -133 -15z" />
<glyph unicode="&#xe0d8;" d="M102 0q0 13 0.5 36.5t6.5 91t15.5 129.5t30.5 140t50 135l573 308q80 40 110 86.5t34 102.5q-183 146 -263 441q-127 -74 -127 -445h-231q1 168 29 295t75 202t99.5 116t114.5 57q-5 60 -5 107q0 126 39.5 241.5t113.5 209t194 149.5t268 56q187 0 326.5 -83t213.5 -231 t74 -342q0 -51 -3 -102q49 -10 92 -34.5t86 -75.5t73.5 -124t50 -186t20.5 -255h-231q0 386 -120 450q-71 -330 -273 -466q7 -50 38 -91.5t103 -77.5l574 -308q45 -91 70.5 -224t28.5 -220l3 -88h-205q-3 45 -7.5 101.5t-6 82.5t-4.5 60.5t-5 50.5l-4.5 36t-6 32.5 t-7.5 25.5l-163 82v-471h-1434v465l-143 -76q-14 -43 -21.5 -70.5t-19.5 -111.5t-21 -207h-205zM717 415q257 41 512 -164q255 205 512 164v158l-41 21q-74 40 -115 63.5t-92 58.5t-78 64t-49.5 68t-29.5 82q-45 -8 -107 -8q-55 0 -108 11q-10 -49 -39.5 -93.5t-82.5 -87 t-105.5 -76.5t-135.5 -82l-41 -22v-157zM740 1486v3v-3zM799 1781q0 -149 37.5 -272.5t99.5 -201t138 -120t155 -42.5t154.5 42t137.5 119.5t100 201t38 273.5q0 23 -1 36t-9 38.5t-23 41.5t-47 36.5t-76 32.5t-114.5 20.5t-159.5 8.5t-159 -7.5t-114.5 -18.5t-76 -30.5 t-47 -35t-23.5 -41.5t-9 -40.5t-1 -40.5zM860 1743q40 65 95 89t103 2t68 -83q0 -47 -28.5 -79t-73.5 -32q-41 0 -74.5 23.5t-89.5 79.5zM1331 1751q20 61 68 83t103 -2t95 -89q-39 -39 -57.5 -55.5t-47.5 -32t-58 -15.5q-45 0 -74 32t-29 79zM1741 1489l2 -3z" />
<glyph unicode="&#xe0d9;" d="M102 0q0 13 0.5 36.5t6.5 91t15.5 129.5t30.5 140t50 135l573 308q80 40 110 86.5t34 102.5q-99 79 -170 206q-29 -99 -73 -180q-27 -51 -58 -92t-47 -57t-27 -23l-136 164q16 14 29.5 26.5t49 61.5t59.5 103.5t44.5 148t20.5 199.5v216q0 126 39.5 241.5t113.5 209 t194 149.5t268 56q187 0 326.5 -83t213.5 -231t74 -342v-216q0 -106 20.5 -199.5t44.5 -148t60 -103.5t49 -61.5t30 -26.5l-137 -164q-11 7 -27 23t-47 57t-58 92q-40 76 -64 151q-71 -127 -176 -197q7 -50 38 -91.5t103 -77.5l574 -308q45 -91 70.5 -224t28.5 -220l3 -88 h-205q-3 45 -7.5 101.5t-6 82.5t-4.5 60.5t-5 50.5l-4.5 36t-6 32.5t-7.5 25.5l-163 82v-471h-1434v465l-143 -76q-14 -43 -21.5 -70.5t-19.5 -111.5t-21 -207h-205zM410 1046v3v-3zM717 415q257 41 512 -164q255 205 512 164v158l-41 21q-74 40 -115 63.5t-92 58.5t-78 64 t-49.5 68t-29.5 82q-45 -8 -107 -8q-55 0 -108 11q-10 -49 -39.5 -93.5t-82.5 -87t-105.5 -76.5t-135.5 -82l-41 -22v-157zM799 1802q0 -122 33 -240.5t89 -210t137 -148t171 -56.5q112 0 196 50t134.5 140t75 206.5t24.5 258.5q0 63 -11 121q-62 -5 -100 -6.5t-93.5 0 t-95 10t-92 25.5t-97 44.5t-97.5 69t-106 97.5q-79 -64 -123.5 -160.5t-44.5 -200.5zM860 1743q40 65 95 89t103 2t68 -83q0 -47 -28.5 -79t-73.5 -32q-41 0 -74.5 23.5t-89.5 79.5zM1331 1751q20 61 68 83t103 -2t95 -89q-39 -39 -57.5 -55.5t-47.5 -32t-58 -15.5 q-45 0 -74 32t-29 79zM2047 1047l1 2z" />
<glyph unicode="&#xe0da;" d="M102 0q0 13 0.5 36.5t6.5 91t15.5 129.5t30.5 140t50 135l573 308q100 51 129 122q-81 31 -153.5 76t-118 87t-80 80.5t-49.5 61.5l-14 23q4 5 11 15.5t24.5 53t31 95t24.5 146t11 202.5q0 99 26 194t79.5 178.5t128 147t178.5 100t223 36.5q192 0 336.5 -82.5 t221.5 -231t77 -342.5q0 -109 10.5 -202t25.5 -147.5t30 -93.5t26 -54l10 -15q-5 -9 -15 -25.5t-46.5 -62t-80 -86t-116.5 -87t-154 -76.5q33 -67 125 -113l574 -308q45 -91 70.5 -224t28.5 -220l3 -88h-2253zM799 1802q0 -168 55.5 -318.5t155.5 -243.5t219 -93 q144 0 242.5 86t143 230t44.5 339q0 64 -12 121q-88 -10 -173.5 -7.5t-163.5 20.5t-166.5 73.5t-181.5 149.5q-77 -65 -120 -160t-43 -197zM860 1743q40 65 95 89t103 2t68 -83q0 -47 -28.5 -79t-73.5 -32q-41 0 -74.5 23.5t-89.5 79.5zM1331 1751q20 61 68 83t103 -2 t95 -89q-39 -39 -57.5 -55.5t-47.5 -32t-58 -15.5q-45 0 -74 32t-29 79z" />
<glyph unicode="&#xe0db;" d="M0 58.5v43.5v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h44t28 -4.5t18.5 -8t8 -18.5t4.5 -28v-44v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM0 468.5v43.5v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h43.5t28 -4.5 t19 -8t8 -18.5t4.5 -27.5v-43.5v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM0 878.5v43.5v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-44t-4.5 -28t-8 -18.5t-18.5 -8 t-28 -4.5h-44h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28zM0 1287.5v43.5v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5q76 0 89.5 -13t13.5 -90v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM0 1697.5v43.5v43.5t4.5 28t7.5 18.5 t18.5 7.5t28 4.5h43.5h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5q0 -77 -13.5 -90t-89.5 -13h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28zM0 2106.5v43.5v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h44t28 -4.5t18.5 -8t8 -18.5t4.5 -28v-44v-43.5t-4.5 -27.5t-8 -18.5t-19 -8 t-28 -4.5h-43.5h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM410 58.5v43.5v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28z M410 2106.5v43.5v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM819 58.5v43.5v44t4.5 28t8 18.5t18.5 8t28 4.5h44h43.5 t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5zM819 1229v1085l328 -327l143 143q255 255 547.5 340t591 -11.5t561.5 -369.5q-164 59 -333 55.5t-335 -60t-308.5 -145t-252.5 -198.5 l-184 -185l328 -327h-1086zM1229 58.5v43.5v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5q77 0 90 -13.5t13 -89.5v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM1638 58.5v43.5q0 76 13 89.5t90 13.5h43.5t27.5 -4.5t18.5 -8 t8 -19t4.5 -28v-43.5v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5zM2048 58.5v43.5v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h44t28 -4.5t18.5 -8t8 -18.5t4.5 -28v-44v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5 h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM2048 468.5v43.5v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM2048 878.5v43.5 v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-44t-4.5 -28t-8 -18.5t-18.5 -8t-28 -4.5h-44h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28zM2048 1287.5v43.5v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5q76 0 89.5 -13t13.5 -90v-43.5 t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM2048 1697.5v43.5v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5q0 -77 -13.5 -90t-89.5 -13h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28z " />
<glyph unicode="&#xe0dc;" d="M0 58.5v43.5v2253v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h2048l-184 -205h-1761v-2048h2048v1003l205 215v-1321v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-2253h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM606 1433.5q0 14.5 8.5 24t34.5 35.5l242 244 q44 43 59.5 43t59.5 -43l362 -363l1028 1026q20 20 29 27t19 13.5t20 0t19.5 -14t31.5 -28.5l242 -241q26 -26 34.5 -35.5t8.5 -24t-8.5 -24t-34.5 -35.5l-1327 -1327q-46 -46 -61.5 -46t-59.5 44l-242 241q-21 21 -28 29l-394 395q-26 26 -34.5 35.5t-8.5 24z" />
<glyph unicode="&#xe0dd;" d="M0 58.5v43.5v2253v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h1639l-185 -205h-1351v-2048h2048v1351l205 205v-1659v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-2253h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM621 639l157 438q67 -54 146 -133.5t133 -144.5z M897 1352l1331 1310q155 -52 268 -166t166 -268l-1329 -1310q-83 124 -197 237t-239 197z" />
<glyph unicode="&#xe0de;" d="M0 58.5v43.5v2253v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h1414v-205h-1311v-2048h2048v573l205 185v-861v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-2253h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM492 758q0 246 61 447.5t168 341.5t257 235t325.5 139.5 t375.5 44.5h41v614l1086 -983l-1086 -983v615h-123q-90 0 -194 -11t-238.5 -43.5t-254 -82t-234 -136.5t-184.5 -198z" />
<glyph unicode="&#xe0df;" d="M0 58.5v43.5v2253v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h2253q77 0 90 -13t13 -90v-2253v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-2253h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM205 205h2048v2048h-2048v-2048zM307 1229l410 307v-614zM922 717h614 l-307 -410zM922 1741l307 409l307 -409h-614zM1741 922v614l409 -307z" />
<glyph unicode="&#xe0e0;" d="M0 58.5v43.5v2253v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5q76 0 89.5 -13t13.5 -90v-2253v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM410 1024v1382q124 -42 262 -54t270.5 -0.5t272 33t288 42.5t297 33t320.5 -0.5 t338 -53.5l-410 -665l410 -717q-166 41 -338 53.5t-320.5 0.5t-297 -33t-288 -42.5t-272 -33t-270.5 0.5t-262 54z" />
<glyph unicode="&#xe0e1;" d="M-132 1821q3 18 54 21q20 1 78 1h205v307v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h1843h44t28 -4.5t18.5 -8t8 -18.5t4.5 -28v-44v-307h256q106 0 122 -9q18 -9 2 -47q-5 -12 -22 -46l-358 -717v-717v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-1843 q-77 0 -89.5 12.5t-12.5 89.5v717l-307 717q-33 66 -30 80zM154 1638l256 -614v-614h1638v614l307 614h-2201zM819 1024h205v307v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h205q77 0 90 -13t13 -90v-307h204l-409 -461z" />
<glyph unicode="&#xe0e2;" d="M205 307v1843v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h717l717 358q66 33 80 30q18 -3 21 -54q1 -20 1 -78v-256h307h44t28 -4.5t18.5 -8t8 -18.5t4.5 -28v-44v-1843v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-307v-205q0 -106 -9 -122q-9 -18 -47 -2 q-12 5 -46 22l-717 307h-717q-77 0 -89.5 12.5t-12.5 89.5zM410 410h614l614 -256v2201l-614 -307h-614v-1638zM563 1229l461 409v-204h307q77 0 90 -13t13 -90v-205v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-307v-205z" />
<glyph unicode="&#xe0e3;" d="M205 307v1843v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h307v256v51.5t2 36t3 26.5t8.5 13.5t11.5 6t19 -5t25 -9.5l34 -17l717 -358h716h44t28 -4.5t18.5 -8t8 -18.5t4.5 -28v-44v-1843v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-716l-717 -307l-34 -17t-25 -9.5 t-19 -5t-11.5 6t-8.5 13.5t-3 26.5t-2 36v51.5v205h-307q-77 0 -89.5 12.5t-12.5 89.5zM819 154l615 256h614v1638h-614l-615 307v-2201zM1024 1082.5v43.5v205v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h308v204l460 -409l-460 -410v205h-308h-43.5t-28 4.5t-18.5 7.5 t-7.5 18.5t-4.5 28z" />
<glyph unicode="&#xe0e4;" d="M-133.5 639q0.5 4 5 19t9.5 25l17 34l307 717v716v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h1843h44t28 -4.5t18.5 -8t8 -18.5t4.5 -28v-44v-716l358 -717l17 -34t9.5 -25t5 -19t-6 -11.5t-13.5 -8.5t-26.5 -3t-36 -2h-51.5h-256v-307v-43.5t-4.5 -27.5t-8 -18.5t-19 -8 t-28 -4.5h-43.5h-1843q-77 0 -89.5 12.5t-12.5 89.5v307h-205h-51.5t-36 2t-26.5 3t-13.5 8.5t-6 11.5zM154 819h2201l-307 615v614h-1638v-614zM819 1434l410 460l409 -460h-204v-308v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-205h-43.5t-28 4.5t-18.5 7.5 t-7.5 18.5t-4.5 28v43.5v308h-205z" />
<glyph unicode="&#xe0e5;" d="M0 58.5v43.5v2048v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h308v-1024h1433v1024h103l307 -307v-1844v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-2048h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM1434 1434v819h204v-819h-204zM1843 307q0 -38 32.5 -70 t70.5 -32t70 32t32 70t-32 70.5t-70 32.5t-70.5 -32.5t-32.5 -70.5z" />
<glyph unicode="&#xe0e6;" d="M0 307v410q131 57 272.5 82t274.5 21t271.5 -24t274.5 -49.5l272 -59t274.5 -49.5t271.5 -24t274.5 21t272.5 82v-410q-131 -57 -272.5 -82t-274.5 -21t-271.5 24t-274.5 49.5l-272 59t-274.5 49.5t-271.5 24t-274.5 -21t-272.5 -82zM0 1024v410q131 57 272.5 82 t274.5 21t271.5 -24t274.5 -49.5l272 -59t274.5 -49.5t271.5 -24t274.5 21t272.5 82v-410q-131 -57 -272.5 -82t-274.5 -21t-271.5 24t-274.5 49.5l-272 59t-274.5 49.5t-271.5 24t-274.5 -21t-272.5 -82zM0 1741v409q131 57 272.5 82t274.5 21t271.5 -24t274.5 -49.5 l272 -59t274.5 -49.5t271.5 -24t274.5 21t272.5 82v-409q-131 -57 -272.5 -82t-274.5 -21t-271.5 24t-274.5 49.5l-272 59t-274.5 49.5t-271.5 24t-274.5 -21t-272.5 -82z" />
<glyph unicode="&#xe0e7;" d="M0 58.5v43.5v2048v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h615l153 -205h1485h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-1844v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-2253h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28z" />
<glyph unicode="&#xe0e8;" d="M0 58.5v43.5v2048v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h615l153 -205h1485h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-1844v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-2253h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM717 1229l512 -563l512 563h-1024 z" />
<glyph unicode="&#xe0e9;" d="M0 58.5v43.5v2048v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h615l153 -205h1485h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-1844v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-2253h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM563 1182l373 -293l-133 -479 l426 266l399 -266l-106 479l372 293l-479 53l-186 453l-187 -453z" />
<glyph unicode="&#xe0ea;" d="M0 58.5v43.5v2048v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h615l153 -205h1485h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-1844v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-2253h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM614 468.5q0 -12.5 4.5 -27.5 t8 -18.5t19 -8t28 -4.5h43.5h43.5t28 4.5t18.5 7.5t7.5 18.5t4.5 28v43.5v307h1024l-307 410l307 409h-1126h-43.5t-28 -4.5t-19 -8t-8 -18.5t-4.5 -27.5v-43.5v-1024v-43.5z" />
<glyph unicode="&#xe0eb;" d="M0 58.5v43.5v2048v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h615l153 -205h1485h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-1844v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-2253h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM819 1024q0 -64 45 -109t109 -45 t108.5 45t44.5 109t-44.5 109t-108.5 45t-109 -45t-45 -109zM1331 1024q0 -64 45 -109t109 -45t108.5 45t44.5 109t-44.5 109t-108.5 45t-109 -45t-45 -109z" />
<glyph unicode="&#xe0ec;" d="M0 58.5v43.5v2048v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h615l153 -205h1485h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-1844v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-2253h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM717 461q0 -38 6.5 -44.5 t44.5 -6.5h922q38 0 44.5 6.5t6.5 44.5v717q0 38 -6.5 44.5t-44.5 6.5h-103v102q0 154 -102 256.5t-256 102.5t-256.5 -102.5t-102.5 -256.5v-102h-102q-38 0 -44.5 -6.5t-6.5 -44.5v-717zM1075 1229v102q0 154 154 154q153 0 153 -154v-102h-307z" />
<glyph unicode="&#xe0ed;" d="M0 58.5v43.5v2048v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h615l153 -205h1485h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-1844v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-2253h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM717 929.5q0 -12.5 4.5 -28t8 -19 t18.5 -8t27.5 -4.5h43.5h819q76 0 89.5 13t13.5 90v102q0 77 -13.5 90t-89.5 13h-819h-43.5t-27.5 -4.5t-18.5 -8t-8 -19t-4.5 -28v-43.5v-102v-43.5z" />
<glyph unicode="&#xe0ee;" d="M0 512v1638v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h615l153 -205h1485h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-308h-1997zM2 0l614 1434h2458l-565 -1332q-38 -76 -57.5 -89t-94.5 -13h-2355z" />
<glyph unicode="&#xe0ef;" d="M-205 1638h2867l-204 -1638h-2458zM0 1843v307v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h615l153 -205h1485h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-103h-2458z" />
<glyph unicode="&#xe0f0;" d="M0 58.5v43.5v2048v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h615l153 -205h1485h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-1844v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-2253h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM717 929.5q0 -12.5 4.5 -28t8 -19 t18.5 -8t27.5 -4.5h43.5h256v-256v-43.5t4.5 -27.5t8 -18.5t19 -8t28 -4.5h43.5h102h43.5t28 4.5t18.5 7.5t7.5 18.5t4.5 28v43.5v256h256q76 0 89.5 13t13.5 90v102q0 77 -13.5 90t-89.5 13h-256v256v43.5t-4.5 28t-7.5 18.5t-18.5 7.5t-28 4.5h-43.5h-102h-43.5t-28 -4.5 t-19 -8t-8 -18.5t-4.5 -27.5v-43.5v-256h-256h-43.5t-27.5 -4.5t-18.5 -8t-8 -19t-4.5 -28v-43.5v-102v-43.5z" />
<glyph unicode="&#xe0f1;" d="M0 58.5v43.5v2048v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h615l153 -205h1485h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-1844v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-2253h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM705 724q0 -4 6.5 -15.5 t13.5 -18.5l25 -25l120 -120l25 -25t18.5 -13.5t15.5 -6.5t16 6.5t19 13.5t26 25l239 240l238 -240q18 -18 26 -25.5t19.5 -13.5t16 -6t15.5 6t18.5 13.5l25.5 25.5l120 120l25 25t13.5 18.5t6.5 15.5t-6.5 16t-13.5 19t-25 26l-241 239l241 239q18 19 25 26t13.5 19t6.5 16 t-6.5 15.5t-13.5 18.5l-25 25l-120 120l-25.5 25.5t-18.5 13.5t-15.5 6t-16 -6t-19.5 -13.5t-26 -25.5l-238 -240l-239 240q-19 18 -26 25t-19 13.5t-16 6.5t-15.5 -6.5t-18.5 -13.5l-25 -25l-120 -120l-25 -25t-13.5 -18.5t-6.5 -15.5t6.5 -16t13.5 -19t25 -26l240 -239 l-240 -239q-18 -19 -25 -26t-13.5 -19t-6.5 -16z" />
<glyph unicode="&#xe0f2;" d="M0 58.5v43.5v2048v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h615l153 -205h1485h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-1844v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-2253h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM512 840q0 -36 16 -56.5t35 -20.5 t35 20.5t16 56.5v358q0 24 13 34t26 0t13 -34v-819q0 -36 24 -56.5t52.5 -20.5t52.5 20.5t24 56.5v461q0 24 12.5 34t25.5 0t13 -34v-461q0 -36 24 -56.5t53 -20.5t53 20.5t24 56.5v819q0 24 13 34t25.5 0t12.5 -34v-358q0 -36 16 -56.5t35.5 -20.5t35.5 20.5t16 56.5v409 q0 154 -154 154h-358q-154 0 -154 -154v-409zM717 1582q0 -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.5zM1331 840q0 -36 16 -56.5t35.5 -20.5t35.5 20.5t16 56.5v358q0 24 13 34t25.5 0t12.5 -34v-819q0 -36 24 -56.5 t52.5 -20.5t52.5 20.5t24 56.5v461q0 24 13 34t26 0t13 -34v-461q0 -36 24 -56.5t52.5 -20.5t52.5 20.5t24 56.5v819q0 24 12.5 34t25.5 0t13 -34v-358q0 -36 16 -56.5t35.5 -20.5t35.5 20.5t16 56.5v409q0 154 -154 154h-358q-154 0 -154 -154v-409zM1536 1582 q0 -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="&#xe0f3;" d="M0 58.5v43.5v2048v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h615l153 -205h1485h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-1844v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-2253h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM717 819h1024l-512 563z" />
<glyph unicode="&#xe0f4;" d="M0 673.5v43.5v1638v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h1639h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-512h512h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-1639v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-1638q-36 0 -58.5 8t-31.5 25t-11 30.5 t-2 38.5v512h-512h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28zM717 717h1024v1024h-1024v-1024z" />
<glyph unicode="&#xe0f5;" d="M0 673.5v43.5v1638v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h1639h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-512h512h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-1639v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-1638q-36 0 -58.5 8t-31.5 25t-11 30.5 t-2 38.5v512h-512h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28zM205 819h409v922v43.5t4.5 27.5t8 18.5t19 8t28 4.5h43.5h921v410h-1433v-1434zM819 205h1434v1433h-410v-921v-43.5t-4.5 -28t-8 -19t-18.5 -8t-27.5 -4.5h-43.5h-922v-409z" />
<glyph unicode="&#xe0f6;" d="M0 673.5v43.5v1638v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h1639h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-512h512h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-1639v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-1638h-43.5t-28 4.5t-19 8t-8 18.5 t-4.5 27.5v43.5v512h-512h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28zM819 205h1434v1433h-410v-102h-102v102h-922v-921h103v-103h-103v-409zM1024 614v103h205v-103h-205zM1331 614v103h205v-103h-205zM1638 614v103h103v102h102v-205h-205zM1741 922v204h102v-204h-102z M1741 1229v205h102v-205h-102z" />
<glyph unicode="&#xe0f7;" d="M0 673.5v43.5v1638v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h1639h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-512h512h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-1639v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-1638h-43.5t-28 4.5t-19 8t-8 18.5 t-4.5 27.5v43.5v512h-512h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28zM614 717h103v-103h205v103h-205v205h-103v-205zM614 1024h103v205h-103v-205zM614 1331h103v205h-103v-205zM614 1638h103v103h102v102h-205v-205zM922 1741h204v102h-204v-102zM1024 614h205v103h-205 v-103zM1229 1741h205v102h-205v-102zM1331 614h205v103h-205v-103zM1536 1741h205v-205h102v205h-102v102h-205v-102zM1638 614h205v205h-102v-102h-103v-103zM1741 922h102v204h-102v-204zM1741 1229h102v205h-102v-205z" />
<glyph unicode="&#xe0f8;" d="M0 58.5v43.5v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h44t28 -4.5t18.5 -8t8 -18.5t4.5 -28v-44v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM0 468.5v43.5v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h43.5t28 -4.5 t19 -8t8 -18.5t4.5 -27.5v-43.5v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM0 878.5v43.5v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-44t-4.5 -28t-8 -18.5t-18.5 -8 t-28 -4.5h-44h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28zM0 1287.5v43.5v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5q76 0 89.5 -13t13.5 -90v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM0 1697.5v43.5v43.5t4.5 28t7.5 18.5 t18.5 7.5t28 4.5h43.5h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5q0 -77 -13.5 -90t-89.5 -13h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28zM0 2106.5v43.5v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h44t28 -4.5t18.5 -8t8 -18.5t4.5 -28v-44v-43.5t-4.5 -27.5t-8 -18.5t-19 -8 t-28 -4.5h-43.5h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM410 58.5v43.5v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28z M410 563l1408 1408l-180 179l615 103l-103 -615l-179 180l-1408 -1408q-153 0 -153 153zM410 2106.5v43.5v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-43.5t-28 4.5 t-18.5 7.5t-7.5 18.5t-4.5 28zM819 58.5v43.5v44t4.5 28t8 18.5t18.5 8t28 4.5h44h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5zM819 2106.5v43.5v44t4.5 28t8 18.5t18.5 8 t28 4.5h44h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5zM1229 58.5v43.5v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5q77 0 90 -13.5t13 -89.5v-43.5t-4.5 -27.5t-8 -18.5t-19 -8 t-28 -4.5h-43.5h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM1229 2106.5v43.5v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5q77 0 90 -13.5t13 -89.5v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM1638 58.5v43.5 q0 76 13 89.5t90 13.5h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5zM2048 58.5v43.5v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h44t28 -4.5t18.5 -8t8 -18.5t4.5 -28v-44v-43.5 t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM2048 468.5v43.5v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-43.5t-28 4.5 t-18.5 7.5t-7.5 18.5t-4.5 28zM2048 878.5v43.5v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-44t-4.5 -28t-8 -18.5t-18.5 -8t-28 -4.5h-44h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28zM2048 1287.5v43.5v43.5t4.5 28t8 19t18.5 8 t27.5 4.5h43.5q76 0 89.5 -13t13.5 -90v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28z" />
<glyph unicode="&#xe0f9;" d="M0 468.5v43.5v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h410h43.5t27.5 -4.5t19 -7.5t7.5 -18.5t4.5 -28v-44.5v-409v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28v43.5v308h-308h-43.5t-28 4.5t-18.5 7.5 t-7.5 18.5t-4.5 28zM0 1902.5v43.5v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h308v307v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-409v-43.5t-4 -27.5t-8 -19t-19 -8t-28 -5h-44h-409h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28z M1843 58.5v43.5v410v43.5t4.5 27.5t8 18.5t19 8t28 4.5h43.5h409h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-307v-308v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5z M1843 1902v44v409q0 77 13.5 90t89.5 13h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-307h307h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5q0 -76 -13 -89.5t-90 -13.5h-409h-44t-28 4.5t-18.5 8t-8 18.5t-4.5 28z" />
<glyph unicode="&#xe0fa;" d="M0 58.5v43.5v410v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-307h307h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-410h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5 t-4.5 28zM0 1902.5v43.5v409v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h410h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-307v-307v-44t-4.5 -28t-8 -18.5t-18.5 -8t-28 -4.5h-44h-43.5t-27.5 4.5t-18.5 8t-8 19 t-4.5 28zM1843 58.5v43.5v44t4.5 28t8 18.5t18.5 8t28 4.5h44h307v307v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-410v-43.5t-4.5 -28t-8 -18.5t-19 -7.5t-28 -4.5h-44.5h-408h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5z M1843 2311.5v43.5q0 77 13.5 90t89.5 13h409q77 0 90 -13t13 -91v-408q0 -76 -13 -89.5t-90 -13.5h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28v43.5v307h-307h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5z" />
<glyph unicode="&#xe0fb;" d="M0 1229q0 250 97.5 477.5t262 392t392 262t477.5 97.5t477.5 -97.5t392 -262t262 -392t97.5 -477.5q0 -327 -159.5 -605.5t-429.5 -443.5l-9 -16h-18q-285 -164 -613 -164q-250 0 -477.5 97.5t-392 262t-262 392t-97.5 477.5zM205 1229q0 -196 72 -376t195.5 -315 t294.5 -223t363 -106v533l-108 292l-223 62l-571 349q-23 -107 -23 -216zM969 1559l211 -150l91 -412l498 213l475 -119q9 67 9 138q0 201 -76 385t-205 320t-307.5 221t-377.5 96l153 -371z" />
<glyph unicode="&#xe0fc;" d="M0 58.5v43.5v820v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h820h43.5t28 -4.5t18.5 -7.5t7.5 -18.5t4.5 -28v-43.5v-820v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-820h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM0 1287.5v43.5v819v43.5t4.5 28t8 19 t18.5 8t27.5 4.5h43.5h820h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-819v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-820h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM1229 58.5v43.5v820v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h819h43.5t28 -4.5 t19 -8t8 -18.5t4.5 -27.5v-43.5v-820v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-819h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM1229 1331v819v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h819h44t28 -4.5t18.5 -8t8 -18.5t4.5 -28v-44v-819v-43.5t-4.5 -27.5 t-8 -18.5t-19 -8t-28 -4.5h-43.5h-819q-77 0 -89.5 12.5t-12.5 89.5z" />
<glyph unicode="&#xe0fd;" d="M0 58.5v43.5v205v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h410h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-205v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-410h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM0 673.5v43.5v409v43.5t4.5 28t8 19t18.5 8 t27.5 4.5h43.5h410h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-409v-43.5t-4.5 -28t-8 -19t-18.5 -8t-27.5 -4.5h-43.5h-410h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28zM0 1492.5v43.5v614v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h410h43.5t27.5 -4.5t18.5 -8t8 -19 t4.5 -28v-43.5v-614v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-410h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM819 58.5v43.5v615v43.5t4.5 27.5t8 18.5t19 8t28 4.5h43.5h409h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-615v-43.5t-4.5 -27.5t-8 -18.5 t-19 -8t-28 -4.5h-43.5h-409h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5zM819 1082.5v43.5v410v43.5t4.5 27.5t8 18.5t19 8t28 4.5h43.5h409h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-410v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-409h-43.5t-28 4.5t-19 8 t-8 18.5t-4.5 27.5zM819 1902v44v204v44t4.5 28t8 18.5t18.5 8t28 4.5h44h409q77 0 90 -13.5t13 -89.5v-204q0 -76 -13 -89.5t-90 -13.5h-409h-44t-28 4.5t-18.5 8t-8 18.5t-4.5 28zM1638 263.5v43.5v205v43.5t4.5 27.5t8 18.5t19 8t28 4.5h43.5h409h43.5t28 -4.5t19 -8 t8 -18.5t4.5 -27.5v-43.5v-205v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-409h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5zM1638 922v409q0 77 13 90t90 13h409q76 0 89.5 -13t13.5 -90v-409v-44t-4.5 -28t-8 -18.5t-18.5 -8t-28 -4.5h-44h-409q-77 0 -90 13.5 t-13 89.5zM1638 1741v409q0 76 13 89.5t90 13.5h409h44t28 -4.5t18.5 -8t8 -18.5t4.5 -28v-44v-409q0 -77 -13.5 -90t-89.5 -13h-409q-77 0 -90 13t-13 90z" />
<glyph unicode="&#xe0fe;" d="M0 58.5v43.5v410v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h410h43.5t28 -4.5t18.5 -7.5t7.5 -18.5t4.5 -28v-43.5v-410v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-410h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM0 878.5v43.5v409v43.5t4.5 28t8 19 t18.5 8t27.5 4.5h43.5h410h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-409v-43.5t-4.5 -28t-8 -19t-18.5 -8t-27.5 -4.5h-43.5h-410h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28zM0 1697.5v43.5v409v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h410h43.5t27.5 -4.5t18.5 -8t8 -19 t4.5 -28v-43.5v-409v-43.5t-4.5 -28t-8 -19t-18.5 -8t-27.5 -4.5h-43.5h-410h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28zM819 58.5v43.5v410v43.5t4.5 27.5t8 18.5t19 8t28 4.5h43.5h409h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-410v-43.5t-4.5 -27.5t-8 -18.5t-19 -8 t-28 -4.5h-43.5h-409h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5zM819 878v44v409q0 77 13.5 90t89.5 13h409q77 0 90 -13t13 -90v-409q0 -76 -13 -89.5t-90 -13.5h-409h-44t-28 4.5t-18.5 8t-8 18.5t-4.5 28zM819 1741v409v44t4.5 28t8 18.5t18.5 8t28 4.5h44h409 q77 0 90 -13.5t13 -89.5v-409q0 -77 -13 -90t-90 -13h-409q-76 0 -89.5 13t-13.5 90zM1638 58.5v43.5v410v43.5t4.5 27.5t8 18.5t19 8t28 4.5h43.5h409h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-410v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-409h-43.5 t-28 4.5t-19 8t-8 18.5t-4.5 27.5zM1638 922v409q0 77 13 90t90 13h409q76 0 89.5 -13t13.5 -90v-409v-44t-4.5 -28t-8 -18.5t-18.5 -8t-28 -4.5h-44h-409q-77 0 -90 13.5t-13 89.5zM1638 1741v409q0 76 13 89.5t90 13.5h409h44t28 -4.5t18.5 -8t8 -18.5t4.5 -28v-44v-409 q0 -77 -13.5 -90t-89.5 -13h-409q-77 0 -90 13t-13 90z" />
<glyph unicode="&#xe0ff;" d="M-102 102q0 56 28 103.5t74 74.5v1898q-47 27 -74.5 74t-27.5 103q0 85 59.5 145t144.5 60q56 0 103.5 -28t74.5 -74h1898q27 47 74 74.5t103 27.5q85 0 145 -60t60 -145q0 -56 -27.5 -103t-74.5 -74v-1898q46 -27 74 -74.5t28 -103.5q0 -85 -60 -144.5t-145 -59.5 q-56 0 -103 27.5t-74 74.5h-1898q-27 -46 -74.5 -74t-103.5 -28q-85 0 -144.5 59.5t-59.5 144.5zM205 280q47 -28 75 -75h1898q28 47 75 75v1898q-47 28 -75 75h-1898q-28 -47 -75 -75v-1898zM410 461v1126q0 38 6.5 44.5t44.5 6.5h358v359q0 38 6.5 44.5t44.5 6.5h1127 q38 0 44.5 -6.5t6.5 -44.5v-1127q0 -38 -6.5 -44.5t-44.5 -6.5h-359v-358q0 -38 -6.5 -44.5t-44.5 -6.5h-1126q-38 0 -44.5 6.5t-6.5 44.5zM614 614h820v205h-564q-38 0 -44.5 6.5t-6.5 44.5v564h-205v-820zM1024 1024h410v410h-410v-410zM1024 1638h563q38 0 44.5 -6.5 t6.5 -44.5v-563h205v819h-819v-205z" />
<glyph unicode="&#xe100;" d="M614 263.5v43.5v205v43.5t4.5 27.5t8 18.5t19 8t28 4.5h43.5h1024h43.5t28 -4.5t18.5 -7.5t7.5 -18.5t4.5 -28v-43.5v-205q0 -77 -12.5 -89.5t-89.5 -12.5h-1024h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5zM614 1082.5v43.5v205q0 77 13 90t90 13h1024h43.5t27.5 -4.5 t18.5 -8t8 -19t4.5 -28v-43.5v-205v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-1024h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5zM614 1946v204q0 76 13 89.5t90 13.5h1024h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-204v-43.5t-4.5 -28t-8 -19t-18.5 -8 t-27.5 -4.5h-43.5h-1024q-77 0 -90 13.5t-13 89.5z" />
<glyph unicode="&#xe101;" d="M0 468.5v43.5v614v45.5t3.5 23t7.5 16.5t15.5 23.5t24.5 45.5l359 768h1638l358 -768q13 -26 25 -45.5t16 -23.5t7.5 -16t3.5 -23.5v-45.5v-614v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-2253h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM205 614h2048v410 h-2048v-410zM1638 819q0 38 32.5 70.5t70.5 32.5t70 -32.5t32 -70.5t-32 -70t-70 -32t-70.5 32t-32.5 70zM1946 819q0 38 32 70.5t70 32.5t70 -32.5t32 -70.5t-32 -70t-70 -32t-70 32t-32 70z" />
<glyph unicode="&#xe102;" d="M205 58.5v43.5v2253v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h307q76 0 89.5 -13t13.5 -90v-819h1024v819v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h307q76 0 89.5 -13t13.5 -90v-2253v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-307h-43.5t-28 4.5t-18.5 7.5 t-7.5 18.5t-4.5 28v43.5v922h-1024v-922v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-307h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28z" />
<glyph unicode="&#xe103;" d="M0 1260q0 240 95 458.5t273 389.5q175 169 397.5 259.5t463.5 90.5t463.5 -90.5t397.5 -259.5q178 -171 273 -390t95 -458q0 -228 -51 -430.5t-216 -696.5q-9 -28 -14.5 -44t-14 -41.5t-15.5 -47.5h-303v717h214q31 72 61.5 239.5t30.5 312.5q0 185 -71.5 349t-194 280.5 t-293 184t-362.5 67.5q-153 0 -294.5 -43t-254.5 -123t-197.5 -187.5t-130 -243.5t-45.5 -284q0 -150 31 -313.5t62 -238.5h215v-717h-304q-21 62 -65.5 194.5t-60 178.5t-48 148t-43.5 143.5t-32.5 121t-28.5 124.5t-17 110.5t-13 121.5t-3 118z" />
<glyph unicode="&#xe104;" d="M0 1591q0 131 49 253t131 211.5t195.5 143.5t236.5 54q179 0 338.5 -96t278.5 -279q119 183 278 279t338 96q124 0 238 -53.5t196 -143.5t130.5 -212t48.5 -253q0 -112 -27.5 -212.5t-58.5 -170t-120.5 -175.5t-144.5 -163t-200 -198q-88 -86 -135 -133l-543 -539 l-543 539q-47 47 -135 133q-115 112 -168 166t-132 141t-113 143.5t-72.5 136t-52 159t-13.5 173.5z" />
<glyph unicode="&#xe105;" d="M0 1591q0 131 49 253t131 211.5t195.5 143.5t236.5 54q179 0 338.5 -96t278.5 -279q119 183 278 279t338 96q124 0 238 -53.5t196 -143.5t130.5 -212t48.5 -253q0 -112 -27.5 -212.5t-58.5 -170t-120.5 -175.5t-144.5 -163t-200 -198q-88 -86 -135 -133l-543 -539 l-543 539q-47 47 -135 133q-115 112 -168 166t-132 141t-113 143.5t-72.5 136t-52 159t-13.5 173.5zM307 1591q0 -63 9 -113.5t34 -103t56 -98t89.5 -110t120 -126t160.5 -159.5q26 -26 41 -40.5t39.5 -38.5t45.5 -45l327 -324l326 324q45 45 126 124q235 231 307 315 q114 134 145 248q17 64 17 147q0 146 -91.5 250.5t-213.5 104.5q-134 0 -278.5 -119.5t-337.5 -394.5q-193 275 -338 394.5t-279 119.5q-121 0 -213 -105t-92 -250z" />
<glyph unicode="&#xe106;" d="M-215 1137h215v92q0 197 62 383t176 338t265 267t338.5 178t387.5 63q249 0 477 -99t392.5 -265t262 -393.5t97.5 -475.5q0 -165 -44 -323.5t-123.5 -293t-193 -248t-248 -192.5t-294 -123.5t-326.5 -44.5q-251 0 -475.5 95t-393.5 265l145 145q129 -129 333.5 -214.5 t392.5 -85.5q177 0 339 57.5t284.5 157t213.5 229.5t138 280t47 302t-47 301t-138 278.5t-213.5 229t-284.5 156.5t-341 57t-341 -57t-284.5 -156.5t-213.5 -229t-138 -279.5t-47 -302v-92h215l-318 -471zM1124.5 1195q0.5 13 1.5 34l21 727q3 44 19.5 73.5t39.5 36.5 t45.5 0t39.5 -36.5t20 -73.5l20 -625l481 -41q32 -3 56.5 -13.5t37.5 -25t19 -31.5t0 -33.5t-19 -30t-37.5 -22t-56.5 -8.5h-583h-34t-25.5 2t-19.5 3.5t-12.5 7.5t-9 12.5t-3 18.5t-1 25z" />
<glyph unicode="&#xe107;" d="M0 58.5v43.5v1332l1229 1228l1229 -1228v-1332v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-819h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28v43.5v615v43.5t-4.5 27.5t-8 18.5t-19 8t-28 4.5h-43.5h-205h-43.5t-28 -4.5t-18.5 -7.5t-7.5 -18.5t-4.5 -28v-43.5 v-615v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-820h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28z" />
<glyph unicode="&#xe108;" d="M512 819v410q0 153 154 153h358q154 0 154 -153v-410q0 -36 -16 -56.5t-35.5 -20.5t-35.5 20.5t-16 56.5v359q0 24 -12.5 34t-25.5 0t-13 -34v-871q0 -36 -24 -56.5t-53 -20.5t-53 20.5t-24 56.5v512q0 24 -13 34t-25.5 0t-12.5 -34v-512q0 -36 -24 -56.5t-52.5 -20.5 t-52.5 20.5t-24 56.5v871q0 24 -13 34t-26 0t-13 -34v-359q0 -36 -16 -56.5t-35 -20.5t-35 20.5t-16 56.5zM717 1562q0 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="&#xe109;" d="M0 58.5v43.5v922l307 1331q4 17 8.5 37t5 28t6 18t8 12t15 5t23.5 3h37h1618h37t23.5 -3t15 -5t7.5 -12t5.5 -18t5 -27.5t8.5 -37.5l328 -1331v-922v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-2253h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM205 1024h614 l103 -307h614l102 307h615l-307 1229h-1434z" />
<glyph unicode="&#xe10a;" d="M754 216q-5 56 1.5 114t25.5 120l292 978q13 43 18.5 70.5t5.5 54.5t-11.5 43t-32.5 30t-59 20.5t-89 10.5t-123 4v105h525q163 0 226.5 -94t19.5 -246l-312 -1067q-25 -86 18 -132q44 -47 126 -13q119 51 240 250l83 -40q-232 -465 -625 -465q-80 0 -141.5 19.5 t-99.5 54.5t-60.5 81t-27.5 102zM1176 2273q0 104 74.5 175t191.5 71q116 0 191 -71.5t75 -174.5q0 -104 -75.5 -176t-192.5 -72q-116 0 -190 72t-74 176z" />
<glyph unicode="&#xe10b;" d="M0 1229q0 200 62 388t175.5 339t264.5 264.5t339 175.5t388 62t388 -62t339 -175.5t264.5 -264.5t175.5 -339t62 -388t-62 -388t-175.5 -339t-264.5 -264.5t-339 -175.5t-388 -62t-388 62t-339 175.5t-264.5 264.5t-175.5 339t-62 388zM205 1229q0 -209 81 -398.5 t218 -326.5t326.5 -218t398.5 -81t398.5 81t326.5 218t218 326.5t81 398.5t-81 398.5t-218 326.5t-326.5 218t-398.5 81t-398.5 -81t-326.5 -218t-218 -326.5t-81 -398.5z" />
<glyph unicode="&#xe10c;" d="M0 1229q0 200 62 388t175.5 339t264.5 264.5t339 175.5t388 62t388 -62t339 -175.5t264.5 -264.5t175.5 -339t62 -388t-62 -388t-175.5 -339t-264.5 -264.5t-339 -175.5t-388 -62t-388 62t-339 175.5t-264.5 264.5t-175.5 339t-62 388zM205 1229q0 -209 81 -398.5 t218 -326.5t326.5 -218t398.5 -81t398.5 81t326.5 218t218 326.5t81 398.5t-81 398.5t-218 326.5t-326.5 218t-398.5 81t-398.5 -81t-326.5 -218t-218 -326.5t-81 -398.5zM536 1188q0 12 36 49l97 97q37 36 49 36t49 -36l291 -292l633 632q36 37 48 37t49 -37l98 -97 q37 -37 37 -49t-37 -48l-779 -779q-37 -37 -49 -37t-48 37l-438 438q-36 37 -36 49z" />
<glyph unicode="&#xe10d;" d="M0 1229q0 200 62 388t175.5 339t264.5 264.5t339 175.5t388 62t388 -62t339 -175.5t264.5 -264.5t175.5 -339t62 -388t-62 -388t-175.5 -339t-264.5 -264.5t-339 -175.5t-388 -62t-388 62t-339 175.5t-264.5 264.5t-175.5 339t-62 388zM205 1229q0 -209 81 -398.5 t218 -326.5t326.5 -218t398.5 -81t398.5 81t326.5 218t218 326.5t81 398.5t-81 398.5t-218 326.5t-326.5 218t-398.5 81t-398.5 -81t-326.5 -218t-218 -326.5t-81 -398.5z" />
<glyph unicode="&#xe10e;" d="M0 1229q0 200 62 388t175.5 339t264.5 264.5t339 175.5t388 62t388 -62t339 -175.5t264.5 -264.5t175.5 -339t62 -388t-62 -388t-175.5 -339t-264.5 -264.5t-339 -175.5t-388 -62t-388 62t-339 175.5t-264.5 264.5t-175.5 339t-62 388zM205 1229q0 -209 81 -398.5 t218 -326.5t326.5 -218t398.5 -81t398.5 81t326.5 218t218 326.5t81 398.5t-81 398.5t-218 326.5t-326.5 218t-398.5 81t-398.5 -81t-326.5 -218t-218 -326.5t-81 -398.5zM614 1229q0 125 49 238.5t131 196t196 131t239 48.5t238.5 -48.5t196 -131t131 -196t48.5 -238.5 t-48.5 -239t-131 -196t-196 -131t-238.5 -49q-167 0 -308.5 82.5t-224 224t-82.5 308.5z" />
<glyph unicode="&#xe10f;" d="M3 260q75 153 222 288.5t272 196.5q-94 209 -94 424q0 171 56.5 315.5t147.5 242.5t210 168t240 104t241 39q386 18 506 33q222 28 359 108q139 83 291 276q1 2 2 3q0 -210 -15.5 -412.5t-54.5 -424t-99 -413.5t-157.5 -368t-221.5 -300.5t-297.5 -198t-380.5 -73.5 q-398 0 -626 296q-49 -30 -97 -66t-107 -88.5t-110.5 -121.5t-85.5 -143q-83 -68 -149 -28t-52 143zM622 711q51 86 126.5 158.5t190 138.5t193.5 104.5t231 106.5q97 43 147.5 66t141.5 68.5t142.5 77.5t128 84t122 98t101 111t88 131t60 148.5t39.5 173.5 q-50 -124 -134 -228t-184.5 -179t-217.5 -140t-237 -120.5t-239.5 -111.5t-230 -122.5t-202.5 -144t-162 -184.5t-104 -236z" />
<glyph unicode="&#xe110;" d="M410 1638q0 173 62.5 325t171 260.5t260.5 171.5t325 63t325 -63t260.5 -171.5t171 -260.5t62.5 -325q0 -91 -11 -168t-38 -152.5t-46.5 -118t-61.5 -126.5q-9 -17 -13 -26l-240 -474v-389q-98 -52 -204 -80v-50q-204 -108 -410 0v50q-108 29 -205 80v389l-239 474 q-85 168 -111 241q-59 162 -59 350zM615 1646q0 -79 8.5 -140t34.5 -129.5t42 -103.5t64 -128l164 -326h198l-204 430q307 123 614 0l-205 -430h200l165 326q46 91 63.5 127.5t42.5 104t33.5 129t8.5 140.5q0 266 -174 440t-440 174t-440.5 -174t-174.5 -440z" />
<glyph unicode="&#xe111;" d="M1178 51v2355q0 38 6.5 45t44.5 7t44.5 -7t6.5 -45v-2355q0 -38 -6.5 -44.5t-44.5 -6.5t-44.5 6.5t-6.5 44.5z" />
<glyph unicode="&#xe112;" d="M1126 58.5v43.5v2253q0 77 13 90t90 13h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-2253v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5z" />
<glyph unicode="&#xe113;" d="M1075 102v2253q0 25 3.5 43t14 29t20.5 17.5t31.5 9.5t37 3.5t47.5 0.5q38 0 56 -1t41 -6t32.5 -15.5t16.5 -30.5t7 -50v-2253q0 -30 -7 -49.5t-16.5 -30.5t-33 -15.5t-40.5 -5.5t-56 -1q-33 0 -47.5 0.5t-37 3.5t-31.5 9t-20 17t-14.5 29t-3.5 43z" />
<glyph unicode="&#xe114;" d="M1024 102v2253q0 25 7.5 43t24 29t32 17.5t43.5 9.5t46.5 3.5t51.5 0.5t51.5 -0.5t46.5 -3.5t43.5 -9.5t32 -17.5t24 -29t7.5 -43v-2253q0 -25 -7 -43t-24 -29t-32.5 -17.5t-44 -9t-46 -3t-51.5 -0.5t-51.5 0.5t-46 3t-44 9t-32.5 17.5t-24 29t-7 43z" />
<glyph unicode="&#xe115;" d="M922 102v2253q0 24 14.5 42.5t43.5 29.5t56.5 17.5t68.5 9.5t64.5 3.5t59.5 0.5t59.5 -0.5t64.5 -3.5t68.5 -9.5t56.5 -17.5t43.5 -29.5t14.5 -42.5v-2253q0 -24 -14.5 -42.5t-43.5 -29t-56 -17.5t-69 -9.5t-64.5 -3t-59.5 -0.5t-59.5 0.5t-64.5 3t-69 9.5t-56 17.5 t-43.5 29t-14.5 42.5z" />
<glyph unicode="&#xe116;" d="M1178 51v1229q0 38 6.5 44.5t44.5 6.5t44.5 -6.5t6.5 -44.5v-1229q0 -38 -6.5 -44.5t-44.5 -6.5t-44.5 6.5t-6.5 44.5z" />
<glyph unicode="&#xe117;" d="M1126 58.5v43.5v1127v43.5t4.5 27.5t8 18.5t19 8t28 4.5h43.5q77 0 89.5 -12.5t12.5 -89.5v-1127v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5z" />
<glyph unicode="&#xe118;" d="M1075 58.5v43.5v1127v43.5t4.5 27.5t8 18.5t19 8t28 4.5h43.5h102h43.5t28 -4.5t18.5 -7.5t7.5 -18.5t4.5 -28v-43.5v-1127v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-102h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5z" />
<glyph unicode="&#xe119;" d="M1024 58.5v43.5v1127v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h205h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-1127v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-205h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28z" />
<glyph unicode="&#xe11a;" d="M922 58.5v43.5v1127v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h410h43.5t28 -4.5t18.5 -7.5t7.5 -18.5t4.5 -28v-43.5v-1127v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-410h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28z" />
<glyph unicode="&#xe11b;" d="M0 58.5v43.5v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h2253q77 0 90 -13.5t13 -89.5v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-2253h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM0 468.5v43.5v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h2253h43.5t28 -4.5 t19 -8t8 -18.5t4.5 -27.5v-43.5v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-2253h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM0 878.5v43.5v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h2253h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5q0 -76 -13 -89.5 t-90 -13.5h-2253h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28zM0 1287.5v43.5v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h2253q77 0 90 -13t13 -90v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-2253h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM0 1697.5v43.5v43.5t4.5 28 t7.5 18.5t18.5 7.5t28 4.5h43.5h2253h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5q0 -77 -13 -90t-90 -13h-2253h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28zM0 2106.5v43.5v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h2253q77 0 90 -13.5t13 -89.5v-43.5t-4.5 -27.5t-8 -18.5 t-19 -8t-28 -4.5h-43.5h-2253h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28z" />
<glyph unicode="&#xe11c;" d="M115.5 558q-40.5 159 2.5 316t161 275l421 420q62 65 134 102q138 79 294.5 81t293.5 -69.5t223 -199.5l-252 -242q-40 96 -135.5 146.5t-206.5 35.5q-89 -23 -148 -82l-395 -395q-87 -89 -84 -215t92 -215q87 -87 212.5 -89t213.5 85l82 82q66 -27 120.5 -41.5 t132 -14.5t155.5 25l-283 -282q-118 -118 -276 -161t-317.5 -2t-279.5 161t-160.5 279zM829 991l250 242q40 -96 135.5 -146.5t206.5 -35.5q89 23 148 82l381 380q87 89 84 215.5t-92 215.5q-87 87 -212.5 89t-213.5 -85l-82 -82q-66 27 -120.5 41.5t-132 14t-155.5 -25.5 l283 283q118 118 275.5 161t317 2t279.5 -161t161 -279t-2 -316t-161 -275l-405 -406q-66 -66 -134 -102q-139 -79 -296 -81t-293.5 69.5t-221.5 199.5z" />
<glyph unicode="&#xe11d;" d="M-117 1230q0 169 83.5 310.5t225.5 222.5t308 81l596 -1q89 3 166 -22q114 -32 208.5 -103.5t151 -166.5t81 -208t-0.5 -228l-349 7q40 97 9 199.5t-121 170.5q-81 47 -163 47h-559q-123 0 -210.5 -92.5t-87.5 -217.5q0 -123 87.5 -213.5t210.5 -90.5h116 q43 -103 102.5 -179.5t164.5 -130.5h-400q-124 0 -238 48t-197.5 129.5t-133.5 196t-50 241.5zM778 1343l348 -6q-40 -97 -8 -199.5t121 -170.5q78 -46 162 -46h539q123 0 210.5 92t87.5 217q0 123 -87.5 213.5t-210.5 90.5h-116q-42 103 -101.5 179.5t-164.5 130.5h399 q166 0 308 -81t226 -223t84 -311t-83.5 -310.5t-225 -222.5t-307.5 -81h-574q-99 0 -166 21q-154 43 -266 152.5t-159 256.5t-16 298z" />
<glyph unicode="&#xe11e;" d="M615 501l1 595q-3 90 22 167q42 153 151.5 265t256.5 158.5t299 16.5l-8 -349q-97 40 -199.5 8.5t-170.5 -121.5q-46 -79 -46 -162v-559q0 -123 92 -211t217 -88q122 0 213 88t91 211v115q103 43 179.5 102.5t130.5 164.5v-400q0 -166 -81 -308t-223 -226t-311 -84 t-310.5 83.5t-222.5 225.5t-81 308zM615 1558v400q0 166 81 308t223 226t311 84t310.5 -83.5t222.5 -225.5t81 -308v-574q0 -99 -21 -166q-43 -154 -152.5 -266t-256.5 -158.5t-298 -15.5l6 347q97 -39 199.5 -7.5t170.5 121.5q47 79 47 162v538q0 123 -92.5 210.5 t-217.5 87.5q-123 0 -213.5 -87.5t-90.5 -210.5v-116q-103 -42 -179.5 -101.5t-130.5 -164.5z" />
<glyph unicode="&#xe11f;" d="M-328 1229q0 177 78.5 317t219 218.5t317.5 78.5h235q177 0 317.5 -78.5t219 -218.5t78.5 -317q0 -132 -46 -246.5t-127 -195.5t-195.5 -127t-246.5 -46h-235q-132 0 -246.5 46t-195.5 127t-127 195.5t-46 246.5zM-20 1229q0 -125 90.5 -216t253.5 -91h161 q163 0 253.5 91t90.5 216t-90.5 216t-253.5 91h-161q-163 0 -253.5 -91t-90.5 -216zM595.5 256q3.5 12 16.5 25l203 203q13 13 25 16.5t26 -4.5t23 -15.5t27 -25.5t25.5 -27t15.5 -23t4.5 -26t-16.5 -25l-203 -203q-13 -13 -25 -16.5t-26 4.5t-23 15.5t-27 25.5t-25.5 27 t-15.5 23t-4.5 26zM595.5 2202q-3.5 12 4.5 26t15.5 23t25.5 27t27 25.5t23 15.5t26 4.5t25 -16.5l203 -203q13 -13 16.5 -25.5t-4.5 -26.5t-16 -23.5t-25 -26.5t-26.5 -25t-23.5 -15.5t-26 -4t-25 16.5l-203 203q-13 13 -16.5 25zM1137 51v287q0 15 5 25t12 15t21.5 7.5 t24 3t29.5 0.5q25 0 37 -1t27.5 -5.5t21.5 -15.5t6 -29v-287q0 -15 -5 -25t-12 -15t-21.5 -7.5t-24 -3t-29.5 -0.5q-25 0 -37 1t-27.5 5.5t-21.5 15.5t-6 29zM1137 2120v286q0 18 6.5 29.5t21.5 16t27.5 5.5t36.5 1t36.5 -1t27.5 -5.5t21.5 -16t6.5 -29.5v-286 q0 -18 -6.5 -29.5t-21.5 -16t-27.5 -5.5t-36.5 -1t-36.5 1t-27.5 5.5t-21.5 16t-6.5 29.5zM1300 1229q0 177 78.5 317t219 218.5t317.5 78.5h256q177 0 317 -78.5t218.5 -218.5t78.5 -317t-78.5 -317.5t-218.5 -219t-317 -78.5h-256q-132 0 -246.5 46t-195.5 127t-127 195.5 t-46 246.5zM1506.5 379q-3.5 12 4 26t15.5 23.5t25 26.5t26.5 25t23.5 16t26.5 4.5t25.5 -16.5l202 -203q13 -13 16.5 -25t-4 -26t-15.5 -23.5t-25 -26.5t-26.5 -25t-23.5 -16t-26.5 -4.5t-25.5 16.5l-202 203q-13 13 -16.5 25zM1506.5 2078.5q3.5 12.5 16.5 25.5l202 203 q13 13 25.5 16.5t26.5 -4.5t23.5 -16t26.5 -25t25 -26.5t15.5 -23.5t4 -26t-16.5 -25l-202 -203q-13 -13 -25.5 -16.5t-26 4t-23.5 15.5t-27 25t-25 27t-15.5 23.5t-4 26zM1608 1229q0 -125 90.5 -216t253.5 -91h182q163 0 253.5 91t90.5 216t-90.5 216t-253.5 91h-182 q-163 0 -253.5 -91t-90.5 -216z" />
<glyph unicode="&#xe120;" d="M0 1229q0 25 1 37t5.5 27.5t15.5 21.5t29 6h287q15 0 25 -5t15 -12t7.5 -21.5t3 -24t0.5 -29.5q0 -25 -1 -37t-5.5 -27.5t-15.5 -21.5t-29 -6h-287q-15 0 -25 5t-15 12t-7.5 21.5t-3 24t-0.5 29.5zM134.5 717q3.5 12 16.5 25l203 203q13 13 25 16.5t26 -4.5t23 -15.5 t27 -25.5t25.5 -27t15.5 -23t4.5 -26t-16.5 -25l-203 -203q-13 -13 -25 -16.5t-26 4.5t-23 15.5t-27 25.5t-25.5 27t-15.5 23t-4.5 26zM134.5 1750.5q-3.5 12.5 4.5 26.5t16 23.5t25 26.5t26.5 25t23.5 15.5t26 4t25 -16.5l203 -202q13 -13 16.5 -25.5t-4.5 -26.5t-16 -23.5 t-25 -26.5t-26.5 -25t-23.5 -15.5t-26 -4t-25 16.5l-203 202q-13 13 -16.5 25.5zM614 287v235q0 132 46 246.5t127 195.5t195.5 127t246.5 46q177 0 317 -78.5t218.5 -219t78.5 -317.5v-235q0 -177 -78.5 -317.5t-218.5 -219t-317 -78.5q-132 0 -246.5 46t-195.5 127 t-127 195.5t-46 246.5zM614 1915v256q0 177 78.5 317t219 218.5t317.5 78.5t317 -78.5t218.5 -218.5t78.5 -317v-256q0 -177 -78.5 -317.5t-218.5 -219t-317 -78.5q-132 0 -246.5 46t-195.5 127t-127 195.5t-46 246.5zM922 324q0 -163 91 -253.5t216 -90.5t216 90.5 t91 253.5v161q0 163 -91 253.5t-216 90.5t-216 -90.5t-91 -253.5v-161zM922 1952q0 -163 91 -253.5t216 -90.5t216 90.5t91 253.5v182q0 163 -91 253.5t-216 90.5t-216 -90.5t-91 -253.5v-182zM1957.5 840q-3.5 12 4 26t15.5 23.5t25 26.5t26.5 25t23.5 16t26.5 4.5 t25.5 -16.5l203 -203q13 -13 16.5 -25t-4.5 -26t-15.5 -23t-25.5 -27t-27 -25.5t-23 -15.5t-26 -4.5t-25 16.5l-203 203q-13 13 -16.5 25zM1957.5 1627.5q3.5 12.5 16.5 25.5l203 202q13 13 25 16.5t26 -4t23.5 -15.5t26.5 -25t25 -26.5t16 -23.5t4.5 -26.5t-16.5 -25.5 l-203 -202q-13 -13 -25.5 -16.5t-26 4t-23.5 15.5t-27 25t-25 27t-15.5 23.5t-4 26zM2068 1229q0 24 1 36.5t5.5 27.5t16 21.5t29.5 6.5h286q18 0 29.5 -6.5t16 -21.5t5.5 -27.5t1 -36.5t-1 -36.5t-5.5 -27.5t-16 -21.5t-29.5 -6.5h-286q-18 0 -29.5 6.5t-16 21.5t-5.5 27.5 t-1 36.5z" />
<glyph unicode="&#xe121;" d="M0 58.5v43.5v410v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h2048h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-410v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-2048h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM0 878.5v43.5v409v43.5t4.5 28t8 19t18.5 8 t27.5 4.5h43.5h2048q76 0 89.5 -13t13.5 -90v-409v-44t-4.5 -28t-8 -18.5t-18.5 -8t-28 -4.5h-44h-2048h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28zM0 1697.5v43.5v409v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h2048h44t28 -4.5t18.5 -8t8 -18.5t4.5 -28v-44v-409 q0 -77 -13.5 -90t-89.5 -13h-2048h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28z" />
<glyph unicode="&#xe122;" d="M307 1536q0 189 72.5 359.5t196 294t294 196t359.5 72.5t359.5 -72.5t293.5 -196t195.5 -294t72.5 -359.5q0 -76 -13 -152t-32.5 -144t-57.5 -146.5t-73 -141.5t-93.5 -147t-105 -145.5t-122.5 -154.5t-130.5 -157.5t-144.5 -170.5t-149 -177q-60 72 -149.5 177.5 t-144 170t-130.5 157.5t-122.5 155t-105.5 145.5t-94 146.5t-72.5 141t-57.5 146.5t-33 144.5t-13 152zM922 1536q0 -127 90 -217t217 -90t217 90t90 217t-90 217t-217 90t-217 -90t-90 -217z" />
<glyph unicode="&#xe123;" d="M205 58.5v43.5v1434v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h205v205q0 151 55 284.5t149.5 228t228 149.5t284.5 55t284.5 -55t228 -149.5t149.5 -228t55 -284.5v-205h204h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-1434v-43.5t-4.5 -27.5t-8 -18.5t-19 -8 t-28 -4.5h-43.5h-1843h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM819 1638h819v205q0 123 -60 218.5t-152.5 143.5t-196.5 48t-196.5 -48t-153 -143.5t-60.5 -218.5v-205z" />
<glyph unicode="&#xe124;" d="M205 58.5v43.5v1434v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h1331v410q0 123 -60 218.5t-152.5 143.5t-196.5 48t-196.5 -48t-153 -143.5t-60.5 -218.5h-307q0 151 55 284.5t149.5 228t228 149.5t284.5 55t284.5 -55t228 -149.5t149.5 -228t55 -284.5v-410h204h43.5 t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-1434v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-1843h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28z" />
<glyph unicode="&#xe125;" d="M0 1082.5v43.5v205v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h922v409l717 -614l-717 -615v410h-922h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM614 58.5v43.5q0 76 13 89.5t90 13.5h1331v2048h-1331h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5v43.5q0 77 13 90t90 13h1433 q76 0 89.5 -13t13.5 -90v-2253v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-1433h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5z" />
<glyph unicode="&#xe126;" d="M102 1229l717 614v-409h717h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-205v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-717v-410zM614 58.5v43.5q0 76 13 89.5t90 13.5h1331v2048h-1331h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5v43.5q0 77 13 90t90 13 h1433q76 0 89.5 -13t13.5 -90v-2253v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-1433h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5z" />
<glyph unicode="&#xe127;" d="M-84.5 1064q-43.5 165 0 330t167.5 289t289.5 168t331 0t288.5 -168l691 -691q101 -100 237.5 -100t236.5 100t100 237t-100 237t-236.5 100t-237.5 -100l-115 -115l-217 217l115 115q124 124 289 168t330.5 0t288.5 -168q124 -124 168 -289t0 -330t-168 -289 t-288.5 -167.5t-330 0t-289.5 167.5l-692 691q-100 100 -236 100t-237 -100q-100 -100 -100.5 -237t99.5 -237t237.5 -100t237.5 100l115 116l218 -218l-116 -115q-123 -123 -288.5 -167t-331 0t-289.5 167q-124 124 -167.5 289z" />
<glyph unicode="&#xe128;" d="M205 1075v871v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h410h43.5t28 -4.5t18.5 -7.5t7.5 -18.5t4.5 -28v-43.5v-871q0 -50 12.5 -107.5t43.5 -121t76.5 -114.5t117.5 -84.5t160 -33.5q74 0 135 18t102.5 46.5t73.5 69t50 81.5t29.5 88t15 84t3.5 74v871v43.5t4.5 27.5 t8 18.5t19 8t28 4.5h43.5h409h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-871q0 -129 -29 -257.5t-84.5 -249t-143 -223.5t-198 -180t-257 -121t-312.5 -44q-189 0 -353.5 57.5t-286 159t-209 237t-131.5 294t-44 327.5zM205 2355v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5 h410h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5q0 -77 -12.5 -89.5t-89.5 -12.5h-410q-77 0 -89.5 12.5t-12.5 89.5zM1638 2311.5v43.5q0 77 13 90t90 13h409q76 0 89.5 -13t13.5 -90v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-409h-43.5t-28 4.5t-19 8t-8 18.5 t-4.5 27.5z" />
<glyph unicode="&#xe129;" d="M0 468.5v43.5v1229l1229 -819l1229 819v-1229v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-2253h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM0 2048v102v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h2253q77 0 90 -13.5t13 -89.5v-102l-1229 -819z" />
<glyph unicode="&#xe12a;" d="M102 0q0 13 0.5 36.5t6.5 91t15.5 129.5t30.5 140t50 135l573 308q81 40 111 88t33 106q-155 115 -241.5 327.5t-86.5 440.5q0 99 26 194t79.5 178.5t128 147t178.5 100t223 36.5q284 0 459.5 -182t175.5 -474q0 -257 -82 -468.5t-245 -316.5q11 -112 142 -177l574 -308 q45 -91 70.5 -224t28.5 -220l3 -88h-2253zM799 1802q0 -168 55.5 -318.5t155.5 -243.5t219 -93q144 0 242.5 86t143 230t44.5 339q0 64 -12 121q-88 -10 -173.5 -7.5t-163.5 20.5t-166.5 73.5t-181.5 149.5q-77 -65 -120 -160t-43 -197zM922 1741q0 42 30 72t72 30t72 -30 t30 -72q0 -43 -31 -73t-71 -30q-42 0 -72 30.5t-30 72.5zM1048 799q84 -53 176.5 -54t177.5 50q-57 64 -68 145q-44 -8 -105 -8q-53 0 -106 11q-13 -76 -75 -144zM1331 1741q0 46 28.5 74t74.5 28t74 -28t28 -74t-28 -74.5t-74 -28.5t-74.5 28.5t-28.5 74.5z" />
<glyph unicode="&#xe12b;" d="M-102 0q0 13 0.5 36.5t6 91t15 129.5t30.5 140t50 135l573 308q81 40 111 88t33 106q-155 115 -241.5 327.5t-86.5 440.5q0 99 26 194t79.5 178.5t128 147t178.5 100t223 36.5q284 0 459.5 -182t175.5 -474q0 -257 -82 -468.5t-245 -316.5q11 -111 143 -177l573 -308 q45 -91 70.5 -224t28.5 -220l3 -88h-2252zM594 1802q0 -168 55.5 -318.5t155.5 -243.5t219 -93q144 0 242.5 86t143 230t44.5 339q0 69 -11 121q-88 -10 -174 -7.5t-164 20.5t-166.5 73.5t-181.5 149.5q-77 -65 -120 -160t-43 -197zM717 1741q0 42 30 72t72 30 q43 0 73 -29.5t30 -72.5t-31.5 -73t-71.5 -30q-41 0 -71.5 31t-30.5 72zM1126 1741q0 46 28.5 74t74.5 28t74 -28t28 -74t-28 -74.5t-74 -28.5t-74.5 28.5t-28.5 74.5zM1843 1706v70q0 51 8.5 59t59.5 8h137v139q0 51 8.5 59.5t59.5 8.5h69q51 0 59.5 -8.5t8.5 -59.5v-139 h137q51 0 59.5 -8t8.5 -59v-70q0 -51 -8.5 -59.5t-59.5 -8.5h-137v-135q0 -51 -8.5 -59t-59.5 -8h-69q-51 0 -59.5 8t-8.5 59v135h-137q-51 0 -59.5 8.5t-8.5 59.5z" />
<glyph unicode="&#xe12c;" d="M102 0q0 13 0.5 36.5t6.5 91t15.5 129.5t30.5 140t50 135l573 308q114 58 137 145q-225 94 -365 300t-140 456q0 166 65 318t174.5 261.5t261.5 174.5t318 65t318 -65t261.5 -174.5t174.5 -261.5t65 -318q0 -252 -140 -457.5t-365 -299.5q23 -88 136 -144l574 -308 q45 -91 70.5 -224t28.5 -220l3 -88h-819l-37 595q-131 -80 -270 -80t-270 80l-37 -595h-820zM799 1781q0 -149 37.5 -272.5t99.5 -201t138 -120t155 -42.5t154.5 42t137.5 119.5t100 201t38 273.5q0 23 -1 36.5t-9 39t-23.5 41.5t-47 36.5t-76 32t-114.5 20t-159 8.5 t-159 -7.5t-114.5 -18.5t-76 -30.5t-47 -35t-23.5 -41.5t-9 -40.5t-1 -40.5zM922 1741q0 46 28 74t74 28t74 -28t28 -74t-28 -74.5t-74 -28.5t-74 28.5t-28 74.5zM1056 795q83 -50 173 -50t173 50q-53 61 -66 134q-49 -7 -107 -7t-107 7q-13 -73 -66 -134zM1331 1741 q0 46 28.5 74t74.5 28t74 -28t28 -74t-28 -74.5t-74 -28.5t-74.5 28.5t-28.5 74.5z" />
<glyph unicode="&#xe12d;" d="M102 0q0 13 0.5 36.5t6.5 91t15.5 129.5t30.5 140t50 135l573 308q78 39 109 85t35 101q-154 117 -241 332.5t-87 443.5q0 99 26 194t79.5 178.5t128 147t178.5 100t223 36.5q284 0 459.5 -182t175.5 -474q0 -168 -32 -316.5t-107 -277.5t-187 -201q15 -104 141 -167 l574 -308q45 -91 70.5 -224t28.5 -220l3 -88h-819l-37 595q-75 -46 -161 -67l44 -528h-307l44 528q-84 20 -160 67l-37 -595h-820zM799 1802q0 -122 33 -240.5t89 -210t137 -148t171 -56.5q112 0 196 50t134.5 140t75 206.5t24.5 258.5q0 63 -11 121q-62 -5 -100 -6.5 t-93.5 0t-95 10t-92 25.5t-97 44.5t-97.5 69t-106 97.5q-79 -64 -123.5 -160.5t-44.5 -200.5zM922 1741q0 46 28 74t74 28t74 -28t28 -74t-28 -74.5t-74 -28.5t-74 28.5t-28 74.5zM1048 799q84 -53 176.5 -54t177.5 50q-53 59 -66 135q-45 -8 -107 -8q-55 0 -108 11 q-14 -69 -73 -134zM1331 1741q0 46 28.5 74t74.5 28t74 -28t28 -74t-28 -74.5t-74 -28.5t-74.5 28.5t-28.5 74.5z" />
<glyph unicode="&#xe12e;" d="M102 0q0 13 0.5 36.5t6.5 91t15.5 129.5t30.5 140t50 135l573 308q78 39 109 85t35 101q-154 117 -241 332.5t-87 443.5q0 99 26 194t79.5 178.5t128 147t178.5 100t223 36.5q170 0 304 -67.5t218 -190.5q33 -36 71.5 -53.5t90 -10t105.5 47.5q-32 -143 -173 -207 q19 -87 19 -175q0 -168 -32 -316.5t-107 -277.5t-187 -201q15 -104 141 -167l574 -308q45 -91 70.5 -224t28.5 -220l3 -88h-819l-37 595q-131 -80 -270 -80t-270 80l-37 -595h-820zM799 1811q64 32 174 32h512q110 0 174 -32q0 57 -11 112q-62 -5 -100 -6.5t-93.5 0t-95 10 t-92 25.5t-97 44.5t-97.5 69t-106 97.5q-78 -63 -122 -157t-46 -195zM843 1518q53 -166 156 -268.5t230 -102.5q162 0 261.5 100.5t140.5 278.5q-74 -40 -177 -39q-29 -1 -58 9.5t-55.5 32t-43.5 61t-17 91.5v60h-102v-60q0 -52 -17 -91.5t-43.5 -61t-55.5 -32t-58 -9.5 q-91 -1 -161 31zM1048 799q84 -53 176.5 -54t177.5 50q-53 59 -66 135q-45 -8 -107 -8q-55 0 -108 11q-14 -69 -73 -134z" />
<glyph unicode="&#xe12f;" d="M102 0q0 13 0.5 36.5t6.5 91t15.5 129.5t30.5 140t50 135l573 308q78 39 109 85t35 101q-152 114 -241 332q-60 -107 -106 -208q-49 170 -65.5 332.5t0 308t70.5 267t140 210.5t214.5 139t288.5 51h6h1q165 0 290.5 -45.5t207.5 -128t132 -203.5t67.5 -264t8.5 -318 l-88 82q-28 -191 -105 -341t-205 -233q15 -104 141 -167l574 -308q45 -91 70.5 -224t28.5 -220l3 -88h-819l-37 595q-131 -80 -270 -80t-270 80l-37 -595h-820zM826 1581q47 -187 156 -310.5t247 -123.5q112 0 196 50t134.5 140t75 206.5t24.5 258.5q0 85 -18 154 q-172 -1 -302.5 -26.5t-253.5 -103.5q41 -28 41 -85q0 -46 -28 -74.5t-74 -28.5q-34 0 -59 16t-36 45q-52 -52 -103 -118zM1049 799q84 -53 176 -54t177 50q-53 59 -66 135q-45 -8 -107 -8q-55 0 -108 11q-14 -70 -72 -134zM1331 1741q0 46 28.5 74t74.5 28t74 -28t28 -74 t-28 -74.5t-74 -28.5t-74.5 28.5t-28.5 74.5z" />
<glyph unicode="&#xe130;" d="M102 0q0 13 0.5 36.5t6.5 91t15.5 129.5t30.5 140t50 135l573 308q80 40 110 86.5t34 102.5q-99 79 -170 208t-104.5 273t-33.5 292v656q277 123 614.5 123t614.5 -123v-656q0 -169 -28.5 -315.5t-99 -276t-177.5 -201.5q7 -50 38 -91.5t103 -77.5l574 -308 q45 -91 70.5 -224t28.5 -220l3 -88h-2253zM799 1802q0 -122 33 -240.5t89 -210t137 -148t171 -56.5q112 0 196 50t134.5 140t75 206.5t24.5 258.5q0 46 -6.5 81.5t-24.5 61t-34 43.5t-51.5 29.5t-59.5 17.5t-75.5 9t-82.5 3.5t-96 0.5t-96 -0.5t-82.5 -3.5t-75.5 -9 t-59.5 -17.5t-51.5 -29.5t-34 -43.5t-24.5 -61t-6.5 -81.5zM922 1741q0 46 28 74t74 28t74 -28t28 -74t-28 -74.5t-74 -28.5t-74 28.5t-28 74.5zM1048 799q84 -53 176 -54t177 49q-53 61 -66 136q-45 -8 -106 -8q-55 0 -108 11q-14 -69 -73 -134zM1126 205q0 -43 30 -73 t73 -30t72.5 30t29.5 73t-29.5 72.5t-72.5 29.5t-73 -29.5t-30 -72.5zM1126 512q0 -43 30 -72.5t73 -29.5t72.5 29.5t29.5 72.5t-29.5 72.5t-72.5 29.5t-73 -29.5t-30 -72.5zM1331 1741q0 46 28.5 74t74.5 28t74 -28t28 -74t-28 -74.5t-74 -28.5t-74.5 28.5t-28.5 74.5z" />
<glyph unicode="&#xe131;" d="M102 0q0 13 0.5 36.5t6.5 91t15.5 129.5t30.5 140t50 135l573 308q80 40 110 86.5t34 102.5q-99 79 -170 208t-104.5 273t-33.5 292q0 32 3 63q-77 -15 -105 -22v205q80 18 121 25l2 16q16 122 73 220.5t138 159t181 93t202 32.5t202 -32.5t181 -93.5t138 -159t73 -220 l2 -16q41 -7 121 -25v-205q-28 7 -105 22q2 -40 2 -63q0 -169 -28.5 -315.5t-99 -276t-177.5 -201.5q7 -50 38 -91.5t103 -77.5l574 -308q45 -91 70.5 -224t28.5 -220l3 -88h-2253zM799 1802q0 -122 33 -240.5t89 -210t137 -148t171 -56.5q112 0 196 50t134.5 140t75 206.5 t24.5 258.5q0 48 -6 92q-427 53 -845 1q-9 -45 -9 -93zM922 1741q0 46 28 74t74 28t74 -28t28 -74t-28 -74.5t-74 -28.5t-74 28.5t-28 74.5zM1048 799q84 -53 176.5 -54t177.5 50q-53 59 -66 135q-45 -8 -107 -8q-55 0 -108 11q-14 -69 -73 -134zM1331 1746q0 43 30 72.5 t73 29.5t72.5 -29.5t29.5 -72.5t-29.5 -72.5t-72.5 -29.5t-73 29.5t-30 72.5zM1436 206h411v104l-209 164l-202 -164v-104z" />
<glyph unicode="&#xe132;" d="M102 0q0 13 0.5 36.5t6.5 91t15.5 129.5t30.5 140t50 135l439 236q21 69 23.5 161.5t-8.5 196t-25.5 208t-27 233t-12.5 235.5q0 99 26 194t79.5 178.5t128 147t178.5 100t223 36.5q284 0 459.5 -182t175.5 -474v-3v-2q0 -127 -19.5 -291t-37.5 -275t-25 -247.5 t17 -207.5l454 -244q45 -91 70.5 -224t28.5 -220l3 -88h-2253zM799 1802q0 -122 33 -240.5t89 -210t137 -148t171 -56.5q112 0 196 50t134.5 140t75 206.5t24.5 258.5q0 214 -114.5 332.5t-315.5 118.5q-128 0 -228 -66.5t-151 -168.5t-51 -216zM922 1741q0 46 28 74t74 28 t74 -28t28 -74t-28 -74.5t-74 -28.5t-74 28.5t-28 74.5zM1331 1741q0 46 28.5 74t74.5 28t74 -28t28 -74t-28 -74.5t-74 -28.5t-74.5 28.5t-28.5 74.5z" />
<glyph unicode="&#xe133;" d="M102 0q0 13 0.5 36.5t6.5 91t15.5 129.5t30.5 140t50 135l573 308q80 40 110 86.5t34 102.5q-99 79 -170 206q-29 -99 -73 -180q-27 -51 -58 -92t-47 -57t-27 -23l-136 164q16 14 29.5 26.5t49 61.5t59.5 103.5t44.5 148t20.5 199.5v216q0 37 5 84q-139 -15 -312 -43v205 q146 24 323 44l25 262q5 45 34 74.5t73 29.5h933q44 0 73 -29.5t34 -74.5l26 -262q174 -19 322 -44v-205q-175 29 -311 43q4 -36 4 -84v-216q0 -106 20.5 -199.5t44.5 -148t60 -103.5t49 -61.5t30 -26.5l-137 -164q-11 7 -27 23t-47 57t-58 92q-40 76 -64 151 q-71 -127 -176 -197q7 -50 38 -91.5t103 -77.5l574 -308q45 -91 70.5 -224t28.5 -220l3 -88h-2253zM410 1046v3v-3zM799 1802q0 -122 33 -240.5t89 -210t137 -148t171 -56.5q112 0 196 50t134.5 140t75 206.5t24.5 258.5q0 51 -8 102q-420 32 -841 0q-11 -52 -11 -102z M922 1741q0 46 28 74t74 28t74 -28t28 -74t-28 -74.5t-74 -28.5t-74 28.5t-28 74.5zM1048 799q84 -53 176.5 -54t177.5 50q-53 59 -66 135q-45 -8 -107 -8q-55 0 -108 11q-14 -69 -73 -134zM1331 1741q0 46 28.5 74t74.5 28t74 -28t28 -74t-28 -74.5t-74 -28.5t-74.5 28.5 t-28.5 74.5zM2047 1047l1 2z" />
<glyph unicode="&#xe134;" d="M102 0q0 13 0.5 36.5t6.5 91t15.5 129.5t30.5 140t50 135l573 308q80 40 110 86.5t34 102.5q-99 79 -170 208t-104.5 273t-33.5 292q0 126 39.5 241.5t113.5 209t194 149.5t268 56q187 0 326.5 -83t213.5 -231t74 -342q0 -169 -28.5 -315.5t-99 -276t-177.5 -201.5 q7 -50 38 -91.5t103 -77.5l574 -308q45 -91 70.5 -224t28.5 -220l3 -88h-2253zM799 1802q0 -122 33 -240.5t89 -210t137 -148t171 -56.5q112 0 196 50t134.5 140t75 206.5t24.5 258.5q0 214 -114.5 332.5t-315.5 118.5q-128 0 -228 -66.5t-151 -168.5t-51 -216zM922 1741 q0 46 28 74t74 28t74 -28t28 -74t-28 -74.5t-74 -28.5t-74 28.5t-28 74.5zM1119 921l1 1l111 -319l107 314q0 2 -1 6.5t-2 6.5q-45 -8 -106 -8q-55 0 -108 11q-1 -2 -1 -6t-1 -6zM1331 1741q0 46 28.5 74t74.5 28t74 -28t28 -74t-28 -74.5t-74 -28.5t-74.5 28.5t-28.5 74.5z " />
<glyph unicode="&#xe135;" d="M102 0q0 12 0.5 34t6.5 86t15.5 124t30.5 135.5t50 132.5l512 279v509q-103 226 -103 492q0 136 39 255.5t114 211.5t194 145.5t268 53.5q134 0 247 -47t194.5 -132t127 -210.5t45.5 -276.5q0 -309 -102 -527v-474l512 -279q45 -91 70.5 -219t28.5 -211l3 -82h-819 l-18 286q-149 -81 -289 -81q-141 0 -290 81l-17 -286h-820zM819 1792q0 -231 96 -423q155 116 314 116q174 0 334 -132q75 165 75 439q0 78 -12 142q-78 -16 -157.5 -13.5t-156 22.5t-164 73.5t-181.5 141.5q-71 -63 -109.5 -158t-38.5 -208zM922 1741q0 38 32 70t70 32 t70 -32t32 -70t-32 -70.5t-70 -32.5t-70 32.5t-32 70.5zM1023 1217q24 -24 51 -42q91 -49 155 -49q85 0 208 64q1 1 17 14q-104 76 -225 76q-107 0 -206 -63zM1331 1741q0 38 32.5 70t70.5 32t70 -32t32 -70t-32 -70.5t-70 -32.5t-70.5 32.5t-32.5 70.5z" />
<glyph unicode="&#xe136;" d="M102 0q0 13 0.5 36.5t6.5 91t15.5 129.5t30.5 140t50 135l573 308q78 39 109 85t35 101q-154 117 -241 332.5t-87 443.5q0 99 26 194t79.5 178.5t128 147t178.5 100t223 36.5q284 0 459.5 -182t175.5 -474q0 -168 -32 -316.5t-107 -277.5t-187 -201q15 -104 141 -167 l574 -308q45 -91 70.5 -224t28.5 -220l3 -88h-2253zM799 1802q0 -238 110 -429q167 120 320 120q164 0 341 -136q89 169 89 445q0 214 -114.5 332.5t-315.5 118.5q-128 0 -228 -66.5t-151 -168.5t-51 -216zM922 1741q0 46 28 74t74 28t74 -28t28 -74t-28 -74.5t-74 -28.5 t-74 28.5t-28 74.5zM1045 1213q86 -66 184 -66q117 0 202 53q-115 84 -202 84q-79 0 -184 -71zM1048 799q84 -53 176.5 -54t177.5 50q-53 59 -66 135q-45 -8 -107 -8q-55 0 -108 11q-14 -69 -73 -134zM1331 1741q0 46 28.5 74t74.5 28t74 -28t28 -74t-28 -74.5t-74 -28.5 t-74.5 28.5t-28.5 74.5z" />
<glyph unicode="&#xe137;" d="M102 0q0 13 0.5 36.5t6.5 91t15.5 129.5t30.5 140t50 135l573 308q78 39 109 85t35 101q-154 117 -241 332.5t-87 443.5q0 140 50.5 267t154.5 226t246 138l-21 228q205 61 410 0l-22 -226q208 -54 330 -223t122 -410q0 -168 -32 -316.5t-107 -277.5t-187 -201 q15 -104 141 -167l574 -308q45 -91 70.5 -224t28.5 -220l3 -88h-819l-37 595q-131 -80 -270 -80t-270 80l-37 -595h-820zM799 1802q0 -122 33 -240.5t89 -210t137 -148t171 -56.5q112 0 196 50t134.5 140t75 206.5t24.5 258.5q0 170 -74 281t-209 150l-147 -207l-145 202 q-131 -47 -208 -166.5t-77 -259.5zM922 1741q0 46 28 74t74 28t74 -28t28 -74t-28 -74.5t-74 -28.5t-74 28.5t-28 74.5zM1048 799q84 -53 176.5 -54t177.5 50q-53 59 -66 135q-45 -8 -107 -8q-55 0 -108 11q-14 -69 -73 -134zM1331 1741q0 46 28.5 74t74.5 28t74 -28t28 -74 t-28 -74.5t-74 -28.5t-74.5 28.5t-28.5 74.5z" />
<glyph unicode="&#xe138;" d="M-102 0q0 13 0.5 36.5t6 91t15 129.5t30.5 140t50 135l573 308q81 40 111 88t33 106q-155 115 -241.5 327.5t-86.5 440.5q0 99 26 194t79.5 178.5t128 147t178.5 100t223 36.5q284 0 459.5 -182t175.5 -474q0 -257 -82 -468.5t-245 -316.5q11 -111 143 -177l573 -308 q45 -91 70.5 -224t28.5 -220l3 -88h-2252zM594 1802q0 -168 55.5 -318.5t155.5 -243.5t219 -93q144 0 242.5 86t143 230t44.5 339q0 69 -11 121q-88 -10 -174 -7.5t-164 20.5t-166.5 73.5t-181.5 149.5q-77 -65 -120 -160t-43 -197zM717 1741q0 42 30 72t72 30 q43 0 73 -29.5t30 -72.5t-31.5 -73t-71.5 -30q-41 0 -71.5 31t-30.5 72zM1126 1741q0 46 28.5 74t74.5 28t74 -28t28 -74t-28 -74.5t-74 -28.5t-74.5 28.5t-28.5 74.5zM1843 1706v70q0 51 8.5 59t59.5 8h479q51 0 59.5 -8t8.5 -59v-70q0 -51 -8.5 -59.5t-59.5 -8.5h-479 q-51 0 -59.5 8.5t-8.5 59.5z" />
<glyph unicode="&#xe139;" d="M102 0q0 13 0.5 36.5t6.5 91t15.5 129.5t30.5 140t50 135l573 308q78 39 109 85t35 101q-154 117 -241 332.5t-87 443.5q0 99 26 194t79.5 178.5t128 147t178.5 100t223 36.5q284 0 459.5 -182t175.5 -474q0 -168 -32 -316.5t-107 -277.5t-187 -201q15 -104 141 -167 l574 -308q45 -91 70.5 -224t28.5 -220l3 -88h-2253zM205 1218v1240h205v-1240q0 -87 36 -139t91 -52t112 57l75 72l146 -147l-74 -74q-120 -118 -258 -118t-235.5 107.5t-97.5 293.5zM819 1742q0 -85 60 -145.5t143 -60.5h412q84 0 144 60.5t60 145.5q0 83 -60 143.5 t-144 60.5h-412q-83 0 -143 -60.5t-60 -143.5zM922 1741q0 46 28 74t74 28t74 -28t28 -74t-28 -74.5t-74 -28.5t-74 28.5t-28 74.5zM927 1343q59 -92 137 -144t165 -52q228 0 340 207q-64 -23 -135 -23h-412q-42 0 -95 12zM944 2143q36 7 78 7h412q56 0 109 -15 q-113 118 -314 118q-167 0 -285 -110zM1048 799q84 -53 176.5 -54t177.5 50q-53 59 -66 135q-45 -8 -107 -8q-55 0 -108 11q-14 -69 -73 -134zM1331 1741q0 46 28.5 74t74.5 28t74 -28t28 -74t-28 -74.5t-74 -28.5t-74.5 28.5t-28.5 74.5z" />
<glyph unicode="&#xe13a;" d="M98 698l461 255l109 -173l110 60q80 40 110 86.5t34 102.5q-155 123 -238 360q-70 16 -133 50l6 446q0 187 95 344.5t253 245.5q144 85 327 85q276 0 451 -175q105 -94 164 -224t59 -276v-446q-50 -30 -116 -47q-78 -266 -252 -383q7 -50 38 -91.5t103 -77.5l111 -60 l108 173l461 -255l-106 -166q45 -91 70.5 -224t28.5 -220l3 -88h-2253q0 13 0.5 36.5t6.5 91t15.5 129.5t30.5 140t50 135zM819 1741q0 -149 45.5 -284.5t126.5 -221.5q220 66 512 2q135 149 135 504h-102q0 -46 -28 -74.5t-74 -28.5t-74.5 28.5t-28.5 74.5h-205 q0 -46 -28 -74.5t-74 -28.5t-74 28.5t-28 74.5h-103zM1843 307q0 -46 28.5 -74t74.5 -28t74 28t28 74t-28 74.5t-74 28.5t-74.5 -28.5t-28.5 -74.5z" />
<glyph unicode="&#xe13b;" d="M102 0q0 13 0.5 36.5t6.5 91t15.5 129.5t30.5 140t50 135l573 308q78 39 108.5 84.5t34.5 101.5q-126 96 -207 259t-108 352q-39 3 -66.5 32t-27.5 69q0 39 23.5 67.5t59.5 35.5q5 75 22 143l-6 4q-37 21 -46.5 62t13.5 76q18 32 52.5 44.5t67.5 1.5q43 70 102 124l-9 17 q-21 37 -9 77t49 61t77 9t61 -49l2 -3q72 30 156 42v6q0 43 30.5 73.5t71.5 30.5t71.5 -30.5t30.5 -73.5v-5q87 -12 157 -41v1q21 37 61.5 49t77.5 -9t49 -61t-9 -77l-6 -12q62 -56 105 -127q32 8 64.5 -5t49.5 -43q23 -35 13 -76t-47 -62l-3 -3q17 -72 20 -144 q36 -7 59.5 -35.5t23.5 -67.5q0 -38 -26.5 -67t-64.5 -34q-22 -210 -101 -375.5t-216 -254.5q15 -104 141 -167l574 -308q45 -91 70.5 -224t28.5 -220l3 -88h-2253zM799 1802q0 -122 33 -240.5t89 -210t137 -148t171 -56.5q112 0 196 50t134.5 140t75 206.5t24.5 258.5 q0 214 -114.5 332.5t-315.5 118.5q-128 0 -228 -66.5t-151 -168.5t-51 -216zM922 1741q0 46 28 74t74 28t74 -28t28 -74t-28 -74.5t-74 -28.5t-74 28.5t-28 74.5zM1048 799q84 -53 176.5 -54t177.5 50q-53 59 -66 135q-45 -8 -107 -8q-55 0 -108 11q-14 -69 -73 -134z M1331 1741q0 46 28.5 74t74.5 28t74 -28t28 -74t-28 -74.5t-74 -28.5t-74.5 28.5t-28.5 74.5z" />
<glyph unicode="&#xe13c;" d="M102 0q0 13 0.5 36.5t6.5 91t15.5 129.5t30.5 140t50 135l573 308q81 40 111 88t33 106q-155 115 -241.5 327.5t-86.5 440.5q0 99 26 194t79.5 178.5t128 147t178.5 100t223 36.5q284 0 459.5 -182t175.5 -474q0 -257 -82 -468.5t-245 -316.5q11 -112 142 -177l574 -308 q45 -91 70.5 -224t28.5 -220l3 -88h-2253zM799 1802q0 -168 55.5 -318.5t155.5 -243.5t219 -93q144 0 242.5 86t143 230t44.5 339q0 64 -12 121q-88 -10 -173.5 -7.5t-163.5 20.5t-166.5 73.5t-181.5 149.5q-77 -65 -120 -160t-43 -197zM922 1741q0 42 30 72t72 30 q43 0 72.5 -29.5t29.5 -72.5t-31 -73t-71 -30q-41 0 -71.5 31t-30.5 72zM1331 1741q0 46 28.5 74t74.5 28t74 -28t28 -74t-28 -74.5t-74 -28.5t-74.5 28.5t-28.5 74.5z" />
<glyph unicode="&#xe13d;" d="M-26 1280q0 90 77 205l768 256q-115 -230 -115 -454.5t115 -416.5l-51 -665q-49 -49 -115 -54.5t-128 23.5t-115 82l50 710l-409 109q-77 115 -77 205zM908 1305.5q0 256.5 116 486.5l1229 461q170 -189 258.5 -432t88.5 -489.5t-88.5 -489.5t-258.5 -432l-1229 409 q-116 230 -116 486.5zM2008 1041q56 -218 194 -427q230 346 230 717t-230 717q-137 -205 -192 -417q128 -131 127.5 -282t-129.5 -308z" />
<glyph unicode="&#xe13e;" d="M0 58.5v43.5v308v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h2253h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-308v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-2253h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM0 929.5v43.5v307v43.5t4.5 28t7.5 18.5 t18.5 7.5t28 4.5h43.5h2253h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-307q0 -77 -13 -90t-90 -13h-2253h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28zM0 1799.5v43.5v307v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h2253q77 0 90 -13.5t13 -89.5v-307v-43.5t-4.5 -27.5 t-8 -18.5t-19 -8t-28 -4.5h-43.5h-2253h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28z" />
<glyph unicode="&#xe13f;" d="M-102 1434l460 972l461 -972h-307v-461q0 -192 134.5 -326.5t326.5 -134.5h1382h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-103v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-1382q-228 0 -402.5 95.5t-270 270t-95.5 402.5v461h-307zM666 2355h1689h43.5 t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-103v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-1536zM768 1024v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h1485h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-102q0 -76 -13 -89.5t-90 -13.5h-1382q-115 0 -160 44.5 t-45 160.5zM973 1741h1382q77 0 90 -13.5t13 -89.5v-102v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-1229z" />
<glyph unicode="&#xe140;" d="M0 468.5v43.5v1638v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h2253q77 0 90 -13.5t13 -89.5v-1638v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-1331l-614 -615v615h-308h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM563 1331q0 -64 45 -108.5t109 -44.5 t108.5 44.5t44.5 108.5t-44.5 109t-108.5 45t-109 -45t-45 -109zM1075 1331q0 -64 45 -108.5t109 -44.5t108.5 44.5t44.5 108.5t-44.5 109t-108.5 45t-109 -45t-45 -109zM1587 1331q0 -64 45 -108.5t109 -44.5t108.5 44.5t44.5 108.5t-44.5 109t-108.5 45t-109 -45t-45 -109 z" />
<glyph unicode="&#xe141;" d="M0 468.5v43.5v1638v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h2253q77 0 90 -13.5t13 -89.5v-1638v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-1331l-614 -615v615h-308h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM676 1246.5q0 -12.5 4.5 -28t7.5 -18.5 t18.5 -7.5t28 -4.5h43.5h307v-307q0 -77 13.5 -90t89.5 -13h82h43.5t27.5 4.5t18.5 8t8 19t4.5 28v43.5v307h307h43.5t28 4.5t19 8t8 18.5t4.5 27.5v43.5v82q0 76 -13 89.5t-90 13.5h-307v307v43.5t-4.5 28t-7.5 18.5t-18.5 7.5t-28 4.5h-43.5h-82h-43.5t-28 -4.5t-19 -8 t-8 -18.5t-4.5 -27.5v-43.5v-307h-307h-43.5t-27.5 -4.5t-18.5 -8t-8 -19t-4.5 -28v-43.5v-82v-43.5z" />
<glyph unicode="&#xe142;" d="M0 468.5v43.5v1638v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h2253q77 0 90 -13.5t13 -89.5v-1638v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-1331l-614 -615v615h-308h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28z" />
<glyph unicode="&#xe143;" d="M0 468.5v43.5v1229v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h1639q77 0 89.5 -12.5t12.5 -89.5v-1229v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-922l-409 -410v410h-308h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM410 1082.5q0 -12.5 4.5 -28 t7.5 -18.5t18.5 -7.5t28 -4.5h43.5h43.5t28 4.5t18.5 7.5t7.5 18.5t4.5 28v43.5v43.5t-4.5 28t-8 19t-18.5 8t-27.5 4.5h-43.5h-43.5t-27.5 -4.5t-18.5 -8t-8 -19t-4.5 -28v-43.5v-43.5zM819 1082.5q0 -12.5 4.5 -27.5t8 -18.5t19 -8t28 -4.5h43.5h43.5t28 4.5t18.5 7.5 t7.5 18.5t4.5 28v43.5v43.5t-4.5 28t-8 19t-18.5 8t-27.5 4.5h-43.5h-44t-28 -4.5t-18.5 -8t-8 -18.5t-4.5 -28v-44v-43.5zM819 1946v409q0 77 13.5 90t89.5 13h1638h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-1229v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5 h-43.5h-102v-410l-410 410h-102v922h-1127zM1229 1082.5q0 -12.5 4.5 -28t7.5 -18.5t18.5 -7.5t28 -4.5h43.5h43.5t28 4.5t19 8t8 18.5t4.5 27.5v43.5q0 76 -13 89.5t-90 13.5h-43.5t-27.5 -4.5t-18.5 -8t-8 -19t-4.5 -28v-43.5v-43.5z" />
<glyph unicode="&#xe144;" d="M342 1000q1 5 11 17.5t20 19.5t36 25l1510 1058q26 18 35.5 25t25 12.5t20 4.5t17 -11t19.5 -20t25 -36t25 -36t12.5 -25t4.5 -20t-11 -17.5t-20 -19.5t-36 -25l-398 -279v-444q0 -123 -60 -218.5t-152.5 -143.5t-196.5 -48q-133 0 -244.5 78.5t-149.5 212.5l-308 -216 q-26 -18 -36 -25t-25 -12.5t-20 -4.5t-17.5 11t-19.5 20t-25 36t-25 36t-12.5 25t-4.5 20zM592 707l176 112q74 -96 194.5 -150.5t266.5 -54.5q177 0 317 78.5t218.5 219t78.5 317.5v102q0 77 13.5 90t89.5 13h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-102 q0 -310 -187 -526.5t-530 -292.5v-308v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5v43.5v308q-340 75 -534 297zM819 1614v434q0 123 60.5 218.5t153 143.5t196.5 48q133 0 244 -78.5t149 -212.5z" />
<glyph unicode="&#xe145;" d="M0 468.5v43.5v1434v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5l1024 -186v493q0 77 13 90t90 13h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-493l1024 186h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-1434v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5 l-1024 186v-494v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5v43.5v494l-1024 -186h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM1331 819l922 -153v1177l-922 -205v-819z" />
<glyph unicode="&#xe146;" d="M-410 512v1434v43.5t4.5 27t8 17.5t19 5t28 0t43.5 -7l1126 -171q31 -5 44 -7t28 -9.5t18.5 -11.5t8 -20t4.5 -28.5v-43.5v-1024q0 -77 -13 -91.5t-90 -26.5l-1126 -172q-77 -13 -90 -2t-13 87zM-205 648l922 142v878l-922 141v-1161zM437 2179q-6 10 7 58 q36 127 85 218.5t129 174.5q113 111 261.5 174t309.5 63t317 -64.5t271 -172.5l99 -93l132 127v-411h-417l147 148l-103 84q-99 79 -215 128t-233 50q-120 0 -229.5 -47t-194.5 -131q-60 -66 -93.5 -124t-70.5 -172q-14 -51 -24 -57t-55 8l-69 17q-48 12 -54 22zM1126 205 v43.5t4.5 27.5t8 18.5t19 8t28 4.5h43.5q77 0 89.5 -12.5t12.5 -89.5v-43.5t-4.5 -28t-8 -19t-18.5 -8t-27.5 -4.5h-43.5q-77 0 -90 13t-13 90zM1126 570.5v43.5q0 76 13 89.5t90 13.5h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5 t-28 -4.5h-43.5h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5zM1126 980.5v43.5v43.5t4.5 27.5t8 18.5t19 8t28 4.5h43.5h43.5t28 -4.5t18.5 -7.5t7.5 -18.5t4.5 -28v-43.5v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5z M1126 1434v43.5t4.5 27.5t8 18.5t19 8t28 4.5h43.5h43.5t28 -4.5t18.5 -7.5t7.5 -18.5t4.5 -28v-43.5v-43.5t-4.5 -28t-8 -19t-18.5 -8t-27.5 -4.5h-43.5q-77 0 -90 13.5t-13 89.5zM1126 1799.5v43.5q0 77 13 90t90 13h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5 q0 -77 -12.5 -89.5t-89.5 -12.5h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5zM1126 2253v43.5t4.5 27.5t8 18.5t19 8t28 4.5h43.5q77 0 89.5 -12.5t12.5 -89.5v-43.5t-4.5 -28t-8 -19t-18.5 -8t-27.5 -4.5h-43.5q-77 0 -90 13t-13 90zM1536 673.5v43.5v1024v43.5t4.5 28.5 t7.5 20t18 11t27 9t43 7l1131 173q31 5 43 6.5t27 -0.5t18 -5t7.5 -17.5t4.5 -27v-43.5v-1434v-43.5t-4.5 -27t-7.5 -17.5t-18 -5t-27 -0.5t-43 6.5l-1131 173q-31 5 -43 7t-27 9t-18 11t-7.5 20t-4.5 28.5z" />
<glyph unicode="&#xe147;" d="M0 1185.5v43.5v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h494l-186 1024q-5 26 -6.5 42.5t2.5 29t9.5 18t21.5 9t30.5 4t44.5 0.5h1434q30 0 44.5 -0.5t30.5 -4t21.5 -9t9.5 -18t2.5 -29t-6.5 -42.5l-186 -1024h493h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5 q0 -77 -13 -90t-90 -13h-495l168 -1024q4 -26 5.5 -42.5t-3 -28.5t-9 -18t-21.5 -9t-30.5 -3.5t-44.5 -0.5h-1413q-31 0 -45 0.5t-30.5 3.5t-21 9t-9 18t-3 28.5t6.5 42.5l186 1024h-494h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28zM636 205h1167l-151 921h-848z" />
<glyph unicode="&#xe148;" d="M-420 1229q0 161 65 317t173 271l92 99l-127 132h412v-417l-149 147l-83 -103q-80 -99 -129 -215.5t-49 -232.5q0 -121 46.5 -230t131.5 -194q65 -59 123 -93t173 -71q51 -14 57 -24t-8 -55l-17 -69q-12 -48 -22.5 -54t-58.5 7q-127 36 -218 85t-174 129 q-111 113 -174.5 261.5t-63.5 309.5zM92 1229v43.5t4.5 27.5t8 18.5t19 8t28 4.5h43.5q77 0 89.5 -12.5t12.5 -89.5v-43.5t-4.5 -28t-8 -19t-18.5 -8t-27.5 -4.5h-43.5q-77 0 -90 13t-13 90zM408.5 2810q-1.5 12 0.5 27t5 18t17.5 7.5t27 4.5h43.5h1433h43.5t27 -4.5 t17.5 -7.5t5 -18t0.5 -27t-6.5 -43l-172 -1131q-5 -31 -7 -43t-9 -27t-11 -18t-20 -7.5t-28.5 -4.5h-43.5h-1024h-43.5t-28.5 4t-20 8t-11.5 18.5t-9.5 27t-7 42.5l-172 1131q-5 31 -6.5 43zM414 -397q-11 13 1 90l172 1126q5 31 7 44t9.5 28t11.5 18.5t20 8t28.5 4.5h43.5 h1024q77 0 91.5 -13t26.5 -90l171 -1126q13 -77 2 -90t-87 -13h-1433q-77 0 -88 13zM502 1185.5v43.5v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5q0 -77 -13.5 -90t-89.5 -13h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28zM638 -205 h1161l-142 922h-877zM911 1229v43.5t4.5 27.5t8 18.5t19 8t28 4.5h43.5h43.5t28 -4.5t18.5 -7.5t7.5 -18.5t4.5 -28v-43.5v-43.5t-4.5 -28t-8 -19t-18.5 -8t-27.5 -4.5h-43.5q-76 0 -89.5 13t-13.5 90zM1321 1185.5v43.5q0 77 12.5 89.5t89.5 12.5h43.5t28 -4.5t19 -8 t8 -18.5t4.5 -27.5v-43.5q0 -77 -13 -90t-90 -13h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28zM1731 1185.5v43.5q0 77 12.5 89.5t89.5 12.5t89.5 -12.5t12.5 -89.5v-43.5t-4.5 -28t-8 -19t-18.5 -8t-27.5 -4.5h-43.5h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28zM2140 1229v43.5 t4.5 27.5t8 18.5t19 8t28 4.5h43.5q77 0 89.5 -12.5t12.5 -89.5v-43.5t-4.5 -28t-8 -19t-18.5 -8t-27.5 -4.5h-43.5q-77 0 -90 13t-13 90z" />
<glyph unicode="&#xe149;" d="M0 1229q0 200 62 388t175.5 339t264.5 264.5t339 175.5t388 62t388 -62t339 -175.5t264.5 -264.5t175.5 -339t62 -388t-62 -388t-175.5 -339t-264.5 -264.5t-339 -175.5t-388 -62t-388 62t-339 175.5t-264.5 264.5t-175.5 339t-62 388zM1229 205q209 0 398.5 81 t326.5 218t218 326.5t81 398.5t-81 398.5t-218 326.5t-326.5 218t-398.5 81v-2048z" />
<glyph unicode="&#xe14a;" d="M0 1229q0 200 62 388t175.5 339t264.5 264.5t339 175.5t388 62t388 -62t339 -175.5t264.5 -264.5t175.5 -339t62 -388t-62 -388t-175.5 -339t-264.5 -264.5t-339 -175.5t-388 -62t-388 62t-339 175.5t-264.5 264.5t-175.5 339t-62 388zM205 1229q0 -209 81 -398.5 t218 -326.5t326.5 -218t398.5 -81t398.5 81t326.5 218t218 326.5t81 398.5t-81 398.5t-218 326.5t-326.5 218t-398.5 81t-398.5 -81t-326.5 -218t-218 -326.5t-81 -398.5z" />
<glyph unicode="&#xe14b;" d="M0 1229q0 250 97.5 477.5t262 392t392 262t477.5 97.5t477.5 -97.5t392 -262t262 -392t97.5 -477.5t-97.5 -477.5t-262 -392t-392 -262t-477.5 -97.5t-477.5 97.5t-392 262t-262 392t-97.5 477.5z" />
<glyph unicode="&#xe14c;" d="M0 1229q0 200 62 388t175.5 339t264.5 264.5t339 175.5t388 62t388 -62t339 -175.5t264.5 -264.5t175.5 -339t62 -388t-62 -388t-175.5 -339t-264.5 -264.5t-339 -175.5t-388 -62t-388 62t-339 175.5t-264.5 264.5t-175.5 339t-62 388zM205 1229q0 -209 81 -398.5 t218 -326.5t326.5 -218t398.5 -81v2048q-209 0 -398.5 -81t-326.5 -218t-218 -326.5t-81 -398.5z" />
<glyph unicode="&#xe14d;" d="M0 1229q0 200 62 388t175.5 339t264.5 264.5t339 175.5t388 62t388 -62t339 -175.5t264.5 -264.5t175.5 -339t62 -388t-62 -388t-175.5 -339t-264.5 -264.5t-339 -175.5t-388 -62t-388 62t-339 175.5t-264.5 264.5t-175.5 339t-62 388zM205 1229q0 -197 73 -378.5 t197.5 -316.5t297.5 -221.5t367 -103.5q-49 46 -95.5 101t-104 149.5t-99 200.5t-70 255.5t-28.5 313.5t28.5 313.5t70 255.5t99 200.5t104 149.5t95.5 101q-194 -17 -367 -103.5t-297.5 -221.5t-197.5 -316.5t-73 -378.5z" />
<glyph unicode="&#xe14e;" d="M0 1229q0 200 62 388t175.5 339t264.5 264.5t339 175.5t388 62t388 -62t339 -175.5t264.5 -264.5t175.5 -339t62 -388t-62 -388t-175.5 -339t-264.5 -264.5t-339 -175.5t-388 -62t-388 62t-339 175.5t-264.5 264.5t-175.5 339t-62 388zM205 1229q0 -209 81 -398.5 t218 -326.5t326.5 -218t398.5 -81q49 0 88 4q49 46 95.5 101t104 149.5t99 200.5t70 255.5t28.5 313.5t-28.5 313.5t-70 255.5t-99 200.5t-104 149.5t-95.5 101q-58 4 -88 4q-209 0 -398.5 -81t-326.5 -218t-218 -326.5t-81 -398.5z" />
<glyph unicode="&#xe14f;" d="M0 1229q0 200 62 388t175.5 339t264.5 264.5t339 175.5t388 62t388 -62t339 -175.5t264.5 -264.5t175.5 -339t62 -388t-62 -388t-175.5 -339t-264.5 -264.5t-339 -175.5t-388 -62t-388 62t-339 175.5t-264.5 264.5t-175.5 339t-62 388zM1317 209q194 17 367 103.5 t298 221.5t198 316.5t73 378.5t-73 378.5t-198 316.5t-298 221.5t-367 103.5q49 -46 95.5 -101t104 -149.5t99 -200.5t70 -255.5t28.5 -313.5t-28.5 -313.5t-70 -255.5t-99 -200.5t-104 -149.5t-95.5 -101z" />
<glyph unicode="&#xe150;" d="M0 1229q0 200 62 388t175.5 339t264.5 264.5t339 175.5t388 62t388 -62t339 -175.5t264.5 -264.5t175.5 -339t62 -388t-62 -388t-175.5 -339t-264.5 -264.5t-339 -175.5t-388 -62t-388 62t-339 175.5t-264.5 264.5t-175.5 339t-62 388zM743 1229q0 -164 28.5 -313.5 t70 -255.5t99 -200.5t104 -149.5t95.5 -101q39 -4 89 -4q209 0 398.5 81t326.5 218t218 326.5t81 398.5t-81 398.5t-218 326.5t-326.5 218t-398.5 81q-31 0 -89 -4q-49 -46 -95.5 -101t-104 -149.5t-99 -200.5t-70 -255.5t-28.5 -313.5z" />
<glyph unicode="&#xe151;" d="M0 1229l512 512v-307h512v512h-307l512 512l512 -512h-307v-512h512v307l512 -512l-512 -512v307h-512v-512h307l-512 -512l-512 512h307v512h-512v-307z" />
<glyph unicode="&#xe152;" d="M0 1287.5v43.5v1024v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h2253q77 0 90 -13t13 -90v-1024v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-2253h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM614 614h410v308v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h205h43.5 t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-308h409l-614 -675z" />
<glyph unicode="&#xe153;" d="M-61 1229l675 614v-409h308h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-205v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-308v-410zM1229 58.5v43.5v2253v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h1024q77 0 90 -13t13 -90v-2253v-43.5t-4.5 -27.5t-8 -18.5 t-19 -8t-28 -4.5h-43.5h-1024h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28z" />
<glyph unicode="&#xe154;" d="M0 58.5v43.5v2253v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h1024q76 0 89.5 -13t13.5 -90v-2253v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-1024h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM1434 1082.5v43.5v205v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h307 v409l676 -614l-676 -615v410h-307h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28z" />
<glyph unicode="&#xe155;" d="M0 58.5v43.5v1024v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h2253q77 0 90 -13.5t13 -89.5v-1024v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-2253h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM614 1843l615 676l614 -676h-409v-307v-43.5t-4.5 -27.5t-8 -18.5 t-19 -8t-28 -4.5h-43.5h-205h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28v43.5v307h-410z" />
<glyph unicode="&#xe156;" d="M-205 263.5v43.5v2048q0 77 13.5 90t89.5 13h2662h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-2048v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-2662h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5zM0 410h205v204h-205v-204zM0 819h205v205h-205v-205zM0 1229 h205v205h-205v-205zM0 1638h205v205h-205v-205zM0 2048h205v205h-205v-205zM410 410h1638v1843h-1638v-1843zM2253 410h205v204h-205v-204zM2253 819h205v205h-205v-205zM2253 1229h205v205h-205v-205zM2253 1638h205v205h-205v-205zM2253 2048h205v205h-205v-205z" />
<glyph unicode="&#xe157;" d="M0 307q0 130 118.5 218.5t291.5 88.5q108 0 204 -40v1481l1434 513v-1851q0 -129 -119 -218t-291 -89t-290.5 89t-118.5 218t118.5 218t290.5 89q109 0 205 -40v992l-1024 -367v-1302q0 -129 -118.5 -218t-290.5 -89t-291 89t-119 218z" />
<glyph unicode="&#xe158;" d="M0 307q0 124 121 215.5t289 91.5q79 0 204 -41v1475l1024 369v-164h-409l-2 -492l-408 -143v-1311q0 -124 -120.5 -215.5t-288.5 -91.5t-289 91.5t-121 215.5zM1229 717q0 128 120 217.5t289 89.5q80 0 205 -41v246h205v-512q0 -128 -120 -217.5t-290 -89.5 q-169 0 -289 89.5t-120 217.5zM1434 1902.5v43.5v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h307v307q0 77 13.5 90t89.5 13h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-307h307h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5q0 -76 -13 -89.5t-90 -13.5h-307v-307v-43.5 t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5v43.5v307h-307h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28z" />
<glyph unicode="&#xe159;" d="M0 410v1536v43t4.5 27.5t8 19t18.5 8t27.5 4.5h43.5h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-1536q0 -44 21 -74t51.5 -37t60.5 0t51 37t21 74v1945v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h1843h43.5t28 -4.5t18.5 -8.5t8.5 -19t4.5 -28v-43v-1945 q0 -192 -109 -301t-301 -109h-1638q-192 0 -301 109t-109 301zM819 614h1024v205h-1024v-205zM819 922h1229v204h-1229v-204zM819 1229h1229v205h-1229v-205zM819 1536h410v512h-410v-512zM1331 1536h717v205h-717v-205zM1331 1843h717v205h-717v-205z" />
<glyph unicode="&#xe15a;" d="M0 58.5v43.5v2151v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h2151q77 0 89.5 -12.5t12.5 -89.5v-2151v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-2151h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM205 205h1945v1945h-358h-1h-1228h-358v-1945zM307 563 q0 38 6.5 44.5t44.5 6.5t45 -6.5t7 -44.5t-7 -44.5t-45 -6.5t-44.5 6.5t-6.5 44.5zM307 1792q0 38 6.5 44.5t44.5 6.5t45 -6.5t7 -44.5t-7 -44.5t-45 -6.5t-44.5 6.5t-6.5 44.5zM512 358q0 38 6.5 45t44.5 7t44.5 -7t6.5 -45t-6.5 -44.5t-44.5 -6.5t-44.5 6.5t-6.5 44.5z M512 563q0 38 6.5 44.5t44.5 6.5t44.5 -6.5t6.5 -44.5t-6.5 -44.5t-44.5 -6.5t-44.5 6.5t-6.5 44.5zM512 768q0 38 6.5 44.5t44.5 6.5t44.5 -6.5t6.5 -44.5t-6.5 -44.5t-44.5 -6.5t-44.5 6.5t-6.5 44.5zM512 973q0 38 6.5 44.5t44.5 6.5t44.5 -6.5t6.5 -44.5t-6.5 -44.5 t-44.5 -6.5t-44.5 6.5t-6.5 44.5zM512 1178q0 38 6.5 44.5t44.5 6.5t44.5 -6.5t6.5 -44.5t-6.5 -45t-44.5 -7t-44.5 7t-6.5 45zM512 1382q0 38 6.5 45t44.5 7t44.5 -7t6.5 -45t-6.5 -44.5t-44.5 -6.5t-44.5 6.5t-6.5 44.5zM512 1587q0 38 6.5 44.5t44.5 6.5t44.5 -6.5 t6.5 -44.5t-6.5 -44.5t-44.5 -6.5t-44.5 6.5t-6.5 44.5zM512 1792q0 38 6.5 44.5t44.5 6.5t44.5 -6.5t6.5 -44.5t-6.5 -44.5t-44.5 -6.5t-44.5 6.5t-6.5 44.5zM512 1997q0 38 6.5 44.5t44.5 6.5t44.5 -6.5t6.5 -44.5t-6.5 -44.5t-44.5 -6.5t-44.5 6.5t-6.5 44.5zM717 563 q0 38 6.5 44.5t44.5 6.5t44.5 -6.5t6.5 -44.5t-6.5 -44.5t-44.5 -6.5t-44.5 6.5t-6.5 44.5zM717 1792q0 38 6.5 44.5t44.5 6.5t44.5 -6.5t6.5 -44.5t-6.5 -44.5t-44.5 -6.5t-44.5 6.5t-6.5 44.5zM922 563q0 38 6.5 44.5t44.5 6.5t44.5 -6.5t6.5 -44.5t-6.5 -44.5t-44.5 -6.5 t-44.5 6.5t-6.5 44.5zM922 1792q0 38 6.5 44.5t44.5 6.5t44.5 -6.5t6.5 -44.5t-6.5 -44.5t-44.5 -6.5t-44.5 6.5t-6.5 44.5zM1126 563q0 38 7 44.5t45 6.5t44.5 -6.5t6.5 -44.5t-6.5 -44.5t-44.5 -6.5t-45 6.5t-7 44.5zM1126 1792q0 38 7 44.5t45 6.5t44.5 -6.5t6.5 -44.5 t-6.5 -44.5t-44.5 -6.5t-45 6.5t-7 44.5zM1331 563q0 38 6.5 44.5t44.5 6.5t45 -6.5t7 -44.5t-7 -44.5t-45 -6.5t-44.5 6.5t-6.5 44.5zM1331 1792q0 38 6.5 44.5t44.5 6.5t45 -6.5t7 -44.5t-7 -44.5t-45 -6.5t-44.5 6.5t-6.5 44.5zM1536 563q0 38 6.5 44.5t44.5 6.5 t44.5 -6.5t6.5 -44.5t-6.5 -44.5t-44.5 -6.5t-44.5 6.5t-6.5 44.5zM1536 1792q0 38 6.5 44.5t44.5 6.5t44.5 -6.5t6.5 -44.5t-6.5 -44.5t-44.5 -6.5t-44.5 6.5t-6.5 44.5zM1741 358q0 38 6.5 45t44.5 7t44.5 -7t6.5 -45t-6.5 -44.5t-44.5 -6.5t-44.5 6.5t-6.5 44.5z M1741 563q0 38 6.5 44.5t44.5 6.5t44.5 -6.5t6.5 -44.5t-6.5 -44.5t-44.5 -6.5t-44.5 6.5t-6.5 44.5zM1741 768q0 38 6.5 44.5t44.5 6.5t44.5 -6.5t6.5 -44.5t-6.5 -44.5t-44.5 -6.5t-44.5 6.5t-6.5 44.5zM1741 973q0 38 6.5 44.5t44.5 6.5t44.5 -6.5t6.5 -44.5t-6.5 -44.5 t-44.5 -6.5t-44.5 6.5t-6.5 44.5zM1741 1178q0 38 6.5 44.5t44.5 6.5t44.5 -6.5t6.5 -44.5t-6.5 -45t-44.5 -7t-44.5 7t-6.5 45zM1741 1382q0 38 6.5 45t44.5 7t44.5 -7t6.5 -45t-6.5 -44.5t-44.5 -6.5t-44.5 6.5t-6.5 44.5zM1741 1587q0 38 6.5 44.5t44.5 6.5t44.5 -6.5 t6.5 -44.5t-6.5 -44.5t-44.5 -6.5t-44.5 6.5t-6.5 44.5zM1741 1792q0 38 6.5 44.5t44.5 6.5t44.5 -6.5t6.5 -44.5t-6.5 -44.5t-44.5 -6.5t-44.5 6.5t-6.5 44.5zM1741 1997q0 38 6.5 44.5t44.5 6.5t44.5 -6.5t6.5 -44.5t-6.5 -44.5t-44.5 -6.5t-44.5 6.5t-6.5 44.5zM1946 563 q0 38 6.5 44.5t44.5 6.5t44.5 -6.5t6.5 -44.5t-6.5 -44.5t-44.5 -6.5t-44.5 6.5t-6.5 44.5zM1946 1792q0 38 6.5 44.5t44.5 6.5t44.5 -6.5t6.5 -44.5t-6.5 -44.5t-44.5 -6.5t-44.5 6.5t-6.5 44.5z" />
<glyph unicode="&#xe15b;" d="M0 58.5v43.5v2048v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h2253q77 0 90 -13.5t13 -89.5v-2048v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-2253h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM205 614h2048v1434h-2048v-1434z" />
<glyph unicode="&#xe15c;" d="M0 58.5v43.5v2048v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h2253q77 0 90 -13.5t13 -89.5v-2048v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-2253h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM614 205h1639v1843h-1639v-1843z" />
<glyph unicode="&#xe15d;" d="M0 58.5v43.5v2048v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h2253q77 0 90 -13.5t13 -89.5v-2048v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-2253h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM205 205h1638v1843h-1638v-1843z" />
<glyph unicode="&#xe15e;" d="M0 58.5v43.5v2048v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h2253q77 0 90 -13.5t13 -89.5v-2048v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-2253h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM205 205h2048v1433h-2048v-1433z" />
<glyph unicode="&#xe15f;" d="M0 58.5v43.5v1844v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h2253h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-1332l-615 -614h-1741h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28z" />
<glyph unicode="&#xe160;" d="M0 58.5v43.5v1844v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h2253h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-1332l-615 -614h-1741h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM666 1024l563 -614l563 614h-358v410v43.5t-4.5 27.5t-8 18.5t-19 8t-28 4.5h-43.5 h-205h-43.5t-28 -4.5t-18.5 -7.5t-7.5 -18.5t-4.5 -28v-43.5v-410h-358z" />
<glyph unicode="&#xe161;" d="M0 58.5v43.5v1844v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h2253h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-1332l-615 -614h-1741h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM614 468.5q0 -12.5 4.5 -27.5t8 -18.5t19 -8t28 -4.5h43.5h43.5t28 4.5t18.5 7.5 t7.5 18.5t4.5 28v43.5v307h1024l-307 410l307 409h-1126h-43.5t-28 -4.5t-19 -8t-8 -18.5t-4.5 -27.5v-43.5v-1024v-43.5z" />
<glyph unicode="&#xe162;" d="M0 58.5v43.5v1844v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h2253h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-1332l-615 -614h-1741h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM717 461q0 -38 6.5 -44.5t44.5 -6.5h922q38 0 44.5 6.5t6.5 44.5v717 q0 38 -6.5 44.5t-44.5 6.5h-103v102q0 154 -102 256.5t-256 102.5t-256.5 -102.5t-102.5 -256.5v-102h-102q-38 0 -44.5 -6.5t-6.5 -44.5v-717zM1075 1229v102q0 154 154 154q153 0 153 -154v-102h-307z" />
<glyph unicode="&#xe163;" d="M0 58.5v43.5v1844v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h2253h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-1332l-615 -614h-1741h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM717 929.5q0 -12.5 4.5 -28t8 -19t18.5 -8t27.5 -4.5h43.5h819q76 0 89.5 13 t13.5 90v102q0 77 -13.5 90t-89.5 13h-819h-43.5t-27.5 -4.5t-18.5 -8t-8 -19t-4.5 -28v-43.5v-102v-43.5z" />
<glyph unicode="&#xe164;" d="M0 58.5v43.5v1844v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h2253h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-1332l-615 -614h-1741h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM717 929.5q0 -12.5 4.5 -28t8 -19t18.5 -8t27.5 -4.5h43.5h256v-256v-43.5 t4.5 -27.5t8 -18.5t19 -8t28 -4.5h43.5h102h43.5t28 4.5t18.5 7.5t7.5 18.5t4.5 28v43.5v256h256q76 0 89.5 13t13.5 90v102q0 77 -13.5 90t-89.5 13h-256v256v43.5t-4.5 28t-7.5 18.5t-18.5 7.5t-28 4.5h-43.5h-102h-43.5t-28 -4.5t-19 -8t-8 -18.5t-4.5 -27.5v-43.5v-256 h-256h-43.5t-27.5 -4.5t-18.5 -8t-8 -19t-4.5 -28v-43.5v-102v-43.5z" />
<glyph unicode="&#xe165;" d="M0 58.5v43.5v1844v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h2253h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-1332l-615 -614h-1741h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM705 724q0 -4 6.5 -15.5t13.5 -18.5l25 -25l120 -120l25 -25t18.5 -13.5t15.5 -6.5 t16 6.5t19 13.5t26 25l239 240l238 -240q18 -18 26 -25.5t19.5 -13.5t16 -6t15.5 6t18.5 13.5l25.5 25.5l120 120l25 25t13.5 18.5t6.5 15.5t-6.5 16t-13.5 19t-25 26l-241 239l241 239q18 19 25 26t13.5 19t6.5 16t-6.5 15.5t-13.5 18.5l-25 25l-120 120l-25.5 25.5 t-18.5 13.5t-15.5 6t-16 -6t-19.5 -13.5t-26 -25.5l-238 -240l-239 240q-19 18 -26 25t-19 13.5t-16 6.5t-15.5 -6.5t-18.5 -13.5l-25 -25l-120 -120l-25 -25t-13.5 -18.5t-6.5 -15.5t6.5 -16t13.5 -19t25 -26l240 -239l-240 -239q-18 -19 -25 -26t-13.5 -19t-6.5 -16z" />
<glyph unicode="&#xe166;" d="M0 58.5v43.5v1844v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h2253h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-1332l-615 -614h-1741h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM666 1024h358v-410v-43.5t4.5 -28t7.5 -18.5t18.5 -7.5t28 -4.5h43.5h205h43.5 t28 4.5t19 8t8 18.5t4.5 27.5v43.5v410h358l-563 614z" />
<glyph unicode="&#xe167;" d="M205 58.5v43.5v2253v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h1843q76 0 89.5 -13t13.5 -90v-1741l-615 -614h-1331h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28z" />
<glyph unicode="&#xe168;" d="M0 673.5v43.5v2253v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h1844h43.5t28 -4.5t18.5 -7.5t7.5 -18.5t4.5 -28v-43.5v-410h-1331q-154 0 -179.5 -25.5t-25.5 -179.5v-1741h-410h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28zM614 58.5v43.5v2253q0 77 13 90t90 13h1843 h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-1741l-614 -614h-1331h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5z" />
<glyph unicode="&#xe169;" d="M205 58.5v43.5v2253v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h1843q76 0 89.5 -13t13.5 -90v-1741l-615 -614h-1331h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM666 1229l563 -615l563 615h-358v409q0 76 -13 89.5t-90 13.5h-205h-43.5t-27.5 -4.5t-18.5 -8t-8 -19 t-4.5 -28v-43.5v-409h-358z" />
<glyph unicode="&#xe16a;" d="M205 58.5v43.5v2253v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h1843q76 0 89.5 -13t13.5 -90v-1741l-615 -614h-1331h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM717 673.5q0 -12.5 4.5 -28t8 -19t18.5 -8t27.5 -4.5h43.5q77 0 90 13t13 90v307h819l-307 410l307 409 h-922q-77 0 -89.5 -12.5t-12.5 -89.5v-1024v-43.5z" />
<glyph unicode="&#xe16b;" d="M205 58.5v43.5v2253v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h1843q76 0 89.5 -13t13.5 -90v-1741l-615 -614h-1331h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM614 410h205v204h205v-204h205v204h205v-204h204v204h205v205h-205v205h205v205h-205v205h205v204h-205v205 h205v205h-205v-205h-204v205h-205v-205h-205v205h-205v-205h-205v-205h205v-204h-205v-205h205v-205h-205v-205h205v-205h-205v-204zM819 819v205h205v-205h-205zM819 1229v205h205v-205h-205zM819 1638v205h205v-205h-205zM1024 614v205h205v-205h-205zM1024 1024v205h205 v-205h-205zM1024 1434v204h205v-204h-205zM1229 819v205h205v-205h-205zM1229 1229v205h205v-205h-205zM1229 1638v205h205v-205h-205zM1434 614v205h204v-205h-204zM1434 1024v205h204v-205h-204zM1434 1434v204h204v-204h-204z" />
<glyph unicode="&#xe16c;" d="M205 58.5v43.5v2253v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h1843q76 0 89.5 -13t13.5 -90v-1741l-615 -614h-1331h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM717 666q0 -38 6.5 -45t44.5 -7h922q38 0 44.5 7t6.5 45v716q0 38 -6.5 45t-44.5 7h-103v102 q0 154 -102 256t-256 102t-256.5 -102t-102.5 -256v-102h-102q-38 0 -44.5 -7t-6.5 -45v-716zM1075 1434v102q0 154 154 154q153 0 153 -154v-102h-307z" />
<glyph unicode="&#xe16d;" d="M205 58.5v43.5v2253v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h1843q76 0 89.5 -13t13.5 -90v-1741l-615 -614h-1331h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM717 1082.5q0 -12.5 4.5 -28t7.5 -18.5t18.5 -7.5t28 -4.5h43.5h819h43.5t28 4.5t19 8t8 18.5t4.5 27.5 v43.5v103v43.5t-4.5 27.5t-8 18.5t-19 8t-28 4.5h-43.5h-819q-77 0 -89.5 -12.5t-12.5 -89.5v-103v-43.5z" />
<glyph unicode="&#xe16e;" d="M205 58.5v43.5v2253v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h1843q76 0 89.5 -13t13.5 -90v-1741l-615 -614h-1331h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM717 1082.5q0 -12.5 4.5 -28t7.5 -18.5t18.5 -7.5t28 -4.5h43.5h256v-256v-43.5t4.5 -27.5t8 -18.5t19 -8 t28 -4.5h43.5h102h43.5t28 4.5t18.5 7.5t7.5 18.5t4.5 28v43.5v256h256h43.5t28 4.5t19 8t8 18.5t4.5 27.5v43.5v103v43.5t-4.5 27.5t-8 18.5t-19 8t-28 4.5h-43.5h-256v256v43.5t-4.5 28t-8 19t-18.5 8t-27.5 4.5h-43.5h-102q-76 0 -89.5 -13t-13.5 -90v-256h-256 q-77 0 -89.5 -12.5t-12.5 -89.5v-103v-43.5z" />
<glyph unicode="&#xe16f;" d="M205 58.5v43.5v2253v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h1843q76 0 89.5 -13t13.5 -90v-1741l-615 -614h-1331h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM705 929.5q0 -4.5 6 -15.5t13.5 -18.5l25.5 -25.5l120 -120l25.5 -25.5t18.5 -13.5t15.5 -6t16 6t19.5 13.5 t26 25.5l238 241l239 -241q26 -26 35.5 -34.5t24 -8.5t24 8.5t35.5 34.5l121 120l25.5 25.5t13.5 18.5t6 15.5t-6 16t-13.5 19.5t-25.5 26l-240 238l240 239q26 26 34.5 35.5t8.5 24t-8.5 24t-34.5 35.5l-121 121q-26 26 -35.5 34.5t-24 8.5t-24 -8.5t-35.5 -34.5l-239 -240 l-238 240q-18 18 -26 25.5t-19.5 13.5t-16 6t-15.5 -6t-18.5 -13.5l-25.5 -25.5l-120 -121q-26 -26 -34.5 -35.5t-8.5 -24t8.5 -24t34.5 -35.5l241 -239l-241 -238q-18 -18 -25.5 -26t-13.5 -19.5t-6 -16z" />
<glyph unicode="&#xe170;" d="M205 58.5v43.5v2253v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h1843q76 0 89.5 -13t13.5 -90v-1741l-615 -614h-1331h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM616 653h266v-245h205v245h287v-245h204v245h267v205h-267v266h267v205h-267v266h267v205h-267v246h-204 v-246h-287v246h-205v-246h-266v-205h266v-266h-266v-205h266v-266h-266v-205zM1087 858v266h287v-266h-287zM1087 1329v266h287v-266h-287z" />
<glyph unicode="&#xe171;" d="M205 58.5v43.5v2253v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h1843q76 0 89.5 -13t13.5 -90v-1741l-615 -614h-1331h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM614 614h820v205h-820v-205zM614 1024h1229v205h-1229v-205zM614 1434h1229v204h-1229v-204zM614 1843h1229 v205h-1229v-205z" />
<glyph unicode="&#xe172;" d="M205 58.5v43.5v2253v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h1843q76 0 89.5 -13t13.5 -90v-1741l-615 -614h-1331h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM666 1229h358v-410v-43.5t4.5 -28t7.5 -18.5t18.5 -7.5t28 -4.5h43.5h205h43.5t28 4.5t19 8t8 18.5 t4.5 27.5v43.5v410h358l-563 614z" />
<glyph unicode="&#xe173;" d="M0 512q0 212 150 362t362 150t362 -150t150 -362t-150 -362t-362 -150t-362 150t-150 362zM0 1946q0 212 150 362t362 150t362 -150t150 -362t-150 -362t-362 -150t-362 150t-150 362zM1434 512q0 212 150 362t362 150t362 -150t150 -362t-150 -362t-362 -150t-362 150 t-150 362zM1434 1946q0 212 150 362t362 150t362 -150t150 -362t-150 -362t-362 -150t-362 150t-150 362z" />
<glyph unicode="&#xe174;" d="M0 307q0 127 90 217t217 90t217 -90t90 -217t-90 -217t-217 -90t-217 90t-90 217zM0 1229q0 127 90 217t217 90t217 -90t90 -217t-90 -217t-217 -90t-217 90t-90 217zM0 2150q0 127 90 217.5t217 90.5t217 -90.5t90 -217.5t-90 -217t-217 -90t-217 90t-90 217zM922 307 q0 127 90 217t217 90t217 -90t90 -217t-90 -217t-217 -90t-217 90t-90 217zM922 1229q0 127 90 217t217 90t217 -90t90 -217t-90 -217t-217 -90t-217 90t-90 217zM922 2150q0 127 90 217.5t217 90.5t217 -90.5t90 -217.5t-90 -217t-217 -90t-217 90t-90 217zM1843 307 q0 127 90 217t217 90t217.5 -90t90.5 -217t-90.5 -217t-217.5 -90t-217 90t-90 217zM1843 1229q0 127 89.5 217t217.5 90t218 -90t90 -217t-90 -217t-218 -90t-217.5 90t-89.5 217zM1843 2150q0 127 90 217.5t217 90.5t217.5 -90.5t90.5 -217.5t-90.5 -217t-217.5 -90 t-217 90t-90 217z" />
<glyph unicode="&#xe175;" d="M47 869l2411 1587v-2210l-1047 545l977 1560l-1174 -1482h-1167z" />
<glyph unicode="&#xe176;" d="M205 58.5v43.5v2048v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h307v102q0 77 13 90t90 13h409q76 0 89.5 -13t13.5 -90v-102h307h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-102h717h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-1024q0 -76 -13 -89.5t-90 -13.5h-307 v-512v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-308v-103v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-1229h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM410 205h1024v1843h-1024v-1843zM1638 556.5q0 -17.5 2.5 -43t3 -35t8.5 -24.5t11.5 -19 t19.5 -11.5t25 -8.5t35.5 -3t43.5 -2h56v204h-205v-2v-55.5zM1638 1773.5q0 -20.5 4 -49t6.5 -37.5t16.5 -23t23 -16t37.5 -6t49.5 -4h68v205h-205v-2v-67.5zM2048 1843q0 -154 25.5 -179.5t179.5 -25.5v205h-205z" />
<glyph unicode="&#xe177;" d="M0 263.5v43.5v1843v43.5t4 28t8 19t18.5 8.5t28 5h43.5l2253 -1q77 0 90 -13.5t13 -89.5v-1843v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-2253h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM307 717h1843l-460 614l-359 -358l-461 665z" />
<glyph unicode="&#xe178;" d="M0 263.5v43.5v1843v43.5t4 28t8 19t18.5 8.5t28 5h43.5l2253 -1q77 0 90 -13.5t13 -89.5v-1843v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-2253h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM307 717h1843l-460 614l-359 -358l-461 665z" />
<glyph unicode="&#xe179;" d="M205 58.5v43.5v2253v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h1843q76 0 89.5 -13t13.5 -90v-2253v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-1843h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM512 307h1434v307l-427 142q-44 15 -69.5 37t-32.5 44.5t-9.5 48 t1.5 47.5q79 58 125 134.5t60 201.5l25 210q27 232 -85 369t-305 137t-305.5 -137t-85.5 -369l26 -210q14 -125 60 -201.5t125 -134.5q4 -22 1.5 -47.5t-9.5 -48t-33 -44.5t-70 -37l-426 -142v-307z" />
<glyph unicode="&#xe17a;" d="M0 263.5v43.5v1843v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h1434h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-204q0 -76 13 -89.5t90 -13.5h205h43.5t28 -4.5t18.5 -7.5t7.5 -18.5t4.5 -28v-43.5v-205v-43.5t4.5 -28t7.5 -18.5t18.5 -7.5t28 -4.5h43.5h205 q77 0 90 -13t13 -90v-1024v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-2253h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM307 717h1843l-460 614l-359 -358l-461 665zM1843 2106.5v43.5v44t4.5 28t8 18.5t18.5 8t28 4.5h44h307v307v43.5t4.5 28t7.5 18.5t18.5 7.5 t28 4.5h43.5h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-307h307h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-307v-307q0 -77 -13 -90t-90 -13h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28v43.5v307h-307h-43.5 t-28 4.5t-19 8t-8 18.5t-4.5 27.5z" />
<glyph unicode="&#xe17b;" d="M0 468.5v43.5v1638v43.5t4 28t8 19t18.5 8.5t28 5h43.5l2048 -1h44t28 -4.5t18.5 -8t8 -18.5t4.5 -28v-44v-1638v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-2048h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM307 821h1639l-410 510l-307 -307l-410 614z M410 58.5v43.5v103h2048v1638h102h43.5t28 -4.5t18.5 -7.5t7.5 -18.5t4.5 -28v-43.5v-1639v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-2048h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28z" />
<glyph unicode="&#xe17c;" d="M0 0l325 475l466 495l179 -179l-495 -467zM562 1503l145 145q97 -21 213 2t221.5 76t204 128t167 155.5t103 162t18.5 143.5l143 143q408 -278 681 -681l-143 -143q-62 15 -143.5 -19.5t-162 -103t-155.5 -166.5t-128 -203.5t-76 -221.5t-2 -213l-145 -145 q-536 405 -941 941z" />
<glyph unicode="&#xe17d;" d="M102 1741q0 85 60 145t145 60t145 -60t60 -145t-60 -145t-145 -60t-145 60t-60 145z" />
<glyph unicode="&#xe17e;" d="M102 1307q0 181 29 347t91.5 313.5t153 256t222 171.5t289.5 63q122 0 222.5 -29t176 -81t139.5 -121t121 -153t111 -172.5t119.5 -184.5t137 -183.5t172 -174.5t216.5 -153q-10 -77 -44 -122t-82.5 -54.5t-104.5 5t-115 52.5l-279 179q-35 22 -56.5 35.5t-47 27.5 t-40 20.5t-31 11.5t-25.5 3.5t-18.5 -7t-14 -17t-8.5 -28.5t-5 -39t-1 -52q0 -471 1 -841.5t1 -393.5q0 -89 -47.5 -140t-110.5 -51q-61 0 -105.5 50.5t-44.5 140.5v833q-11 -48 -35.5 -84.5t-56.5 -55t-68 -26t-70.5 0.5t-63 25t-47.5 49t-21 71q-19 -40 -61.5 -62t-91 -20 t-93.5 21t-73.5 65t-26.5 108q-45 -19 -87.5 -21.5t-84.5 18.5t-73 66t-50 130.5t-19 202.5z" />
<glyph unicode="&#xe17f;" d="M-205 1376q0 63 51 110.5t140 47.5q23 0 393.5 -1t841.5 -1q37 0 63 2t43.5 8.5t27 14t9.5 24t-4.5 31.5t-19.5 44t-30.5 55t-43.5 69l-179 278q-38 59 -52.5 115t-5 104.5t54.5 82.5t122 44q66 -116 153 -216.5t174.5 -172t183.5 -137t184.5 -119.5t172.5 -111t153 -121 t121 -139.5t81 -176t29 -222.5q0 -158 -63 -289.5t-171.5 -221.5t-256 -152.5t-313.5 -91.5t-347 -29q-117 0 -202 19t-130.5 50t-66.5 72.5t-18.5 84t21.5 87.5q-62 -2 -108 26.5t-65 73.5t-21 93.5t20 91t62 61.5q-39 2 -71 21t-49 47.5t-25 63t-0.5 71t26 68.5t55 56.5 t84.5 35.5h-833q-90 0 -140.5 44t-50.5 105z" />
<glyph unicode="&#xe180;" d="M0 989q0 122 29 222.5t81 176t121 139.5t153 121t172.5 111t184 119.5t183 137t174.5 172t153 216.5q77 -10 122 -44t54.5 -82.5t-5 -104.5t-52.5 -115l-178 -278q-28 -43 -43.5 -69t-30.5 -55t-19.5 -44t-4.5 -31.5t9.5 -24t27 -14t43.5 -8.5t63 -2q471 0 841.5 1 t393.5 1q89 0 139.5 -47.5t50.5 -110.5q0 -61 -50 -105t-140 -44h-834q67 -15 110 -56t53 -90.5t0 -97.5t-48.5 -82t-93.5 -37q50 -24 69.5 -83t7.5 -118t-62.5 -103.5t-127.5 -41.5q19 -45 21.5 -87.5t-18 -84.5t-66 -72.5t-130.5 -49.5t-202 -19q-181 0 -347 29 t-313.5 91.5t-256 152.5t-171.5 221.5t-63 289.5z" />
<glyph unicode="&#xe181;" d="M51 1225q14 102 68.5 146t126 33.5t151.5 -61.5l279 -178q43 -28 69 -43.5t55 -30.5t44 -19.5t31.5 -4.5t24 9.5t14 27t8.5 43.5t2 63q0 471 -1 841.5t-1 393.5q0 89 47 140t110 51q61 0 105.5 -50.5t44.5 -140.5v-833q11 48 35.5 84.5t56.5 55t68 26t70.5 -0.5t63 -25 t47.5 -49t21 -71q19 40 61.5 62t91 20t93.5 -21t73.5 -65t26.5 -108q45 19 87.5 21.5t84.5 -18.5t73 -66t50 -130.5t19 -202.5q0 -181 -29 -347t-91.5 -313.5t-153 -256t-222 -171.5t-289.5 -63q-122 0 -222.5 29t-176 81t-139.5 121t-121 153t-111 172.5t-119.5 184.5 t-137 183.5t-172 174.5t-216.5 153z" />
<glyph unicode="&#xe182;" d="M0 468.5v43.5v1638v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h2253q77 0 90 -13.5t13 -89.5v-1638v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-2253h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM256 614h614v205h-614v-205zM256 1024h819v205h-819v-205z M1843 1638h410v410h-410v-410z" />
<glyph unicode="&#xe183;" d="M0 1229q0 216 73 416t197.5 352.5t290 260.5t350.5 152v-316q-122 -42 -231 -124t-192 -192t-132 -253t-49 -296q0 -187 73 -358t196.5 -294.5t294.5 -196.5t358 -73t358 73t294 196.5t196 294t73 358.5q0 153 -49 296t-132 253t-192 192t-231 124v316q185 -44 351 -152 t290.5 -260.5t197.5 -352.5t73 -416q0 -250 -97.5 -477.5t-262 -392t-392 -262t-477.5 -97.5t-477.5 97.5t-392 262t-262 392t-97.5 477.5zM1075 1492.5v43.5v819q0 77 13.5 90t89.5 13h102h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-819v-43.5t-4.5 -28t-7.5 -18.5 t-18.5 -7.5t-28 -4.5h-43.5h-102h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5z" />
<glyph unicode="&#xe184;" d="M0 1638v205h922q-49 0 -107 12.5t-121.5 40.5t-114.5 68.5t-84.5 102.5t-33.5 135q0 48 12.5 96.5t40.5 96t68 84t101.5 59t135.5 22.5q122 0 236 -91.5t174 -271.5q60 180 173.5 271.5t235.5 91.5q91 0 163 -34t113 -88t62 -114.5t21 -121.5q0 -73 -33.5 -135 t-84.5 -102.5t-114.5 -68.5t-121.5 -40.5t-107 -12.5h922v-205h-205v-614h-922v819h-51h-102h-52v-819h-921v614h-205zM205 58.5v43.5v717h921v-819h-819h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM614 2202q0 -33 13 -61t33 -47.5t53 -35.5t63 -26t74 -17t74.5 -10.5 t75.5 -5.5t67 -2h59q0 88 -20.5 160t-52.5 117t-73.5 76t-81.5 43.5t-79 12.5q-89 0 -147 -62t-58 -142zM1331 0v819h922v-717v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-819zM1331 1997h59t67 2t75.5 5.5t74.5 10.5t74 17t63 26t53 35.5t33 47.5t13 61 q0 80 -58 142t-147 62q-39 0 -79 -12.5t-81.5 -43.5t-73.5 -76t-52.5 -117t-20.5 -160z" />
<glyph unicode="&#xe185;" d="M0 673.5v43.5v1433v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h2253q77 0 90 -13.5t13 -89.5v-1433q0 -77 -13 -90t-90 -13h-2253h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28zM512 0l205 512h256l-205 -512h-256zM1024 1126l512 308l-512 307v-615zM1485 512h256l205 -512h-256 z" />
<glyph unicode="&#xe186;" d="M0 468.5v43.5v1024v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h308v512v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h1434h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-512h307h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-1024v-43.5t-4.5 -27.5t-8 -18.5t-19 -8 t-28 -4.5h-43.5h-307v-308v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-1434h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28v43.5v308h-308h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM614 205h1229v205h-1229v-205zM614 1638h1229v410h-1229v-410z" />
<glyph unicode="&#xe187;" d="M0 58.5v43.5v1844v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h512v-307h-307v-1434h1434v717h307v-922v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-1844h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM819 1229v1303l434 -434l36 36q189 189 403.5 284 t433.5 92.5t441.5 -107t423.5 -305.5q-165 52 -334.5 45t-335 -63.5t-308 -144.5t-253.5 -199l-72 -73l434 -434h-1303z" />
<glyph unicode="&#xe188;" d="M0 58.5v43.5v1844v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h1205l-371 -307h-629v-1434h1434v737l307 287v-1229v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-1844h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM471 1507q90 -10 169.5 -9.5t145 5.5t133 28 t115.5 40.5t112 61.5t103 72.5t108 92.5t108 102t120 119l4 4l-434 435h1303v-1303l-434 434l-157 -150q-121 -116 -270.5 -181.5t-301 -75t-301.5 24t-284.5 111t-238.5 189.5z" />
<glyph unicode="&#xe189;" d="M0 58.5v43.5v820v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h308v102v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-102h308h43.5t28 -4.5t18.5 -7.5t7.5 -18.5t4.5 -28v-43.5v-103h307h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5 v-43.5q0 -77 -13 -90t-90 -13h-307v-204h307q77 0 90 -13t13 -90v-205v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28v43.5v103h-205v-103v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-820h-43.5t-28 4.5 t-18.5 7.5t-7.5 18.5t-4.5 28zM0 1287.5v43.5v1024v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h820h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-307h102h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-44t-4.5 -28t-8 -18.5t-18.5 -8t-28 -4.5h-44h-102v-307v-43.5t-4.5 -28 t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-717v-103v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM205 205h614v614h-614v-614zM205 1638h614v615h-614v-615zM410 410v204h204v-204h-204zM410 1843v205h204v-205h-204z M1024 1287.5v43.5v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5q76 0 89.5 -13t13.5 -90v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM1229 2355v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h1024q77 0 90 -13t13 -90v-819v-43.5 t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-102v-410h102h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-410v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-206h-101v-308v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-205h-43.5t-28 4.5t-19 8t-8 18.5 t-4.5 27.5v43.5q0 76 13 89.5t90 13.5h102v307v43.5t4.5 27.5t8 18.5t19 8t28 4.5h43.5h102v308v512h-205v-103q0 -77 -12.5 -89.5t-89.5 -12.5h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5v43.5v103h-102h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28v43.5v717h-103 q-77 0 -89.5 12.5t-12.5 89.5zM1434 468.5v43.5v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h43.5t28 -4.5t18.5 -7.5t7.5 -18.5t4.5 -28v-43.5v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM1638 922v43.5t4.5 27.5 t8 18.5t19 8t28 4.5h43.5h43.5t28 -4.5t18.5 -7.5t7.5 -18.5t4.5 -28v-43.5v-43.5t-4.5 -28t-8 -19t-18.5 -8t-27.5 -4.5h-43.5q-77 0 -90 13.5t-13 89.5zM1638 1638h615v615h-615v-615zM1843 1843v205h205v-205h-205zM2253 58.5v43.5v43.5t4.5 28t8 19t18.5 8t27.5 4.5 h43.5q77 0 90 -13.5t13 -89.5v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28z" />
<glyph unicode="&#xe18a;" d="M-369 888q0 -181 41 -332t112.5 -256t170.5 -178t213 -107.5t241 -34.5q137 0 254.5 42t201.5 115t143.5 172.5t88.5 215.5t29 242q0 132 -35 243t-95 188t-139.5 134t-169 86.5t-181.5 39t-179.5 -2.5t-162.5 -42q0 95 48.5 190.5t126 170.5t170 136t185 96.5 t166.5 41.5l-106 283q-89 -11 -190.5 -49.5t-210.5 -106t-212.5 -157.5t-196 -211t-162 -258t-110.5 -308t-41 -353zM1270 888q0 -181 41 -332t112.5 -256t170 -178t212.5 -107.5t241 -34.5q171 0 309.5 64t226.5 173.5t135 250.5t47 299q0 116 -27 216t-74.5 173.5 t-112 131.5t-138.5 93.5t-154.5 56.5t-160.5 23.5t-155.5 -9.5t-140.5 -39q0 79 34.5 159.5t91.5 147.5t130 126.5t150.5 101.5t153 68.5t137.5 31.5l-107 283q-89 -11 -190.5 -49.5t-210 -106t-212 -157.5t-196 -211t-162 -258t-110.5 -308t-41 -353z" />
<glyph unicode="&#xe18b;" d="M0 58.5v43.5v1434q0 44 2 62t11 27l974 977l31 31t22.5 16.5t19 7.5t19 -7t23 -16.5l30.5 -30.5l31 -31t16.5 -22.5t7.5 -18.5t-8 -19t-16.5 -22.5t-30.5 -31.5l-817 -820h1835h1h1h1h1h1q68 1 81 -7l5 -5q46 -46 121 -122t245 -261t268 -312q134 -172 89 -340 q-32 -121 -143 -194q-114 -75 -241 -55q-148 23 -232 169q-34 61 -54 138l-41 163v-710v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-2048h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM481 819q0 -48 42.5 -90.5t90.5 -42.5t90.5 42.5t42.5 90.5t-42.5 90.5 t-90.5 42.5t-90.5 -42.5t-42.5 -90.5zM737 512q0 -48 42.5 -90.5t90.5 -42.5t90.5 42.5t42.5 90.5t-42.5 90.5t-90.5 42.5t-90.5 -42.5t-42.5 -90.5zM737 1126q0 -48 42.5 -90.5t90.5 -42.5t91 42.5t43 90.5t-43 91t-91 43t-90.5 -43t-42.5 -91zM993 819q0 -48 42.5 -90.5 t90.5 -42.5t90.5 42.5t42.5 90.5t-42.5 90.5t-90.5 42.5t-90.5 -42.5t-42.5 -90.5zM1249 512q0 -48 42.5 -90.5t90.5 -42.5t90.5 42.5t42.5 90.5t-42.5 90.5t-90.5 42.5t-90.5 -42.5t-42.5 -90.5zM1249 1126q0 -48 42.5 -90.5t90.5 -42.5t91 42.5t43 90.5t-43 91t-91 43 t-90.5 -43t-42.5 -91zM1505 819q0 -48 42.5 -90.5t90.5 -42.5t90.5 42.5t42.5 90.5t-42.5 90.5t-90.5 42.5t-90.5 -42.5t-42.5 -90.5zM2364 1205q16 -63 45.5 -177.5t50 -195t33.5 -132.5q29 -115 108 -144q61 -23 114 17q56 43 49 117q-6 58 -50 115q-118 152 -350 400z " />
<glyph unicode="&#xe18c;" d="M0 570.5v43.5v205v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h308q74 0 146.5 35t137 94.5t129.5 136t130 161.5t131.5 170t141 161.5t152.5 136t171.5 94.5t191.5 35h205v204l512 -409l-512 -410v205h-205q-65 0 -133 -35t-130 -94.5t-127 -136t-132 -161.5t-136 -170 t-146.5 -161.5t-157.5 -136t-175.5 -94.5t-193.5 -35h-308h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM0 1594.5v43.5v205v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h308q297 0 561 -306l-226 -286q-66 76 -152.5 129t-182.5 53h-308h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5 t-4.5 28zM1208 803l232 289q56 -67 136 -118.5t165 -51.5h205v204l512 -409l-512 -410v205h-205q-86 0 -168.5 26t-149.5 70.5t-119.5 92t-95.5 102.5z" />
<glyph unicode="&#xe18d;" d="M0 1229q0 200 62 388t175.5 339t264.5 264.5t339 175.5t388 62t388 -62t339 -175.5t264.5 -264.5t175.5 -339t62 -388t-62 -388t-175.5 -339t-264.5 -264.5t-339 -175.5t-388 -62t-388 62t-339 175.5t-264.5 264.5t-175.5 339t-62 388zM205 1229q0 -209 81 -398.5 t218 -326.5t326.5 -218t398.5 -81t398.5 81t326.5 218t218 326.5t81 398.5t-81 398.5t-218 326.5t-326.5 218t-398.5 81t-398.5 -81t-326.5 -218t-218 -326.5t-81 -398.5zM614 1229q0 125 49 238.5t131 196t196 131t239 48.5t238.5 -48.5t196 -131t131 -196t48.5 -238.5 t-48.5 -239t-131 -196t-196 -131t-238.5 -49q-167 0 -308.5 82.5t-224 224t-82.5 308.5z" />
<glyph unicode="&#xe18e;" d="M0 410q0 383 148.5 658.5t437 422.5t694.5 147h154v615l1024 -922l-1024 -921v614h-205q-194 0 -379.5 -39t-349 -113.5t-294.5 -193t-206 -268.5z" />
<glyph unicode="&#xe18f;" d="M0 0v872l289 -290l502 501q28 28 36 28t37 -28l217 -217q28 -29 28 -38t-26 -35l-501 -502l288 -291h-870zM1350 1632q0 9 26 35l502 502l-291 289h871v-869l-291 289l-500 -500q-28 -28 -37 -28t-37 28l-217 217q-26 28 -26 37z" />
<glyph unicode="&#xe190;" d="M7 292.5q0 6.5 20 26.5l505 506l-292 293h878v-878l-293 292l-506 -505q-20 -20 -29.5 -20t-49.5 20l-213 239q-20 20 -20 26.5zM1331 1331v879l293 -293l506 506q20 20 30 20t50 -20l213 -213q20 -40 20 -50t-20 -30l-506 -506l293 -293h-879z" />
<glyph unicode="&#xe191;" d="M-205 1536l563 717l564 -717h-410v-819h819l256 -307h-1280h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28v43.5v1024h-410zM870 2048h1280h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-1024h409l-563 -717l-563 717h410v819h-820z" />
<glyph unicode="&#xe192;" d="M-205 1229q0 188 73 358.5t196.5 294t294 196t358.5 72.5q222 0 416 -98q-140 -103 -232 -237q-89 28 -184 28q-125 0 -239 -48.5t-196.5 -130.5t-131 -196t-48.5 -239t48.5 -239t131 -196.5t196.5 -131t239 -48.5t239 48.5t196 131t130.5 196.5t48.5 239q0 121 -45 233 q37 73 96.5 132t133.5 94q122 -211 122 -459q0 -188 -72.5 -358.5t-196 -294t-294 -196.5t-358.5 -73t-358.5 73t-294 196.5t-196.5 294t-73 358.5zM819 1229q0 188 73 358.5t196.5 294t294 196t358.5 72.5t358.5 -72.5t294 -196t196 -294t72.5 -358.5t-72.5 -358.5 t-196 -294t-294 -196.5t-358.5 -73q-220 0 -416 99q138 101 231 237q92 -29 185 -29q125 0 239 48.5t196 131t130.5 196.5t48.5 239q0 167 -82 308.5t-223.5 223.5t-308.5 82q-125 0 -239 -48.5t-196.5 -130.5t-131 -196t-48.5 -239q0 -122 45 -234q-76 -152 -229 -225 q-123 213 -123 459z" />
<glyph unicode="&#xe193;" d="M-205 0l615 2458h665l-32 -512h371l-32 512h666l614 -2458h-1126l-45 717h-525l-44 -717h-1127zM986 1024h486l-38 614h-410z" />
<glyph unicode="&#xe194;" d="M0 326v635h634l-219 -219l158 -160q127 -127 296 -198t357 -71q187 0 355.5 71t295.5 198t198 295.5t71 356.5l312 -1q0 -247 -96.5 -472t-268.5 -397q-171 -171 -396.5 -267.5t-472.5 -96.5t-472.5 96.5t-396.5 267.5l-158 159zM0 1224q0 247 96.5 472t268.5 397 t396.5 268.5t471.5 96.5t472 -96.5t397 -268.5l158 -158l197 196v-634h-634l219 219l-157 160q-127 127 -296 197.5t-357 71.5q-187 0 -355 -71t-296 -199q-127 -127 -198.5 -295.5t-71.5 -355.5h-311z" />
<glyph unicode="&#xe195;" d="M-256 1434l410 409l409 -409h-256v-205q0 -189 72.5 -359.5t196 -294t294 -196t359.5 -72.5q181 0 339.5 65.5t325.5 190.5l205 -205q-162 -162 -387.5 -260t-482.5 -98q-245 0 -472 99t-393 265t-265 393t-99 472v205h-256zM358 2099q163 163 388.5 261t482.5 98 q245 0 472 -99t393 -265t265 -393t99 -472v-205h256l-410 -410l-410 410h256v205q0 189 -72.5 359.5t-195.5 293.5t-293.5 195.5t-359.5 72.5q-181 0 -340 -65.5t-326 -190.5z" />
<glyph unicode="&#xe196;" d="M0 1229q0 200 63 387.5t178 338.5t267 265t338 176t383 62h205v256l409 -410l-409 -410v256h-205q-188 0 -358.5 -72.5t-294 -196t-196.5 -294t-73 -358.5t71.5 -356t199.5 -295l-218 -218q-170 170 -265 395t-95 474zM614 154l410 409v-256h205q187 0 357.5 73 t294 196.5t196.5 294t73 358.5q0 187 -71.5 355.5t-198.5 295.5l217 217q171 -169 266 -393t95 -475q0 -250 -97.5 -477.5t-262 -392t-392 -262t-477.5 -97.5h-205v-256z" />
<glyph unicode="&#xe197;" d="M0 1134.5v43.5v102v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h103h43.5t28 -4.5t18.5 -7.5t7.5 -18.5t4.5 -28v-43.5v-102v-43.5t-4.5 -28t-8 -19t-18.5 -8t-27.5 -4.5h-43.5h-103h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28zM104.5 743q1.5 5 12 16.5t22 18t37.5 21.5 l88 51q27 15 38.5 21.5t27 10.5t20.5 2.5t16.5 -12t18 -22t21.5 -37.5l51 -90q16 -27 22 -37.5t9.5 -26t2.5 -20t-12.5 -16t-22 -17.5l-38.5 -22l-88 -52q-27 -15 -38 -21.5t-26 -10.5t-20 -2.5t-16.5 12t-18 22t-21.5 37.5l-51 90q-15 27 -21.5 38t-10.5 26t-2.5 20z M120 1680.5q-6 14.5 0 35t34 76.5l51 102q37 74 49 82q13 9 38 -15l15 -15l103 -52q31 -16 43.5 -22t25.5 -18t14.5 -17t-1.5 -22.5t-9 -30t-22 -43.5l-51 -103q-15 -31 -21.5 -43.5t-18.5 -25.5t-17.5 -15t-23 1.5t-30 10t-43.5 21.5l-102 51q-28 28 -34 42.5zM497.5 246 q-1.5 5 2.5 20t10.5 26t21.5 38l52 88l22 38.5t17.5 22t16 12.5t20 -2.5t26 -9.5t37.5 -22l90 -51q26 -15 37.5 -21.5t22 -18t12 -16.5t-2.5 -20.5t-10.5 -27t-21.5 -38.5l-51 -88q-15 -26 -21.5 -37.5t-18 -22t-16.5 -12t-20 2.5t-26 10.5t-38 21.5l-90 51 q-26 15 -37.5 21.5t-22 18t-12 16.5zM556 2287l449 449v-278h224q243 0 470 -91t402 -266t266 -402t91 -470q0 -183 -45 -334t-146 -326q-16 -27 -22 -37.5t-17.5 -21.5t-16 -12.5t-20 2.5t-26 10t-37.5 22l-88 52l-38.5 22t-22 17.5t-12.5 16t2.5 20t9.5 26t22 37.5 q89 169 119 274t30 231q0 181 -68 349.5t-201 301.5t-302.5 202t-349.5 69h-224v-311zM1075 58.5v43.5v103v43.5t4.5 27.5t8 18.5t19 8t28 4.5h43.5h102h43.5t28 -4.5t18.5 -7.5t7.5 -18.5t4.5 -28v-43.5v-103v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-102 h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5zM1573.5 350q1.5 5 12 16.5t22 18t37.5 21.5l90 51q27 16 37.5 22t26 9.5t20 2.5t16 -12.5t17.5 -22.5t22 -38l51 -88q15 -27 21.5 -38t10.5 -26t2.5 -20t-12 -16.5t-22 -18t-37.5 -21.5l-90 -51q-27 -16 -37.5 -22t-26 -10t-20 -2.5 t-16 12.5t-17.5 21.5t-22 37.5l-51 88q-15 27 -21.5 38.5t-10.5 27t-2.5 20.5z" />
<glyph unicode="&#xe198;" d="M0 1229q0 243 91 470t266 402t402 266t470 91h224v278l448 -449l-448 -448v311h-224q-180 0 -349.5 -69.5t-302.5 -202.5t-201.5 -301.5t-68.5 -348.5q0 -125 30 -230t120 -275q16 -27 22 -37.5t9.5 -26t2.5 -20t-12.5 -16t-22 -17.5l-38.5 -22l-88 -52 q-27 -15 -38 -21.5t-26 -10.5t-20 -2.5t-16.5 12t-18 22t-21.5 37.5q-101 175 -145.5 326t-44.5 334zM497.5 246q-1.5 5 2.5 20t10.5 26t21.5 38l52 88l22 38.5t17.5 22t16 12.5t20 -2.5t26 -9.5t37.5 -22l90 -51q26 -15 37.5 -21.5t22 -18t12 -16.5t-2.5 -20.5t-10.5 -27 t-21.5 -38.5l-51 -88q-15 -26 -21.5 -37.5t-18 -22t-16.5 -12t-20 2.5t-26 10.5t-38 21.5l-90 51q-26 15 -37.5 21.5t-22 18t-12 16.5zM1075 58.5v43.5v103v43.5t4.5 27.5t8 18.5t19 8t28 4.5h43.5h102h43.5t28 -4.5t18.5 -7.5t7.5 -18.5t4.5 -28v-43.5v-103v-43.5t-4.5 -28 t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-102h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5zM1573.5 350q1.5 5 12 16.5t22 18t37.5 21.5l90 51q27 16 37.5 22t26 9.5t20 2.5t16 -12.5t17.5 -22.5t22 -38l51 -88q15 -27 21.5 -38t10.5 -26t2.5 -20t-12 -16.5t-22 -18t-37.5 -21.5 l-90 -51q-27 -16 -37.5 -22t-26 -10t-20 -2.5t-16 12.5t-17.5 21.5t-22 37.5l-51 88q-15 27 -21.5 38.5t-10.5 27t-2.5 20.5zM1967 639.5q-1 4.5 2.5 20t9.5 26t22 37.5l51 90q16 27 22 37.5t17.5 21.5t16 12.5t20.5 -2.5t26.5 -10l38.5 -22l88 -51q26 -15 37.5 -21.5 t22 -18t12 -16.5t-2.5 -20t-10.5 -26t-21.5 -38l-51 -90q-16 -27 -22 -37.5t-17.5 -21.5t-16 -12.5t-20 2.5t-26 10t-37.5 22l-88 52l-38.5 22t-22 17.5t-12.5 16zM1967 1818.5q1 4.5 12.5 16t22 17.5l38.5 22l88 51q27 16 37.5 22t26 10t20 2.5t16 -12.5t17.5 -21.5 t22 -37.5l51 -90q16 -27 22 -37.5t10 -26t2.5 -20t-12.5 -16t-21.5 -17.5t-37.5 -22l-88 -51q-27 -16 -38 -22t-27 -10t-20.5 -2.5t-16 12.5t-17.5 21.5t-22 37.5l-51 90q-16 27 -22 37.5t-9.5 26t-2.5 20zM2150 1178v102v43.5t4.5 27.5t8 18.5t19 8t28 4.5h43.5h102h43.5 t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-102q0 -76 -13 -89.5t-90 -13.5h-102q-77 0 -90 13.5t-13 89.5z" />
<glyph unicode="&#xe199;" d="M0 289q0 120 84.5 204.5t204.5 84.5t204.5 -84.5t84.5 -204.5t-84.5 -204.5t-204.5 -84.5t-204.5 84.5t-84.5 204.5zM0 1157v433q216 0 422 -57t380.5 -160t321 -249.5t249.5 -321t160 -380.5t57 -422h-433q0 188 -58.5 364.5t-165.5 319t-249.5 249.5t-319 165.5 t-364.5 58.5zM0 2024v434q334 0 652.5 -88.5t587.5 -247t496.5 -386t386 -496.5t247 -587.5t88.5 -652.5h-434q0 275 -73 537t-203.5 484t-317.5 409t-409 317.5t-484 203.5t-537 73z" />
<glyph unicode="&#xe19a;" d="M0 58.5v43.5v2253v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h2253q77 0 90 -13t13 -90v-2253v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-2253h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM205 205h2048v921q-77 0 -90 13t-13 90v43.5t4.5 27.5t8 18.5t19 8 t28 4.5h43.5v922h-2048v-922q77 0 89.5 -12.5t12.5 -89.5v-43.5t-4.5 -28t-8 -19t-18.5 -8t-27.5 -4.5h-43.5v-921zM512 1185.5v43.5v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5q0 -77 -13.5 -90t-89.5 -13h-43.5t-27.5 4.5 t-18.5 8t-8 19t-4.5 28zM922 1185.5v43.5v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h43.5t28 -4.5t18.5 -7.5t7.5 -18.5t4.5 -28v-43.5v-43.5t-4.5 -28t-8 -19t-18.5 -8t-27.5 -4.5h-43.5h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28zM1331 1229v43.5t4.5 27.5t8 18.5t19 8 t28 4.5h43.5h43.5t28 -4.5t18.5 -7.5t7.5 -18.5t4.5 -28v-43.5v-43.5t-4.5 -28t-8 -19t-18.5 -8t-27.5 -4.5h-43.5q-76 0 -89.5 13t-13.5 90zM1741 1185.5v43.5q0 77 12.5 89.5t89.5 12.5h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5q0 -77 -13 -90t-90 -13h-43.5 t-27.5 4.5t-18.5 8t-8 19t-4.5 28z" />
<glyph unicode="&#xe19b;" d="M517 353q46 -98 116 -168.5t156 -109.5t177.5 -57t194.5 -18q311 0 504.5 143.5t193.5 366.5q0 97 -39.5 185.5t-114.5 150.5q109 55 172.5 155t62.5 218q0 73 -26.5 137.5t-67 110.5t-102 88t-116.5 69t-125 55q-30 12 -87.5 34.5t-89.5 35.5t-79.5 35t-74 40.5t-54 43 t-40 52.5t-12.5 60q1 66 52.5 103.5t130.5 37.5q86 0 156.5 -46t100.5 -124l353 201q-71 150 -236.5 228t-376.5 78q-283 0 -450 -132t-167 -341q0 -204 177 -326q-245 -149 -244 -409q0 -81 25 -151t63.5 -119.5t97 -93t113 -71.5t122.5 -55q23 -9 77.5 -29.5t84.5 -33 t76.5 -33t74 -39t55.5 -42t41 -50.5t13 -56q0 -65 -62 -103t-160 -38q-113 0 -200.5 51.5t-106.5 142.5zM949 1325q0 108 98 163l325 -154q104 -48 153 -117.5t32 -138.5t-98 -117l-286 132q-51 21 -86.5 40.5t-69.5 47.5t-51 64t-17 80z" />
<glyph unicode="&#xe19c;" d="M0 58.5v43.5v983q61 0 102 41t41 103q0 61 -40.5 102t-102.5 41v983v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h1844l-287 -287l-103 -512q-14 -73 12 -96t91 -7l512 103l287 287v-574q-62 0 -103 -41t-41 -102t41 -102.5t103 -41.5v-983v-43.5t-4.5 -27.5t-8 -18.5t-19 -8 t-28 -4.5h-43.5h-2253h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM471 1229q0 -62 41 -103t102 -41q62 0 103 41.5t41 102.5t-41 102t-103 41t-102.5 -41t-40.5 -102zM1085 1229q0 -61 41.5 -102.5t102.5 -41.5t102 41t41 103q0 61 -41 102t-102 41q-62 0 -103 -41 t-41 -102zM1700 1229q0 -62 41 -103t102 -41t102.5 41.5t41.5 102.5t-41 102t-103 41q-61 0 -102 -41t-41 -102zM1741 1741l61 327l819 820q92 -31 164 -103t103 -164l-820 -819z" />
<glyph unicode="&#xe19d;" d="M0 58.5v43.5v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h44t28 -4.5t18.5 -8t8 -18.5t4.5 -28v-44v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM0 468.5v43.5v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h43.5t28 -4.5 t19 -8t8 -18.5t4.5 -27.5v-43.5v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM0 878.5v43.5v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-44t-4.5 -28t-8 -18.5t-18.5 -8 t-28 -4.5h-44h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28zM0 1287.5v43.5v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5q76 0 89.5 -13t13.5 -90v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM0 1697.5v43.5v43.5t4.5 28t7.5 18.5 t18.5 7.5t28 4.5h43.5h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5q0 -77 -13.5 -90t-89.5 -13h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28zM0 2106.5v43.5v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h44t28 -4.5t18.5 -8t8 -18.5t4.5 -28v-44v-43.5t-4.5 -27.5t-8 -18.5t-19 -8 t-28 -4.5h-43.5h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM410 58.5v43.5v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28z M410 410v1433h1433v-1433h-1433zM410 2106.5v43.5v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM819 58.5v43.5v44t4.5 28t8 18.5 t18.5 8t28 4.5h44h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5zM819 2106.5v43.5v44t4.5 28t8 18.5t18.5 8t28 4.5h44h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-43.5 t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5zM1229 58.5v43.5v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5q77 0 90 -13.5t13 -89.5v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28z M1229 2106.5v43.5v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5q77 0 90 -13.5t13 -89.5v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM1638 58.5v43.5q0 76 13 89.5t90 13.5h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-43.5 t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5zM1638 2106.5v43.5q0 76 13 89.5t90 13.5h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-43.5t-28 4.5t-19 8t-8 18.5 t-4.5 27.5zM2048 58.5v43.5v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h44t28 -4.5t18.5 -8t8 -18.5t4.5 -28v-44v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM2048 468.5v43.5v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5 h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM2048 878.5v43.5v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-44t-4.5 -28 t-8 -18.5t-18.5 -8t-28 -4.5h-44h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28zM2048 1287.5v43.5v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5q76 0 89.5 -13t13.5 -90v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM2048 1697.5 v43.5v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5q0 -77 -13.5 -90t-89.5 -13h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28zM2048 2106.5v43.5v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h44t28 -4.5t18.5 -8t8 -18.5t4.5 -28v-44 v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28z" />
<glyph unicode="&#xe19e;" d="M-100.5 1154.5q-0.5 8.5 0.5 22t1.5 18t4 13t5.5 10.5t9.5 6t12.5 4t17.5 1.5t21.5 1.5h28q31 -1 43.5 -1t27.5 -5t18.5 -8.5t8 -19.5t4.5 -28.5v-44.5q0 -75 -12.5 -88t-87.5 -14h-43.5t-28 4.5t-18.5 8t-7.5 19t-4.5 28v44.5q0 20 -0.5 28.5zM-33 724.5q-2 15.5 0 20.5 t14 15t24 15.5t40 17.5q29 11 41 16t28 5.5t20.5 -1t14.5 -14.5t14.5 -24.5t16.5 -41.5q12 -29 17 -40t6.5 -27t0 -20.5t-13.5 -14.5t-23.5 -14.5t-39.5 -16.5q-29 -12 -40 -17t-27 -6.5t-20.5 0.5t-15 14.5t-15 24.5t-17.5 41q-12 28 -17.5 40t-7.5 27.5zM-30.5 1506 q-6.5 17 24.5 89q11 30 15.5 42t14 25t14 15t20 1t27.5 -6t40 -17q29 -13 40.5 -17.5t23.5 -15t14 -15t0.5 -21t-6.5 -28.5t-17 -42q-12 -28 -16.5 -39t-14.5 -23.5t-14.5 -14.5t-20 -1t-27.5 6t-40 16q-71 29 -77.5 46zM201 329.5q0 4.5 8 19t16.5 23t30.5 31.5 q23 22 31.5 30.5t23 16.5t19 8t19 -8.5t23 -17l31.5 -31.5l30.5 -30.5t16.5 -22.5t8 -18.5t-8 -18.5t-16.5 -22.5l-30.5 -30.5l-30.5 -30.5t-22.5 -16.5t-18.5 -8t-19 8t-23 16.5t-31.5 30.5t-31.5 30.5t-17 22.5t-8.5 18.5zM202 1919.5q0 4.5 8 19t17.5 23t32.5 31.5 q22 24 30.5 33.5t22.5 18t18.5 8.5t18.5 -7.5t22.5 -16.5t30.5 -32t31 -31.5t16.5 -23t7 -19.5t-8 -19.5t-16.5 -24t-32 -32.5q-54 -53 -72 -53t-73 53q-22 22 -31 30.5t-16 23t-7 19zM574.5 2193q-1.5 16 0.5 20.5t15 14.5t25 14.5t42 16.5q22 10 32 14.5t24 8.5t19 5 t14.5 -2.5t12 -7.5l10 -16t11.5 -22t13 -31q11 -29 16 -41t5.5 -28t-1 -20.5t-14.5 -15t-24.5 -15t-41.5 -17.5q-29 -11 -40 -15.5t-27 -6t-20.5 0t-15 14t-15 23.5t-17.5 39q-12 29 -17 40t-6.5 27zM576.5 58q1.5 16 6.5 27t17 40t16.5 40.5t14.5 23.5t14.5 14t20.5 0.5 t28 -6.5t41 -17t40 -16.5t24 -14.5t14.5 -14.5t0.5 -20t-6 -27.5t-17 -40q-9 -21 -13 -31t-11.5 -22l-10 -16t-12 -8t-14.5 -3t-19 4.5t-24 7.5t-32 13q-29 12 -40.5 16.5t-23.5 14.5t-14 14.5t-0.5 20.5zM1024 0v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h43.5t28 -4.5 t19 -8t8 -18.5t4.5 -27.5v-43.5v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28v43.5zM1024 2209.5v43.5v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5q0 -77 -13.5 -90t-89.5 -13 h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28zM1438.5 2139q0.5 16 5.5 28t16 41q12 29 16.5 40.5t14.5 23.5t14.5 13.5t20.5 -0.5t28 -7.5t41 -18.5q30 -12 42 -16.5t25 -14.5t15 -14.5t1 -20t-6 -27.5t-17 -40q-13 -28 -17.5 -39t-15 -23.5t-15 -14t-20.5 0t-27 6t-40 15.5 q-30 13 -41.5 17.5t-24.5 15t-14.5 15t-1 20.5zM1439 114.5q-1 15.5 0.5 20t14.5 14.5t24 14.5t40 16.5t41 17t28 6.5t20.5 -0.5t14.5 -14t14.5 -23.5t16.5 -40.5q12 -28 17 -40t6 -27.5t-0.5 -20t-14.5 -14.5t-24 -14.5t-40 -16.5t-41 -17t-28 -6.5t-20.5 0.5t-14.5 14 t-14.5 23.5t-16.5 40.5q-12 28 -17 40t-6 27.5zM1794 329.5q0 4.5 8 18.5t16.5 22.5l30.5 30.5q23 23 31.5 32t23 16.5t19.5 8t19.5 -7t23 -16.5t31.5 -31q22 -23 30.5 -31.5t16.5 -23t8 -19t-8.5 -18.5t-17 -22.5t-31.5 -30.5t-31.5 -31t-23 -16.5t-19 -7.5t-19 7.5 t-23 16.5t-30.5 31l-30.5 30.5t-16.5 22.5t-8 18.5zM1794.5 1923q-0.5 5 7 19.5t16.5 23t31 31.5q17 17 24 24.5t19 16.5t15.5 11.5t13.5 2t13.5 -3t15.5 -12t19 -17.5t24 -26q23 -23 32.5 -31.5t17.5 -23t8 -19t-7 -19t-16 -23t-31 -30.5q-55 -53 -73.5 -53t-72.5 53 q-23 23 -32 32.5t-16.5 24t-8 19.5zM2049.5 645.5q-1.5 4.5 0 20.5t6.5 27t17 40q12 30 16.5 41.5t14.5 24.5t14.5 14.5t20.5 1t28 -5.5t41 -16q28 -12 40 -17.5t24 -15.5t14 -15t0 -20.5t-7.5 -27.5t-17.5 -40q-13 -29 -17.5 -41t-15 -24.5t-15 -14.5t-20.5 -0.5t-27 6.5 t-40 17q-28 12 -39.5 16.5t-23.5 14.5t-13.5 14.5zM2049.5 1586.5q-1.5 16.5 0.5 21t14 15t23.5 15t40.5 17.5q28 12 40 17t27.5 6t20 -1t14 -15t14 -25t15.5 -42q13 -29 18 -41t7 -28t0 -20.5t-14 -14.5t-23.5 -14.5t-40.5 -16.5q-28 -11 -40 -16t-27.5 -6t-20 1 t-14.5 14.5t-14.5 23.5t-16.5 39q-12 30 -17 42t-6.5 28.5zM2150 1081.5v42.5v44.5t4.5 28.5t8 19t18.5 9t28 5t44 1h28t21.5 -1.5t17.5 -1.5t12.5 -4t9.5 -6t5.5 -10.5t4 -13t1.5 -18t0.5 -22t-0.5 -28.5q0 -78 -12.5 -91t-89.5 -13q-31 1 -43 1t-27 4.5t-18.5 8t-8 18.5 t-4.5 27.5z" />
<glyph unicode="&#xe19f;" d="M0 1134.5v43.5v102v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h103h43.5t28 -4.5t18.5 -7.5t7.5 -18.5t4.5 -28v-43.5v-102v-43.5t-4.5 -28t-8 -19t-18.5 -8t-27.5 -4.5h-43.5h-103h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28zM104.5 743q1.5 5 12 16.5t22 18t37.5 21.5 l88 51q27 15 38.5 21.5t27 10.5t20.5 2.5t16.5 -12t18 -22t21.5 -37.5l51 -90q16 -27 22 -37.5t9.5 -26t2.5 -20t-12.5 -16t-22 -17.5l-38.5 -22l-88 -52q-27 -15 -38 -21.5t-26 -10.5t-20 -2.5t-16.5 12t-18 22t-21.5 37.5l-51 90q-15 27 -21.5 38t-10.5 26t-2.5 20z M104.5 1714.5q-1.5 4.5 2.5 20t10 26t22 37.5l51 90q15 26 21.5 37.5t18 22t16.5 12t20 -2.5t26 -10.5t38 -21.5l88 -51q27 -16 38 -22t22.5 -17.5t12.5 -16t-2.5 -20t-9.5 -26t-22 -37.5l-51 -90q-15 -26 -21.5 -37.5t-18 -22t-16.5 -12t-20.5 2.5t-27 10.5t-38.5 21.5 l-88 51q-27 16 -37.5 22t-21.5 17.5t-12.5 16zM497.5 246q-1.5 5 2.5 20t10.5 26t21.5 38l52 88l22 38.5t17.5 22t16 12.5t20 -2.5t26 -9.5t37.5 -22l90 -51q26 -15 37.5 -21.5t22 -18t12 -16.5t-2.5 -20.5t-10.5 -27t-21.5 -38.5l-51 -88q-15 -26 -21.5 -37.5t-18 -22 t-16.5 -12t-20 2.5t-26 10.5t-38 21.5l-90 51q-26 15 -37.5 21.5t-22 18t-12 16.5zM497.5 2211.5q1.5 4.5 12.5 16t21.5 17.5t37.5 22l90 51q27 15 38 21.5t26 10.5t20 2.5t16.5 -12t18 -22t21.5 -37.5l51 -88l22 -38.5t10 -26.5t2.5 -20.5t-12.5 -16t-21.5 -17.5t-37.5 -22 l-90 -51q-27 -16 -37.5 -22t-26 -9.5t-20 -2.5t-16 12.5t-17.5 22l-22 38.5l-52 88q-16 27 -22 37.5t-10 26t-2.5 20zM1075 58.5v43.5v103v43.5t4.5 27.5t8 18.5t19 8t28 4.5h43.5h102h43.5t28 -4.5t18.5 -7.5t7.5 -18.5t4.5 -28v-43.5v-103v-43.5t-4.5 -28t-7.5 -18.5 t-18.5 -7.5t-28 -4.5h-43.5h-102h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5zM1075 2253v102q0 77 13.5 90t89.5 13h102h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-102v-43.5t-4.5 -28t-8 -19t-18.5 -8t-27.5 -4.5h-43.5h-102q-76 0 -89.5 13t-13.5 90zM1573.5 350 q1.5 5 12 16.5t22 18t37.5 21.5l90 51q27 16 37.5 22t26 9.5t20 2.5t16 -12.5t17.5 -22.5t22 -38l51 -88q15 -27 21.5 -38t10.5 -26t2.5 -20t-12 -16.5t-22 -18t-37.5 -21.5l-90 -51q-27 -16 -37.5 -22t-26 -10t-20 -2.5t-16 12.5t-17.5 21.5t-22 37.5l-51 88 q-15 27 -21.5 38.5t-10.5 27t-2.5 20.5zM1573.5 2107.5q-1.5 4.5 2.5 20.5t10 27t22 38l51 88q16 27 22 37.5t17.5 21.5t16 12.5t20 -2.5t26 -10t37.5 -22l90 -51q27 -16 37.5 -22t21.5 -17.5t12.5 -16t-2.5 -20t-10 -26t-22 -37.5l-51 -88l-22 -38.5t-17.5 -22t-16 -12.5 t-20 2.5t-26 9.5t-37.5 22l-90 51q-27 16 -37.5 22t-21.5 17.5t-12.5 16zM1967 639.5q-1 4.5 2.5 20t9.5 26t22 37.5l51 90q16 27 22 37.5t17.5 21.5t16 12.5t20.5 -2.5t26.5 -10l38.5 -22l88 -51q26 -15 37.5 -21.5t22 -18t12 -16.5t-2.5 -20t-10.5 -26t-21.5 -38l-51 -90 q-16 -27 -22 -37.5t-17.5 -21.5t-16 -12.5t-20 2.5t-26 10t-37.5 22l-88 52l-38.5 22t-22 17.5t-12.5 16zM1967 1818.5q1 4.5 12.5 16t22 17.5l38.5 22l88 51q27 16 37.5 22t26 10t20 2.5t16 -12.5t17.5 -21.5t22 -37.5l51 -90q16 -27 22 -37.5t10 -26t2.5 -20t-12.5 -16 t-21.5 -17.5t-37.5 -22l-88 -51q-27 -16 -38 -22t-27 -10t-20.5 -2.5t-16 12.5t-17.5 21.5t-22 37.5l-51 90q-16 27 -22 37.5t-9.5 26t-2.5 20zM2150 1178v102v43.5t4.5 27.5t8 18.5t19 8t28 4.5h43.5h102h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-102q0 -76 -13 -89.5 t-90 -13.5h-102q-77 0 -90 13.5t-13 89.5z" />
<glyph unicode="&#xe1a0;" d="M0 58.5v43.5v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h44t28 -4.5t18.5 -8t8 -18.5t4.5 -28v-44v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM0 468.5v43.5v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h43.5t28 -4.5 t19 -8t8 -18.5t4.5 -27.5v-43.5v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM0 878.5v43.5v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-44t-4.5 -28t-8 -18.5t-18.5 -8 t-28 -4.5h-44h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28zM0 1287.5v43.5v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5q76 0 89.5 -13t13.5 -90v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM0 1697.5v43.5v43.5t4.5 28t7.5 18.5 t18.5 7.5t28 4.5h43.5h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5q0 -77 -13.5 -90t-89.5 -13h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28zM0 2106.5v43.5v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h44t28 -4.5t18.5 -8t8 -18.5t4.5 -28v-44v-43.5t-4.5 -27.5t-8 -18.5t-19 -8 t-28 -4.5h-43.5h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM410 58.5v43.5v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28z M410 2106.5v43.5v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM819 58.5v43.5v44t4.5 28t8 18.5t18.5 8t28 4.5h44h43.5 t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5zM819 2106.5v43.5v44t4.5 28t8 18.5t18.5 8t28 4.5h44h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-43.5t-4.5 -28t-7.5 -18.5 t-18.5 -7.5t-28 -4.5h-43.5h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5zM1229 58.5v43.5v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5q77 0 90 -13.5t13 -89.5v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM1229 2106.5v43.5v43.5 t4.5 28t8 19t18.5 8t27.5 4.5h43.5q77 0 90 -13.5t13 -89.5v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM1638 58.5v43.5q0 76 13 89.5t90 13.5h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-43.5t-4.5 -28t-7.5 -18.5 t-18.5 -7.5t-28 -4.5h-43.5h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5zM1638 2106.5v43.5q0 76 13 89.5t90 13.5h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5zM2048 58.5v43.5 v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h44t28 -4.5t18.5 -8t8 -18.5t4.5 -28v-44v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM2048 468.5v43.5v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h43.5t28 -4.5t19 -8t8 -18.5 t4.5 -27.5v-43.5v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM2048 878.5v43.5v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-44t-4.5 -28t-8 -18.5t-18.5 -8t-28 -4.5h-44 h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28zM2048 1287.5v43.5v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5q76 0 89.5 -13t13.5 -90v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM2048 1697.5v43.5v43.5t4.5 28t7.5 18.5 t18.5 7.5t28 4.5h43.5h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5q0 -77 -13.5 -90t-89.5 -13h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28zM2048 2106.5v43.5v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h44t28 -4.5t18.5 -8t8 -18.5t4.5 -28v-44v-43.5t-4.5 -27.5t-8 -18.5 t-19 -8t-28 -4.5h-43.5h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28z" />
<glyph unicode="&#xe1a1;" d="M0 58.5v43.5v103v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h103q77 0 89.5 -12.5t12.5 -89.5v-103v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-103h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM0 595.5v43.5v102v44.5t4.5 28.5t8 19.5t18.5 8t27.5 4.5 h43.5h103h43.5t27.5 -4.5t18.5 -8t8 -19.5t4.5 -28.5v-44.5v-102q0 -77 -12.5 -89.5t-89.5 -12.5h-103h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM0 1134.5v43.5v102v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h103h43.5t28 -4.5t18.5 -7.5t7.5 -18.5t4.5 -28v-43.5 v-102v-43.5t-4.5 -28t-8 -19t-18.5 -8t-27.5 -4.5h-43.5h-103h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28zM0 1672.5v43.5v103v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h103q77 0 89.5 -12.5t12.5 -89.5v-103v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-103 h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM0 2209.5v43.5v102v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h103h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-102v-43.5t-4.5 -28t-8 -19t-18.5 -8t-27.5 -4.5h-43.5h-103h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28zM539 58.5 v43.5v103q0 77 12.5 89.5t89.5 12.5h102h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-103v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-102h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM539 2209.5v43.5v102v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h102 q77 0 90 -13t13 -90v-102q0 -77 -13 -90t-90 -13h-102h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28zM1075 58.5v43.5v103v43.5t4.5 27.5t8 18.5t19 8t28 4.5h43.5h102h43.5t28 -4.5t18.5 -7.5t7.5 -18.5t4.5 -28v-43.5v-103v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5 h-43.5h-102h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5zM1075 2253v102q0 77 13.5 90t89.5 13h102h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-102v-43.5t-4.5 -28t-8 -19t-18.5 -8t-27.5 -4.5h-43.5h-102q-76 0 -89.5 13t-13.5 90zM1614 58.5v43.5v103v43.5t4.5 28 t7.5 18.5t18.5 7.5t28 4.5h43.5h103q77 0 89.5 -12.5t12.5 -89.5v-103v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-103h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM1614 2209.5v43.5v102v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h103h43.5t27.5 -4.5t18.5 -8 t8 -19t4.5 -28v-43.5v-102v-43.5t-4.5 -28t-8 -19t-18.5 -8t-27.5 -4.5h-43.5h-103h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28zM2150 58.5v43.5v103v43.5t4.5 27.5t8 18.5t19 8t28 4.5h43.5h102h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-103v-43.5t-4.5 -27.5t-8 -18.5 t-19 -8t-28 -4.5h-43.5h-102h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5zM2150 595.5v43.5v102q0 78 13 91.5t90 13.5h102q77 0 90 -13.5t13 -91.5v-102v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-102h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5zM2150 1178v102v43.5 t4.5 27.5t8 18.5t19 8t28 4.5h43.5h102h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-102q0 -76 -13 -89.5t-90 -13.5h-102q-77 0 -90 13.5t-13 89.5zM2150 1672.5v43.5v103v43.5t4.5 27.5t8 18.5t19 8t28 4.5h43.5h102h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-103 v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-102h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5zM2150 2253v102q0 77 13 90t90 13h102q77 0 90 -13t13 -90v-102q0 -77 -13 -90t-90 -13h-102q-77 0 -90 13t-13 90z" />
<glyph unicode="&#xe1a2;" d="M0 58.5v43.5v410v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h2253h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-410v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-2253h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM0 775.5v43.5v410v43.5t4.5 28t7.5 18.5 t18.5 7.5t28 4.5h43.5h2253h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-410v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-2253h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM0 1492.5v43.5v410q0 76 6.5 95.5t44.5 57.5l359 359h1638l358 -359q39 -39 45.5 -58 t6.5 -95v-410v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-2253h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM1741 307q0 -38 32 -70t70 -32t70.5 32t32.5 70t-32.5 70.5t-70.5 32.5t-70 -32.5t-32 -70.5zM1741 1024q0 -38 32 -70t70 -32t70.5 32t32.5 70t-32.5 70 t-70.5 32t-70 -32t-32 -70zM1741 1741q0 -38 32 -70.5t70 -32.5t70.5 32.5t32.5 70.5t-32.5 70t-70.5 32t-70 -32t-32 -70zM2048 307q0 -38 32 -70t70 -32t70.5 32t32.5 70t-32.5 70.5t-70.5 32.5t-70 -32.5t-32 -70.5zM2048 1024q0 -38 32 -70t70 -32t70.5 32t32.5 70 t-32.5 70t-70.5 32t-70 -32t-32 -70zM2048 1741q0 -38 32 -70.5t70 -32.5t70.5 32.5t32.5 70.5t-32.5 70t-70.5 32t-70 -32t-32 -70z" />
<glyph unicode="&#xe1a3;" d="M0 1331q0 181 63 352.5t178 310t267 244t338.5 163t382.5 57.5t382.5 -57.5t338.5 -163t267 -244t178 -310t63 -352.5q0 -225 -82.5 -420t-232.5 -345l315 -566l-674 321q-260 -116 -555 -116q-198 0 -383 52.5t-337.5 152.5t-267 236t-178 312.5t-63.5 372.5z" />
<glyph unicode="&#xe1a4;" d="M-102 1229l307 358l-51 410l460 102l205 410l410 -205l409 205l205 -410l461 -102l-51 -410l307 -358l-307 -307l51 -461l-461 -103l-205 -409l-409 205l-410 -205l-205 409l-460 103l51 461z" />
<glyph unicode="&#xe1a5;" d="M0 1229q0 245 99 472t265 393t393 265t472 99t472 -99t393 -265t265 -393t99 -472t-99 -472t-265 -393t-393 -265t-472 -99t-472 99t-393 265t-265 393t-99 472z" />
<glyph unicode="&#xe1a6;" d="M-307 870q0 191 108 339t301 225q0 169 71.5 322t190.5 261t278.5 172t330.5 64q270 0 487 -148t332 -415q51 51 205 51q151 0 292.5 -63t245.5 -167t167 -245.5t63 -292.5t-63 -292.5t-167 -245.5t-245.5 -167t-292.5 -63h-1639q-176 0 -329.5 91t-244.5 244.5 t-91 329.5z" />
<glyph unicode="&#xe1a7;" d="M51 666l563 563l-563 563l615 614l563 -563l563 563l614 -614l-563 -563l563 -563l-614 -615l-563 563l-563 -563z" />
<glyph unicode="&#xe1a8;" d="M0 1591q0 131 49 253t131 211.5t195.5 143.5t236.5 54q179 0 338.5 -96t278.5 -279q119 183 278 279t338 96q124 0 238 -53.5t196 -143.5t130.5 -212t48.5 -253q0 -112 -27.5 -212.5t-58.5 -170t-120.5 -175.5t-144.5 -163t-200 -198q-88 -86 -135 -133l-543 -539 l-543 539q-47 47 -135 133q-115 112 -168 166t-132 141t-113 143.5t-72.5 136t-52 159t-13.5 173.5z" />
<glyph unicode="&#xe1a9;" d="M-205 1229l717 1229h1434l716 -1229l-716 -1229h-1434z" />
<glyph unicode="&#xe1aa;" d="M0 717v1024l717 717h1024l717 -717v-1024l-717 -717h-1024z" />
<glyph unicode="&#xe1ab;" d="M-51 1536l1280 922l1280 -922l-461 -1536h-1638z" />
<glyph unicode="&#xe1ac;" d="M0 819v819h819v820h819v-820h820v-819h-820v-819h-819v819h-819z" />
<glyph unicode="&#xe1ad;" d="M0 0v2458h2458v-2458h-2458z" />
<glyph unicode="&#xe1ae;" d="M-158 1608l998 112l389 942l388 -942l999 -112l-777 -610l222 -998l-832 555l-888 -555l278 998z" />
<glyph unicode="&#xe1af;" d="M-256 0l1485 2458l1485 -2458h-2970z" />
<glyph unicode="&#xe1b0;" d="M0 614v1844h1843v-820q-207 0 -396.5 -81.5t-327 -219t-219 -327t-81.5 -396.5h-819zM1024 614q0 170 63.5 322t172.5 261t261 173t322 64t322 -64t261 -173t172.5 -261t63.5 -322q0 -227 -108 -415t-296 -296t-415 -108t-415 108t-296 296t-108 415z" />
<glyph unicode="&#xe1b1;" d="M0 512q0 247 92 464.5t253 374.5t390.5 248t493.5 91v563l1229 -922l-1229 -921v563q-131 0 -266 -13t-284.5 -46.5t-276 -84t-235 -132.5t-167.5 -185z" />
<glyph unicode="&#xe1b2;" d="M-33 2048h320l297 -922h1145l184 1127h545v-307h-297l-185 -1127h-1618zM307 410q0 85 60 144.5t145 59.5t145 -59.5t60 -144.5t-60 -145t-145 -60t-145 60t-60 145zM1638 410q0 85 60 144.5t145 59.5t145 -59.5t60 -144.5t-60 -145t-145 -60t-145 60t-60 145z" />
<glyph unicode="&#xe1b3;" d="M-436 1601q226 226 501.5 382t565.5 231t598 75t598 -75t565.5 -231t501.5 -382l-207 -207q-198 198 -439.5 334.5t-495.5 202t-523 65.5t-523 -65.5t-495.5 -202t-439.5 -334.5zM-2 1166q167 167 371 282.5t418.5 171t441.5 55.5t441.5 -55.5t418.5 -171t371 -282.5 l-218 -217q-138 138 -305.5 232.5t-344 140.5t-364 46t-364 -46t-344 -140.5t-305.5 -232.5zM432 732q162 162 372.5 246t424 84t424 -84t372.5 -246l-217 -218q-157 157 -368 212.5t-422 0t-368 -212.5zM1024 225q0 85 60 145t145 60t145 -60t60 -145t-60 -145t-145 -60 t-145 60t-60 145z" />
<glyph unicode="&#xe1b4;" d="M0 205q0 85 60 145t145 60t145 -60t60 -145t-60 -145t-145 -60t-145 60t-60 145zM0 819v307q229 0 437.5 -89.5t359 -240t240 -359t89.5 -437.5h-307q0 166 -65 318t-174.5 261.5t-261.5 174.5t-318 65zM0 1434v307q236 0 462 -62.5t416.5 -175t351.5 -273.5 t273.5 -351.5t175 -416.5t62.5 -462h-307q0 233 -72.5 452t-205 395.5t-309 309t-395.5 205t-452 72.5zM0 2063v292q320 0 625 -84.5t563.5 -236.5t476 -369.5t369.5 -476t236.5 -563.5t84.5 -625h-292q0 211 -42 415.5t-120 387.5t-191 350t-251.5 305.5t-305.5 251.5 t-350 191t-387.5 120t-415.5 42z" />
<glyph unicode="&#xe1b5;" d="M0 2048l307 410l307 -410h-204v-1638h1638v204l410 -307l-410 -307v205h-1741q-77 0 -89.5 12.5t-12.5 89.5v1741h-205zM819 2106.5v43.5v44t4.5 28t8 18.5t18.5 8t28 4.5h44h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5 h-43.5h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5zM1229 2106.5v43.5v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5q77 0 90 -13.5t13 -89.5v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM1638 2106.5v43.5q0 76 13 89.5t90 13.5 h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5zM2048 878.5v43.5v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-44t-4.5 -28 t-8 -18.5t-18.5 -8t-28 -4.5h-44h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28zM2048 1287.5v43.5v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5q76 0 89.5 -13t13.5 -90v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM2048 1697.5 v43.5v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5q0 -77 -13.5 -90t-89.5 -13h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28zM2048 2106.5v43.5v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h44t28 -4.5t18.5 -8t8 -18.5t4.5 -28v-44 v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28z" />
<glyph unicode="&#xe1b6;" d="M0 58.5v43.5v2253v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h2253q77 0 90 -13t13 -90v-2253v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-2253h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM205 1229l409 -348v204h471v-471h-204l348 -409l348 409h-205v471h471 v-204l410 348l-410 348v-205h-471v471h205l-348 410l-348 -410h204v-471h-471v205z" />
<glyph unicode="&#xe1b7;" d="M0 58.5v43.5v2253v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h2253q77 0 90 -13t13 -90v-2253v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-2253h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM205 1229l614 -512v368h819v-368l615 512l-615 512v-369h-819v369z" />
<glyph unicode="&#xe1b8;" d="M0 58.5v43.5v2253v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h2253q77 0 90 -13t13 -90v-2253v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-2253h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM717 819l512 -614l512 614h-369v819h369l-512 615l-512 -615h368v-819 h-368z" />
<glyph unicode="&#xe1b9;" d="M0 1229q0 249 97.5 476.5t262 392.5t392 262.5t477.5 97.5t477.5 -97.5t392 -262.5t262 -392.5t97.5 -476.5q0 -250 -97.5 -477.5t-262 -392t-392 -262t-477.5 -97.5t-477.5 97.5t-392 262t-262 392t-97.5 477.5zM179 1227q0 -199 71 -379.5t199 -322.5q11 18 26.5 42.5 t58.5 81.5t90.5 111.5t122 124t154 127.5t185 114t216.5 92q14 5 42 13q-26 60 -86 178q-181 -54 -376 -89t-350 -46t-230.5 -13.5t-121.5 -1.5q0 -5 -0.5 -16t-0.5 -16zM201 1442q38 -1 108.5 2t205 12.5t311 39t346.5 74.5q-189 335 -389 607q-222 -104 -376.5 -298 t-205.5 -437zM585 399q283 -221 644 -221q216 0 410 83q-68 388 -224 796l-7 -2q-121 -42 -231 -99.5t-188 -113.5t-147.5 -120t-111.5 -113t-77 -99.5t-47.5 -72.5t-20.5 -38zM983 2248q32 -43 77.5 -107.5t141 -215t172.5 -292.5q105 39 198.5 91t151 94.5t106.5 89 t66.5 67.5t28.5 37q-142 126 -321 195.5t-375 69.5q-125 0 -246 -29zM1455 1477q44 -91 70 -152q8 -18 22 -54q98 12 208 13.5t188.5 -4t163.5 -16.5t113.5 -16t57.5 -11q-1 183 -63 350t-174 304q-12 -17 -32 -40t-72.5 -73t-114 -96.5t-160 -103.5t-207.5 -101zM1611 1105 q143 -394 204 -748q178 121 296.5 304t153.5 400q-23 7 -51 14.5t-99.5 20.5t-142 20t-169.5 5.5t-192 -16.5z" />
<glyph unicode="&#xe1ba;" d="M-102 1088l541 434l790 -488l-548 -457zM-102 1956l783 511l548 -457l-790 -488zM446 461v172l235 -153l549 456l550 -456l235 153v-172l-785 -471zM1229 1034l789 488l542 -434l-783 -511zM1229 2010l548 457l783 -511l-542 -434z" />
<glyph unicode="&#xe1bb;" d="M591 1121v437h377v322q0 275 153 426.5t409 151.5q193 0 337 -18v-390h-231q-126 0 -171.5 -53.5t-45.5 -159.5v-279h433l-57 -437h-376v-1121h-451v1121h-377z" />
<glyph unicode="&#xe1bc;" d="M0 1229q0 153 75.5 282.5t205.5 205t283 75.5t282.5 -75.5t205 -205t75.5 -282.5t-75.5 -283t-205 -205.5t-282.5 -75.5q-115 0 -219 44.5t-180 120.5t-120.5 180t-44.5 219zM1331 1229q0 153 75.5 282.5t205 205t282.5 75.5t283 -75.5t205.5 -205t75.5 -282.5 q0 -115 -44.5 -219t-120.5 -180t-180 -120.5t-219 -44.5q-153 0 -282.5 75.5t-205 205.5t-75.5 283z" />
<glyph unicode="&#xe1bd;" d="M394 460q-5 99 30.5 184t98.5 144.5t150 105t179 71t191 37.5q116 13 242 3q-84 55 -112.5 152.5t14.5 172.5q11 17 5 17q-2 1 -9 -1q-11 -2 -18 -3q-195 -30 -368 82.5t-219 302.5q-23 101 -12.5 194.5t49.5 176.5q78 170 243 264.5t367 94.5q531 0 800 -2l-188 -123 h-216q138 -96 198 -258q68 -176 6 -339q-60 -160 -236 -263q-97 -58 -104 -136q-2 -33 10.5 -67t27.5 -57t51.5 -56.5t52.5 -46.5t62 -46t52 -38q108 -81 166.5 -189t58 -235.5t-69.5 -250.5q-65 -117 -190.5 -197.5t-278 -116.5t-328.5 -37q-207 1 -366 61t-245.5 163.5 t-93.5 235.5zM694.5 452.5q14.5 -71.5 59.5 -124t103.5 -88.5t133 -56.5t147.5 -27.5t146 -3q192 11 306.5 94.5t127.5 208.5q13 106 -41.5 207.5t-187.5 185.5q-44 28 -99 68q-167 6 -181 5q-84 -3 -167 -23.5t-156.5 -57.5t-125.5 -95.5t-65 -129.5q-15 -92 -0.5 -163.5z M875 2154q-48 -134 5 -352q33 -129 107.5 -221t169.5 -127.5t189 -9.5q67 19 114.5 63t69 103.5t27.5 133t-8 149.5q-25 153 -101.5 265.5t-180 158.5t-207.5 13q-137 -42 -185 -176z" />
<glyph unicode="&#xe1be;" d="M0 58.5v43.5v2253v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h2253q77 0 90 -13t13 -90v-2253v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-2253h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM410 1229q0 -166 65 -318t174.5 -261.5t261.5 -174.5t318 -65t318 65 t261.5 174.5t174.5 261.5t65 318t-65 318t-174.5 261.5t-261.5 174.5t-318 65t-318 -65t-261.5 -174.5t-174.5 -261.5t-65 -318zM529 1228v21q27 -1 80.5 1t155.5 9t232.5 30.5t251.5 59.5q20 -39 56 -119q-4 -1 -13 -3.5t-14 -4.5q-101 -33 -196 -91.5t-155.5 -112.5 t-114.5 -118.5t-72.5 -91.5t-30.5 -48q-86 95 -133 215t-47 253zM544 1371q34 162 136.5 291.5t250.5 198.5q147 -204 260 -405q-319 -85 -647 -85zM799 676q10 19 24 43t61 81.5t103.5 108t153 108.5t207.5 96l5 1q108 -282 149 -530q-131 -56 -273 -56q-241 0 -430 148z M1065 1908q77 19 164 19q131 0 250 -46t214 -130q-11 -16 -30 -36t-63 -60.5t-116 -82.5t-158 -74q-113 208 -261 410zM1380 1394q73 30 138.5 68t106 68.5t76 64.5t48 48.5t21.5 26.5q155 -190 158 -436q-15 3 -37.5 7t-76.5 11t-108 11t-127 3t-138 -9l-15 36 q-30 68 -46 101zM1484 1147q62 10 127.5 11t113.5 -4t94 -13.5t67 -14t34 -9.5q-23 -145 -102 -266.5t-198 -202.5q-37 230 -136 499z" />
<glyph unicode="&#xe1bf;" d="M0 58.5v43.5v2253v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h2253q77 0 90 -13t13 -90v-2253v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-2253h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM475 1149l443 -289l311 259l310 -259l444 289l-307 246l307 246l-444 289 l-310 -259l-311 259l-443 -289l306 -246zM781 1395l448 276l447 -276l-447 -276zM785 794l445 -267l444 267v98l-133 -87l-311 258l-312 -258l-133 87v-98z" />
<glyph unicode="&#xe1c0;" d="M0 58.5v43.5v2253v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h2253q77 0 90 -13t13 -90v-2253v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-659v952h319l48 371h-367v236q0 90 38.5 135.5t145.5 45.5h196v332q-95 14 -286 14q-217 0 -347 -128.5t-130 -361.5v-273 h-321v-371h321v-952h-1211h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28z" />
<glyph unicode="&#xe1c1;" d="M0 58.5v43.5v2253v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h2253q77 0 90 -13t13 -90v-2253v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-2253h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM525 1229q0 -133 94.5 -228t228.5 -95t228.5 95t94.5 228t-94.5 228 t-228.5 95t-228.5 -95t-94.5 -228zM1287 1229q0 -133 94.5 -228t228.5 -95t228.5 95t94.5 228t-94.5 228t-228.5 95t-228.5 -95t-94.5 -228z" />
<glyph unicode="&#xe1c2;" d="M0 58.5v43.5v2253v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h2253q77 0 90 -13t13 -90v-2253v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-2253h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM698 697q7 -126 126.5 -206t314.5 -81q169 1 303.5 56t194.5 163 q63 121 35 233t-131 189q-7 5 -32.5 23.5t-38.5 28.5t-34 29.5t-31.5 34.5t-18 36t-6.5 42q5 48 65 85q109 63 148 165q38 101 -4 211q-39 102 -124 161h135l118 77q-336 2 -500 2q-126 0 -229 -59.5t-152 -165.5q-52 -113 -23 -232q19 -78 75 -138t134 -87t158 -15 q4 1 11 2t7 -1t-5 -9q-27 -47 -9 -108.5t70 -95.5q-79 7 -151 -1q-78 -9 -149 -33t-131.5 -64t-95 -102.5t-30.5 -139.5zM887 795q11 58 63.5 102.5t119.5 65.5t138 23q1 0 113 -3q49 -34 62 -42q161 -102 143 -247q-9 -77 -80 -129.5t-191 -59.5q-55 -3 -110 4t-108 27.5 t-90.5 53t-55 86t-4.5 119.5zM999 1756q30 84 116 110q100 31 190.5 -48.5t114.5 -224.5q17 -103 -13.5 -180.5t-113.5 -100.5q-90 -25 -175 38.5t-116 185.5q-33 136 -3 220z" />
<glyph unicode="&#xe1c3;" d="M0 58.5v43.5v2253v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h2253q77 0 90 -13t13 -90v-2253v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-2253h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM762 1398h178v-566q0 -108 23 -168q22 -57 84 -110q61 -52 145 -80 t195 -28q95 0 181 20q89 21 188 68v254q-121 -79 -244 -79q-67 0 -122 32q-41 24 -56 63q-14 38 -14 181v413h382v254h-382v407h-230q-15 -123 -56 -205q-41 -81 -109 -139q-69 -58 -163 -88v-229z" />
<glyph unicode="&#xe1c4;" d="M0 58.5v43.5v2253v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h2253q77 0 90 -13t13 -90v-2253v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-2253h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM347 675q253 -163 555 -163q139 0 266.5 32t229 88.5t188.5 134 t150 169.5t107.5 193t66 205.5t21.5 207.5q0 31 -1 47q107 77 181 187q-97 -43 -208 -57q117 70 159 200q-110 -65 -230 -88q-51 54 -119.5 84.5t-144.5 30.5q-150 0 -256 -106t-106 -256q0 -40 10 -83q-222 11 -415.5 111t-330.5 267q-49 -84 -49 -182q0 -93 43.5 -172 t117.5 -129q-88 3 -164 45v-4q0 -130 82.5 -230t207.5 -125q-49 -13 -95 -13q-29 0 -68 7q35 -109 128 -179.5t210 -72.5q-197 -154 -450 -154q-39 0 -86 5z" />
<glyph unicode="&#xe1c5;" d="M0 58.5v43.5v2253v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h2253q77 0 90 -13t13 -90v-2253v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-2253h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM293 1584l83 -108q120 84 140 84q91 0 171 -287l143 -526 q108 -286 263 -286q252 0 613 470q350 449 362 710q17 347 -258 355q-370 12 -500 -416q69 29 131 29q137 0 120 -152q-7 -90 -120 -268q-112 -177 -167 -177q-72 0 -132 272q-23 95 -72 407q-24 151 -87.5 222t-167.5 61q-87 -7 -263 -159q-142 -128 -259 -231z" />
<glyph unicode="&#xe1c6;" d="M0 58.5v43.5v2253v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h2253q77 0 90 -13t13 -90v-2253v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-2253h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM614 1728q1 -167 25 -318.5t60 -262t86.5 -209t95.5 -161t97 -117.5 t80.5 -79t55.5 -44q8 -6 11 -8q39 -31 58.5 -35.5t74.5 -1.5q52 3 161 120t242 324q22 34 49 81q34 -8 67 -12.5t49 -4.5l16 -1v182q-80 8 -145 33t-106.5 58t-73 77t-47 82.5t-25 82.5t-11.5 69t-2 49q0 53 53 83.5t105.5 5.5t52.5 -108q-1 -137 -36 -275h219q16 96 16 320 q0 137 -110 219q-97 72 -222 66q-135 -7 -213 -102q-69 -85 -69 -217q0 -373 286 -534q-34 -67 -76 -129.5t-77.5 -104t-66.5 -73.5t-48 -47l-18 -14q-94 76 -167.5 173t-116 190.5t-72 189t-40.5 175.5t-16 143.5t-4 98.5l2 36h-200z" />
<glyph unicode="&#xe1c7;" d="M0 58.5v43.5v2253v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h2253q77 0 90 -13t13 -90v-2253v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-2253h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM467 838q0 -245 27 -360q14 -61 59 -102t105 -48q189 -21 571 -21 q381 0 570 21q60 7 105.5 48t59.5 102q13 53 19 123t6.5 111t0.5 126t-0.5 126t-6.5 111t-19 123q-14 61 -59.5 102t-105.5 48q-189 21 -570 21q-382 0 -571 -21q-60 -7 -105 -48t-59 -102q-27 -115 -27 -360zM581 1095v96h321v-96h-111v-586h-102v586h-108zM713 2150 q4 -13 31.5 -91.5t41.5 -120.5t31.5 -102.5t24.5 -95.5v-279h103v279l124 410h-104l-70 -270l-74 270h-108zM915 615v402h92v-374q0 -33 1 -36q3 -22 21 -22q29 0 59 43v389h92v-508h-92v55q-55 -62 -106 -62q-46 0 -59 37q-8 24 -8 76zM1070 1628q0 -83 29 -121 q39 -53 109 -53q69 0 108 53q29 40 29 121v179q0 81 -29 121q-39 53 -108 53q-70 0 -109 -53q-29 -38 -29 -121v-179zM1163 1610v216q0 71 45 71q44 0 44 -71v-216q0 -71 -44 -71q-45 0 -45 71zM1259 509v682h92v-223q45 55 96 55q55 0 73 -57q9 -30 9 -103v-202 q0 -69 -9 -102q-18 -57 -73 -57q-50 0 -96 56v-49h-92zM1351 608q23 -23 46 -23q40 0 40 69v217q0 69 -40 69q-24 0 -46 -22v-310zM1422 1569q0 -51 8 -77q13 -38 60 -38q50 0 106 63v-56h93v514h-93v-393q-31 -43 -59 -43q-19 0 -22 22q-1 3 -1 36v378h-92v-406zM1601 673 v178q0 82 29 120q40 52 110 52q69 0 108 -52q29 -40 29 -120v-105h-184v-90q0 -71 47 -71q34 0 41 37q2 10 2 63h94v-14q0 -41 -2 -59q-4 -29 -22 -55q-39 -55 -111 -55q-71 0 -111 52q-30 37 -30 119zM1693 823h92v47q0 70 -46 70t-46 -70v-47z" />
<glyph unicode="&#xe1c8;" d="M472 1451v348q143 46 248 134q103 88 166 211q62 120 86 314h349v-622h583v-385h-583v-631q0 -213 23 -274t84 -97q80 -49 187 -49q186 0 371 122v-388q-153 -73 -285 -104q-127 -30 -277 -30q-165 0 -297 43q-128 42 -221 121q-90 77 -127 168q-35 90 -35 257v862h-272z " />
<glyph unicode="&#xe1c9;" d="M-32 437q57 -7 123 -7q179 0 343.5 57.5t299.5 163.5q-168 3 -300.5 103t-182.5 256q48 -9 97 -9q71 0 136 18q-179 36 -297 178.5t-118 328.5v7q110 -61 235 -65q-106 71 -168 184.5t-62 245.5q0 142 70 260q194 -239 471 -381.5t595 -158.5q-14 59 -14 118 q0 140 69.5 259t188.5 188.5t259 69.5q110 0 208 -43t170 -120q173 34 328 125q-60 -186 -227 -286q153 17 297 81q-102 -153 -259 -267q2 -44 2 -67q0 -128 -24.5 -259t-71.5 -259t-119 -248t-163.5 -226t-209.5 -194t-251.5 -151.5t-295.5 -98.5t-336 -35q-432 0 -793 232 z" />
<glyph unicode="&#xe1ca;" d="M2 1698q112 98 343 307q233 202 349 212q138 13 222.5 -81t116.5 -295q71 -448 95 -540q80 -361 175 -361q73 0 222 234q147 232 158 356q21 202 -158 202q-85 0 -175 -39q174 569 664 553q363 -10 342 -471q-15 -343 -480 -942q-482 -624 -813 -624q-207 0 -349 380 q-32 116 -95.5 348.5t-94.5 348.5q-105 381 -227 381q-26 0 -185 -111z" />
<glyph unicode="&#xe1cb;" d="M205 2072h333q-1 -13 -2 -37.5t1 -102t9.5 -157.5t28 -197t51 -228t84.5 -243t122.5 -250t170.5 -240t225 -222q11 9 30.5 26t77.5 75.5t113.5 124.5t126.5 171.5t128 216.5q-77 44 -143 97.5t-129 132.5t-107 172.5t-70.5 219t-26.5 268.5q0 274 171 418 q135 113 329 113q184 -1 328 -101q158 -111 189 -292q7 -40 7 -82q0 -136 -0.5 -196.5t-7 -159.5t-19.5 -178h-366q59 228 60 459q0 140 -92 182q-71 33 -153 -5q-74 -33 -99 -99q-8 -23 -8 -47q0 -39 3.5 -82t19.5 -115t42.5 -137t78.5 -138t121.5 -128t178 -97t241.5 -55 v-302q-93 0 -222 29q-39 -69 -80 -134q-221 -346 -402.5 -540.5t-269.5 -199.5q-52 -4 -86 -3t-62 14.5t-74 50.5q-5 4 -18 14q-40 30 -68.5 53.5t-94.5 86t-118 124t-124.5 164t-127.5 209.5t-113.5 256t-97 308t-63.5 362t-26 421z" />
<glyph unicode="&#xe1cc;" d="M213 708q0 102 1.5 164.5t10 153t24.5 162.5q19 81 79 136t140 64q252 28 761 28t761 -28q80 -9 140 -64t79 -136q16 -72 24.5 -163.5t9.5 -151t1 -165.5t-1 -165.5t-9.5 -151t-24.5 -163.5q-19 -81 -79.5 -136t-140.5 -64q-252 -28 -760 -28q-509 0 -761 28 q-80 9 -140.5 64t-79.5 136q-16 72 -24.5 163.5t-9.5 151t-1 165.5zM364 1050h145v-781h136v781h147v128h-428v-128zM541 2458h144l98 -361l94 361h139l-165 -547v-372h-138v372q-9 47 -32.5 126.5t-43 138t-54.5 159.5t-42 123zM810 410q0 -67 11 -100q18 -51 79 -51 q67 0 140 83v-73h123v677h-123v-518q-40 -57 -77 -57q-24 0 -29 29q-1 4 -1 47v499h-123v-536zM1017 1761v239q0 110 39 162q51 70 144 70q94 0 145 -70q39 -52 39 -162v-239q0 -110 -39 -161q-51 -71 -145 -71q-93 0 -144 71q-39 51 -39 161zM1141 1737q0 -95 59 -95 q60 0 60 95v288q0 95 -60 95q-59 0 -59 -95v-288zM1270 269h122v65q60 -75 127 -75q74 0 98 76q13 47 13 137v270q0 92 -13 136q-24 76 -98 76q-67 0 -127 -73v297h-122v-909zM1392 401v413q32 30 61 30q54 0 54 -93v-289q0 -91 -54 -91q-31 0 -61 30zM1486 1682v541h123 v-504q0 -40 2 -48q5 -29 29 -29q38 0 78 58v523h124v-684h-124v75q-73 -85 -141 -85q-63 0 -80 51q-11 33 -11 102zM1725 488q0 -107 40 -159q53 -70 148 -70q98 0 149 74q22 32 28 73q3 36 3 79v18h-125q0 -62 -3 -83q-10 -49 -55 -49q-63 0 -63 94v120h246v140 q0 110 -38 160q-51 69 -145 69t-147 -69q-38 -50 -38 -160v-237zM1848 687v63q0 94 61 94t61 -94v-63h-122z" />
<glyph unicode="&#xe1cd;" d="M0 819h410v1536v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h205h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-1536h410l-615 -819zM1229 1331l461 1127h307l461 -1127h-328l-76 205h-422l-76 -205h-327zM1434 0v205l397 614h-391v307h805v-204l-392 -615h400v-307h-819z M1725 1788h236l-118 319z" />
<glyph unicode="&#xe1ce;" d="M0 819h410v1536v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h205h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-1536h410l-615 -819zM1229 0l461 1126h307l461 -1126h-328l-76 205h-422l-76 -205h-327zM1434 1331v205l397 614h-391v308h805v-205l-392 -615h400v-307h-819z M1725 457h236l-118 319z" />
<glyph unicode="&#xe1cf;" d="M0 819h410v1536v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h205h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-1536h410l-615 -819zM1434 263.5v43.5v205v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h819h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-205v-43.5 t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-819h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM1434 878.5v43.5v204v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h614h44t28 -4.5t18.5 -8t8 -18.5t4.5 -28v-44v-204v-44t-4.5 -28t-8 -18.5t-18.5 -8t-28 -4.5h-44h-614h-43.5 t-27.5 4.5t-18.5 8t-8 19t-4.5 28zM1434 1492.5v43.5v205v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h410h43.5t28 -4.5t18.5 -7.5t7.5 -18.5t4.5 -28v-43.5v-205v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-410h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28z M1434 2106.5v43.5v205v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h205h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-205v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-205h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28z" />
<glyph unicode="&#xe1d0;" d="M0 819h410v1536v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h205h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-1536h410l-615 -819zM1434 263.5v43.5v205v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h205h43.5t28 -4.5t18.5 -7.5t7.5 -18.5t4.5 -28v-43.5v-205 q0 -77 -12.5 -89.5t-89.5 -12.5h-205h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM1434 878.5v43.5v204v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h410h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-204v-43.5t-4.5 -28t-8 -19t-18.5 -8t-27.5 -4.5h-43.5h-410h-43.5 t-27.5 4.5t-18.5 8t-8 19t-4.5 28zM1434 1492.5v43.5v205v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h614h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-205v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-614h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28z M1434 2106.5v43.5v205v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h819q77 0 90 -13t13 -90v-205v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-819h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28z" />
<glyph unicode="&#xe1d1;" d="M0 819h410v1536v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h205h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-1536h410l-615 -819zM1497 2150l227 308h324v-1127h-309v819h-242zM1526 739q0 160 108.5 273.5t272.5 113.5t273 -112q202 -216 38 -540l-240 -474h-319 l183 351q-114 8 -215 123t-101 265zM1785 739q0 -55 35 -91.5t87 -36.5q54 0 89.5 36t35.5 92q0 54 -36.5 91t-88.5 37t-87 -36.5t-35 -91.5z" />
<glyph unicode="&#xe1d2;" d="M0 819h410v1536v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h205h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-1536h410l-615 -819zM1497 819l227 307h324v-1126h-309v819h-242zM1526 2070q0 160 108.5 274t272.5 114q163 0 273 -113q202 -216 38 -540l-240 -474h-319 l183 352q-114 8 -215 122.5t-101 264.5zM1785 2070q0 -55 35 -91.5t87 -36.5q54 0 89.5 36t35.5 92q0 54 -36.5 91t-88.5 37t-87 -36.5t-35 -91.5z" />
<glyph unicode="&#xe1d3;" d="M-205 903q0 -94 36 -170.5t92 -124t128.5 -80.5t140 -46.5t132.5 -14.5q310 7 474 236v-199h327v834q0 129 -19 230t-58 172t-91 119.5t-124.5 76.5t-150.5 40.5t-177 13.5q-412 -7 -616 -232l190 -191q81 71 183.5 111.5t203.5 39.5q150 2 241 -65.5t91 -205.5l1 -34 h-82q-102 0 -187.5 -4.5t-182.5 -18t-174 -36.5t-150 -62t-121.5 -91.5t-77.5 -128t-29 -169.5zM158 930q1 43 20 77.5t45.5 57t70.5 39t81 25t91.5 14t87 6.5t83 2t64.5 2h76v-81q1 -172 -90 -253.5t-276 -79.5q-50 -1 -92 8t-78.5 29.5t-58.5 59.5t-24 94zM778 205h922 l-471 -451zM778 2253l451 430l471 -430h-922zM1412 504h1251v290h-822l785 831v329h-1178v-290h740v-6l-776 -819v-335z" />
<glyph unicode="&#xe1d4;" d="M-635 901q0 -94 36 -170t92 -123.5t129 -79.5t141.5 -44.5t134.5 -12.5q302 0 471 225v-184h327v819q0 156 -29 272t-80 189t-130 117t-168.5 61t-206.5 17q-417 0 -614 -226l184 -184q80 64 183 103.5t206 39.5q146 0 237 -67t91 -199v-41h-82q-102 0 -187.5 -4.5 t-182.5 -18.5t-174 -36.5t-150 -62t-121.5 -92t-77.5 -128.5t-29 -170zM-266 922q0 42 15 76t40.5 56.5t60 40t74 26.5t81.5 16t83 8t78.5 2.5t67.5 -0.5h32h82v-82q0 -168 -91 -248t-277 -80q-49 0 -90.5 9t-78 29.5t-57 58t-20.5 88.5zM1024 860v717l512 -348zM1679 512 h1250v287h-820l779 819v328h-1168v-287h738l-779 -819v-328z" />
<glyph unicode="&#xe1d5;" d="M-512 512h1249v287h-819l778 819v328h-1167v-287h737l-778 -819v-328zM1024 860v717l512 -348zM1720 901q0 -94 36 -170t92 -123.5t129 -79.5t141.5 -44.5t134.5 -12.5q302 0 471 225v-184h328v819q0 156 -29.5 272t-80 189t-130 117t-169 61t-206.5 17q-417 0 -614 -226 l184 -184q80 64 183 103.5t206 39.5q146 0 237 -67t91 -199v-41h-82q-102 0 -187.5 -4.5t-182.5 -18.5t-174 -36.5t-150 -62t-121.5 -92t-77.5 -128.5t-29 -170zM2089 922q0 42 15 76t40.5 56.5t60 40t74 26.5t81.5 16t83 8t78.5 2.5t67.5 -0.5h12h10h10h82v-82 q0 -168 -91 -248t-277 -80q-49 0 -90.5 9t-78 29.5t-57 58t-20.5 88.5z" />
<glyph unicode="&#xe1d6;" d="M0 1229q0 142 21 272t51 214t60.5 147t51.5 92l21 28q16 7 46.5 18t133.5 40t214 51.5t283 40.5t347 18t345 -17.5t287 -42t209.5 -49t137.5 -41.5l45 -18q8 -10 22 -29.5t49.5 -89t62.5 -149.5t49 -211.5t22 -273.5q0 -141 -21 -271.5t-51 -216t-60.5 -150.5t-51.5 -95 l-21 -29q-16 -7 -46.5 -17.5t-133.5 -38t-214 -48.5t-283 -38.5t-347 -17.5t-345 16.5t-287 40t-209.5 47t-137.5 39.5l-45 17q-8 11 -22 31t-49.5 92t-62.5 153t-49 213t-22 273zM510 999l10 -34q24 -83 84 -146q101 -104 246 -104q147 0 248 104q98 98 98 246 q0 145 -98 248q-97 102 -248 102q-42 0 -90 -10l12 102h344v197h-512l-59 -444l162 -119l22 26q17 20 51.5 33.5t69.5 13.5q62 0 104.5 -43t42.5 -106t-43 -107.5t-104 -44.5q-48 0 -87 31t-52 80l-11 37zM1270 834q0 -46 33 -79.5t79 -33.5t79.5 33.5t33.5 79.5 q0 47 -33.5 80.5t-79.5 33.5q-48 0 -80 -32.5t-32 -81.5zM1468 1507h158v-786h209v983h-262z" />
<glyph unicode="&#xe1d7;" d="M0 1229q0 142 21 272t51 214t60.5 147t51.5 92l21 28q16 7 46.5 18t133.5 40t214 51.5t283 40.5t347 18t345 -17.5t287 -42t209.5 -49t137.5 -41.5l45 -18q8 -10 22 -29.5t49.5 -89t62.5 -149.5t49 -211.5t22 -273.5q0 -141 -21 -271.5t-51 -216t-60.5 -150.5t-51.5 -95 l-21 -29q-16 -7 -46.5 -17.5t-133.5 -38t-214 -48.5t-283 -38.5t-347 -17.5t-345 16.5t-287 40t-209.5 47t-137.5 39.5l-45 17q-8 11 -22 31t-49.5 92t-62.5 153t-49 213t-22 273zM508 998q11 -116 94 -205q101 -101 242 -101q143 0 241 103q97 100 97 241q0 142 -97 242 q-91 94 -223 100l162 312h-227l-236 -463q-64 -113 -53 -229zM705 1036q0 62 39.5 103t99.5 41q58 0 97.5 -42t39.5 -102q0 -62 -39.5 -103.5t-97.5 -41.5q-59 0 -99 42t-40 103zM1247 834q0 -46 33.5 -79.5t79.5 -33.5q47 0 80 33.5t33 79.5q0 47 -33 80.5t-80 33.5 q-48 0 -80.5 -32.5t-32.5 -81.5zM1446 1507h160v-786h206v983h-262z" />
<glyph unicode="&#xe1d8;" d="M0 1229q0 142 21 272t51 214t60.5 147t51.5 92l21 28q16 7 46.5 18t133.5 40t214 51.5t283 40.5t347 18t345 -17.5t287 -42t209.5 -49t137.5 -41.5l45 -18q8 -10 22 -29.5t49.5 -89t62.5 -149.5t49 -211.5t22 -273.5q0 -141 -21 -271.5t-51 -216t-60.5 -150.5t-51.5 -95 l-21 -29q-16 -7 -46.5 -17.5t-133.5 -38t-214 -48.5t-283 -38.5t-347 -17.5t-345 16.5t-287 40t-209.5 47t-137.5 39.5l-45 17q-8 11 -22 31t-49.5 92t-62.5 153t-49 213t-22 273zM612 1505h375l-266 -784h217l307 887l2 6v90h-635v-199zM1231 834q0 -46 33 -79.5t79 -33.5 t79.5 33.5t33.5 79.5q0 47 -33.5 80.5t-79.5 33.5q-48 0 -80 -32.5t-32 -81.5zM1430 1507h159v-786h207v983h-262z" />
<glyph unicode="&#xe1d9;" d="M0 1229q0 142 21 272t51 214t60.5 147t51.5 92l21 28q16 7 46.5 18t133.5 40t214 51.5t283 40.5t347 18t345 -17.5t287 -42t209.5 -49t137.5 -41.5l45 -18q8 -10 22 -29.5t49.5 -89t62.5 -149.5t49 -211.5t22 -273.5q0 -141 -21 -271.5t-51 -216t-60.5 -150.5t-51.5 -95 l-21 -29q-16 -7 -46.5 -17.5t-133.5 -38t-214 -48.5t-283 -38.5t-347 -17.5t-345 16.5t-287 40t-209.5 47t-137.5 39.5l-45 17q-8 11 -22 31t-49.5 92t-62.5 153t-49 213t-22 273zM410 614h1638v1229h-1638v-1229zM614 819v819h181q177 0 269.5 -108t92.5 -303 q0 -76 -22.5 -147t-65 -130.5t-114 -95t-160.5 -35.5h-181zM1300 1227q0 195 93 303t270 108h180v-819h-180q-89 0 -160.5 35.5t-114.5 95t-65.5 130.5t-22.5 147z" />
<glyph unicode="&#xe1da;" d="M2 878.5v43.5v614v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h512l615 410v-1638l-615 409h-512h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28zM1417 702q199 223 199 527t-199 527l196 163q122 -141 189.5 -318.5t67.5 -371.5t-67.5 -371.5t-189.5 -318.5zM1808 374 q153 177 236.5 395t83.5 460t-83.5 460t-236.5 395l198 162q178 -208 277 -469.5t99 -547.5t-99 -548t-277 -470z" />
<glyph unicode="&#xe1db;" d="M0 878.5v43.5v614v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h512l615 410v-1638l-615 409h-512h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28zM1415 940l289 289l-289 289l180 182l289 -291l289 291l182 -182l-291 -289l291 -289l-182 -180l-289 289l-289 -289z" />
<glyph unicode="&#xe1dc;" d="M2 878.5v43.5v614v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h512l615 410v-1638l-615 409h-512h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28zM1417 702q199 223 199 527t-199 527l196 163q122 -141 189.5 -318.5t67.5 -371.5t-67.5 -371.5t-189.5 -318.5z" />
<glyph unicode="&#xe1dd;" d="M0 1229q0 142 21 272t51 214t60.5 147t51.5 92l21 28q16 7 46.5 18t133.5 40t214 51.5t283 40.5t347 18t345 -17.5t287 -42t209.5 -49t137.5 -41.5l45 -18q8 -10 22 -29.5t49.5 -89t62.5 -149.5t49 -211.5t22 -273.5q0 -141 -21 -271.5t-51 -216t-60.5 -150.5t-51.5 -95 l-21 -29q-16 -7 -46.5 -17.5t-133.5 -38t-214 -48.5t-283 -38.5t-347 -17.5t-345 16.5t-287 40t-209.5 47t-137.5 39.5l-45 17q-8 11 -22 31t-49.5 92t-62.5 153t-49 213t-22 273zM410 1229l614 -410v819zM1434 819l614 410l-614 409v-819z" />
<glyph unicode="&#xe1de;" d="M0 58.5v43.5v2253v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h2253q77 0 90 -13t13 -90v-2253v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-2253h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM256 1229l512 -461v307h922v-307l512 461l-512 461v-308h-922v308z" />
<glyph unicode="&#xe1df;" d="M0 58.5v43.5v1844v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h2253h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-1332l-615 -614h-1741h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM461 840q0 -36 25.5 -50.5t51 0t25.5 50.5v399q0 24 12.5 34t25.5 0t13 -34v-860 q0 -36 24 -56.5t53 -20.5t53 20.5t24 56.5v461q0 24 13 34t25.5 0t12.5 -34v-461q0 -36 24 -56.5t53 -20.5t53 20.5t24 56.5v860q0 24 12.5 34t25.5 0t13 -34v-399q0 -36 25.5 -50.5t51 0t25.5 50.5v450q0 154 -153 154h-359q-153 0 -153 -154v-450zM666 1623 q0 -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.5zM1331 840q0 -36 25.5 -50.5t51.5 0t26 50.5v399q0 24 13 34t25.5 0t12.5 -34v-860q0 -36 24 -56.5t52.5 -20.5t52.5 20.5t24 56.5v461q0 24 13 34t26 0t13 -34v-461 q0 -36 24 -56.5t52.5 -20.5t52.5 20.5t24 56.5v860q0 24 12.5 34t25.5 0t13 -34v-399q0 -36 26 -50.5t51.5 0t25.5 50.5v450q0 154 -154 154h-358q-154 0 -154 -154v-450zM1536 1623q0 -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.5 t-37.5 -90.5z" />
<glyph unicode="&#xe1e0;" d="M0 58.5v43.5v2253v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h2253q77 0 90 -13t13 -90v-2253v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-2253h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM768 768l461 -512l461 512h-308v922h308l-461 512l-461 -512h307v-922 h-307z" />
<glyph unicode="&#xe1e1;" d="M41 792v874q0 24 13.5 32.5t34.5 -2.5l860 -439q23 -12 23 -28t-23 -28l-859 -439q-21 -11 -35 -2.5t-14 32.5zM134 461.5q0 16.5 22 28.5l1045 570q28 15 56 0l1045 -570q22 -12 22 -28.5t-23 -27.5l-1044 -522q-28 -14 -56 0l-1044 522q-23 11 -23 27.5zM134 1996.5 q0 16.5 23 27.5l1044 522q28 14 56 0l1044 -522q23 -11 23 -27.5t-22 -28.5l-1045 -570q-28 -15 -56 0l-1045 570q-22 12 -22 28.5zM1506 1229q0 16 22 28l840 438q21 11 35 2.5t14 -32.5v-873q0 -24 -14 -32t-35 3l-840 438q-22 12 -22 28z" />
<glyph unicode="&#xe1e2;" d="M205 468.5v43.5v1434v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h512v307q0 77 13.5 90t89.5 13h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-2253v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5v43.5v308h-512h-43.5 t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM1434 58.5v43.5v2253v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-512h512h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-1024q0 -77 -13.5 -90t-89.5 -13h-512v-512v-43.5t-4.5 -28 t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28z" />
<glyph unicode="&#xe1e3;" d="M0 878.5v43.5v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h2253h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5q0 -76 -13 -89.5t-90 -13.5h-307v-512v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-1434h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28v43.5v512 h-308h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28zM0 1492.5v43.5v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h512v512q0 76 13 89.5t90 13.5h1024h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-512h512h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-43.5t-4.5 -27.5 t-8 -18.5t-19 -8t-28 -4.5h-43.5h-614h-1025h-614h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28z" />
<glyph unicode="&#xe1e4;" d="M0 58.5v43.5v2253v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h2253q77 0 90 -13t13 -90v-2253v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-2253h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM614 1229l615 -666l614 666h-409v512v43.5t-4.5 27.5t-8 18.5t-19 8 t-28 4.5h-43.5h-205h-43.5t-28 -4.5t-18.5 -7.5t-7.5 -18.5t-4.5 -28v-43.5v-512h-410z" />
<glyph unicode="&#xe1e5;" d="M0 58.5v43.5v2253v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h2253q77 0 90 -13t13 -90v-2253v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-2253h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM563 1229l666 -615v410h512h43.5t28 4.5t18.5 7.5t7.5 18.5t4.5 28v43.5 v205v43.5t-4.5 28t-8 19t-18.5 8t-27.5 4.5h-43.5h-512v409z" />
<glyph unicode="&#xe1e6;" d="M0 58.5v43.5v2253v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h2253q77 0 90 -13t13 -90v-2253v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-2253h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM614 1082.5q0 -12.5 4.5 -27.5t8 -18.5t19 -8t28 -4.5h43.5h512v-410 l665 615l-665 614v-409h-512q-77 0 -90 -13t-13 -90v-205v-43.5z" />
<glyph unicode="&#xe1e7;" d="M0 58.5v43.5v2253v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h2253q77 0 90 -13t13 -90v-2253v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-2253h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM614 1229h410v-512v-43.5t4.5 -28t8 -19t18.5 -8t27.5 -4.5h43.5h205 q77 0 90 13t13 90v512h409l-614 665z" />
<glyph unicode="&#xe1e8;" d="M14 818.5q0 9.5 43 35.5l478 291l694 -449l682 453l489 -295q43 -26 43 -35.5t-43 -38.5l-1116 -745q-41 -26 -55 -26t-55 26l-1117 745q-43 29 -43 38.5zM19 1634q-7 9 0 18t38 28l1117 745q41 26 55 26t55 -26l1116 -745q24 -16 32 -22t8.5 -15t-8 -15t-32.5 -22 l-1116 -745q-41 -26 -55 -26t-55 26l-1117 745q-31 19 -38 28z" />
<glyph unicode="&#xe1e9;" d="M14 818.5q0 9.5 43 35.5l478 291l694 -449l682 453l489 -295q43 -26 43 -35.5t-43 -38.5l-1116 -745q-41 -26 -55 -26t-55 26l-1117 745q-43 29 -43 38.5zM14 1640q0 9 43 35l1117 746q41 28 55 28t55 -28l1116 -746q43 -26 43 -35t-43 -38l-1116 -746q-41 -28 -55 -28 t-55 28l-1117 746q-43 29 -43 38zM399 1638l830 -553l829 553l-829 553z" />
<glyph unicode="&#xe1ea;" d="M18 827.5q7 9.5 39 28.5l480 293l199 -133l-337 -197l830 -553l829 553l-337 197l200 133l479 -293q32 -19 39 -28.5t-0.5 -18t-38.5 -27.5l-1116 -746q-41 -27 -55 -27t-55 27l-1117 746q-31 19 -38.5 27.5t-0.5 18zM19 1634q-7 9 0 18t38 28l1117 745q41 26 55 26 t55 -26l1116 -745q24 -16 32 -22t8.5 -15t-8 -15t-32.5 -22l-1116 -745q-41 -26 -55 -26t-55 26l-1117 745q-31 19 -38 28z" />
<glyph unicode="&#xe1eb;" d="M0 819h205v512v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5q77 0 90 -13t13 -90v-512h204l-307 -409zM205 1697.5v43.5q0 77 12.5 89.5t89.5 12.5h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5q0 -77 -13 -90t-90 -13h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28zM205 2106.5 v43.5v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5q77 0 90 -13.5t13 -89.5v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM614 1082.5v43.5v1024q0 76 13 89.5t90 13.5h1024h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-1024 v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-1024h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5zM819 1229h819v819h-819v-819zM1229 468.5v43.5v410h717v716h409h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-1024v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5 h-1024h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28z" />
<glyph unicode="&#xe1ec;" d="M0 819h205v1331v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5q77 0 90 -13.5t13 -89.5v-1331h204l-307 -409zM614 1082.5v43.5v1024q0 76 13 89.5t90 13.5h1024h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-1024v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-1024 h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5zM819 1229h819v819h-819v-819zM1229 468.5v43.5v410h717v716h409h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-1024v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-1024h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28z" />
<glyph unicode="&#xe1ed;" d="M0 1082.5v43.5v1024v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h1024h44t28 -4.5t18.5 -8t8 -18.5t4.5 -28v-44v-1024v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-1024h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM614 468.5v43.5v410h205v-308h819v820h-307v204 h410h43.5t28 -4.5t18.5 -7.5t7.5 -18.5t4.5 -28v-43.5v-1024v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-1024h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5zM1843 1843l307 410l308 -410h-205v-512v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-43.5t-28 4.5 t-18.5 7.5t-7.5 18.5t-4.5 28v43.5v512h-205zM2048 468.5v43.5v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM2048 878.5v43.5 v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-44t-4.5 -28t-8 -18.5t-18.5 -8t-28 -4.5h-44h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28z" />
<glyph unicode="&#xe1ee;" d="M0 1082.5v43.5v1024v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h1024h44t28 -4.5t18.5 -8t8 -18.5t4.5 -28v-44v-1024v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-1024h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM614 468.5v43.5v410h205v-308h819v820h-307v204 h410h43.5t28 -4.5t18.5 -7.5t7.5 -18.5t4.5 -28v-43.5v-1024v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-1024h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5zM1843 1843l307 410l308 -410h-205v-1331v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-43.5t-28 4.5 t-18.5 7.5t-7.5 18.5t-4.5 28v43.5v1331h-205z" />
<glyph unicode="&#xe1ef;" d="M-158 1608l998 112l389 942l388 -942l999 -112l-777 -610l222 -998l-832 555l-888 -555l278 998z" />
<glyph unicode="&#xe1f0;" d="M-158 1608l998 112l389 942l388 -942l999 -112l-777 -610l222 -998l-832 555l-888 -555l278 998zM406 1448l466 -366l-164 -591l525 328l491 -328l-132 596l460 361l-590 65l-233 567l-233 -567z" />
<glyph unicode="&#xe1f1;" d="M0 58.5v43.5v205v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h2253q77 0 90 -13t13 -90v-205v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-2253h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM0 673.5v43.5v205v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h2253h43.5 t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-205q0 -77 -13 -90t-90 -13h-2253h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28zM0 1287.5v43.5v205v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h2253h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-205v-43.5t-4.5 -27.5t-8 -18.5 t-19 -8t-28 -4.5h-43.5h-2253h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM410 1902.5v43.5v204v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h2253h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-204v-43.5t-4.5 -28t-8 -19t-18.5 -8t-27.5 -4.5h-43.5h-2253h-43.5t-27.5 4.5 t-18.5 8t-8 19t-4.5 28z" />
<glyph unicode="&#xe1f2;" d="M0 58.5v43.5v205v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h2253q77 0 90 -13t13 -90v-205v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-2253h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM0 673.5v43.5v205v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h2253h43.5 t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-205q0 -77 -13 -90t-90 -13h-2253h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28zM0 1287.5v43.5v205v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h2253h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-205v-43.5t-4.5 -27.5t-8 -18.5 t-19 -8t-28 -4.5h-43.5h-2253h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM0 1912v34v204v34t2 24.5t3.5 19t9 12t12.5 8.5t20.5 3t27 2h37.5h231h37.5t27 -2t20.5 -3t12.5 -8.5t9 -12t3.5 -19t2 -24.5v-34v-204v-34t-2 -24.5t-3.5 -19t-9 -12t-12.5 -8.5t-20.5 -3t-27 -2 h-37.5h-231h-37.5t-27 2t-20.5 3t-12.5 8.5t-9 12t-3.5 19t-2 24.5zM662 1912v34v204v34t2 24.5t3.5 19t9 12t12.5 8.5t20.5 3t27 2h37.5h240h48t30 -5t20 -8t8.5 -19t4.5 -27.5v-43.5v-204v-43.5t-4.5 -27.5t-8.5 -19t-20 -8t-30 -5h-48h-240h-37.5t-27 2t-20.5 3 t-12.5 8.5t-9 12t-3.5 19t-2 24.5zM1332 1912v34v204v34t2 24.5t3.5 19t9 12t12.5 8.5t20.5 3t27 2h37.5h240h48t30 -5t20 -8t8.5 -19t4.5 -27.5v-43.5v-204v-43.5t-4.5 -27.5t-8.5 -19t-20 -8t-30 -5h-48h-240h-37.5t-27 2t-20.5 3t-12.5 8.5t-9 12t-3.5 19t-2 24.5z M2003 1902.5v43.5v204v43.5t4.5 27.5t8.5 19t20 8t30 5h48h232h37.5t27 -2t20.5 -3t12.5 -8.5t9 -12t3.5 -19t2 -24.5v-34v-204v-34t-2 -24.5t-3.5 -19t-9 -12t-12.5 -8.5t-20.5 -3t-27 -2h-37.5h-232h-48t-30 5t-20 8t-8.5 19t-4.5 27.5z" />
<glyph unicode="&#xe1f3;" d="M0 58.5v43.5v1024v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h461q77 0 90 -13.5t13 -89.5v-1024v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-461h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM870 58.5v43.5v2253q0 77 13 90t90 13h512h43.5t27.5 -4.5t18.5 -8 t8 -19t4.5 -28v-43.5v-2253v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-512h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5zM1792 58.5v43.5v1639v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h461h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-1639v-43.5t-4.5 -27.5 t-8 -18.5t-19 -8t-28 -4.5h-43.5h-461h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28z" />
<glyph unicode="&#xe1f4;" d="M205 58.5v43.5v2253v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h205h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-990l1639 1093v-2458l-1639 1092v-990v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-205h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28z" />
<glyph unicode="&#xe1f5;" d="M205 0v2458l1638 -1093v990q0 77 13.5 90t89.5 13h204q76 0 89.5 -13t13.5 -90v-2253v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-204h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5v43.5v990z" />
<glyph unicode="&#xe1f6;" d="M0 263.5v43.5v410v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h2233q77 0 89.5 -12.5t12.5 -89.5v-410q0 -77 -12.5 -89.5t-89.5 -12.5h-2233h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM0 1287.5v43.5v205v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h2233h43.5 t28 -4.5t18.5 -7.5t7.5 -18.5t4.5 -28v-43.5v-205q0 -77 -12.5 -89.5t-89.5 -12.5h-2233h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM0 2106.5v43.5v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h2233h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-43.5t-4.5 -28t-7.5 -18.5 t-18.5 -7.5t-28 -4.5h-43.5h-2233h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28z" />
<glyph unicode="&#xe1f7;" d="M0 1229q0 142 21 272t51 214t60.5 147t51.5 92l21 28q16 7 46.5 18t133.5 40t214 51.5t283 40.5t347 18t345 -17.5t287 -42t209.5 -49t137.5 -41.5l45 -18q8 -10 22 -29.5t49.5 -89t62.5 -149.5t49 -211.5t22 -273.5q0 -141 -21 -271.5t-51 -216t-60.5 -150.5t-51.5 -95 l-21 -29q-16 -7 -46.5 -17.5t-133.5 -38t-214 -48.5t-283 -38.5t-347 -17.5t-345 16.5t-287 40t-209.5 47t-137.5 39.5l-45 17q-8 11 -22 31t-49.5 92t-62.5 153t-49 213t-22 273zM410 1230q0 -176 118.5 -302.5t284.5 -126.5q118 0 214 64t161 191l-186 92 q-40 -81 -84 -112.5t-105 -31.5q-80 0 -138.5 67t-58.5 159t57.5 157t139.5 65q61 0 106 -34.5t85 -115.5l184 93q-66 132 -162 197t-213 65q-168 0 -285.5 -125t-117.5 -302zM1229 1230q0 -176 118.5 -302.5t284.5 -126.5q245 0 374 255l-185 92q-40 -81 -84 -112.5 t-105 -31.5q-80 0 -138 67t-58 159t57 157t139 65q61 0 106 -34.5t85 -115.5l184 93q-66 132 -162 197t-213 65q-168 0 -285.5 -125t-117.5 -302z" />
<glyph unicode="&#xe1f8;" d="M0 58.5v43.5v1127h1024v-205h410v205h1024v-1127v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-2253h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM0 1434v512v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h615v205q0 77 64.5 141t140.5 64h614q76 0 140.5 -64 t64.5 -141v-205h614h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-512h-2458zM922 2048h614v205h-614v-205z" />
<glyph unicode="&#xe1f9;" d="M0 263.5v43.5v205v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h471h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-205v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-471h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM0 878.5v43.5v204v43.5t4.5 28t8 19t18.5 8 t27.5 4.5h43.5h471q77 0 90 -13.5t13 -89.5v-204q0 -76 -13 -89.5t-90 -13.5h-471h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28zM0 1492.5v43.5v205v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h471h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-205v-43.5t-4.5 -27.5t-8 -18.5 t-19 -8t-28 -4.5h-43.5h-471h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM0 2106.5v43.5v205v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h471q77 0 90 -13t13 -90v-205v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-471h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28z M881 307v205v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h512h43.5t28 -4.5t18.5 -7.5t7.5 -18.5t4.5 -28v-43.5v-205q0 -77 -12.5 -89.5t-89.5 -12.5h-512q-77 0 -89.5 12.5t-12.5 89.5zM881 878.5v43.5v204v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h512h43.5t27.5 -4.5 t18.5 -8t8 -19t4.5 -28v-43.5v-204v-43.5t-4.5 -28t-8 -19t-18.5 -8t-27.5 -4.5h-43.5h-512h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28zM881 1492.5v43.5v205q0 77 12.5 89.5t89.5 12.5h512q77 0 89.5 -12.5t12.5 -89.5v-205v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5 h-43.5h-512h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM881 2106.5v43.5v205v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h512h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-205v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-512h-43.5t-28 4.5t-18.5 7.5 t-7.5 18.5t-4.5 28zM1802 263.5v43.5v205v43.5t4.5 27.5t8 18.5t19 8t28 4.5h43.5h450h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-205v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-450h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5zM1802 922v204q0 76 13 89.5 t90 13.5h450q77 0 90 -13.5t13 -89.5v-204q0 -76 -13 -89.5t-90 -13.5h-450q-77 0 -90 13.5t-13 89.5zM1802 1492.5v43.5v205v43.5t4.5 27.5t8 18.5t19 8t28 4.5h43.5h450h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-205v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5 h-43.5h-450h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5zM1802 2106.5v43.5v205q0 77 13 90t90 13h450q77 0 90 -13t13 -90v-205v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-450h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5z" />
<glyph unicode="&#xe1fa;" d="M0 1587v666q0 154 25.5 179.5t179.5 25.5h665q25 0 42 -0.5t32.5 -0.5t27.5 -2.5t20.5 -2.5t18 -6t14 -7t15 -10.5t13.5 -12.5l17 -17t20 -19l1294 -1293q32 -31 43 -43.5t11.5 -30t-10.5 -30t-42 -43.5l-870 -866q-23 -23 -31 -31.5t-23 -16.5t-19 -8t-19 8t-23 16.5 t-31 31.5l-1292 1292l-14 14q-42 42 -51 63q-13 39 -13 144zM307 1946q0 -85 60 -145t145 -60t145 60t60 145t-60 144.5t-145 59.5t-145 -59.5t-60 -144.5z" />
<glyph unicode="&#xe1fb;" d="M0 1587v871h872q77 0 106.5 -4.5t50 -17t61.5 -52.5l1294 -1292q26 -25 35.5 -37t17.5 -24.5t0.5 -25t-17 -24.5t-34.5 -37l-870 -866q-23 -23 -31 -31.5t-23 -16.5t-19 -8t-19 8t-23 16.5t-31 31.5l-1296 1292q-27 27 -37 39t-20.5 26.5t-12.5 36.5t-3 43t-1 72z M307 1950q0 -85 60 -145t145 -60t145 60t60 145t-60 144.5t-145 59.5t-145 -59.5t-60 -144.5zM1321 2458h166q105 0 133 -9.5t84 -64.5l1294 -1292q26 -25 35.5 -37t17.5 -24.5t0.5 -25t-17 -24.5t-34.5 -37l-870 -866q-19 -19 -24.5 -25t-19 -16t-15.5 -12t-13.5 -2 t-13.5 2t-15.5 12t-19 16t-24.5 25l-80 80l788 786q25 25 34.5 37t17 24.5t-0.5 25t-17.5 24.5t-35.5 37l-1294 1292z" />
<glyph unicode="&#xe1fc;" d="M0 58.5v43.5v103v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h2253h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-103v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-2253h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM0 1287.5v43.5v103v43.5t4.5 28t7.5 18.5 t18.5 7.5t28 4.5h43.5h2253h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-103v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-2253h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM410 673.5v43.5v102v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h1434h43.5t27.5 -4.5 t18.5 -8t8 -19t4.5 -28v-43.5v-102v-43.5t-4.5 -28t-8 -19t-18.5 -8t-27.5 -4.5h-43.5h-1434h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28zM410 1902.5v43.5v102v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h1434h43.5t28 -4.5t18.5 -7.5t7.5 -18.5t4.5 -28v-43.5v-102v-43.5 t-4.5 -28t-8 -19t-18.5 -8t-27.5 -4.5h-43.5h-1434h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28z" />
<glyph unicode="&#xe1fd;" d="M0 1082.5v43.5v205v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h2253q77 0 90 -13t13 -90v-205v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-2253h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM410 263.5v43.5v205v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h1434 h43.5t28 -4.5t18.5 -7.5t7.5 -18.5t4.5 -28v-43.5v-205v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-1434h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM410 1902.5v43.5v204v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h1434h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28 v-43.5v-204v-43.5t-4.5 -28t-8 -19t-18.5 -8t-27.5 -4.5h-43.5h-1434h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28z" />
<glyph unicode="&#xe1fe;" d="M0 58.5v43.5v103v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h2253h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-103v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-2253h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM0 673.5v43.5v102v43.5t4.5 28t8 19t18.5 8 t27.5 4.5h43.5h2253q77 0 90 -13t13 -90v-102q0 -77 -13 -90t-90 -13h-2253h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28zM0 1287.5v43.5v103v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h2253h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-103v-43.5t-4.5 -27.5t-8 -18.5 t-19 -8t-28 -4.5h-43.5h-2253h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM0 1902.5v43.5v102v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h2253h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-102q0 -76 -13 -89.5t-90 -13.5h-2253h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28 z" />
<glyph unicode="&#xe1ff;" d="M0 263.5v43.5v225v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h2253q77 0 90 -13.5t13 -89.5v-225v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-2253h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM0 1082.5v43.5v226v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h2253 h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-226v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-2253h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM0 1902.5v43.5v225v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h2253h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5 v-225q0 -76 -13 -89.5t-90 -13.5h-2253h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28z" />
<glyph unicode="&#xe200;" d="M0 58.5v43.5v103v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h2253h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-103v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-2253h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM0 673.5v43.5v102v43.5t4.5 28t8 19t18.5 8 t27.5 4.5h43.5h1639h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-102v-43.5t-4.5 -28t-8 -19t-18.5 -8t-27.5 -4.5h-43.5h-1639h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28zM0 1287.5v43.5v103v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h2048h43.5t28 -4.5t19 -8t8 -18.5 t4.5 -27.5v-43.5v-103v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-2048h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM0 1902.5v43.5v102v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h1229h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-102q0 -76 -13 -89.5 t-90 -13.5h-1229h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28z" />
<glyph unicode="&#xe201;" d="M0 263.5v43.5v225v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h1639h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-225q0 -77 -12.5 -89.5t-89.5 -12.5h-1639h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM0 1082.5v43.5v226v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5 h2253h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-226v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-2253h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM0 1902.5v43.5v225v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h1639q77 0 89.5 -12.5t12.5 -89.5v-225v-43.5 t-4.5 -28t-8 -19t-18.5 -8t-27.5 -4.5h-43.5h-1639h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28z" />
<glyph unicode="&#xe202;" d="M0 58.5v43.5v103v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h2253h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-103v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-2253h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM205 1331v103v43.5t4.5 28t7.5 18.5t18.5 7.5 t28 4.5h43.5h2048h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-103v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-2048q-77 0 -89.5 12.5t-12.5 89.5zM614 717v102q0 77 13 90t90 13h1638q77 0 90 -13t13 -90v-102q0 -77 -13 -90t-90 -13h-1638q-77 0 -90 13t-13 90 zM1024 1902.5v43.5v102v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h1229h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-102q0 -76 -13 -89.5t-90 -13.5h-1229h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28z" />
<glyph unicode="&#xe203;" d="M0 1082.5v43.5v226v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h2253h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-226v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-2253h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM614 263.5v43.5v225q0 76 13 89.5t90 13.5 h1638q77 0 90 -13.5t13 -89.5v-225v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-1638h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5zM614 1946v225v43.5t4.5 27.5t8 18.5t19 8t28 4.5h43.5h1638h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-225q0 -76 -13 -89.5 t-90 -13.5h-1638q-77 0 -90 13.5t-13 89.5z" />
<glyph unicode="&#xe204;" d="M-403 0l849 2458h307l871 -2458h-410l-198 614h-818l-192 -614h-409zM309 973h591l-300 932zM1237 1562q60 267 216 470.5t384 314.5t496 110q180 0 291 -21v-383q-118 36 -304 36q-217 1 -389.5 -106t-271 -304.5t-99.5 -452.5q-1 -191 56.5 -353t158.5 -274t242 -174.5 t303 -62.5q186 0 304 36v-381q-118 -23 -291 -23q-338 -1 -586 135z" />
<glyph unicode="&#xe205;" d="M410 0v2458h829q150 0 284.5 -54t228.5 -144.5t149 -212.5t55 -255q0 -86 -21 -165t-51 -130.5t-60.5 -91t-51.5 -57.5l-21 -17q7 -4 20 -12.5t50.5 -37.5t71 -62.5t75 -88t71 -112.5t50 -137.5t20.5 -163.5q0 -150 -62.5 -284.5t-167.5 -228.5t-245.5 -149t-292.5 -55 h-931zM922 512h358q56 0 100.5 20t72.5 52t43 73.5t15 85t-15 85t-43 73.5t-72.5 52t-100.5 20h-358v-461zM922 1485h256q73 0 127 34t78.5 85.5t24.5 111t-24.5 111t-78.5 85.5t-127 34l-254 -2z" />
<glyph unicode="&#xe206;" d="M-102 102q0 56 28 103.5t74 74.5v1898q-47 27 -74.5 74t-27.5 103q0 85 59.5 145t144.5 60q56 0 103.5 -28t74.5 -74h1898q27 47 74 74.5t103 27.5q85 0 145 -60t60 -145q0 -56 -27.5 -103t-74.5 -74v-1898q46 -27 74 -74.5t28 -103.5q0 -85 -60 -144.5t-145 -59.5 q-56 0 -103 27.5t-74 74.5h-1898q-27 -46 -74.5 -74t-103.5 -28q-85 0 -144.5 59.5t-59.5 144.5zM205 280q47 -28 75 -75h1898q28 47 75 75v1898q-47 28 -75 75h-1898q-28 -47 -75 -75v-1898zM461 563v103v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h1331h43.5t28 -4.5 t19 -8t8 -18.5t4.5 -27.5v-43.5v-103v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-1331q-77 0 -89.5 12.5t-12.5 89.5zM461 1134.5v43.5v102v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h717h43.5t28 -4.5t18.5 -7.5t7.5 -18.5t4.5 -28v-43.5v-102v-43.5t-4.5 -28 t-8 -19t-18.5 -8t-27.5 -4.5h-43.5h-717h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28zM461 1748.5v43.5v102v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h1127h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-102v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-1127h-43.5 t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28z" />
<glyph unicode="&#xe207;" d="M-205 980.5v43.5v205v43.5t4.5 27.5t8 18.5t19 8t28 4.5h43.5h307v277l553 -482l-553 -460v256h-307h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5zM819 58.5v43.5v1946v43.5t4.5 27.5t8 18.5t19 8t28 4.5h43.5h43.5t28 -4.5t18.5 -7.5t7.5 -18.5t4.5 -28v-43.5v-1946v-43.5 t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5zM1229 58.5v43.5v103q0 77 12.5 89.5t89.5 12.5h615h43.5t28 -4.5t18.5 -7.5t7.5 -18.5t4.5 -28v-43.5v-103v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-615h-43.5 t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM1229 673.5v43.5v102v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h1024q77 0 90 -13t13 -90v-102q0 -77 -13 -90t-90 -13h-1024h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28zM1229 1331v103v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h1024 h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-103v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-1024q-77 0 -89.5 12.5t-12.5 89.5zM1229 1902.5v43.5v102v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h1024h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-102 q0 -76 -13 -89.5t-90 -13.5h-1024h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28z" />
<glyph unicode="&#xe208;" d="M512 0l819 2458h359l-820 -2458h-358z" />
<glyph unicode="&#xe209;" d="M0 58.5v43.5v103v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h103q77 0 89.5 -12.5t12.5 -89.5v-103v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-103h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM0 673.5v43.5v102v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5 h103h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-102v-43.5t-4.5 -28t-8 -19t-18.5 -8t-27.5 -4.5h-43.5h-103h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28zM0 1287.5v43.5v103v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h103h43.5t28 -4.5t18.5 -7.5t7.5 -18.5t4.5 -28 v-43.5v-103q0 -77 -12.5 -89.5t-89.5 -12.5h-103h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM0 1902.5v43.5v102v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h103h43.5t28 -4.5t18.5 -7.5t7.5 -18.5t4.5 -28v-43.5v-102v-43.5t-4.5 -28t-8 -19t-18.5 -8t-27.5 -4.5h-43.5 h-103h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28zM614 58.5v43.5v103v43.5t4.5 27.5t8 18.5t19 8t28 4.5h43.5h1638h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-103v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-1638h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5zM614 717 v102q0 77 13 90t90 13h1638q77 0 90 -13t13 -90v-102q0 -77 -13 -90t-90 -13h-1638q-77 0 -90 13t-13 90zM614 1287.5v43.5v103v43.5t4.5 27.5t8 18.5t19 8t28 4.5h43.5h1638h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-103v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5 h-43.5h-1638h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5zM614 1946v102v43.5t4.5 27.5t8 18.5t19 8t28 4.5h43.5h1638h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-102q0 -76 -13 -89.5t-90 -13.5h-1638q-77 0 -90 13.5t-13 89.5z" />
<glyph unicode="&#xe20a;" d="M-51 1536l358 922h205l358 -922h-256l-51 154h-307l-51 -154h-256zM0 0v164l410 502h-410v256h768v-164l-389 -502h389v-256h-768zM324 1894h171l-85 256zM1024 58.5v43.5v103v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h1229h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5 v-43.5v-103v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-1229h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM1024 673.5v43.5v102v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h1229q77 0 90 -13t13 -90v-102q0 -77 -13 -90t-90 -13h-1229h-43.5t-27.5 4.5t-18.5 8t-8 19 t-4.5 28zM1024 1594.5v43.5v103v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h1229h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-103v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-1229h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM1024 2209.5v43.5v102v43.5 t4.5 28t8 19t18.5 8t27.5 4.5h43.5h1229q77 0 90 -13t13 -90v-102q0 -77 -13 -90t-90 -13h-1229h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28z" />
<glyph unicode="&#xe20b;" d="M0 410q0 85 60 144.5t145 59.5t145 -59.5t60 -144.5t-60 -145t-145 -60t-145 60t-60 145zM0 1229q0 85 60 145t145 60t145 -60t60 -145t-60 -145t-145 -60t-145 60t-60 145zM0 2048q0 85 60 145t145 60t145 -60t60 -145t-60 -145t-145 -60t-145 60t-60 145zM819 263.5 v43.5v205v43.5t4.5 27.5t8 18.5t19 8t28 4.5h43.5h1433h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-205v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-1433h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5zM819 1082.5v43.5v205q0 77 13.5 90t89.5 13h1433q77 0 90 -13 t13 -90v-205v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-1433h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5zM819 1902v44v204v44t4.5 28t8 18.5t18.5 8t28 4.5h44h1433q77 0 90 -13.5t13 -89.5v-204q0 -76 -13 -89.5t-90 -13.5h-1433h-44t-28 4.5t-18.5 8t-8 18.5 t-4.5 28z" />
<glyph unicode="&#xe20c;" d="M0 614q0 128 90 218t217 90t217 -90t90 -218t-90 -217.5t-217 -89.5t-217 89.5t-90 217.5zM0 2150q0 127 90 217.5t217 90.5t217 -90.5t90 -217.5t-90 -217t-217 -90t-217 90t-90 217zM1024 58.5v43.5v103v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h1229h43.5t28 -4.5 t19 -8t8 -18.5t4.5 -27.5v-43.5v-103v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-1229h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM1024 673.5v43.5v102v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h1229q77 0 90 -13t13 -90v-102q0 -77 -13 -90t-90 -13h-1229h-43.5 t-27.5 4.5t-18.5 8t-8 19t-4.5 28zM1024 1594.5v43.5v103v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h1229h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-103v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-1229h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28z M1024 2209.5v43.5v102v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h1229q77 0 90 -13t13 -90v-102q0 -77 -13 -90t-90 -13h-1229h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28z" />
<glyph unicode="&#xe20d;" d="M0 0v154l337 284q86 72 116 109.5t31 70.5q1 51 -32.5 84t-93.5 33q-65 0 -99 -39.5t-34 -97.5h-225q0 152 101.5 247t256.5 95q151 0 255 -90.5t104 -210.5q0 -74 -31.5 -134t-117.5 -146l-126 -126h275v-233h-717zM102 2202l52 256h409v-922h-256v666h-205zM1024 58.5 v43.5v103v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h1229h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-103v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-1229h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM1024 673.5v43.5v102v43.5t4.5 28t8 19t18.5 8t27.5 4.5 h43.5h1229q77 0 90 -13t13 -90v-102q0 -77 -13 -90t-90 -13h-1229h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28zM1024 1594.5v43.5v103v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h1229h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-103v-43.5t-4.5 -27.5t-8 -18.5t-19 -8 t-28 -4.5h-43.5h-1229h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM1024 2209.5v43.5v102v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h1229q77 0 90 -13t13 -90v-102q0 -77 -13 -90t-90 -13h-1229h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28z" />
<glyph unicode="&#xe20e;" d="M102 0l973 2458h307l973 -2458h-409l-227 614h-981l-226 -614h-410zM870 973h717l-358 973z" />
<glyph unicode="&#xe20f;" d="M205 82v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h1100h43.5t28 -4.5t18.5 -7.5t7.5 -18.5t4.5 -28v-43.5q0 -62 -12.5 -72t-89.5 -10h-1100q-77 0 -89.5 10t-12.5 72zM299 2028q-9 11 0 77l37 265q9 66 21.5 77t78.5 11h1585q66 0 75.5 -11t0.5 -77l-37 -265 q-9 -66 -21.5 -77t-78.5 -11h-564l-223 -1585q-9 -66 -21.5 -77t-78.5 -11h-264q-66 0 -75.5 11t-0.5 77l223 1585h-582q-66 0 -75 11zM1443 -320.5q3 16.5 18 31.5l391 391l-389 389q-15 15 -18 31.5t8 35t21.5 31t31.5 33.5t33.5 31.5t31 21.5t35 8t31.5 -18l389 -389 l390 391q15 15 31.5 18t35 -8t31 -21.5t33.5 -31.5t31.5 -33.5t21.5 -31t8 -35t-18 -31.5l-391 -391l393 -392q15 -16 18 -32t-8 -34.5t-21.5 -31t-31.5 -33.5t-33.5 -31.5t-31 -21.5t-35 -8t-31.5 18l-392 393l-391 -391q-16 -15 -32 -18t-34.5 8t-31 21.5t-33.5 31.5 t-31.5 33.5t-21.5 30.5t-8 34.5z" />
<glyph unicode="&#xe210;" d="M0 0v2458h358v-2458h-358zM666 2458h409l563 -1895l564 1895h409l-819 -2458h-307z" />
<glyph unicode="&#xe211;" d="M-61 1229l368 430l369 -430h-266v-1229h-205v1229h-266zM205 2004.5v43.5v307v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h1843q76 0 89.5 -13t13.5 -90v-307v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-665v-1844v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5 h-307h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28v43.5v1844h-666h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28z" />
<glyph unicode="&#xe212;" d="M0 1287.5v43.5v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h2253q77 0 90 -13t13 -90v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-2253h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM514 447l268 206q31 -49 57 -85.5t70 -84t88 -77.5t105.5 -51.5t128.5 -21.5 q76 0 149.5 23.5t133.5 66.5t97 112t37 153q0 102 -61.5 180.5t-194.5 155.5h494q98 -145 98 -336q0 -198 -100.5 -356.5t-272 -245t-380.5 -86.5q-121 0 -225 28t-176.5 70t-136 105t-102.5 118.5t-77 125.5zM541 1831q2 189 95 332.5t255 219t368 75.5q90 0 177.5 -19 t153.5 -47t129 -67t103 -71.5t76 -67.5l-268 -202q-5 6 -15.5 16t-47 36t-77.5 45.5t-107 35.5t-135 16q-158 0 -259 -82t-104 -205q3 -116 99 -208h-408q-34 88 -35 193z" />
<glyph unicode="&#xe213;" d="M205 88q0 66 12.5 77t89.5 11h1843q77 0 90 -11t13 -77t-13 -77t-90 -11h-1843q-77 0 -89.5 11t-12.5 77zM309 351l434 2107h829q150 0 274.5 -46.5t203 -124t111.5 -182t10 -218.5q-15 -74 -50 -142t-74.5 -112t-76.5 -77.5t-61 -48.5l-24 -15q4 -2 11 -6.5t29 -19.5 t41 -32.5t47.5 -45.5t47.5 -58t42 -71.5t30.5 -84.5t13 -97.5t-10.5 -110.5q-26 -129 -112.5 -244t-208 -196t-272 -128t-302.5 -47h-932zM911 790h359q136 0 217 92q65 74 57 159q-8 88 -89 124q-45 20 -104 20h-358zM1083 1624h256q136 0 217 92q65 74 57 159 q-8 88 -89 124q-45 20 -104 20l-254 -2z" />
<glyph unicode="&#xe214;" d="M0 614v359h646l-359 973l-287 -679l1 779l133 412h307l973 -2458h-410l-226 614h-778zM1607 234l174 120q48 -76 74 -102q61 -62 147 -62q73 0 130.5 43.5t57.5 114.5q0 61 -48 104.5t-170 98.5q-70 32 -122 63.5t-102.5 76.5t-78 102.5t-28.5 125.5q1 150 109 242 t271 92q119 0 211 -60.5t137 -130.5l-179 -108q-3 4 -7.5 10.5t-21.5 23t-35.5 29t-48.5 23t-62 10.5q-70 0 -115 -36t-46 -87q1 -56 48.5 -95t162.5 -95q62 -31 102 -54t89 -60t76.5 -73.5t47 -88.5t19.5 -113q0 -156 -115.5 -260t-281.5 -104q-69 0 -128.5 16.5 t-99.5 40.5t-74.5 60t-54 66t-38.5 67zM1623 1965h266v492h205v-492h266l-368 -512z" />
<glyph unicode="&#xe215;" d="M0 614v359h646l-359 973l-287 -679l1 779l133 412h307l973 -2458h-410l-226 614h-778zM1607 1438l174 121q48 -76 74 -102q61 -62 147 -62q73 0 130.5 43t57.5 114q0 61 -48 104.5t-170 98.5q-70 32 -122 63.5t-102.5 76.5t-78 102.5t-28.5 125.5q1 150 109 242.5 t271 92.5q119 0 211 -61t137 -131l-179 -108q-3 4 -7.5 10.5t-21.5 23t-35.5 29t-48.5 23t-62 10.5q-70 0 -115 -36t-46 -87q1 -56 48.5 -94t162.5 -95q62 -31 102.5 -54t89 -60t76 -74t47 -89t19.5 -113q0 -156 -115.5 -260t-281.5 -104q-69 0 -128.5 16.5t-99.5 40.5 t-74.5 60t-54 66t-38.5 67zM1623 492l369 512l368 -512h-266v-492h-205v492h-266z" />
<glyph unicode="&#xe216;" d="M-133 2035l18 423h1733l18 -423h-131q-35 97 -83.5 146t-130 69t-228.5 20h-132v-1477q0 -154 41 -186q49 -37 246 -49v-117h-925v117q202 13 243 54q37 37 37 216v1442h-133q-208 0 -303.5 -49.5t-136.5 -185.5h-133zM1166 1728v101h673v-104q-93 0 -129 -12l-1 -1 q-43 -12 -43 -44q0 -13 6 -31q7 -21 24 -62l301 -650l247 654q6 19 13 49q8 36 8 49q0 21 -12 29q-20 14 -50 15l-75 5v103h461v-102q-71 -4 -96 -33q-24 -28 -45 -85l-454 -1202q-119 -315 -231 -460q-119 -152 -300 -152q-93 0 -167 45q-41 23 -64 65t-23 91q0 74 53 119 t128 45q40 0 121 -29q66 -26 93 -26t63 44.5t76 131.5q85 191 85 246q0 7 -3 24q-6 21 -8 27l-453 981q-47 101 -79 130q-35 32 -119 39z" />
<glyph unicode="&#xe217;" d="M205 58.5v43.5v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h1843h44t28 -4.5t18.5 -8t8 -18.5t4.5 -28v-44v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-1843h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM302 1397v1061h375v-1034q0 -139 28.5 -250.5t78.5 -186 t121 -124.5t151.5 -72t174.5 -22q92 0 172.5 22t150.5 72t120 124.5t78.5 186t28.5 250.5v1034h374l1 -1061q0 -190 -48.5 -351t-134.5 -277t-202.5 -197.5t-253 -121.5t-286.5 -40q-151 0 -288.5 40t-254.5 121.5t-203 197.5t-134.5 277t-48.5 351z" />
<glyph unicode="&#xe218;" d="M-358 1075l563 461v-256h307h43.5t28 -4.5t18.5 -7.5t7.5 -18.5t4.5 -28v-43.5v-205v-43.5t-4.5 -28t-8 -19t-18.5 -8t-27.5 -4.5h-43.5h-307v-256zM819 58.5v43.5v1946v43.5t4.5 27.5t8 18.5t19 8t28 4.5h43.5h43.5t28 -4.5t18.5 -7.5t7.5 -18.5t4.5 -28v-43.5v-1946 v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5zM1229 58.5v43.5v103q0 77 12.5 89.5t89.5 12.5h615h43.5t28 -4.5t18.5 -7.5t7.5 -18.5t4.5 -28v-43.5v-103q0 -76 -10 -89t-72 -13h-635h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5 t-4.5 28zM1229 673.5v43.5v102v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h1024q77 0 90 -13t13 -90v-102q0 -77 -13 -90t-90 -13h-1024h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28zM1229 1331v103v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h1024h43.5t28 -4.5t19 -8t8 -18.5 t4.5 -27.5v-43.5v-103v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-1024q-77 0 -89.5 12.5t-12.5 89.5zM1229 1902.5v43.5v102v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h1024h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-102q0 -76 -13 -89.5t-90 -13.5h-1024 h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28z" />
<glyph unicode="&#xe219;" d="M-205 870v1383h359v-1331q0 -82 11.5 -143.5t39 -112t79 -77t126.5 -26.5t126.5 26.5t79 77t39 112t11.5 143.5v1331h358v-1383q0 -201 -79 -353t-217.5 -232t-317.5 -80q-302 0 -458.5 175.5t-156.5 489.5zM1331 205v2048h563q302 0 490 -194q153 -158 187 -394 t-63 -445q-101 -218 -309 -322q-157 -79 -356 -79h-153v-614h-359zM1690 1178h204q83 0 150.5 31t109 81t64 114.5t22.5 131.5t-22.5 131.5t-64 114.5t-109 81t-150.5 31h-204v-716z" />
<glyph unicode="&#xe21a;" d="M-20 512l430 369v-267h409v-204h-409v-267zM205 2004.5v43.5v307v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h1843q76 0 89.5 -13t13.5 -90v-307v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-665v-1844v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-307h-43.5 t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28v43.5v1844h-666h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM1638 410v204h410v267l430 -369l-430 -369v267h-410z" />
<glyph unicode="&#xe21b;" d="M410 1468q0 158 63 289.5t171.5 222t256 153t313.5 91.5t347 29q117 0 202 -19t130.5 -50t66 -73t18 -84.5t-21.5 -87.5q77 3 130.5 -39.5t69.5 -99t-0.5 -113.5t-66.5 -81q54 -3 93.5 -36.5t52.5 -80.5t9.5 -94.5t-34.5 -84.5t-80 -46q74 -9 98 -80.5t-15 -147.5 q-45 -87 -140 -106q-22 -4 -45 -4h-381q-119 0 -137 -26.5t15 -125.5q13 -50 21 -80l86 -340q18 -72 21.5 -127t-9.5 -104.5t-55 -80.5t-112 -42q-47 123 -114.5 229.5t-140 182.5t-154 145t-159 126.5t-152 116.5t-137 125t-110 142.5t-74 178t-26.5 222.5z" />
<glyph unicode="&#xe21c;" d="M0 0v1434h614v-1434h-614zM819 154v1177q41 82 101.5 155.5t125.5 131.5t137 118t143 129t137 149.5t125.5 194t101.5 249.5q42 0 75.5 -12.5t54.5 -30t36 -47.5t22 -53t11 -60t4.5 -55t0.5 -50q0 -157 -71.5 -361t-184.5 -355h564q61 0 105.5 -18.5t73 -51.5t46 -85.5 t24.5 -113t7 -141.5q0 -223 -41.5 -398t-114 -291.5t-177 -192.5t-224.5 -109t-263 -33q-355 0 -819 154z" />
<glyph unicode="&#xe21d;" d="M410 801q0 78 11 153.5t35.5 153.5t49 142t68 150t75 145t87.5 160t89 163l404 753l403 -753q34 -63 89.5 -163t87.5 -159.5t75.5 -145.5t68 -150.5t49 -142t35.5 -153t11 -153.5q0 -118 -33.5 -227t-91.5 -195.5t-137 -158.5t-170 -120t-190 -74t-197 -26 q-118 0 -236.5 36.5t-222.5 107t-185 166t-128 223t-47 268.5z" />
<glyph unicode="&#xe21e;" d="M410 801q0 78 11 153.5t35.5 153.5t49 142t68 150t75 145t87.5 160t89 163l404 753l403 -753q34 -63 89.5 -163t87.5 -159.5t75.5 -145.5t68 -150.5t49 -142t35.5 -153t11 -153.5q0 -118 -33.5 -227t-91.5 -195.5t-137 -158.5t-170 -120t-190 -74t-197 -26 q-118 0 -236.5 36.5t-222.5 107t-185 166t-128 223t-47 268.5zM666 801q0 -116 49 -219.5t128.5 -173.5t180.5 -111t205 -41q103 0 204 41t180.5 111t129 173.5t49.5 219.5q0 71 -15 146t-34.5 135t-63 150.5t-74 148t-96 177t-103.5 189.5l-177 332l-178 -332 q-37 -69 -103 -189.5t-96.5 -177t-74 -148t-62.5 -151t-34 -134.5t-15 -146z" />
<glyph unicode="&#xe21f;" d="M-82 0l2048 2458h410l-644 -773q50 -92 72.5 -133t64 -122t61 -127t47 -118.5t40 -127.5t22 -122.5t9.5 -133.5q0 -118 -33.5 -227t-91.5 -195.5t-137 -158.5t-170 -120t-190 -74t-197 -26q-176 0 -348.5 83.5t-292.5 228.5l-260 -312h-410zM454 1101q25 87 70 190 t81 172t111.5 206t108.5 199l404 753l187 -349z" />
<glyph unicode="&#xe220;" d="M205 1082.5v43.5v205v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h1331v409l717 -614l-717 -615v410h-1331h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28z" />
<glyph unicode="&#xe221;" d="M102 1229q0 151 41 296.5t114.5 268.5t178 228t228 178t269 114t296.5 41q226 0 434.5 -90.5t359.5 -241.5t241.5 -359.5t90.5 -434.5q0 -151 -41 -296.5t-114 -269t-178 -228t-228 -178t-268.5 -114.5t-296.5 -41q-226 0 -434.5 90.5t-360 242t-242 360t-90.5 434.5z M410 1229q0 -166 65 -317.5t175 -261.5t261.5 -175t317.5 -65t317.5 65t261.5 175t175 261.5t65 317.5t-65 317.5t-175 261.5t-261.5 175t-317.5 65t-317.5 -65t-261.5 -175t-175 -261.5t-65 -317.5z" />
<glyph unicode="&#xe222;" d="M-205 2004.5v43.5v102v44t4.5 28t8 18.5t18.5 8t28 4.5h44h204v-307h-204h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5zM205 307v2304v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h103h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-358h1638h44t28 -4.5t18.5 -8t8 -18.5t4.5 -28 v-44v-103v-1535h307h43.5t28 -4.5t18.5 -7.5t7.5 -18.5t4.5 -28v-43.5v-103v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-410h-103h-1637h-103q-77 0 -89.5 12.5t-12.5 89.5zM512 512h1434v1434h-1434v-1434zM1946 102h307v-204v-44t-4.5 -28t-8 -18.5t-18.5 -8 t-28 -4.5h-44h-102h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28v43.5v204z" />
<glyph unicode="&#xe223;" d="M0 0l109 688l1769 1770q200 -87 353 -235t227 -345l-1770 -1769zM326 326l253 36l1531 1531q-57 160 -217 217l-1531 -1531z" />
<glyph unicode="&#xe224;" d="M0 563l1792 1792l666 103l-103 -666l-1792 -1792q-192 76 -339.5 223.5t-223.5 339.5zM358 563q38 -77 83 -122t122 -83l1536 1536l51 256l-256 -51z" />
<glyph unicode="&#xe225;" d="M0 0q3 36 9.5 112.5t9.5 106.5t9.5 92t11.5 89.5t14 77.5t19 76t24.5 65t31.5 65t39 56t49 57l878 881q-4 34 3 46l-19 121l244 72l401 401q107 85 212 119.5t210 11t193 -111.5q132 -131 128 -300.5t-147 -312.5l-401 -401l-68 -244l-127 17q-13 -8 -51 -2l-878 -879 q-27 -27 -56.5 -49t-56 -39t-64.5 -31.5t-65 -24t-75 -18.5t-77 -14t-89 -11t-93 -9t-106.5 -9.5t-112.5 -9.5zM300 410h329l791 795q-48 34 -89 75q-66 66 -123 147l-815 -819q-37 -38 -58.5 -84t-34.5 -114z" />
<glyph unicode="&#xe226;" d="M-192 1229q0 13 38 51l1332 1382q38 38 51 38t51 -38l963 -962l174 -164q48 -40 109.5 -130t120 -206t98.5 -258.5t40 -265.5q0 -140 -63 -236t-153.5 -119.5t-181 -3.5t-153.5 112t-63 226q0 78 22.5 165t55 164.5t65 151.5t56.5 150t26 137l-1321 -1372 q-38 -38 -51 -38t-51 38l-1127 1127q-38 38 -38 51zM410 1536h1638l-819 819z" />
<glyph unicode="&#xe227;" d="M98 1369.5q-6 47.5 7.5 82.5t41 57.5t62.5 26t77 -17.5t79 -67l232 -299q34 -43 77 -48.5t75.5 18t52 66t12.5 86.5l-177 985q-15 86 36.5 134t115 29t80.5 -96l162 -753q17 -58 51.5 -80.5t62.5 0t28 80.5v919q0 53 21.5 92t53.5 56.5t69 17.5t69 -17.5t53.5 -56.5 t21.5 -92v-919q0 -58 29 -83t62.5 -4t43.5 78l155 762q19 96 82.5 121t114 -31t36.5 -157l-124 -808q-5 -40 9 -67.5t35.5 -34.5t46 8t37.5 52l144 392q28 76 92 89.5t108 -42t22 -147.5l-239 -1030q-39 -168 -120.5 -300t-184.5 -211t-215 -119.5t-223 -40.5 q-434 0 -808 587l-432 687q-28 48 -34 95.5z" />
<glyph unicode="&#xe228;" d="M51 1434l563 1024l615 -1024h-1178zM717 563q0 113 45 217t121 180t180 121t217 45t217 -45t180 -121t121 -180t45 -217t-45 -217t-121 -180t-180 -121t-217 -45t-217 45t-180 121t-121 180t-45 217zM1434 1434v1024h1024v-1024h-1024z" />
<glyph unicode="&#xe229;" d="M21 258.5q0 6.5 8.5 22.5t20 27.5l36.5 36.5l2027 2026l37 37t27 19.5t22 8.5t22.5 -9t27 -19.5l36.5 -36.5l86 -86l36.5 -36.5t19.5 -27t9 -22.5t-8.5 -22t-19.5 -27l-37 -37l-2026 -2027l-36.5 -36.5t-27.5 -20t-22.5 -8.5t-23 9t-27 19.5l-36.5 36.5l-86 86 l-36.5 36.5t-19.5 27t-9 23z" />
<glyph unicode="&#xe22a;" d="M-638 1740.5q0 14.5 10.5 20t47 22t68 26.5t102.5 34q24 71 34 102.5t26.5 68t22 47t20 10.5t20 -10.5t22 -47t26.5 -68t34 -102.5q71 -24 102.5 -34t68 -26.5t47 -22t10.5 -20t-10.5 -20t-47 -22t-68 -26.5t-102.5 -34q-24 -71 -34 -102.5t-26.5 -68t-22 -47t-20 -10.5 t-20 10.5t-22 47t-26.5 68t-34 102.5q-71 24 -102.5 34t-68 26.5t-47 22t-10.5 20zM-228 2560q0 14 10 19.5t47 22t68 26.5t103 34q24 71 34 102.5t26.5 68t22 47t20 10.5t20 -10.5t22 -47t26.5 -68t34 -102.5q72 -24 103 -34t68 -26.5t47 -22t10 -19.5t-10 -19.5t-47 -22 t-68 -26.5t-103 -34q-24 -71 -34 -102.5t-26.5 -68t-22 -47t-20 -10.5t-20 10.5t-22 47t-26.5 68t-34 102.5q-72 24 -103 34t-68 26.5t-47 22t-10 19.5zM-23 921.5q0 14.5 10.5 20t47 22t68 26.5t102.5 34q24 71 34 102.5t26.5 68t22 47t20 10.5t20 -10.5t22 -47t26.5 -68 t34 -102.5q71 -24 102.5 -34t68 -26.5t47 -22t10.5 -20t-10.5 -20t-47 -22t-68 -26.5t-102.5 -34q-24 -71 -34 -102.5t-26.5 -68t-22 -47t-20 -10.5t-20 10.5t-22 47t-26.5 68t-34 102.5q-71 24 -102.5 34t-68 26.5t-47 22t-10.5 20zM307 1843q38 230 160 352t352 160 l1843 -1843q-38 -230 -160 -352t-352 -160zM563 1894l205 -204l205 204l-205 205q-76 0 -140.5 -64.5t-64.5 -140.5z" />
<glyph unicode="&#xe22b;" d="M358 2202l1741 -666l-539 -269l704 -691q61 -42 61.5 -65t-47.5 -65l-4.5 -4.5l-4.5 -4.5l-5 -5l-144 -143l-14 -14q-42 -45 -61.5 -44t-67.5 58l-690 683l-263 -562z" />
<glyph unicode="&#xe22c;" d="M205 275.5v52.5v1802v52.5t5.5 33t9.5 22.5t22.5 9.5t33 5.5h52.5h1802h52.5t33 -5.5t22.5 -9.5t9.5 -22.5t5.5 -33v-52.5v-1802v-52.5t-5.5 -33t-9.5 -22.5t-22.5 -9.5t-33 -5.5h-52.5h-1802h-52.5t-33 5.5t-22.5 9.5t-9.5 22.5t-5.5 33zM512 512h1434v1434h-1434v-1434 z" />
<glyph unicode="&#xe22d;" d="M61 1477q0 131 35 235.5t90 169.5t128 107.5t143.5 59.5t142.5 17q102 0 195 -36.5t167 -104.5t118 -177.5t44 -244.5q0 -83 -19 -154.5t-49.5 -124t-67.5 -99t-74 -88t-67.5 -82.5t-49.5 -90.5t-19 -103.5q0 -67 25.5 -118t66.5 -78t84 -40t86 -13q62 0 113.5 27 t88 77.5t62 104.5t48.5 125q157 491 551 491q148 0 275 -65t204 -185t76 -268q-1 -72 -18.5 -139t-53.5 -131.5t-71 -114t-92 -119.5l-235 198q79 79 120.5 148.5t41.5 157.5q0 93 -71.5 154t-166.5 61q-50 0 -92.5 -21t-69 -49t-51 -75t-36 -78t-27.5 -80 q-87 -270 -241.5 -398t-354.5 -128q-112 0 -214.5 39t-181.5 109t-126 176.5t-47 232.5q0 74 19.5 138.5t50 112.5t68 91.5t75 85.5t68 85t50 100t19.5 121q0 122 -56.5 192.5t-150.5 70.5q-110 0 -178 -72t-68 -210h-307z" />
<glyph unicode="&#xe22e;" d="M0 0l164 614q28 172 184 328l1659 1638q185 -92 333 -240t240 -333l-1638 -1659q-156 -156 -328 -184zM307 307l307 103l62 61q-31 76 -80 125t-125 80l-61 -62zM696 0q11 2 30 5.5t73.5 19.5t105 37t113 59t108.5 84h1229q77 0 90 -13.5t13 -89.5v-43.5t-4.5 -27.5 t-8 -18.5t-19 -8t-28 -4.5h-43.5h-1659z" />
<glyph unicode="&#xe22f;" d="M205 2004.5v43.5v307v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h1843q76 0 89.5 -13t13.5 -90v-307v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-655v-1844v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-308h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28 v43.5v1844h-676h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28z" />
<glyph unicode="&#xe230;" d="M-655 40l930 2419h373l919 -2419h-492l-181 553h-886l-181 -553h-482zM128 962h644l-322 985zM1608 491q0 529 814 565q128 5 321 5v45q0 149 -102.5 228t-273.5 79q-124 0 -238 -44t-199 -126l-216 215q256 263 698 263q108 0 199 -16t157.5 -42.5t120 -68t89 -84 t61.5 -99.5t39.5 -105.5t21.5 -111t10 -108t2 -103.5v-943h-369v225h-10q-169 -267 -526 -267q-81 0 -160.5 15.5t-160 53t-141.5 92t-99 140.5t-38 192zM2019 521q0 -49 18.5 -87t47.5 -61.5t68 -39t76.5 -21.5t75.5 -6q212 0 313 101q61 61 81 131.5t20 235.5 q-178 0 -277 -7q-47 -3 -87 -8t-92.5 -15t-92.5 -28t-76 -43.5t-55.5 -64t-19.5 -87.5z" />
<glyph unicode="&#xe231;" d="M0 418v94h205v-82q0 -107 59 -166t166 -59h82v-205h-94q-196 0 -307 111t-111 307zM0 717v409h205v-409h-205zM0 1331v410h205v-410h-205zM0 1946v94q0 196 111 307t307 111h94v-205h-82q-107 0 -166 -59t-59 -166v-82h-205zM717 0v205h409v-205h-409zM717 2253v205h409 v-205h-409zM1331 0v205h410v-205h-410zM1331 2253v205h410v-205h-410zM1946 0v205h82q107 0 166 59t59 166v82h205v-94q0 -196 -111 -307t-307 -111h-94zM1946 2253v205h94q196 0 307 -111t111 -307v-94h-205v82q0 107 -59 166t-166 59h-82zM2253 717v409h205v-409h-205z M2253 1331v410h205v-410h-205z" />
<glyph unicode="&#xe232;" d="M0 358v154h205v-102q0 -116 44.5 -160.5t160.5 -44.5h102v-205h-154q-154 0 -256 102t-102 256zM0 717v307h205v-307h-205zM0 1229v153q0 154 102 256.5t256 102.5h154v-205h-102q-116 0 -160.5 -45t-44.5 -160v-102h-205zM717 0v205h307v-205h-307zM717 1536v205h307 v-205h-307zM717 1946v153q0 154 102 256.5t256 102.5h154v-205h-103q-115 0 -159.5 -44.5t-44.5 -160.5v-102h-205zM1229 0v205h102q115 0 160 44.5t45 160.5v102h205v-154q0 -154 -102.5 -256t-256.5 -102h-153zM1229 1536v205h153q154 0 256.5 -102.5t102.5 -256.5v-153 h-205v102q0 115 -45 160t-160 45h-102zM1434 2253v205h307v-205h-307zM1536 717v307h205v-307h-205zM1946 717v205h102q116 0 160.5 44.5t44.5 159.5v103h205v-154q0 -154 -102.5 -256t-256.5 -102h-153zM1946 2253v205h153q154 0 256.5 -102.5t102.5 -256.5v-153h-205v102 q0 116 -44.5 160.5t-160.5 44.5h-102zM2253 1434v307h205v-307h-205z" />
<glyph unicode="&#xe233;" d="M-102 614l716 615v-410h820h43.5t28 -4.5t18.5 -7.5t7.5 -18.5t4.5 -28v-43.5v-205v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-820v-410zM0 1697.5v43.5v205v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-205 q0 -77 -13.5 -90t-89.5 -13h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28zM307 1741v205v43.5t4.5 27.5t8 18.5t19 8t28 4.5h43.5h43.5t28 -4.5t18.5 -7.5t7.5 -18.5t4.5 -28v-43.5v-205v-43.5t-4.5 -28t-8 -19t-18.5 -8t-27.5 -4.5h-43.5q-76 0 -89.5 13t-13.5 90zM614 1741v205 v43.5t4.5 27.5t8 18.5t19 8t28 4.5h43.5h43.5t28 -4.5t18.5 -7.5t7.5 -18.5t4.5 -28v-43.5v-205v-43.5t-4.5 -28t-8 -19t-18.5 -8t-27.5 -4.5h-43.5q-77 0 -90 13t-13 90zM922 1697.5v43.5v205v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h819v410l717 -615l-717 -614v409 h-819h-43.5t-27.5 4.5t-18.5 8t-8 19t-4.5 28zM1638 468.5v43.5v205v43.5t4.5 27.5t8 18.5t19 8t28 4.5h43.5q77 0 89.5 -12.5t12.5 -89.5v-205v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5zM1946 468.5v43.5v205v43.5 t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h43.5t28 -4.5t18.5 -7.5t7.5 -18.5t4.5 -28v-43.5v-205v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM2253 468.5v43.5v205q0 77 12.5 89.5t89.5 12.5h43.5t28 -4.5t19 -8 t8 -18.5t4.5 -27.5v-43.5v-205v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28z" />
<glyph unicode="&#xe234;" d="M205 1946q0 31 0.5 49.5t4.5 55t11 60t22 53t36.5 47t55 30t75.5 12.5h409v205v43.5t4.5 27.5t8 18.5t19 8t28 4.5h43.5h614h43.5t28 -4.5t18.5 -7.5t7.5 -18.5t4.5 -28v-43.5v-205h410q42 0 75.5 -12.5t55 -30t36.5 -47t22 -53t11 -60t4.5 -55t0.5 -49.5h-2048zM307 256 v1485h1843v-1485q0 -116 -70 -186t-186 -70h-1331q-115 0 -185.5 70t-70.5 186zM1024 2253h410v102q0 38 -13 44.5t-90 6.5h-205q-76 0 -89 -6.5t-13 -44.5v-102z" />
<glyph unicode="&#xe235;" d="M205 410l409 614h-204l409 614h-205l615 871l614 -871h-205l410 -614h-205l410 -614h-819v-410h-410v410h-819z" />
<glyph unicode="&#xe236;" d="M205 1536q0 100 59 196t154.5 155t195.5 59q24 0 54 -5q18 215 181 366t380 151q174 0 317.5 -100.5t206.5 -258.5q226 -4 363 -144.5t137 -367.5q0 -158 -68 -276.5t-191 -179.5q3 -27 3 -56q0 -192 -134.5 -326.5t-326.5 -134.5q-45 0 -102 12v-626h-410v626 q-57 -12 -102 -12q-192 0 -326.5 134.5t-134.5 326.5q0 47 7 85q-112 51 -187.5 156.5t-75.5 219.5z" />
<glyph unicode="&#xe237;" d="M1024 1229l205 256l205 -256h-410z" />
<glyph unicode="&#xe238;" d="M1024 1434h410l-205 -256z" />
<glyph unicode="&#xe239;" d="M1178 1229l256 205v-410z" />
<glyph unicode="&#xe23a;" d="M1024 1024v410l256 -205z" />
<glyph unicode="&#xe23b;" d="M1024 1229l205 256l205 -256h-410z" />
<glyph unicode="&#xe23c;" d="M922 1229l307 358l307 -358h-614z" />
<glyph unicode="&#xe23d;" d="M922 1434h614l-307 -369z" />
<glyph unicode="&#xe23e;" d="M1065 1229l369 307v-614z" />
<glyph unicode="&#xe23f;" d="M1024 922v614l369 -307z" />
<glyph unicode="&#xe240;" d="M922 1229l307 368l307 -368h-614z" />
<glyph unicode="&#xe241;" d="M819 1229l410 461l409 -461h-819z" />
<glyph unicode="&#xe242;" d="M819 1434h819l-409 -461z" />
<glyph unicode="&#xe243;" d="M973 1229l461 409v-819z" />
<glyph unicode="&#xe244;" d="M1024 819v819l461 -409z" />
<glyph unicode="&#xe245;" d="M819 1229l410 461l409 -461h-819z" />
<glyph unicode="&#xe246;" d="M614 1229l615 665l614 -665h-1229z" />
<glyph unicode="&#xe247;" d="M614 1434h1229l-614 -666z" />
<glyph unicode="&#xe248;" d="M768 1249l666 615v-1229z" />
<glyph unicode="&#xe249;" d="M1024 635v1229l666 -615z" />
<glyph unicode="&#xe24a;" d="M614 1229l615 665l614 -665h-1229z" />
<glyph unicode="&#xe24b;" d="M410 1229l819 870l819 -870h-1638z" />
<glyph unicode="&#xe24c;" d="M410 1638h1638l-819 -880z" />
<glyph unicode="&#xe24d;" d="M758 1229l880 819v-1638z" />
<glyph unicode="&#xe24e;" d="M819 410v1638l881 -819z" />
<glyph unicode="&#xe24f;" d="M410 819l819 881l819 -881h-1638z" />
<glyph unicode="&#xe250;" d="M717 1434h1024l-512 -512z" />
<glyph unicode="&#xe251;" d="M922 1229l512 512v-1024z" />
<glyph unicode="&#xe252;" d="M1024 717v1024l512 -512z" />
<glyph unicode="&#xe253;" d="M717 1024l512 512l512 -512h-1024z" />
<glyph unicode="&#xe254;" d="M512 1229l512 512v-1024zM1434 717v1024l512 -512z" />
<glyph unicode="&#xe255;" d="M717 1024h1024l-512 -512zM717 1434l512 512l512 -512h-1024z" />
<glyph unicode="&#xe256;" d="M0 1331l1024 922v-615h154q406 0 694.5 -147t437 -422.5t148.5 -658.5q-75 150 -206 268.5t-294.5 193t-349 113.5t-379.5 39h-205v-614z" />
<glyph unicode="&#xe257;" d="M-102 102q0 56 28 103.5t74 74.5v1283q-46 27 -74 74.5t-28 103.5q0 85 59.5 145t144.5 60q56 0 103.5 -28t74.5 -75h334v335q-47 27 -74.5 74t-27.5 103q0 85 60 145t145 60q56 0 103 -27.5t74 -74.5h1284q27 47 74 74.5t103 27.5q85 0 145 -60t60 -145 q0 -56 -27.5 -103t-74.5 -74v-1284q47 -27 74.5 -74t27.5 -103q0 -85 -60 -145t-145 -60q-56 0 -103 27.5t-74 74.5h-335v-334q47 -27 75 -74.5t28 -103.5q0 -85 -60 -144.5t-145 -59.5q-56 0 -103.5 28t-74.5 74h-1283q-27 -46 -74.5 -74t-103.5 -28q-85 0 -144.5 59.5 t-59.5 144.5zM205 280q47 -28 75 -75h1283q28 47 75 75v334h-744q-27 -47 -74 -74.5t-103 -27.5q-85 0 -145 60t-60 145q0 56 27.5 103t74.5 74v744h-334q-28 -47 -75 -75v-1283zM819 894q47 -28 75 -75h744v744q-47 28 -75 75h-744v-744zM819 1843h744q27 47 74.5 75 t103.5 28q85 0 145 -60t60 -145q0 -56 -28 -103.5t-75 -74.5v-744h335q28 47 75 75v1284q-47 28 -75 75h-1284q-28 -47 -75 -75v-335z" />
<glyph unicode="&#xe258;" d="M205 307v1843v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h1843h44t28 -4.5t18.5 -8t8 -18.5t4.5 -28v-44v-1433h409l-563 -717l-563 717h410v1229h-1434v-1434h819l256 -307h-1280q-77 0 -89.5 12.5t-12.5 89.5z" />
<glyph unicode="&#xe259;" d="M0 263.5v43.5v819v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h103h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-614h1843v614q0 76 13 89.5t90 13.5h102q77 0 90 -13.5t13 -89.5v-819v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-2253h-43.5t-28 4.5t-18.5 7.5 t-7.5 18.5t-4.5 28zM614 1587l615 666l614 -666h-409v-717v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-205h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28v43.5v717h-410z" />
<glyph unicode="&#xe25a;" d="M307 1229l922 1229l921 -1229h-563q0 -131 13 -266t46.5 -284.5t84 -276t132.5 -235t185 -167.5q-247 0 -464.5 92t-374.5 253t-248 390.5t-91 493.5h-563z" />
<glyph unicode="&#xe25b;" d="M102 0q0 13 0.5 36.5t6.5 91t15.5 129.5t30.5 140t50 135l573 308q81 40 111 88t33 106q-155 115 -241.5 327.5t-86.5 440.5q0 99 26 194t79.5 178.5t128 147t178.5 100t223 36.5q284 0 459.5 -182t175.5 -474q0 -257 -82 -468.5t-245 -316.5q11 -112 142 -177l574 -308 q45 -91 70.5 -224t28.5 -220l3 -88h-2253z" />
<glyph unicode="&#xe25c;" d="M-102 0q0 13 0.5 36.5t6 91t15 129.5t30.5 140t50 135l573 308q81 40 111 88t33 106q-155 115 -241.5 327.5t-86.5 440.5q0 99 26 194t79.5 178.5t128 147t178.5 100t223 36.5q284 0 459.5 -182t175.5 -474q0 -167 -33 -314t-108 -273.5t-186 -197.5q11 -112 143 -177 l573 -308q45 -91 70.5 -224t28.5 -220l3 -88h-2252zM1843 1741v102q0 77 13.5 90t89.5 13h204v204q0 76 13 89.5t90 13.5h102q77 0 90 -13.5t13 -89.5v-204h204q76 0 89.5 -13t13.5 -90v-102q0 -77 -13.5 -90t-89.5 -13h-204v-204q0 -76 -13 -89.5t-90 -13.5h-102 q-77 0 -90 13.5t-13 89.5v204h-204q-76 0 -89.5 13t-13.5 90z" />
<glyph unicode="&#xe25d;" d="M-461 0q0 12 0.5 34t6.5 86t15.5 124t30.5 135.5t50 132.5l563 307q70 35 111.5 97.5t41.5 107.5q-149 112 -228 320t-79 448q0 151 46 276.5t127.5 210.5t194.5 132t247 47q149 0 268 -53.5t193.5 -145.5t113.5 -211.5t39 -255.5q0 -134 -33 -278t-105 -280.5 t-169 -209.5q0 -26 2.5 -40.5t15.5 -41t46.5 -57t88.5 -66.5l424 -231l140 78q70 35 111.5 97t41.5 107q-114 76 -185 248.5t-71 366.5q0 265 139 414t373 149q130 0 230 -44.5t160.5 -122.5t91 -178t30.5 -218q0 -105 -31 -226.5t-91.5 -230.5t-133.5 -158q0 -25 3 -40 t16 -41.5t46.5 -56.5t88.5 -66l461 -256q23 -68 35.5 -170.5t14.5 -171.5l1 -68h-3482z" />
<glyph unicode="&#xe25e;" d="M-819 0q0 27 2 71t21 147.5t53 168.5l415 223q101 51 105 142q-113 83 -175.5 238t-62.5 321q0 91 31 176t87.5 152.5t145.5 108t197 40.5q207 0 334 -132t127 -345q0 -161 -64 -300t-174 -272q-75 -91 -127 -200.5t-73 -201t-31.5 -170t-9.5 -123.5l2 -44h-803z M-313 1311q0 -122 40.5 -231.5t113.5 -177.5t159 -68q156 0 234.5 130.5t78.5 346.5q0 34 -8 88q-64 -7 -126.5 -5t-119.5 15t-121 53t-131 109q-57 -46 -88.5 -115.5t-31.5 -144.5zM-223 1266q0 32 21.5 53.5t51.5 21.5q32 0 54 -21.5t22 -53.5q0 -31 -23 -52.5t-53 -21.5 q-29 0 -51 22.5t-22 51.5zM76 1266q0 34 19.5 54.5t53.5 20.5t54 -20.5t20 -54.5q0 -33 -20.5 -53.5t-53.5 -20.5t-53 20.5t-20 53.5zM102 0q0 13 0.5 36.5t6.5 91t15.5 129.5t30.5 140t50 135l573 308q81 40 111 88t33 106q-155 115 -241.5 327.5t-86.5 440.5q0 99 26 194 t79.5 178.5t128 147t178.5 100t223 36.5q284 0 459.5 -182t175.5 -474q0 -257 -82 -468.5t-245 -316.5q11 -112 142 -177l574 -308q45 -91 70.5 -224t28.5 -220l3 -88h-2253zM799 1802q0 -168 55.5 -318.5t155.5 -243.5t219 -93q144 0 242.5 86t143 230t44.5 339 q0 66 -12 121q-88 -10 -173.5 -7t-163.5 21t-166 73t-181 149q-77 -64 -120.5 -159.5t-43.5 -197.5zM922 1741q0 42 30 72t72 30q43 0 72.5 -29.5t29.5 -72.5t-31 -73t-71 -30q-41 0 -71.5 31t-30.5 72zM1331 1741q0 46 28.5 74t74.5 28t74 -28t28 -74t-28 -74.5t-74 -28.5 t-74.5 28.5t-28.5 74.5zM1997 1311q0 213 127 345t334 132q108 0 196.5 -40.5t145.5 -108t87.5 -152.5t30.5 -176q0 -166 -62 -321t-175 -238q4 -92 104 -142l416 -223q34 -65 53 -162t21 -161l2 -64h-803q1 9 1 24.5t-2 65t-8.5 100t-23.5 122.5t-42 139t-67.5 144.5 t-97.5 143.5q-109 133 -173 272t-64 300zM2144 1311q0 -122 41 -231.5t114 -177.5t159 -68q156 0 234.5 130.5t78.5 346.5q0 34 -8 88q-64 -7 -126.5 -5t-119.5 15t-121 53t-131 109q-58 -47 -89.5 -116t-31.5 -144zM2234 1266q0 32 22 53.5t52 21.5q32 0 54 -21.5t22 -53.5 q0 -31 -23 -52.5t-53 -21.5q-29 0 -51.5 22.5t-22.5 51.5zM2533 1266q0 34 20 54.5t54 20.5t54 -20.5t20 -54.5q0 -33 -20.5 -53.5t-53.5 -20.5t-53.5 20.5t-20.5 53.5z" />
<glyph unicode="&#xe25f;" d="M-819 0q0 27 2 71t21 147.5t53 168.5l415 223q101 51 105 142q-113 83 -175.5 238t-62.5 321q0 91 31 176t87.5 152.5t145.5 108t197 40.5q207 0 334 -132t127 -345q0 -161 -64 -300t-174 -272q-75 -91 -127 -200.5t-73 -201t-31.5 -170t-9.5 -123.5l2 -44h-803zM102 0 q0 13 0.5 36.5t6.5 91t15.5 129.5t30.5 140t50 135l573 308q81 40 111 88t33 106q-155 115 -241.5 327.5t-86.5 440.5q0 99 26 194t79.5 178.5t128 147t178.5 100t223 36.5q284 0 459.5 -182t175.5 -474q0 -257 -82 -468.5t-245 -316.5q11 -112 142 -177l574 -308 q45 -91 70.5 -224t28.5 -220l3 -88h-2253zM1997 1311q0 213 127 345t334 132q108 0 196.5 -40.5t145.5 -108t87.5 -152.5t30.5 -176q0 -166 -62 -321t-175 -238q4 -92 104 -142l416 -223q34 -65 53 -162t21 -161l2 -64h-803q1 9 1 24.5t-2 65t-8.5 100t-23.5 122.5t-42 139 t-67.5 144.5t-97.5 143.5q-109 133 -173 272t-64 300z" />
<glyph unicode="&#xe260;" d="M-819 0q0 27 2 71t21 147.5t53 168.5l415 223q101 51 105 142q-113 83 -175.5 238t-62.5 321q0 91 31 176t87.5 152.5t145.5 108t197 40.5q207 0 334 -132t127 -345q0 -161 -64 -300t-174 -272q-75 -91 -127 -200.5t-73 -201t-31.5 -170t-9.5 -123.5l2 -44h-803z M-313 1311q0 -122 40.5 -231.5t113.5 -177.5t159 -68q156 0 234.5 130.5t78.5 346.5q0 34 -8 88q-64 -7 -126.5 -5t-119.5 15t-121 53t-131 109q-57 -46 -88.5 -115.5t-31.5 -144.5zM-223 1266q0 32 21.5 53.5t51.5 21.5q32 0 54 -21.5t22 -53.5q0 -31 -23 -52.5t-53 -21.5 q-29 0 -51 22.5t-22 51.5zM76 1266q0 34 20 54.5t54 20.5t53.5 -20.5t19.5 -54.5q0 -33 -20 -53.5t-53 -20.5t-53.5 20.5t-20.5 53.5zM102 0q0 13 0.5 36.5t6.5 91t15.5 129.5t30.5 140t50 135l573 308q78 39 109 85t35 101q-154 117 -241 332.5t-87 443.5q0 39 2 59 l-84 -18v205q80 18 121 25l2 16q16 122 73 220.5t138 159t181 93t202 32.5t202 -32.5t181 -93.5t138 -159t73 -220l2 -16q41 -7 121 -25v-205l-84 18q2 -38 2 -59q0 -168 -32 -316.5t-107 -277.5t-187 -201q15 -104 141 -167l574 -308q45 -91 70.5 -224t28.5 -220l3 -88 h-819l-37 595q-75 -46 -161 -67l44 -528h-307l44 528q-84 20 -160 67l-37 -595h-820zM799 1802q0 -122 33 -240.5t89 -210t137 -148t171 -56.5q112 0 196 50t134.5 140t75 206.5t24.5 258.5q0 48 -6 92q-427 53 -845 1q-9 -45 -9 -93zM922 1741q0 46 28 74t74 28t74 -28 t28 -74t-28 -74.5t-74 -28.5t-74 28.5t-28 74.5zM1049 799q84 -53 176 -54t177 50q-53 59 -66 135q-45 -8 -107 -8q-55 0 -108 11q-14 -70 -72 -134zM1331 1741q0 46 28.5 74t74.5 28t74 -28t28 -74t-28 -74.5t-74 -28.5t-74.5 28.5t-28.5 74.5zM1997 1311q0 213 127 345 t334 132q108 0 196.5 -40.5t145.5 -108t87.5 -152.5t30.5 -176q0 -166 -62 -321t-175 -238q4 -92 104 -142l416 -223q34 -65 53 -162t21 -161l2 -64h-803q1 9 1 24.5t-2 65t-8.5 100t-23.5 122.5t-42 139t-67.5 144.5t-97.5 143.5q-109 133 -173 272t-64 300zM2144 1311 q0 -122 41 -231.5t114 -177.5t159 -68q156 0 234.5 130.5t78.5 346.5q0 34 -8 88q-64 -7 -126.5 -5t-119.5 15t-121 53t-131 109q-58 -47 -89.5 -116t-31.5 -144zM2234 1266q0 32 22 53.5t52 21.5q32 0 54 -21.5t22 -53.5q0 -31 -23 -52.5t-53 -21.5q-29 0 -51.5 22.5 t-22.5 51.5zM2533 1266q0 34 20 54.5t54 20.5t54 -20.5t20 -54.5q0 -33 -20.5 -53.5t-53.5 -20.5t-53.5 20.5t-20.5 53.5z" />
<glyph unicode="&#xe261;" d="M-102 0q0 13 0.5 36.5t6 91t15 129.5t30.5 140t50 135l573 308q81 40 111 88t33 106q-155 115 -241.5 327.5t-86.5 440.5q0 99 26 194t79.5 178.5t128 147t178.5 100t223 36.5q284 0 459.5 -182t175.5 -474q0 -167 -33 -314t-108 -273.5t-186 -197.5q11 -112 143 -177 l573 -308q45 -91 70.5 -224t28.5 -220l3 -88h-2252zM1843 1741v102q0 77 13.5 90t89.5 13h716q76 0 89.5 -13t13.5 -90v-102q0 -77 -13.5 -90t-89.5 -13h-716q-76 0 -89.5 13t-13.5 90z" />
<glyph unicode="&#xe262;" d="M-102 0q0 13 0.5 36.5t6 91t15 129.5t30.5 140t50 135l573 308q81 40 111 88t33 106q-155 115 -241.5 327.5t-86.5 440.5q0 99 26 194t79.5 178.5t128 147t178.5 100t223 36.5q284 0 459.5 -182t175.5 -474q0 -167 -33 -314t-108 -273.5t-186 -197.5q11 -112 143 -177 l573 -308q45 -91 70.5 -224t28.5 -220l3 -88h-2252zM1827 1436l232 232l-232 232q-29 28 58 115t116 58l231 -231l232 231q29 29 116 -58q11 -11 16.5 -17t17.5 -19t17.5 -22t10.5 -20.5t4 -20.5t-8 -16l-232 -232l232 -232q29 -29 -58 -116t-116 -58l-232 232l-231 -232 q-29 -29 -116 58t-58 116z" />
<glyph unicode="&#xe263;" d="M-205 471v1536q0 246 246 246h1946q125 0 195.5 -62.5t70.5 -183.5v-1536q0 -134 -69.5 -200t-196.5 -66h-1946q-124 0 -185 64.5t-61 201.5zM2355 922v604l512 481v-1536z" />
<glyph unicode="&#xe264;" d="M0 614v1229q0 100 52.5 152.5t152.5 52.5h904l-887 -1638h-17q-100 0 -152.5 52t-52.5 152zM358 0l222 410l1110 2048h358l-222 -410h17q100 0 152.5 -52.5t52.5 -152.5v-1229q0 -100 -52.5 -152t-152.5 -52h-904l-222 -410h-359zM2150 983v484l512 376v-1229z" />
<glyph unicode="&#xe265;" d="M0 1229q0 142 21 272t51 214t60.5 147t51.5 92l21 28q16 7 46.5 18t133.5 40t214 51.5t283 40.5t347 18t345 -17.5t287 -42t209.5 -49t137.5 -41.5l45 -18q8 -10 22 -29.5t49.5 -89t62.5 -149.5t49 -211.5t22 -273.5q0 -141 -21 -271.5t-51 -216t-60.5 -150.5t-51.5 -95 l-21 -29q-16 -7 -46.5 -17.5t-133.5 -38t-214 -48.5t-283 -38.5t-347 -17.5t-345 16.5t-287 40t-209.5 47t-137.5 39.5l-45 17q-8 11 -22 31t-49.5 92t-62.5 153t-49 213t-22 273zM614 819h205v307h205v-307h205v819h-205v-307h-205v307h-205v-819zM1331 819h275 q115 0 204.5 62t133.5 155.5t44 198.5q0 169 -110.5 286t-271.5 117h-275v-819zM1536 1024v410h43q68 0 117 -30.5t70.5 -76t20.5 -98.5t-23.5 -98.5t-71 -76t-113.5 -30.5h-43z" />
<glyph unicode="&#xe266;" d="M0 1229q0 142 21 272t51 214t60.5 147t51.5 92l21 28q16 7 46.5 18t133.5 40t214 51.5t283 40.5t347 18t345 -17.5t287 -42t209.5 -49t137.5 -41.5l45 -18q8 -10 22 -29.5t49.5 -89t62.5 -149.5t49 -211.5t22 -273.5q0 -141 -21 -271.5t-51 -216t-60.5 -150.5t-51.5 -95 l-21 -29q-16 -7 -46.5 -17.5t-133.5 -38t-214 -48.5t-283 -38.5t-347 -17.5t-345 16.5t-287 40t-209.5 47t-137.5 39.5l-45 17q-8 11 -22 31t-49.5 92t-62.5 153t-49 213t-22 273zM543 1005q90 -204 291 -204q113 0 196.5 77.5t83.5 185.5q0 53 -18.5 96.5t-55 76.5t-69 54 t-82.5 46q-68 35 -90 50.5t-22 34.5q0 17 18 30t47 13q17 0 31 -4.5t26.5 -16t18 -17.5t17.5 -23.5t14 -20.5l153 109q2 8 -8.5 27t-33 43.5t-53 46.5t-74 37.5t-88.5 15.5q-112 0 -191.5 -69.5t-80.5 -176.5q1 -155 226 -259q73 -34 94.5 -51t21.5 -42q0 -27 -24.5 -44 t-56.5 -17q-31 0 -51 14.5t-44 49.5t-37 49zM1229 819h274q87 0 161 36t121.5 95t74 133t26.5 152q0 169 -111 286t-272 117h-274v-819zM1434 1024v410h43q68 0 117 -30.5t70.5 -76t20.5 -98.5t-23.5 -98.5t-71 -76t-113.5 -30.5h-43z" />
<glyph unicode="&#xe267;" d="M0 471v1577q0 104 54.5 154.5t150.5 50.5h942h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-225q0 -61 13 -71.5t90 -10.5h204h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-205v-43.5t4.5 -28t7.5 -18.5t18.5 -7.5t28 -4.5h43.5h185h43.5t27.5 -4.5t18.5 -8t8 -19 t4.5 -28v-43.5v-860q0 -96 -50.5 -150.5t-154.5 -54.5h-1638q-92 0 -148.5 56.5t-56.5 148.5zM1434 2106.5v43.5v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h307v307v43.5t4.5 27.5t8 18.5t19 8t28 4.5h43.5h43.5t28 -4.5t18.5 -7.5t7.5 -18.5t4.5 -28v-43.5v-307h307 q77 0 90 -13.5t13 -89.5v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-307v-307v-43.5t-4.5 -28t-8 -19t-18.5 -8t-27.5 -4.5h-43.5q-76 0 -89.5 13t-13.5 90v307h-307h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM2253 963v593l409 492v-1577z" />
<glyph unicode="&#xe268;" d="M0 1229q0 250 97.5 477.5t262 392t392 262t477.5 97.5t477.5 -97.5t392 -262t262 -392t97.5 -477.5t-97.5 -477.5t-262 -392t-392 -262t-477.5 -97.5t-477.5 97.5t-392 262t-262 392t-97.5 477.5zM819 1229q0 -171 119.5 -290.5t290.5 -119.5q169 0 289 120t120 290 q0 169 -120 289t-289 120q-170 0 -290 -120t-120 -289zM1126 1229q0 42 30.5 72t72.5 30q43 0 72.5 -29.5t29.5 -72.5q0 -42 -30 -72.5t-72 -30.5q-43 0 -73 30t-30 73z" />
<glyph unicode="&#xe269;" d="M-108 64q-32 64 6 141l1228 2048q25 50 63.5 68t77.5 0t64 -68l1229 -2048q38 -77 6 -141t-108 -64h-2458q-76 0 -108 64zM1075 366q0 -13 4.5 -28t8 -18.5t18.5 -8t28 -4.5h44h102h43.5t27.5 4.5t18.5 8t8 19t4.5 28v43.5v102v43.5t-4.5 28t-7.5 18.5t-18.5 7.5t-28 4.5 h-43.5h-102h-43.5t-28 -4.5t-19 -8t-8 -18.5t-4.5 -27.5v-43.5v-102v-44zM1075 1536l51 -614q0 -76 13 -89.5t90 -13.5h43.5t27.5 4.5t18.5 8t8 19t4.5 28v43.5l51 614v43.5t-4.5 28t-7.5 18.5t-18.5 7.5t-28 4.5h-43.5h-102h-43.5t-28 -4.5t-19 -8t-8 -18.5t-4.5 -27.5 v-43.5z" />
<glyph unicode="&#xe26a;" d="M-109 1613q181 181 402.5 306.5t454.5 185.5t480.5 60t480.5 -60t454.5 -185.5t402.5 -306.5l-217 -217q-182 182 -409.5 296.5t-469 148.5t-483 0t-469 -148.5t-409.5 -296.5zM300 1201q152 151 341 245.5t388.5 122.5t399 0t388.5 -122.5t341 -245.5l-216 -218 q-146 145 -334.5 220.5t-378.5 75.5t-378.5 -75.5t-334.5 -220.5zM712 793q105 105 241.5 160t275 55t275 -55t241.5 -160l-217 -218q-125 125 -299.5 125t-299.5 -125zM1075 307q0 63 45.5 108.5t108.5 45.5t108 -45.5t45 -108.5t-45 -108t-108 -45t-108.5 45t-45.5 108z " />
<glyph unicode="&#xe26b;" d="M0 263.5v43.5v1843v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h2253q77 0 90 -13.5t13 -89.5v-1843v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-2253h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM205 410h2048v1433h-2048v-1433z" />
<glyph unicode="&#xe26c;" d="M0 263.5v43.5v1434v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h308v-409h-205v-1024h1433v204h205v-307q0 -77 -12.5 -89.5t-89.5 -12.5h-1639h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM614 922v1433q0 77 13 90t90 13h1638q77 0 90 -13t13 -90v-1433 q0 -76 -13 -89.5t-90 -13.5h-1638q-77 0 -90 13.5t-13 89.5zM819 1024h1434v1024h-1434v-1024zM1188 1492.5q0 -12.5 4.5 -28t7.5 -18.5t18.5 -7.5t28 -4.5h43.5h144v-123v-43.5t4.5 -28t8 -19t18.5 -8t27.5 -4.5h43.5h43.5t27.5 4.5t18.5 8t8 19t4.5 28v43.5v123h123h43.5 t28 4.5t19 8t8 18.5t4.5 27.5v43.5v43.5t-4.5 27.5t-8 18.5t-19 8t-28 4.5h-43.5h-123v123v43.5t-4.5 28t-8 19t-18.5 8t-27.5 4.5h-43.5h-43.5t-27.5 -4.5t-18.5 -8t-8 -19t-4.5 -28v-43.5v-123h-144h-43.5t-28 -4.5t-18.5 -7.5t-7.5 -18.5t-4.5 -28v-43.5v-43.5z" />
<glyph unicode="&#xe26d;" d="M0 263.5v43.5v1843v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h2253q77 0 90 -13.5t13 -89.5v-1843v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-2253h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM205 410h2048v1433h-2048v-1433zM614 737q0 171 81 307.5t221 211.5 t313 75v287l614 -471l-614 -471v287q-86 0 -170 -10t-174 -33.5t-162.5 -70.5t-108.5 -112z" />
<glyph unicode="&#xe26e;" d="M0 205l2253 2253l205 -205l-2253 -2253zM0 1024l1434 1434l204 -205l-1433 -1434zM0 1843l614 615l205 -205l-614 -615zM819 205l1434 1433l205 -204l-1434 -1434zM1638 205l615 614l205 -205l-615 -614z" />
<glyph unicode="&#xe26f;" d="M0 418v94h205v-82q0 -107 59 -166t166 -59h82v-205h-94q-196 0 -307 111t-111 307zM0 717v409h205v-409h-205zM0 1331v410h205v-410h-205zM0 1946v94q0 196 111 307t307 111h94v-205h-82q-107 0 -166 -59t-59 -166v-82h-205zM635 640l95 264q90 -73 167 -168zM717 0v205 h409v-205h-409zM717 2253v205h409v-205h-409zM801 1069l801 789q93 -31 161.5 -99.5t100.5 -161.5l-800 -789q-103 154 -263 261zM1331 0v205h410v-205h-410zM1331 2253v205h410v-205h-410zM1946 0v205h82q107 0 166 59t59 166v82h205v-94q0 -196 -111 -307t-307 -111h-94z M1946 2253v205h94q196 0 307 -111t111 -307v-94h-205v82q0 107 -59 166t-166 59h-82zM2253 717v409h205v-409h-205zM2253 1331v410h205v-410h-205z" />
<glyph unicode="&#xe270;" d="M205 1331q0 189 72.5 359.5t195.5 294t293.5 196t359.5 72.5t359.5 -72.5t294 -196t196 -294t72.5 -359.5q0 -280 -154 -512l564 -563l-256 -256l-564 563q-230 -153 -512 -153q-189 0 -359.5 72.5t-293.5 195.5t-195.5 293.5t-72.5 359.5zM512 1331q0 -177 78.5 -317 t218.5 -218.5t317 -78.5t317.5 78.5t219 218.5t78.5 317q0 132 -46 246.5t-127 195.5t-195.5 127t-246.5 46q-177 0 -317 -78.5t-218.5 -219t-78.5 -317.5z" />
<glyph unicode="&#xe271;" d="M205 1331q0 189 72.5 359.5t195.5 294t293.5 196t359.5 72.5t359.5 -72.5t294 -196t196 -294t72.5 -359.5q0 -280 -154 -512l564 -563l-256 -256l-564 563q-230 -153 -512 -153q-189 0 -359.5 72.5t-293.5 195.5t-195.5 293.5t-72.5 359.5zM512 1331q0 -177 78.5 -317 t218.5 -218.5t317 -78.5t317.5 78.5t219 218.5t78.5 317q0 132 -46 246.5t-127 195.5t-195.5 127t-246.5 46q-177 0 -317 -78.5t-218.5 -219t-78.5 -317.5zM717 1331v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h205v204v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h44t28 -4.5 t18.5 -8t8 -18.5t4.5 -28v-44v-204h205h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-205v-205v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28v43.5v205h-205 q-77 0 -89.5 12.5t-12.5 89.5z" />
<glyph unicode="&#xe272;" d="M205 1331q0 189 72.5 359.5t195.5 294t293.5 196t359.5 72.5t359.5 -72.5t294 -196t196 -294t72.5 -359.5q0 -280 -154 -512l564 -563l-256 -256l-564 563q-230 -153 -512 -153q-189 0 -359.5 72.5t-293.5 195.5t-195.5 293.5t-72.5 359.5zM512 1331q0 -177 78.5 -317 t218.5 -218.5t317 -78.5t317.5 78.5t219 218.5t78.5 317q0 132 -46 246.5t-127 195.5t-195.5 127t-246.5 46q-177 0 -317 -78.5t-218.5 -219t-78.5 -317.5zM717 1331v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h615h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-43.5t-4.5 -28 t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-615q-77 0 -89.5 12.5t-12.5 89.5z" />
<glyph unicode="&#x1f3a4;" d="M410 1229v102v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-102q0 -132 46 -246.5t127 -195.5t195.5 -127t246.5 -46q177 0 317 78.5t218.5 219t78.5 317.5v102q0 77 13.5 90t89.5 13h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28 v-43.5v-102q0 -310 -187 -526.5t-530 -292.5v-308v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5t-28 -4.5h-43.5h-43.5t-28 4.5t-19 8t-8 18.5t-4.5 27.5v43.5v308q-343 76 -529.5 292.5t-186.5 526.5zM819 1229v819q0 123 60.5 218.5t153 143.5t196.5 48t196.5 -48t152.5 -143.5 t60 -218.5v-819q0 -123 -60 -218.5t-152.5 -143.5t-196.5 -48t-196.5 48t-153 143.5t-60.5 218.5z" />
<glyph unicode="&#x1f4c5;" d="M0 58.5v43.5v2253v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h103v51q0 77 12.5 89.5t89.5 12.5h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-51h1433v51v43.5t4.5 27.5t8 18.5t19 8t28 4.5h43.5h43.5t28 -4.5t18.5 -7.5t7.5 -18.5t4.5 -28v-43.5v-51h102q76 0 89.5 -13 t13.5 -90v-1741l-615 -614h-1536h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM205 205h1433v409h410v1434h-1843v-1843zM410 410v204h204v-204h-204zM410 819v205h204v-205h-204zM410 1229v205h204v-205h-204zM410 1638v205h204v-205h-204zM819 410v204h205v-204h-205z M819 819v205h205v-205h-205zM819 1229v205h205v-205h-205zM819 1638v205h205v-205h-205zM1229 410v204h205v-204h-205zM1229 819v205h205v-205h-205zM1229 1229v205h205v-205h-205zM1229 1638v205h205v-205h-205zM1638 819v205h205v-205h-205zM1638 1229v205h205v-205h-205z M1638 1638v205h205v-205h-205z" />
<glyph unicode="&#x1f4cb;" d="M205 58.5v43.5v2253v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h512v102v43.5t5 28t8.5 18.5t20.5 7.5t30.5 4.5h47.5h594h47.5t30.5 -4.5t20.5 -7.5t8.5 -18.5t5 -28v-43.5v-102h513q76 0 89.5 -13t13.5 -90v-2253v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-1843 h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM410 205h1638v2048h-411v-103v-43.5t-5 -28t-8.5 -18.5t-20.5 -7.5t-30.5 -4.5h-47.5h-594h-47.5t-30.5 4.5t-20.5 7.5t-8.5 18.5t-5 28v43.5v103h-409v-2048z" />
<glyph unicode="&#x1f4ce;" d="M-70 731q0 100 38.5 194t111.5 167l1157 1157q102 102 233.5 155.5t270.5 53.5q141 0 273.5 -53.5t234.5 -155.5q103 -103 156 -234t53 -272q0 -139 -53.5 -270.5t-155.5 -233.5l-1157 -1157l-142 141l1155 1157q96 96 130.5 229.5t0.5 267t-131 230.5q-96 96 -228.5 129 t-265.5 -2t-229 -131l-1157 -1155q-89 -89 -90 -217.5t88 -218.5q86 -87 217 -86.5t219 88.5l1156 1157q29 29 29 73t-29 73q-28 28 -71.5 27.5t-72.5 -29.5l-958 -961l-146 145l959 961q90 90 217.5 89.5t216.5 -89.5t89 -215t-91 -217l-1155 -1157q-150 -150 -363 -150 q-100 0 -194 38t-166 110q-74 74 -112 168t-38 194z" />
<glyph unicode="&#x1f4f0;" d="M0 410v1536v43t4.5 27.5t8 19t18.5 8t27.5 4.5h43.5h308v307v43.5t4 27.5t8 18.5t18.5 8.5t28 5h43.5h1843h43.5t28 -4.5t18.5 -8.5t8.5 -19t4.5 -28v-43v-1945q0 -192 -109 -301t-301 -109h-1638q-192 0 -301 109t-109 301zM205 410q0 -116 44.5 -160.5t160.5 -44.5 h1638q116 0 160.5 44.5t44.5 160.5v1843h-1639v-1843h-204v1433h-205v-1433zM819 614v205h1024v-205h-1024zM819 922v204h1229v-204h-1229zM819 1229v205h1229v-205h-1229zM819 1536v512h410v-512h-410zM1331 1536v205h717v-205h-717zM1331 1843v205h717v-205h-717z" />
<glyph unicode="&#x1f4f7;" d="M0 468.5v43.5v1434v43.5t4.5 28t7.5 18.5t18.5 7.5t28 4.5h43.5h308v102v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-102h1741h43.5t28 -4.5t19 -8t8 -18.5t4.5 -27.5v-43.5v-1434v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5 h-43.5h-2253h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM205 614h2048v1229h-2048v-1229zM768 1229q0 125 61.5 231t168 168t231.5 62t231 -62t168 -168t62 -231t-62 -231.5t-168 -168t-231 -61.5q-191 0 -326 135t-135 326zM973 1229q0 -106 75 -181t181 -75t181 75 t75 181t-75 181t-181 75t-181 -75t-75 -181zM1843 1562q0 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="&#x1f4fb;" d="M0 58.5v43.5v1434q0 44 2 62t11 27l974 977l31 31t22.5 16.5t19 7.5t19 -7t23 -16.5l30.5 -30.5l31 -31t16.5 -22.5t7.5 -18.5t-8 -19t-16.5 -22.5t-30.5 -31.5l-817 -820h1835h1h1h1h1h1q68 1 81 -7l5 -5q46 -46 121 -122t245 -261t268 -312q134 -172 89 -340 q-32 -121 -143 -194q-114 -75 -241 -55q-148 23 -232 169q-34 61 -54 138l-41 163v-710v-43.5t-4.5 -27.5t-8 -18.5t-19 -8t-28 -4.5h-43.5h-2048h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM205 205h1843v1229h-1843v-1229zM481 819q0 48 42.5 90.5t90.5 42.5t90.5 -42.5 t42.5 -90.5t-42.5 -90.5t-90.5 -42.5t-90.5 42.5t-42.5 90.5zM737 512q0 48 42.5 90.5t90.5 42.5t90.5 -42.5t42.5 -90.5t-42.5 -90.5t-90.5 -42.5t-90.5 42.5t-42.5 90.5zM737 1126q0 48 42.5 91t90.5 43t91 -43t43 -91t-43 -90.5t-91 -42.5t-90.5 42.5t-42.5 90.5z M993 819q0 48 42.5 90.5t90.5 42.5t90.5 -42.5t42.5 -90.5t-42.5 -90.5t-90.5 -42.5t-90.5 42.5t-42.5 90.5zM1249 512q0 48 42.5 90.5t90.5 42.5t90.5 -42.5t42.5 -90.5t-42.5 -90.5t-90.5 -42.5t-90.5 42.5t-42.5 90.5zM1249 1126q0 48 42.5 91t90.5 43t91 -43t43 -91 t-43 -90.5t-91 -42.5t-90.5 42.5t-42.5 90.5zM1505 819q0 48 42.5 90.5t90.5 42.5t90.5 -42.5t42.5 -90.5t-42.5 -90.5t-90.5 -42.5t-90.5 42.5t-42.5 90.5zM2364 1205q16 -63 45.5 -177.5t50 -195t33.5 -132.5q29 -115 108 -144q61 -23 114 17q56 43 49 117q-6 58 -50 115 q-118 152 -350 400z" />
<glyph unicode="&#x1f50b;" d="M410 58.5v43.5v2048v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h410v102v43.5t4.5 28t8 19t18.5 8t27.5 4.5h43.5h410h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-102h410h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-2048v-43.5t-4.5 -28t-7.5 -18.5t-18.5 -7.5 t-28 -4.5h-43.5h-1434h-43.5t-28 4.5t-18.5 7.5t-7.5 18.5t-4.5 28zM614 205h1229v1843h-1229v-1843z" />
<glyph unicode="&#x1f514;" d="M205 461v51q95 104 156.5 273.5t82 293.5t47.5 355q14 115 21.5 174t25.5 164t35 161t48 140.5t67 131t89 102.5t117 84t149 47.5t186 19.5t186 -20t149 -47.5t117 -84t89 -102t67 -130.5t48 -141t35 -161.5t25.5 -163.5t21.5 -174q27 -231 47.5 -355t82 -293.5 t156.5 -273.5v-51h-2048zM922 307h614q0 -76 -26.5 -136.5t-71.5 -96.5t-100 -54.5t-115 -17.5q-124 2 -212.5 80.5t-88.5 224.5z" />
<glyph unicode="&#x1f516;" d="M614 51v2304q0 77 13 90t90 13h1024h43.5t27.5 -4.5t18.5 -8t8 -19t4.5 -28v-43.5v-2304q0 -23 -12.5 -35.5t-25.5 -13.5l-13 -2l-563 563l-563 -563q-6 0 -14.5 1.5t-23 14t-14.5 35.5z" />
<glyph unicode="&#x1f527;" d="M0 338q0 40 31 76l1229 1226q-68 208 12.5 414t275.5 316q334 187 627 -19l-530 -283l297 -475l514 258q8 -115 -25 -218t-95.5 -177t-148 -128.5t-179.5 -80t-193.5 -24t-186.5 33.5l-1220 -1220q-29 -33 -74 -33q-47 0 -76 33l-227 225q-31 31 -31 76z" />
</font>
</defs></svg>

After

Width:  |  Height:  |  Size: 363 KiB

Binary file not shown.

Binary file not shown.

2648
public/fonts/unicode.scss Normal file

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

11
public/images/diamond.svg Normal file
View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 17.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="200px" height="217.391px" viewBox="-82 -84.196 200 217.391" enable-background="new -82 -84.196 200 217.391"
xml:space="preserve">
<polygon fill="#FFFFFF" points="-82,-17.091 -82,66.813 4.957,24.865 "/>
<polygon fill="#FFFFFF" points="118,66.813 118,-17.126 31.043,24.848 "/>
<polygon fill="#FFFFFF" points="18.183,11.457 108.557,-36.37 18.165,-84.196 -72.557,-36.37 "/>
<polygon fill="#FFFFFF" points="18.183,133.196 108.557,85.37 18.165,37.543 -72.557,85.37 "/>
</svg>

After

Width:  |  Height:  |  Size: 851 B

BIN
public/images/favicon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

BIN
public/images/hourglass.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

BIN
public/images/hue.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

BIN
public/images/huevalue.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

View File

@ -0,0 +1,80 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.4, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="1482.219px" height="1000px" viewBox="0 0 1482.219 1000" enable-background="new 0 0 1482.219 1000" xml:space="preserve">
<g id="Ebene_1_1_" display="none">
<path display="inline" fill="#489BD5" stroke="#F5F5F5" stroke-width="40" stroke-miterlimit="10" d="M1198.1,678.645
c-3.479-11.025-72.598-227.894-136.552-269.768c-0.203-0.271-0.405-0.546-0.612-0.802c-18.067-22.217-54.729-35.824-95.578-40.838
c-1.045-4.748-2.684-8.63-4.965-10.745c-1.859-1.726-4.205-3.24-6.896-4.562c0.003-0.041,0.006-0.08,0.008-0.121
c36.723-39.124,67.541-127.961,63.088-187.536c-1.222-16.344-4.889-29.706-10.361-40.601c0.066-1.215,0.07-2.45-0.014-3.714
c-1.652-25.371-13.021-38.877-30.91-45.644c-15.152-18.638-47.624-31.345-82.704-29.053c-37.004,2.416-65.922,20.8-75.777,42.672
c-13.468,9.271-21.062,23.464-19.609,45.67c0.166,2.544,0.632,4.948,1.37,7.219c-2.911,10.259-4.102,22.182-3.062,36.057
c3.205,42.908,26.104,99.075,54.188,140.044c-1.261,0.675-2.56,1.314-3.896,1.892c-3.008,1.293-5.979,1.99-8.838,2.072
c-10.912,0.314-17.149-8.476-17.217-8.563l-2.057,1.247c6.309,12,21.385,16.999,30.145,16.745
c1.396-0.041,6.106,0.383,12.015,0.445c7.17,9.104,14.549,17.076,21.922,23.503c-1.034,0.703-2,1.439-2.853,2.228
c-2.754,2.554-4.574,7.67-5.537,13.791c-32.92,6.519-61.259,19.111-76.448,37.792c-22.34,27.469-17.562,140.967-8.207,241.104
l-354.394-45.882l54.211,288.35l381.396,62.204l139.196-103.732c-1.062,3.491-1.646,6.868-1.646,10.045
c0,28.216,33.431,30.006,63.525,30.006c30.096-0.002,54.489-22.875,54.489-51.088c0-3.146-0.164-6.213-0.479-9.197
c3.776-3.562,5.916-6.071,5.916-6.071L1198.1,678.645z M1058.916,790.071c4.574-37.48,15.095-130.188,18.531-215.626
l55.771,108.627L1058.916,790.071z"/>
</g>
<path fill="#3880A8" d="M1046.778,852.009c0,0-33.005,46.755-116.854,46.755c-80.219,0-111.363-39.827-111.363-39.827
s-22.362-284.349-24.272-398.131c48.664-59.836,226.619-59.836,275.286,0C1030.186,535.59,1046.778,852.009,1046.778,852.009z"/>
<path fill="#3880A8" d="M1198.225,719.612l-33.863,2.625L1005.67,465.285c0,0,46.729-13.553,63.903-4.48
C1106.682,531.09,1198.225,719.612,1198.225,719.612z"/>
<path fill="#3880A8" d="M1087.183,838.573c0,0-54.277,59.114-11.254,56.479c30.657-1.876,55.026-30.527,55.026-30.527l67.27-144.91
l-51.396-26.331l12.353,23.799L1087.183,838.573z"/>
<path fill="#64BEEF" d="M951.784,426.649c-8.203,16.851-52.122,18.725-63.313,0c-0.658-15.149-0.829-38.817-7.5-59.41
c12.312-16.646,65.005-17.396,77.313-0.75C948.775,387.084,950.896,396.168,951.784,426.649z"/>
<path fill="#43A2E3" d="M881.562,366.489l-0.592,0.746c14.487,18.977,67.426,16.826,77.313-0.745
C946.162,350.098,894.881,350.575,881.562,366.489z"/>
<polygon fill="#E8C669" points="914.678,474.499 913.486,474.499 907.35,372.135 920.812,372.135 "/>
<polygon fill="#D1D1D1" points="907.447,1000 526.054,937.796 700.184,810.046 1087.602,866.226 "/>
<g>
<polygon fill="#BDBDBD" points="580.317,923.299 705.71,832.489 1032.723,879.911 902.027,975.77 "/>
</g>
<polygon opacity="0.2" fill="#43A2E3" enable-background="new " points="907.447,1000 546.054,917.796 866.693,786.076
971.688,817.574 "/>
<polygon fill="#D1D1D1" points="907.447,1000 526.054,937.796 455.573,562.908 883.193,567.088 "/>
<g>
<polygon fill="#FFFFFF" points="606.099,740.38 614.532,795.093 668.56,768.994 "/>
<polygon fill="#FFFFFF" points="748.491,797.98 740.053,743.246 686.029,769.359 "/>
<polygon fill="#FFFFFF" points="676.07,760.441 731.793,730.562 666.442,698.07 610.486,727.945 "/>
<polygon fill="#FFFFFF" points="688.308,839.822 744.031,809.943 678.681,777.451 622.724,807.326 "/>
</g>
<path fill="#64BEEF" d="M932.164,550.878c28.444,2.622,57.444,7.622,82.444-6.378c3-1,1-11,1-17c-28,3-56,2-83.896,2.457
L932.164,550.878z"/>
<path fill="#64BEEF" d="M1130.116,868.584c-5.508-26.084-27.508-44.084-54.508-38.084c15-16,38-20,54-2c5,6,9,12,11,20c0,3,1,6,0,8
c-2,5-8,6-9.812,10.686C1130.379,868.047,1130.116,868.584,1130.116,868.584z"/>
<circle fill="#FFFFFF" cx="971.688" cy="540.718" r="4.256"/>
<polygon opacity="0.3" fill="#64BEEF" enable-background="new " points="931.93,556.5 938.275,621.166 978.942,643.166
1018.942,620.5 1016.263,553.933 "/>
<path fill="#F4DA73" d="M1129.252,881.798c0.623-28.207-11.218-51.349-41.302-52.015c-30.083-0.666-76.525,42.271-77.15,70.479
c-0.624,28.208,32.758,30.737,62.849,31.403C1103.733,932.331,1128.628,910.003,1129.252,881.798z"/>
<path fill="#E8C669" d="M945.007,376.335c4.116-10.04,2.2-52.529-2.905-58.859c-9.494-11.772-39.325-11.772-48.817,0
c-5.175,6.419-2.647,50.034,1.944,59.268C910.115,382.148,931.036,381.709,945.007,376.335z"/>
<path fill="#F4DA73" d="M796.679,153.151c5.548,87.657,72.521,219.17,119.438,215.556c46.917-3.613,98.451-142.188,92.897-229.846
c-5.548-87.66-63.541-99.866-110.459-96.253C851.639,46.224,791.129,65.491,796.679,153.151z"/>
<path opacity="0.3" fill="#DDC885" enable-background="new " d="M806.148,207.875c2.161-0.57,4.342-1.123,6.539-1.656
C782.276,83.167,1005.67,82.5,992.878,196.709c-0.362,3.23,0.307,6.589,0.331,10c3.607,0.899,7.17,1.848,10.674,2.849
c4.471-24.989,6.477-49.48,5.132-70.697c-5.548-87.66-63.541-99.866-110.459-96.253C851.639,46.223,791.129,65.49,796.679,153.15
C797.746,170.03,801.106,188.723,806.148,207.875z"/>
<path fill="#040504" d="M800.835,308.09l2.329-1.414c0.072,0.1,7.147,10.062,19.518,9.706c3.235-0.095,6.607-0.884,10.02-2.35
c6.596-2.837,12.315-6.925,17.363-10.534c6.789-4.852,12.648-9.04,18.868-9.218c14.089-0.407,20.259,10.047,17.557,19.384
C881.207,331.898,815.732,331.644,800.835,308.09z"/>
<path fill="#040504" d="M981.224,303.056l-2.409-1.275c-0.062,0.104-6.547,10.459-18.916,10.813
c-3.237,0.095-6.648-0.501-10.14-1.769c-6.748-2.449-12.698-6.202-17.94-9.514c-7.058-4.452-13.15-8.295-19.37-8.114
c-14.089,0.405-19.648,11.198-16.409,20.364C902.364,331.463,966.714,326.624,981.224,303.056z"/>
<path fill="#F4DA73" d="M912.526,261.812c0,11.85-10.909,23.403-24.367,23.403s-24.367-11.554-24.367-23.403H912.526z"/>
<ellipse fill="#040504" cx="847.061" cy="200.884" rx="8.156" ry="9.624"/>
<ellipse fill="#040504" cx="940.038" cy="200.883" rx="8.152" ry="9.621"/>
<path fill="#F4DA73" d="M1008.556,247.511c-8.06,0.312-14.74-3-15.091-11.688c-0.354-8.684,11.674-22.297,19.73-22.608
c8.062-0.312,8.964,9.318,9.314,18.005C1022.863,239.905,1016.613,247.199,1008.556,247.511z"/>
<path fill="#F4DA73" d="M805.088,252.838c8.063-0.108,14.562-3.768,14.457-12.46c-0.104-8.69-12.823-21.655-20.888-21.545
s-8.464,9.774-8.359,18.467C790.401,245.992,797.023,252.949,805.088,252.838z"/>
<path fill="#E56373" d="M798.302,104.1c1.98,35.81,47.749,47.342,103.185,43.071c55.438-4.271,99.548-22.729,97.562-58.54
c-3.316-59.984-47.188-61.479-103.957-57.105C840.993,35.694,794.982,44.115,798.302,104.1z"/>
<path fill="#EB6874" d="M813.698,73.452c1.825,33.041,39.354,44.045,84.702,40.554c45.353-3.493,81.343-20.161,79.517-53.202
c-1.827-33.04-42.643-60.333-87.989-56.839C844.579,7.46,811.869,40.413,813.698,73.452z"/>
</svg>

After

Width:  |  Height:  |  Size: 7.2 KiB

View File

@ -0,0 +1,85 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 17.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="1482.219px" height="1000px" viewBox="0 0 1482.219 1000" enable-background="new 0 0 1482.219 1000" xml:space="preserve">
<ellipse fill="#67C4F9" cx="740.609" cy="562.167" rx="3" ry="7.333"/>
<g id="Ebene_1_1_" display="none">
<path display="inline" fill="#489BD5" stroke="#F5F5F5" stroke-width="40" stroke-miterlimit="10" d="M1198.1,678.645
c-3.479-11.025-72.598-227.894-136.552-269.768c-0.203-0.271-0.405-0.546-0.612-0.802c-18.067-22.217-54.729-35.824-95.578-40.838
c-1.045-4.748-2.684-8.63-4.965-10.745c-1.859-1.726-4.205-3.24-6.896-4.562c0.003-0.041,0.006-0.08,0.008-0.121
c36.723-39.124,67.541-127.961,63.088-187.536c-1.222-16.344-4.889-29.706-10.361-40.601c0.066-1.215,0.07-2.45-0.014-3.714
c-1.652-25.371-13.021-38.877-30.91-45.644c-15.152-18.638-47.624-31.345-82.704-29.053c-37.004,2.416-65.922,20.8-75.777,42.672
c-13.468,9.271-21.062,23.464-19.609,45.67c0.166,2.544,0.632,4.948,1.37,7.219c-2.911,10.259-4.102,22.182-3.062,36.057
c3.205,42.908,26.104,99.075,54.188,140.044c-1.261,0.675-2.56,1.314-3.896,1.892c-3.008,1.293-5.979,1.99-8.838,2.072
c-10.912,0.314-17.149-8.476-17.217-8.563l-2.057,1.247c6.309,12,21.385,16.999,30.145,16.745
c1.396-0.041,6.106,0.383,12.015,0.445c7.17,9.104,14.549,17.076,21.922,23.503c-1.034,0.703-2,1.439-2.853,2.228
c-2.754,2.554-4.574,7.67-5.537,13.791c-32.92,6.519-61.259,19.111-76.448,37.792c-22.34,27.469-17.562,140.967-8.207,241.104
l-354.394-45.882l54.211,288.35l381.396,62.204l139.196-103.732c-1.062,3.491-1.646,6.868-1.646,10.045
c0,28.216,33.431,30.006,63.525,30.006c30.096-0.002,54.489-22.875,54.489-51.088c0-3.146-0.164-6.213-0.479-9.197
c3.776-3.562,5.916-6.071,5.916-6.071L1198.1,678.645z M1058.916,790.071c4.574-37.48,15.095-130.188,18.531-215.626
l55.771,108.627L1058.916,790.071z"/>
</g>
<path fill="#EB6874" d="M1046.778,852.009c0,0-33.005,46.755-116.854,46.755c-80.219,0-111.363-39.827-111.363-39.827
s-22.362-284.349-24.272-398.131c48.664-59.836,226.619-59.836,275.286,0C1030.186,535.59,1046.778,852.009,1046.778,852.009z"/>
<path fill="#EB6874" d="M924.76,414.256c0.692,18.729-37.178,41.051-55.864,29.795c-7.71-13.057-18.999-33.86-34.576-48.891
c3.03-20.482,49.17-45.941,67.864-37.045C903.486,380.762,909.632,387.779,924.76,414.256z"/>
<path fill="#E56373" d="M834.488,394.22l-0.171,0.937c21.713,9.927,67.411-16.884,67.866-37.041
C883.774,349.357,838.751,373.911,834.488,394.22z"/>
<polygon fill="#E8C669" points="914.538,473.938 913.486,474.499 859.899,387.066 871.778,380.731 "/>
<polygon fill="#D1D1D1" points="907.447,1000 526.054,937.796 700.184,810.046 1087.602,866.226 "/>
<g>
<polygon fill="#BDBDBD" points="580.317,923.299 705.71,832.489 1032.723,879.911 902.027,975.77 "/>
</g>
<polygon opacity="0.2" fill="#43A2E3" enable-background="new " points="907.447,1000 546.054,917.796 866.693,834.076
971.688,849.574 "/>
<path fill="#EB6874" d="M932.164,550.878c28.444,2.622,57.444,7.622,82.444-6.378c3-1,1-11,1-17c-28,3-56,2-83.896,2.457
L932.164,550.878z"/>
<circle fill="#FFFFFF" cx="971.688" cy="540.718" r="4.256"/>
<polygon fill="#EB6874" points="931.93,556.5 938.275,621.166 978.942,643.166 1018.942,620.5 1016.263,553.933 "/>
<path fill="#E8C669" d="M895.102,373.051c-1.093-10.796-22.779-47.384-30.262-50.567c-13.917-5.919-40.238,8.119-43.073,22.973
c-1.545,8.099,21.21,45.393,29.607,51.38C867.051,394.6,885.304,384.367,895.102,373.051z"/>
<path fill="#F4DA73" d="M621.968,241.158c-22.896,147.357,233.24,167.546,268.186,120.351
c-8.544-29.009-43.544-94.009-78.605-198.818"/>
<path fill="#040504" d="M654.749,431.138l0.828-3.298c0.152,0.026,15.17,2.667,25.842-8.498c2.789-2.921,5.091-6.579,6.836-10.874
c3.369-8.303,4.862-16.948,6.179-24.579c1.773-10.262,3.303-19.118,8.669-24.731c12.153-12.717,26.799-8.845,32.587,1.815
C746.99,381.795,688.632,438.987,654.749,431.138z"/>
<path fill="#040504" d="M823.866,401.452l-2.239-2.561c-0.119,0.094-12.296,9.27-26.87,4.165c-3.815-1.333-7.525-3.549-11.029-6.585
c-6.773-5.864-12.033-12.892-16.666-19.091c-6.24-8.337-11.627-15.533-18.957-18.097c-16.602-5.812-27.895,4.288-28.208,16.416
C719.283,399.386,796.442,422.449,823.866,401.452z"/>
<path fill="#F4DA73" d="M744.807,351.491c-2.322,14.605-58.032,49.185-74.618,46.547c-16.587-2.638,24.712-38.999,27.035-53.603
L744.807,351.491z"/>
<ellipse transform="matrix(-0.9966 0.0826 -0.0826 -0.9966 1391.5819 619.5657)" fill="#040504" cx="682.969" cy="338.581" rx="9.088" ry="6.447"/>
<ellipse transform="matrix(-0.9966 0.0826 -0.0826 -0.9966 1505.1034 595.0516)" fill="#040504" cx="740.238" cy="328.673" rx="9.088" ry="6.447"/>
<path fill="#F4DA73" d="M861.254,263.038c-6.295,7.855-14.878,11.447-23.357,4.675c-8.478-6.765-11.482-29.235-5.189-37.086
c6.296-7.857,16.114-0.835,24.592,5.936C865.778,243.33,867.547,255.186,861.254,263.038z"/>
<path fill="#040504" d="M544.484,239.217c21.773,74.776,97.485,81.792,179.633,51.824c82.151-29.969,139.627-85.575,117.844-160.351
C805.49,5.435,737.924,18.87,653.801,49.559C573.634,78.804,508.007,113.961,544.484,239.217z"/>
<path fill="#040504" d="M684.237,146.584c1.611,5.362,7.459,5.829,13.841,3.635c6.383-2.195,10.88-6.219,9.27-11.581
c-1.611-5.362-8.597-8.387-14.978-6.192C685.987,134.64,682.626,141.222,684.237,146.584z"/>
<path fill="#E56373" d="M972.183,894.5l51.385,15.322l46.007-449.016c0,0-22.847-6.793-34.807,8.511
C959.04,493.447,972.183,894.5,972.183,894.5z"/>
<path fill="#E56373" d="M884.897,605.923l87.106,300.002l57.698,2.416l-21.176-16.449L924.609,581.5L884.897,605.923z"/>
<path fill="#EB6874" d="M551.41,611.453c19.156-18.541,27.278-24.86,7.833-44.53c21.528,4.189,37.152,21.535,30.423,44.659
c-2.42,7.426-5.372,14.005-11.082,19.955c-2.54,1.596-4.548,4.039-6.774,4.256c-5.298,0.967-13.923-25.467-18.854-24.508
C552.005,611.39,551.41,611.453,551.41,611.453z"/>
<path fill="#E8C669" d="M920.909,606.86c9.936-9.53,8.846-26.124-13.438-47.732c-22.284-21.607-87.118-26.998-97.056-17.469
c-9.937,9.53,29.863,21.716,52.153,43.329C884.852,606.596,910.974,616.388,920.909,606.86z"/>
<polygon fill="#D1D1D1" points="907.447,1000 526.054,937.796 455.573,562.908 883.193,567.088 "/>
<g>
<polygon fill="#FFFFFF" points="606.099,740.38 614.532,795.093 668.56,768.994 "/>
<polygon fill="#FFFFFF" points="748.491,797.98 740.053,743.246 686.029,769.359 "/>
<polygon fill="#FFFFFF" points="676.07,760.441 731.793,730.562 666.442,698.07 610.486,727.945 "/>
<polygon fill="#FFFFFF" points="688.308,839.822 744.031,809.943 678.681,777.451 622.724,807.326 "/>
</g>
<path fill="#E8C669" d="M840.661,552.027c-5.182-11.489-15.091-18.191-28.998-11.823c-13.907,6.368-20.231,50.838-15.05,62.328
c5.182,11.49,14.337-11.802,28.248-18.172C838.768,577.993,845.842,563.515,840.661,552.027z"/>
<path fill="#E8C669" d="M857.661,558.027c-5.182-11.489-15.091-18.191-28.998-11.823c-13.907,6.368-20.231,50.838-15.05,62.328
c5.182,11.49,20.614-35.997,34.525-42.366C856.739,567.637,862.842,569.515,857.661,558.027z"/>
<ellipse fill="#67C4F9" cx="740.609" cy="345.167" rx="3" ry="7.333"/>
<ellipse fill="#67C4F9" cx="740.609" cy="385.167" rx="3" ry="7.333"/>
<ellipse fill="#67C4F9" cx="740.609" cy="455.167" rx="3" ry="7.333"/>
<ellipse fill="#67C4F9" cx="680.609" cy="355.167" rx="3" ry="7.333"/>
<ellipse fill="#67C4F9" cx="680.609" cy="465.167" rx="3" ry="7.333"/>
<ellipse fill="#67C4F9" cx="680.609" cy="545.167" rx="3" ry="7.333"/>
</svg>

After

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 898 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 967 KiB

View File

@ -0,0 +1,124 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="185"
height="45"
viewBox="0 0 185 45"
id="svg7843"
version="1.1"
inkscape:version="0.91 r13725"
sodipodi:docname="sd5-logo-inverted.svg">
<defs
id="defs7845" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="3.959798"
inkscape:cx="148.57143"
inkscape:cy="76.667698"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="2560"
inkscape:window-height="1492"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
units="px" />
<metadata
id="metadata7848">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-1007.3622)">
<rect
y="1007.3622"
x="4.9999999e-06"
height="45.883873"
width="185.31001"
id="rect6409-6-8-8-7-6-4"
style="opacity:1;fill:#1a1a1a;fill-opacity:1;stroke:#ffffff;stroke-width:0;stroke-linecap:square;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<g
id="g7809"
transform="matrix(0.70980573,0,0,0.70980573,-269.60224,2203.0642)">
<g
id="flowRoot3757-07-1-0-5-4-5-0-3-1-0-0-5-0"
style="font-style:normal;font-weight:normal;font-size:10px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none"
transform="translate(275.2292,-1717.1004)">
<path
id="path7771"
style="letter-spacing:-2px;fill:#ffffff"
d="m 180.84516,69.158646 q 0,2.736 -1.98,4.392 -1.98,1.62 -5.076,1.62 -2.088,0 -4.356,-0.756 -2.232,-0.756 -3.96,-2.124 l 1.944,-3.132 q 3.348,2.52 6.48,2.52 1.368,0 2.16,-0.612 0.792,-0.648 0.792,-1.62 0,-1.44 -3.816,-2.592 -0.288,-0.108 -0.432,-0.144 -5.976,-1.62 -5.976,-5.4 0,-2.664 2.052,-4.248 2.088,-1.62 5.4,-1.62 3.312,0 6.264,1.944 l -1.512,2.988 q -2.34,-1.548 -5.076,-1.548 -1.44,0 -2.34,0.54 -0.9,0.504 -0.9,1.548 0,0.936 0.936,1.368 0.648,0.324 1.8,0.612 1.188,0.288 2.088,0.576 0.9,0.288 1.728,0.648 0.864,0.36 1.836,1.008 1.944,1.296 1.944,4.032 z"
inkscape:connector-curvature="0" />
<path
id="path7773"
style="letter-spacing:-2px;fill:#ffffff"
d="m 193.67209,55.442646 q 3.852,0 6.588,2.664 2.736,2.664 2.736,7.092 0,4.428 -2.736,7.2 -2.7,2.772 -6.336,2.772 -3.6,0 -6.48,-3.168 l 0,9.864 -4.032,0 0,-26.136 4.032,0 0,3.348 q 2.376,-3.636 6.228,-3.636 z m -6.3,9.9 q 0,2.736 1.656,4.5 1.656,1.728 4.032,1.728 2.376,0 4.14,-1.728 1.764,-1.728 1.764,-4.464 0,-2.772 -1.728,-4.572 -1.728,-1.836 -4.14,-1.836 -2.412,0 -4.068,1.836 -1.656,1.8 -1.656,4.536 z"
inkscape:connector-curvature="0" />
<path
id="path7775"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:36px;font-family:'Montserrat Alternates';-inkscape-font-specification:'Montserrat Alternates';letter-spacing:-3px;fill:#ffffff"
d="m 213.41159,75.170646 q -3.636,0 -6.336,-2.736 -2.7,-2.736 -2.7,-7.2 0,-4.464 2.772,-7.128 2.772,-2.664 6.552,-2.664 3.78,0 6.228,3.6 l 0,-3.312 4.032,0 0,19.152 -4.032,0 0,-3.132 q -1.152,1.656 -2.952,2.556 -1.764,0.864 -3.564,0.864 z m -5.004,-9.756 q 0,2.736 1.764,4.464 1.764,1.728 4.14,1.728 2.376,0 4.032,-1.728 1.656,-1.764 1.656,-4.5 0,-2.736 -1.656,-4.572 -1.656,-1.836 -4.068,-1.836 -2.412,0 -4.14,1.836 -1.728,1.836 -1.728,4.608 z"
inkscape:connector-curvature="0" />
<path
id="path7777"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:36px;font-family:'Montserrat Alternates';-inkscape-font-specification:'Montserrat Alternates';letter-spacing:-3px;fill:#ffffff"
d="m 235.28309,75.170646 q -3.996,0 -6.876,-2.7 -2.88,-2.736 -2.88,-7.128 0,-4.392 2.988,-7.128 3.024,-2.772 7.344,-2.772 4.32,0 7.308,2.988 l -2.376,2.916 q -2.484,-2.16 -5.004,-2.16 -2.52,0 -4.392,1.692 -1.836,1.656 -1.836,4.32 0,2.628 1.836,4.464 1.836,1.836 4.5,1.836 2.7,0 5.076,-2.448 l 2.376,2.592 q -3.492,3.528 -8.064,3.528 z"
inkscape:connector-curvature="0" />
<path
id="path7779"
style="letter-spacing:-2px;fill:#ffffff"
d="m 253.24128,55.442646 q 3.924,0 6.516,2.196 2.592,2.16 2.628,5.652 l 0.036,0.072 -13.968,5.868 q 1.872,2.304 5.076,2.304 3.24,0 5.328,-2.52 l 2.376,2.628 q -3.42,3.528 -8.064,3.528 -4.068,0 -6.984,-2.7 -2.916,-2.7 -2.916,-7.128 0,-3.06 1.512,-5.364 1.512,-2.34 3.744,-3.42 2.232,-1.116 4.716,-1.116 z m -6.084,9.972 q 0,0.468 0.036,0.684 l 10.62,-4.572 q -1.224,-2.376 -4.356,-2.376 -2.376,0 -4.356,1.656 -1.944,1.656 -1.944,4.608 z"
inkscape:connector-curvature="0" />
<path
id="path7781"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:36px;font-family:'Montserrat Alternates';-inkscape-font-specification:'Montserrat Alternates';letter-spacing:-3px;fill:#ffffff"
d="m 272.34909,75.170646 q -3.636,0 -6.336,-2.736 -2.7,-2.736 -2.7,-7.2 0,-4.464 2.772,-7.128 2.772,-2.664 6.588,-2.664 3.852,0 6.192,3.24 l 0,-10.512 4.032,0 0,26.712 -4.032,0 0,-2.88 q -2.232,3.168 -6.516,3.168 z m -5.004,-9.756 q 0,2.736 1.764,4.464 1.764,1.728 4.14,1.728 2.376,0 4.032,-1.728 1.656,-1.764 1.656,-4.5 0,-2.736 -1.656,-4.572 -1.656,-1.836 -4.068,-1.836 -2.412,0 -4.14,1.836 -1.728,1.836 -1.728,4.608 z"
inkscape:connector-curvature="0" />
<path
id="path7783"
style="letter-spacing:-2px;fill:#ffffff"
d="m 294.43659,55.442646 q 3.924,0 6.516,2.196 2.592,2.16 2.628,5.652 l 0.036,0.072 -13.968,5.868 q 1.872,2.304 5.076,2.304 3.24,0 5.328,-2.52 l 2.376,2.628 q -3.42,3.528 -8.064,3.528 -4.068,0 -6.984,-2.7 -2.916,-2.7 -2.916,-7.128 0,-3.06 1.512,-5.364 1.512,-2.34 3.744,-3.42 2.232,-1.116 4.716,-1.116 z m -6.084,9.972 q 0,0.468 0.036,0.684 l 10.62,-4.572 q -1.224,-2.376 -4.356,-2.376 -2.376,0 -4.356,1.656 -1.944,1.656 -1.944,4.608 z"
inkscape:connector-curvature="0" />
<path
id="path7785"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:36px;font-family:'Montserrat Alternates';-inkscape-font-specification:'Montserrat Alternates';letter-spacing:-3px;fill:#ffffff"
d="m 314.22841,75.170646 q -3.996,0 -6.876,-2.7 -2.88,-2.736 -2.88,-7.128 0,-4.392 2.988,-7.128 3.024,-2.772 7.344,-2.772 4.32,0 7.308,2.988 l -2.376,2.916 q -2.484,-2.16 -5.004,-2.16 -2.52,0 -4.392,1.692 -1.836,1.656 -1.836,4.32 0,2.628 1.836,4.464 1.836,1.836 4.5,1.836 2.7,0 5.076,-2.448 l 2.376,2.592 q -3.492,3.528 -8.064,3.528 z"
inkscape:connector-curvature="0" />
<path
id="path7787"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:36px;font-family:'Montserrat Alternates';-inkscape-font-specification:'Montserrat Alternates';letter-spacing:-3px;fill:#ffffff"
d="m 327.50659,74.882646 -4.032,0 0,-26.712 4.032,0 0,15.696 7.776,-8.136 5.184,0 -7.272,7.596 7.812,11.556 -4.896,0 -5.688,-8.388 -2.916,2.952 0,5.436 z"
inkscape:connector-curvature="0" />
</g>
<path
style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:3;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 419.30039,-1669.22 c -0.83723,0 -14.08139,7.648 -14.5,8.3731 -0.41861,0.725 -0.41861,16.0191 0,16.7441 0.41861,0.7251 13.66277,8.3731 14.5,8.3731 0.83722,0 14.08334,-7.648 14.50195,-8.3731 0.41861,-0.725 0.41861,-16.0191 0,-16.7441 -0.41861,-0.7251 -13.66473,-8.3731 -14.50195,-8.3731 z m 11.14843,8.2676 a 14.016884,14.016884 0 0 1 1.75391,3.0332 l -9.39648,5.4395 9.42187,5.4238 a 14.016884,14.016884 0 0 1 -1.75977,3.0273 l -11.1621,-6.4258 -11.15235,6.4571 a 14.016884,14.016884 0 0 1 -1.75195,-3.0313 l 9.39844,-5.4433 -9.42188,-5.4239 a 14.016884,14.016884 0 0 1 1.76172,-3.0254 l 11.16016,6.4239 11.14843,-6.4551 z"
id="path4358-4-6-6-5-8-4-8-2-5-6-8-6-3-9-4-7-5-6-2-4-0-9-6-5-2-5-9-5"
inkscape:connector-curvature="0" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 8.9 KiB

BIN
public/images/sd5-logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

118
public/images/sd5-logo.svg Normal file
View File

@ -0,0 +1,118 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="185"
height="45"
viewBox="0 0 185 45"
id="svg7843"
version="1.1"
inkscape:version="0.91 r13725"
sodipodi:docname="sd5-logo.svg">
<defs
id="defs7845" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="3.959798"
inkscape:cx="65.459885"
inkscape:cy="43.855277"
inkscape:document-units="px"
inkscape:current-layer="g7809"
showgrid="false"
inkscape:window-width="2560"
inkscape:window-height="1492"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
units="px" />
<metadata
id="metadata7848">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-1007.3622)">
<g
id="g7809"
transform="matrix(0.70980573,0,0,0.70980573,-269.60224,2203.0642)"
style="fill:#000000">
<g
id="flowRoot3757-07-1-0-5-4-5-0-3-1-0-0-5-0"
style="font-style:normal;font-weight:normal;font-size:10px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
transform="translate(275.2292,-1717.1004)">
<path
id="path7771"
style="letter-spacing:-2px;fill:#000000"
d="m 180.84516,69.158646 q 0,2.736 -1.98,4.392 -1.98,1.62 -5.076,1.62 -2.088,0 -4.356,-0.756 -2.232,-0.756 -3.96,-2.124 l 1.944,-3.132 q 3.348,2.52 6.48,2.52 1.368,0 2.16,-0.612 0.792,-0.648 0.792,-1.62 0,-1.44 -3.816,-2.592 -0.288,-0.108 -0.432,-0.144 -5.976,-1.62 -5.976,-5.4 0,-2.664 2.052,-4.248 2.088,-1.62 5.4,-1.62 3.312,0 6.264,1.944 l -1.512,2.988 q -2.34,-1.548 -5.076,-1.548 -1.44,0 -2.34,0.54 -0.9,0.504 -0.9,1.548 0,0.936 0.936,1.368 0.648,0.324 1.8,0.612 1.188,0.288 2.088,0.576 0.9,0.288 1.728,0.648 0.864,0.36 1.836,1.008 1.944,1.296 1.944,4.032 z"
inkscape:connector-curvature="0" />
<path
id="path7773"
style="letter-spacing:-2px;fill:#000000"
d="m 193.67209,55.442646 q 3.852,0 6.588,2.664 2.736,2.664 2.736,7.092 0,4.428 -2.736,7.2 -2.7,2.772 -6.336,2.772 -3.6,0 -6.48,-3.168 l 0,9.864 -4.032,0 0,-26.136 4.032,0 0,3.348 q 2.376,-3.636 6.228,-3.636 z m -6.3,9.9 q 0,2.736 1.656,4.5 1.656,1.728 4.032,1.728 2.376,0 4.14,-1.728 1.764,-1.728 1.764,-4.464 0,-2.772 -1.728,-4.572 -1.728,-1.836 -4.14,-1.836 -2.412,0 -4.068,1.836 -1.656,1.8 -1.656,4.536 z"
inkscape:connector-curvature="0" />
<path
id="path7775"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:36px;font-family:'Montserrat Alternates';-inkscape-font-specification:'Montserrat Alternates';letter-spacing:-3px;fill:#000000"
d="m 213.41159,75.170646 q -3.636,0 -6.336,-2.736 -2.7,-2.736 -2.7,-7.2 0,-4.464 2.772,-7.128 2.772,-2.664 6.552,-2.664 3.78,0 6.228,3.6 l 0,-3.312 4.032,0 0,19.152 -4.032,0 0,-3.132 q -1.152,1.656 -2.952,2.556 -1.764,0.864 -3.564,0.864 z m -5.004,-9.756 q 0,2.736 1.764,4.464 1.764,1.728 4.14,1.728 2.376,0 4.032,-1.728 1.656,-1.764 1.656,-4.5 0,-2.736 -1.656,-4.572 -1.656,-1.836 -4.068,-1.836 -2.412,0 -4.14,1.836 -1.728,1.836 -1.728,4.608 z"
inkscape:connector-curvature="0" />
<path
id="path7777"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:36px;font-family:'Montserrat Alternates';-inkscape-font-specification:'Montserrat Alternates';letter-spacing:-3px;fill:#000000"
d="m 235.28309,75.170646 q -3.996,0 -6.876,-2.7 -2.88,-2.736 -2.88,-7.128 0,-4.392 2.988,-7.128 3.024,-2.772 7.344,-2.772 4.32,0 7.308,2.988 l -2.376,2.916 q -2.484,-2.16 -5.004,-2.16 -2.52,0 -4.392,1.692 -1.836,1.656 -1.836,4.32 0,2.628 1.836,4.464 1.836,1.836 4.5,1.836 2.7,0 5.076,-2.448 l 2.376,2.592 q -3.492,3.528 -8.064,3.528 z"
inkscape:connector-curvature="0" />
<path
id="path7779"
style="letter-spacing:-2px;fill:#000000"
d="m 253.24128,55.442646 q 3.924,0 6.516,2.196 2.592,2.16 2.628,5.652 l 0.036,0.072 -13.968,5.868 q 1.872,2.304 5.076,2.304 3.24,0 5.328,-2.52 l 2.376,2.628 q -3.42,3.528 -8.064,3.528 -4.068,0 -6.984,-2.7 -2.916,-2.7 -2.916,-7.128 0,-3.06 1.512,-5.364 1.512,-2.34 3.744,-3.42 2.232,-1.116 4.716,-1.116 z m -6.084,9.972 q 0,0.468 0.036,0.684 l 10.62,-4.572 q -1.224,-2.376 -4.356,-2.376 -2.376,0 -4.356,1.656 -1.944,1.656 -1.944,4.608 z"
inkscape:connector-curvature="0" />
<path
id="path7781"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:36px;font-family:'Montserrat Alternates';-inkscape-font-specification:'Montserrat Alternates';letter-spacing:-3px;fill:#000000"
d="m 272.34909,75.170646 q -3.636,0 -6.336,-2.736 -2.7,-2.736 -2.7,-7.2 0,-4.464 2.772,-7.128 2.772,-2.664 6.588,-2.664 3.852,0 6.192,3.24 l 0,-10.512 4.032,0 0,26.712 -4.032,0 0,-2.88 q -2.232,3.168 -6.516,3.168 z m -5.004,-9.756 q 0,2.736 1.764,4.464 1.764,1.728 4.14,1.728 2.376,0 4.032,-1.728 1.656,-1.764 1.656,-4.5 0,-2.736 -1.656,-4.572 -1.656,-1.836 -4.068,-1.836 -2.412,0 -4.14,1.836 -1.728,1.836 -1.728,4.608 z"
inkscape:connector-curvature="0" />
<path
id="path7783"
style="letter-spacing:-2px;fill:#000000"
d="m 294.43659,55.442646 q 3.924,0 6.516,2.196 2.592,2.16 2.628,5.652 l 0.036,0.072 -13.968,5.868 q 1.872,2.304 5.076,2.304 3.24,0 5.328,-2.52 l 2.376,2.628 q -3.42,3.528 -8.064,3.528 -4.068,0 -6.984,-2.7 -2.916,-2.7 -2.916,-7.128 0,-3.06 1.512,-5.364 1.512,-2.34 3.744,-3.42 2.232,-1.116 4.716,-1.116 z m -6.084,9.972 q 0,0.468 0.036,0.684 l 10.62,-4.572 q -1.224,-2.376 -4.356,-2.376 -2.376,0 -4.356,1.656 -1.944,1.656 -1.944,4.608 z"
inkscape:connector-curvature="0" />
<path
id="path7785"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:36px;font-family:'Montserrat Alternates';-inkscape-font-specification:'Montserrat Alternates';letter-spacing:-3px;fill:#000000"
d="m 314.22841,75.170646 q -3.996,0 -6.876,-2.7 -2.88,-2.736 -2.88,-7.128 0,-4.392 2.988,-7.128 3.024,-2.772 7.344,-2.772 4.32,0 7.308,2.988 l -2.376,2.916 q -2.484,-2.16 -5.004,-2.16 -2.52,0 -4.392,1.692 -1.836,1.656 -1.836,4.32 0,2.628 1.836,4.464 1.836,1.836 4.5,1.836 2.7,0 5.076,-2.448 l 2.376,2.592 q -3.492,3.528 -8.064,3.528 z"
inkscape:connector-curvature="0" />
<path
id="path7787"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:36px;font-family:'Montserrat Alternates';-inkscape-font-specification:'Montserrat Alternates';letter-spacing:-3px;fill:#000000"
d="m 327.50659,74.882646 -4.032,0 0,-26.712 4.032,0 0,15.696 7.776,-8.136 5.184,0 -7.272,7.596 7.812,11.556 -4.896,0 -5.688,-8.388 -2.916,2.952 0,5.436 z"
inkscape:connector-curvature="0" />
</g>
<path
style="opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:3;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 417.74911,-1670.7774 -14.58027,8.4162 14.57783,8.3919 14.5364,-8.4187 -14.53396,-8.3894 z m 15.60884,10.2028 -13.50296,7.819 13.50296,7.7727 0,-15.5917 z m -31.21768,0.049 0,15.5917 13.50296,-7.819 -13.50296,-7.7727 z m 15.61128,8.9864 -14.5364,8.4187 14.53396,8.3894 14.58027,-8.4162 -14.57783,-8.3919 z"
id="path4358-4-6-6-5-8-4-8-2-5-6-8"
inkscape:connector-curvature="0" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 8.2 KiB

View File

@ -0,0 +1,50 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 17.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="118.807px" height="26.558px" viewBox="13 11.299 118.807 26.558" enable-background="new 13 11.299 118.807 26.558"
xml:space="preserve">
<path fill="#FFFFFF" d="M52.333,22.961c-2.275-0.54-2.814-0.942-2.814-1.853v-0.035c0-0.774,0.708-1.397,1.921-1.397
c1.08,0,2.143,0.422,3.203,1.214l1.113-1.566c-1.197-0.963-2.562-1.483-4.281-1.483c-2.342,0-4.027,1.398-4.027,3.42v0.033
c0,2.175,1.416,2.917,3.927,3.522c2.189,0.508,2.663,0.963,2.663,1.807v0.03c0,0.879-0.811,1.483-2.091,1.483
c-1.448,0-2.596-0.556-3.724-1.536l-1.246,1.488c1.416,1.26,3.118,1.884,4.921,1.884c2.476,0,4.214-1.312,4.214-3.522v-0.032
C56.111,24.462,54.827,23.567,52.333,22.961z"/>
<path fill="#FFFFFF" d="M62.313,20.72c-1.449,0-2.376,0.74-3.033,1.669v-1.482h-2.039V32.5h2.039v-4.078
c0.623,0.825,1.549,1.568,3.033,1.568c2.106,0,4.129-1.67,4.129-4.618v-0.036C66.443,22.372,64.403,20.72,62.313,20.72z
M64.37,25.371c0,1.753-1.146,2.848-2.545,2.848c-1.383,0-2.597-1.144-2.597-2.848v-0.036c0-1.699,1.214-2.846,2.597-2.846
c1.384,0,2.545,1.129,2.545,2.846V25.371z"/>
<path fill="#FFFFFF" d="M71.325,20.788c-1.417,0-2.378,0.284-3.355,0.724l0.541,1.603c0.81-0.337,1.549-0.557,2.543-0.557
c1.434,0,2.209,0.675,2.209,1.939v0.216c-0.689-0.216-1.399-0.37-2.395-0.37c-2.171,0-3.672,0.944-3.672,2.866v0.034
c0,1.787,1.484,2.748,3.15,2.748c1.366,0,2.292-0.574,2.9-1.301v1.115h1.99v-5.274c0-1.164-0.305-2.109-0.961-2.748
C73.65,21.141,72.655,20.788,71.325,20.788z M73.297,26.6c0,1.131-1.027,1.906-2.377,1.906c-0.978,0-1.736-0.489-1.736-1.35v-0.032
c0-0.927,0.777-1.484,2.09-1.484c0.81,0,1.501,0.152,2.022,0.355L73.297,26.6L73.297,26.6z"/>
<path fill="#FFFFFF" d="M81.052,28.219c-1.569,0-2.663-1.262-2.663-2.848v-0.034c0-1.55,1.094-2.83,2.578-2.83
c1.014,0,1.668,0.454,2.293,1.111l1.279-1.364c-0.842-0.91-1.887-1.534-3.557-1.534c-2.681,0-4.635,2.122-4.635,4.651v0.031
c0,2.529,1.957,4.604,4.604,4.604c1.734,0,2.762-0.691,3.639-1.668l-1.23-1.215C82.721,27.783,82.014,28.219,81.052,28.219z"/>
<path fill="#FFFFFF" d="M89.303,20.72c-2.546,0-4.349,2.09-4.349,4.636v0.032c0,2.748,1.987,4.619,4.567,4.619
c1.636,0,2.797-0.66,3.643-1.668l-1.197-1.062c-0.711,0.692-1.418,1.062-2.414,1.062c-1.312,0-2.342-0.809-2.562-2.257h6.541
c0.016-0.206,0.031-0.391,0.031-0.576C93.566,22.945,92.134,20.72,89.303,20.72z M86.977,24.731
c0.187-1.384,1.062-2.344,2.309-2.344c1.348,0,2.123,1.027,2.258,2.344H86.977z"/>
<path fill="#FFFFFF" d="M101.723,22.287c-0.643-0.844-1.568-1.567-3.035-1.567c-2.123,0-4.129,1.667-4.129,4.615v0.036
c0,2.949,2.039,4.619,4.129,4.619c1.448,0,2.375-0.742,3.035-1.669v1.482h2.037V17.5h-2.037V22.287z M101.754,25.371
c0,1.704-1.211,2.848-2.576,2.848c-1.386,0-2.562-1.13-2.562-2.848v-0.036c0-1.768,1.163-2.846,2.562-2.846
c1.365,0,2.576,1.129,2.576,2.846V25.371z"/>
<path fill="#FFFFFF" d="M109.105,20.72c-2.543,0-4.347,2.09-4.347,4.636v0.032c0,2.748,1.987,4.619,4.568,4.619
c1.634,0,2.799-0.66,3.64-1.668l-1.195-1.062c-0.709,0.692-1.416,1.062-2.414,1.062c-1.312,0-2.342-0.809-2.56-2.257h6.539
c0.015-0.206,0.032-0.391,0.032-0.576C113.371,22.945,111.939,20.72,109.105,20.72z M106.781,24.731
c0.187-1.384,1.062-2.344,2.309-2.344c1.35,0,2.121,1.027,2.26,2.344H106.781z"/>
<path fill="#FFFFFF" d="M119.034,28.219c-1.57,0-2.665-1.262-2.665-2.848v-0.034c0-1.55,1.095-2.83,2.579-2.83
c1.011,0,1.669,0.454,2.292,1.111l1.281-1.364c-0.842-0.91-1.889-1.534-3.556-1.534c-2.681,0-4.635,2.122-4.635,4.651v0.031
c0,2.529,1.955,4.604,4.603,4.604c1.733,0,2.762-0.691,3.639-1.668l-1.231-1.215C120.702,27.783,119.991,28.219,119.034,28.219z"/>
<polygon fill="#FFFFFF" points="128.27,24.529 131.807,20.905 129.33,20.905 125.637,24.849 125.637,17.5 123.6,17.5 123.6,29.803
125.637,29.803 125.637,27.258 126.902,25.945 129.532,29.805 131.926,29.805 "/>
<g>
<polygon fill="#FFFFFF" points="36,19.009 26.355,24.578 36,30.147 "/>
<polygon fill="#FFFFFF" points="24.5,23.507 35.073,17.403 24.5,11.299 13.927,17.403 "/>
<polygon fill="#FFFFFF" points="13,17.939 13,17.939 13,17.939 "/>
<polygon fill="#FFFFFF" points="36,17.939 36,17.939 36,17.938 "/>
<polygon fill="#FFFFFF" points="36,31.218 36,31.218 36,31.218 "/>
<polygon fill="#FFFFFF" points="24.5,25.649 13.927,31.753 24.5,37.857 35.073,31.753 "/>
<polygon fill="#FFFFFF" points="22.645,24.578 13,19.009 13,30.147 "/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.6 KiB

BIN
public/images/spinner.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

BIN
public/images/spinner2.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 17.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="780px" height="60px" viewBox="0 0 780 60" enable-background="new 0 0 780 60" xml:space="preserve">
<polygon fill="#303030" points="780,0 779.932,60 0,59.458 "/>
</svg>

After

Width:  |  Height:  |  Size: 543 B

View File

@ -0,0 +1,331 @@
var api_endpoint = ENV.apiEndpoint;
var api_socket_endpoint = ENV.websocketsEndpoint;
var api_token = null;
var websocket = null;
var channel_id = null;
var space_auth = null;
function load_resource(method, path, data, on_success, on_error, on_progress) {
var req = new XMLHttpRequest();
req.onload = function(evt,b,c) {
if (req.status>=200 && req.status<=299) {
var parsed = null;
try {
var parsed = JSON.parse(req.response);
} catch(e) {};
if (data && parsed && parsed._id) {
// mutate the local object and update its _id
data._id = parsed._id;
}
if (on_success) {
on_success(parsed,req);
}
} else {
if (on_error) {
on_error(req);
}
}
};
req.onerror = function(err) {
console.log(err,err.target);
// window._spacedeck_location_change is a flag set by redirect / reload functions
if (!window._spacedeck_location_change) {
if (window.spacedeck && window.spacedeck.active_space) {
window.spacedeck.offline = true;
} else {
alert("Could not connect to Spacedeck. Please reconnect and try again.");
}
}
if (on_error) on_error(req);
}
req.withCredentials = true;
req.open(method, api_endpoint+"/api"+path, true);
if (api_token) {
req.setRequestHeader("X-Spacedeck-Auth", api_token);
}
if (space_auth) {
console.log("set space auth", space_auth);
req.setRequestHeader("X-Spacedeck-Space-Auth", space_auth);
}
if (channel_id) {
req.setRequestHeader("X-Spacedeck-Channel", channel_id);
}
if (csrf_token) {
req.setRequestHeader("X-csrf-token", csrf_token);
}
try {
if (data) {
if (data.toString() == "[object File]") {
req.setRequestHeader("Content-type", data.type);
req.setRequestHeader("Accepts", "application/json");
req.upload.onprogress = function(e) {
console.log("upload progress: ",e.loaded,e.total);
if (on_progress) on_progress(e);
}
req.send(data);
} else {
req.setRequestHeader("Content-type", "application/json");
req.send(JSON.stringify(data));
}
} else {
req.send();
}
} catch (e) {
if (on_error) {
on_error(req, e);
} else {
throw(e);
}
}
}
function get_resource(path, on_success, on_error, on_progress) {
load_resource("get", path, null, on_success, on_error, on_progress);
}
function load_profile(name, on_success, on_error) {
load_resource("get", "/users/slug?slug="+name, null, on_success, on_error);
}
function load_current_user(on_success, on_error) {
load_resource("get", "/users/current", null, on_success, on_error);
}
function load_space(id, on_success, on_error) {
if (!id || id=="undefined") {
console.error("load_space id:", id);
return;
}
var url = "/spaces/"+id;
load_resource("get", url, null, function(space, req) {
var role = req.getResponseHeader("x-spacedeck-space-role");
on_success(space, role);
}, on_error);
}
function load_space_path(id, on_success, on_error) {
var url = "/spaces/"+id+"/path";
load_resource("get", url, null, function(space, req) {
on_success(space);
}, on_error);
}
function load_spaces(id, is_home, on_success, on_error) {
if (!id || id=="undefined") {
console.error("load_spaces id:", id);
return;
}
var q = "?parent_space_id="+id;
load_resource("get", "/spaces"+q, null, function(spaces) {
on_success(spaces);
}, on_error);
}
function load_writable_folders( on_success, on_error) {
load_resource("get", "/spaces?writablefolders=true", null, on_success, on_error);
}
function load_history(s, on_success, on_error) {
load_resource("get", "/spaces/"+ s._id +"/digest", null, on_success, on_error);
}
function load_filtered_spaces(filter, on_success, on_error) {
load_resource("get", "/spaces?filter="+filter, null, on_success, on_error);
}
function load_spaces_search(query, on_success, on_error) {
load_resource("get", "/spaces?search="+query, null, on_success, on_error);
}
function load_artifacts(id, on_success, on_error) {
load_resource("get", "/spaces/"+id+"/artifacts", null, on_success, on_error);
}
function save_artifact(a, on_success, on_error) {
if (a._id) {
load_resource("put", "/spaces/"+a.space_id+"/artifacts/"+a._id,a,on_success,on_error);
} else {
load_resource("post", "/spaces/"+a.space_id+"/artifacts",a,on_success,on_error);
}
}
function save_pdf_file(space, point, file, zones, on_success, on_error, on_progress) {
load_resource("post", "/spaces/"+space._id+"/artifacts-pdf?filename="+file.name + "&x="+point.x+"&y="+point.y + "&zones="+zones,file,on_success,on_error,on_progress);
}
function save_artifact_file(a, file,filename, on_success, on_error, on_progress) {
load_resource("post", "/spaces/"+a.space_id+"/artifacts/"+a._id+"/payload?filename="+filename,file,on_success,on_error,on_progress);
}
function save_space(s, on_success, on_error) {
if (s._id) {
delete s['artifacts'];
load_resource("put", "/spaces/"+s._id,s,on_success,on_error);
} else {
load_resource("post", "/spaces",s,on_success,on_error);
}
}
function delete_space(s, on_success, on_error) {
load_resource("delete", "/spaces/"+s._id, null, on_success, on_error);
}
function delete_artifact(a, on_success, on_error) {
load_resource("delete", "/spaces/"+a.space_id+"/artifacts/"+a._id);
}
function duplicate_space(s, to_space_id, on_success, on_error) {
var path = "/spaces/"+s._id+"/duplicate";
if(to_space_id) {
path += "?parent_space_id=" + to_space_id
}
load_resource("post", path, null,on_success,on_error);
}
function load_members(space, on_success, on_error) {
load_resource("get", "/spaces/"+ space._id +"/memberships", null, on_success, on_error);
}
function create_membership(space, m, on_success, on_error) {
load_resource("post", "/spaces/"+ space._id +"/memberships", m, on_success, on_error);
}
function save_membership(space, m, on_success, on_error) {
load_resource("put", "/spaces/"+ space._id +"/memberships/" + m._id, m, on_success, on_error);
}
function delete_membership(space, m, on_success, on_error) {
load_resource("delete", "/spaces/"+ space._id +"/memberships/"+m._id, m, on_success, on_error);
}
function accept_invitation(id, code, on_success, on_error) {
load_resource("get", "/memberships/"+ id +"/accept?code="+code, null, on_success, on_error);
}
function get_join_link(space_id, on_success, on_error) {
load_resource("get", "/invitation_codes?space_id="+space_id, null, on_success, on_error);
}
function create_join_link(space_id, role, on_success, on_error) {
load_resource("post", "/invitation_codes", {join_role:role, sticky:true, space_id:space_id}, on_success, on_error);
}
function delete_join_link(link_id, on_success, on_error) {
load_resource("delete", "/invitation_codes/"+link_id, null, on_success, on_error);
}
function load_team_members(id, on_success, on_error) {
load_resource("get", "/teams/"+ id +"/memberships", null, function(team) {
on_success(team);
}, on_error);
}
function save_avatar_file(type, o, file, on_success, on_error) {
load_resource("post", "/"+type+"s/"+o._id+"/avatar", file, on_success,on_error);
}
function remove_avatar_file(type, o, on_success, on_error) {
load_resource("delete", "/"+type+"s/"+o._id+"/avatar", null, on_success,on_error);
}
function save_space_background_file(space, file, on_success, on_error) {
load_resource("post", "/spaces/"+space._id+"/background?filename="+file.name, file, on_success,on_error);
}
function save_user_background_file(user, file, on_success, on_error) {
load_resource("post", "/users/"+user._id+"/background", file, on_success,on_error);
}
function save_user_password(u, pass, newPass, on_success, on_error) {
load_resource("post", "/users/" + u._id + "/password", {old_password:pass, new_password:newPass}, on_success, on_error);
}
function get_featured_users(on_success, on_error) {
load_resource("get", "/users/featured", null, on_success, on_error);
}
function save_user(u, on_success, on_error) {
load_resource("put", "/users/"+u._id,u,on_success,on_error);
}
function delete_user(u, password, on_success, on_error) {
load_resource("delete", "/users/"+u._id +"?password="+password,null,on_success,on_error);
}
function create_user(name, email, password, password_confirmation, on_success, on_error) {
load_resource("post", "/users", {email:email, nickname:name, password:password, password_confirmation: password_confirmation}, on_success, on_error);
}
function create_session(email, password, on_success, on_error) {
load_resource("post", "/sessions", {email:email, password:password}, on_success, on_error);
}
function delete_session(on_success, on_error) {
load_resource("delete", "/sessions/current", null, on_success, on_error);
}
function create_oauthtoken(on_success, on_error) {
load_resource("get", "/users/oauth2callback/url", null, on_success, on_error);
}
function create_session_for_oauthtoken(token, on_success, on_error) {
load_resource("get", "/users/loginorsignupviagoogle?code="+token, null, on_success, on_error);
}
function create_password_reset(email, on_success, on_error) {
load_resource("post", "/users/password_reset_requests?email=" + encodeURIComponent(email), null, on_success, on_error);
}
function confirm_password_reset(password, confirm, on_success, on_error) {
load_resource("post", "/users/password_reset_requests/"+confirm+"/confirm", {password:password}, on_success, on_error);
}
function confirm_user(user, token, on_success, on_error) {
load_resource("put", "/users/"+user._id+"/confirm", {token:token}, on_success, on_error);
}
function resent_confirm_mail(user, on_success, on_error) {
load_resource("post", "/users/"+user._id+"/confirm", {}, on_success, on_error);
}
function create_feedback(user, m, on_success, on_error) {
load_resource("post", "/users/feedback", {text: m}, on_success, on_error);
}
function save_team(u, on_success, on_error) {
load_resource("put", "/teams/"+u._id,u,on_success,on_error);
}
function load_comments(space_id, on_success, on_error) {
load_resource("get", "/spaces/"+space_id+"/messages", null, on_success, on_error);
}
function save_comment(space_id, data, on_success, on_error) {
load_resource("post", "/spaces/"+space_id +"/messages", data, on_success, on_error);
}
function delete_comment(space_id, message_id,on_success, on_error) {
load_resource("delete", "/spaces/"+space_id +"/messages/"+ message_id, null , on_success, on_error);
}
function update_comment(space_id, data, on_success, on_error) {
load_resource("post", "/spaces/"+space_id+"/messages/" + data._id , data, on_success, on_error);
}
function load_notifications(u, on_success, on_error) {
load_resource("get", "/notifications", null, on_success, on_error);
}

745
public/javascripts/clipboard.js Executable file
View File

@ -0,0 +1,745 @@
/*!
* clipboard.js v1.5.5
* https://zenorocha.github.io/clipboard.js
*
* Licensed MIT © Zeno Rocha
*/
(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.Clipboard = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
var matches = require('matches-selector')
module.exports = function (element, selector, checkYoSelf) {
var parent = checkYoSelf ? element : element.parentNode
while (parent && parent !== document) {
if (matches(parent, selector)) return parent;
parent = parent.parentNode
}
}
},{"matches-selector":2}],2:[function(require,module,exports){
/**
* Element prototype.
*/
var proto = Element.prototype;
/**
* Vendor function.
*/
var vendor = proto.matchesSelector
|| proto.webkitMatchesSelector
|| proto.mozMatchesSelector
|| proto.msMatchesSelector
|| proto.oMatchesSelector;
/**
* Expose `match()`.
*/
module.exports = match;
/**
* Match `el` to `selector`.
*
* @param {Element} el
* @param {String} selector
* @return {Boolean}
* @api public
*/
function match(el, selector) {
if (vendor) return vendor.call(el, selector);
var nodes = el.parentNode.querySelectorAll(selector);
for (var i = 0; i < nodes.length; ++i) {
if (nodes[i] == el) return true;
}
return false;
}
},{}],3:[function(require,module,exports){
var closest = require('closest');
/**
* Delegates event to a selector.
*
* @param {Element} element
* @param {String} selector
* @param {String} type
* @param {Function} callback
* @return {Object}
*/
function delegate(element, selector, type, callback) {
var listenerFn = listener.apply(this, arguments);
element.addEventListener(type, listenerFn);
return {
destroy: function() {
element.removeEventListener(type, listenerFn);
}
}
}
/**
* Finds closest match and invokes callback.
*
* @param {Element} element
* @param {String} selector
* @param {String} type
* @param {Function} callback
* @return {Function}
*/
function listener(element, selector, type, callback) {
return function(e) {
e.delegateTarget = closest(e.target, selector, true);
if (e.delegateTarget) {
callback.call(element, e);
}
}
}
module.exports = delegate;
},{"closest":1}],4:[function(require,module,exports){
/**
* Check if argument is a HTML element.
*
* @param {Object} value
* @return {Boolean}
*/
exports.node = function(value) {
return value !== undefined
&& value instanceof HTMLElement
&& value.nodeType === 1;
};
/**
* Check if argument is a list of HTML elements.
*
* @param {Object} value
* @return {Boolean}
*/
exports.nodeList = function(value) {
var type = Object.prototype.toString.call(value);
return value !== undefined
&& (type === '[object NodeList]' || type === '[object HTMLCollection]')
&& ('length' in value)
&& (value.length === 0 || exports.node(value[0]));
};
/**
* Check if argument is a string.
*
* @param {Object} value
* @return {Boolean}
*/
exports.string = function(value) {
return typeof value === 'string'
|| value instanceof String;
};
/**
* Check if argument is a function.
*
* @param {Object} value
* @return {Boolean}
*/
exports.function = function(value) {
var type = Object.prototype.toString.call(value);
return type === '[object Function]';
};
},{}],5:[function(require,module,exports){
var is = require('./is');
var delegate = require('delegate');
/**
* Validates all params and calls the right
* listener function based on its target type.
*
* @param {String|HTMLElement|HTMLCollection|NodeList} target
* @param {String} type
* @param {Function} callback
* @return {Object}
*/
function listen(target, type, callback) {
if (!target && !type && !callback) {
throw new Error('Missing required arguments');
}
if (!is.string(type)) {
throw new TypeError('Second argument must be a String');
}
if (!is.function(callback)) {
throw new TypeError('Third argument must be a Function');
}
if (is.node(target)) {
return listenNode(target, type, callback);
}
else if (is.nodeList(target)) {
return listenNodeList(target, type, callback);
}
else if (is.string(target)) {
return listenSelector(target, type, callback);
}
else {
throw new TypeError('First argument must be a String, HTMLElement, HTMLCollection, or NodeList');
}
}
/**
* Adds an event listener to a HTML element
* and returns a remove listener function.
*
* @param {HTMLElement} node
* @param {String} type
* @param {Function} callback
* @return {Object}
*/
function listenNode(node, type, callback) {
node.addEventListener(type, callback);
return {
destroy: function() {
node.removeEventListener(type, callback);
}
}
}
/**
* Add an event listener to a list of HTML elements
* and returns a remove listener function.
*
* @param {NodeList|HTMLCollection} nodeList
* @param {String} type
* @param {Function} callback
* @return {Object}
*/
function listenNodeList(nodeList, type, callback) {
Array.prototype.forEach.call(nodeList, function(node) {
node.addEventListener(type, callback);
});
return {
destroy: function() {
Array.prototype.forEach.call(nodeList, function(node) {
node.removeEventListener(type, callback);
});
}
}
}
/**
* Add an event listener to a selector
* and returns a remove listener function.
*
* @param {String} selector
* @param {String} type
* @param {Function} callback
* @return {Object}
*/
function listenSelector(selector, type, callback) {
return delegate(document.body, selector, type, callback);
}
module.exports = listen;
},{"./is":4,"delegate":3}],6:[function(require,module,exports){
function select(element) {
var selectedText;
if (element.nodeName === 'INPUT' || element.nodeName === 'TEXTAREA') {
element.focus();
element.setSelectionRange(0, element.value.length);
selectedText = element.value;
}
else {
if (element.hasAttribute('contenteditable')) {
element.focus();
}
var selection = window.getSelection();
var range = document.createRange();
range.selectNodeContents(element);
selection.removeAllRanges();
selection.addRange(range);
selectedText = selection.toString();
}
return selectedText;
}
module.exports = select;
},{}],7:[function(require,module,exports){
function E () {
// Keep this empty so it's easier to inherit from
// (via https://github.com/lipsmack from https://github.com/scottcorgan/tiny-emitter/issues/3)
}
E.prototype = {
on: function (name, callback, ctx) {
var e = this.e || (this.e = {});
(e[name] || (e[name] = [])).push({
fn: callback,
ctx: ctx
});
return this;
},
once: function (name, callback, ctx) {
var self = this;
function listener () {
self.off(name, listener);
callback.apply(ctx, arguments);
};
listener._ = callback
return this.on(name, listener, ctx);
},
emit: function (name) {
var data = [].slice.call(arguments, 1);
var evtArr = ((this.e || (this.e = {}))[name] || []).slice();
var i = 0;
var len = evtArr.length;
for (i; i < len; i++) {
evtArr[i].fn.apply(evtArr[i].ctx, data);
}
return this;
},
off: function (name, callback) {
var e = this.e || (this.e = {});
var evts = e[name];
var liveEvents = [];
if (evts && callback) {
for (var i = 0, len = evts.length; i < len; i++) {
if (evts[i].fn !== callback && evts[i].fn._ !== callback)
liveEvents.push(evts[i]);
}
}
// Remove event from queue to prevent memory leak
// Suggested by https://github.com/lazd
// Ref: https://github.com/scottcorgan/tiny-emitter/commit/c6ebfaa9bc973b33d110a84a307742b7cf94c953#commitcomment-5024910
(liveEvents.length)
? e[name] = liveEvents
: delete e[name];
return this;
}
};
module.exports = E;
},{}],8:[function(require,module,exports){
'use strict';
exports.__esModule = true;
var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }
var _select = require('select');
var _select2 = _interopRequireDefault(_select);
/**
* Inner class which performs selection from either `text` or `target`
* properties and then executes copy or cut operations.
*/
var ClipboardAction = (function () {
/**
* @param {Object} options
*/
function ClipboardAction(options) {
_classCallCheck(this, ClipboardAction);
this.resolveOptions(options);
this.initSelection();
}
/**
* Defines base properties passed from constructor.
* @param {Object} options
*/
ClipboardAction.prototype.resolveOptions = function resolveOptions() {
var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];
this.action = options.action;
this.emitter = options.emitter;
this.target = options.target;
this.text = options.text;
this.trigger = options.trigger;
this.selectedText = '';
};
/**
* Decides which selection strategy is going to be applied based
* on the existence of `text` and `target` properties.
*/
ClipboardAction.prototype.initSelection = function initSelection() {
if (this.text && this.target) {
throw new Error('Multiple attributes declared, use either "target" or "text"');
} else if (this.text) {
this.selectFake();
} else if (this.target) {
this.selectTarget();
} else {
throw new Error('Missing required attributes, use either "target" or "text"');
}
};
/**
* Creates a fake textarea element, sets its value from `text` property,
* and makes a selection on it.
*/
ClipboardAction.prototype.selectFake = function selectFake() {
var _this = this;
this.removeFake();
this.fakeHandler = document.body.addEventListener('click', function () {
return _this.removeFake();
});
this.fakeElem = document.createElement('textarea');
this.fakeElem.style.position = 'absolute';
this.fakeElem.style.left = '-9999px';
this.fakeElem.style.top = (window.pageYOffset || document.documentElement.scrollTop) + 'px';
this.fakeElem.setAttribute('readonly', '');
this.fakeElem.value = this.text;
document.body.appendChild(this.fakeElem);
this.selectedText = _select2['default'](this.fakeElem);
this.copyText();
};
/**
* Only removes the fake element after another click event, that way
* a user can hit `Ctrl+C` to copy because selection still exists.
*/
ClipboardAction.prototype.removeFake = function removeFake() {
if (this.fakeHandler) {
document.body.removeEventListener('click');
this.fakeHandler = null;
}
if (this.fakeElem) {
document.body.removeChild(this.fakeElem);
this.fakeElem = null;
}
};
/**
* Selects the content from element passed on `target` property.
*/
ClipboardAction.prototype.selectTarget = function selectTarget() {
this.selectedText = _select2['default'](this.target);
this.copyText();
};
/**
* Executes the copy operation based on the current selection.
*/
ClipboardAction.prototype.copyText = function copyText() {
var succeeded = undefined;
try {
succeeded = document.execCommand(this.action);
} catch (err) {
succeeded = false;
}
this.handleResult(succeeded);
};
/**
* Fires an event based on the copy operation result.
* @param {Boolean} succeeded
*/
ClipboardAction.prototype.handleResult = function handleResult(succeeded) {
if (succeeded) {
this.emitter.emit('success', {
action: this.action,
text: this.selectedText,
trigger: this.trigger,
clearSelection: this.clearSelection.bind(this)
});
} else {
this.emitter.emit('error', {
action: this.action,
trigger: this.trigger,
clearSelection: this.clearSelection.bind(this)
});
}
};
/**
* Removes current selection and focus from `target` element.
*/
ClipboardAction.prototype.clearSelection = function clearSelection() {
if (this.target) {
this.target.blur();
}
window.getSelection().removeAllRanges();
};
/**
* Sets the `action` to be performed which can be either 'copy' or 'cut'.
* @param {String} action
*/
/**
* Destroy lifecycle.
*/
ClipboardAction.prototype.destroy = function destroy() {
this.removeFake();
};
_createClass(ClipboardAction, [{
key: 'action',
set: function set() {
var action = arguments.length <= 0 || arguments[0] === undefined ? 'copy' : arguments[0];
this._action = action;
if (this._action !== 'copy' && this._action !== 'cut') {
throw new Error('Invalid "action" value, use either "copy" or "cut"');
}
},
/**
* Gets the `action` property.
* @return {String}
*/
get: function get() {
return this._action;
}
/**
* Sets the `target` property using an element
* that will be have its content copied.
* @param {Element} target
*/
}, {
key: 'target',
set: function set(target) {
if (target !== undefined) {
if (target && typeof target === 'object' && target.nodeType === 1) {
this._target = target;
} else {
throw new Error('Invalid "target" value, use a valid Element');
}
}
},
/**
* Gets the `target` property.
* @return {String|HTMLElement}
*/
get: function get() {
return this._target;
}
}]);
return ClipboardAction;
})();
exports['default'] = ClipboardAction;
module.exports = exports['default'];
},{"select":6}],9:[function(require,module,exports){
'use strict';
exports.__esModule = true;
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }
function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
var _clipboardAction = require('./clipboard-action');
var _clipboardAction2 = _interopRequireDefault(_clipboardAction);
var _tinyEmitter = require('tiny-emitter');
var _tinyEmitter2 = _interopRequireDefault(_tinyEmitter);
var _goodListener = require('good-listener');
var _goodListener2 = _interopRequireDefault(_goodListener);
/**
* Base class which takes one or more elements, adds event listeners to them,
* and instantiates a new `ClipboardAction` on each click.
*/
var Clipboard = (function (_Emitter) {
_inherits(Clipboard, _Emitter);
/**
* @param {String|HTMLElement|HTMLCollection|NodeList} trigger
* @param {Object} options
*/
function Clipboard(trigger, options) {
_classCallCheck(this, Clipboard);
_Emitter.call(this);
this.resolveOptions(options);
this.listenClick(trigger);
}
/**
* Helper function to retrieve attribute value.
* @param {String} suffix
* @param {Element} element
*/
/**
* Defines if attributes would be resolved using internal setter functions
* or custom functions that were passed in the constructor.
* @param {Object} options
*/
Clipboard.prototype.resolveOptions = function resolveOptions() {
var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];
this.action = typeof options.action === 'function' ? options.action : this.defaultAction;
this.target = typeof options.target === 'function' ? options.target : this.defaultTarget;
this.text = typeof options.text === 'function' ? options.text : this.defaultText;
};
/**
* Adds a click event listener to the passed trigger.
* @param {String|HTMLElement|HTMLCollection|NodeList} trigger
*/
Clipboard.prototype.listenClick = function listenClick(trigger) {
var _this = this;
this.listener = _goodListener2['default'](trigger, 'click', function (e) {
return _this.onClick(e);
});
};
/**
* Defines a new `ClipboardAction` on each click event.
* @param {Event} e
*/
Clipboard.prototype.onClick = function onClick(e) {
var trigger = e.delegateTarget || e.currentTarget;
if (this.clipboardAction) {
this.clipboardAction = null;
}
this.clipboardAction = new _clipboardAction2['default']({
action: this.action(trigger),
target: this.target(trigger),
text: this.text(trigger),
trigger: trigger,
emitter: this
});
};
/**
* Default `action` lookup function.
* @param {Element} trigger
*/
Clipboard.prototype.defaultAction = function defaultAction(trigger) {
return getAttributeValue('action', trigger);
};
/**
* Default `target` lookup function.
* @param {Element} trigger
*/
Clipboard.prototype.defaultTarget = function defaultTarget(trigger) {
var selector = getAttributeValue('target', trigger);
if (selector) {
return document.querySelector(selector);
}
};
/**
* Default `text` lookup function.
* @param {Element} trigger
*/
Clipboard.prototype.defaultText = function defaultText(trigger) {
return getAttributeValue('text', trigger);
};
/**
* Destroy lifecycle.
*/
Clipboard.prototype.destroy = function destroy() {
this.listener.destroy();
if (this.clipboardAction) {
this.clipboardAction.destroy();
this.clipboardAction = null;
}
};
return Clipboard;
})(_tinyEmitter2['default']);
function getAttributeValue(suffix, element) {
var attribute = 'data-clipboard-' + suffix;
if (!element.hasAttribute(attribute)) {
return;
}
return element.getAttribute(attribute);
}
exports['default'] = Clipboard;
module.exports = exports['default'];
},{"./clipboard-action":8,"good-listener":5,"tiny-emitter":7}]},{},[9])(9)
});

View File

@ -0,0 +1,841 @@
;(function () {
'use strict';
/**
* @preserve FastClick: polyfill to remove click delays on browsers with touch UIs.
*
* @codingstandard ftlabs-jsv2
* @copyright The Financial Times Limited [All Rights Reserved]
* @license MIT License (see LICENSE.txt)
*/
/*jslint browser:true, node:true*/
/*global define, Event, Node*/
/**
* Instantiate fast-clicking listeners on the specified layer.
*
* @constructor
* @param {Element} layer The layer to listen on
* @param {Object} [options={}] The options to override the defaults
*/
function FastClick(layer, options) {
var oldOnClick;
options = options || {};
/**
* Whether a click is currently being tracked.
*
* @type boolean
*/
this.trackingClick = false;
/**
* Timestamp for when click tracking started.
*
* @type number
*/
this.trackingClickStart = 0;
/**
* The element being tracked for a click.
*
* @type EventTarget
*/
this.targetElement = null;
/**
* X-coordinate of touch start event.
*
* @type number
*/
this.touchStartX = 0;
/**
* Y-coordinate of touch start event.
*
* @type number
*/
this.touchStartY = 0;
/**
* ID of the last touch, retrieved from Touch.identifier.
*
* @type number
*/
this.lastTouchIdentifier = 0;
/**
* Touchmove boundary, beyond which a click will be cancelled.
*
* @type number
*/
this.touchBoundary = options.touchBoundary || 10;
/**
* The FastClick layer.
*
* @type Element
*/
this.layer = layer;
/**
* The minimum time between tap(touchstart and touchend) events
*
* @type number
*/
this.tapDelay = options.tapDelay || 200;
/**
* The maximum time for a tap
*
* @type number
*/
this.tapTimeout = options.tapTimeout || 700;
if (FastClick.notNeeded(layer)) {
return;
}
// Some old versions of Android don't have Function.prototype.bind
function bind(method, context) {
return function() { return method.apply(context, arguments); };
}
var methods = ['onMouse', 'onClick', 'onTouchStart', 'onTouchMove', 'onTouchEnd', 'onTouchCancel'];
var context = this;
for (var i = 0, l = methods.length; i < l; i++) {
context[methods[i]] = bind(context[methods[i]], context);
}
// Set up event handlers as required
if (deviceIsAndroid) {
layer.addEventListener('mouseover', this.onMouse, true);
layer.addEventListener('mousedown', this.onMouse, true);
layer.addEventListener('mouseup', this.onMouse, true);
}
layer.addEventListener('click', this.onClick, true);
layer.addEventListener('touchstart', this.onTouchStart, false);
layer.addEventListener('touchmove', this.onTouchMove, false);
layer.addEventListener('touchend', this.onTouchEnd, false);
layer.addEventListener('touchcancel', this.onTouchCancel, false);
// Hack is required for browsers that don't support Event#stopImmediatePropagation (e.g. Android 2)
// which is how FastClick normally stops click events bubbling to callbacks registered on the FastClick
// layer when they are cancelled.
if (!Event.prototype.stopImmediatePropagation) {
layer.removeEventListener = function(type, callback, capture) {
var rmv = Node.prototype.removeEventListener;
if (type === 'click') {
rmv.call(layer, type, callback.hijacked || callback, capture);
} else {
rmv.call(layer, type, callback, capture);
}
};
layer.addEventListener = function(type, callback, capture) {
var adv = Node.prototype.addEventListener;
if (type === 'click') {
adv.call(layer, type, callback.hijacked || (callback.hijacked = function(event) {
if (!event.propagationStopped) {
callback(event);
}
}), capture);
} else {
adv.call(layer, type, callback, capture);
}
};
}
// If a handler is already declared in the element's onclick attribute, it will be fired before
// FastClick's onClick handler. Fix this by pulling out the user-defined handler function and
// adding it as listener.
if (typeof layer.onclick === 'function') {
// Android browser on at least 3.2 requires a new reference to the function in layer.onclick
// - the old one won't work if passed to addEventListener directly.
oldOnClick = layer.onclick;
layer.addEventListener('click', function(event) {
oldOnClick(event);
}, false);
layer.onclick = null;
}
}
/**
* Windows Phone 8.1 fakes user agent string to look like Android and iPhone.
*
* @type boolean
*/
var deviceIsWindowsPhone = navigator.userAgent.indexOf("Windows Phone") >= 0;
/**
* Android requires exceptions.
*
* @type boolean
*/
var deviceIsAndroid = navigator.userAgent.indexOf('Android') > 0 && !deviceIsWindowsPhone;
/**
* iOS requires exceptions.
*
* @type boolean
*/
var deviceIsIOS = /iP(ad|hone|od)/.test(navigator.userAgent) && !deviceIsWindowsPhone;
/**
* iOS 4 requires an exception for select elements.
*
* @type boolean
*/
var deviceIsIOS4 = deviceIsIOS && (/OS 4_\d(_\d)?/).test(navigator.userAgent);
/**
* iOS 6.0-7.* requires the target element to be manually derived
*
* @type boolean
*/
var deviceIsIOSWithBadTarget = deviceIsIOS && (/OS [6-7]_\d/).test(navigator.userAgent);
/**
* BlackBerry requires exceptions.
*
* @type boolean
*/
var deviceIsBlackBerry10 = navigator.userAgent.indexOf('BB10') > 0;
/**
* Determine whether a given element requires a native click.
*
* @param {EventTarget|Element} target Target DOM element
* @returns {boolean} Returns true if the element needs a native click
*/
FastClick.prototype.needsClick = function(target) {
switch (target.nodeName.toLowerCase()) {
// Don't send a synthetic click to disabled inputs (issue #62)
case 'button':
case 'select':
case 'textarea':
if (target.disabled) {
return true;
}
break;
case 'input':
// File inputs need real clicks on iOS 6 due to a browser bug (issue #68)
if ((deviceIsIOS && target.type === 'file') || target.disabled) {
return true;
}
break;
case 'label':
case 'iframe': // iOS8 homescreen apps can prevent events bubbling into frames
case 'video':
return true;
}
return (/\bneedsclick\b/).test(target.className);
};
/**
* Determine whether a given element requires a call to focus to simulate click into element.
*
* @param {EventTarget|Element} target Target DOM element
* @returns {boolean} Returns true if the element requires a call to focus to simulate native click.
*/
FastClick.prototype.needsFocus = function(target) {
switch (target.nodeName.toLowerCase()) {
case 'textarea':
return true;
case 'select':
return !deviceIsAndroid;
case 'input':
switch (target.type) {
case 'button':
case 'checkbox':
case 'file':
case 'image':
case 'radio':
case 'submit':
return false;
}
// No point in attempting to focus disabled inputs
return !target.disabled && !target.readOnly;
default:
return (/\bneedsfocus\b/).test(target.className);
}
};
/**
* Send a click event to the specified element.
*
* @param {EventTarget|Element} targetElement
* @param {Event} event
*/
FastClick.prototype.sendClick = function(targetElement, event) {
var clickEvent, touch;
// On some Android devices activeElement needs to be blurred otherwise the synthetic click will have no effect (#24)
if (document.activeElement && document.activeElement !== targetElement) {
document.activeElement.blur();
}
touch = event.changedTouches[0];
// Synthesise a click event, with an extra attribute so it can be tracked
clickEvent = document.createEvent('MouseEvents');
clickEvent.initMouseEvent(this.determineEventType(targetElement), true, true, window, 1, touch.screenX, touch.screenY, touch.clientX, touch.clientY, false, false, false, false, 0, null);
clickEvent.forwardedTouchEvent = true;
targetElement.dispatchEvent(clickEvent);
};
FastClick.prototype.determineEventType = function(targetElement) {
//Issue #159: Android Chrome Select Box does not open with a synthetic click event
if (deviceIsAndroid && targetElement.tagName.toLowerCase() === 'select') {
return 'mousedown';
}
return 'click';
};
/**
* @param {EventTarget|Element} targetElement
*/
FastClick.prototype.focus = function(targetElement) {
var length;
// Issue #160: on iOS 7, some input elements (e.g. date datetime month) throw a vague TypeError on setSelectionRange. These elements don't have an integer value for the selectionStart and selectionEnd properties, but unfortunately that can't be used for detection because accessing the properties also throws a TypeError. Just check the type instead. Filed as Apple bug #15122724.
if (deviceIsIOS && targetElement.setSelectionRange && targetElement.type.indexOf('date') !== 0 && targetElement.type !== 'time' && targetElement.type !== 'month') {
length = targetElement.value.length;
targetElement.setSelectionRange(length, length);
} else {
targetElement.focus();
}
};
/**
* Check whether the given target element is a child of a scrollable layer and if so, set a flag on it.
*
* @param {EventTarget|Element} targetElement
*/
FastClick.prototype.updateScrollParent = function(targetElement) {
var scrollParent, parentElement;
scrollParent = targetElement.fastClickScrollParent;
// Attempt to discover whether the target element is contained within a scrollable layer. Re-check if the
// target element was moved to another parent.
if (!scrollParent || !scrollParent.contains(targetElement)) {
parentElement = targetElement;
do {
if (parentElement.scrollHeight > parentElement.offsetHeight) {
scrollParent = parentElement;
targetElement.fastClickScrollParent = parentElement;
break;
}
parentElement = parentElement.parentElement;
} while (parentElement);
}
// Always update the scroll top tracker if possible.
if (scrollParent) {
scrollParent.fastClickLastScrollTop = scrollParent.scrollTop;
}
};
/**
* @param {EventTarget} targetElement
* @returns {Element|EventTarget}
*/
FastClick.prototype.getTargetElementFromEventTarget = function(eventTarget) {
// On some older browsers (notably Safari on iOS 4.1 - see issue #56) the event target may be a text node.
if (eventTarget.nodeType === Node.TEXT_NODE) {
return eventTarget.parentNode;
}
return eventTarget;
};
/**
* On touch start, record the position and scroll offset.
*
* @param {Event} event
* @returns {boolean}
*/
FastClick.prototype.onTouchStart = function(event) {
var targetElement, touch, selection;
// Ignore multiple touches, otherwise pinch-to-zoom is prevented if both fingers are on the FastClick element (issue #111).
if (event.targetTouches.length > 1) {
return true;
}
targetElement = this.getTargetElementFromEventTarget(event.target);
touch = event.targetTouches[0];
if (deviceIsIOS) {
// Only trusted events will deselect text on iOS (issue #49)
selection = window.getSelection();
if (selection.rangeCount && !selection.isCollapsed) {
return true;
}
if (!deviceIsIOS4) {
// Weird things happen on iOS when an alert or confirm dialog is opened from a click event callback (issue #23):
// when the user next taps anywhere else on the page, new touchstart and touchend events are dispatched
// with the same identifier as the touch event that previously triggered the click that triggered the alert.
// Sadly, there is an issue on iOS 4 that causes some normal touch events to have the same identifier as an
// immediately preceeding touch event (issue #52), so this fix is unavailable on that platform.
// Issue 120: touch.identifier is 0 when Chrome dev tools 'Emulate touch events' is set with an iOS device UA string,
// which causes all touch events to be ignored. As this block only applies to iOS, and iOS identifiers are always long,
// random integers, it's safe to to continue if the identifier is 0 here.
if (touch.identifier && touch.identifier === this.lastTouchIdentifier) {
event.preventDefault();
return false;
}
this.lastTouchIdentifier = touch.identifier;
// If the target element is a child of a scrollable layer (using -webkit-overflow-scrolling: touch) and:
// 1) the user does a fling scroll on the scrollable layer
// 2) the user stops the fling scroll with another tap
// then the event.target of the last 'touchend' event will be the element that was under the user's finger
// when the fling scroll was started, causing FastClick to send a click event to that layer - unless a check
// is made to ensure that a parent layer was not scrolled before sending a synthetic click (issue #42).
this.updateScrollParent(targetElement);
}
}
this.trackingClick = true;
this.trackingClickStart = event.timeStamp;
this.targetElement = targetElement;
this.touchStartX = touch.pageX;
this.touchStartY = touch.pageY;
// Prevent phantom clicks on fast double-tap (issue #36)
if ((event.timeStamp - this.lastClickTime) < this.tapDelay) {
event.preventDefault();
}
return true;
};
/**
* Based on a touchmove event object, check whether the touch has moved past a boundary since it started.
*
* @param {Event} event
* @returns {boolean}
*/
FastClick.prototype.touchHasMoved = function(event) {
var touch = event.changedTouches[0], boundary = this.touchBoundary;
if (Math.abs(touch.pageX - this.touchStartX) > boundary || Math.abs(touch.pageY - this.touchStartY) > boundary) {
return true;
}
return false;
};
/**
* Update the last position.
*
* @param {Event} event
* @returns {boolean}
*/
FastClick.prototype.onTouchMove = function(event) {
if (!this.trackingClick) {
return true;
}
// If the touch has moved, cancel the click tracking
if (this.targetElement !== this.getTargetElementFromEventTarget(event.target) || this.touchHasMoved(event)) {
this.trackingClick = false;
this.targetElement = null;
}
return true;
};
/**
* Attempt to find the labelled control for the given label element.
*
* @param {EventTarget|HTMLLabelElement} labelElement
* @returns {Element|null}
*/
FastClick.prototype.findControl = function(labelElement) {
// Fast path for newer browsers supporting the HTML5 control attribute
if (labelElement.control !== undefined) {
return labelElement.control;
}
// All browsers under test that support touch events also support the HTML5 htmlFor attribute
if (labelElement.htmlFor) {
return document.getElementById(labelElement.htmlFor);
}
// If no for attribute exists, attempt to retrieve the first labellable descendant element
// the list of which is defined here: http://www.w3.org/TR/html5/forms.html#category-label
return labelElement.querySelector('button, input:not([type=hidden]), keygen, meter, output, progress, select, textarea');
};
/**
* On touch end, determine whether to send a click event at once.
*
* @param {Event} event
* @returns {boolean}
*/
FastClick.prototype.onTouchEnd = function(event) {
var forElement, trackingClickStart, targetTagName, scrollParent, touch, targetElement = this.targetElement;
if (!this.trackingClick) {
return true;
}
// Prevent phantom clicks on fast double-tap (issue #36)
if ((event.timeStamp - this.lastClickTime) < this.tapDelay) {
this.cancelNextClick = true;
return true;
}
if ((event.timeStamp - this.trackingClickStart) > this.tapTimeout) {
return true;
}
// Reset to prevent wrong click cancel on input (issue #156).
this.cancelNextClick = false;
this.lastClickTime = event.timeStamp;
trackingClickStart = this.trackingClickStart;
this.trackingClick = false;
this.trackingClickStart = 0;
// On some iOS devices, the targetElement supplied with the event is invalid if the layer
// is performing a transition or scroll, and has to be re-detected manually. Note that
// for this to function correctly, it must be called *after* the event target is checked!
// See issue #57; also filed as rdar://13048589 .
if (deviceIsIOSWithBadTarget) {
touch = event.changedTouches[0];
// In certain cases arguments of elementFromPoint can be negative, so prevent setting targetElement to null
targetElement = document.elementFromPoint(touch.pageX - window.pageXOffset, touch.pageY - window.pageYOffset) || targetElement;
targetElement.fastClickScrollParent = this.targetElement.fastClickScrollParent;
}
targetTagName = targetElement.tagName.toLowerCase();
if (targetTagName === 'label') {
forElement = this.findControl(targetElement);
if (forElement) {
this.focus(targetElement);
if (deviceIsAndroid) {
return false;
}
targetElement = forElement;
}
} else if (this.needsFocus(targetElement)) {
// Case 1: If the touch started a while ago (best guess is 100ms based on tests for issue #36) then focus will be triggered anyway. Return early and unset the target element reference so that the subsequent click will be allowed through.
// Case 2: Without this exception for input elements tapped when the document is contained in an iframe, then any inputted text won't be visible even though the value attribute is updated as the user types (issue #37).
if ((event.timeStamp - trackingClickStart) > 100 || (deviceIsIOS && window.top !== window && targetTagName === 'input')) {
this.targetElement = null;
return false;
}
this.focus(targetElement);
this.sendClick(targetElement, event);
// Select elements need the event to go through on iOS 4, otherwise the selector menu won't open.
// Also this breaks opening selects when VoiceOver is active on iOS6, iOS7 (and possibly others)
if (!deviceIsIOS || targetTagName !== 'select') {
this.targetElement = null;
event.preventDefault();
}
return false;
}
if (deviceIsIOS && !deviceIsIOS4) {
// Don't send a synthetic click event if the target element is contained within a parent layer that was scrolled
// and this tap is being used to stop the scrolling (usually initiated by a fling - issue #42).
scrollParent = targetElement.fastClickScrollParent;
if (scrollParent && scrollParent.fastClickLastScrollTop !== scrollParent.scrollTop) {
return true;
}
}
// Prevent the actual click from going though - unless the target node is marked as requiring
// real clicks or if it is in the whitelist in which case only non-programmatic clicks are permitted.
if (!this.needsClick(targetElement)) {
event.preventDefault();
this.sendClick(targetElement, event);
}
return false;
};
/**
* On touch cancel, stop tracking the click.
*
* @returns {void}
*/
FastClick.prototype.onTouchCancel = function() {
this.trackingClick = false;
this.targetElement = null;
};
/**
* Determine mouse events which should be permitted.
*
* @param {Event} event
* @returns {boolean}
*/
FastClick.prototype.onMouse = function(event) {
// If a target element was never set (because a touch event was never fired) allow the event
if (!this.targetElement) {
return true;
}
if (event.forwardedTouchEvent) {
return true;
}
// Programmatically generated events targeting a specific element should be permitted
if (!event.cancelable) {
return true;
}
// Derive and check the target element to see whether the mouse event needs to be permitted;
// unless explicitly enabled, prevent non-touch click events from triggering actions,
// to prevent ghost/doubleclicks.
if (!this.needsClick(this.targetElement) || this.cancelNextClick) {
// Prevent any user-added listeners declared on FastClick element from being fired.
if (event.stopImmediatePropagation) {
event.stopImmediatePropagation();
} else {
// Part of the hack for browsers that don't support Event#stopImmediatePropagation (e.g. Android 2)
event.propagationStopped = true;
}
// Cancel the event
event.stopPropagation();
event.preventDefault();
return false;
}
// If the mouse event is permitted, return true for the action to go through.
return true;
};
/**
* On actual clicks, determine whether this is a touch-generated click, a click action occurring
* naturally after a delay after a touch (which needs to be cancelled to avoid duplication), or
* an actual click which should be permitted.
*
* @param {Event} event
* @returns {boolean}
*/
FastClick.prototype.onClick = function(event) {
var permitted;
// It's possible for another FastClick-like library delivered with third-party code to fire a click event before FastClick does (issue #44). In that case, set the click-tracking flag back to false and return early. This will cause onTouchEnd to return early.
if (this.trackingClick) {
this.targetElement = null;
this.trackingClick = false;
return true;
}
// Very odd behaviour on iOS (issue #18): if a submit element is present inside a form and the user hits enter in the iOS simulator or clicks the Go button on the pop-up OS keyboard the a kind of 'fake' click event will be triggered with the submit-type input element as the target.
if (event.target.type === 'submit' && event.detail === 0) {
return true;
}
permitted = this.onMouse(event);
// Only unset targetElement if the click is not permitted. This will ensure that the check for !targetElement in onMouse fails and the browser's click doesn't go through.
if (!permitted) {
this.targetElement = null;
}
// If clicks are permitted, return true for the action to go through.
return permitted;
};
/**
* Remove all FastClick's event listeners.
*
* @returns {void}
*/
FastClick.prototype.destroy = function() {
var layer = this.layer;
if (deviceIsAndroid) {
layer.removeEventListener('mouseover', this.onMouse, true);
layer.removeEventListener('mousedown', this.onMouse, true);
layer.removeEventListener('mouseup', this.onMouse, true);
}
layer.removeEventListener('click', this.onClick, true);
layer.removeEventListener('touchstart', this.onTouchStart, false);
layer.removeEventListener('touchmove', this.onTouchMove, false);
layer.removeEventListener('touchend', this.onTouchEnd, false);
layer.removeEventListener('touchcancel', this.onTouchCancel, false);
};
/**
* Check whether FastClick is needed.
*
* @param {Element} layer The layer to listen on
*/
FastClick.notNeeded = function(layer) {
var metaViewport;
var chromeVersion;
var blackberryVersion;
var firefoxVersion;
// Devices that don't support touch don't need FastClick
if (typeof window.ontouchstart === 'undefined') {
return true;
}
// Chrome version - zero for other browsers
chromeVersion = +(/Chrome\/([0-9]+)/.exec(navigator.userAgent) || [,0])[1];
if (chromeVersion) {
if (deviceIsAndroid) {
metaViewport = document.querySelector('meta[name=viewport]');
if (metaViewport) {
// Chrome on Android with user-scalable="no" doesn't need FastClick (issue #89)
if (metaViewport.content.indexOf('user-scalable=no') !== -1) {
return true;
}
// Chrome 32 and above with width=device-width or less don't need FastClick
if (chromeVersion > 31 && document.documentElement.scrollWidth <= window.outerWidth) {
return true;
}
}
// Chrome desktop doesn't need FastClick (issue #15)
} else {
return true;
}
}
if (deviceIsBlackBerry10) {
blackberryVersion = navigator.userAgent.match(/Version\/([0-9]*)\.([0-9]*)/);
// BlackBerry 10.3+ does not require Fastclick library.
// https://github.com/ftlabs/fastclick/issues/251
if (blackberryVersion[1] >= 10 && blackberryVersion[2] >= 3) {
metaViewport = document.querySelector('meta[name=viewport]');
if (metaViewport) {
// user-scalable=no eliminates click delay.
if (metaViewport.content.indexOf('user-scalable=no') !== -1) {
return true;
}
// width=device-width (or less than device-width) eliminates click delay.
if (document.documentElement.scrollWidth <= window.outerWidth) {
return true;
}
}
}
}
// IE10 with -ms-touch-action: none or manipulation, which disables double-tap-to-zoom (issue #97)
if (layer.style.msTouchAction === 'none' || layer.style.touchAction === 'manipulation') {
return true;
}
// Firefox version - zero for other browsers
firefoxVersion = +(/Firefox\/([0-9]+)/.exec(navigator.userAgent) || [,0])[1];
if (firefoxVersion >= 27) {
// Firefox 27+ does not have tap delay if the content is not zoomable - https://bugzilla.mozilla.org/show_bug.cgi?id=922896
metaViewport = document.querySelector('meta[name=viewport]');
if (metaViewport && (metaViewport.content.indexOf('user-scalable=no') !== -1 || document.documentElement.scrollWidth <= window.outerWidth)) {
return true;
}
}
// IE11: prefixed -ms-touch-action is no longer supported and it's recomended to use non-prefixed version
// http://msdn.microsoft.com/en-us/library/windows/apps/Hh767313.aspx
if (layer.style.touchAction === 'none' || layer.style.touchAction === 'manipulation') {
return true;
}
return false;
};
/**
* Factory method for creating a FastClick object
*
* @param {Element} layer The layer to listen on
* @param {Object} [options={}] The options to override the defaults
*/
FastClick.attach = function(layer, options) {
return new FastClick(layer, options);
};
if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {
// AMD. Register as an anonymous module.
define(function() {
return FastClick;
});
} else if (typeof module !== 'undefined' && module.exports) {
module.exports = FastClick.attach;
module.exports.FastClick = FastClick;
} else {
window.FastClick = FastClick;
}
}());

View File

@ -0,0 +1,249 @@
function validateEmail(email) {
var re = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
return re.test(email);
}
function zero_pad(num) {
zero = 2 - num.toString().length + 1;
return Array(+(zero > 0 && zero)).join("0") + num;
}
function format_time(seconds) {
if (isNaN(seconds)) seconds = 0;
return zero_pad(parseInt(seconds/60)) + ":" + zero_pad(parseInt(seconds%60));
}
var url_to_links_rx = /(^|[\s\n]|>)((?:https?|ftp):\/\/[\-A-Z0-9+\u0026\u2019@#\/%?=()~_|!:,.;]*[\-A-Z0-9+\u0026@#\/%=~()_|])/gi;
function urls_to_links(text) {
return text.replace(url_to_links_rx, "$1<a target='_blank' href='$2'>$2</a>");
}
// http://stackoverflow.com/questions/901115/how-can-i-get-query-string-values-in-javascript
function get_query_param(name) {
name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"),
results = regex.exec(location.search);
return results == null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));
}
// http://stackoverflow.com/questions/1349404/generate-a-string-of-5-random-characters-in-javascript
function random_string(len) {
var text = "";
var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!-_";
for (var i=0; i < len; i++) {
text += possible.charAt(Math.floor(Math.random() * possible.length));
}
return text;
}
function fixup_touches(evt) {
// convert touch events
var e = evt;
if (evt.originalEvent) e = evt.originalEvent;
evt = {
pageX: evt.pageX,
pageY: evt.pageY,
offsetX: evt.offsetX,
offsetY: evt.offsetY,
clientX: evt.clientX,
clientY: evt.clientY,
layerX: evt.layerX,
layerY: evt.layerY,
target: evt.target,
currentTarget: evt.currentTarget
};
if (e.changedTouches && e.changedTouches.length) {
evt.pageX = e.changedTouches[0].pageX;
evt.pageY = e.changedTouches[0].pageY;
} else if (e.touches && e.touches.length) {
evt.pageX = e.touches[0].pageX;
evt.pageY = e.touches[0].pageY;
}
return evt;
}
function rgb_to_hex(r, g, b) {
return ((1 << 24) + (parseInt(r) << 16) + (parseInt(g) << 8) + parseInt(b)).toString(16).slice(1);
}
function hex_to_rgba(color) {
if (!color || color == "transparent") {
return {r:0,g:0,b:0,a:0};
}
if (color.match("rgb\\(")) {
color = color.replace("rgb(","").replace(")","").split(",");
return {
r: color[0],
g: color[1],
b: color[2],
a: 255
};
}
if (color.match("rgba\\(")) {
color = color.replace("rgba(","").replace(")","").split(",");
return {
r: color[0],
g: color[1],
b: color[2],
a: color[3]*255
};
}
var r = parseInt(color.substr(1,2), 16);
var g = parseInt(color.substr(3,2), 16);
var b = parseInt(color.substr(5,2), 16);
var a = 255;
if (color.length>7) {
a = parseInt(color.substr(7,2), 16);
}
return {r:r,g:g,b:b,a:a};
}
function rgb_to_hsv () {
var rr, gg, bb,
r = arguments[0] / 255,
g = arguments[1] / 255,
b = arguments[2] / 255,
h, s,
v = Math.max(r, g, b),
diff = v - Math.min(r, g, b),
diffc = function(c) {
return (v - c) / 6 / diff + 1 / 2;
};
if (diff == 0) {
h = s = 0;
} else {
s = diff / v;
rr = diffc(r);
gg = diffc(g);
bb = diffc(b);
if (r === v) {
h = bb - gg;
} else if (g === v) {
h = (1 / 3) + rr - bb;
} else if (b === v) {
h = (2 / 3) + gg - rr;
}
if (h < 0) {
h += 1;
} else if (h > 1) {
h -= 1;
}
}
return {
h: h || 0,
s: s || 0,
v: v || 0
};
}
// values?
function hsv_to_rgb(h, s, v) {
var r, g, b, i, f, p, q, t;
if (h && s === undefined && v === undefined) {
s = h.s, v = h.v, h = h.h;
}
i = Math.floor(h * 6);
f = h * 6 - i;
p = v * (1 - s);
q = v * (1 - f * s);
t = v * (1 - (1 - f) * s);
switch (i % 6) {
case 0: r = v, g = t, b = p; break;
case 1: r = q, g = v, b = p; break;
case 2: r = p, g = v, b = t; break;
case 3: r = p, g = q, b = v; break;
case 4: r = t, g = p, b = v; break;
case 5: r = v, g = p, b = q; break;
}
return {
r: Math.round(r * 255),
g: Math.round(g * 255),
b: Math.round(b * 255)
};
}
temp_grid_canvas = document.createElement("canvas");
function render_grid(w,h,divisions) {
temp_grid_canvas.width = w;
temp_grid_canvas.height = h;
var step = w / divisions;
var ctx = temp_grid_canvas.getContext('2d');
ctx.strokeStyle = "#f0f0f0";
ctx.lineWidth = 1;
var gc1 = "rgba(60,60,60,0.125)";
var gc2 = "rgba(60,60,60,0.075)";
for (var y=0; y<h; y+=step) {
if (y==0) {
ctx.fillStyle = gc1;
} else {
ctx.fillStyle = gc2;
}
ctx.fillRect(0,y,w,1);
}
for (var x=0; x<h; x+=step) {
if (x==0) {
ctx.fillStyle = gc1;
} else {
ctx.fillStyle = gc2;
}
ctx.fillRect(x,0,1,h);
}
var data_url = temp_grid_canvas.toDataURL()
return data_url;
}
function focus_contenteditable(el, end) {
range = document.createRange();
if (!range || !el) return;
var p = $(el).find("p");
if (!p.length) return;
// get last paragraph
p = p[p.length-1];
range.selectNodeContents(p);
selection = window.getSelection();
selection.removeAllRanges();
if (range.toString()!="Text") {
// move cursor to the end
range.collapse(false);
}
selection.addRange(range);
el.focus();
}
function setup_exclusive_audio_video_playback() {
document.addEventListener('play', function(e) {
var tags = ["audio","video"];
for (var i=0; i<tags.length; i++) {
var tag = tags[i];
var players = document.getElementsByTagName(tag);
for (var i = 0, len = players.length; i < len; i++) {
if (players[i] != e.target) {
players[i].pause();
}
}
}
}, true);
}

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,133 @@
function parse_link(data) {
if (data == null) {
return "";
}
var html = data;
var recommendedWidth = 400;
var recommendedHeight = 300;
var extraViewClasses = "";
var sourceLink = null;
var plainText = false;
var genericEmbedMatcher = /embed\:(https?\:\/\/[^ <]+)/;
var genericUriMatcher = /(https?\:\/\/[^ <]+)/;
var type = "unknown";
var provider_name = "unknown";
isDataFileUrl = function(url) {
var file, suffix;
try {
if (url.split("/").length < 4) {
return false;
}
file = _.last(url.split("/"));
if (file.indexOf(".") < 0) {
return false;
}
suffix = _.last(file.split("."));
if (!suffix) {
return false;
}
if (_.include(["png", "jpg", "jpeg", "gif", "zip", "rar", "7z", "tar", "tgz", "gz", "xls", "xlsx", "doc", "docx", "ppt", "pptx", "mp3", "ogg", "oga", "ogv", "pdf", "dmg", "exe", "iso", "dxf", "ipa", "mov", "wmv", "wma", "wav", "aiff", "mp4", "m4a", "prg", "bin", "dat", "psd", "ai", "eps", "key"], suffix)) {
return true;
}
} catch (_error) {}
return false;
};
if (m = data.match(genericEmbedMatcher)) {
embedUri = m[1];
html = "<iframe width='100%' height='100%' src=\"" + embedUri + "\" seamless=\"1\" allowfullscreen=\"1\"></iframe>";
recommendedWidth = 640 / 2;
recommendedHeight = 390 / 2;
sourceLink = embedUri;
extraViewClasses = "external-embed";
} else if (data.match(/http/) && data.replace(/[^<]/g, "").length < 3) {
youtubeMatcher = /youtube\.com\/.*v=([^&<]+)/;
youtubeMatcher2 = /youtu\.be\/([^&<]+)/;
soundcloudMatcher = /soundcloud\.com\/([^<]+)/;
vimeoMatcher = /vimeo.com\/([^<]*)/;
dailyMotionMatcher = /dailymotion.com\/video\/([^<]*)/;
googleMapsMatcher = /google.com\/maps\?([^<]*)/;
spacedeckMatcher = new RegExp(location.host + "\/(spaces|folders)\/([0-9a-f]{24})");
if (m = data.match(youtubeMatcher) || (m = data.match(youtubeMatcher2))) {
videoId = m[1];
html = "<iframe src=\"https://www.youtube.com/embed/" + videoId + "?html5=1&rel=0&showinfo=0&autohide=1\" frameborder=\"0\" allowfullscreen=\"1\"></iframe>";
recommendedWidth = 640 / 2;
recommendedHeight = 390 / 2;
provider_name = "youtube";
type = "video";
} else if (m = data.match(dailyMotionMatcher)) {
videoId = m[1];
html = "<iframe src=\"https://www.dailymotion.com/embed/video/" + videoId + "\" frameborder=\"0\"></iframe>";
recommendedWidth = 536 / 2;
recommendedHeight = 302 / 2;
provider_name = "dailymotion";
type = "video";
} else if (m = data.match(vimeoMatcher)) {
videoId = m[1];
html = "<iframe src=\"https://player.vimeo.com/video/" + videoId + "\" frameborder=\"0\"></iframe>";
recommendedWidth = 536 / 2;
recommendedHeight = 302 / 2;
provider_name = "vimeo";
type = "video";
} else if (m = data.match(soundcloudMatcher)) {
var scurl = "https://" + m[0];
var url;
if (m[0].indexOf("soundcloud.com/player")>=0) {
url = "https://w." + m[0];
} else {
url = "https://w.soundcloud.com/player/?url="+encodeURI(scurl);
}
html = "<iframe scrolling=\"no\" frameborder=\"no\" src=\"" + url + "\"></iframe>";
recommendedWidth = 720 / 2;
recommendedHeight = 184;
sourceLink = scurl;
provider_name = "soundcloud";
type = "audio";
} else if ((m = data.match(googleMapsMatcher))) {
mapsParams = m[1];
html = "<iframe src=\"https://maps-api-ssl.google.com/maps?" + mapsParams + "\" seamless=\"1\" allowfullscreen=\"1\"></iframe>";
recommendedWidth = 640 / 2;
recommendedHeight = 390 / 2;
provider_name = "google";
type = "map";
} else if ((m = data.match(genericUriMatcher)) && !isDataFileUrl(m[1])) {
uri = m[1];
grabUri = uri;
endPoint = "/api/webgrabber/" + (encodeURIComponent(btoa(grabUri)));
html = data.replace(uri, " <img src=\"" + endPoint + "\" title=\"" + uri + "\"/> ");
recommendedWidth = 300;
recommendedHeight = 300;
sourceLink = uri;
} else {
plainText = true;
}
} else {
plainText = true;
}
if (plainText) {
// replace links with clickable links
return null;
}
result = {
html: html,
thumbnail_width: recommendedWidth,
thumbnail_height: recommendedHeight,
type: type,
provider_name: provider_name,
url: sourceLink
};
return result;
};

View File

@ -0,0 +1,946 @@
window.locales = {};
window.locales.en = {};
window.locales.de = {};
window.locales.fr = {};
window.locales.en.translation =
{
"ok": "OK",
"cancel": "Cancel",
"close": "Close",
"open": "Open",
"folder": "Folder",
"save": "Save",
"saved": "Saved",
"created": "created",
"duplicate": "Duplicate",
"delete": "Delete",
"remove": "Remove",
"set": "set",
"reset": "reset",
"thanks": "Thanks",
"share": "Share",
"signup": "Sign Up",
"login": "Log in",
"logout": "Log out",
"email": "Email Address",
"password": "Password",
"width": "Width",
"height": "Height",
"nick": "Name",
"role": "Role",
"members": "Members",
"actions": "Actions",
"or": "or",
"you": "you",
"via": "via",
"by": "by",
"zero": "Zero",
"page": "Page",
"new": "New",
"copy": "Copy",
"home": "Home",
"owner": "Owner",
"space": "Space",
"second": "Second",
"not_found": "Not Found.",
"untitled_space": "Untitled Space",
"untitled_folder": "Untitled Folder",
"untitled": "untitled",
"sure": "Are you sure?",
"specify": "Please Specify",
"confirm": "Please Confirm",
"signup_google": "Sign In with Google",
"error_unknown_email": "This email/password combination is unknown. Try login with Google.",
"error_password_confirmation": "The entered passwords don't match.",
"error_domain_blocked": "Your domain is blocked.",
"error_user_email_already_used": "This email address is already in use.",
"support": "Spacedeck Support",
"offline": "Offline. Click for more.",
"error": "Sorry, but something went wrong. Please contact support@spacedeck.com",
"welcome": "Welcome",
"claim": "Your digital Whiteboard.",
"trynow": "Try now.",
"about": "About us",
"terms": "Terms",
"contact": "Contact",
"privacy": "Privacy",
"business_adress": "Business Adress",
"post_adress": "Post Adress",
"phone": "Phone",
"ceo": "Managing Director",
"name": "Name",
"confirm_subject": "Spacedeck Email Confirmation",
"confirm_body": "Thank you for signing up at Spacedeck.\nPlease click on the following link to confirm your email address.\n",
"confirm_action": "Confirm Now",
"team_invite_membership_subject": "Team Invitation for %s",
"team_invite_membership_body": "You have been invited to %s on Spacedeck. Please click on the following link to accept the invitation.",
"team_invite_user_body": "You have been invited to %s on Spacedeck.\nYour temporary password is \"%s\".\nPlease click on the following link to accept the invitation.",
"team_invite_admin_body": "%s was invited for your team: %s. The temporary password is \"%s\".",
"team_invite_membership_acction": "Accept",
"team_new_member_subject": "New Team Member for %s signed up",
"team_new_member_body": "%s just joined Team %s on Spacedeck.",
"space_invite_membership_subject": "%s invited you to a Space %s ",
"space_invite_membership_body": "You have been invited by %s to join a Space %s on Spacedeck. Please click on the following link to accept the invitation.",
"space_invite_membership_action": "Accept",
"folder_invite_membership_subject": "Space",
"folder_invite_membership_body": "You have been invited to a Team on Spacedeck. Please click on the following link to accept the invitation.",
"folder_invite_membership_acction": "Accept",
"login_google": "Login With Google",
"save_changes": "Save Changes",
"upgrade": "Upgrade",
"upgrade_now": "Upgrade Now",
"create_space": "Create Space",
"create_folder": "Create Folder",
"email_unconfirmed": "Email Unconfirmed",
"confirmation_sent": "Email Sent",
"folder_filter": "Filter",
"sort_by": "Sort by",
"last_modified": "Last Modified",
"last_opened": "Last Opened",
"title": "Title",
"edit_team": "Edit Team",
"edit_account": "Edit Account",
"log_out": "Log Out",
"no_spaces_yet": "Welcome! You can create Spaces and Folders here using the buttons in the top left corner.",
"new_folder_title": "New title for folder",
"folder_settings": "Folder Settings",
"upload_cover_image": "Upload Cover Image",
"spacedeck_pro_ad_folders": "With Spacedeck Pro, you can organize an unlimited amount of Spaces in Folders and manage access controls for each Folder. Would you like to learn more about Pro features?",
"spacedeck_pro_ad_versions": "With Spacedeck Pro, you can save unlimited versions of each Space to track your progress or keep snapshots safe. Would you like to learn more about Pro features?",
"spacedeck_pro_ad_pdf": "With Spacedeck Pro, you can export your Spaces as crisp PDFs for archiving, mailing around, or printing. Do you want to learn more about Pro features?",
"spacedeck_pro_ad_zip": "With Spacedeck Pro, you can export the contents of a Space as a ZIP package. Do you want to learn more about Pro features?",
"spacedeck_pro_ad_colors": "With Spacedeck Pro, you can mix your own colors using a professional color picker.",
"profile_caption": "Profile",
"upload_avatar": "Upload Avatar",
"uploading_avatar": "Uploading Avatar…",
"avatar_dimensions": "Recommended dimensions: 200×200 pixels.",
"profile_name": "Name",
"profile_email": "Email Address",
"send_again": "Send Again",
"confirmation_sent_long": "Email confirmation link sent. Please check your inbox.",
"confirmation_sent_another": "Another confirmation link sent.",
"confirmation_sent_dialog_text": "We sent you an email explaining how to confirm your email address.",
"payment_caption": "Payment",
"language_caption": "Language",
"notifications_caption": "Notifications",
"notifications_option_chat": "Inform me via email about new comments",
"notifications_option_spaces": "Send me a daily digest of what happened in my Spaces and Folders",
"password_caption": "Password",
"current_password": "Current Password",
"new_password": "New Password",
"verify_password": "Verify Password",
"change_password": "Change Password",
"reset_password": "Reset Password",
"terminate_caption": "Delete Account",
"terminate_warning": "If you delete your account, all Spaces, Folders and Messages including all content you and other people created in your Spaces will be destroyed.",
"terminate_warning2": "This cannot be undone.",
"terminate_reason": "Message",
"terminate_reason_caption": "Help us improve by sharing your reasons for cancelling.",
"terminate_terminate": "Terminate",
"space_blank1": "Welcome to a fresh new Space!",
"space_blank2": "Drop files, paste links",
"space_blank3": "or use the tools below",
"space_blank4": "to fill this Space with content.",
"draft": "Draft",
"publish": "Publish",
"published": "Published",
"save_version": "Save Version",
"version_saved": "Version Saved",
"post": "Post Message",
"chat_invite_cta1": "Collaboration is fun!",
"chat_invite_cta2": "Why not ",
"chat_invite_cta3": "invite some people",
"chat_invite_cta4": "to work with you?",
"chat_message_placeholder": "Write your message…",
"view": "View",
"edit": "Edit",
"present": "Present",
"chat": "Chat",
"meta": "Meta",
"tool_search": "Search",
"tool_upload": "Upload",
"tool_text": "Text",
"tool_shape": "Shape",
"tool_zones": "Zones",
"tool_canvas": "Canvas",
"search_media": "Search media…",
"type_here": "Type here",
"text_formats": "Formats",
"format_p": "Paragraph",
"format_bullets": "Bullet List",
"format_numbers": "Numbered List",
"format_h1": "Headline 1",
"format_h2": "Headline 2",
"format_h3": "Headline 3",
"font_size": "Font Size",
"line_height": "Line Height",
"tool_align": "Align",
"tool_styles": "Styles",
"tool_bullets": "Bullets",
"tool_numbers": "Numbers",
"color_fill": "Fill",
"color_stroke": "Stroke",
"color_text": "Text",
"tool_type": "Type",
"tool_box": "Box",
"tool_link": "Link",
"tool_layout": "Layout",
"tool_options": "Options",
"tool_stroke": "Stroke",
"tool_delete": "Delete",
"tool_lock": "Lock",
"tool_copy": "Copy",
"stack": "Stack",
"tool_circle": "Circle",
"tool_hexagon": "Hexagon",
"tool_square": "Square",
"tool_diamond": "Diamond",
"tool_bubble": "Bubble",
"tool_cloud": "Cloud",
"tool_burst": "Burst",
"tool_star": "Star",
"tool_heart": "Heart",
"tool_scribble": "Scribble",
"tool_line": "Line",
"tool_arrow": "Arrow",
"search_media_placeholder": "Search web media…",
"add_zone": "New Zone",
"palette": "Palette",
"picker": "Picker",
"background_image_caption": "Image",
"background_color_caption": "Color",
"upload_background_caption": "Click to upload a background image",
"upload_background": "Upload Background",
"access_caption": "Access",
"versions_caption": "Versions",
"info_caption": "Info",
"mode_private": "Private: Only members can view or edit",
"mode_public": "Public: Anyone with the link can view",
"invite_collaborators": "Invite Collaborators",
"revoke_access": "Revoke Access",
"invite": "Send Invitations",
"invitee_email_address": "Email address of new member",
"optional_message": "Optional message",
"role_viewer": "Viewer",
"role_editor": "Editor",
"role_admin": "Admin",
"new_space_title": "New title for Space",
"team": "Team",
"search": "Search",
"search_no_results": "search_no_results",
"search_clear": "search_clear",
"rename": "Rename",
"mobile": "mobile",
"image": "image",
"tool_filter": "filter",
"canel": "canel",
"invite_membership_action": "invite_membership_action",
"viewer": "viewer",
"editor": "editor",
"admin": "admin",
"logging_in": "logging in",
"password_confirmation": "Password Confirmation",
"confirm_again": "We sent you an email explaining how to confirm your email address.",
"confirmed": "Your Account was confirmed successfully. Thank you.",
"signing_up": "Signing up",
"password_check_inbox": "Please check your inbox",
"new_space": "New Space",
"tool_more": "More",
"what_is_your_name": "Welcome to %s! Please choose a username.",
"lang": "en",
"landing_title": "Your Whiteboard on the Web.",
"landing_claim": "Spacedeck lets you easily combine all kinds of media on virtual whiteboards: Text notes, photos, web links, even videos and audio recordings. ",
"landing_example": "People use Spacedeck to organize their ideas, in teams to see whole projects at a glance, or in schools and universities for richer, connected learning experiences.",
"spaces": "My Spaces",
"access_editor_link": "Instant Edit Link",
"access_editor_link_desc": "Give this link to anyone who should be able to instantly edit this Space, no account required: ",
"access_anonymous_edit_blocking": "Anonymous Editors may only change their own items",
"access_current_members": "Current Members",
"access_new_members": "Invite New Members",
"access_no_members": "Members of this Space will show up here.",
"comments": "comments",
"landing_customers": "Trusted by Thousands.",
"landing_features_title": "A Breeze To Use.",
"landing_features_text": "The new Spacedeck 5 has a streamlined, beautiful user interface that makes your work easier and more fun than ever before while giving you even more powerful features:",
"landing_features_1": "<b>Drag & drop</b> images, videos and audio from your computer or the web",
"landing_features_2": "<b>Write and format tex</b>t with full control over fonts, colors and style",
"landing_features_3": "<b>Draw, annotate and highlight</b> with included graphical shapes",
"landing_features_4": "Turn your board into a <b>zooming presentation</b>",
"landing_features_5": "<b>Collaborate and chat</b> in realtime with teammates, students or friends.",
"landing_features_6": "<b>Share Spaces</b> on the web or via email",
"landing_features_7": "<b>Export your work</b> as printable PDF or ZIP",
"landing_pricing": "Incredibly Affordable.",
"landing_pricing_lite": "Free/Personal Use",
"landing_pricing_lite_text": "The basic, well-rounded version for collecting pictures and keeping notes.",
"landing_pricing_pro_features_list": "<ul><li>Unlimited Spaces</li><li>Folder Structures</li><li>PDF and ZIP Export</li><li>No Watermarks</li><li>Custom Backgrounds</li><li>Activity History</li><li>20 GB Storage</li><ul>",
"landing_pricing_pro": "€4,90/User/Mo. <br><small>or 49,90/User/Year</small>",
"landing_pricing_pro_text": "Turbocharged with all the power you expect.",
"landing_pricing_pro_features": "Turbocharged with all the power you expect.",
"welcome_subject": "Welcome to Spacedeck",
"welcome_body": "Hello!\nThank you for signing up at Spacedeck.<br>We hope you will enjoy working in Spaces.<br>Remember, your account includes unlimited collaborators. Feel free to share your Spaces with friends and colleagues all over the world.",
"invite_emails": "Email addresses (Comma separated)",
"history_recently_updated": "Recently Updated",
"history_recently_empty": "Nothing has happened yet.",
"parent_folder": "parent_folder",
"created_by": "Created by",
"last_updated": "Last updated",
"feedback_sent": "Thanks for your feedback!",
"role_member": "Member",
"team_invite_membership_action": "Accept invitation",
"space_message_subject": "New Message in Space %s",
"space_message_body": "%s wrote in %s: \n",
"pro_ad_history_headline": "When you upgrade to Spacedeck Pro, you will see a history of recent updates across all your (shared) Spaces here.",
"password_reset_subject": "Reset Password for Spacedeck",
"password_reset_body": "You requested a reset of your Spacedeck password.\nPlease click on the following link to set a new password.",
"password_reset_action": "Reset Now",
"was_offline": "The connection to Spacedeck was interrupted. If you have unsaved work, please keep this browser tab open until the connection is re-established, then touch the unsaved objects again.",
"subscription_failed_user_subject": "Problem with your Spacedeck Payment",
"subscription_failed_user_body": "Unfortunately, we could not process your Payment-method. You can easly create a new payment method including PayPal in your account settings.",
"subscription_failed_team_subject": "Problem with your Spacedeck Payment",
"subscription_failed_team_body": "Unfortunately, we could not process your Payment-method for your Team-Account. Please fix your payment method asap.",
"team_name": "Team Name",
"subdomain": "Subdomain",
"team_adresses": "Email adresses",
"add": "add",
"invited": "invited",
"duplicate_destination": "Into which folder do you want to duplicate this Space?",
"duplicate_confirm": "Duplicate %s into %s?",
"duplicate_success": "%s was duplicated into %s.",
"goto_space": "Go to Space %s",
"goto_folder": "Go to Folder %s",
"stay_here": "Stay here",
"sharing": "sharing",
"list": "Export List",
"link": "link",
"download_space": "Download Space",
"type": "Type",
"download": "download",
"Previous Zone": "Previous Zone",
"Next Zone": "Next Zone",
"promote": "promote",
"demote": "demote"
}
window.locales.de.translation =
{
"lang": "de",
"ok": "OK",
"cancel": "Abbrechen",
"close": "Schließen",
"open": "Öffnen",
"folder": "Ordner",
"duplicate": "Duplizieren",
"save": "Speichern",
"saved": "Gespeichert",
"created": "Erstellt",
"delete": "Löschen",
"remove": "Entfernen",
"set": "Übernehmen",
"reset": "Zurücksetzen",
"thanks": "Danke",
"share": "Teilen",
"signup": "Registrieren",
"login": "Anmelden",
"logout": "Abmelden",
"email": "E-Mail-Adresse",
"password": "Passwort",
"width": "Breite",
"height": "Höhe",
"nick": "Benutzername",
"role": "Rolle",
"members": "Mitglieder",
"actions": "Aktionen",
"or": "oder",
"you": "du",
"via": "via",
"by": "von",
"new": "Neu",
"zero": "Null",
"page": "Seite",
"copy": "Kopie",
"home": "Übersicht",
"owner": "Besitzer",
"space": "Space",
"second": "Sekunde",
"not_found": "Nicht Gefunden.",
"untitled_space": "Unbenannter Space",
"untitled_folder": "Unbenannter Order",
"untitled": "Unbenannter",
"sure": "Bist du sicher?",
"specify": "Bitte spezifiziere",
"confirm": "Bitte bestätige",
"signup_google": "Mit Google anmelden",
"error_unknown_email": "Unbekannte Kombination von Email und Passwort. Oder versuche dich mit Google anzumelden.",
"error_password_confirmation": "Die beiden Passwörter stimmen nicht überein.",
"error_domain_blocked": "Diese Domain ist gesperrt.",
"error_user_email_already_used": "Diese Email-Adresse ist bereits registriert.",
"support": "Spacedeck-Support",
"offline": "Verbindungsverlust. Mehr Infos hier.",
"error": "Entschuldigung, etwas ist schiefgegangen. Bitte kontaktiere support@spacedeck.com",
"welcome": "Willkommen",
"claim": "Dein digitales Whiteboard.",
"trynow": "Jetzt probieren.",
"about": "Über uns",
"terms": "AGBs",
"contact": "Kontakt",
"privacy": "Privatsphäre",
"post_adress": "Postadresse",
"phone": "Phone",
"business_address": "business_address",
"ceo": "Geschäftsführer",
"business_adress": "business_adress",
"title": "Titel",
"name": "Name",
"confirm_subject": "E-Mail Bestätigung für Spacedeck",
"confirm_body": "Danke, dass du dich bei Spacedeck angemeldet hast.\nBitte klicke auf den folgenden Link, um deine E-Mail Adresse zu bestätigen.\n ",
"confirm_action": "E-Mail Bestätigen",
"team_invite_membership_subject": "Einladung zu %s auf Spacedeck",
"team_invite_membership_body": "Du wurdest zu %s auf Spacedeck eingeladen. \n Bitte klicke auf den folgenden Link, um die Einladung anzunehmen.",
"team_invite_user_body": "Du wurdest zu %s auf Spacedeck eingeladen. Dein temporäres Passwort ist \"%s\".\n Bitte klicke auf den folgenden Link, um die Einladung anzunehmen.",
"team_invite_admin_body": " %s wurde zu %s auf Spacedeck eingeladen. Das temporäres Passwort ist \"%s\".",
"team_invite_membership_action": "Annehmen",
"team_new_member_subject": "Neues Team Mitglied",
"team_new_member_body": "%s hat gerade seine Einladung zum Team %s angenommen.",
"space_invite_membership_subject": "Einladung von %s in Space %s",
"space_invite_membership_body": "Du wurdest von %s in den Space '%s' eingeladen.\nBitte klicke auf den folgenden Link um die Einladung anzunehmen.",
"space_invite_membership_action": "Annehmen",
"folder_invite_membership_subject": "Einladung von %s in Ordner %s",
"folder_invite_membership_body": "Du wurdest von %s in den Space '%s' eingeladen.\nBitte klicke auf den folgenden Link um die Einladung anzunehmen.",
"folder_invite_membership_action": "Accept",
"upgrade": "Upgrade",
"upgrade_now": "Jetzt Upgraden",
"create_space": "Space Erstellen",
"create_folder": "Ordner Erstellen",
"email_unconfirmed": "Email Unbestätigt",
"confirmation_sent": "Email Versandt",
"folder_filter": "Filter",
"sort_by": "Reihenfolge",
"last_modified": "Zuletzt Geändert",
"last_opened": "Zuletzt Geöffnet",
"edit_team": "Team Verwalten",
"edit_account": "Konto Bearbeiten",
"log_out": "Abmelden",
"no_spaces_yet": "Du hast noch keine Spaces erstellt.",
"new_folder_title": "Neuer Titel für Ordner",
"folder_settings": "Ordner-Einstellungen",
"upload_cover_image": "Ordnerbild Hochladen",
"spacedeck_pro_ad_folders": "Mit Spacedeck Pro kannst du beliebig viele Spaces in Ordnerstrukturen organisieren und für jeden Ordner Zugriffsrechte regeln. Möchtest du mehr über die Pro-Version erfahren?",
"spacedeck_pro_ad_versions": "Mit Spacedeck Pro kannst du beliebig viele Versionen deines Spaces festhalten und später die Entwicklungsgeschichte nachvollziehen. Möchtest du mehr über die Pro-Version erfahren?",
"spacedeck_pro_ad_pdf": "Mit Spacedeck Pro kannst du Spaces und sogar ganze Ordner als druckreife PDFs exportieren oder per Mail versenden. Möchtest du mehr über die Pro-Version erfahren?",
"spacedeck_pro_ad_zip": "Mit Spacedeck Pro kannst du die Inhalte deiner Spaces jederzeit als ZIP-Paket exportieren. Möchtest du mehr über die Pro-Version erfahren?",
"spacedeck_pro_ad_colors": "Spacedeck Pro enthält einen Profi-Farbmischer, mit dem du deine eigenen Farben mischen kannst.",
"profile_caption": "Profil",
"upload_avatar": "Profilbild Hochladen",
"uploading_avatar": "Profilbild wird hochgeladen…",
"avatar_dimensions": "Bestes Format: 200×200 Pixel.",
"profile_name": "Name",
"profile_email": "Email-Adresse",
"send_again": "Erneut Senden",
"confirmation_sent_long": "Email-Bestätigungslink versandt. Bitte überprüfe deine Mails.",
"confirmation_sent_another": "Wir haben eine weiteren Bestätigungslink versandt.",
"confirmation_sent_dialog_text": "Wir haben dir eine Email geschickt, die erklärt, wie das mit der Bestätigung läuft.",
"payment_caption": "Bezahlung",
"language_caption": "Sprache",
"notifications_caption": "Emails",
"notifications_option_chat": "Haltet mich über neue Kommentare auf dem Laufenden.",
"notifications_option_spaces": "Schickt mir täglich eine Zusammenfassung über Änderungen an meinen Spaces und Ordnern.",
"password_caption": "Passwort",
"current_password": "Altes Passwort",
"new_password": "Neues Passwort",
"verify_password": "Zur Sicherheit nochmal",
"change_password": "Passwort Ändern",
"reset_password": "Passwort Zurücksetzen",
"terminate_caption": "Kündigen",
"terminate_warning": "Wenn du kündigst, werden all deine Spaces, Ordner und Nachrichten und alle ihre Inhalte gelöscht.",
"terminate_warning2": "Das kann man nicht rückgängig machen.",
"terminate_reason": "Kündigungsgrund",
"terminate_reason_caption": "Wenn du uns mitteilst, was dich gestört hat, hilft uns das dabei ein besseres Produkt zu machen.",
"terminate_terminate": "Wirklich Kündigen",
"space_blank1": "Dies ist dein brandneuer, leerer Space!",
"space_blank2": "Wirf Dateien rein, paste Web-Links",
"space_blank3": "oder nutz die Werkzeuge da unten.",
"space_blank4": "Sei kreativ und tob dich aus!",
"draft": "Entwurf",
"publish": "Veröffentlichen",
"published": "Veröffentlicht",
"save_version": "Version Speichern",
"version_saved": "Version Gespeichert",
"post": "Abschicken",
"chat_invite_cta1": "Zusammen arbeiten macht Spaß!",
"chat_invite_cta2": "Warum ",
"chat_invite_cta3": "lädst du nicht ein paar Leute ein",
"chat_invite_cta4": "mit denen du dann zusammen arbeiten kannst?",
"chat_message_placeholder": "Schreib hier deine Nachricht…",
"view": "Ansicht",
"edit": "Bearb.",
"present": "Präse.",
"chat": "Chat",
"meta": "Teilen",
"tool_search": "Suche",
"tool_upload": "Upload",
"tool_text": "Text",
"tool_shape": "Grafik",
"tool_zones": "Zonen",
"tool_canvas": "Wand",
"search_media": "Medien im Web suchen…",
"type_here": "Hier was eingeben",
"text_formats": "Formate",
"format_p": "Absatz",
"format_bullets": "Bullet-Liste",
"format_numbers": "Nummerierte Liste",
"format_h1": "Überschrift 1",
"format_h2": "Überschrift 2",
"format_h3": "Überschrift 3",
"font_size": "Schriftgröße",
"line_height": "Zeilenhöhe",
"tool_align": "Bund",
"tool_styles": "Stil",
"tool_bullets": "Bullets",
"tool_numbers": "Zahlen",
"color_fill": "Füllung",
"color_stroke": "Strich",
"color_text": "Text",
"tool_type": "Typo",
"tool_box": "Box",
"tool_link": "Link",
"tool_layout": "Layout",
"tool_options": "Mehr",
"tool_stroke": "Strich",
"tool_delete": "Löschen",
"tool_lock": "Sperren",
"tool_copy": "Kopie",
"stack": "Anordnung",
"tool_circle": "Kreis",
"tool_hexagon": "Sechseck",
"tool_square": "Quadrat",
"tool_diamond": "Diamant",
"tool_bubble": "Blase",
"tool_cloud": "Wolke",
"tool_burst": "Burst",
"tool_star": "Stern",
"tool_heart": "Herz",
"tool_scribble": "Kritzeln",
"tool_line": "Linie",
"tool_arrow": "Pfeil",
"search_media_placeholder": "Online-Medien suchen…",
"add_zone": "Neue Zone",
"palette": "Palette",
"picker": "Mischen",
"background_image_caption": "Bild",
"background_color_caption": "Farbe",
"upload_background_caption": "Klicke hier, um ein Hintergrundbild hochzuladen.",
"upload_background": "Hintergrund Hochladen",
"access_caption": "Zugriff",
"versions_caption": "Versionen",
"info_caption": "Info",
"mode_private": "Privat: Nur Mitglieder können zugreifen",
"mode_public": "Öffentlich: Jede(r) mit Kenntnis des Links darf reinschauen",
"invite_collaborators": "Mitarbeiter Einladen",
"invitee_email_address": "Email-Adresse des neuen Mitglieds",
"optional_message": "Optionale Nachricht",
"revoke_access": "Zugriff Entfernen",
"invite": "Einladen",
"role_viewer": "Betrachter",
"role_editor": "Bearbeiter",
"role_admin": "Admin",
"new_space_title": "Neuer Titel für Space",
"logging_in": "logging_in",
"password_confirmation": "Passwort Wiederholung",
"confirm_again": "In deinem Postfach solltest du eine Bestätigungsmail finden. Bitte klicke auf den Link darin.",
"confirmed": "E-Mail Adresse wurde erfolgreich bestätigt. Danke!",
"password_check_inbox": "password_check_inbox",
"viewer": "Zuschauer",
"editor": "Bearbeiter",
"admin": "Admin",
"mobile": "Mobil",
"image": "Bild",
"tool_filter": "Filter",
"team": "Team",
"search": "Suche",
"search_no_results": "Keine Resultate",
"search_clear": "Zurücksetzen",
"rename": "Umbennen",
"login_google": "Mit Google anmelden",
"save_changes": "Änderungen speichern",
"what_is_your_name": "Willkommen bei %s ! Bitte wähle einen Benutzernamen.",
"landing_title": "Dein Online-Whiteboard.",
"landing_claim": "Mit Spacedeck kannst du multimedial auf virtuellen Whiteboards im Internet zusammenarbeiten: Kombiniere Texte, Fotos, Websites oder sogar Videos und Sounds. ",
"landing_example": "Spacedeck ist ideal, um Ideen zu visualisieren, in kreativen Teams Projekte zu überblicken oder um den Unterricht in Schulen und Universitäten interaktiv zu gestalten.",
"spaces": "Meine Spaces",
"access_editor_link": "Sofort-Mitmachen-Link",
"access_editor_link_desc": "Mit diesem Link kann man sogar ohne Spacedeck-Account sofort mitarbeiten. Praktisch!",
"access_anonymous_edit_blocking": "Anonyme Mitarbeiter dürfen keine Daten anderer anonymer Mitarbeiter ändern.",
"access_current_members": "Aktuelle Mitarbeiter",
"access_new_members": "Neue Mitarbeiter einladen",
"landing_customers": "Tausende Anwender weltweit vertrauen uns.",
"landing_features_title": "Schneller zum Ergebnis.",
"landing_features_text": "Spacedeck 5 hat eine brandneue Benutzeroberfläche, die das Arbeiten einfacher und intuitiver und macht - gleichzeitig aber auch mehr mächtige Werkzeuge bereitstellt.",
"landing_features_1": "<b>Drag & Drop:</b> Bilder-, Video- und Ton-Dateien direkt vom Desktop oder von anderen Webseiten in Spaces ziehen",
"landing_features_2": "<b>Textnotizen</b> mit allen Möglichkeiten bei Schriftart, Farbe und Stil",
"landing_features_3": "<b>Zeichne und Markiere</b> freihändig oder mit fertigen Formen",
"landing_features_4": "Verwandle dein Whiteboard in eine <b>zoombare Präsentation</b>",
"landing_features_5": "<b>Arbeite in Echtzeit</b> mit deinen Kollegen, Schülern oder Freunden zusammen",
"landing_features_6": "<b>Teile deine Whiteboards</b> per Link oder per E-Mail",
"landing_features_7": "<b>Exportiere deine Arbeit</b> als PDF- oder ZIP-Datei",
"landing_pricing": "Unfassbar günstig.",
"landing_pricing_lite": "Private Nutzung",
"landing_pricing_lite_text": "Basisvariante, ausreichend um multimedial zu arbeiten.",
"landing_pricing_pro_features_list": "<ul><li>Unbegrenzte Spaces</li><li>Hierarchische Ordnerstruktur</li><li>PDF und ZIP Export</li><li>Keine Wasserzeichen</li><li>Eigene Hintergründe</li><li>Liste von Aktivitäten</li><li>20 GB Speicherplatz</li><ul>",
"landing_pricing_pro": "€4,90/Anwender/Mo. <br><small>oder €49,90/Anwender/Jahr</small>",
"landing_pricing_pro_text": "Alle Features um professionell zu arbeiten.",
"welcome_subject": "Willkommen bei Spacedeck",
"welcome_body": "Danke, dass du dich bei Spacedeck angemeldet hast. <br> Wir hoffen, du wirst viel Spaß mit Spacedeck haben. <br> Vergiss nicht, dass du mit unbegrenzt vielen Kollegen und Freunden kostenlos zusammen arbeiten kannst. ",
"parent_folder": "Übergeordneter Ordner",
"access_no_members": "Noch keine Mitglieder",
"invite_emails": "E-Mail Adressen",
"created_by": "Erstellt von",
"last_updated": "Zuletzt aktualisiert",
"comments": "Kommentare",
"history_recently_updated": "Aktuelles",
"history_recently_empty": "Noch nichts passiert.",
"signing_up": "Registierung läuft",
"feedback_sent": "Danke für dein Feedback!",
"role_member": "Mitglied",
"space_message_subject": "Neue Nachricht im Space %s",
"space_message_body": "%s schrieb in %s: \n",
"password_reset_subject": "Neues Passwort für Spacedeck",
"password_reset_body": "Du möchtest das Passwort für deinen Spacedeck Account zurücksetzen?\nBitte klicke dafür auf den folgenden Link:",
"password_reset_action": "Jetzt Passwort neu setzen",
"pro_ad_history_headline": "Nach einem Upgrade zu Spacedeck Pro kannst du hier einen Überblick über alle aktuellen Aktivitäten in Spaces bekommen.",
"was_offline": "Die Verbindung wurde unterbrochen. Wir empfehlen, alle geänderten Objekte erneut zu selektieren, um sie zu speichern.",
"subscription_failed_user_subject": "Zahlung fehlgeschlagen",
"subscription_failed_user_body": "Unfortunately, we could not process your payment method. You can easly create a new payment method including PayPal in your account settings.",
"subscription_failed_team_subject": "Zahlung fehlgeschlagen",
"subscription_failed_team_body": "Unfortunately, we could not process your Payment-method for your Team-Account. Please fix your payment method asap.",
"add": "hinzufügen",
"team_name": "Team-Name",
"subdomain": "Subdomain",
"invited": "eingeladen",
"team_adresses": "E-Mail Adressen",
"duplicate_destination": "In welchen Ordner möchtest du den Space duplizieren?",
"duplicate_confirm": "%s nach %s duplizieren?",
"duplicate_success": "%s wurde in %s dupliziert.",
"goto_space": "Gehe zu %s",
"goto_folder": "Gehe zu Ordner %s",
"stay_here": "Hier bleiben",
"sharing": "sharing",
"list": "Liste",
"download_space": "Space Herunterladen",
"duplicate_destination_folder": "Zielordner für Duplikat",
"type": "Typ",
"promote": "Befördern",
"demote": "Zurückstufen",
"Previous Zone": "Vorherige Zone",
"Next Zone": "Nächste Zone"
}
window.locales.fr.translation =
{
"lang": "fr",
"ok": "OK",
"cancel": "Annuler",
"close": "Fermer",
"open": "Ouvrir",
"folder": "Dossier",
"save": "Enregistrer",
"saved": "Enregistrée",
"created": "établi",
"duplicate": "Dupliquer",
"delete": "Supprimer",
"remove": "Enlever",
"set": "Définir",
"reset": "Rédéfinir",
"thanks": "Merci",
"share": "Partager",
"signup": "S'inscrire",
"login": "Se connecter",
"logout": "Se déconnecter",
"email": "Adresse email",
"password": "Mot de passe",
"width": "Largeur",
"height": "Hauteur",
"nick": "Nom",
"role": "Rôle",
"members": "Membres",
"actions": "Actions",
"or": "ou",
"you": "vous",
"via": "par",
"by": "par",
"zero": "Zero",
"page": "Page",
"new": "Neuf",
"copy": "Copier",
"owner": "Possesseur",
"home": "Accueil",
"space": "Espace",
"second": "Seconde",
"not_found": "Pas trouvé.",
"untitled": "sans titre",
"untitled_space": "Espace sans titre",
"untitled_folder": "Dossier sans titre",
"sure": "Êtes-vous sûr?",
"specify": "Veuillez préciser:",
"confirm": "Veuillez confirmer",
"signup_google": "S'inscrire avec Google",
"error_unknown_email": "Combinaison inconnue de l'email et mot de passe. Ou essayer de signer avec Google.",
"error_password_confirmation": "Les deux mots de passe ne correspondent pas.",
"error_domain_blocked": "Ce domaine a été désactivé.",
"error_user_email_already_used": "Cette adresse email est déjà enregistré.",
"support": "Aide Spacedeck",
"offline": "Désolé , mais les serveurs Spacedeck ne peuvent pas être atteint pour le moment. Plus d' informations ici.",
"error": "Désolé, une erreur s'est produite. Veuillez contacter support@spacedeck.com",
"welcome": "Bienvenue",
"claim": "Le tableau blanc partagé pour tout le monde",
"trynow": "Essayez-le gratuitement",
"about": "de nous",
"terms": "termes",
"contact": "contact",
"privacy": "sphère privée",
"business_adress": "Siège social",
"post_adress": "Adresse courrier",
"phone": "téléphone",
"ceo": "Gestionnaire",
"name": "name",
"confirm_subject": "Confirmation de l'email Spacedeck",
"confirm_body": "Merci pour votre inscription à Spacedeck.\nSil vous plaît cliquez sur le lien suivant pour confirmer votre adresse e-mail.",
"confirm_action": "Confirmer",
"team_invite_membership_subject": "Team Invitation for %s",
"team_invite_membership_body": "You have been invited to %s on Spacedeck.\nPlease click on the following link to accept the invitation.",
"team_invite_user_body": "You have been invited to %s on Spacedeck.\nYour temporary password is \"%s\".\nPlease click on the following link to accept the invitation.",
"team_invite_admin_body": "%s was invited for your team: %s. The temporary password is \"%s\".",
"team_invite_membership_acction": "Accept",
"team_new_member_subject": "New Team Member",
"team_new_member_body": "%s just joined Team %s on Spacedeck.",
"invite_emails": "Entrer les adresses email (séparées pas des virgules)",
"optional_message": "Message personnel (facultatif)",
"space_invite_membership_subject": "Invitation Espace par %s: %s",
"space_invite_membership_body": "Vous avez été invité par %s à Espace \"%s\"",
"space_invite_membership_action": "Accepter L'invitation",
"folder_invite_membership_subject": "Space",
"folder_invite_membership_body": "You have been invited to a Team on Spacedeck. Please click on the following link to accept the invitation.",
"folder_invite_membership_acction": "Accept",
"login_google": "S'inscrire avec Google",
"save_changes": "Enregistrer",
"upgrade": "Upgrade",
"upgrade_now": "Mise à niveau",
"create_space": "Créer un espace",
"create_folder": "Créer un dossier",
"email_unconfirmed": "Email non confirmée",
"confirmation_sent": "L'email est envoyé.",
"folder_filter": "Filtre",
"sort_by": "Ordre",
"last_modified": "Dernière modification",
"last_opened": "Dernière ouverture",
"title": "Titre",
"edit_team": "Modifier l'équipe",
"edit_account": "Modifier le compte",
"log_out": "Déconnecter",
"no_spaces_yet": "Vous ne avez pas encore créé d'espaces.",
"new_folder_title": "Nouveau titre pour le dossier",
"folder_settings": "Paramètres du dossier",
"upload_cover_image": "Charger image de couverture",
"spacedeck_pro_ad_folders": "Avec Spacedeck Pro, vous pouvez organiser un nombre illimité de espaces dans les dossiers et gérer les contrôles d'accès pour chaque dossier. Voulez-vous en savoir plus sur les fonctionnalités Pro?",
"spacedeck_pro_ad_versions": "Avec Spacedeck Pro, vous pouvez enregistrer des versions illimitées de chaque espace pour suivre vos progrès ou de conserver des instantanés sécurité. Voulez-vous en savoir plus sur les fonctionnalités Pro?",
"spacedeck_pro_ad_pdf": "Avec Spacedeck Pro, vous pouvez exporter vos espaces et même des dossiers entiers belles PDF pour l'archivage, de diffusion, ou autour de l'impression. Voulez-vous en savoir plus sur les fonctionnalités Pro?",
"spacedeck_pro_ad_zip": "Avec Spacedeck Pro, vous pouvez exporter le contenu d'un espace comme un paquet ZIP. Voulez-vous en savoir plus sur les fonctionnalités Pro?",
"spacedeck_pro_ad_colors": "Avec Spacedeck Pro, vous pouvez mélanger vos propres couleurs en utilisant un sélecteur de couleur professionnelle.",
"profile_caption": "Profil",
"upload_avatar": "Télécharger l'image profil",
"uploading_avatar": "L'image de profil est téléchargée…",
"avatar_dimensions": "Format suggéré: 200×200 pixels.",
"profile_name": "Name",
"profile_email": "Email",
"send_again": "Renvoyer",
"confirmation_sent_long": "Lien de confirmation email envoyé. Se il vous plaît vérifier votre courrier.",
"confirmation_sent_another": "Nous avons envoyé un autre lien de confirmation.",
"confirmation_sent_dialog_text": "Nous vous avons envoyé un email expliquant comment confirmer votre adresse email.",
"payment_caption": "Paiement",
"language_caption": "Langue",
"notifications_caption": "Emails",
"notifications_option_chat": "Envoyez-moi les nouveaux commentaires par email.",
"notifications_option_spaces": "Envoyez-moi un résumé quotidien des modifications à mes espaces.",
"password_caption": "Mot de passe",
"current_password": "Ancien mot de passe",
"new_password": "Nouveau mot de passe",
"verify_password": "Répéter mot de passe",
"change_password": "Enregistrer",
"reset_password": "Mot de passe oublié?",
"terminate_caption": "Supprimer le compte",
"terminate_warning": "En supprimant votre compte, vos messages, espaces, dossiers et tout leur contenu seront effacés. Cette action ne peut être annulée.",
"terminate_warning2": "Cela ne peut pas être annulée.",
"terminate_reason": "Problèmes rencontrés",
"terminate_reason_caption": "Aidez-nous à améliorer le produit en précisant les raisons de la suppression de votre compte.",
"terminate_terminate": "Supprimer le compte définitivement?",
"space_blank1": "Ceci est votre nouvel espace.",
"space_blank2": "Déposez des fichiers, collez des liens web",
"space_blank3": "ou utilisez les outils.",
"space_blank4": "Soyez créatifs!",
"draft": "Conception",
"publish": "Publier",
"published": "Publié",
"save_version": "Enregistrer une version",
"version_saved": "Version enregistrée.",
"post": "Envoyer",
"chat_invite_cta1": "Travailler ensemble est amusant!",
"chat_invite_cta2": "Pourquoi ",
"chat_invite_cta3": "ne pas vous invitez quelques collaborateurs?",
"chat_invite_cta4": "",
"chat_message_placeholder": "Votre message ici…",
"view": "Vue",
"edit": "Éditer",
"present": "Prés.",
"chat": "Chat",
"meta": "Meta",
"tool_search": "Chercher",
"tool_upload": "Charger",
"tool_text": "Texte",
"tool_shape": "Dessin",
"tool_zones": "Zones",
"tool_canvas": "Mur",
"search_media": "Chercher le web pour les médias…",
"type_here": "Entrez quelque chose ici",
"text_formats": "Formats",
"format_p": "Paragraphe",
"format_bullets": "Liste à puces",
"format_numbers": "Liste numérotée",
"format_h1": "Titre 1",
"format_h2": "Titre 2",
"format_h3": "Titre 3",
"font_size": "Taille de la police",
"line_height": "Hauteur de ligne",
"tool_align": "Align",
"tool_styles": "Style",
"tool_bullets": "Puces",
"tool_numbers": "Numéros",
"color_fill": "Fond",
"color_stroke": "Ligne",
"color_text": "Text",
"tool_type": "Typo.",
"tool_box": "Box",
"tool_link": "Lien",
"tool_layout": "Layout",
"tool_options": "Plus",
"tool_stroke": "Ligne",
"tool_delete": "Effacer",
"tool_lock": "Bloquer",
"tool_copy": "Copie",
"stack": "Empiler",
"tool_circle": "Cercle",
"tool_hexagon": "Hexagone",
"tool_square": "Carré",
"tool_diamond": "Diamant",
"tool_bubble": "Bulle",
"tool_cloud": "Nuage",
"tool_burst": "Éclat",
"tool_star": "Étoile",
"tool_heart": "Cœur",
"tool_scribble": "Crayon",
"tool_line": "Ligne",
"tool_arrow": "Flèche",
"search_media_placeholder": "Chercher le web pour les médias…",
"add_zone": "Ajouter Zone",
"palette": "Palette",
"picker": "Mélange",
"background_image_caption": "Image",
"background_color_caption": "Couleur",
"upload_background_caption": "Cliquez ici pour télécharger une image de fond.",
"upload_background": "Télécharger",
"access_caption": "Accès",
"versions_caption": "Versions",
"info_caption": "Info",
"mode_private": "Privé",
"mode_public": "Public",
"invite_collaborators": "Inviter les collaborateurs",
"revoke_access": "Révoquer l'accès",
"invite": "Inviter",
"role_viewer": "Spectateur",
"role_editor": "Éditeur",
"role_admin": "Administrateur",
"new_space_title": "Nouveau titre pour l'espace",
"invitee_email_address": "Adresse e-mail de invitee",
"viewer": "Spectateur",
"editor": "Éditeur",
"admin": "Administrateur",
"mobile": "Mobile",
"image": "Image",
"tool_filter": "Filter",
"team": "Team",
"search": "Recherche",
"search_no_results": "Aucun résultat trouvé",
"search_clear": "Supprimer",
"rename": "Renommer",
"logging_in": "Connexion",
"password_confirmation": "Confirmation du mot de passe",
"confirm_again": "Veuillez consulter votre boîte pour confirmer votre email.",
"confirmed": "Adresse email confirmée avec succès. merci!",
"password_check_inbox": "password_check_inbox",
"what_is_your_name": "Bonjour! Choisir un nom d'utilisateur s'il vous plaît.",
"landing_title": "Le tableau blanc partagé pour tout le monde.",
"landing_claim": "Le tableau blanc partagé pour tout le monde.",
"landing_example": "Que vous soyez étudiant, enseignant ou chercheur: Avec Spacedeck il est facile pour vous de créer, de gérer et de partager des cours ou le travail en classe. Développez vos théories visuellement. Organisez des notes de recherche, web, images, audio et vidéo.",
"spaces": "Espaces",
"access_editor_link": "Lien instantané.",
"access_editor_link_desc": "Donnez ce lien à tous ceux que vous voulez inviter rapidement. Ils nont pas besoin créer un compte Spacedeck.",
"access_anonymous_edit_blocking": "Ces invités ne peuvent modifier que les éléments quils ont eux-même créé.",
"access_current_members": "Membres actuels",
"comments": "Commentaires",
"access_no_members": "No members yet. You can invite some below.",
"access_new_members": "Inviter de nouveaux membres.",
"landing_customers": "Approuvé par des milliers.",
"landing_features_title": "Un jeu d'enfant.",
"landing_features_text": "Le tout nouveau Spacedeck 5 vous permet de travailler bien plus facilement grâce à sa magnifique interface simplifiée.",
"landing_features_1": "Glissez & déposez images, vidéos et audios de votre ordinateur ou du web",
"landing_features_2": "Ecrivez directement sur l'espace et choisissez les polices de caractère, couleurs et styles",
"landing_features_3": "Dessinez, annotez et surlignez grâce aux formes graphiques intégrées",
"landing_features_4": "Transformez votre espace en une présentation dynamique",
"landing_features_5": "Collaborez et discutez en temps réel avec vos collègues, élèves et amis",
"landing_features_6": "Partagez vos espaces sur le web ou par email",
"landing_features_7": "Exportez votre espace en PDF pour l'imprimer",
"landing_pricing": "Incroyablement abordable.",
"landing_pricing_lite": "Usage personnel",
"landing_pricing_lite_text": "La version de base, bien arrondi pour recueillir des images et de garder des notes.",
"landing_pricing_pro_features_list": "<ul><li>Unlimited Spaces</li><li>Exporter PDF, ZIP</li><li>No Watermarks</li><li>Image de fonds</li><li>Activity History</li><li>20 Go de stockage</li><ul>",
"landing_pricing_pro": "€4,90/User/Mo. <br><small> €49,90/User/Year</small>",
"landing_pricing_pro_text": "Avec toute la puissance que vous attendez.",
"landing_pricing_pro_features": "Avec toute la puissance que vous attendez.",
"welcome_subject": "Bienvenue sur Spacedeck",
"welcome_body": "Merci pour votre inscription à Spacedeck.\nNous espérons que vous aurez plaisir à travailler dans les Espaces. <br> Rappelez-vous que votre compte comprend un nombre illimité de collaborateurs. <br> N''hésitez pas à partager vos espaces avec des amis et collègues du monde entier.",
"parent_folder": "Dossier origine",
"created_by": "Créé par",
"last_updated": "Mis à jour",
"history_recently_updated": "Nouvelles",
"history_recently_empty": "Rien ne se passe",
"signing_up": "Signing Up",
"feedback_sent": "Merci pour votre commentaire!",
"space_message_subject": "A posté sur %s",
"space_message_body": "%s a commenté dans %s:\n",
"role_member": "role_member",
"password_reset_subject": "Réinitialiser le Mot de passe pour Spacedeck",
"password_reset_body": "Salut!<br><br>Vous avez demandé la réinitialisation de votre Mot de passe.<br>Veuillez cliquer sur le lien suivant pour définir un nouveau Mot de passe.<br>",
"password_reset_action": "Définir un nouveau Mot de passe",
"was_offline": "The connection to Spacedeck was interrupted. If you have unsaved work, please keep this browser tab open until the connection is re-established, then touch the unsaved objects again.",
"subscription_failed_user_subject": "Problem with your Spacedeck Payment",
"subscription_failed_user_body": "Unfortunately, we could not process your Payment-method. You can easly create a new payment method including PayPal in your account settings.",
"subscription_failed_team_subject": "Problem with your Spacedeck Payment",
"subscription_failed_team_body": "Unfortunately, we could not process your Payment-method for your Team-Account. Please fix your payment method asap.",
"pro_ad_history_headline": "Après une mise à niveau vous pouvez obtenir un aperçu de toutes les activités actuelles dans les espaces ici.",
"add": "ajouter",
"team_name": "Nom de l'équipe",
"subdomain": "sous-domaine",
"invited": "invité",
"team_adresses": "E-mail adresse",
"duplicate_destination": "Sélectionnez le dossier de destination",
"duplicate_confirm": "Dupliquer %s dans %s?",
"duplicate_success": "%s a été dupliqué dans %s.",
"goto_space": "Aller à l'espace %s",
"goto_folder": "Aller au dossier %s",
"stay_here": "Reste ici",
"download_space": "télécharger un espace",
"type": "Type",
"Previous Zone": "Zone précédent",
"Next Zone": "Zone suivante",
"list": "liste",
"promote": "promouvoir",
"demote": "rétrograder"
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

2610
public/javascripts/moment.js Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,951 @@
/*global define:false */
/**
* Copyright 2013 Craig Campbell
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* Mousetrap is a simple keyboard shortcut library for Javascript with
* no external dependencies
*
* @version 1.4.6
* @url craig.is/killing/mice
*/
(function(window, document, undefined) {
/**
* mapping of special keycodes to their corresponding keys
*
* everything in this dictionary cannot use keypress events
* so it has to be here to map to the correct keycodes for
* keyup/keydown events
*
* @type {Object}
*/
var _MAP = {
8: 'backspace',
9: 'tab',
13: 'enter',
16: 'shift',
17: 'ctrl',
18: 'alt',
20: 'capslock',
27: 'esc',
32: 'space',
33: 'pageup',
34: 'pagedown',
35: 'end',
36: 'home',
37: 'left',
38: 'up',
39: 'right',
40: 'down',
45: 'ins',
46: 'del',
91: 'meta',
93: 'meta',
224: 'meta'
},
/**
* mapping for special characters so they can support
*
* this dictionary is only used incase you want to bind a
* keyup or keydown event to one of these keys
*
* @type {Object}
*/
_KEYCODE_MAP = {
106: '*',
107: '+',
109: '-',
110: '.',
111 : '/',
186: ';',
187: '=',
188: ',',
189: '-',
190: '.',
191: '/',
192: '`',
219: '[',
220: '\\',
221: ']',
222: '\''
},
/**
* this is a mapping of keys that require shift on a US keypad
* back to the non shift equivelents
*
* this is so you can use keyup events with these keys
*
* note that this will only work reliably on US keyboards
*
* @type {Object}
*/
_SHIFT_MAP = {
'~': '`',
'!': '1',
'@': '2',
'#': '3',
'$': '4',
'%': '5',
'^': '6',
'&': '7',
'*': '8',
'(': '9',
')': '0',
'_': '-',
'+': '=',
':': ';',
'\"': '\'',
'<': ',',
'>': '.',
'?': '/',
'|': '\\'
},
/**
* this is a list of special strings you can use to map
* to modifier keys when you specify your keyboard shortcuts
*
* @type {Object}
*/
_SPECIAL_ALIASES = {
'option': 'alt',
'command': 'meta',
'return': 'enter',
'escape': 'esc',
'mod': /Mac|iPod|iPhone|iPad/.test(navigator.platform) ? 'meta' : 'ctrl'
},
/**
* variable to store the flipped version of _MAP from above
* needed to check if we should use keypress or not when no action
* is specified
*
* @type {Object|undefined}
*/
_REVERSE_MAP,
/**
* a list of all the callbacks setup via Mousetrap.bind()
*
* @type {Object}
*/
_callbacks = {},
/**
* direct map of string combinations to callbacks used for trigger()
*
* @type {Object}
*/
_directMap = {},
/**
* keeps track of what level each sequence is at since multiple
* sequences can start out with the same sequence
*
* @type {Object}
*/
_sequenceLevels = {},
/**
* variable to store the setTimeout call
*
* @type {null|number}
*/
_resetTimer,
/**
* temporary state where we will ignore the next keyup
*
* @type {boolean|string}
*/
_ignoreNextKeyup = false,
/**
* temporary state where we will ignore the next keypress
*
* @type {boolean}
*/
_ignoreNextKeypress = false,
/**
* are we currently inside of a sequence?
* type of action ("keyup" or "keydown" or "keypress") or false
*
* @type {boolean|string}
*/
_nextExpectedAction = false;
/**
* loop through the f keys, f1 to f19 and add them to the map
* programatically
*/
for (var i = 1; i < 20; ++i) {
_MAP[111 + i] = 'f' + i;
}
/**
* loop through to map numbers on the numeric keypad
*/
for (i = 0; i <= 9; ++i) {
_MAP[i + 96] = i;
}
/**
* cross browser add event method
*
* @param {Element|HTMLDocument} object
* @param {string} type
* @param {Function} callback
* @returns void
*/
function _addEvent(object, type, callback) {
if (object.addEventListener) {
object.addEventListener(type, callback, false);
return;
}
object.attachEvent('on' + type, callback);
}
/**
* takes the event and returns the key character
*
* @param {Event} e
* @return {string}
*/
function _characterFromEvent(e) {
// for keypress events we should return the character as is
if (e.type == 'keypress') {
var character = String.fromCharCode(e.which);
// if the shift key is not pressed then it is safe to assume
// that we want the character to be lowercase. this means if
// you accidentally have caps lock on then your key bindings
// will continue to work
//
// the only side effect that might not be desired is if you
// bind something like 'A' cause you want to trigger an
// event when capital A is pressed caps lock will no longer
// trigger the event. shift+a will though.
if (!e.shiftKey) {
character = character.toLowerCase();
}
return character;
}
// for non keypress events the special maps are needed
if (_MAP[e.which]) {
return _MAP[e.which];
}
if (_KEYCODE_MAP[e.which]) {
return _KEYCODE_MAP[e.which];
}
// if it is not in the special map
// with keydown and keyup events the character seems to always
// come in as an uppercase character whether you are pressing shift
// or not. we should make sure it is always lowercase for comparisons
return String.fromCharCode(e.which).toLowerCase();
}
/**
* checks if two arrays are equal
*
* @param {Array} modifiers1
* @param {Array} modifiers2
* @returns {boolean}
*/
function _modifiersMatch(modifiers1, modifiers2) {
return modifiers1.sort().join(',') === modifiers2.sort().join(',');
}
/**
* resets all sequence counters except for the ones passed in
*
* @param {Object} doNotReset
* @returns void
*/
function _resetSequences(doNotReset) {
doNotReset = doNotReset || {};
var activeSequences = false,
key;
for (key in _sequenceLevels) {
if (doNotReset[key]) {
activeSequences = true;
continue;
}
_sequenceLevels[key] = 0;
}
if (!activeSequences) {
_nextExpectedAction = false;
}
}
/**
* finds all callbacks that match based on the keycode, modifiers,
* and action
*
* @param {string} character
* @param {Array} modifiers
* @param {Event|Object} e
* @param {string=} sequenceName - name of the sequence we are looking for
* @param {string=} combination
* @param {number=} level
* @returns {Array}
*/
function _getMatches(character, modifiers, e, sequenceName, combination, level) {
var i,
callback,
matches = [],
action = e.type;
// if there are no events related to this keycode
if (!_callbacks[character]) {
return [];
}
// if a modifier key is coming up on its own we should allow it
if (action == 'keyup' && _isModifier(character)) {
modifiers = [character];
}
// loop through all callbacks for the key that was pressed
// and see if any of them match
for (i = 0; i < _callbacks[character].length; ++i) {
callback = _callbacks[character][i];
// if a sequence name is not specified, but this is a sequence at
// the wrong level then move onto the next match
if (!sequenceName && callback.seq && _sequenceLevels[callback.seq] != callback.level) {
continue;
}
// if the action we are looking for doesn't match the action we got
// then we should keep going
if (action != callback.action) {
continue;
}
// if this is a keypress event and the meta key and control key
// are not pressed that means that we need to only look at the
// character, otherwise check the modifiers as well
//
// chrome will not fire a keypress if meta or control is down
// safari will fire a keypress if meta or meta+shift is down
// firefox will fire a keypress if meta or control is down
if ((action == 'keypress' && !e.metaKey && !e.ctrlKey) || _modifiersMatch(modifiers, callback.modifiers)) {
// when you bind a combination or sequence a second time it
// should overwrite the first one. if a sequenceName or
// combination is specified in this call it does just that
//
// @todo make deleting its own method?
var deleteCombo = !sequenceName && callback.combo == combination;
var deleteSequence = sequenceName && callback.seq == sequenceName && callback.level == level;
if (deleteCombo || deleteSequence) {
_callbacks[character].splice(i, 1);
}
matches.push(callback);
}
}
return matches;
}
/**
* takes a key event and figures out what the modifiers are
*
* @param {Event} e
* @returns {Array}
*/
function _eventModifiers(e) {
var modifiers = [];
if (e.shiftKey) {
modifiers.push('shift');
}
if (e.altKey) {
modifiers.push('alt');
}
if (e.ctrlKey) {
modifiers.push('ctrl');
}
if (e.metaKey) {
modifiers.push('meta');
}
return modifiers;
}
/**
* prevents default for this event
*
* @param {Event} e
* @returns void
*/
function _preventDefault(e) {
if (e.preventDefault) {
e.preventDefault();
return;
}
e.returnValue = false;
}
/**
* stops propogation for this event
*
* @param {Event} e
* @returns void
*/
function _stopPropagation(e) {
if (e.stopPropagation) {
e.stopPropagation();
return;
}
e.cancelBubble = true;
}
/**
* actually calls the callback function
*
* if your callback function returns false this will use the jquery
* convention - prevent default and stop propogation on the event
*
* @param {Function} callback
* @param {Event} e
* @returns void
*/
function _fireCallback(callback, e, combo, sequence) {
// if this event should not happen stop here
if (Mousetrap.stopCallback(e, e.target || e.srcElement, combo, sequence)) {
return;
}
if (callback(e, combo) === false) {
_preventDefault(e);
_stopPropagation(e);
}
}
/**
* handles a character key event
*
* @param {string} character
* @param {Array} modifiers
* @param {Event} e
* @returns void
*/
function _handleKey(character, modifiers, e) {
var callbacks = _getMatches(character, modifiers, e),
i,
doNotReset = {},
maxLevel = 0,
processedSequenceCallback = false;
// Calculate the maxLevel for sequences so we can only execute the longest callback sequence
for (i = 0; i < callbacks.length; ++i) {
if (callbacks[i].seq) {
maxLevel = Math.max(maxLevel, callbacks[i].level);
}
}
// loop through matching callbacks for this key event
for (i = 0; i < callbacks.length; ++i) {
// fire for all sequence callbacks
// this is because if for example you have multiple sequences
// bound such as "g i" and "g t" they both need to fire the
// callback for matching g cause otherwise you can only ever
// match the first one
if (callbacks[i].seq) {
// only fire callbacks for the maxLevel to prevent
// subsequences from also firing
//
// for example 'a option b' should not cause 'option b' to fire
// even though 'option b' is part of the other sequence
//
// any sequences that do not match here will be discarded
// below by the _resetSequences call
if (callbacks[i].level != maxLevel) {
continue;
}
processedSequenceCallback = true;
// keep a list of which sequences were matches for later
doNotReset[callbacks[i].seq] = 1;
_fireCallback(callbacks[i].callback, e, callbacks[i].combo, callbacks[i].seq);
continue;
}
// if there were no sequence matches but we are still here
// that means this is a regular match so we should fire that
if (!processedSequenceCallback) {
_fireCallback(callbacks[i].callback, e, callbacks[i].combo);
}
}
// if the key you pressed matches the type of sequence without
// being a modifier (ie "keyup" or "keypress") then we should
// reset all sequences that were not matched by this event
//
// this is so, for example, if you have the sequence "h a t" and you
// type "h e a r t" it does not match. in this case the "e" will
// cause the sequence to reset
//
// modifier keys are ignored because you can have a sequence
// that contains modifiers such as "enter ctrl+space" and in most
// cases the modifier key will be pressed before the next key
//
// also if you have a sequence such as "ctrl+b a" then pressing the
// "b" key will trigger a "keypress" and a "keydown"
//
// the "keydown" is expected when there is a modifier, but the
// "keypress" ends up matching the _nextExpectedAction since it occurs
// after and that causes the sequence to reset
//
// we ignore keypresses in a sequence that directly follow a keydown
// for the same character
var ignoreThisKeypress = e.type == 'keypress' && _ignoreNextKeypress;
if (e.type == _nextExpectedAction && !_isModifier(character) && !ignoreThisKeypress) {
_resetSequences(doNotReset);
}
_ignoreNextKeypress = processedSequenceCallback && e.type == 'keydown';
}
/**
* handles a keydown event
*
* @param {Event} e
* @returns void
*/
function _handleKeyEvent(e) {
// normalize e.which for key events
// @see http://stackoverflow.com/questions/4285627/javascript-keycode-vs-charcode-utter-confusion
if (typeof e.which !== 'number') {
e.which = e.keyCode;
}
var character = _characterFromEvent(e);
// no character found then stop
if (!character) {
return;
}
// need to use === for the character check because the character can be 0
if (e.type == 'keyup' && _ignoreNextKeyup === character) {
_ignoreNextKeyup = false;
return;
}
Mousetrap.handleKey(character, _eventModifiers(e), e);
}
/**
* determines if the keycode specified is a modifier key or not
*
* @param {string} key
* @returns {boolean}
*/
function _isModifier(key) {
return key == 'shift' || key == 'ctrl' || key == 'alt' || key == 'meta';
}
/**
* called to set a 1 second timeout on the specified sequence
*
* this is so after each key press in the sequence you have 1 second
* to press the next key before you have to start over
*
* @returns void
*/
function _resetSequenceTimer() {
clearTimeout(_resetTimer);
_resetTimer = setTimeout(_resetSequences, 1000);
}
/**
* reverses the map lookup so that we can look for specific keys
* to see what can and can't use keypress
*
* @return {Object}
*/
function _getReverseMap() {
if (!_REVERSE_MAP) {
_REVERSE_MAP = {};
for (var key in _MAP) {
// pull out the numeric keypad from here cause keypress should
// be able to detect the keys from the character
if (key > 95 && key < 112) {
continue;
}
if (_MAP.hasOwnProperty(key)) {
_REVERSE_MAP[_MAP[key]] = key;
}
}
}
return _REVERSE_MAP;
}
/**
* picks the best action based on the key combination
*
* @param {string} key - character for key
* @param {Array} modifiers
* @param {string=} action passed in
*/
function _pickBestAction(key, modifiers, action) {
// if no action was picked in we should try to pick the one
// that we think would work best for this key
if (!action) {
action = _getReverseMap()[key] ? 'keydown' : 'keypress';
}
// modifier keys don't work as expected with keypress,
// switch to keydown
if (action == 'keypress' && modifiers.length) {
action = 'keydown';
}
return action;
}
/**
* binds a key sequence to an event
*
* @param {string} combo - combo specified in bind call
* @param {Array} keys
* @param {Function} callback
* @param {string=} action
* @returns void
*/
function _bindSequence(combo, keys, callback, action) {
// start off by adding a sequence level record for this combination
// and setting the level to 0
_sequenceLevels[combo] = 0;
/**
* callback to increase the sequence level for this sequence and reset
* all other sequences that were active
*
* @param {string} nextAction
* @returns {Function}
*/
function _increaseSequence(nextAction) {
return function() {
_nextExpectedAction = nextAction;
++_sequenceLevels[combo];
_resetSequenceTimer();
};
}
/**
* wraps the specified callback inside of another function in order
* to reset all sequence counters as soon as this sequence is done
*
* @param {Event} e
* @returns void
*/
function _callbackAndReset(e) {
_fireCallback(callback, e, combo);
// we should ignore the next key up if the action is key down
// or keypress. this is so if you finish a sequence and
// release the key the final key will not trigger a keyup
if (action !== 'keyup') {
_ignoreNextKeyup = _characterFromEvent(e);
}
// weird race condition if a sequence ends with the key
// another sequence begins with
setTimeout(_resetSequences, 10);
}
// loop through keys one at a time and bind the appropriate callback
// function. for any key leading up to the final one it should
// increase the sequence. after the final, it should reset all sequences
//
// if an action is specified in the original bind call then that will
// be used throughout. otherwise we will pass the action that the
// next key in the sequence should match. this allows a sequence
// to mix and match keypress and keydown events depending on which
// ones are better suited to the key provided
for (var i = 0; i < keys.length; ++i) {
var isFinal = i + 1 === keys.length;
var wrappedCallback = isFinal ? _callbackAndReset : _increaseSequence(action || _getKeyInfo(keys[i + 1]).action);
_bindSingle(keys[i], wrappedCallback, action, combo, i);
}
}
/**
* Converts from a string key combination to an array
*
* @param {string} combination like "command+shift+l"
* @return {Array}
*/
function _keysFromString(combination) {
var keys = combination.split('+');
if (combination[combination.length-1] === '+') {
keys.pop();
if (keys.length) keys.pop();
keys.push('+');
}
return keys;
}
/**
* Gets info for a specific key combination
*
* @param {string} combination key combination ("command+s" or "a" or "*")
* @param {string=} action
* @returns {Object}
*/
function _getKeyInfo(combination, action) {
var keys,
key,
i,
modifiers = [];
// take the keys from this pattern and figure out what the actual
// pattern is all about
keys = _keysFromString(combination);
for (i = 0; i < keys.length; ++i) {
key = keys[i];
// normalize key names
if (_SPECIAL_ALIASES[key]) {
key = _SPECIAL_ALIASES[key];
}
// if this is not a keypress event then we should
// be smart about using shift keys
// this will only work for US keyboards however
if (action && action != 'keypress' && _SHIFT_MAP[key]) {
key = _SHIFT_MAP[key];
modifiers.push('shift');
}
// if this key is a modifier then add it to the list of modifiers
if (_isModifier(key)) {
modifiers.push(key);
}
}
// depending on what the key combination is
// we will try to pick the best event for it
action = _pickBestAction(key, modifiers, action);
return {
key: key,
modifiers: modifiers,
action: action
};
}
/**
* binds a single keyboard combination
*
* @param {string} combination
* @param {Function} callback
* @param {string=} action
* @param {string=} sequenceName - name of sequence if part of sequence
* @param {number=} level - what part of the sequence the command is
* @returns void
*/
function _bindSingle(combination, callback, action, sequenceName, level) {
// store a direct mapped reference for use with Mousetrap.trigger
_directMap[combination + ':' + action] = callback;
// make sure multiple spaces in a row become a single space
combination = combination.replace(/\s+/g, ' ');
var sequence = combination.split(' '),
info;
// if this pattern is a sequence of keys then run through this method
// to reprocess each pattern one key at a time
if (sequence.length > 1) {
_bindSequence(combination, sequence, callback, action);
return;
}
info = _getKeyInfo(combination, action);
// make sure to initialize array if this is the first time
// a callback is added for this key
_callbacks[info.key] = _callbacks[info.key] || [];
// remove an existing match if there is one
_getMatches(info.key, info.modifiers, {type: info.action}, sequenceName, combination, level);
// add this call back to the array
// if it is a sequence put it at the beginning
// if not put it at the end
//
// this is important because the way these are processed expects
// the sequence ones to come first
_callbacks[info.key][sequenceName ? 'unshift' : 'push']({
callback: callback,
modifiers: info.modifiers,
action: info.action,
seq: sequenceName,
level: level,
combo: combination
});
}
/**
* binds multiple combinations to the same callback
*
* @param {Array} combinations
* @param {Function} callback
* @param {string|undefined} action
* @returns void
*/
function _bindMultiple(combinations, callback, action) {
for (var i = 0; i < combinations.length; ++i) {
_bindSingle(combinations[i], callback, action);
}
}
// start!
_addEvent(document, 'keypress', _handleKeyEvent);
_addEvent(document, 'keydown', _handleKeyEvent);
_addEvent(document, 'keyup', _handleKeyEvent);
var Mousetrap = {
/**
* binds an event to mousetrap
*
* can be a single key, a combination of keys separated with +,
* an array of keys, or a sequence of keys separated by spaces
*
* be sure to list the modifier keys first to make sure that the
* correct key ends up getting bound (the last key in the pattern)
*
* @param {string|Array} keys
* @param {Function} callback
* @param {string=} action - 'keypress', 'keydown', or 'keyup'
* @returns void
*/
bind: function(keys, callback, action) {
keys = keys instanceof Array ? keys : [keys];
_bindMultiple(keys, callback, action);
return this;
},
/**
* unbinds an event to mousetrap
*
* the unbinding sets the callback function of the specified key combo
* to an empty function and deletes the corresponding key in the
* _directMap dict.
*
* TODO: actually remove this from the _callbacks dictionary instead
* of binding an empty function
*
* the keycombo+action has to be exactly the same as
* it was defined in the bind method
*
* @param {string|Array} keys
* @param {string} action
* @returns void
*/
unbind: function(keys, action) {
return Mousetrap.bind(keys, function() {}, action);
},
/**
* triggers an event that has already been bound
*
* @param {string} keys
* @param {string=} action
* @returns void
*/
trigger: function(keys, action) {
if (_directMap[keys + ':' + action]) {
_directMap[keys + ':' + action]({}, keys);
}
return this;
},
/**
* resets the library back to its initial state. this is useful
* if you want to clear out the current keyboard shortcuts and bind
* new ones - for example if you switch to another page
*
* @returns void
*/
reset: function() {
_callbacks = {};
_directMap = {};
return this;
},
/**
* should we stop this event before firing off callbacks
*
* @param {Event} e
* @param {Element} element
* @return {boolean}
*/
stopCallback: function(e, element) {
// if the element has the class "mousetrap" then no need to stop
if ((' ' + element.className + ' ').indexOf(' mousetrap ') > -1) {
return false;
}
// stop for input, select, and textarea
return element.tagName == 'INPUT' || element.tagName == 'SELECT' || element.tagName == 'TEXTAREA' || element.isContentEditable;
},
/**
* exposes _handleKey publicly so it can be overwritten by extensions
*/
handleKey: _handleKey
};
// expose mousetrap to the global object
window.Mousetrap = Mousetrap;
}) (window, document);

View File

@ -0,0 +1,147 @@
/******************************************************************************
This is a binary tree based bin packing algorithm that is more complex than
the simple Packer (packer.js). Instead of starting off with a fixed width and
height, it starts with the width and height of the first block passed and then
grows as necessary to accomodate each subsequent block. As it grows it attempts
to maintain a roughly square ratio by making 'smart' choices about whether to
grow right or down.
When growing, the algorithm can only grow to the right OR down. Therefore, if
the new block is BOTH wider and taller than the current target then it will be
rejected. This makes it very important to initialize with a sensible starting
width and height. If you are providing sorted input (largest first) then this
will not be an issue.
A potential way to solve this limitation would be to allow growth in BOTH
directions at once, but this requires maintaining a more complex tree
with 3 children (down, right and center) and that complexity can be avoided
by simply chosing a sensible starting block.
Best results occur when the input blocks are sorted by height, or even better
when sorted by max(width,height).
Inputs:
------
blocks: array of any objects that have .w and .h attributes
Outputs:
-------
marks each block that fits with a .fit attribute pointing to a
node with .x and .y coordinates
Example:
-------
var blocks = [
{ w: 100, h: 100 },
{ w: 100, h: 100 },
{ w: 80, h: 80 },
{ w: 80, h: 80 },
etc
etc
];
var packer = new GrowingPacker();
packer.fit(blocks);
for(var n = 0 ; n < blocks.length ; n++) {
var block = blocks[n];
if (block.fit) {
Draw(block.fit.x, block.fit.y, block.w, block.h);
}
}
******************************************************************************/
GrowingPacker = function() { };
GrowingPacker.prototype = {
fit: function(blocks) {
var n, node, block, len = blocks.length;
var w = len > 0 ? blocks[0].w : 0;
var h = len > 0 ? blocks[0].h : 0;
this.root = { x: 0, y: 0, w: w, h: h };
for (n = 0; n < len ; n++) {
block = blocks[n];
if (node = this.findNode(this.root, block.w, block.h))
block.fit = this.splitNode(node, block.w, block.h);
else
block.fit = this.growNode(block.w, block.h);
}
},
findNode: function(root, w, h) {
if (root.used)
return this.findNode(root.right, w, h) || this.findNode(root.down, w, h);
else if ((w <= root.w) && (h <= root.h))
return root;
else
return null;
},
splitNode: function(node, w, h) {
node.used = true;
node.down = { x: node.x, y: node.y + h, w: node.w, h: node.h - h };
node.right = { x: node.x + w, y: node.y, w: node.w - w, h: h };
return node;
},
growNode: function(w, h) {
var canGrowDown = (w <= this.root.w);
var canGrowRight = (h <= this.root.h);
var shouldGrowRight = canGrowRight && (this.root.h >= (this.root.w + w)); // attempt to keep square-ish by growing right when height is much greater than width
var shouldGrowDown = canGrowDown && (this.root.w >= (this.root.h + h)); // attempt to keep square-ish by growing down when width is much greater than height
if (shouldGrowRight)
return this.growRight(w, h);
else if (shouldGrowDown)
return this.growDown(w, h);
else if (canGrowRight)
return this.growRight(w, h);
else if (canGrowDown)
return this.growDown(w, h);
else
return null; // need to ensure sensible root starting size to avoid this happening
},
growRight: function(w, h) {
this.root = {
used: true,
x: 0,
y: 0,
w: this.root.w + w,
h: this.root.h,
down: this.root,
right: { x: this.root.w, y: 0, w: w, h: this.root.h }
};
if (node = this.findNode(this.root, w, h))
return this.splitNode(node, w, h);
else
return null;
},
growDown: function(w, h) {
this.root = {
used: true,
x: 0,
y: 0,
w: this.root.w,
h: this.root.h + h,
down: { x: 0, y: this.root.h, w: this.root.w, h: h },
right: this.root
};
if (node = this.findNode(this.root, w, h))
return this.splitNode(node, w, h);
else
return null;
}
}

View File

@ -0,0 +1,627 @@
(function(__exports__) {
"use strict";
var specials = [
'/', '.', '*', '+', '?', '|',
'(', ')', '[', ']', '{', '}', '\\'
];
var escapeRegex = new RegExp('(\\' + specials.join('|\\') + ')', 'g');
function isArray(test) {
return Object.prototype.toString.call(test) === "[object Array]";
}
// A Segment represents a segment in the original route description.
// Each Segment type provides an `eachChar` and `regex` method.
//
// The `eachChar` method invokes the callback with one or more character
// specifications. A character specification consumes one or more input
// characters.
//
// The `regex` method returns a regex fragment for the segment. If the
// segment is a dynamic of star segment, the regex fragment also includes
// a capture.
//
// A character specification contains:
//
// * `validChars`: a String with a list of all valid characters, or
// * `invalidChars`: a String with a list of all invalid characters
// * `repeat`: true if the character specification can repeat
function StaticSegment(string) { this.string = string; }
StaticSegment.prototype = {
eachChar: function(callback) {
var string = this.string, ch;
for (var i=0, l=string.length; i<l; i++) {
ch = string.charAt(i);
callback({ validChars: ch });
}
},
regex: function() {
return this.string.replace(escapeRegex, '\\$1');
},
generate: function() {
return this.string;
}
};
function DynamicSegment(name) { this.name = name; }
DynamicSegment.prototype = {
eachChar: function(callback) {
callback({ invalidChars: "/", repeat: true });
},
regex: function() {
return "([^/]+)";
},
generate: function(params) {
return params[this.name];
}
};
function StarSegment(name) { this.name = name; }
StarSegment.prototype = {
eachChar: function(callback) {
callback({ invalidChars: "", repeat: true });
},
regex: function() {
return "(.+)";
},
generate: function(params) {
return params[this.name];
}
};
function EpsilonSegment() {}
EpsilonSegment.prototype = {
eachChar: function() {},
regex: function() { return ""; },
generate: function() { return ""; }
};
function parse(route, names, types) {
// normalize route as not starting with a "/". Recognition will
// also normalize.
if (route.charAt(0) === "/") { route = route.substr(1); }
var segments = route.split("/"), results = [];
for (var i=0, l=segments.length; i<l; i++) {
var segment = segments[i], match;
if (match = segment.match(/^:([^\/]+)$/)) {
results.push(new DynamicSegment(match[1]));
names.push(match[1]);
types.dynamics++;
} else if (match = segment.match(/^\*([^\/]+)$/)) {
results.push(new StarSegment(match[1]));
names.push(match[1]);
types.stars++;
} else if(segment === "") {
results.push(new EpsilonSegment());
} else {
results.push(new StaticSegment(segment));
types.statics++;
}
}
return results;
}
// A State has a character specification and (`charSpec`) and a list of possible
// subsequent states (`nextStates`).
//
// If a State is an accepting state, it will also have several additional
// properties:
//
// * `regex`: A regular expression that is used to extract parameters from paths
// that reached this accepting state.
// * `handlers`: Information on how to convert the list of captures into calls
// to registered handlers with the specified parameters
// * `types`: How many static, dynamic or star segments in this route. Used to
// decide which route to use if multiple registered routes match a path.
//
// Currently, State is implemented naively by looping over `nextStates` and
// comparing a character specification against a character. A more efficient
// implementation would use a hash of keys pointing at one or more next states.
function State(charSpec) {
this.charSpec = charSpec;
this.nextStates = [];
}
State.prototype = {
get: function(charSpec) {
var nextStates = this.nextStates;
for (var i=0, l=nextStates.length; i<l; i++) {
var child = nextStates[i];
var isEqual = child.charSpec.validChars === charSpec.validChars;
isEqual = isEqual && child.charSpec.invalidChars === charSpec.invalidChars;
if (isEqual) { return child; }
}
},
put: function(charSpec) {
var state;
// If the character specification already exists in a child of the current
// state, just return that state.
if (state = this.get(charSpec)) { return state; }
// Make a new state for the character spec
state = new State(charSpec);
// Insert the new state as a child of the current state
this.nextStates.push(state);
// If this character specification repeats, insert the new state as a child
// of itself. Note that this will not trigger an infinite loop because each
// transition during recognition consumes a character.
if (charSpec.repeat) {
state.nextStates.push(state);
}
// Return the new state
return state;
},
// Find a list of child states matching the next character
match: function(ch) {
// DEBUG "Processing `" + ch + "`:"
var nextStates = this.nextStates,
child, charSpec, chars;
// DEBUG " " + debugState(this)
var returned = [];
for (var i=0, l=nextStates.length; i<l; i++) {
child = nextStates[i];
charSpec = child.charSpec;
if (typeof (chars = charSpec.validChars) !== 'undefined') {
if (chars.indexOf(ch) !== -1) { returned.push(child); }
} else if (typeof (chars = charSpec.invalidChars) !== 'undefined') {
if (chars.indexOf(ch) === -1) { returned.push(child); }
}
}
return returned;
}
/** IF DEBUG
, debug: function() {
var charSpec = this.charSpec,
debug = "[",
chars = charSpec.validChars || charSpec.invalidChars;
if (charSpec.invalidChars) { debug += "^"; }
debug += chars;
debug += "]";
if (charSpec.repeat) { debug += "+"; }
return debug;
}
END IF **/
};
/** IF DEBUG
function debug(log) {
console.log(log);
}
function debugState(state) {
return state.nextStates.map(function(n) {
if (n.nextStates.length === 0) { return "( " + n.debug() + " [accepting] )"; }
return "( " + n.debug() + " <then> " + n.nextStates.map(function(s) { return s.debug() }).join(" or ") + " )";
}).join(", ")
}
END IF **/
// This is a somewhat naive strategy, but should work in a lot of cases
// A better strategy would properly resolve /posts/:id/new and /posts/edit/:id.
//
// This strategy generally prefers more static and less dynamic matching.
// Specifically, it
//
// * prefers fewer stars to more, then
// * prefers using stars for less of the match to more, then
// * prefers fewer dynamic segments to more, then
// * prefers more static segments to more
function sortSolutions(states) {
return states.sort(function(a, b) {
if (a.types.stars !== b.types.stars) { return a.types.stars - b.types.stars; }
if (a.types.stars) {
if (a.types.statics !== b.types.statics) { return b.types.statics - a.types.statics; }
if (a.types.dynamics !== b.types.dynamics) { return b.types.dynamics - a.types.dynamics; }
}
if (a.types.dynamics !== b.types.dynamics) { return a.types.dynamics - b.types.dynamics; }
if (a.types.statics !== b.types.statics) { return b.types.statics - a.types.statics; }
return 0;
});
}
function recognizeChar(states, ch) {
var nextStates = [];
for (var i=0, l=states.length; i<l; i++) {
var state = states[i];
nextStates = nextStates.concat(state.match(ch));
}
return nextStates;
}
var oCreate = Object.create || function(proto) {
function F() {}
F.prototype = proto;
return new F();
};
function RecognizeResults(queryParams) {
this.queryParams = queryParams || {};
}
RecognizeResults.prototype = oCreate({
splice: Array.prototype.splice,
slice: Array.prototype.slice,
push: Array.prototype.push,
length: 0,
queryParams: null
});
function findHandler(state, path, queryParams) {
var handlers = state.handlers, regex = state.regex;
var captures = path.match(regex), currentCapture = 1;
var result = new RecognizeResults(queryParams);
for (var i=0, l=handlers.length; i<l; i++) {
var handler = handlers[i], names = handler.names, params = {};
for (var j=0, m=names.length; j<m; j++) {
params[names[j]] = captures[currentCapture++];
}
result.push({ handler: handler.handler, params: params, isDynamic: !!names.length });
}
return result;
}
function addSegment(currentState, segment) {
segment.eachChar(function(ch) {
var state;
currentState = currentState.put(ch);
});
return currentState;
}
// The main interface
var RouteRecognizer = function() {
this.rootState = new State();
this.names = {};
};
RouteRecognizer.prototype = {
add: function(routes, options) {
var currentState = this.rootState, regex = "^",
types = { statics: 0, dynamics: 0, stars: 0 },
handlers = [], allSegments = [], name;
var isEmpty = true;
for (var i=0, l=routes.length; i<l; i++) {
var route = routes[i], names = [];
var segments = parse(route.path, names, types);
allSegments = allSegments.concat(segments);
for (var j=0, m=segments.length; j<m; j++) {
var segment = segments[j];
if (segment instanceof EpsilonSegment) { continue; }
isEmpty = false;
// Add a "/" for the new segment
currentState = currentState.put({ validChars: "/" });
regex += "/";
// Add a representation of the segment to the NFA and regex
currentState = addSegment(currentState, segment);
regex += segment.regex();
}
var handler = { handler: route.handler, names: names };
handlers.push(handler);
}
if (isEmpty) {
currentState = currentState.put({ validChars: "/" });
regex += "/";
}
currentState.handlers = handlers;
currentState.regex = new RegExp(regex + "$");
currentState.types = types;
if (name = options && options.as) {
this.names[name] = {
segments: allSegments,
handlers: handlers
};
}
},
handlersFor: function(name) {
var route = this.names[name], result = [];
if (!route) { throw new Error("There is no route named " + name); }
for (var i=0, l=route.handlers.length; i<l; i++) {
result.push(route.handlers[i]);
}
return result;
},
hasRoute: function(name) {
return !!this.names[name];
},
generate: function(name, params) {
var route = this.names[name], output = "";
if (!route) { throw new Error("There is no route named " + name); }
var segments = route.segments;
for (var i=0, l=segments.length; i<l; i++) {
var segment = segments[i];
if (segment instanceof EpsilonSegment) { continue; }
output += "/";
output += segment.generate(params);
}
if (output.charAt(0) !== '/') { output = '/' + output; }
if (params && params.queryParams) {
output += this.generateQueryString(params.queryParams, route.handlers);
}
return output;
},
generateQueryString: function(params, handlers) {
var pairs = [];
var keys = [];
for(var key in params) {
if (params.hasOwnProperty(key)) {
keys.push(key);
}
}
keys.sort();
for (var i = 0, len = keys.length; i < len; i++) {
key = keys[i];
var value = params[key];
if (value == null) {
continue;
}
var pair = key;
if (isArray(value)) {
for (var j = 0, l = value.length; j < l; j++) {
var arrayPair = key + '[]' + '=' + encodeURIComponent(value[j]);
pairs.push(arrayPair);
}
} else {
pair += "=" + encodeURIComponent(value);
pairs.push(pair);
}
}
if (pairs.length === 0) { return ''; }
return "?" + pairs.join("&");
},
parseQueryString: function(queryString) {
var pairs = queryString.split("&"), queryParams = {};
for(var i=0; i < pairs.length; i++) {
var pair = pairs[i].split('='),
key = decodeURIComponent(pair[0]),
keyLength = key.length,
isArray = false,
value;
if (pair.length === 1) {
value = 'true';
} else {
//Handle arrays
if (keyLength > 2 && key.slice(keyLength -2) === '[]') {
isArray = true;
key = key.slice(0, keyLength - 2);
if(!queryParams[key]) {
queryParams[key] = [];
}
}
value = pair[1] ? decodeURIComponent(pair[1]) : '';
}
if (isArray) {
queryParams[key].push(value);
} else {
queryParams[key] = decodeURIComponent(value);
}
}
return queryParams;
},
recognize: function(path) {
var states = [ this.rootState ],
pathLen, i, l, queryStart, queryParams = {},
isSlashDropped = false;
path = decodeURI(path);
queryStart = path.indexOf('?');
if (queryStart !== -1) {
var queryString = path.substr(queryStart + 1, path.length);
path = path.substr(0, queryStart);
queryParams = this.parseQueryString(queryString);
}
// DEBUG GROUP path
if (path.charAt(0) !== "/") { path = "/" + path; }
pathLen = path.length;
if (pathLen > 1 && path.charAt(pathLen - 1) === "/") {
path = path.substr(0, pathLen - 1);
isSlashDropped = true;
}
for (i=0, l=path.length; i<l; i++) {
states = recognizeChar(states, path.charAt(i));
if (!states.length) { break; }
}
// END DEBUG GROUP
var solutions = [];
for (i=0, l=states.length; i<l; i++) {
if (states[i].handlers) { solutions.push(states[i]); }
}
states = sortSolutions(solutions);
var state = solutions[0];
if (state && state.handlers) {
// if a trailing slash was dropped and a star segment is the last segment
// specified, put the trailing slash back
if (isSlashDropped && state.regex.source.slice(-5) === "(.+)$") {
path = path + "/";
}
return findHandler(state, path, queryParams);
}
}
};
__exports__.RouteRecognizer = RouteRecognizer;
function Target(path, matcher, delegate) {
this.path = path;
this.matcher = matcher;
this.delegate = delegate;
}
Target.prototype = {
to: function(target, callback) {
var delegate = this.delegate;
if (delegate && delegate.willAddRoute) {
target = delegate.willAddRoute(this.matcher.target, target);
}
this.matcher.add(this.path, target);
if (callback) {
if (callback.length === 0) { throw new Error("You must have an argument in the function passed to `to`"); }
this.matcher.addChild(this.path, target, callback, this.delegate);
}
return this;
}
};
function Matcher(target) {
this.routes = {};
this.children = {};
this.target = target;
}
Matcher.prototype = {
add: function(path, handler) {
this.routes[path] = handler;
},
addChild: function(path, target, callback, delegate) {
var matcher = new Matcher(target);
this.children[path] = matcher;
var match = generateMatch(path, matcher, delegate);
if (delegate && delegate.contextEntered) {
delegate.contextEntered(target, match);
}
callback(match);
}
};
function generateMatch(startingPath, matcher, delegate) {
return function(path, nestedCallback) {
var fullPath = startingPath + path;
if (nestedCallback) {
nestedCallback(generateMatch(fullPath, matcher, delegate));
} else {
return new Target(startingPath + path, matcher, delegate);
}
};
}
function addRoute(routeArray, path, handler) {
var len = 0;
for (var i=0, l=routeArray.length; i<l; i++) {
len += routeArray[i].path.length;
}
path = path.substr(len);
var route = { path: path, handler: handler };
routeArray.push(route);
}
function eachRoute(baseRoute, matcher, callback, binding) {
var routes = matcher.routes;
for (var path in routes) {
if (routes.hasOwnProperty(path)) {
var routeArray = baseRoute.slice();
addRoute(routeArray, path, routes[path]);
if (matcher.children[path]) {
eachRoute(routeArray, matcher.children[path], callback, binding);
} else {
callback.call(binding, routeArray);
}
}
}
}
RouteRecognizer.prototype.map = function(callback, addRouteCallback) {
var matcher = new Matcher();
callback(generateMatch("", matcher, this.delegate));
eachRoute([], matcher, function(route) {
if (addRouteCallback) { addRouteCallback(this, route); }
else { this.add(route); }
}, this);
};
})(window);

517
public/javascripts/smoke.js Normal file
View File

@ -0,0 +1,517 @@
/*
SMOKE.JS - 0.1.3
(c) 2011-2013 Jonathan Youngblood
demos / documentation: http://smoke-js.com/
*/
;(function(window, document) {
/*jslint browser: true, onevar: true, undef: true, nomen: false, eqeqeq: true, bitwise: true, regexp: true, newcap: true, immed: true */
var smoke = {
smoketimeout: [],
init: false,
zindex: 40000,
i: 0,
bodyload: function(id) {
var ff = document.createElement('div');
ff.setAttribute('id','smoke-out-'+id);
ff.className = 'smoke-base';
ff.style.zIndex = smoke.zindex;
smoke.zindex++;
document.body.appendChild(ff);
},
newdialog: function() {
var newid = new Date().getTime();
newid = Math.random(1,99) + newid;
if (!smoke.init) {
smoke.listen(window,"load", function() {
smoke.bodyload(newid);
});
} else {
smoke.bodyload(newid);
}
return newid;
},
forceload: function() {},
build: function (e, f) {
smoke.i++;
f.stack = smoke.i;
e = e.replace(/\n/g,'<br />');
e = e.replace(/\r/g,'<br />');
var prompt = '',
ok = 'OK',
cancel = 'Cancel',
classname = '',
buttons = '',
box;
if (f.type === 'prompt') {
prompt =
'<div class="smoke-dialog-prompt">'+
'<input class="input" id="smoke-dialog-input-'+f.newid+'" type="text" ' + (f.params.value ? 'value="' + f.params.value + '"' : '') + ' />'+
'</div>';
}
if (f.params.ok) {
ok = f.params.ok;
}
if (f.params.cancel) {
cancel = f.params.cancel;
}
if (f.params.classname) {
classname = f.params.classname;
}
if (f.type !== 'signal') {
buttons = '<div class="smoke-dialog-buttons">';
if (f.type === 'alert') {
buttons +=
'<button class="btn btn-md btn-round" id="alert-ok-'+f.newid+'">'+ok+'</button>';
}
else if (f.type === 'quiz') {
if (f.params.button_1) {
buttons +=
'<button class="btn btn-md btn-round quiz-button" id="'+f.type+'-ok1-'+f.newid+'">'+f.params.button_1+'</button>';
}
if (f.params.button_2) {
buttons +=
'<button class="btn btn-md btn-round quiz-button" id="'+f.type+'-ok2-'+f.newid+'">'+f.params.button_2+'</button>';
}
if (f.params.button_3) {
buttons +=
'<button class="btn btn-md btn-round quiz-button" id="'+f.type+'-ok3-'+f.newid+'">'+f.params.button_3+'</button>';
}
if (f.params.button_cancel) {
buttons +=
'<button id="'+f.type+'-cancel-'+f.newid+'" class="btn btn-md btn-round cancel">'+f.params.button_cancel+'</button>';
}
}
else if (f.type === 'prompt' || f.type === 'confirm') {
if (f.params.reverseButtons) {
buttons +=
'<button class="btn btn-md btn-round btn-primary" id="'+f.type+'-ok-'+f.newid+'">'+ok+'</button>' +
'<button class="btn btn-md btn-round cancel" id="'+f.type+'-cancel-'+f.newid+'">'+cancel+'</button>';
} else {
buttons +=
'<button class="btn btn-md btn-round cancel" id="'+f.type+'-cancel-'+f.newid+'">'+cancel+'</button>'+
'<button class="btn btn-md btn-round btn-primary" id="'+f.type+'-ok-'+f.newid+'">'+ok+'</button>';
}
}
buttons += '</div>';
}
box =
'<div class="smoke-dialog smoke '+classname+'">'+
'<div class="smoke-dialog-inner">'+
e+
prompt+
buttons+
'</div>'+
'</div>';
if (!smoke.init) {
smoke.listen(window,"load", function() {
smoke.finishbuild(e,f,box);
});
} else{
smoke.finishbuild(e,f,box);
}
},
finishbuild: function(e, f, box) {
var ff = document.getElementById('smoke-out-'+f.newid);
ff.className = 'smoke-base smoke-visible smoke-' + f.type;
ff.innerHTML = box;
while (ff.innerHTML === "") {
ff.innerHTML = box;
}
if (smoke.smoketimeout[f.newid]) {
clearTimeout(smoke.smoketimeout[f.newid]);
}
// smoke.listen(
// document.getElementById('smoke-bg-'+f.newid),
// "click",
// function () {
// smoke.destroy(f.type, f.newid);
// if (f.type === 'prompt' || f.type === 'confirm' || f.type === 'quiz') {
// f.callback(false);
// } else if (f.type === 'alert' && typeof f.callback !== 'undefined') {
// f.callback();
// }
// }
// );
switch (f.type) {
case 'alert':
smoke.finishbuildAlert(e, f, box);
break;
case 'confirm':
smoke.finishbuildConfirm(e, f, box);
break;
case 'quiz':
smoke.finishbuildQuiz(e, f, box);
break;
case 'prompt':
smoke.finishbuildPrompt(e, f, box);
break;
case 'signal':
smoke.finishbuildSignal(e, f, box);
break;
default:
throw "Unknown type: " + f.type;
}
},
finishbuildAlert: function (e, f, box) {
smoke.listen(
document.getElementById('alert-ok-'+f.newid),
"click",
function () {
smoke.destroy(f.type, f.newid);
if (typeof f.callback !== 'undefined') {
f.callback();
}
}
);
document.onkeyup = function (e) {
if (!e) {
e = window.event;
}
if (e.keyCode === 13 || e.keyCode === 32 || e.keyCode === 27) {
smoke.destroy(f.type, f.newid);
if (typeof f.callback !== 'undefined') {
f.callback();
}
}
};
},
finishbuildConfirm: function (e, f, box) {
smoke.listen(
document.getElementById('confirm-cancel-' + f.newid),
"click",
function ()
{
smoke.destroy(f.type, f.newid);
f.callback(false);
}
);
smoke.listen(
document.getElementById('confirm-ok-' + f.newid),
"click",
function ()
{
smoke.destroy(f.type, f.newid);
f.callback(true);
}
);
document.onkeyup = function (e) {
if (!e) {
e = window.event;
}
if (e.keyCode === 13 || e.keyCode === 32) {
smoke.destroy(f.type, f.newid);
f.callback(true);
} else if (e.keyCode === 27) {
smoke.destroy(f.type, f.newid);
f.callback(false);
}
};
},
finishbuildQuiz: function (e, f, box) {
var a, b, c;
smoke.listen(
document.getElementById('quiz-cancel-' + f.newid),
"click",
function ()
{
smoke.destroy(f.type, f.newid);
f.callback(false);
}
);
if (a = document.getElementById('quiz-ok1-'+f.newid))
smoke.listen(
a,
"click",
function () {
smoke.destroy(f.type, f.newid);
f.callback(a.innerHTML);
}
);
if (b = document.getElementById('quiz-ok2-'+f.newid))
smoke.listen(
b,
"click",
function () {
smoke.destroy(f.type, f.newid);
f.callback(b.innerHTML);
}
);
if (c = document.getElementById('quiz-ok3-'+f.newid))
smoke.listen(
c,
"click",
function () {
smoke.destroy(f.type, f.newid);
f.callback(c.innerHTML);
}
);
document.onkeyup = function (e) {
if (!e) {
e = window.event;
}
if (e.keyCode === 27) {
smoke.destroy(f.type, f.newid);
f.callback(false);
}
};
},
finishbuildPrompt: function (e, f, box) {
var pi = document.getElementById('smoke-dialog-input-'+f.newid);
setTimeout(function () {
pi.focus();
pi.select();
}, 100);
smoke.listen(
document.getElementById('prompt-cancel-'+f.newid),
"click",
function () {
smoke.destroy(f.type, f.newid);
f.callback(false);
}
);
smoke.listen(
document.getElementById('prompt-ok-'+f.newid),
"click",
function () {
smoke.destroy(f.type, f.newid);
f.callback(pi.value);
}
);
document.onkeyup = function (e) {
if (!e) {
e = window.event;
}
if (e.keyCode === 13) {
smoke.destroy(f.type, f.newid);
f.callback(pi.value);
} else if (e.keyCode === 27) {
smoke.destroy(f.type, f.newid);
f.callback(false);
}
};
},
finishbuildSignal: function (e, f, box) {
document.onkeyup = function (e) {
if (!e) {
e = window.event;
}
if (e.keyCode === 27) {
smoke.destroy(f.type, f.newid);
if (typeof f.callback !== 'undefined') {
f.callback();
}
}
};
smoke.smoketimeout[f.newid] = setTimeout(function () {
smoke.destroy(f.type, f.newid);
if (typeof f.callback !== 'undefined') {
f.callback();
}
}, f.timeout);
},
destroy: function (type,id) {
var box = document.getElementById('smoke-out-'+id);
if (type !== 'quiz') {
var okButton = document.getElementById(type+'-ok-'+id);
}
var cancelButton = document.getElementById(type+'-cancel-'+id);
box.className = 'smoke-base';
if (okButton) {
smoke.stoplistening(okButton, "click", function() {});
document.onkeyup = null;
}
if (type === 'quiz') {
var quiz_buttons = document.getElementsByClassName("quiz-button");
for (var i = 0; i < quiz_buttons.length; i++) {
smoke.stoplistening(quiz_buttons[i], "click", function() {});
document.onkeyup = null;
}
}
if (cancelButton) {
smoke.stoplistening(cancelButton, "click", function() {});
}
smoke.i = 0;
box.innerHTML = '';
},
alert: function (e, f, g) {
if (typeof g !== 'object') {
g = false;
}
var id = smoke.newdialog();
smoke.build(e, {
type: 'alert',
callback: f,
params: g,
newid: id
});
},
signal: function (e, f, g) {
if (typeof g !== 'object') {
g = false;
}
var duration = 5000;
if (g.duration !== 'undefined'){
duration = g.duration;
}
var id = smoke.newdialog();
smoke.build(e, {
type: 'signal',
callback: f,
timeout: duration,
params: g,
newid: id
});
},
confirm: function (e, f, g) {
if (typeof g !== 'object') {
g = false;
}
var id = smoke.newdialog();
smoke.build(e, {
type: 'confirm',
callback: f,
params: g,
newid: id
});
},
quiz: function (e, f, g) {
if (typeof g !== 'object') {
g = false;
}
var id = smoke.newdialog();
smoke.build(e, {
type: 'quiz',
callback: f,
params: g,
newid: id
});
},
prompt: function (e, f, g) {
if (typeof g !== 'object') {
g = false;
}
var id = smoke.newdialog();
return smoke.build(e,{type:'prompt',callback:f,params:g,newid:id});
},
listen: function (e, f, g) {
if (e.addEventListener) {
return e.addEventListener(f, g, false);
}
if (e.attachEvent) {
return e.attachEvent('on'+f, g);
}
return false;
},
stoplistening: function (e, f, g) {
if (e.removeEventListener) {
return e.removeEventListener(f, g, false);
}
if (e.detachEvent) {
return e.detachEvent('on'+f, g);
}
return false;
}
};
smoke.init = true;
if (typeof module != 'undefined' && module.exports) {
module.exports = smoke;
}
else if (typeof define === 'function' && define.amd) {
define('smoke', [], function() {
return smoke;
});
}
else {
this.smoke = smoke;
}
})(window, document);

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,124 @@
/*
SpacedeckAccount
This module contains functions dealing with the spacedeck account.
*/
SpacedeckAccount = {
data: {
account_confirmed_sent: false,
account_tab: 'invoices',
password_change_error: null,
feedback_text: ""
},
methods: {
show_account: function(user) {
this.activate_dropdown('account');
this.load_subscription();
this.load_billing();
},
account_save_user_digest: function(val) {
this.user.preferences.daily_digest = val;
this.save_user(function(){
});
},
account_save_user_notifications: function(val) {
this.user.preferences.email_notifications = val;
this.save_user(function(){
});
},
save_user_email: function() {
this.save_user(function() {
}.bind(this));
},
save_user_language: function(lang) {
localStorage.lang = lang;
if (this.user.preferences) {
this.user.preferences.language = lang;
this.save_user(function() {
window._spacedeck_location_change = true;
location.href="/spaces";
}.bind(this));
}
},
save_user: function(on_success) {
if (this.user.email_changed) {
this.user.confirmed_at = null;
}
window._spacedeck_location_change = true;
save_user(this.user, function(user) {
if (on_success) on_success();
else location.href="/spaces";
}.bind(this), function(xhr){
console.error(xhr)
});
},
save_user_password: function(oldPass, newPass, newPassConfirm) {
this.password_change_error = null;
if (!oldPass) {
this.password_change_error = "Current password required";
return;
}
if (!newPass || !newPassConfirm) {
this.password_change_error = "New password/password confirmation required";
return;
}
if (newPass!=newPassConfirm) {
this.password_change_error = "New Passwords do not match";
return;
}
if (newPass.length < 6) {
this.password_change_error = "New Password to short";
return;
}
save_user_password(this.user, oldPass, newPass, function() {
alert("OK. Password Changed.");
this.password_change_current = "";
this.password_change_new = "";
this.password_change_new_confirmation = "";
}.bind(this), function(xhr) {
if (xhr.status == 403) {
this.password_change_error = "Old Password not correct";
} else {
this.password_change_error = "Something went wrong. Please try again later.";
}
}.bind(this));
},
confirm_again: function() {
resent_confirm_mail(this.user, function(re) {
this.account_confirmed_sent = true;
alert(__("confirm_again"));
}.bind(this), function(xhr){
console.error(xhr);
alert("Something went wrong, please try again.");
});
},
confirm_account: function(token) {
confirm_user(this.user, token, function(re) {
smoke.alert(__("confirmed"), function() {
this.redirect_to("/spaces");
}.bind(this));
}.bind(this), function(xhr) {
console.error(xhr);
alert(xhr.responseText);
this.redirect_to("/spaces");
}.bind(this));
},
}
}

View File

@ -0,0 +1,81 @@
var SpacedeckAvatars = {
data: {
uploading_avatar: false,
uploading_folder_avatar: false,
uploading_cover: false
},
methods: {
save_avatar_image: function(input, object_type, object) {
if (input.files.length > 0) {
var f = input.files[0];
var finished = function() {
this.uploading_avatar = false;
this.uploading_cover = false;
this.uploading_folder_avatar = false;
}.bind(this);
if (!_.include(["image/jpeg","image/jpg","image/png","image/gif"], f.type)) {
alert("Unsupported file type. Please upload JPEG, PNG or GIF.");
finished();
return;
}
if (f.size > 1024*1024*3) {
alert("File must be smaller than 3 megabytes.");
finished();
return;
}
save_avatar_file(object_type, object, f, function(res) {
finished();
this.uploading_avatar = false;
this.uploading_cover = false;
var newUri = res.avatar_thumb_uri;
object.avatar_thumb_uri = newUri + "?cachebuster=" + Math.random();
}.bind(this), function(error) {
alert("Upload failed: " + error);
finished();
});
}
},
save_space_avatar_image: function(viewmodel) {
this.uploading_avatar = true;
var func = this.save_avatar_image.bind(this);
func(viewmodel.$event.target, "space", this.active_space);
},
save_folder_avatar_image: function(viewmodel) {
this.uploading_folder_avatar = true;
var func = this.save_avatar_image.bind(this);
func(viewmodel.$event.target, "space", this.active_folder);
},
save_user_avatar_image: function(viewmodel) {
this.uploading_avatar = true;
var func = this.save_avatar_image.bind(this);
func(viewmodel.$event.target, "user", viewmodel.$root.user);
},
delete_user_avatar_image: function() {
this.user.avatar_original_uri = "";
this.user.avatar_thumb_uri = "";
save_user(this.user,function(updated) {
}.bind(this));
},
save_user_background_image: function(viewmodel) {
var input = viewmodel.$event.target;
this.uploading_cover = true;
var f = input.files[0];
save_user_background_file(this.user, f, function(res) {
this.user.background_original_uri = res.background_original_uri;
this.uploading_cover = false;
}.bind(this));
}
}
}

View File

@ -0,0 +1,670 @@
/*
SpacedeckBoardArtifacts
This module contains functions dealing with absolute positioned Board Section Artifacts.
*/
var SpacedeckBoardArtifacts = {
update_board_artifact_viewmodel: function(a) {
var mt = this.artifact_major_type(a);
a.view = {
_id: a._id,
classes: this.artifact_classes(a),
style: this.artifact_style(a),
grid_style: this.artifact_style(a, true),
inner_style: this.artifact_inner_style(a),
text_cell_style: this.artifact_text_cell_style(a),
vector_svg: this.artifact_vector_svg(a),
payload_uri: a.payload_uri,
thumbnail_uri: this.artifact_thumbnail_uri(a),
major_type: mt,
text_blank: this.artifact_is_text_blank(a),
payload_alternatives: a.payload_alternatives,
filename: this.artifact_filename(a),
oembed_html: this.artifact_oembed_html(a),
link: this.artifact_link(a),
link_caption: this.artifact_link_caption(a),
interactive: 0
};
if ((mt == "audio" || mt == "video") && !a.player_view) {
a.player_view = {
state: "stop",
current_time_string: "",
total_time_string: "",
current_time_float: 0.0,
inpoint_float: 0.0,
outpoint_float: 0.0
};
}
if ("medium_for_object" in this) {
var medium = this.medium_for_object[a._id];
if (medium && a._id != this.editing_artifact_id) {
medium.value(a.description);
}
}
},
is_artifact_audio: function(a) {
if (a) {
return a.mime.match("audio");
} else return false;
},
artifact_filename: function(a) {
if (a.payload_uri) {
return a.payload_uri.replace(/.*\//g,"");
} else {
return "";
}
},
artifact_link: function(a) {
if (a.meta && a.meta.link_uri) {
return a.meta.link_uri;
} else {
return "";
}
},
artifact_link_caption: function(a) {
if (a.meta && a.meta.link_uri) {
var parts = a.meta.link_uri.split("/");
// scheme://domain.foo/...
// 0 1 2
if (parts.length>2) {
return parts[2];
}
return "Link";
} else {
return "";
}
},
artifact_is_selected: function(a) {
if (!a) return false;
return !!this.selected_artifacts_dict[a._id];
},
artifact_is_text_blank: function(a) {
if(a.description){
var filtered = a.description.replace(/<[^>]+>/g,"").replace(/\s/g,"");
return (filtered.length<1);
}else{
return false;
}
},
artifact_classes: function(a) {
clzs = ["artifact", "artifact-"+this.artifact_major_type(a), a.mime.replace("/","-")];
if (this.artifact_is_selected(a) && this.editing_artifact_id!=a._id) clzs.push("selected");
if (!a._id) clzs.push("creating");
if (a.style) {
clzs.push("align-"+a.style.align);
clzs.push("align-"+a.style.valign);
}
clzs.push("state-"+a.state);
if (this.artifact_is_text_blank(a)) {
clzs.push("text-blank");
}
if (a.locked) {
clzs.push("locked");
}
return clzs.join(" ");
},
artifact_inner_style: function(a) {
var styles = [];
if (a.style) {
var svg_style = ((a.mime.match("vector") || a.mime.match("shape")) && a.style.shape!="square");
if (!svg_style) {
if (a.style.stroke) {
styles.push("border-width:"+a.style.stroke+"px");
styles.push("border-style:"+(a.style.stroke_style||"solid"));
}
if (a.style.stroke_color) {
styles.push("border-color:"+a.style.stroke_color);
}
if (a.style.border_radius) {
styles.push("border-radius:"+a.style.border_radius+"px");
}
}
if (a.style.fill_color && !svg_style) {
styles.push("background-color:"+a.style.fill_color);
}
if (a.style.text_color) {
styles.push("color:"+a.style.text_color);
}
var filters = [];
if (!isNaN(a.style.brightness) && a.style.brightness != 100) {
filters.push("brightness("+a.style.brightness+"%)");
}
if (!isNaN(a.style.contrast) && a.style.contrast != 100) {
filters.push("contrast("+a.style.contrast+"%)");
}
if (!isNaN(a.style.opacity) && a.style.opacity != 100) {
filters.push("opacity("+a.style.opacity+"%)");
}
if (!isNaN(a.style.hue) && a.style.hue) {
filters.push("hue-rotate("+a.style.hue+"deg)");
}
if (!isNaN(a.style.saturation) && a.style.saturation != 100) {
filters.push("saturate("+a.style.saturation+"%)");
}
if (!isNaN(a.style.blur) && a.style.blur) {
filters.push("blur("+a.style.blur+"px)");
}
if (filters.length) {
styles.push("-webkit-filter:"+filters.join(" "));
styles.push("filter:"+filters.join(" "));
}
}
return styles.join(";");
},
artifact_text_cell_style: function(a, for_text_editor) {
var styles = [];
if (a.style) {
if (a.style.padding_left) styles.push("padding-left:"+a.style.padding_left+"px");
if (a.style.padding_right) styles.push("padding-right:"+a.style.padding_right+"px");
if (a.style.padding_top) styles.push("padding-top:"+a.style.padding_top+"px");
if (a.style.padding_bottom) styles.push("padding-bottom:"+a.style.padding_bottom+"px");
}
return styles.join(";");
},
artifact_style: function(a, for_grid) {
var styles = [];
var z = 0;
if (a.board) {
z = a.board.z;
if (z<0) z=0; // fix negative z-index
styles = [
"left:" +a.board.x+"px",
"top:" +a.board.y+"px",
"width:" +a.board.w+"px",
"height:"+a.board.h+"px",
"z-index:"+z
];
}
if (a.style) {
if (a.style.margin_left) styles.push("margin-left:"+a.style.margin_left+"px");
if (a.style.margin_right) styles.push("margin-right:"+a.style.margin_right+"px");
if (a.style.margin_top) styles.push("margin-top:"+a.style.margin_top+"px");
if (a.style.margin_bottom) styles.push("margin-bottom:"+a.style.margin_bottom+"px");
}
// FIXME: via class logic?
if (a.mime.match("vector")) {
styles.push("overflow:visible");
}
return styles.join(";");
},
artifact_major_type: function(a) {
if (a.mime.match("oembed")) return "oembed";
if (a.mime.match("zone")) return "zone";
if (a.mime.match("svg")) return "svg";
if (a.mime.match("image")) return "image";
if (a.mime.match("pdf")) return "image";
if (a.mime.match("video")) return "video";
if (a.mime.match("audio")) return "audio";
if (a.mime.match("website")) return "website";
if (a.mime.match("vector")) return "vector";
if (a.mime.match("shape")) return "shape";
if (a.mime.match("placeholder")) return "placeholder";
if (a.mime.match("text") || a.mime.match("note")) return "text";
return "file";
},
artifact_thumbnail_uri: function(a) {
if (a.payload_thumbnail_big_uri && a.board) {
if (a.board.w>800) {
return a.payload_thumbnail_big_uri;
}
}
return a.payload_thumbnail_medium_uri || a.payload_thumbnail_big_uri || a.payload_thumbnail_web_uri || "";
},
artifact_oembed_html: function(a) {
if (this.artifact_major_type(a) != "oembed") return "";
var parts = a.mime.split("/")[1].split("-");
var type = parts[0];
var provider = parts[1];
if (!a.meta || !a.meta.link_uri) {
console.log("missing meta / link_uri: ",a);
console.log("type/provider: ",type,provider);
return ("missing metadata: "+a._id);
}
if (provider=="youtube") {
var vid = a.meta.link_uri.match(/(v=|\/)([a-zA-Z0-9\-_]{11})/);
if (vid && vid.length>2) {
var uri = "https://youtube.com/embed/"+vid[2];
return "<iframe frameborder=0 allowfullscreen src=\""+uri+"?showinfo=0&rel=0&controls=0\"></iframe>";
} else return "Can't resolve: "+a.payload_uri;
} else if (provider=="dailymotion") {
var match = a.meta.link_uri.match(/dailymotion.com\/video\/([^<]*)/);
if (match && match.length>1) {
var uri = "https://www.dailymotion.com/embed/video/"+match[1];
return "<iframe frameborder=0 allowfullscreen src=\""+uri+"\"></iframe>";
} else return "Can't resolve: "+a.payload_uri;
} else if (provider=="vimeo") {
var match = a.meta.link_uri.match(/https?:\/\/(www\.)?vimeo.com\/(\d+)($|\/)/);
if (match) {
var uri = "https://player.vimeo.com/video/"+match[2];
return "<iframe frameborder=0 allowfullscreen src=\""+uri+"\"></iframe>";
} else return "Can't resolve: "+a.payload_uri;
} else if (provider=="soundcloud") {
return '<iframe width="100%" height="166" scrolling="no" frameborder="no" src="https://w.soundcloud.com/player/?url='+a.meta.link_uri.replace(":", "%3A")+'"></iframe>';
} else if (provider=="spacedeck") {
return ""; //<iframe frameborder=0 allowfullscreen src=\""+ a.meta.link_uri+"\"></iframe>
} else {
return "Don't know how to embed "+a.mime+".";
}
},
artifact_vector_svg: function(a) {
var mtype = this.artifact_major_type(a);
if (mtype != "vector" && mtype != "shape") return "";
var shape = a.style.shape || "";
var padding = 32 + a.style.stroke*2;
var path_svg;
var fill = "";
if (mtype == "vector") {
path_svg = render_vector_drawing(a, padding);
fill = "fill:none";
} else {
path_svg = render_vector_shape(a, padding);
fill = "fill:"+a.style.fill_color+";";
padding = 0;
}
var margin = padding;
var svg = "<svg xmlns='http://www.w3.org/2000/svg' width='"+(a.board.w+2*padding)+"' height='"+(a.board.h+2*padding)+"' ";
svg += "style='margin-left:"+(-margin)+"px;margin-top:"+(-margin)+"px;stroke-width:"+a.style.stroke+";stroke:"+a.style.stroke_color+";"+fill+"'>";
svg += path_svg;
svg += "</svg>";
return svg;
},
/* whiteboard layouting functions */
artifact_enclosing_rect: function(arts) {
if (arts.length==0) return null;
r = {
x1: parseInt(_.min(arts.map(function(a){return a.board.x}))),
y1: parseInt(_.min(arts.map(function(a){return a.board.y}))),
x2: parseInt(_.max(arts.map(function(a){return a.board.x+a.board.w}))),
y2: parseInt(_.max(arts.map(function(a){return a.board.y+a.board.h})))
};
r.x=r.x1;
r.y=r.y1;
r.w=r.x2-r.x1;
r.h=r.y2-r.y1;
return r;
},
artifact_selection_rect: function() {
return this.artifact_enclosing_rect(this.selected_artifacts());
},
rects_intersecting: function(r1,r2) {
if ( (r1.x+r1.w < r2.x)
|| (r1.x > r2.x+r2.w)
|| (r1.y+r1.h < r2.y)
|| (r1.y > r2.y+r2.h) ) return false;
return true;
},
artifacts_in_rect: function(rect) {
return _.filter(this.active_space_artifacts, function(a) {
return this.rects_intersecting(a.board, rect);
}.bind(this));
},
layout_stack_top: function() {
this.begin_transaction();
var rect = this.artifact_selection_rect();
var overlapping = _.filter(this.artifacts_in_rect(rect), function(a){return !this.is_selected(a)}.bind(this));
var max_z = _.max(overlapping,function(a){ return a.board.z; });
if (max_z.board) {
max_z = max_z.board.z + 1;
} else {
max_z = 1;
}
this.update_selected_artifacts(function(a) {
return { board: _.extend(a.board, { z: max_z }) };
});
},
layout_stack_bottom: function() {
this.begin_transaction();
var rect = this.artifact_selection_rect();
var overlapping = _.filter(this.artifacts_in_rect(rect), function(a){return !this.is_selected(a);}.bind(this));
var min_z = _.min(overlapping,function(a){ return (a.board?a.board.z:0); });
if (min_z.board) {
min_z = min_z.board.z - 1;
} else {
min_z = 0;
}
var my_z = _.max(this.selected_artifacts(),function(a){ (a.board?a.board.z:0); });
if (my_z.board) {
my_z = my_z.board.z - 1;
} else {
my_z = 0;
}
// TODO: move all other items up in this case?
if (min_z < 0) {
this.update_artifacts(overlapping, function(a) {
return { board: _.extend(a.board, { z: (my_z + (a.board?a.board.z:0) + 1) }) };
});
return;
}
this.update_selected_artifacts(function(a) {
return { board: _.extend(a.board, { z: min_z }) };
});
},
layout_align_left:function() {
this.begin_transaction();
var rect = this.artifact_selection_rect();
this.update_selected_artifacts(function(a) {
return { board: _.extend(a.board, { x: rect.x1 }) };
});
},
layout_align_top: function() {
this.begin_transaction();
var rect = this.artifact_selection_rect();
this.update_selected_artifacts(function(a) {
return { board: _.extend(a.board, { y: rect.y1 }) };
});
},
layout_align_right: function() {
this.begin_transaction();
var rect = this.artifact_selection_rect();
this.update_selected_artifacts(function(a) {
return { board: _.extend(a.board, { x: rect.x2 - a.board.w }) };
});
},
layout_align_bottom: function() {
this.begin_transaction();
var rect = this.artifact_selection_rect();
this.update_selected_artifacts(function(a) {
return { board: _.extend(a.board, { y: rect.y2 - a.board.h }) };
});
},
layout_align_center: function() {
this.begin_transaction();
var rect = this.artifact_selection_rect();
var cx = rect.x1 + (rect.x2-rect.x1)/2;
this.update_selected_artifacts(function(a) {
return { board: _.extend(a.board, { x: cx - a.board.w/2 }) };
});
},
layout_align_middle: function() {
this.begin_transaction();
var rect = this.artifact_selection_rect();
var cy = rect.y1 + (rect.y2-rect.y1)/2;
this.update_selected_artifacts(function(a) {
return { board: _.extend(a.board, { y: cy - a.board.h/2 }) };
});
},
layout_match_size_horiz:function() {
this.begin_transaction();
var arts = this.selected_artifacts();
if (arts.length<2) return;
var totalw = _.reduce(arts, function(sum, a) { return sum + a.board.w }, 0);
var avgw = totalw / arts.length;
this.update_selected_artifacts(function(a) {
return { board: _.extend(a.board, { w: avgw }) };
});
},
layout_match_size_vert:function() {
this.begin_transaction();
var arts = this.selected_artifacts();
if (arts.length<2) return;
var totalh = _.reduce(arts, function(sum, a) { return sum + a.board.h }, 0);
var avgh = totalh / arts.length;
this.update_selected_artifacts(function(a) {
return { board: _.extend(a.board, { h: avgh }) };
});
},
layout_match_size_both:function() {
this.layout_match_size_horiz();
this.layout_match_size_vert();
},
layout_distribute_horizontal: function() {
this.begin_transaction();
var selected = this.selected_artifacts();
if (selected.length<3) return;
var sorted = _.sortBy(selected, function(a) { return a.board.x });
var startx = sorted[0].board.x + sorted[0].board.w/2;
var stopx = _.last(sorted).board.x + _.last(sorted).board.w/2;
var step = (stopx-startx)/(sorted.length-1);
for (var i=1; i<sorted.length-1; i++) {
var a = sorted[i];
var x = startx + step*i - a.board.w/2;
this.update_artifacts([a],function(a) {
return { board: _.extend(a.board, {x: x}) }
});
}
},
layout_distribute_vertical: function() {
this.begin_transaction();
var selected = this.selected_artifacts();
if (selected.length<3) return;
var sorted = _.sortBy(selected, function(a) { return a.board.y });
var starty = sorted[0].board.y + sorted[0].board.h/2;
var stopy = _.last(sorted).board.y + _.last(sorted).board.h/2;
var step = (stopy-starty)/(sorted.length-1);
for (var i=1; i<sorted.length-1; i++) {
var a = sorted[i];
var y = starty + step*i - a.board.h/2;
this.update_artifacts([a],function(a) {
return { board: _.extend(a.board, {y: y}) }
});
}
},
layout_distribute_horizontal_spacing: function() {
this.begin_transaction();
var selected = this.selected_artifacts();
if (selected.length<3) return;
var sorted = _.sortBy(selected, function(a) { return a.board.x });
var startx = sorted[0].board.x;
var stopx = _.last(sorted).board.x + _.last(sorted).board.w;
var range = stopx - startx;
var totalw = _.reduce(sorted, function(sum, a) { return sum + a.board.w }, 0);
var avgs = (range - totalw) / (sorted.length-1);
var prevend = startx + sorted[0].board.w;
for (var i=1; i<sorted.length-1; i++) {
var a = sorted[i];
var x = prevend + avgs;
this.update_artifacts([a],function(a) {
return { board: _.extend(a.board, {x: x}) }
});
prevend = x+a.board.w;
}
},
layout_distribute_vertical_spacing: function() {
this.begin_transaction();
var selected = this.selected_artifacts();
if (selected.length<3) return;
var sorted = _.sortBy(selected, function(a) { return a.board.y });
var starty = sorted[0].board.y;
var stopy = _.last(sorted).board.y + _.last(sorted).board.h;
var range = stopy - starty;
var totalh = _.reduce(sorted, function(sum, a) { return sum + a.board.h }, 0);
var avgs = (range - totalh) / (sorted.length-1);
var prevend = starty + sorted[0].board.h;
for (var i=1; i<sorted.length-1; i++) {
var a = sorted[i];
var y = prevend + avgs;
this.update_artifacts([a],function(a) {
return { board: _.extend(a.board, {y: y}) }
});
prevend = y+a.board.h;
}
},
layout_auto: function() {
this.begin_transaction();
var selected = this.selected_artifacts();
if (selected.length<2) return;
var sorted = _.sortBy(selected, function(a) { return a.board.x+a.board.y*this.active_space.advanced.width }.bind(this));
var minx = sorted[0].board.x;
var miny = sorted[0].board.y;
var sorted = _.sortBy(selected, function(a) { return -Math.max(a.board.w,a.board.h) }.bind(this));
var blocks = [];
for (var i=0; i<sorted.length; i++) {
var a = sorted[i];
blocks.push({
w: a.board.w,
h: a.board.h,
a: a
});
}
var packer = new GrowingPacker();
packer.fit(blocks);
for (var i=0; i<blocks.length; i++) {
var block = blocks[i];
if (block.fit) {
var a = block.a;
this.update_artifacts([a],function(a) {
return { board: _.extend(a.board, {
x: minx+block.fit.x,
y: miny+block.fit.y
}) }
});
}
}
},
show_artifact_comments: function(evt) {
evt.preventDefault();
evt.stopPropagation();
var artifact = this.selected_artifacts()[0];
this.selected_artifact = artifact;
this.activate_modal('artifact');
},
create_artifact_comment: function(artifact, comment) {
var data = {
artifact_id: artifact._id,
space_id: this.active_space._id,
message: comment,
user: this.user
};
save_comment(this.active_space._id, data, function(comment) {
this.active_space_messages.push(comment);
this.artifact_comment = "";
}.bind(this), function(xhr){
console.error(xhr);
}.bind(this));
},
remove_artifact_comment: function(comment) {
delete_comment(this.active_space._id, comment._id, function(comment) {
this.active_space_messages.pop(comment);
}.bind(this), function(xhr){
console.error(xhr);
}.bind(this));
}
}
if (typeof(window) == 'undefined') {
exports.SpacedeckBoardArtifacts = SpacedeckBoardArtifacts;
}

View File

@ -0,0 +1,568 @@
/*
Spacedeck Directives
This module registers custom Vue directives for Spacedeck.
*/
function setup_directives() {
Vue.directive('clipboard', {
bind: function () {
this.clipboard = new Clipboard(".clipboard-btn");
},
update: function (value) {
},
unbind: function () {
this.clipboard.destroy()
}
});
Vue.directive('t', {
update: function (value, key) {
this.el.innerHTML = key;
}
});
if ('ontouchstart' in window) {
var edown = "touchstart";
var emove = "touchmove";
var eup = "touchend";
} else {
var edown = "mousedown";
var emove = "mousemove";
var eup = "mouseup";
}
Vue.directive('videoplayer', {
update: function (a) {
var el = this.el;
var scope = this.vm.$root;
var video = el.querySelectorAll("video")[0];
var play_button = el.querySelectorAll(".play")[0];
var pause_button = el.querySelectorAll(".pause")[0];
var stop_button = el.querySelectorAll(".stop")[0];
var player_state = "stop";
var update_view = function() {
try {
if (!a.player_view) { a.player_view = {} };
a.player_view.state = player_state;
} catch (e) {
// catch InvalidStateError
}
}
var play_func = function() {
video.play();
player_state = "playing";
update_view();
}
var pause_func = function() {
try {
video.pause();
player_state = "paused";
update_view();
} catch (e) {
// catch InvalidStateError
}
}
var stop_func = function() {
try {
player_state = "stop";
video.pause();
video.currentTime = 0;
update_view();
} catch (e) {
// catch InvalidStateError
}
}
el.addEventListener("remote_play",play_func);
el.addEventListener("remote_pause",pause_func);
el.addEventListener("remote_stop",stop_func);
play_button.addEventListener(edown, function(evt) {
try {
play_func();
spacedeck.presenter_send_media_action(a._id,"video","play",video.currentTime);
} catch (e) {
// catch InvalidStateError
}
}, false);
pause_button.addEventListener(edown, function(evt) {
pause_func();
spacedeck.presenter_send_media_action(a._id,"video","pause",video.currentTime);
}, false);
stop_button.addEventListener(edown, function(evt) {
stop_func();
spacedeck.presenter_send_media_action(a._id,"video","stop",0);
}, false);
}
});
Vue.directive('audioplayer', {
update: function (a) {
var el = this.el;
var scope = this.vm.$root;
var play_button = el.querySelectorAll(".play")[0];
var pause_button = el.querySelectorAll(".pause")[0];
var stop_button = el.querySelectorAll(".stop")[0];
var timeline = el.querySelectorAll(".timeline")[0];
var set_inpoint = el.querySelectorAll(".set-inpoint")[0];
var set_outpoint = el.querySelectorAll(".set-outpoint")[0];
var reset_points = el.querySelectorAll(".reset-points")[0];
var player_state = "stop";
var play_from = 0.0;
var play_to = 0.0;
var audio = el.querySelectorAll("audio")[0];
var update_markers = function() {
try {
if (a.meta) {
if (!a.meta.play_to) a.meta.play_to = audio.duration;
play_from = parseFloat(a.meta.play_from) || 0.0;
play_to = parseFloat(a.meta.play_to) || 0.0;
} else {
play_from = 0.0;
play_to = parseFloat(audio.duration) || 0.0;
a.meta = {};
}
} catch (e) {
// catch InvalidStateError
}
}
var update_view = function() {
try {
if (!a.player_view) { a.player_view = {} };
a.player_view.state = player_state;
a.player_view.total_time_string = format_time(audio.duration);
a.player_view.current_time_string = format_time(audio.currentTime);
a.player_view.current_time_float = audio.currentTime/audio.duration;
a.player_view.inpoint_float = play_from/audio.duration;
a.player_view.outpoint_float = play_to/audio.duration;
a.player_view.duration = audio.duration;
} catch (e) {
// catch InvalidStateError
}
}
var pause_audio = function() {
try {
audio.pause();
player_state = "paused";
} catch (e) {
// catch InvalidStateError
}
update_view();
}
var stop_audio = function() {
try {
audio.currentTime = play_from;
audio.pause();
player_state = "stop";
} catch (e) {
// catch InvalidStateError
}
update_view();
}
update_view();
audio.addEventListener("loadedmetadata", function(evt) {
update_markers();
update_view();
}, false);
audio.addEventListener("timeupdate", function(evt) {
try {
update_markers();
if (audio.currentTime >= play_to && player_state == "playing") stop_audio();
update_view();
} catch (e) {
// catch InvalidStateError
}
}, false);
var play_func = function() {
if (player_state == "stop") {
audio.currentTime = play_from;
}
player_state = "playing";
update_markers();
audio.play();
update_view();
}
var pause_func = function() {
pause_audio();
update_view();
}
var stop_func = function() {
stop_audio();
update_view();
}
el.addEventListener("remote_play",play_func);
el.addEventListener("remote_pause",pause_func);
el.addEventListener("remote_stop",stop_func);
play_button.addEventListener(edown, function(evt) {
try {
play_func();
spacedeck.presenter_send_media_action(a._id,"audio","play",audio.currentTime);
} catch (e) {
// catch InvalidStateError
}
}, false);
pause_button.addEventListener(edown, function(evt) {
pause_func();
spacedeck.presenter_send_media_action(a._id,"audio","pause",audio.currentTime);
}, false);
stop_button.addEventListener(edown, function(evt) {
stop_func();
spacedeck.presenter_send_media_action(a._id,"audio","stop",0);
}, false);
timeline.addEventListener(edown, function(evt) {
var clicked_time = (parseFloat(evt.offsetX)/evt.currentTarget.offsetWidth)*audio.duration;
if (isNaN(clicked_time)) {
clicked_time = 0.0;
}
try {
audio.currentTime = clicked_time;
} catch (e) {
// catch InvalidStateErrors
}
}, false);
set_inpoint.addEventListener(edown, function(evt) {
if (!a.meta) a.meta = {};
a.meta.play_from = audio.currentTime;
if (a.meta.play_to<a.meta.play_from) a.meta.play_to = audio.duration;
update_markers();
stop_audio();
update_view();
scope.save_artifact(a);
}, false);
set_outpoint.addEventListener(edown, function(evt) {
if (!a.meta) a.meta = {};
a.meta.play_to = audio.currentTime;
if (a.meta.play_to<a.meta.play_from) a.meta.play_from = 0.0;
update_markers();
stop_audio();
update_view();
scope.save_artifact(a);
}, false);
reset_points.addEventListener(edown, function(evt) {
if (!a.meta) a.meta = {};
a.meta.play_from = 0.0;
a.meta.play_to = audio.duration;
update_markers();
stop_audio();
update_view();
scope.save_artifact(a);
}, false);
}
});
Vue.directive('sd-richtext', {
twoWay: true,
update: function(obj) {
this.mode = 'rich';
$(this.el).addClass("text-editing");
this.medium = new Medium({
element: this.el,
mode: Medium.richMode,
attributes: {
remove: ['class','href','onclick','onmousedown','onmouseup']
},
});
this.medium.value(obj.description);
this.medium.element.addEventListener('keyup', function() {
obj.description = this.medium.value();
spacedeck.queue_artifact_for_save(obj);
}.bind(this));
spacedeck.medium_for_object[obj._id] = this.medium;
}
});
Vue.directive('focus', {
bind: function () {
var el = this.el;
window.setTimeout(function() {
if (el.contentEditable && el.contentEditable!="inherit") {
var range = document.createRange();
range.selectNodeContents(el);
} else {
el.focus();
el.select();
}
}, 500);
},
});
Vue.directive('sd-draggable', {
update: function(data) {
var el = this.el;
el.addEventListener(
'dragstart',
function(evt) {
if ($(el).find(".text-editing").length) {
// FIXME: technical debt
evt.stopPropagation();
evt.preventDefault();
return;
}
evt.dataTransfer.setData('application/json', JSON.stringify(data));
$(el).addClass("dragging");
},
false
);
}
});
Vue.directive('sd-droppable', {
isFn: true,
bind: function() {
var el = this.el;
var expression = this.expression;
var parts = expression.split(";");
var func_key = parts[0];
var data_key = parts[1];
el.addEventListener(
'dragover',
function(e) {
e.dataTransfer.dropEffect = 'copy';
// allows us to drop
if (e.preventDefault) e.preventDefault();
el.classList.add('over');
return false;
}.bind(this),
false
);
el.addEventListener(
'dragenter',
function(e) {
el.classList.add('over');
return false;
}.bind(this),
false
);
el.addEventListener(
'dragleave',
function(e) {
el.classList.remove('over');
return false;
},
false
);
el.addEventListener(
'drop',
function(e) {
e.stopPropagation();
e.preventDefault();
$(e.currentTarget).find(".over").removeClass('over');
$(e.currentTarget).find(".dragging").removeClass('dragging');
var func = this.vm.$root[func_key].bind(this.vm.$root);
if (this._scope) {
var obj = this._scope[data_key];
} else {
var obj = this.vm[data_key];
}
func(e, obj);
return false;
}.bind(this),
false
);
}
});
Vue.directive('sd-fader', {
bind: function (section) {
function clamp(v, mn, mx) {
return Math.max(mn,Math.min(mx,v));
}
var scope = this.vm.$root;
this.fader_state = "idle";
this.fader_mx = 0;
this.fader_my = 0;
var $el = $(this.el);
var handle = $el.find(".fader-selector");
var indicator = $el.find(".fader-indicator");
var constraint = $el.find(".fader-constraint");
if (!constraint.length) constraint = $el;
var fader_var_x = $el.attr("sd-fader-var-x");
var fader_var_y = $el.attr("sd-fader-var-y");
var knob_size = 0;
var minx = 0;
var miny = 0;
var maxx = 0;
var maxy = 0;
var nx = 0;
if (xfader) nx = scope.$get(fader_var_x);
var ny = 0;
if (yfader) ny = scope.$get(fader_var_y);
var xfader = !!fader_var_x;
var yfader = !!fader_var_y;
var encoder = !handle[0];
var step = parseFloat($el.attr("sd-fader-step"))||1;
var sensitivity = parseFloat($el.attr("sd-fader-sens"))||1;
var discover_minmax = function() {
minx = (parseInt($el.attr("sd-fader-min-x"))||0);
miny = (parseInt($el.attr("sd-fader-min-y"))||0);
maxx = parseInt($el.attr("sd-fader-max-x"))||(constraint.width() - 1);
maxy = parseInt($el.attr("sd-fader-max-y"))||(constraint.height() - 1);
}
var position_handle = function() {
discover_minmax();
if (!nx || isNaN(nx)) nx = 0;
if (!ny || isNaN(ny)) ny = 0;
if (handle[0]) {
if (xfader) handle[0].style.left = nx+"px";
if (yfader) handle[0].style.top = (maxy-ny)+"px";
}
if (indicator[0]) {
indicator[0].style.height = ny+"px";
}
}.bind(this);
var move_handle = function(dx,dy) {
discover_minmax();
if (xfader) {
nx = clamp(dx, minx, maxx);
scope.$set(fader_var_x, nx);
}
if (yfader) {
ny = clamp(dy, miny, maxy);
if (step<1) ny = ny.toFixed(1); // float precision hack
scope.$set(fader_var_y, ny);
}
}.bind(this);
var handle_move = function(evt) {
evt = fixup_touches(evt);
var dx = parseInt((evt.pageX - this.fader_mx) * sensitivity);
var dy = parseInt((evt.pageY - this.fader_my) * sensitivity);
dx *= step;
dy *= step;
move_handle(this.fader_oldx+dx,this.fader_oldy-dy);
}.bind(this);
var handle_up = function(evt) {
this.fader_state = "idle";
$("body").off(emove, handle_move);
$("body").off("mouseleave "+eup+" blur", handle_up);
window._sd_fader_moving = false; // signal for other event systems
}.bind(this);
function prevent_event(evt) {
evt.preventDefault();
evt.stopPropagation();
};
$el.on(edown,function(evt) {
evt.preventDefault();
evt.stopPropagation();
evt = fixup_touches(evt);
var offset = $(evt.target).offset();
this.fader_state = "drag";
if (!encoder) {
move_handle(evt.pageX-offset.left, maxy - (evt.pageY - offset.top) + knob_size/2);
}
if (yfader) {
ny = scope.$get(fader_var_y);
}
$("body").on(emove, handle_move);
$("body").on("mouseleave "+eup+" blur", handle_up);
this.fader_mx = evt.pageX;
this.fader_my = evt.pageY;
this.fader_oldx = nx||0;
this.fader_oldy = ny||0;
window._sd_fader_moving = true; // signal for other event systems
}.bind(this));
// initial state
position_handle();
if (xfader) {
scope.$watch(fader_var_x, function(a) {
nx = parseInt(scope.$get(fader_var_x));
position_handle();
});
}
if (yfader) {
scope.$watch(fader_var_y, function(a) {
ny = parseInt(scope.$get(fader_var_y));
position_handle();
});
}
},
unbind: function() {
var scope = this.vm.$root;
var $el = $(this.el);
var fader_var_x = $el.attr("sd-fader-var-x");
var fader_var_y = $el.attr("sd-fader-var-y");
}
});
}

View File

@ -0,0 +1,20 @@
/*
SpacedeckFormatting
This module contains functions dealing with Rich Text Formatting.
*/
var SpacedeckFormatting = {
apply_formatting: function(section, cmd, arg1, arg2) {
console.log("apply_formatting: ",section,cmd);
var scribe = _scribe_handle_for_object[section._id];
var command = scribe.getCommand(cmd);
if (cmd == 'createLink') {
arg1 = prompt("Link URL?");
}
scribe.el.focus();
command.execute(arg1,arg2);
}
}

View File

@ -0,0 +1,101 @@
var SpacedeckModals = {
data: {
active_modal: null,
active_account_section: "user",
active_space_profile_section: null,
account_sections: [
{
id: "user",
title: "Profile",
icon: "icon-user",
},
{
id: "language",
title: "Language",
icon: "icon-globe",
},
{
id: "email-notifications",
title: "Notifications",
icon: "icon-bell",
},
{
id: "reset-password",
title: "Password",
icon: "icon-lock-closed",
},
{
id: "remove-account",
title: "Terminate",
icon: "icon-logout",
}
],
folder_profile_sections: [
{
id: "editors",
title: "Editors",
icon: "icon-user-group",
count: 1
},
{
id: "visibility",
title: "Visibility",
icon: "icon-eye-open",
count: 1
}
],
space_profile_sections: [
{
id: "comments",
title: "Comments",
icon: "icon-messages",
count: 1
},
{
id: "history",
title: "History",
icon: "icon-history",
count: 1
},
{
id: "editors",
title: "Editors",
icon: "icon-user-group",
count: 1
},
{
id: "visibility",
title: "Visibility",
icon: "icon-eye-open",
count: 1
}
]
},
methods: {
activate_modal: function(id) {
this.active_modal = id;
if (id == "folder-settings") {
this.access_settings_space = this.active_folder;
this.access_settings_memberships = this.active_space_memberships;
this.editors_section = "list";
}
},
close_modal: function() {
this.active_modal = null;
},
activate_account_section: function(section_id) {
this.active_account_section = section_id;
},
activate_space_profile_section: function(section_id) {
this.active_space_profile_section = section_id;
}
}
}

View File

@ -0,0 +1,326 @@
/*
SpacedeckRoutes
This module contains functions dealing with Routing and View Switching.
*/
var SpacedeckRoutes = {
internal_route: function(path, on_success) {
if(!this.router) {
this.router = new RouteRecognizer();
this.router.add([
{
path: "/spaces/:id",
handler: function(params, on_success) {
this.load_space(params.id, on_success);
}.bind(this)
}
]);
this.router.add([
{
path: "/confirm/:token",
handler: function(params) {
if (!this.logged_in) {
this.redirect_to("/login");
} else {
this.confirm_account(params.token);
}
}.bind(this)
}
]);
this.router.add([
{
path: "/password-confirm/:token",
handler: function(params) {
console.log(params.token);
if (this.logged_in) {
this.redirect_to("/spaces");
} else {
this.reset_token = params.token;
this.active_view = "password-confirm";
}
}.bind(this)
}
]);
this.router.add([
{
path: "/password-reset",
handler: function(params, test) {
if (this.logged_in) {
} else {
this.active_view = "password-reset";
}
}.bind(this)
}
]);
this.router.add([
{
path: "/accept/:membership_id",
handler: function(params, test) {
if (this.logged_in) {
var invitation_token = get_query_param("code");
accept_invitation(params.membership_id, invitation_token , function(m) {
window._spacedeck_location_change = true;
location.href = "/spaces/"+m.space._id;
}.bind(this), function(xhr) {
smoke.alert("Error ("+xhr.status+")", function() {
this.redirect_to("/spaces");
}.bind(this));
}.bind(this));
} else {
this.redirect_to("/login");
}
}.bind(this)
}
]);
this.router.add([
{
path: "/signup",
handler: function(params) {
var invitation_token = get_query_param("code");
if (invitation_token) {
this.invitation_token = invitation_token;
}
if (this.logged_in) {
this.redirect_to("/spaces");
} else {
this.active_view = "signup";
}
}.bind(this)
}
]);
this.router.add([
{
path: "/login",
handler: function(params) {
if (this.logged_in) {
if(this.invitation_token) {
accept_invitation(this.accept_invitation, function(m) {
window._spacedeck_location_change = true;
location.href = "spaces/"+m.space_id;
}.bind(this), function(xhr) { console.error(xhr); });
} else {
this.redirect_to("/spaces");
}
} else {
this.active_view = "login";
token = get_query_param("code");
if (token) {
this.login_with_token(token);
}
}
}.bind(this)
}
]);
this.router.add([
{
path: "/logout",
handler: function(params) {
if (this.logged_in) {
this.logout(function(m) {
this.redirect_to("/login");
}.bind(this), function(xhr) { console.error(xhr); });
} else {
this.redirect_to("/login");
}
}.bind(this)
}
]);
this.router.add([
{
path: "/spaces",
handler: function(params) {
if (!this.logged_in) {
window._spacedeck_location_change = true;
location.href = "/login";
} else {
if (this.logged_in && this.user.home_folder_id) {
this.load_space(this.user.home_folder_id);
} else {
location.href = "/";
}
}
}.bind(this)
}
]);
this.router.add([
{
path: "/account",
handler: function(params) {
if (!this.logged_in) {
window._spacedeck_location_change = true;
location.href = "/";
} else {
this.active_view = "account";
this.load_subscription();
}
}.bind(this)
}
]);
this.router.add([
{
path: "/team",
handler: function(params) {
if (!this.logged_in) {
window._spacedeck_location_change = true;
location.href = "/";
} else {
this.active_view = "team";
this.load_team();
}
}.bind(this)
}
]);
this.router.add([
{
path: "/folders/:id",
handler: function(params) {
this.load_space(params.id, null, function(xhr) {
// on_error
console.log("couldn't load folder: "+xhr.status);
this.redirect_to("/spaces", function(){});
}.bind(this));
}.bind(this)
}
]);
this.router.add([
{
path: "/",
handler: function(params) {
location.href = "/";
}.bind(this)
}
]);
this.router.add([
{
path: "/terms",
handler: function(params) {
location.href = "/terms";
}.bind(this)
}
]);
this.router.add([
{
path: "/privacy",
handler: function(params) {
location.href = "/privacy";
}.bind(this)
}
]);
}
var foundRoute = this.router.recognize(path);
if (foundRoute) {
foundRoute[0].handler(foundRoute[0].params, on_success);
} else {
location.href = "/not_found";
}
},
route: function() {
window.onpopstate = function (event) {
event.preventDefault();
this.internal_route(location.pathname);
}.bind(this);
$("body").on("click", "a", function(event) {
// #hash
if (event.currentTarget.hash && event.currentTarget.hash.length>1) return;
console.log("clicked", event.currentTarget.pathname);
// external link?
if (event.currentTarget.host != location.host) return;
// modifier keys?
if (event.metaKey || event.ctrlKey || event.shiftKey) return;
// /t/ path
if (event.currentTarget.pathname.match(/^\/t\//)) return;
this.internal_route(event.currentTarget.pathname);
history.pushState(null, null, event.currentTarget.pathname);
event.preventDefault();
}.bind(this));
if (location.host!=ENV.webHost) {
if (!subdomainTeam) {
location.href = ENV.webEndpoint;
return;
} else {
if(subdomainTeam.subdomain) {
var realHost = (subdomainTeam.subdomain + "." + ENV.webHost);
if (location.host != realHost) {
location.href = realHost;
return;
}
} else {
location.href = ENV.webEndpoint;
return;
}
}
}
if (this.logged_in) {
if (this.user.team) {
if (this.user.team.subdomain && this.user.team.subdomain.length > 0) {
var realHost = (this.user.team.subdomain + "." + ENV.webHost);
if (location.host != realHost) {
location.href = location.protocol + "//" + realHost + location.pathname;
return;
}
}
}
}
this.internal_route(location.pathname);
},
open_url: function(url) {
window.open(url,'_blank');
},
redirect_to: function(path, on_success) {
if (on_success) {
this.internal_route(path, on_success);
history.pushState(null, null, path);
} else {
window._spacedeck_location_change = true;
location.href = path;
}
},
link_to_parent_folder: function(space_id) {
return "/folders/"+space_id;
},
link_to_space: function(space) {
return "/"+space.space_type+"s/"+space._id;
}
}

File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More